Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/twbs/bootstrap.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Gruntfile.js5
-rw-r--r--README.md11
-rw-r--r--_config.yml10
-rw-r--r--bower.json2
-rw-r--r--docs/_data/browser-bugs.yml10
-rw-r--r--docs/_data/translations.yml5
-rw-r--r--docs/about/history.md2
-rw-r--r--docs/getting-started/accessibility.md6
-rw-r--r--docs/getting-started/download.md13
-rw-r--r--docs/getting-started/support.md28
-rw-r--r--docs/getting-started/third-party-support.md2
-rw-r--r--js/.jscsrc1
-rw-r--r--js/tests/README.md61
-rw-r--r--js/tests/index.html87
-rw-r--r--js/tests/unit/.jshintrc1
-rw-r--r--js/tests/unit/alert.js10
-rw-r--r--js/tests/unit/collapse.js136
-rw-r--r--js/tests/unit/dropdown.js95
-rw-r--r--js/tests/unit/popover.js35
-rw-r--r--js/tests/unit/scrollspy.js92
-rw-r--r--js/tests/unit/tab.js15
-rw-r--r--js/tests/visual/collapse.html6
-rw-r--r--js/transition.js2
-rw-r--r--less/mixins/background-variant.less9
-rw-r--r--package.js2
-rw-r--r--package.json16
-rw-r--r--scss/_buttons.scss8
-rw-r--r--scss/_forms.scss6
-rw-r--r--scss/_jumbotron.scss2
-rw-r--r--scss/_modal.scss5
-rw-r--r--scss/_nav.scss2
-rw-r--r--scss/_scaffolding.scss11
-rw-r--r--scss/_tooltip.scss1
-rw-r--r--scss/_variables.scss4
-rw-r--r--scss/mixins/_background-variant.scss2
-rw-r--r--scss/mixins/_responsive-visibility.scss2
-rw-r--r--scss/mixins/_text-emphasis.scss2
-rw-r--r--test-infra/npm-shrinkwrap.json708
38 files changed, 1054 insertions, 361 deletions
diff --git a/Gruntfile.js b/Gruntfile.js
index a934eec88c..a54d4781b2 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -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 %>',
diff --git a/README.md b/README.md
index 6a28344893..13785757b1 100644
--- a/README.md
+++ b/README.md
@@ -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.
diff --git a/_config.yml b/_config.yml
index 1f63b36f9d..6dd22ada88 100644
--- a/_config.yml
+++ b/_config.yml
@@ -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:
diff --git a/bower.json b/bower.json
index 3a45b2c327..27606caa81 100644
--- a/bower.json
+++ b/bower.json
@@ -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",
diff --git a/docs/_data/browser-bugs.yml b/docs/_data/browser-bugs.yml
index 690efef742..9888b5a3ba 100644
--- a/docs/_data/browser-bugs.yml
+++ b/docs/_data/browser-bugs.yml
@@ -120,6 +120,16 @@
-
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)
summary: >
Animation glitch when returning to inactive tab after animations occurred while tab was hidden.
diff --git a/docs/_data/translations.yml b/docs/_data/translations.yml
index 2340b99f15..3879fc34ce 100644
--- a/docs/_data/translations.yml
+++ b/docs/_data/translations.yml
@@ -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
diff --git a/docs/about/history.md b/docs/about/history.md
index a2c9db14be..7d881fe07c 100644
--- a/docs/about/history.md
+++ b/docs/about/history.md
@@ -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. \ No newline at end of file
+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. \ No newline at end of file
diff --git a/docs/getting-started/accessibility.md b/docs/getting-started/accessibility.md
index c1a23da350..c20085ff85 100644
--- a/docs/getting-started/accessibility.md
+++ b/docs/getting-started/accessibility.md
@@ -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/)
diff --git a/docs/getting-started/download.md b/docs/getting-started/download.md
index 6bcf8dd009..8bebeea4cc 100644
--- a/docs/getting-started/download.md
+++ b/docs/getting-started/download.md
@@ -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.
diff --git a/docs/getting-started/support.md b/docs/getting-started/support.md
index 2a96dbef70..cf87535baf 100644
--- a/docs/getting-started/support.md
+++ b/docs/getting-started/support.md
@@ -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.
diff --git a/docs/getting-started/third-party-support.md b/docs/getting-started/third-party-support.md
index 604290d028..00a74fce75 100644
--- a/docs/getting-started/third-party-support.md
+++ b/docs/getting-started/third-party-support.md
@@ -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/).
diff --git a/js/.jscsrc b/js/.jscsrc
index 982676e15f..caf1938f21 100644
--- a/js/.jscsrc
+++ b/js/.jscsrc
@@ -8,6 +8,7 @@
"disallowSpaceAfterPrefixUnaryOperators": ["++", "--", "+", "-", "~", "!"],
"disallowSpaceBeforeBinaryOperators": [","],
"disallowSpaceBeforePostfixUnaryOperators": ["++", "--"],
+ "disallowSpacesInFunctionDeclaration": { "beforeOpeningRoundBrace": true },
"disallowSpacesInNamedFunctionExpression": { "beforeOpeningRoundBrace": true },
"disallowSpacesInsideArrayBrackets": true,
"disallowSpacesInsideParentheses": true,
diff --git a/js/tests/README.md b/js/tests/README.md
new file mode 100644
index 0000000000..6cdb41059b
--- /dev/null
+++ b/js/tests/README.md
@@ -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')
+})
+```
diff --git a/js/tests/index.html b/js/tests/index.html
index c1b5b39141..d1ec0a7f40 100644
--- a/js/tests/index.html
+++ b/js/tests/index.html
@@ -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 -->
diff --git a/js/tests/unit/.jshintrc b/js/tests/unit/.jshintrc
index 682a49af1e..22e878512b 100644
--- a/js/tests/unit/.jshintrc
+++ b/js/tests/unit/.jshintrc
@@ -1,5 +1,6 @@
{
"extends" : "../../.jshintrc",
"devel" : true,
+ "es3" : false,
"qunit" : true
}
diff --git a/js/tests/unit/alert.js b/js/tests/unit/alert.js
index 75ae2d2ef8..6be990a518 100644
--- a/js/tests/unit/alert.js
+++ b/js/tests/unit/alert.js
@@ -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) {
diff --git a/js/tests/unit/collapse.js b/js/tests/unit/collapse.js
index a4d5eec67b..0f1b7b119f 100644
--- a/js/tests/unit/collapse.js
+++ b/js/tests/unit/collapse.js
@@ -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')
diff --git a/js/tests/unit/dropdown.js b/js/tests/unit/dropdown.js
index 0a425200a6..e0d1df9700 100644
--- a/js/tests/unit/dropdown.js
+++ b/js/tests/unit/dropdown.js
@@ -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')
+ })
})
diff --git a/js/tests/unit/popover.js b/js/tests/unit/popover.js
index d2cdadd752..2cbc701387 100644
--- a/js/tests/unit/popover.js
+++ b/js/tests/unit/popover.js
@@ -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')
+ })
+
})
diff --git a/js/tests/unit/scrollspy.js b/js/tests/unit/scrollspy.js
index 41d82e0e53..bf5fa0bff5 100644
--- a/js/tests/unit/scrollspy.js
+++ b/js/tests/unit/scrollspy.js
@@ -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') })
+ })
+
})
diff --git a/js/tests/unit/tab.js b/js/tests/unit/tab.js
index d497de454a..85d9f67a25 100644
--- a/js/tests/unit/tab.js
+++ b/js/tests/unit/tab.js
@@ -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')
})
diff --git a/js/tests/visual/collapse.html b/js/tests/visual/collapse.html
index 1b81cf5ca8..42ac0aaa2b 100644
--- a/js/tests/visual/collapse.html
+++ b/js/tests/visual/collapse.html
@@ -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>
diff --git a/js/transition.js b/js/transition.js
index ec9ab68244..f23e6bdfe4 100644
--- a/js/transition.js
+++ b/js/transition.js
@@ -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.
diff --git a/less/mixins/background-variant.less b/less/mixins/background-variant.less
new file mode 100644
index 0000000000..a85c22b745
--- /dev/null
+++ b/less/mixins/background-variant.less
@@ -0,0 +1,9 @@
+// Contextual backgrounds
+
+.bg-variant(@color) {
+ background-color: @color;
+ a&:hover,
+ a&:focus {
+ background-color: darken(@color, 10%);
+ }
+}
diff --git a/package.js b/package.js
index 8e5e87246c..e42eb98321 100644
--- a/package.js
+++ b/package.js
@@ -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'
});
diff --git a/package.json b/package.json
index 89852bd939..23b59c81ac 100644
--- a/package.json
+++ b/package.json
@@ -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"]
}
}
diff --git a/scss/_buttons.scss b/scss/_buttons.scss
index 5f4b3bc426..b33081868b 100644
--- a/scss/_buttons.scss
+++ b/scss/_buttons.scss
@@ -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
+ }
+ }
}
diff --git a/scss/_forms.scss b/scss/_forms.scss
index 4e0a45f9f1..8b58835a7b 100644
--- a/scss/_forms.scss
+++ b/scss/_forms.scss
@@ -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;
diff --git a/scss/_jumbotron.scss b/scss/_jumbotron.scss
index f826cd6160..d60793efd2 100644
--- a/scss/_jumbotron.scss
+++ b/scss/_jumbotron.scss
@@ -25,7 +25,7 @@
}
.jumbotron-heading {
- font-size: ($font-size-base * 4.5);
+ font-size: $jumbotron-heading-font-size;
}
}
diff --git a/scss/_modal.scss b/scss/_modal.scss
index da3b90c0b4..ac27613767 100644
--- a/scss/_modal.scss
+++ b/scss/_modal.scss
@@ -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; }
diff --git a/scss/_nav.scss b/scss/_nav.scss
index 3d27891be7..228613cfe6 100644
--- a/scss/_nav.scss
+++ b/scss/_nav.scss
@@ -137,11 +137,9 @@
.tab-content {
> .tab-pane {
display: none;
- visibility: hidden;
}
> .active {
display: block;
- visibility: visible;
}
}
diff --git a/scss/_scaffolding.scss b/scss/_scaffolding.scss
index 27e09e96f6..9b93010bac 100644
--- a/scss/_scaffolding.scss
+++ b/scss/_scaffolding.scss
@@ -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;
+}
diff --git a/scss/_tooltip.scss b/scss/_tooltip.scss
index 00c6049b85..379d6d5e60 100644
--- a/scss/_tooltip.scss
+++ b/scss/_tooltip.scss
@@ -13,7 +13,6 @@
font-size: $font-size-sm;
font-weight: normal;
line-height: 1.4;
- visibility: visible;
opacity: 0;
&.in { opacity: $tooltip-opacity; }
diff --git a/scss/_variables.scss b/scss/_variables.scss
index 4119526be3..4b78edb197 100644
--- a/scss/_variables.scss
+++ b/scss/_variables.scss
@@ -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;
diff --git a/scss/mixins/_background-variant.scss b/scss/mixins/_background-variant.scss
index 577f019ca2..3287d7a060 100644
--- a/scss/mixins/_background-variant.scss
+++ b/scss/mixins/_background-variant.scss
@@ -6,7 +6,7 @@
background-color: $color;
}
a#{$parent} {
- @include hover {
+ @include hover-focus {
background-color: darken($color, 10%);
}
}
diff --git a/scss/mixins/_responsive-visibility.scss b/scss/mixins/_responsive-visibility.scss
index 9867db013d..cbdf777239 100644
--- a/scss/mixins/_responsive-visibility.scss
+++ b/scss/mixins/_responsive-visibility.scss
@@ -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; }
diff --git a/scss/mixins/_text-emphasis.scss b/scss/mixins/_text-emphasis.scss
index ab3869d31e..0a6428ea76 100644
--- a/scss/mixins/_text-emphasis.scss
+++ b/scss/mixins/_text-emphasis.scss
@@ -5,7 +5,7 @@
color: $color;
}
a#{$parent} {
- @include hover {
+ @include hover-focus {
color: darken($color, 10%);
}
}
diff --git a/test-infra/npm-shrinkwrap.json b/test-infra/npm-shrinkwrap.json
index 46a73cc1f6..321fbea9c4 100644
--- a/test-infra/npm-shrinkwrap.json
+++ b/test-infra/npm-shrinkwrap.json
@@ -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",