diff options
| author | ruki <waruqi@gmail.com> | 2018-11-08 00:38:48 +0800 |
|---|---|---|
| committer | ruki <waruqi@gmail.com> | 2018-11-07 21:53:09 +0800 |
| commit | 26105034da4fcce7ac883c899d781f016559310d (patch) | |
| tree | c459a5dc4e3aa0972d9919033ece511ce76dd129 /node_modules/nprogress | |
| parent | 2c77f00f1a7ecb6c8192f9c16d3b2001b254a107 (diff) | |
| download | xmake-docs-26105034da4fcce7ac883c899d781f016559310d.tar.gz xmake-docs-26105034da4fcce7ac883c899d781f016559310d.zip | |
switch to vuepress
Diffstat (limited to 'node_modules/nprogress')
| -rw-r--r-- | node_modules/nprogress/.npmignore | 3 | ||||
| -rw-r--r-- | node_modules/nprogress/.travis.yml | 2 | ||||
| -rw-r--r-- | node_modules/nprogress/History.md | 110 | ||||
| -rw-r--r-- | node_modules/nprogress/License.md | 19 | ||||
| -rw-r--r-- | node_modules/nprogress/Notes.md | 25 | ||||
| -rw-r--r-- | node_modules/nprogress/Readme.md | 197 | ||||
| -rw-r--r-- | node_modules/nprogress/bower.json | 27 | ||||
| -rw-r--r-- | node_modules/nprogress/component.json | 19 | ||||
| -rw-r--r-- | node_modules/nprogress/nprogress.css | 74 | ||||
| -rw-r--r-- | node_modules/nprogress/nprogress.js | 476 | ||||
| -rw-r--r-- | node_modules/nprogress/package.json | 47 | ||||
| -rw-r--r-- | node_modules/nprogress/test/component.html | 26 | ||||
| -rw-r--r-- | node_modules/nprogress/test/test.js | 175 |
13 files changed, 1200 insertions, 0 deletions
diff --git a/node_modules/nprogress/.npmignore b/node_modules/nprogress/.npmignore new file mode 100644 index 00000000..7af42a9b --- /dev/null +++ b/node_modules/nprogress/.npmignore @@ -0,0 +1,3 @@ +vendor +index.html +support diff --git a/node_modules/nprogress/.travis.yml b/node_modules/nprogress/.travis.yml new file mode 100644 index 00000000..1d3503fd --- /dev/null +++ b/node_modules/nprogress/.travis.yml @@ -0,0 +1,2 @@ +language: node_js +node_js: ["iojs"] diff --git a/node_modules/nprogress/History.md b/node_modules/nprogress/History.md new file mode 100644 index 00000000..b72f4d7a --- /dev/null +++ b/node_modules/nprogress/History.md @@ -0,0 +1,110 @@ +## [v0.2.0] - May 13, 2015 + + * [#93] - Remove jQuery dependency in component ([@slang800]) + * [#120] - Fix the Readme showing a wrong example for `ease` ([@teeceepee]) + +Minor changes: + + * [#92] - Fix typo in Readme ([@FND]) + * [#90] - Fix typo in Readme ([@mdxs]) + * [#119] - Fix typo in Readme ([@infertux]) + * [#53] - Use `===` instead of `==` ([@drodil]) + +## [v0.1.6] - June 25, 2014 + + * [#86] - Add support for specifying a different parent container. ([@jonjaques], [#14], [#33], [#39]) + * [#64] - Fix Require.js support ([#75], [#85]) + * [#54] - Fix component support + +## [v0.1.5] - June 21, 2014 + + * [#82] - Release properly to the npm registry + +## [v0.1.4] - June 21, 2014 + + * [#65] - Bower: don't download package.json. Fixes browserify + jquery problem. ([@amelon]) + * [#75] - Fix compatibility with Karma. ([@shaqq]) + +Internal changes: + + * [#77] - Use SVG to display Travis-CI badge. ([@Mithgol]) + * [#34] - Readme: update .inc() and .status docs ([@lacivert]) + * [#73] - Readme: update year ([@rwholmes]) + +## [v0.1.3] - March 26, 2014 + + * [#7] - Remove jQuery dependency ([#28], [#17], [@rurjur]) + * [#73] - Update Readme to change year to 2014. ([@rwholmes]) + +## [v0.1.2] - August 21, 2013 + +Minor update for proper [Bower] and [Component] support. + + * Add Bower support. + * Fix Component support and use `component/jquery` as a dependency. + +## [v0.1.1] - August 21, 2013 + +Minor fixes. + + * Removed the busy cursor that occurs when loading. + * Added support for IE7 to IE9. ([#3], [@markbao]) + * Implement `trickleRate` and `trickleSpeed` options. + * [#5] - Implement the `showSpinner` option to allow removing the spinner. ([#9], [@rahulcs]) + * Registered as a Component in Component.io. + * [#8] - Updated the Readme with better Turbolinks instructions. + +## v0.1.0 - August 20, 2013 + +Initial release. + +[Bower]: http://bower.io +[Component]: http://component.io +[#119]: https://github.com/rstacruz/nprogress/issues/119 +[#120]: https://github.com/rstacruz/nprogress/issues/120 +[#14]: https://github.com/rstacruz/nprogress/issues/14 +[#17]: https://github.com/rstacruz/nprogress/issues/17 +[#28]: https://github.com/rstacruz/nprogress/issues/28 +[#33]: https://github.com/rstacruz/nprogress/issues/33 +[#34]: https://github.com/rstacruz/nprogress/issues/34 +[#39]: https://github.com/rstacruz/nprogress/issues/39 +[#3]: https://github.com/rstacruz/nprogress/issues/3 +[#54]: https://github.com/rstacruz/nprogress/issues/84 +[#5]: https://github.com/rstacruz/nprogress/issues/5 +[#64]: https://github.com/rstacruz/nprogress/issues/64 +[#65]: https://github.com/rstacruz/nprogress/issues/65 +[#73]: https://github.com/rstacruz/nprogress/issues/73 +[#75]: https://github.com/rstacruz/nprogress/issues/75 +[#77]: https://github.com/rstacruz/nprogress/issues/77 +[#7]: https://github.com/rstacruz/nprogress/issues/7 +[#82]: https://github.com/rstacruz/nprogress/issues/82 +[#84]: https://github.com/rstacruz/nprogress/issues/84 +[#85]: https://github.com/rstacruz/nprogress/issues/85 +[#86]: https://github.com/rstacruz/nprogress/issues/86 +[#8]: https://github.com/rstacruz/nprogress/issues/8 +[#90]: https://github.com/rstacruz/nprogress/issues/90 +[#92]: https://github.com/rstacruz/nprogress/issues/92 +[#93]: https://github.com/rstacruz/nprogress/issues/93 +[#9]: https://github.com/rstacruz/nprogress/issues/9 +[@slang800]: https://github.com/slang800 +[@teeceepee]: https://github.com/teeceepee +[@FND]: https://github.com/FND +[@mdxs]: https://github.com/mdxs +[@infertux]: https://github.com/infertux +[@jonjaques]: https://github.com/jonjaques +[@amelon]: https://github.com/amelon +[@shaqq]: https://github.com/shaqq +[@Mithgol]: https://github.com/Mithgol +[@lacivert]: https://github.com/lacivert +[@rwholmes]: https://github.com/rwholmes +[@rurjur]: https://github.com/rurjur +[@markbao]: https://github.com/markbao +[@rahulcs]: https://github.com/rahulcs +[v0.1.6]: https://github.com/rstacruz/nprogress/compare/v0.1.5...v0.1.6 +[v0.1.5]: https://github.com/rstacruz/nprogress/compare/v0.1.4...v0.1.5 +[v0.1.4]: https://github.com/rstacruz/nprogress/compare/v0.1.3...v0.1.4 +[v0.1.3]: https://github.com/rstacruz/nprogress/compare/v0.1.2...v0.1.3 +[v0.1.2]: https://github.com/rstacruz/nprogress/compare/v0.1.1...v0.1.2 +[v0.1.1]: https://github.com/rstacruz/nprogress/compare/v0.1.0...v0.1.1 +[#53]: https://github.com/rstacruz/nprogress/issues/53 +[v0.2.0]: https://github.com/rstacruz/nprogress/compare/v0.1.6...v0.2.0 diff --git a/node_modules/nprogress/License.md b/node_modules/nprogress/License.md new file mode 100644 index 00000000..560c4fec --- /dev/null +++ b/node_modules/nprogress/License.md @@ -0,0 +1,19 @@ +Copyright (c) 2013-2014 Rico Sta. Cruz + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/nprogress/Notes.md b/node_modules/nprogress/Notes.md new file mode 100644 index 00000000..3956c416 --- /dev/null +++ b/node_modules/nprogress/Notes.md @@ -0,0 +1,25 @@ +Testing +------- + + $ npm install + $ npm test + +or try it out in the browser: + + $ open test/index.html + +Testing component build +----------------------- + + $ component install + $ component build + $ open test/component.html + +Releasing +--------- + + $ npm test + $ bump *.json nprogress.js # bump version numbers + $ git release 0.1.1 # release to bower/github + $ npm publish # release to npm + $ git push origin master:gh-pages # update the site diff --git a/node_modules/nprogress/Readme.md b/node_modules/nprogress/Readme.md new file mode 100644 index 00000000..4097088c --- /dev/null +++ b/node_modules/nprogress/Readme.md @@ -0,0 +1,197 @@ +NProgress +========= + +Slim progress bars for Ajax'y applications. Inspired by Google, YouTube, and +Medium. + + +Installation +------------ + +Add [nprogress.js] and [nprogress.css] to your project. + +```html +<script src='nprogress.js'></script> +<link rel='stylesheet' href='nprogress.css'/> +``` + +NProgress is available via [bower] and [npm] and [spm]. + + $ bower install --save nprogress + $ npm install --save nprogress + +[bower]: http://bower.io/search/?q=nprogress +[npm]: https://www.npmjs.org/package/nprogress +[spm]: http://spmjs.io/package/nprogress + +Basic usage +----------- + +Simply call `start()` and `done()` to control the progress bar. + +~~~ js +NProgress.start(); +NProgress.done(); +~~~ + +Using [Turbolinks] or similar? Ensure you're using Turbolinks 1.3.0+, and use +this: (explained + [here](https://github.com/rstacruz/nprogress/issues/8#issuecomment-23010560)) + +~~~ js +$(document).on('page:fetch', function() { NProgress.start(); }); +$(document).on('page:change', function() { NProgress.done(); }); +$(document).on('page:restore', function() { NProgress.remove(); }); +~~~ + +Ideas +----- + + * Add progress to your Ajax calls! Bind it to the jQuery `ajaxStart` and + `ajaxStop` events. + + * Make a fancy loading bar even without Turbolinks/Pjax! Bind it to + `$(document).ready` and `$(window).load`. + +Advanced usage +-------------- + +__Percentages:__ To set a progress percentage, call `.set(n)`, where *n* is a +number between `0..1`. + +~~~ js +NProgress.set(0.0); // Sorta same as .start() +NProgress.set(0.4); +NProgress.set(1.0); // Sorta same as .done() +~~~ + +__Incrementing:__ To increment the progress bar, just use `.inc()`. This +increments it with a random amount. This will never get to 100%: use it for +every image load (or similar). + +~~~ js +NProgress.inc(); +~~~ + +If you want to increment by a specific value, you can pass that as a parameter: + +~~~ js +NProgress.inc(0.2); // This will get the current status value and adds 0.2 until status is 0.994 +~~~ + +__Force-done:__ By passing `true` to `done()`, it will show the progress bar +even if it's not being shown. (The default behavior is that *.done()* will not + do anything if *.start()* isn't called) + +~~~ js +NProgress.done(true); +~~~ + +__Get the status value:__ To get the status value, use `.status` + +Configuration +------------- + +#### `minimum` +Changes the minimum percentage used upon starting. (default: `0.08`) + +~~~ js +NProgress.configure({ minimum: 0.1 }); +~~~ + +#### `template` +You can change the markup using `template`. To keep the progress +bar working, keep an element with `role='bar'` in there. See the [default template] +for reference. + +~~~ js +NProgress.configure({ + template: "<div class='....'>...</div>" +}); +~~~ + +#### `easing` and `speed` +Adjust animation settings using *easing* (a CSS easing string) +and *speed* (in ms). (default: `ease` and `200`) + +~~~ js +NProgress.configure({ easing: 'ease', speed: 500 }); +~~~ + +#### `trickle` +Turn off the automatic incrementing behavior by setting this to `false`. (default: `true`) + +~~~ js +NProgress.configure({ trickle: false }); +~~~ + +#### `trickleRate` and `trickleSpeed` +You can adjust the *trickleRate* (how much to increase per trickle) and +*trickleSpeed* (how often to trickle, in ms). + +~~~ js +NProgress.configure({ trickleRate: 0.02, trickleSpeed: 800 }); +~~~ + +#### `showSpinner` +Turn off loading spinner by setting it to false. (default: `true`) + +~~~ js +NProgress.configure({ showSpinner: false }); +~~~ + +#### `parent` +specify this to change the parent container. (default: `body`) + +~~~ js +NProgress.configure({ parent: '#container' }); +~~~ + +Customization +------------- + +Just edit `nprogress.css` to your liking. Tip: you probably only want to find +and replace occurrences of `#29d`. + +The included CSS file is pretty minimal... in fact, feel free to scrap it and +make your own! + +Resources +--------- + + * [New UI Pattern: Website Loading Bars](http://www.usabilitypost.com/2013/08/19/new-ui-pattern-website-loading-bars/) (usabilitypost.com) + +Support +------- + +__Bugs and requests__: submit them through the project's issues tracker.<br> +[]( https://github.com/rstacruz/nprogress/issues ) + +__Questions__: ask them at StackOverflow with the tag *nprogress*.<br> +[]( http://stackoverflow.com/questions/tagged/nprogress ) + +__Chat__: join us at gitter.im.<br> +[]( https://gitter.im/rstacruz/nprogress ) + +[default template]: +https://github.com/rstacruz/nprogress/blob/master/nprogress.js#L31 +[Turbolinks]: https://github.com/rails/turbolinks +[nprogress.js]: http://ricostacruz.com/nprogress/nprogress.js +[nprogress.css]: http://ricostacruz.com/nprogress/nprogress.css + +Thanks +------ + +**NProgress** © 2013-2014, Rico Sta. Cruz. Released under the [MIT License].<br> +Authored and maintained by Rico Sta. Cruz with help from [contributors]. + +> [ricostacruz.com](http://ricostacruz.com) · +> GitHub [@rstacruz](https://github.com/rstacruz) · +> Twitter [@rstacruz](https://twitter.com/rstacruz) + +[MIT License]: http://mit-license.org/ +[contributors]: http://github.com/rstacruz/nprogress/contributors + +[](http://travis-ci.org/rstacruz/nprogress) +[](https://npmjs.org/package/nprogress "View this project on npm") +[](http://spmjs.io/package/nprogress) diff --git a/node_modules/nprogress/bower.json b/node_modules/nprogress/bower.json new file mode 100644 index 00000000..19654743 --- /dev/null +++ b/node_modules/nprogress/bower.json @@ -0,0 +1,27 @@ +{ + "name": "nprogress", + "repo": "rstacruz/nprogress", + "description": "slim progress bar", + "version": "0.2.0", + "keywords": [ + "progress", + "bar", + "spinner" + ], + "license": "MIT", + "main": ["nprogress.js", "nprogress.css"], + "scripts": [ + "nprogress.js" + ], + "styles": [ + "nprogress.css" + ], + "ignore": [ + "**/.*", + "node_modules", + "components", + "package.json", + "test", + "vendor" + ] +} diff --git a/node_modules/nprogress/component.json b/node_modules/nprogress/component.json new file mode 100644 index 00000000..698499ca --- /dev/null +++ b/node_modules/nprogress/component.json @@ -0,0 +1,19 @@ +{ + "name": "nprogress", + "repo": "rstacruz/nprogress", + "description": "slim progress bar", + "version": "0.2.0", + "keywords": ["progress","bar","spinner"], + "development": { + "chaijs/chai": "*", + "visionmedia/mocha": "*" + }, + "license": "MIT", + "main": "nprogress.js", + "scripts": [ + "nprogress.js" + ], + "styles": [ + "nprogress.css" + ] +} diff --git a/node_modules/nprogress/nprogress.css b/node_modules/nprogress/nprogress.css new file mode 100644 index 00000000..6752d7f4 --- /dev/null +++ b/node_modules/nprogress/nprogress.css @@ -0,0 +1,74 @@ +/* Make clicks pass-through */ +#nprogress { + pointer-events: none; +} + +#nprogress .bar { + background: #29d; + + position: fixed; + z-index: 1031; + top: 0; + left: 0; + + width: 100%; + height: 2px; +} + +/* Fancy blur effect */ +#nprogress .peg { + display: block; + position: absolute; + right: 0px; + width: 100px; + height: 100%; + box-shadow: 0 0 10px #29d, 0 0 5px #29d; + opacity: 1.0; + + -webkit-transform: rotate(3deg) translate(0px, -4px); + -ms-transform: rotate(3deg) translate(0px, -4px); + transform: rotate(3deg) translate(0px, -4px); +} + +/* Remove these to get rid of the spinner */ +#nprogress .spinner { + display: block; + position: fixed; + z-index: 1031; + top: 15px; + right: 15px; +} + +#nprogress .spinner-icon { + width: 18px; + height: 18px; + box-sizing: border-box; + + border: solid 2px transparent; + border-top-color: #29d; + border-left-color: #29d; + border-radius: 50%; + + -webkit-animation: nprogress-spinner 400ms linear infinite; + animation: nprogress-spinner 400ms linear infinite; +} + +.nprogress-custom-parent { + overflow: hidden; + position: relative; +} + +.nprogress-custom-parent #nprogress .spinner, +.nprogress-custom-parent #nprogress .bar { + position: absolute; +} + +@-webkit-keyframes nprogress-spinner { + 0% { -webkit-transform: rotate(0deg); } + 100% { -webkit-transform: rotate(360deg); } +} +@keyframes nprogress-spinner { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +} + diff --git a/node_modules/nprogress/nprogress.js b/node_modules/nprogress/nprogress.js new file mode 100644 index 00000000..b23b3006 --- /dev/null +++ b/node_modules/nprogress/nprogress.js @@ -0,0 +1,476 @@ +/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress + * @license MIT */ + +;(function(root, factory) { + + if (typeof define === 'function' && define.amd) { + define(factory); + } else if (typeof exports === 'object') { + module.exports = factory(); + } else { + root.NProgress = factory(); + } + +})(this, function() { + var NProgress = {}; + + NProgress.version = '0.2.0'; + + var Settings = NProgress.settings = { + minimum: 0.08, + easing: 'ease', + positionUsing: '', + speed: 200, + trickle: true, + trickleRate: 0.02, + trickleSpeed: 800, + showSpinner: true, + barSelector: '[role="bar"]', + spinnerSelector: '[role="spinner"]', + parent: 'body', + template: '<div class="bar" role="bar"><div class="peg"></div></div><div class="spinner" role="spinner"><div class="spinner-icon"></div></div>' + }; + + /** + * Updates configuration. + * + * NProgress.configure({ + * minimum: 0.1 + * }); + */ + NProgress.configure = function(options) { + var key, value; + for (key in options) { + value = options[key]; + if (value !== undefined && options.hasOwnProperty(key)) Settings[key] = value; + } + + return this; + }; + + /** + * Last number. + */ + + NProgress.status = null; + + /** + * Sets the progress bar status, where `n` is a number from `0.0` to `1.0`. + * + * NProgress.set(0.4); + * NProgress.set(1.0); + */ + + NProgress.set = function(n) { + var started = NProgress.isStarted(); + + n = clamp(n, Settings.minimum, 1); + NProgress.status = (n === 1 ? null : n); + + var progress = NProgress.render(!started), + bar = progress.querySelector(Settings.barSelector), + speed = Settings.speed, + ease = Settings.easing; + + progress.offsetWidth; /* Repaint */ + + queue(function(next) { + // Set positionUsing if it hasn't already been set + if (Settings.positionUsing === '') Settings.positionUsing = NProgress.getPositioningCSS(); + + // Add transition + css(bar, barPositionCSS(n, speed, ease)); + + if (n === 1) { + // Fade out + css(progress, { + transition: 'none', + opacity: 1 + }); + progress.offsetWidth; /* Repaint */ + + setTimeout(function() { + css(progress, { + transition: 'all ' + speed + 'ms linear', + opacity: 0 + }); + setTimeout(function() { + NProgress.remove(); + next(); + }, speed); + }, speed); + } else { + setTimeout(next, speed); + } + }); + + return this; + }; + + NProgress.isStarted = function() { + return typeof NProgress.status === 'number'; + }; + + /** + * Shows the progress bar. + * This is the same as setting the status to 0%, except that it doesn't go backwards. + * + * NProgress.start(); + * + */ + NProgress.start = function() { + if (!NProgress.status) NProgress.set(0); + + var work = function() { + setTimeout(function() { + if (!NProgress.status) return; + NProgress.trickle(); + work(); + }, Settings.trickleSpeed); + }; + + if (Settings.trickle) work(); + + return this; + }; + + /** + * Hides the progress bar. + * This is the *sort of* the same as setting the status to 100%, with the + * difference being `done()` makes some placebo effect of some realistic motion. + * + * NProgress.done(); + * + * If `true` is passed, it will show the progress bar even if its hidden. + * + * NProgress.done(true); + */ + + NProgress.done = function(force) { + if (!force && !NProgress.status) return this; + + return NProgress.inc(0.3 + 0.5 * Math.random()).set(1); + }; + + /** + * Increments by a random amount. + */ + + NProgress.inc = function(amount) { + var n = NProgress.status; + + if (!n) { + return NProgress.start(); + } else { + if (typeof amount !== 'number') { + amount = (1 - n) * clamp(Math.random() * n, 0.1, 0.95); + } + + n = clamp(n + amount, 0, 0.994); + return NProgress.set(n); + } + }; + + NProgress.trickle = function() { + return NProgress.inc(Math.random() * Settings.trickleRate); + }; + + /** + * Waits for all supplied jQuery promises and + * increases the progress as the promises resolve. + * + * @param $promise jQUery Promise + */ + (function() { + var initial = 0, current = 0; + + NProgress.promise = function($promise) { + if (!$promise || $promise.state() === "resolved") { + return this; + } + + if (current === 0) { + NProgress.start(); + } + + initial++; + current++; + + $promise.always(function() { + current--; + if (current === 0) { + initial = 0; + NProgress.done(); + } else { + NProgress.set((initial - current) / initial); + } + }); + + return this; + }; + + })(); + + /** + * (Internal) renders the progress bar markup based on the `template` + * setting. + */ + + NProgress.render = function(fromStart) { + if (NProgress.isRendered()) return document.getElementById('nprogress'); + + addClass(document.documentElement, 'nprogress-busy'); + + var progress = document.createElement('div'); + progress.id = 'nprogress'; + progress.innerHTML = Settings.template; + + var bar = progress.querySelector(Settings.barSelector), + perc = fromStart ? '-100' : toBarPerc(NProgress.status || 0), + parent = document.querySelector(Settings.parent), + spinner; + + css(bar, { + transition: 'all 0 linear', + transform: 'translate3d(' + perc + '%,0,0)' + }); + + if (!Settings.showSpinner) { + spinner = progress.querySelector(Settings.spinnerSelector); + spinner && removeElement(spinner); + } + + if (parent != document.body) { + addClass(parent, 'nprogress-custom-parent'); + } + + parent.appendChild(progress); + return progress; + }; + + /** + * Removes the element. Opposite of render(). + */ + + NProgress.remove = function() { + removeClass(document.documentElement, 'nprogress-busy'); + removeClass(document.querySelector(Settings.parent), 'nprogress-custom-parent'); + var progress = document.getElementById('nprogress'); + progress && removeElement(progress); + }; + + /** + * Checks if the progress bar is rendered. + */ + + NProgress.isRendered = function() { + return !!document.getElementById('nprogress'); + }; + + /** + * Determine which positioning CSS rule to use. + */ + + NProgress.getPositioningCSS = function() { + // Sniff on document.body.style + var bodyStyle = document.body.style; + + // Sniff prefixes + var vendorPrefix = ('WebkitTransform' in bodyStyle) ? 'Webkit' : + ('MozTransform' in bodyStyle) ? 'Moz' : + ('msTransform' in bodyStyle) ? 'ms' : + ('OTransform' in bodyStyle) ? 'O' : ''; + + if (vendorPrefix + 'Perspective' in bodyStyle) { + // Modern browsers with 3D support, e.g. Webkit, IE10 + return 'translate3d'; + } else if (vendorPrefix + 'Transform' in bodyStyle) { + // Browsers without 3D support, e.g. IE9 + return 'translate'; + } else { + // Browsers without translate() support, e.g. IE7-8 + return 'margin'; + } + }; + + /** + * Helpers + */ + + function clamp(n, min, max) { + if (n < min) return min; + if (n > max) return max; + return n; + } + + /** + * (Internal) converts a percentage (`0..1`) to a bar translateX + * percentage (`-100%..0%`). + */ + + function toBarPerc(n) { + return (-1 + n) * 100; + } + + + /** + * (Internal) returns the correct CSS for changing the bar's + * position given an n percentage, and speed and ease from Settings + */ + + function barPositionCSS(n, speed, ease) { + var barCSS; + + if (Settings.positionUsing === 'translate3d') { + barCSS = { transform: 'translate3d('+toBarPerc(n)+'%,0,0)' }; + } else if (Settings.positionUsing === 'translate') { + barCSS = { transform: 'translate('+toBarPerc(n)+'%,0)' }; + } else { + barCSS = { 'margin-left': toBarPerc(n)+'%' }; + } + + barCSS.transition = 'all '+speed+'ms '+ease; + + return barCSS; + } + + /** + * (Internal) Queues a function to be executed. + */ + + var queue = (function() { + var pending = []; + + function next() { + var fn = pending.shift(); + if (fn) { + fn(next); + } + } + + return function(fn) { + pending.push(fn); + if (pending.length == 1) next(); + }; + })(); + + /** + * (Internal) Applies css properties to an element, similar to the jQuery + * css method. + * + * While this helper does assist with vendor prefixed property names, it + * does not perform any manipulation of values prior to setting styles. + */ + + var css = (function() { + var cssPrefixes = [ 'Webkit', 'O', 'Moz', 'ms' ], + cssProps = {}; + + function camelCase(string) { + return string.replace(/^-ms-/, 'ms-').replace(/-([\da-z])/gi, function(match, letter) { + return letter.toUpperCase(); + }); + } + + function getVendorProp(name) { + var style = document.body.style; + if (name in style) return name; + + var i = cssPrefixes.length, + capName = name.charAt(0).toUpperCase() + name.slice(1), + vendorName; + while (i--) { + vendorName = cssPrefixes[i] + capName; + if (vendorName in style) return vendorName; + } + + return name; + } + + function getStyleProp(name) { + name = camelCase(name); + return cssProps[name] || (cssProps[name] = getVendorProp(name)); + } + + function applyCss(element, prop, value) { + prop = getStyleProp(prop); + element.style[prop] = value; + } + + return function(element, properties) { + var args = arguments, + prop, + value; + + if (args.length == 2) { + for (prop in properties) { + value = properties[prop]; + if (value !== undefined && properties.hasOwnProperty(prop)) applyCss(element, prop, value); + } + } else { + applyCss(element, args[1], args[2]); + } + } + })(); + + /** + * (Internal) Determines if an element or space separated list of class names contains a class name. + */ + + function hasClass(element, name) { + var list = typeof element == 'string' ? element : classList(element); + return list.indexOf(' ' + name + ' ') >= 0; + } + + /** + * (Internal) Adds a class to an element. + */ + + function addClass(element, name) { + var oldList = classList(element), + newList = oldList + name; + + if (hasClass(oldList, name)) return; + + // Trim the opening space. + element.className = newList.substring(1); + } + + /** + * (Internal) Removes a class from an element. + */ + + function removeClass(element, name) { + var oldList = classList(element), + newList; + + if (!hasClass(element, name)) return; + + // Replace the class name. + newList = oldList.replace(' ' + name + ' ', ' '); + + // Trim the opening and closing spaces. + element.className = newList.substring(1, newList.length - 1); + } + + /** + * (Internal) Gets a space separated list of the class names on the element. + * The list is wrapped with a single space on each end to facilitate finding + * matches within the list. + */ + + function classList(element) { + return (' ' + (element.className || '') + ' ').replace(/\s+/gi, ' '); + } + + /** + * (Internal) Removes an element from the DOM. + */ + + function removeElement(element) { + element && element.parentNode && element.parentNode.removeChild(element); + } + + return NProgress; +}); + diff --git a/node_modules/nprogress/package.json b/node_modules/nprogress/package.json new file mode 100644 index 00000000..aa732dda --- /dev/null +++ b/node_modules/nprogress/package.json @@ -0,0 +1,47 @@ +{ + "name": "nprogress", + "author": "Rico Sta. Cruz <hi@ricostacruz.com>", + "description": "Simple slim progress bars", + "version": "0.2.0", + "repository": { + "type": "git", + "url": "https://github.com/rstacruz/nprogress.git" + }, + "scripts": { + "test": "mocha" + }, + "main": "nprogress.js", + "license": "MIT", + "devDependencies": { + "chai": "~1.6.1", + "jquery": "^2.1.1", + "jsdom": "^5.4.1", + "mocha": "^2.2.4", + "mocha-jsdom": "^0.3.0" + }, + "dependencies": {}, + "jspm": { + "format": "global", + "shim": { + "nprogress": { + "deps": [ + "./nprogress.css!" + ] + } + }, + "dependencies": { + "css": "*" + } + }, + "spm": { + "main": "nprogress.js", + "output": [ + "nprogress.css" + ], + "ignore": [ + "support", + "test", + "vendor" + ] + } +} diff --git a/node_modules/nprogress/test/component.html b/node_modules/nprogress/test/component.html new file mode 100644 index 00000000..6bcde977 --- /dev/null +++ b/node_modules/nprogress/test/component.html @@ -0,0 +1,26 @@ +<!doctype html> +<html> +<head> + <meta charset="utf-8"> + <meta name='viewport' content='width=device-width,initial-scale=1.0'> + <title>Tests</title> + <link rel='stylesheet' href='../vendor/mocha.css'> + <link rel='stylesheet' href='../build/build.css'> + <script src='../build/build.js'></script> + + <!-- mocha --> + <script src='../vendor/mocha.js'></script> + <script>mocha.ignoreLeaks(); mocha.setup('bdd');</script> + <script src='../vendor/chai.js'></script> + <script>should = chai.should()</script> + <script>assert = chai.assert</script> + <script>testSuite = describe;</script> + + <!-- tests --> + <script src="test.js"></script> + <script>onload = function() { mocha.run(); }</script> +</head> +<body> + <div id="mocha"></div> +</body> +</html> diff --git a/node_modules/nprogress/test/test.js b/node_modules/nprogress/test/test.js new file mode 100644 index 00000000..a381b094 --- /dev/null +++ b/node_modules/nprogress/test/test.js @@ -0,0 +1,175 @@ +(function() { + if (typeof process === 'object') { + require('mocha-jsdom')(); + } + + var root = this; + var assert = (root.chai || require('chai')).assert; + + describe('NProgress', function() { + var $, NProgress; + + beforeEach(function() { + $ = root.jQuery || require('jquery'); + NProgress = root.NProgress || require('../nprogress'); + + this.settings = $.extend({}, NProgress.settings); + }); + + afterEach(function() { + $("#nprogress").remove(); + $('html').attr('class', ''); + NProgress.status = null; + + // Restore settings + $.extend(NProgress.settings, this.settings); + }); + + describe('.set()', function() { + it('.set(0) must render', function(done) { + NProgress.set(0); + assert.equal($("#nprogress").length, 1); + assert.equal($("#nprogress .bar").length, 1); + assert.equal($("#nprogress .peg").length, 1); + assert.equal($("#nprogress .spinner").length, 1); + done(); + }); + + it('.set(1) should appear and disappear', function(done) { + NProgress.configure({ speed: 10 }); + NProgress.set(0).set(1); + assert.equal($("#nprogress").length, 1); + + setTimeout(function() { + assert.equal($("#nprogress").length, 0); + done(); + }, 70); + }); + + it('must respect minimum', function() { + NProgress.set(0); + assert.equal(NProgress.status, NProgress.settings.minimum); + }); + + it('must clamp to minimum', function() { + NProgress.set(-100); + assert.equal(NProgress.status, NProgress.settings.minimum); + }); + + it('must clamp to maximum', function() { + NProgress.set(456); + assert.equal(NProgress.status, null); + }); + }); + + // ---- + + describe('.start()', function() { + it('must render', function(done) { + NProgress.start(); + assert.equal($("#nprogress").length, 1); + done(); + }); + + it('must respect minimum', function() { + NProgress.start(); + assert.equal(NProgress.status, NProgress.settings.minimum); + }); + + it('must be attached to specified parent', function() { + var test = $('<div>', {id: 'test'}).appendTo('body'); + NProgress.configure({parent: '#test'}); + NProgress.start(); + assert.isTrue($("#nprogress").parent().is(test)); + assert.isTrue($(NProgress.settings.parent).hasClass("nprogress-custom-parent")); + }); + }); + + // ---- + + describe('.done()', function() { + it('must not render without start', function(done) { + NProgress.done(); + assert.equal($("#nprogress").length, 0); + done(); + }); + + it('.done(true) must render', function(done) { + NProgress.done(true); + assert.equal($("#nprogress").length, 1); + done(); + }); + }); + + // ---- + + describe('.remove()', function() { + it('should be removed from the parent', function() { + NProgress.set(1); + NProgress.remove(); + + var parent = $(NProgress.settings.parent); + assert.isFalse(parent.hasClass('nprogress-custom-parent')); + assert.equal(parent.find('#nprogress').length, 0); + }); + }); + + // ---- + + describe('.inc()', function() { + it('should render', function() { + NProgress.inc(); + assert.equal($("#nprogress").length, 1); + }); + + it('should start with minimum', function() { + NProgress.inc(); + assert.equal(NProgress.status, NProgress.settings.minimum); + }); + + it('should increment', function() { + NProgress.start(); + var start = NProgress.status; + + NProgress.inc(); + assert.operator(NProgress.status, '>', start); + }); + + it('should never reach 1.0', function() { + for (var i=0; i<100; ++i) { NProgress.inc(); } + assert.operator(NProgress.status, '<', 1.0); + }); + }); + + // ----- + + describe('.configure()', function() { + it('should work', function() { + NProgress.configure({ minimum: 0.5 }); + assert.equal(NProgress.settings.minimum, 0.5); + }); + }); + + // ---- + + describe('.configure(showSpinner)', function() { + it('should render spinner by default', function() { + NProgress.start(); + + assert.equal($("#nprogress .spinner").length, 1); + }); + + it('should be true by default', function() { + assert.equal(NProgress.settings.showSpinner, true); + }); + + it('should hide (on false)', function() { + NProgress.configure({ showSpinner: false }); + NProgress.start(); + + assert.equal($("#nprogress .spinner").length, 0); + }); + }); + }); + +})(); |
