From c54195a4f92ac9ee648acbbcc76172a16eedcf8e Mon Sep 17 00:00:00 2001 From: Michael Keller Date: Fri, 29 Mar 2013 18:43:29 -0700 Subject: [PATCH] scrubbable torque --- .../images/animated-overlay.gif | Bin 0 -> 1738 bytes .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 212 bytes .../images/ui-bg_flat_75_ffffff_40x100.png | Bin 0 -> 208 bytes .../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 0 -> 335 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 207 bytes .../images/ui-bg_glass_75_dadada_1x400.png | Bin 0 -> 262 bytes .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 0 -> 262 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 332 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 0 -> 280 bytes .../images/ui-icons_222222_256x240.png | Bin 0 -> 6922 bytes .../images/ui-icons_2e83ff_256x240.png | Bin 0 -> 4549 bytes .../images/ui-icons_454545_256x240.png | Bin 0 -> 6992 bytes .../images/ui-icons_888888_256x240.png | Bin 0 -> 6999 bytes .../images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4549 bytes .../jquery-ui-1.10.2.custom.css | 544 + .../jquery-ui-1.10.2.custom.min.css | 5 + examples/uspo-scrub.html | 113 + jquery-ui-1.10.2.custom.zip | Bin 0 -> 545137 bytes .../smoothness/images/animated-overlay.gif | Bin 0 -> 1738 bytes .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 212 bytes .../images/ui-bg_flat_75_ffffff_40x100.png | Bin 0 -> 208 bytes .../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 0 -> 335 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 207 bytes .../images/ui-bg_glass_75_dadada_1x400.png | Bin 0 -> 262 bytes .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 0 -> 262 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 332 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 0 -> 280 bytes .../images/ui-icons_222222_256x240.png | Bin 0 -> 6922 bytes .../images/ui-icons_2e83ff_256x240.png | Bin 0 -> 4549 bytes .../images/ui-icons_454545_256x240.png | Bin 0 -> 6992 bytes .../images/ui-icons_888888_256x240.png | Bin 0 -> 6999 bytes .../images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4549 bytes .../smoothness/jquery-ui-1.10.2.custom.css | 544 + .../jquery-ui-1.10.2.custom.min.css | 5 + .../development-bundle/AUTHORS.txt | 242 + .../development-bundle/Gruntfile.js | 378 + .../development-bundle/MIT-LICENSE.txt | 26 + .../development-bundle/README.md | 99 + .../development-bundle/demos/demos.css | 19 + .../demos/images/calendar.gif | Bin 0 -> 269 bytes .../demos/images/demo-config-on-tile.gif | Bin 0 -> 172 bytes .../demos/images/demo-config-on.gif | Bin 0 -> 335 bytes .../demos/images/demo-spindown-closed.gif | Bin 0 -> 103 bytes .../demos/images/demo-spindown-open.gif | Bin 0 -> 105 bytes .../demos/images/icon-docs-info.gif | Bin 0 -> 206 bytes .../demos/images/pbar-ani.gif | Bin 0 -> 7970 bytes .../demos/slider/colorpicker.html | 87 + .../demos/slider/default.html | 27 + .../demos/slider/hotelrooms.html | 49 + .../demos/slider/index.html | 24 + .../demos/slider/multiple-vertical.html | 69 + .../demos/slider/range-vertical.html | 41 + .../demos/slider/range.html | 42 + .../demos/slider/rangemax.html | 40 + .../demos/slider/rangemin.html | 41 + .../demos/slider/side-scroll.html | 131 + .../demos/slider/slider-vertical.html | 42 + .../demos/slider/steps.html | 41 + .../demos/widget/default.html | 178 + .../demos/widget/index.html | 14 + .../docs/jQuery.widget.html | 611 ++ .../development-bundle/docs/mouse.html | 216 + .../development-bundle/docs/slider.html | 586 + .../external/globalize.culture.de-DE.js | 81 + .../external/globalize.culture.ja-JP.js | 100 + .../development-bundle/external/globalize.js | 1573 +++ .../external/jquery.mousewheel.js | 101 + .../development-bundle/external/jshint.js | 4835 +++++++++ .../development-bundle/external/qunit.css | 244 + .../development-bundle/external/qunit.js | 2152 ++++ .../development-bundle/jquery-1.9.1.js | 9597 +++++++++++++++++ .../development-bundle/package.json | 70 + .../themes/base/images/animated-overlay.gif | Bin 0 -> 1738 bytes .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 180 bytes .../images/ui-bg_flat_75_ffffff_40x100.png | Bin 0 -> 178 bytes .../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 0 -> 120 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 105 bytes .../images/ui-bg_glass_75_dadada_1x400.png | Bin 0 -> 111 bytes .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 0 -> 110 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 119 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 0 -> 101 bytes .../base/images/ui-icons_222222_256x240.png | Bin 0 -> 4369 bytes .../base/images/ui-icons_2e83ff_256x240.png | Bin 0 -> 4369 bytes .../base/images/ui-icons_454545_256x240.png | Bin 0 -> 4369 bytes .../base/images/ui-icons_888888_256x240.png | Bin 0 -> 4369 bytes .../base/images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4369 bytes .../themes/base/jquery-ui.css | 543 + .../themes/base/jquery.ui.all.css | 12 + .../themes/base/jquery.ui.base.css | 25 + .../themes/base/jquery.ui.core.css | 93 + .../themes/base/jquery.ui.slider.css | 73 + .../themes/base/jquery.ui.theme.css | 406 + .../base/minified/images/animated-overlay.gif | Bin 0 -> 1738 bytes .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 180 bytes .../images/ui-bg_flat_75_ffffff_40x100.png | Bin 0 -> 178 bytes .../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 0 -> 120 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 105 bytes .../images/ui-bg_glass_75_dadada_1x400.png | Bin 0 -> 111 bytes .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 0 -> 110 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 119 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 0 -> 101 bytes .../images/ui-icons_222222_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_2e83ff_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_454545_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_888888_256x240.png | Bin 0 -> 4369 bytes .../images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4369 bytes .../themes/base/minified/jquery-ui.min.css | 10 + .../base/minified/jquery.ui.core.min.css | 5 + .../base/minified/jquery.ui.slider.min.css | 5 + .../base/minified/jquery.ui.theme.min.css | 5 + .../smoothness/images/animated-overlay.gif | Bin 0 -> 1738 bytes .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 212 bytes .../images/ui-bg_flat_75_ffffff_40x100.png | Bin 0 -> 208 bytes .../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 0 -> 335 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 207 bytes .../images/ui-bg_glass_75_dadada_1x400.png | Bin 0 -> 262 bytes .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 0 -> 262 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 332 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 0 -> 280 bytes .../images/ui-icons_222222_256x240.png | Bin 0 -> 6922 bytes .../images/ui-icons_2e83ff_256x240.png | Bin 0 -> 4549 bytes .../images/ui-icons_454545_256x240.png | Bin 0 -> 6992 bytes .../images/ui-icons_888888_256x240.png | Bin 0 -> 6999 bytes .../images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4549 bytes .../themes/smoothness/jquery-ui.css | 544 + .../themes/smoothness/jquery.ui.all.css | 12 + .../themes/smoothness/jquery.ui.base.css | 25 + .../themes/smoothness/jquery.ui.core.css | 93 + .../themes/smoothness/jquery.ui.slider.css | 73 + .../themes/smoothness/jquery.ui.theme.css | 406 + .../minified/images/animated-overlay.gif | Bin 0 -> 1738 bytes .../images/ui-bg_flat_0_aaaaaa_40x100.png | Bin 0 -> 212 bytes .../images/ui-bg_flat_75_ffffff_40x100.png | Bin 0 -> 208 bytes .../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 0 -> 335 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 207 bytes .../images/ui-bg_glass_75_dadada_1x400.png | Bin 0 -> 262 bytes .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 0 -> 262 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 332 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 0 -> 280 bytes .../images/ui-icons_222222_256x240.png | Bin 0 -> 6922 bytes .../images/ui-icons_2e83ff_256x240.png | Bin 0 -> 4549 bytes .../images/ui-icons_454545_256x240.png | Bin 0 -> 6992 bytes .../images/ui-icons_888888_256x240.png | Bin 0 -> 6999 bytes .../images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 4549 bytes .../smoothness/minified/jquery-ui.min.css | 5 + .../minified/jquery.ui.core.min.css | 5 + .../minified/jquery.ui.slider.min.css | 5 + .../minified/jquery.ui.theme.min.css | 5 + .../development-bundle/ui.core.jquery.json | 61 + .../development-bundle/ui.mouse.jquery.json | 64 + .../development-bundle/ui.slider.jquery.json | 67 + .../development-bundle/ui.widget.jquery.json | 64 + .../development-bundle/ui/jquery-ui.custom.js | 1639 +++ .../development-bundle/ui/jquery.ui.core.js | 320 + .../development-bundle/ui/jquery.ui.mouse.js | 169 + .../development-bundle/ui/jquery.ui.slider.js | 672 ++ .../development-bundle/ui/jquery.ui.widget.js | 521 + .../ui/minified/jquery-ui.custom.min.js | 6 + .../ui/minified/jquery.ui.core.min.js | 4 + .../ui/minified/jquery.ui.mouse.min.js | 4 + .../ui/minified/jquery.ui.slider.min.js | 4 + .../ui/minified/jquery.ui.widget.min.js | 4 + jquery-ui-1.10.2.custom/index.html | 310 + jquery-ui-1.10.2.custom/js/jquery-1.9.1.js | 9597 +++++++++++++++++ .../js/jquery-ui-1.10.2.custom.js | 1639 +++ .../js/jquery-ui-1.10.2.custom.min.js | 6 + lib/jquery-ui-1.10.2.custom.min.js | 6 + src/torque.js | 78 +- 168 files changed, 40549 insertions(+), 3 deletions(-) create mode 100755 css/jqueryui-smoothness/images/animated-overlay.gif create mode 100755 css/jqueryui-smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png create mode 100755 css/jqueryui-smoothness/images/ui-bg_flat_75_ffffff_40x100.png create mode 100755 css/jqueryui-smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png create mode 100755 css/jqueryui-smoothness/images/ui-bg_glass_65_ffffff_1x400.png create mode 100755 css/jqueryui-smoothness/images/ui-bg_glass_75_dadada_1x400.png create mode 100755 css/jqueryui-smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png create mode 100755 css/jqueryui-smoothness/images/ui-bg_glass_95_fef1ec_1x400.png create mode 100755 css/jqueryui-smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png create mode 100755 css/jqueryui-smoothness/images/ui-icons_222222_256x240.png create mode 100755 css/jqueryui-smoothness/images/ui-icons_2e83ff_256x240.png create mode 100755 css/jqueryui-smoothness/images/ui-icons_454545_256x240.png create mode 100755 css/jqueryui-smoothness/images/ui-icons_888888_256x240.png create mode 100755 css/jqueryui-smoothness/images/ui-icons_cd0a0a_256x240.png create mode 100755 css/jqueryui-smoothness/jquery-ui-1.10.2.custom.css create mode 100755 css/jqueryui-smoothness/jquery-ui-1.10.2.custom.min.css create mode 100644 examples/uspo-scrub.html create mode 100644 jquery-ui-1.10.2.custom.zip create mode 100755 jquery-ui-1.10.2.custom/css/smoothness/images/animated-overlay.gif create mode 100755 jquery-ui-1.10.2.custom/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png create mode 100755 jquery-ui-1.10.2.custom/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png create mode 100755 jquery-ui-1.10.2.custom/css/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png create mode 100755 jquery-ui-1.10.2.custom/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png create mode 100755 jquery-ui-1.10.2.custom/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png create mode 100755 jquery-ui-1.10.2.custom/css/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png create mode 100755 jquery-ui-1.10.2.custom/css/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png create mode 100755 jquery-ui-1.10.2.custom/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png create mode 100755 jquery-ui-1.10.2.custom/css/smoothness/images/ui-icons_222222_256x240.png create mode 100755 jquery-ui-1.10.2.custom/css/smoothness/images/ui-icons_2e83ff_256x240.png create mode 100755 jquery-ui-1.10.2.custom/css/smoothness/images/ui-icons_454545_256x240.png create mode 100755 jquery-ui-1.10.2.custom/css/smoothness/images/ui-icons_888888_256x240.png create mode 100755 jquery-ui-1.10.2.custom/css/smoothness/images/ui-icons_cd0a0a_256x240.png create mode 100755 jquery-ui-1.10.2.custom/css/smoothness/jquery-ui-1.10.2.custom.css create mode 100755 jquery-ui-1.10.2.custom/css/smoothness/jquery-ui-1.10.2.custom.min.css create mode 100755 jquery-ui-1.10.2.custom/development-bundle/AUTHORS.txt create mode 100755 jquery-ui-1.10.2.custom/development-bundle/Gruntfile.js create mode 100755 jquery-ui-1.10.2.custom/development-bundle/MIT-LICENSE.txt create mode 100755 jquery-ui-1.10.2.custom/development-bundle/README.md create mode 100755 jquery-ui-1.10.2.custom/development-bundle/demos/demos.css create mode 100755 jquery-ui-1.10.2.custom/development-bundle/demos/images/calendar.gif create mode 100755 jquery-ui-1.10.2.custom/development-bundle/demos/images/demo-config-on-tile.gif create mode 100755 jquery-ui-1.10.2.custom/development-bundle/demos/images/demo-config-on.gif create mode 100755 jquery-ui-1.10.2.custom/development-bundle/demos/images/demo-spindown-closed.gif create mode 100755 jquery-ui-1.10.2.custom/development-bundle/demos/images/demo-spindown-open.gif create mode 100755 jquery-ui-1.10.2.custom/development-bundle/demos/images/icon-docs-info.gif create mode 100755 jquery-ui-1.10.2.custom/development-bundle/demos/images/pbar-ani.gif create mode 100755 jquery-ui-1.10.2.custom/development-bundle/demos/slider/colorpicker.html create mode 100755 jquery-ui-1.10.2.custom/development-bundle/demos/slider/default.html create mode 100755 jquery-ui-1.10.2.custom/development-bundle/demos/slider/hotelrooms.html create mode 100755 jquery-ui-1.10.2.custom/development-bundle/demos/slider/index.html create mode 100755 jquery-ui-1.10.2.custom/development-bundle/demos/slider/multiple-vertical.html create mode 100755 jquery-ui-1.10.2.custom/development-bundle/demos/slider/range-vertical.html create mode 100755 jquery-ui-1.10.2.custom/development-bundle/demos/slider/range.html create mode 100755 jquery-ui-1.10.2.custom/development-bundle/demos/slider/rangemax.html create mode 100755 jquery-ui-1.10.2.custom/development-bundle/demos/slider/rangemin.html create mode 100755 jquery-ui-1.10.2.custom/development-bundle/demos/slider/side-scroll.html create mode 100755 jquery-ui-1.10.2.custom/development-bundle/demos/slider/slider-vertical.html create mode 100755 jquery-ui-1.10.2.custom/development-bundle/demos/slider/steps.html create mode 100755 jquery-ui-1.10.2.custom/development-bundle/demos/widget/default.html create mode 100755 jquery-ui-1.10.2.custom/development-bundle/demos/widget/index.html create mode 100755 jquery-ui-1.10.2.custom/development-bundle/docs/jQuery.widget.html create mode 100755 jquery-ui-1.10.2.custom/development-bundle/docs/mouse.html create mode 100755 jquery-ui-1.10.2.custom/development-bundle/docs/slider.html create mode 100755 jquery-ui-1.10.2.custom/development-bundle/external/globalize.culture.de-DE.js create mode 100755 jquery-ui-1.10.2.custom/development-bundle/external/globalize.culture.ja-JP.js create mode 100755 jquery-ui-1.10.2.custom/development-bundle/external/globalize.js create mode 100755 jquery-ui-1.10.2.custom/development-bundle/external/jquery.mousewheel.js create mode 100755 jquery-ui-1.10.2.custom/development-bundle/external/jshint.js create mode 100755 jquery-ui-1.10.2.custom/development-bundle/external/qunit.css create mode 100755 jquery-ui-1.10.2.custom/development-bundle/external/qunit.js create mode 100755 jquery-ui-1.10.2.custom/development-bundle/jquery-1.9.1.js create mode 100755 jquery-ui-1.10.2.custom/development-bundle/package.json create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/base/images/animated-overlay.gif create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/base/images/ui-bg_flat_0_aaaaaa_40x100.png create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/base/images/ui-bg_flat_75_ffffff_40x100.png create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/base/images/ui-bg_glass_55_fbf9ee_1x400.png create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/base/images/ui-bg_glass_65_ffffff_1x400.png create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/base/images/ui-bg_glass_75_dadada_1x400.png create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/base/images/ui-bg_glass_75_e6e6e6_1x400.png create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/base/images/ui-bg_glass_95_fef1ec_1x400.png create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/base/images/ui-bg_highlight-soft_75_cccccc_1x100.png create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/base/images/ui-icons_222222_256x240.png create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/base/images/ui-icons_2e83ff_256x240.png create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/base/images/ui-icons_454545_256x240.png create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/base/images/ui-icons_888888_256x240.png create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/base/images/ui-icons_cd0a0a_256x240.png create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/base/jquery-ui.css create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/base/jquery.ui.all.css create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/base/jquery.ui.base.css create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/base/jquery.ui.core.css create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/base/jquery.ui.slider.css create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/base/jquery.ui.theme.css create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/base/minified/images/animated-overlay.gif create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/base/minified/images/ui-bg_flat_0_aaaaaa_40x100.png create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/base/minified/images/ui-bg_flat_75_ffffff_40x100.png create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/base/minified/images/ui-bg_glass_55_fbf9ee_1x400.png create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/base/minified/images/ui-bg_glass_65_ffffff_1x400.png create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/base/minified/images/ui-bg_glass_75_dadada_1x400.png create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/base/minified/images/ui-bg_glass_75_e6e6e6_1x400.png create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/base/minified/images/ui-bg_glass_95_fef1ec_1x400.png create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/base/minified/images/ui-bg_highlight-soft_75_cccccc_1x100.png create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/base/minified/images/ui-icons_222222_256x240.png create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/base/minified/images/ui-icons_2e83ff_256x240.png create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/base/minified/images/ui-icons_454545_256x240.png create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/base/minified/images/ui-icons_888888_256x240.png create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/base/minified/images/ui-icons_cd0a0a_256x240.png create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/base/minified/jquery-ui.min.css create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/base/minified/jquery.ui.core.min.css create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/base/minified/jquery.ui.slider.min.css create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/base/minified/jquery.ui.theme.min.css create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/smoothness/images/animated-overlay.gif create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/smoothness/images/ui-bg_flat_75_ffffff_40x100.png create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/smoothness/images/ui-bg_glass_65_ffffff_1x400.png create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/smoothness/images/ui-bg_glass_75_dadada_1x400.png create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/smoothness/images/ui-icons_222222_256x240.png create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/smoothness/images/ui-icons_2e83ff_256x240.png create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/smoothness/images/ui-icons_454545_256x240.png create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/smoothness/images/ui-icons_888888_256x240.png create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/smoothness/images/ui-icons_cd0a0a_256x240.png create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/smoothness/jquery-ui.css create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/smoothness/jquery.ui.all.css create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/smoothness/jquery.ui.base.css create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/smoothness/jquery.ui.core.css create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/smoothness/jquery.ui.slider.css create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/smoothness/jquery.ui.theme.css create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/smoothness/minified/images/animated-overlay.gif create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/smoothness/minified/images/ui-bg_flat_0_aaaaaa_40x100.png create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/smoothness/minified/images/ui-bg_flat_75_ffffff_40x100.png create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/smoothness/minified/images/ui-bg_glass_55_fbf9ee_1x400.png create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/smoothness/minified/images/ui-bg_glass_65_ffffff_1x400.png create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/smoothness/minified/images/ui-bg_glass_75_dadada_1x400.png create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/smoothness/minified/images/ui-bg_glass_75_e6e6e6_1x400.png create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/smoothness/minified/images/ui-bg_glass_95_fef1ec_1x400.png create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/smoothness/minified/images/ui-bg_highlight-soft_75_cccccc_1x100.png create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/smoothness/minified/images/ui-icons_222222_256x240.png create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/smoothness/minified/images/ui-icons_2e83ff_256x240.png create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/smoothness/minified/images/ui-icons_454545_256x240.png create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/smoothness/minified/images/ui-icons_888888_256x240.png create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/smoothness/minified/images/ui-icons_cd0a0a_256x240.png create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/smoothness/minified/jquery-ui.min.css create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/smoothness/minified/jquery.ui.core.min.css create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/smoothness/minified/jquery.ui.slider.min.css create mode 100755 jquery-ui-1.10.2.custom/development-bundle/themes/smoothness/minified/jquery.ui.theme.min.css create mode 100755 jquery-ui-1.10.2.custom/development-bundle/ui.core.jquery.json create mode 100755 jquery-ui-1.10.2.custom/development-bundle/ui.mouse.jquery.json create mode 100755 jquery-ui-1.10.2.custom/development-bundle/ui.slider.jquery.json create mode 100755 jquery-ui-1.10.2.custom/development-bundle/ui.widget.jquery.json create mode 100755 jquery-ui-1.10.2.custom/development-bundle/ui/jquery-ui.custom.js create mode 100755 jquery-ui-1.10.2.custom/development-bundle/ui/jquery.ui.core.js create mode 100755 jquery-ui-1.10.2.custom/development-bundle/ui/jquery.ui.mouse.js create mode 100755 jquery-ui-1.10.2.custom/development-bundle/ui/jquery.ui.slider.js create mode 100755 jquery-ui-1.10.2.custom/development-bundle/ui/jquery.ui.widget.js create mode 100755 jquery-ui-1.10.2.custom/development-bundle/ui/minified/jquery-ui.custom.min.js create mode 100755 jquery-ui-1.10.2.custom/development-bundle/ui/minified/jquery.ui.core.min.js create mode 100755 jquery-ui-1.10.2.custom/development-bundle/ui/minified/jquery.ui.mouse.min.js create mode 100755 jquery-ui-1.10.2.custom/development-bundle/ui/minified/jquery.ui.slider.min.js create mode 100755 jquery-ui-1.10.2.custom/development-bundle/ui/minified/jquery.ui.widget.min.js create mode 100755 jquery-ui-1.10.2.custom/index.html create mode 100755 jquery-ui-1.10.2.custom/js/jquery-1.9.1.js create mode 100755 jquery-ui-1.10.2.custom/js/jquery-ui-1.10.2.custom.js create mode 100755 jquery-ui-1.10.2.custom/js/jquery-ui-1.10.2.custom.min.js create mode 100755 lib/jquery-ui-1.10.2.custom.min.js diff --git a/css/jqueryui-smoothness/images/animated-overlay.gif b/css/jqueryui-smoothness/images/animated-overlay.gif new file mode 100755 index 0000000000000000000000000000000000000000..d441f75ebfbdf26a265dfccd670120d25c0a341c GIT binary patch literal 1738 zcmZ|OX;ji_6b5ixNYt8>l?gOuO)6lU%W(mxn(`>1S(XO;u`D+P%xqBvMr|w-Vyr1s z7R|Cn0b8|Hu<=Zmv1mFqh9Fj!NuZfKB2MP$e75`XJ@>=!y!Ux9xR3x;EW!q1^V>X| znVFuRUN`NqJ2)ybXh%e__h!!pv(M|S3+?9F%(K}zyE40MGyhWF5-IDgL&=%2-9`Nk z!1@8uk4t%_{(K~>N;sK&dzJbwJ=$kYTlL=$%#0Pfh>U{%i@~wWbvYsD_K-D`&+u1( z#Ma`>%q<^UhzGvi(hyE`zCD{-=2|zL5>wnB=DE!U?(CZG%q4@lDnCq_%&3DCla#(X zmBhDD+RN$aMWWHm?ig*>1Onn6~r?Ma~N2JKAxN>H%UtRyRqS)6Um!-Tz%-r=& zQmTb^JFIe3W^-kAm`}`2P|niMh>RYyd)S^f(dbrx965?rzbhP|XeP}o&&DSZ4|oYQ z)I{f!SfycYw?3=9W;o-B%U5xs(pP267X~9-7L|4WzaYexC0GtG8wWygm63rF{llCEraxzkc=IxvFQ-y37=_;e5 zJLq^gsSO0Ayz?a>E_?{dmUc+t#qv$)XN8$<<}rQ#)lsiw+pmL&J>~+hgpo>i$m+;l zZIa_ZRIfSeT$~v5d`EBV&*k`apPgjv&B|+d`Q!nyu{L4rs%ZfoF0*Kq8I%ByOcFpL zK=>wzofZo<+0GZLCnWM3oQ^pb(gRSf02;~cEn@LJ>~XB9IkEX{$N#Z`m%>S!U{uPx zloI%bLdo$Adxlh(Uv^yX7s5G&C zLwNRG>~T?G{kzupp8EcyLGPoPf)@&9Wqfw_l&uU-6cexk%5;uQg%wb=0k_733{i#& z1a2p)gV3S2+QG1-K9tZ}E~I<(P0r2aFFY-c{o?TUOz3Xjod#TLE2A_c?*T7t z=1>~%YW450{Qqno4t`}gvLnuMrcu8+#xEBoY%2_+Mb#Z6S38+r*M4O`-+!zl(@m`D zQsi|GA2l3gEy}LFe<#Hv8?$_L#u8E|3-bP$*La*E>B{X!Sy4i6?TKam!49aXCAW4S*P_O^H4^*DpiA40o}Uqw~Eo&veh1`|8i zD2$x+>_b^bXE4N;AW=5>iYak2%!JAh0j1*k1{p#iRCjbB7!cSws~U{1IA@acLII$t z$>X#A+^s6iJ5~DFG!xa?>z{=lxtdi1rzbM-(nqAu3D8h-&64xo6|E!p?pK0xT;qoK z`6%+SpBk+~M?nO}>2mTw!A{yZ6O>Z@kwSd4;8aWU5z!P~tQl?u==^+R`{OmOS}oZh zOXQ3{6kuz?Is^n^L7;9ieB9C+8B{>t+pDrlq4xGDDn#T#3T5$l1g`FTQkU;b-981j zNm{zC`$wn7etklM#qHI4=3m5gwa6DNS{?Z!vSObi_od{4eUo=_S2BKNpkSdiqe(k9WtkeM79;2-%CFbb)aB=&H1?i1}uwFzoZQ(38Kn1zBP ORn*B%u*Wk|4g3!*Rv{Mv literal 0 HcmV?d00001 diff --git a/css/jqueryui-smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png b/css/jqueryui-smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png new file mode 100755 index 0000000000000000000000000000000000000000..22339158faf6c00939d047502fc2222f08025af6 GIT binary patch literal 212 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F1SA+{?>A)!QcOwS?k)_>#w|r1Kptm-M`SUO z_5fqIli7AahM1>|V~EA+ zRdP`(kYX@0Ff`URFxE9P2{E*^GBvd_G14_Kw=ys=efppiMMG|WN@iLmZVfIwB20lA O7(8A5T-G@yGywprEHkJ8 literal 0 HcmV?d00001 diff --git a/css/jqueryui-smoothness/images/ui-bg_flat_75_ffffff_40x100.png b/css/jqueryui-smoothness/images/ui-bg_flat_75_ffffff_40x100.png new file mode 100755 index 0000000000000000000000000000000000000000..1da7cb3b9477f734d1c4c21463ba97783eef8561 GIT binary patch literal 208 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F2qYNp$opRhQcOwS?k)_Bce{j_0C}7R9+AaB z+5?Q;PG;Ky8A6^ejv*T7lYj6t@hpC#;TbB#aBAWwna#KLs)4eqC9V-ADTyViR>?)F zK#IZ0z|dINz*yJFB*f6t%GA`##8B73+{(a!h4+^TiiX_$l+3hB+!{&)oK^reFnGH9 KxvXnc6a#?2AmP!?*K(O3p^r= zfwTu0yPeFo12TF&T^vI^j=w#x$i?I+((tf;UXnmgbH|3oY>pC!)f}(GR!16S-u+#{ ze6YEqRkW=8vGl=5qArKM<9}TC-}iEvB{zdaTcX5$wyRTK&ALxjG`eoKP5A*61N7u)L?m_1_n=8KbLh*2~7Y&D|Dv- literal 0 HcmV?d00001 diff --git a/css/jqueryui-smoothness/images/ui-bg_glass_65_ffffff_1x400.png b/css/jqueryui-smoothness/images/ui-bg_glass_65_ffffff_1x400.png new file mode 100755 index 0000000000000000000000000000000000000000..bf551ff5c042b9a7858ea2f913599926382fd4ec GIT binary patch literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^j6gI2NH8$CE1Q=ADW)WEcNYf6yIsOdfIQ9ukH}&m z?E%JaC$sH<3_(v9#}JM4$r%X}t&0mp9yKsb%{ak$*<@oTP*SzTHKHUXu_Vl&Ga7+PAHnp&9{=o*+?85k_8`nUi^LvDUbW?Cg~4VTqDWq=wOJYD@< J);T3K0RSSTGeiIY literal 0 HcmV?d00001 diff --git a/css/jqueryui-smoothness/images/ui-bg_glass_75_dadada_1x400.png b/css/jqueryui-smoothness/images/ui-bg_glass_75_dadada_1x400.png new file mode 100755 index 0000000000000000000000000000000000000000..915f1805ac5b0d7bceee7a778c7f3fb1375935c8 GIT binary patch literal 262 zcmeAS@N?(olHy`uVBq!ia0vp^j6gI&0LWmFTHNUZq?nSt-Ch3w7g=q17Rci)@Q5r1 z(jH*!b~4)z#PD=+46!(!T=8puqDZgOs>RXUCGx5b?-VBQkUm|IuXOmYJrBRJgj{Vx zMbNnqUkncy+qa2-mWYc>swkcIuvGK#>(0d)B7)5f`@$Ei28nH~0h*~=;u=wsl30>z zm0Xkxq!^4042^XSjCGAnLJTdfOiis!&24nc6a#?2AmP!?*K(O3p^r= zfwTu0yPeFo12VciT^vI^j=w#>k(V)1qW$CZ|6)SVV-&*#dav<$DMuV&n0Dbpw@al&Ga7+PAHnp&Bf=^B_@85r;~ g9AQDxkei>9nO2EgLrrYW4xk1GPgg&ebxsLQ0B!7YWB>pF literal 0 HcmV?d00001 diff --git a/css/jqueryui-smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/css/jqueryui-smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png new file mode 100755 index 0000000000000000000000000000000000000000..e2c036d553b1093d53a687c032c01774c6fd4bcb GIT binary patch literal 280 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 QJ~;stWz}Trq%1=J3#jBGg8%>k literal 0 HcmV?d00001 diff --git a/css/jqueryui-smoothness/images/ui-icons_2e83ff_256x240.png b/css/jqueryui-smoothness/images/ui-icons_2e83ff_256x240.png new file mode 100755 index 0000000000000000000000000000000000000000..84b601bf0f726bf95801da487deaf2344a32e4b8 GIT binary patch literal 4549 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 F{{S81aohj^ literal 0 HcmV?d00001 diff --git a/css/jqueryui-smoothness/images/ui-icons_454545_256x240.png b/css/jqueryui-smoothness/images/ui-icons_454545_256x240.png new file mode 100755 index 0000000000000000000000000000000000000000..b6db1acdd433be80a472b045018f25c7f2cf7e08 GIT binary patch literal 6992 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 literal 0 HcmV?d00001 diff --git a/css/jqueryui-smoothness/images/ui-icons_cd0a0a_256x240.png b/css/jqueryui-smoothness/images/ui-icons_cd0a0a_256x240.png new file mode 100755 index 0000000000000000000000000000000000000000..ed5b6b0930f672fa08e9b9bdbe5e55370fd1dc30 GIT binary patch literal 4549 zcmeHK_fr#0w@yL`geFb85=9ZDg(gT1B^Y{@&P$M@(wm?VAV^iZ6afX{l`04kX;LH< zK}rM+O=%H9dXY{bwJ9FloCniR>m>KvO00029E=t=B z005r3fGv8Ovw1>S@91oU#l*k@Nnl|3|M6c1ENt=tu$i-nh-9Ha@DWUNJl)V+K5v2h0 zO|NV+KtMDp|K7>aE2#FGeR<1S-6taL-Vx%T-)BL9cl2**1LA2fpw1RhUzAP2nf>FV z06M)MY5>4F7hP=)i-+IW9T=S_>)9Z^s5i^m&m2DJbCkXtbNTY?>bHv3rmCdxo?cBw z%k04pn^bBV5c9(~F3!4-)9Yut#40^2K1>B03=m;tV`GyBT}fSQf+~**>U=?L{<=yU zS8r!38|Y-$6ldi$0No2s49v_W2>~iWTNa2fQtB-3>?5F?K&V$rno%`O2%G;!44sn> zmPoxf2KUV&ihMiS}P~#rrMilaeU~(MS(O-a&M}#(REXc*pfE0v!%| z$%b5zVaI~e8s4`k8`1sbNBtIM}QfvASFn&-}ENvOp3o~)>7|LU&@8_Z(ew~D-JmH zzaIE`x;YG^4Dc{1klPacv6ALOvKb(@XS!A6Cjt6z+QRLiYLBgz#1il0D`=k4CwIk~ zT3);fw12`sGT7-#&xXH-#aC+_1{!mjw<{^+yq9@T1ht;n1UxkSJQ*2H(4_yFMWhJx zRTUSEoqggU`p0u)^(B?eOz7L(d3d1SbTN4I)u+Q7NWTrW?!{Hs@gay1=aCHH9G{gn!wSTUqF~8HG zSu3}U)m`4jBrrD`-v#5iwtnR-*Cxb3aSHfHPz60V;QJSV)$dA&!_ zl<~`(Je@NHpi0Uoe6$S~Ew&2;eTJdTzTr4?+Y9&Xs?yZI%`nhKz5s6m8A&-ks)D%H zMd!?{FLzx_Q=*Bj{j1#vp|*o;w1-}5G$HXS7SnumvriQI_f1EIjco(o1;wO zF5SVR7F-28jH~R5LcZeDkcYdP4deQhq@@8E;5vKa!>p&)v*2zd*7YclBZEDM9ZO}< zUyDt?>c!2k&pm+$S%(Mo=pa)&K}+E=u^YongMlv2fL^D(LfyK|A!&S#hMU~4>PZ*W zVT$wTTSw;2n&_h%ClxB2t%9E6%QAIuuAaq!(XW(7ZG>C9hr z9+_qdiymMCvCF}UnbnS{GxC1xxoPl~d92E_D{)W;C(`_UmnsBb=z>^Dfr>=fg8DRA*?b-I z!l>Z^q%uBmO1#n%*a#4+t;Gsb>)7Gg`Q&x|vJN8Ad`P%Y9H#uzXyL^M zsCZ47RI3>V>-`a>;;51QicQl2b@A}QQ3u&b1jwNY;NgOglSAq6B^)<`r9bHE1M0AA zIPHKZ*-Y+?4 z{q;-0pu}eyf1ZUYgwbAA9RU^L73tbfbxmNufKlx(TyBbfuT_1&nDTZ-@K4&5_E*6y z85_4NS2Lq0$*9z2-viS}FG5D*AK<3DCw6S}8x}3AdQZD+SlceGi?$rd^LkxK*V?X6 z+8dN1;0+$7-96%@Rj%pXX&p;@Z|JLNkfFXLwW#(~}@!qow>+x#9;a`mij9E)=Y ziXREZsr)tYg`d6B&u$-cGg{FU2JL%%kXCf@t9h4T(VRS*h~#(h1ECa|=6WfmgB#Pg zh&nm7n@kNo`glQ7%J$y1$^w7NlfjS0xOkN;-m~~yy!b@3|r{uizduwUKstA zsPE`A+Z zM_6j0;+i#gnX9;3c%`fB@j9k76QEJBPhZ@jDhhRZc5FJ04&yelON_42FWWGBy3_x7 zX^`fSb5$xoTr{rj=(({S$c1XGx+sfW^kkL4X7lZe`fr-0T7@*PS-{V9Zi|Qze$LSn z$vpci`YFlpJCT`a7`GKGG7d1i75O)#2Vq6?vn{IxUe>4#?)B);*jh^>A8v*ZmC}k< zE*$gC<_-crF_F0e1-nw0)GIgI)35pZj25L+xCnt-va>^dy9oXk(>Bq# zZ-L|vG@iO}=aRUK&CRDbG-PlkGlx(1TTaWjq}HESmDXTs8NI&;)>!DPjkH&M5pw7; zfGCIf;q->uGyN0Cw>oO<_PN;$>?HzYzqX#pGb1>*2n~a;B94>12Q3iq@M6jt0Ox-C zjC9j`om$u5ls~mN{+^SYq5)Ph_ju6QQFmt=31F7`&~&BMcACglC+Ye&!u?m=*Rg|1 zqGMkXufLU(<_(wZ#pkO9A~a=q^X>qU9UhZ>P_bB%$si>UG>eEV!HfKqv&JQKbxrOo z+`#TuSD|Gg7|1dERt>>~v-`+*?HUOcu41NcSR;cIeFOBCc(0|M} zx@#u@?&aBXP=$;ziBK4Y1RTou^OuO@biT1XCbSm{ovL$M?(ZHS{v^lo#0M~CyH$)b zSY`u5_^0+ANbhp9N7oArCqvZ6IV}Cb8S3S3fJAjd59Jr2l{t&cv_l$#w*YdWn`6W1 zVW@r&YU6Jj@lY^<&C<3%!6GSR@Wn`ky6!;r1Ga@SQ~h)U!(~@OY|=(Je#38fWt5Gb zo9=1F?xTJlFZkq5-m}~?%xK=COx`Y{N#|Y+{9>h5)c)+J_ugtuS z86UlHtJQq`5!1bw15G5MMtb*lvf!kVC2O-hOtwWRe&U!-Zo3?!*k%Y5jZ ze0=zYRzKE1#uEWDU@!o^sjVk0ETpXrGeLlgc^rr+q#7^UyZb^kpoKS^-NYzjBuSh) z;QL~gDI1%EEX8%lHWH|UI5r@SEnWxA!s%DmRLJCA*Ac6nl*As*PQ=J=7d4&gTdi&l@*~@h1}~YkCm#{IYSE zq75(0%@^uKD-lQRcdrN%tl-4Gb{=;Wu8M-`jzsFHSx8YRq1PQQ>ayI@L)-_lFCIRv z@N@E7GtvQLObg|ICvPvo#Wo`uYZsA_*XD{jO7x9EQD_$5@Sx;4io23#ToG=8>U;CX zywCjJqkyZga#P~Zu*6KpAW$VQ%9{EdR#(O15U%qGO$miH#z0c4fEW3z_yIaWvWJndH4=+VGin zx}oz3F@>1;5c$J7P&G^3_D*1yqg2}D*WW8S6e*r{Hg)RBd-$ZeT3U-Ju$wNSGGvqX zKHQtNUn*Pk^duUK4%OaSO|{BAofJYxevJB}iCy>Mj(NOiC*E}zxH73@ITVTYv7XphlM}N#K+U0bMN`_b$&SNgo?*un4ti5-~ywV z$XVq~Ha^#rv?2y=7vgwa@F<{nes(tL!Z67DgvXco-^OfG$Nzy!BuNtWxydKc@H3T; zPnMnS-YNtKMVI~z-D5>}mYT0)yKIoba_3LCUe7#Sy-dMOOIH;=SG;9;ZLaAQoVa1M7S0)fcpeDrf^ofpkq5zey7XLK&v1c>SS>t^* z5NRFg;uPqr@bYoF@Al~b zCRnRJlsqHw{)u4j;}#g~g4jsuh&)O><~Z~X{24HiGKVa DTfr$v literal 0 HcmV?d00001 diff --git a/css/jqueryui-smoothness/jquery-ui-1.10.2.custom.css b/css/jqueryui-smoothness/jquery-ui-1.10.2.custom.css new file mode 100755 index 0000000..3a8eb54 --- /dev/null +++ b/css/jqueryui-smoothness/jquery-ui-1.10.2.custom.css @@ -0,0 +1,544 @@ +/*! jQuery UI - v1.10.2 - 2013-03-29 +* http://jqueryui.com +* Includes: jquery.ui.core.css, jquery.ui.slider.css +* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px +* Copyright 2013 jQuery Foundation and other contributors Licensed MIT */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { + display: none; +} +.ui-helper-hidden-accessible { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} +.ui-helper-reset { + margin: 0; + padding: 0; + border: 0; + outline: 0; + line-height: 1.3; + text-decoration: none; + font-size: 100%; + list-style: none; +} +.ui-helper-clearfix:before, +.ui-helper-clearfix:after { + content: ""; + display: table; + border-collapse: collapse; +} +.ui-helper-clearfix:after { + clear: both; +} +.ui-helper-clearfix { + min-height: 0; /* support: IE7 */ +} +.ui-helper-zfix { + width: 100%; + height: 100%; + top: 0; + left: 0; + position: absolute; + opacity: 0; + filter:Alpha(Opacity=0); +} + +.ui-front { + z-index: 100; +} + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { + cursor: default !important; +} + + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + display: block; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; +} + + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +.ui-slider { + position: relative; + text-align: left; +} +.ui-slider .ui-slider-handle { + position: absolute; + z-index: 2; + width: 1.2em; + height: 1.2em; + cursor: default; +} +.ui-slider .ui-slider-range { + position: absolute; + z-index: 1; + font-size: .7em; + display: block; + border: 0; + background-position: 0 0; +} + +/* For IE8 - See #6727 */ +.ui-slider.ui-state-disabled .ui-slider-handle, +.ui-slider.ui-state-disabled .ui-slider-range { + filter: inherit; +} + +.ui-slider-horizontal { + height: .8em; +} +.ui-slider-horizontal .ui-slider-handle { + top: -.3em; + margin-left: -.6em; +} +.ui-slider-horizontal .ui-slider-range { + top: 0; + height: 100%; +} +.ui-slider-horizontal .ui-slider-range-min { + left: 0; +} +.ui-slider-horizontal .ui-slider-range-max { + right: 0; +} + +.ui-slider-vertical { + width: .8em; + height: 100px; +} +.ui-slider-vertical .ui-slider-handle { + left: -.3em; + margin-left: 0; + margin-bottom: -.6em; +} +.ui-slider-vertical .ui-slider-range { + left: 0; + width: 100%; +} +.ui-slider-vertical .ui-slider-range-min { + bottom: 0; +} +.ui-slider-vertical .ui-slider-range-max { + top: 0; +} + +/* Component containers +----------------------------------*/ +.ui-widget { + font-family: Verdana,Arial,sans-serif; + font-size: 1.1em; +} +.ui-widget .ui-widget { + font-size: 1em; +} +.ui-widget input, +.ui-widget select, +.ui-widget textarea, +.ui-widget button { + font-family: Verdana,Arial,sans-serif; + font-size: 1em; +} +.ui-widget-content { + border: 1px solid #aaaaaa; + background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; + color: #222222; +} +.ui-widget-content a { + color: #222222; +} +.ui-widget-header { + border: 1px solid #aaaaaa; + background: #cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x; + color: #222222; + font-weight: bold; +} +.ui-widget-header a { + color: #222222; +} + +/* Interaction states +----------------------------------*/ +.ui-state-default, +.ui-widget-content .ui-state-default, +.ui-widget-header .ui-state-default { + border: 1px solid #d3d3d3; + background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x; + font-weight: normal; + color: #555555; +} +.ui-state-default a, +.ui-state-default a:link, +.ui-state-default a:visited { + color: #555555; + text-decoration: none; +} +.ui-state-hover, +.ui-widget-content .ui-state-hover, +.ui-widget-header .ui-state-hover, +.ui-state-focus, +.ui-widget-content .ui-state-focus, +.ui-widget-header .ui-state-focus { + border: 1px solid #999999; + background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x; + font-weight: normal; + color: #212121; +} +.ui-state-hover a, +.ui-state-hover a:hover, +.ui-state-hover a:link, +.ui-state-hover a:visited { + color: #212121; + text-decoration: none; +} +.ui-state-active, +.ui-widget-content .ui-state-active, +.ui-widget-header .ui-state-active { + border: 1px solid #aaaaaa; + background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; + font-weight: normal; + color: #212121; +} +.ui-state-active a, +.ui-state-active a:link, +.ui-state-active a:visited { + color: #212121; + text-decoration: none; +} + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, +.ui-widget-content .ui-state-highlight, +.ui-widget-header .ui-state-highlight { + border: 1px solid #fcefa1; + background: #fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x; + color: #363636; +} +.ui-state-highlight a, +.ui-widget-content .ui-state-highlight a, +.ui-widget-header .ui-state-highlight a { + color: #363636; +} +.ui-state-error, +.ui-widget-content .ui-state-error, +.ui-widget-header .ui-state-error { + border: 1px solid #cd0a0a; + background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; + color: #cd0a0a; +} +.ui-state-error a, +.ui-widget-content .ui-state-error a, +.ui-widget-header .ui-state-error a { + color: #cd0a0a; +} +.ui-state-error-text, +.ui-widget-content .ui-state-error-text, +.ui-widget-header .ui-state-error-text { + color: #cd0a0a; +} +.ui-priority-primary, +.ui-widget-content .ui-priority-primary, +.ui-widget-header .ui-priority-primary { + font-weight: bold; +} +.ui-priority-secondary, +.ui-widget-content .ui-priority-secondary, +.ui-widget-header .ui-priority-secondary { + opacity: .7; + filter:Alpha(Opacity=70); + font-weight: normal; +} +.ui-state-disabled, +.ui-widget-content .ui-state-disabled, +.ui-widget-header .ui-state-disabled { + opacity: .35; + filter:Alpha(Opacity=35); + background-image: none; +} +.ui-state-disabled .ui-icon { + filter:Alpha(Opacity=35); /* For IE8 - See #6059 */ +} + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + width: 16px; + height: 16px; +} +.ui-icon, +.ui-widget-content .ui-icon { + background-image: url(images/ui-icons_222222_256x240.png); +} +.ui-widget-header .ui-icon { + background-image: url(images/ui-icons_222222_256x240.png); +} +.ui-state-default .ui-icon { + background-image: url(images/ui-icons_888888_256x240.png); +} +.ui-state-hover .ui-icon, +.ui-state-focus .ui-icon { + background-image: url(images/ui-icons_454545_256x240.png); +} +.ui-state-active .ui-icon { + background-image: url(images/ui-icons_454545_256x240.png); +} +.ui-state-highlight .ui-icon { + background-image: url(images/ui-icons_2e83ff_256x240.png); +} +.ui-state-error .ui-icon, +.ui-state-error-text .ui-icon { + background-image: url(images/ui-icons_cd0a0a_256x240.png); +} + +/* positioning */ +.ui-icon-blank { background-position: 16px 16px; } +.ui-icon-carat-1-n { background-position: 0 0; } +.ui-icon-carat-1-ne { background-position: -16px 0; } +.ui-icon-carat-1-e { background-position: -32px 0; } +.ui-icon-carat-1-se { background-position: -48px 0; } +.ui-icon-carat-1-s { background-position: -64px 0; } +.ui-icon-carat-1-sw { background-position: -80px 0; } +.ui-icon-carat-1-w { background-position: -96px 0; } +.ui-icon-carat-1-nw { background-position: -112px 0; } +.ui-icon-carat-2-n-s { background-position: -128px 0; } +.ui-icon-carat-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -64px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -64px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 0 -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-on { background-position: -96px -144px; } +.ui-icon-radio-off { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-all, +.ui-corner-top, +.ui-corner-left, +.ui-corner-tl { + border-top-left-radius: 4px; +} +.ui-corner-all, +.ui-corner-top, +.ui-corner-right, +.ui-corner-tr { + border-top-right-radius: 4px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-left, +.ui-corner-bl { + border-bottom-left-radius: 4px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-right, +.ui-corner-br { + border-bottom-right-radius: 4px; +} + +/* Overlays */ +.ui-widget-overlay { + background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; + opacity: .3; + filter: Alpha(Opacity=30); +} +.ui-widget-shadow { + margin: -8px 0 0 -8px; + padding: 8px; + background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; + opacity: .3; + filter: Alpha(Opacity=30); + border-radius: 8px; +} diff --git a/css/jqueryui-smoothness/jquery-ui-1.10.2.custom.min.css b/css/jqueryui-smoothness/jquery-ui-1.10.2.custom.min.css new file mode 100755 index 0000000..8ea754b --- /dev/null +++ b/css/jqueryui-smoothness/jquery-ui-1.10.2.custom.min.css @@ -0,0 +1,5 @@ +/*! jQuery UI - v1.10.2 - 2013-03-29 +* http://jqueryui.com +* Includes: jquery.ui.core.css, jquery.ui.slider.css +* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px +* Copyright 2013 jQuery Foundation and other contributors Licensed MIT */.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #aaa;background:#fff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #aaa;background:#ccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x;color:#222;font-weight:bold}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #d3d3d3;background:#e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #999;background:#dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited{color:#212121;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #aaa;background:#fff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-widget-header .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-state-default .ui-icon{background-image:url(images/ui-icons_888888_256x240.png)}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.ui-state-active .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.ui-state-highlight .ui-icon{background-image:url(images/ui-icons_2e83ff_256x240.png)}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(images/ui-icons_cd0a0a_256x240.png)}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:4px}.ui-widget-overlay{background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30);border-radius:8px} \ No newline at end of file diff --git a/examples/uspo-scrub.html b/examples/uspo-scrub.html new file mode 100644 index 0000000..c46ab89 --- /dev/null +++ b/examples/uspo-scrub.html @@ -0,0 +1,113 @@ + + + + + + CartoDB + Time + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + \ No newline at end of file diff --git a/jquery-ui-1.10.2.custom.zip b/jquery-ui-1.10.2.custom.zip new file mode 100644 index 0000000000000000000000000000000000000000..7b2cae2bfe04ce31141f9fd4576938a7545a8aac GIT binary patch literal 545137 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

* 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

MS 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
  • WhKnRMePNXW{e%-E5=bosrIah+13RUHQ z9qDCO+m6%qiHC)R<1qUtNl#dmzmleJfUJK7{d)d2!@P5QY$_ev{1pXXH3)S;ESH!5 zd3craV!7doz1P*h&r-X5AY8GtlwC3H?_q(l@#d9wq~w)UDky%P_}Z>CR^=)r{*Ruh zrdQC!-1ubsDqjEl1L+!csfqwL`L_Jv$@e|3l<|i2M(c{~_`}ME-}!{}A~fBL73=e~A1Kk^dp`KSchA$o~-e zA0q!lN@;^lWhsggB`5z+xL*##m{11`;A@V;&{)fo_5cwY>|3l>eS0(cQ zlQlJtrbbpq4z&7u4o3gQ=V=Ta9GWyOZ1!1DKe=8}%p-uZ@a+wc&ETE{>DTqaOlLQF zP&;yf)blO>_0+`M<1&u;=yVgw6S$Q%Hn702EO4hBv>j_J#3$X))5dRqI}Kd0zg`N) zlfaD+GH6r|lqffMiZw(yHu11aKUu9?PEGrK3##Le5|n_=zU56-82G)C%z~kwf%ixJ zyWCn4^{22`su^;|V~vZke!ZnUr278)w2nqj(ljf#UCgv&m}=B)lcAowIq~)YEPg+I zpWyYjzh?CGb#(OA><-wyc$j5%zq~Ipr*Jl@{Gxkbceuv}L@va!Zvux&`q|7X8 zJFBx*g?!9mf_+s*6{tBejNB^zVskX3lVFlWkIklM6!FoUQvF#~#y){6gY@>&cO`lu zgJ@Cb6xi5E7>_mVi6$LW3Au2~ECuFJD85d7CVBpBC7i#@jYznI6;_ncFm+!gy8N6t zJjag{4%7y6<(U!+k74-K7r5b8JA^_b@G^oKZXf$ySQTsuPeg&w_46T4!xnTj*3gsfR)PGAV8+DX zE2$+E!u)KytJ1mOj!3-@Y!u{aNzDO>k%UI8d5a5aZW7Lz zTM6I4%S75|D`1?ecMCu?3cr3vk8%(o=J%B*
      E1AdFSW^=)N3oTL(eI}epLs#Hc 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%0D!xBfMmK5WA@x#AP2!_&o>R!CFOr`&<>s*K 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 C>++cZ literal 0 HcmV?d00001 diff --git a/jquery-ui-1.10.2.custom/css/smoothness/images/animated-overlay.gif b/jquery-ui-1.10.2.custom/css/smoothness/images/animated-overlay.gif new file mode 100755 index 0000000000000000000000000000000000000000..d441f75ebfbdf26a265dfccd670120d25c0a341c GIT binary patch literal 1738 zcmZ|OX;ji_6b5ixNYt8>l?gOuO)6lU%W(mxn(`>1S(XO;u`D+P%xqBvMr|w-Vyr1s z7R|Cn0b8|Hu<=Zmv1mFqh9Fj!NuZfKB2MP$e75`XJ@>=!y!Ux9xR3x;EW!q1^V>X| znVFuRUN`NqJ2)ybXh%e__h!!pv(M|S3+?9F%(K}zyE40MGyhWF5-IDgL&=%2-9`Nk z!1@8uk4t%_{(K~>N;sK&dzJbwJ=$kYTlL=$%#0Pfh>U{%i@~wWbvYsD_K-D`&+u1( z#Ma`>%q<^UhzGvi(hyE`zCD{-=2|zL5>wnB=DE!U?(CZG%q4@lDnCq_%&3DCla#(X zmBhDD+RN$aMWWHm?ig*>1Onn6~r?Ma~N2JKAxN>H%UtRyRqS)6Um!-Tz%-r=& zQmTb^JFIe3W^-kAm`}`2P|niMh>RYyd)S^f(dbrx965?rzbhP|XeP}o&&DSZ4|oYQ z)I{f!SfycYw?3=9W;o-B%U5xs(pP267X~9-7L|4WzaYexC0GtG8wWygm63rF{llCEraxzkc=IxvFQ-y37=_;e5 zJLq^gsSO0Ayz?a>E_?{dmUc+t#qv$)XN8$<<}rQ#)lsiw+pmL&J>~+hgpo>i$m+;l zZIa_ZRIfSeT$~v5d`EBV&*k`apPgjv&B|+d`Q!nyu{L4rs%ZfoF0*Kq8I%ByOcFpL zK=>wzofZo<+0GZLCnWM3oQ^pb(gRSf02;~cEn@LJ>~XB9IkEX{$N#Z`m%>S!U{uPx zloI%bLdo$Adxlh(Uv^yX7s5G&C zLwNRG>~T?G{kzupp8EcyLGPoPf)@&9Wqfw_l&uU-6cexk%5;uQg%wb=0k_733{i#& z1a2p)gV3S2+QG1-K9tZ}E~I<(P0r2aFFY-c{o?TUOz3Xjod#TLE2A_c?*T7t z=1>~%YW450{Qqno4t`}gvLnuMrcu8+#xEBoY%2_+Mb#Z6S38+r*M4O`-+!zl(@m`D zQsi|GA2l3gEy}LFe<#Hv8?$_L#u8E|3-bP$*La*E>B{X!Sy4i6?TKam!49aXCAW4S*P_O^H4^*DpiA40o}Uqw~Eo&veh1`|8i zD2$x+>_b^bXE4N;AW=5>iYak2%!JAh0j1*k1{p#iRCjbB7!cSws~U{1IA@acLII$t z$>X#A+^s6iJ5~DFG!xa?>z{=lxtdi1rzbM-(nqAu3D8h-&64xo6|E!p?pK0xT;qoK z`6%+SpBk+~M?nO}>2mTw!A{yZ6O>Z@kwSd4;8aWU5z!P~tQl?u==^+R`{OmOS}oZh zOXQ3{6kuz?Is^n^L7;9ieB9C+8B{>t+pDrlq4xGDDn#T#3T5$l1g`FTQkU;b-981j zNm{zC`$wn7etklM#qHI4=3m5gwa6DNS{?Z!vSObi_od{4eUo=_S2BKNpkSdiqe(k9WtkeM79;2-%CFbb)aB=&H1?i1}uwFzoZQ(38Kn1zBP ORn*B%u*Wk|4g3!*Rv{Mv literal 0 HcmV?d00001 diff --git a/jquery-ui-1.10.2.custom/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png b/jquery-ui-1.10.2.custom/css/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png new file mode 100755 index 0000000000000000000000000000000000000000..22339158faf6c00939d047502fc2222f08025af6 GIT binary patch literal 212 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F1SA+{?>A)!QcOwS?k)_>#w|r1Kptm-M`SUO z_5fqIli7AahM1>|V~EA+ zRdP`(kYX@0Ff`URFxE9P2{E*^GBvd_G14_Kw=ys=efppiMMG|WN@iLmZVfIwB20lA O7(8A5T-G@yGywprEHkJ8 literal 0 HcmV?d00001 diff --git a/jquery-ui-1.10.2.custom/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png b/jquery-ui-1.10.2.custom/css/smoothness/images/ui-bg_flat_75_ffffff_40x100.png new file mode 100755 index 0000000000000000000000000000000000000000..1da7cb3b9477f734d1c4c21463ba97783eef8561 GIT binary patch literal 208 zcmeAS@N?(olHy`uVBq!ia0vp^8bF-F2qYNp$opRhQcOwS?k)_Bce{j_0C}7R9+AaB z+5?Q;PG;Ky8A6^ejv*T7lYj6t@hpC#;TbB#aBAWwna#KLs)4eqC9V-ADTyViR>?)F zK#IZ0z|dINz*yJFB*f6t%GA`##8B73+{(a!h4+^TiiX_$l+3hB+!{&)oK^reFnGH9 KxvXnc6a#?2AmP!?*K(O3p^r= zfwTu0yPeFo12TF&T^vI^j=w#x$i?I+((tf;UXnmgbH|3oY>pC!)f}(GR!16S-u+#{ ze6YEqRkW=8vGl=5qArKM<9}TC-}iEvB{zdaTcX5$wyRTK&ALxjG`eoKP5A*61N7u)L?m_1_n=8KbLh*2~7Y&D|Dv- literal 0 HcmV?d00001 diff --git a/jquery-ui-1.10.2.custom/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png b/jquery-ui-1.10.2.custom/css/smoothness/images/ui-bg_glass_65_ffffff_1x400.png new file mode 100755 index 0000000000000000000000000000000000000000..bf551ff5c042b9a7858ea2f913599926382fd4ec GIT binary patch literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^j6gI2NH8$CE1Q=ADW)WEcNYf6yIsOdfIQ9ukH}&m z?E%JaC$sH<3_(v9#}JM4$r%X}t&0mp9yKsb%{ak$*<@oTP*SzTHKHUXu_Vl&Ga7+PAHnp&9{=o*+?85k_8`nUi^LvDUbW?Cg~4VTqDWq=wOJYD@< J);T3K0RSSTGeiIY literal 0 HcmV?d00001 diff --git a/jquery-ui-1.10.2.custom/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png b/jquery-ui-1.10.2.custom/css/smoothness/images/ui-bg_glass_75_dadada_1x400.png new file mode 100755 index 0000000000000000000000000000000000000000..915f1805ac5b0d7bceee7a778c7f3fb1375935c8 GIT binary patch literal 262 zcmeAS@N?(olHy`uVBq!ia0vp^j6gI&0LWmFTHNUZq?nSt-Ch3w7g=q17Rci)@Q5r1 z(jH*!b~4)z#PD=+46!(!T=8puqDZgOs>RXUCGx5b?-VBQkUm|IuXOmYJrBRJgj{Vx zMbNnqUkncy+qa2-mWYc>swkcIuvGK#>(0d)B7)5f`@$Ei28nH~0h*~=;u=wsl30>z zm0Xkxq!^4042^XSjCGAnLJTdfOiis!&24nc6a#?2AmP!?*K(O3p^r= zfwTu0yPeFo12VciT^vI^j=w#>k(V)1qW$CZ|6)SVV-&*#dav<$DMuV&n0Dbpw@al&Ga7+PAHnp&Bf=^B_@85r;~ g9AQDxkei>9nO2EgLrrYW4xk1GPgg&ebxsLQ0B!7YWB>pF literal 0 HcmV?d00001 diff --git a/jquery-ui-1.10.2.custom/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/jquery-ui-1.10.2.custom/css/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png new file mode 100755 index 0000000000000000000000000000000000000000..e2c036d553b1093d53a687c032c01774c6fd4bcb GIT binary patch literal 280 zcmeAS@N?(olHy`uVBq!ia0vp^j6j?s03;ZUuHXC*q?nSt-Ch3w7g=q17Rci)@Q5r1 z(jH*!b~4)z$cXZEaSV~ToLo`U+vu0Ue0cG9p8hWqa?gxxGLm=1A1u)Cewe3oSeCaf zI$k30UHXoTXA5lSJe(zTcE%W-S*bfB&J`pw9sa4-R?IGW?p~6`>jMSP&M+u3 zY@9al)zrvpHlQu4C9V-ADTyViR>?)FK#IZ0z|dINz*yJFB*f6t%GA`##6s7=+{(aU i;?(`eQ8eV{r(~v8;@0rs1ba151B0ilpUXO@geCx9Ot{4q9c^pg%OaK6Yqo^RG1puHty#h|2KYM!0=6gsy z8K9N2ybORo_{i$}QxC&U!O-)`D*V04jXAvq04SIhWh8ZcmyYuM?QKT_N5t*AU(|QC z`lq$EU`=GRI-njZ~u1-;J zSpxW8s+8ZMNsT7C(ScC@%+dXT2`5OBK{NYzHIl}|fVm<#cVSZaTx4gZ#=ndYA?trE z*6TOz8pLN8)cZ%(jWU6016qi+&ST(E3poFxz)GO7?ns4Wd{sg6kxQTmL$*&wk(S=K$M@P?Munwuq zWpM@@uUSqtb(TBVY*0%vp-ci{#N|Bp1#gR2R88&G%GMTNt4dmpUv5q&(y??C+EdGx z^JMZn!W*sC`$Pq%Yy~Hv?6x_%KeSn<0q?>=uGu^SY6-q%nd(JuwichK;boIJ_-fyGyo^c4iY)A4BFhl?YQfV)08Q5_obCJr8fY>U@@(?vtN5m8P`}$qD`_kA>55yU-@P^ZRLJ_laU~!}(Rt(~B z*Pf<2{k90cRH&ln57cc5VTw3tSO#TgPA~;0XZw3MpoF>RcKil}aXxZB{o!lMAco5S zcLq5TI|R6H8NCl?4tr-bwWQr#pSefD;oreJ`lvswaSON4i10%-7mk0?(AG-4immor z9H;RPv``uPMyYGv35PQ3#I&K80$TUcafx9gc$5^QWtc^hKQ^>_pb{zK6I)3dha47l zMOh(I%FYcqR#kVuh}Mk)^S;D)Cxuc!zlK%Dv`iIyE8&+nf*5rtP1BTlyDn^><9K;4 z86HgzNU+-iY)M0k26h`GJbr$2v|jnk6BISCO0}8%9!|oIBbm{1ob>!^6i=MlT|7=*X+;ne9tR&Tj43aU9ArmELhOGSph*ju7e0 zYHszpZ43?at3oE&I`=O4aO;k3@bXQ_KNgrzV&Erv;lH7G_7gT}xW8_3g}$cV)&hx@ zYcUdC{$amhqC{s6*|bQF?YwftfxXdDp3w97O2XZqJ=NlFU1lx+aeT9&2iH2yn07J^ ztU-gzPxI4j#y;Uy{$)I>mqUAdBrF5*7pj+E+*bTTeA=fxIFu=5pGuXB5|)+_+1{r8 zm8$PM6~1?KX=8>&M*M0-XZPlN+&wr&nAHNBaL18_-*@5a^O&O4CPT|wZ3FZnZd-C_ zH%chjeO1Zgy;R2Ck=^a(pJl6MGUyuGHf{?aBrD`Kwg!@e)(OJO8Y`h7o%fL?F#D`N zw01>z0l$1@#M+TJtVZm4=9#)x^#Y(Zl@Ebaem?a_E4>Asn;+5z;n78y2x$|mIz;O> z=LA-DK)*rCDV(<`6`a%5`f$pTt4j6V?re;<6#zlcYS=z~zbMxCn4|Aq`ybn;`Yu(M zRQ7aw=ZAaHH2QDR@p;~L^Ee>-Xs`)p+LnQLdTty4iF-cE$Ip`0&1|%;cot!b=382q zjoCNIppu|H;KaMDM0mG7o<*plHL^)L)BbRn3O93K^U5vlkFT$V*n{J-g=v8HK1iyS zkcDIddGxjI2MhJ*+7Gv159IhVUw>#_3=zn^)~PspO+}59SBd0bC9Yfmh?IbudsuTQ zs>wKH7)IU;lwDck|EfN~QWDkOsu@QFHTkh5@jz->*n>j?y!t-Q25xPj+jMj}qE|L^ zdz)(LOe}E7P|?r?N(=*viyJWUmfwRL*o+Up#fQ*J&V!{MbRu@ASoF4Nl@p4R2!9bJ zR!QjqMZqUY?HLrta{d5Pm)=#eaPlk;$Wm$l%EgbDrB|HE;n+%AL-@KljyJ$BA_iaM zP)Kd7-V-ch+1BL1t>6*m6ZBwdjNj|Fyld1F!?5V>)ldXR>P!Rj3LED89~o@qgh#^3 zKtM4kL=@Dv*QCmt1Bup$INwW$t zL+1r$`czGIu8vi{pV4iS$b6q#J&lwt4t|X@10PiH(e5m&>|mPY|Y-yP{%yD$l=)8rL4gJOpu`d(OFrMe~mjf(@;A$NnP)fU0ZrvGrh5_ zR+kH}c)V1D6I!>%^(53m>chfOlFRwCR6=|mLMblmWoE|kgs%d~H)HWXF|MSZ;o2_} zXoxip6j`P0QN=B~cDr@!Ny#S|(6ZMufMpw&*m_O!&Dzsk0pne$HmbGFW6h>xHpL0$ z^PKoZn-a8}b=lFAzh#=Z&GFFT%|`1$BYV{nbjK7gUq#u^DBp_(fwj`7A>Q4e3i$5gx_ar5~?}| z$Ub&(Fa@w&P3KB4DbMsJCZe}JYcT)=?domj_Rh)E`4#PU_DO`Cgba05#QNE}FioF( z=4Md%aF7NiUxK~b!>ebhc5L^qFwByIXttRI$WT7mp9ikZw?ahlNbP2Ca>QLStmNsM z(!auaRz=i>{(u2B*`{rbsA09d5x7{{z_?Px2h0}Pe2D~p`VlaJ0ES_Thk>=0Rmd3S zYJ5h-tSsZ?2*M(q0V*^3yu+ivH1wBIwn)Zw4qcOPwpKsj#c73oBpt~g@JZl@xaF3p zjp^nk{3z_k9p5BBP@tTLBoD(FE5thlRi{Ke`0dw4x+q_U`=IV7Z27i)h!b{M*PH~O zvP84UTa8k!_`Ve6qw0fXK<<>SsWK2@SAj3bDK!WviJbS^KywBI^3@G#Z6bGw>A)l` zAA-a6kj(}iFX9+o&KZz^9z|pFU@9#Vtqcp^be)t4j2eVO$DsA#jGtLC8C)q?tUev<+IIJeJw3T9Jq6P!x9#p1GC%eb8^%g7!6 z?OZ}**`n3EA`CDV)#}py(4D`5*ptAEAD}=RshDW-m-R z`F&t(TUAhng?~RKl(X|XU0jvrKIhxaj;9yAJf)IDd<|U$T420XAzk6oX*$Au{cOQd zYKnKl`Aj+h$9cvUY@ofkUGFB}1-j%`rnFWpY77eX{szQS;pUo|@Pny%-FjRr_Ph}P ztkuc*^^$OJfH0S1&<8&9HN<|S;_Bk13Sd&{H!grmkE{$UZg#4-ey$jc{p8tsF6!2w z7`t{H-*|Ju7Nm1m*6R`0`WS3{@8D8ZwkC;DU!-W@kL7`q^KhCi_qXF4qELoxv}}t! zhjdI4vD4iOR`iU6<=!d(_Q6*VG3ImELiV0niI9|tyq-8*vfX;O2x&_F*_7=95Q%cD zg_NlR{D?lVr!d@H16ixqJV-g=MHu!%lPcG_qK?OKOf%M=t?)bL+BlQ=I>I-PlwYI| z<9nv1Va@DcVZA$ICZ$ud@3&~a6cu-0v?g&L8;-XXHxMf&#`VZDdh0my=WRtSE&Y;< zVg_7+N=`2pt=<@ea??J{Eo8pV^xkcl5-{y>cEat<*1+zqU+dD*-Jg1CAKeS$qcHW@o|oG89!xPQPd zU=J4_*A#&=u=9@msmvJUmw0|kA;Abe(w2}A7>H21@&B*2Xv#@1)UZ_1d$xdR=0Du(XO=y~j*0KU{3=idQ*cV;P@94qdtTkab}qSRStk zo+LnSpdmLX9#Z+hF1a+r2!UVIgkoiOtHEa4+i+h@1;_N`br*+EPYDDIvIAL;9`fgW zv`3n!m25FWgg%{relJHjtU51_W2G0p+ww`G-U@Nn^$)AGn5R;YH}- zkx2bCjV%Q>D-`$(=xy7mye}|whf8=0p*U|y;s@c3{nM893||#oww%UZ zKGQqQ0mNF-f;|?j+jiJYOcP>u+`YlenadQp5O%s6&_VJyM7x9xowxNLpArM|3nz$W zqvav(0Vew1Cu7%_BPEDk2{Vvh=OCW-FRIfDQR;xNSZ=Uqww6=-hw$Jeo>+WT0KnmlNYsak$hb_KIdXVRrq|4 zc?l!EgE{dGxxYZ+E8~BK2SBtVuHRh|`#D8+iAg8D$Ko*^l`dx{Rx}5xH}$awqp;5^ z!Sjb?OiUDikL(Ag%PyI0zkKmYHH~FQ7P)QGg{VW|i4WHh`CulLA`rhuK6S%n^Q~e8 zGB&(6yFYe{h|U~)r+u3!T?^r}}eT&_*XZsk)gDqoI#goBdqU$eB&8 zADcQBiq`C0s8z}2f24R-qf;lpq5g&SMm1;>_sw1A*VKy&12j49ya&fUirm5+vlz`( zPz+V7TI72^(gP#-&3A4!TVRXUwP_sRH=)Ng(b1O@qu3L<)|}g3&0?{f{sgw05M(5f zfEl$_N3qf~^pkf|C)P#RTMlulrarg046JtX@ezPQ8Au7^WxnrUKcf;<}H4s$6v(9)V1%S6QX+2kM5j_wN&$+H&Ll?PU?h`gC3q=8_Gr}pfn6( zD^qHZLJ|)R9Ni^U0gpI$sh~Sbt`oNlgH*tB%dc|dBJI9SEbHfjVa(dN0vIQ<5489B zUt?1`&EX-;?dI2)ugv&1>#Q2=;~t(t*o-g=&*_OgR6bIl8A$@8&lqNp(u_eX*mukT z@kt{=LVp({=X0XDT9{_0j4hklmuc72Dpr}qTf6dVkHzRWT(_L`dk+e7E5prT{=J7+ zau}%_SG)z*oDcekL5mhi=#Z!wJqlUp=BdY1fjX`H^@0|m#kO=Ozci8%WR%*YFaDk{WIi==sHQdKM-E@nZ~$zoYV{Z$zAr@SXm=Ieg4AiPmFfNJjWYzvFdG zA&;;NZ(4#%_Mm0Y6z5<**tK(1@Fz^J9=6KaPtb7id=(!4(3LBi=!pTkIsw-=m${TB z(u#26e%y8`PZas8ha=O(#@(E-<;+P8}A(sQ|tN^1Y-XY_6{ z4i@bvxR}9%cAo0U4bL#nF8RP{@Vb}iO@(kCmbcx~{SVw#yEH9}&#-l-Q@BB>SM63) z)M8*Q#?r;=@5^PuXzT_+9Iw);!3epn349KNTgXw2BDl^#39d=z40T?)ZeH?j#TWR< zV#2R^_)Br>O6;>UrqGn&SbXGapKO)o>qac~!#5!uLw%~`V?2s}8z1z}lKspGrb(>Q zW!28Hzj|t>gyu;57~@?)?sZ--dTUOT zgPs0iapE~VL7vqWW~T1ynETw ze|$G{1Wj+g$^n`e7_2wkNYt{pviHdQwo*m1pLa=ghj3e}7EV^h=0K($(9ZvciWCNbHa4$!5H} z@Uag+U45D?uq;cWYMb%vf!|+SckQdvN`Hz*nZG)Wu|iV6Eht%=ASH4asU_QSO%V&> zK)P9&^FpxR+ldG$hmRQOv6p6t4D&)pdcqgb1pb9FMGpL3kf2S7AIf>8_5@gljRK0a zuo8%h_4TE&G3_|i8s5kmN5sREEvF^ZpV&;TN}=4aD2EFsm7bNVbW|D;YwS?4zHnOk zRh2=*`eU(1sNXiurRQ-FX-&CUNLT&(^BU3Gm1MX-A#Ry3-5;_0%2QzBK$!bRmR9DD za|pF*NMS730`zczmK)~$ig`Y;iJ{UA_P=mTvIEThFi!YeO={FwGykGpbHhn|wppyS=;NW{OKezi zj!2ZSoc@n7mvY}Y^gR(1mL&a*$(=g3OoVMm6xx^^OnCd6{fh7mACHiAl}_HiQD$Uc zrFFMj=+XE?>Z0qD4*{rUx2f;dx@5j(nsN*OS8cAdS7z1`@!P;TmfUguONB$VdwhK% zos$YG4>4D_?sYd))nMrZb@Ae(!C=;edumLXZ^h~WQh*iL8L7QzF?Z-vu2qt7JdbpS zFf~Wo-1403{&H{q=g0Ys=>hLk#IokWMm?&W^-bk*fc_?<#IrBY6r}2ShlICVkcn{c zdPW(7i&(}tc#oPw25ga|D>6A8Rc`0dT-}~TZxP8Df0p_)yc-j%EA_U!r^X8pCt23Q zi)I*&v@KR({{@KG3Gzy#Qg&#jSDk(PxA>sb2K6WNXBmF>EL?FXyPz(yCvnUh<==#| zQ8MTU8VS>zBhlVdeTVXCxM#c!iv++wbZS7eNcIu#53%vURlwJ;_@D zBDxn|woIw|J7?|q1}EDLG((i=_duGUnx`2+m{fttG2`%ejStF5eEX@wrz&{?7KV8` z&9YImZ&%Z6@NjmzP!{IUan00WfazVIDzm0ryF}hHmFB!n`==y5?-{3R zb-DvwqBJ)Q9&0F+DLhI89+Z}Y#^$uUB-C-MVz6ls7GhBwW>WkFa}wYM}(!*H8ZZ;s71H_{Q&d>X1aCe{>Lo>BgRnjU+x#Iub%bWrCk?Eo8)94 zGN3I@nIw1gGVfjzabx9H+z@G)4<1bDs}yBF7c4twl5_?uWjy}f1szOl^lS+Uaw|cA z*qg|L3HN?s8CLqSeKTRPHf>}sncYz2z-S9R@^7mEAOTC?iE=`egZF42l9-R z2qCk%SD^mlA^bv9^gf%_4@ayP|1p%er#h(hCU%SKh4^t-H9J*ecyEWk(ywYw zi2gO++su-c3H`Za?>+JL;5G*N-UO~Aif+W^i`U&~^k@*}+NLT0jf#X*W_HD&`?Cc* zon5kT9xfLGw084X3;(gEk%G@1gt`R&Z*ja5+oM-BP-u^unAQm-KkNEt9Ok`8EgkiX zNTdGXL+z`l-6wfOB>Hlb9Qr-v%^}%dj6WKcGgamJRvv9_<-rwdBPI&i-=o`j##)=IO5~R!mtE2BOMpe$Ck|v1uyKkgw0yCudF6`J zk$H>43vwO~4vTQ{x8vLxM?C%%nFGj+fEobk8aA1U^E@sd%qN-bCDeC`f6QE%u1n8X%chuzE|55OZ1tEqgxVtWCFJ-41*!|2 zkGcm&d8~?;W9(>R)`2YqEs{B_kylO->cRzZp}AgX3~W01<9zrP9?b2~)D$AGe)9NP z#X#Drknh{m-4Uagtbvz}rI)RUwTJDK0q}D3@NsbSa&YtLaPy1s@rm$ob8riZaC5)1 zfF}Q2fQze*!#ltKKfplDm-8ur{BI*@yT0@CvGlM7NZPns+0rVySlZcY*;?B8xsTb3 QJ~;stWz}Trq%1=J3#jBGg8%>k literal 0 HcmV?d00001 diff --git a/jquery-ui-1.10.2.custom/css/smoothness/images/ui-icons_2e83ff_256x240.png b/jquery-ui-1.10.2.custom/css/smoothness/images/ui-icons_2e83ff_256x240.png new file mode 100755 index 0000000000000000000000000000000000000000..84b601bf0f726bf95801da487deaf2344a32e4b8 GIT binary patch literal 4549 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 F{{S81aohj^ literal 0 HcmV?d00001 diff --git a/jquery-ui-1.10.2.custom/css/smoothness/images/ui-icons_454545_256x240.png b/jquery-ui-1.10.2.custom/css/smoothness/images/ui-icons_454545_256x240.png new file mode 100755 index 0000000000000000000000000000000000000000..b6db1acdd433be80a472b045018f25c7f2cf7e08 GIT binary patch literal 6992 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 literal 0 HcmV?d00001 diff --git a/jquery-ui-1.10.2.custom/css/smoothness/images/ui-icons_cd0a0a_256x240.png b/jquery-ui-1.10.2.custom/css/smoothness/images/ui-icons_cd0a0a_256x240.png new file mode 100755 index 0000000000000000000000000000000000000000..ed5b6b0930f672fa08e9b9bdbe5e55370fd1dc30 GIT binary patch literal 4549 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 DTfr$v literal 0 HcmV?d00001 diff --git a/jquery-ui-1.10.2.custom/css/smoothness/jquery-ui-1.10.2.custom.css b/jquery-ui-1.10.2.custom/css/smoothness/jquery-ui-1.10.2.custom.css new file mode 100755 index 0000000..3a8eb54 --- /dev/null +++ b/jquery-ui-1.10.2.custom/css/smoothness/jquery-ui-1.10.2.custom.css @@ -0,0 +1,544 @@ +/*! jQuery UI - v1.10.2 - 2013-03-29 +* http://jqueryui.com +* Includes: jquery.ui.core.css, jquery.ui.slider.css +* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px +* Copyright 2013 jQuery Foundation and other contributors Licensed MIT */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { + display: none; +} +.ui-helper-hidden-accessible { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} +.ui-helper-reset { + margin: 0; + padding: 0; + border: 0; + outline: 0; + line-height: 1.3; + text-decoration: none; + font-size: 100%; + list-style: none; +} +.ui-helper-clearfix:before, +.ui-helper-clearfix:after { + content: ""; + display: table; + border-collapse: collapse; +} +.ui-helper-clearfix:after { + clear: both; +} +.ui-helper-clearfix { + min-height: 0; /* support: IE7 */ +} +.ui-helper-zfix { + width: 100%; + height: 100%; + top: 0; + left: 0; + position: absolute; + opacity: 0; + filter:Alpha(Opacity=0); +} + +.ui-front { + z-index: 100; +} + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { + cursor: default !important; +} + + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + display: block; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; +} + + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +.ui-slider { + position: relative; + text-align: left; +} +.ui-slider .ui-slider-handle { + position: absolute; + z-index: 2; + width: 1.2em; + height: 1.2em; + cursor: default; +} +.ui-slider .ui-slider-range { + position: absolute; + z-index: 1; + font-size: .7em; + display: block; + border: 0; + background-position: 0 0; +} + +/* For IE8 - See #6727 */ +.ui-slider.ui-state-disabled .ui-slider-handle, +.ui-slider.ui-state-disabled .ui-slider-range { + filter: inherit; +} + +.ui-slider-horizontal { + height: .8em; +} +.ui-slider-horizontal .ui-slider-handle { + top: -.3em; + margin-left: -.6em; +} +.ui-slider-horizontal .ui-slider-range { + top: 0; + height: 100%; +} +.ui-slider-horizontal .ui-slider-range-min { + left: 0; +} +.ui-slider-horizontal .ui-slider-range-max { + right: 0; +} + +.ui-slider-vertical { + width: .8em; + height: 100px; +} +.ui-slider-vertical .ui-slider-handle { + left: -.3em; + margin-left: 0; + margin-bottom: -.6em; +} +.ui-slider-vertical .ui-slider-range { + left: 0; + width: 100%; +} +.ui-slider-vertical .ui-slider-range-min { + bottom: 0; +} +.ui-slider-vertical .ui-slider-range-max { + top: 0; +} + +/* Component containers +----------------------------------*/ +.ui-widget { + font-family: Verdana,Arial,sans-serif; + font-size: 1.1em; +} +.ui-widget .ui-widget { + font-size: 1em; +} +.ui-widget input, +.ui-widget select, +.ui-widget textarea, +.ui-widget button { + font-family: Verdana,Arial,sans-serif; + font-size: 1em; +} +.ui-widget-content { + border: 1px solid #aaaaaa; + background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; + color: #222222; +} +.ui-widget-content a { + color: #222222; +} +.ui-widget-header { + border: 1px solid #aaaaaa; + background: #cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x; + color: #222222; + font-weight: bold; +} +.ui-widget-header a { + color: #222222; +} + +/* Interaction states +----------------------------------*/ +.ui-state-default, +.ui-widget-content .ui-state-default, +.ui-widget-header .ui-state-default { + border: 1px solid #d3d3d3; + background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x; + font-weight: normal; + color: #555555; +} +.ui-state-default a, +.ui-state-default a:link, +.ui-state-default a:visited { + color: #555555; + text-decoration: none; +} +.ui-state-hover, +.ui-widget-content .ui-state-hover, +.ui-widget-header .ui-state-hover, +.ui-state-focus, +.ui-widget-content .ui-state-focus, +.ui-widget-header .ui-state-focus { + border: 1px solid #999999; + background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x; + font-weight: normal; + color: #212121; +} +.ui-state-hover a, +.ui-state-hover a:hover, +.ui-state-hover a:link, +.ui-state-hover a:visited { + color: #212121; + text-decoration: none; +} +.ui-state-active, +.ui-widget-content .ui-state-active, +.ui-widget-header .ui-state-active { + border: 1px solid #aaaaaa; + background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; + font-weight: normal; + color: #212121; +} +.ui-state-active a, +.ui-state-active a:link, +.ui-state-active a:visited { + color: #212121; + text-decoration: none; +} + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, +.ui-widget-content .ui-state-highlight, +.ui-widget-header .ui-state-highlight { + border: 1px solid #fcefa1; + background: #fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x; + color: #363636; +} +.ui-state-highlight a, +.ui-widget-content .ui-state-highlight a, +.ui-widget-header .ui-state-highlight a { + color: #363636; +} +.ui-state-error, +.ui-widget-content .ui-state-error, +.ui-widget-header .ui-state-error { + border: 1px solid #cd0a0a; + background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; + color: #cd0a0a; +} +.ui-state-error a, +.ui-widget-content .ui-state-error a, +.ui-widget-header .ui-state-error a { + color: #cd0a0a; +} +.ui-state-error-text, +.ui-widget-content .ui-state-error-text, +.ui-widget-header .ui-state-error-text { + color: #cd0a0a; +} +.ui-priority-primary, +.ui-widget-content .ui-priority-primary, +.ui-widget-header .ui-priority-primary { + font-weight: bold; +} +.ui-priority-secondary, +.ui-widget-content .ui-priority-secondary, +.ui-widget-header .ui-priority-secondary { + opacity: .7; + filter:Alpha(Opacity=70); + font-weight: normal; +} +.ui-state-disabled, +.ui-widget-content .ui-state-disabled, +.ui-widget-header .ui-state-disabled { + opacity: .35; + filter:Alpha(Opacity=35); + background-image: none; +} +.ui-state-disabled .ui-icon { + filter:Alpha(Opacity=35); /* For IE8 - See #6059 */ +} + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + width: 16px; + height: 16px; +} +.ui-icon, +.ui-widget-content .ui-icon { + background-image: url(images/ui-icons_222222_256x240.png); +} +.ui-widget-header .ui-icon { + background-image: url(images/ui-icons_222222_256x240.png); +} +.ui-state-default .ui-icon { + background-image: url(images/ui-icons_888888_256x240.png); +} +.ui-state-hover .ui-icon, +.ui-state-focus .ui-icon { + background-image: url(images/ui-icons_454545_256x240.png); +} +.ui-state-active .ui-icon { + background-image: url(images/ui-icons_454545_256x240.png); +} +.ui-state-highlight .ui-icon { + background-image: url(images/ui-icons_2e83ff_256x240.png); +} +.ui-state-error .ui-icon, +.ui-state-error-text .ui-icon { + background-image: url(images/ui-icons_cd0a0a_256x240.png); +} + +/* positioning */ +.ui-icon-blank { background-position: 16px 16px; } +.ui-icon-carat-1-n { background-position: 0 0; } +.ui-icon-carat-1-ne { background-position: -16px 0; } +.ui-icon-carat-1-e { background-position: -32px 0; } +.ui-icon-carat-1-se { background-position: -48px 0; } +.ui-icon-carat-1-s { background-position: -64px 0; } +.ui-icon-carat-1-sw { background-position: -80px 0; } +.ui-icon-carat-1-w { background-position: -96px 0; } +.ui-icon-carat-1-nw { background-position: -112px 0; } +.ui-icon-carat-2-n-s { background-position: -128px 0; } +.ui-icon-carat-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -64px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -64px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 0 -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-on { background-position: -96px -144px; } +.ui-icon-radio-off { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-all, +.ui-corner-top, +.ui-corner-left, +.ui-corner-tl { + border-top-left-radius: 4px; +} +.ui-corner-all, +.ui-corner-top, +.ui-corner-right, +.ui-corner-tr { + border-top-right-radius: 4px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-left, +.ui-corner-bl { + border-bottom-left-radius: 4px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-right, +.ui-corner-br { + border-bottom-right-radius: 4px; +} + +/* Overlays */ +.ui-widget-overlay { + background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; + opacity: .3; + filter: Alpha(Opacity=30); +} +.ui-widget-shadow { + margin: -8px 0 0 -8px; + padding: 8px; + background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; + opacity: .3; + filter: Alpha(Opacity=30); + border-radius: 8px; +} diff --git a/jquery-ui-1.10.2.custom/css/smoothness/jquery-ui-1.10.2.custom.min.css b/jquery-ui-1.10.2.custom/css/smoothness/jquery-ui-1.10.2.custom.min.css new file mode 100755 index 0000000..8ea754b --- /dev/null +++ b/jquery-ui-1.10.2.custom/css/smoothness/jquery-ui-1.10.2.custom.min.css @@ -0,0 +1,5 @@ +/*! jQuery UI - v1.10.2 - 2013-03-29 +* http://jqueryui.com +* Includes: jquery.ui.core.css, jquery.ui.slider.css +* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana%2CArial%2Csans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=highlight_soft&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=flat&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=glass&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=glass&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=glass&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=glass&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=flat&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=flat&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px +* Copyright 2013 jQuery Foundation and other contributors Licensed MIT */.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-slider{position:relative;text-align:left}.ui-slider .ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default}.ui-slider .ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0 0}.ui-slider.ui-state-disabled .ui-slider-handle,.ui-slider.ui-state-disabled .ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em}.ui-slider-horizontal .ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal .ui-slider-range{top:0;height:100%}.ui-slider-horizontal .ui-slider-range-min{left:0}.ui-slider-horizontal .ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical .ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical .ui-slider-range{left:0;width:100%}.ui-slider-vertical .ui-slider-range-min{bottom:0}.ui-slider-vertical .ui-slider-range-max{top:0}.ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget .ui-widget{font-size:1em}.ui-widget input,.ui-widget select,.ui-widget textarea,.ui-widget button{font-family:Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px solid #aaa;background:#fff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x;color:#222}.ui-widget-content a{color:#222}.ui-widget-header{border:1px solid #aaa;background:#ccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x;color:#222;font-weight:bold}.ui-widget-header a{color:#222}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid #d3d3d3;background:#e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555;text-decoration:none}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #999;background:#dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited{color:#212121;text-decoration:none}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid #aaa;background:#fff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;font-weight:normal;color:#212121}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:#212121;text-decoration:none}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x;color:#363636}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:#363636}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x;color:#cd0a0a}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#cd0a0a}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content .ui-priority-primary,.ui-widget-header .ui-priority-primary{font-weight:bold}.ui-priority-secondary,.ui-widget-content .ui-priority-secondary,.ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.ui-state-disabled,.ui-widget-content .ui-state-disabled,.ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-widget-header .ui-icon{background-image:url(images/ui-icons_222222_256x240.png)}.ui-state-default .ui-icon{background-image:url(images/ui-icons_888888_256x240.png)}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.ui-state-active .ui-icon{background-image:url(images/ui-icons_454545_256x240.png)}.ui-state-highlight .ui-icon{background-image:url(images/ui-icons_2e83ff_256x240.png)}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(images/ui-icons_cd0a0a_256x240.png)}.ui-icon-blank{background-position:16px 16px}.ui-icon-carat-1-n{background-position:0 0}.ui-icon-carat-1-ne{background-position:-16px 0}.ui-icon-carat-1-e{background-position:-32px 0}.ui-icon-carat-1-se{background-position:-48px 0}.ui-icon-carat-1-s{background-position:-64px 0}.ui-icon-carat-1-sw{background-position:-80px 0}.ui-icon-carat-1-w{background-position:-96px 0}.ui-icon-carat-1-nw{background-position:-112px 0}.ui-icon-carat-2-n-s{background-position:-128px 0}.ui-icon-carat-2-e-w{background-position:-144px 0}.ui-icon-triangle-1-n{background-position:0 -16px}.ui-icon-triangle-1-ne{background-position:-16px -16px}.ui-icon-triangle-1-e{background-position:-32px -16px}.ui-icon-triangle-1-se{background-position:-48px -16px}.ui-icon-triangle-1-s{background-position:-64px -16px}.ui-icon-triangle-1-sw{background-position:-80px -16px}.ui-icon-triangle-1-w{background-position:-96px -16px}.ui-icon-triangle-1-nw{background-position:-112px -16px}.ui-icon-triangle-2-n-s{background-position:-128px -16px}.ui-icon-triangle-2-e-w{background-position:-144px -16px}.ui-icon-arrow-1-n{background-position:0 -32px}.ui-icon-arrow-1-ne{background-position:-16px -32px}.ui-icon-arrow-1-e{background-position:-32px -32px}.ui-icon-arrow-1-se{background-position:-48px -32px}.ui-icon-arrow-1-s{background-position:-64px -32px}.ui-icon-arrow-1-sw{background-position:-80px -32px}.ui-icon-arrow-1-w{background-position:-96px -32px}.ui-icon-arrow-1-nw{background-position:-112px -32px}.ui-icon-arrow-2-n-s{background-position:-128px -32px}.ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.ui-icon-arrow-2-e-w{background-position:-160px -32px}.ui-icon-arrow-2-se-nw{background-position:-176px -32px}.ui-icon-arrowstop-1-n{background-position:-192px -32px}.ui-icon-arrowstop-1-e{background-position:-208px -32px}.ui-icon-arrowstop-1-s{background-position:-224px -32px}.ui-icon-arrowstop-1-w{background-position:-240px -32px}.ui-icon-arrowthick-1-n{background-position:0 -48px}.ui-icon-arrowthick-1-ne{background-position:-16px -48px}.ui-icon-arrowthick-1-e{background-position:-32px -48px}.ui-icon-arrowthick-1-se{background-position:-48px -48px}.ui-icon-arrowthick-1-s{background-position:-64px -48px}.ui-icon-arrowthick-1-sw{background-position:-80px -48px}.ui-icon-arrowthick-1-w{background-position:-96px -48px}.ui-icon-arrowthick-1-nw{background-position:-112px -48px}.ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.ui-icon-arrowreturn-1-w{background-position:-64px -64px}.ui-icon-arrowreturn-1-n{background-position:-80px -64px}.ui-icon-arrowreturn-1-e{background-position:-96px -64px}.ui-icon-arrowreturn-1-s{background-position:-112px -64px}.ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.ui-icon-arrow-4{background-position:0 -80px}.ui-icon-arrow-4-diag{background-position:-16px -80px}.ui-icon-extlink{background-position:-32px -80px}.ui-icon-newwin{background-position:-48px -80px}.ui-icon-refresh{background-position:-64px -80px}.ui-icon-shuffle{background-position:-80px -80px}.ui-icon-transfer-e-w{background-position:-96px -80px}.ui-icon-transferthick-e-w{background-position:-112px -80px}.ui-icon-folder-collapsed{background-position:0 -96px}.ui-icon-folder-open{background-position:-16px -96px}.ui-icon-document{background-position:-32px -96px}.ui-icon-document-b{background-position:-48px -96px}.ui-icon-note{background-position:-64px -96px}.ui-icon-mail-closed{background-position:-80px -96px}.ui-icon-mail-open{background-position:-96px -96px}.ui-icon-suitcase{background-position:-112px -96px}.ui-icon-comment{background-position:-128px -96px}.ui-icon-person{background-position:-144px -96px}.ui-icon-print{background-position:-160px -96px}.ui-icon-trash{background-position:-176px -96px}.ui-icon-locked{background-position:-192px -96px}.ui-icon-unlocked{background-position:-208px -96px}.ui-icon-bookmark{background-position:-224px -96px}.ui-icon-tag{background-position:-240px -96px}.ui-icon-home{background-position:0 -112px}.ui-icon-flag{background-position:-16px -112px}.ui-icon-calendar{background-position:-32px -112px}.ui-icon-cart{background-position:-48px -112px}.ui-icon-pencil{background-position:-64px -112px}.ui-icon-clock{background-position:-80px -112px}.ui-icon-disk{background-position:-96px -112px}.ui-icon-calculator{background-position:-112px -112px}.ui-icon-zoomin{background-position:-128px -112px}.ui-icon-zoomout{background-position:-144px -112px}.ui-icon-search{background-position:-160px -112px}.ui-icon-wrench{background-position:-176px -112px}.ui-icon-gear{background-position:-192px -112px}.ui-icon-heart{background-position:-208px -112px}.ui-icon-star{background-position:-224px -112px}.ui-icon-link{background-position:-240px -112px}.ui-icon-cancel{background-position:0 -128px}.ui-icon-plus{background-position:-16px -128px}.ui-icon-plusthick{background-position:-32px -128px}.ui-icon-minus{background-position:-48px -128px}.ui-icon-minusthick{background-position:-64px -128px}.ui-icon-close{background-position:-80px -128px}.ui-icon-closethick{background-position:-96px -128px}.ui-icon-key{background-position:-112px -128px}.ui-icon-lightbulb{background-position:-128px -128px}.ui-icon-scissors{background-position:-144px -128px}.ui-icon-clipboard{background-position:-160px -128px}.ui-icon-copy{background-position:-176px -128px}.ui-icon-contact{background-position:-192px -128px}.ui-icon-image{background-position:-208px -128px}.ui-icon-video{background-position:-224px -128px}.ui-icon-script{background-position:-240px -128px}.ui-icon-alert{background-position:0 -144px}.ui-icon-info{background-position:-16px -144px}.ui-icon-notice{background-position:-32px -144px}.ui-icon-help{background-position:-48px -144px}.ui-icon-check{background-position:-64px -144px}.ui-icon-bullet{background-position:-80px -144px}.ui-icon-radio-on{background-position:-96px -144px}.ui-icon-radio-off{background-position:-112px -144px}.ui-icon-pin-w{background-position:-128px -144px}.ui-icon-pin-s{background-position:-144px -144px}.ui-icon-play{background-position:0 -160px}.ui-icon-pause{background-position:-16px -160px}.ui-icon-seek-next{background-position:-32px -160px}.ui-icon-seek-prev{background-position:-48px -160px}.ui-icon-seek-end{background-position:-64px -160px}.ui-icon-seek-start{background-position:-80px -160px}.ui-icon-seek-first{background-position:-80px -160px}.ui-icon-stop{background-position:-96px -160px}.ui-icon-eject{background-position:-112px -160px}.ui-icon-volume-off{background-position:-128px -160px}.ui-icon-volume-on{background-position:-144px -160px}.ui-icon-power{background-position:0 -176px}.ui-icon-signal-diag{background-position:-16px -176px}.ui-icon-signal{background-position:-32px -176px}.ui-icon-battery-0{background-position:-48px -176px}.ui-icon-battery-1{background-position:-64px -176px}.ui-icon-battery-2{background-position:-80px -176px}.ui-icon-battery-3{background-position:-96px -176px}.ui-icon-circle-plus{background-position:0 -192px}.ui-icon-circle-minus{background-position:-16px -192px}.ui-icon-circle-close{background-position:-32px -192px}.ui-icon-circle-triangle-e{background-position:-48px -192px}.ui-icon-circle-triangle-s{background-position:-64px -192px}.ui-icon-circle-triangle-w{background-position:-80px -192px}.ui-icon-circle-triangle-n{background-position:-96px -192px}.ui-icon-circle-arrow-e{background-position:-112px -192px}.ui-icon-circle-arrow-s{background-position:-128px -192px}.ui-icon-circle-arrow-w{background-position:-144px -192px}.ui-icon-circle-arrow-n{background-position:-160px -192px}.ui-icon-circle-zoomin{background-position:-176px -192px}.ui-icon-circle-zoomout{background-position:-192px -192px}.ui-icon-circle-check{background-position:-208px -192px}.ui-icon-circlesmall-plus{background-position:0 -208px}.ui-icon-circlesmall-minus{background-position:-16px -208px}.ui-icon-circlesmall-close{background-position:-32px -208px}.ui-icon-squaresmall-plus{background-position:-48px -208px}.ui-icon-squaresmall-minus{background-position:-64px -208px}.ui-icon-squaresmall-close{background-position:-80px -208px}.ui-icon-grip-dotted-vertical{background-position:0 -224px}.ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.ui-icon-grip-solid-vertical{background-position:-32px -224px}.ui-icon-grip-solid-horizontal{background-position:-48px -224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.ui-icon-grip-diagonal-se{background-position:-80px -224px}.ui-corner-all,.ui-corner-top,.ui-corner-left,.ui-corner-tl{border-top-left-radius:4px}.ui-corner-all,.ui-corner-top,.ui-corner-right,.ui-corner-tr{border-top-right-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-left,.ui-corner-bl{border-bottom-left-radius:4px}.ui-corner-all,.ui-corner-bottom,.ui-corner-right,.ui-corner-br{border-bottom-right-radius:4px}.ui-widget-overlay{background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30)}.ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x;opacity:.3;filter:Alpha(Opacity=30);border-radius:8px} \ No newline at end of file diff --git a/jquery-ui-1.10.2.custom/development-bundle/AUTHORS.txt b/jquery-ui-1.10.2.custom/development-bundle/AUTHORS.txt new file mode 100755 index 0000000..756e9da --- /dev/null +++ b/jquery-ui-1.10.2.custom/development-bundle/AUTHORS.txt @@ -0,0 +1,242 @@ +Authors ordered by first contribution +A list of current team members is available at http://jqueryui.com/about + +Paul Bakaus +Richard Worth +Yehuda Katz +Sean Catchpole +John Resig +Tane Piper +Dmitri Gaskin +Klaus Hartl +Stefan Petre +Gilles van den Hoven +Micheil Bryan Smith +Jörn Zaefferer +Marc Grabanski +Keith Wood +Brandon Aaron +Scott González +Eduardo Lundgren +Aaron Eisenberger +Joan Piedra +Bruno Basto +Remy Sharp +Bohdan Ganicky +David Bolter +Chi Cheng +Ca-Phun Ung +Ariel Flesler +Maggie Costello Wachs +Scott Jehl +Todd Parker +Andrew Powell +Brant Burnett +Douglas Neiner +Paul Irish +Ralph Whitbeck +Thibault Duplessis +Dominique Vincent +Jack Hsu +Adam Sontag +Carl Fürstenberg +Kevin Dalman +Alberto Fernández Capel +Jacek Jędrzejewski (http://jacek.jedrzejewski.name) +Ting Kuei +Samuel Cormier-Iijima +Jon Palmer +Ben Hollis +Justin MacCarthy +Eyal Kobrigo +Tiago Freire +Diego Tres +Holger Rüprich +Ziling Zhao +Mike Alsup +Robson Braga Araujo +Pierre-Henri Ausseil +Christopher McCulloh +Andrew Newcomb +Lim Chee Aun +Jorge Barreiro +Daniel Steigerwald +John Firebaugh +John Enters +Andrey Kapitcyn +Dmitry Petrov +Eric Hynds +Chairat Sunthornwiphat +Josh Varner +Stéphane Raimbault +Jay Merrifield +J. Ryan Stinnett +Peter Heiberg +Alex Dovenmuehle +Jamie Gegerson +Raymond Schwartz +Phillip Barnes +Kyle Wilkinson +Khaled AlHourani +Marian Rudzynski +Jean-Francois Remy +Doug Blood +Filippo Cavallarin +Heiko Henning +Aliaksandr Rahalevich +Mario Visic +Xavi Ramirez +Max Schnur +Saji Nediyanchath +Corey Frang +Aaron Peterson +Ivan Peters +Mohamed Cherif Bouchelaghem +Marcos Sousa +Michael DellaNoce +George Marshall +Tobias Brunner +Martin Solli +David Petersen +Dan Heberden +William Kevin Manire +Gilmore Davidson +Michael Wu +Adam Parod +Guillaume Gautreau +Marcel Toele +Dan Streetman +Matt Hoskins +Giovanni Giacobbi +Kyle Florence +Pavol Hluchý +Hans Hillen +Mark Johnson +Trey Hunner +Shane Whittet +Edward A Faulkner +Adam Baratz +Kato Kazuyoshi +Eike Send +Kris Borchers +Eddie Monge +Israel Tsadok +Carson McDonald +Jason Davies +Garrison Locke +David Murdoch +Benjamin Scott Boyle +Jesse Baird +Jonathan Vingiano +Dylan Just +Hiroshi Tomita +Glenn Goodrich +Tarafder Ashek-E-Elahi +Ryan Neufeld +Marc Neuwirth +Philip Graham +Benjamin Sterling +Wesley Walser +Kouhei Sutou +Karl Kirch +Chris Kelly +Jay Oster +Alexander Polomoshnov +David Leal +Igor Milla +Dave Methvin +Florian Gutmann +Marwan Al Jubeh +Milan Broum +Sebastian Sauer +Gaëtan Muller +Michel Weimerskirch +William Griffiths +Stojce Slavkovski +David Soms +David De Sloovere +Michael P. Jung +Shannon Pekary +Matthew Edward Hutton +James Khoury +Rob Loach +Alberto Monteiro +Alex Rhea +Krzysztof Rosiński +Ryan Olton +Genie <386@mail.com> +Rick Waldron +Ian Simpson +Lev Kitsis +TJ VanToll +Justin Domnitz +Douglas Cerna +Bert ter Heide +Jasvir Nagra +Petr Hromadko +Harri Kilpiö +Lado Lomidze +Amir E. Aharoni +Simon Sattes +Jo Liss +Guntupalli Karunakar +Shahyar Ghobadpour +Lukasz Lipinski +Timo Tijhof +Jason Moon +Martin Frost +Eneko Illarramendi +EungJun Yi +Courtland Allen +Viktar Varvanovich +Danny Trunk +Pavel Stetina +Michael Stay +Steven Roussey +Michael Hollis +Lee Rowlands +Timmy Willison +Karl Swedberg +Baoju Yuan +Maciej Mroziński +Luis Dalmolin +Mark Aaron Shirley +Martin Hoch +Jiayi Yang +Philipp Benjamin Köppchen +Sindre Sorhus +Bernhard Sirlinger +Jared A. Scheel +Rafael Xavier de Souza +John Chen +Dale Kocian +Mike Sherov +Andrew Couch +Marc-Andre Lafortune +Nate Eagle +David Souther +Mathias Stenbom +Sergey Kartashov +Avinash R +Ethan Romba +Cory Gackenheimer +Juan Pablo Kaniefsky +Roman Salnikov +Anika Henke +Samuel Bovée +Fabrício Matté +Viktor Kojouharov +Pawel Maruszczyk +Pavel Selitskas +Bjørn Johansen +Matthieu Penant +Dominic Barnes +David Sullivan +Thomas Jaggi +Vahid Sohrabloo +Travis Carden +Bruno M. Custódio +Nathanael Silverman +Christian Wenz +Steve Urmston +Zaven Muradyan diff --git a/jquery-ui-1.10.2.custom/development-bundle/Gruntfile.js b/jquery-ui-1.10.2.custom/development-bundle/Gruntfile.js new file mode 100755 index 0000000..ff64f0c --- /dev/null +++ b/jquery-ui-1.10.2.custom/development-bundle/Gruntfile.js @@ -0,0 +1,378 @@ +module.exports = function( grunt ) { + +"use strict"; + +var + // files + coreFiles = [ + "jquery.ui.core.js", + "jquery.ui.widget.js", + "jquery.ui.mouse.js", + "jquery.ui.draggable.js", + "jquery.ui.droppable.js", + "jquery.ui.resizable.js", + "jquery.ui.selectable.js", + "jquery.ui.sortable.js", + "jquery.ui.effect.js" + ], + + uiFiles = coreFiles.map(function( file ) { + return "ui/" + file; + }).concat( expandFiles( "ui/*.js" ).filter(function( file ) { + return coreFiles.indexOf( file.substring(3) ) === -1; + })), + + allI18nFiles = expandFiles( "ui/i18n/*.js" ), + + cssFiles = [ + "core", + "accordion", + "autocomplete", + "button", + "datepicker", + "dialog", + "menu", + "progressbar", + "resizable", + "selectable", + "slider", + "spinner", + "tabs", + "tooltip", + "theme" + ].map(function( component ) { + return "themes/base/jquery.ui." + component + ".css"; + }), + + // minified files + minify = { + options: { + preserveComments: false + }, + main: { + options: { + banner: createBanner( uiFiles ) + }, + files: { + "dist/jquery-ui.min.js": "dist/jquery-ui.js" + } + }, + i18n: { + options: { + banner: createBanner( allI18nFiles ) + }, + files: { + "dist/i18n/jquery-ui-i18n.min.js": "dist/i18n/jquery-ui-i18n.js" + } + } + }, + + minifyCSS = { + options: { + keepSpecialComments: 0 + }, + main: { + options: { + keepSpecialComments: '*' + }, + src: "dist/jquery-ui.css", + dest: "dist/jquery-ui.min.css" + } + }, + + compareFiles = { + all: [ + "dist/jquery-ui.js", + "dist/jquery-ui.min.js" + ] + }; + +function mapMinFile( file ) { + return "dist/" + file.replace( /\.js$/, ".min.js" ).replace( /ui\//, "minified/" ); +} + +function expandFiles( files ) { + return grunt.util._.pluck( grunt.file.expandMapping( files ), "src" ).map(function( values ) { + return values[ 0 ]; + }); +} + +uiFiles.concat( allI18nFiles ).forEach(function( file ) { + minify[ file ] = { + options: { + banner: createBanner() + }, + files: {} + }; + minify[ file ].files[ mapMinFile( file ) ] = file; +}); + +cssFiles.forEach(function( file ) { + minifyCSS[ file ] = { + options: { + banner: createBanner() + }, + src: file, + dest: "dist/" + file.replace( /\.css$/, ".min.css" ).replace( /themes\/base\//, "themes/base/minified/" ) + }; +}); + +uiFiles.forEach(function( file ) { + // TODO this doesn't do anything until https://github.com/rwldrn/grunt-compare-size/issues/13 + compareFiles[ file ] = [ file, mapMinFile( file ) ]; +}); + +// grunt plugins +grunt.loadNpmTasks( "grunt-contrib-jshint" ); +grunt.loadNpmTasks( "grunt-contrib-uglify" ); +grunt.loadNpmTasks( "grunt-contrib-concat" ); +grunt.loadNpmTasks( "grunt-contrib-qunit" ); +grunt.loadNpmTasks( "grunt-contrib-csslint" ); +grunt.loadNpmTasks( "grunt-contrib-cssmin" ); +grunt.loadNpmTasks( "grunt-html" ); +grunt.loadNpmTasks( "grunt-compare-size" ); +grunt.loadNpmTasks( "grunt-git-authors" ); +// local testswarm and build tasks +grunt.loadTasks( "build/tasks" ); + +function stripDirectory( file ) { + return file.replace( /.+\/(.+?)>?$/, "$1" ); +} + +function createBanner( files ) { + // strip folders + var fileNames = files && files.map( stripDirectory ); + return "/*! <%= pkg.title || pkg.name %> - v<%= pkg.version %> - " + + "<%= grunt.template.today('isoDate') %>\n" + + "<%= pkg.homepage ? '* ' + pkg.homepage + '\\n' : '' %>" + + (files ? "* Includes: " + fileNames.join(", ") + "\n" : "")+ + "* Copyright <%= grunt.template.today('yyyy') %> <%= pkg.author.name %>;" + + " Licensed <%= _.pluck(pkg.licenses, 'type').join(', ') %> */\n"; +} + +grunt.initConfig({ + pkg: grunt.file.readJSON("package.json"), + files: { + dist: "<%= pkg.name %>-<%= pkg.version %>", + cdn: "<%= pkg.name %>-<%= pkg.version %>-cdn", + themes: "<%= pkg.name %>-themes-<%= pkg.version %>" + }, + compare_size: compareFiles, + concat: { + ui: { + options: { + banner: createBanner( uiFiles ), + stripBanners: { + block: true + } + }, + src: uiFiles, + dest: "dist/jquery-ui.js" + }, + i18n: { + options: { + banner: createBanner( allI18nFiles ) + }, + src: allI18nFiles, + dest: "dist/i18n/jquery-ui-i18n.js" + }, + css: { + options: { + banner: createBanner( cssFiles ), + stripBanners: { + block: true + } + }, + src: cssFiles, + dest: "dist/jquery-ui.css" + } + }, + uglify: minify, + cssmin: minifyCSS, + htmllint: { + // ignore files that contain invalid html, used only for ajax content testing + all: grunt.file.expand( [ "demos/**/*.html", "tests/**/*.html" ] ).filter(function( file ) { + return !/(?:ajax\/content\d\.html|tabs\/data\/test\.html|tests\/unit\/core\/core\.html)/.test( file ); + }) + }, + copy: { + dist: { + src: [ + "AUTHORS.txt", + "jquery-*.js", + "MIT-LICENSE.txt", + "README.md", + "Gruntfile.js", + "package.json", + "*.jquery.json", + "ui/**/*", + "ui/.jshintrc", + "demos/**/*", + "themes/**/*", + "external/**/*", + "tests/**/*" + ], + renames: { + "dist/jquery-ui.js": "ui/jquery-ui.js", + "dist/jquery-ui.min.js": "ui/minified/jquery-ui.min.js", + "dist/i18n/jquery-ui-i18n.js": "ui/i18n/jquery-ui-i18n.js", + "dist/i18n/jquery-ui-i18n.min.js": "ui/minified/i18n/jquery-ui-i18n.min.js", + "dist/jquery-ui.css": "themes/base/jquery-ui.css", + "dist/jquery-ui.min.css": "themes/base/minified/jquery-ui.min.css" + }, + dest: "dist/<%= files.dist %>" + }, + dist_min: { + src: "dist/minified/**/*", + strip: /^dist/, + dest: "dist/<%= files.dist %>/ui" + }, + dist_css_min: { + src: "dist/themes/base/minified/*.css", + strip: /^dist/, + dest: "dist/<%= files.dist %>" + }, + dist_units_images: { + src: "themes/base/images/*", + strip: /^themes\/base\//, + dest: "dist/" + }, + dist_min_images: { + src: "themes/base/images/*", + strip: /^themes\/base\//, + dest: "dist/<%= files.dist %>/themes/base/minified" + }, + cdn: { + src: [ + "AUTHORS.txt", + "MIT-LICENSE.txt", + "ui/*.js", + "package.json" + ], + renames: { + "dist/jquery-ui.js": "jquery-ui.js", + "dist/jquery-ui.min.js": "jquery-ui.min.js", + "dist/i18n/jquery-ui-i18n.js": "i18n/jquery-ui-i18n.js", + "dist/i18n/jquery-ui-i18n.min.js": "i18n/jquery-ui-i18n.min.js" + }, + dest: "dist/<%= files.cdn %>" + }, + cdn_i18n: { + src: "ui/i18n/jquery.ui.datepicker-*.js", + strip: "ui/", + dest: "dist/<%= files.cdn %>" + }, + cdn_i18n_min: { + src: "dist/minified/i18n/jquery.ui.datepicker-*.js", + strip: "dist/minified", + dest: "dist/<%= files.cdn %>" + }, + cdn_min: { + src: "dist/minified/*.js", + strip: /^dist\/minified/, + dest: "dist/<%= files.cdn %>/ui" + }, + cdn_themes: { + src: "dist/<%= files.themes %>/themes/**/*", + strip: "dist/<%= files.themes %>", + dest: "dist/<%= files.cdn %>" + }, + themes: { + src: [ + "AUTHORS.txt", + "MIT-LICENSE.txt", + "package.json" + ], + dest: "dist/<%= files.themes %>" + } + }, + zip: { + dist: { + src: "<%= files.dist %>", + dest: "<%= files.dist %>.zip" + }, + cdn: { + src: "<%= files.cdn %>", + dest: "<%= files.cdn %>.zip" + }, + themes: { + src: "<%= files.themes %>", + dest: "<%= files.themes %>.zip" + } + }, + md5: { + dist: { + src: "dist/<%= files.dist %>", + dest: "dist/<%= files.dist %>/MANIFEST" + }, + cdn: { + src: "dist/<%= files.cdn %>", + dest: "dist/<%= files.cdn %>/MANIFEST" + }, + themes: { + src: "dist/<%= files.themes %>", + dest: "dist/<%= files.themes %>/MANIFEST" + } + }, + qunit: { + files: expandFiles( "tests/unit/**/*.html" ).filter(function( file ) { + // disabling everything that doesn't (quite) work with PhantomJS for now + // TODO except for all|index|test, try to include more as we go + return !( /(all|index|test|dialog|dialog_deprecated|tabs|tooltip)\.html$/ ).test( file ); + }) + }, + jshint: { + ui: { + options: { + jshintrc: "ui/.jshintrc" + }, + files: { + src: "ui/*.js" + } + }, + grunt: { + options: { + jshintrc: ".jshintrc" + }, + files: { + src: [ "Gruntfile.js", "build/**/*.js" ] + } + }, + tests: { + options: { + jshintrc: "tests/.jshintrc" + }, + files: { + src: "tests/unit/**/*.js" + } + } + }, + csslint: { + // TODO figure out what to check for, then fix and enable + base_theme: { + src: expandFiles( "themes/base/*.css" ).filter(function( file ) { + // TODO remove items from this list once rewritten + return !( /(button|datepicker|core|dialog|theme)\.css$/ ).test( file ); + }), + // TODO consider reenabling some of these rules + options: { + "adjoining-classes": false, + "import": false, + "outline-none": false, + // especially this one + "overqualified-elements": false, + "compatible-vendor-prefixes": false + } + } + } +}); + +grunt.registerTask( "default", [ "jshint", "csslint", "htmllint", "qunit" ] ); +grunt.registerTask( "sizer", [ "concat:ui", "uglify:main", "compare_size:all" ] ); +grunt.registerTask( "sizer_all", [ "concat:ui", "uglify", "compare_size" ] ); +grunt.registerTask( "build", [ "concat", "uglify", "cssmin", "copy:dist_units_images" ] ); +grunt.registerTask( "release", "clean build copy:dist copy:dist_min copy:dist_min_images copy:dist_css_min md5:dist zip:dist".split( " " ) ); +grunt.registerTask( "release_themes", "release generate_themes copy:themes md5:themes zip:themes".split( " " ) ); +grunt.registerTask( "release_cdn", "release_themes copy:cdn copy:cdn_min copy:cdn_i18n copy:cdn_i18n_min copy:cdn_themes md5:cdn zip:cdn".split( " " ) ); + +}; diff --git a/jquery-ui-1.10.2.custom/development-bundle/MIT-LICENSE.txt b/jquery-ui-1.10.2.custom/development-bundle/MIT-LICENSE.txt new file mode 100755 index 0000000..1c693e3 --- /dev/null +++ b/jquery-ui-1.10.2.custom/development-bundle/MIT-LICENSE.txt @@ -0,0 +1,26 @@ +Copyright 2013 jQuery Foundation and other contributors, +http://jqueryui.com/ + +This software consists of voluntary contributions made by many +individuals (AUTHORS.txt, http://jqueryui.com/about) For exact +contribution history, see the revision history and logs, available +at http://jquery-ui.googlecode.com/svn/ + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/jquery-ui-1.10.2.custom/development-bundle/README.md b/jquery-ui-1.10.2.custom/development-bundle/README.md new file mode 100755 index 0000000..e7ae90e --- /dev/null +++ b/jquery-ui-1.10.2.custom/development-bundle/README.md @@ -0,0 +1,99 @@ +[jQuery UI](http://jqueryui.com/) - Interactions and Widgets for the web +================================ + +jQuery UI provides interactions like Drag and Drop and widgets like Autocomplete, Tabs and Slider and makes these as easy to use as jQuery itself. + +If you want to use jQuery UI, go to [jqueryui.com](http://jqueryui.com) to get started. Or visit the [Using jQuery UI Forum](http://forum.jquery.com/using-jquery-ui) for discussions and questions. + +If you are interested in helping develop jQuery UI, you are in the right place. +To discuss development with team members and the community, visit the [Developing jQuery UI Forum](http://forum.jquery.com/developing-jquery-ui) or in #jquery on irc.freednode.net. + + +For contributors +--- + +If you want to help and provide a patch for a bugfix or new feature, please take +a few minutes and look at [our Getting Involved guide](http://wiki.jqueryui.com/w/page/35263114/Getting-Involved). +In particular check out the [Coding standards](http://wiki.jqueryui.com/w/page/12137737/Coding-standards) +and [Commit Message Style Guide](http://wiki.jqueryui.com/w/page/25941597/Commit-Message-Style-Guide). + +In general, fork the project, create a branch for a specific change and send a +pull request for that branch. Don't mix unrelated changes. You can use the commit +message as the description for the pull request. + + +Running the Unit Tests +--- + +Run the unit tests with a local server that supports PHP. No database is required. Pre-configured php local servers are available for Windows and Mac. Here are some options: + +- Windows: [WAMP download](http://www.wampserver.com/en/) +- Mac: [MAMP download](http://www.mamp.info/en/index.html) +- Linux: [Setting up LAMP](https://www.linux.com/learn/tutorials/288158-easy-lamp-server-installation) +- [Mongoose (most platforms)](http://code.google.com/p/mongoose/) + + +Building jQuery UI +--- + +jQuery UI uses the [grunt](http://github.com/cowboy/grunt) build system. Building jQuery UI requires node.js and a command line zip program. + +Install grunt. + +`npm install grunt -g` + +Clone the jQuery UI git repo. + +`git clone git://github.com/jquery/jquery-ui.git` + +`cd jquery-ui` + +Install node modules. + +`npm install` + +Run grunt. + +`grunt build` + +There are many other tasks that can be run through grunt. For a list of all tasks: + +`grunt --help` + + +For committers +--- + +When looking at pull requests, first check for [proper commit messages](http://wiki.jqueryui.com/w/page/12137724/Bug-Fixing-Guide). + +Do not merge pull requests directly through GitHub's interface. +Most pull requests are a single commit; cherry-picking will avoid creating a merge commit. +It's also common for contributors to make minor fixes in an additional one or two commits. +These should be squashed before landing in master. + +**Make sure the author has a valid name and email address associated with the commit.** + +Fetch the remote first: + + git fetch [their-fork.git] [their-branch] + +Then cherry-pick the commit(s): + + git cherry-pick [sha-of-commit] + +If you need to edit the commit message: + + git cherry-pick -e [sha-of-commit] + +If you need to edit the changes: + + git cherry-pick -n [sha-of-commit] + # make changes + git commit --author="[author-name-and-email]" + +If it should go to the stable brach, cherry-pick it to stable: + + git checkout 1-8-stable + git cherry-pick -x [sha-of-commit-from-master] + +*NOTE: Do not cherry-pick into 1-8-stable until you have pushed the commit from master upstream.* diff --git a/jquery-ui-1.10.2.custom/development-bundle/demos/demos.css b/jquery-ui-1.10.2.custom/development-bundle/demos/demos.css new file mode 100755 index 0000000..da9ad83 --- /dev/null +++ b/jquery-ui-1.10.2.custom/development-bundle/demos/demos.css @@ -0,0 +1,19 @@ +body { + font-size: 62.5%; + font-family: "Trebuchet MS", "Arial", "Helvetica", "Verdana", "sans-serif"; +} + +table { + font-size: 1em; +} + +.demo-description { + clear: both; + padding: 12px; + font-size: 1.3em; + line-height: 1.4em; +} + +.ui-draggable, .ui-droppable { + background-position: top; +} diff --git a/jquery-ui-1.10.2.custom/development-bundle/demos/images/calendar.gif b/jquery-ui-1.10.2.custom/development-bundle/demos/images/calendar.gif new file mode 100755 index 0000000000000000000000000000000000000000..d0abaa7c0b892e781b6f553453a0027efea014b9 GIT binary patch literal 269 zcmZ?wbhEHb6kyoJ#dt% zaYstuiRe5}O|8;NEA%ba6j)5k7TbN(gNwC&D)Y{1Cu2PhDy(ymnp7_1Ai(k{X>FbJ zg$yQ1aX#U+v{)u7c4kS5=DdO;0Y*k<=8BdGnYaWYcOkak83LIJ0`39}`h<8zSFc^O QT3n!+Z|k=0I}{nL0T`orxBvhE literal 0 HcmV?d00001 diff --git a/jquery-ui-1.10.2.custom/development-bundle/demos/images/demo-config-on-tile.gif b/jquery-ui-1.10.2.custom/development-bundle/demos/images/demo-config-on-tile.gif new file mode 100755 index 0000000000000000000000000000000000000000..a96b5bf33adfb9673d05a917b229771725998ef4 GIT binary patch literal 172 zcmZ?wbh9u|WMW8R_#(*gZL<821$y77DSw}({(Xk(&lMIwmzw;Tr~7lY&9Ak#-=-@5 zTyFMbk-^VZR^R7pf1j=SYn}a%#YPN7109e`kX;O{h6*ZuDVg&!R;^nzQ-$M_iR(t4 mHbGY&VV3sh!yhYn*jSnz76dTNyRf3fYi-o}8*fZl7_0%-_c%cS literal 0 HcmV?d00001 diff --git a/jquery-ui-1.10.2.custom/development-bundle/demos/images/demo-config-on.gif b/jquery-ui-1.10.2.custom/development-bundle/demos/images/demo-config-on.gif new file mode 100755 index 0000000000000000000000000000000000000000..e3b6d7c0f723648fcd5d7b23b470d4c58d4d9b13 GIT binary patch literal 335 zcmZ?wbh9u|9ihti+ z`}^$F&$R(RS2_MzY5!xf#ozl|f9@&%`*8b@g=YWW-Tbl4`tQrLKlhgY|NsBT0zC$b zfey$7kY60wN*tyXc<4y=pI9>Kp`^w9qon8M+tBFjE&7LNqe`~^&c hj7yd-aS~HzTfN$aL6m!=ySilew(UE1MmjQB0{}?lkB$HU literal 0 HcmV?d00001 diff --git a/jquery-ui-1.10.2.custom/development-bundle/demos/images/demo-spindown-closed.gif b/jquery-ui-1.10.2.custom/development-bundle/demos/images/demo-spindown-closed.gif new file mode 100755 index 0000000000000000000000000000000000000000..ad4bd3781b52d9681013c66b341a674ca6df1153 GIT binary patch literal 103 zcmZ?wbhEHbWMg1w_{_!7+uOTu-@bM0*3FwYueG&x*|KH#?%jL;{{6Xg=W1(f|NsBb tfC?0Uvam8Ra53nBgh6IFu!smKxQ6ahxiR|)quW;AhsPMh3j+ihtN~u^Bk%wK literal 0 HcmV?d00001 diff --git a/jquery-ui-1.10.2.custom/development-bundle/demos/images/demo-spindown-open.gif b/jquery-ui-1.10.2.custom/development-bundle/demos/images/demo-spindown-open.gif new file mode 100755 index 0000000000000000000000000000000000000000..e1c60aa558ebc4701d66d89c893b9185d92926ae GIT binary patch literal 105 zcmZ?wbhEHbWM^Pw*v!Rn?%cV3`}VC{w{G6Nd9AIj%a$#>ckkZ&_wRdqduwZJ|NsBb vfC?0UvM@3*a53nBgh6I7u!spPwVb$6c!g7Y5WAt|d?6L5pNhxD85yhrk)R_C literal 0 HcmV?d00001 diff --git a/jquery-ui-1.10.2.custom/development-bundle/demos/images/icon-docs-info.gif b/jquery-ui-1.10.2.custom/development-bundle/demos/images/icon-docs-info.gif new file mode 100755 index 0000000000000000000000000000000000000000..ea6d2bece713351eb4b8eef968c3891322093624 GIT binary patch literal 206 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 GZ~qHVLrA>< literal 0 HcmV?d00001 diff --git a/jquery-ui-1.10.2.custom/development-bundle/demos/slider/colorpicker.html b/jquery-ui-1.10.2.custom/development-bundle/demos/slider/colorpicker.html new file mode 100755 index 0000000..e579b0e --- /dev/null +++ b/jquery-ui-1.10.2.custom/development-bundle/demos/slider/colorpicker.html @@ -0,0 +1,87 @@ + + + + + jQuery UI Slider - Colorpicker + + + + + + + + + + + + +

      + + Simple Colorpicker +

      + +
      +
      +
      + +
      + +
      +

      Combine three sliders to create a simple RGB colorpicker.

      +
      + + diff --git a/jquery-ui-1.10.2.custom/development-bundle/demos/slider/default.html b/jquery-ui-1.10.2.custom/development-bundle/demos/slider/default.html new file mode 100755 index 0000000..17ee430 --- /dev/null +++ b/jquery-ui-1.10.2.custom/development-bundle/demos/slider/default.html @@ -0,0 +1,27 @@ + + + + + jQuery UI Slider - Default functionality + + + + + + + + + + + +
      + +
      +

      The basic slider is horizontal and has a single handle that can be moved with the mouse or by using the arrow keys.

      +
      + + diff --git a/jquery-ui-1.10.2.custom/development-bundle/demos/slider/hotelrooms.html b/jquery-ui-1.10.2.custom/development-bundle/demos/slider/hotelrooms.html new file mode 100755 index 0000000..0968dc4 --- /dev/null +++ b/jquery-ui-1.10.2.custom/development-bundle/demos/slider/hotelrooms.html @@ -0,0 +1,49 @@ + + + + + jQuery UI Slider - Slider bound to select + + + + + + + + + + + +
      + + +
      + +
      +

      How to bind a slider to an existing select element. The select stays visible to display the change. When the select is changed, the slider is updated, too.

      +
      + + diff --git a/jquery-ui-1.10.2.custom/development-bundle/demos/slider/index.html b/jquery-ui-1.10.2.custom/development-bundle/demos/slider/index.html new file mode 100755 index 0000000..2d05bb5 --- /dev/null +++ b/jquery-ui-1.10.2.custom/development-bundle/demos/slider/index.html @@ -0,0 +1,24 @@ + + + + + jQuery UI Slider Demos + + + +
      + + + diff --git a/jquery-ui-1.10.2.custom/development-bundle/demos/slider/multiple-vertical.html b/jquery-ui-1.10.2.custom/development-bundle/demos/slider/multiple-vertical.html new file mode 100755 index 0000000..6a0cf38 --- /dev/null +++ b/jquery-ui-1.10.2.custom/development-bundle/demos/slider/multiple-vertical.html @@ -0,0 +1,69 @@ + + + + + jQuery UI Slider - Multiple sliders + + + + + + + + + + + + +

      + + Master volume +

      + +
      + +

      + + Graphic EQ +

      + +
      + 88 + 77 + 55 + 33 + 40 + 45 + 70 +
      + +
      +

      Combine horizontal and vertical sliders, each with their own options, to create the UI for a music player.

      +
      + + diff --git a/jquery-ui-1.10.2.custom/development-bundle/demos/slider/range-vertical.html b/jquery-ui-1.10.2.custom/development-bundle/demos/slider/range-vertical.html new file mode 100755 index 0000000..a6f7f5a --- /dev/null +++ b/jquery-ui-1.10.2.custom/development-bundle/demos/slider/range-vertical.html @@ -0,0 +1,41 @@ + + + + + jQuery UI Slider - Vertical range slider + + + + + + + + + + + +

      + + +

      + +
      + +
      +

      Change the orientation of the range slider to vertical. Assign a height value via .height() or by setting the height through CSS, and set the orientation option to "vertical."

      +
      + + diff --git a/jquery-ui-1.10.2.custom/development-bundle/demos/slider/range.html b/jquery-ui-1.10.2.custom/development-bundle/demos/slider/range.html new file mode 100755 index 0000000..6a11338 --- /dev/null +++ b/jquery-ui-1.10.2.custom/development-bundle/demos/slider/range.html @@ -0,0 +1,42 @@ + + + + + jQuery UI Slider - Range slider + + + + + + + + + + + +

      + + +

      + +
      + +
      +

      Set the range option to true to capture a range of values with two drag handles. The space between the handles is filled with a different background color to indicate those values are selected.

      +
      + + diff --git a/jquery-ui-1.10.2.custom/development-bundle/demos/slider/rangemax.html b/jquery-ui-1.10.2.custom/development-bundle/demos/slider/rangemax.html new file mode 100755 index 0000000..ca1c260 --- /dev/null +++ b/jquery-ui-1.10.2.custom/development-bundle/demos/slider/rangemax.html @@ -0,0 +1,40 @@ + + + + + jQuery UI Slider - Range with fixed maximum + + + + + + + + + + + +

      + + +

      +
      + +
      +

      Fix the maximum value of the range slider so that the user can only select a minimum. Set the range option to "max."

      +
      + + diff --git a/jquery-ui-1.10.2.custom/development-bundle/demos/slider/rangemin.html b/jquery-ui-1.10.2.custom/development-bundle/demos/slider/rangemin.html new file mode 100755 index 0000000..661fb24 --- /dev/null +++ b/jquery-ui-1.10.2.custom/development-bundle/demos/slider/rangemin.html @@ -0,0 +1,41 @@ + + + + + jQuery UI Slider - Range with fixed minimum + + + + + + + + + + + +

      + + +

      + +
      + +
      +

      Fix the minimum value of the range slider so that the user can only select a maximum. Set the range option to "min."

      +
      + + diff --git a/jquery-ui-1.10.2.custom/development-bundle/demos/slider/side-scroll.html b/jquery-ui-1.10.2.custom/development-bundle/demos/slider/side-scroll.html new file mode 100755 index 0000000..346acb3 --- /dev/null +++ b/jquery-ui-1.10.2.custom/development-bundle/demos/slider/side-scroll.html @@ -0,0 +1,131 @@ + + + + + jQuery UI Slider - Slider scrollbar + + + + + + + + + + + + +
      +
      +
      1
      +
      2
      +
      3
      +
      4
      +
      5
      +
      6
      +
      7
      +
      8
      +
      9
      +
      10
      +
      11
      +
      12
      +
      13
      +
      14
      +
      15
      +
      16
      +
      17
      +
      18
      +
      19
      +
      20
      +
      +
      +
      +
      +
      + +
      +

      Use a slider to manipulate the positioning of content on the page. In this case, it acts as a scrollbar with the potential to capture values if needed.

      +
      + + diff --git a/jquery-ui-1.10.2.custom/development-bundle/demos/slider/slider-vertical.html b/jquery-ui-1.10.2.custom/development-bundle/demos/slider/slider-vertical.html new file mode 100755 index 0000000..2bea733 --- /dev/null +++ b/jquery-ui-1.10.2.custom/development-bundle/demos/slider/slider-vertical.html @@ -0,0 +1,42 @@ + + + + + jQuery UI Slider - Vertical slider + + + + + + + + + + + +

      + + +

      + +
      + +
      +

      Change the orientation of the slider to vertical. Assign a height value via .height() or by setting the height through CSS, and set the orientation option to "vertical."

      +
      + + diff --git a/jquery-ui-1.10.2.custom/development-bundle/demos/slider/steps.html b/jquery-ui-1.10.2.custom/development-bundle/demos/slider/steps.html new file mode 100755 index 0000000..821fdc7 --- /dev/null +++ b/jquery-ui-1.10.2.custom/development-bundle/demos/slider/steps.html @@ -0,0 +1,41 @@ + + + + + jQuery UI Slider - Snap to increments + + + + + + + + + + + +

      + + +

      + +
      + +
      +

      Increment slider values with the step option set to an integer, commonly a dividend of the slider's maximum value. The default increment is 1.

      +
      + + diff --git a/jquery-ui-1.10.2.custom/development-bundle/demos/widget/default.html b/jquery-ui-1.10.2.custom/development-bundle/demos/widget/default.html new file mode 100755 index 0000000..8931be4 --- /dev/null +++ b/jquery-ui-1.10.2.custom/development-bundle/demos/widget/default.html @@ -0,0 +1,178 @@ + + + + + jQuery UI Widget - Default functionality + + + + + + + + + + + + +
      +
      color me
      +
      color me
      +
      color me
      + + +
      + +
      +

      This demo shows a simple custom widget built using the widget factory (jquery.ui.widget.js).

      +

      The three boxes are initialized in different ways. Clicking them changes their background color. View source to see how it works, its heavily commented

      +
      + + diff --git a/jquery-ui-1.10.2.custom/development-bundle/demos/widget/index.html b/jquery-ui-1.10.2.custom/development-bundle/demos/widget/index.html new file mode 100755 index 0000000..d518b07 --- /dev/null +++ b/jquery-ui-1.10.2.custom/development-bundle/demos/widget/index.html @@ -0,0 +1,14 @@ + + + + + jQuery UI Widget Demo + + + + + + + diff --git a/jquery-ui-1.10.2.custom/development-bundle/docs/jQuery.widget.html b/jquery-ui-1.10.2.custom/development-bundle/docs/jQuery.widget.html new file mode 100755 index 0000000..bc32c36 --- /dev/null +++ b/jquery-ui-1.10.2.custom/development-bundle/docs/jQuery.widget.html @@ -0,0 +1,611 @@ + + + + + jQuery UI jQuery documentation + + + + + +
      +

      Contents:

      + +

      jQuery.widget( name [, base ], prototype )

      +
      +

      Description: Create stateful jQuery plugins using the same abstraction as all jQuery UI widgets.

      +
      • +

        jQuery.widget( name [, base ], prototype )

        +
          +
        • +
          name
          +
          Type: String +
          +
          The name of the widget to create, including the namespace.
          +
        • +
        • +
          base
          +
          Type: Function()
          +
          The base widget to inherit from. This must be a constructor that can be instantiated with the `new` keyword. Defaults to jQuery.Widget.
          +
        • +
        • +
          prototype
          +
          Type: PlainObject +
          +
          The object to use as a prototype for the widget.
          +
        • +
        +
      +
      +

      You can create new widgets from scratch, using just the $.Widget object as a base to inherit from, or you can explicitly inherit from existing jQuery UI or third-party widgets. Defining a widget with the same name as you inherit from even allows you to extend widgets in place.

      + +

      jQuery UI contains many widgets that maintain state and therefore have a slightly different usage pattern than typical jQuery plugins. All of jQuery UI's widgets use the same patterns, which is defined by the widget factory. So if you learn how to use one widget, then you'll know how to use all of them.

      + +

      Note: This documentation shows examples using the progressbar widget but the syntax is the same for every widget.

      + +

      Initialization

      + +

      In order to track the state of the widget, we must introduce a full life cycle for the widget. The life cycle starts when the widget is initalized. To initialize a widget, we simply call the plugin on one or more elements.

      + +
      $( "#elem" ).progressbar();
      + +

      This will initialize each element in the jQuery object, in this case the element with an id of "elem". Because we called the progressbar() method with no parameters, the widget is initialized with its default options. We can pass a set of options during initialization in order to override the default options.

      + +
      $( "#elem" ).progressbar({ value: 20 });
      + +

      We can pass as many or as few options as we want during initialization. Any options that we don't pass will just use their default values.

      + +

      The options are part of the widget's state, so we can set options after initialization as well. We'll see this later with the option method.

      + +

      Methods

      + +

      Now that the widget is initialized, we can query its state or perform actions on the widget. All actions after initialization take the form of a method call. To call a method on a widget, we pass the name of the method to the jQuery plugin. For example, to call the value() method on our progressbar widget, we would use:

      + +
      $( "#elem" ).progressbar( "value" );
      + +

      If the method accepts parameters, we can pass them after the method name. For example, to pass the parameter 40 to the value() method, we can use:

      + +
      $( "#elem" ).progressbar( "value", 40 );
      + +

      Just like other methods in jQuery, most widget methods return the jQuery object for chaining.

      + +
      $( "#elem" )
          .progressbar( "value", 90 )
          .addClass( "almost-done" );
      + +

      Each widget will have its own set of methods based on the functionality that the widget provides. However, there are a few methods that exist on all widgets, which are documented below.

      + +

      Events

      + +

      All widgets have events associated with their various behaviors to notify you when the state is changing. For most widgets, when the events are triggered, the names are prefixed with the widget name. For example, we can bind to progressbar's change event which is triggered whenever the value changes.

      + +
      $( "#elem" ).bind( "progressbarchange", function() {
          alert( "The value has changed!" );
      });
      + +

      Each event has a corresponding callback, which is exposed as an option. We can hook into progressbar's change callback instead of binding to the progressbarchange event, if we want to.

      + +
      $( "#elem" ).progressbar({
          change: function() {
              alert( "The value has changed!" );
          }
      });
      + +

      All widgets have a create event which is triggered upon instantiation.

      +
      +

      Base Widget

      +
      +

      Description: The base widget used by the widget factory.

      +

      QuickNav

      +

      Options

      + + + +
      + +
      +

      Events

      + +

      Options

      +

      disabledType: Boolean +

      +
      +Default: false +
      +
      Disables the jQuery.Widget if set to true.
      +Code examples:

      Initialize the jQuery.Widget with the disabled option specified:

      +
      $( ".selector" ).jQuery.Widget({ disabled: true });
      +

      Get or set the disabled option, after initialization:

      +
      // getter
      var disabled = $( ".selector" ).jQuery.Widget( "option", "disabled" );
       
      // setter
      $( ".selector" ).jQuery.Widget( "option", "disabled", true );
      +
      +
      +

      hideType: Boolean or Number or String or Object +

      +
      +Default: null +
      +
      If and how to animate the hiding of the element.
      +Multiple types supported:
        +
      • +Boolean: + When set to false, no animation will be used and the element will be hidden immediately. + When set to true, the element will fade out with the default duration and the default easing. +
      • +
      • +Number: + The element will fade out with the specified duration and the default easing. +
      • +
      • +String: + The element will be hidden using the specified effect. + The value can either be the name of a built-in jQuery animateion method, such as "slideUp", or the name of a jQuery UI effect, such as "fold". + In either case the effect will be used with the default duration and the default easing. +
      • +
      • +Object: If the value is an object, then effect, duration, and easing properties may be provided. If the effect property contains the name of a jQuery method, then that method will be used; otherwise it is assumed to be the name of a jQuery UI effect. When using a jQuery UI effect that supports additional settings, you may include those settings in the object and they will be passed to the effect. If duration or easing is omitted, then the default values will be used. If effect is omitted, then "fadeOut" will be used.
      • +
      +Code examples:

      Initialize the jQuery.Widget with the hide option specified:

      +
      $( ".selector" ).jQuery.Widget({ hide: { effect: "explode", duration: 1000 } });
      +

      Get or set the hide option, after initialization:

      +
      // getter
      var hide = $( ".selector" ).jQuery.Widget( "option", "hide" );
       
      // setter
      $( ".selector" ).jQuery.Widget( "option", "hide", { effect: "explode", duration: 1000 } );
      +
      +
      +

      showType: Boolean or Number or String or Object +

      +
      +Default: null +
      +
      If and how to animate the showing of the element.
      +Multiple types supported:
        +
      • +Boolean: + When set to false, no animation will be used and the element will be shown immediately. + When set to true, the element will fade in with the default duration and the default easing. +
      • +
      • +Number: + The element will fade in with the specified duration and the default easing. +
      • +
      • +String: + The element will be shown using the specified effect. + The value can either be the name of a built-in jQuery animateion method, such as "slideDown", or the name of a jQuery UI effect, such as "fold". + In either case the effect will be used with the default duration and the default easing. +
      • +
      • +Object: If the value is an object, then effect, duration, and easing properties may be provided. If the effect property contains the name of a jQuery method, then that method will be used; otherwise it is assumed to be the name of a jQuery UI effect. When using a jQuery UI effect that supports additional settings, you may include those settings in the object and they will be passed to the effect. If duration or easing is omitted, then the default values will be used. If effect is omitted, then "fadeIn" will be used.
      • +
      +Code examples:

      Initialize the jQuery.Widget with the show option specified:

      +
      $( ".selector" ).jQuery.Widget({ show: { effect: "blind", duration: 800 } });
      +

      Get or set the show option, after initialization:

      +
      // getter
      var show = $( ".selector" ).jQuery.Widget( "option", "show" );
       
      // setter
      $( ".selector" ).jQuery.Widget( "option", "show", { effect: "blind", duration: 800 } );
      +

      Methods

      +

      _create()

      +
      + The _create() method is the widget's constructor. + There are no parameters, but this.element and this.options are already set. +
      +
      • This method does not accept any arguments.
      +
      +
      +

      _delay( fn [, delay ] )Returns: Number +

      +
      + Invokes the provided function after a specified delay. Keeps this context correct. Essentially setTimeout(). +

      Returns the timeout ID for use with clearTimeout().

      +
      +
        +
      • +
        fn
        +
        Type: Function() or String +
        +
        The function to invoke. Can also be the name of a method on the widget.
        +
      • +
      • +
        delay
        +
        Type: Number +
        +
        The number of milliseconds to wait before invoking the function. Deafults to 0.
        +
      • +
      +
      +
      +

      _destroy()

      +
      + The public destroy() method cleans up all common data, events, etc. and then delegates out to _destroy() for custom, widget-specific, cleanup. +
      +
      • This method does not accept any arguments.
      +
      +
      +

      _focusable( element )

      +
      + Sets up element to apply the ui-state-focus class on focus. +

      The event handlers are automatically cleaned up on destroy.

      +
      +
      • +
        element
        +
        Type: jQuery +
        +
        The element(s) to apply the focusable behavior to.
        +
      +
      +
      +

      _getCreateEventData()Returns: Object +

      +
      + All widgets trigger the create event. By default, no data is provided in the event, but this method can return an object which will be passed as the create event's data. +
      +
      • This method does not accept any arguments.
      +
      +
      +

      _getCreateOptions()Returns: Object +

      +
      + This method allows the widget to define a custom method for defining options during instantiation. This user-provided options override the options returned by this method which override the default options. +
      +
      • This method does not accept any arguments.
      +
      +
      +

      _hide( element, option [, callback ] )

      +
      + Hides an element immediately, using built-in animation methods, or using custom effects. + See the hide option for possible option values. +
      +
        +
      • +
        element
        +
        Type: jQuery +
        +
        The element(s) to hide.
        +
      • +
      • +
        option
        +
        Type: Object +
        +
        The settings defining how to hide the element.
        +
      • +
      • +
        callback
        +
        Type: Function()
        +
        Callback to invoke after the element has been fully hidden.
        +
      • +
      +
      +
      +

      _hoverable( element )

      +
      + Sets up element to apply the ui-state-hover class on hover. +

      The event handlers are automatically cleaned up on destroy.

      +
      +
      • +
        element
        +
        Type: jQuery +
        +
        The element(s) to apply the hoverable behavior to.
        +
      +
      +
      +

      _init()

      +
      + Widgets have the concept of initialization that is distinct from creation. Any time the plugin is called with no arguments or with only an option hash, the widget is initialized; this includes when the widget is created. + +

      Note: Initialization should only be handled if there is a logical action to perform on successive calls to the widget with no arguments.

      +
      +
      • This method does not accept any arguments.
      +
      +
      +

      _off( element, eventName )

      +
      + Unbinds event handlers from the specified element(s). +
      +
        +
      • +
        element
        +
        Type: jQuery +
        +
        + The element(s) to unbind the event handlers from. Unlike the _on() method, the elements are required for _off(). +
        +
      • +
      • +
        eventName
        +
        Type: String +
        +
        One or more space-separated event types.
        +
      • +
      +
      +
      +

      _on( [element ], handlers )

      +
      + Binds event handlers to the specified element(s). Delegation is supported via selectors inside the event names, e.g., "click .foo". The _on() method provides several benefits of direct event binding: +
        +
      • Maintains proper this context inside the handlers.
      • +
      • Automatically handles disabled widgets: If the widget is disabled or the event occurs on an element with the ui-state-disabled class, the event handler is not invoked.
      • +
      • Event handlers are automatically namespaced and cleaned up on destroy.
      • +
      +
      +
        +
      • +
        element
        +
        Type: jQuery +
        +
        Which element(s) to bind the event handlers to. If no element is provided, this.element is used.
        +
      • +
      • +
        handlers
        +
        Type: Object +
        +
        + A map in which the string keys represent the event type and optional selector for delegation, and the values represent a handler function to be called for the event. +
        +
      • +
      +
      +
      +

      _setOption( key, value )

      +
      + Called from the _setOptions() method for each individual option. Widget state should be updated based on changes. +
      +
        +
      • +
        key
        +
        Type: String +
        +
        The name of the option to set.
        +
      • +
      • +
        value
        +
        Type: Object +
        +
        A value to set for the option.
        +
      • +
      +
      +
      +

      _setOptions( options )

      +
      + Called whenever the option() method is called, regardless of the form in which the option() method was called. +

      Overriding this is useful if you can defer processor-intensive changes for multiple option changes.

      +
      +
      • +
        options
        +
        Type: Object +
        +
        A map of option-value pairs to set.
        +
      +
      +
      +

      _show( element, option [, callback ] )

      +
      + Shows an element immediately, using built-in animation methods, or using custom effects. + See the show option for possible option values. +
      +
        +
      • +
        element
        +
        Type: jQuery +
        +
        The element(s) to show.
        +
      • +
      • +
        option
        +
        Type: Object +
        +
        The settings defining how to show the element.
        +
      • +
      • +
        callback
        +
        Type: Function()
        +
        Callback to invoke after the element has been fully shown.
        +
      • +
      +
      +
      +

      _super()

      +
      + Invokes the method of the same name from the parent widget, with any specified arguments. Essentially .call(). +
      +
      • This method does not accept any arguments.
      +
      +
      +

      _superApply( arguments )

      +
      + Invokes the method of the same name from the parent widget, with the array of arguments. Essentially .apply(). +
      +
      • +
        arguments
        +
        Type: Array +
        +
        Array of arguments to pass to the parent method.
        +
      +
      +
      +

      _trigger( type [, event ] [, data ] )

      +
      + Triggers an event and its associated callback. +

      The option with the name equal to type is invoked as the callback.

      +

      The event name is the widget name + type.

      +

      Note: When providing data, you must provide all three parameters. If there is no event to pass along, just pass null.

      +
      +
        +
      • +
        type
        +
        Type: String +
        +
        The type should match the name of a callback option. The full event type will be generated automatically.
        +
      • +
      • +
        event
        +
        Type: Event +
        +
        The original event that caused this event to occur; useful for providing context to the listener.
        +
      • +
      • +
        data
        +
        Type: Object +
        +
        A hash of data associated with the event.
        +
      • +
      +
      +
      +

      destroy()

      +
      + Removes the jQuery.Widget functionality completely. This will return the element back to its pre-init state. +
      +
      • This method does not accept any arguments.
      +
      +
      +

      disable()

      +
      + Disables the jQuery.Widget. +
      +
      • This method does not accept any arguments.
      +
      +
      +

      enable()

      +
      + Enables the jQuery.Widget. +
      +
      • This method does not accept any arguments.
      +
      +
      +
      +

      option( optionName )Returns: Object +

      +
      Gets the value currently associated with the specified optionName.
      +
      • +
        optionName
        +
        Type: String +
        +
        The name of the option to get.
        +
      +
      +Code examples:

      Invoke the method:

      +
      var isDisabled = $( ".selector" ).jQuery.Widget( "option", "disabled" );
      +
      +
      +
      +

      option()Returns: PlainObject +

      +
      Gets an object containing key/value pairs representing the current jQuery.Widget options hash.
      +
      • This method does not accept any arguments.
      +
      +Code examples:

      Invoke the method:

      +
      var options = $( ".selector" ).jQuery.Widget( "option" );
      +
      +
      +
      +

      option( optionName, value )

      +
      Sets the value of the jQuery.Widget option associated with the specified optionName.
      +
        +
      • +
        optionName
        +
        Type: String +
        +
        The name of the option to set.
        +
      • +
      • +
        value
        +
        Type: Object +
        +
        A value to set for the option.
        +
      • +
      +
      +Code examples:

      Invoke the method:

      +
      $( ".selector" ).jQuery.Widget( "option", "disabled", true );
      +
      +
      +
      +

      option( options )

      +
      Sets one or more options for the jQuery.Widget.
      +
      • +
        options
        +
        Type: Object +
        +
        A map of option-value pairs to set.
        +
      +
      +Code examples:

      Invoke the method:

      +
      $( ".selector" ).jQuery.Widget( "option", { disabled: true } );
      +
      +
      +
      +
      +

      widget()Returns: jQuery +

      +
      + Returns a jQuery object containing the original element or other relevant generated element. +
      +
      • This method does not accept any arguments.
      +

      Events

      +

      create( event, ui )Type: jQuery.Widgetcreate +

      +
      + Triggered when the jQuery.Widget is created. +
      +
        +
      • +
        event
        +
        Type: Event +
        +
        +
      • +
      • +
        ui
        +
        Type: Object +
        +
        +
      • +
      +
      +Code examples:

      Initialize the jQuery.Widget with the create callback specified:

      +
      $( ".selector" ).jQuery.Widget({
          create: function( event, ui ) {}
      });
      +

      Bind an event listener to the jQuery.Widgetcreate event:

      +
      $( ".selector" ).on( "jQuery.Widgetcreate", function( event, ui ) {} );
      +
      +
      +
      + + + diff --git a/jquery-ui-1.10.2.custom/development-bundle/docs/mouse.html b/jquery-ui-1.10.2.custom/development-bundle/docs/mouse.html new file mode 100755 index 0000000..043e643 --- /dev/null +++ b/jquery-ui-1.10.2.custom/development-bundle/docs/mouse.html @@ -0,0 +1,216 @@ + + + + + jQuery UI mouse documentation + + + + + +

      Mouse Interaction

      +
      +

      Description: The base interaction layer.

      +

      QuickNav

      +

      Options

      + + + +
      + +

      Events

      +

      Similar to jQuery.Widget, the mouse interaction is not intended to be used directly. It is purely a base layer for other widgets to inherit from. This page only documents what is added to jQuery.Widget, but it does include internal methods that are not intended to be overwritten. The intended public API is _mouseStart(), _mouseDrag(), _mouseStop(), and _mouseCapture().

      +
      +

      Options

      +

      cancelType: Selector +

      +
      +Default: "input,textarea,button,select,option" +
      +
      Prevents interactions from starting on specified elements.
      +Code examples:

      Initialize the jQuery.ui.mouse with the cancel option specified:

      +
      $( ".selector" ).jQuery.ui.mouse({ cancel: ".title" });
      +

      Get or set the cancel option, after initialization:

      +
      // getter
      var cancel = $( ".selector" ).jQuery.ui.mouse( "option", "cancel" );
       
      // setter
      $( ".selector" ).jQuery.ui.mouse( "option", "cancel", ".title" );
      +
      +
      +

      delayType: Number +

      +
      +Default: 0 +
      +
      Time in milliseconds after mousedown until the interaction should start. This option can be used to prevent unwanted interactions when clicking on an element.
      +Code examples:

      Initialize the jQuery.ui.mouse with the delay option specified:

      +
      $( ".selector" ).jQuery.ui.mouse({ delay: 300 });
      +

      Get or set the delay option, after initialization:

      +
      // getter
      var delay = $( ".selector" ).jQuery.ui.mouse( "option", "delay" );
       
      // setter
      $( ".selector" ).jQuery.ui.mouse( "option", "delay", 300 );
      +
      +
      +

      distanceType: Number +

      +
      +Default: 1 +
      +
      Distance in pixels after mousedown the mouse must move before the interaction should start. This option can be used to prevent unwanted interactions when clicking on an element.
      +Code examples:

      Initialize the jQuery.ui.mouse with the distance option specified:

      +
      $( ".selector" ).jQuery.ui.mouse({ distance: 10 });
      +

      Get or set the distance option, after initialization:

      +
      // getter
      var distance = $( ".selector" ).jQuery.ui.mouse( "option", "distance" );
       
      // setter
      $( ".selector" ).jQuery.ui.mouse( "option", "distance", 10 );
      +

      Methods

      +

      _mouseCapture()Returns: Boolean +

      +
      + Determines whether an interaction should start based on event target of the interaction. The default implementation always returns true. +
      +
      • This method does not accept any arguments.
      +
      +Code examples:

      Invoke the _mouseCapture method:

      +
      $( ".selector" ).jQuery.ui.mouse( "_mouseCapture" );
      +
      +
      +
      +

      _mouseDelayMet()Returns: Boolean +

      +
      + Determines whether the delay option has been met for the current interaction. +
      +
      • This method does not accept any arguments.
      +
      +Code examples:

      Invoke the _mouseDelayMet method:

      +
      $( ".selector" ).jQuery.ui.mouse( "_mouseDelayMet" );
      +
      +
      +
      +

      _mouseDestroy()

      +
      + Destroys the interaction event handlers. This must be called from the extending widget's _destroy() method. +
      +
      • This method does not accept any arguments.
      +
      +Code examples:

      Invoke the _mouseDestroy method:

      +
      $( ".selector" ).jQuery.ui.mouse( "_mouseDestroy" );
      +
      +
      +
      +

      _mouseDistanceMet()Returns: Boolean +

      +
      + Determines whether the distance option has been met for the current interaction. +
      +
      • This method does not accept any arguments.
      +
      +Code examples:

      Invoke the _mouseDistanceMet method:

      +
      $( ".selector" ).jQuery.ui.mouse( "_mouseDistanceMet" );
      +
      +
      +
      +

      _mouseDown()

      +
      + Handles the beginning of an interaction. Verifies that the event is associated with the primary mouse button and ensures that the delay and distance options are met prior to starting the interaction. When the interaction is ready to start, invokes the _mouseStart() method for the extending widget to handle. +
      +
      • This method does not accept any arguments.
      +
      +Code examples:

      Invoke the _mouseDown method:

      +
      $( ".selector" ).jQuery.ui.mouse( "_mouseDown" );
      +
      +
      +
      +

      _mouseDrag()

      +
      + The extending widget should implement a _mouseDrag() method to handle each movement of an interaction. This method will receive the mouse event associated with the movement. +
      +
      • This method does not accept any arguments.
      +
      +Code examples:

      Invoke the _mouseDrag method:

      +
      $( ".selector" ).jQuery.ui.mouse( "_mouseDrag" );
      +
      +
      +
      +

      _mouseInit()

      +
      + Initializes the interaction event handlers. This must be called from the extending widget's _create() method. +
      +
      • This method does not accept any arguments.
      +
      +Code examples:

      Invoke the _mouseInit method:

      +
      $( ".selector" ).jQuery.ui.mouse( "_mouseInit" );
      +
      +
      +
      +

      _mouseMove()

      +
      + Handles each movement of the interaction. Invokes the mouseDrag() method for the extending widget to handle. +
      +
      • This method does not accept any arguments.
      +
      +Code examples:

      Invoke the _mouseMove method:

      +
      $( ".selector" ).jQuery.ui.mouse( "_mouseMove" );
      +
      +
      +
      +

      _mouseStart()

      +
      + The extending widget should implement a _mouseStart() method to handle the beginning of an interaction. This method will receive the mouse event associated with the start of the interaction. +
      +
      • This method does not accept any arguments.
      +
      +Code examples:

      Invoke the _mouseStart method:

      +
      $( ".selector" ).jQuery.ui.mouse( "_mouseStart" );
      +
      +
      +
      +

      _mouseStop()

      +
      + The extending widget should implement a _mouseStop() method to handle the end of an interaction. This method will receive the mouse event associated with the end of the interaction. +
      +
      • This method does not accept any arguments.
      +
      +Code examples:

      Invoke the _mouseStop method:

      +
      $( ".selector" ).jQuery.ui.mouse( "_mouseStop" );
      +
      +
      +
      +

      _mouseUp()

      +
      + Handles the end of the interaction. Invokes the mouseStop() method for the extending widget to handle. +
      +
      • This method does not accept any arguments.
      +
      +Code examples:

      Invoke the _mouseUp method:

      +
      $( ".selector" ).jQuery.ui.mouse( "_mouseUp" );
      +
      +
      +
      + + + diff --git a/jquery-ui-1.10.2.custom/development-bundle/docs/slider.html b/jquery-ui-1.10.2.custom/development-bundle/docs/slider.html new file mode 100755 index 0000000..61c87ef --- /dev/null +++ b/jquery-ui-1.10.2.custom/development-bundle/docs/slider.html @@ -0,0 +1,586 @@ + + + + + jQuery UI slider documentation + + + + + +

      +Slider Widgetversion added: 1.5 +

      +
      +

      Description: Drag a handle to select a numeric value.

      +

      QuickNavExamples +

      + +
      +

      Events

      + + + + + +
      +

      The jQuery UI Slider plugin makes selected elements into sliders. There are various options such as multiple handles and ranges. The handle can be moved with the mouse or the arrow keys.

      + +

      The slider widget will create handle elements with the class ui-slider-handle on initialization. You can specify custom handle elements by creating and appending the elements and adding the ui-slider-handle class before initialization. It will only create the number of handles needed to match the length of value/values. For example, if you specify values: [ 1, 5, 18 ] and create one custom handle, the plugin will create the other two.

      +
      +

      Additional Notes:

      +
      • + This widget requires some functional CSS, otherwise it won't work. If you build a custom theme, use the widget's specific CSS file as a starting point. +
      +

      Options

      +

      animateType: Boolean or String or Number +

      +
      +Default: false +
      +
      Whether to slide the handle smoothly when the user clicks on the slider track. Also accepts any valid animation duration.
      +Multiple types supported:
        +
      • +Boolean: When set to true, the handle will animate with the default duration.
      • +
      • +String: The name of a speed, such as "fast" or "slow".
      • +
      • +Number: The duration of the animation, in milliseconds.
      • +
      +Code examples:

      Initialize the slider with the animate option specified:

      +
      $( ".selector" ).slider({ animate: "fast" });
      +

      Get or set the animate option, after initialization:

      +
      // getter
      var animate = $( ".selector" ).slider( "option", "animate" );
       
      // setter
      $( ".selector" ).slider( "option", "animate", "fast" );
      +
      +
      +

      disabledType: Boolean +

      +
      +Default: false +
      +
      Disables the slider if set to true.
      +Code examples:

      Initialize the slider with the disabled option specified:

      +
      $( ".selector" ).slider({ disabled: true });
      +

      Get or set the disabled option, after initialization:

      +
      // getter
      var disabled = $( ".selector" ).slider( "option", "disabled" );
       
      // setter
      $( ".selector" ).slider( "option", "disabled", true );
      +
      +
      +

      maxType: Number +

      +
      +Default: 100 +
      +
      The maximum value of the slider.
      +Code examples:

      Initialize the slider with the max option specified:

      +
      $( ".selector" ).slider({ max: 50 });
      +

      Get or set the max option, after initialization:

      +
      // getter
      var max = $( ".selector" ).slider( "option", "max" );
       
      // setter
      $( ".selector" ).slider( "option", "max", 50 );
      +
      +
      +

      minType: Number +

      +
      +Default: 0 +
      +
      The minimum value of the slider.
      +Code examples:

      Initialize the slider with the min option specified:

      +
      $( ".selector" ).slider({ min: 10 });
      +

      Get or set the min option, after initialization:

      +
      // getter
      var min = $( ".selector" ).slider( "option", "min" );
       
      // setter
      $( ".selector" ).slider( "option", "min", 10 );
      +
      +
      +

      orientationType: String +

      +
      +Default: "horizontal" +
      +
      Determines whether the slider handles move horizontally (min on left, max on right) or vertically (min on bottom, max on top). Possible values: "horizontal", "vertical".
      +Code examples:

      Initialize the slider with the orientation option specified:

      +
      $( ".selector" ).slider({ orientation: "vertical" });
      +

      Get or set the orientation option, after initialization:

      +
      // getter
      var orientation = $( ".selector" ).slider( "option", "orientation" );
       
      // setter
      $( ".selector" ).slider( "option", "orientation", "vertical" );
      +
      +
      +

      rangeType: Boolean or String +

      +
      +Default: false +
      +
      Whether the slider represents a range.
      +Multiple types supported:
        +
      • +Boolean: If set to true, the slider will detect if you have two handles and create a stylable range element between these two.
      • +
      • +String: Either "min" or "max". A min range goes from the slider min to one handle. A max range goes from one handle to the slider max.
      • +
      +Code examples:

      Initialize the slider with the range option specified:

      +
      $( ".selector" ).slider({ range: true });
      +

      Get or set the range option, after initialization:

      +
      // getter
      var range = $( ".selector" ).slider( "option", "range" );
       
      // setter
      $( ".selector" ).slider( "option", "range", true );
      +
      +
      +

      stepType: Number +

      +
      +Default: 1 +
      +
      Determines the size or amount of each interval or step the slider takes between the min and max. The full specified value range of the slider (max - min) should be evenly divisible by the step.
      +Code examples:

      Initialize the slider with the step option specified:

      +
      $( ".selector" ).slider({ step: 5 });
      +

      Get or set the step option, after initialization:

      +
      // getter
      var step = $( ".selector" ).slider( "option", "step" );
       
      // setter
      $( ".selector" ).slider( "option", "step", 5 );
      +
      +
      +

      valueType: Number +

      +
      +Default: 0 +
      +
      Determines the value of the slider, if there's only one handle. If there is more than one handle, determines the value of the first handle.
      +Code examples:

      Initialize the slider with the value option specified:

      +
      $( ".selector" ).slider({ value: 10 });
      +

      Get or set the value option, after initialization:

      +
      // getter
      var value = $( ".selector" ).slider( "option", "value" );
       
      // setter
      $( ".selector" ).slider( "option", "value", 10 );
      +
      +
      +

      valuesType: Array +

      +
      +Default: null +
      +
      This option can be used to specify multiple handles. If the range option is set to true, the length of values should be 2.
      +Code examples:

      Initialize the slider with the values option specified:

      +
      $( ".selector" ).slider({ values: [ 10, 25 ] });
      +

      Get or set the values option, after initialization:

      +
      // getter
      var values = $( ".selector" ).slider( "option", "values" );
       
      // setter
      $( ".selector" ).slider( "option", "values", [ 10, 25 ] );
      +

      Methods

      +

      destroy()

      +
      + Removes the slider functionality completely. This will return the element back to its pre-init state. +
      +
      • This method does not accept any arguments.
      +
      +Code examples:

      Invoke the destroy method:

      +
      $( ".selector" ).slider( "destroy" );
      +
      +
      +
      +

      disable()

      +
      + Disables the slider. +
      +
      • This method does not accept any arguments.
      +
      +Code examples:

      Invoke the disable method:

      +
      $( ".selector" ).slider( "disable" );
      +
      +
      +
      +

      enable()

      +
      + Enables the slider. +
      +
      • This method does not accept any arguments.
      +
      +Code examples:

      Invoke the enable method:

      +
      $( ".selector" ).slider( "enable" );
      +
      +
      +
      +
      +

      option( optionName )Returns: Object +

      +
      Gets the value currently associated with the specified optionName.
      +
      • +
        optionName
        +
        Type: String +
        +
        The name of the option to get.
        +
      +
      +Code examples:

      Invoke the method:

      +
      var isDisabled = $( ".selector" ).slider( "option", "disabled" );
      +
      +
      +
      +

      option()Returns: PlainObject +

      +
      Gets an object containing key/value pairs representing the current slider options hash.
      +
      • This method does not accept any arguments.
      +
      +Code examples:

      Invoke the method:

      +
      var options = $( ".selector" ).slider( "option" );
      +
      +
      +
      +

      option( optionName, value )

      +
      Sets the value of the slider option associated with the specified optionName.
      +
        +
      • +
        optionName
        +
        Type: String +
        +
        The name of the option to set.
        +
      • +
      • +
        value
        +
        Type: Object +
        +
        A value to set for the option.
        +
      • +
      +
      +Code examples:

      Invoke the method:

      +
      $( ".selector" ).slider( "option", "disabled", true );
      +
      +
      +
      +

      option( options )

      +
      Sets one or more options for the slider.
      +
      • +
        options
        +
        Type: Object +
        +
        A map of option-value pairs to set.
        +
      +
      +Code examples:

      Invoke the method:

      +
      $( ".selector" ).slider( "option", { disabled: true } );
      +
      +
      +
      +
      +
      +

      value()Returns: Number +

      +
      Get the value of the slider.
      +
      • This method does not accept any arguments.
      +
      +Code examples:

      Invoke the method:

      +
      var selection = $( ".selector" ).slider( "value" );
      +
      +
      +
      +

      value( value )

      +
      Set the value of the slider.
      +
      • +
        value
        +
        Type: Number +
        +
        The value to set.
        +
      +
      +Code examples:

      Invoke the method:

      +
      $( ".selector" ).slider( "value", 55 );
      +
      +
      +
      +
      +
      +

      values()Returns: Array +

      +
      Get the value for all handles.
      +
      • This method does not accept any arguments.
      +
      +Code examples:

      Invoke the method:

      +
      var values = $( ".selector" ).slider( "values" );
      +
      +
      +
      +

      values( index )Returns: Number +

      +
      Get the value for the specified handle.
      +
      • +
        index
        +
        Type: Integer +
        +
        The zero-based index of the handle.
        +
      +
      +Code examples:

      Invoke the method:

      +
      var value = $( ".selector" ).slider( "values", 0 );
      +
      +
      +
      +

      values( index, value )

      +
      Set the value for the specified handle.
      +
        +
      • +
        index
        +
        Type: Integer +
        +
        The zero-based index of the handle.
        +
      • +
      • +
        value
        +
        Type: Number +
        +
        The value to set.
        +
      • +
      +
      +Code examples:

      Invoke the method:

      +
      $( ".selector" ).slider( "values", 0, 55 );
      +
      +
      +
      +

      values( values )

      +
      Set the value for all handles.
      +
      • +
        values
        +
        Type: Array +
        +
        The values to set.
        +
      +
      +Code examples:

      Invoke the method:

      +
      $( ".selector" ).slider( "values", [ 55, 105 ] );
      +
      +
      +
      +
      +

      widget()Returns: jQuery +

      +
      + Returns a jQuery object containing the slider. +
      +
      • This method does not accept any arguments.
      +
      +Code examples:

      Invoke the widget method:

      +
      var widget = $( ".selector" ).slider( "widget" );
      +
      +

      Events

      +

      change( event, ui )Type: slidechange +

      +
      Triggered after the user slides a handle, if the value has changed; or if the value is changed programmatically via the value method.
      +
        +
      • +
        event
        +
        Type: Event +
        +
        +
      • +
      • +
        ui
        +
        Type: Object +
        +
        +
          +
        • +
          handle
          +
          Type: jQuery +
          +
          The jQuery object representing the handle that was changed.
          +
        • +
        • +
          value
          +
          Type: Number +
          +
          The current value of the slider.
          +
        • +
        +
      • +
      +
      +Code examples:

      Initialize the slider with the change callback specified:

      +
      $( ".selector" ).slider({
          change: function( event, ui ) {}
      });
      +

      Bind an event listener to the slidechange event:

      +
      $( ".selector" ).on( "slidechange", function( event, ui ) {} );
      +
      +
      +
      +

      create( event, ui )Type: slidecreate +

      +
      + Triggered when the slider is created. +
      +
        +
      • +
        event
        +
        Type: Event +
        +
        +
      • +
      • +
        ui
        +
        Type: Object +
        +
        +
      • +
      +
      +Code examples:

      Initialize the slider with the create callback specified:

      +
      $( ".selector" ).slider({
          create: function( event, ui ) {}
      });
      +

      Bind an event listener to the slidecreate event:

      +
      $( ".selector" ).on( "slidecreate", function( event, ui ) {} );
      +
      +
      +
      +

      slide( event, ui )Type: slide +

      +
      Triggered on every mouse move during slide. The value provided in the event as ui.value represents the value that the handle will have as a result of the current movement. Canceling the event will prevent the handle from moving and the handle will continue to have its previous value.
      +
        +
      • +
        event
        +
        Type: Event +
        +
        +
      • +
      • +
        ui
        +
        Type: Object +
        +
        +
          +
        • +
          handle
          +
          Type: jQuery +
          +
          The jQuery object representing the handle being moved.
          +
        • +
        • +
          value
          +
          Type: Number +
          +
          The value that the handle will move to if the event is not canceled.
          +
        • +
        • +
          values
          +
          Type: Array +
          +
          An array of the current values of a multi-handled slider.
          +
        • +
        +
      • +
      +
      +Code examples:

      Initialize the slider with the slide callback specified:

      +
      $( ".selector" ).slider({
          slide: function( event, ui ) {}
      });
      +

      Bind an event listener to the slide event:

      +
      $( ".selector" ).on( "slide", function( event, ui ) {} );
      +
      +
      +
      +

      start( event, ui )Type: slidestart +

      +
      Triggered when the user starts sliding.
      +
        +
      • +
        event
        +
        Type: Event +
        +
        +
      • +
      • +
        ui
        +
        Type: Object +
        +
        +
          +
        • +
          handle
          +
          Type: jQuery +
          +
          The jQuery object representing the handle being moved.
          +
        • +
        • +
          value
          +
          Type: Number +
          +
          The current value of the slider.
          +
        • +
        +
      • +
      +
      +Code examples:

      Initialize the slider with the start callback specified:

      +
      $( ".selector" ).slider({
          start: function( event, ui ) {}
      });
      +

      Bind an event listener to the slidestart event:

      +
      $( ".selector" ).on( "slidestart", function( event, ui ) {} );
      +
      +
      +
      +

      stop( event, ui )Type: slidestop +

      +
      Triggered after the user slides a handle.
      +
        +
      • +
        event
        +
        Type: Event +
        +
        +
      • +
      • +
        ui
        +
        Type: Object +
        +
        +
          +
        • +
          handle
          +
          Type: jQuery +
          +
          The jQuery object representing the handle that was moved.
          +
        • +
        • +
          value
          +
          Type: Number +
          +
          The current value of the slider.
          +
        • +
        +
      • +
      +
      +Code examples:

      Initialize the slider with the stop callback specified:

      +
      $( ".selector" ).slider({
          stop: function( event, ui ) {}
      });
      +

      Bind an event listener to the slidestop event:

      +
      $( ".selector" ).on( "slidestop", function( event, ui ) {} );
      +
      +

      Example:

      +

      A simple jQuery UI Slider.

      +
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      <!doctype html>
      <html lang="en">
      <head>
          <meta charset="utf-8">
          <title>slider demo</title>
          <link rel="stylesheet" href="http://code.jquery.com/ui/1.9.2/themes/base/jquery-ui.css">
          <style>#slider { margin: 10px; }  </style>
          <script src="http://code.jquery.com/jquery-1.8.3.js"></script>
          <script src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script>
      </head>
      <body>
       
      <div id="slider"></div>
       
      <script>
      $( "#slider" ).slider();
      </script>
       
      </body>
      </html>
      +

      Demo:

      +
      +
      +
      + + + diff --git a/jquery-ui-1.10.2.custom/development-bundle/external/globalize.culture.de-DE.js b/jquery-ui-1.10.2.custom/development-bundle/external/globalize.culture.de-DE.js new file mode 100755 index 0000000..5466bd7 --- /dev/null +++ b/jquery-ui-1.10.2.custom/development-bundle/external/globalize.culture.de-DE.js @@ -0,0 +1,81 @@ +/* + * Globalize Culture de-DE + * + * http://github.com/jquery/globalize + * + * Copyright Software Freedom Conservancy, Inc. + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * This file was generated by the Globalize Culture Generator + * Translation: bugs found in this file need to be fixed in the generator + */ + +(function( window, undefined ) { + +var Globalize; + +if ( typeof require !== "undefined" + && typeof exports !== "undefined" + && typeof module !== "undefined" ) { + // Assume CommonJS + Globalize = require( "globalize" ); +} else { + // Global variable + Globalize = window.Globalize; +} + +Globalize.addCultureInfo( "de-DE", "default", { + name: "de-DE", + englishName: "German (Germany)", + nativeName: "Deutsch (Deutschland)", + language: "de", + numberFormat: { + ",": ".", + ".": ",", + NaN: "n. def.", + negativeInfinity: "-unendlich", + positiveInfinity: "+unendlich", + percent: { + pattern: ["-n%","n%"], + ",": ".", + ".": "," + }, + currency: { + pattern: ["-n $","n $"], + ",": ".", + ".": ",", + symbol: "€" + } + }, + calendars: { + standard: { + "/": ".", + firstDay: 1, + days: { + names: ["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"], + namesAbbr: ["So","Mo","Di","Mi","Do","Fr","Sa"], + namesShort: ["So","Mo","Di","Mi","Do","Fr","Sa"] + }, + months: { + names: ["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember",""], + namesAbbr: ["Jan","Feb","Mrz","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez",""] + }, + AM: null, + PM: null, + eras: [{"name":"n. Chr.","start":null,"offset":0}], + patterns: { + d: "dd.MM.yyyy", + D: "dddd, d. MMMM yyyy", + t: "HH:mm", + T: "HH:mm:ss", + f: "dddd, d. MMMM yyyy HH:mm", + F: "dddd, d. MMMM yyyy HH:mm:ss", + M: "dd MMMM", + Y: "MMMM yyyy" + } + } + } +}); + +}( this )); diff --git a/jquery-ui-1.10.2.custom/development-bundle/external/globalize.culture.ja-JP.js b/jquery-ui-1.10.2.custom/development-bundle/external/globalize.culture.ja-JP.js new file mode 100755 index 0000000..a9469d7 --- /dev/null +++ b/jquery-ui-1.10.2.custom/development-bundle/external/globalize.culture.ja-JP.js @@ -0,0 +1,100 @@ +/* + * Globalize Culture ja-JP + * + * http://github.com/jquery/globalize + * + * Copyright Software Freedom Conservancy, Inc. + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * This file was generated by the Globalize Culture Generator + * Translation: bugs found in this file need to be fixed in the generator + */ + +(function( window, undefined ) { + +var Globalize; + +if ( typeof require !== "undefined" + && typeof exports !== "undefined" + && typeof module !== "undefined" ) { + // Assume CommonJS + Globalize = require( "globalize" ); +} else { + // Global variable + Globalize = window.Globalize; +} + +Globalize.addCultureInfo( "ja-JP", "default", { + name: "ja-JP", + englishName: "Japanese (Japan)", + nativeName: "日本語 (日本)", + language: "ja", + numberFormat: { + NaN: "NaN (非数値)", + negativeInfinity: "-∞", + positiveInfinity: "+∞", + percent: { + pattern: ["-n%","n%"] + }, + currency: { + pattern: ["-$n","$n"], + decimals: 0, + symbol: "¥" + } + }, + calendars: { + standard: { + days: { + names: ["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"], + namesAbbr: ["日","月","火","水","木","金","土"], + namesShort: ["日","月","火","水","木","金","土"] + }, + months: { + names: ["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月",""], + namesAbbr: ["1","2","3","4","5","6","7","8","9","10","11","12",""] + }, + AM: ["午前","午前","午前"], + PM: ["午後","午後","午後"], + eras: [{"name":"西暦","start":null,"offset":0}], + patterns: { + d: "yyyy/MM/dd", + D: "yyyy'年'M'月'd'日'", + t: "H:mm", + T: "H:mm:ss", + f: "yyyy'年'M'月'd'日' H:mm", + F: "yyyy'年'M'月'd'日' H:mm:ss", + M: "M'月'd'日'", + Y: "yyyy'年'M'月'" + } + }, + Japanese: { + name: "Japanese", + days: { + names: ["日曜日","月曜日","火曜日","水曜日","木曜日","金曜日","土曜日"], + namesAbbr: ["日","月","火","水","木","金","土"], + namesShort: ["日","月","火","水","木","金","土"] + }, + months: { + names: ["1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月",""], + namesAbbr: ["1","2","3","4","5","6","7","8","9","10","11","12",""] + }, + AM: ["午前","午前","午前"], + PM: ["午後","午後","午後"], + eras: [{"name":"平成","start":null,"offset":1867},{"name":"昭和","start":-1812153600000,"offset":1911},{"name":"大正","start":-1357603200000,"offset":1925},{"name":"明治","start":60022080000,"offset":1988}], + twoDigitYearMax: 99, + patterns: { + d: "gg y/M/d", + D: "gg y'年'M'月'd'日'", + t: "H:mm", + T: "H:mm:ss", + f: "gg y'年'M'月'd'日' H:mm", + F: "gg y'年'M'月'd'日' H:mm:ss", + M: "M'月'd'日'", + Y: "gg y'年'M'月'" + } + } + } +}); + +}( this )); diff --git a/jquery-ui-1.10.2.custom/development-bundle/external/globalize.js b/jquery-ui-1.10.2.custom/development-bundle/external/globalize.js new file mode 100755 index 0000000..ebaca17 --- /dev/null +++ b/jquery-ui-1.10.2.custom/development-bundle/external/globalize.js @@ -0,0 +1,1573 @@ +/*! + * Globalize + * + * http://github.com/jquery/globalize + * + * Copyright Software Freedom Conservancy, Inc. + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + */ + +(function( window, undefined ) { + +var Globalize, + // private variables + regexHex, + regexInfinity, + regexParseFloat, + regexTrim, + // private JavaScript utility functions + arrayIndexOf, + endsWith, + extend, + isArray, + isFunction, + isObject, + startsWith, + trim, + truncate, + zeroPad, + // private Globalization utility functions + appendPreOrPostMatch, + expandFormat, + formatDate, + formatNumber, + getTokenRegExp, + getEra, + getEraYear, + parseExact, + parseNegativePattern; + +// Global variable (Globalize) or CommonJS module (globalize) +Globalize = function( cultureSelector ) { + return new Globalize.prototype.init( cultureSelector ); +}; + +if ( typeof require !== "undefined" + && typeof exports !== "undefined" + && typeof module !== "undefined" ) { + // Assume CommonJS + module.exports = Globalize; +} else { + // Export as global variable + window.Globalize = Globalize; +} + +Globalize.cultures = {}; + +Globalize.prototype = { + constructor: Globalize, + init: function( cultureSelector ) { + this.cultures = Globalize.cultures; + this.cultureSelector = cultureSelector; + + return this; + } +}; +Globalize.prototype.init.prototype = Globalize.prototype; + +// 1. When defining a culture, all fields are required except the ones stated as optional. +// 2. Each culture should have a ".calendars" object with at least one calendar named "standard" +// which serves as the default calendar in use by that culture. +// 3. Each culture should have a ".calendar" object which is the current calendar being used, +// it may be dynamically changed at any time to one of the calendars in ".calendars". +Globalize.cultures[ "default" ] = { + // A unique name for the culture in the form - + name: "en", + // the name of the culture in the english language + englishName: "English", + // the name of the culture in its own language + nativeName: "English", + // whether the culture uses right-to-left text + isRTL: false, + // "language" is used for so-called "specific" cultures. + // For example, the culture "es-CL" means "Spanish, in Chili". + // It represents the Spanish-speaking culture as it is in Chili, + // which might have different formatting rules or even translations + // than Spanish in Spain. A "neutral" culture is one that is not + // specific to a region. For example, the culture "es" is the generic + // Spanish culture, which may be a more generalized version of the language + // that may or may not be what a specific culture expects. + // For a specific culture like "es-CL", the "language" field refers to the + // neutral, generic culture information for the language it is using. + // This is not always a simple matter of the string before the dash. + // For example, the "zh-Hans" culture is netural (Simplified Chinese). + // And the "zh-SG" culture is Simplified Chinese in Singapore, whose lanugage + // field is "zh-CHS", not "zh". + // This field should be used to navigate from a specific culture to it's + // more general, neutral culture. If a culture is already as general as it + // can get, the language may refer to itself. + language: "en", + // numberFormat defines general number formatting rules, like the digits in + // each grouping, the group separator, and how negative numbers are displayed. + numberFormat: { + // [negativePattern] + // Note, numberFormat.pattern has no "positivePattern" unlike percent and currency, + // but is still defined as an array for consistency with them. + // negativePattern: one of "(n)|-n|- n|n-|n -" + pattern: [ "-n" ], + // number of decimal places normally shown + decimals: 2, + // string that separates number groups, as in 1,000,000 + ",": ",", + // string that separates a number from the fractional portion, as in 1.99 + ".": ".", + // array of numbers indicating the size of each number group. + // TODO: more detailed description and example + groupSizes: [ 3 ], + // symbol used for positive numbers + "+": "+", + // symbol used for negative numbers + "-": "-", + // symbol used for NaN (Not-A-Number) + NaN: "NaN", + // symbol used for Negative Infinity + negativeInfinity: "-Infinity", + // symbol used for Positive Infinity + positiveInfinity: "Infinity", + percent: { + // [negativePattern, positivePattern] + // negativePattern: one of "-n %|-n%|-%n|%-n|%n-|n-%|n%-|-% n|n %-|% n-|% -n|n- %" + // positivePattern: one of "n %|n%|%n|% n" + pattern: [ "-n %", "n %" ], + // number of decimal places normally shown + decimals: 2, + // array of numbers indicating the size of each number group. + // TODO: more detailed description and example + groupSizes: [ 3 ], + // string that separates number groups, as in 1,000,000 + ",": ",", + // string that separates a number from the fractional portion, as in 1.99 + ".": ".", + // symbol used to represent a percentage + symbol: "%" + }, + currency: { + // [negativePattern, positivePattern] + // negativePattern: one of "($n)|-$n|$-n|$n-|(n$)|-n$|n-$|n$-|-n $|-$ n|n $-|$ n-|$ -n|n- $|($ n)|(n $)" + // positivePattern: one of "$n|n$|$ n|n $" + pattern: [ "($n)", "$n" ], + // number of decimal places normally shown + decimals: 2, + // array of numbers indicating the size of each number group. + // TODO: more detailed description and example + groupSizes: [ 3 ], + // string that separates number groups, as in 1,000,000 + ",": ",", + // string that separates a number from the fractional portion, as in 1.99 + ".": ".", + // symbol used to represent currency + symbol: "$" + } + }, + // calendars defines all the possible calendars used by this culture. + // There should be at least one defined with name "standard", and is the default + // calendar used by the culture. + // A calendar contains information about how dates are formatted, information about + // the calendar's eras, a standard set of the date formats, + // translations for day and month names, and if the calendar is not based on the Gregorian + // calendar, conversion functions to and from the Gregorian calendar. + calendars: { + standard: { + // name that identifies the type of calendar this is + name: "Gregorian_USEnglish", + // separator of parts of a date (e.g. "/" in 11/05/1955) + "/": "/", + // separator of parts of a time (e.g. ":" in 05:44 PM) + ":": ":", + // the first day of the week (0 = Sunday, 1 = Monday, etc) + firstDay: 0, + days: { + // full day names + names: [ "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" ], + // abbreviated day names + namesAbbr: [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ], + // shortest day names + namesShort: [ "Su", "Mo", "Tu", "We", "Th", "Fr", "Sa" ] + }, + months: { + // full month names (13 months for lunar calendards -- 13th month should be "" if not lunar) + names: [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December", "" ], + // abbreviated month names + namesAbbr: [ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", "" ] + }, + // AM and PM designators in one of these forms: + // The usual view, and the upper and lower case versions + // [ standard, lowercase, uppercase ] + // The culture does not use AM or PM (likely all standard date formats use 24 hour time) + // null + AM: [ "AM", "am", "AM" ], + PM: [ "PM", "pm", "PM" ], + eras: [ + // eras in reverse chronological order. + // name: the name of the era in this culture (e.g. A.D., C.E.) + // start: when the era starts in ticks (gregorian, gmt), null if it is the earliest supported era. + // offset: offset in years from gregorian calendar + { + "name": "A.D.", + "start": null, + "offset": 0 + } + ], + // when a two digit year is given, it will never be parsed as a four digit + // year greater than this year (in the appropriate era for the culture) + // Set it as a full year (e.g. 2029) or use an offset format starting from + // the current year: "+19" would correspond to 2029 if the current year 2010. + twoDigitYearMax: 2029, + // set of predefined date and time patterns used by the culture + // these represent the format someone in this culture would expect + // to see given the portions of the date that are shown. + patterns: { + // short date pattern + d: "M/d/yyyy", + // long date pattern + D: "dddd, MMMM dd, yyyy", + // short time pattern + t: "h:mm tt", + // long time pattern + T: "h:mm:ss tt", + // long date, short time pattern + f: "dddd, MMMM dd, yyyy h:mm tt", + // long date, long time pattern + F: "dddd, MMMM dd, yyyy h:mm:ss tt", + // month/day pattern + M: "MMMM dd", + // month/year pattern + Y: "yyyy MMMM", + // S is a sortable format that does not vary by culture + S: "yyyy\u0027-\u0027MM\u0027-\u0027dd\u0027T\u0027HH\u0027:\u0027mm\u0027:\u0027ss" + } + // optional fields for each calendar: + /* + monthsGenitive: + Same as months but used when the day preceeds the month. + Omit if the culture has no genitive distinction in month names. + For an explaination of genitive months, see http://blogs.msdn.com/michkap/archive/2004/12/25/332259.aspx + convert: + Allows for the support of non-gregorian based calendars. This convert object is used to + to convert a date to and from a gregorian calendar date to handle parsing and formatting. + The two functions: + fromGregorian( date ) + Given the date as a parameter, return an array with parts [ year, month, day ] + corresponding to the non-gregorian based year, month, and day for the calendar. + toGregorian( year, month, day ) + Given the non-gregorian year, month, and day, return a new Date() object + set to the corresponding date in the gregorian calendar. + */ + } + }, + // For localized strings + messages: {} +}; + +Globalize.cultures[ "default" ].calendar = Globalize.cultures[ "default" ].calendars.standard; + +Globalize.cultures[ "en" ] = Globalize.cultures[ "default" ]; + +Globalize.cultureSelector = "en"; + +// +// private variables +// + +regexHex = /^0x[a-f0-9]+$/i; +regexInfinity = /^[+-]?infinity$/i; +regexParseFloat = /^[+-]?\d*\.?\d*(e[+-]?\d+)?$/; +regexTrim = /^\s+|\s+$/g; + +// +// private JavaScript utility functions +// + +arrayIndexOf = function( array, item ) { + if ( array.indexOf ) { + return array.indexOf( item ); + } + for ( var i = 0, length = array.length; i < length; i++ ) { + if ( array[i] === item ) { + return i; + } + } + return -1; +}; + +endsWith = function( value, pattern ) { + return value.substr( value.length - pattern.length ) === pattern; +}; + +extend = function( deep ) { + var options, name, src, copy, copyIsArray, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !isFunction(target) ) { + target = {}; + } + + for ( ; i < length; i++ ) { + // Only deal with non-null/undefined values + if ( (options = arguments[ i ]) != null ) { + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( isObject(copy) || (copyIsArray = isArray(copy)) ) ) { + if ( copyIsArray ) { + copyIsArray = false; + clone = src && isArray(src) ? src : []; + + } else { + clone = src && isObject(src) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +isArray = Array.isArray || function( obj ) { + return Object.prototype.toString.call( obj ) === "[object Array]"; +}; + +isFunction = function( obj ) { + return Object.prototype.toString.call( obj ) === "[object Function]" +} + +isObject = function( obj ) { + return Object.prototype.toString.call( obj ) === "[object Object]"; +}; + +startsWith = function( value, pattern ) { + return value.indexOf( pattern ) === 0; +}; + +trim = function( value ) { + return ( value + "" ).replace( regexTrim, "" ); +}; + +truncate = function( value ) { + return value | 0; +}; + +zeroPad = function( str, count, left ) { + var l; + for ( l = str.length; l < count; l += 1 ) { + str = ( left ? ("0" + str) : (str + "0") ); + } + return str; +}; + +// +// private Globalization utility functions +// + +appendPreOrPostMatch = function( preMatch, strings ) { + // appends pre- and post- token match strings while removing escaped characters. + // Returns a single quote count which is used to determine if the token occurs + // in a string literal. + var quoteCount = 0, + escaped = false; + for ( var i = 0, il = preMatch.length; i < il; i++ ) { + var c = preMatch.charAt( i ); + switch ( c ) { + case "\'": + if ( escaped ) { + strings.push( "\'" ); + } + else { + quoteCount++; + } + escaped = false; + break; + case "\\": + if ( escaped ) { + strings.push( "\\" ); + } + escaped = !escaped; + break; + default: + strings.push( c ); + escaped = false; + break; + } + } + return quoteCount; +}; + +expandFormat = function( cal, format ) { + // expands unspecified or single character date formats into the full pattern. + format = format || "F"; + var pattern, + patterns = cal.patterns, + len = format.length; + if ( len === 1 ) { + pattern = patterns[ format ]; + if ( !pattern ) { + throw "Invalid date format string \'" + format + "\'."; + } + format = pattern; + } + else if ( len === 2 && format.charAt(0) === "%" ) { + // %X escape format -- intended as a custom format string that is only one character, not a built-in format. + format = format.charAt( 1 ); + } + return format; +}; + +formatDate = function( value, format, culture ) { + var cal = culture.calendar, + convert = cal.convert; + + if ( !format || !format.length || format === "i" ) { + var ret; + if ( culture && culture.name.length ) { + if ( convert ) { + // non-gregorian calendar, so we cannot use built-in toLocaleString() + ret = formatDate( value, cal.patterns.F, culture ); + } + else { + var eraDate = new Date( value.getTime() ), + era = getEra( value, cal.eras ); + eraDate.setFullYear( getEraYear(value, cal, era) ); + ret = eraDate.toLocaleString(); + } + } + else { + ret = value.toString(); + } + return ret; + } + + var eras = cal.eras, + sortable = format === "s"; + format = expandFormat( cal, format ); + + // Start with an empty string + ret = []; + var hour, + zeros = [ "0", "00", "000" ], + foundDay, + checkedDay, + dayPartRegExp = /([^d]|^)(d|dd)([^d]|$)/g, + quoteCount = 0, + tokenRegExp = getTokenRegExp(), + converted; + + function padZeros( num, c ) { + var r, s = num + ""; + if ( c > 1 && s.length < c ) { + r = ( zeros[c - 2] + s); + return r.substr( r.length - c, c ); + } + else { + r = s; + } + return r; + } + + function hasDay() { + if ( foundDay || checkedDay ) { + return foundDay; + } + foundDay = dayPartRegExp.test( format ); + checkedDay = true; + return foundDay; + } + + function getPart( date, part ) { + if ( converted ) { + return converted[ part ]; + } + switch ( part ) { + case 0: return date.getFullYear(); + case 1: return date.getMonth(); + case 2: return date.getDate(); + } + } + + if ( !sortable && convert ) { + converted = convert.fromGregorian( value ); + } + + for ( ; ; ) { + // Save the current index + var index = tokenRegExp.lastIndex, + // Look for the next pattern + ar = tokenRegExp.exec( format ); + + // Append the text before the pattern (or the end of the string if not found) + var preMatch = format.slice( index, ar ? ar.index : format.length ); + quoteCount += appendPreOrPostMatch( preMatch, ret ); + + if ( !ar ) { + break; + } + + // do not replace any matches that occur inside a string literal. + if ( quoteCount % 2 ) { + ret.push( ar[0] ); + continue; + } + + var current = ar[ 0 ], + clength = current.length; + + switch ( current ) { + case "ddd": + //Day of the week, as a three-letter abbreviation + case "dddd": + // Day of the week, using the full name + var names = ( clength === 3 ) ? cal.days.namesAbbr : cal.days.names; + ret.push( names[value.getDay()] ); + break; + case "d": + // Day of month, without leading zero for single-digit days + case "dd": + // Day of month, with leading zero for single-digit days + foundDay = true; + ret.push( + padZeros( getPart(value, 2), clength ) + ); + break; + case "MMM": + // Month, as a three-letter abbreviation + case "MMMM": + // Month, using the full name + var part = getPart( value, 1 ); + ret.push( + ( cal.monthsGenitive && hasDay() ) + ? + cal.monthsGenitive[ clength === 3 ? "namesAbbr" : "names" ][ part ] + : + cal.months[ clength === 3 ? "namesAbbr" : "names" ][ part ] + ); + break; + case "M": + // Month, as digits, with no leading zero for single-digit months + case "MM": + // Month, as digits, with leading zero for single-digit months + ret.push( + padZeros( getPart(value, 1) + 1, clength ) + ); + break; + case "y": + // Year, as two digits, but with no leading zero for years less than 10 + case "yy": + // Year, as two digits, with leading zero for years less than 10 + case "yyyy": + // Year represented by four full digits + part = converted ? converted[ 0 ] : getEraYear( value, cal, getEra(value, eras), sortable ); + if ( clength < 4 ) { + part = part % 100; + } + ret.push( + padZeros( part, clength ) + ); + break; + case "h": + // Hours with no leading zero for single-digit hours, using 12-hour clock + case "hh": + // Hours with leading zero for single-digit hours, using 12-hour clock + hour = value.getHours() % 12; + if ( hour === 0 ) hour = 12; + ret.push( + padZeros( hour, clength ) + ); + break; + case "H": + // Hours with no leading zero for single-digit hours, using 24-hour clock + case "HH": + // Hours with leading zero for single-digit hours, using 24-hour clock + ret.push( + padZeros( value.getHours(), clength ) + ); + break; + case "m": + // Minutes with no leading zero for single-digit minutes + case "mm": + // Minutes with leading zero for single-digit minutes + ret.push( + padZeros( value.getMinutes(), clength ) + ); + break; + case "s": + // Seconds with no leading zero for single-digit seconds + case "ss": + // Seconds with leading zero for single-digit seconds + ret.push( + padZeros( value.getSeconds(), clength ) + ); + break; + case "t": + // One character am/pm indicator ("a" or "p") + case "tt": + // Multicharacter am/pm indicator + part = value.getHours() < 12 ? ( cal.AM ? cal.AM[0] : " " ) : ( cal.PM ? cal.PM[0] : " " ); + ret.push( clength === 1 ? part.charAt(0) : part ); + break; + case "f": + // Deciseconds + case "ff": + // Centiseconds + case "fff": + // Milliseconds + ret.push( + padZeros( value.getMilliseconds(), 3 ).substr( 0, clength ) + ); + break; + case "z": + // Time zone offset, no leading zero + case "zz": + // Time zone offset with leading zero + hour = value.getTimezoneOffset() / 60; + ret.push( + ( hour <= 0 ? "+" : "-" ) + padZeros( Math.floor(Math.abs(hour)), clength ) + ); + break; + case "zzz": + // Time zone offset with leading zero + hour = value.getTimezoneOffset() / 60; + ret.push( + ( hour <= 0 ? "+" : "-" ) + padZeros( Math.floor(Math.abs(hour)), 2 ) + // Hard coded ":" separator, rather than using cal.TimeSeparator + // Repeated here for consistency, plus ":" was already assumed in date parsing. + + ":" + padZeros( Math.abs(value.getTimezoneOffset() % 60), 2 ) + ); + break; + case "g": + case "gg": + if ( cal.eras ) { + ret.push( + cal.eras[ getEra(value, eras) ].name + ); + } + break; + case "/": + ret.push( cal["/"] ); + break; + default: + throw "Invalid date format pattern \'" + current + "\'."; + break; + } + } + return ret.join( "" ); +}; + +// formatNumber +(function() { + var expandNumber; + + expandNumber = function( number, precision, formatInfo ) { + var groupSizes = formatInfo.groupSizes, + curSize = groupSizes[ 0 ], + curGroupIndex = 1, + factor = Math.pow( 10, precision ), + rounded = Math.round( number * factor ) / factor; + + if ( !isFinite(rounded) ) { + rounded = number; + } + number = rounded; + + var numberString = number+"", + right = "", + split = numberString.split( /e/i ), + exponent = split.length > 1 ? parseInt( split[1], 10 ) : 0; + numberString = split[ 0 ]; + split = numberString.split( "." ); + numberString = split[ 0 ]; + right = split.length > 1 ? split[ 1 ] : ""; + + var l; + if ( exponent > 0 ) { + right = zeroPad( right, exponent, false ); + numberString += right.slice( 0, exponent ); + right = right.substr( exponent ); + } + else if ( exponent < 0 ) { + exponent = -exponent; + numberString = zeroPad( numberString, exponent + 1 ); + right = numberString.slice( -exponent, numberString.length ) + right; + numberString = numberString.slice( 0, -exponent ); + } + + if ( precision > 0 ) { + right = formatInfo[ "." ] + + ( (right.length > precision) ? right.slice(0, precision) : zeroPad(right, precision) ); + } + else { + right = ""; + } + + var stringIndex = numberString.length - 1, + sep = formatInfo[ "," ], + ret = ""; + + while ( stringIndex >= 0 ) { + if ( curSize === 0 || curSize > stringIndex ) { + return numberString.slice( 0, stringIndex + 1 ) + ( ret.length ? (sep + ret + right) : right ); + } + ret = numberString.slice( stringIndex - curSize + 1, stringIndex + 1 ) + ( ret.length ? (sep + ret) : "" ); + + stringIndex -= curSize; + + if ( curGroupIndex < groupSizes.length ) { + curSize = groupSizes[ curGroupIndex ]; + curGroupIndex++; + } + } + + return numberString.slice( 0, stringIndex + 1 ) + sep + ret + right; + }; + + formatNumber = function( value, format, culture ) { + if ( !isFinite(value) ) { + if ( value === Infinity ) { + return culture.numberFormat.positiveInfinity; + } + if ( value === -Infinity ) { + return culture.numberFormat.negativeInfinity; + } + return culture.numberFormat.NaN; + } + if ( !format || format === "i" ) { + return culture.name.length ? value.toLocaleString() : value.toString(); + } + format = format || "D"; + + var nf = culture.numberFormat, + number = Math.abs( value ), + precision = -1, + pattern; + if ( format.length > 1 ) precision = parseInt( format.slice(1), 10 ); + + var current = format.charAt( 0 ).toUpperCase(), + formatInfo; + + switch ( current ) { + case "D": + pattern = "n"; + number = truncate( number ); + if ( precision !== -1 ) { + number = zeroPad( "" + number, precision, true ); + } + if ( value < 0 ) number = "-" + number; + break; + case "N": + formatInfo = nf; + // fall through + case "C": + formatInfo = formatInfo || nf.currency; + // fall through + case "P": + formatInfo = formatInfo || nf.percent; + pattern = value < 0 ? formatInfo.pattern[ 0 ] : ( formatInfo.pattern[1] || "n" ); + if ( precision === -1 ) precision = formatInfo.decimals; + number = expandNumber( number * (current === "P" ? 100 : 1), precision, formatInfo ); + break; + default: + throw "Bad number format specifier: " + current; + } + + var patternParts = /n|\$|-|%/g, + ret = ""; + for ( ; ; ) { + var index = patternParts.lastIndex, + ar = patternParts.exec( pattern ); + + ret += pattern.slice( index, ar ? ar.index : pattern.length ); + + if ( !ar ) { + break; + } + + switch ( ar[0] ) { + case "n": + ret += number; + break; + case "$": + ret += nf.currency.symbol; + break; + case "-": + // don't make 0 negative + if ( /[1-9]/.test(number) ) { + ret += nf[ "-" ]; + } + break; + case "%": + ret += nf.percent.symbol; + break; + } + } + + return ret; + }; + +}()); + +getTokenRegExp = function() { + // regular expression for matching date and time tokens in format strings. + return /\/|dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|y|hh|h|HH|H|mm|m|ss|s|tt|t|fff|ff|f|zzz|zz|z|gg|g/g; +}; + +getEra = function( date, eras ) { + if ( !eras ) return 0; + var start, ticks = date.getTime(); + for ( var i = 0, l = eras.length; i < l; i++ ) { + start = eras[ i ].start; + if ( start === null || ticks >= start ) { + return i; + } + } + return 0; +}; + +getEraYear = function( date, cal, era, sortable ) { + var year = date.getFullYear(); + if ( !sortable && cal.eras ) { + // convert normal gregorian year to era-shifted gregorian + // year by subtracting the era offset + year -= cal.eras[ era ].offset; + } + return year; +}; + +// parseExact +(function() { + var expandYear, + getDayIndex, + getMonthIndex, + getParseRegExp, + outOfRange, + toUpper, + toUpperArray; + + expandYear = function( cal, year ) { + // expands 2-digit year into 4 digits. + var now = new Date(), + era = getEra( now ); + if ( year < 100 ) { + var twoDigitYearMax = cal.twoDigitYearMax; + twoDigitYearMax = typeof twoDigitYearMax === "string" ? new Date().getFullYear() % 100 + parseInt( twoDigitYearMax, 10 ) : twoDigitYearMax; + var curr = getEraYear( now, cal, era ); + year += curr - ( curr % 100 ); + if ( year > twoDigitYearMax ) { + year -= 100; + } + } + return year; + }; + + getDayIndex = function ( cal, value, abbr ) { + var ret, + days = cal.days, + upperDays = cal._upperDays; + if ( !upperDays ) { + cal._upperDays = upperDays = [ + toUpperArray( days.names ), + toUpperArray( days.namesAbbr ), + toUpperArray( days.namesShort ) + ]; + } + value = toUpper( value ); + if ( abbr ) { + ret = arrayIndexOf( upperDays[1], value ); + if ( ret === -1 ) { + ret = arrayIndexOf( upperDays[2], value ); + } + } + else { + ret = arrayIndexOf( upperDays[0], value ); + } + return ret; + }; + + getMonthIndex = function( cal, value, abbr ) { + var months = cal.months, + monthsGen = cal.monthsGenitive || cal.months, + upperMonths = cal._upperMonths, + upperMonthsGen = cal._upperMonthsGen; + if ( !upperMonths ) { + cal._upperMonths = upperMonths = [ + toUpperArray( months.names ), + toUpperArray( months.namesAbbr ) + ]; + cal._upperMonthsGen = upperMonthsGen = [ + toUpperArray( monthsGen.names ), + toUpperArray( monthsGen.namesAbbr ) + ]; + } + value = toUpper( value ); + var i = arrayIndexOf( abbr ? upperMonths[1] : upperMonths[0], value ); + if ( i < 0 ) { + i = arrayIndexOf( abbr ? upperMonthsGen[1] : upperMonthsGen[0], value ); + } + return i; + }; + + getParseRegExp = function( cal, format ) { + // converts a format string into a regular expression with groups that + // can be used to extract date fields from a date string. + // check for a cached parse regex. + var re = cal._parseRegExp; + if ( !re ) { + cal._parseRegExp = re = {}; + } + else { + var reFormat = re[ format ]; + if ( reFormat ) { + return reFormat; + } + } + + // expand single digit formats, then escape regular expression characters. + var expFormat = expandFormat( cal, format ).replace( /([\^\$\.\*\+\?\|\[\]\(\)\{\}])/g, "\\\\$1" ), + regexp = [ "^" ], + groups = [], + index = 0, + quoteCount = 0, + tokenRegExp = getTokenRegExp(), + match; + + // iterate through each date token found. + while ( (match = tokenRegExp.exec(expFormat)) !== null ) { + var preMatch = expFormat.slice( index, match.index ); + index = tokenRegExp.lastIndex; + + // don't replace any matches that occur inside a string literal. + quoteCount += appendPreOrPostMatch( preMatch, regexp ); + if ( quoteCount % 2 ) { + regexp.push( match[0] ); + continue; + } + + // add a regex group for the token. + var m = match[ 0 ], + len = m.length, + add; + switch ( m ) { + case "dddd": case "ddd": + case "MMMM": case "MMM": + case "gg": case "g": + add = "(\\D+)"; + break; + case "tt": case "t": + add = "(\\D*)"; + break; + case "yyyy": + case "fff": + case "ff": + case "f": + add = "(\\d{" + len + "})"; + break; + case "dd": case "d": + case "MM": case "M": + case "yy": case "y": + case "HH": case "H": + case "hh": case "h": + case "mm": case "m": + case "ss": case "s": + add = "(\\d\\d?)"; + break; + case "zzz": + add = "([+-]?\\d\\d?:\\d{2})"; + break; + case "zz": case "z": + add = "([+-]?\\d\\d?)"; + break; + case "/": + add = "(\\" + cal[ "/" ] + ")"; + break; + default: + throw "Invalid date format pattern \'" + m + "\'."; + break; + } + if ( add ) { + regexp.push( add ); + } + groups.push( match[0] ); + } + appendPreOrPostMatch( expFormat.slice(index), regexp ); + regexp.push( "$" ); + + // allow whitespace to differ when matching formats. + var regexpStr = regexp.join( "" ).replace( /\s+/g, "\\s+" ), + parseRegExp = { "regExp": regexpStr, "groups": groups }; + + // cache the regex for this format. + return re[ format ] = parseRegExp; + }; + + outOfRange = function( value, low, high ) { + return value < low || value > high; + }; + + toUpper = function( value ) { + // "he-IL" has non-breaking space in weekday names. + return value.split( "\u00A0" ).join( " " ).toUpperCase(); + }; + + toUpperArray = function( arr ) { + var results = []; + for ( var i = 0, l = arr.length; i < l; i++ ) { + results[ i ] = toUpper( arr[i] ); + } + return results; + }; + + parseExact = function( value, format, culture ) { + // try to parse the date string by matching against the format string + // while using the specified culture for date field names. + value = trim( value ); + var cal = culture.calendar, + // convert date formats into regular expressions with groupings. + // use the regexp to determine the input format and extract the date fields. + parseInfo = getParseRegExp( cal, format ), + match = new RegExp( parseInfo.regExp ).exec( value ); + if ( match === null ) { + return null; + } + // found a date format that matches the input. + var groups = parseInfo.groups, + era = null, year = null, month = null, date = null, weekDay = null, + hour = 0, hourOffset, min = 0, sec = 0, msec = 0, tzMinOffset = null, + pmHour = false; + // iterate the format groups to extract and set the date fields. + for ( var j = 0, jl = groups.length; j < jl; j++ ) { + var matchGroup = match[ j + 1 ]; + if ( matchGroup ) { + var current = groups[ j ], + clength = current.length, + matchInt = parseInt( matchGroup, 10 ); + switch ( current ) { + case "dd": case "d": + // Day of month. + date = matchInt; + // check that date is generally in valid range, also checking overflow below. + if ( outOfRange(date, 1, 31) ) return null; + break; + case "MMM": case "MMMM": + month = getMonthIndex( cal, matchGroup, clength === 3 ); + if ( outOfRange(month, 0, 11) ) return null; + break; + case "M": case "MM": + // Month. + month = matchInt - 1; + if ( outOfRange(month, 0, 11) ) return null; + break; + case "y": case "yy": + case "yyyy": + year = clength < 4 ? expandYear( cal, matchInt ) : matchInt; + if ( outOfRange(year, 0, 9999) ) return null; + break; + case "h": case "hh": + // Hours (12-hour clock). + hour = matchInt; + if ( hour === 12 ) hour = 0; + if ( outOfRange(hour, 0, 11) ) return null; + break; + case "H": case "HH": + // Hours (24-hour clock). + hour = matchInt; + if ( outOfRange(hour, 0, 23) ) return null; + break; + case "m": case "mm": + // Minutes. + min = matchInt; + if ( outOfRange(min, 0, 59) ) return null; + break; + case "s": case "ss": + // Seconds. + sec = matchInt; + if ( outOfRange(sec, 0, 59) ) return null; + break; + case "tt": case "t": + // AM/PM designator. + // see if it is standard, upper, or lower case PM. If not, ensure it is at least one of + // the AM tokens. If not, fail the parse for this format. + pmHour = cal.PM && ( matchGroup === cal.PM[0] || matchGroup === cal.PM[1] || matchGroup === cal.PM[2] ); + if ( + !pmHour && ( + !cal.AM || ( matchGroup !== cal.AM[0] && matchGroup !== cal.AM[1] && matchGroup !== cal.AM[2] ) + ) + ) return null; + break; + case "f": + // Deciseconds. + case "ff": + // Centiseconds. + case "fff": + // Milliseconds. + msec = matchInt * Math.pow( 10, 3 - clength ); + if ( outOfRange(msec, 0, 999) ) return null; + break; + case "ddd": + // Day of week. + case "dddd": + // Day of week. + weekDay = getDayIndex( cal, matchGroup, clength === 3 ); + if ( outOfRange(weekDay, 0, 6) ) return null; + break; + case "zzz": + // Time zone offset in +/- hours:min. + var offsets = matchGroup.split( /:/ ); + if ( offsets.length !== 2 ) return null; + hourOffset = parseInt( offsets[0], 10 ); + if ( outOfRange(hourOffset, -12, 13) ) return null; + var minOffset = parseInt( offsets[1], 10 ); + if ( outOfRange(minOffset, 0, 59) ) return null; + tzMinOffset = ( hourOffset * 60 ) + ( startsWith(matchGroup, "-") ? -minOffset : minOffset ); + break; + case "z": case "zz": + // Time zone offset in +/- hours. + hourOffset = matchInt; + if ( outOfRange(hourOffset, -12, 13) ) return null; + tzMinOffset = hourOffset * 60; + break; + case "g": case "gg": + var eraName = matchGroup; + if ( !eraName || !cal.eras ) return null; + eraName = trim( eraName.toLowerCase() ); + for ( var i = 0, l = cal.eras.length; i < l; i++ ) { + if ( eraName === cal.eras[i].name.toLowerCase() ) { + era = i; + break; + } + } + // could not find an era with that name + if ( era === null ) return null; + break; + } + } + } + var result = new Date(), defaultYear, convert = cal.convert; + defaultYear = convert ? convert.fromGregorian( result )[ 0 ] : result.getFullYear(); + if ( year === null ) { + year = defaultYear; + } + else if ( cal.eras ) { + // year must be shifted to normal gregorian year + // but not if year was not specified, its already normal gregorian + // per the main if clause above. + year += cal.eras[( era || 0 )].offset; + } + // set default day and month to 1 and January, so if unspecified, these are the defaults + // instead of the current day/month. + if ( month === null ) { + month = 0; + } + if ( date === null ) { + date = 1; + } + // now have year, month, and date, but in the culture's calendar. + // convert to gregorian if necessary + if ( convert ) { + result = convert.toGregorian( year, month, date ); + // conversion failed, must be an invalid match + if ( result === null ) return null; + } + else { + // have to set year, month and date together to avoid overflow based on current date. + result.setFullYear( year, month, date ); + // check to see if date overflowed for specified month (only checked 1-31 above). + if ( result.getDate() !== date ) return null; + // invalid day of week. + if ( weekDay !== null && result.getDay() !== weekDay ) { + return null; + } + } + // if pm designator token was found make sure the hours fit the 24-hour clock. + if ( pmHour && hour < 12 ) { + hour += 12; + } + result.setHours( hour, min, sec, msec ); + if ( tzMinOffset !== null ) { + // adjust timezone to utc before applying local offset. + var adjustedMin = result.getMinutes() - ( tzMinOffset + result.getTimezoneOffset() ); + // Safari limits hours and minutes to the range of -127 to 127. We need to use setHours + // to ensure both these fields will not exceed this range. adjustedMin will range + // somewhere between -1440 and 1500, so we only need to split this into hours. + result.setHours( result.getHours() + parseInt(adjustedMin / 60, 10), adjustedMin % 60 ); + } + return result; + }; +}()); + +parseNegativePattern = function( value, nf, negativePattern ) { + var neg = nf[ "-" ], + pos = nf[ "+" ], + ret; + switch ( negativePattern ) { + case "n -": + neg = " " + neg; + pos = " " + pos; + // fall through + case "n-": + if ( endsWith(value, neg) ) { + ret = [ "-", value.substr(0, value.length - neg.length) ]; + } + else if ( endsWith(value, pos) ) { + ret = [ "+", value.substr(0, value.length - pos.length) ]; + } + break; + case "- n": + neg += " "; + pos += " "; + // fall through + case "-n": + if ( startsWith(value, neg) ) { + ret = [ "-", value.substr(neg.length) ]; + } + else if ( startsWith(value, pos) ) { + ret = [ "+", value.substr(pos.length) ]; + } + break; + case "(n)": + if ( startsWith(value, "(") && endsWith(value, ")") ) { + ret = [ "-", value.substr(1, value.length - 2) ]; + } + break; + } + return ret || [ "", value ]; +}; + +// +// public instance functions +// + +Globalize.prototype.findClosestCulture = function( cultureSelector ) { + return Globalize.findClosestCulture.call( this, cultureSelector ); +}; + +Globalize.prototype.format = function( value, format, cultureSelector ) { + return Globalize.format.call( this, value, format, cultureSelector ); +}; + +Globalize.prototype.localize = function( key, cultureSelector ) { + return Globalize.localize.call( this, key, cultureSelector ); +}; + +Globalize.prototype.parseInt = function( value, radix, cultureSelector ) { + return Globalize.parseInt.call( this, value, radix, cultureSelector ); +}; + +Globalize.prototype.parseFloat = function( value, radix, cultureSelector ) { + return Globalize.parseFloat.call( this, value, radix, cultureSelector ); +}; + +Globalize.prototype.culture = function( cultureSelector ) { + return Globalize.culture.call( this, cultureSelector ); +}; + +// +// public singleton functions +// + +Globalize.addCultureInfo = function( cultureName, baseCultureName, info ) { + + var base = {}, + isNew = false; + + if ( typeof cultureName !== "string" ) { + // cultureName argument is optional string. If not specified, assume info is first + // and only argument. Specified info deep-extends current culture. + info = cultureName; + cultureName = this.culture().name; + base = this.cultures[ cultureName ]; + } else if ( typeof baseCultureName !== "string" ) { + // baseCultureName argument is optional string. If not specified, assume info is second + // argument. Specified info deep-extends specified culture. + // If specified culture does not exist, create by deep-extending default + info = baseCultureName; + isNew = ( this.cultures[ cultureName ] == null ); + base = this.cultures[ cultureName ] || this.cultures[ "default" ]; + } else { + // cultureName and baseCultureName specified. Assume a new culture is being created + // by deep-extending an specified base culture + isNew = true; + base = this.cultures[ baseCultureName ]; + } + + this.cultures[ cultureName ] = extend(true, {}, + base, + info + ); + // Make the standard calendar the current culture if it's a new culture + if ( isNew ) { + this.cultures[ cultureName ].calendar = this.cultures[ cultureName ].calendars.standard; + } +}; + +Globalize.findClosestCulture = function( name ) { + var match; + if ( !name ) { + return this.cultures[ this.cultureSelector ] || this.cultures[ "default" ]; + } + if ( typeof name === "string" ) { + name = name.split( "," ); + } + if ( isArray(name) ) { + var lang, + cultures = this.cultures, + list = name, + i, l = list.length, + prioritized = []; + for ( i = 0; i < l; i++ ) { + name = trim( list[i] ); + var pri, parts = name.split( ";" ); + lang = trim( parts[0] ); + if ( parts.length === 1 ) { + pri = 1; + } + else { + name = trim( parts[1] ); + if ( name.indexOf("q=") === 0 ) { + name = name.substr( 2 ); + pri = parseFloat( name ); + pri = isNaN( pri ) ? 0 : pri; + } + else { + pri = 1; + } + } + prioritized.push({ lang: lang, pri: pri }); + } + prioritized.sort(function( a, b ) { + return a.pri < b.pri ? 1 : -1; + }); + + // exact match + for ( i = 0; i < l; i++ ) { + lang = prioritized[ i ].lang; + match = cultures[ lang ]; + if ( match ) { + return match; + } + } + + // neutral language match + for ( i = 0; i < l; i++ ) { + lang = prioritized[ i ].lang; + do { + var index = lang.lastIndexOf( "-" ); + if ( index === -1 ) { + break; + } + // strip off the last part. e.g. en-US => en + lang = lang.substr( 0, index ); + match = cultures[ lang ]; + if ( match ) { + return match; + } + } + while ( 1 ); + } + + // last resort: match first culture using that language + for ( i = 0; i < l; i++ ) { + lang = prioritized[ i ].lang; + for ( var cultureKey in cultures ) { + var culture = cultures[ cultureKey ]; + if ( culture.language == lang ) { + return culture; + } + } + } + } + else if ( typeof name === "object" ) { + return name; + } + return match || null; +}; + +Globalize.format = function( value, format, cultureSelector ) { + culture = this.findClosestCulture( cultureSelector ); + if ( value instanceof Date ) { + value = formatDate( value, format, culture ); + } + else if ( typeof value === "number" ) { + value = formatNumber( value, format, culture ); + } + return value; +}; + +Globalize.localize = function( key, cultureSelector ) { + return this.findClosestCulture( cultureSelector ).messages[ key ] || + this.cultures[ "default" ].messages[ key ]; +}; + +Globalize.parseDate = function( value, formats, culture ) { + culture = this.findClosestCulture( culture ); + + var date, prop, patterns; + if ( formats ) { + if ( typeof formats === "string" ) { + formats = [ formats ]; + } + if ( formats.length ) { + for ( var i = 0, l = formats.length; i < l; i++ ) { + var format = formats[ i ]; + if ( format ) { + date = parseExact( value, format, culture ); + if ( date ) { + break; + } + } + } + } + } else { + patterns = culture.calendar.patterns; + for ( prop in patterns ) { + date = parseExact( value, patterns[prop], culture ); + if ( date ) { + break; + } + } + } + + return date || null; +}; + +Globalize.parseInt = function( value, radix, cultureSelector ) { + return truncate( Globalize.parseFloat(value, radix, cultureSelector) ); +}; + +Globalize.parseFloat = function( value, radix, cultureSelector ) { + // radix argument is optional + if ( typeof radix !== "number" ) { + cultureSelector = radix; + radix = 10; + } + + var culture = this.findClosestCulture( cultureSelector ); + var ret = NaN, + nf = culture.numberFormat; + + if ( value.indexOf(culture.numberFormat.currency.symbol) > -1 ) { + // remove currency symbol + value = value.replace( culture.numberFormat.currency.symbol, "" ); + // replace decimal seperator + value = value.replace( culture.numberFormat.currency["."], culture.numberFormat["."] ); + } + + // trim leading and trailing whitespace + value = trim( value ); + + // allow infinity or hexidecimal + if ( regexInfinity.test(value) ) { + ret = parseFloat( value ); + } + else if ( !radix && regexHex.test(value) ) { + ret = parseInt( value, 16 ); + } + else { + + // determine sign and number + var signInfo = parseNegativePattern( value, nf, nf.pattern[0] ), + sign = signInfo[ 0 ], + num = signInfo[ 1 ]; + + // #44 - try parsing as "(n)" + if ( sign === "" && nf.pattern[0] !== "(n)" ) { + signInfo = parseNegativePattern( value, nf, "(n)" ); + sign = signInfo[ 0 ]; + num = signInfo[ 1 ]; + } + + // try parsing as "-n" + if ( sign === "" && nf.pattern[0] !== "-n" ) { + signInfo = parseNegativePattern( value, nf, "-n" ); + sign = signInfo[ 0 ]; + num = signInfo[ 1 ]; + } + + sign = sign || "+"; + + // determine exponent and number + var exponent, + intAndFraction, + exponentPos = num.indexOf( "e" ); + if ( exponentPos < 0 ) exponentPos = num.indexOf( "E" ); + if ( exponentPos < 0 ) { + intAndFraction = num; + exponent = null; + } + else { + intAndFraction = num.substr( 0, exponentPos ); + exponent = num.substr( exponentPos + 1 ); + } + // determine decimal position + var integer, + fraction, + decSep = nf[ "." ], + decimalPos = intAndFraction.indexOf( decSep ); + if ( decimalPos < 0 ) { + integer = intAndFraction; + fraction = null; + } + else { + integer = intAndFraction.substr( 0, decimalPos ); + fraction = intAndFraction.substr( decimalPos + decSep.length ); + } + // handle groups (e.g. 1,000,000) + var groupSep = nf[ "," ]; + integer = integer.split( groupSep ).join( "" ); + var altGroupSep = groupSep.replace( /\u00A0/g, " " ); + if ( groupSep !== altGroupSep ) { + integer = integer.split( altGroupSep ).join( "" ); + } + // build a natively parsable number string + var p = sign + integer; + if ( fraction !== null ) { + p += "." + fraction; + } + if ( exponent !== null ) { + // exponent itself may have a number patternd + var expSignInfo = parseNegativePattern( exponent, nf, "-n" ); + p += "e" + ( expSignInfo[0] || "+" ) + expSignInfo[ 1 ]; + } + if ( regexParseFloat.test(p) ) { + ret = parseFloat( p ); + } + } + return ret; +}; + +Globalize.culture = function( cultureSelector ) { + // setter + if ( typeof cultureSelector !== "undefined" ) { + this.cultureSelector = cultureSelector; + } + // getter + return this.findClosestCulture( cultureSelector ) || this.culture[ "default" ]; +}; + +}( this )); diff --git a/jquery-ui-1.10.2.custom/development-bundle/external/jquery.mousewheel.js b/jquery-ui-1.10.2.custom/development-bundle/external/jquery.mousewheel.js new file mode 100755 index 0000000..8c60304 --- /dev/null +++ b/jquery-ui-1.10.2.custom/development-bundle/external/jquery.mousewheel.js @@ -0,0 +1,101 @@ +/*! Copyright (c) 2013 Brandon Aaron (http://brandonaaron.net) + * Licensed under the MIT License (LICENSE.txt). + * + * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers. + * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix. + * Thanks to: Seamus Leahy for adding deltaX and deltaY + * + * Version: 3.1.0 + * + * Requires: 1.2.2+ + */ + +(function (factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['jquery'], factory); + } else { + // Browser globals + factory(jQuery); + } +}(function ($) { + + var toFix = ['wheel', 'mousewheel', 'DOMMouseScroll']; + var toBind = 'onwheel' in document || document.documentMode >= 9 ? ['wheel'] : ['mousewheel', 'DomMouseScroll', 'MozMousePixelScroll']; + var lowestDelta, lowestDeltaXY; + + if ($.event.fixHooks) { + for ( var i=toFix.length; i; ) { + $.event.fixHooks[ toFix[--i] ] = $.event.mouseHooks; + } + } + + $.event.special.mousewheel = { + setup: function() { + if ( this.addEventListener ) { + for ( var i=toBind.length; i; ) { + this.addEventListener( toBind[--i], handler, false ); + } + } else { + this.onmousewheel = handler; + } + }, + + teardown: function() { + if ( this.removeEventListener ) { + for ( var i=toBind.length; i; ) { + this.removeEventListener( toBind[--i], handler, false ); + } + } else { + this.onmousewheel = null; + } + } + }; + + $.fn.extend({ + mousewheel: function(fn) { + return fn ? this.bind("mousewheel", fn) : this.trigger("mousewheel"); + }, + + unmousewheel: function(fn) { + return this.unbind("mousewheel", fn); + } + }); + + + function handler(event) { + var orgEvent = event || window.event, args = [].slice.call( arguments, 1 ), delta = 0, deltaX = 0, deltaY = 0, absDelta = 0, absDeltaXY = 0; + event = $.event.fix(orgEvent); + event.type = "mousewheel"; + + // Old school scrollwheel delta + if ( orgEvent.wheelDelta ) { delta = orgEvent.wheelDelta; } + if ( orgEvent.detail ) { delta = orgEvent.detail * -1; } + + // New school wheel delta (wheel event) + if ( orgEvent.deltaY ) { + deltaY = orgEvent.deltaY * -1; + delta = deltaY; + } + if ( orgEvent.deltaX ) { + deltaX = orgEvent.deltaX; + delta = deltaX * -1; + } + + // Webkit + if ( orgEvent.wheelDeltaY !== undefined ) { deltaY = orgEvent.wheelDeltaY; } + if ( orgEvent.wheelDeltaX !== undefined ) { deltaX = orgEvent.wheelDeltaX * -1; } + + absDelta = Math.abs(delta); + if ( !lowestDelta || absDelta < lowestDelta ) { lowestDelta = absDelta; } + + absDeltaXY = Math.max( Math.abs(deltaY), Math.abs(deltaX) ); + if ( !lowestDeltaXY || absDeltaXY < lowestDeltaXY ) { lowestDeltaXY = absDeltaXY; } + + // Add event and delta to the front of the arguments + args.unshift(event, Math.floor(delta/lowestDelta), Math.floor(deltaX/lowestDeltaXY), Math.floor(deltaY/lowestDeltaXY)); + + return ($.event.dispatch || $.event.handle).apply(this, args); + } + +})); diff --git a/jquery-ui-1.10.2.custom/development-bundle/external/jshint.js b/jquery-ui-1.10.2.custom/development-bundle/external/jshint.js new file mode 100755 index 0000000..8f06d9b --- /dev/null +++ b/jquery-ui-1.10.2.custom/development-bundle/external/jshint.js @@ -0,0 +1,4835 @@ +/*! + * JSHint, by JSHint Community. + * + * This file (and this file only) is licensed under the same slightly modified + * MIT license that JSLint is. It stops evil-doers everywhere. + * + * JSHint is a derivative work of JSLint: + * + * Copyright (c) 2002 Douglas Crockford (www.JSLint.com) + * + * 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 shall be used for Good, not Evil. + * + * 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. + * + */ + +/* + JSHINT is a global function. It takes two parameters. + + var myResult = JSHINT(source, option); + + The first parameter is either a string or an array of strings. If it is a + string, it will be split on '\n' or '\r'. If it is an array of strings, it + is assumed that each string represents one line. The source can be a + JavaScript text or a JSON text. + + The second parameter is an optional object of options which control the + operation of JSHINT. Most of the options are booleans: They are all + optional and have a default value of false. One of the options, predef, + can be an array of names, which will be used to declare global variables, + or an object whose keys are used as global names, with a boolean value + that determines if they are assignable. + + If it checks out, JSHINT returns true. Otherwise, it returns false. + + If false, you can inspect JSHINT.errors to find out the problems. + JSHINT.errors is an array of objects containing these members: + + { + line : The line (relative to 1) at which the lint was found + character : The character (relative to 1) at which the lint was found + reason : The problem + evidence : The text line in which the problem occurred + raw : The raw message before the details were inserted + a : The first detail + b : The second detail + c : The third detail + d : The fourth detail + } + + If a fatal error was found, a null will be the last element of the + JSHINT.errors array. + + You can request a data structure which contains JSHint's results. + + var myData = JSHINT.data(); + + It returns a structure with this form: + + { + errors: [ + { + line: NUMBER, + character: NUMBER, + reason: STRING, + evidence: STRING + } + ], + functions: [ + name: STRING, + line: NUMBER, + character: NUMBER, + last: NUMBER, + lastcharacter: NUMBER, + param: [ + STRING + ], + closure: [ + STRING + ], + var: [ + STRING + ], + exception: [ + STRING + ], + outer: [ + STRING + ], + unused: [ + STRING + ], + global: [ + STRING + ], + label: [ + STRING + ] + ], + globals: [ + STRING + ], + member: { + STRING: NUMBER + }, + unused: [ + { + name: STRING, + line: NUMBER + } + ], + implieds: [ + { + name: STRING, + line: NUMBER + } + ], + urls: [ + STRING + ], + json: BOOLEAN + } + + Empty arrays will not be included. + +*/ + +/*jshint + evil: true, nomen: false, onevar: false, regexp: false, strict: true, boss: true, + undef: true, maxlen: 100, indent: 4, quotmark: double, unused: true +*/ + +/*members "\b", "\t", "\n", "\f", "\r", "!=", "!==", "\"", "%", "(begin)", + "(breakage)", "(character)", "(context)", "(error)", "(explicitNewcap)", "(global)", + "(identifier)", "(last)", "(lastcharacter)", "(line)", "(loopage)", "(metrics)", + "(name)", "(onevar)", "(params)", "(scope)", "(statement)", "(verb)", "(tokens)", "(catch)", + "*", "+", "++", "-", "--", "\/", "<", "<=", "==", + "===", ">", ">=", $, $$, $A, $F, $H, $R, $break, $continue, $w, Abstract, Ajax, + __filename, __dirname, ActiveXObject, Array, ArrayBuffer, ArrayBufferView, Audio, + Autocompleter, Asset, Boolean, Builder, Buffer, Browser, Blob, COM, CScript, Canvas, + CustomAnimation, Class, Control, ComplexityCount, Chain, Color, Cookie, Core, DataView, Date, + Debug, Draggable, Draggables, Droppables, Document, DomReady, DOMEvent, DOMReady, DOMParser, + Drag, E, Enumerator, Enumerable, Element, Elements, Error, Effect, EvalError, Event, + Events, FadeAnimation, Field, Flash, Float32Array, Float64Array, Form, + FormField, Frame, FormData, Function, Fx, GetObject, Group, Hash, HotKey, + HTMLElement, HTMLAnchorElement, HTMLBaseElement, HTMLBlockquoteElement, + HTMLBodyElement, HTMLBRElement, HTMLButtonElement, HTMLCanvasElement, HTMLDirectoryElement, + HTMLDivElement, HTMLDListElement, HTMLFieldSetElement, + HTMLFontElement, HTMLFormElement, HTMLFrameElement, HTMLFrameSetElement, + HTMLHeadElement, HTMLHeadingElement, HTMLHRElement, HTMLHtmlElement, + HTMLIFrameElement, HTMLImageElement, HTMLInputElement, HTMLIsIndexElement, + HTMLLabelElement, HTMLLayerElement, HTMLLegendElement, HTMLLIElement, + HTMLLinkElement, HTMLMapElement, HTMLMenuElement, HTMLMetaElement, + HTMLModElement, HTMLObjectElement, HTMLOListElement, HTMLOptGroupElement, + HTMLOptionElement, HTMLParagraphElement, HTMLParamElement, HTMLPreElement, + HTMLQuoteElement, HTMLScriptElement, HTMLSelectElement, HTMLStyleElement, + HtmlTable, HTMLTableCaptionElement, HTMLTableCellElement, HTMLTableColElement, + HTMLTableElement, HTMLTableRowElement, HTMLTableSectionElement, + HTMLTextAreaElement, HTMLTitleElement, HTMLUListElement, HTMLVideoElement, + Iframe, IframeShim, Image, importScripts, Int16Array, Int32Array, Int8Array, + Insertion, InputValidator, JSON, Keyboard, Locale, LN10, LN2, LOG10E, LOG2E, + MAX_VALUE, MIN_VALUE, Map, Mask, Math, MenuItem, MessageChannel, MessageEvent, MessagePort, + MoveAnimation, MooTools, MutationObserver, NaN, Native, NEGATIVE_INFINITY, Node, NodeFilter, + Number, Object, ObjectRange, + Option, Options, OverText, PI, POSITIVE_INFINITY, PeriodicalExecuter, Point, Position, Prototype, + RangeError, Rectangle, ReferenceError, RegExp, ResizeAnimation, Request, RotateAnimation, Set, + SQRT1_2, SQRT2, ScrollBar, ScriptEngine, ScriptEngineBuildVersion, + ScriptEngineMajorVersion, ScriptEngineMinorVersion, Scriptaculous, Scroller, + Slick, Slider, Selector, SharedWorker, String, Style, SyntaxError, Sortable, Sortables, + SortableObserver, Sound, Spinner, System, Swiff, Text, TextArea, Template, + Timer, Tips, Type, TypeError, Toggle, Try, "use strict", unescape, URI, URIError, URL, + VBArray, WeakMap, WSH, WScript, XDomainRequest, Web, Window, XMLDOM, XMLHttpRequest, XMLSerializer, + XPathEvaluator, XPathException, XPathExpression, XPathNamespace, XPathNSResolver, XPathResult, + "\\", a, abs, addEventListener, address, alert, apply, applicationCache, arguments, arity, + asi, atob, b, basic, basicToken, bitwise, blacklist, block, blur, boolOptions, boss, + browser, btoa, c, call, callee, caller, camelcase, cases, charAt, charCodeAt, character, + clearInterval, clearTimeout, close, closed, closure, comment, complexityCount, condition, + confirm, console, constructor, content, couch, create, css, curly, d, data, datalist, dd, debug, + decodeURI, decodeURIComponent, defaultStatus, defineClass, deserialize, devel, document, + dojo, dijit, dojox, define, else, emit, encodeURI, encodeURIComponent, elem, + eqeq, eqeqeq, eqnull, errors, es5, escape, esnext, eval, event, evidence, evil, + ex, exception, exec, exps, expr, exports, FileReader, first, floor, focus, forEach, + forin, fragment, frames, from, fromCharCode, fud, funcscope, funct, function, functions, + g, gc, getComputedStyle, getRow, getter, getterToken, GLOBAL, global, globals, globalstrict, + hasOwnProperty, help, history, i, id, identifier, immed, implieds, importPackage, include, + indent, indexOf, init, ins, internals, instanceOf, isAlpha, isApplicationRunning, isArray, + isDigit, isFinite, isNaN, iterator, java, join, jshint, + JSHINT, json, jquery, jQuery, keys, label, labelled, last, lastcharacter, lastsemic, laxbreak, + laxcomma, latedef, lbp, led, left, length, line, load, loadClass, localStorage, location, + log, loopfunc, m, match, max, maxcomplexity, maxdepth, maxerr, maxlen, maxstatements, maxparams, + member, message, meta, module, moveBy, moveTo, mootools, multistr, name, navigator, new, newcap, + nestedBlockDepth, noarg, node, noempty, nomen, nonew, nonstandard, nud, onbeforeunload, onblur, + onerror, onevar, onecase, onfocus, onload, onresize, onunload, open, openDatabase, openURL, + opener, opera, options, outer, param, parent, parseFloat, parseInt, passfail, plusplus, + postMessage, pop, predef, print, process, prompt, proto, prototype, prototypejs, provides, push, + quit, quotmark, range, raw, reach, reason, regexp, readFile, readUrl, regexdash, + removeEventListener, replace, report, require, reserved, resizeBy, resizeTo, resolvePath, + resumeUpdates, respond, rhino, right, runCommand, scroll, scope, screen, scripturl, scrollBy, + scrollTo, scrollbar, search, seal, self, send, serialize, sessionStorage, setInterval, setTimeout, + setter, setterToken, shift, slice, smarttabs, sort, spawn, split, statement, statementCount, stack, + status, start, strict, sub, substr, supernew, shadow, supplant, sum, sync, test, toLowerCase, + toString, toUpperCase, toint32, token, tokens, top, trailing, type, typeOf, Uint16Array, + Uint32Array, Uint8Array, undef, undefs, unused, urls, validthis, value, valueOf, var, vars, + version, verifyMaxParametersPerFunction, verifyMaxStatementsPerFunction, + verifyMaxComplexityPerFunction, verifyMaxNestedBlockDepthPerFunction, WebSocket, withstmt, white, + window, windows, Worker, worker, wsh, yui, YUI, Y, YUI_config*/ + +/*global exports: false */ + +// We build the application inside a function so that we produce only a single +// global variable. That function will be invoked immediately, and its return +// value is the JSHINT function itself. + +var JSHINT = (function () { + "use strict"; + + var anonname, // The guessed name for anonymous functions. + +// These are operators that should not be used with the ! operator. + + bang = { + "<" : true, + "<=" : true, + "==" : true, + "===": true, + "!==": true, + "!=" : true, + ">" : true, + ">=" : true, + "+" : true, + "-" : true, + "*" : true, + "/" : true, + "%" : true + }, + + // These are the JSHint boolean options. + boolOptions = { + asi : true, // if automatic semicolon insertion should be tolerated + bitwise : true, // if bitwise operators should not be allowed + boss : true, // if advanced usage of assignments should be allowed + browser : true, // if the standard browser globals should be predefined + camelcase : true, // if identifiers should be required in camel case + couch : true, // if CouchDB globals should be predefined + curly : true, // if curly braces around all blocks should be required + debug : true, // if debugger statements should be allowed + devel : true, // if logging globals should be predefined (console, + // alert, etc.) + dojo : true, // if Dojo Toolkit globals should be predefined + eqeqeq : true, // if === should be required + eqnull : true, // if == null comparisons should be tolerated + es5 : true, // if ES5 syntax should be allowed + esnext : true, // if es.next specific syntax should be allowed + evil : true, // if eval should be allowed + expr : true, // if ExpressionStatement should be allowed as Programs + forin : true, // if for in statements must filter + funcscope : true, // if only function scope should be used for scope tests + globalstrict: true, // if global "use strict"; should be allowed (also + // enables 'strict') + immed : true, // if immediate invocations must be wrapped in parens + iterator : true, // if the `__iterator__` property should be allowed + jquery : true, // if jQuery globals should be predefined + lastsemic : true, // if semicolons may be ommitted for the trailing + // statements inside of a one-line blocks. + latedef : true, // if the use before definition should not be tolerated + laxbreak : true, // if line breaks should not be checked + laxcomma : true, // if line breaks should not be checked around commas + loopfunc : true, // if functions should be allowed to be defined within + // loops + mootools : true, // if MooTools globals should be predefined + multistr : true, // allow multiline strings + newcap : true, // if constructor names must be capitalized + noarg : true, // if arguments.caller and arguments.callee should be + // disallowed + node : true, // if the Node.js environment globals should be + // predefined + noempty : true, // if empty blocks should be disallowed + nonew : true, // if using `new` for side-effects should be disallowed + nonstandard : true, // if non-standard (but widely adopted) globals should + // be predefined + nomen : true, // if names should be checked + onevar : true, // if only one var statement per function should be + // allowed + onecase : true, // if one case switch statements should be allowed + passfail : true, // if the scan should stop on first error + plusplus : true, // if increment/decrement should not be allowed + proto : true, // if the `__proto__` property should be allowed + prototypejs : true, // if Prototype and Scriptaculous globals should be + // predefined + regexdash : true, // if unescaped first/last dash (-) inside brackets + // should be tolerated + regexp : true, // if the . should not be allowed in regexp literals + rhino : true, // if the Rhino environment globals should be predefined + undef : true, // if variables should be declared before used + unused : true, // if variables should be always used + scripturl : true, // if script-targeted URLs should be tolerated + shadow : true, // if variable shadowing should be tolerated + smarttabs : true, // if smarttabs should be tolerated + // (http://www.emacswiki.org/emacs/SmartTabs) + strict : true, // require the "use strict"; pragma + sub : true, // if all forms of subscript notation are tolerated + supernew : true, // if `new function () { ... };` and `new Object;` + // should be tolerated + trailing : true, // if trailing whitespace rules apply + validthis : true, // if 'this' inside a non-constructor function is valid. + // This is a function scoped option only. + withstmt : true, // if with statements should be allowed + white : true, // if strict whitespace rules apply + worker : true, // if Web Worker script symbols should be allowed + wsh : true, // if the Windows Scripting Host environment globals + // should be predefined + yui : true // YUI variables should be predefined + }, + + // These are the JSHint options that can take any value + // (we use this object to detect invalid options) + valOptions = { + maxlen : false, + indent : false, + maxerr : false, + predef : false, + quotmark : false, //'single'|'double'|true + scope : false, + maxstatements: false, // {int} max statements per function + maxdepth : false, // {int} max nested block depth per function + maxparams : false, // {int} max params per function + maxcomplexity: false // {int} max cyclomatic complexity per function + }, + + // These are JSHint boolean options which are shared with JSLint + // where the definition in JSHint is opposite JSLint + invertedOptions = { + bitwise : true, + forin : true, + newcap : true, + nomen : true, + plusplus : true, + regexp : true, + undef : true, + white : true, + + // Inverted and renamed, use JSHint name here + eqeqeq : true, + onevar : true + }, + + // These are JSHint boolean options which are shared with JSLint + // where the name has been changed but the effect is unchanged + renamedOptions = { + eqeq : "eqeqeq", + vars : "onevar", + windows : "wsh" + }, + + + // browser contains a set of global names which are commonly provided by a + // web browser environment. + browser = { + ArrayBuffer : false, + ArrayBufferView : false, + Audio : false, + Blob : false, + addEventListener : false, + applicationCache : false, + atob : false, + blur : false, + btoa : false, + clearInterval : false, + clearTimeout : false, + close : false, + closed : false, + DataView : false, + DOMParser : false, + defaultStatus : false, + document : false, + event : false, + FileReader : false, + Float32Array : false, + Float64Array : false, + FormData : false, + focus : false, + frames : false, + getComputedStyle : false, + HTMLElement : false, + HTMLAnchorElement : false, + HTMLBaseElement : false, + HTMLBlockquoteElement : false, + HTMLBodyElement : false, + HTMLBRElement : false, + HTMLButtonElement : false, + HTMLCanvasElement : false, + HTMLDirectoryElement : false, + HTMLDivElement : false, + HTMLDListElement : false, + HTMLFieldSetElement : false, + HTMLFontElement : false, + HTMLFormElement : false, + HTMLFrameElement : false, + HTMLFrameSetElement : false, + HTMLHeadElement : false, + HTMLHeadingElement : false, + HTMLHRElement : false, + HTMLHtmlElement : false, + HTMLIFrameElement : false, + HTMLImageElement : false, + HTMLInputElement : false, + HTMLIsIndexElement : false, + HTMLLabelElement : false, + HTMLLayerElement : false, + HTMLLegendElement : false, + HTMLLIElement : false, + HTMLLinkElement : false, + HTMLMapElement : false, + HTMLMenuElement : false, + HTMLMetaElement : false, + HTMLModElement : false, + HTMLObjectElement : false, + HTMLOListElement : false, + HTMLOptGroupElement : false, + HTMLOptionElement : false, + HTMLParagraphElement : false, + HTMLParamElement : false, + HTMLPreElement : false, + HTMLQuoteElement : false, + HTMLScriptElement : false, + HTMLSelectElement : false, + HTMLStyleElement : false, + HTMLTableCaptionElement : false, + HTMLTableCellElement : false, + HTMLTableColElement : false, + HTMLTableElement : false, + HTMLTableRowElement : false, + HTMLTableSectionElement : false, + HTMLTextAreaElement : false, + HTMLTitleElement : false, + HTMLUListElement : false, + HTMLVideoElement : false, + history : false, + Int16Array : false, + Int32Array : false, + Int8Array : false, + Image : false, + length : false, + localStorage : false, + location : false, + MessageChannel : false, + MessageEvent : false, + MessagePort : false, + moveBy : false, + moveTo : false, + MutationObserver : false, + name : false, + Node : false, + NodeFilter : false, + navigator : false, + onbeforeunload : true, + onblur : true, + onerror : true, + onfocus : true, + onload : true, + onresize : true, + onunload : true, + open : false, + openDatabase : false, + opener : false, + Option : false, + parent : false, + print : false, + removeEventListener : false, + resizeBy : false, + resizeTo : false, + screen : false, + scroll : false, + scrollBy : false, + scrollTo : false, + sessionStorage : false, + setInterval : false, + setTimeout : false, + SharedWorker : false, + status : false, + top : false, + Uint16Array : false, + Uint32Array : false, + Uint8Array : false, + WebSocket : false, + window : false, + Worker : false, + XMLHttpRequest : false, + XMLSerializer : false, + XPathEvaluator : false, + XPathException : false, + XPathExpression : false, + XPathNamespace : false, + XPathNSResolver : false, + XPathResult : false + }, + + couch = { + "require" : false, + respond : false, + getRow : false, + emit : false, + send : false, + start : false, + sum : false, + log : false, + exports : false, + module : false, + provides : false + }, + + declared, // Globals that were declared using /*global ... */ syntax. + + devel = { + alert : false, + confirm : false, + console : false, + Debug : false, + opera : false, + prompt : false + }, + + dojo = { + dojo : false, + dijit : false, + dojox : false, + define : false, + "require" : false + }, + + funct, // The current function + + functionicity = [ + "closure", "exception", "global", "label", + "outer", "unused", "var" + ], + + functions, // All of the functions + + global, // The global scope + implied, // Implied globals + inblock, + indent, + jsonmode, + + jquery = { + "$" : false, + jQuery : false + }, + + lines, + lookahead, + member, + membersOnly, + + mootools = { + "$" : false, + "$$" : false, + Asset : false, + Browser : false, + Chain : false, + Class : false, + Color : false, + Cookie : false, + Core : false, + Document : false, + DomReady : false, + DOMEvent : false, + DOMReady : false, + Drag : false, + Element : false, + Elements : false, + Event : false, + Events : false, + Fx : false, + Group : false, + Hash : false, + HtmlTable : false, + Iframe : false, + IframeShim : false, + InputValidator : false, + instanceOf : false, + Keyboard : false, + Locale : false, + Mask : false, + MooTools : false, + Native : false, + Options : false, + OverText : false, + Request : false, + Scroller : false, + Slick : false, + Slider : false, + Sortables : false, + Spinner : false, + Swiff : false, + Tips : false, + Type : false, + typeOf : false, + URI : false, + Window : false + }, + + nexttoken, + + node = { + __filename : false, + __dirname : false, + Buffer : false, + console : false, + exports : true, // In Node it is ok to exports = module.exports = foo(); + GLOBAL : false, + global : false, + module : false, + process : false, + require : false, + setTimeout : false, + clearTimeout : false, + setInterval : false, + clearInterval : false + }, + + noreach, + option, + predefined, // Global variables defined by option + prereg, + prevtoken, + + prototypejs = { + "$" : false, + "$$" : false, + "$A" : false, + "$F" : false, + "$H" : false, + "$R" : false, + "$break" : false, + "$continue" : false, + "$w" : false, + Abstract : false, + Ajax : false, + Class : false, + Enumerable : false, + Element : false, + Event : false, + Field : false, + Form : false, + Hash : false, + Insertion : false, + ObjectRange : false, + PeriodicalExecuter: false, + Position : false, + Prototype : false, + Selector : false, + Template : false, + Toggle : false, + Try : false, + Autocompleter : false, + Builder : false, + Control : false, + Draggable : false, + Draggables : false, + Droppables : false, + Effect : false, + Sortable : false, + SortableObserver : false, + Sound : false, + Scriptaculous : false + }, + + quotmark, + + rhino = { + defineClass : false, + deserialize : false, + gc : false, + help : false, + importPackage: false, + "java" : false, + load : false, + loadClass : false, + print : false, + quit : false, + readFile : false, + readUrl : false, + runCommand : false, + seal : false, + serialize : false, + spawn : false, + sync : false, + toint32 : false, + version : false + }, + + scope, // The current scope + stack, + + // standard contains the global names that are provided by the + // ECMAScript standard. + standard = { + Array : false, + Boolean : false, + Date : false, + decodeURI : false, + decodeURIComponent : false, + encodeURI : false, + encodeURIComponent : false, + Error : false, + "eval" : false, + EvalError : false, + Function : false, + hasOwnProperty : false, + isFinite : false, + isNaN : false, + JSON : false, + Map : false, + Math : false, + NaN : false, + Number : false, + Object : false, + parseInt : false, + parseFloat : false, + RangeError : false, + ReferenceError : false, + RegExp : false, + Set : false, + String : false, + SyntaxError : false, + TypeError : false, + URIError : false, + WeakMap : false + }, + + // widely adopted global names that are not part of ECMAScript standard + nonstandard = { + escape : false, + unescape : false + }, + + directive, + syntax = {}, + tab, + token, + unuseds, + urls, + useESNextSyntax, + warnings, + + worker = { + importScripts : true, + postMessage : true, + self : true + }, + + wsh = { + ActiveXObject : true, + Enumerator : true, + GetObject : true, + ScriptEngine : true, + ScriptEngineBuildVersion : true, + ScriptEngineMajorVersion : true, + ScriptEngineMinorVersion : true, + VBArray : true, + WSH : true, + WScript : true, + XDomainRequest : true + }, + + yui = { + YUI : false, + Y : false, + YUI_config : false + }; + // Regular expressions. Some of these are stupidly long. + var ax, cx, tx, nx, nxg, lx, ix, jx, ft; + (function () { + /*jshint maxlen:300 */ + + // unsafe comment or string + ax = /@cc|<\/?|script|\]\s*\]|<\s*!|</i; + + // unsafe characters that are silently deleted by one or more browsers + cx = /[\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/; + + // token + tx = /^\s*([(){}\[.,:;'"~\?\]#@]|==?=?|\/=(?!(\S*\/[gim]?))|\/(\*(jshint|jslint|members?|global)?|\/)?|\*[\/=]?|\+(?:=|\++)?|-(?:=|-+)?|%=?|&[&=]?|\|[|=]?|>>?>?=?|<([\/=!]|\!(\[|--)?|<=?)?|\^=?|\!=?=?|[a-zA-Z_$][a-zA-Z0-9_$]*|[0-9]+([xX][0-9a-fA-F]+|\.[0-9]*)?([eE][+\-]?[0-9]+)?)/; + + // characters in strings that need escapement + nx = /[\u0000-\u001f&<"\/\\\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/; + nxg = /[\u0000-\u001f&<"\/\\\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; + + // star slash + lx = /\*\//; + + // identifier + ix = /^([a-zA-Z_$][a-zA-Z0-9_$]*)$/; + + // javascript url + jx = /^(?:javascript|jscript|ecmascript|vbscript|mocha|livescript)\s*:/i; + + // catches /* falls through */ comments + ft = /^\s*\/\*\s*falls\sthrough\s*\*\/\s*$/; + }()); + + function F() {} // Used by Object.create + + function is_own(object, name) { + // The object.hasOwnProperty method fails when the property under consideration + // is named 'hasOwnProperty'. So we have to use this more convoluted form. + return Object.prototype.hasOwnProperty.call(object, name); + } + + function checkOption(name, t) { + if (valOptions[name] === undefined && boolOptions[name] === undefined) { + warning("Bad option: '" + name + "'.", t); + } + } + + function isString(obj) { + return Object.prototype.toString.call(obj) === "[object String]"; + } + + // Provide critical ES5 functions to ES3. + + if (typeof Array.isArray !== "function") { + Array.isArray = function (o) { + return Object.prototype.toString.apply(o) === "[object Array]"; + }; + } + + if (!Array.prototype.forEach) { + Array.prototype.forEach = function (fn, scope) { + var len = this.length; + + for (var i = 0; i < len; i++) { + fn.call(scope || this, this[i], i, this); + } + }; + } + + if (!Array.prototype.indexOf) { + Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) { + if (this === null || this === undefined) { + throw new TypeError(); + } + + var t = new Object(this); + var len = t.length >>> 0; + + if (len === 0) { + return -1; + } + + var n = 0; + if (arguments.length > 0) { + n = Number(arguments[1]); + if (n != n) { // shortcut for verifying if it's NaN + n = 0; + } else if (n !== 0 && n != Infinity && n != -Infinity) { + n = (n > 0 || -1) * Math.floor(Math.abs(n)); + } + } + + if (n >= len) { + return -1; + } + + var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); + for (; k < len; k++) { + if (k in t && t[k] === searchElement) { + return k; + } + } + + return -1; + }; + } + + if (typeof Object.create !== "function") { + Object.create = function (o) { + F.prototype = o; + return new F(); + }; + } + + if (typeof Object.keys !== "function") { + Object.keys = function (o) { + var a = [], k; + for (k in o) { + if (is_own(o, k)) { + a.push(k); + } + } + return a; + }; + } + + // Non standard methods + + function isAlpha(str) { + return (str >= "a" && str <= "z\uffff") || + (str >= "A" && str <= "Z\uffff"); + } + + function isDigit(str) { + return (str >= "0" && str <= "9"); + } + + function isIdentifier(token, value) { + if (!token) + return false; + + if (!token.identifier || token.value !== value) + return false; + + return true; + } + + function supplant(str, data) { + return str.replace(/\{([^{}]*)\}/g, function (a, b) { + var r = data[b]; + return typeof r === "string" || typeof r === "number" ? r : a; + }); + } + + function combine(t, o) { + var n; + for (n in o) { + if (is_own(o, n) && !is_own(JSHINT.blacklist, n)) { + t[n] = o[n]; + } + } + } + + function updatePredefined() { + Object.keys(JSHINT.blacklist).forEach(function (key) { + delete predefined[key]; + }); + } + + function assume() { + if (option.couch) { + combine(predefined, couch); + } + + if (option.rhino) { + combine(predefined, rhino); + } + + if (option.prototypejs) { + combine(predefined, prototypejs); + } + + if (option.node) { + combine(predefined, node); + option.globalstrict = true; + } + + if (option.devel) { + combine(predefined, devel); + } + + if (option.dojo) { + combine(predefined, dojo); + } + + if (option.browser) { + combine(predefined, browser); + } + + if (option.nonstandard) { + combine(predefined, nonstandard); + } + + if (option.jquery) { + combine(predefined, jquery); + } + + if (option.mootools) { + combine(predefined, mootools); + } + + if (option.worker) { + combine(predefined, worker); + } + + if (option.wsh) { + combine(predefined, wsh); + } + + if (option.esnext) { + useESNextSyntax(); + } + + if (option.globalstrict && option.strict !== false) { + option.strict = true; + } + + if (option.yui) { + combine(predefined, yui); + } + } + + + // Produce an error warning. + function quit(message, line, chr) { + var percentage = Math.floor((line / lines.length) * 100); + + throw { + name: "JSHintError", + line: line, + character: chr, + message: message + " (" + percentage + "% scanned).", + raw: message + }; + } + + function isundef(scope, m, t, a) { + return JSHINT.undefs.push([scope, m, t, a]); + } + + function warning(m, t, a, b, c, d) { + var ch, l, w; + t = t || nexttoken; + if (t.id === "(end)") { // `~ + t = token; + } + l = t.line || 0; + ch = t.from || 0; + w = { + id: "(error)", + raw: m, + evidence: lines[l - 1] || "", + line: l, + character: ch, + scope: JSHINT.scope, + a: a, + b: b, + c: c, + d: d + }; + w.reason = supplant(m, w); + JSHINT.errors.push(w); + if (option.passfail) { + quit("Stopping. ", l, ch); + } + warnings += 1; + if (warnings >= option.maxerr) { + quit("Too many errors.", l, ch); + } + return w; + } + + function warningAt(m, l, ch, a, b, c, d) { + return warning(m, { + line: l, + from: ch + }, a, b, c, d); + } + + function error(m, t, a, b, c, d) { + warning(m, t, a, b, c, d); + } + + function errorAt(m, l, ch, a, b, c, d) { + return error(m, { + line: l, + from: ch + }, a, b, c, d); + } + + // Tracking of "internal" scripts, like eval containing a static string + function addInternalSrc(elem, src) { + var i; + i = { + id: "(internal)", + elem: elem, + value: src + }; + JSHINT.internals.push(i); + return i; + } + + +// lexical analysis and token construction + + var lex = (function lex() { + var character, from, line, s; + +// Private lex methods + + function nextLine() { + var at, + match, + tw; // trailing whitespace check + + if (line >= lines.length) + return false; + + character = 1; + s = lines[line]; + line += 1; + + // If smarttabs option is used check for spaces followed by tabs only. + // Otherwise check for any occurence of mixed tabs and spaces. + // Tabs and one space followed by block comment is allowed. + if (option.smarttabs) { + // negative look-behind for "//" + match = s.match(/(\/\/)? \t/); + at = match && !match[1] ? 0 : -1; + } else { + at = s.search(/ \t|\t [^\*]/); + } + + if (at >= 0) + warningAt("Mixed spaces and tabs.", line, at + 1); + + s = s.replace(/\t/g, tab); + at = s.search(cx); + + if (at >= 0) + warningAt("Unsafe character.", line, at); + + if (option.maxlen && option.maxlen < s.length) + warningAt("Line too long.", line, s.length); + + // Check for trailing whitespaces + tw = option.trailing && s.match(/^(.*?)\s+$/); + if (tw && !/^\s+$/.test(s)) { + warningAt("Trailing whitespace.", line, tw[1].length + 1); + } + return true; + } + +// Produce a token object. The token inherits from a syntax symbol. + + function it(type, value) { + var i, t; + + function checkName(name) { + if (!option.proto && name === "__proto__") { + warningAt("The '{a}' property is deprecated.", line, from, name); + return; + } + + if (!option.iterator && name === "__iterator__") { + warningAt("'{a}' is only available in JavaScript 1.7.", line, from, name); + return; + } + + // Check for dangling underscores unless we're in Node + // environment and this identifier represents built-in + // Node globals with underscores. + + var hasDangling = /^(_+.*|.*_+)$/.test(name); + + if (option.nomen && hasDangling && name !== "_") { + if (option.node && token.id !== "." && /^(__dirname|__filename)$/.test(name)) + return; + + warningAt("Unexpected {a} in '{b}'.", line, from, "dangling '_'", name); + return; + } + + // Check for non-camelcase names. Names like MY_VAR and + // _myVar are okay though. + + if (option.camelcase) { + if (name.replace(/^_+/, "").indexOf("_") > -1 && !name.match(/^[A-Z0-9_]*$/)) { + warningAt("Identifier '{a}' is not in camel case.", line, from, value); + } + } + } + + if (type === "(color)" || type === "(range)") { + t = {type: type}; + } else if (type === "(punctuator)" || + (type === "(identifier)" && is_own(syntax, value))) { + t = syntax[value] || syntax["(error)"]; + } else { + t = syntax[type]; + } + + t = Object.create(t); + + if (type === "(string)" || type === "(range)") { + if (!option.scripturl && jx.test(value)) { + warningAt("Script URL.", line, from); + } + } + + if (type === "(identifier)") { + t.identifier = true; + checkName(value); + } + + t.value = value; + t.line = line; + t.character = character; + t.from = from; + i = t.id; + if (i !== "(endline)") { + prereg = i && + (("(,=:[!&|?{};".indexOf(i.charAt(i.length - 1)) >= 0) || + i === "return" || + i === "case"); + } + return t; + } + + // Public lex methods + return { + init: function (source) { + if (typeof source === "string") { + lines = source + .replace(/\r\n/g, "\n") + .replace(/\r/g, "\n") + .split("\n"); + } else { + lines = source; + } + + // If the first line is a shebang (#!), make it a blank and move on. + // Shebangs are used by Node scripts. + if (lines[0] && lines[0].substr(0, 2) === "#!") + lines[0] = ""; + + line = 0; + nextLine(); + from = 1; + }, + + range: function (begin, end) { + var c, value = ""; + from = character; + if (s.charAt(0) !== begin) { + errorAt("Expected '{a}' and instead saw '{b}'.", + line, character, begin, s.charAt(0)); + } + for (;;) { + s = s.slice(1); + character += 1; + c = s.charAt(0); + switch (c) { + case "": + errorAt("Missing '{a}'.", line, character, c); + break; + case end: + s = s.slice(1); + character += 1; + return it("(range)", value); + case "\\": + warningAt("Unexpected '{a}'.", line, character, c); + } + value += c; + } + + }, + + + // token -- this is called by advance to get the next token + token: function () { + var b, c, captures, d, depth, high, i, l, low, q, t, isLiteral, isInRange, n; + + function match(x) { + var r = x.exec(s), r1; + + if (r) { + l = r[0].length; + r1 = r[1]; + c = r1.charAt(0); + s = s.substr(l); + from = character + l - r1.length; + character += l; + return r1; + } + } + + function string(x) { + var c, j, r = "", allowNewLine = false; + + if (jsonmode && x !== "\"") { + warningAt("Strings must use doublequote.", + line, character); + } + + if (option.quotmark) { + if (option.quotmark === "single" && x !== "'") { + warningAt("Strings must use singlequote.", + line, character); + } else if (option.quotmark === "double" && x !== "\"") { + warningAt("Strings must use doublequote.", + line, character); + } else if (option.quotmark === true) { + quotmark = quotmark || x; + if (quotmark !== x) { + warningAt("Mixed double and single quotes.", + line, character); + } + } + } + + function esc(n) { + var i = parseInt(s.substr(j + 1, n), 16); + j += n; + if (i >= 32 && i <= 126 && + i !== 34 && i !== 92 && i !== 39) { + warningAt("Unnecessary escapement.", line, character); + } + character += n; + c = String.fromCharCode(i); + } + + j = 0; + +unclosedString: + for (;;) { + while (j >= s.length) { + j = 0; + + var cl = line, cf = from; + if (!nextLine()) { + errorAt("Unclosed string.", cl, cf); + break unclosedString; + } + + if (allowNewLine) { + allowNewLine = false; + } else { + warningAt("Unclosed string.", cl, cf); + } + } + + c = s.charAt(j); + if (c === x) { + character += 1; + s = s.substr(j + 1); + return it("(string)", r, x); + } + + if (c < " ") { + if (c === "\n" || c === "\r") { + break; + } + warningAt("Control character in string: {a}.", + line, character + j, s.slice(0, j)); + } else if (c === "\\") { + j += 1; + character += 1; + c = s.charAt(j); + n = s.charAt(j + 1); + switch (c) { + case "\\": + case "\"": + case "/": + break; + case "\'": + if (jsonmode) { + warningAt("Avoid \\'.", line, character); + } + break; + case "b": + c = "\b"; + break; + case "f": + c = "\f"; + break; + case "n": + c = "\n"; + break; + case "r": + c = "\r"; + break; + case "t": + c = "\t"; + break; + case "0": + c = "\0"; + // Octal literals fail in strict mode + // check if the number is between 00 and 07 + // where 'n' is the token next to 'c' + if (n >= 0 && n <= 7 && directive["use strict"]) { + warningAt( + "Octal literals are not allowed in strict mode.", + line, character); + } + break; + case "u": + esc(4); + break; + case "v": + if (jsonmode) { + warningAt("Avoid \\v.", line, character); + } + c = "\v"; + break; + case "x": + if (jsonmode) { + warningAt("Avoid \\x-.", line, character); + } + esc(2); + break; + case "": + // last character is escape character + // always allow new line if escaped, but show + // warning if option is not set + allowNewLine = true; + if (option.multistr) { + if (jsonmode) { + warningAt("Avoid EOL escapement.", line, character); + } + c = ""; + character -= 1; + break; + } + warningAt("Bad escapement of EOL. Use option multistr if needed.", + line, character); + break; + case "!": + if (s.charAt(j - 2) === "<") + break; + /*falls through*/ + default: + warningAt("Bad escapement.", line, character); + } + } + r += c; + character += 1; + j += 1; + } + } + + for (;;) { + if (!s) { + return it(nextLine() ? "(endline)" : "(end)", ""); + } + + t = match(tx); + + if (!t) { + t = ""; + c = ""; + while (s && s < "!") { + s = s.substr(1); + } + if (s) { + errorAt("Unexpected '{a}'.", line, character, s.substr(0, 1)); + s = ""; + } + } else { + + // identifier + + if (isAlpha(c) || c === "_" || c === "$") { + return it("(identifier)", t); + } + + // number + + if (isDigit(c)) { + if (!isFinite(Number(t))) { + warningAt("Bad number '{a}'.", + line, character, t); + } + if (isAlpha(s.substr(0, 1))) { + warningAt("Missing space after '{a}'.", + line, character, t); + } + if (c === "0") { + d = t.substr(1, 1); + if (isDigit(d)) { + if (token.id !== ".") { + warningAt("Don't use extra leading zeros '{a}'.", + line, character, t); + } + } else if (jsonmode && (d === "x" || d === "X")) { + warningAt("Avoid 0x-. '{a}'.", + line, character, t); + } + } + if (t.substr(t.length - 1) === ".") { + warningAt( +"A trailing decimal point can be confused with a dot '{a}'.", line, character, t); + } + return it("(number)", t); + } + switch (t) { + + // string + + case "\"": + case "'": + return string(t); + + // // comment + + case "//": + s = ""; + token.comment = true; + break; + + // /* comment + + case "/*": + for (;;) { + i = s.search(lx); + if (i >= 0) { + break; + } + if (!nextLine()) { + errorAt("Unclosed comment.", line, character); + } + } + s = s.substr(i + 2); + token.comment = true; + break; + + // /*members /*jshint /*global + + case "/*members": + case "/*member": + case "/*jshint": + case "/*jslint": + case "/*global": + case "*/": + return { + value: t, + type: "special", + line: line, + character: character, + from: from + }; + + case "": + break; + // / + case "/": + if (s.charAt(0) === "=") { + errorAt("A regular expression literal can be confused with '/='.", + line, from); + } + + if (prereg) { + depth = 0; + captures = 0; + l = 0; + for (;;) { + b = true; + c = s.charAt(l); + l += 1; + switch (c) { + case "": + errorAt("Unclosed regular expression.", line, from); + return quit("Stopping.", line, from); + case "/": + if (depth > 0) { + warningAt("{a} unterminated regular expression " + + "group(s).", line, from + l, depth); + } + c = s.substr(0, l - 1); + q = { + g: true, + i: true, + m: true + }; + while (q[s.charAt(l)] === true) { + q[s.charAt(l)] = false; + l += 1; + } + character += l; + s = s.substr(l); + q = s.charAt(0); + if (q === "/" || q === "*") { + errorAt("Confusing regular expression.", + line, from); + } + return it("(regexp)", c); + case "\\": + c = s.charAt(l); + if (c < " ") { + warningAt( +"Unexpected control character in regular expression.", line, from + l); + } else if (c === "<") { + warningAt( +"Unexpected escaped character '{a}' in regular expression.", line, from + l, c); + } + l += 1; + break; + case "(": + depth += 1; + b = false; + if (s.charAt(l) === "?") { + l += 1; + switch (s.charAt(l)) { + case ":": + case "=": + case "!": + l += 1; + break; + default: + warningAt( +"Expected '{a}' and instead saw '{b}'.", line, from + l, ":", s.charAt(l)); + } + } else { + captures += 1; + } + break; + case "|": + b = false; + break; + case ")": + if (depth === 0) { + warningAt("Unescaped '{a}'.", + line, from + l, ")"); + } else { + depth -= 1; + } + break; + case " ": + q = 1; + while (s.charAt(l) === " ") { + l += 1; + q += 1; + } + if (q > 1) { + warningAt( +"Spaces are hard to count. Use {{a}}.", line, from + l, q); + } + break; + case "[": + c = s.charAt(l); + if (c === "^") { + l += 1; + if (s.charAt(l) === "]") { + errorAt("Unescaped '{a}'.", + line, from + l, "^"); + } + } + if (c === "]") { + warningAt("Empty class.", line, + from + l - 1); + } + isLiteral = false; + isInRange = false; +klass: + do { + c = s.charAt(l); + l += 1; + switch (c) { + case "[": + case "^": + warningAt("Unescaped '{a}'.", + line, from + l, c); + if (isInRange) { + isInRange = false; + } else { + isLiteral = true; + } + break; + case "-": + if (isLiteral && !isInRange) { + isLiteral = false; + isInRange = true; + } else if (isInRange) { + isInRange = false; + } else if (s.charAt(l) === "]") { + isInRange = true; + } else { + if (option.regexdash !== (l === 2 || (l === 3 && + s.charAt(1) === "^"))) { + warningAt("Unescaped '{a}'.", + line, from + l - 1, "-"); + } + isLiteral = true; + } + break; + case "]": + if (isInRange && !option.regexdash) { + warningAt("Unescaped '{a}'.", + line, from + l - 1, "-"); + } + break klass; + case "\\": + c = s.charAt(l); + if (c < " ") { + warningAt( +"Unexpected control character in regular expression.", line, from + l); + } else if (c === "<") { + warningAt( +"Unexpected escaped character '{a}' in regular expression.", line, from + l, c); + } + l += 1; + + // \w, \s and \d are never part of a character range + if (/[wsd]/i.test(c)) { + if (isInRange) { + warningAt("Unescaped '{a}'.", + line, from + l, "-"); + isInRange = false; + } + isLiteral = false; + } else if (isInRange) { + isInRange = false; + } else { + isLiteral = true; + } + break; + case "/": + warningAt("Unescaped '{a}'.", + line, from + l - 1, "/"); + + if (isInRange) { + isInRange = false; + } else { + isLiteral = true; + } + break; + case "<": + if (isInRange) { + isInRange = false; + } else { + isLiteral = true; + } + break; + default: + if (isInRange) { + isInRange = false; + } else { + isLiteral = true; + } + } + } while (c); + break; + case ".": + if (option.regexp) { + warningAt("Insecure '{a}'.", line, + from + l, c); + } + break; + case "]": + case "?": + case "{": + case "}": + case "+": + case "*": + warningAt("Unescaped '{a}'.", line, + from + l, c); + } + if (b) { + switch (s.charAt(l)) { + case "?": + case "+": + case "*": + l += 1; + if (s.charAt(l) === "?") { + l += 1; + } + break; + case "{": + l += 1; + c = s.charAt(l); + if (c < "0" || c > "9") { + warningAt( +"Expected a number and instead saw '{a}'.", line, from + l, c); + break; // No reason to continue checking numbers. + } + l += 1; + low = +c; + for (;;) { + c = s.charAt(l); + if (c < "0" || c > "9") { + break; + } + l += 1; + low = +c + (low * 10); + } + high = low; + if (c === ",") { + l += 1; + high = Infinity; + c = s.charAt(l); + if (c >= "0" && c <= "9") { + l += 1; + high = +c; + for (;;) { + c = s.charAt(l); + if (c < "0" || c > "9") { + break; + } + l += 1; + high = +c + (high * 10); + } + } + } + if (s.charAt(l) !== "}") { + warningAt( +"Expected '{a}' and instead saw '{b}'.", line, from + l, "}", c); + } else { + l += 1; + } + if (s.charAt(l) === "?") { + l += 1; + } + if (low > high) { + warningAt( +"'{a}' should not be greater than '{b}'.", line, from + l, low, high); + } + } + } + } + c = s.substr(0, l - 1); + character += l; + s = s.substr(l); + return it("(regexp)", c); + } + return it("(punctuator)", t); + + // punctuator + + case "#": + return it("(punctuator)", t); + default: + return it("(punctuator)", t); + } + } + } + } + }; + }()); + + + function addlabel(t, type, token) { + if (t === "hasOwnProperty") { + warning("'hasOwnProperty' is a really bad name."); + } + + // Define t in the current function in the current scope. + if (type === "exception") { + if (is_own(funct["(context)"], t)) { + if (funct[t] !== true && !option.node) { + warning("Value of '{a}' may be overwritten in IE.", nexttoken, t); + } + } + } + + if (is_own(funct, t) && !funct["(global)"]) { + if (funct[t] === true) { + if (option.latedef) + warning("'{a}' was used before it was defined.", nexttoken, t); + } else { + if (!option.shadow && type !== "exception") { + warning("'{a}' is already defined.", nexttoken, t); + } + } + } + + funct[t] = type; + + if (token) { + funct["(tokens)"][t] = token; + } + + if (funct["(global)"]) { + global[t] = funct; + if (is_own(implied, t)) { + if (option.latedef) + warning("'{a}' was used before it was defined.", nexttoken, t); + delete implied[t]; + } + } else { + scope[t] = funct; + } + } + + + function doOption() { + var nt = nexttoken; + var o = nt.value; + var quotmarkValue = option.quotmark; + var predef = {}; + var b, obj, filter, t, tn, v, minus; + + switch (o) { + case "*/": + error("Unbegun comment."); + break; + case "/*members": + case "/*member": + o = "/*members"; + if (!membersOnly) { + membersOnly = {}; + } + obj = membersOnly; + option.quotmark = false; + break; + case "/*jshint": + case "/*jslint": + obj = option; + filter = boolOptions; + break; + case "/*global": + obj = predef; + break; + default: + error("What?"); + } + + t = lex.token(); + +loop: + for (;;) { + minus = false; + for (;;) { + if (t.type === "special" && t.value === "*/") { + break loop; + } + if (t.id !== "(endline)" && t.id !== ",") { + break; + } + t = lex.token(); + } + + if (o === "/*global" && t.value === "-") { + minus = true; + t = lex.token(); + } + + if (t.type !== "(string)" && t.type !== "(identifier)" && o !== "/*members") { + error("Bad option.", t); + } + + v = lex.token(); + if (v.id === ":") { + v = lex.token(); + + if (obj === membersOnly) { + error("Expected '{a}' and instead saw '{b}'.", t, "*/", ":"); + } + + if (o === "/*jshint") { + checkOption(t.value, t); + } + + var numericVals = [ + "maxstatements", + "maxparams", + "maxdepth", + "maxcomplexity", + "maxerr", + "maxlen", + "indent" + ]; + + if (numericVals.indexOf(t.value) > -1 && (o === "/*jshint" || o === "/*jslint")) { + b = +v.value; + + if (typeof b !== "number" || !isFinite(b) || b <= 0 || Math.floor(b) !== b) { + error("Expected a small integer and instead saw '{a}'.", v, v.value); + } + + if (t.value === "indent") + obj.white = true; + + obj[t.value] = b; + } else if (t.value === "validthis") { + if (funct["(global)"]) { + error("Option 'validthis' can't be used in a global scope."); + } else { + if (v.value === "true" || v.value === "false") + obj[t.value] = v.value === "true"; + else + error("Bad option value.", v); + } + } else if (t.value === "quotmark" && (o === "/*jshint")) { + switch (v.value) { + case "true": + obj.quotmark = true; + break; + case "false": + obj.quotmark = false; + break; + case "double": + case "single": + obj.quotmark = v.value; + break; + default: + error("Bad option value.", v); + } + } else if (v.value === "true" || v.value === "false") { + if (o === "/*jslint") { + tn = renamedOptions[t.value] || t.value; + obj[tn] = v.value === "true"; + if (invertedOptions[tn] !== undefined) { + obj[tn] = !obj[tn]; + } + } else { + obj[t.value] = v.value === "true"; + } + + if (t.value === "newcap") + obj["(explicitNewcap)"] = true; + } else { + error("Bad option value.", v); + } + t = lex.token(); + } else { + if (o === "/*jshint" || o === "/*jslint") { + error("Missing option value.", t); + } + + obj[t.value] = false; + + if (o === "/*global" && minus === true) { + JSHINT.blacklist[t.value] = t.value; + updatePredefined(); + } + + t = v; + } + } + + if (o === "/*members") { + option.quotmark = quotmarkValue; + } + + combine(predefined, predef); + + for (var key in predef) { + if (is_own(predef, key)) { + declared[key] = nt; + } + } + + if (filter) { + assume(); + } + } + + +// We need a peek function. If it has an argument, it peeks that much farther +// ahead. It is used to distinguish +// for ( var i in ... +// from +// for ( var i = ... + + function peek(p) { + var i = p || 0, j = 0, t; + + while (j <= i) { + t = lookahead[j]; + if (!t) { + t = lookahead[j] = lex.token(); + } + j += 1; + } + return t; + } + + + +// Produce the next token. It looks for programming errors. + + function advance(id, t) { + switch (token.id) { + case "(number)": + if (nexttoken.id === ".") { + warning("A dot following a number can be confused with a decimal point.", token); + } + break; + case "-": + if (nexttoken.id === "-" || nexttoken.id === "--") { + warning("Confusing minusses."); + } + break; + case "+": + if (nexttoken.id === "+" || nexttoken.id === "++") { + warning("Confusing plusses."); + } + break; + } + + if (token.type === "(string)" || token.identifier) { + anonname = token.value; + } + + if (id && nexttoken.id !== id) { + if (t) { + if (nexttoken.id === "(end)") { + warning("Unmatched '{a}'.", t, t.id); + } else { + warning("Expected '{a}' to match '{b}' from line {c} and instead saw '{d}'.", + nexttoken, id, t.id, t.line, nexttoken.value); + } + } else if (nexttoken.type !== "(identifier)" || + nexttoken.value !== id) { + warning("Expected '{a}' and instead saw '{b}'.", + nexttoken, id, nexttoken.value); + } + } + + prevtoken = token; + token = nexttoken; + for (;;) { + nexttoken = lookahead.shift() || lex.token(); + if (nexttoken.id === "(end)" || nexttoken.id === "(error)") { + return; + } + if (nexttoken.type === "special") { + doOption(); + } else { + if (nexttoken.id !== "(endline)") { + break; + } + } + } + } + + +// This is the heart of JSHINT, the Pratt parser. In addition to parsing, it +// is looking for ad hoc lint patterns. We add .fud to Pratt's model, which is +// like .nud except that it is only used on the first token of a statement. +// Having .fud makes it much easier to define statement-oriented languages like +// JavaScript. I retained Pratt's nomenclature. + +// .nud Null denotation +// .fud First null denotation +// .led Left denotation +// lbp Left binding power +// rbp Right binding power + +// They are elements of the parsing method called Top Down Operator Precedence. + + function expression(rbp, initial) { + var left, isArray = false, isObject = false; + + if (nexttoken.id === "(end)") + error("Unexpected early end of program.", token); + + advance(); + if (initial) { + anonname = "anonymous"; + funct["(verb)"] = token.value; + } + if (initial === true && token.fud) { + left = token.fud(); + } else { + if (token.nud) { + left = token.nud(); + } else { + if (nexttoken.type === "(number)" && token.id === ".") { + warning("A leading decimal point can be confused with a dot: '.{a}'.", + token, nexttoken.value); + advance(); + return token; + } else { + error("Expected an identifier and instead saw '{a}'.", + token, token.id); + } + } + while (rbp < nexttoken.lbp) { + isArray = token.value === "Array"; + isObject = token.value === "Object"; + + // #527, new Foo.Array(), Foo.Array(), new Foo.Object(), Foo.Object() + // Line breaks in IfStatement heads exist to satisfy the checkJSHint + // "Line too long." error. + if (left && (left.value || (left.first && left.first.value))) { + // If the left.value is not "new", or the left.first.value is a "." + // then safely assume that this is not "new Array()" and possibly + // not "new Object()"... + if (left.value !== "new" || + (left.first && left.first.value && left.first.value === ".")) { + isArray = false; + // ...In the case of Object, if the left.value and token.value + // are not equal, then safely assume that this not "new Object()" + if (left.value !== token.value) { + isObject = false; + } + } + } + + advance(); + if (isArray && token.id === "(" && nexttoken.id === ")") + warning("Use the array literal notation [].", token); + if (isObject && token.id === "(" && nexttoken.id === ")") + warning("Use the object literal notation {}.", token); + if (token.led) { + left = token.led(left); + } else { + error("Expected an operator and instead saw '{a}'.", + token, token.id); + } + } + } + return left; + } + + +// Functions for conformance of style. + + function adjacent(left, right) { + left = left || token; + right = right || nexttoken; + if (option.white) { + if (left.character !== right.from && left.line === right.line) { + left.from += (left.character - left.from); + warning("Unexpected space after '{a}'.", left, left.value); + } + } + } + + function nobreak(left, right) { + left = left || token; + right = right || nexttoken; + if (option.white && (left.character !== right.from || left.line !== right.line)) { + warning("Unexpected space before '{a}'.", right, right.value); + } + } + + function nospace(left, right) { + left = left || token; + right = right || nexttoken; + if (option.white && !left.comment) { + if (left.line === right.line) { + adjacent(left, right); + } + } + } + + function nonadjacent(left, right) { + if (option.white) { + left = left || token; + right = right || nexttoken; + if (left.value === ";" && right.value === ";") { + return; + } + if (left.line === right.line && left.character === right.from) { + left.from += (left.character - left.from); + warning("Missing space after '{a}'.", + left, left.value); + } + } + } + + function nobreaknonadjacent(left, right) { + left = left || token; + right = right || nexttoken; + if (!option.laxbreak && left.line !== right.line) { + warning("Bad line breaking before '{a}'.", right, right.id); + } else if (option.white) { + left = left || token; + right = right || nexttoken; + if (left.character === right.from) { + left.from += (left.character - left.from); + warning("Missing space after '{a}'.", + left, left.value); + } + } + } + + function indentation(bias) { + var i; + if (option.white && nexttoken.id !== "(end)") { + i = indent + (bias || 0); + if (nexttoken.from !== i) { + warning( +"Expected '{a}' to have an indentation at {b} instead at {c}.", + nexttoken, nexttoken.value, i, nexttoken.from); + } + } + } + + function nolinebreak(t) { + t = t || token; + if (t.line !== nexttoken.line) { + warning("Line breaking error '{a}'.", t, t.value); + } + } + + + function comma() { + if (token.line !== nexttoken.line) { + if (!option.laxcomma) { + if (comma.first) { + warning("Comma warnings can be turned off with 'laxcomma'"); + comma.first = false; + } + warning("Bad line breaking before '{a}'.", token, nexttoken.id); + } + } else if (!token.comment && token.character !== nexttoken.from && option.white) { + token.from += (token.character - token.from); + warning("Unexpected space after '{a}'.", token, token.value); + } + advance(","); + nonadjacent(token, nexttoken); + } + + +// Functional constructors for making the symbols that will be inherited by +// tokens. + + function symbol(s, p) { + var x = syntax[s]; + if (!x || typeof x !== "object") { + syntax[s] = x = { + id: s, + lbp: p, + value: s + }; + } + return x; + } + + + function delim(s) { + return symbol(s, 0); + } + + + function stmt(s, f) { + var x = delim(s); + x.identifier = x.reserved = true; + x.fud = f; + return x; + } + + + function blockstmt(s, f) { + var x = stmt(s, f); + x.block = true; + return x; + } + + + function reserveName(x) { + var c = x.id.charAt(0); + if ((c >= "a" && c <= "z") || (c >= "A" && c <= "Z")) { + x.identifier = x.reserved = true; + } + return x; + } + + + function prefix(s, f) { + var x = symbol(s, 150); + reserveName(x); + x.nud = (typeof f === "function") ? f : function () { + this.right = expression(150); + this.arity = "unary"; + if (this.id === "++" || this.id === "--") { + if (option.plusplus) { + warning("Unexpected use of '{a}'.", this, this.id); + } else if ((!this.right.identifier || this.right.reserved) && + this.right.id !== "." && this.right.id !== "[") { + warning("Bad operand.", this); + } + } + return this; + }; + return x; + } + + + function type(s, f) { + var x = delim(s); + x.type = s; + x.nud = f; + return x; + } + + + function reserve(s, f) { + var x = type(s, f); + x.identifier = x.reserved = true; + return x; + } + + + function reservevar(s, v) { + return reserve(s, function () { + if (typeof v === "function") { + v(this); + } + return this; + }); + } + + + function infix(s, f, p, w) { + var x = symbol(s, p); + reserveName(x); + x.led = function (left) { + if (!w) { + nobreaknonadjacent(prevtoken, token); + nonadjacent(token, nexttoken); + } + if (s === "in" && left.id === "!") { + warning("Confusing use of '{a}'.", left, "!"); + } + if (typeof f === "function") { + return f(left, this); + } else { + this.left = left; + this.right = expression(p); + return this; + } + }; + return x; + } + + + function relation(s, f) { + var x = symbol(s, 100); + x.led = function (left) { + nobreaknonadjacent(prevtoken, token); + nonadjacent(token, nexttoken); + var right = expression(100); + + if (isIdentifier(left, "NaN") || isIdentifier(right, "NaN")) { + warning("Use the isNaN function to compare with NaN.", this); + } else if (f) { + f.apply(this, [left, right]); + } + if (left.id === "!") { + warning("Confusing use of '{a}'.", left, "!"); + } + if (right.id === "!") { + warning("Confusing use of '{a}'.", right, "!"); + } + this.left = left; + this.right = right; + return this; + }; + return x; + } + + + function isPoorRelation(node) { + return node && + ((node.type === "(number)" && +node.value === 0) || + (node.type === "(string)" && node.value === "") || + (node.type === "null" && !option.eqnull) || + node.type === "true" || + node.type === "false" || + node.type === "undefined"); + } + + + function assignop(s) { + symbol(s, 20).exps = true; + + return infix(s, function (left, that) { + that.left = left; + + if (predefined[left.value] === false && + scope[left.value]["(global)"] === true) { + warning("Read only.", left); + } else if (left["function"]) { + warning("'{a}' is a function.", left, left.value); + } + + if (left) { + if (option.esnext && funct[left.value] === "const") { + warning("Attempting to override '{a}' which is a constant", left, left.value); + } + + if (left.id === "." || left.id === "[") { + if (!left.left || left.left.value === "arguments") { + warning("Bad assignment.", that); + } + that.right = expression(19); + return that; + } else if (left.identifier && !left.reserved) { + if (funct[left.value] === "exception") { + warning("Do not assign to the exception parameter.", left); + } + that.right = expression(19); + return that; + } + + if (left === syntax["function"]) { + warning( +"Expected an identifier in an assignment and instead saw a function invocation.", + token); + } + } + + error("Bad assignment.", that); + }, 20); + } + + + function bitwise(s, f, p) { + var x = symbol(s, p); + reserveName(x); + x.led = (typeof f === "function") ? f : function (left) { + if (option.bitwise) { + warning("Unexpected use of '{a}'.", this, this.id); + } + this.left = left; + this.right = expression(p); + return this; + }; + return x; + } + + + function bitwiseassignop(s) { + symbol(s, 20).exps = true; + return infix(s, function (left, that) { + if (option.bitwise) { + warning("Unexpected use of '{a}'.", that, that.id); + } + nonadjacent(prevtoken, token); + nonadjacent(token, nexttoken); + if (left) { + if (left.id === "." || left.id === "[" || + (left.identifier && !left.reserved)) { + expression(19); + return that; + } + if (left === syntax["function"]) { + warning( +"Expected an identifier in an assignment, and instead saw a function invocation.", + token); + } + return that; + } + error("Bad assignment.", that); + }, 20); + } + + + function suffix(s) { + var x = symbol(s, 150); + x.led = function (left) { + if (option.plusplus) { + warning("Unexpected use of '{a}'.", this, this.id); + } else if ((!left.identifier || left.reserved) && + left.id !== "." && left.id !== "[") { + warning("Bad operand.", this); + } + this.left = left; + return this; + }; + return x; + } + + + // fnparam means that this identifier is being defined as a function + // argument (see identifier()) + function optionalidentifier(fnparam) { + if (nexttoken.identifier) { + advance(); + if (token.reserved && !option.es5) { + // `undefined` as a function param is a common pattern to protect + // against the case when somebody does `undefined = true` and + // help with minification. More info: https://gist.github.com/315916 + if (!fnparam || token.value !== "undefined") { + warning("Expected an identifier and instead saw '{a}' (a reserved word).", + token, token.id); + } + } + return token.value; + } + } + + // fnparam means that this identifier is being defined as a function + // argument + function identifier(fnparam) { + var i = optionalidentifier(fnparam); + if (i) { + return i; + } + if (token.id === "function" && nexttoken.id === "(") { + warning("Missing name in function declaration."); + } else { + error("Expected an identifier and instead saw '{a}'.", + nexttoken, nexttoken.value); + } + } + + + function reachable(s) { + var i = 0, t; + if (nexttoken.id !== ";" || noreach) { + return; + } + for (;;) { + t = peek(i); + if (t.reach) { + return; + } + if (t.id !== "(endline)") { + if (t.id === "function") { + if (!option.latedef) { + break; + } + warning( +"Inner functions should be listed at the top of the outer function.", t); + break; + } + warning("Unreachable '{a}' after '{b}'.", t, t.value, s); + break; + } + i += 1; + } + } + + + function statement(noindent) { + var i = indent, r, s = scope, t = nexttoken; + + if (t.id === ";") { + advance(";"); + return; + } + + // Is this a labelled statement? + + if (t.identifier && !t.reserved && peek().id === ":") { + advance(); + advance(":"); + scope = Object.create(s); + addlabel(t.value, "label"); + + if (!nexttoken.labelled && nexttoken.value !== "{") { + warning("Label '{a}' on {b} statement.", nexttoken, t.value, nexttoken.value); + } + + if (jx.test(t.value + ":")) { + warning("Label '{a}' looks like a javascript url.", t, t.value); + } + + nexttoken.label = t.value; + t = nexttoken; + } + + // Is it a lonely block? + + if (t.id === "{") { + block(true, true); + return; + } + + // Parse the statement. + + if (!noindent) { + indentation(); + } + r = expression(0, true); + + // Look for the final semicolon. + + if (!t.block) { + if (!option.expr && (!r || !r.exps)) { + warning("Expected an assignment or function call and instead saw an expression.", + token); + } else if (option.nonew && r.id === "(" && r.left.id === "new") { + warning("Do not use 'new' for side effects.", t); + } + + if (nexttoken.id === ",") { + return comma(); + } + + if (nexttoken.id !== ";") { + if (!option.asi) { + // If this is the last statement in a block that ends on + // the same line *and* option lastsemic is on, ignore the warning. + // Otherwise, complain about missing semicolon. + if (!option.lastsemic || nexttoken.id !== "}" || + nexttoken.line !== token.line) { + warningAt("Missing semicolon.", token.line, token.character); + } + } + } else { + adjacent(token, nexttoken); + advance(";"); + nonadjacent(token, nexttoken); + } + } + +// Restore the indentation. + + indent = i; + scope = s; + return r; + } + + + function statements(startLine) { + var a = [], p; + + while (!nexttoken.reach && nexttoken.id !== "(end)") { + if (nexttoken.id === ";") { + p = peek(); + if (!p || p.id !== "(") { + warning("Unnecessary semicolon."); + } + advance(";"); + } else { + a.push(statement(startLine === nexttoken.line)); + } + } + return a; + } + + + /* + * read all directives + * recognizes a simple form of asi, but always + * warns, if it is used + */ + function directives() { + var i, p, pn; + + for (;;) { + if (nexttoken.id === "(string)") { + p = peek(0); + if (p.id === "(endline)") { + i = 1; + do { + pn = peek(i); + i = i + 1; + } while (pn.id === "(endline)"); + + if (pn.id !== ";") { + if (pn.id !== "(string)" && pn.id !== "(number)" && + pn.id !== "(regexp)" && pn.identifier !== true && + pn.id !== "}") { + break; + } + warning("Missing semicolon.", nexttoken); + } else { + p = pn; + } + } else if (p.id === "}") { + // directive with no other statements, warn about missing semicolon + warning("Missing semicolon.", p); + } else if (p.id !== ";") { + break; + } + + indentation(); + advance(); + if (directive[token.value]) { + warning("Unnecessary directive \"{a}\".", token, token.value); + } + + if (token.value === "use strict") { + if (!option["(explicitNewcap)"]) + option.newcap = true; + option.undef = true; + } + + // there's no directive negation, so always set to true + directive[token.value] = true; + + if (p.id === ";") { + advance(";"); + } + continue; + } + break; + } + } + + + /* + * Parses a single block. A block is a sequence of statements wrapped in + * braces. + * + * ordinary - true for everything but function bodies and try blocks. + * stmt - true if block can be a single statement (e.g. in if/for/while). + * isfunc - true if block is a function body + */ + function block(ordinary, stmt, isfunc) { + var a, + b = inblock, + old_indent = indent, + m, + s = scope, + t, + line, + d; + + inblock = ordinary; + + if (!ordinary || !option.funcscope) + scope = Object.create(scope); + + nonadjacent(token, nexttoken); + t = nexttoken; + + var metrics = funct["(metrics)"]; + metrics.nestedBlockDepth += 1; + metrics.verifyMaxNestedBlockDepthPerFunction(); + + if (nexttoken.id === "{") { + advance("{"); + line = token.line; + if (nexttoken.id !== "}") { + indent += option.indent; + while (!ordinary && nexttoken.from > indent) { + indent += option.indent; + } + + if (isfunc) { + m = {}; + for (d in directive) { + if (is_own(directive, d)) { + m[d] = directive[d]; + } + } + directives(); + + if (option.strict && funct["(context)"]["(global)"]) { + if (!m["use strict"] && !directive["use strict"]) { + warning("Missing \"use strict\" statement."); + } + } + } + + a = statements(line); + + metrics.statementCount += a.length; + + if (isfunc) { + directive = m; + } + + indent -= option.indent; + if (line !== nexttoken.line) { + indentation(); + } + } else if (line !== nexttoken.line) { + indentation(); + } + advance("}", t); + indent = old_indent; + } else if (!ordinary) { + error("Expected '{a}' and instead saw '{b}'.", + nexttoken, "{", nexttoken.value); + } else { + if (!stmt || option.curly) + warning("Expected '{a}' and instead saw '{b}'.", + nexttoken, "{", nexttoken.value); + + noreach = true; + indent += option.indent; + // test indentation only if statement is in new line + a = [statement(nexttoken.line === token.line)]; + indent -= option.indent; + noreach = false; + } + funct["(verb)"] = null; + if (!ordinary || !option.funcscope) scope = s; + inblock = b; + if (ordinary && option.noempty && (!a || a.length === 0)) { + warning("Empty block."); + } + metrics.nestedBlockDepth -= 1; + return a; + } + + + function countMember(m) { + if (membersOnly && typeof membersOnly[m] !== "boolean") { + warning("Unexpected /*member '{a}'.", token, m); + } + if (typeof member[m] === "number") { + member[m] += 1; + } else { + member[m] = 1; + } + } + + + function note_implied(token) { + var name = token.value, line = token.line, a = implied[name]; + if (typeof a === "function") { + a = false; + } + + if (!a) { + a = [line]; + implied[name] = a; + } else if (a[a.length - 1] !== line) { + a.push(line); + } + } + + + // Build the syntax table by declaring the syntactic elements of the language. + + type("(number)", function () { + return this; + }); + + type("(string)", function () { + return this; + }); + + syntax["(identifier)"] = { + type: "(identifier)", + lbp: 0, + identifier: true, + nud: function () { + var v = this.value, + s = scope[v], + f; + + if (typeof s === "function") { + // Protection against accidental inheritance. + s = undefined; + } else if (typeof s === "boolean") { + f = funct; + funct = functions[0]; + addlabel(v, "var"); + s = funct; + funct = f; + } + + // The name is in scope and defined in the current function. + if (funct === s) { + // Change 'unused' to 'var', and reject labels. + switch (funct[v]) { + case "unused": + funct[v] = "var"; + break; + case "unction": + funct[v] = "function"; + this["function"] = true; + break; + case "function": + this["function"] = true; + break; + case "label": + warning("'{a}' is a statement label.", token, v); + break; + } + } else if (funct["(global)"]) { + // The name is not defined in the function. If we are in the global + // scope, then we have an undefined variable. + // + // Operators typeof and delete do not raise runtime errors even if + // the base object of a reference is null so no need to display warning + // if we're inside of typeof or delete. + + if (option.undef && typeof predefined[v] !== "boolean") { + // Attempting to subscript a null reference will throw an + // error, even within the typeof and delete operators + if (!(anonname === "typeof" || anonname === "delete") || + (nexttoken && (nexttoken.value === "." || nexttoken.value === "["))) { + + isundef(funct, "'{a}' is not defined.", token, v); + } + } + + note_implied(token); + } else { + // If the name is already defined in the current + // function, but not as outer, then there is a scope error. + + switch (funct[v]) { + case "closure": + case "function": + case "var": + case "unused": + warning("'{a}' used out of scope.", token, v); + break; + case "label": + warning("'{a}' is a statement label.", token, v); + break; + case "outer": + case "global": + break; + default: + // If the name is defined in an outer function, make an outer entry, + // and if it was unused, make it var. + if (s === true) { + funct[v] = true; + } else if (s === null) { + warning("'{a}' is not allowed.", token, v); + note_implied(token); + } else if (typeof s !== "object") { + // Operators typeof and delete do not raise runtime errors even + // if the base object of a reference is null so no need to + // display warning if we're inside of typeof or delete. + if (option.undef) { + // Attempting to subscript a null reference will throw an + // error, even within the typeof and delete operators + if (!(anonname === "typeof" || anonname === "delete") || + (nexttoken && + (nexttoken.value === "." || nexttoken.value === "["))) { + + isundef(funct, "'{a}' is not defined.", token, v); + } + } + funct[v] = true; + note_implied(token); + } else { + switch (s[v]) { + case "function": + case "unction": + this["function"] = true; + s[v] = "closure"; + funct[v] = s["(global)"] ? "global" : "outer"; + break; + case "var": + case "unused": + s[v] = "closure"; + funct[v] = s["(global)"] ? "global" : "outer"; + break; + case "closure": + funct[v] = s["(global)"] ? "global" : "outer"; + break; + case "label": + warning("'{a}' is a statement label.", token, v); + } + } + } + } + return this; + }, + led: function () { + error("Expected an operator and instead saw '{a}'.", + nexttoken, nexttoken.value); + } + }; + + type("(regexp)", function () { + return this; + }); + + +// ECMAScript parser + + delim("(endline)"); + delim("(begin)"); + delim("(end)").reach = true; + delim(""); + delim("(error)").reach = true; + delim("}").reach = true; + delim(")"); + delim("]"); + delim("\"").reach = true; + delim("'").reach = true; + delim(";"); + delim(":").reach = true; + delim(","); + delim("#"); + delim("@"); + reserve("else"); + reserve("case").reach = true; + reserve("catch"); + reserve("default").reach = true; + reserve("finally"); + reservevar("arguments", function (x) { + if (directive["use strict"] && funct["(global)"]) { + warning("Strict violation.", x); + } + }); + reservevar("eval"); + reservevar("false"); + reservevar("Infinity"); + reservevar("null"); + reservevar("this", function (x) { + if (directive["use strict"] && !option.validthis && ((funct["(statement)"] && + funct["(name)"].charAt(0) > "Z") || funct["(global)"])) { + warning("Possible strict violation.", x); + } + }); + reservevar("true"); + reservevar("undefined"); + assignop("=", "assign", 20); + assignop("+=", "assignadd", 20); + assignop("-=", "assignsub", 20); + assignop("*=", "assignmult", 20); + assignop("/=", "assigndiv", 20).nud = function () { + error("A regular expression literal can be confused with '/='."); + }; + assignop("%=", "assignmod", 20); + bitwiseassignop("&=", "assignbitand", 20); + bitwiseassignop("|=", "assignbitor", 20); + bitwiseassignop("^=", "assignbitxor", 20); + bitwiseassignop("<<=", "assignshiftleft", 20); + bitwiseassignop(">>=", "assignshiftright", 20); + bitwiseassignop(">>>=", "assignshiftrightunsigned", 20); + infix("?", function (left, that) { + that.left = left; + that.right = expression(10); + advance(":"); + that["else"] = expression(10); + return that; + }, 30); + + infix("||", "or", 40); + infix("&&", "and", 50); + bitwise("|", "bitor", 70); + bitwise("^", "bitxor", 80); + bitwise("&", "bitand", 90); + relation("==", function (left, right) { + var eqnull = option.eqnull && (left.value === "null" || right.value === "null"); + + if (!eqnull && option.eqeqeq) + warning("Expected '{a}' and instead saw '{b}'.", this, "===", "=="); + else if (isPoorRelation(left)) + warning("Use '{a}' to compare with '{b}'.", this, "===", left.value); + else if (isPoorRelation(right)) + warning("Use '{a}' to compare with '{b}'.", this, "===", right.value); + + return this; + }); + relation("==="); + relation("!=", function (left, right) { + var eqnull = option.eqnull && + (left.value === "null" || right.value === "null"); + + if (!eqnull && option.eqeqeq) { + warning("Expected '{a}' and instead saw '{b}'.", + this, "!==", "!="); + } else if (isPoorRelation(left)) { + warning("Use '{a}' to compare with '{b}'.", + this, "!==", left.value); + } else if (isPoorRelation(right)) { + warning("Use '{a}' to compare with '{b}'.", + this, "!==", right.value); + } + return this; + }); + relation("!=="); + relation("<"); + relation(">"); + relation("<="); + relation(">="); + bitwise("<<", "shiftleft", 120); + bitwise(">>", "shiftright", 120); + bitwise(">>>", "shiftrightunsigned", 120); + infix("in", "in", 120); + infix("instanceof", "instanceof", 120); + infix("+", function (left, that) { + var right = expression(130); + if (left && right && left.id === "(string)" && right.id === "(string)") { + left.value += right.value; + left.character = right.character; + if (!option.scripturl && jx.test(left.value)) { + warning("JavaScript URL.", left); + } + return left; + } + that.left = left; + that.right = right; + return that; + }, 130); + prefix("+", "num"); + prefix("+++", function () { + warning("Confusing pluses."); + this.right = expression(150); + this.arity = "unary"; + return this; + }); + infix("+++", function (left) { + warning("Confusing pluses."); + this.left = left; + this.right = expression(130); + return this; + }, 130); + infix("-", "sub", 130); + prefix("-", "neg"); + prefix("---", function () { + warning("Confusing minuses."); + this.right = expression(150); + this.arity = "unary"; + return this; + }); + infix("---", function (left) { + warning("Confusing minuses."); + this.left = left; + this.right = expression(130); + return this; + }, 130); + infix("*", "mult", 140); + infix("/", "div", 140); + infix("%", "mod", 140); + + suffix("++", "postinc"); + prefix("++", "preinc"); + syntax["++"].exps = true; + + suffix("--", "postdec"); + prefix("--", "predec"); + syntax["--"].exps = true; + prefix("delete", function () { + var p = expression(0); + if (!p || (p.id !== "." && p.id !== "[")) { + warning("Variables should not be deleted."); + } + this.first = p; + return this; + }).exps = true; + + prefix("~", function () { + if (option.bitwise) { + warning("Unexpected '{a}'.", this, "~"); + } + expression(150); + return this; + }); + + prefix("!", function () { + this.right = expression(150); + this.arity = "unary"; + if (bang[this.right.id] === true) { + warning("Confusing use of '{a}'.", this, "!"); + } + return this; + }); + prefix("typeof", "typeof"); + prefix("new", function () { + var c = expression(155), i; + if (c && c.id !== "function") { + if (c.identifier) { + c["new"] = true; + switch (c.value) { + case "Number": + case "String": + case "Boolean": + case "Math": + case "JSON": + warning("Do not use {a} as a constructor.", prevtoken, c.value); + break; + case "Function": + if (!option.evil) { + warning("The Function constructor is eval."); + } + break; + case "Date": + case "RegExp": + break; + default: + if (c.id !== "function") { + i = c.value.substr(0, 1); + if (option.newcap && (i < "A" || i > "Z") && !is_own(global, c.value)) { + warning("A constructor name should start with an uppercase letter.", + token); + } + } + } + } else { + if (c.id !== "." && c.id !== "[" && c.id !== "(") { + warning("Bad constructor.", token); + } + } + } else { + if (!option.supernew) + warning("Weird construction. Delete 'new'.", this); + } + adjacent(token, nexttoken); + if (nexttoken.id !== "(" && !option.supernew) { + warning("Missing '()' invoking a constructor.", + token, token.value); + } + this.first = c; + return this; + }); + syntax["new"].exps = true; + + prefix("void").exps = true; + + infix(".", function (left, that) { + adjacent(prevtoken, token); + nobreak(); + var m = identifier(); + if (typeof m === "string") { + countMember(m); + } + that.left = left; + that.right = m; + if (left && left.value === "arguments" && (m === "callee" || m === "caller")) { + if (option.noarg) + warning("Avoid arguments.{a}.", left, m); + else if (directive["use strict"]) + error("Strict violation."); + } else if (!option.evil && left && left.value === "document" && + (m === "write" || m === "writeln")) { + warning("document.write can be a form of eval.", left); + } + if (!option.evil && (m === "eval" || m === "execScript")) { + warning("eval is evil."); + } + return that; + }, 160, true); + + infix("(", function (left, that) { + if (prevtoken.id !== "}" && prevtoken.id !== ")") { + nobreak(prevtoken, token); + } + nospace(); + if (option.immed && !left.immed && left.id === "function") { + warning("Wrap an immediate function invocation in parentheses " + + "to assist the reader in understanding that the expression " + + "is the result of a function, and not the function itself."); + } + var n = 0, + p = []; + if (left) { + if (left.type === "(identifier)") { + if (left.value.match(/^[A-Z]([A-Z0-9_$]*[a-z][A-Za-z0-9_$]*)?$/)) { + if ("Number String Boolean Date Object".indexOf(left.value) === -1) { + if (left.value === "Math") { + warning("Math is not a function.", left); + } else if (option.newcap) { + warning("Missing 'new' prefix when invoking a constructor.", left); + } + } + } + } + } + if (nexttoken.id !== ")") { + for (;;) { + p[p.length] = expression(10); + n += 1; + if (nexttoken.id !== ",") { + break; + } + comma(); + } + } + advance(")"); + nospace(prevtoken, token); + if (typeof left === "object") { + if (left.value === "parseInt" && n === 1) { + warning("Missing radix parameter.", token); + } + if (!option.evil) { + if (left.value === "eval" || left.value === "Function" || + left.value === "execScript") { + warning("eval is evil.", left); + + if (p[0] && [0].id === "(string)") { + addInternalSrc(left, p[0].value); + } + } else if (p[0] && p[0].id === "(string)" && + (left.value === "setTimeout" || + left.value === "setInterval")) { + warning( + "Implied eval is evil. Pass a function instead of a string.", left); + addInternalSrc(left, p[0].value); + + // window.setTimeout/setInterval + } else if (p[0] && p[0].id === "(string)" && + left.value === "." && + left.left.value === "window" && + (left.right === "setTimeout" || + left.right === "setInterval")) { + warning( + "Implied eval is evil. Pass a function instead of a string.", left); + addInternalSrc(left, p[0].value); + } + } + if (!left.identifier && left.id !== "." && left.id !== "[" && + left.id !== "(" && left.id !== "&&" && left.id !== "||" && + left.id !== "?") { + warning("Bad invocation.", left); + } + } + that.left = left; + return that; + }, 155, true).exps = true; + + prefix("(", function () { + nospace(); + if (nexttoken.id === "function") { + nexttoken.immed = true; + } + var v = expression(0); + advance(")", this); + nospace(prevtoken, token); + if (option.immed && v.id === "function") { + if (nexttoken.id !== "(" && + (nexttoken.id !== "." || (peek().value !== "call" && peek().value !== "apply"))) { + warning( +"Do not wrap function literals in parens unless they are to be immediately invoked.", + this); + } + } + + return v; + }); + + infix("[", function (left, that) { + nobreak(prevtoken, token); + nospace(); + var e = expression(0), s; + if (e && e.type === "(string)") { + if (!option.evil && (e.value === "eval" || e.value === "execScript")) { + warning("eval is evil.", that); + } + countMember(e.value); + if (!option.sub && ix.test(e.value)) { + s = syntax[e.value]; + if (!s || !s.reserved) { + warning("['{a}'] is better written in dot notation.", + prevtoken, e.value); + } + } + } + advance("]", that); + nospace(prevtoken, token); + that.left = left; + that.right = e; + return that; + }, 160, true); + + prefix("[", function () { + var b = token.line !== nexttoken.line; + this.first = []; + if (b) { + indent += option.indent; + if (nexttoken.from === indent + option.indent) { + indent += option.indent; + } + } + while (nexttoken.id !== "(end)") { + while (nexttoken.id === ",") { + if (!option.es5) + warning("Extra comma."); + advance(","); + } + if (nexttoken.id === "]") { + break; + } + if (b && token.line !== nexttoken.line) { + indentation(); + } + this.first.push(expression(10)); + if (nexttoken.id === ",") { + comma(); + if (nexttoken.id === "]" && !option.es5) { + warning("Extra comma.", token); + break; + } + } else { + break; + } + } + if (b) { + indent -= option.indent; + indentation(); + } + advance("]", this); + return this; + }, 160); + + + function property_name() { + var id = optionalidentifier(true); + if (!id) { + if (nexttoken.id === "(string)") { + id = nexttoken.value; + advance(); + } else if (nexttoken.id === "(number)") { + id = nexttoken.value.toString(); + advance(); + } + } + return id; + } + + + function functionparams() { + var next = nexttoken; + var params = []; + var ident; + + advance("("); + nospace(); + + if (nexttoken.id === ")") { + advance(")"); + return; + } + + for (;;) { + ident = identifier(true); + params.push(ident); + addlabel(ident, "unused", token); + if (nexttoken.id === ",") { + comma(); + } else { + advance(")", next); + nospace(prevtoken, token); + return params; + } + } + } + + + function doFunction(name, statement) { + var f; + var oldOption = option; + var oldScope = scope; + + option = Object.create(option); + scope = Object.create(scope); + + funct = { + "(name)" : name || "\"" + anonname + "\"", + "(line)" : nexttoken.line, + "(character)": nexttoken.character, + "(context)" : funct, + "(breakage)" : 0, + "(loopage)" : 0, + "(metrics)" : createMetrics(nexttoken), + "(scope)" : scope, + "(statement)": statement, + "(tokens)" : {} + }; + + f = funct; + token.funct = funct; + + functions.push(funct); + + if (name) { + addlabel(name, "function"); + } + + funct["(params)"] = functionparams(); + funct["(metrics)"].verifyMaxParametersPerFunction(funct["(params)"]); + + block(false, false, true); + + funct["(metrics)"].verifyMaxStatementsPerFunction(); + funct["(metrics)"].verifyMaxComplexityPerFunction(); + + scope = oldScope; + option = oldOption; + funct["(last)"] = token.line; + funct["(lastcharacter)"] = token.character; + funct = funct["(context)"]; + + return f; + } + + function createMetrics(functionStartToken) { + return { + statementCount: 0, + nestedBlockDepth: -1, + ComplexityCount: 1, + verifyMaxStatementsPerFunction: function () { + if (option.maxstatements && + this.statementCount > option.maxstatements) { + var message = "Too many statements per function (" + this.statementCount + ")."; + warning(message, functionStartToken); + } + }, + + verifyMaxParametersPerFunction: function (params) { + params = params || []; + + if (option.maxparams && params.length > option.maxparams) { + var message = "Too many parameters per function (" + params.length + ")."; + warning(message, functionStartToken); + } + }, + + verifyMaxNestedBlockDepthPerFunction: function () { + if (option.maxdepth && + this.nestedBlockDepth > 0 && + this.nestedBlockDepth === option.maxdepth + 1) { + var message = "Blocks are nested too deeply (" + this.nestedBlockDepth + ")."; + warning(message); + } + }, + + verifyMaxComplexityPerFunction: function () { + var max = option.maxcomplexity; + var cc = this.ComplexityCount; + if (max && cc > max) { + var message = "Cyclomatic complexity is too high per function (" + cc + ")."; + warning(message, functionStartToken); + } + } + }; + } + + function increaseComplexityCount() { + funct["(metrics)"].ComplexityCount += 1; + } + + + (function (x) { + x.nud = function () { + var b, f, i, p, t; + var props = {}; // All properties, including accessors + + function saveProperty(name, token) { + if (props[name] && is_own(props, name)) + warning("Duplicate member '{a}'.", nexttoken, i); + else + props[name] = {}; + + props[name].basic = true; + props[name].basicToken = token; + } + + function saveSetter(name, token) { + if (props[name] && is_own(props, name)) { + if (props[name].basic || props[name].setter) + warning("Duplicate member '{a}'.", nexttoken, i); + } else { + props[name] = {}; + } + + props[name].setter = true; + props[name].setterToken = token; + } + + function saveGetter(name) { + if (props[name] && is_own(props, name)) { + if (props[name].basic || props[name].getter) + warning("Duplicate member '{a}'.", nexttoken, i); + } else { + props[name] = {}; + } + + props[name].getter = true; + props[name].getterToken = token; + } + + b = token.line !== nexttoken.line; + if (b) { + indent += option.indent; + if (nexttoken.from === indent + option.indent) { + indent += option.indent; + } + } + for (;;) { + if (nexttoken.id === "}") { + break; + } + if (b) { + indentation(); + } + if (nexttoken.value === "get" && peek().id !== ":") { + advance("get"); + if (!option.es5) { + error("get/set are ES5 features."); + } + i = property_name(); + if (!i) { + error("Missing property name."); + } + saveGetter(i); + t = nexttoken; + adjacent(token, nexttoken); + f = doFunction(); + p = f["(params)"]; + if (p) { + warning("Unexpected parameter '{a}' in get {b} function.", t, p[0], i); + } + adjacent(token, nexttoken); + } else if (nexttoken.value === "set" && peek().id !== ":") { + advance("set"); + if (!option.es5) { + error("get/set are ES5 features."); + } + i = property_name(); + if (!i) { + error("Missing property name."); + } + saveSetter(i, nexttoken); + t = nexttoken; + adjacent(token, nexttoken); + f = doFunction(); + p = f["(params)"]; + if (!p || p.length !== 1) { + warning("Expected a single parameter in set {a} function.", t, i); + } + } else { + i = property_name(); + saveProperty(i, nexttoken); + if (typeof i !== "string") { + break; + } + advance(":"); + nonadjacent(token, nexttoken); + expression(10); + } + + countMember(i); + if (nexttoken.id === ",") { + comma(); + if (nexttoken.id === ",") { + warning("Extra comma.", token); + } else if (nexttoken.id === "}" && !option.es5) { + warning("Extra comma.", token); + } + } else { + break; + } + } + if (b) { + indent -= option.indent; + indentation(); + } + advance("}", this); + + // Check for lonely setters if in the ES5 mode. + if (option.es5) { + for (var name in props) { + if (is_own(props, name) && props[name].setter && !props[name].getter) { + warning("Setter is defined without getter.", props[name].setterToken); + } + } + } + return this; + }; + x.fud = function () { + error("Expected to see a statement and instead saw a block.", token); + }; + }(delim("{"))); + +// This Function is called when esnext option is set to true +// it adds the `const` statement to JSHINT + + useESNextSyntax = function () { + var conststatement = stmt("const", function (prefix) { + var id, name, value; + + this.first = []; + for (;;) { + nonadjacent(token, nexttoken); + id = identifier(); + if (funct[id] === "const") { + warning("const '" + id + "' has already been declared"); + } + if (funct["(global)"] && predefined[id] === false) { + warning("Redefinition of '{a}'.", token, id); + } + addlabel(id, "const"); + if (prefix) { + break; + } + name = token; + this.first.push(token); + + if (nexttoken.id !== "=") { + warning("const " + + "'{a}' is initialized to 'undefined'.", token, id); + } + + if (nexttoken.id === "=") { + nonadjacent(token, nexttoken); + advance("="); + nonadjacent(token, nexttoken); + if (nexttoken.id === "undefined") { + warning("It is not necessary to initialize " + + "'{a}' to 'undefined'.", token, id); + } + if (peek(0).id === "=" && nexttoken.identifier) { + error("Constant {a} was not declared correctly.", + nexttoken, nexttoken.value); + } + value = expression(0); + name.first = value; + } + + if (nexttoken.id !== ",") { + break; + } + comma(); + } + return this; + }); + conststatement.exps = true; + }; + + var varstatement = stmt("var", function (prefix) { + // JavaScript does not have block scope. It only has function scope. So, + // declaring a variable in a block can have unexpected consequences. + var id, name, value; + + if (funct["(onevar)"] && option.onevar) { + warning("Too many var statements."); + } else if (!funct["(global)"]) { + funct["(onevar)"] = true; + } + + this.first = []; + + for (;;) { + nonadjacent(token, nexttoken); + id = identifier(); + + if (option.esnext && funct[id] === "const") { + warning("const '" + id + "' has already been declared"); + } + + if (funct["(global)"] && predefined[id] === false) { + warning("Redefinition of '{a}'.", token, id); + } + + addlabel(id, "unused", token); + + if (prefix) { + break; + } + + name = token; + this.first.push(token); + + if (nexttoken.id === "=") { + nonadjacent(token, nexttoken); + advance("="); + nonadjacent(token, nexttoken); + if (nexttoken.id === "undefined") { + warning("It is not necessary to initialize '{a}' to 'undefined'.", token, id); + } + if (peek(0).id === "=" && nexttoken.identifier) { + error("Variable {a} was not declared correctly.", + nexttoken, nexttoken.value); + } + value = expression(0); + name.first = value; + } + if (nexttoken.id !== ",") { + break; + } + comma(); + } + return this; + }); + varstatement.exps = true; + + blockstmt("function", function () { + if (inblock) { + warning("Function declarations should not be placed in blocks. " + + "Use a function expression or move the statement to the top of " + + "the outer function.", token); + + } + var i = identifier(); + if (option.esnext && funct[i] === "const") { + warning("const '" + i + "' has already been declared"); + } + adjacent(token, nexttoken); + addlabel(i, "unction", token); + + doFunction(i, { statement: true }); + if (nexttoken.id === "(" && nexttoken.line === token.line) { + error( +"Function declarations are not invocable. Wrap the whole function invocation in parens."); + } + return this; + }); + + prefix("function", function () { + var i = optionalidentifier(); + if (i) { + adjacent(token, nexttoken); + } else { + nonadjacent(token, nexttoken); + } + doFunction(i); + if (!option.loopfunc && funct["(loopage)"]) { + warning("Don't make functions within a loop."); + } + return this; + }); + + blockstmt("if", function () { + var t = nexttoken; + increaseComplexityCount(); + advance("("); + nonadjacent(this, t); + nospace(); + expression(20); + if (nexttoken.id === "=") { + if (!option.boss) + warning("Expected a conditional expression and instead saw an assignment."); + advance("="); + expression(20); + } + advance(")", t); + nospace(prevtoken, token); + block(true, true); + if (nexttoken.id === "else") { + nonadjacent(token, nexttoken); + advance("else"); + if (nexttoken.id === "if" || nexttoken.id === "switch") { + statement(true); + } else { + block(true, true); + } + } + return this; + }); + + blockstmt("try", function () { + var b; + + function doCatch() { + var oldScope = scope; + var e; + + advance("catch"); + nonadjacent(token, nexttoken); + advance("("); + + scope = Object.create(oldScope); + + e = nexttoken.value; + if (nexttoken.type !== "(identifier)") { + e = null; + warning("Expected an identifier and instead saw '{a}'.", nexttoken, e); + } + + advance(); + advance(")"); + + funct = { + "(name)" : "(catch)", + "(line)" : nexttoken.line, + "(character)": nexttoken.character, + "(context)" : funct, + "(breakage)" : funct["(breakage)"], + "(loopage)" : funct["(loopage)"], + "(scope)" : scope, + "(statement)": false, + "(metrics)" : createMetrics(nexttoken), + "(catch)" : true, + "(tokens)" : {} + }; + + if (e) { + addlabel(e, "exception"); + } + + token.funct = funct; + functions.push(funct); + + block(false); + + scope = oldScope; + + funct["(last)"] = token.line; + funct["(lastcharacter)"] = token.character; + funct = funct["(context)"]; + } + + block(false); + + if (nexttoken.id === "catch") { + increaseComplexityCount(); + doCatch(); + b = true; + } + + if (nexttoken.id === "finally") { + advance("finally"); + block(false); + return; + } else if (!b) { + error("Expected '{a}' and instead saw '{b}'.", + nexttoken, "catch", nexttoken.value); + } + + return this; + }); + + blockstmt("while", function () { + var t = nexttoken; + funct["(breakage)"] += 1; + funct["(loopage)"] += 1; + increaseComplexityCount(); + advance("("); + nonadjacent(this, t); + nospace(); + expression(20); + if (nexttoken.id === "=") { + if (!option.boss) + warning("Expected a conditional expression and instead saw an assignment."); + advance("="); + expression(20); + } + advance(")", t); + nospace(prevtoken, token); + block(true, true); + funct["(breakage)"] -= 1; + funct["(loopage)"] -= 1; + return this; + }).labelled = true; + + blockstmt("with", function () { + var t = nexttoken; + if (directive["use strict"]) { + error("'with' is not allowed in strict mode.", token); + } else if (!option.withstmt) { + warning("Don't use 'with'.", token); + } + + advance("("); + nonadjacent(this, t); + nospace(); + expression(0); + advance(")", t); + nospace(prevtoken, token); + block(true, true); + + return this; + }); + + blockstmt("switch", function () { + var t = nexttoken, + g = false; + funct["(breakage)"] += 1; + advance("("); + nonadjacent(this, t); + nospace(); + this.condition = expression(20); + advance(")", t); + nospace(prevtoken, token); + nonadjacent(token, nexttoken); + t = nexttoken; + advance("{"); + nonadjacent(token, nexttoken); + indent += option.indent; + this.cases = []; + for (;;) { + switch (nexttoken.id) { + case "case": + switch (funct["(verb)"]) { + case "break": + case "case": + case "continue": + case "return": + case "switch": + case "throw": + break; + default: + // You can tell JSHint that you don't use break intentionally by + // adding a comment /* falls through */ on a line just before + // the next `case`. + if (!ft.test(lines[nexttoken.line - 2])) { + warning( + "Expected a 'break' statement before 'case'.", + token); + } + } + indentation(-option.indent); + advance("case"); + this.cases.push(expression(20)); + increaseComplexityCount(); + g = true; + advance(":"); + funct["(verb)"] = "case"; + break; + case "default": + switch (funct["(verb)"]) { + case "break": + case "continue": + case "return": + case "throw": + break; + default: + if (!ft.test(lines[nexttoken.line - 2])) { + warning( + "Expected a 'break' statement before 'default'.", + token); + } + } + indentation(-option.indent); + advance("default"); + g = true; + advance(":"); + break; + case "}": + indent -= option.indent; + indentation(); + advance("}", t); + if (this.cases.length === 1 || this.condition.id === "true" || + this.condition.id === "false") { + if (!option.onecase) + warning("This 'switch' should be an 'if'.", this); + } + funct["(breakage)"] -= 1; + funct["(verb)"] = undefined; + return; + case "(end)": + error("Missing '{a}'.", nexttoken, "}"); + return; + default: + if (g) { + switch (token.id) { + case ",": + error("Each value should have its own case label."); + return; + case ":": + g = false; + statements(); + break; + default: + error("Missing ':' on a case clause.", token); + return; + } + } else { + if (token.id === ":") { + advance(":"); + error("Unexpected '{a}'.", token, ":"); + statements(); + } else { + error("Expected '{a}' and instead saw '{b}'.", + nexttoken, "case", nexttoken.value); + return; + } + } + } + } + }).labelled = true; + + stmt("debugger", function () { + if (!option.debug) { + warning("All 'debugger' statements should be removed."); + } + return this; + }).exps = true; + + (function () { + var x = stmt("do", function () { + funct["(breakage)"] += 1; + funct["(loopage)"] += 1; + increaseComplexityCount(); + + this.first = block(true); + advance("while"); + var t = nexttoken; + nonadjacent(token, t); + advance("("); + nospace(); + expression(20); + if (nexttoken.id === "=") { + if (!option.boss) + warning("Expected a conditional expression and instead saw an assignment."); + advance("="); + expression(20); + } + advance(")", t); + nospace(prevtoken, token); + funct["(breakage)"] -= 1; + funct["(loopage)"] -= 1; + return this; + }); + x.labelled = true; + x.exps = true; + }()); + + blockstmt("for", function () { + var s, t = nexttoken; + funct["(breakage)"] += 1; + funct["(loopage)"] += 1; + increaseComplexityCount(); + advance("("); + nonadjacent(this, t); + nospace(); + if (peek(nexttoken.id === "var" ? 1 : 0).id === "in") { + if (nexttoken.id === "var") { + advance("var"); + varstatement.fud.call(varstatement, true); + } else { + switch (funct[nexttoken.value]) { + case "unused": + funct[nexttoken.value] = "var"; + break; + case "var": + break; + default: + warning("Bad for in variable '{a}'.", + nexttoken, nexttoken.value); + } + advance(); + } + advance("in"); + expression(20); + advance(")", t); + s = block(true, true); + if (option.forin && s && (s.length > 1 || typeof s[0] !== "object" || + s[0].value !== "if")) { + warning("The body of a for in should be wrapped in an if statement to filter " + + "unwanted properties from the prototype.", this); + } + funct["(breakage)"] -= 1; + funct["(loopage)"] -= 1; + return this; + } else { + if (nexttoken.id !== ";") { + if (nexttoken.id === "var") { + advance("var"); + varstatement.fud.call(varstatement); + } else { + for (;;) { + expression(0, "for"); + if (nexttoken.id !== ",") { + break; + } + comma(); + } + } + } + nolinebreak(token); + advance(";"); + if (nexttoken.id !== ";") { + expression(20); + if (nexttoken.id === "=") { + if (!option.boss) + warning("Expected a conditional expression and instead saw an assignment."); + advance("="); + expression(20); + } + } + nolinebreak(token); + advance(";"); + if (nexttoken.id === ";") { + error("Expected '{a}' and instead saw '{b}'.", + nexttoken, ")", ";"); + } + if (nexttoken.id !== ")") { + for (;;) { + expression(0, "for"); + if (nexttoken.id !== ",") { + break; + } + comma(); + } + } + advance(")", t); + nospace(prevtoken, token); + block(true, true); + funct["(breakage)"] -= 1; + funct["(loopage)"] -= 1; + return this; + } + }).labelled = true; + + + stmt("break", function () { + var v = nexttoken.value; + + if (funct["(breakage)"] === 0) + warning("Unexpected '{a}'.", nexttoken, this.value); + + if (!option.asi) + nolinebreak(this); + + if (nexttoken.id !== ";") { + if (token.line === nexttoken.line) { + if (funct[v] !== "label") { + warning("'{a}' is not a statement label.", nexttoken, v); + } else if (scope[v] !== funct) { + warning("'{a}' is out of scope.", nexttoken, v); + } + this.first = nexttoken; + advance(); + } + } + reachable("break"); + return this; + }).exps = true; + + + stmt("continue", function () { + var v = nexttoken.value; + + if (funct["(breakage)"] === 0) + warning("Unexpected '{a}'.", nexttoken, this.value); + + if (!option.asi) + nolinebreak(this); + + if (nexttoken.id !== ";") { + if (token.line === nexttoken.line) { + if (funct[v] !== "label") { + warning("'{a}' is not a statement label.", nexttoken, v); + } else if (scope[v] !== funct) { + warning("'{a}' is out of scope.", nexttoken, v); + } + this.first = nexttoken; + advance(); + } + } else if (!funct["(loopage)"]) { + warning("Unexpected '{a}'.", nexttoken, this.value); + } + reachable("continue"); + return this; + }).exps = true; + + + stmt("return", function () { + if (this.line === nexttoken.line) { + if (nexttoken.id === "(regexp)") + warning("Wrap the /regexp/ literal in parens to disambiguate the slash operator."); + + if (nexttoken.id !== ";" && !nexttoken.reach) { + nonadjacent(token, nexttoken); + if (peek().value === "=" && !option.boss) { + warningAt("Did you mean to return a conditional instead of an assignment?", + token.line, token.character + 1); + } + this.first = expression(0); + } + } else if (!option.asi) { + nolinebreak(this); // always warn (Line breaking error) + } + reachable("return"); + return this; + }).exps = true; + + + stmt("throw", function () { + nolinebreak(this); + nonadjacent(token, nexttoken); + this.first = expression(20); + reachable("throw"); + return this; + }).exps = true; + +// Superfluous reserved words + + reserve("class"); + reserve("const"); + reserve("enum"); + reserve("export"); + reserve("extends"); + reserve("import"); + reserve("super"); + + reserve("let"); + reserve("yield"); + reserve("implements"); + reserve("interface"); + reserve("package"); + reserve("private"); + reserve("protected"); + reserve("public"); + reserve("static"); + + +// Parse JSON + + function jsonValue() { + + function jsonObject() { + var o = {}, t = nexttoken; + advance("{"); + if (nexttoken.id !== "}") { + for (;;) { + if (nexttoken.id === "(end)") { + error("Missing '}' to match '{' from line {a}.", + nexttoken, t.line); + } else if (nexttoken.id === "}") { + warning("Unexpected comma.", token); + break; + } else if (nexttoken.id === ",") { + error("Unexpected comma.", nexttoken); + } else if (nexttoken.id !== "(string)") { + warning("Expected a string and instead saw {a}.", + nexttoken, nexttoken.value); + } + if (o[nexttoken.value] === true) { + warning("Duplicate key '{a}'.", + nexttoken, nexttoken.value); + } else if ((nexttoken.value === "__proto__" && + !option.proto) || (nexttoken.value === "__iterator__" && + !option.iterator)) { + warning("The '{a}' key may produce unexpected results.", + nexttoken, nexttoken.value); + } else { + o[nexttoken.value] = true; + } + advance(); + advance(":"); + jsonValue(); + if (nexttoken.id !== ",") { + break; + } + advance(","); + } + } + advance("}"); + } + + function jsonArray() { + var t = nexttoken; + advance("["); + if (nexttoken.id !== "]") { + for (;;) { + if (nexttoken.id === "(end)") { + error("Missing ']' to match '[' from line {a}.", + nexttoken, t.line); + } else if (nexttoken.id === "]") { + warning("Unexpected comma.", token); + break; + } else if (nexttoken.id === ",") { + error("Unexpected comma.", nexttoken); + } + jsonValue(); + if (nexttoken.id !== ",") { + break; + } + advance(","); + } + } + advance("]"); + } + + switch (nexttoken.id) { + case "{": + jsonObject(); + break; + case "[": + jsonArray(); + break; + case "true": + case "false": + case "null": + case "(number)": + case "(string)": + advance(); + break; + case "-": + advance("-"); + if (token.character !== nexttoken.from) { + warning("Unexpected space after '-'.", token); + } + adjacent(token, nexttoken); + advance("(number)"); + break; + default: + error("Expected a JSON value.", nexttoken); + } + } + + + // The actual JSHINT function itself. + var itself = function (s, o, g) { + var a, i, k, x; + var optionKeys; + var newOptionObj = {}; + + if (o && o.scope) { + JSHINT.scope = o.scope; + } else { + JSHINT.errors = []; + JSHINT.undefs = []; + JSHINT.internals = []; + JSHINT.blacklist = {}; + JSHINT.scope = "(main)"; + } + + predefined = Object.create(standard); + declared = Object.create(null); + combine(predefined, g || {}); + + if (o) { + a = o.predef; + if (a) { + if (!Array.isArray(a) && typeof a === "object") { + a = Object.keys(a); + } + a.forEach(function (item) { + var slice; + if (item[0] === "-") { + slice = item.slice(1); + JSHINT.blacklist[slice] = slice; + } else { + predefined[item] = true; + } + }); + } + + optionKeys = Object.keys(o); + for (x = 0; x < optionKeys.length; x++) { + newOptionObj[optionKeys[x]] = o[optionKeys[x]]; + + if (optionKeys[x] === "newcap" && o[optionKeys[x]] === false) + newOptionObj["(explicitNewcap)"] = true; + + if (optionKeys[x] === "indent") + newOptionObj.white = true; + } + } + + option = newOptionObj; + + option.indent = option.indent || 4; + option.maxerr = option.maxerr || 50; + + tab = ""; + for (i = 0; i < option.indent; i += 1) { + tab += " "; + } + indent = 1; + global = Object.create(predefined); + scope = global; + funct = { + "(global)": true, + "(name)": "(global)", + "(scope)": scope, + "(breakage)": 0, + "(loopage)": 0, + "(tokens)": {}, + "(metrics)": createMetrics(nexttoken) + }; + functions = [funct]; + urls = []; + stack = null; + member = {}; + membersOnly = null; + implied = {}; + inblock = false; + lookahead = []; + jsonmode = false; + warnings = 0; + lines = []; + unuseds = []; + + if (!isString(s) && !Array.isArray(s)) { + errorAt("Input is neither a string nor an array of strings.", 0); + return false; + } + + if (isString(s) && /^\s*$/g.test(s)) { + errorAt("Input is an empty string.", 0); + return false; + } + + if (s.length === 0) { + errorAt("Input is an empty array.", 0); + return false; + } + + lex.init(s); + + prereg = true; + directive = {}; + + prevtoken = token = nexttoken = syntax["(begin)"]; + + // Check options + for (var name in o) { + if (is_own(o, name)) { + checkOption(name, token); + } + } + + assume(); + + // combine the passed globals after we've assumed all our options + combine(predefined, g || {}); + + //reset values + comma.first = true; + quotmark = undefined; + + try { + advance(); + switch (nexttoken.id) { + case "{": + case "[": + option.laxbreak = true; + jsonmode = true; + jsonValue(); + break; + default: + directives(); + if (directive["use strict"] && !option.globalstrict) { + warning("Use the function form of \"use strict\".", prevtoken); + } + + statements(); + } + advance((nexttoken && nexttoken.value !== ".") ? "(end)" : undefined); + + var markDefined = function (name, context) { + do { + if (typeof context[name] === "string") { + // JSHINT marks unused variables as 'unused' and + // unused function declaration as 'unction'. This + // code changes such instances back 'var' and + // 'closure' so that the code in JSHINT.data() + // doesn't think they're unused. + + if (context[name] === "unused") + context[name] = "var"; + else if (context[name] === "unction") + context[name] = "closure"; + + return true; + } + + context = context["(context)"]; + } while (context); + + return false; + }; + + var clearImplied = function (name, line) { + if (!implied[name]) + return; + + var newImplied = []; + for (var i = 0; i < implied[name].length; i += 1) { + if (implied[name][i] !== line) + newImplied.push(implied[name][i]); + } + + if (newImplied.length === 0) + delete implied[name]; + else + implied[name] = newImplied; + }; + + var warnUnused = function (name, token) { + var line = token.line; + var chr = token.character; + + if (option.unused) + warningAt("'{a}' is defined but never used.", line, chr, name); + + unuseds.push({ + name: name, + line: line, + character: chr + }); + }; + + var checkUnused = function (func, key) { + var type = func[key]; + var token = func["(tokens)"][key]; + + if (key.charAt(0) === "(") + return; + + if (type !== "unused" && type !== "unction") + return; + + // Params are checked separately from other variables. + if (func["(params)"] && func["(params)"].indexOf(key) !== -1) + return; + + warnUnused(key, token); + }; + + // Check queued 'x is not defined' instances to see if they're still undefined. + for (i = 0; i < JSHINT.undefs.length; i += 1) { + k = JSHINT.undefs[i].slice(0); + + if (markDefined(k[2].value, k[0])) { + clearImplied(k[2].value, k[2].line); + } else { + warning.apply(warning, k.slice(1)); + } + } + + functions.forEach(function (func) { + for (var key in func) { + if (is_own(func, key)) { + checkUnused(func, key); + } + } + + if (!func["(params)"]) + return; + + var params = func["(params)"].slice(); + var param = params.pop(); + var type; + + while (param) { + type = func[param]; + + // 'undefined' is a special case for (function (window, undefined) { ... })(); + // patterns. + + if (param === "undefined") + return; + + if (type !== "unused" && type !== "unction") + return; + + warnUnused(param, func["(tokens)"][param]); + param = params.pop(); + } + }); + + for (var key in declared) { + if (is_own(declared, key) && !is_own(global, key)) { + warnUnused(key, declared[key]); + } + } + } catch (e) { + if (e) { + var nt = nexttoken || {}; + JSHINT.errors.push({ + raw : e.raw, + reason : e.message, + line : e.line || nt.line, + character : e.character || nt.from + }, null); + } + } + + // Loop over the listed "internals", and check them as well. + + if (JSHINT.scope === "(main)") { + o = o || {}; + + for (i = 0; i < JSHINT.internals.length; i += 1) { + k = JSHINT.internals[i]; + o.scope = k.elem; + itself(k.value, o, g); + } + } + + return JSHINT.errors.length === 0; + }; + + // Data summary. + itself.data = function () { + var data = { + functions: [], + options: option + }; + var implieds = []; + var members = []; + var fu, f, i, j, n, globals; + + if (itself.errors.length) { + data.errors = itself.errors; + } + + if (jsonmode) { + data.json = true; + } + + for (n in implied) { + if (is_own(implied, n)) { + implieds.push({ + name: n, + line: implied[n] + }); + } + } + + if (implieds.length > 0) { + data.implieds = implieds; + } + + if (urls.length > 0) { + data.urls = urls; + } + + globals = Object.keys(scope); + if (globals.length > 0) { + data.globals = globals; + } + + for (i = 1; i < functions.length; i += 1) { + f = functions[i]; + fu = {}; + + for (j = 0; j < functionicity.length; j += 1) { + fu[functionicity[j]] = []; + } + + for (j = 0; j < functionicity.length; j += 1) { + if (fu[functionicity[j]].length === 0) { + delete fu[functionicity[j]]; + } + } + + fu.name = f["(name)"]; + fu.param = f["(params)"]; + fu.line = f["(line)"]; + fu.character = f["(character)"]; + fu.last = f["(last)"]; + fu.lastcharacter = f["(lastcharacter)"]; + data.functions.push(fu); + } + + if (unuseds.length > 0) { + data.unused = unuseds; + } + + members = []; + for (n in member) { + if (typeof member[n] === "number") { + data.member = member; + break; + } + } + + return data; + }; + + itself.jshint = itself; + + return itself; +}()); + +// Make JSHINT a Node module, if possible. +if (typeof exports === "object" && exports) { + exports.JSHINT = JSHINT; +} \ No newline at end of file diff --git a/jquery-ui-1.10.2.custom/development-bundle/external/qunit.css b/jquery-ui-1.10.2.custom/development-bundle/external/qunit.css new file mode 100755 index 0000000..d7fc0c8 --- /dev/null +++ b/jquery-ui-1.10.2.custom/development-bundle/external/qunit.css @@ -0,0 +1,244 @@ +/** + * QUnit v1.11.0 - A JavaScript Unit Testing Framework + * + * http://qunitjs.com + * + * Copyright 2012 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +/** Font Family and Sizes */ + +#qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult { + font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial, sans-serif; +} + +#qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult, #qunit-tests li { font-size: small; } +#qunit-tests { font-size: smaller; } + + +/** Resets */ + +#qunit-tests, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult, #qunit-modulefilter { + margin: 0; + padding: 0; +} + + +/** Header */ + +#qunit-header { + padding: 0.5em 0 0.5em 1em; + + color: #8699a4; + background-color: #0d3349; + + font-size: 1.5em; + line-height: 1em; + font-weight: normal; + + border-radius: 5px 5px 0 0; + -moz-border-radius: 5px 5px 0 0; + -webkit-border-top-right-radius: 5px; + -webkit-border-top-left-radius: 5px; +} + +#qunit-header a { + text-decoration: none; + color: #c2ccd1; +} + +#qunit-header a:hover, +#qunit-header a:focus { + color: #fff; +} + +#qunit-testrunner-toolbar label { + display: inline-block; + padding: 0 .5em 0 .1em; +} + +#qunit-banner { + height: 5px; +} + +#qunit-testrunner-toolbar { + padding: 0.5em 0 0.5em 2em; + color: #5E740B; + background-color: #eee; + overflow: hidden; +} + +#qunit-userAgent { + padding: 0.5em 0 0.5em 2.5em; + background-color: #2b81af; + color: #fff; + text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px; +} + +#qunit-modulefilter-container { + float: right; +} + +/** Tests: Pass/Fail */ + +#qunit-tests { + list-style-position: inside; +} + +#qunit-tests li { + padding: 0.4em 0.5em 0.4em 2.5em; + border-bottom: 1px solid #fff; + list-style-position: inside; +} + +#qunit-tests.hidepass li.pass, #qunit-tests.hidepass li.running { + display: none; +} + +#qunit-tests li strong { + cursor: pointer; +} + +#qunit-tests li a { + padding: 0.5em; + color: #c2ccd1; + text-decoration: none; +} +#qunit-tests li a:hover, +#qunit-tests li a:focus { + color: #000; +} + +#qunit-tests li .runtime { + float: right; + font-size: smaller; +} + +.qunit-assert-list { + margin-top: 0.5em; + padding: 0.5em; + + background-color: #fff; + + border-radius: 5px; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; +} + +.qunit-collapsed { + display: none; +} + +#qunit-tests table { + border-collapse: collapse; + margin-top: .2em; +} + +#qunit-tests th { + text-align: right; + vertical-align: top; + padding: 0 .5em 0 0; +} + +#qunit-tests td { + vertical-align: top; +} + +#qunit-tests pre { + margin: 0; + white-space: pre-wrap; + word-wrap: break-word; +} + +#qunit-tests del { + background-color: #e0f2be; + color: #374e0c; + text-decoration: none; +} + +#qunit-tests ins { + background-color: #ffcaca; + color: #500; + text-decoration: none; +} + +/*** Test Counts */ + +#qunit-tests b.counts { color: black; } +#qunit-tests b.passed { color: #5E740B; } +#qunit-tests b.failed { color: #710909; } + +#qunit-tests li li { + padding: 5px; + background-color: #fff; + border-bottom: none; + list-style-position: inside; +} + +/*** Passing Styles */ + +#qunit-tests li li.pass { + color: #3c510c; + background-color: #fff; + border-left: 10px solid #C6E746; +} + +#qunit-tests .pass { color: #528CE0; background-color: #D2E0E6; } +#qunit-tests .pass .test-name { color: #366097; } + +#qunit-tests .pass .test-actual, +#qunit-tests .pass .test-expected { color: #999999; } + +#qunit-banner.qunit-pass { background-color: #C6E746; } + +/*** Failing Styles */ + +#qunit-tests li li.fail { + color: #710909; + background-color: #fff; + border-left: 10px solid #EE5757; + white-space: pre; +} + +#qunit-tests > li:last-child { + border-radius: 0 0 5px 5px; + -moz-border-radius: 0 0 5px 5px; + -webkit-border-bottom-right-radius: 5px; + -webkit-border-bottom-left-radius: 5px; +} + +#qunit-tests .fail { color: #000000; background-color: #EE5757; } +#qunit-tests .fail .test-name, +#qunit-tests .fail .module-name { color: #000000; } + +#qunit-tests .fail .test-actual { color: #EE5757; } +#qunit-tests .fail .test-expected { color: green; } + +#qunit-banner.qunit-fail { background-color: #EE5757; } + + +/** Result */ + +#qunit-testresult { + padding: 0.5em 0.5em 0.5em 2.5em; + + color: #2b81af; + background-color: #D2E0E6; + + border-bottom: 1px solid white; +} +#qunit-testresult .module-name { + font-weight: bold; +} + +/** Fixture */ + +#qunit-fixture { + position: absolute; + top: -10000px; + left: -10000px; + width: 1000px; + height: 1000px; +} diff --git a/jquery-ui-1.10.2.custom/development-bundle/external/qunit.js b/jquery-ui-1.10.2.custom/development-bundle/external/qunit.js new file mode 100755 index 0000000..302545f --- /dev/null +++ b/jquery-ui-1.10.2.custom/development-bundle/external/qunit.js @@ -0,0 +1,2152 @@ +/** + * QUnit v1.11.0 - A JavaScript Unit Testing Framework + * + * http://qunitjs.com + * + * Copyright 2012 jQuery Foundation and other contributors + * Released under the MIT license. + * http://jquery.org/license + */ + +(function( window ) { + +var QUnit, + assert, + config, + onErrorFnPrev, + testId = 0, + fileName = (sourceFromStacktrace( 0 ) || "" ).replace(/(:\d+)+\)?/, "").replace(/.+\//, ""), + toString = Object.prototype.toString, + hasOwn = Object.prototype.hasOwnProperty, + // Keep a local reference to Date (GH-283) + Date = window.Date, + defined = { + setTimeout: typeof window.setTimeout !== "undefined", + sessionStorage: (function() { + var x = "qunit-test-string"; + try { + sessionStorage.setItem( x, x ); + sessionStorage.removeItem( x ); + return true; + } catch( e ) { + return false; + } + }()) + }, + /** + * Provides a normalized error string, correcting an issue + * with IE 7 (and prior) where Error.prototype.toString is + * not properly implemented + * + * Based on http://es5.github.com/#x15.11.4.4 + * + * @param {String|Error} error + * @return {String} error message + */ + errorString = function( error ) { + var name, message, + errorString = error.toString(); + if ( errorString.substring( 0, 7 ) === "[object" ) { + name = error.name ? error.name.toString() : "Error"; + message = error.message ? error.message.toString() : ""; + if ( name && message ) { + return name + ": " + message; + } else if ( name ) { + return name; + } else if ( message ) { + return message; + } else { + return "Error"; + } + } else { + return errorString; + } + }, + /** + * Makes a clone of an object using only Array or Object as base, + * and copies over the own enumerable properties. + * + * @param {Object} obj + * @return {Object} New object with only the own properties (recursively). + */ + objectValues = function( obj ) { + // Grunt 0.3.x uses an older version of jshint that still has jshint/jshint#392. + /*jshint newcap: false */ + var key, val, + vals = QUnit.is( "array", obj ) ? [] : {}; + for ( key in obj ) { + if ( hasOwn.call( obj, key ) ) { + val = obj[key]; + vals[key] = val === Object(val) ? objectValues(val) : val; + } + } + return vals; + }; + +function Test( settings ) { + extend( this, settings ); + this.assertions = []; + this.testNumber = ++Test.count; +} + +Test.count = 0; + +Test.prototype = { + init: function() { + var a, b, li, + tests = id( "qunit-tests" ); + + if ( tests ) { + b = document.createElement( "strong" ); + b.innerHTML = this.nameHtml; + + // `a` initialized at top of scope + a = document.createElement( "a" ); + a.innerHTML = "Rerun"; + a.href = QUnit.url({ testNumber: this.testNumber }); + + li = document.createElement( "li" ); + li.appendChild( b ); + li.appendChild( a ); + li.className = "running"; + li.id = this.id = "qunit-test-output" + testId++; + + tests.appendChild( li ); + } + }, + setup: function() { + if ( this.module !== config.previousModule ) { + if ( config.previousModule ) { + runLoggingCallbacks( "moduleDone", QUnit, { + name: config.previousModule, + failed: config.moduleStats.bad, + passed: config.moduleStats.all - config.moduleStats.bad, + total: config.moduleStats.all + }); + } + config.previousModule = this.module; + config.moduleStats = { all: 0, bad: 0 }; + runLoggingCallbacks( "moduleStart", QUnit, { + name: this.module + }); + } else if ( config.autorun ) { + runLoggingCallbacks( "moduleStart", QUnit, { + name: this.module + }); + } + + config.current = this; + + this.testEnvironment = extend({ + setup: function() {}, + teardown: function() {} + }, this.moduleTestEnvironment ); + + this.started = +new Date(); + runLoggingCallbacks( "testStart", QUnit, { + name: this.testName, + module: this.module + }); + + // allow utility functions to access the current test environment + // TODO why?? + QUnit.current_testEnvironment = this.testEnvironment; + + if ( !config.pollution ) { + saveGlobal(); + } + if ( config.notrycatch ) { + this.testEnvironment.setup.call( this.testEnvironment ); + return; + } + try { + this.testEnvironment.setup.call( this.testEnvironment ); + } catch( e ) { + QUnit.pushFailure( "Setup failed on " + this.testName + ": " + ( e.message || e ), extractStacktrace( e, 1 ) ); + } + }, + run: function() { + config.current = this; + + var running = id( "qunit-testresult" ); + + if ( running ) { + running.innerHTML = "Running:
      " + this.nameHtml; + } + + if ( this.async ) { + QUnit.stop(); + } + + this.callbackStarted = +new Date(); + + if ( config.notrycatch ) { + this.callback.call( this.testEnvironment, QUnit.assert ); + this.callbackRuntime = +new Date() - this.callbackStarted; + return; + } + + try { + this.callback.call( this.testEnvironment, QUnit.assert ); + this.callbackRuntime = +new Date() - this.callbackStarted; + } catch( e ) { + this.callbackRuntime = +new Date() - this.callbackStarted; + + QUnit.pushFailure( "Died on test #" + (this.assertions.length + 1) + " " + this.stack + ": " + ( e.message || e ), extractStacktrace( e, 0 ) ); + // else next test will carry the responsibility + saveGlobal(); + + // Restart the tests if they're blocking + if ( config.blocking ) { + QUnit.start(); + } + } + }, + teardown: function() { + config.current = this; + if ( config.notrycatch ) { + if ( typeof this.callbackRuntime === "undefined" ) { + this.callbackRuntime = +new Date() - this.callbackStarted; + } + this.testEnvironment.teardown.call( this.testEnvironment ); + return; + } else { + try { + this.testEnvironment.teardown.call( this.testEnvironment ); + } catch( e ) { + QUnit.pushFailure( "Teardown failed on " + this.testName + ": " + ( e.message || e ), extractStacktrace( e, 1 ) ); + } + } + checkPollution(); + }, + finish: function() { + config.current = this; + if ( config.requireExpects && this.expected === null ) { + QUnit.pushFailure( "Expected number of assertions to be defined, but expect() was not called.", this.stack ); + } else if ( this.expected !== null && this.expected !== this.assertions.length ) { + QUnit.pushFailure( "Expected " + this.expected + " assertions, but " + this.assertions.length + " were run", this.stack ); + } else if ( this.expected === null && !this.assertions.length ) { + QUnit.pushFailure( "Expected at least one assertion, but none were run - call expect(0) to accept zero assertions.", this.stack ); + } + + var i, assertion, a, b, time, li, ol, + test = this, + good = 0, + bad = 0, + tests = id( "qunit-tests" ); + + this.runtime = +new Date() - this.started; + config.stats.all += this.assertions.length; + config.moduleStats.all += this.assertions.length; + + if ( tests ) { + ol = document.createElement( "ol" ); + ol.className = "qunit-assert-list"; + + for ( i = 0; i < this.assertions.length; i++ ) { + assertion = this.assertions[i]; + + li = document.createElement( "li" ); + li.className = assertion.result ? "pass" : "fail"; + li.innerHTML = assertion.message || ( assertion.result ? "okay" : "failed" ); + ol.appendChild( li ); + + if ( assertion.result ) { + good++; + } else { + bad++; + config.stats.bad++; + config.moduleStats.bad++; + } + } + + // store result when possible + if ( QUnit.config.reorder && defined.sessionStorage ) { + if ( bad ) { + sessionStorage.setItem( "qunit-test-" + this.module + "-" + this.testName, bad ); + } else { + sessionStorage.removeItem( "qunit-test-" + this.module + "-" + this.testName ); + } + } + + if ( bad === 0 ) { + addClass( ol, "qunit-collapsed" ); + } + + // `b` initialized at top of scope + b = document.createElement( "strong" ); + b.innerHTML = this.nameHtml + " (" + bad + ", " + good + ", " + this.assertions.length + ")"; + + addEvent(b, "click", function() { + var next = b.parentNode.lastChild, + collapsed = hasClass( next, "qunit-collapsed" ); + ( collapsed ? removeClass : addClass )( next, "qunit-collapsed" ); + }); + + addEvent(b, "dblclick", function( e ) { + var target = e && e.target ? e.target : window.event.srcElement; + if ( target.nodeName.toLowerCase() === "span" || target.nodeName.toLowerCase() === "b" ) { + target = target.parentNode; + } + if ( window.location && target.nodeName.toLowerCase() === "strong" ) { + window.location = QUnit.url({ testNumber: test.testNumber }); + } + }); + + // `time` initialized at top of scope + time = document.createElement( "span" ); + time.className = "runtime"; + time.innerHTML = this.runtime + " ms"; + + // `li` initialized at top of scope + li = id( this.id ); + li.className = bad ? "fail" : "pass"; + li.removeChild( li.firstChild ); + a = li.firstChild; + li.appendChild( b ); + li.appendChild( a ); + li.appendChild( time ); + li.appendChild( ol ); + + } else { + for ( i = 0; i < this.assertions.length; i++ ) { + if ( !this.assertions[i].result ) { + bad++; + config.stats.bad++; + config.moduleStats.bad++; + } + } + } + + runLoggingCallbacks( "testDone", QUnit, { + name: this.testName, + module: this.module, + failed: bad, + passed: this.assertions.length - bad, + total: this.assertions.length, + duration: this.runtime + }); + + QUnit.reset(); + + config.current = undefined; + }, + + queue: function() { + var bad, + test = this; + + synchronize(function() { + test.init(); + }); + function run() { + // each of these can by async + synchronize(function() { + test.setup(); + }); + synchronize(function() { + test.run(); + }); + synchronize(function() { + test.teardown(); + }); + synchronize(function() { + test.finish(); + }); + } + + // `bad` initialized at top of scope + // defer when previous test run passed, if storage is available + bad = QUnit.config.reorder && defined.sessionStorage && + +sessionStorage.getItem( "qunit-test-" + this.module + "-" + this.testName ); + + if ( bad ) { + run(); + } else { + synchronize( run, true ); + } + } +}; + +// Root QUnit object. +// `QUnit` initialized at top of scope +QUnit = { + + // call on start of module test to prepend name to all tests + module: function( name, testEnvironment ) { + config.currentModule = name; + config.currentModuleTestEnvironment = testEnvironment; + config.modules[name] = true; + }, + + asyncTest: function( testName, expected, callback ) { + if ( arguments.length === 2 ) { + callback = expected; + expected = null; + } + + QUnit.test( testName, expected, callback, true ); + }, + + test: function( testName, expected, callback, async ) { + var test, + nameHtml = "" + escapeText( testName ) + ""; + + if ( arguments.length === 2 ) { + callback = expected; + expected = null; + } + + if ( config.currentModule ) { + nameHtml = "" + escapeText( config.currentModule ) + ": " + nameHtml; + } + + test = new Test({ + nameHtml: nameHtml, + testName: testName, + expected: expected, + async: async, + callback: callback, + module: config.currentModule, + moduleTestEnvironment: config.currentModuleTestEnvironment, + stack: sourceFromStacktrace( 2 ) + }); + + if ( !validTest( test ) ) { + return; + } + + test.queue(); + }, + + // Specify the number of expected assertions to gurantee that failed test (no assertions are run at all) don't slip through. + expect: function( asserts ) { + if (arguments.length === 1) { + config.current.expected = asserts; + } else { + return config.current.expected; + } + }, + + start: function( count ) { + // QUnit hasn't been initialized yet. + // Note: RequireJS (et al) may delay onLoad + if ( config.semaphore === undefined ) { + QUnit.begin(function() { + // This is triggered at the top of QUnit.load, push start() to the event loop, to allow QUnit.load to finish first + setTimeout(function() { + QUnit.start( count ); + }); + }); + return; + } + + config.semaphore -= count || 1; + // don't start until equal number of stop-calls + if ( config.semaphore > 0 ) { + return; + } + // ignore if start is called more often then stop + if ( config.semaphore < 0 ) { + config.semaphore = 0; + QUnit.pushFailure( "Called start() while already started (QUnit.config.semaphore was 0 already)", null, sourceFromStacktrace(2) ); + return; + } + // A slight delay, to avoid any current callbacks + if ( defined.setTimeout ) { + window.setTimeout(function() { + if ( config.semaphore > 0 ) { + return; + } + if ( config.timeout ) { + clearTimeout( config.timeout ); + } + + config.blocking = false; + process( true ); + }, 13); + } else { + config.blocking = false; + process( true ); + } + }, + + stop: function( count ) { + config.semaphore += count || 1; + config.blocking = true; + + if ( config.testTimeout && defined.setTimeout ) { + clearTimeout( config.timeout ); + config.timeout = window.setTimeout(function() { + QUnit.ok( false, "Test timed out" ); + config.semaphore = 1; + QUnit.start(); + }, config.testTimeout ); + } + } +}; + +// `assert` initialized at top of scope +// Asssert helpers +// All of these must either call QUnit.push() or manually do: +// - runLoggingCallbacks( "log", .. ); +// - config.current.assertions.push({ .. }); +// We attach it to the QUnit object *after* we expose the public API, +// otherwise `assert` will become a global variable in browsers (#341). +assert = { + /** + * Asserts rough true-ish result. + * @name ok + * @function + * @example ok( "asdfasdf".length > 5, "There must be at least 5 chars" ); + */ + ok: function( result, msg ) { + if ( !config.current ) { + throw new Error( "ok() assertion outside test context, was " + sourceFromStacktrace(2) ); + } + result = !!result; + + var source, + details = { + module: config.current.module, + name: config.current.testName, + result: result, + message: msg + }; + + msg = escapeText( msg || (result ? "okay" : "failed" ) ); + msg = "" + msg + ""; + + if ( !result ) { + source = sourceFromStacktrace( 2 ); + if ( source ) { + details.source = source; + msg += "
      Source:
      " + escapeText( source ) + "
      "; + } + } + runLoggingCallbacks( "log", QUnit, details ); + config.current.assertions.push({ + result: result, + message: msg + }); + }, + + /** + * Assert that the first two arguments are equal, with an optional message. + * Prints out both actual and expected values. + * @name equal + * @function + * @example equal( format( "Received {0} bytes.", 2), "Received 2 bytes.", "format() replaces {0} with next argument" ); + */ + equal: function( actual, expected, message ) { + /*jshint eqeqeq:false */ + QUnit.push( expected == actual, actual, expected, message ); + }, + + /** + * @name notEqual + * @function + */ + notEqual: function( actual, expected, message ) { + /*jshint eqeqeq:false */ + QUnit.push( expected != actual, actual, expected, message ); + }, + + /** + * @name propEqual + * @function + */ + propEqual: function( actual, expected, message ) { + actual = objectValues(actual); + expected = objectValues(expected); + QUnit.push( QUnit.equiv(actual, expected), actual, expected, message ); + }, + + /** + * @name notPropEqual + * @function + */ + notPropEqual: function( actual, expected, message ) { + actual = objectValues(actual); + expected = objectValues(expected); + QUnit.push( !QUnit.equiv(actual, expected), actual, expected, message ); + }, + + /** + * @name deepEqual + * @function + */ + deepEqual: function( actual, expected, message ) { + QUnit.push( QUnit.equiv(actual, expected), actual, expected, message ); + }, + + /** + * @name notDeepEqual + * @function + */ + notDeepEqual: function( actual, expected, message ) { + QUnit.push( !QUnit.equiv(actual, expected), actual, expected, message ); + }, + + /** + * @name strictEqual + * @function + */ + strictEqual: function( actual, expected, message ) { + QUnit.push( expected === actual, actual, expected, message ); + }, + + /** + * @name notStrictEqual + * @function + */ + notStrictEqual: function( actual, expected, message ) { + QUnit.push( expected !== actual, actual, expected, message ); + }, + + "throws": function( block, expected, message ) { + var actual, + expectedOutput = expected, + ok = false; + + // 'expected' is optional + if ( typeof expected === "string" ) { + message = expected; + expected = null; + } + + config.current.ignoreGlobalErrors = true; + try { + block.call( config.current.testEnvironment ); + } catch (e) { + actual = e; + } + config.current.ignoreGlobalErrors = false; + + if ( actual ) { + // we don't want to validate thrown error + if ( !expected ) { + ok = true; + expectedOutput = null; + // expected is a regexp + } else if ( QUnit.objectType( expected ) === "regexp" ) { + ok = expected.test( errorString( actual ) ); + // expected is a constructor + } else if ( actual instanceof expected ) { + ok = true; + // expected is a validation function which returns true is validation passed + } else if ( expected.call( {}, actual ) === true ) { + expectedOutput = null; + ok = true; + } + + QUnit.push( ok, actual, expectedOutput, message ); + } else { + QUnit.pushFailure( message, null, 'No exception was thrown.' ); + } + } +}; + +/** + * @deprecate since 1.8.0 + * Kept assertion helpers in root for backwards compatibility. + */ +extend( QUnit, assert ); + +/** + * @deprecated since 1.9.0 + * Kept root "raises()" for backwards compatibility. + * (Note that we don't introduce assert.raises). + */ +QUnit.raises = assert[ "throws" ]; + +/** + * @deprecated since 1.0.0, replaced with error pushes since 1.3.0 + * Kept to avoid TypeErrors for undefined methods. + */ +QUnit.equals = function() { + QUnit.push( false, false, false, "QUnit.equals has been deprecated since 2009 (e88049a0), use QUnit.equal instead" ); +}; +QUnit.same = function() { + QUnit.push( false, false, false, "QUnit.same has been deprecated since 2009 (e88049a0), use QUnit.deepEqual instead" ); +}; + +// We want access to the constructor's prototype +(function() { + function F() {} + F.prototype = QUnit; + QUnit = new F(); + // Make F QUnit's constructor so that we can add to the prototype later + QUnit.constructor = F; +}()); + +/** + * Config object: Maintain internal state + * Later exposed as QUnit.config + * `config` initialized at top of scope + */ +config = { + // The queue of tests to run + queue: [], + + // block until document ready + blocking: true, + + // when enabled, show only failing tests + // gets persisted through sessionStorage and can be changed in UI via checkbox + hidepassed: false, + + // by default, run previously failed tests first + // very useful in combination with "Hide passed tests" checked + reorder: true, + + // by default, modify document.title when suite is done + altertitle: true, + + // when enabled, all tests must call expect() + requireExpects: false, + + // add checkboxes that are persisted in the query-string + // when enabled, the id is set to `true` as a `QUnit.config` property + urlConfig: [ + { + id: "noglobals", + label: "Check for Globals", + tooltip: "Enabling this will test if any test introduces new properties on the `window` object. Stored as query-strings." + }, + { + id: "notrycatch", + label: "No try-catch", + tooltip: "Enabling this will run tests outside of a try-catch block. Makes debugging exceptions in IE reasonable. Stored as query-strings." + } + ], + + // Set of all modules. + modules: {}, + + // logging callback queues + begin: [], + done: [], + log: [], + testStart: [], + testDone: [], + moduleStart: [], + moduleDone: [] +}; + +// Export global variables, unless an 'exports' object exists, +// in that case we assume we're in CommonJS (dealt with on the bottom of the script) +if ( typeof exports === "undefined" ) { + extend( window, QUnit ); + + // Expose QUnit object + window.QUnit = QUnit; +} + +// Initialize more QUnit.config and QUnit.urlParams +(function() { + var i, + location = window.location || { search: "", protocol: "file:" }, + params = location.search.slice( 1 ).split( "&" ), + length = params.length, + urlParams = {}, + current; + + if ( params[ 0 ] ) { + for ( i = 0; i < length; i++ ) { + current = params[ i ].split( "=" ); + current[ 0 ] = decodeURIComponent( current[ 0 ] ); + // allow just a key to turn on a flag, e.g., test.html?noglobals + current[ 1 ] = current[ 1 ] ? decodeURIComponent( current[ 1 ] ) : true; + urlParams[ current[ 0 ] ] = current[ 1 ]; + } + } + + QUnit.urlParams = urlParams; + + // String search anywhere in moduleName+testName + config.filter = urlParams.filter; + + // Exact match of the module name + config.module = urlParams.module; + + config.testNumber = parseInt( urlParams.testNumber, 10 ) || null; + + // Figure out if we're running the tests from a server or not + QUnit.isLocal = location.protocol === "file:"; +}()); + +// Extend QUnit object, +// these after set here because they should not be exposed as global functions +extend( QUnit, { + assert: assert, + + config: config, + + // Initialize the configuration options + init: function() { + extend( config, { + stats: { all: 0, bad: 0 }, + moduleStats: { all: 0, bad: 0 }, + started: +new Date(), + updateRate: 1000, + blocking: false, + autostart: true, + autorun: false, + filter: "", + queue: [], + semaphore: 1 + }); + + var tests, banner, result, + qunit = id( "qunit" ); + + if ( qunit ) { + qunit.innerHTML = + "

      " + escapeText( document.title ) + "

      " + + "

      " + + "
      " + + "

      " + + "
        "; + } + + tests = id( "qunit-tests" ); + banner = id( "qunit-banner" ); + result = id( "qunit-testresult" ); + + if ( tests ) { + tests.innerHTML = ""; + } + + if ( banner ) { + banner.className = ""; + } + + if ( result ) { + result.parentNode.removeChild( result ); + } + + if ( tests ) { + result = document.createElement( "p" ); + result.id = "qunit-testresult"; + result.className = "result"; + tests.parentNode.insertBefore( result, tests ); + result.innerHTML = "Running...
         "; + } + }, + + // Resets the test setup. Useful for tests that modify the DOM. + reset: function() { + var fixture = id( "qunit-fixture" ); + if ( fixture ) { + fixture.innerHTML = config.fixture; + } + }, + + // Trigger an event on an element. + // @example triggerEvent( document.body, "click" ); + triggerEvent: function( elem, type, event ) { + if ( document.createEvent ) { + event = document.createEvent( "MouseEvents" ); + event.initMouseEvent(type, true, true, elem.ownerDocument.defaultView, + 0, 0, 0, 0, 0, false, false, false, false, 0, null); + + elem.dispatchEvent( event ); + } else if ( elem.fireEvent ) { + elem.fireEvent( "on" + type ); + } + }, + + // Safe object type checking + is: function( type, obj ) { + return QUnit.objectType( obj ) === type; + }, + + objectType: function( obj ) { + if ( typeof obj === "undefined" ) { + return "undefined"; + // consider: typeof null === object + } + if ( obj === null ) { + return "null"; + } + + var match = toString.call( obj ).match(/^\[object\s(.*)\]$/), + type = match && match[1] || ""; + + switch ( type ) { + case "Number": + if ( isNaN(obj) ) { + return "nan"; + } + return "number"; + case "String": + case "Boolean": + case "Array": + case "Date": + case "RegExp": + case "Function": + return type.toLowerCase(); + } + if ( typeof obj === "object" ) { + return "object"; + } + return undefined; + }, + + push: function( result, actual, expected, message ) { + if ( !config.current ) { + throw new Error( "assertion outside test context, was " + sourceFromStacktrace() ); + } + + var output, source, + details = { + module: config.current.module, + name: config.current.testName, + result: result, + message: message, + actual: actual, + expected: expected + }; + + message = escapeText( message ) || ( result ? "okay" : "failed" ); + message = "" + message + ""; + output = message; + + if ( !result ) { + expected = escapeText( QUnit.jsDump.parse(expected) ); + actual = escapeText( QUnit.jsDump.parse(actual) ); + output += ""; + + if ( actual !== expected ) { + output += ""; + output += ""; + } + + source = sourceFromStacktrace(); + + if ( source ) { + details.source = source; + output += ""; + } + + output += "
        Expected:
        " + expected + "
        Result:
        " + actual + "
        Diff:
        " + QUnit.diff( expected, actual ) + "
        Source:
        " + escapeText( source ) + "
        "; + } + + runLoggingCallbacks( "log", QUnit, details ); + + config.current.assertions.push({ + result: !!result, + message: output + }); + }, + + pushFailure: function( message, source, actual ) { + if ( !config.current ) { + throw new Error( "pushFailure() assertion outside test context, was " + sourceFromStacktrace(2) ); + } + + var output, + details = { + module: config.current.module, + name: config.current.testName, + result: false, + message: message + }; + + message = escapeText( message ) || "error"; + message = "" + message + ""; + output = message; + + output += ""; + + if ( actual ) { + output += ""; + } + + if ( source ) { + details.source = source; + output += ""; + } + + output += "
        Result:
        " + escapeText( actual ) + "
        Source:
        " + escapeText( source ) + "
        "; + + runLoggingCallbacks( "log", QUnit, details ); + + config.current.assertions.push({ + result: false, + message: output + }); + }, + + url: function( params ) { + params = extend( extend( {}, QUnit.urlParams ), params ); + var key, + querystring = "?"; + + for ( key in params ) { + if ( !hasOwn.call( params, key ) ) { + continue; + } + querystring += encodeURIComponent( key ) + "=" + + encodeURIComponent( params[ key ] ) + "&"; + } + return window.location.protocol + "//" + window.location.host + + window.location.pathname + querystring.slice( 0, -1 ); + }, + + extend: extend, + id: id, + addEvent: addEvent + // load, equiv, jsDump, diff: Attached later +}); + +/** + * @deprecated: Created for backwards compatibility with test runner that set the hook function + * into QUnit.{hook}, instead of invoking it and passing the hook function. + * QUnit.constructor is set to the empty F() above so that we can add to it's prototype here. + * Doing this allows us to tell if the following methods have been overwritten on the actual + * QUnit object. + */ +extend( QUnit.constructor.prototype, { + + // Logging callbacks; all receive a single argument with the listed properties + // run test/logs.html for any related changes + begin: registerLoggingCallback( "begin" ), + + // done: { failed, passed, total, runtime } + done: registerLoggingCallback( "done" ), + + // log: { result, actual, expected, message } + log: registerLoggingCallback( "log" ), + + // testStart: { name } + testStart: registerLoggingCallback( "testStart" ), + + // testDone: { name, failed, passed, total, duration } + testDone: registerLoggingCallback( "testDone" ), + + // moduleStart: { name } + moduleStart: registerLoggingCallback( "moduleStart" ), + + // moduleDone: { name, failed, passed, total } + moduleDone: registerLoggingCallback( "moduleDone" ) +}); + +if ( typeof document === "undefined" || document.readyState === "complete" ) { + config.autorun = true; +} + +QUnit.load = function() { + runLoggingCallbacks( "begin", QUnit, {} ); + + // Initialize the config, saving the execution queue + var banner, filter, i, label, len, main, ol, toolbar, userAgent, val, + urlConfigCheckboxesContainer, urlConfigCheckboxes, moduleFilter, + numModules = 0, + moduleFilterHtml = "", + urlConfigHtml = "", + oldconfig = extend( {}, config ); + + QUnit.init(); + extend(config, oldconfig); + + config.blocking = false; + + len = config.urlConfig.length; + + for ( i = 0; i < len; i++ ) { + val = config.urlConfig[i]; + if ( typeof val === "string" ) { + val = { + id: val, + label: val, + tooltip: "[no tooltip available]" + }; + } + config[ val.id ] = QUnit.urlParams[ val.id ]; + urlConfigHtml += ""; + } + + moduleFilterHtml += ""; + + // `userAgent` initialized at top of scope + userAgent = id( "qunit-userAgent" ); + if ( userAgent ) { + userAgent.innerHTML = navigator.userAgent; + } + + // `banner` initialized at top of scope + banner = id( "qunit-header" ); + if ( banner ) { + banner.innerHTML = "" + banner.innerHTML + " "; + } + + // `toolbar` initialized at top of scope + toolbar = id( "qunit-testrunner-toolbar" ); + if ( toolbar ) { + // `filter` initialized at top of scope + filter = document.createElement( "input" ); + filter.type = "checkbox"; + filter.id = "qunit-filter-pass"; + + addEvent( filter, "click", function() { + var tmp, + ol = document.getElementById( "qunit-tests" ); + + if ( filter.checked ) { + ol.className = ol.className + " hidepass"; + } else { + tmp = " " + ol.className.replace( /[\n\t\r]/g, " " ) + " "; + ol.className = tmp.replace( / hidepass /, " " ); + } + if ( defined.sessionStorage ) { + if (filter.checked) { + sessionStorage.setItem( "qunit-filter-passed-tests", "true" ); + } else { + sessionStorage.removeItem( "qunit-filter-passed-tests" ); + } + } + }); + + if ( config.hidepassed || defined.sessionStorage && sessionStorage.getItem( "qunit-filter-passed-tests" ) ) { + filter.checked = true; + // `ol` initialized at top of scope + ol = document.getElementById( "qunit-tests" ); + ol.className = ol.className + " hidepass"; + } + toolbar.appendChild( filter ); + + // `label` initialized at top of scope + label = document.createElement( "label" ); + label.setAttribute( "for", "qunit-filter-pass" ); + label.setAttribute( "title", "Only show tests and assertons that fail. Stored in sessionStorage." ); + label.innerHTML = "Hide passed tests"; + toolbar.appendChild( label ); + + urlConfigCheckboxesContainer = document.createElement("span"); + urlConfigCheckboxesContainer.innerHTML = urlConfigHtml; + urlConfigCheckboxes = urlConfigCheckboxesContainer.getElementsByTagName("input"); + // For oldIE support: + // * Add handlers to the individual elements instead of the container + // * Use "click" instead of "change" + // * Fallback from event.target to event.srcElement + addEvents( urlConfigCheckboxes, "click", function( event ) { + var params = {}, + target = event.target || event.srcElement; + params[ target.name ] = target.checked ? true : undefined; + window.location = QUnit.url( params ); + }); + toolbar.appendChild( urlConfigCheckboxesContainer ); + + if (numModules > 1) { + moduleFilter = document.createElement( 'span' ); + moduleFilter.setAttribute( 'id', 'qunit-modulefilter-container' ); + moduleFilter.innerHTML = moduleFilterHtml; + addEvent( moduleFilter.lastChild, "change", function() { + var selectBox = moduleFilter.getElementsByTagName("select")[0], + selectedModule = decodeURIComponent(selectBox.options[selectBox.selectedIndex].value); + + window.location = QUnit.url( { module: ( selectedModule === "" ) ? undefined : selectedModule } ); + }); + toolbar.appendChild(moduleFilter); + } + } + + // `main` initialized at top of scope + main = id( "qunit-fixture" ); + if ( main ) { + config.fixture = main.innerHTML; + } + + if ( config.autostart ) { + QUnit.start(); + } +}; + +addEvent( window, "load", QUnit.load ); + +// `onErrorFnPrev` initialized at top of scope +// Preserve other handlers +onErrorFnPrev = window.onerror; + +// Cover uncaught exceptions +// Returning true will surpress the default browser handler, +// returning false will let it run. +window.onerror = function ( error, filePath, linerNr ) { + var ret = false; + if ( onErrorFnPrev ) { + ret = onErrorFnPrev( error, filePath, linerNr ); + } + + // Treat return value as window.onerror itself does, + // Only do our handling if not surpressed. + if ( ret !== true ) { + if ( QUnit.config.current ) { + if ( QUnit.config.current.ignoreGlobalErrors ) { + return true; + } + QUnit.pushFailure( error, filePath + ":" + linerNr ); + } else { + QUnit.test( "global failure", extend( function() { + QUnit.pushFailure( error, filePath + ":" + linerNr ); + }, { validTest: validTest } ) ); + } + return false; + } + + return ret; +}; + +function done() { + config.autorun = true; + + // Log the last module results + if ( config.currentModule ) { + runLoggingCallbacks( "moduleDone", QUnit, { + name: config.currentModule, + failed: config.moduleStats.bad, + passed: config.moduleStats.all - config.moduleStats.bad, + total: config.moduleStats.all + }); + } + + var i, key, + banner = id( "qunit-banner" ), + tests = id( "qunit-tests" ), + runtime = +new Date() - config.started, + passed = config.stats.all - config.stats.bad, + html = [ + "Tests completed in ", + runtime, + " milliseconds.
        ", + "", + passed, + " assertions of ", + config.stats.all, + " passed, ", + config.stats.bad, + " failed." + ].join( "" ); + + if ( banner ) { + banner.className = ( config.stats.bad ? "qunit-fail" : "qunit-pass" ); + } + + if ( tests ) { + id( "qunit-testresult" ).innerHTML = html; + } + + if ( config.altertitle && typeof document !== "undefined" && document.title ) { + // show ✖ for good, ✔ for bad suite result in title + // use escape sequences in case file gets loaded with non-utf-8-charset + document.title = [ + ( config.stats.bad ? "\u2716" : "\u2714" ), + document.title.replace( /^[\u2714\u2716] /i, "" ) + ].join( " " ); + } + + // clear own sessionStorage items if all tests passed + if ( config.reorder && defined.sessionStorage && config.stats.bad === 0 ) { + // `key` & `i` initialized at top of scope + for ( i = 0; i < sessionStorage.length; i++ ) { + key = sessionStorage.key( i++ ); + if ( key.indexOf( "qunit-test-" ) === 0 ) { + sessionStorage.removeItem( key ); + } + } + } + + // scroll back to top to show results + if ( window.scrollTo ) { + window.scrollTo(0, 0); + } + + runLoggingCallbacks( "done", QUnit, { + failed: config.stats.bad, + passed: passed, + total: config.stats.all, + runtime: runtime + }); +} + +/** @return Boolean: true if this test should be ran */ +function validTest( test ) { + var include, + filter = config.filter && config.filter.toLowerCase(), + module = config.module && config.module.toLowerCase(), + fullName = (test.module + ": " + test.testName).toLowerCase(); + + // Internally-generated tests are always valid + if ( test.callback && test.callback.validTest === validTest ) { + delete test.callback.validTest; + return true; + } + + if ( config.testNumber ) { + return test.testNumber === config.testNumber; + } + + if ( module && ( !test.module || test.module.toLowerCase() !== module ) ) { + return false; + } + + if ( !filter ) { + return true; + } + + include = filter.charAt( 0 ) !== "!"; + if ( !include ) { + filter = filter.slice( 1 ); + } + + // If the filter matches, we need to honour include + if ( fullName.indexOf( filter ) !== -1 ) { + return include; + } + + // Otherwise, do the opposite + return !include; +} + +// so far supports only Firefox, Chrome and Opera (buggy), Safari (for real exceptions) +// Later Safari and IE10 are supposed to support error.stack as well +// See also https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error/Stack +function extractStacktrace( e, offset ) { + offset = offset === undefined ? 3 : offset; + + var stack, include, i; + + if ( e.stacktrace ) { + // Opera + return e.stacktrace.split( "\n" )[ offset + 3 ]; + } else if ( e.stack ) { + // Firefox, Chrome + stack = e.stack.split( "\n" ); + if (/^error$/i.test( stack[0] ) ) { + stack.shift(); + } + if ( fileName ) { + include = []; + for ( i = offset; i < stack.length; i++ ) { + if ( stack[ i ].indexOf( fileName ) !== -1 ) { + break; + } + include.push( stack[ i ] ); + } + if ( include.length ) { + return include.join( "\n" ); + } + } + return stack[ offset ]; + } else if ( e.sourceURL ) { + // Safari, PhantomJS + // hopefully one day Safari provides actual stacktraces + // exclude useless self-reference for generated Error objects + if ( /qunit.js$/.test( e.sourceURL ) ) { + return; + } + // for actual exceptions, this is useful + return e.sourceURL + ":" + e.line; + } +} +function sourceFromStacktrace( offset ) { + try { + throw new Error(); + } catch ( e ) { + return extractStacktrace( e, offset ); + } +} + +/** + * Escape text for attribute or text content. + */ +function escapeText( s ) { + if ( !s ) { + return ""; + } + s = s + ""; + // Both single quotes and double quotes (for attributes) + return s.replace( /['"<>&]/g, function( s ) { + switch( s ) { + case '\'': + return '''; + case '"': + return '"'; + case '<': + return '<'; + case '>': + return '>'; + case '&': + return '&'; + } + }); +} + +function synchronize( callback, last ) { + config.queue.push( callback ); + + if ( config.autorun && !config.blocking ) { + process( last ); + } +} + +function process( last ) { + function next() { + process( last ); + } + var start = new Date().getTime(); + config.depth = config.depth ? config.depth + 1 : 1; + + while ( config.queue.length && !config.blocking ) { + if ( !defined.setTimeout || config.updateRate <= 0 || ( ( new Date().getTime() - start ) < config.updateRate ) ) { + config.queue.shift()(); + } else { + window.setTimeout( next, 13 ); + break; + } + } + config.depth--; + if ( last && !config.blocking && !config.queue.length && config.depth === 0 ) { + done(); + } +} + +function saveGlobal() { + config.pollution = []; + + if ( config.noglobals ) { + for ( var key in window ) { + // in Opera sometimes DOM element ids show up here, ignore them + if ( !hasOwn.call( window, key ) || /^qunit-test-output/.test( key ) ) { + continue; + } + config.pollution.push( key ); + } + } +} + +function checkPollution() { + var newGlobals, + deletedGlobals, + old = config.pollution; + + saveGlobal(); + + newGlobals = diff( config.pollution, old ); + if ( newGlobals.length > 0 ) { + QUnit.pushFailure( "Introduced global variable(s): " + newGlobals.join(", ") ); + } + + deletedGlobals = diff( old, config.pollution ); + if ( deletedGlobals.length > 0 ) { + QUnit.pushFailure( "Deleted global variable(s): " + deletedGlobals.join(", ") ); + } +} + +// returns a new Array with the elements that are in a but not in b +function diff( a, b ) { + var i, j, + result = a.slice(); + + for ( i = 0; i < result.length; i++ ) { + for ( j = 0; j < b.length; j++ ) { + if ( result[i] === b[j] ) { + result.splice( i, 1 ); + i--; + break; + } + } + } + return result; +} + +function extend( a, b ) { + for ( var prop in b ) { + if ( b[ prop ] === undefined ) { + delete a[ prop ]; + + // Avoid "Member not found" error in IE8 caused by setting window.constructor + } else if ( prop !== "constructor" || a !== window ) { + a[ prop ] = b[ prop ]; + } + } + + return a; +} + +/** + * @param {HTMLElement} elem + * @param {string} type + * @param {Function} fn + */ +function addEvent( elem, type, fn ) { + // Standards-based browsers + if ( elem.addEventListener ) { + elem.addEventListener( type, fn, false ); + // IE + } else { + elem.attachEvent( "on" + type, fn ); + } +} + +/** + * @param {Array|NodeList} elems + * @param {string} type + * @param {Function} fn + */ +function addEvents( elems, type, fn ) { + var i = elems.length; + while ( i-- ) { + addEvent( elems[i], type, fn ); + } +} + +function hasClass( elem, name ) { + return (" " + elem.className + " ").indexOf(" " + name + " ") > -1; +} + +function addClass( elem, name ) { + if ( !hasClass( elem, name ) ) { + elem.className += (elem.className ? " " : "") + name; + } +} + +function removeClass( elem, name ) { + var set = " " + elem.className + " "; + // Class name may appear multiple times + while ( set.indexOf(" " + name + " ") > -1 ) { + set = set.replace(" " + name + " " , " "); + } + // If possible, trim it for prettiness, but not neccecarily + elem.className = window.jQuery ? jQuery.trim( set ) : ( set.trim ? set.trim() : set ); +} + +function id( name ) { + return !!( typeof document !== "undefined" && document && document.getElementById ) && + document.getElementById( name ); +} + +function registerLoggingCallback( key ) { + return function( callback ) { + config[key].push( callback ); + }; +} + +// Supports deprecated method of completely overwriting logging callbacks +function runLoggingCallbacks( key, scope, args ) { + var i, callbacks; + if ( QUnit.hasOwnProperty( key ) ) { + QUnit[ key ].call(scope, args ); + } else { + callbacks = config[ key ]; + for ( i = 0; i < callbacks.length; i++ ) { + callbacks[ i ].call( scope, args ); + } + } +} + +// Test for equality any JavaScript type. +// Author: Philippe Rathé +QUnit.equiv = (function() { + + // Call the o related callback with the given arguments. + function bindCallbacks( o, callbacks, args ) { + var prop = QUnit.objectType( o ); + if ( prop ) { + if ( QUnit.objectType( callbacks[ prop ] ) === "function" ) { + return callbacks[ prop ].apply( callbacks, args ); + } else { + return callbacks[ prop ]; // or undefined + } + } + } + + // the real equiv function + var innerEquiv, + // stack to decide between skip/abort functions + callers = [], + // stack to avoiding loops from circular referencing + parents = [], + + getProto = Object.getPrototypeOf || function ( obj ) { + return obj.__proto__; + }, + callbacks = (function () { + + // for string, boolean, number and null + function useStrictEquality( b, a ) { + /*jshint eqeqeq:false */ + if ( b instanceof a.constructor || a instanceof b.constructor ) { + // to catch short annotaion VS 'new' annotation of a + // declaration + // e.g. var i = 1; + // var j = new Number(1); + return a == b; + } else { + return a === b; + } + } + + return { + "string": useStrictEquality, + "boolean": useStrictEquality, + "number": useStrictEquality, + "null": useStrictEquality, + "undefined": useStrictEquality, + + "nan": function( b ) { + return isNaN( b ); + }, + + "date": function( b, a ) { + return QUnit.objectType( b ) === "date" && a.valueOf() === b.valueOf(); + }, + + "regexp": function( b, a ) { + return QUnit.objectType( b ) === "regexp" && + // the regex itself + a.source === b.source && + // and its modifers + a.global === b.global && + // (gmi) ... + a.ignoreCase === b.ignoreCase && + a.multiline === b.multiline && + a.sticky === b.sticky; + }, + + // - skip when the property is a method of an instance (OOP) + // - abort otherwise, + // initial === would have catch identical references anyway + "function": function() { + var caller = callers[callers.length - 1]; + return caller !== Object && typeof caller !== "undefined"; + }, + + "array": function( b, a ) { + var i, j, len, loop; + + // b could be an object literal here + if ( QUnit.objectType( b ) !== "array" ) { + return false; + } + + len = a.length; + if ( len !== b.length ) { + // safe and faster + return false; + } + + // track reference to avoid circular references + parents.push( a ); + for ( i = 0; i < len; i++ ) { + loop = false; + for ( j = 0; j < parents.length; j++ ) { + if ( parents[j] === a[i] ) { + loop = true;// dont rewalk array + } + } + if ( !loop && !innerEquiv(a[i], b[i]) ) { + parents.pop(); + return false; + } + } + parents.pop(); + return true; + }, + + "object": function( b, a ) { + var i, j, loop, + // Default to true + eq = true, + aProperties = [], + bProperties = []; + + // comparing constructors is more strict than using + // instanceof + if ( a.constructor !== b.constructor ) { + // Allow objects with no prototype to be equivalent to + // objects with Object as their constructor. + if ( !(( getProto(a) === null && getProto(b) === Object.prototype ) || + ( getProto(b) === null && getProto(a) === Object.prototype ) ) ) { + return false; + } + } + + // stack constructor before traversing properties + callers.push( a.constructor ); + // track reference to avoid circular references + parents.push( a ); + + for ( i in a ) { // be strict: don't ensures hasOwnProperty + // and go deep + loop = false; + for ( j = 0; j < parents.length; j++ ) { + if ( parents[j] === a[i] ) { + // don't go down the same path twice + loop = true; + } + } + aProperties.push(i); // collect a's properties + + if (!loop && !innerEquiv( a[i], b[i] ) ) { + eq = false; + break; + } + } + + callers.pop(); // unstack, we are done + parents.pop(); + + for ( i in b ) { + bProperties.push( i ); // collect b's properties + } + + // Ensures identical properties name + return eq && innerEquiv( aProperties.sort(), bProperties.sort() ); + } + }; + }()); + + innerEquiv = function() { // can take multiple arguments + var args = [].slice.apply( arguments ); + if ( args.length < 2 ) { + return true; // end transition + } + + return (function( a, b ) { + if ( a === b ) { + return true; // catch the most you can + } else if ( a === null || b === null || typeof a === "undefined" || + typeof b === "undefined" || + QUnit.objectType(a) !== QUnit.objectType(b) ) { + return false; // don't lose time with error prone cases + } else { + return bindCallbacks(a, callbacks, [ b, a ]); + } + + // apply transition with (1..n) arguments + }( args[0], args[1] ) && arguments.callee.apply( this, args.splice(1, args.length - 1 )) ); + }; + + return innerEquiv; +}()); + +/** + * jsDump Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com | + * http://flesler.blogspot.com Licensed under BSD + * (http://www.opensource.org/licenses/bsd-license.php) Date: 5/15/2008 + * + * @projectDescription Advanced and extensible data dumping for Javascript. + * @version 1.0.0 + * @author Ariel Flesler + * @link {http://flesler.blogspot.com/2008/05/jsdump-pretty-dump-of-any-javascript.html} + */ +QUnit.jsDump = (function() { + function quote( str ) { + return '"' + str.toString().replace( /"/g, '\\"' ) + '"'; + } + function literal( o ) { + return o + ""; + } + function join( pre, arr, post ) { + var s = jsDump.separator(), + base = jsDump.indent(), + inner = jsDump.indent(1); + if ( arr.join ) { + arr = arr.join( "," + s + inner ); + } + if ( !arr ) { + return pre + post; + } + return [ pre, inner + arr, base + post ].join(s); + } + function array( arr, stack ) { + var i = arr.length, ret = new Array(i); + this.up(); + while ( i-- ) { + ret[i] = this.parse( arr[i] , undefined , stack); + } + this.down(); + return join( "[", ret, "]" ); + } + + var reName = /^function (\w+)/, + jsDump = { + // type is used mostly internally, you can fix a (custom)type in advance + parse: function( obj, type, stack ) { + stack = stack || [ ]; + var inStack, res, + parser = this.parsers[ type || this.typeOf(obj) ]; + + type = typeof parser; + inStack = inArray( obj, stack ); + + if ( inStack !== -1 ) { + return "recursion(" + (inStack - stack.length) + ")"; + } + if ( type === "function" ) { + stack.push( obj ); + res = parser.call( this, obj, stack ); + stack.pop(); + return res; + } + return ( type === "string" ) ? parser : this.parsers.error; + }, + typeOf: function( obj ) { + var type; + if ( obj === null ) { + type = "null"; + } else if ( typeof obj === "undefined" ) { + type = "undefined"; + } else if ( QUnit.is( "regexp", obj) ) { + type = "regexp"; + } else if ( QUnit.is( "date", obj) ) { + type = "date"; + } else if ( QUnit.is( "function", obj) ) { + type = "function"; + } else if ( typeof obj.setInterval !== undefined && typeof obj.document !== "undefined" && typeof obj.nodeType === "undefined" ) { + type = "window"; + } else if ( obj.nodeType === 9 ) { + type = "document"; + } else if ( obj.nodeType ) { + type = "node"; + } else if ( + // native arrays + toString.call( obj ) === "[object Array]" || + // NodeList objects + ( typeof obj.length === "number" && typeof obj.item !== "undefined" && ( obj.length ? obj.item(0) === obj[0] : ( obj.item( 0 ) === null && typeof obj[0] === "undefined" ) ) ) + ) { + type = "array"; + } else if ( obj.constructor === Error.prototype.constructor ) { + type = "error"; + } else { + type = typeof obj; + } + return type; + }, + separator: function() { + return this.multiline ? this.HTML ? "
        " : "\n" : this.HTML ? " " : " "; + }, + // extra can be a number, shortcut for increasing-calling-decreasing + indent: function( extra ) { + if ( !this.multiline ) { + return ""; + } + var chr = this.indentChar; + if ( this.HTML ) { + chr = chr.replace( /\t/g, " " ).replace( / /g, " " ); + } + return new Array( this._depth_ + (extra||0) ).join(chr); + }, + up: function( a ) { + this._depth_ += a || 1; + }, + down: function( a ) { + this._depth_ -= a || 1; + }, + setParser: function( name, parser ) { + this.parsers[name] = parser; + }, + // The next 3 are exposed so you can use them + quote: quote, + literal: literal, + join: join, + // + _depth_: 1, + // This is the list of parsers, to modify them, use jsDump.setParser + parsers: { + window: "[Window]", + document: "[Document]", + error: function(error) { + return "Error(\"" + error.message + "\")"; + }, + unknown: "[Unknown]", + "null": "null", + "undefined": "undefined", + "function": function( fn ) { + var ret = "function", + // functions never have name in IE + name = "name" in fn ? fn.name : (reName.exec(fn) || [])[1]; + + if ( name ) { + ret += " " + name; + } + ret += "( "; + + ret = [ ret, QUnit.jsDump.parse( fn, "functionArgs" ), "){" ].join( "" ); + return join( ret, QUnit.jsDump.parse(fn,"functionCode" ), "}" ); + }, + array: array, + nodelist: array, + "arguments": array, + object: function( map, stack ) { + var ret = [ ], keys, key, val, i; + QUnit.jsDump.up(); + keys = []; + for ( key in map ) { + keys.push( key ); + } + keys.sort(); + for ( i = 0; i < keys.length; i++ ) { + key = keys[ i ]; + val = map[ key ]; + ret.push( QUnit.jsDump.parse( key, "key" ) + ": " + QUnit.jsDump.parse( val, undefined, stack ) ); + } + QUnit.jsDump.down(); + return join( "{", ret, "}" ); + }, + node: function( node ) { + var len, i, val, + open = QUnit.jsDump.HTML ? "<" : "<", + close = QUnit.jsDump.HTML ? ">" : ">", + tag = node.nodeName.toLowerCase(), + ret = open + tag, + attrs = node.attributes; + + if ( attrs ) { + for ( i = 0, len = attrs.length; i < len; i++ ) { + val = attrs[i].nodeValue; + // IE6 includes all attributes in .attributes, even ones not explicitly set. + // Those have values like undefined, null, 0, false, "" or "inherit". + if ( val && val !== "inherit" ) { + ret += " " + attrs[i].nodeName + "=" + QUnit.jsDump.parse( val, "attribute" ); + } + } + } + ret += close; + + // Show content of TextNode or CDATASection + if ( node.nodeType === 3 || node.nodeType === 4 ) { + ret += node.nodeValue; + } + + return ret + open + "/" + tag + close; + }, + // function calls it internally, it's the arguments part of the function + functionArgs: function( fn ) { + var args, + l = fn.length; + + if ( !l ) { + return ""; + } + + args = new Array(l); + while ( l-- ) { + // 97 is 'a' + args[l] = String.fromCharCode(97+l); + } + return " " + args.join( ", " ) + " "; + }, + // object calls it internally, the key part of an item in a map + key: quote, + // function calls it internally, it's the content of the function + functionCode: "[code]", + // node calls it internally, it's an html attribute value + attribute: quote, + string: quote, + date: quote, + regexp: literal, + number: literal, + "boolean": literal + }, + // if true, entities are escaped ( <, >, \t, space and \n ) + HTML: false, + // indentation unit + indentChar: " ", + // if true, items in a collection, are separated by a \n, else just a space. + multiline: true + }; + + return jsDump; +}()); + +// from jquery.js +function inArray( elem, array ) { + if ( array.indexOf ) { + return array.indexOf( elem ); + } + + for ( var i = 0, length = array.length; i < length; i++ ) { + if ( array[ i ] === elem ) { + return i; + } + } + + return -1; +} + +/* + * Javascript Diff Algorithm + * By John Resig (http://ejohn.org/) + * Modified by Chu Alan "sprite" + * + * Released under the MIT license. + * + * More Info: + * http://ejohn.org/projects/javascript-diff-algorithm/ + * + * Usage: QUnit.diff(expected, actual) + * + * QUnit.diff( "the quick brown fox jumped over", "the quick fox jumps over" ) == "the quick brown fox jumped jumps over" + */ +QUnit.diff = (function() { + /*jshint eqeqeq:false, eqnull:true */ + function diff( o, n ) { + var i, + ns = {}, + os = {}; + + for ( i = 0; i < n.length; i++ ) { + if ( !hasOwn.call( ns, n[i] ) ) { + ns[ n[i] ] = { + rows: [], + o: null + }; + } + ns[ n[i] ].rows.push( i ); + } + + for ( i = 0; i < o.length; i++ ) { + if ( !hasOwn.call( os, o[i] ) ) { + os[ o[i] ] = { + rows: [], + n: null + }; + } + os[ o[i] ].rows.push( i ); + } + + for ( i in ns ) { + if ( !hasOwn.call( ns, i ) ) { + continue; + } + if ( ns[i].rows.length === 1 && hasOwn.call( os, i ) && os[i].rows.length === 1 ) { + n[ ns[i].rows[0] ] = { + text: n[ ns[i].rows[0] ], + row: os[i].rows[0] + }; + o[ os[i].rows[0] ] = { + text: o[ os[i].rows[0] ], + row: ns[i].rows[0] + }; + } + } + + for ( i = 0; i < n.length - 1; i++ ) { + if ( n[i].text != null && n[ i + 1 ].text == null && n[i].row + 1 < o.length && o[ n[i].row + 1 ].text == null && + n[ i + 1 ] == o[ n[i].row + 1 ] ) { + + n[ i + 1 ] = { + text: n[ i + 1 ], + row: n[i].row + 1 + }; + o[ n[i].row + 1 ] = { + text: o[ n[i].row + 1 ], + row: i + 1 + }; + } + } + + for ( i = n.length - 1; i > 0; i-- ) { + if ( n[i].text != null && n[ i - 1 ].text == null && n[i].row > 0 && o[ n[i].row - 1 ].text == null && + n[ i - 1 ] == o[ n[i].row - 1 ]) { + + n[ i - 1 ] = { + text: n[ i - 1 ], + row: n[i].row - 1 + }; + o[ n[i].row - 1 ] = { + text: o[ n[i].row - 1 ], + row: i - 1 + }; + } + } + + return { + o: o, + n: n + }; + } + + return function( o, n ) { + o = o.replace( /\s+$/, "" ); + n = n.replace( /\s+$/, "" ); + + var i, pre, + str = "", + out = diff( o === "" ? [] : o.split(/\s+/), n === "" ? [] : n.split(/\s+/) ), + oSpace = o.match(/\s+/g), + nSpace = n.match(/\s+/g); + + if ( oSpace == null ) { + oSpace = [ " " ]; + } + else { + oSpace.push( " " ); + } + + if ( nSpace == null ) { + nSpace = [ " " ]; + } + else { + nSpace.push( " " ); + } + + if ( out.n.length === 0 ) { + for ( i = 0; i < out.o.length; i++ ) { + str += "" + out.o[i] + oSpace[i] + ""; + } + } + else { + if ( out.n[0].text == null ) { + for ( n = 0; n < out.o.length && out.o[n].text == null; n++ ) { + str += "" + out.o[n] + oSpace[n] + ""; + } + } + + for ( i = 0; i < out.n.length; i++ ) { + if (out.n[i].text == null) { + str += "" + out.n[i] + nSpace[i] + ""; + } + else { + // `pre` initialized at top of scope + pre = ""; + + for ( n = out.n[i].row + 1; n < out.o.length && out.o[n].text == null; n++ ) { + pre += "" + out.o[n] + oSpace[n] + ""; + } + str += " " + out.n[i].text + nSpace[i] + pre; + } + } + } + + return str; + }; +}()); + +// for CommonJS enviroments, export everything +if ( typeof exports !== "undefined" ) { + extend( exports, QUnit ); +} + +// get at whatever the global object is, like window in browsers +}( (function() {return this;}.call()) )); diff --git a/jquery-ui-1.10.2.custom/development-bundle/jquery-1.9.1.js b/jquery-ui-1.10.2.custom/development-bundle/jquery-1.9.1.js new file mode 100755 index 0000000..e2c203f --- /dev/null +++ b/jquery-ui-1.10.2.custom/development-bundle/jquery-1.9.1.js @@ -0,0 +1,9597 @@ +/*! + * jQuery JavaScript Library v1.9.1 + * http://jquery.com/ + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * + * Copyright 2005, 2012 jQuery Foundation, Inc. and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2013-2-4 + */ +(function( window, undefined ) { + +// Can't do this because several apps including ASP.NET trace +// the stack via arguments.caller.callee and Firefox dies if +// you try to trace through "use strict" call chains. (#13335) +// Support: Firefox 18+ +//"use strict"; +var + // The deferred used on DOM ready + readyList, + + // A central reference to the root jQuery(document) + rootjQuery, + + // Support: IE<9 + // For `typeof node.method` instead of `node.method !== undefined` + core_strundefined = typeof undefined, + + // Use the correct document accordingly with window argument (sandbox) + document = window.document, + location = window.location, + + // Map over jQuery in case of overwrite + _jQuery = window.jQuery, + + // Map over the $ in case of overwrite + _$ = window.$, + + // [[Class]] -> type pairs + class2type = {}, + + // List of deleted data cache ids, so we can reuse them + core_deletedIds = [], + + core_version = "1.9.1", + + // Save a reference to some core methods + core_concat = core_deletedIds.concat, + core_push = core_deletedIds.push, + core_slice = core_deletedIds.slice, + core_indexOf = core_deletedIds.indexOf, + core_toString = class2type.toString, + core_hasOwn = class2type.hasOwnProperty, + core_trim = core_version.trim, + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + // The jQuery object is actually just the init constructor 'enhanced' + return new jQuery.fn.init( selector, context, rootjQuery ); + }, + + // Used for matching numbers + core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source, + + // Used for splitting on whitespace + core_rnotwhite = /\S+/g, + + // Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE) + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + rquickExpr = /^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/, + + // Match a standalone tag + rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, + + // JSON RegExp + rvalidchars = /^[\],:{}\s]*$/, + rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, + rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g, + rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([\da-z])/gi, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); + }, + + // The ready event handler + completed = function( event ) { + + // readyState === "complete" is good enough for us to call the dom ready in oldIE + if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) { + detach(); + jQuery.ready(); + } + }, + // Clean-up method for dom ready events + detach = function() { + if ( document.addEventListener ) { + document.removeEventListener( "DOMContentLoaded", completed, false ); + window.removeEventListener( "load", completed, false ); + + } else { + document.detachEvent( "onreadystatechange", completed ); + window.detachEvent( "onload", completed ); + } + }; + +jQuery.fn = jQuery.prototype = { + // The current version of jQuery being used + jquery: core_version, + + constructor: jQuery, + init: function( selector, context, rootjQuery ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && (match[1] || !context) ) { + + // HANDLE: $(html) -> $(array) + if ( match[1] ) { + context = context instanceof jQuery ? context[0] : context; + + // scripts is true for back-compat + jQuery.merge( this, jQuery.parseHTML( + match[1], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + // Properties of context are called as methods if possible + if ( jQuery.isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[2] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id !== match[2] ) { + return rootjQuery.find( selector ); + } + + // Otherwise, we inject the element directly into the jQuery object + this.length = 1; + this[0] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || rootjQuery ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this.context = this[0] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return rootjQuery.ready( selector ); + } + + if ( selector.selector !== undefined ) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }, + + // Start with an empty selector + selector: "", + + // The default length of a jQuery object is 0 + length: 0, + + // The number of elements contained in the matched element set + size: function() { + return this.length; + }, + + toArray: function() { + return core_slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num == null ? + + // Return a 'clean' array + this.toArray() : + + // Return just the object + ( num < 0 ? this[ this.length + num ] : this[ num ] ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + ret.context = this.context; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + // (You can seed the arguments with an array of args, but this is + // only used internally.) + each: function( callback, args ) { + return jQuery.each( this, callback, args ); + }, + + ready: function( fn ) { + // Add the callback + jQuery.ready.promise().done( fn ); + + return this; + }, + + slice: function() { + return this.pushStack( core_slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map(this, function( elem, i ) { + return callback.call( elem, i, elem ); + })); + }, + + end: function() { + return this.prevObject || this.constructor(null); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: core_push, + sort: [].sort, + splice: [].splice +}; + +// Give the init function the jQuery prototype for later instantiation +jQuery.fn.init.prototype = jQuery.fn; + +jQuery.extend = jQuery.fn.extend = function() { + var src, copyIsArray, copy, name, options, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction(target) ) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if ( length === i ) { + target = this; + --i; + } + + for ( ; i < length; i++ ) { + // Only deal with non-null/undefined values + if ( (options = arguments[ i ]) != null ) { + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; + + } else { + clone = src && jQuery.isPlainObject(src) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend({ + noConflict: function( deep ) { + if ( window.$ === jQuery ) { + window.$ = _$; + } + + if ( deep && window.jQuery === jQuery ) { + window.jQuery = _jQuery; + } + + return jQuery; + }, + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( !document.body ) { + return setTimeout( jQuery.ready ); + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + + // Trigger any bound ready events + if ( jQuery.fn.trigger ) { + jQuery( document ).trigger("ready").off("ready"); + } + }, + + // See test/unit/core.js for details concerning isFunction. + // Since version 1.3, DOM methods and functions like alert + // aren't supported. They return false on IE (#2968). + isFunction: function( obj ) { + return jQuery.type(obj) === "function"; + }, + + isArray: Array.isArray || function( obj ) { + return jQuery.type(obj) === "array"; + }, + + isWindow: function( obj ) { + return obj != null && obj == obj.window; + }, + + isNumeric: function( obj ) { + return !isNaN( parseFloat(obj) ) && isFinite( obj ); + }, + + type: function( obj ) { + if ( obj == null ) { + return String( obj ); + } + return typeof obj === "object" || typeof obj === "function" ? + class2type[ core_toString.call(obj) ] || "object" : + typeof obj; + }, + + isPlainObject: function( obj ) { + // Must be an Object. + // Because of IE, we also have to check the presence of the constructor property. + // Make sure that DOM nodes and window objects don't pass through, as well + if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + try { + // Not own constructor property must be Object + if ( obj.constructor && + !core_hasOwn.call(obj, "constructor") && + !core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { + return false; + } + } catch ( e ) { + // IE8,9 Will throw exceptions on certain host objects #9897 + return false; + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + + var key; + for ( key in obj ) {} + + return key === undefined || core_hasOwn.call( obj, key ); + }, + + isEmptyObject: function( obj ) { + var name; + for ( name in obj ) { + return false; + } + return true; + }, + + error: function( msg ) { + throw new Error( msg ); + }, + + // data: string of html + // context (optional): If specified, the fragment will be created in this context, defaults to document + // keepScripts (optional): If true, will include scripts passed in the html string + parseHTML: function( data, context, keepScripts ) { + if ( !data || typeof data !== "string" ) { + return null; + } + if ( typeof context === "boolean" ) { + keepScripts = context; + context = false; + } + context = context || document; + + var parsed = rsingleTag.exec( data ), + scripts = !keepScripts && []; + + // Single tag + if ( parsed ) { + return [ context.createElement( parsed[1] ) ]; + } + + parsed = jQuery.buildFragment( [ data ], context, scripts ); + if ( scripts ) { + jQuery( scripts ).remove(); + } + return jQuery.merge( [], parsed.childNodes ); + }, + + parseJSON: function( data ) { + // Attempt to parse using the native JSON parser first + if ( window.JSON && window.JSON.parse ) { + return window.JSON.parse( data ); + } + + if ( data === null ) { + return data; + } + + if ( typeof data === "string" ) { + + // Make sure leading/trailing whitespace is removed (IE can't handle it) + data = jQuery.trim( data ); + + if ( data ) { + // Make sure the incoming data is actual JSON + // Logic borrowed from http://json.org/json2.js + if ( rvalidchars.test( data.replace( rvalidescape, "@" ) + .replace( rvalidtokens, "]" ) + .replace( rvalidbraces, "")) ) { + + return ( new Function( "return " + data ) )(); + } + } + } + + jQuery.error( "Invalid JSON: " + data ); + }, + + // Cross-browser xml parsing + parseXML: function( data ) { + var xml, tmp; + if ( !data || typeof data !== "string" ) { + return null; + } + try { + if ( window.DOMParser ) { // Standard + tmp = new DOMParser(); + xml = tmp.parseFromString( data , "text/xml" ); + } else { // IE + xml = new ActiveXObject( "Microsoft.XMLDOM" ); + xml.async = "false"; + xml.loadXML( data ); + } + } catch( e ) { + xml = undefined; + } + if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; + }, + + noop: function() {}, + + // Evaluates a script in a global context + // Workarounds based on findings by Jim Driscoll + // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context + globalEval: function( data ) { + if ( data && jQuery.trim( data ) ) { + // We use execScript on Internet Explorer + // We use an anonymous function so that context is window + // rather than jQuery in Firefox + ( window.execScript || function( data ) { + window[ "eval" ].call( window, data ); + } )( data ); + } + }, + + // Convert dashed to camelCase; used by the css and data modules + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + }, + + // args is for internal usage only + each: function( obj, callback, args ) { + var value, + i = 0, + length = obj.length, + isArray = isArraylike( obj ); + + if ( args ) { + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback.apply( obj[ i ], args ); + + if ( value === false ) { + break; + } + } + } else { + for ( i in obj ) { + value = callback.apply( obj[ i ], args ); + + if ( value === false ) { + break; + } + } + } + + // A special, fast, case for the most common use of each + } else { + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback.call( obj[ i ], i, obj[ i ] ); + + if ( value === false ) { + break; + } + } + } else { + for ( i in obj ) { + value = callback.call( obj[ i ], i, obj[ i ] ); + + if ( value === false ) { + break; + } + } + } + } + + return obj; + }, + + // Use native String.trim function wherever possible + trim: core_trim && !core_trim.call("\uFEFF\xA0") ? + function( text ) { + return text == null ? + "" : + core_trim.call( text ); + } : + + // Otherwise use our own trimming functionality + function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArraylike( Object(arr) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + core_push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + var len; + + if ( arr ) { + if ( core_indexOf ) { + return core_indexOf.call( arr, elem, i ); + } + + len = arr.length; + i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; + + for ( ; i < len; i++ ) { + // Skip accessing in sparse arrays + if ( i in arr && arr[ i ] === elem ) { + return i; + } + } + } + + return -1; + }, + + merge: function( first, second ) { + var l = second.length, + i = first.length, + j = 0; + + if ( typeof l === "number" ) { + for ( ; j < l; j++ ) { + first[ i++ ] = second[ j ]; + } + } else { + while ( second[j] !== undefined ) { + first[ i++ ] = second[ j++ ]; + } + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, inv ) { + var retVal, + ret = [], + i = 0, + length = elems.length; + inv = !!inv; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + retVal = !!callback( elems[ i ], i ); + if ( inv !== retVal ) { + ret.push( elems[ i ] ); + } + } + + return ret; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var value, + i = 0, + length = elems.length, + isArray = isArraylike( elems ), + ret = []; + + // Go through the array, translating each of the items to their + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + } + + // Flatten any nested arrays + return core_concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var args, proxy, tmp; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = core_slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( core_slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + // Multifunctional method to get and set values of a collection + // The value/s can optionally be executed if it's a function + access: function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + length = elems.length, + bulk = key == null; + + // Sets many values + if ( jQuery.type( key ) === "object" ) { + chainable = true; + for ( i in key ) { + jQuery.access( elems, fn, i, key[i], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !jQuery.isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < length; i++ ) { + fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) ); + } + } + } + + return chainable ? + elems : + + // Gets + bulk ? + fn.call( elems ) : + length ? fn( elems[0], key ) : emptyGet; + }, + + now: function() { + return ( new Date() ).getTime(); + } +}); + +jQuery.ready.promise = function( obj ) { + if ( !readyList ) { + + readyList = jQuery.Deferred(); + + // Catch cases where $(document).ready() is called after the browser event has already occurred. + // we once tried to use readyState "interactive" here, but it caused issues like the one + // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15 + if ( document.readyState === "complete" ) { + // Handle it asynchronously to allow scripts the opportunity to delay ready + setTimeout( jQuery.ready ); + + // Standards-based browsers support DOMContentLoaded + } else if ( document.addEventListener ) { + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed, false ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed, false ); + + // If IE event model is used + } else { + // Ensure firing before onload, maybe late but safe also for iframes + document.attachEvent( "onreadystatechange", completed ); + + // A fallback to window.onload, that will always work + window.attachEvent( "onload", completed ); + + // If IE and not a frame + // continually check to see if the document is ready + var top = false; + + try { + top = window.frameElement == null && document.documentElement; + } catch(e) {} + + if ( top && top.doScroll ) { + (function doScrollCheck() { + if ( !jQuery.isReady ) { + + try { + // Use the trick by Diego Perini + // http://javascript.nwbox.com/IEContentLoaded/ + top.doScroll("left"); + } catch(e) { + return setTimeout( doScrollCheck, 50 ); + } + + // detach all dom ready events + detach(); + + // and execute any waiting functions + jQuery.ready(); + } + })(); + } + } + } + return readyList.promise( obj ); +}; + +// Populate the class2type map +jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +}); + +function isArraylike( obj ) { + var length = obj.length, + type = jQuery.type( obj ); + + if ( jQuery.isWindow( obj ) ) { + return false; + } + + if ( obj.nodeType === 1 && length ) { + return true; + } + + return type === "array" || type !== "function" && + ( length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj ); +} + +// All jQuery objects should point back to these +rootjQuery = jQuery(document); +// String to Object options format cache +var optionsCache = {}; + +// Convert String-formatted options into Object-formatted ones and store in cache +function createOptions( options ) { + var object = optionsCache[ options ] = {}; + jQuery.each( options.match( core_rnotwhite ) || [], function( _, flag ) { + object[ flag ] = true; + }); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + ( optionsCache[ options ] || createOptions( options ) ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + // Last fire value (for non-forgettable lists) + memory, + // Flag to know if list was already fired + fired, + // End of the loop when firing + firingLength, + // Index of currently firing callback (modified by remove if needed) + firingIndex, + // First callback to fire (used internally by add and fireWith) + firingStart, + // Actual callback list + list = [], + // Stack of fire calls for repeatable lists + stack = !options.once && [], + // Fire callbacks + fire = function( data ) { + memory = options.memory && data; + fired = true; + firingIndex = firingStart || 0; + firingStart = 0; + firingLength = list.length; + firing = true; + for ( ; list && firingIndex < firingLength; firingIndex++ ) { + if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) { + memory = false; // To prevent further calls using add + break; + } + } + firing = false; + if ( list ) { + if ( stack ) { + if ( stack.length ) { + fire( stack.shift() ); + } + } else if ( memory ) { + list = []; + } else { + self.disable(); + } + } + }, + // Actual Callbacks object + self = { + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + // First, we save the current length + var start = list.length; + (function add( args ) { + jQuery.each( args, function( _, arg ) { + var type = jQuery.type( arg ); + if ( type === "function" ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && type !== "string" ) { + // Inspect recursively + add( arg ); + } + }); + })( arguments ); + // Do we need to add the callbacks to the + // current firing batch? + if ( firing ) { + firingLength = list.length; + // With memory, if we're not firing then + // we should call right away + } else if ( memory ) { + firingStart = start; + fire( memory ); + } + } + return this; + }, + // Remove a callback from the list + remove: function() { + if ( list ) { + jQuery.each( arguments, function( _, arg ) { + var index; + while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + // Handle firing indexes + if ( firing ) { + if ( index <= firingLength ) { + firingLength--; + } + if ( index <= firingIndex ) { + firingIndex--; + } + } + } + }); + } + return this; + }, + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length ); + }, + // Remove all callbacks from the list + empty: function() { + list = []; + return this; + }, + // Have the list do nothing anymore + disable: function() { + list = stack = memory = undefined; + return this; + }, + // Is it disabled? + disabled: function() { + return !list; + }, + // Lock the list in its current state + lock: function() { + stack = undefined; + if ( !memory ) { + self.disable(); + } + return this; + }, + // Is it locked? + locked: function() { + return !stack; + }, + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + if ( list && ( !fired || stack ) ) { + if ( firing ) { + stack.push( args ); + } else { + fire( args ); + } + } + return this; + }, + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; +jQuery.extend({ + + Deferred: function( func ) { + var tuples = [ + // action, add listener, listener list, final state + [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ], + [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ], + [ "notify", "progress", jQuery.Callbacks("memory") ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + then: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + return jQuery.Deferred(function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + var action = tuple[ 0 ], + fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; + // deferred[ done | fail | progress ] for forwarding actions to newDefer + deferred[ tuple[1] ](function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise() + .done( newDefer.resolve ) + .fail( newDefer.reject ) + .progress( newDefer.notify ); + } else { + newDefer[ action + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments ); + } + }); + }); + fns = null; + }).promise(); + }, + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Keep pipe for back-compat + promise.pipe = promise.then; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 3 ]; + + // promise[ done | fail | progress ] = list.add + promise[ tuple[1] ] = list.add; + + // Handle state + if ( stateString ) { + list.add(function() { + // state = [ resolved | rejected ] + state = stateString; + + // [ reject_list | resolve_list ].disable; progress_list.lock + }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); + } + + // deferred[ resolve | reject | notify ] + deferred[ tuple[0] ] = function() { + deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments ); + return this; + }; + deferred[ tuple[0] + "With" ] = list.fireWith; + }); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( subordinate /* , ..., subordinateN */ ) { + var i = 0, + resolveValues = core_slice.call( arguments ), + length = resolveValues.length, + + // the count of uncompleted subordinates + remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, + + // the master Deferred. If resolveValues consist of only a single Deferred, just use that. + deferred = remaining === 1 ? subordinate : jQuery.Deferred(), + + // Update function for both resolve and progress values + updateFunc = function( i, contexts, values ) { + return function( value ) { + contexts[ i ] = this; + values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value; + if( values === progressValues ) { + deferred.notifyWith( contexts, values ); + } else if ( !( --remaining ) ) { + deferred.resolveWith( contexts, values ); + } + }; + }, + + progressValues, progressContexts, resolveContexts; + + // add listeners to Deferred subordinates; treat others as resolved + if ( length > 1 ) { + progressValues = new Array( length ); + progressContexts = new Array( length ); + resolveContexts = new Array( length ); + for ( ; i < length; i++ ) { + if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { + resolveValues[ i ].promise() + .done( updateFunc( i, resolveContexts, resolveValues ) ) + .fail( deferred.reject ) + .progress( updateFunc( i, progressContexts, progressValues ) ); + } else { + --remaining; + } + } + } + + // if we're not waiting on anything, resolve the master + if ( !remaining ) { + deferred.resolveWith( resolveContexts, resolveValues ); + } + + return deferred.promise(); + } +}); +jQuery.support = (function() { + + var support, all, a, + input, select, fragment, + opt, eventName, isSupported, i, + div = document.createElement("div"); + + // Setup + div.setAttribute( "className", "t" ); + div.innerHTML = "
        a"; + + // Support tests won't run in some limited or non-browser environments + all = div.getElementsByTagName("*"); + a = div.getElementsByTagName("a")[ 0 ]; + if ( !all || !a || !all.length ) { + return {}; + } + + // First batch of tests + select = document.createElement("select"); + opt = select.appendChild( document.createElement("option") ); + input = div.getElementsByTagName("input")[ 0 ]; + + a.style.cssText = "top:1px;float:left;opacity:.5"; + support = { + // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) + getSetAttribute: div.className !== "t", + + // IE strips leading whitespace when .innerHTML is used + leadingWhitespace: div.firstChild.nodeType === 3, + + // Make sure that tbody elements aren't automatically inserted + // IE will insert them into empty tables + tbody: !div.getElementsByTagName("tbody").length, + + // Make sure that link elements get serialized correctly by innerHTML + // This requires a wrapper element in IE + htmlSerialize: !!div.getElementsByTagName("link").length, + + // Get the style information from getAttribute + // (IE uses .cssText instead) + style: /top/.test( a.getAttribute("style") ), + + // Make sure that URLs aren't manipulated + // (IE normalizes it by default) + hrefNormalized: a.getAttribute("href") === "/a", + + // Make sure that element opacity exists + // (IE uses filter instead) + // Use a regex to work around a WebKit issue. See #5145 + opacity: /^0.5/.test( a.style.opacity ), + + // Verify style float existence + // (IE uses styleFloat instead of cssFloat) + cssFloat: !!a.style.cssFloat, + + // Check the default checkbox/radio value ("" on WebKit; "on" elsewhere) + checkOn: !!input.value, + + // Make sure that a selected-by-default option has a working selected property. + // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) + optSelected: opt.selected, + + // Tests for enctype support on a form (#6743) + enctype: !!document.createElement("form").enctype, + + // Makes sure cloning an html5 element does not cause problems + // Where outerHTML is undefined, this still works + html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav>", + + // jQuery.support.boxModel DEPRECATED in 1.8 since we don't support Quirks Mode + boxModel: document.compatMode === "CSS1Compat", + + // Will be defined later + deleteExpando: true, + noCloneEvent: true, + inlineBlockNeedsLayout: false, + shrinkWrapBlocks: false, + reliableMarginRight: true, + boxSizingReliable: true, + pixelPosition: false + }; + + // Make sure checked status is properly cloned + input.checked = true; + support.noCloneChecked = input.cloneNode( true ).checked; + + // Make sure that the options inside disabled selects aren't marked as disabled + // (WebKit marks them as disabled) + select.disabled = true; + support.optDisabled = !opt.disabled; + + // Support: IE<9 + try { + delete div.test; + } catch( e ) { + support.deleteExpando = false; + } + + // Check if we can trust getAttribute("value") + input = document.createElement("input"); + input.setAttribute( "value", "" ); + support.input = input.getAttribute( "value" ) === ""; + + // Check if an input maintains its value after becoming a radio + input.value = "t"; + input.setAttribute( "type", "radio" ); + support.radioValue = input.value === "t"; + + // #11217 - WebKit loses check when the name is after the checked attribute + input.setAttribute( "checked", "t" ); + input.setAttribute( "name", "t" ); + + fragment = document.createDocumentFragment(); + fragment.appendChild( input ); + + // Check if a disconnected checkbox will retain its checked + // value of true after appended to the DOM (IE6/7) + support.appendChecked = input.checked; + + // WebKit doesn't clone checked state correctly in fragments + support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE<9 + // Opera does not clone events (and typeof div.attachEvent === undefined). + // IE9-10 clones events bound via attachEvent, but they don't trigger with .click() + if ( div.attachEvent ) { + div.attachEvent( "onclick", function() { + support.noCloneEvent = false; + }); + + div.cloneNode( true ).click(); + } + + // Support: IE<9 (lack submit/change bubble), Firefox 17+ (lack focusin event) + // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP), test/csp.php + for ( i in { submit: true, change: true, focusin: true }) { + div.setAttribute( eventName = "on" + i, "t" ); + + support[ i + "Bubbles" ] = eventName in window || div.attributes[ eventName ].expando === false; + } + + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + // Run tests that need a body at doc ready + jQuery(function() { + var container, marginDiv, tds, + divReset = "padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;", + body = document.getElementsByTagName("body")[0]; + + if ( !body ) { + // Return for frameset docs that don't have a body + return; + } + + container = document.createElement("div"); + container.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px"; + + body.appendChild( container ).appendChild( div ); + + // Support: IE8 + // Check if table cells still have offsetWidth/Height when they are set + // to display:none and there are still other visible table cells in a + // table row; if so, offsetWidth/Height are not reliable for use when + // determining if an element has been hidden directly using + // display:none (it is still safe to use offsets if a parent element is + // hidden; don safety goggles and see bug #4512 for more information). + div.innerHTML = "
        t
        "; + tds = div.getElementsByTagName("td"); + tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none"; + isSupported = ( tds[ 0 ].offsetHeight === 0 ); + + tds[ 0 ].style.display = ""; + tds[ 1 ].style.display = "none"; + + // Support: IE8 + // Check if empty table cells still have offsetWidth/Height + support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 ); + + // Check box-sizing and margin behavior + div.innerHTML = ""; + div.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%;"; + support.boxSizing = ( div.offsetWidth === 4 ); + support.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== 1 ); + + // Use window.getComputedStyle because jsdom on node.js will break without it. + if ( window.getComputedStyle ) { + support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%"; + support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px"; + + // Check if div with explicit width and no margin-right incorrectly + // gets computed margin-right based on width of container. (#3333) + // Fails in WebKit before Feb 2011 nightlies + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + marginDiv = div.appendChild( document.createElement("div") ); + marginDiv.style.cssText = div.style.cssText = divReset; + marginDiv.style.marginRight = marginDiv.style.width = "0"; + div.style.width = "1px"; + + support.reliableMarginRight = + !parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight ); + } + + if ( typeof div.style.zoom !== core_strundefined ) { + // Support: IE<8 + // Check if natively block-level elements act like inline-block + // elements when setting their display to 'inline' and giving + // them layout + div.innerHTML = ""; + div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1"; + support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 ); + + // Support: IE6 + // Check if elements with layout shrink-wrap their children + div.style.display = "block"; + div.innerHTML = "
        "; + div.firstChild.style.width = "5px"; + support.shrinkWrapBlocks = ( div.offsetWidth !== 3 ); + + if ( support.inlineBlockNeedsLayout ) { + // Prevent IE 6 from affecting layout for positioned elements #11048 + // Prevent IE from shrinking the body in IE 7 mode #12869 + // Support: IE<8 + body.style.zoom = 1; + } + } + + body.removeChild( container ); + + // Null elements to avoid leaks in IE + container = div = tds = marginDiv = null; + }); + + // Null elements to avoid leaks in IE + all = select = fragment = opt = a = input = null; + + return support; +})(); + +var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/, + rmultiDash = /([A-Z])/g; + +function internalData( elem, name, data, pvt /* Internal Use Only */ ){ + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var thisCache, ret, + internalKey = jQuery.expando, + getByName = typeof name === "string", + + // We have to handle DOM nodes and JS objects differently because IE6-7 + // can't GC object references properly across the DOM-JS boundary + isNode = elem.nodeType, + + // Only DOM nodes need the global jQuery cache; JS object data is + // attached directly to the object so GC can occur automatically + cache = isNode ? jQuery.cache : elem, + + // Only defining an ID for JS objects if its cache already exists allows + // the code to shortcut on the same path as a DOM node with no cache + id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey; + + // Avoid doing any more work than we need to when trying to get data on an + // object that has no data at all + if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && getByName && data === undefined ) { + return; + } + + if ( !id ) { + // Only DOM nodes need a new unique ID for each element since their data + // ends up in the global cache + if ( isNode ) { + elem[ internalKey ] = id = core_deletedIds.pop() || jQuery.guid++; + } else { + id = internalKey; + } + } + + if ( !cache[ id ] ) { + cache[ id ] = {}; + + // Avoids exposing jQuery metadata on plain JS objects when the object + // is serialized using JSON.stringify + if ( !isNode ) { + cache[ id ].toJSON = jQuery.noop; + } + } + + // An object can be passed to jQuery.data instead of a key/value pair; this gets + // shallow copied over onto the existing cache + if ( typeof name === "object" || typeof name === "function" ) { + if ( pvt ) { + cache[ id ] = jQuery.extend( cache[ id ], name ); + } else { + cache[ id ].data = jQuery.extend( cache[ id ].data, name ); + } + } + + thisCache = cache[ id ]; + + // jQuery data() is stored in a separate object inside the object's internal data + // cache in order to avoid key collisions between internal data and user-defined + // data. + if ( !pvt ) { + if ( !thisCache.data ) { + thisCache.data = {}; + } + + thisCache = thisCache.data; + } + + if ( data !== undefined ) { + thisCache[ jQuery.camelCase( name ) ] = data; + } + + // Check for both converted-to-camel and non-converted data property names + // If a data property was specified + if ( getByName ) { + + // First Try to find as-is property data + ret = thisCache[ name ]; + + // Test for null|undefined property data + if ( ret == null ) { + + // Try to find the camelCased property + ret = thisCache[ jQuery.camelCase( name ) ]; + } + } else { + ret = thisCache; + } + + return ret; +} + +function internalRemoveData( elem, name, pvt ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var i, l, thisCache, + isNode = elem.nodeType, + + // See jQuery.data for more information + cache = isNode ? jQuery.cache : elem, + id = isNode ? elem[ jQuery.expando ] : jQuery.expando; + + // If there is already no cache entry for this object, there is no + // purpose in continuing + if ( !cache[ id ] ) { + return; + } + + if ( name ) { + + thisCache = pvt ? cache[ id ] : cache[ id ].data; + + if ( thisCache ) { + + // Support array or space separated string names for data keys + if ( !jQuery.isArray( name ) ) { + + // try the string as a key before any manipulation + if ( name in thisCache ) { + name = [ name ]; + } else { + + // split the camel cased version by spaces unless a key with the spaces exists + name = jQuery.camelCase( name ); + if ( name in thisCache ) { + name = [ name ]; + } else { + name = name.split(" "); + } + } + } else { + // If "name" is an array of keys... + // When data is initially created, via ("key", "val") signature, + // keys will be converted to camelCase. + // Since there is no way to tell _how_ a key was added, remove + // both plain key and camelCase key. #12786 + // This will only penalize the array argument path. + name = name.concat( jQuery.map( name, jQuery.camelCase ) ); + } + + for ( i = 0, l = name.length; i < l; i++ ) { + delete thisCache[ name[i] ]; + } + + // If there is no data left in the cache, we want to continue + // and let the cache object itself get destroyed + if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) { + return; + } + } + } + + // See jQuery.data for more information + if ( !pvt ) { + delete cache[ id ].data; + + // Don't destroy the parent cache unless the internal data object + // had been the only thing left in it + if ( !isEmptyDataObject( cache[ id ] ) ) { + return; + } + } + + // Destroy the cache + if ( isNode ) { + jQuery.cleanData( [ elem ], true ); + + // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080) + } else if ( jQuery.support.deleteExpando || cache != cache.window ) { + delete cache[ id ]; + + // When all else fails, null + } else { + cache[ id ] = null; + } +} + +jQuery.extend({ + cache: {}, + + // Unique for each copy of jQuery on the page + // Non-digits removed to match rinlinejQuery + expando: "jQuery" + ( core_version + Math.random() ).replace( /\D/g, "" ), + + // The following elements throw uncatchable exceptions if you + // attempt to add expando properties to them. + noData: { + "embed": true, + // Ban all objects except for Flash (which handle expandos) + "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", + "applet": true + }, + + hasData: function( elem ) { + elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; + return !!elem && !isEmptyDataObject( elem ); + }, + + data: function( elem, name, data ) { + return internalData( elem, name, data ); + }, + + removeData: function( elem, name ) { + return internalRemoveData( elem, name ); + }, + + // For internal use only. + _data: function( elem, name, data ) { + return internalData( elem, name, data, true ); + }, + + _removeData: function( elem, name ) { + return internalRemoveData( elem, name, true ); + }, + + // A method for determining if a DOM node can handle the data expando + acceptData: function( elem ) { + // Do not set data on non-element because it will not be cleared (#8335). + if ( elem.nodeType && elem.nodeType !== 1 && elem.nodeType !== 9 ) { + return false; + } + + var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ]; + + // nodes accept data unless otherwise specified; rejection can be conditional + return !noData || noData !== true && elem.getAttribute("classid") === noData; + } +}); + +jQuery.fn.extend({ + data: function( key, value ) { + var attrs, name, + elem = this[0], + i = 0, + data = null; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = jQuery.data( elem ); + + if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { + attrs = elem.attributes; + for ( ; i < attrs.length; i++ ) { + name = attrs[i].name; + + if ( !name.indexOf( "data-" ) ) { + name = jQuery.camelCase( name.slice(5) ); + + dataAttr( elem, name, data[ name ] ); + } + } + jQuery._data( elem, "parsedAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each(function() { + jQuery.data( this, key ); + }); + } + + return jQuery.access( this, function( value ) { + + if ( value === undefined ) { + // Try to fetch any internally stored data first + return elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : null; + } + + this.each(function() { + jQuery.data( this, key, value ); + }); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each(function() { + jQuery.removeData( this, key ); + }); + } +}); + +function dataAttr( elem, key, data ) { + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + + var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); + + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + // Only convert to a number if it doesn't change the string + +data + "" === data ? +data : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch( e ) {} + + // Make sure we set the data so it isn't changed later + jQuery.data( elem, key, data ); + + } else { + data = undefined; + } + } + + return data; +} + +// checks a cache object for emptiness +function isEmptyDataObject( obj ) { + var name; + for ( name in obj ) { + + // if the public data object is empty, the private is still empty + if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) { + continue; + } + if ( name !== "toJSON" ) { + return false; + } + } + + return true; +} +jQuery.extend({ + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = jQuery._data( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || jQuery.isArray(data) ) { + queue = jQuery._data( elem, type, jQuery.makeArray(data) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + hooks.cur = fn; + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // not intended for public consumption - generates a queueHooks object, or returns the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return jQuery._data( elem, key ) || jQuery._data( elem, key, { + empty: jQuery.Callbacks("once memory").add(function() { + jQuery._removeData( elem, type + "queue" ); + jQuery._removeData( elem, key ); + }) + }); + } +}); + +jQuery.fn.extend({ + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[0], type ); + } + + return data === undefined ? + this : + this.each(function() { + var queue = jQuery.queue( this, type, data ); + + // ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[0] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + }); + }, + dequeue: function( type ) { + return this.each(function() { + jQuery.dequeue( this, type ); + }); + }, + // Based off of the plugin by Clint Helfers, with permission. + // http://blindsignals.com/index.php/2009/07/jquery-delay/ + delay: function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = setTimeout( next, time ); + hooks.stop = function() { + clearTimeout( timeout ); + }; + }); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while( i-- ) { + tmp = jQuery._data( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +}); +var nodeHook, boolHook, + rclass = /[\t\r\n]/g, + rreturn = /\r/g, + rfocusable = /^(?:input|select|textarea|button|object)$/i, + rclickable = /^(?:a|area)$/i, + rboolean = /^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i, + ruseDefault = /^(?:checked|selected)$/i, + getSetAttribute = jQuery.support.getSetAttribute, + getSetInput = jQuery.support.input; + +jQuery.fn.extend({ + attr: function( name, value ) { + return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each(function() { + jQuery.removeAttr( this, name ); + }); + }, + + prop: function( name, value ) { + return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + name = jQuery.propFix[ name ] || name; + return this.each(function() { + // try/catch handles cases where IE balks (such as removing a property on window) + try { + this[ name ] = undefined; + delete this[ name ]; + } catch( e ) {} + }); + }, + + addClass: function( value ) { + var classes, elem, cur, clazz, j, + i = 0, + len = this.length, + proceed = typeof value === "string" && value; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).addClass( value.call( this, j, this.className ) ); + }); + } + + if ( proceed ) { + // The disjunction here is for better compressibility (see removeClass) + classes = ( value || "" ).match( core_rnotwhite ) || []; + + for ( ; i < len; i++ ) { + elem = this[ i ]; + cur = elem.nodeType === 1 && ( elem.className ? + ( " " + elem.className + " " ).replace( rclass, " " ) : + " " + ); + + if ( cur ) { + j = 0; + while ( (clazz = classes[j++]) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + elem.className = jQuery.trim( cur ); + + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, clazz, j, + i = 0, + len = this.length, + proceed = arguments.length === 0 || typeof value === "string" && value; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).removeClass( value.call( this, j, this.className ) ); + }); + } + if ( proceed ) { + classes = ( value || "" ).match( core_rnotwhite ) || []; + + for ( ; i < len; i++ ) { + elem = this[ i ]; + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( elem.className ? + ( " " + elem.className + " " ).replace( rclass, " " ) : + "" + ); + + if ( cur ) { + j = 0; + while ( (clazz = classes[j++]) ) { + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) >= 0 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + elem.className = value ? jQuery.trim( cur ) : ""; + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isBool = typeof stateVal === "boolean"; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( i ) { + jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal ); + }); + } + + return this.each(function() { + if ( type === "string" ) { + // toggle individual class names + var className, + i = 0, + self = jQuery( this ), + state = stateVal, + classNames = value.match( core_rnotwhite ) || []; + + while ( (className = classNames[ i++ ]) ) { + // check each className given, space separated list + state = isBool ? state : !self.hasClass( className ); + self[ state ? "addClass" : "removeClass" ]( className ); + } + + // Toggle whole class name + } else if ( type === core_strundefined || type === "boolean" ) { + if ( this.className ) { + // store className if set + jQuery._data( this, "__className__", this.className ); + } + + // If the element has a class name or if we're passed "false", + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || ""; + } + }); + }, + + hasClass: function( selector ) { + var className = " " + selector + " ", + i = 0, + l = this.length; + for ( ; i < l; i++ ) { + if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) { + return true; + } + } + + return false; + }, + + val: function( value ) { + var ret, hooks, isFunction, + elem = this[0]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { + return ret; + } + + ret = elem.value; + + return typeof ret === "string" ? + // handle most common string cases + ret.replace(rreturn, "") : + // handle cases where value is null/undef or number + ret == null ? "" : ret; + } + + return; + } + + isFunction = jQuery.isFunction( value ); + + return this.each(function( i ) { + var val, + self = jQuery(this); + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call( this, i, self.val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + } else if ( typeof val === "number" ) { + val += ""; + } else if ( jQuery.isArray( val ) ) { + val = jQuery.map(val, function ( value ) { + return value == null ? "" : value + ""; + }); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + }); + } +}); + +jQuery.extend({ + valHooks: { + option: { + get: function( elem ) { + // attributes.value is undefined in Blackberry 4.7 but + // uses .value. See #6932 + var val = elem.attributes.value; + return !val || val.specified ? elem.value : elem.text; + } + }, + select: { + get: function( elem ) { + var value, option, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one" || index < 0, + values = one ? null : [], + max = one ? index + 1 : options.length, + i = index < 0 ? + max : + one ? index : 0; + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // oldIE doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + // Don't return options that are disabled or in a disabled optgroup + ( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) && + ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var values = jQuery.makeArray( value ); + + jQuery(elem).find("option").each(function() { + this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; + }); + + if ( !values.length ) { + elem.selectedIndex = -1; + } + return values; + } + } + }, + + attr: function( elem, name, value ) { + var hooks, notxml, ret, + nType = elem.nodeType; + + // don't get/set attributes on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === core_strundefined ) { + return jQuery.prop( elem, name, value ); + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + // All attributes are lowercase + // Grab necessary hook if one is defined + if ( notxml ) { + name = name.toLowerCase(); + hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook ); + } + + if ( value !== undefined ) { + + if ( value === null ) { + jQuery.removeAttr( elem, name ); + + } else if ( hooks && notxml && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + elem.setAttribute( name, value + "" ); + return value; + } + + } else if ( hooks && notxml && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + + // In IE9+, Flash objects don't have .getAttribute (#12945) + // Support: IE9+ + if ( typeof elem.getAttribute !== core_strundefined ) { + ret = elem.getAttribute( name ); + } + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? + undefined : + ret; + } + }, + + removeAttr: function( elem, value ) { + var name, propName, + i = 0, + attrNames = value && value.match( core_rnotwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( (name = attrNames[i++]) ) { + propName = jQuery.propFix[ name ] || name; + + // Boolean attributes get special treatment (#10870) + if ( rboolean.test( name ) ) { + // Set corresponding property to false for boolean attributes + // Also clear defaultChecked/defaultSelected (if appropriate) for IE<8 + if ( !getSetAttribute && ruseDefault.test( name ) ) { + elem[ jQuery.camelCase( "default-" + name ) ] = + elem[ propName ] = false; + } else { + elem[ propName ] = false; + } + + // See #9699 for explanation of this approach (setting first, then removal) + } else { + jQuery.attr( elem, name, "" ); + } + + elem.removeAttribute( getSetAttribute ? name : propName ); + } + } + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) { + // Setting the type on a radio button after the value resets the value in IE6-9 + // Reset value to default in case type is set after value during creation + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + propFix: { + tabindex: "tabIndex", + readonly: "readOnly", + "for": "htmlFor", + "class": "className", + maxlength: "maxLength", + cellspacing: "cellSpacing", + cellpadding: "cellPadding", + rowspan: "rowSpan", + colspan: "colSpan", + usemap: "useMap", + frameborder: "frameBorder", + contenteditable: "contentEditable" + }, + + prop: function( elem, name, value ) { + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set properties on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + if ( notxml ) { + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + return ( elem[ name ] = value ); + } + + } else { + if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + return elem[ name ]; + } + } + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set + // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + var attributeNode = elem.getAttributeNode("tabindex"); + + return attributeNode && attributeNode.specified ? + parseInt( attributeNode.value, 10 ) : + rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? + 0 : + undefined; + } + } + } +}); + +// Hook for boolean attributes +boolHook = { + get: function( elem, name ) { + var + // Use .prop to determine if this attribute is understood as boolean + prop = jQuery.prop( elem, name ), + + // Fetch it accordingly + attr = typeof prop === "boolean" && elem.getAttribute( name ), + detail = typeof prop === "boolean" ? + + getSetInput && getSetAttribute ? + attr != null : + // oldIE fabricates an empty string for missing boolean attributes + // and conflates checked/selected into attroperties + ruseDefault.test( name ) ? + elem[ jQuery.camelCase( "default-" + name ) ] : + !!attr : + + // fetch an attribute node for properties not recognized as boolean + elem.getAttributeNode( name ); + + return detail && detail.value !== false ? + name.toLowerCase() : + undefined; + }, + set: function( elem, value, name ) { + if ( value === false ) { + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) { + // IE<8 needs the *property* name + elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name ); + + // Use defaultChecked and defaultSelected for oldIE + } else { + elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true; + } + + return name; + } +}; + +// fix oldIE value attroperty +if ( !getSetInput || !getSetAttribute ) { + jQuery.attrHooks.value = { + get: function( elem, name ) { + var ret = elem.getAttributeNode( name ); + return jQuery.nodeName( elem, "input" ) ? + + // Ignore the value *property* by using defaultValue + elem.defaultValue : + + ret && ret.specified ? ret.value : undefined; + }, + set: function( elem, value, name ) { + if ( jQuery.nodeName( elem, "input" ) ) { + // Does not return so that setAttribute is also used + elem.defaultValue = value; + } else { + // Use nodeHook if defined (#1954); otherwise setAttribute is fine + return nodeHook && nodeHook.set( elem, value, name ); + } + } + }; +} + +// IE6/7 do not support getting/setting some attributes with get/setAttribute +if ( !getSetAttribute ) { + + // Use this for any attribute in IE6/7 + // This fixes almost every IE6/7 issue + nodeHook = jQuery.valHooks.button = { + get: function( elem, name ) { + var ret = elem.getAttributeNode( name ); + return ret && ( name === "id" || name === "name" || name === "coords" ? ret.value !== "" : ret.specified ) ? + ret.value : + undefined; + }, + set: function( elem, value, name ) { + // Set the existing or create a new attribute node + var ret = elem.getAttributeNode( name ); + if ( !ret ) { + elem.setAttributeNode( + (ret = elem.ownerDocument.createAttribute( name )) + ); + } + + ret.value = value += ""; + + // Break association with cloned elements by also using setAttribute (#9646) + return name === "value" || value === elem.getAttribute( name ) ? + value : + undefined; + } + }; + + // Set contenteditable to false on removals(#10429) + // Setting to empty string throws an error as an invalid value + jQuery.attrHooks.contenteditable = { + get: nodeHook.get, + set: function( elem, value, name ) { + nodeHook.set( elem, value === "" ? false : value, name ); + } + }; + + // Set width and height to auto instead of 0 on empty string( Bug #8150 ) + // This is for removals + jQuery.each([ "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + set: function( elem, value ) { + if ( value === "" ) { + elem.setAttribute( name, "auto" ); + return value; + } + } + }); + }); +} + + +// Some attributes require a special call on IE +// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !jQuery.support.hrefNormalized ) { + jQuery.each([ "href", "src", "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + get: function( elem ) { + var ret = elem.getAttribute( name, 2 ); + return ret == null ? undefined : ret; + } + }); + }); + + // href/src property should get the full normalized URL (#10299/#12915) + jQuery.each([ "href", "src" ], function( i, name ) { + jQuery.propHooks[ name ] = { + get: function( elem ) { + return elem.getAttribute( name, 4 ); + } + }; + }); +} + +if ( !jQuery.support.style ) { + jQuery.attrHooks.style = { + get: function( elem ) { + // Return undefined in the case of empty string + // Note: IE uppercases css property names, but if we were to .toLowerCase() + // .cssText, that would destroy case senstitivity in URL's, like in "background" + return elem.style.cssText || undefined; + }, + set: function( elem, value ) { + return ( elem.style.cssText = value + "" ); + } + }; +} + +// Safari mis-reports the default selected property of an option +// Accessing the parent's selectedIndex property fixes it +if ( !jQuery.support.optSelected ) { + jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, { + get: function( elem ) { + var parent = elem.parentNode; + + if ( parent ) { + parent.selectedIndex; + + // Make sure that it also works with optgroups, see #5701 + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + return null; + } + }); +} + +// IE6/7 call enctype encoding +if ( !jQuery.support.enctype ) { + jQuery.propFix.enctype = "encoding"; +} + +// Radios and checkboxes getter/setter +if ( !jQuery.support.checkOn ) { + jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + get: function( elem ) { + // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified + return elem.getAttribute("value") === null ? "on" : elem.value; + } + }; + }); +} +jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], { + set: function( elem, value ) { + if ( jQuery.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 ); + } + } + }); +}); +var rformElems = /^(?:input|select|textarea)$/i, + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|contextmenu)|click/, + rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)$/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + var tmp, events, t, handleObjIn, + special, eventHandle, handleObj, + handlers, type, namespaces, origType, + elemData = jQuery._data( elem ); + + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !(events = elemData.events) ) { + events = elemData.events = {}; + } + if ( !(eventHandle = elemData.handle) ) { + eventHandle = elemData.handle = function( e ) { + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== core_strundefined && (!e || jQuery.event.triggered !== e.type) ? + jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : + undefined; + }; + // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events + eventHandle.elem = elem; + } + + // Handle multiple events separated by a space + // jQuery(...).bind("mouseover mouseout", fn); + types = ( types || "" ).match( core_rnotwhite ) || [""]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[t] ) || []; + type = origType = tmp[1]; + namespaces = ( tmp[2] || "" ).split( "." ).sort(); + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend({ + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join(".") + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !(handlers = events[ type ]) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener/attachEvent if the special events handler returns false + if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + // Bind the global event handler to the element + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle, false ); + + } else if ( elem.attachEvent ) { + elem.attachEvent( "on" + type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + // Nullify elem to prevent memory leaks in IE + elem = null; + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + var j, handleObj, tmp, + origCount, t, events, + special, handlers, type, + namespaces, origType, + elemData = jQuery.hasData( elem ) && jQuery._data( elem ); + + if ( !elemData || !(events = elemData.events) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( core_rnotwhite ) || [""]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[t] ) || []; + type = origType = tmp[1]; + namespaces = ( tmp[2] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + delete elemData.handle; + + // removeData also checks for emptiness and clears the expando if empty + // so use it instead of delete + jQuery._removeData( elem, "events" ); + } + }, + + trigger: function( event, data, elem, onlyHandlers ) { + var handle, ontype, cur, + bubbleType, special, tmp, i, + eventPath = [ elem || document ], + type = core_hasOwn.call( event, "type" ) ? event.type : event, + namespaces = core_hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : []; + + cur = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf(".") >= 0 ) { + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split("."); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf(":") < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + event.isTrigger = true; + event.namespace = namespaces.join("."); + event.namespace_re = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === (elem.ownerDocument || document) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) { + + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) { + event.preventDefault(); + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) && + !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name name as the event. + // Can't use an .isFunction() check here because IE6/7 fails that test. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + try { + elem[ type ](); + } catch ( e ) { + // IE<9 dies on focus/blur to hidden element (#1486,#12518) + // only reproducible on winXP IE8 native, not IE9 in IE8 mode + } + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + dispatch: function( event ) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event ); + + var i, ret, handleObj, matched, j, + handlerQueue = [], + args = core_slice.call( arguments ), + handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[0] = event; + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) { + + // Triggered event must either 1) have no namespace, or + // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). + if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) + .apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( (event.result = ret) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var sel, handleObj, matches, i, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + // Black-hole SVG instance trees (#13180) + // Avoid non-left-click bubbling in Firefox (#3861) + if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) { + + for ( ; cur != this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) { + matches = []; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matches[ sel ] === undefined ) { + matches[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) >= 0 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matches[ sel ] ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push({ elem: cur, handlers: matches }); + } + } + } + } + + // Add the remaining (directly-bound) handlers + if ( delegateCount < handlers.length ) { + handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) }); + } + + return handlerQueue; + }, + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // Create a writable copy of the event object and normalize some properties + var i, prop, copy, + type = event.type, + originalEvent = event, + fixHook = this.fixHooks[ type ]; + + if ( !fixHook ) { + this.fixHooks[ type ] = fixHook = + rmouseEvent.test( type ) ? this.mouseHooks : + rkeyEvent.test( type ) ? this.keyHooks : + {}; + } + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + + event = new jQuery.Event( originalEvent ); + + i = copy.length; + while ( i-- ) { + prop = copy[ i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Support: IE<9 + // Fix target property (#1925) + if ( !event.target ) { + event.target = originalEvent.srcElement || document; + } + + // Support: Chrome 23+, Safari? + // Target should not be a text node (#504, #13143) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + // Support: IE<9 + // For mouse/key events, metaKey==false if it's undefined (#3368, #11328) + event.metaKey = !!event.metaKey; + + return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + 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( event, original ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), + filter: function( event, original ) { + var body, eventDoc, doc, + button = original.button, + fromElement = original.fromElement; + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && original.clientX != null ) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); + event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); + } + + // Add relatedTarget, if necessary + if ( !event.relatedTarget && fromElement ) { + event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, + + special: { + load: { + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + click: { + // For checkbox, fire native event so checked state will be right + trigger: function() { + if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) { + this.click(); + return false; + } + } + }, + focus: { + // Fire native event if possible so blur/focus sequence is correct + trigger: function() { + if ( this !== document.activeElement && this.focus ) { + try { + this.focus(); + return false; + } catch ( e ) { + // Support: IE<9 + // If we error on focus to hidden element (#1486, #12518), + // let .trigger() run the handlers + } + } + }, + delegateType: "focusin" + }, + blur: { + trigger: function() { + if ( this === document.activeElement && this.blur ) { + this.blur(); + return false; + } + }, + delegateType: "focusout" + }, + + beforeunload: { + postDispatch: function( event ) { + + // Even when returnValue equals to undefined Firefox will still show alert + if ( event.result !== undefined ) { + event.originalEvent.returnValue = event.result; + } + } + } + }, + + simulate: function( type, elem, event, bubble ) { + // Piggyback on a donor event to simulate a different one. + // Fake originalEvent to avoid donor's stopPropagation, but if the + // simulated event prevents default then we do the same on the donor. + var e = jQuery.extend( + new jQuery.Event(), + event, + { type: type, + isSimulated: true, + originalEvent: {} + } + ); + if ( bubble ) { + jQuery.event.trigger( e, null, elem ); + } else { + jQuery.event.dispatch.call( elem, e ); + } + if ( e.isDefaultPrevented() ) { + event.preventDefault(); + } + } +}; + +jQuery.removeEvent = document.removeEventListener ? + function( elem, type, handle ) { + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle, false ); + } + } : + function( elem, type, handle ) { + var name = "on" + type; + + if ( elem.detachEvent ) { + + // #8545, #7054, preventing memory leaks for custom events in IE6-8 + // detachEvent needed property on element, by name of that event, to properly expose it to GC + if ( typeof elem[ name ] === core_strundefined ) { + elem[ name ] = null; + } + + elem.detachEvent( name, handle ); + } + }; + +jQuery.Event = function( src, props ) { + // Allow instantiation without the 'new' keyword + if ( !(this instanceof jQuery.Event) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false || + src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + if ( !e ) { + return; + } + + // If preventDefault exists, run it on the original event + if ( e.preventDefault ) { + e.preventDefault(); + + // Support: IE + // Otherwise set the returnValue property of the original event to false + } else { + e.returnValue = false; + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + if ( !e ) { + return; + } + // If stopPropagation exists, run it on the original event + if ( e.stopPropagation ) { + e.stopPropagation(); + } + + // Support: IE + // Set the cancelBubble property of the original event to true + e.cancelBubble = true; + }, + stopImmediatePropagation: function() { + this.isImmediatePropagationStopped = returnTrue; + this.stopPropagation(); + } +}; + +// Create mouseenter/leave events using mouseover/out and event-time checks +jQuery.each({ + mouseenter: "mouseover", + mouseleave: "mouseout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mousenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || (related !== target && !jQuery.contains( target, related )) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +}); + +// IE submit delegation +if ( !jQuery.support.submitBubbles ) { + + jQuery.event.special.submit = { + setup: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Lazy-add a submit handler when a descendant form may potentially be submitted + jQuery.event.add( this, "click._submit keypress._submit", function( e ) { + // Node name check avoids a VML-related crash in IE (#9807) + var elem = e.target, + form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; + if ( form && !jQuery._data( form, "submitBubbles" ) ) { + jQuery.event.add( form, "submit._submit", function( event ) { + event._submit_bubble = true; + }); + jQuery._data( form, "submitBubbles", true ); + } + }); + // return undefined since we don't need an event listener + }, + + postDispatch: function( event ) { + // If form was submitted by the user, bubble the event up the tree + if ( event._submit_bubble ) { + delete event._submit_bubble; + if ( this.parentNode && !event.isTrigger ) { + jQuery.event.simulate( "submit", this.parentNode, event, true ); + } + } + }, + + teardown: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Remove delegated handlers; cleanData eventually reaps submit handlers attached above + jQuery.event.remove( this, "._submit" ); + } + }; +} + +// IE change delegation and checkbox/radio fix +if ( !jQuery.support.changeBubbles ) { + + jQuery.event.special.change = { + + setup: function() { + + if ( rformElems.test( this.nodeName ) ) { + // IE doesn't fire change on a check/radio until blur; trigger it on click + // after a propertychange. Eat the blur-change in special.change.handle. + // This still fires onchange a second time for check/radio after blur. + if ( this.type === "checkbox" || this.type === "radio" ) { + jQuery.event.add( this, "propertychange._change", function( event ) { + if ( event.originalEvent.propertyName === "checked" ) { + this._just_changed = true; + } + }); + jQuery.event.add( this, "click._change", function( event ) { + if ( this._just_changed && !event.isTrigger ) { + this._just_changed = false; + } + // Allow triggered, simulated change events (#11500) + jQuery.event.simulate( "change", this, event, true ); + }); + } + return false; + } + // Delegated event; lazy-add a change handler on descendant inputs + jQuery.event.add( this, "beforeactivate._change", function( e ) { + var elem = e.target; + + if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) { + jQuery.event.add( elem, "change._change", function( event ) { + if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { + jQuery.event.simulate( "change", this.parentNode, event, true ); + } + }); + jQuery._data( elem, "changeBubbles", true ); + } + }); + }, + + handle: function( event ) { + var elem = event.target; + + // Swallow native change events from checkbox/radio, we already triggered them above + if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { + return event.handleObj.handler.apply( this, arguments ); + } + }, + + teardown: function() { + jQuery.event.remove( this, "._change" ); + + return !rformElems.test( this.nodeName ); + } + }; +} + +// Create "bubbling" focus and blur events +if ( !jQuery.support.focusinBubbles ) { + jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler while someone wants focusin/focusout + var attaches = 0, + handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + if ( attaches++ === 0 ) { + document.addEventListener( orig, handler, true ); + } + }, + teardown: function() { + if ( --attaches === 0 ) { + document.removeEventListener( orig, handler, true ); + } + } + }; + }); +} + +jQuery.fn.extend({ + + on: function( types, selector, data, fn, /*INTERNAL*/ one ) { + var type, origFn; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + this.on( type, selector, data, types[ type ], one ); + } + return this; + } + + if ( data == null && fn == null ) { + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return this; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return this.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + }); + }, + one: function( types, selector, data, fn ) { + return this.on( types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each(function() { + jQuery.event.remove( this, types, fn, selector ); + }); + }, + + bind: function( types, data, fn ) { + return this.on( types, null, data, fn ); + }, + unbind: function( types, fn ) { + return this.off( types, null, fn ); + }, + + delegate: function( selector, types, data, fn ) { + return this.on( types, selector, data, fn ); + }, + undelegate: function( selector, types, fn ) { + // ( namespace ) or ( selector, types [, fn] ) + return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn ); + }, + + trigger: function( type, data ) { + return this.each(function() { + jQuery.event.trigger( type, data, this ); + }); + }, + triggerHandler: function( type, data ) { + var elem = this[0]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +}); +/*! + * Sizzle CSS Selector Engine + * Copyright 2012 jQuery Foundation and other contributors + * Released under the MIT license + * http://sizzlejs.com/ + */ +(function( window, undefined ) { + +var i, + cachedruns, + Expr, + getText, + isXML, + compile, + hasDuplicate, + outermostContext, + + // Local document vars + setDocument, + document, + docElem, + documentIsXML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + sortOrder, + + // Instance-specific data + expando = "sizzle" + -(new Date()), + preferredDoc = window.document, + support = {}, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + + // General-purpose constants + strundefined = typeof undefined, + MAX_NEGATIVE = 1 << 31, + + // Array methods + arr = [], + pop = arr.pop, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf if we can't use a native one + indexOf = arr.indexOf || function( elem ) { + var i = 0, + len = this.length; + for ( ; i < len; i++ ) { + if ( this[i] === elem ) { + return i; + } + } + return -1; + }, + + + // Regular expressions + + // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + // http://www.w3.org/TR/css3-syntax/#characters + characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", + + // Loosely modeled on CSS identifier characters + // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors + // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = characterEncoding.replace( "w", "w#" ), + + // Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors + operators = "([*^$|!~]?=)", + attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace + + "*(?:" + operators + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]", + + // Prefer arguments quoted, + // then not containing pseudos/brackets, + // then attribute selectors/non-parenthetical expressions, + // then anything else + // These preferences are here to reduce the number of selectors + // needing tokenize in the PSEUDO preFilter + pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([\\x20\\t\\r\\n\\f>+~])" + whitespace + "*" ), + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + characterEncoding + ")" ), + "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), + "NAME": new RegExp( "^\\[name=['\"]?(" + characterEncoding + ")['\"]?\\]" ), + "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rsibling = /[\x20\t\r\n\f]*[+~]/, + + rnative = /^[^{]+\{\s*\[native code/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rescape = /'|\\/g, + rattributeQuotes = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g, + + // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = /\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g, + funescape = function( _, escaped ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + return high !== high ? + escaped : + // BMP codepoint + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }; + +// Use a stripped-down slice if we can't use a native one +try { + slice.call( preferredDoc.documentElement.childNodes, 0 )[0].nodeType; +} catch ( e ) { + slice = function( i ) { + var elem, + results = []; + while ( (elem = this[i++]) ) { + results.push( elem ); + } + return results; + }; +} + +/** + * For feature detection + * @param {Function} fn The function to test for native support + */ +function isNative( fn ) { + return rnative.test( fn + "" ); +} + +/** + * Create key-value caches of limited size + * @returns {Function(string, Object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var cache, + keys = []; + + return (cache = function( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key += " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key ] = value); + }); +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created div and expects a boolean result + */ +function assert( fn ) { + var div = document.createElement("div"); + + try { + return fn( div ); + } catch (e) { + return false; + } finally { + // release memory in IE + div = null; + } +} + +function Sizzle( selector, context, results, seed ) { + var match, elem, m, nodeType, + // QSA vars + i, groups, old, nid, newContext, newSelector; + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + + context = context || document; + results = results || []; + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) { + return []; + } + + if ( !documentIsXML && !seed ) { + + // Shortcuts + if ( (match = rquickExpr.exec( selector )) ) { + // Speed-up: Sizzle("#ID") + if ( (m = match[1]) ) { + if ( nodeType === 9 ) { + elem = context.getElementById( m ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE, Opera, and Webkit return items + // by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + } else { + // Context is not a document + if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && + contains( context, elem ) && elem.id === m ) { + results.push( elem ); + return results; + } + } + + // Speed-up: Sizzle("TAG") + } else if ( match[2] ) { + push.apply( results, slice.call(context.getElementsByTagName( selector ), 0) ); + return results; + + // Speed-up: Sizzle(".CLASS") + } else if ( (m = match[3]) && support.getByClassName && context.getElementsByClassName ) { + push.apply( results, slice.call(context.getElementsByClassName( m ), 0) ); + return results; + } + } + + // QSA path + if ( support.qsa && !rbuggyQSA.test(selector) ) { + old = true; + nid = expando; + newContext = context; + newSelector = nodeType === 9 && selector; + + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra ID on the root + // and working up from there (Thanks to Andrew Dupont for the technique) + // IE 8 doesn't work on object elements + if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + groups = tokenize( selector ); + + if ( (old = context.getAttribute("id")) ) { + nid = old.replace( rescape, "\\$&" ); + } else { + context.setAttribute( "id", nid ); + } + nid = "[id='" + nid + "'] "; + + i = groups.length; + while ( i-- ) { + groups[i] = nid + toSelector( groups[i] ); + } + newContext = rsibling.test( selector ) && context.parentNode || context; + newSelector = groups.join(","); + } + + if ( newSelector ) { + try { + push.apply( results, slice.call( newContext.querySelectorAll( + newSelector + ), 0 ) ); + return results; + } catch(qsaError) { + } finally { + if ( !old ) { + context.removeAttribute("id"); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Detect xml + * @param {Element|Object} elem An element or a document + */ +isXML = Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var doc = node ? node.ownerDocument || node : preferredDoc; + + // If no document and documentElement is available, return + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Set our document + document = doc; + docElem = doc.documentElement; + + // Support tests + documentIsXML = isXML( doc ); + + // Check if getElementsByTagName("*") returns only elements + support.tagNameNoComments = assert(function( div ) { + div.appendChild( doc.createComment("") ); + return !div.getElementsByTagName("*").length; + }); + + // Check if attributes should be retrieved by attribute nodes + support.attributes = assert(function( div ) { + div.innerHTML = ""; + var type = typeof div.lastChild.getAttribute("multiple"); + // IE8 returns a string for some attributes even when not present + return type !== "boolean" && type !== "string"; + }); + + // Check if getElementsByClassName can be trusted + support.getByClassName = assert(function( div ) { + // Opera can't find a second classname (in 9.6) + div.innerHTML = ""; + if ( !div.getElementsByClassName || !div.getElementsByClassName("e").length ) { + return false; + } + + // Safari 3.2 caches class attributes and doesn't catch changes + div.lastChild.className = "e"; + return div.getElementsByClassName("e").length === 2; + }); + + // Check if getElementById returns elements by name + // Check if getElementsByName privileges form controls or returns elements by ID + support.getByName = assert(function( div ) { + // Inject content + div.id = expando + 0; + div.innerHTML = "
        "; + docElem.insertBefore( div, docElem.firstChild ); + + // Test + var pass = doc.getElementsByName && + // buggy browsers will return fewer than the correct 2 + doc.getElementsByName( expando ).length === 2 + + // buggy browsers will return more than the correct 0 + doc.getElementsByName( expando + 0 ).length; + support.getIdNotName = !doc.getElementById( expando ); + + // Cleanup + docElem.removeChild( div ); + + return pass; + }); + + // IE6/7 return modified attributes + Expr.attrHandle = assert(function( div ) { + div.innerHTML = ""; + return div.firstChild && typeof div.firstChild.getAttribute !== strundefined && + div.firstChild.getAttribute("href") === "#"; + }) ? + {} : + { + "href": function( elem ) { + return elem.getAttribute( "href", 2 ); + }, + "type": function( elem ) { + return elem.getAttribute("type"); + } + }; + + // ID find and filter + if ( support.getIdNotName ) { + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== strundefined && !documentIsXML ) { + var m = context.getElementById( id ); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + return m && m.parentNode ? [m] : []; + } + }; + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + } else { + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== strundefined && !documentIsXML ) { + var m = context.getElementById( id ); + + return m ? + m.id === id || typeof m.getAttributeNode !== strundefined && m.getAttributeNode("id").value === id ? + [m] : + undefined : + []; + } + }; + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + } + + // Tag + Expr.find["TAG"] = support.tagNameNoComments ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== strundefined ) { + return context.getElementsByTagName( tag ); + } + } : + function( tag, context ) { + var elem, + tmp = [], + i = 0, + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Name + Expr.find["NAME"] = support.getByName && function( tag, context ) { + if ( typeof context.getElementsByName !== strundefined ) { + return context.getElementsByName( name ); + } + }; + + // Class + Expr.find["CLASS"] = support.getByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== strundefined && !documentIsXML ) { + return context.getElementsByClassName( className ); + } + }; + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21), + // no need to also add to buggyMatches since matches checks buggyQSA + // A support test would require too much code (would include document ready) + rbuggyQSA = [ ":focus" ]; + + if ( (support.qsa = isNative(doc.querySelectorAll)) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( div ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explictly + // setting a boolean content attribute, + // since its presence should be enough + // http://bugs.jquery.com/ticket/12359 + div.innerHTML = ""; + + // IE8 - Some boolean attributes are not treated correctly + if ( !div.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + }); + + assert(function( div ) { + + // Opera 10-12/IE8 - ^= $= *= and empty values + // Should not select anything + div.innerHTML = ""; + if ( div.querySelectorAll("[i^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:\"\"|'')" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":enabled").length ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + div.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = isNative( (matches = docElem.matchesSelector || + docElem.mozMatchesSelector || + docElem.webkitMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( div ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( div, "div" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( div, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = new RegExp( rbuggyMatches.join("|") ); + + // Element contains another + // Purposefully does not implement inclusive descendent + // As in, an element does not contain itself + contains = isNative(docElem.contains) || docElem.compareDocumentPosition ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + // Document order sorting + sortOrder = docElem.compareDocumentPosition ? + function( a, b ) { + var compare; + + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + if ( (compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b )) ) { + if ( compare & 1 || a.parentNode && a.parentNode.nodeType === 11 ) { + if ( a === doc || contains( preferredDoc, a ) ) { + return -1; + } + if ( b === doc || contains( preferredDoc, b ) ) { + return 1; + } + return 0; + } + return compare & 4 ? -1 : 1; + } + + return a.compareDocumentPosition ? -1 : 1; + } : + function( a, b ) { + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + + // Parentless nodes are either documents or disconnected + } else if ( !aup || !bup ) { + return a === doc ? -1 : + b === doc ? 1 : + aup ? -1 : + bup ? 1 : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[i], bp[i] ) : + + // Otherwise nodes in our document sort first + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + // Always assume the presence of duplicates if sort doesn't + // pass them to our comparison function (as in Google Chrome). + hasDuplicate = false; + [0, 0].sort( sortOrder ); + support.detectDuplicates = hasDuplicate; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + // rbuggyQSA always contains :focus, so no need for an existence check + if ( support.matchesSelector && !documentIsXML && (!rbuggyMatches || !rbuggyMatches.test(expr)) && !rbuggyQSA.test(expr) ) { + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch(e) {} + } + + return Sizzle( expr, document, null, [elem] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + var val; + + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + if ( !documentIsXML ) { + name = name.toLowerCase(); + } + if ( (val = Expr.attrHandle[ name ]) ) { + return val( elem ); + } + if ( documentIsXML || support.attributes ) { + return elem.getAttribute( name ); + } + return ( (val = elem.getAttributeNode( name )) || elem.getAttribute( name ) ) && elem[ name ] === true ? + name : + val && val.specified ? val.value : null; +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +// Document sorting and removing duplicates +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + i = 1, + j = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + results.sort( sortOrder ); + + if ( hasDuplicate ) { + for ( ; (elem = results[i]); i++ ) { + if ( elem === results[ i - 1 ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + return results; +}; + +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && ( ~b.sourceIndex || MAX_NEGATIVE ) - ( ~a.sourceIndex || MAX_NEGATIVE ); + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +// Returns a function to use in pseudos for input types +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +// Returns a function to use in pseudos for buttons +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +// Returns a function to use in pseudos for positionals +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + // If no nodeType, this is expected to be an array + for ( ; (node = elem[i]); i++ ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (see #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + // nth-* requires argument + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + // other types prohibit arguments + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[5] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[4] ) { + match[2] = match[4]; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeName ) { + if ( nodeName === "*" ) { + return function() { return true; }; + } + + nodeName = nodeName.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( elem.className || (typeof elem.getAttribute !== strundefined && elem.getAttribute("class")) || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, outerCache, node, diff, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) { + return false; + } + } + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + // Seek `elem` from a previously-cached index + outerCache = parent[ expando ] || (parent[ expando ] = {}); + cache = outerCache[ type ] || []; + nodeIndex = cache[0] === dirruns && cache[1]; + diff = cache[0] === dirruns && cache[2]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + (diff = nodeIndex = 0) || start.pop()) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + outerCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + // Use previously-cached element index if available + } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) { + diff = cache[1]; + + // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...) + } else { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) { + // Cache the index of each encountered element + if ( useCache ) { + (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf.call( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + // Potentially complex pseudos + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + // lang value must be a valid identifider + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsXML ? + elem.getAttribute("xml:lang") || elem.getAttribute("lang") : + elem.lang) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + // Boolean properties + "enabled": function( elem ) { + return elem.disabled === false; + }, + + "disabled": function( elem ) { + return elem.disabled === true; + }, + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is only affected by element nodes and content nodes(including text(3), cdata(4)), + // not comment, processing instructions, or others + // Thanks to Diego Perini for the nodeName shortcut + // Greater than "@" means alpha characters (specifically not starting with "#" or "?") + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeName > "@" || elem.nodeType === 3 || elem.nodeType === 4 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) + // use getAttribute instead to test this case + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === elem.type ); + }, + + // Position-in-collection + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +function tokenize( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( tokens = [] ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push( { + value: matched, + // Cast descendant combinators to space + type: match[0].replace( rtrim, " " ) + } ); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push( { + value: matched, + type: type, + matches: match + } ); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +} + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + checkNonElements = base && dir === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var data, cache, outerCache, + dirkey = dirruns + " " + doneName; + + // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + if ( (cache = outerCache[ dir ]) && cache[0] === dirkey ) { + if ( (data = cache[1]) === true || data === cachedruns ) { + return data === true; + } + } else { + cache = outerCache[ dir ] = [ dirkey ]; + cache[1] = matcher( elem, context, xml ) || cachedruns; + if ( cache[1] === true ) { + return true; + } + } + } + } + } + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf.call( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + return ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( tokens.slice( 0, i - 1 ) ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + // A counter to specify which element is currently being matched + var matcherCachedRuns = 0, + bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, expandContext ) { + var elem, j, matcher, + setMatched = [], + matchedCount = 0, + i = "0", + unmatched = seed && [], + outermost = expandContext != null, + contextBackup = outermostContext, + // We must always have either seed elements or context + elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ), + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1); + + if ( outermost ) { + outermostContext = context !== document && context; + cachedruns = matcherCachedRuns; + } + + // Add elements passing elementMatchers directly to results + // Keep `i` a string if there are no elements so `matchedCount` will be "00" below + for ( ; (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + cachedruns = ++matcherCachedRuns; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // Apply set filters to unmatched elements + matchedCount += i; + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !group ) { + group = tokenize( selector ); + } + i = group.length; + while ( i-- ) { + cached = matcherFromTokens( group[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + } + return cached; +}; + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function select( selector, context, results, seed ) { + var i, tokens, token, type, find, + match = tokenize( selector ); + + if ( !seed ) { + // Try to minimize operations if there is only one group + if ( match.length === 1 ) { + + // Take a shortcut and set the context if the root selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + context.nodeType === 9 && !documentIsXML && + Expr.relative[ tokens[1].type ] ) { + + context = Expr.find["ID"]( token.matches[0].replace( runescape, funescape ), context )[0]; + if ( !context ) { + return results; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && context.parentNode || context + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, slice.call( seed, 0 ) ); + return results; + } + + break; + } + } + } + } + } + + // Compile and execute a filtering function + // Provide `match` to avoid retokenization if we modified the selector above + compile( selector, match )( + seed, + context, + documentIsXML, + results, + rsibling.test( selector ) + ); + return results; +} + +// Deprecated +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +// Easy API for creating new setFilters +function setFilters() {} +Expr.filters = setFilters.prototype = Expr.pseudos; +Expr.setFilters = new setFilters(); + +// Initialize with the default document +setDocument(); + +// Override sizzle attribute retrieval +Sizzle.attr = jQuery.attr; +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; +jQuery.expr[":"] = jQuery.expr.pseudos; +jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; + + +})( window ); +var runtil = /Until$/, + rparentsprev = /^(?:parents|prev(?:Until|All))/, + isSimple = /^.[^:#\[\.,]*$/, + rneedsContext = jQuery.expr.match.needsContext, + // methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend({ + find: function( selector ) { + var i, ret, self, + len = this.length; + + if ( typeof selector !== "string" ) { + self = this; + return this.pushStack( jQuery( selector ).filter(function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + }) ); + } + + ret = []; + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, this[ i ], ret ); + } + + // Needed because $( selector, context ) becomes $( context ).find( selector ) + ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); + ret.selector = ( this.selector ? this.selector + " " : "" ) + selector; + return ret; + }, + + has: function( target ) { + var i, + targets = jQuery( target, this ), + len = targets.length; + + return this.filter(function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( this, targets[i] ) ) { + return true; + } + } + }); + }, + + not: function( selector ) { + return this.pushStack( winnow(this, selector, false) ); + }, + + filter: function( selector ) { + return this.pushStack( winnow(this, selector, true) ); + }, + + is: function( selector ) { + return !!selector && ( + typeof selector === "string" ? + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + rneedsContext.test( selector ) ? + jQuery( selector, this.context ).index( this[0] ) >= 0 : + jQuery.filter( selector, this ).length > 0 : + this.filter( selector ).length > 0 ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + ret = [], + pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + for ( ; i < l; i++ ) { + cur = this[i]; + + while ( cur && cur.ownerDocument && cur !== context && cur.nodeType !== 11 ) { + if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) { + ret.push( cur ); + break; + } + cur = cur.parentNode; + } + } + + return this.pushStack( ret.length > 1 ? jQuery.unique( ret ) : ret ); + }, + + // Determine the position of an element within + // the matched set of elements + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1; + } + + // index in selector + if ( typeof elem === "string" ) { + return jQuery.inArray( this[0], jQuery( elem ) ); + } + + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[0] : elem, this ); + }, + + add: function( selector, context ) { + var set = typeof selector === "string" ? + jQuery( selector, context ) : + jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ), + all = jQuery.merge( this.get(), set ); + + return this.pushStack( jQuery.unique(all) ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter(selector) + ); + } +}); + +jQuery.fn.andSelf = jQuery.fn.addBack; + +function sibling( cur, dir ) { + do { + cur = cur[ dir ]; + } while ( cur && cur.nodeType !== 1 ); + + return cur; +} + +jQuery.each({ + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return jQuery.dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return jQuery.dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return jQuery.dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return jQuery.dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return jQuery.dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return jQuery.dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return jQuery.sibling( elem.firstChild ); + }, + contents: function( elem ) { + return jQuery.nodeName( elem, "iframe" ) ? + elem.contentDocument || elem.contentWindow.document : + jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var ret = jQuery.map( this, fn, until ); + + if ( !runtil.test( name ) ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + ret = jQuery.filter( selector, ret ); + } + + ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret; + + if ( this.length > 1 && rparentsprev.test( name ) ) { + ret = ret.reverse(); + } + + return this.pushStack( ret ); + }; +}); + +jQuery.extend({ + filter: function( expr, elems, not ) { + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 ? + jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] : + jQuery.find.matches(expr, elems); + }, + + dir: function( elem, dir, until ) { + var matched = [], + cur = elem[ dir ]; + + while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { + if ( cur.nodeType === 1 ) { + matched.push( cur ); + } + cur = cur[dir]; + } + return matched; + }, + + sibling: function( n, elem ) { + var r = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + r.push( n ); + } + } + + return r; + } +}); + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, keep ) { + + // Can't pass null or undefined to indexOf in Firefox 4 + // Set to 0 to skip string check + qualifier = qualifier || 0; + + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep(elements, function( elem, i ) { + var retVal = !!qualifier.call( elem, i, elem ); + return retVal === keep; + }); + + } else if ( qualifier.nodeType ) { + return jQuery.grep(elements, function( elem ) { + return ( elem === qualifier ) === keep; + }); + + } else if ( typeof qualifier === "string" ) { + var filtered = jQuery.grep(elements, function( elem ) { + return elem.nodeType === 1; + }); + + if ( isSimple.test( qualifier ) ) { + return jQuery.filter(qualifier, filtered, !keep); + } else { + qualifier = jQuery.filter( qualifier, filtered ); + } + } + + return jQuery.grep(elements, function( elem ) { + return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep; + }); +} +function createSafeFragment( document ) { + var list = nodeNames.split( "|" ), + safeFrag = document.createDocumentFragment(); + + if ( safeFrag.createElement ) { + while ( list.length ) { + safeFrag.createElement( + list.pop() + ); + } + } + return safeFrag; +} + +var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" + + "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", + rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g, + rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"), + rleadingWhitespace = /^\s+/, + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, + rtagName = /<([\w:]+)/, + rtbody = /\s*$/g, + + // We have to close these tags to support XHTML (#13200) + wrapMap = { + option: [ 1, "" ], + legend: [ 1, "
        ", "
        " ], + area: [ 1, "", "" ], + param: [ 1, "", "" ], + thead: [ 1, "", "
        " ], + tr: [ 2, "", "
        " ], + col: [ 2, "", "
        " ], + td: [ 3, "", "
        " ], + + // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags, + // unless wrapped in a div with non-breaking characters in front of it. + _default: jQuery.support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X
        ", "
        " ] + }, + safeFragment = createSafeFragment( document ), + fragmentDiv = safeFragment.appendChild( document.createElement("div") ); + +wrapMap.optgroup = wrapMap.option; +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +jQuery.fn.extend({ + text: function( value ) { + return jQuery.access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) ); + }, null, value, arguments.length ); + }, + + wrapAll: function( html ) { + if ( jQuery.isFunction( html ) ) { + return this.each(function(i) { + jQuery(this).wrapAll( html.call(this, i) ); + }); + } + + if ( this[0] ) { + // The elements to wrap the target around + var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true); + + if ( this[0].parentNode ) { + wrap.insertBefore( this[0] ); + } + + wrap.map(function() { + var elem = this; + + while ( elem.firstChild && elem.firstChild.nodeType === 1 ) { + elem = elem.firstChild; + } + + return elem; + }).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( jQuery.isFunction( html ) ) { + return this.each(function(i) { + jQuery(this).wrapInner( html.call(this, i) ); + }); + } + + return this.each(function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + }); + }, + + wrap: function( html ) { + var isFunction = jQuery.isFunction( html ); + + return this.each(function(i) { + jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html ); + }); + }, + + unwrap: function() { + return this.parent().each(function() { + if ( !jQuery.nodeName( this, "body" ) ) { + jQuery( this ).replaceWith( this.childNodes ); + } + }).end(); + }, + + append: function() { + return this.domManip(arguments, true, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.appendChild( elem ); + } + }); + }, + + prepend: function() { + return this.domManip(arguments, true, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.insertBefore( elem, this.firstChild ); + } + }); + }, + + before: function() { + return this.domManip( arguments, false, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + }); + }, + + after: function() { + return this.domManip( arguments, false, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + }); + }, + + // keepData is for internal use only--do not document + remove: function( selector, keepData ) { + var elem, + i = 0; + + for ( ; (elem = this[i]) != null; i++ ) { + if ( !selector || jQuery.filter( selector, [ elem ] ).length > 0 ) { + if ( !keepData && elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem ) ); + } + + if ( elem.parentNode ) { + if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) { + setGlobalEval( getAll( elem, "script" ) ); + } + elem.parentNode.removeChild( elem ); + } + } + } + + return this; + }, + + empty: function() { + var elem, + i = 0; + + for ( ; (elem = this[i]) != null; i++ ) { + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + } + + // Remove any remaining nodes + while ( elem.firstChild ) { + elem.removeChild( elem.firstChild ); + } + + // If this is a select, ensure that it displays empty (#12336) + // Support: IE<9 + if ( elem.options && jQuery.nodeName( elem, "select" ) ) { + elem.options.length = 0; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function () { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + }); + }, + + html: function( value ) { + return jQuery.access( this, function( value ) { + var elem = this[0] || {}, + i = 0, + l = this.length; + + if ( value === undefined ) { + return elem.nodeType === 1 ? + elem.innerHTML.replace( rinlinejQuery, "" ) : + undefined; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + ( jQuery.support.htmlSerialize || !rnoshimcache.test( value ) ) && + ( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) && + !wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) { + + value = value.replace( rxhtmlTag, "<$1>" ); + + try { + for (; i < l; i++ ) { + // Remove element nodes and prevent memory leaks + elem = this[i] || {}; + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch(e) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function( value ) { + var isFunc = jQuery.isFunction( value ); + + // Make sure that the elements are removed from the DOM before they are inserted + // this can help fix replacing a parent with child elements + if ( !isFunc && typeof value !== "string" ) { + value = jQuery( value ).not( this ).detach(); + } + + return this.domManip( [ value ], true, function( elem ) { + var next = this.nextSibling, + parent = this.parentNode; + + if ( parent ) { + jQuery( this ).remove(); + parent.insertBefore( elem, next ); + } + }); + }, + + detach: function( selector ) { + return this.remove( selector, true ); + }, + + domManip: function( args, table, callback ) { + + // Flatten any nested arrays + args = core_concat.apply( [], args ); + + var first, node, hasScripts, + scripts, doc, fragment, + i = 0, + l = this.length, + set = this, + iNoClone = l - 1, + value = args[0], + isFunction = jQuery.isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( isFunction || !( l <= 1 || typeof value !== "string" || jQuery.support.checkClone || !rchecked.test( value ) ) ) { + return this.each(function( index ) { + var self = set.eq( index ); + if ( isFunction ) { + args[0] = value.call( this, index, table ? self.html() : undefined ); + } + self.domManip( args, table, callback ); + }); + } + + if ( l ) { + fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + if ( first ) { + table = table && jQuery.nodeName( first, "tr" ); + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( + table && jQuery.nodeName( this[i], "table" ) ? + findOrAppend( this[i], "tbody" ) : + this[i], + node, + i + ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) { + + if ( node.src ) { + // Hope ajax is available... + jQuery.ajax({ + url: node.src, + type: "GET", + dataType: "script", + async: false, + global: false, + "throws": true + }); + } else { + jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) ); + } + } + } + } + + // Fix #11809: Avoid leaking memory + fragment = first = null; + } + } + + return this; + } +}); + +function findOrAppend( elem, tag ) { + return elem.getElementsByTagName( tag )[0] || elem.appendChild( elem.ownerDocument.createElement( tag ) ); +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + var attr = elem.getAttributeNode("type"); + elem.type = ( attr && attr.specified ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + var match = rscriptTypeMasked.exec( elem.type ); + if ( match ) { + elem.type = match[1]; + } else { + elem.removeAttribute("type"); + } + return elem; +} + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var elem, + i = 0; + for ( ; (elem = elems[i]) != null; i++ ) { + jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) ); + } +} + +function cloneCopyEvent( src, dest ) { + + if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) { + return; + } + + var type, i, l, + oldData = jQuery._data( src ), + curData = jQuery._data( dest, oldData ), + events = oldData.events; + + if ( events ) { + delete curData.handle; + curData.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + + // make the cloned public data object a copy from the original + if ( curData.data ) { + curData.data = jQuery.extend( {}, curData.data ); + } +} + +function fixCloneNodeIssues( src, dest ) { + var nodeName, e, data; + + // We do not need to do anything for non-Elements + if ( dest.nodeType !== 1 ) { + return; + } + + nodeName = dest.nodeName.toLowerCase(); + + // IE6-8 copies events bound via attachEvent when using cloneNode. + if ( !jQuery.support.noCloneEvent && dest[ jQuery.expando ] ) { + data = jQuery._data( dest ); + + for ( e in data.events ) { + jQuery.removeEvent( dest, e, data.handle ); + } + + // Event data gets referenced instead of copied if the expando gets copied too + dest.removeAttribute( jQuery.expando ); + } + + // IE blanks contents when cloning scripts, and tries to evaluate newly-set text + if ( nodeName === "script" && dest.text !== src.text ) { + disableScript( dest ).text = src.text; + restoreScript( dest ); + + // IE6-10 improperly clones children of object elements using classid. + // IE10 throws NoModificationAllowedError if parent is null, #12132. + } else if ( nodeName === "object" ) { + if ( dest.parentNode ) { + dest.outerHTML = src.outerHTML; + } + + // This path appears unavoidable for IE9. When cloning an object + // element in IE9, the outerHTML strategy above is not sufficient. + // If the src has innerHTML and the destination does not, + // copy the src.innerHTML into the dest.innerHTML. #10324 + if ( jQuery.support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) { + dest.innerHTML = src.innerHTML; + } + + } else if ( nodeName === "input" && manipulation_rcheckableType.test( src.type ) ) { + // IE6-8 fails to persist the checked state of a cloned checkbox + // or radio button. Worse, IE6-7 fail to give the cloned element + // a checked appearance if the defaultChecked value isn't also set + + dest.defaultChecked = dest.checked = src.checked; + + // IE6-7 get confused and end up setting the value of a cloned + // checkbox/radio button to an empty string instead of "on" + if ( dest.value !== src.value ) { + dest.value = src.value; + } + + // IE6-8 fails to return the selected option to the default selected + // state when cloning options + } else if ( nodeName === "option" ) { + dest.defaultSelected = dest.selected = src.defaultSelected; + + // IE6-8 fails to set the defaultValue to the correct value when + // cloning other types of input fields + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +jQuery.each({ + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + i = 0, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone(true); + jQuery( insert[i] )[ original ]( elems ); + + // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get() + core_push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +}); + +function getAll( context, tag ) { + var elems, elem, + i = 0, + found = typeof context.getElementsByTagName !== core_strundefined ? context.getElementsByTagName( tag || "*" ) : + typeof context.querySelectorAll !== core_strundefined ? context.querySelectorAll( tag || "*" ) : + undefined; + + if ( !found ) { + for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) { + if ( !tag || jQuery.nodeName( elem, tag ) ) { + found.push( elem ); + } else { + jQuery.merge( found, getAll( elem, tag ) ); + } + } + } + + return tag === undefined || tag && jQuery.nodeName( context, tag ) ? + jQuery.merge( [ context ], found ) : + found; +} + +// Used in buildFragment, fixes the defaultChecked property +function fixDefaultChecked( elem ) { + if ( manipulation_rcheckableType.test( elem.type ) ) { + elem.defaultChecked = elem.checked; + } +} + +jQuery.extend({ + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var destElements, node, clone, i, srcElements, + inPage = jQuery.contains( elem.ownerDocument, elem ); + + if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) { + clone = elem.cloneNode( true ); + + // IE<=8 does not properly clone detached, unknown element nodes + } else { + fragmentDiv.innerHTML = elem.outerHTML; + fragmentDiv.removeChild( clone = fragmentDiv.firstChild ); + } + + if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) && + (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) { + + // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + // Fix all IE cloning issues + for ( i = 0; (node = srcElements[i]) != null; ++i ) { + // Ensure that the destination node is not null; Fixes #9587 + if ( destElements[i] ) { + fixCloneNodeIssues( node, destElements[i] ); + } + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0; (node = srcElements[i]) != null; i++ ) { + cloneCopyEvent( node, destElements[i] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + destElements = srcElements = node = null; + + // Return the cloned set + return clone; + }, + + buildFragment: function( elems, context, scripts, selection ) { + var j, elem, contains, + tmp, tag, tbody, wrap, + l = elems.length, + + // Ensure a safe fragment + safe = createSafeFragment( context ), + + nodes = [], + i = 0; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( jQuery.type( elem ) === "object" ) { + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || safe.appendChild( context.createElement("div") ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + + tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1>" ) + wrap[2]; + + // Descend through wrappers to the right content + j = wrap[0]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Manually add leading whitespace removed by IE + if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) { + nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) ); + } + + // Remove IE's autoinserted from table fragments + if ( !jQuery.support.tbody ) { + + // String was a , *may* have spurious + elem = tag === "table" && !rtbody.test( elem ) ? + tmp.firstChild : + + // String was a bare or + wrap[1] === "
        " && !rtbody.test( elem ) ? + tmp : + 0; + + j = elem && elem.childNodes.length; + while ( j-- ) { + if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) { + elem.removeChild( tbody ); + } + } + } + + jQuery.merge( nodes, tmp.childNodes ); + + // Fix #12392 for WebKit and IE > 9 + tmp.textContent = ""; + + // Fix #12392 for oldIE + while ( tmp.firstChild ) { + tmp.removeChild( tmp.firstChild ); + } + + // Remember the top-level container for proper cleanup + tmp = safe.lastChild; + } + } + } + + // Fix #11356: Clear elements from fragment + if ( tmp ) { + safe.removeChild( tmp ); + } + + // Reset defaultChecked for any radios and checkboxes + // about to be appended to the DOM in IE 6/7 (#8060) + if ( !jQuery.support.appendChecked ) { + jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked ); + } + + i = 0; + while ( (elem = nodes[ i++ ]) ) { + + // #4087 - If origin and destination elements are the same, and this is + // that element, do not do anything + if ( selection && jQuery.inArray( elem, selection ) !== -1 ) { + continue; + } + + contains = jQuery.contains( elem.ownerDocument, elem ); + + // Append to fragment + tmp = getAll( safe.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( contains ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( (elem = tmp[ j++ ]) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + tmp = null; + + return safe; + }, + + cleanData: function( elems, /* internal */ acceptData ) { + var elem, type, id, data, + i = 0, + internalKey = jQuery.expando, + cache = jQuery.cache, + deleteExpando = jQuery.support.deleteExpando, + special = jQuery.event.special; + + for ( ; (elem = elems[i]) != null; i++ ) { + + if ( acceptData || jQuery.acceptData( elem ) ) { + + id = elem[ internalKey ]; + data = id && cache[ id ]; + + if ( data ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Remove cache only if it was not already removed by jQuery.event.remove + if ( cache[ id ] ) { + + delete cache[ id ]; + + // IE does not allow us to delete expando properties from nodes, + // nor does it have a removeAttribute function on Document nodes; + // we must handle all of these cases + if ( deleteExpando ) { + delete elem[ internalKey ]; + + } else if ( typeof elem.removeAttribute !== core_strundefined ) { + elem.removeAttribute( internalKey ); + + } else { + elem[ internalKey ] = null; + } + + core_deletedIds.push( id ); + } + } + } + } + } +}); +var iframe, getStyles, curCSS, + ralpha = /alpha\([^)]*\)/i, + ropacity = /opacity\s*=\s*([^)]*)/, + rposition = /^(top|right|bottom|left)$/, + // swappable if display is none or starts with table except "table", "table-cell", or "table-caption" + // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rmargin = /^margin/, + rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ), + rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ), + rrelNum = new RegExp( "^([+-])=(" + core_pnum + ")", "i" ), + elemdisplay = { BODY: "block" }, + + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: 0, + fontWeight: 400 + }, + + cssExpand = [ "Top", "Right", "Bottom", "Left" ], + cssPrefixes = [ "Webkit", "O", "Moz", "ms" ]; + +// return a css property mapped to a potentially vendor prefixed property +function vendorPropName( style, name ) { + + // shortcut for names that are not vendor prefixed + if ( name in style ) { + return name; + } + + // check for vendor prefixed names + var capName = name.charAt(0).toUpperCase() + name.slice(1), + origName = name, + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in style ) { + return name; + } + } + + return origName; +} + +function isHidden( elem, el ) { + // isHidden might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); +} + +function showHide( elements, show ) { + var display, elem, hidden, + values = [], + index = 0, + length = elements.length; + + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + values[ index ] = jQuery._data( elem, "olddisplay" ); + display = elem.style.display; + if ( show ) { + // Reset the inline display of this element to learn if it is + // being hidden by cascaded rules or not + if ( !values[ index ] && display === "none" ) { + elem.style.display = ""; + } + + // Set elements which have been overridden with display: none + // in a stylesheet to whatever the default browser style is + // for such an element + if ( elem.style.display === "" && isHidden( elem ) ) { + values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) ); + } + } else { + + if ( !values[ index ] ) { + hidden = isHidden( elem ); + + if ( display && display !== "none" || !hidden ) { + jQuery._data( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) ); + } + } + } + } + + // Set the display of most of the elements in a second loop + // to avoid the constant reflow + for ( index = 0; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + if ( !show || elem.style.display === "none" || elem.style.display === "" ) { + elem.style.display = show ? values[ index ] || "" : "none"; + } + } + + return elements; +} + +jQuery.fn.extend({ + css: function( name, value ) { + return jQuery.access( this, function( elem, name, value ) { + var len, styles, + map = {}, + i = 0; + + if ( jQuery.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + }, + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + var bool = typeof state === "boolean"; + + return this.each(function() { + if ( bool ? state : isHidden( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + }); + } +}); + +jQuery.extend({ + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Exclude the following css properties to add px + cssNumber: { + "columnCount": true, + "fillOpacity": true, + "fontWeight": true, + "lineHeight": true, + "opacity": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: { + // normalize float css property + "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat" + }, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = jQuery.camelCase( name ), + style = elem.style; + + name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) ); + + // gets hook for the prefixed version + // followed by the unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // convert relative number strings (+= or -=) to relative numbers. #7345 + if ( type === "string" && (ret = rrelNum.exec( value )) ) { + value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) ); + // Fixes bug #9237 + type = "number"; + } + + // Make sure that NaN and null values aren't set. See: #7116 + if ( value == null || type === "number" && isNaN( value ) ) { + return; + } + + // If a number was passed in, add 'px' to the (except for certain CSS properties) + if ( type === "number" && !jQuery.cssNumber[ origName ] ) { + value += "px"; + } + + // Fixes #8908, it can be done more correctly by specifing setters in cssHooks, + // but it would mean to define eight (for every problematic property) identical functions + if ( !jQuery.support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) { + + // Wrapped to prevent IE from throwing errors when 'invalid' values are provided + // Fixes bug #5509 + try { + style[ name ] = value; + } catch(e) {} + } + + } else { + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) { + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var num, val, hooks, + origName = jQuery.camelCase( name ); + + // Make sure that we're working with the right name + name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) ); + + // gets hook for the prefixed version + // followed by the unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + //convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Return, converting to number if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || jQuery.isNumeric( num ) ? num || 0 : val; + } + return val; + }, + + // A method for quickly swapping in/out CSS properties to get correct calculations + swap: function( elem, options, callback, args ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.apply( elem, args || [] ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; + } +}); + +// NOTE: we've included the "window" in window.getComputedStyle +// because jsdom on node.js will break without it. +if ( window.getComputedStyle ) { + getStyles = function( elem ) { + return window.getComputedStyle( elem, null ); + }; + + curCSS = function( elem, name, _computed ) { + var width, minWidth, maxWidth, + computed = _computed || getStyles( elem ), + + // getPropertyValue is only needed for .css('filter') in IE9, see #12537 + ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined, + style = elem.style; + + if ( computed ) { + + if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right + // Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels + // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values + if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret; + }; +} else if ( document.documentElement.currentStyle ) { + getStyles = function( elem ) { + return elem.currentStyle; + }; + + curCSS = function( elem, name, _computed ) { + var left, rs, rsLeft, + computed = _computed || getStyles( elem ), + ret = computed ? computed[ name ] : undefined, + style = elem.style; + + // Avoid setting ret to empty string here + // so we don't default to auto + if ( ret == null && style && style[ name ] ) { + ret = style[ name ]; + } + + // From the awesome hack by Dean Edwards + // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 + + // If we're not dealing with a regular pixel number + // but a number that has a weird ending, we need to convert it to pixels + // but not position css attributes, as those are proportional to the parent element instead + // and we can't measure the parent instead because it might trigger a "stacking dolls" problem + if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) { + + // Remember the original values + left = style.left; + rs = elem.runtimeStyle; + rsLeft = rs && rs.left; + + // Put in the new values to get a computed value out + if ( rsLeft ) { + rs.left = elem.currentStyle.left; + } + style.left = name === "fontSize" ? "1em" : ret; + ret = style.pixelLeft + "px"; + + // Revert the changed values + style.left = left; + if ( rsLeft ) { + rs.left = rsLeft; + } + } + + return ret === "" ? "auto" : ret; + }; +} + +function setPositiveNumber( elem, value, subtract ) { + var matches = rnumsplit.exec( value ); + return matches ? + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) : + value; +} + +function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { + var i = extra === ( isBorderBox ? "border" : "content" ) ? + // If we already have the right measurement, avoid augmentation + 4 : + // Otherwise initialize for horizontal or vertical properties + name === "width" ? 1 : 0, + + val = 0; + + for ( ; i < 4; i += 2 ) { + // both box models exclude margin, so add it if we want it + if ( extra === "margin" ) { + val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); + } + + if ( isBorderBox ) { + // border-box includes padding, so remove it if we want content + if ( extra === "content" ) { + val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // at this point, extra isn't border nor margin, so remove border + if ( extra !== "margin" ) { + val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } else { + // at this point, extra isn't content, so add padding + val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // at this point, extra isn't content nor padding, so add border + if ( extra !== "padding" ) { + val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + return val; +} + +function getWidthOrHeight( elem, name, extra ) { + + // Start with offset property, which is equivalent to the border-box value + var valueIsBorderBox = true, + val = name === "width" ? elem.offsetWidth : elem.offsetHeight, + styles = getStyles( elem ), + isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // some non-html elements return undefined for offsetWidth, so check for null/undefined + // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285 + // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668 + if ( val <= 0 || val == null ) { + // Fall back to computed then uncomputed css if necessary + val = curCSS( elem, name, styles ); + if ( val < 0 || val == null ) { + val = elem.style[ name ]; + } + + // Computed unit is not pixels. Stop here and return. + if ( rnumnonpx.test(val) ) { + return val; + } + + // we need the check for style in case a browser which returns unreliable values + // for getComputedStyle silently falls back to the reliable elem.style + valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] ); + + // Normalize "", auto, and prepare for extra + val = parseFloat( val ) || 0; + } + + // use the active box-sizing model to add/subtract irrelevant styles + return ( val + + augmentWidthOrHeight( + elem, + name, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles + ) + ) + "px"; +} + +// Try to determine the default display value of an element +function css_defaultDisplay( nodeName ) { + var doc = document, + display = elemdisplay[ nodeName ]; + + if ( !display ) { + display = actualDisplay( nodeName, doc ); + + // If the simple way fails, read from inside an iframe + if ( display === "none" || !display ) { + // Use the already-created iframe if possible + iframe = ( iframe || + jQuery("