From 7511563cfc5a3780b369df34256cd642a79f121e Mon Sep 17 00:00:00 2001 From: Mark Bao Date: Tue, 20 Aug 2013 20:14:58 -0500 Subject: [PATCH 001/130] Add IE7-9 support nprogress currently uses translate3d(), which is only supported on IE10 (along with most modern browsers). This fix sniffs whether the browser supports translate3d(), and falls back to translate() (IE9 and other non-3D-supporting browsers) or margin (IE7-8) if not. Adds a new setting (positionUsing) which is populated the first time that NProgress.set() is called, calling NProgress.getPositioningCSS() which determines which positioning CSS rule to use. Changes NProgress.set() to call barPositionCSS() to determine what CSS to set on the bar (which uses positionUsing to determine whether it uses transform3d/transform/margin). Sniffing code based heavily on Zynga/scroller IE8-9 support code: https://github.com/zynga/scroller/pull/4 --- nprogress.js | 57 ++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 53 insertions(+), 4 deletions(-) diff --git a/nprogress.js b/nprogress.js index dfb4096..f966a7b 100644 --- a/nprogress.js +++ b/nprogress.js @@ -17,6 +17,7 @@ var Settings = NProgress.settings = { minimum: 0.08, easing: 'ease', + positionUsing: '', speed: 200, trickle: true, trickleRate: 0.02, @@ -63,10 +64,11 @@ $progress[0].offsetWidth; /* Repaint */ $progress.queue(function(next) { - $bar.css({ - transition: 'all '+speed+'ms '+ease, - transform: 'translate3d('+toBarPerc(n)+'%,0,0)' - }); + // Set positionUsing if it hasn't already been set + if (Settings.positionUsing == '') Settings.positionUsing = NProgress.getPositioningCSS(); + + // Add transition + $bar.css(barPositionCSS(n, speed, ease)); if (n === 1) { // Fade out @@ -197,6 +199,31 @@ return ($("#nprogress").length > 0); }; + /** + * 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 */ @@ -216,6 +243,28 @@ 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; + } + return NProgress; }); From e870ecfba9aa283f4a7870f28f3d3270db95bdb5 Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Wed, 21 Aug 2013 17:36:06 +0800 Subject: [PATCH 002/130] Add link to MIT License. --- Readme.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/Readme.md b/Readme.md index efdb9a7..9c9b88a 100644 --- a/Readme.md +++ b/Readme.md @@ -119,8 +119,18 @@ Resources Acknowledgements ---------------- -(c) 2013 Rico Sta. Cruz, MIT License +© 2013, Rico Sta. Cruz. Released under the [MIT +License](http://www.opensource.org/licenses/mit-license.php). +**NProgress** is authored and maintained by [Rico Sta. Cruz][rsc] with help from +its [contributors][c] + + * [My website](http://ricostacruz.com) (ricostacruz.com) + * [Github](http://github.com/rstacruz) (@rstacruz) + * [Twitter](http://twitter.com/rstacruz) (@rstacruz) + +[rsc]: http://ricostacruz.com +[c]: http://github.com/rstacruz/nprogress/contributors [Turbolinks]: https://github.com/rails/turbolinks [nprogress.js]: http://ricostacruz.com/nprogress/nprogress.js [nprogress.css]: http://ricostacruz.com/nprogress/nprogress.css From 9a853cf275d5360fb132a1f1bb7bc0626ed24b54 Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Wed, 21 Aug 2013 17:42:10 +0800 Subject: [PATCH 003/130] Page: fix the redundant 'small nanoscopic' tagline. --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index 5f4b564..d71fccc 100644 --- a/index.html +++ b/index.html @@ -19,7 +19,7 @@ From 3ca83adc939c302812ad9f3779ce3c8eab198a60 Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Wed, 21 Aug 2013 17:52:19 +0800 Subject: [PATCH 004/130] Remove the busy cursor CSS. --- nprogress.css | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/nprogress.css b/nprogress.css index b4d1c09..8b218ef 100644 --- a/nprogress.css +++ b/nprogress.css @@ -4,11 +4,6 @@ -webkit-pointer-events: none; } -/* Make the entire page show a busy cursor */ -.nprogress-busy body { - cursor: wait; -} - #nprogress .bar { background: #29d; @@ -83,3 +78,4 @@ 0% { transform: rotate(0deg); transform: rotate(0deg); } 100% { transform: rotate(360deg); transform: rotate(360deg); } } + From 8870cc67b54f90706b77975c65fe2c817e389f18 Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Wed, 21 Aug 2013 17:54:00 +0800 Subject: [PATCH 005/130] Update the changelog for v0.1.1 so far. --- History.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/History.md b/History.md index 7092ebf..ec0b217 100644 --- a/History.md +++ b/History.md @@ -1,3 +1,11 @@ +v0.1.1 -- Unreleased +-------------------- + + * Removed the busy cursor that occurs when loading. + * Added support for IE7 to IE9. (#3) + * Implement `trickleRate` and `trickleSpeed` options. + * Registered as a Component in Component.io. (untested without jQuery tho!) + v0.1.0 -- August 20, 2013 ------------------------- From 5d01d2153bdaae6e19264f42e6b6b287cfa8a59c Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Wed, 21 Aug 2013 17:54:17 +0800 Subject: [PATCH 006/130] Add extras.css as a repository of extra goodies. --- support/extras.css | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 support/extras.css diff --git a/support/extras.css b/support/extras.css new file mode 100644 index 0000000..21bb39b --- /dev/null +++ b/support/extras.css @@ -0,0 +1,4 @@ +/* Make the entire page show a busy cursor */ +.nprogress-busy body { + cursor: wait; +} From 4c7dac3fa409f56f8bbfb62c85108763b47fd5f1 Mon Sep 17 00:00:00 2001 From: Rahul Chanila Date: Wed, 21 Aug 2013 16:38:42 +0530 Subject: [PATCH 007/130] Add configuration option to disable spinner --- Readme.md | 6 ++++++ nprogress.js | 3 +++ 2 files changed, 9 insertions(+) diff --git a/Readme.md b/Readme.md index 9c9b88a..9936c3f 100644 --- a/Readme.md +++ b/Readme.md @@ -101,6 +101,12 @@ You can adjust the `trickleRate` (how much to increase per trickle) and NProgress.configure({ trickleRate: 0.02, trickleSpeed: 800 }); ~~~ +Want to turn off loading spinner? Set `showSpinner` to `false`. + +~~~ js +NProgress.configure({ showSpinner: false }); +~~~ + Customization ------------- diff --git a/nprogress.js b/nprogress.js index f966a7b..128506d 100644 --- a/nprogress.js +++ b/nprogress.js @@ -22,6 +22,7 @@ trickle: true, trickleRate: 0.02, trickleSpeed: 800, + showSpinner: true, template: '
' }; @@ -177,6 +178,8 @@ transform: 'translate3d('+perc+'%,0,0)' }); + if(!Settings.showSpinner) $el.find('.spinner').hide(); + $el.appendTo(document.body); return $el; From 1fc07e79dee97573fc0d37e578e6d01f8603bdb5 Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Wed, 21 Aug 2013 19:30:23 +0800 Subject: [PATCH 008/130] Update readme on Turbolinks usage. --- Readme.md | 9 ++++++--- nprogress.js | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/Readme.md b/Readme.md index 9c9b88a..92457a5 100644 --- a/Readme.md +++ b/Readme.md @@ -19,11 +19,14 @@ NProgress.start(); NProgress.done(); ~~~ -Using [Turbolinks] or similar? Use this: +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:load', function() { NProgress.done(); }); +$(document).on('page:fetch', function() { NProgress.start(); }); +$(document).on('page:change', function() { NProgress.done(); }); +$(document).on('page:restore', function() { NProgress.remove(); }); ~~~ Ideas diff --git a/nprogress.js b/nprogress.js index f966a7b..6efa5a6 100644 --- a/nprogress.js +++ b/nprogress.js @@ -183,7 +183,7 @@ }; /** - * (Internal) Removes the element. Opposite of render(). + * Removes the element. Opposite of render(). */ NProgress.remove = function() { From f7ac85ee6d9a6e44f3c7107aaa3f97a6062f9e06 Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Wed, 21 Aug 2013 19:41:17 +0800 Subject: [PATCH 009/130] Add tests for showSpinner. (See #9) --- test/test.js | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/test/test.js b/test/test.js index 470a066..64dbe62 100644 --- a/test/test.js +++ b/test/test.js @@ -2,10 +2,17 @@ if (typeof module === 'object') require('./setup'); testSuite('NProgress', function() { + beforeEach(function() { + 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() { @@ -111,4 +118,25 @@ testSuite('NProgress', function() { 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); + }); + }); }); From c91de71e0d91526c7ed7c3d4b8080ccae12a9c6a Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Wed, 21 Aug 2013 19:41:44 +0800 Subject: [PATCH 010/130] Update changelog with spinner. (See #9) --- History.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/History.md b/History.md index ec0b217..c4b18f7 100644 --- a/History.md +++ b/History.md @@ -4,9 +4,13 @@ v0.1.1 -- Unreleased * Removed the busy cursor that occurs when loading. * Added support for IE7 to IE9. (#3) * Implement `trickleRate` and `trickleSpeed` options. + * Implement the `showSpinner` option to allow removing the spinner. (#9, [Rahul + C S]) * Registered as a Component in Component.io. (untested without jQuery tho!) v0.1.0 -- August 20, 2013 ------------------------- Initial release. + +[Rahul C S]: https://github.com/rahulcs From 369e17d7ea2044ef969e12d2866bb2850c02aecf Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Wed, 21 Aug 2013 19:42:54 +0800 Subject: [PATCH 011/130] Update changelog to give credit to markbao. --- History.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/History.md b/History.md index c4b18f7..002cfc5 100644 --- a/History.md +++ b/History.md @@ -2,7 +2,7 @@ v0.1.1 -- Unreleased -------------------- * Removed the busy cursor that occurs when loading. - * Added support for IE7 to IE9. (#3) + * Added support for IE7 to IE9. (#3, [Mark Bao]) * Implement `trickleRate` and `trickleSpeed` options. * Implement the `showSpinner` option to allow removing the spinner. (#9, [Rahul C S]) @@ -14,3 +14,4 @@ v0.1.0 -- August 20, 2013 Initial release. [Rahul C S]: https://github.com/rahulcs +[Mark Bao]: https://github.com/markbao From 9f056390740bcb33305b9d3fdce7164277eb5d1d Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Wed, 21 Aug 2013 19:43:32 +0800 Subject: [PATCH 012/130] Update changelog with citation for #8. --- History.md | 1 + 1 file changed, 1 insertion(+) diff --git a/History.md b/History.md index 002cfc5..47fb57d 100644 --- a/History.md +++ b/History.md @@ -7,6 +7,7 @@ v0.1.1 -- Unreleased * Implement the `showSpinner` option to allow removing the spinner. (#9, [Rahul C S]) * Registered as a Component in Component.io. (untested without jQuery tho!) + * Updated the Readme with better Turbolinks instructions. (#8) v0.1.0 -- August 20, 2013 ------------------------- From 5e295feb994200e8fafaed910efb08695229a54b Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Wed, 21 Aug 2013 19:43:58 +0800 Subject: [PATCH 013/130] Add [role=spinner] to identify the spinner element (See #5, #9). --- nprogress.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/nprogress.js b/nprogress.js index f0bd096..d077ad9 100644 --- a/nprogress.js +++ b/nprogress.js @@ -23,7 +23,7 @@ trickleRate: 0.02, trickleSpeed: 800, showSpinner: true, - template: '
' + template: '
' }; /** @@ -178,7 +178,8 @@ transform: 'translate3d('+perc+'%,0,0)' }); - if(!Settings.showSpinner) $el.find('.spinner').hide(); + if (!Settings.showSpinner) + $el.find('[role="spinner"]').remove(); $el.appendTo(document.body); From cfbcea3a4c25364088a2e376bb26d3ad44ce051c Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Wed, 21 Aug 2013 19:44:35 +0800 Subject: [PATCH 014/130] Update changelog. --- History.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/History.md b/History.md index 47fb57d..9994a8c 100644 --- a/History.md +++ b/History.md @@ -4,8 +4,8 @@ v0.1.1 -- Unreleased * Removed the busy cursor that occurs when loading. * Added support for IE7 to IE9. (#3, [Mark Bao]) * Implement `trickleRate` and `trickleSpeed` options. - * Implement the `showSpinner` option to allow removing the spinner. (#9, [Rahul - C S]) + * Implement the `showSpinner` option to allow removing the spinner. (#5, #9, + [Rahul C S]) * Registered as a Component in Component.io. (untested without jQuery tho!) * Updated the Readme with better Turbolinks instructions. (#8) From 91bbfafcde55f62355a7699c969dc32efe22375e Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Wed, 21 Aug 2013 19:46:37 +0800 Subject: [PATCH 015/130] Use three equal signs whenever possible. --- nprogress.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/nprogress.js b/nprogress.js index d077ad9..95a5e61 100644 --- a/nprogress.js +++ b/nprogress.js @@ -66,7 +66,7 @@ $progress.queue(function(next) { // Set positionUsing if it hasn't already been set - if (Settings.positionUsing == '') Settings.positionUsing = NProgress.getPositioningCSS(); + if (Settings.positionUsing === '') Settings.positionUsing = NProgress.getPositioningCSS(); // Add transition $bar.css(barPositionCSS(n, speed, ease)); @@ -256,9 +256,9 @@ function barPositionCSS(n, speed, ease) { var barCSS; - if (Settings.positionUsing == 'translate3d') { + if (Settings.positionUsing === 'translate3d') { barCSS = { transform: 'translate3d('+toBarPerc(n)+'%,0,0)' }; - } else if (Settings.positionUsing == 'translate') { + } else if (Settings.positionUsing === 'translate') { barCSS = { transform: 'translate('+toBarPerc(n)+'%,0)' }; } else { barCSS = { 'margin-left': toBarPerc(n)+'%' }; From da3788f28099d815d0f4d41f47e2422c565b8526 Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Wed, 21 Aug 2013 19:48:18 +0800 Subject: [PATCH 016/130] Whitespaces and formatting. --- nprogress.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/nprogress.js b/nprogress.js index 95a5e61..f20bfd8 100644 --- a/nprogress.js +++ b/nprogress.js @@ -206,6 +206,7 @@ /** * Determine which positioning CSS rule to use. */ + NProgress.getPositioningCSS = function() { // Sniff on document.body.style var bodyStyle = document.body.style; @@ -226,7 +227,7 @@ // Browsers without translate() support, e.g. IE7-8 return 'margin'; } - } + }; /** * Helpers From 29cbcab3810a9197cc5f0bf796c2f3cb5fd39f85 Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Wed, 21 Aug 2013 19:49:02 +0800 Subject: [PATCH 017/130] Release v0.1.1 --- History.md | 4 ++-- Notes.md | 6 ++++++ component.json | 2 +- nprogress.js | 2 +- package.json | 2 +- 5 files changed, 11 insertions(+), 5 deletions(-) diff --git a/History.md b/History.md index 9994a8c..b76b400 100644 --- a/History.md +++ b/History.md @@ -1,5 +1,5 @@ -v0.1.1 -- Unreleased --------------------- +v0.1.1 -- August 21, 2013 +------------------------- * Removed the busy cursor that occurs when loading. * Added support for IE7 to IE9. (#3, [Mark Bao]) diff --git a/Notes.md b/Notes.md index d001338..83cc04c 100644 --- a/Notes.md +++ b/Notes.md @@ -17,4 +17,10 @@ Pushing ------- $ git push origin master + +Releasing +--------- + +Tag and stuff (`git release`), then: + $ git push origin master:gh-pages diff --git a/component.json b/component.json index 031767d..9f9a6c7 100644 --- a/component.json +++ b/component.json @@ -2,7 +2,7 @@ "name": "nprogress", "repo": "rstacruz/nprogress", "description": "slim progress bar", - "version": "0.1.0", + "version": "0.1.1", "keywords": ["progress","bar","spinner"], "dependencies": { "component/dom": "*" diff --git a/nprogress.js b/nprogress.js index f20bfd8..8eb327a 100644 --- a/nprogress.js +++ b/nprogress.js @@ -12,7 +12,7 @@ })(function($) { var NProgress = {}; - NProgress.version = '0.1.0'; + NProgress.version = '0.1.1'; var Settings = NProgress.settings = { minimum: 0.08, diff --git a/package.json b/package.json index 68fbb95..ff7c42c 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "nprogress", "author": "Rico Sta. Cruz ", - "version": "0.1.0", + "version": "0.1.1", "repository": { "type": "git", "url": "https://github.com/rstacruz/nprogress.git" From ec2051569acc57fa9aad52e7ee495b2ef3c9e1b4 Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Wed, 21 Aug 2013 20:16:59 +0800 Subject: [PATCH 018/130] Update commonJS loader for component.io. --- nprogress.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nprogress.js b/nprogress.js index 8eb327a..c42c220 100644 --- a/nprogress.js +++ b/nprogress.js @@ -3,7 +3,7 @@ ;(function(factory) { - if (typeof module === 'object') { + if (typeof module === 'function') { module.exports = factory(this.jQuery || require('dom')); } else { this.NProgress = factory(this.jQuery); From 044b1517a50491221f88ea85d0c666fae2294096 Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Wed, 21 Aug 2013 20:25:38 +0800 Subject: [PATCH 019/130] Component: use jQuery as a dependency. --- component.json | 2 +- nprogress.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/component.json b/component.json index 9f9a6c7..fc86ac4 100644 --- a/component.json +++ b/component.json @@ -5,7 +5,7 @@ "version": "0.1.1", "keywords": ["progress","bar","spinner"], "dependencies": { - "component/dom": "*" + "component/jQuery": ">= 1.8" }, "development": { "chaijs/chai": "*", diff --git a/nprogress.js b/nprogress.js index c42c220..cffd9a3 100644 --- a/nprogress.js +++ b/nprogress.js @@ -4,7 +4,7 @@ ;(function(factory) { if (typeof module === 'function') { - module.exports = factory(this.jQuery || require('dom')); + module.exports = factory(this.jQuery || require('jquery')); } else { this.NProgress = factory(this.jQuery); } From 77ecc370ba4a5e00a0ca0edc0f22931826b1a1dc Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Wed, 21 Aug 2013 20:25:54 +0800 Subject: [PATCH 020/130] Add bower.json. --- bower.json | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 bower.json diff --git a/bower.json b/bower.json new file mode 100644 index 0000000..ec64338 --- /dev/null +++ b/bower.json @@ -0,0 +1,27 @@ +{ + "name": "nprogress", + "repo": "rstacruz/nprogress", + "description": "slim progress bar", + "version": "0.1.1", + "keywords": [ + "progress", + "bar", + "spinner" + ], + "dependencies": { + "jquery": ">= 1.8" + }, + "license": "MIT", + "main": "nprogress.js", + "scripts": [ + "nprogress.js" + ], + "styles": [ + "nprogress.css" + ], + "ignore": [ + "**/.*", + "node_modules", + "components" + ] +} From b10521b0802282a1fc1bf8684add91c442606019 Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Wed, 21 Aug 2013 20:27:57 +0800 Subject: [PATCH 021/130] Relax jQuery dependency versions in json manifests. --- bower.json | 2 +- component.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bower.json b/bower.json index ec64338..f1fbbb6 100644 --- a/bower.json +++ b/bower.json @@ -9,7 +9,7 @@ "spinner" ], "dependencies": { - "jquery": ">= 1.8" + "jquery": "*" }, "license": "MIT", "main": "nprogress.js", diff --git a/component.json b/component.json index fc86ac4..a6db7c4 100644 --- a/component.json +++ b/component.json @@ -5,7 +5,7 @@ "version": "0.1.1", "keywords": ["progress","bar","spinner"], "dependencies": { - "component/jQuery": ">= 1.8" + "component/jQuery": "*" }, "development": { "chaijs/chai": "*", From 48ccead10343137814041f2dce7b5b4346c9f5a5 Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Wed, 21 Aug 2013 20:32:28 +0800 Subject: [PATCH 022/130] Ignore component files. --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 3c3629e..bb66ab2 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ node_modules +build +components From 2bc465874fa61f2be45b5aa986ca3b00be0b3aa3 Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Wed, 21 Aug 2013 20:32:31 +0800 Subject: [PATCH 023/130] Test components. --- test/index.component.html | 26 ++++++++++++++++++++++++++ test/test.js | 3 +++ 2 files changed, 29 insertions(+) create mode 100644 test/index.component.html diff --git a/test/index.component.html b/test/index.component.html new file mode 100644 index 0000000..6bcde97 --- /dev/null +++ b/test/index.component.html @@ -0,0 +1,26 @@ + + + + + + Tests + + + + + + + + + + + + + + + + + +
+ + diff --git a/test/test.js b/test/test.js index 64dbe62..20b5120 100644 --- a/test/test.js +++ b/test/test.js @@ -2,6 +2,9 @@ if (typeof module === 'object') require('./setup'); testSuite('NProgress', function() { + var $ = window.jQuery || require('jquery'); + var NProgress = window.NProgress || require('nprogress'); + beforeEach(function() { this.settings = $.extend({}, NProgress.settings); }); From 694e0d57ec2a6bf2fc7f0aa2e7277c6c63b9f1d9 Mon Sep 17 00:00:00 2001 From: Travis Cross Date: Wed, 21 Aug 2013 12:43:09 +0000 Subject: [PATCH 024/130] Add MIT license file --- COPYING | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 COPYING diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..9114892 --- /dev/null +++ b/COPYING @@ -0,0 +1,19 @@ +Copyright (c) 2013 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. From 0dc05c63f3df1ea3b4cacaa9c0c7783a1417e42d Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Wed, 21 Aug 2013 21:26:46 +0800 Subject: [PATCH 025/130] Add v0.1.2 changelog. --- History.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/History.md b/History.md index b76b400..0939256 100644 --- a/History.md +++ b/History.md @@ -1,3 +1,9 @@ +v0.1.2 -- unleseade +------------------- + + * Add Bower support. + * Fix Component support and use `component/jquery` as a dependency. + v0.1.1 -- August 21, 2013 ------------------------- @@ -6,7 +12,7 @@ v0.1.1 -- August 21, 2013 * Implement `trickleRate` and `trickleSpeed` options. * Implement the `showSpinner` option to allow removing the spinner. (#5, #9, [Rahul C S]) - * Registered as a Component in Component.io. (untested without jQuery tho!) + * Registered as a Component in Component.io. * Updated the Readme with better Turbolinks instructions. (#8) v0.1.0 -- August 20, 2013 From 50f0934505fdefe71fdaa7c3603027b6e3d73001 Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Wed, 21 Aug 2013 21:28:45 +0800 Subject: [PATCH 026/130] Rename license and link to from the readme. --- COPYING => License.md | 0 Readme.md | 3 +-- 2 files changed, 1 insertion(+), 2 deletions(-) rename COPYING => License.md (100%) diff --git a/COPYING b/License.md similarity index 100% rename from COPYING rename to License.md diff --git a/Readme.md b/Readme.md index b61d85f..c3b04ec 100644 --- a/Readme.md +++ b/Readme.md @@ -128,8 +128,7 @@ Resources Acknowledgements ---------------- -© 2013, Rico Sta. Cruz. Released under the [MIT -License](http://www.opensource.org/licenses/mit-license.php). +© 2013, Rico Sta. Cruz. Released under the [MIT License](License.md). **NProgress** is authored and maintained by [Rico Sta. Cruz][rsc] with help from its [contributors][c] From ca775fe00098b71a10728208011625e999e7868b Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Wed, 21 Aug 2013 21:34:19 +0800 Subject: [PATCH 027/130] Add notes about testing the component build. --- Notes.md | 9 ++++++++- test/{index.component.html => component.html} | 0 2 files changed, 8 insertions(+), 1 deletion(-) rename test/{index.component.html => component.html} (100%) diff --git a/Notes.md b/Notes.md index 83cc04c..2f90de7 100644 --- a/Notes.md +++ b/Notes.md @@ -9,10 +9,17 @@ Testing $ npm install $ npm test -or +or try it out in the browser: $ open test/index.html +Testing component build +----------------------- + + $ component install + $ component build + $ open test/component.html + Pushing ------- diff --git a/test/index.component.html b/test/component.html similarity index 100% rename from test/index.component.html rename to test/component.html From 9861cd1adfdeca969aa643a62d482ce7c74a63a7 Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Wed, 21 Aug 2013 21:38:57 +0800 Subject: [PATCH 028/130] Release v0.1.2 --- History.md | 10 ++++++++-- Notes.md | 2 +- bower.json | 2 +- component.json | 2 +- nprogress.js | 2 +- package.json | 2 +- 6 files changed, 13 insertions(+), 7 deletions(-) diff --git a/History.md b/History.md index 0939256..a21177b 100644 --- a/History.md +++ b/History.md @@ -1,5 +1,7 @@ -v0.1.2 -- unleseade -------------------- +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. @@ -7,6 +9,8 @@ v0.1.2 -- unleseade v0.1.1 -- August 21, 2013 ------------------------- +Minor fixes. + * Removed the busy cursor that occurs when loading. * Added support for IE7 to IE9. (#3, [Mark Bao]) * Implement `trickleRate` and `trickleSpeed` options. @@ -22,3 +26,5 @@ Initial release. [Rahul C S]: https://github.com/rahulcs [Mark Bao]: https://github.com/markbao +[Bower]: http://bower.io +[Component]: http://component.io diff --git a/Notes.md b/Notes.md index 2f90de7..2a098a5 100644 --- a/Notes.md +++ b/Notes.md @@ -1,7 +1,7 @@ Version numbers --------------- - $ bump package.json component.json nprogress.js + $ bump *.json nprogress.js Testing ------- diff --git a/bower.json b/bower.json index f1fbbb6..b62abf4 100644 --- a/bower.json +++ b/bower.json @@ -2,7 +2,7 @@ "name": "nprogress", "repo": "rstacruz/nprogress", "description": "slim progress bar", - "version": "0.1.1", + "version": "0.1.2", "keywords": [ "progress", "bar", diff --git a/component.json b/component.json index a6db7c4..d3f376e 100644 --- a/component.json +++ b/component.json @@ -2,7 +2,7 @@ "name": "nprogress", "repo": "rstacruz/nprogress", "description": "slim progress bar", - "version": "0.1.1", + "version": "0.1.2", "keywords": ["progress","bar","spinner"], "dependencies": { "component/jQuery": "*" diff --git a/nprogress.js b/nprogress.js index cffd9a3..f8f0d68 100644 --- a/nprogress.js +++ b/nprogress.js @@ -12,7 +12,7 @@ })(function($) { var NProgress = {}; - NProgress.version = '0.1.1'; + NProgress.version = '0.1.2'; var Settings = NProgress.settings = { minimum: 0.08, diff --git a/package.json b/package.json index ff7c42c..d3cbfca 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "nprogress", "author": "Rico Sta. Cruz ", - "version": "0.1.1", + "version": "0.1.2", "repository": { "type": "git", "url": "https://github.com/rstacruz/nprogress.git" From ec0c3d8858239c799ae5b6d9581da13bf8ad0e30 Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Thu, 22 Aug 2013 19:15:33 +0800 Subject: [PATCH 029/130] Fix console tests. --- test/setup.js | 1 + test/test.js | 219 ++++++++++++++++++++++++++------------------------ 2 files changed, 113 insertions(+), 107 deletions(-) diff --git a/test/setup.js b/test/setup.js index 459bff9..00e9e5d 100644 --- a/test/setup.js +++ b/test/setup.js @@ -25,6 +25,7 @@ function myEnv(jq) { window.console = console; global.window = window; global.$ = window.$; + global.jQuery = window.jQuery; global.NProgress = window.NProgress; done(errors); } diff --git a/test/test.js b/test/test.js index 20b5120..cd8f9dd 100644 --- a/test/test.js +++ b/test/test.js @@ -1,145 +1,150 @@ -if (typeof module === 'object') require('./setup'); +(function() { + if (typeof module === 'object') require('./setup'); + var w = this; -testSuite('NProgress', function() { + testSuite('NProgress', function() { + var $, NProgress; - var $ = window.jQuery || require('jquery'); - var NProgress = window.NProgress || require('nprogress'); + beforeEach(function() { + $ = w.jQuery || require('jquery'); + NProgress = w.NProgress || require('nprogress'); - beforeEach(function() { - this.settings = $.extend({}, NProgress.settings); - }); - - afterEach(function() { - $("#nprogress").remove(); - $('html').attr('class', ''); - NProgress.status = null; + this.settings = $.extend({}, NProgress.settings); + }); - // Restore settings - $.extend(NProgress.settings, this.settings); - }); + afterEach(function() { + $("#nprogress").remove(); + $('html').attr('class', ''); + NProgress.status = null; - 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(); + // Restore settings + $.extend(NProgress.settings, this.settings); }); - 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); + 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(); - }, 70); - }); + }); - it('must respect minimum', function() { - NProgress.set(0); - assert.equal(NProgress.status, NProgress.settings.minimum); - }); + it('.set(1) should appear and disappear', function(done) { + NProgress.configure({ speed: 10 }); + NProgress.set(0).set(1); + assert.equal($("#nprogress").length, 1); - it('must clamp to minimum', function() { - NProgress.set(-100); - assert.equal(NProgress.status, NProgress.settings.minimum); - }); + setTimeout(function() { + assert.equal($("#nprogress").length, 0); + done(); + }, 70); + }); - it('must clamp to maximum', function() { - NProgress.set(456); - assert.equal(NProgress.status, null); - }); - }); + 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); + }); - describe('.start()', function() { - it('must render', function(done) { - NProgress.start(); - assert.equal($("#nprogress").length, 1); - done(); + it('must clamp to maximum', function() { + NProgress.set(456); + assert.equal(NProgress.status, null); + }); }); - it('must respect minimum', function() { - NProgress.start(); - assert.equal(NProgress.status, NProgress.settings.minimum); - }); - }); + // ---- - // ---- + describe('.start()', function() { + it('must render', function(done) { + NProgress.start(); + assert.equal($("#nprogress").length, 1); + done(); + }); - describe('.done()', function() { - it('must not render without start', function(done) { - NProgress.done(); - assert.equal($("#nprogress").length, 0); - done(); + it('must respect minimum', function() { + NProgress.start(); + assert.equal(NProgress.status, NProgress.settings.minimum); + }); }); - it('.done(true) must render', function(done) { - NProgress.done(true); - assert.equal($("#nprogress").length, 1); - done(); - }); - }); + // ---- - // ---- + describe('.done()', function() { + it('must not render without start', function(done) { + NProgress.done(); + assert.equal($("#nprogress").length, 0); + done(); + }); - describe('.inc()', function() { - it('should render', function() { - NProgress.inc(); - assert.equal($("#nprogress").length, 1); + it('.done(true) must render', function(done) { + NProgress.done(true); + assert.equal($("#nprogress").length, 1); + done(); + }); }); - 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; + describe('.inc()', function() { + it('should render', function() { + NProgress.inc(); + assert.equal($("#nprogress").length, 1); + }); - NProgress.inc(); - assert.operator(NProgress.status, '>', start); - }); + it('should start with minimum', function() { + NProgress.inc(); + assert.equal(NProgress.status, NProgress.settings.minimum); + }); - it('should never reach 1.0', function() { - for (var i=0; i<100; ++i) { NProgress.inc(); } - assert.operator(NProgress.status, '<', 1.0); + 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()', 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(); + describe('.configure(showSpinner)', function() { + it('should render spinner by default', function() { + NProgress.start(); - assert.equal($("#nprogress .spinner").length, 1); - }); + assert.equal($("#nprogress .spinner").length, 1); + }); - it('should be true by default', function() { - assert.equal(NProgress.settings.showSpinner, true); - }); + 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(); + it('should hide (on false)', function() { + NProgress.configure({ showSpinner: false }); + NProgress.start(); - assert.equal($("#nprogress .spinner").length, 0); + assert.equal($("#nprogress .spinner").length, 0); + }); }); }); -}); + +})(); From 96de2129f69c98c3e6b6151c7af4ce0f193477f7 Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Thu, 22 Aug 2013 19:16:21 +0800 Subject: [PATCH 030/130] Travis badge. --- Readme.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Readme.md b/Readme.md index c3b04ec..9e4986f 100644 --- a/Readme.md +++ b/Readme.md @@ -4,6 +4,8 @@ NProgress Slim progress bars for Ajax'y applications. Inspired by Google, YouTube, and Medium. +[![Status](https://secure.travis-ci.org/rstacruz/nprogress.png?branch=master)](http://travis-ci.org/rstacruz/nprogress) + Installation ------------ From 3bc58f1312f01d67571dfed2c5cd0f0c261ffb3e Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Thu, 22 Aug 2013 19:17:43 +0800 Subject: [PATCH 031/130] Travis: notify via email. --- .travis.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.travis.yml b/.travis.yml index c2b1833..cdafc29 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,2 +1,5 @@ language: node_js node_js: ["0.10"] +notifications: + email: + - dropbox+travis@ricostacruz.com From 97d6dc9fd025e382bb9e9666e5956afab61158f0 Mon Sep 17 00:00:00 2001 From: ray Date: Fri, 23 Aug 2013 13:51:29 +0800 Subject: [PATCH 032/130] add support for AMD --- nprogress.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/nprogress.js b/nprogress.js index f8f0d68..86e57ff 100644 --- a/nprogress.js +++ b/nprogress.js @@ -5,6 +5,10 @@ if (typeof module === 'function') { module.exports = factory(this.jQuery || require('jquery')); + } else if (typeof define === 'function' && define.amd) { + define(['jquery'], function($) { + return factory($); + }); } else { this.NProgress = factory(this.jQuery); } @@ -67,7 +71,7 @@ $progress.queue(function(next) { // Set positionUsing if it hasn't already been set if (Settings.positionUsing === '') Settings.positionUsing = NProgress.getPositioningCSS(); - + // Add transition $bar.css(barPositionCSS(n, speed, ease)); From 7ca9d4983a15bbe947fe0884f5b55c02ac6a88e9 Mon Sep 17 00:00:00 2001 From: Hossein Bukhamseen Date: Sat, 24 Aug 2013 22:50:28 +0300 Subject: [PATCH 033/130] Updated how to use with jquery ajax ajaxStart and ajaxStop are global relative events. http://api.jquery.com/Ajax_Events/ --- Readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Readme.md b/Readme.md index 9e4986f..d68ed9f 100644 --- a/Readme.md +++ b/Readme.md @@ -35,7 +35,7 @@ Ideas ----- * Add progress to your Ajax calls! Bind it to the jQuery `ajaxStart` and - `ajaxComplete` events. + `ajaxStop` events. * Make a fancy loading bar even without Turbolinks/Pjax! Bind it to `$(document).ready` and `$(window).load`. From 54db08ddab8b6527de0925bbe9a74ba4bb362e66 Mon Sep 17 00:00:00 2001 From: Lipis Date: Sun, 25 Aug 2013 04:13:02 +0200 Subject: [PATCH 034/130] Removed redundant vendor specific rules --- nprogress.css | 36 +++++++++--------------------------- 1 file changed, 9 insertions(+), 27 deletions(-) diff --git a/nprogress.css b/nprogress.css index 8b218ef..de3f90a 100644 --- a/nprogress.css +++ b/nprogress.css @@ -1,7 +1,6 @@ /* Make clicks pass-through */ #nprogress { pointer-events: none; - -webkit-pointer-events: none; } #nprogress .bar { @@ -27,10 +26,8 @@ opacity: 1.0; -webkit-transform: rotate(3deg) translate(0px, -4px); - -moz-transform: rotate(3deg) translate(0px, -4px); - -ms-transform: rotate(3deg) translate(0px, -4px); - -o-transform: rotate(3deg) translate(0px, -4px); - 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 */ @@ -46,36 +43,21 @@ width: 14px; height: 14px; - border: solid 2px transparent; - border-top-color: #29d; + border: solid 2px transparent; + border-top-color: #29d; border-left-color: #29d; border-radius: 10px; -webkit-animation: nprogress-spinner 400ms linear infinite; - -moz-animation: nprogress-spinner 400ms linear infinite; - -ms-animation: nprogress-spinner 400ms linear infinite; - -o-animation: nprogress-spinner 400ms linear infinite; - animation: nprogress-spinner 400ms linear infinite; + animation: nprogress-spinner 400ms linear infinite; } @-webkit-keyframes nprogress-spinner { - 0% { -webkit-transform: rotate(0deg); transform: rotate(0deg); } - 100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); } -} -@-moz-keyframes nprogress-spinner { - 0% { -moz-transform: rotate(0deg); transform: rotate(0deg); } - 100% { -moz-transform: rotate(360deg); transform: rotate(360deg); } -} -@-o-keyframes nprogress-spinner { - 0% { -o-transform: rotate(0deg); transform: rotate(0deg); } - 100% { -o-transform: rotate(360deg); transform: rotate(360deg); } -} -@-ms-keyframes nprogress-spinner { - 0% { -ms-transform: rotate(0deg); transform: rotate(0deg); } - 100% { -ms-transform: rotate(360deg); transform: rotate(360deg); } + 0% { -webkit-transform: rotate(0deg); } + 100% { -webkit-transform: rotate(360deg); } } @keyframes nprogress-spinner { - 0% { transform: rotate(0deg); transform: rotate(0deg); } - 100% { transform: rotate(360deg); transform: rotate(360deg); } + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } } From 9bfc944dfeebc2d48104fc51d731808a730252f4 Mon Sep 17 00:00:00 2001 From: Lipis Date: Mon, 26 Aug 2013 21:01:50 +0200 Subject: [PATCH 035/130] set border-radius to 50% instead of pixels so it won't matter how big it is --- nprogress.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nprogress.css b/nprogress.css index 8b218ef..3aefce4 100644 --- a/nprogress.css +++ b/nprogress.css @@ -49,7 +49,7 @@ border: solid 2px transparent; border-top-color: #29d; border-left-color: #29d; - border-radius: 10px; + border-radius: 50%; -webkit-animation: nprogress-spinner 400ms linear infinite; -moz-animation: nprogress-spinner 400ms linear infinite; From 9e8d6f83ca9560fa2d7361e6898721d07d7ca072 Mon Sep 17 00:00:00 2001 From: Lipis Date: Tue, 27 Aug 2013 01:07:50 +0200 Subject: [PATCH 036/130] Added box-sizing: border-box to the icon and increased the size The result is exactly the same as it was but now you can control the width/height of the icon without caring about the thickness of the borders --- nprogress.css | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/nprogress.css b/nprogress.css index 8b218ef..70615db 100644 --- a/nprogress.css +++ b/nprogress.css @@ -43,8 +43,9 @@ } #nprogress .spinner-icon { - width: 14px; - height: 14px; + width: 18px; + height: 18px; + box-sizing: border-box; border: solid 2px transparent; border-top-color: #29d; From a8f23cee1ea7b9a691641ed4811b3367079a32af Mon Sep 17 00:00:00 2001 From: Russell Ferri Date: Wed, 28 Aug 2013 01:13:04 -0400 Subject: [PATCH 037/130] remove jQuery dependency --- Readme.md | 2 +- bower.json | 3 - nprogress.js | 224 +++++++++++++++++++++++++++++++++++++++++++-------- 3 files changed, 191 insertions(+), 38 deletions(-) diff --git a/Readme.md b/Readme.md index d68ed9f..29e9c75 100644 --- a/Readme.md +++ b/Readme.md @@ -9,7 +9,7 @@ Medium. Installation ------------ -Add jQuery (1.8 or above), [nprogress.js] and [nprogress.css] to your project. +Add [nprogress.js] and [nprogress.css] to your project. Basic usage ----------- diff --git a/bower.json b/bower.json index b62abf4..485c9fe 100644 --- a/bower.json +++ b/bower.json @@ -8,9 +8,6 @@ "bar", "spinner" ], - "dependencies": { - "jquery": "*" - }, "license": "MIT", "main": "nprogress.js", "scripts": [ diff --git a/nprogress.js b/nprogress.js index 86e57ff..3c13349 100644 --- a/nprogress.js +++ b/nprogress.js @@ -4,16 +4,16 @@ ;(function(factory) { if (typeof module === 'function') { - module.exports = factory(this.jQuery || require('jquery')); + module.exports = factory(); } else if (typeof define === 'function' && define.amd) { - define(['jquery'], function($) { - return factory($); + define(function() { + return factory(); }); } else { - this.NProgress = factory(this.jQuery); + this.NProgress = factory(); } -})(function($) { +})(function() { var NProgress = {}; NProgress.version = '0.1.2'; @@ -27,6 +27,8 @@ trickleRate: 0.02, trickleSpeed: 800, showSpinner: true, + barSelector: '[role="bar"]', + spinnerSelector: '[role="spinner"]', template: '
' }; @@ -38,7 +40,12 @@ * }); */ NProgress.configure = function(options) { - $.extend(Settings, options); + var key, value; + for (key in options) { + value = options[key]; + if (value !== undefined && options.hasOwnProperty(key)) Settings[key] = value; + } + return this; }; @@ -61,27 +68,33 @@ n = clamp(n, Settings.minimum, 1); NProgress.status = (n === 1 ? null : n); - var $progress = NProgress.render(!started), - $bar = $progress.find('[role="bar"]'), - speed = Settings.speed, - ease = Settings.easing; + var progress = NProgress.render(!started), + bar = progress.querySelector(Settings.barSelector), + speed = Settings.speed, + ease = Settings.easing; - $progress[0].offsetWidth; /* Repaint */ + progress.offsetWidth; /* Repaint */ - $progress.queue(function(next) { + queue(function(next) { // Set positionUsing if it hasn't already been set if (Settings.positionUsing === '') Settings.positionUsing = NProgress.getPositioningCSS(); // Add transition - $bar.css(barPositionCSS(n, speed, ease)); + css(bar, barPositionCSS(n, speed, ease)); if (n === 1) { // Fade out - $progress.css({ transition: 'none', opacity: 1 }); - $progress[0].offsetWidth; /* Repaint */ + css(progress, { + transition: 'none', + opacity: 1 + }); + progress.offsetWidth; /* Repaint */ setTimeout(function() { - $progress.css({ transition: 'all '+speed+'ms linear', opacity: 0 }); + css(progress, { + transition: 'all ' + speed + 'ms linear', + opacity: 0 + }); setTimeout(function() { NProgress.remove(); next(); @@ -169,25 +182,30 @@ */ NProgress.render = function(fromStart) { - if (NProgress.isRendered()) return $("#nprogress"); - $('html').addClass('nprogress-busy'); - - var $el = $("
") - .html(Settings.template); - - var perc = fromStart ? '-100' : toBarPerc(NProgress.status || 0); - - $el.find('[role="bar"]').css({ + 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), + spinner; + + css(bar, { transition: 'all 0 linear', - transform: 'translate3d('+perc+'%,0,0)' + transform: 'translate3d(' + perc + '%,0,0)' }); - if (!Settings.showSpinner) - $el.find('[role="spinner"]').remove(); - - $el.appendTo(document.body); + if (!Settings.showSpinner) { + spinner = progress.querySelector(Settings.spinnerSelector); + spinner && removeElement(spinner); + } - return $el; + document.body.appendChild(progress); + return progress; }; /** @@ -195,8 +213,9 @@ */ NProgress.remove = function() { - $('html').removeClass('nprogress-busy'); - $('#nprogress').remove(); + removeClass(document.documentElement, 'nprogress-busy'); + var progress = document.getElementById('nprogress'); + progress && removeElement(progress); }; /** @@ -204,7 +223,7 @@ */ NProgress.isRendered = function() { - return ($("#nprogress").length > 0); + return !!document.getElementById('nprogress'); }; /** @@ -274,6 +293,143 @@ 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 as 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).replace(/\s+/gi, ' '), + 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; }); From efa0b07e6842899becd5960ca53da1e34eef7f7c Mon Sep 17 00:00:00 2001 From: Russell Ferri Date: Wed, 28 Aug 2013 12:12:36 -0400 Subject: [PATCH 038/130] typo, remove unnecessary replace --- nprogress.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nprogress.js b/nprogress.js index 3c13349..6c472a2 100644 --- a/nprogress.js +++ b/nprogress.js @@ -373,7 +373,7 @@ })(); /** - * (Internal) Determines if an element or space separated list of class names contains as class name. + * (Internal) Determines if an element or space separated list of class names contains a class name. */ function hasClass(element, name) { @@ -400,7 +400,7 @@ */ function removeClass(element, name) { - var oldList = classList(element).replace(/\s+/gi, ' '), + var oldList = classList(element), newList; if (!hasClass(element, name)) return; From 538b33984892456c69a7917c1ffd2da91de30728 Mon Sep 17 00:00:00 2001 From: Russell Ferri Date: Wed, 28 Aug 2013 18:40:38 -0400 Subject: [PATCH 039/130] simplify AMD definition --- nprogress.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/nprogress.js b/nprogress.js index 6c472a2..cc2f456 100644 --- a/nprogress.js +++ b/nprogress.js @@ -6,9 +6,7 @@ if (typeof module === 'function') { module.exports = factory(); } else if (typeof define === 'function' && define.amd) { - define(function() { - return factory(); - }); + define(factory); } else { this.NProgress = factory(); } From 5345ce425a4c421b688268020ecc85c0d0e8458e Mon Sep 17 00:00:00 2001 From: Yasin Okumus Date: Wed, 4 Sep 2013 10:29:26 +0300 Subject: [PATCH 040/130] Clarification on advanced usage Two useful things documented: .status and inc(val) --- Readme.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Readme.md b/Readme.md index d68ed9f..8f3c2fb 100644 --- a/Readme.md +++ b/Readme.md @@ -60,6 +60,12 @@ every image load (or similar). 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) @@ -68,6 +74,8 @@ even if it's not being shown. (The default behavior is that *.done()* will not NProgress.done(true); ~~~ +__Get the status value:__ To get the status value, use `.status` + Configuration ------------- From b446120eee78e7647d3516087a45f66bdd5fabe4 Mon Sep 17 00:00:00 2001 From: theluk Date: Wed, 25 Sep 2013 04:20:54 +0200 Subject: [PATCH 041/130] added NProgress.promise An easy way to push some jQuery promises to NProgress. NProgress will then start, if not already running, and wait for each promise to finish. While the promises resolve, NProgress updates its state based on the amount of supplied and finished promises. --- nprogress.js | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/nprogress.js b/nprogress.js index 86e57ff..67ecafd 100644 --- a/nprogress.js +++ b/nprogress.js @@ -163,6 +163,42 @@ 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. From ffa07fa37dc06d26914cc6ffc3a6ed773b3c8ed5 Mon Sep 17 00:00:00 2001 From: Heikki Hellgren Date: Thu, 24 Oct 2013 13:00:27 +0300 Subject: [PATCH 042/130] Fix equals checks --- nprogress.js | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/nprogress.js b/nprogress.js index 67ecafd..b249154 100644 --- a/nprogress.js +++ b/nprogress.js @@ -166,37 +166,37 @@ /** * 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") { + if (!$promise || $promise.state() === "resolved") { return this; } - - if (current == 0) { + + if (current === 0) { NProgress.start(); } - + initial++; current++; - + $promise.always(function() { current--; - if (current == 0) { + if (current === 0) { initial = 0; NProgress.done(); } else { NProgress.set((initial - current) / initial); } }); - + return this; }; - + })(); /** From f87a4b7f9d8b42adc6f07f5a3581b0f822a13f55 Mon Sep 17 00:00:00 2001 From: Jakob Gillich Date: Thu, 30 Jan 2014 14:02:11 +0100 Subject: [PATCH 043/130] dependencies -> devDependencies --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d3cbfca..d9ea324 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "test": "./node_modules/.bin/mocha -R spec" }, "license": "MIT", - "dependencies": { + "devDependencies": { "chai": "~1.6.1", "mocha": "~1.11.0", "jsdom": "~0.6.5" From 6b256dab35d9762ec6712d8877387157f2699e54 Mon Sep 17 00:00:00 2001 From: Arnaud Date: Tue, 4 Feb 2014 12:42:51 +0100 Subject: [PATCH 044/130] do not download package.json with bower with package.json, browserify has some confusion and is not capable to resolve require('jquery'). --- bower.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bower.json b/bower.json index b62abf4..058d31a 100644 --- a/bower.json +++ b/bower.json @@ -22,6 +22,7 @@ "ignore": [ "**/.*", "node_modules", - "components" + "components", + "package.json" ] } From a0e0af5e9271bdee38dcdaa94918a428ed3f6ebd Mon Sep 17 00:00:00 2001 From: Jeff Hobbs Date: Wed, 19 Feb 2014 09:42:28 -0500 Subject: [PATCH 045/130] Upped z-index to work better with Bootstrap nav If z-index is upped to 1031 for .bar and .spinner, nprogress will work out of the box with Bootstrap 3.x's nav, which is z-index:1030. --- nprogress.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nprogress.css b/nprogress.css index 6a98088..21c5fbb 100644 --- a/nprogress.css +++ b/nprogress.css @@ -7,7 +7,7 @@ background: #29d; position: fixed; - z-index: 100; + z-index: 1031; top: 0; left: 0; @@ -34,7 +34,7 @@ #nprogress .spinner { display: block; position: fixed; - z-index: 100; + z-index: 1031; top: 15px; right: 15px; } From 78b1830165fdf4cbd4b4513397551890f443f41d Mon Sep 17 00:00:00 2001 From: Robert Holmes Date: Tue, 25 Mar 2014 16:59:37 -0700 Subject: [PATCH 046/130] Fix outdated copyright year (update to 2014) The copyright year was out of date. Copyright notices must reflect the current year. This commit updates the listed year to 2014. see: http://www.copyright.gov/circs/circ03.pdf for more info --- License.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/License.md b/License.md index 9114892..560c4fe 100644 --- a/License.md +++ b/License.md @@ -1,4 +1,4 @@ -Copyright (c) 2013 Rico Sta. Cruz +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 From db37403b42617f6f5941edeaf37e79d958db9c3d Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Wed, 26 Mar 2014 20:14:30 +0800 Subject: [PATCH 047/130] Release v0.1.3 --- History.md | 8 +++++++- bower.json | 2 +- component.json | 2 +- nprogress.js | 2 +- package.json | 2 +- 5 files changed, 11 insertions(+), 5 deletions(-) diff --git a/History.md b/History.md index a21177b..32968ee 100644 --- a/History.md +++ b/History.md @@ -1,5 +1,11 @@ +v0.1.3 -- March 26, 2014 +------------------------ + + * Remove jQuery dependency. (#28, #7, #17, @rurjur) + * Update Readme to change year to 2014. (#73, @rwholmes) + v0.1.2 -- August 21, 2013 --------------------------- +------------------------- Minor update for proper [Bower] and [Component] support. diff --git a/bower.json b/bower.json index 485c9fe..439fe65 100644 --- a/bower.json +++ b/bower.json @@ -2,7 +2,7 @@ "name": "nprogress", "repo": "rstacruz/nprogress", "description": "slim progress bar", - "version": "0.1.2", + "version": "0.1.3", "keywords": [ "progress", "bar", diff --git a/component.json b/component.json index d3f376e..41d1cf1 100644 --- a/component.json +++ b/component.json @@ -2,7 +2,7 @@ "name": "nprogress", "repo": "rstacruz/nprogress", "description": "slim progress bar", - "version": "0.1.2", + "version": "0.1.3", "keywords": ["progress","bar","spinner"], "dependencies": { "component/jQuery": "*" diff --git a/nprogress.js b/nprogress.js index 626fd9d..f8b04f1 100644 --- a/nprogress.js +++ b/nprogress.js @@ -14,7 +14,7 @@ })(function() { var NProgress = {}; - NProgress.version = '0.1.2'; + NProgress.version = '0.1.3'; var Settings = NProgress.settings = { minimum: 0.08, diff --git a/package.json b/package.json index d9ea324..6fd7a24 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "nprogress", "author": "Rico Sta. Cruz ", - "version": "0.1.2", + "version": "0.1.3", "repository": { "type": "git", "url": "https://github.com/rstacruz/nprogress.git" From ca9ce4d87d624843265a742c09ded1bb3ee02b1a Mon Sep 17 00:00:00 2001 From: Shaker Islam Date: Tue, 8 Apr 2014 14:47:45 -0500 Subject: [PATCH 048/130] stronger check on module --- nprogress.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nprogress.js b/nprogress.js index f8b04f1..b93800a 100644 --- a/nprogress.js +++ b/nprogress.js @@ -3,7 +3,7 @@ ;(function(factory) { - if (typeof module === 'function') { + if (typeof module !== 'undefined' && module.exports) { module.exports = factory(); } else if (typeof define === 'function' && define.amd) { define(factory); From 1d3cac0d1fb1d566d411c30a8b7237ddb136b18e Mon Sep 17 00:00:00 2001 From: Mithgol Date: Sun, 20 Apr 2014 21:38:55 -0700 Subject: [PATCH 049/130] =?UTF-8?q?use=C2=A0SVG=20to=C2=A0display=20Travis?= =?UTF-8?q?=C2=A0CI=20build=C2=A0testing=20status?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Readme.md b/Readme.md index 29e9c75..b5349ef 100644 --- a/Readme.md +++ b/Readme.md @@ -4,7 +4,7 @@ NProgress Slim progress bars for Ajax'y applications. Inspired by Google, YouTube, and Medium. -[![Status](https://secure.travis-ci.org/rstacruz/nprogress.png?branch=master)](http://travis-ci.org/rstacruz/nprogress) +[![Status](https://api.travis-ci.org/rstacruz/nprogress.svg?branch=master)](http://travis-ci.org/rstacruz/nprogress) Installation ------------ From e97ac8b11bb5ac7a2e6d088ca5ca93adca8591c4 Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Wed, 23 Apr 2014 14:45:08 +0800 Subject: [PATCH 050/130] Update History.md --- History.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/History.md b/History.md index 32968ee..0e9a4c4 100644 --- a/History.md +++ b/History.md @@ -1,3 +1,18 @@ +v0.1.4 - Unreleased +------------------- + + * Bower: don't download package.json. Fixes browserify + jquery problem. (#65, @amelon) + +Internal changes: + + * Use SVG to display Travis-CI badge. (#77, @Mithgol) + * Readme: update .inc() and .status docs (#34, @lacivert) + * Readme: update year (#73, @rwholmes) + +To do: + + * Fix Require.js support? (#64) + v0.1.3 -- March 26, 2014 ------------------------ From 5dcb61e0bc0b2754613a3555974d1589313ae25a Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Wed, 23 Apr 2014 22:11:56 +0800 Subject: [PATCH 051/130] Update History.md --- History.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/History.md b/History.md index 0e9a4c4..b73f445 100644 --- a/History.md +++ b/History.md @@ -1,7 +1,9 @@ v0.1.4 - Unreleased ------------------- + * Bower: don't download package.json. Fixes browserify + jquery problem. (#65, @amelon) + * Fix compatibility with Karma. (#75, @shaqq) Internal changes: From 5ba1f3cd46baa12d63948a0f79f5b4b5f8bcc550 Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Wed, 26 Mar 2014 20:14:30 +0800 Subject: [PATCH 052/130] Release v0.1.3 --- bower.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/bower.json b/bower.json index 85f7e47..b91da16 100644 --- a/bower.json +++ b/bower.json @@ -20,6 +20,8 @@ "**/.*", "node_modules", "components", - "package.json" + "package.json", + "test", + "vendor" ] } From 85f01ba8c59c3b59af7d196185ae802d5e36da66 Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Sat, 21 Jun 2014 01:02:55 +0800 Subject: [PATCH 053/130] Release 0.1.4 --- History.md | 5 ++--- bower.json | 2 +- component.json | 2 +- nprogress.js | 2 +- package.json | 2 +- 5 files changed, 6 insertions(+), 7 deletions(-) diff --git a/History.md b/History.md index b73f445..cca9e0f 100644 --- a/History.md +++ b/History.md @@ -1,6 +1,5 @@ -v0.1.4 - Unreleased -------------------- - +v0.1.4 - June 21, 2014 +---------------------- * Bower: don't download package.json. Fixes browserify + jquery problem. (#65, @amelon) * Fix compatibility with Karma. (#75, @shaqq) diff --git a/bower.json b/bower.json index b91da16..0ce5016 100644 --- a/bower.json +++ b/bower.json @@ -2,7 +2,7 @@ "name": "nprogress", "repo": "rstacruz/nprogress", "description": "slim progress bar", - "version": "0.1.3", + "version": "0.1.4", "keywords": [ "progress", "bar", diff --git a/component.json b/component.json index 41d1cf1..6bacf3e 100644 --- a/component.json +++ b/component.json @@ -2,7 +2,7 @@ "name": "nprogress", "repo": "rstacruz/nprogress", "description": "slim progress bar", - "version": "0.1.3", + "version": "0.1.4", "keywords": ["progress","bar","spinner"], "dependencies": { "component/jQuery": "*" diff --git a/nprogress.js b/nprogress.js index b93800a..8223128 100644 --- a/nprogress.js +++ b/nprogress.js @@ -14,7 +14,7 @@ })(function() { var NProgress = {}; - NProgress.version = '0.1.3'; + NProgress.version = '0.1.4'; var Settings = NProgress.settings = { minimum: 0.08, diff --git a/package.json b/package.json index 6fd7a24..85d3352 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "nprogress", "author": "Rico Sta. Cruz ", - "version": "0.1.3", + "version": "0.1.4", "repository": { "type": "git", "url": "https://github.com/rstacruz/nprogress.git" From 4b60759b6a9ce59b16328447d967b41c2dc66fc1 Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Sat, 21 Jun 2014 01:03:10 +0800 Subject: [PATCH 054/130] Update notes. --- Notes.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Notes.md b/Notes.md index 2a098a5..c970028 100644 --- a/Notes.md +++ b/Notes.md @@ -31,3 +31,7 @@ Releasing Tag and stuff (`git release`), then: $ git push origin master:gh-pages + +And publish to npm: + + $ npm publish From 8e6bacc1353f9edbe21149a216b57c5926916168 Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Sat, 21 Jun 2014 01:03:47 +0800 Subject: [PATCH 055/130] Update History with todo notes. --- History.md | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/History.md b/History.md index cca9e0f..154ca86 100644 --- a/History.md +++ b/History.md @@ -1,5 +1,12 @@ -v0.1.4 - June 21, 2014 ----------------------- +v0.1.5 -- unreleased +-------------------- + +To do: + + * Fix Require.js support? (#64) + +v0.1.4 -- June 21, 2014 +----------------------- * Bower: don't download package.json. Fixes browserify + jquery problem. (#65, @amelon) * Fix compatibility with Karma. (#75, @shaqq) @@ -10,10 +17,6 @@ Internal changes: * Readme: update .inc() and .status docs (#34, @lacivert) * Readme: update year (#73, @rwholmes) -To do: - - * Fix Require.js support? (#64) - v0.1.3 -- March 26, 2014 ------------------------ From fe73aa7d3826a95c36f399b7bd5b2247fba8aa7c Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Sat, 21 Jun 2014 01:06:05 +0800 Subject: [PATCH 056/130] Update readme and package for bower/npm. --- Readme.md | 4 ++++ package.json | 1 + 2 files changed, 5 insertions(+) diff --git a/Readme.md b/Readme.md index 0a91f32..c627dbe 100644 --- a/Readme.md +++ b/Readme.md @@ -9,6 +9,8 @@ Medium. Installation ------------ +NProgress is available via [bower] and [npm]. + Add [nprogress.js] and [nprogress.css] to your project. Basic usage @@ -152,4 +154,6 @@ its [contributors][c] [Turbolinks]: https://github.com/rails/turbolinks [nprogress.js]: http://ricostacruz.com/nprogress/nprogress.js [nprogress.css]: http://ricostacruz.com/nprogress/nprogress.css +[bower]: http://bower.io/search/?q=nprogress +[npm]: https://www.npmjs.org/package/nprogress diff --git a/package.json b/package.json index 85d3352..276eb0a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,7 @@ { "name": "nprogress", "author": "Rico Sta. Cruz ", + "description": "Simple slim progress bars", "version": "0.1.4", "repository": { "type": "git", From 217d35cf7a1c6e969e359ce5cba11149d070f7c0 Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Sat, 21 Jun 2014 01:07:07 +0800 Subject: [PATCH 057/130] Update readme with bower/npm code. --- Readme.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Readme.md b/Readme.md index c627dbe..64f3bd5 100644 --- a/Readme.md +++ b/Readme.md @@ -11,6 +11,9 @@ Installation NProgress is available via [bower] and [npm]. + $ bower install --save nprogress + $ npm install --save nprogress + Add [nprogress.js] and [nprogress.css] to your project. Basic usage From 740931df87d331b1e20da8db512ae2e03232d736 Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Sat, 21 Jun 2014 01:08:44 +0800 Subject: [PATCH 058/130] Define the main entry point in the npm package. --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 276eb0a..4171c2f 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "scripts": { "test": "./node_modules/.bin/mocha -R spec" }, + "main": "nprogress.js", "license": "MIT", "devDependencies": { "chai": "~1.6.1", From 0834b12204f4180ad547216cf3b89d91f4f81b81 Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Sat, 21 Jun 2014 01:13:39 +0800 Subject: [PATCH 059/130] Release 0.1.5 --- Notes.md | 22 +++++----------------- bower.json | 2 +- component.json | 2 +- nprogress.js | 2 +- package.json | 9 +++++---- 5 files changed, 13 insertions(+), 24 deletions(-) diff --git a/Notes.md b/Notes.md index c970028..3956c41 100644 --- a/Notes.md +++ b/Notes.md @@ -1,8 +1,3 @@ -Version numbers ---------------- - - $ bump *.json nprogress.js - Testing ------- @@ -20,18 +15,11 @@ Testing component build $ component build $ open test/component.html -Pushing -------- - - $ git push origin master - Releasing --------- -Tag and stuff (`git release`), then: - - $ git push origin master:gh-pages - -And publish to npm: - - $ npm publish + $ 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/bower.json b/bower.json index 0ce5016..3b9fae8 100644 --- a/bower.json +++ b/bower.json @@ -2,7 +2,7 @@ "name": "nprogress", "repo": "rstacruz/nprogress", "description": "slim progress bar", - "version": "0.1.4", + "version": "0.1.5", "keywords": [ "progress", "bar", diff --git a/component.json b/component.json index 6bacf3e..a2c1745 100644 --- a/component.json +++ b/component.json @@ -2,7 +2,7 @@ "name": "nprogress", "repo": "rstacruz/nprogress", "description": "slim progress bar", - "version": "0.1.4", + "version": "0.1.5", "keywords": ["progress","bar","spinner"], "dependencies": { "component/jQuery": "*" diff --git a/nprogress.js b/nprogress.js index 8223128..2d6d590 100644 --- a/nprogress.js +++ b/nprogress.js @@ -14,7 +14,7 @@ })(function() { var NProgress = {}; - NProgress.version = '0.1.4'; + NProgress.version = '0.1.5'; var Settings = NProgress.settings = { minimum: 0.08, diff --git a/package.json b/package.json index 4171c2f..8b0ebbb 100644 --- a/package.json +++ b/package.json @@ -2,10 +2,10 @@ "name": "nprogress", "author": "Rico Sta. Cruz ", "description": "Simple slim progress bars", - "version": "0.1.4", + "version": "0.1.5", "repository": { - "type": "git", - "url": "https://github.com/rstacruz/nprogress.git" + "type": "git", + "url": "https://github.com/rstacruz/nprogress.git" }, "scripts": { "test": "./node_modules/.bin/mocha -R spec" @@ -16,5 +16,6 @@ "chai": "~1.6.1", "mocha": "~1.11.0", "jsdom": "~0.6.5" - } + }, + "dependencies": {} } From f0286b9dc0b3886dccdcb575c0e492e6aca55b54 Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Sat, 21 Jun 2014 01:14:29 +0800 Subject: [PATCH 060/130] Update history. --- History.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/History.md b/History.md index 154ca86..3848953 100644 --- a/History.md +++ b/History.md @@ -1,10 +1,15 @@ -v0.1.5 -- unreleased +v0.1.6 -- unreleased -------------------- To do: * Fix Require.js support? (#64) +v0.1.5 -- June 21, 2014 +----------------------- + + * Release properly to the npm registry. (#82) + v0.1.4 -- June 21, 2014 ----------------------- From 427e60fcc157c7c092969232870680d0dc705ae3 Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Sat, 21 Jun 2014 01:15:48 +0800 Subject: [PATCH 061/130] Add the css as one of the main bower entry points. --- bower.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bower.json b/bower.json index 3b9fae8..4642b88 100644 --- a/bower.json +++ b/bower.json @@ -9,7 +9,7 @@ "spinner" ], "license": "MIT", - "main": "nprogress.js", + "main": ["nprogress.js", "nprogress.css"], "scripts": [ "nprogress.js" ], From 222179dea8ddcbdcb7e4783a345f72429baa8deb Mon Sep 17 00:00:00 2001 From: Jon Jaques Date: Wed, 4 Sep 2013 00:36:15 -0500 Subject: [PATCH 062/130] Add support for specifying parent container --- nprogress.css | 10 ++++++++++ nprogress.js | 9 ++++++++- support/style.css | 12 ++++++++---- test/test.js | 21 +++++++++++++++++++++ 4 files changed, 47 insertions(+), 5 deletions(-) diff --git a/nprogress.css b/nprogress.css index 21c5fbb..6752d7f 100644 --- a/nprogress.css +++ b/nprogress.css @@ -53,6 +53,16 @@ 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); } diff --git a/nprogress.js b/nprogress.js index 2d6d590..c0c0497 100644 --- a/nprogress.js +++ b/nprogress.js @@ -27,6 +27,7 @@ showSpinner: true, barSelector: '[role="bar"]', spinnerSelector: '[role="spinner"]', + parent: 'body', template: '
' }; @@ -226,6 +227,7 @@ var bar = progress.querySelector(Settings.barSelector), perc = fromStart ? '-100' : toBarPerc(NProgress.status || 0), + parent = document.querySelector(Settings.parent), spinner; css(bar, { @@ -238,7 +240,11 @@ spinner && removeElement(spinner); } - document.body.appendChild(progress); + if (parent != document.body) { + addClass(parent, 'nprogress-custom-parent'); + } + + parent.appendChild(progress); return progress; }; @@ -248,6 +254,7 @@ NProgress.remove = function() { removeClass(document.documentElement, 'nprogress-busy'); + removeClass(document.querySelector(Settings.parent), 'nprogress-custom-parent') var progress = document.getElementById('nprogress'); progress && removeElement(progress); }; diff --git a/support/style.css b/support/style.css index 3c15363..1a78acf 100644 --- a/support/style.css +++ b/support/style.css @@ -3,6 +3,11 @@ i, b { font-weight: 400; } +body, html { + padding: 0; + margin: 0; +} + body { background: white; } @@ -130,11 +135,10 @@ button { } .page-header { - margin: 1.5em auto; text-align: center; max-width: 400px; - padding: 0 20px; - margin: 3em auto; + padding: 3em 20px; + margin: 0 auto; } .page-header h1 { @@ -173,7 +177,7 @@ p.brief.big { .page-header h1 { font-size: 3em; } .page-header { - margin: 4.5em auto 3.5em auto; + padding: 4.5em 20px 3.5em 20px; } } diff --git a/test/test.js b/test/test.js index cd8f9dd..bd53cfb 100644 --- a/test/test.js +++ b/test/test.js @@ -71,6 +71,14 @@ NProgress.start(); assert.equal(NProgress.status, NProgress.settings.minimum); }); + + it('must be attached to specified parent', function() { + var test = $('
', {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")); + }); }); // ---- @@ -91,6 +99,19 @@ // ---- + 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(); From 098ea9361d46c9bf20df24d6c4c94beaf9df7c4c Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Sat, 21 Jun 2014 10:17:27 +0800 Subject: [PATCH 063/130] Update History.md --- History.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/History.md b/History.md index 3848953..599d74d 100644 --- a/History.md +++ b/History.md @@ -1,6 +1,8 @@ v0.1.6 -- unreleased -------------------- + * Add support for specifying a different parent container. (#33, #86, @jonjaques) + To do: * Fix Require.js support? (#64) From 613a42c8eae7829bcd1412c159a5c65e0f3ffdf8 Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Sat, 21 Jun 2014 10:21:20 +0800 Subject: [PATCH 064/130] Readme: update with `parent` usage notes. (#86) --- Readme.md | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/Readme.md b/Readme.md index 64f3bd5..f4f8cc2 100644 --- a/Readme.md +++ b/Readme.md @@ -84,14 +84,15 @@ __Get the status value:__ To get the status value, use `.status` Configuration ------------- -Change the minimum percentage using `minimum`. +**minimum**: Changes the minimum percentage. (default: `0.08`) ~~~ js NProgress.configure({ minimum: 0.1 }); ~~~ -You can change the markup using `template`. To keep the progress -bar working, keep an element with `role='bar'` in there. +**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({ @@ -99,19 +100,21 @@ NProgress.configure({ }); ~~~ -Adjust animation settings using `ease` (a CSS easing string) and `speed` (in - ms). +**ease** and **speed**: +Adjust animation settings using `ease` (a CSS easing string) and `speed` +(in ms). ~~~ js NProgress.configure({ ease: 'ease', speed: 500 }); ~~~ -Want to turn off trickling? Set `trickle` to `false`. +**trickle**: Want to turn off trickling? Set `trickle` 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). @@ -119,12 +122,18 @@ You can adjust the `trickleRate` (how much to increase per trickle) and NProgress.configure({ trickleRate: 0.02, trickleSpeed: 800 }); ~~~ -Want to turn off loading spinner? Set `showSpinner` to `false`. +**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 ------------- @@ -152,6 +161,8 @@ its [contributors][c] * [Github](http://github.com/rstacruz) (@rstacruz) * [Twitter](http://twitter.com/rstacruz) (@rstacruz) +[default template]: https://github.com/rstacruz/nprogress/blob/master/nprogress.js#L31 + [rsc]: http://ricostacruz.com [c]: http://github.com/rstacruz/nprogress/contributors [Turbolinks]: https://github.com/rails/turbolinks From e95d79be62d65f9c9931df64f553c4781b9aac7b Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Sat, 21 Jun 2014 10:24:32 +0800 Subject: [PATCH 065/130] Readme: formatting. --- Readme.md | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/Readme.md b/Readme.md index f4f8cc2..ac2291b 100644 --- a/Readme.md +++ b/Readme.md @@ -84,13 +84,13 @@ __Get the status value:__ To get the status value, use `.status` Configuration ------------- -**minimum**: Changes the minimum percentage. (default: `0.08`) +`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 +`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. @@ -100,35 +100,34 @@ NProgress.configure({ }); ~~~ -**ease** and **speed**: -Adjust animation settings using `ease` (a CSS easing string) and `speed` -(in ms). +`ease` and `speed` — Adjust animation settings using *ease* (a CSS easing string) +and *speed* (in ms). (default: `ease` and `200`) ~~~ js NProgress.configure({ ease: 'ease', speed: 500 }); ~~~ -**trickle**: Want to turn off trickling? Set `trickle` to `false`. (default: `true`) +`trickle` — Turn of 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). +`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`) +`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`) +`parent` — specify this to change the parent container. (default: `body`) ~~~ js NProgress.configure({ parent: '#container' }); From 1da3bb701acc6b7f3ca54b02213c6e345ad558e0 Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Sat, 21 Jun 2014 10:25:52 +0800 Subject: [PATCH 066/130] Readme: formatting again. --- Readme.md | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/Readme.md b/Readme.md index ac2291b..99c8b11 100644 --- a/Readme.md +++ b/Readme.md @@ -84,13 +84,15 @@ __Get the status value:__ To get the status value, use `.status` Configuration ------------- -`minimum` — Changes the minimum percentage used upon starting. (default: `0.08`) +#### `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 +#### `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. @@ -100,20 +102,22 @@ NProgress.configure({ }); ~~~ -`ease` and `speed` — Adjust animation settings using *ease* (a CSS easing string) +#### `ease` and `speed` +Adjust animation settings using *ease* (a CSS easing string) and *speed* (in ms). (default: `ease` and `200`) ~~~ js NProgress.configure({ ease: 'ease', speed: 500 }); ~~~ -`trickle` — Turn of the automatic incrementing behavior by setting this to `false`. (default: `true`) +#### `trickle` +Turn of the automatic incrementing behavior by setting this to `false`. (default: `true`) ~~~ js NProgress.configure({ trickle: false }); ~~~ -`trickleRate` and `trickleSpeed` — +#### `trickleRate` and `trickleSpeed` You can adjust the *trickleRate* (how much to increase per trickle) and *trickleSpeed* (how often to trickle, in ms). @@ -121,13 +125,15 @@ You can adjust the *trickleRate* (how much to increase per trickle) and NProgress.configure({ trickleRate: 0.02, trickleSpeed: 800 }); ~~~ -`showSpinner` — Turn off loading spinner by setting it to false. (default: `true`) +#### `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`) +#### `parent` +specify this to change the parent container. (default: `body`) ~~~ js NProgress.configure({ parent: '#container' }); From 4aa6518f55c506e3b346d374f0c90bd865731abd Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Sat, 21 Jun 2014 10:34:26 +0800 Subject: [PATCH 067/130] Use umdjs convention to fix Require.js support. --- nprogress.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/nprogress.js b/nprogress.js index c0c0497..e107929 100644 --- a/nprogress.js +++ b/nprogress.js @@ -1,17 +1,17 @@ /*! NProgress (c) 2013, Rico Sta. Cruz * http://ricostacruz.com/nprogress */ -;(function(factory) { +;(function(root, factory) { - if (typeof module !== 'undefined' && module.exports) { - module.exports = factory(); - } else if (typeof define === 'function' && define.amd) { + if (typeof define === 'function' && define.amd) { define(factory); + } else if (typeof exports === 'object') { + module.exports = factory(); } else { - this.NProgress = factory(); + root.NProgress = factory(); } -})(function() { +})(this, function() { var NProgress = {}; NProgress.version = '0.1.5'; From 405fef3fed1f5b328b900558132e04be3353fbfc Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Sat, 21 Jun 2014 10:38:06 +0800 Subject: [PATCH 068/130] Update copyright block. --- nprogress.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nprogress.js b/nprogress.js index e107929..f61e28a 100644 --- a/nprogress.js +++ b/nprogress.js @@ -1,5 +1,5 @@ -/*! NProgress (c) 2013, Rico Sta. Cruz - * http://ricostacruz.com/nprogress */ +/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress + * @license MIT */ ;(function(root, factory) { From 526e9e555c3b5b3f235c54e9f2a86ee17ff9e715 Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Sat, 21 Jun 2014 10:42:25 +0800 Subject: [PATCH 069/130] Update History.md --- History.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/History.md b/History.md index 599d74d..68825ea 100644 --- a/History.md +++ b/History.md @@ -2,10 +2,7 @@ v0.1.6 -- unreleased -------------------- * Add support for specifying a different parent container. (#33, #86, @jonjaques) - -To do: - - * Fix Require.js support? (#64) + * Fix Require.js support. (#64, #75, #85) v0.1.5 -- June 21, 2014 ----------------------- From cc665e686f64dd07cb69d6a6bf17dca00b6788c2 Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Sat, 21 Jun 2014 10:43:32 +0800 Subject: [PATCH 070/130] History.md: markdown formating update. --- History.md | 28 +++++++++------------------- 1 file changed, 9 insertions(+), 19 deletions(-) diff --git a/History.md b/History.md index 68825ea..15638ed 100644 --- a/History.md +++ b/History.md @@ -1,16 +1,13 @@ -v0.1.6 -- unreleased --------------------- +## v0.1.6 - unreleased * Add support for specifying a different parent container. (#33, #86, @jonjaques) * Fix Require.js support. (#64, #75, #85) -v0.1.5 -- June 21, 2014 ------------------------ +## v0.1.5 - June 21, 2014 * Release properly to the npm registry. (#82) -v0.1.4 -- June 21, 2014 ------------------------ +## v0.1.4 - June 21, 2014 * Bower: don't download package.json. Fixes browserify + jquery problem. (#65, @amelon) * Fix compatibility with Karma. (#75, @shaqq) @@ -21,39 +18,32 @@ Internal changes: * Readme: update .inc() and .status docs (#34, @lacivert) * Readme: update year (#73, @rwholmes) -v0.1.3 -- March 26, 2014 ------------------------- +## v0.1.3 - March 26, 2014 * Remove jQuery dependency. (#28, #7, #17, @rurjur) * Update Readme to change year to 2014. (#73, @rwholmes) -v0.1.2 -- August 21, 2013 -------------------------- +## 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 -------------------------- +## v0.1.1 - August 21, 2013 Minor fixes. * Removed the busy cursor that occurs when loading. - * Added support for IE7 to IE9. (#3, [Mark Bao]) + * Added support for IE7 to IE9. (#3, @markbao) * Implement `trickleRate` and `trickleSpeed` options. - * Implement the `showSpinner` option to allow removing the spinner. (#5, #9, - [Rahul C S]) + * Implement the `showSpinner` option to allow removing the spinner. (#5, #9, @rahulcs) * Registered as a Component in Component.io. * Updated the Readme with better Turbolinks instructions. (#8) -v0.1.0 -- August 20, 2013 -------------------------- +## v0.1.0 - August 20, 2013 Initial release. -[Rahul C S]: https://github.com/rahulcs -[Mark Bao]: https://github.com/markbao [Bower]: http://bower.io [Component]: http://component.io From 91ecdf2f43a510ad8dc334e563a45cebde63d573 Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Sat, 21 Jun 2014 10:45:42 +0800 Subject: [PATCH 071/130] Update History.md --- History.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/History.md b/History.md index 15638ed..c723187 100644 --- a/History.md +++ b/History.md @@ -1,6 +1,6 @@ ## v0.1.6 - unreleased - * Add support for specifying a different parent container. (#33, #86, @jonjaques) + * Add support for specifying a different parent container. (#33, #86, #14, @jonjaques) * Fix Require.js support. (#64, #75, #85) ## v0.1.5 - June 21, 2014 From 44fae7fd423c9c00ad476806de3e622bae52970c Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Sat, 21 Jun 2014 10:46:33 +0800 Subject: [PATCH 072/130] Update History.md --- History.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/History.md b/History.md index c723187..c7e0248 100644 --- a/History.md +++ b/History.md @@ -1,6 +1,6 @@ ## v0.1.6 - unreleased - * Add support for specifying a different parent container. (#33, #86, #14, @jonjaques) + * Add support for specifying a different parent container. (#86, #14, #33, #39, @jonjaques) * Fix Require.js support. (#64, #75, #85) ## v0.1.5 - June 21, 2014 From 1e1d0539061c9a1c012a3f1be18deee4dabedbaf Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Sat, 21 Jun 2014 10:51:03 +0800 Subject: [PATCH 073/130] Update History.md --- History.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/History.md b/History.md index c7e0248..4d1303c 100644 --- a/History.md +++ b/History.md @@ -1,7 +1,7 @@ ## v0.1.6 - unreleased * Add support for specifying a different parent container. (#86, #14, #33, #39, @jonjaques) - * Fix Require.js support. (#64, #75, #85) + * Fix Require.js support. (#64, #75, #85, #84) ## v0.1.5 - June 21, 2014 From 943a3497081ae9442a35b09f26a39a4e4be42c20 Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Sat, 21 Jun 2014 10:51:18 +0800 Subject: [PATCH 074/130] Update History.md --- History.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/History.md b/History.md index 4d1303c..6c18601 100644 --- a/History.md +++ b/History.md @@ -1,7 +1,8 @@ ## v0.1.6 - unreleased * Add support for specifying a different parent container. (#86, #14, #33, #39, @jonjaques) - * Fix Require.js support. (#64, #75, #85, #84) + * Fix Require.js support. (#64, #75, #85) + * Fix component support. (#84) ## v0.1.5 - June 21, 2014 From 3f53c9c6b4808bf9f46241fe2d8d5019836a8f92 Mon Sep 17 00:00:00 2001 From: "Rico Sta. Cruz" Date: Mon, 23 Jun 2014 11:06:09 +0800 Subject: [PATCH 075/130] Remove extraneous jquery tests. --- test/setup.js | 18 ++++-------------- test/support/multisuite.js | 28 ---------------------------- vendor/jquery-1.10.js | 6 ------ vendor/jquery-1.7.js | 4 ---- vendor/jquery-1.8.js | 2 -- vendor/jquery-1.9.js | 5 ----- 6 files changed, 4 insertions(+), 59 deletions(-) delete mode 100644 test/support/multisuite.js delete mode 100644 vendor/jquery-1.10.js delete mode 100644 vendor/jquery-1.7.js delete mode 100644 vendor/jquery-1.8.js delete mode 100644 vendor/jquery-1.9.js diff --git a/test/setup.js b/test/setup.js index 00e9e5d..b09b16d 100644 --- a/test/setup.js +++ b/test/setup.js @@ -1,26 +1,20 @@ -// Deps global.chai = require('chai'); global.assert = chai.assert; chai.should(); var fs = require('fs'); -var multisuite = require('./support/multisuite'); var scripts = { - 'jq-1.7': fs.readFileSync('vendor/jquery-1.7.js'), - 'jq-1.8': fs.readFileSync('vendor/jquery-1.8.js'), - 'jq-1.9': fs.readFileSync('vendor/jquery-1.9.js'), - 'jq-1.10': fs.readFileSync('vendor/jquery-1.10.js'), 'jq-2.0': fs.readFileSync('vendor/jquery-2.0.js'), 'nprogress': fs.readFileSync('nprogress.js') }; -function myEnv(jq) { +function myEnv() { var jsdom = require('jsdom'); return function(done) { jsdom.env({ html: '', - src: [ scripts[jq], scripts.nprogress ], + src: [ scripts['jq-2.0'], scripts.nprogress ], done: function(errors, window) { window.console = console; global.window = window; @@ -33,9 +27,5 @@ function myEnv(jq) { }; } -if (process.env.fast) { - before(myEnv('jq-1.10')); - global.testSuite = describe; -} else { - global.testSuite = multisuite(['jq-1.8', 'jq-1.9', 'jq-1.10', 'jq-2.0'], myEnv); -} +before(myEnv()); +global.testSuite = describe; diff --git a/test/support/multisuite.js b/test/support/multisuite.js deleted file mode 100644 index 85c1213..0000000 --- a/test/support/multisuite.js +++ /dev/null @@ -1,28 +0,0 @@ -/** - * Creates a test suite function that uses permutations of the setup script - * (made via `generator`). - * - * gen = function(version) { return function() { ... } }; - * mysuite = multisuite(['a', 'b'], gen); - * - * mysuite('event tests', function() { - * .... - * }); - */ - -module.exports = function(variants, generator) { - return function(name, fn) { - variants.forEach(function(variant) { - - var subname = name; - if (variants.length > 1) subname = variant.toString() + " " + subname; - - describe(subname, function() { - var arr = variant.constructor === Array ? variant : [variant]; - before(generator.apply(this, arr)); - fn.apply(this); - }); - - }); - }; -}; diff --git a/vendor/jquery-1.10.js b/vendor/jquery-1.10.js deleted file mode 100644 index 263af9c..0000000 --- a/vendor/jquery-1.10.js +++ /dev/null @@ -1,6 +0,0 @@ -/*! jQuery v1.10.1 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license -//@ sourceMappingURL=jquery.min.map -*/ -(function(e,t){var n,r,i=typeof t,o=e.location,a=e.document,s=a.documentElement,l=e.jQuery,u=e.$,c={},p=[],f="1.10.1",d=p.concat,h=p.push,g=p.slice,m=p.indexOf,y=c.toString,v=c.hasOwnProperty,b=f.trim,x=function(e,t){return new x.fn.init(e,t,r)},w=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=/\S+/g,C=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,k=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,E=/^[\],:{}\s]*$/,S=/(?:^|:|,)(?:\s*\[)+/g,A=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,j=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,D=/^-ms-/,L=/-([\da-z])/gi,H=function(e,t){return t.toUpperCase()},q=function(e){(a.addEventListener||"load"===e.type||"complete"===a.readyState)&&(_(),x.ready())},_=function(){a.addEventListener?(a.removeEventListener("DOMContentLoaded",q,!1),e.removeEventListener("load",q,!1)):(a.detachEvent("onreadystatechange",q),e.detachEvent("onload",q))};x.fn=x.prototype={jquery:f,constructor:x,init:function(e,n,r){var i,o;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof x?n[0]:n,x.merge(this,x.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:a,!0)),k.test(i[1])&&x.isPlainObject(n))for(i in n)x.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(o=a.getElementById(i[2]),o&&o.parentNode){if(o.id!==i[2])return r.find(e);this.length=1,this[0]=o}return this.context=a,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:"",length:0,toArray:function(){return g.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(g.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},l=1,u=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},l=2),"object"==typeof s||x.isFunction(s)||(s={}),u===l&&(s=this,--l);u>l;l++)if(null!=(o=arguments[l]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(x.isPlainObject(r)||(n=x.isArray(r)))?(n?(n=!1,a=e&&x.isArray(e)?e:[]):a=e&&x.isPlainObject(e)?e:{},s[i]=x.extend(c,a,r)):r!==t&&(s[i]=r));return s},x.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=l),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){if(e===!0?!--x.readyWait:!x.isReady){if(!a.body)return setTimeout(x.ready);x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(a,[x]),x.fn.trigger&&x(a).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===x.type(e)},isArray:Array.isArray||function(e){return"array"===x.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?c[y.call(e)]||"object":typeof e},isPlainObject:function(e){var n;if(!e||"object"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!v.call(e,"constructor")&&!v.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(r){return!1}if(x.support.ownLast)for(n in e)return v.call(e,n);for(n in e);return n===t||v.call(e,n)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||a;var r=k.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=x.trim(n),n&&E.test(n.replace(A,"@").replace(j,"]").replace(S,"")))?Function("return "+n)():(x.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||x.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&x.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(D,"ms-").replace(L,H)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:b&&!b.call("\ufeff\u00a0")?function(e){return null==e?"":b.call(e)}:function(e){return null==e?"":(e+"").replace(C,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?x.merge(n,"string"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(m)return m.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return d.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),x.isFunction(e)?(r=g.call(arguments,2),i=function(){return e.apply(n||this,r.concat(g.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):t},access:function(e,n,r,i,o,a,s){var l=0,u=e.length,c=null==r;if("object"===x.type(r)){o=!0;for(l in r)x.access(e,n,l,r[l],!0,a,s)}else if(i!==t&&(o=!0,x.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(x(e),n)})),n))for(;u>l;l++)n(e[l],r,s?i:i.call(e[l],l,n(e[l],r)));return o?e:c?n.call(e):u?n(e[0],r):a},now:function(){return(new Date).getTime()},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),x.ready.promise=function(t){if(!n)if(n=x.Deferred(),"complete"===a.readyState)setTimeout(x.ready);else if(a.addEventListener)a.addEventListener("DOMContentLoaded",q,!1),e.addEventListener("load",q,!1);else{a.attachEvent("onreadystatechange",q),e.attachEvent("onload",q);var r=!1;try{r=null==e.frameElement&&a.documentElement}catch(i){}r&&r.doScroll&&function o(){if(!x.isReady){try{r.doScroll("left")}catch(e){return setTimeout(o,50)}_(),x.ready()}}()}return n.promise(t)},x.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){c["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=x(a),function(e,t){var n,r,i,o,a,s,l,u,c,p,f,d,h,g,m,y,v,b="sizzle"+-new Date,w=e.document,T=0,C=0,N=lt(),k=lt(),E=lt(),S=!1,A=function(){return 0},j=typeof t,D=1<<31,L={}.hasOwnProperty,H=[],q=H.pop,_=H.push,M=H.push,O=H.slice,F=H.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},B="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",P="[\\x20\\t\\r\\n\\f]",R="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",W=R.replace("w","w#"),$="\\["+P+"*("+R+")"+P+"*(?:([*^$|!~]?=)"+P+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+W+")|)|)"+P+"*\\]",I=":("+R+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+$.replace(3,8)+")*)|.*)\\)|)",z=RegExp("^"+P+"+|((?:^|[^\\\\])(?:\\\\.)*)"+P+"+$","g"),X=RegExp("^"+P+"*,"+P+"*"),U=RegExp("^"+P+"*([>+~]|"+P+")"+P+"*"),V=RegExp(P+"*[+~]"),Y=RegExp("="+P+"*([^\\]'\"]*)"+P+"*\\]","g"),J=RegExp(I),G=RegExp("^"+W+"$"),Q={ID:RegExp("^#("+R+")"),CLASS:RegExp("^\\.("+R+")"),TAG:RegExp("^("+R.replace("w","w*")+")"),ATTR:RegExp("^"+$),PSEUDO:RegExp("^"+I),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+P+"*(even|odd|(([+-]|)(\\d*)n|)"+P+"*(?:([+-]|)"+P+"*(\\d+)|))"+P+"*\\)|)","i"),bool:RegExp("^(?:"+B+")$","i"),needsContext:RegExp("^"+P+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+P+"*((?:-\\d)?\\d*)"+P+"*\\)|)(?=[^-]|$)","i")},K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,et=/^(?:input|select|textarea|button)$/i,tt=/^h\d$/i,nt=/'|\\/g,rt=RegExp("\\\\([\\da-f]{1,6}"+P+"?|("+P+")|.)","ig"),it=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{M.apply(H=O.call(w.childNodes),w.childNodes),H[w.childNodes.length].nodeType}catch(ot){M={apply:H.length?function(e,t){_.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function at(e,t,n,i){var o,a,s,l,u,c,d,m,y,x;if((t?t.ownerDocument||t:w)!==f&&p(t),t=t||f,n=n||[],!e||"string"!=typeof e)return n;if(1!==(l=t.nodeType)&&9!==l)return[];if(h&&!i){if(o=Z.exec(e))if(s=o[1]){if(9===l){if(a=t.getElementById(s),!a||!a.parentNode)return n;if(a.id===s)return n.push(a),n}else if(t.ownerDocument&&(a=t.ownerDocument.getElementById(s))&&v(t,a)&&a.id===s)return n.push(a),n}else{if(o[2])return M.apply(n,t.getElementsByTagName(e)),n;if((s=o[3])&&r.getElementsByClassName&&t.getElementsByClassName)return M.apply(n,t.getElementsByClassName(s)),n}if(r.qsa&&(!g||!g.test(e))){if(m=d=b,y=t,x=9===l&&e,1===l&&"object"!==t.nodeName.toLowerCase()){c=bt(e),(d=t.getAttribute("id"))?m=d.replace(nt,"\\$&"):t.setAttribute("id",m),m="[id='"+m+"'] ",u=c.length;while(u--)c[u]=m+xt(c[u]);y=V.test(e)&&t.parentNode||t,x=c.join(",")}if(x)try{return M.apply(n,y.querySelectorAll(x)),n}catch(T){}finally{d||t.removeAttribute("id")}}}return At(e.replace(z,"$1"),t,n,i)}function st(e){return K.test(e+"")}function lt(){var e=[];function t(n,r){return e.push(n+=" ")>o.cacheLength&&delete t[e.shift()],t[n]=r}return t}function ut(e){return e[b]=!0,e}function ct(e){var t=f.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function pt(e,t,n){e=e.split("|");var r,i=e.length,a=n?null:t;while(i--)(r=o.attrHandle[e[i]])&&r!==t||(o.attrHandle[e[i]]=a)}function ft(e,t){var n=e.getAttributeNode(t);return n&&n.specified?n.value:e[t]===!0?t.toLowerCase():null}function dt(e,t){return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}function ht(e){return"input"===e.nodeName.toLowerCase()?e.defaultValue:t}function gt(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function mt(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function yt(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function vt(e){return ut(function(t){return t=+t,ut(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}s=at.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},r=at.support={},p=at.setDocument=function(e){var n=e?e.ownerDocument||e:w,i=n.parentWindow;return n!==f&&9===n.nodeType&&n.documentElement?(f=n,d=n.documentElement,h=!s(n),i&&i.frameElement&&i.attachEvent("onbeforeunload",function(){p()}),r.attributes=ct(function(e){return e.innerHTML="",pt("type|href|height|width",dt,"#"===e.firstChild.getAttribute("href")),pt(B,ft,null==e.getAttribute("disabled")),e.className="i",!e.getAttribute("className")}),r.input=ct(function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")}),pt("value",ht,r.attributes&&r.input),r.getElementsByTagName=ct(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),r.getElementsByClassName=ct(function(e){return e.innerHTML="
",e.firstChild.className="i",2===e.getElementsByClassName("i").length}),r.getById=ct(function(e){return d.appendChild(e).id=b,!n.getElementsByName||!n.getElementsByName(b).length}),r.getById?(o.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){return e.getAttribute("id")===t}}):(delete o.find.ID,o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode("id");return n&&n.value===t}}),o.find.TAG=r.getElementsByTagName?function(e,n){return typeof n.getElementsByTagName!==j?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},o.find.CLASS=r.getElementsByClassName&&function(e,n){return typeof n.getElementsByClassName!==j&&h?n.getElementsByClassName(e):t},m=[],g=[],(r.qsa=st(n.querySelectorAll))&&(ct(function(e){e.innerHTML="",e.querySelectorAll("[selected]").length||g.push("\\["+P+"*(?:value|"+B+")"),e.querySelectorAll(":checked").length||g.push(":checked")}),ct(function(e){var t=n.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("t",""),e.querySelectorAll("[t^='']").length&&g.push("[*^$]="+P+"*(?:''|\"\")"),e.querySelectorAll(":enabled").length||g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")})),(r.matchesSelector=st(y=d.webkitMatchesSelector||d.mozMatchesSelector||d.oMatchesSelector||d.msMatchesSelector))&&ct(function(e){r.disconnectedMatch=y.call(e,"div"),y.call(e,"[s!='']:x"),m.push("!=",I)}),g=g.length&&RegExp(g.join("|")),m=m.length&&RegExp(m.join("|")),v=st(d.contains)||d.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},r.sortDetached=ct(function(e){return 1&e.compareDocumentPosition(n.createElement("div"))}),A=d.compareDocumentPosition?function(e,t){if(e===t)return S=!0,0;var i=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t);return i?1&i||!r.sortDetached&&t.compareDocumentPosition(e)===i?e===n||v(w,e)?-1:t===n||v(w,t)?1:c?F.call(c,e)-F.call(c,t):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return S=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:c?F.call(c,e)-F.call(c,t):0;if(o===a)return gt(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?gt(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},n):f},at.matches=function(e,t){return at(e,null,null,t)},at.matchesSelector=function(e,t){if((e.ownerDocument||e)!==f&&p(e),t=t.replace(Y,"='$1']"),!(!r.matchesSelector||!h||m&&m.test(t)||g&&g.test(t)))try{var n=y.call(e,t);if(n||r.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(i){}return at(t,f,null,[e]).length>0},at.contains=function(e,t){return(e.ownerDocument||e)!==f&&p(e),v(e,t)},at.attr=function(e,n){(e.ownerDocument||e)!==f&&p(e);var i=o.attrHandle[n.toLowerCase()],a=i&&L.call(o.attrHandle,n.toLowerCase())?i(e,n,!h):t;return a===t?r.attributes||!h?e.getAttribute(n):(a=e.getAttributeNode(n))&&a.specified?a.value:null:a},at.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},at.uniqueSort=function(e){var t,n=[],i=0,o=0;if(S=!r.detectDuplicates,c=!r.sortStable&&e.slice(0),e.sort(A),S){while(t=e[o++])t===e[o]&&(i=n.push(o));while(i--)e.splice(n[i],1)}return e},a=at.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=a(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=a(t);return n},o=at.selectors={cacheLength:50,createPseudo:ut,match:Q,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(rt,it),e[3]=(e[4]||e[5]||"").replace(rt,it),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||at.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&at.error(e[0]),e},PSEUDO:function(e){var n,r=!e[5]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]&&e[4]!==t?e[2]=e[4]:r&&J.test(r)&&(n=bt(r,!0))&&(n=r.indexOf(")",r.length-n)-r.length)&&(e[0]=e[0].slice(0,n),e[2]=r.slice(0,n)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(rt,it).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=N[e+" "];return t||(t=RegExp("(^|"+P+")"+e+"("+P+"|$)"))&&N(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=at.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var u,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!l&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[b]||(m[b]={}),u=c[e]||[],d=u[0]===T&&u[1],f=u[0]===T&&u[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[T,d,f];break}}else if(v&&(u=(t[b]||(t[b]={}))[e])&&u[0]===T)f=u[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[b]||(p[b]={}))[e]=[T,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=o.pseudos[e]||o.setFilters[e.toLowerCase()]||at.error("unsupported pseudo: "+e);return r[b]?r(t):r.length>1?(n=[e,e,"",t],o.setFilters.hasOwnProperty(e.toLowerCase())?ut(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=F.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:ut(function(e){var t=[],n=[],r=l(e.replace(z,"$1"));return r[b]?ut(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:ut(function(e){return function(t){return at(e,t).length>0}}),contains:ut(function(e){return function(t){return(t.textContent||t.innerText||a(t)).indexOf(e)>-1}}),lang:ut(function(e){return G.test(e||"")||at.error("unsupported lang: "+e),e=e.replace(rt,it).toLowerCase(),function(t){var n;do if(n=h?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===d},focus:function(e){return e===f.activeElement&&(!f.hasFocus||f.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!o.pseudos.empty(e)},header:function(e){return tt.test(e.nodeName)},input:function(e){return et.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:vt(function(){return[0]}),last:vt(function(e,t){return[t-1]}),eq:vt(function(e,t,n){return[0>n?n+t:n]}),even:vt(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:vt(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:vt(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:vt(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}};for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})o.pseudos[n]=mt(n);for(n in{submit:!0,reset:!0})o.pseudos[n]=yt(n);function bt(e,t){var n,r,i,a,s,l,u,c=k[e+" "];if(c)return t?0:c.slice(0);s=e,l=[],u=o.preFilter;while(s){(!n||(r=X.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),l.push(i=[])),n=!1,(r=U.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(z," ")}),s=s.slice(n.length));for(a in o.filter)!(r=Q[a].exec(s))||u[a]&&!(r=u[a](r))||(n=r.shift(),i.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?at.error(e):k(e,l).slice(0)}function xt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function wt(e,t,n){var r=t.dir,o=n&&"parentNode"===r,a=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||o)return e(t,n,i)}:function(t,n,s){var l,u,c,p=T+" "+a;if(s){while(t=t[r])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[r])if(1===t.nodeType||o)if(c=t[b]||(t[b]={}),(u=c[r])&&u[0]===p){if((l=u[1])===!0||l===i)return l===!0}else if(u=c[r]=[p],u[1]=e(t,n,s)||i,u[1]===!0)return!0}}function Tt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function Ct(e,t,n,r,i){var o,a=[],s=0,l=e.length,u=null!=t;for(;l>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),u&&t.push(s));return a}function Nt(e,t,n,r,i,o){return r&&!r[b]&&(r=Nt(r)),i&&!i[b]&&(i=Nt(i,o)),ut(function(o,a,s,l){var u,c,p,f=[],d=[],h=a.length,g=o||St(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:Ct(g,f,e,s,l),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,l),r){u=Ct(y,d),r(u,[],s,l),c=u.length;while(c--)(p=u[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){u=[],c=y.length;while(c--)(p=y[c])&&u.push(m[c]=p);i(null,y=[],u,l)}c=y.length;while(c--)(p=y[c])&&(u=i?F.call(o,p):f[c])>-1&&(o[u]=!(a[u]=p))}}else y=Ct(y===a?y.splice(h,y.length):y),i?i(null,a,y,l):M.apply(a,y)})}function kt(e){var t,n,r,i=e.length,a=o.relative[e[0].type],s=a||o.relative[" "],l=a?1:0,c=wt(function(e){return e===t},s,!0),p=wt(function(e){return F.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;i>l;l++)if(n=o.relative[e[l].type])f=[wt(Tt(f),n)];else{if(n=o.filter[e[l].type].apply(null,e[l].matches),n[b]){for(r=++l;i>r;r++)if(o.relative[e[r].type])break;return Nt(l>1&&Tt(f),l>1&&xt(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(z,"$1"),n,r>l&&kt(e.slice(l,r)),i>r&&kt(e=e.slice(r)),i>r&&xt(e))}f.push(n)}return Tt(f)}function Et(e,t){var n=0,r=t.length>0,a=e.length>0,s=function(s,l,c,p,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,C=u,N=s||a&&o.find.TAG("*",d&&l.parentNode||l),k=T+=null==C?1:Math.random()||.1;for(w&&(u=l!==f&&l,i=n);null!=(h=N[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,l,c)){p.push(h);break}w&&(T=k,i=++n)}r&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,r&&b!==v){g=0;while(m=t[g++])m(x,y,l,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=q.call(p));y=Ct(y)}M.apply(p,y),w&&!s&&y.length>0&&v+t.length>1&&at.uniqueSort(p)}return w&&(T=k,u=C),x};return r?ut(s):s}l=at.compile=function(e,t){var n,r=[],i=[],o=E[e+" "];if(!o){t||(t=bt(e)),n=t.length;while(n--)o=kt(t[n]),o[b]?r.push(o):i.push(o);o=E(e,Et(i,r))}return o};function St(e,t,n){var r=0,i=t.length;for(;i>r;r++)at(e,t[r],n);return n}function At(e,t,n,i){var a,s,u,c,p,f=bt(e);if(!i&&1===f.length){if(s=f[0]=f[0].slice(0),s.length>2&&"ID"===(u=s[0]).type&&r.getById&&9===t.nodeType&&h&&o.relative[s[1].type]){if(t=(o.find.ID(u.matches[0].replace(rt,it),t)||[])[0],!t)return n;e=e.slice(s.shift().value.length)}a=Q.needsContext.test(e)?0:s.length;while(a--){if(u=s[a],o.relative[c=u.type])break;if((p=o.find[c])&&(i=p(u.matches[0].replace(rt,it),V.test(s[0].type)&&t.parentNode||t))){if(s.splice(a,1),e=i.length&&xt(s),!e)return M.apply(n,i),n;break}}}return l(e,f)(i,t,!h,n,V.test(e)),n}o.pseudos.nth=o.pseudos.eq;function jt(){}jt.prototype=o.filters=o.pseudos,o.setFilters=new jt,r.sortStable=b.split("").sort(A).join("")===b,p(),[0,0].sort(A),r.detectDuplicates=S,x.find=at,x.expr=at.selectors,x.expr[":"]=x.expr.pseudos,x.unique=at.uniqueSort,x.text=at.getText,x.isXMLDoc=at.isXML,x.contains=at.contains}(e);var O={};function F(e){var t=O[e]={};return x.each(e.match(T)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e="string"==typeof e?O[e]||F(e):x.extend({},e);var n,r,i,o,a,s,l=[],u=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=l.length,n=!0;l&&o>a;a++)if(l[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,l&&(u?u.length&&c(u.shift()):r?l=[]:p.disable())},p={add:function(){if(l){var t=l.length;(function i(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&p.has(n)||l.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=l.length:r&&(s=t,c(r))}return this},remove:function(){return l&&x.each(arguments,function(e,t){var r;while((r=x.inArray(t,l,r))>-1)l.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?x.inArray(e,l)>-1:!(!l||!l.length)},empty:function(){return l=[],o=0,this},disable:function(){return l=u=r=t,this},disabled:function(){return!l},lock:function(){return u=t,r||p.disable(),this},locked:function(){return!u},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],!l||i&&!u||(n?u.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},x.extend({Deferred:function(e){var t=[["resolve","done",x.Callbacks("once memory"),"resolved"],["reject","fail",x.Callbacks("once memory"),"rejected"],["notify","progress",x.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var a=o[0],s=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=g.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?g.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,l,u;if(r>1)for(s=Array(r),l=Array(r),u=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(a(t,u,n)).fail(o.reject).progress(a(t,l,s)):--i;return i||o.resolveWith(u,n),o.promise()}}),x.support=function(t){var n,r,o,s,l,u,c,p,f,d=a.createElement("div");if(d.setAttribute("className","t"),d.innerHTML="
a",n=d.getElementsByTagName("*")||[],r=d.getElementsByTagName("a")[0],!r||!r.style||!n.length)return t;s=a.createElement("select"),u=s.appendChild(a.createElement("option")),o=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t.getSetAttribute="t"!==d.className,t.leadingWhitespace=3===d.firstChild.nodeType,t.tbody=!d.getElementsByTagName("tbody").length,t.htmlSerialize=!!d.getElementsByTagName("link").length,t.style=/top/.test(r.getAttribute("style")),t.hrefNormalized="/a"===r.getAttribute("href"),t.opacity=/^0.5/.test(r.style.opacity),t.cssFloat=!!r.style.cssFloat,t.checkOn=!!o.value,t.optSelected=u.selected,t.enctype=!!a.createElement("form").enctype,t.html5Clone="<:nav>"!==a.createElement("nav").cloneNode(!0).outerHTML,t.inlineBlockNeedsLayout=!1,t.shrinkWrapBlocks=!1,t.pixelPosition=!1,t.deleteExpando=!0,t.noCloneEvent=!0,t.reliableMarginRight=!0,t.boxSizingReliable=!0,o.checked=!0,t.noCloneChecked=o.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!u.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}o=a.createElement("input"),o.setAttribute("value",""),t.input=""===o.getAttribute("value"),o.value="t",o.setAttribute("type","radio"),t.radioValue="t"===o.value,o.setAttribute("checked","t"),o.setAttribute("name","t"),l=a.createDocumentFragment(),l.appendChild(o),t.appendChecked=o.checked,t.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip;for(f in x(t))break;return t.ownLast="0"!==f,x(function(){var n,r,o,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",l=a.getElementsByTagName("body")[0];l&&(n=a.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",l.appendChild(n).appendChild(d),d.innerHTML="
t
",o=d.getElementsByTagName("td"),o[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===o[0].offsetHeight,o[0].style.display="",o[1].style.display="none",t.reliableHiddenOffsets=p&&0===o[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",x.swap(l,null!=l.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===d.offsetWidth}),e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(a.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="
",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(l.style.zoom=1)),l.removeChild(n),n=d=o=r=null) -}),n=s=l=u=r=o=null,t}({});var B=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,P=/([A-Z])/g;function R(e,n,r,i){if(x.acceptData(e)){var o,a,s=x.expando,l=e.nodeType,u=l?x.cache:e,c=l?e[s]:e[s]&&s;if(c&&u[c]&&(i||u[c].data)||r!==t||"string"!=typeof n)return c||(c=l?e[s]=p.pop()||x.guid++:s),u[c]||(u[c]=l?{}:{toJSON:x.noop}),("object"==typeof n||"function"==typeof n)&&(i?u[c]=x.extend(u[c],n):u[c].data=x.extend(u[c].data,n)),a=u[c],i||(a.data||(a.data={}),a=a.data),r!==t&&(a[x.camelCase(n)]=r),"string"==typeof n?(o=a[n],null==o&&(o=a[x.camelCase(n)])):o=a,o}}function W(e,t,n){if(x.acceptData(e)){var r,i,o=e.nodeType,a=o?x.cache:e,s=o?e[x.expando]:x.expando;if(a[s]){if(t&&(r=n?a[s]:a[s].data)){x.isArray(t)?t=t.concat(x.map(t,x.camelCase)):t in r?t=[t]:(t=x.camelCase(t),t=t in r?[t]:t.split(" ")),i=t.length;while(i--)delete r[t[i]];if(n?!I(r):!x.isEmptyObject(r))return}(n||(delete a[s].data,I(a[s])))&&(o?x.cleanData([e],!0):x.support.deleteExpando||a!=a.window?delete a[s]:a[s]=null)}}}x.extend({cache:{},noData:{applet:!0,embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){return e=e.nodeType?x.cache[e[x.expando]]:e[x.expando],!!e&&!I(e)},data:function(e,t,n){return R(e,t,n)},removeData:function(e,t){return W(e,t)},_data:function(e,t,n){return R(e,t,n,!0)},_removeData:function(e,t){return W(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&x.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),x.fn.extend({data:function(e,n){var r,i,o=null,a=0,s=this[0];if(e===t){if(this.length&&(o=x.data(s),1===s.nodeType&&!x._data(s,"parsedAttrs"))){for(r=s.attributes;r.length>a;a++)i=r[a].name,0===i.indexOf("data-")&&(i=x.camelCase(i.slice(5)),$(s,i,o[i]));x._data(s,"parsedAttrs",!0)}return o}return"object"==typeof e?this.each(function(){x.data(this,e)}):arguments.length>1?this.each(function(){x.data(this,e,n)}):s?$(s,e,x.data(s,e)):null},removeData:function(e){return this.each(function(){x.removeData(this,e)})}});function $(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(P,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:B.test(r)?x.parseJSON(r):r}catch(o){}x.data(e,n,r)}else r=t}return r}function I(e){var t;for(t in e)if(("data"!==t||!x.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}x.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=x._data(e,n),r&&(!i||x.isArray(r)?i=x._data(e,n,x.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),a=function(){x.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return x._data(e,n)||x._data(e,n,{empty:x.Callbacks("once memory").add(function(){x._removeData(e,t+"queue"),x._removeData(e,n)})})}}),x.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?x.queue(this[0],e):n===t?this:this.each(function(){var t=x.queue(this,e,n);x._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=x.Deferred(),a=this,s=this.length,l=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=x._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(l));return l(),o.promise(n)}});var z,X,U=/[\t\r\n\f]/g,V=/\r/g,Y=/^(?:input|select|textarea|button|object)$/i,J=/^(?:a|area)$/i,G=/^(?:checked|selected)$/i,Q=x.support.getSetAttribute,K=x.support.input;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return e=x.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,l="string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,l=0===arguments.length||"string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(l)for(t=(e||"").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(U," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?x.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e,r="boolean"==typeof t;return x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var o,a=0,s=x(this),l=t,u=e.match(T)||[];while(o=u[a++])l=r?l:!s.hasClass(o),s[l?"addClass":"removeClass"](o)}else(n===i||"boolean"===n)&&(this.className&&x._data(this,"__className__",this.className),this.className=this.className||e===!1?"":x._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(U," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=x.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=i?e.call(this,n,x(this).val()):e,null==o?o="":"number"==typeof o?o+="":x.isArray(o)&&(o=x.map(o,function(e){return null==e?"":e+""})),r=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=x.valHooks[o.type]||x.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(V,""):null==n?"":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=x.find.attr(e,"value");return null!=t?t:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,l=0>i?s:o?i:0;for(;s>l;l++)if(n=r[l],!(!n.selected&&l!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&x.nodeName(n.parentNode,"optgroup"))){if(t=x(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),a=i.length;while(a--)r=i[a],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,n,r){var o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===i?x.prop(e,n,r):(1===s&&x.isXMLDoc(e)||(n=n.toLowerCase(),o=x.attrHooks[n]||(x.expr.match.bool.test(n)?X:z)),r===t?o&&"get"in o&&null!==(a=o.get(e,n))?a:(a=x.find.attr(e,n),null==a?t:a):null!==r?o&&"set"in o&&(a=o.set(e,r,n))!==t?a:(e.setAttribute(n,r+""),r):(x.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(T);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)?K&&Q||!G.test(n)?e[r]=!1:e[x.camelCase("default-"+n)]=e[r]=!1:x.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&"radio"===t&&x.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!x.isXMLDoc(e),a&&(n=x.propFix[n]||n,o=x.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var t=x.find.attr(e,"tabindex");return t?parseInt(t,10):Y.test(e.nodeName)||J.test(e.nodeName)&&e.href?0:-1}}}}),X={set:function(e,t,n){return t===!1?x.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&x.propFix[n]||n,n):e[x.camelCase("default-"+n)]=e[n]=!0,n}},x.each(x.expr.match.bool.source.match(/\w+/g),function(e,n){var r=x.expr.attrHandle[n]||x.find.attr;x.expr.attrHandle[n]=K&&Q||!G.test(n)?function(e,n,i){var o=x.expr.attrHandle[n],a=i?t:(x.expr.attrHandle[n]=t)!=r(e,n,i)?n.toLowerCase():null;return x.expr.attrHandle[n]=o,a}:function(e,n,r){return r?t:e[x.camelCase("default-"+n)]?n.toLowerCase():null}}),K&&Q||(x.attrHooks.value={set:function(e,n,r){return x.nodeName(e,"input")?(e.defaultValue=n,t):z&&z.set(e,n,r)}}),Q||(z={set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},x.expr.attrHandle.id=x.expr.attrHandle.name=x.expr.attrHandle.coords=function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&""!==i.value?i.value:null},x.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&r.specified?r.value:t},set:z.set},x.attrHooks.contenteditable={set:function(e,t,n){z.set(e,""===t?!1:t,n)}},x.each(["width","height"],function(e,n){x.attrHooks[n]={set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}}})),x.support.hrefNormalized||x.each(["href","src"],function(e,t){x.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),x.support.style||(x.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}}),x.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){x.propFix[this.toLowerCase()]=this}),x.support.enctype||(x.propFix.enctype="encoding"),x.each(["radio","checkbox"],function(){x.valHooks[this]={set:function(e,n){return x.isArray(n)?e.checked=x.inArray(x(e).val(),n)>=0:t}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}function at(){try{return a.activeElement}catch(e){}}x.event={global:{},add:function(e,n,r,o,a){var s,l,u,c,p,f,d,h,g,m,y,v=x._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=x.guid++),(l=v.events)||(l=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof x===i||e&&x.event.triggered===e.type?t:x.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(T)||[""],u=n.length;while(u--)s=rt.exec(n[u])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),g&&(p=x.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=x.event.special[g]||{},d=x.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&x.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=l[g])||(h=l[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),x.event.global[g]=!0);e=null}},remove:function(e,t,n,r,i){var o,a,s,l,u,c,p,f,d,h,g,m=x.hasData(e)&&x._data(e);if(m&&(c=m.events)){t=(t||"").match(T)||[""],u=t.length;while(u--)if(s=rt.exec(t[u])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=x.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),l=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));l&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||x.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)x.event.remove(e,d+t[u],n,r,!0);x.isEmptyObject(c)&&(delete m.handle,x._removeData(e,"events"))}},trigger:function(n,r,i,o){var s,l,u,c,p,f,d,h=[i||a],g=v.call(n,"type")?n.type:n,m=v.call(n,"namespace")?n.namespace.split("."):[];if(u=f=i=i||a,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+x.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),l=0>g.indexOf(":")&&"on"+g,n=n[x.expando]?n:new x.Event(g,"object"==typeof n&&n),n.isTrigger=o?2:3,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:x.makeArray(r,[n]),p=x.event.special[g]||{},o||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!o&&!p.noBubble&&!x.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(u=u.parentNode);u;u=u.parentNode)h.push(u),f=u;f===(i.ownerDocument||a)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((u=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(x._data(u,"events")||{})[n.type]&&x._data(u,"handle"),s&&s.apply(u,r),s=l&&u[l],s&&x.acceptData(u)&&s.apply&&s.apply(u,r)===!1&&n.preventDefault();if(n.type=g,!o&&!n.isDefaultPrevented()&&(!p._default||p._default.apply(h.pop(),r)===!1)&&x.acceptData(i)&&l&&i[g]&&!x.isWindow(i)){f=i[l],f&&(i[l]=null),x.event.triggered=g;try{i[g]()}catch(y){}x.event.triggered=t,f&&(i[l]=f)}return n.result}},dispatch:function(e){e=x.event.fix(e);var n,r,i,o,a,s=[],l=g.call(arguments),u=(x._data(this,"events")||{})[e.type]||[],c=x.event.special[e.type]||{};if(l[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((x.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,l),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],l=n.delegateCount,u=e.target;if(l&&u.nodeType&&(!e.button||"click"!==e.type))for(;u!=this;u=u.parentNode||this)if(1===u.nodeType&&(u.disabled!==!0||"click"!==e.type)){for(o=[],a=0;l>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?x(r,this).index(u)>=0:x.find(r,this,null,[u]).length),o[r]&&o.push(i);o.length&&s.push({elem:u,handlers:o})}return n.length>l&&s.push({elem:this,handlers:n.slice(l)}),s},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,o=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new x.Event(o),t=r.length;while(t--)n=r[t],e[n]=o[n];return e.target||(e.target=o.srcElement||a),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,o):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,o,s=n.button,l=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||a,o=i.documentElement,r=i.body,e.pageX=n.clientX+(o&&o.scrollLeft||r&&r.scrollLeft||0)-(o&&o.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(o&&o.scrollTop||r&&r.scrollTop||0)-(o&&o.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&l&&(e.relatedTarget=l===e.target?n.toElement:l),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==at()&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===at()&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},click:{trigger:function(){return x.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t},_default:function(e){return x.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=a.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},x.Event=function(e,n){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&x.extend(this,n),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,t):new x.Event(e,n)},x.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},x.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.submitBubbles||(x.event.special.submit={setup:function(){return x.nodeName(this,"form")?!1:(x.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=x.nodeName(n,"input")||x.nodeName(n,"button")?n.form:t;r&&!x._data(r,"submitBubbles")&&(x.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),x._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&x.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return x.nodeName(this,"form")?!1:(x.event.remove(this,"._submit"),t)}}),x.support.changeBubbles||(x.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(x.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),x.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),x.event.simulate("change",this,e,!0)})),!1):(x.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!x._data(t,"changeBubbles")&&(x.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||x.event.simulate("change",this.parentNode,e,!0)}),x._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return x.event.remove(this,"._change"),!Z.test(this.nodeName)}}),x.support.focusinBubbles||x.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&a.addEventListener(e,r,!0)},teardown:function(){0===--n&&a.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return x().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=x.guid++)),this.each(function(){x.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,x(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){x.event.remove(this,e,r,n)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?x.event.trigger(e,n,r,!0):t}});var st=/^.[^:#\[\.,]*$/,lt=/^(?:parents|prev(?:Until|All))/,ut=x.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if("string"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},has:function(e){var t,n=x(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(x.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e||[],!0))},filter:function(e){return this.pushStack(ft(this,e||[],!1))},is:function(e){return!!ft(this,"string"==typeof e&&ut.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],a=ut.test(e)||"string"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(a?a.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?"string"==typeof e?x.inArray(this[0],x(e)):x.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,"parentNode")},parentsUntil:function(e,t,n){return x.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return x.dir(e,"nextSibling")},prevAll:function(e){return x.dir(e,"previousSibling")},nextUntil:function(e,t,n){return x.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return x.dir(e,"previousSibling",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return x.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=x.filter(r,i)),this.length>1&&(ct[e]||(i=x.unique(i)),lt.test(e)&&(i=i.reverse())),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!x(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(st.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return x.inArray(e,t)>=0!==n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/\s*$/g,At={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:x.support.htmlSerialize?[0,"",""]:[1,"X
","
"]},jt=dt(a),Dt=jt.appendChild(a.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===t?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||a).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(Ft(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&_t(Ft(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&x.cleanData(Ft(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&x.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!x.support.htmlSerialize&&mt.test(e)||!x.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(x.cleanData(Ft(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(r&&r.parentNode!==i&&(r=this.nextSibling),x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=d.apply([],e);var r,i,o,a,s,l,u=0,c=this.length,p=this,f=c-1,h=e[0],g=x.isFunction(h);if(g||!(1>=c||"string"!=typeof h||x.support.checkClone)&&Nt.test(h))return this.each(function(r){var i=p.eq(r);g&&(e[0]=h.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(l=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),r=l.firstChild,1===l.childNodes.length&&(l=r),r)){for(a=x.map(Ft(l,"script"),Ht),o=a.length;c>u;u++)i=l,u!==f&&(i=x.clone(i,!0,!0),o&&x.merge(a,Ft(i,"script"))),t.call(this[u],i,u);if(o)for(s=a[a.length-1].ownerDocument,x.map(a,qt),u=0;o>u;u++)i=a[u],kt.test(i.type||"")&&!x._data(i,"globalEval")&&x.contains(s,i)&&(i.src?x._evalUrl(i.src):x.globalEval((i.text||i.textContent||i.innerHTML||"").replace(St,"")));l=r=null}return this}});function Lt(e,t){return x.nodeName(e,"table")&&x.nodeName(1===t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function Ht(e){return e.type=(null!==x.find.attr(e,"type"))+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function _t(e,t){var n,r=0;for(;null!=(n=e[r]);r++)x._data(n,"globalEval",!t||x._data(t[r],"globalEval"))}function Mt(e,t){if(1===t.nodeType&&x.hasData(e)){var n,r,i,o=x._data(e),a=x._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)x.event.add(t,n,s[n][r])}a.data&&(a.data=x.extend({},a.data))}}function Ot(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!x.support.noCloneEvent&&t[x.expando]){i=x._data(t);for(r in i.events)x.removeEvent(t,r,i.handle);t.removeAttribute(x.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),x.support.html5Clone&&e.innerHTML&&!x.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Ct.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}x.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){x.fn[e]=function(e){var n,r=0,i=[],o=x(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),x(o[r])[t](n),h.apply(i,n.get());return this.pushStack(i)}});function Ft(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||x.nodeName(o,n)?s.push(o):x.merge(s,Ft(o,n));return n===t||n&&x.nodeName(e,n)?x.merge([e],s):s}function Bt(e){Ct.test(e.type)&&(e.defaultChecked=e.checked)}x.extend({clone:function(e,t,n){var r,i,o,a,s,l=x.contains(e.ownerDocument,e);if(x.support.html5Clone||x.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(x.support.noCloneEvent&&x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(r=Ft(o),s=Ft(e),a=0;null!=(i=s[a]);++a)r[a]&&Ot(i,r[a]);if(t)if(n)for(s=s||Ft(e),r=r||Ft(o),a=0;null!=(i=s[a]);a++)Mt(i,r[a]);else Mt(e,o);return r=Ft(o,"script"),r.length>0&&_t(r,!l&&Ft(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,l,u,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===x.type(o))x.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),l=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[l]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!x.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!x.support.tbody){o="table"!==l||xt.test(o)?""!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)x.nodeName(u=o.childNodes[i],"tbody")&&!u.childNodes.length&&o.removeChild(u)}x.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),x.support.appendChecked||x.grep(Ft(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===x.inArray(o,r))&&(a=x.contains(o.ownerDocument,o),s=Ft(f.appendChild(o),"script"),a&&_t(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,l=x.expando,u=x.cache,c=x.support.deleteExpando,f=x.event.special;for(;null!=(n=e[s]);s++)if((t||x.acceptData(n))&&(o=n[l],a=o&&u[o])){if(a.events)for(r in a.events)f[r]?x.event.remove(n,r):x.removeEvent(n,r,a.handle); -u[o]&&(delete u[o],c?delete n[l]:typeof n.removeAttribute!==i?n.removeAttribute(l):n[l]=null,p.push(o))}},_evalUrl:function(e){return x.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})}}),x.fn.extend({wrapAll:function(e){if(x.isFunction(e))return this.each(function(t){x(this).wrapAll(e.call(this,t))});if(this[0]){var t=x(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,"body")||x(this).replaceWith(this.childNodes)}).end()}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+w+")(.*)$","i"),Yt=RegExp("^("+w+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+w+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===x.css(e,"display")||!x.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=x._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=x._data(r,"olddisplay",ln(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&x._data(r,"olddisplay",i?n:x.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}x.fn.extend({css:function(e,n){return x.access(this,function(e,n,r){var i,o,a={},s=0;if(x.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=x.css(e,n[s],!1,o);return a}return r!==t?x.style(e,n,r):x.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){var t="boolean"==typeof e;return this.each(function(){(t?e:nn(this))?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":x.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,l=x.camelCase(n),u=e.style;if(n=x.cssProps[l]||(x.cssProps[l]=tn(u,l)),s=x.cssHooks[n]||x.cssHooks[l],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:u[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(x.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||x.cssNumber[l]||(r+="px"),x.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(u[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{u[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,l=x.camelCase(n);return n=x.cssProps[l]||(x.cssProps[l]=tn(e.style,l)),s=x.cssHooks[n]||x.cssHooks[l],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||x.isNumeric(o)?o||0:a):a}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s.getPropertyValue(n)||s[n]:t,u=e.style;return s&&(""!==l||x.contains(e.ownerDocument,e)||(l=x.style(e,n)),Yt.test(l)&&Ut.test(n)&&(i=u.width,o=u.minWidth,a=u.maxWidth,u.minWidth=u.maxWidth=u.width=l,l=s.width,u.width=i,u.minWidth=o,u.maxWidth=a)),l}):a.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s[n]:t,u=e.style;return null==l&&u&&u[n]&&(l=u[n]),Yt.test(l)&&!zt.test(n)&&(i=u.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),u.left="fontSize"===n?"1em":l,l=u.pixelLeft+"px",u.left=i,a&&(o.left=a)),""===l?"auto":l});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=x.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=x.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=x.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=x.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=x.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function ln(e){var t=a,n=Gt[e];return n||(n=un(e,t),"none"!==n&&n||(Pt=(Pt||x("