0
0
mirror of https://github.com/twbs/bootstrap.git synced 2025-02-19 16:54:24 +01:00

Merge branch 'master' into v4

Conflicts:
	.gitignore
	Gruntfile.js
	_config.yml
	dist/css/bootstrap-theme.css
	dist/css/bootstrap-theme.min.css
	dist/css/bootstrap.css
	dist/css/bootstrap.css.map
	dist/css/bootstrap.min.css
	dist/js/bootstrap.js
	dist/js/bootstrap.min.js
	docs/_includes/components/navbar.html
	docs/_includes/components/progress-bars.html
	docs/_includes/css/grid.html
	docs/_includes/css/overview.html
	docs/_includes/customizer-variables.html
	docs/_includes/getting-started/accessibility.html
	docs/_includes/getting-started/browser-device-support.html
	docs/_includes/getting-started/community.html
	docs/_includes/getting-started/disabling-responsiveness.html
	docs/_includes/getting-started/download.html
	docs/_includes/getting-started/examples.html
	docs/_includes/getting-started/license.html
	docs/_includes/getting-started/third-party-support.html
	docs/_includes/js/alerts.html
	docs/_includes/js/buttons.html
	docs/_includes/js/carousel.html
	docs/_includes/js/collapse.html
	docs/_includes/js/dropdowns.html
	docs/_includes/js/modal.html
	docs/_includes/js/popovers.html
	docs/_includes/js/scrollspy.html
	docs/_includes/js/tabs.html
	docs/_includes/js/tooltips.html
	docs/_includes/js/transitions.html
	docs/_includes/nav/javascript.html
	docs/_includes/nav/main.html
	docs/about.html
	docs/assets/css/docs.min.css
	docs/assets/css/src/docs.css
	docs/assets/js/customize.min.js
	docs/assets/js/raw-files.min.js
	docs/assets/js/src/customizer.js
	docs/dist/css/bootstrap-theme.css
	docs/dist/css/bootstrap-theme.min.css
	docs/dist/css/bootstrap.css
	docs/dist/css/bootstrap.css.map
	docs/dist/css/bootstrap.min.css
	docs/dist/js/bootstrap.js
	docs/dist/js/bootstrap.min.js
	docs/migration.html
	js/affix.js
	js/alert.js
	js/button.js
	js/carousel.js
	js/collapse.js
	js/dropdown.js
	js/modal.js
	js/popover.js
	js/scrollspy.js
	js/tab.js
	js/tests/unit/affix.js
	js/tests/unit/button.js
	js/tests/unit/carousel.js
	js/tests/unit/modal.js
	js/tests/unit/tooltip.js
	js/tests/visual/modal.html
	js/tooltip.js
	less/component-animations.less
	less/jumbotron.less
	less/mixins/background-variant.less
	less/mixins/buttons.less
	less/mixins/responsive-visibility.less
	less/mixins/text-emphasis.less
	less/navbar.less
	less/navs.less
	less/scaffolding.less
	less/tooltip.less
	less/utilities.less
	less/variables.less
	package.json
	scss/_buttons.scss
	scss/_forms.scss
	scss/_modal.scss
This commit is contained in:
Mark Otto 2015-03-29 00:08:54 -07:00
commit 58082cd83e
38 changed files with 1054 additions and 361 deletions

View File

@ -246,6 +246,9 @@ module.exports = function (grunt) {
cssmin: {
options: {
// TODO: disable `zeroUnits` optimization once clean-css 3.2 is released
// and then simplify the fix for https://github.com/twbs/bootstrap/issues/14837 accordingly
compatibility: 'ie8',
keepSpecialComments: '*',
noAdvanced: true
},
@ -341,7 +344,7 @@ module.exports = function (grunt) {
watch: {
src: {
files: '<%= jshint.core.src %>',
tasks: ['jshint:src', 'qunit', 'concat']
tasks: ['jshint:core', 'qunit', 'concat']
},
test: {
files: '<%= jshint.test.src %>',

View File

@ -23,13 +23,14 @@ To get started, check out <http://getbootstrap.com>!
## Quick start
Four quick start options are available:
Several quick start options are available:
- [Download the latest release](https://github.com/twbs/bootstrap/archive/v3.3.2.zip).
- [Download the latest release](https://github.com/twbs/bootstrap/archive/v3.3.4.zip).
- Clone the repo: `git clone https://github.com/twbs/bootstrap.git`.
- Install with [Bower](http://bower.io): `bower install bootstrap`.
- Install with [npm](https://www.npmjs.com): `npm install bootstrap`.
- Install with [Meteor](https://www.meteor.com/): `meteor add twbs:bootstrap`.
- Install with [Meteor](https://www.meteor.com): `meteor add twbs:bootstrap`.
- Install with [Composer](https://getcomposer.org): `composer require twbs/bootstrap`.
Read the [Getting started page](http://getbootstrap.com/getting-started/) for information on the framework contents, templates and examples, and more.
@ -83,7 +84,7 @@ Documentation for v2.3.2 has been made available for the time being at <http://g
Please read through our [contributing guidelines](https://github.com/twbs/bootstrap/blob/master/CONTRIBUTING.md). Included are directions for opening issues, coding standards, and notes on development.
Moreover, if your pull request contains JavaScript patches or features, you must include relevant unit tests. All HTML and CSS should conform to the [Code Guide](https://github.com/mdo/code-guide), maintained by [Mark Otto](https://github.com/mdo).
Moreover, if your pull request contains JavaScript patches or features, you must include [relevant unit tests](https://github.com/twbs/bootstrap/tree/master/js/tests). All HTML and CSS should conform to the [Code Guide](https://github.com/mdo/code-guide), maintained by [Mark Otto](https://github.com/mdo).
Editor preferences are available in the [editor config](https://github.com/twbs/bootstrap/blob/master/.editorconfig) for easy use in common text editors. Read more and download plugins at <http://editorconfig.org>.
@ -97,7 +98,7 @@ Keep track of development and community news.
- Read and subscribe to [The Official Bootstrap Blog](http://blog.getbootstrap.com).
- Chat with fellow Bootstrappers in IRC. On the `irc.freenode.net` server, in the `##bootstrap` channel.
- Implementation help may be found at Stack Overflow (tagged [`twitter-bootstrap-3`](http://stackoverflow.com/questions/tagged/twitter-bootstrap-3)).
- Developers should use the keyword `bootstrap` on packages which modify or add to the functionality of Bootstrap when distributing through [npm](https://www.npmjs.com/browse/keyword/twbs-bootstrap) or similar delivery mechanisms for maximum discoverability.
- Developers should use the keyword `bootstrap` on packages which modify or add to the functionality of Bootstrap when distributing through [npm](https://www.npmjs.com/browse/keyword/bootstrap) or similar delivery mechanisms for maximum discoverability.

View File

@ -24,16 +24,16 @@ repo: https://github.com/twbs/bootstrap
sass_repo: https://github.com/twbs/bootstrap-sass
download:
source: https://github.com/twbs/bootstrap/archive/v3.3.2.zip
dist: https://github.com/twbs/bootstrap/releases/download/v3.3.2/bootstrap-3.3.2-dist.zip
sass: https://github.com/twbs/bootstrap-sass/archive/v3.3.2.tar.gz
source: https://github.com/twbs/bootstrap/archive/v3.3.4.zip
dist: https://github.com/twbs/bootstrap/releases/download/v3.3.4/bootstrap-3.3.4-dist.zip
sass: https://github.com/twbs/bootstrap-sass/archive/v3.3.4.tar.gz
blog: http://blog.getbootstrap.com
expo: http://expo.getbootstrap.com
cdn:
css: https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css
js: https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js
css: https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css
js: https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js
jquery: //code.jquery.com/jquery-2.1.1.min.js
bug:

View File

@ -1,7 +1,7 @@
{
"name": "bootstrap",
"description": "The most popular front-end framework for developing responsive, mobile first projects on the web.",
"version": "3.3.2",
"version": "3.3.4",
"keywords": [
"css",
"js",

View File

@ -118,6 +118,16 @@
origin: >
Bootstrap#14409
-
browser: >
Chrome
summary: >
`:focus` `outline` style causes cursor to not be displayed when toggling a `readonly` `<input>` to read-write.
upstream_bug: >
Chromium#465274
origin: >
Bootstrap#16022
-
browser: >
Chrome (Windows & Linux)

View File

@ -42,3 +42,8 @@
code: uk
description: Bootstrap українською
url: http://twbs.docs.org.ua
- name: Vietnamese
code: vi
description: Bootstrap bằng tiếng Việt
url: http://getbootstrap.com.vn

View File

@ -7,4 +7,4 @@ Originally created by a designer and a developer at Twitter, Bootstrap has becom
Bootstrap was created at Twitter in mid-2010 by [@mdo](https://twitter.com/mdo) and [@fat](https://twitter.com/fat). Prior to being an open-sourced framework, Bootstrap was known as _Twitter Blueprint_. A few months into development, Twitter held its [first Hack Week](https://blog.twitter.com/2010/hack-week) and the project exploded as developers of all skill levels jumped in without any external guidance. It served as the style guide for internal tools development at the company for over a year before its public release, and continues to do so today.
Originally [released](https://dev.twitter.com/blog/bootstrap-twitter) on [<time datetime="2011-08-19 11:25">Friday, August 19, 2011</time>](https://twitter.com/mdo/statuses/104620039650557952), we've since had over [twenty releases](https://github.com/twbs/bootstrap/releases), including two major rewrites with v2 and v3. With Bootstrap 2, we added responsive functionality to the entire framework as an optional stylesheet. Building on that with Bootstrap 3, we rewrote the library once more to make it responsive by default with a mobile first approach.
Originally [released](https://blog.twitter.com/2011/bootstrap-twitter) on [<time datetime="2011-08-19 11:25">Friday, August 19, 2011</time>](https://twitter.com/mdo/statuses/104620039650557952), we've since had over [twenty releases](https://github.com/twbs/bootstrap/releases), including two major rewrites with v2 and v3. With Bootstrap 2, we added responsive functionality to the entire framework as an optional stylesheet. Building on that with Bootstrap 3, we rewrote the library once more to make it responsive by default with a mobile first approach.

View File

@ -5,7 +5,7 @@ title: Accessibility
Bootstrap follows common web standards and—with minimal extra effort—can be used to create sites that are accessible to those using <abbr title="Assistive Technology" class="initialism">AT</abbr>.
### Skip navigation
## Skip navigation
If your navigation contains many links and comes before the main content in the DOM, add a `Skip to main content` link before the navigation (for a simple explanation, see this [A11Y Project article on skip navigation links](http://a11yproject.com/posts/skip-nav-links/)). Using the `.sr-only` class will visually hide the skip link, and the <code>.sr-only-focusable</code> class will ensure that the link becomes visible once focused (for sighted keyboard users).
@ -25,13 +25,13 @@ If your navigation contains many links and comes before the main content in the
</body>
{% endhighlight %}
### Nested headings
## Nested headings
When nesting headings (`<h1>` - `<h6>`), your primary document header should be an `<h1>`. Subsequent headings should make logical use of `<h2>` - `<h6>` such that screen readers can construct a table of contents for your pages.
Learn more at [HTML CodeSniffer](http://squizlabs.github.io/HTML_CodeSniffer/Standards/Section508/) and [Penn State's Accessability](http://accessibility.psu.edu/headings).
### Additional resources
## Additional resources
- ["HTML Codesniffer" bookmarklet for identifying accessibility issues](https://github.com/squizlabs/HTML_CodeSniffer)
- [The A11Y Project](http://a11yproject.com/)

View File

@ -54,6 +54,19 @@ Bootstrap's `package.json` contains some additional metadata under the following
- `less` - path to Bootstrap's main [Less](http://lesscss.org) source file
- `style` - path to Bootstrap's non-minified CSS that's been precompiled using the default settings (no customization)
### Meteor
{% highlight bash %}
$ meteor add twbs:bootstrap
{% endhighlight %}
### Composer
{% highlight bash %}
$ composer require twbs/bootstrap
{% endhighlight %}
### Autoprefixer required
Bootstrap uses [Autoprefixer](https://github.com/postcss/autoprefixer) to deal with [CSS vendor prefixes](http://webdesign.about.com/od/css/a/css-vendor-prefixes.htm). If you're compiling Bootstrap from its source Sass and not using our Gruntfile, you'll need to integrate Autoprefixer into your build process yourself. If you're using precompiled Bootstrap or using our Gruntfile, you don't need to worry about this as Autoprefixer is already integrated into our Gruntfile.

View File

@ -5,7 +5,7 @@ title: Supported platforms
Bootstrap is built to work best with the latest techniques. As such, older desktop and mobile browsers may display differently, but should remain fully functional.
### Supported browsers
## Supported browsers
Bootstrap supports the **latest, stable releases** of all major browsers and platforms. On Windows, **we support Internet Explorer 9-11**. More specific support information is provided below.
@ -65,7 +65,7 @@ Unofficially, Bootstrap should look and behave well enough in Chromium and Chrom
For a list of some of the browser bugs that Bootstrap has to grapple with, see our [Wall of browser bugs](../browser-bugs/).
### Internet Explorer 9
## Internet Explorer 9
Internet Explorer 9 is also supported, however, please be aware that some CSS3 properties and HTML5 elements are not fully supported.
@ -104,7 +104,7 @@ Internet Explorer 9 is also supported, however, please be aware that some CSS3 p
Visit [Can I use...](http://caniuse.com/) for details on browser support of CSS3 and HTML5 features.
### Supporting Internet Explorer 8
## Supporting Internet Explorer 8
As of v4, Bootstrap no longer supports IE8. **If you require IE8 support, we recommend you use Bootstrap 3.** It's still supported by our team for bugfixes and documentation changes, but no new features will be added to it.
@ -114,7 +114,7 @@ Alternatively, you can add the some third party JavaScript to backfill support f
* [Respond.js](https://github.com/scottjehl/Respond)
* [Rem unit polyfill](https://github.com/chuckcarpenter/REM-unit-polyfill)
### IE Compatibility modes
## IE Compatibility modes
Bootstrap is not supported in the old Internet Explorer compatibility modes. To be sure you're using the latest rendering mode for IE, consider including the appropriate `<meta>` tag in your pages:
@ -128,7 +128,7 @@ This tag is included in all of Bootstrap's documentation and examples to ensure
See [this StackOverflow question](http://stackoverflow.com/questions/6771258/whats-the-difference-if-meta-http-equiv-x-ua-compatible-content-ie-edge) for more information.
### Internet Explorer 10 in Windows Phone 8
## Internet Explorer 10 in Windows Phone 8
Internet Explorer 10 in Windows Phone 8 versions older than [Update 3 (a.k.a. GDR3)](http://blogs.windows.com/windows_phone/b/wpdev/archive/2013/10/14/introducing-windows-phone-preview-for-developers.aspx) doesn't differentiate **device width** from **viewport width** in `@-ms-viewport` at-rules, and thus doesn't properly apply the media queries in Bootstrap's CSS. To address this, you'll need to **include the following JavaScript to work around the bug**.
@ -148,30 +148,30 @@ For more information and usage guidelines, read [Windows Phone 8 and Device-Widt
As a heads up, we include this in all of Bootstrap's documentation and examples as a demonstration.
### Modals, navbars, and virtual keyboards
## Modals, navbars, and virtual keyboards
#### Overflow and scrolling
### Overflow and scrolling
Support for `overflow: hidden;` on the `<body>` element is quite limited in iOS and Android. To that end, when you scroll past the top or bottom of a modal in either of those devices' browsers, the `<body>` content will begin to scroll.
#### Virtual keyboards
### Virtual keyboards
Also, note that if you're using a fixed navbar or using inputs within a modal, iOS has a rendering bug that doesn't update the position of fixed elements when the virtual keyboard is triggered. A few workarounds for this include transforming your elements to `position: absolute;` or invoking a timer on focus to try to correct the positioning manually. This is not handled by Bootstrap, so it is up to you to decide which solution is best for your application.
#### Navbar Dropdowns
### Navbar Dropdowns
The `.dropdown-backdrop` element isn't used on iOS in the nav because of the complexity of z-indexing. Thus, to close dropdowns in navbars, you must directly click the dropdown element (or [any other element which will fire a click event in iOS](https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile)).
### Browser zooming
## Browser zooming
Page zooming inevitably presents rendering artifacts in some components, both in Bootstrap and the rest of the web. Depending on the issue, we may be able to fix it (search first and then open an issue if need be). However, we tend to ignore these as they often have no direct solution other than hacky workarounds.
### Sticky `:hover`/`:focus` on mobile
## Sticky `:hover`/`:focus` on mobile
Even though real hovering isn't possible on most touchscreens, most mobile browsers emulate hovering support and make `:hover` "sticky". In other words, `:hover` styles start applying after tapping an element and only stop applying after the user taps some other element. On mobile-first sites, this behavior is normally undesirable.
Bootstrap includes a workaround for this, although it is disabled by default. By setting `$use-hover-media-query` to `true` when compiling from Sass, Bootstrap will use [mq4-hover-shim](https://github.com/twbs/mq4-hover-shim) to disable `:hover` styles in browsers that emulate hovering, thus preventing sticky `:hover` styles. There are some caveats to this workaround; see the shim's documentation for details.
### Printing
## Printing
Even in some modern browsers, printing can be quirky.
@ -187,7 +187,7 @@ Also, as of Safari v8.0, fixed-width <code>.container</code>s can cause Safari t
}
{% endhighlight %}
### Android stock browser
## Android stock browser
Out of the box, Android 4.1 (and even some newer releases apparently) ship with the Browser app as the default web browser of choice (as opposed to Chrome). Unfortunately, the Browser app has lots of bugs and inconsistencies with CSS in general.
@ -209,7 +209,7 @@ $(function () {
Want to see an example? [Check out this JS Bin demo.](http://jsbin.com/OyaqoDO/2)
### Validators
## Validators
In order to provide the best possible experience to old and buggy browsers, Bootstrap uses [CSS browser hacks](http://browserhacks.com) in several places to target special CSS to certain browser versions in order to work around bugs in the browsers themselves. These hacks understandably cause CSS validators to complain that they are invalid. In a couple places, we also use bleeding-edge CSS features that aren't yet fully standardized, but these are used purely for progressive enhancement.

View File

@ -5,7 +5,7 @@ title: Third party support
While we don't officially support any third party plugins or add-ons, we do offer some useful advice to help avoid potential issues in your projects.
### Box-sizing
## Box-sizing
Some third-party software, including Google Maps and Google Custom Search Engine, conflict with Bootstrap due to `* { box-sizing: border-box; }`, a rule which makes it so `padding` does not affect the final computed width of an element. These widgets expect the box model to be `content-box` instead. Learn more about [box model and sizing at CSS Tricks](http://css-tricks.com/box-sizing/).

View File

@ -8,6 +8,7 @@
"disallowSpaceAfterPrefixUnaryOperators": ["++", "--", "+", "-", "~", "!"],
"disallowSpaceBeforeBinaryOperators": [","],
"disallowSpaceBeforePostfixUnaryOperators": ["++", "--"],
"disallowSpacesInFunctionDeclaration": { "beforeOpeningRoundBrace": true },
"disallowSpacesInNamedFunctionExpression": { "beforeOpeningRoundBrace": true },
"disallowSpacesInsideArrayBrackets": true,
"disallowSpacesInsideParentheses": true,

61
js/tests/README.md Normal file
View File

@ -0,0 +1,61 @@
## How does Bootstrap's test suite work?
Bootstrap uses [QUnit](http://api.qunitjs.com/), a powerful, easy-to-use JavaScript unit test framework. Each plugin has a file dedicated to its tests in `unit/<plugin-name>.js`.
* `unit/` contains the unit test files for each Bootstrap plugin.
* `vendor/` contains third-party testing-related code (QUnit and jQuery).
* `visual/` contains "visual" tests which are run interactively in real browsers and require manual verification by humans.
To run the unit test suite via [PhantomJS](http://phantomjs.org/), run `grunt test-js`.
To run the unit test suite via a real web browser, open `index.html` in the browser.
## How do I add a new unit test?
1. Locate and open the file dedicated to the plugin which you need to add tests to (`unit/<plugin-name>.js`).
2. Review the [QUnit API Documentation](http://api.qunitjs.com/) and use the existing tests as references for how to structure your new tests.
3. Write the necessary unit test(s) for the new or revised functionality.
4. Run `grunt test-js` to see the results of your newly-added test(s).
**Note:** Your new unit tests should fail before your changes are applied to the plugin, and should pass after your changes are applied to the plugin.
## What should a unit test look like?
* Each test should have a unique name clearly stating what unit is being tested.
* Each test should test only one unit per test, although one test can include several assertions. Create multiple tests for multiple units of functionality.
* Each test should begin with [`assert.expect`](http://api.qunitjs.com/expect/) to ensure that the expected assertions are run.
* Each test should follow the project's [JavaScript Code Guidelines](https://github.com/twbs/bootstrap/blob/master/CONTRIBUTING.md#js)
### Example tests
```javascript
// Synchronous test
QUnit.test('should describe the unit being tested', function (assert) {
assert.expect(1)
var templateHTML = '<div class="alert alert-danger fade in">'
+ '<a class="close" href="#" data-dismiss="alert">×</a>'
+ '<p><strong>Template necessary for the test.</p>'
+ '</div>'
var $alert = $(templateHTML).appendTo('#qunit-fixture').bootstrapAlert()
$alert.find('.close').click()
// Make assertion
assert.strictEqual($alert.hasClass('in'), false, 'remove .in class on .close click')
})
// Asynchronous test
QUnit.test('should describe the unit being tested', function (assert) {
assert.expect(1)
var done = assert.async()
$('<div title="tooltip title"></div>')
.appendTo('#qunit-fixture')
.on('shown.bs.tooltip', function () {
assert.ok(true, '"shown" event was fired after calling "show"')
done()
})
.bootstrapTooltip('show')
})
```

View File

@ -7,19 +7,55 @@
<!-- jQuery -->
<script src="vendor/jquery.min.js"></script>
<script>
// Disable jQuery event aliases to ensure we don't accidentally use any of them
(function () {
var eventAliases = [
'blur',
'focus',
'focusin',
'focusout',
'load',
'resize',
'scroll',
'unload',
'click',
'dblclick',
'mousedown',
'mouseup',
'mousemove',
'mouseover',
'mouseout',
'mouseenter',
'mouseleave',
'change',
'select',
'submit',
'keydown',
'keypress',
'keyup',
'error',
'contextmenu',
'hover',
'bind',
'unbind',
'delegate',
'undelegate'
]
for (var i = 0; i < eventAliases.length; i++) {
$.fn[eventAliases[i]] = undefined
}
})()
</script>
<!-- QUnit -->
<link rel="stylesheet" href="vendor/qunit.css" media="screen">
<script src="vendor/qunit.js"></script>
<style>
#qunit-fixture {
top: 0;
left: 0;
}
</style>
<script>
// See https://github.com/axemclion/grunt-saucelabs#test-result-details-with-qunit
var log = []
// Require assert.expect in each test.
QUnit.config.requireExpects = true
QUnit.done(function (testResults) {
var tests = []
for (var i = 0, len = log.length; i < len; i++) {
@ -52,6 +88,45 @@
$('#qunit-fixture').empty()
$('#modal-test, .modal-backdrop').remove()
})
// Display fixture on-screen on iOS to avoid false positives
if (/iPhone|iPad|iPod/.test(navigator.userAgent)) {
QUnit.begin(function() {
$('#qunit-fixture').css({ top: 0, left: 0 })
})
QUnit.done(function () {
$('#qunit-fixture').css({ top: '', left: '' })
})
}
// Disable deprecated global QUnit method aliases in preparation for QUnit v2
(function () {
var methodNames = [
'async',
'asyncTest',
'deepEqual',
'equal',
'expect',
'module',
'notDeepEqual',
'notEqual',
'notPropEqual',
'notStrictEqual',
'ok',
'propEqual',
'push',
'start',
'stop',
'strictEqual',
'test',
'throws'
];
for (var i = 0; i < methodNames.length; i++) {
var methodName = methodNames[i];
window[methodName] = undefined;
}
})();
</script>
<!-- Plugin sources -->

View File

@ -1,5 +1,6 @@
{
"extends" : "../../.jshintrc",
"devel" : true,
"es3" : false,
"qunit" : true
}

View File

@ -4,6 +4,7 @@ $(function () {
QUnit.module('alert plugin')
QUnit.test('should be defined on jquery object', function (assert) {
assert.expect(1)
assert.ok($(document.body).alert, 'alert method is defined')
})
@ -19,10 +20,12 @@ $(function () {
})
QUnit.test('should provide no conflict', function (assert) {
assert.expect(1)
assert.strictEqual($.fn.alert, undefined, 'alert was set back to undefined (org value)')
})
QUnit.test('should return jquery collection containing the element', function (assert) {
assert.expect(2)
var $el = $('<div/>')
var $alert = $el.bootstrapAlert()
assert.ok($alert instanceof $, 'returns jquery collection')
@ -30,18 +33,20 @@ $(function () {
})
QUnit.test('should fade element out on clicking .close', function (assert) {
assert.expect(1)
var alertHTML = '<div class="alert alert-danger fade in">'
+ '<a class="close" href="#" data-dismiss="alert">×</a>'
+ '<p><strong>Holy guacamole!</strong> Best check yo self, you\'re not looking too good.</p>'
+ '</div>'
var $alert = $(alertHTML).bootstrapAlert()
$alert.find('.close').click()
$alert.find('.close').trigger('click')
assert.strictEqual($alert.hasClass('in'), false, 'remove .in class on .close click')
})
QUnit.test('should remove element when clicking .close', function (assert) {
assert.expect(2)
var alertHTML = '<div class="alert alert-danger fade in">'
+ '<a class="close" href="#" data-dismiss="alert">×</a>'
+ '<p><strong>Holy guacamole!</strong> Best check yo self, you\'re not looking too good.</p>'
@ -50,12 +55,13 @@ $(function () {
assert.notEqual($('#qunit-fixture').find('.alert').length, 0, 'element added to dom')
$alert.find('.close').click()
$alert.find('.close').trigger('click')
assert.strictEqual($('#qunit-fixture').find('.alert').length, 0, 'element removed from dom')
})
QUnit.test('should not fire closed when close is prevented', function (assert) {
assert.expect(1)
var done = assert.async()
$('<div class="alert"/>')
.on('close.bs.alert', function (e) {

View File

@ -4,6 +4,7 @@ $(function () {
QUnit.module('collapse plugin')
QUnit.test('should be defined on jquery object', function (assert) {
assert.expect(1)
assert.ok($(document.body).collapse, 'collapse method is defined')
})
@ -19,10 +20,12 @@ $(function () {
})
QUnit.test('should provide no conflict', function (assert) {
assert.expect(1)
assert.strictEqual($.fn.collapse, undefined, 'collapse was set back to undefined (org value)')
})
QUnit.test('should return jquery collection containing the element', function (assert) {
assert.expect(2)
var $el = $('<div/>')
var $collapse = $el.bootstrapCollapse()
assert.ok($collapse instanceof $, 'returns jquery collection')
@ -30,6 +33,7 @@ $(function () {
})
QUnit.test('should show a collapsed element', function (assert) {
assert.expect(2)
var $el = $('<div class="collapse"/>').bootstrapCollapse('show')
assert.ok($el.hasClass('in'), 'has class "in"')
@ -37,13 +41,14 @@ $(function () {
})
QUnit.test('should hide a collapsed element', function (assert) {
assert.expect(1)
var $el = $('<div class="collapse"/>').bootstrapCollapse('hide')
assert.ok(!$el.hasClass('in'), 'does not have class "in"')
assert.ok(/height/i.test($el.attr('style')), 'has height set')
})
QUnit.test('should not fire shown when show is prevented', function (assert) {
assert.expect(1)
var done = assert.async()
$('<div class="collapse"/>')
@ -59,6 +64,7 @@ $(function () {
})
QUnit.test('should reset style to auto after finishing opening collapse', function (assert) {
assert.expect(2)
var done = assert.async()
$('<div class="collapse" style="height: 0px"/>')
@ -73,9 +79,10 @@ $(function () {
})
QUnit.test('should remove "collapsed" class from target when collapse is shown', function (assert) {
assert.expect(1)
var done = assert.async()
var $target = $('<a data-toggle="collapse" class="collapsed" href="#test1"/>').appendTo('#qunit-fixture')
var $target = $('<a role="button" data-toggle="collapse" class="collapsed" href="#test1"/>').appendTo('#qunit-fixture')
$('<div id="test1"/>')
.appendTo('#qunit-fixture')
@ -84,13 +91,14 @@ $(function () {
done()
})
$target.click()
$target.trigger('click')
})
QUnit.test('should add "collapsed" class to target when collapse is hidden', function (assert) {
assert.expect(1)
var done = assert.async()
var $target = $('<a data-toggle="collapse" href="#test1"/>').appendTo('#qunit-fixture')
var $target = $('<a role="button" data-toggle="collapse" href="#test1"/>').appendTo('#qunit-fixture')
$('<div id="test1" class="in"/>')
.appendTo('#qunit-fixture')
@ -99,14 +107,15 @@ $(function () {
done()
})
$target.click()
$target.trigger('click')
})
QUnit.test('should remove "collapsed" class from all triggers targeting the collapse when the collapse is shown', function (assert) {
assert.expect(2)
var done = assert.async()
var $target = $('<a data-toggle="collapse" class="collapsed" href="#test1"/>').appendTo('#qunit-fixture')
var $alt = $('<a data-toggle="collapse" class="collapsed" href="#test1"/>').appendTo('#qunit-fixture')
var $target = $('<a role="button" data-toggle="collapse" class="collapsed" href="#test1"/>').appendTo('#qunit-fixture')
var $alt = $('<a role="button" data-toggle="collapse" class="collapsed" href="#test1"/>').appendTo('#qunit-fixture')
$('<div id="test1"/>')
.appendTo('#qunit-fixture')
@ -116,14 +125,15 @@ $(function () {
done()
})
$target.click()
$target.trigger('click')
})
QUnit.test('should add "collapsed" class to all triggers targeting the collapse when the collapse is hidden', function (assert) {
assert.expect(2)
var done = assert.async()
var $target = $('<a data-toggle="collapse" href="#test1"/>').appendTo('#qunit-fixture')
var $alt = $('<a data-toggle="collapse" href="#test1"/>').appendTo('#qunit-fixture')
var $target = $('<a role="button" data-toggle="collapse" href="#test1"/>').appendTo('#qunit-fixture')
var $alt = $('<a role="button" data-toggle="collapse" href="#test1"/>').appendTo('#qunit-fixture')
$('<div id="test1" class="in"/>')
.appendTo('#qunit-fixture')
@ -133,13 +143,12 @@ $(function () {
done()
})
$target.click()
$target.trigger('click')
})
QUnit.test('should not close a collapse when initialized with "show" if already shown', function (assert) {
var done = assert.async()
QUnit.test('should not close a collapse when initialized with "show" option if already shown', function (assert) {
assert.expect(0)
var done = assert.async()
var $test = $('<div id="test1" class="in"/>')
.appendTo('#qunit-fixture')
@ -152,10 +161,9 @@ $(function () {
setTimeout(done, 0)
})
QUnit.test('should open a collapse when initialized with "show" if not already shown', function (assert) {
var done = assert.async()
QUnit.test('should open a collapse when initialized with "show" option if not already shown', function (assert) {
assert.expect(1)
var done = assert.async()
var $test = $('<div id="test1" />')
.appendTo('#qunit-fixture')
@ -168,7 +176,36 @@ $(function () {
setTimeout(done, 0)
})
QUnit.test('should not show a collapse when initialized with "hide" option if already hidden', function (assert) {
assert.expect(0)
var done = assert.async()
$('<div class="collapse"></div>')
.appendTo('#qunit-fixture')
.on('show.bs.collapse', function () {
assert.ok(false, 'showing a previously-uninitialized hidden collapse when the "hide" method is called')
})
.bootstrapCollapse('hide')
setTimeout(done, 0)
})
QUnit.test('should hide a collapse when initialized with "hide" option if not already hidden', function (assert) {
assert.expect(1)
var done = assert.async()
$('<div class="collapse in"></div>')
.appendTo('#qunit-fixture')
.on('hide.bs.collapse', function () {
assert.ok(true, 'hiding a previously-uninitialized shown collapse when the "hide" method is called')
})
.bootstrapCollapse('hide')
setTimeout(done, 0)
})
QUnit.test('should remove "collapsed" class from active accordion target', function (assert) {
assert.expect(3)
var done = assert.async()
var accordionHTML = '<div class="panel-group" id="accordion">'
@ -178,15 +215,15 @@ $(function () {
+ '</div>'
var $groups = $(accordionHTML).appendTo('#qunit-fixture').find('.panel')
var $target1 = $('<a data-toggle="collapse" href="#body1" data-parent="#accordion"/>').appendTo($groups.eq(0))
var $target1 = $('<a role="button" data-toggle="collapse" href="#body1" data-parent="#accordion"/>').appendTo($groups.eq(0))
$('<div id="body1" class="in"/>').appendTo($groups.eq(0))
var $target2 = $('<a class="collapsed" data-toggle="collapse" href="#body2" data-parent="#accordion"/>').appendTo($groups.eq(1))
var $target2 = $('<a class="collapsed" data-toggle="collapse" role="button" href="#body2" data-parent="#accordion"/>').appendTo($groups.eq(1))
$('<div id="body2"/>').appendTo($groups.eq(1))
var $target3 = $('<a class="collapsed" data-toggle="collapse" href="#body3" data-parent="#accordion"/>').appendTo($groups.eq(2))
var $target3 = $('<a class="collapsed" data-toggle="collapse" role="button" href="#body3" data-parent="#accordion"/>').appendTo($groups.eq(2))
$('<div id="body3"/>')
.appendTo($groups.eq(2))
@ -198,10 +235,11 @@ $(function () {
done()
})
$target3.click()
$target3.trigger('click')
})
QUnit.test('should allow dots in data-parent', function (assert) {
assert.expect(3)
var done = assert.async()
var accordionHTML = '<div class="panel-group accordion">'
@ -211,15 +249,15 @@ $(function () {
+ '</div>'
var $groups = $(accordionHTML).appendTo('#qunit-fixture').find('.panel')
var $target1 = $('<a data-toggle="collapse" href="#body1" data-parent=".accordion"/>').appendTo($groups.eq(0))
var $target1 = $('<a role="button" data-toggle="collapse" href="#body1" data-parent=".accordion"/>').appendTo($groups.eq(0))
$('<div id="body1" class="in"/>').appendTo($groups.eq(0))
var $target2 = $('<a class="collapsed" data-toggle="collapse" href="#body2" data-parent=".accordion"/>').appendTo($groups.eq(1))
var $target2 = $('<a class="collapsed" data-toggle="collapse" role="button" href="#body2" data-parent=".accordion"/>').appendTo($groups.eq(1))
$('<div id="body2"/>').appendTo($groups.eq(1))
var $target3 = $('<a class="collapsed" data-toggle="collapse" href="#body3" data-parent=".accordion"/>').appendTo($groups.eq(2))
var $target3 = $('<a class="collapsed" data-toggle="collapse" role="button" href="#body3" data-parent=".accordion"/>').appendTo($groups.eq(2))
$('<div id="body3"/>')
.appendTo($groups.eq(2))
@ -231,13 +269,14 @@ $(function () {
done()
})
$target3.click()
$target3.trigger('click')
})
QUnit.test('should set aria-expanded="true" on target when collapse is shown', function (assert) {
assert.expect(1)
var done = assert.async()
var $target = $('<a data-toggle="collapse" class="collapsed" href="#test1" aria-expanded="false"/>').appendTo('#qunit-fixture')
var $target = $('<a role="button" data-toggle="collapse" class="collapsed" href="#test1" aria-expanded="false"/>').appendTo('#qunit-fixture')
$('<div id="test1"/>')
.appendTo('#qunit-fixture')
@ -246,13 +285,14 @@ $(function () {
done()
})
$target.click()
$target.trigger('click')
})
QUnit.test('should set aria-expanded="false" on target when collapse is hidden', function (assert) {
assert.expect(1)
var done = assert.async()
var $target = $('<a data-toggle="collapse" href="#test1" aria-expanded="true"/>').appendTo('#qunit-fixture')
var $target = $('<a role="button" data-toggle="collapse" href="#test1" aria-expanded="true"/>').appendTo('#qunit-fixture')
$('<div id="test1" class="in"/>')
.appendTo('#qunit-fixture')
@ -261,14 +301,15 @@ $(function () {
done()
})
$target.click()
$target.trigger('click')
})
QUnit.test('should set aria-expanded="true" on all triggers targeting the collapse when the collapse is shown', function (assert) {
assert.expect(2)
var done = assert.async()
var $target = $('<a data-toggle="collapse" class="collapsed" href="#test1" aria-expanded="false"/>').appendTo('#qunit-fixture')
var $alt = $('<a data-toggle="collapse" class="collapsed" href="#test1" aria-expanded="false"/>').appendTo('#qunit-fixture')
var $target = $('<a role="button" data-toggle="collapse" class="collapsed" href="#test1" aria-expanded="false"/>').appendTo('#qunit-fixture')
var $alt = $('<a role="button" data-toggle="collapse" class="collapsed" href="#test1" aria-expanded="false"/>').appendTo('#qunit-fixture')
$('<div id="test1"/>')
.appendTo('#qunit-fixture')
@ -278,14 +319,15 @@ $(function () {
done()
})
$target.click()
$target.trigger('click')
})
QUnit.test('should set aria-expanded="false" on all triggers targeting the collapse when the collapse is hidden', function (assert) {
assert.expect(2)
var done = assert.async()
var $target = $('<a data-toggle="collapse" href="#test1" aria-expanded="true"/>').appendTo('#qunit-fixture')
var $alt = $('<a data-toggle="collapse" href="#test1" aria-expanded="true"/>').appendTo('#qunit-fixture')
var $target = $('<a role="button" data-toggle="collapse" href="#test1" aria-expanded="true"/>').appendTo('#qunit-fixture')
var $alt = $('<a role="button" data-toggle="collapse" href="#test1" aria-expanded="true"/>').appendTo('#qunit-fixture')
$('<div id="test1" class="in"/>')
.appendTo('#qunit-fixture')
@ -295,10 +337,11 @@ $(function () {
done()
})
$target.click()
$target.trigger('click')
})
QUnit.test('should change aria-expanded from active accordion target to "false" and set the newly active one to "true"', function (assert) {
assert.expect(3)
var done = assert.async()
var accordionHTML = '<div class="panel-group" id="accordion">'
@ -308,15 +351,15 @@ $(function () {
+ '</div>'
var $groups = $(accordionHTML).appendTo('#qunit-fixture').find('.panel')
var $target1 = $('<a data-toggle="collapse" href="#body1" data-parent="#accordion"/>').appendTo($groups.eq(0))
var $target1 = $('<a role="button" data-toggle="collapse" href="#body1" data-parent="#accordion"/>').appendTo($groups.eq(0))
$('<div id="body1" aria-expanded="true" class="in"/>').appendTo($groups.eq(0))
var $target2 = $('<a class="collapsed" data-toggle="collapse" href="#body2" data-parent="#accordion"/>').appendTo($groups.eq(1))
var $target2 = $('<a class="collapsed" data-toggle="collapse" role="button" href="#body2" data-parent="#accordion"/>').appendTo($groups.eq(1))
$('<div id="body2" aria-expanded="false"/>').appendTo($groups.eq(1))
var $target3 = $('<a class="collapsed" data-toggle="collapse" href="#body3" data-parent="#accordion"/>').appendTo($groups.eq(2))
var $target3 = $('<a class="collapsed" data-toggle="collapse" role="button" href="#body3" data-parent="#accordion"/>').appendTo($groups.eq(2))
$('<div id="body3" aria-expanded="false"/>')
.appendTo($groups.eq(2))
@ -328,10 +371,11 @@ $(function () {
done()
})
$target3.click()
$target3.trigger('click')
})
QUnit.test('should not fire show event if show is prevented because other element is still transitioning', function (assert) {
assert.expect(1)
var done = assert.async()
var accordionHTML = '<div id="accordion">'
@ -341,7 +385,7 @@ $(function () {
var showFired = false
var $groups = $(accordionHTML).appendTo('#qunit-fixture').find('.panel')
var $target1 = $('<a data-toggle="collapse" href="#body1" data-parent="#accordion"/>').appendTo($groups.eq(0))
var $target1 = $('<a role="button" data-toggle="collapse" href="#body1" data-parent="#accordion"/>').appendTo($groups.eq(0))
$('<div id="body1" class="collapse"/>')
.appendTo($groups.eq(0))
@ -349,16 +393,16 @@ $(function () {
showFired = true
})
var $target2 = $('<a data-toggle="collapse" href="#body2" data-parent="#accordion"/>').appendTo($groups.eq(1))
var $target2 = $('<a role="button" data-toggle="collapse" href="#body2" data-parent="#accordion"/>').appendTo($groups.eq(1))
var $body2 = $('<div id="body2" class="collapse"/>').appendTo($groups.eq(1))
$target2.click()
$target2.trigger('click')
$body2
.toggleClass('in collapsing')
.data('bs.collapse').setTransitioning(true)
$target1.click()
$target1.trigger('click')
setTimeout(function () {
assert.ok(!showFired, 'show event did not fire')
@ -367,9 +411,10 @@ $(function () {
})
QUnit.test('should add "collapsed" class to target when collapse is hidden via manual invocation', function (assert) {
assert.expect(1)
var done = assert.async()
var $target = $('<a data-toggle="collapse" href="#test1"/>').appendTo('#qunit-fixture')
var $target = $('<a role="button" data-toggle="collapse" href="#test1"/>').appendTo('#qunit-fixture')
$('<div id="test1" class="in"/>')
.appendTo('#qunit-fixture')
@ -381,9 +426,10 @@ $(function () {
})
QUnit.test('should remove "collapsed" class from target when collapse is shown via manual invocation', function (assert) {
assert.expect(1)
var done = assert.async()
var $target = $('<a data-toggle="collapse" class="collapsed" href="#test1"/>').appendTo('#qunit-fixture')
var $target = $('<a role="button" data-toggle="collapse" class="collapsed" href="#test1"/>').appendTo('#qunit-fixture')
$('<div id="test1"/>')
.appendTo('#qunit-fixture')

View File

@ -4,6 +4,7 @@ $(function () {
QUnit.module('dropdowns plugin')
QUnit.test('should be defined on jquery object', function (assert) {
assert.expect(1)
assert.ok($(document.body).dropdown, 'dropdown method is defined')
})
@ -19,10 +20,12 @@ $(function () {
})
QUnit.test('should provide no conflict', function (assert) {
assert.expect(1)
assert.strictEqual($.fn.dropdown, undefined, 'dropdown was set back to undefined (org value)')
})
QUnit.test('should return jquery collection containing the element', function (assert) {
assert.expect(2)
var $el = $('<div/>')
var $dropdown = $el.bootstrapDropdown()
assert.ok($dropdown instanceof $, 'returns jquery collection')
@ -30,6 +33,7 @@ $(function () {
})
QUnit.test('should not open dropdown if target is disabled via attribute', function (assert) {
assert.expect(1)
var dropdownHTML = '<ul class="tabs">'
+ '<li class="dropdown">'
+ '<button disabled href="#" class="btn dropdown-toggle" data-toggle="dropdown">Dropdown</button>'
@ -41,12 +45,13 @@ $(function () {
+ '</ul>'
+ '</li>'
+ '</ul>'
var $dropdown = $(dropdownHTML).find('[data-toggle="dropdown"]').bootstrapDropdown().click()
var $dropdown = $(dropdownHTML).find('[data-toggle="dropdown"]').bootstrapDropdown().trigger('click')
assert.ok(!$dropdown.parent('.dropdown').hasClass('open'), '"open" class added on click')
})
QUnit.test('should set aria-expanded="true" on target when dropdown menu is shown', function (assert) {
assert.expect(1)
var dropdownHTML = '<ul class="tabs">'
+ '<li class="dropdown">'
+ '<a href="#" class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false">Dropdown</a>'
@ -61,12 +66,13 @@ $(function () {
var $dropdown = $(dropdownHTML)
.find('[data-toggle="dropdown"]')
.bootstrapDropdown()
.click()
.trigger('click')
assert.strictEqual($dropdown.attr('aria-expanded'), 'true', 'aria-expanded is set to string "true" on click')
})
QUnit.test('should set aria-expanded="false" on target when dropdown menu is hidden', function (assert) {
assert.expect(1)
var done = assert.async()
var dropdownHTML = '<ul class="tabs">'
+ '<li class="dropdown">'
@ -91,11 +97,12 @@ $(function () {
done()
})
$dropdown.click()
$(document.body).click()
$dropdown.trigger('click')
$(document.body).trigger('click')
})
QUnit.test('should not open dropdown if target is disabled via class', function (assert) {
assert.expect(1)
var dropdownHTML = '<ul class="tabs">'
+ '<li class="dropdown">'
+ '<button href="#" class="btn dropdown-toggle disabled" data-toggle="dropdown">Dropdown</button>'
@ -107,12 +114,13 @@ $(function () {
+ '</ul>'
+ '</li>'
+ '</ul>'
var $dropdown = $(dropdownHTML).find('[data-toggle="dropdown"]').bootstrapDropdown().click()
var $dropdown = $(dropdownHTML).find('[data-toggle="dropdown"]').bootstrapDropdown().trigger('click')
assert.ok(!$dropdown.parent('.dropdown').hasClass('open'), '"open" class added on click')
})
QUnit.test('should add class open to menu if clicked', function (assert) {
assert.expect(1)
var dropdownHTML = '<ul class="tabs">'
+ '<li class="dropdown">'
+ '<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>'
@ -124,12 +132,13 @@ $(function () {
+ '</ul>'
+ '</li>'
+ '</ul>'
var $dropdown = $(dropdownHTML).find('[data-toggle="dropdown"]').bootstrapDropdown().click()
var $dropdown = $(dropdownHTML).find('[data-toggle="dropdown"]').bootstrapDropdown().trigger('click')
assert.ok($dropdown.parent('.dropdown').hasClass('open'), '"open" class added on click')
})
QUnit.test('should test if element has a # before assuming it\'s a selector', function (assert) {
assert.expect(1)
var dropdownHTML = '<ul class="tabs">'
+ '<li class="dropdown">'
+ '<a href="/foo/" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>'
@ -141,13 +150,14 @@ $(function () {
+ '</ul>'
+ '</li>'
+ '</ul>'
var $dropdown = $(dropdownHTML).find('[data-toggle="dropdown"]').bootstrapDropdown().click()
var $dropdown = $(dropdownHTML).find('[data-toggle="dropdown"]').bootstrapDropdown().trigger('click')
assert.ok($dropdown.parent('.dropdown').hasClass('open'), '"open" class added on click')
})
QUnit.test('should remove "open" class if body is clicked', function (assert) {
assert.expect(2)
var dropdownHTML = '<ul class="tabs">'
+ '<li class="dropdown">'
+ '<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>'
@ -163,14 +173,15 @@ $(function () {
.appendTo('#qunit-fixture')
.find('[data-toggle="dropdown"]')
.bootstrapDropdown()
.click()
.trigger('click')
assert.ok($dropdown.parent('.dropdown').hasClass('open'), '"open" class added on click')
$(document.body).click()
$(document.body).trigger('click')
assert.ok(!$dropdown.parent('.dropdown').hasClass('open'), '"open" class removed')
})
QUnit.test('should remove "open" class if body is clicked, with multiple dropdowns', function (assert) {
assert.expect(7)
var dropdownHTML = '<ul class="nav">'
+ '<li><a href="#menu1">Menu 1</a></li>'
+ '<li class="dropdown" id="testmenu">'
@ -193,20 +204,21 @@ $(function () {
assert.strictEqual($dropdowns.length, 2, 'two dropdowns')
$first.click()
$first.trigger('click')
assert.strictEqual($first.parents('.open').length, 1, '"open" class added on click')
assert.strictEqual($('#qunit-fixture .open').length, 1, 'only one dropdown is open')
$(document.body).click()
$(document.body).trigger('click')
assert.strictEqual($('#qunit-fixture .open').length, 0, '"open" class removed')
$last.click()
$last.trigger('click')
assert.strictEqual($last.parent('.open').length, 1, '"open" class added on click')
assert.strictEqual($('#qunit-fixture .open').length, 1, 'only one dropdown is open')
$(document.body).click()
$(document.body).trigger('click')
assert.strictEqual($('#qunit-fixture .open').length, 0, '"open" class removed')
})
QUnit.test('should fire show and hide event', function (assert) {
assert.expect(2)
var dropdownHTML = '<ul class="tabs">'
+ '<li class="dropdown">'
+ '<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>'
@ -235,12 +247,13 @@ $(function () {
done()
})
$dropdown.click()
$(document.body).click()
$dropdown.trigger('click')
$(document.body).trigger('click')
})
QUnit.test('should fire shown and hidden event', function (assert) {
assert.expect(2)
var dropdownHTML = '<ul class="tabs">'
+ '<li class="dropdown">'
+ '<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>'
@ -269,11 +282,12 @@ $(function () {
done()
})
$dropdown.click()
$(document.body).click()
$dropdown.trigger('click')
$(document.body).trigger('click')
})
QUnit.test('should ignore keyboard events within <input>s and <textarea>s', function (assert) {
assert.expect(3)
var done = assert.async()
var dropdownHTML = '<ul class="tabs">'
@ -302,19 +316,20 @@ $(function () {
.on('shown.bs.dropdown', function () {
assert.ok(true, 'shown was fired')
$input.focus().trigger($.Event('keydown', { which: 38 }))
$input.trigger('focus').trigger($.Event('keydown', { which: 38 }))
assert.ok($(document.activeElement).is($input), 'input still focused')
$textarea.focus().trigger($.Event('keydown', { which: 38 }))
$textarea.trigger('focus').trigger($.Event('keydown', { which: 38 }))
assert.ok($(document.activeElement).is($textarea), 'textarea still focused')
done()
})
$dropdown.click()
$dropdown.trigger('click')
})
QUnit.test('should skip disabled element when using keyboard navigation', function (assert) {
assert.expect(1)
var dropdownHTML = '<ul class="tabs">'
+ '<li class="dropdown">'
+ '<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>'
@ -328,11 +343,49 @@ $(function () {
.appendTo('#qunit-fixture')
.find('[data-toggle="dropdown"]')
.bootstrapDropdown()
.click()
.trigger('click')
$dropdown.trigger($.Event('keydown', { which: 40 }))
$dropdown.trigger($.Event('keydown', { which: 40 }))
assert.ok(!$(document.activeElement).parent().is('.disabled'), '.disabled is not focused')
})
QUnit.test('should not close the dropdown if the user clicks on a text field', function (assert) {
assert.expect(1)
var dropdownHTML = '<div class="btn-group">'
+ '<button type="button" data-toggle="dropdown">Dropdown</button>'
+ '<ul class="dropdown-menu" role="menu">'
+ '<li><input id="textField" type="text" /></li>'
+ '</ul>'
+ '</div>'
var $dropdown = $(dropdownHTML)
.appendTo('#qunit-fixture')
.find('[data-toggle="dropdown"]')
.bootstrapDropdown()
.trigger('click')
$('#textField').trigger('click')
assert.ok($dropdown.parent('.btn-group').hasClass('open'), 'dropdown menu is open')
})
QUnit.test('should not close the dropdown if the user clicks on a textarea', function (assert) {
assert.expect(1)
var dropdownHTML = '<div class="btn-group">'
+ '<button type="button" data-toggle="dropdown">Dropdown</button>'
+ '<ul class="dropdown-menu" role="menu">'
+ '<li><textarea id="textArea"></textarea></li>'
+ '</ul>'
+ '</div>'
var $dropdown = $(dropdownHTML)
.appendTo('#qunit-fixture')
.find('[data-toggle="dropdown"]')
.bootstrapDropdown()
.trigger('click')
$('#textArea').trigger('click')
assert.ok($dropdown.parent('.btn-group').hasClass('open'), 'dropdown menu is open')
})
})

View File

@ -4,6 +4,7 @@ $(function () {
QUnit.module('popover plugin')
QUnit.test('should be defined on jquery object', function (assert) {
assert.expect(1)
assert.ok($(document.body).popover, 'popover method is defined')
})
@ -19,10 +20,12 @@ $(function () {
})
QUnit.test('should provide no conflict', function (assert) {
assert.expect(1)
assert.strictEqual($.fn.popover, undefined, 'popover was set back to undefined (org value)')
})
QUnit.test('should return jquery collection containing the element', function (assert) {
assert.expect(2)
var $el = $('<div/>')
var $popover = $el.bootstrapPopover()
assert.ok($popover instanceof $, 'returns jquery collection')
@ -30,6 +33,7 @@ $(function () {
})
QUnit.test('should render popover element', function (assert) {
assert.expect(2)
var $popover = $('<a href="#" title="mdo" data-content="https://twitter.com/mdo">@mdo</a>')
.appendTo('#qunit-fixture')
.bootstrapPopover('show')
@ -40,12 +44,14 @@ $(function () {
})
QUnit.test('should store popover instance in popover data object', function (assert) {
assert.expect(1)
var $popover = $('<a href="#" title="mdo" data-content="https://twitter.com/mdo">@mdo</a>').bootstrapPopover()
assert.ok($popover.data('bs.popover'), 'popover instance exists')
})
QUnit.test('should store popover trigger in popover instance data object', function (assert) {
assert.expect(1)
var $popover = $('<a href="#" title="ResentedHook">@ResentedHook</a>')
.appendTo('#qunit-fixture')
.bootstrapPopover()
@ -56,6 +62,7 @@ $(function () {
})
QUnit.test('should get title and content from options', function (assert) {
assert.expect(4)
var $popover = $('<a href="#">@fat</a>')
.appendTo('#qunit-fixture')
.bootstrapPopover({
@ -78,6 +85,7 @@ $(function () {
})
QUnit.test('should not duplicate HTML object', function (assert) {
assert.expect(6)
var $div = $('<div/>').html('loves writing tests (╯°□°)╯︵ ┻━┻')
var $popover = $('<a href="#">@fat</a>')
@ -104,6 +112,7 @@ $(function () {
})
QUnit.test('should get title and content from attributes', function (assert) {
assert.expect(4)
var $popover = $('<a href="#" title="@mdo" data-content="loves data attributes (づ。◕‿‿◕。)づ ︵ ┻━┻" >@mdo</a>')
.appendTo('#qunit-fixture')
.bootstrapPopover()
@ -119,6 +128,7 @@ $(function () {
QUnit.test('should get title and content from attributes ignoring options passed via js', function (assert) {
assert.expect(4)
var $popover = $('<a href="#" title="@mdo" data-content="loves data attributes (づ。◕‿‿◕。)づ ︵ ┻━┻" >@mdo</a>')
.appendTo('#qunit-fixture')
.bootstrapPopover({
@ -136,6 +146,7 @@ $(function () {
})
QUnit.test('should respect custom template', function (assert) {
assert.expect(3)
var $popover = $('<a href="#">@fat</a>')
.appendTo('#qunit-fixture')
.bootstrapPopover({
@ -154,6 +165,7 @@ $(function () {
})
QUnit.test('should destroy popover', function (assert) {
assert.expect(7)
var $popover = $('<div/>')
.bootstrapPopover({
trigger: 'hover'
@ -174,6 +186,7 @@ $(function () {
})
QUnit.test('should render popover element using delegated selector', function (assert) {
assert.expect(2)
var $div = $('<div><a href="#" title="mdo" data-content="http://twitter.com/mdo">@mdo</a></div>')
.appendTo('#qunit-fixture')
.bootstrapPopover({
@ -181,18 +194,19 @@ $(function () {
trigger: 'click'
})
$div.find('a').click()
$div.find('a').trigger('click')
assert.notEqual($('.popover').length, 0, 'popover was inserted')
$div.find('a').click()
$div.find('a').trigger('click')
assert.strictEqual($('.popover').length, 0, 'popover was removed')
})
QUnit.test('should detach popover content rather than removing it so that event handlers are left intact', function (assert) {
assert.expect(1)
var $content = $('<div class="content-with-handler"><a class="btn btn-warning">Button with event handler</a></div>').appendTo('#qunit-fixture')
var handlerCalled = false
$('.content-with-handler .btn').click(function () {
$('.content-with-handler .btn').on('click', function () {
handlerCalled = true
})
@ -214,7 +228,7 @@ $(function () {
.one('hidden.bs.popover', function () {
$div
.one('shown.bs.popover', function () {
$('.content-with-handler .btn').click()
$('.content-with-handler .btn').trigger('click')
$div.bootstrapPopover('destroy')
assert.ok(handlerCalled, 'content\'s event handler still present')
done()
@ -227,9 +241,22 @@ $(function () {
})
QUnit.test('should throw an error when initializing popover on the document object without specifying a delegation selector', function (assert) {
assert.expect(1)
assert.throws(function () {
$(document).bootstrapPopover({ title: 'What am I on?', content: 'My selector is missing' })
}, new Error('`selector` option must be specified when initializing popover on the window.document object!'))
})
QUnit.test('should do nothing when an attempt is made to hide an uninitialized popover', function (assert) {
assert.expect(1)
var $popover = $('<span data-toggle="popover" data-title="some title" data-content="some content">some text</span>')
.appendTo('#qunit-fixture')
.on('hidden.bs.popover shown.bs.popover', function () {
assert.ok(false, 'should not fire any popover events')
})
.bootstrapPopover('hide')
assert.strictEqual($popover.data('bs.popover'), undefined, 'should not initialize the popover')
})
})

View File

@ -4,6 +4,7 @@ $(function () {
QUnit.module('scrollspy plugin')
QUnit.test('should be defined on jquery object', function (assert) {
assert.expect(1)
assert.ok($(document.body).scrollspy, 'scrollspy method is defined')
})
@ -19,10 +20,12 @@ $(function () {
})
QUnit.test('should provide no conflict', function (assert) {
assert.expect(1)
assert.strictEqual($.fn.scrollspy, undefined, 'scrollspy was set back to undefined (org value)')
})
QUnit.test('should return jquery collection containing the element', function (assert) {
assert.expect(2)
var $el = $('<div/>')
var $scrollspy = $el.bootstrapScrollspy()
assert.ok($scrollspy instanceof $, 'returns jquery collection')
@ -30,6 +33,7 @@ $(function () {
})
QUnit.test('should only switch "active" class on current target', function (assert) {
assert.expect(1)
var done = assert.async()
var sectionHTML = '<div id="root" class="active">'
@ -74,6 +78,7 @@ $(function () {
})
QUnit.test('should correctly select middle navigation option when large offset is used', function (assert) {
assert.expect(3)
var done = assert.async()
var sectionHTML = '<div id="header" style="height: 500px;"></div>'
@ -107,6 +112,7 @@ $(function () {
})
QUnit.test('should add the active class to the correct element', function (assert) {
assert.expect(2)
var navbarHtml =
'<nav class="navbar">'
+ '<ul class="nav">'
@ -142,7 +148,47 @@ $(function () {
.then(function () { return testElementIsActiveAfterScroll('#li-2', '#div-2') })
})
QUnit.test('should add the active class correctly when there are nested elements at 0 scroll offset', function (assert) {
assert.expect(6)
var times = 0
var done = assert.async()
var navbarHtml = '<nav id="navigation" class="navbar">'
+ '<ul class="nav">'
+ '<li id="li-1"><a href="#div-1">div 1</a>'
+ '<ul>'
+ '<li id="li-2"><a href="#div-2">div 2</a></li>'
+ '</ul>'
+ '</li>'
+ '</ul>'
+ '</nav>'
var contentHtml = '<div class="content" style="position: absolute; top: 0px; overflow: auto; height: 50px">'
+ '<div id="div-1" style="padding: 0; margin: 0">'
+ '<div id="div-2" style="height: 200px; padding: 0; margin: 0">div 2</div>'
+ '</div>'
+ '</div>'
$(navbarHtml).appendTo('#qunit-fixture')
var $content = $(contentHtml)
.appendTo('#qunit-fixture')
.bootstrapScrollspy({ offset: 0, target: '#navigation' })
!function testActiveElements() {
if (++times > 3) return done()
$content.one('scroll', function () {
assert.ok($('#li-1').hasClass('active'), 'nav item for outer element has "active" class')
assert.ok($('#li-2').hasClass('active'), 'nav item for inner element has "active" class')
testActiveElements()
})
$content.scrollTop($content.scrollTop() + 10)
}()
})
QUnit.test('should clear selection if above the first section', function (assert) {
assert.expect(3)
var done = assert.async()
var sectionHTML = '<div id="header" style="height: 500px;"></div>'
@ -183,4 +229,50 @@ $(function () {
.scrollTop(201)
})
QUnit.test('should correctly select navigation element on backward scrolling when each target section height is 100%', function (assert) {
assert.expect(5)
var navbarHtml =
'<nav class="navbar">'
+ '<ul class="nav">'
+ '<li id="li-100-1"><a href="#div-100-1">div 1</a></li>'
+ '<li id="li-100-2"><a href="#div-100-2">div 2</a></li>'
+ '<li id="li-100-3"><a href="#div-100-3">div 3</a></li>'
+ '<li id="li-100-4"><a href="#div-100-4">div 4</a></li>'
+ '<li id="li-100-5"><a href="#div-100-5">div 5</a></li>'
+ '</ul>'
+ '</nav>'
var contentHtml =
'<div class="content" style="position: relative; overflow: auto; height: 100px">'
+ '<div id="div-100-1" style="position: relative; height: 100%; padding: 0; margin: 0">div 1</div>'
+ '<div id="div-100-2" style="position: relative; height: 100%; padding: 0; margin: 0">div 2</div>'
+ '<div id="div-100-3" style="position: relative; height: 100%; padding: 0; margin: 0">div 3</div>'
+ '<div id="div-100-4" style="position: relative; height: 100%; padding: 0; margin: 0">div 4</div>'
+ '<div id="div-100-5" style="position: relative; height: 100%; padding: 0; margin: 0">div 5</div>'
+ '</div>'
$(navbarHtml).appendTo('#qunit-fixture')
var $content = $(contentHtml)
.appendTo('#qunit-fixture')
.bootstrapScrollspy({ offset: 0, target: '.navbar' })
var testElementIsActiveAfterScroll = function (element, target) {
var deferred = $.Deferred()
var scrollHeight = Math.ceil($content.scrollTop() + $(target).position().top)
var done = assert.async()
$content.one('scroll', function () {
assert.ok($(element).hasClass('active'), 'target:' + target + ', element: ' + element)
done()
deferred.resolve()
})
$content.scrollTop(scrollHeight)
return deferred.promise()
}
$.when(testElementIsActiveAfterScroll('#li-100-5', '#div-100-5'))
.then(function () { return testElementIsActiveAfterScroll('#li-100-4', '#div-100-4') })
.then(function () { return testElementIsActiveAfterScroll('#li-100-3', '#div-100-3') })
.then(function () { return testElementIsActiveAfterScroll('#li-100-2', '#div-100-2') })
.then(function () { return testElementIsActiveAfterScroll('#li-100-1', '#div-100-1') })
})
})

View File

@ -4,6 +4,7 @@ $(function () {
QUnit.module('tabs plugin')
QUnit.test('should be defined on jquery object', function (assert) {
assert.expect(1)
assert.ok($(document.body).tab, 'tabs method is defined')
})
@ -19,10 +20,12 @@ $(function () {
})
QUnit.test('should provide no conflict', function (assert) {
assert.expect(1)
assert.strictEqual($.fn.tab, undefined, 'tab was set back to undefined (org value)')
})
QUnit.test('should return jquery collection containing the element', function (assert) {
assert.expect(2)
var $el = $('<div/>')
var $tab = $el.bootstrapTab()
assert.ok($tab instanceof $, 'returns jquery collection')
@ -30,6 +33,7 @@ $(function () {
})
QUnit.test('should activate element by tab id', function (assert) {
assert.expect(2)
var tabsHTML = '<ul class="tabs">'
+ '<li><a href="#home">Home</a></li>'
+ '<li><a href="#profile">Profile</a></li>'
@ -45,6 +49,7 @@ $(function () {
})
QUnit.test('should activate element by tab id', function (assert) {
assert.expect(2)
var pillsHTML = '<ul class="pills">'
+ '<li><a href="#home">Home</a></li>'
+ '<li><a href="#profile">Profile</a></li>'
@ -60,6 +65,7 @@ $(function () {
})
QUnit.test('should not fire shown when show is prevented', function (assert) {
assert.expect(1)
var done = assert.async()
$('<div class="tab"/>')
@ -75,6 +81,7 @@ $(function () {
})
QUnit.test('show and shown events should reference correct relatedTarget', function (assert) {
assert.expect(2)
var done = assert.async()
var dropHTML = '<ul class="drop">'
@ -102,6 +109,7 @@ $(function () {
})
QUnit.test('should fire hide and hidden events', function (assert) {
assert.expect(2)
var done = assert.async()
var tabsHTML = '<ul class="tabs">'
@ -132,6 +140,7 @@ $(function () {
})
QUnit.test('should not fire hidden when hide is prevented', function (assert) {
assert.expect(1)
var done = assert.async()
var tabsHTML = '<ul class="tabs">'
@ -156,6 +165,7 @@ $(function () {
})
QUnit.test('hide and hidden events contain correct relatedTarget', function (assert) {
assert.expect(2)
var done = assert.async()
var tabsHTML = '<ul class="tabs">'
@ -179,6 +189,7 @@ $(function () {
})
QUnit.test('selected tab should have aria-expanded', function (assert) {
assert.expect(8)
var tabsHTML = '<ul class="nav nav-tabs">'
+ '<li class="active"><a href="#home" toggle="tab" aria-expanded="true">Home</a></li>'
+ '<li><a href="#profile" toggle="tab" aria-expanded="false">Profile</a></li>'
@ -189,7 +200,7 @@ $(function () {
assert.strictEqual($tabs.find('.active a').attr('aria-expanded'), 'true', 'shown tab has aria-expanded = true')
assert.strictEqual($tabs.find('li:not(.active) a').attr('aria-expanded'), 'false', 'hidden tab has aria-expanded = false')
$tabs.find('li:last a').click()
$tabs.find('li:last a').trigger('click')
assert.strictEqual($tabs.find('.active a').attr('aria-expanded'), 'true', 'after click, shown tab has aria-expanded = true')
assert.strictEqual($tabs.find('li:not(.active) a').attr('aria-expanded'), 'false', 'after click, hidden tab has aria-expanded = false')
@ -197,7 +208,7 @@ $(function () {
assert.strictEqual($tabs.find('.active a').attr('aria-expanded'), 'true', 'shown tab has aria-expanded = true')
assert.strictEqual($tabs.find('li:not(.active) a').attr('aria-expanded'), 'false', 'hidden tab has aria-expanded = false')
$tabs.find('li:first a').click()
$tabs.find('li:first a').trigger('click')
assert.strictEqual($tabs.find('.active a').attr('aria-expanded'), 'true', 'after second show event, shown tab still has aria-expanded = true')
assert.strictEqual($tabs.find('li:not(.active) a').attr('aria-expanded'), 'false', 'after second show event, hidden tab has aria-expanded = false')
})

View File

@ -19,7 +19,7 @@
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">
<a data-toggle="collapse" data-parent="#accordion" href="#collapseOne">
<a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseOne">
Collapsible Group Item #1
</a>
</h4>
@ -33,7 +33,7 @@
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">
<a data-toggle="collapse" data-parent="#accordion" href="#collapseTwo">
<a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseTwo">
Collapsible Group Item #2
</a>
</h4>
@ -47,7 +47,7 @@
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">
<a data-toggle="collapse" data-parent="#accordion" href="#collapseThree">
<a role="button" data-toggle="collapse" data-parent="#accordion" href="#collapseThree">
Collapsible Group Item #3
</a>
</h4>

View File

@ -1,5 +1,5 @@
/* ========================================================================
* Bootstrap: transition.js v3.3.2
* Bootstrap: transition.js v3.3.4
* http://getbootstrap.com/javascript/#transitions
* ========================================================================
* Copyright 2011-2015 Twitter, Inc.

View File

@ -0,0 +1,9 @@
// Contextual backgrounds
.bg-variant(@color) {
background-color: @color;
a&:hover,
a&:focus {
background-color: darken(@color, 10%);
}
}

View File

@ -3,7 +3,7 @@
Package.describe({
name: 'twbs:bootstrap', // http://atmospherejs.com/twbs/bootstrap
summary: 'The most popular front-end framework for developing responsive, mobile first projects on the web.',
version: '3.3.2',
version: '3.3.4',
git: 'https://github.com/twbs/bootstrap.git'
});

View File

@ -32,7 +32,7 @@
},
"devDependencies": {
"btoa": "~1.1.2",
"glob": "~4.4.0",
"glob": "~5.0.3",
"grunt": "~0.4.5",
"grunt-autoprefixer": "~2.2.0",
"grunt-banner": "~0.3.1",
@ -52,7 +52,7 @@
"grunt-contrib-watch": "~0.6.1",
"grunt-csscomb": "~3.0.0",
"grunt-exec": "~0.4.6",
"grunt-html": "^3.0.0",
"grunt-html": "~4.0.1",
"grunt-jekyll": "~0.4.2",
"grunt-jscs": "~1.5.0",
"grunt-postcss": "^0.3.0",
@ -61,7 +61,7 @@
"grunt-scss-lint": "^0.3.4",
"grunt-sed": "~0.1.1",
"load-grunt-tasks": "~3.1.0",
"markdown-it": "^3.0.7",
"markdown-it": "^4.0.1",
"mq4-hover-shim": "^0.1.0",
"npm-shrinkwrap": "^200.1.0",
"superstartup-closure-compiler": "^0.1.6",
@ -81,18 +81,12 @@
],
"jspm": {
"main": "js/bootstrap",
"directories": {
"example": "examples",
"lib": "dist"
},
"shim": {
"js/bootstrap": {
"imports": "jquery",
"deps": "jquery",
"exports": "$"
}
},
"buildConfig": {
"uglify": true
}
"files": ["css", "fonts", "js"]
}
}

View File

@ -46,11 +46,17 @@
&.disabled,
&:disabled,
fieldset[disabled] & {
pointer-events: none; // Future-proof disabling of clicks
cursor: $cursor-disabled;
opacity: .65;
@include box-shadow(none);
}
a& {
&.disabled,
fieldset[disabled] & {
pointer-events: none; // Future-proof disabling of clicks on `<a>` elements
}
}
}

View File

@ -377,12 +377,14 @@ input[type="checkbox"] {
text-align: center;
pointer-events: none;
}
.input-lg + .form-control-feedback {
.input-lg + .form-control-feedback,
.input-group-lg + .form-control-feedback {
width: $input-height-lg;
height: $input-height-lg;
line-height: $input-height-lg;
}
.input-sm + .form-control-feedback {
.input-sm + .form-control-feedback,
.input-group-sm + .form-control-feedback {
width: $input-height-sm;
height: $input-height-sm;
line-height: $input-height-sm;

View File

@ -25,7 +25,7 @@
}
.jumbotron-heading {
font-size: ($font-size-base * 4.5);
font-size: $jumbotron-heading-font-size;
}
}

View File

@ -59,11 +59,14 @@
// Modal background
.modal-backdrop {
position: absolute;
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
background-color: $modal-backdrop-bg;
z-index: $zindex-modal-bg;
// Fade for backdrop
&.fade { opacity: 0; }
&.in { opacity: $modal-backdrop-opacity; }

View File

@ -137,11 +137,9 @@
.tab-content {
> .tab-pane {
display: none;
visibility: hidden;
}
> .active {
display: block;
visibility: visible;
}
}

View File

@ -158,3 +158,14 @@ hr {
clip: auto;
}
}
// iOS "clickable elements" fix for role="button"
//
// Fixes "clickability" issue (and more generally, the firing of events such as focus as well)
// for traditionally non-focusable elements with role="button"
// see https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile
// Upstream patch for normalize.css submitted: https://github.com/necolas/normalize.css/pull/379 - remove this fix once that is merged
[role="button"] {
cursor: pointer;
}

View File

@ -13,7 +13,6 @@
font-size: $font-size-sm;
font-weight: normal;
line-height: 1.4;
visibility: visible;
opacity: 0;
&.in { opacity: $tooltip-opacity; }

View File

@ -225,7 +225,8 @@ $zindex-dropdown: 1000 !default;
$zindex-popover: 1060 !default;
$zindex-tooltip: 1070 !default;
$zindex-navbar-fixed: 1030 !default;
$zindex-modal: 1040 !default;
$zindex-modal-bg: 1040 !default;
$zindex-modal: 1050 !default;
// Media queries breakpoints
@ -385,6 +386,7 @@ $jumbotron-padding: 2rem !default;
$jumbotron-color: inherit !default;
$jumbotron-bg: $gray-lighter !default;
$jumbotron-heading-color: inherit !default;
$jumbotron-heading-font-size: ($font-size-base * 4.5) !default;
// $jumbotron-font-size: ceil(($font-size-base * 1.5)) !default;

View File

@ -6,7 +6,7 @@
background-color: $color;
}
a#{$parent} {
@include hover {
@include hover-focus {
background-color: darken($color, 10%);
}
}

View File

@ -7,7 +7,7 @@
#{$parent} {
display: block !important;
}
table#{$parent} { display: table; }
table#{$parent} { display: table !important; }
tr#{$parent} { display: table-row !important; }
th#{$parent},
td#{$parent} { display: table-cell !important; }

View File

@ -5,7 +5,7 @@
color: $color;
}
a#{$parent} {
@include hover {
@include hover-focus {
color: darken($color, 10%);
}
}

View File

@ -1,6 +1,6 @@
{
"name": "bootstrap",
"version": "3.3.2",
"version": "3.3.4",
"npm-shrinkwrap-version": "200.1.0",
"node-version": "v0.12.0",
"dependencies": {
@ -9,8 +9,8 @@
"resolved": "https://registry.npmjs.org/btoa/-/btoa-1.1.2.tgz"
},
"glob": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/glob/-/glob-4.4.0.tgz",
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-5.0.3.tgz",
"dependencies": {
"inflight": {
"version": "1.0.4",
@ -27,8 +27,8 @@
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
},
"minimatch": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.1.tgz",
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.4.tgz",
"dependencies": {
"brace-expansion": {
"version": "1.1.0",
@ -243,8 +243,8 @@
"resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.2.1.tgz"
},
"which": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/which/-/which-1.0.8.tgz"
"version": "1.0.9",
"resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz"
}
}
},
@ -261,16 +261,16 @@
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-0.2.0.tgz"
},
"caniuse-db": {
"version": "1.0.30000079",
"resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000079.tgz"
"version": "1.0.30000092",
"resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000092.tgz"
},
"num2fraction": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.0.1.tgz"
},
"postcss": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-4.0.4.tgz",
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-4.0.6.tgz",
"dependencies": {
"js-base64": {
"version": "2.1.7",
@ -383,8 +383,8 @@
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
},
"minimatch": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.1.tgz",
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.4.tgz",
"dependencies": {
"brace-expansion": {
"version": "1.1.0",
@ -643,20 +643,20 @@
"resolved": "https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz"
},
"compression": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/compression/-/compression-1.4.1.tgz",
"version": "1.4.3",
"resolved": "https://registry.npmjs.org/compression/-/compression-1.4.3.tgz",
"dependencies": {
"accepts": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.2.4.tgz",
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.2.5.tgz",
"dependencies": {
"mime-types": {
"version": "2.0.9",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.9.tgz",
"version": "2.0.10",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.10.tgz",
"dependencies": {
"mime-db": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.7.0.tgz"
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.8.0.tgz"
}
}
},
@ -671,8 +671,8 @@
"resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.2.tgz",
"dependencies": {
"mime-db": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.7.0.tgz"
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.8.0.tgz"
}
}
},
@ -683,8 +683,8 @@
}
},
"connect-timeout": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/connect-timeout/-/connect-timeout-1.6.0.tgz",
"version": "1.6.1",
"resolved": "https://registry.npmjs.org/connect-timeout/-/connect-timeout-1.6.1.tgz",
"dependencies": {
"ms": {
"version": "0.7.0",
@ -702,13 +702,7 @@
},
"cookie-parser": {
"version": "1.3.4",
"resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.3.4.tgz",
"dependencies": {
"cookie-signature": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz"
}
}
"resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.3.4.tgz"
},
"cookie-signature": {
"version": "1.0.6",
@ -749,12 +743,12 @@
}
},
"debug": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.1.1.tgz",
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.1.3.tgz",
"dependencies": {
"ms": {
"version": "0.6.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-0.6.2.tgz"
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-0.7.0.tgz"
}
}
},
@ -763,20 +757,20 @@
"resolved": "https://registry.npmjs.org/depd/-/depd-1.0.0.tgz"
},
"errorhandler": {
"version": "1.3.4",
"resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.3.4.tgz",
"version": "1.3.5",
"resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.3.5.tgz",
"dependencies": {
"accepts": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.2.4.tgz",
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.2.5.tgz",
"dependencies": {
"mime-types": {
"version": "2.0.9",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.9.tgz",
"version": "2.0.10",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.10.tgz",
"dependencies": {
"mime-db": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.7.0.tgz"
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.8.0.tgz"
}
}
},
@ -796,10 +790,6 @@
"version": "1.10.3",
"resolved": "https://registry.npmjs.org/express-session/-/express-session-1.10.3.tgz",
"dependencies": {
"cookie-signature": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz"
},
"crc": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/crc/-/crc-3.2.1.tgz"
@ -858,13 +848,9 @@
}
}
},
"media-typer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz"
},
"method-override": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/method-override/-/method-override-2.3.1.tgz",
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/method-override/-/method-override-2.3.2.tgz",
"dependencies": {
"methods": {
"version": "1.1.1",
@ -969,12 +955,12 @@
}
},
"serve-index": {
"version": "1.6.2",
"resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.6.2.tgz",
"version": "1.6.3",
"resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.6.3.tgz",
"dependencies": {
"accepts": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.2.4.tgz",
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.2.5.tgz",
"dependencies": {
"negotiator": {
"version": "0.5.1",
@ -986,43 +972,33 @@
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/batch/-/batch-0.5.2.tgz"
},
"http-errors": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.3.1.tgz",
"dependencies": {
"inherits": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
},
"statuses": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-1.2.1.tgz"
}
}
"escape-html": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.1.tgz"
},
"mime-types": {
"version": "2.0.9",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.9.tgz",
"version": "2.0.10",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.10.tgz",
"dependencies": {
"mime-db": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.7.0.tgz"
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.8.0.tgz"
}
}
}
}
},
"serve-static": {
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.9.1.tgz",
"version": "1.9.2",
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.9.2.tgz",
"dependencies": {
"escape-html": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.1.tgz"
},
"send": {
"version": "0.12.1",
"resolved": "https://registry.npmjs.org/send/-/send-0.12.1.tgz",
"version": "0.12.2",
"resolved": "https://registry.npmjs.org/send/-/send-0.12.2.tgz",
"dependencies": {
"destroy": {
"version": "1.0.3",
@ -1065,20 +1041,20 @@
}
},
"type-is": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.0.tgz",
"version": "1.6.1",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.1.tgz",
"dependencies": {
"media-typer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz"
},
"mime-types": {
"version": "2.0.9",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.9.tgz",
"version": "2.0.10",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.10.tgz",
"dependencies": {
"mime-db": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.7.0.tgz"
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.8.0.tgz"
}
}
}
@ -1267,12 +1243,12 @@
}
},
"clean-css": {
"version": "3.0.10",
"resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.0.10.tgz",
"version": "3.1.6",
"resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.1.6.tgz",
"dependencies": {
"commander": {
"version": "2.5.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.5.1.tgz"
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-2.6.0.tgz"
},
"source-map": {
"version": "0.1.43",
@ -1287,9 +1263,51 @@
}
},
"maxmin": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/maxmin/-/maxmin-1.0.0.tgz",
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/maxmin/-/maxmin-1.0.1.tgz",
"dependencies": {
"chalk": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-1.0.0.tgz",
"dependencies": {
"ansi-styles": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.0.1.tgz"
},
"escape-string-regexp": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.3.tgz"
},
"has-ansi": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-1.0.3.tgz",
"dependencies": {
"ansi-regex": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-1.1.1.tgz"
},
"get-stdin": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz"
}
}
},
"strip-ansi": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-2.0.1.tgz",
"dependencies": {
"ansi-regex": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-1.1.1.tgz"
}
}
},
"supports-color": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-1.3.0.tgz"
}
}
},
"figures": {
"version": "1.3.5",
"resolved": "https://registry.npmjs.org/figures/-/figures-1.3.5.tgz"
@ -1506,7 +1524,13 @@
},
"acorn-globals": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-1.0.2.tgz"
"resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-1.0.2.tgz",
"dependencies": {
"acorn": {
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-0.11.0.tgz"
}
}
}
}
}
@ -1523,8 +1547,8 @@
"resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz"
},
"jshint": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/jshint/-/jshint-2.6.0.tgz",
"version": "2.6.3",
"resolved": "https://registry.npmjs.org/jshint/-/jshint-2.6.3.tgz",
"dependencies": {
"cli": {
"version": "0.6.5",
@ -1575,8 +1599,8 @@
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.8.2.tgz",
"dependencies": {
"domelementtype": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz"
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz"
},
"domhandler": {
"version": "2.3.0",
@ -1590,6 +1614,10 @@
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz",
"dependencies": {
"domelementtype": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz"
},
"entities": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz"
@ -1717,8 +1745,8 @@
}
},
"graceful-fs": {
"version": "3.0.5",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.5.tgz"
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.6.tgz"
},
"image-size": {
"version": "0.3.5",
@ -1819,8 +1847,8 @@
"resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.4.tgz"
},
"hoek": {
"version": "2.11.0",
"resolved": "https://registry.npmjs.org/hoek/-/hoek-2.11.0.tgz"
"version": "2.11.1",
"resolved": "https://registry.npmjs.org/hoek/-/hoek-2.11.1.tgz"
},
"sntp": {
"version": "1.0.9",
@ -1847,26 +1875,26 @@
}
},
"isstream": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.1.tgz"
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz"
},
"json-stringify-safe": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.0.tgz"
},
"mime-types": {
"version": "2.0.9",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.9.tgz",
"version": "2.0.10",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.10.tgz",
"dependencies": {
"mime-db": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.7.0.tgz"
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.8.0.tgz"
}
}
},
"node-uuid": {
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.2.tgz"
"version": "1.4.3",
"resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.3.tgz"
},
"oauth-sign": {
"version": "0.6.0",
@ -1927,28 +1955,80 @@
"resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz"
},
"phantomjs": {
"version": "1.9.15",
"resolved": "https://registry.npmjs.org/phantomjs/-/phantomjs-1.9.15.tgz",
"version": "1.9.16",
"resolved": "https://registry.npmjs.org/phantomjs/-/phantomjs-1.9.16.tgz",
"dependencies": {
"adm-zip": {
"version": "0.4.4",
"resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.4.tgz"
},
"fs-extra": {
"version": "0.16.3",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.16.3.tgz",
"version": "0.16.5",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.16.5.tgz",
"dependencies": {
"graceful-fs": {
"version": "3.0.5",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.5.tgz"
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.6.tgz"
},
"jsonfile": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.0.0.tgz"
},
"rimraf": {
"version": "2.2.8",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz"
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.3.2.tgz",
"dependencies": {
"glob": {
"version": "4.5.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz",
"dependencies": {
"inflight": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.4.tgz",
"dependencies": {
"wrappy": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz"
}
}
},
"inherits": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
},
"minimatch": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.4.tgz",
"dependencies": {
"brace-expansion": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.0.tgz",
"dependencies": {
"balanced-match": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.2.0.tgz"
},
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
}
}
}
}
},
"once": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/once/-/once-1.3.1.tgz",
"dependencies": {
"wrappy": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz"
}
}
}
}
}
}
}
}
},
@ -1957,8 +2037,8 @@
"resolved": "https://registry.npmjs.org/kew/-/kew-0.4.0.tgz"
},
"npmconf": {
"version": "2.0.9",
"resolved": "https://registry.npmjs.org/npmconf/-/npmconf-2.0.9.tgz",
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/npmconf/-/npmconf-2.1.1.tgz",
"dependencies": {
"config-chain": {
"version": "1.1.8",
@ -2013,8 +2093,8 @@
"resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.0.tgz"
},
"semver": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-4.3.0.tgz"
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-4.3.1.tgz"
},
"uid-number": {
"version": "0.0.5",
@ -2143,8 +2223,8 @@
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-1.0.2.tgz"
},
"node-uuid": {
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.2.tgz"
"version": "1.4.3",
"resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.3.tgz"
},
"oauth-sign": {
"version": "0.4.0",
@ -2185,8 +2265,8 @@
}
},
"which": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/which/-/which-1.0.8.tgz"
"version": "1.0.9",
"resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz"
}
}
},
@ -2251,13 +2331,55 @@
}
},
"lodash": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-3.3.0.tgz"
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-3.5.0.tgz"
},
"maxmin": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/maxmin/-/maxmin-1.0.0.tgz",
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/maxmin/-/maxmin-1.0.1.tgz",
"dependencies": {
"chalk": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-1.0.0.tgz",
"dependencies": {
"ansi-styles": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.0.1.tgz"
},
"escape-string-regexp": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.3.tgz"
},
"has-ansi": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-1.0.3.tgz",
"dependencies": {
"ansi-regex": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-1.1.1.tgz"
},
"get-stdin": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz"
}
}
},
"strip-ansi": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-2.0.1.tgz",
"dependencies": {
"ansi-regex": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-1.1.1.tgz"
}
}
},
"supports-color": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-1.3.0.tgz"
}
}
},
"figures": {
"version": "1.3.5",
"resolved": "https://registry.npmjs.org/figures/-/figures-1.3.5.tgz"
@ -2323,23 +2445,13 @@
}
},
"uglify-js": {
"version": "2.4.16",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.4.16.tgz",
"version": "2.4.17",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.4.17.tgz",
"dependencies": {
"async": {
"version": "0.2.10",
"resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz"
},
"optimist": {
"version": "0.3.7",
"resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz",
"dependencies": {
"wordwrap": {
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz"
}
}
},
"source-map": {
"version": "0.1.34",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.34.tgz",
@ -2353,6 +2465,10 @@
"uglify-to-browserify": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz"
},
"yargs": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-1.3.3.tgz"
}
}
},
@ -2527,28 +2643,52 @@
"resolved": "https://registry.npmjs.org/grunt-exec/-/grunt-exec-0.4.6.tgz"
},
"grunt-html": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/grunt-html/-/grunt-html-3.0.0.tgz",
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/grunt-html/-/grunt-html-4.0.1.tgz",
"dependencies": {
"async": {
"version": "0.2.10",
"resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz"
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/async/-/async-0.9.0.tgz"
},
"chalk": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz",
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-1.0.0.tgz",
"dependencies": {
"ansi-styles": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz"
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.0.1.tgz"
},
"has-color": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz"
"escape-string-regexp": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.3.tgz"
},
"has-ansi": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-1.0.3.tgz",
"dependencies": {
"ansi-regex": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-1.1.1.tgz"
},
"get-stdin": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz"
}
}
},
"strip-ansi": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz"
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-2.0.1.tgz",
"dependencies": {
"ansi-regex": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-1.1.1.tgz"
}
}
},
"supports-color": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-1.3.0.tgz"
}
}
}
@ -2559,8 +2699,8 @@
"resolved": "https://registry.npmjs.org/grunt-jekyll/-/grunt-jekyll-0.4.2.tgz",
"dependencies": {
"tmp": {
"version": "0.0.24",
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.24.tgz"
"version": "0.0.25",
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.25.tgz"
}
}
},
@ -2589,16 +2729,16 @@
"resolved": "https://registry.npmjs.org/commander/-/commander-2.6.0.tgz"
},
"esprima": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-1.2.4.tgz"
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-1.2.5.tgz"
},
"esprima-harmony-jscs": {
"version": "1.1.0-tolerate-import",
"resolved": "https://registry.npmjs.org/esprima-harmony-jscs/-/esprima-harmony-jscs-1.1.0-tolerate-import.tgz"
},
"estraverse": {
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.1.tgz"
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz"
},
"exit": {
"version": "0.1.2",
@ -2639,16 +2779,16 @@
"resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-3.0.0.tgz",
"dependencies": {
"lodash._baseassign": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.0.1.tgz",
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.0.2.tgz",
"dependencies": {
"lodash._basecopy": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.0.tgz"
},
"lodash.keys": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.0.3.tgz",
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.0.4.tgz",
"dependencies": {
"lodash.isarguments": {
"version": "3.0.0",
@ -2667,24 +2807,24 @@
}
},
"lodash._createassigner": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/lodash._createassigner/-/lodash._createassigner-3.0.0.tgz",
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/lodash._createassigner/-/lodash._createassigner-3.0.1.tgz",
"dependencies": {
"lodash._bindcallback": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.0.tgz"
},
"lodash._isiterateecall": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.2.tgz"
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.4.tgz"
}
}
}
}
},
"minimatch": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.1.tgz",
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.4.tgz",
"dependencies": {
"brace-expansion": {
"version": "1.1.0",
@ -2755,8 +2895,60 @@
"resolved": "https://registry.npmjs.org/ncp/-/ncp-0.4.2.tgz"
},
"rimraf": {
"version": "2.2.8",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz"
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.3.2.tgz",
"dependencies": {
"glob": {
"version": "4.5.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz",
"dependencies": {
"inflight": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.4.tgz",
"dependencies": {
"wrappy": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz"
}
}
},
"inherits": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
},
"minimatch": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.4.tgz",
"dependencies": {
"brace-expansion": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.0.tgz",
"dependencies": {
"balanced-match": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.2.0.tgz"
},
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
}
}
}
}
},
"once": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/once/-/once-1.3.1.tgz",
"dependencies": {
"wrappy": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz"
}
}
}
}
}
}
}
}
},
@ -2781,8 +2973,8 @@
"resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz"
},
"isstream": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.1.tgz"
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz"
},
"stack-trace": {
"version": "0.0.9",
@ -2805,8 +2997,8 @@
"resolved": "https://registry.npmjs.org/vow-fs/-/vow-fs-0.3.4.tgz",
"dependencies": {
"glob": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/glob/-/glob-4.4.0.tgz",
"version": "4.5.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz",
"dependencies": {
"inflight": {
"version": "1.0.4",
@ -2823,8 +3015,8 @@
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
},
"minimatch": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.1.tgz",
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.4.tgz",
"dependencies": {
"brace-expansion": {
"version": "1.1.0",
@ -2855,8 +3047,8 @@
}
},
"node-uuid": {
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.2.tgz"
"version": "1.4.3",
"resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.3.tgz"
},
"vow-queue": {
"version": "0.4.1",
@ -2895,8 +3087,8 @@
"resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz"
},
"lodash": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-3.3.0.tgz"
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-3.3.1.tgz"
},
"q": {
"version": "1.1.2",
@ -2983,12 +3175,12 @@
"resolved": "https://registry.npmjs.org/async/-/async-0.9.0.tgz"
},
"mime-types": {
"version": "2.0.9",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.9.tgz",
"version": "2.0.10",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.10.tgz",
"dependencies": {
"mime-db": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.7.0.tgz"
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.8.0.tgz"
}
}
}
@ -3043,8 +3235,8 @@
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-1.0.2.tgz"
},
"node-uuid": {
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.2.tgz"
"version": "1.4.3",
"resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.3.tgz"
},
"oauth-sign": {
"version": "0.5.0",
@ -3195,8 +3387,8 @@
"resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz"
},
"node-uuid": {
"version": "1.4.2",
"resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.2.tgz"
"version": "1.4.3",
"resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.3.tgz"
},
"oauth-sign": {
"version": "0.3.0",
@ -3297,8 +3489,8 @@
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
},
"minimatch": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.1.tgz",
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.4.tgz",
"dependencies": {
"brace-expansion": {
"version": "1.1.0",
@ -3349,8 +3541,8 @@
}
},
"minimatch": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.1.tgz",
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.4.tgz",
"dependencies": {
"brace-expansion": {
"version": "1.1.0",
@ -3373,8 +3565,8 @@
}
},
"markdown-it": {
"version": "3.0.7",
"resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-3.0.7.tgz",
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-4.0.1.tgz",
"dependencies": {
"argparse": {
"version": "1.0.1",
@ -3390,13 +3582,21 @@
}
}
},
"autolinker": {
"version": "0.15.2",
"resolved": "https://registry.npmjs.org/autolinker/-/autolinker-0.15.2.tgz"
"entities": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz"
},
"linkify-it": {
"version": "0.1.5",
"resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-0.1.5.tgz"
},
"mdurl": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.0.tgz"
},
"uc.micro": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-0.1.0.tgz"
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.0.tgz"
}
}
},
@ -3459,8 +3659,8 @@
}
},
"minimist": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.1.0.tgz"
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.1.1.tgz"
},
"msee": {
"version": "0.1.1",
@ -3531,8 +3731,8 @@
}
},
"npm": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/npm/-/npm-2.6.0.tgz",
"version": "2.7.1",
"resolved": "https://registry.npmjs.org/npm/-/npm-2.7.1.tgz",
"dependencies": {
"abbrev": {
"version": "1.0.5",
@ -3669,8 +3869,8 @@
"resolved": "https://registry.npmjs.org/github-url-from-username-repo/-/github-url-from-username-repo-1.0.2.tgz"
},
"glob": {
"version": "4.3.5",
"resolved": "https://registry.npmjs.org/glob/-/glob-4.3.5.tgz"
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/glob/-/glob-4.4.2.tgz"
},
"graceful-fs": {
"version": "3.0.5",
@ -3689,8 +3889,8 @@
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.3.tgz"
},
"init-package-json": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-1.2.0.tgz",
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-1.3.0.tgz",
"dependencies": {
"promzard": {
"version": "0.2.2",
@ -3873,8 +4073,20 @@
}
},
"read-package-json": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-1.3.1.tgz"
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-1.3.2.tgz",
"dependencies": {
"json-parse-helpfulerror": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/json-parse-helpfulerror/-/json-parse-helpfulerror-1.0.3.tgz",
"dependencies": {
"jju": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/jju/-/jju-1.2.0.tgz"
}
}
}
}
},
"readable-stream": {
"version": "1.0.33",
@ -4033,12 +4245,12 @@
"resolved": "https://registry.npmjs.org/retry/-/retry-0.6.1.tgz"
},
"rimraf": {
"version": "2.2.8",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz"
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.3.1.tgz"
},
"semver": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-4.3.0.tgz"
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-4.3.1.tgz"
},
"sha": {
"version": "1.3.0",
@ -4089,8 +4301,8 @@
"resolved": "https://registry.npmjs.org/umask/-/umask-1.1.0.tgz"
},
"which": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/which/-/which-1.0.8.tgz"
"version": "1.0.9",
"resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz"
},
"wrappy": {
"version": "1.0.1",
@ -4107,8 +4319,60 @@
"resolved": "https://registry.npmjs.org/read-json/-/read-json-0.1.0.tgz"
},
"rimraf": {
"version": "2.2.8",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz"
"version": "2.3.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.3.2.tgz",
"dependencies": {
"glob": {
"version": "4.5.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz",
"dependencies": {
"inflight": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.4.tgz",
"dependencies": {
"wrappy": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz"
}
}
},
"inherits": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz"
},
"minimatch": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.4.tgz",
"dependencies": {
"brace-expansion": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.0.tgz",
"dependencies": {
"balanced-match": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.2.0.tgz"
},
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
}
}
}
}
},
"once": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/once/-/once-1.3.1.tgz",
"dependencies": {
"wrappy": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz"
}
}
}
}
}
}
},
"run-parallel": {
"version": "1.0.0",
@ -4123,8 +4387,8 @@
"resolved": "https://registry.npmjs.org/safe-json-parse/-/safe-json-parse-2.0.0.tgz"
},
"semver": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-4.3.0.tgz"
"version": "4.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-4.3.1.tgz"
},
"sorted-object": {
"version": "1.0.0",
@ -4201,8 +4465,8 @@
"resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz"
},
"pretty-ms": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-1.0.1.tgz",
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-1.1.0.tgz",
"dependencies": {
"get-stdin": {
"version": "4.0.1",