From 3510dbfc4522f7cfc933519806625024be871a89 Mon Sep 17 00:00:00 2001 From: Dapeng <verydapeng@gmail.com> Date: Tue, 20 Sep 2016 11:41:05 +0800 Subject: [PATCH] ui update 1. upgrade angular version to 1.5.8 2. upgrade bootstrap to 3 3. fix ui integrations up to visits 4. move to webjars --- pom.xml | 12 + .../petclinic/repository/OwnerRepository.java | 30 +- .../petclinic/service/ClinicService.java | 17 +- .../petclinic/service/ClinicServiceImpl.java | 7 +- .../samples/petclinic/web/OwnerResource.java | 19 +- .../samples/petclinic/web/PetResource.java | 83 +- .../jsp/pets/createOrUpdateVisitForm.jsp | 73 - .../WEB-INF/no-spring-config-files-there.txt | 4 - src/main/webapp/WEB-INF/tags/inputField.tag | 19 - src/main/webapp/WEB-INF/tags/selectField.tag | 23 - .../angular-mocks/.bower.json | 19 - .../bower_components/angular-mocks/README.md | 57 - .../angular-mocks/angular-mocks.js | 2382 - .../bower_components/angular-mocks/bower.json | 9 - .../angular-mocks/package.json | 27 - .../angular-resource/.bower.json | 19 - .../angular-resource/README.md | 77 - .../angular-resource/angular-resource.js | 667 - .../angular-resource/angular-resource.min.js | 13 - .../angular-resource.min.js.map | 8 - .../angular-resource/bower.json | 9 - .../angular-resource/package.json | 26 - .../angular-scenario/.bower.json | 19 - .../angular-scenario/README.md | 61 - .../angular-scenario/angular-scenario.js | 37470 ---------------- .../angular-scenario/bower.json | 9 - .../jstd-scenario-adapter-config.js | 6 - .../angular-scenario/jstd-scenario-adapter.js | 185 - .../angular-scenario/package.json | 26 - .../angular-ui-router/.bower.json | 33 - .../angular-ui-router/CHANGELOG.md | 228 - .../angular-ui-router/CONTRIBUTING.md | 65 - .../angular-ui-router/LICENSE | 21 - .../angular-ui-router/README.md | 245 - .../api/angular-ui-router.d.ts | 126 - .../angular-ui-router/bower.json | 23 - .../release/angular-ui-router.js | 4370 -- .../release/angular-ui-router.min.js | 7 - .../angular-ui-router/src/common.js | 292 - .../angular-ui-router/src/resolve.js | 252 - .../angular-ui-router/src/state.js | 1465 - .../angular-ui-router/src/stateDirectives.js | 285 - .../angular-ui-router/src/stateFilters.js | 39 - .../angular-ui-router/src/templateFactory.js | 110 - .../src/urlMatcherFactory.js | 1050 - .../angular-ui-router/src/urlRouter.js | 427 - .../angular-ui-router/src/view.js | 71 - .../angular-ui-router/src/viewDirective.js | 303 - .../angular-ui-router/src/viewScroll.js | 52 - .../bower_components/angular/.bower.json | 17 - .../webapp/bower_components/angular/README.md | 67 - .../bower_components/angular/angular-csp.css | 13 - .../bower_components/angular/angular.js | 26116 ----------- .../bower_components/angular/angular.min.js | 251 - .../angular/angular.min.js.gzip | Bin 45987 -> 0 bytes .../angular/angular.min.js.map | 8 - .../bower_components/angular/bower.json | 8 - .../bower_components/angular/package.json | 25 - .../bower_components/bootstrap/.bower.json | 21 - .../bower_components/bootstrap/.gitignore | 37 - .../bower_components/bootstrap/.travis.yml | 3 - .../bower_components/bootstrap/CHANGELOG.md | 350 - .../bootstrap/CONTRIBUTING.md | 75 - .../webapp/bower_components/bootstrap/LICENSE | 176 - .../bower_components/bootstrap/Makefile | 126 - .../bower_components/bootstrap/README.md | 116 - .../bower_components/bootstrap/component.json | 8 - .../bower_components/bootstrap/composer.json | 9 - .../docs/assets/css/bootstrap-responsive.css | 1109 - .../bootstrap/docs/assets/css/bootstrap.css | 6158 --- .../bootstrap/docs/assets/css/docs.css | 1067 - .../ico/apple-touch-icon-114-precomposed.png | Bin 11392 -> 0 bytes .../ico/apple-touch-icon-144-precomposed.png | Bin 16780 -> 0 bytes .../ico/apple-touch-icon-57-precomposed.png | Bin 4026 -> 0 bytes .../ico/apple-touch-icon-72-precomposed.png | Bin 5681 -> 0 bytes .../bootstrap/docs/assets/ico/favicon.ico | Bin 1150 -> 0 bytes .../bootstrap/docs/assets/ico/favicon.png | Bin 2711 -> 0 bytes .../docs/assets/img/bootstrap-docs-readme.png | Bin 30612 -> 0 bytes .../assets/img/bootstrap-mdo-sfmoma-01.jpg | Bin 125346 -> 0 bytes .../assets/img/bootstrap-mdo-sfmoma-02.jpg | Bin 81284 -> 0 bytes .../assets/img/bootstrap-mdo-sfmoma-03.jpg | Bin 49063 -> 0 bytes .../assets/img/bs-docs-bootstrap-features.png | Bin 11244 -> 0 bytes .../assets/img/bs-docs-masthead-pattern.png | Bin 6450 -> 0 bytes .../img/bs-docs-responsive-illustrations.png | Bin 10572 -> 0 bytes .../assets/img/bs-docs-twitter-github.png | Bin 30968 -> 0 bytes .../assets/img/example-sites/8020select.png | Bin 62853 -> 0 bytes .../img/example-sites/adoptahydrant.png | Bin 136480 -> 0 bytes .../assets/img/example-sites/breakingnews.png | Bin 72725 -> 0 bytes .../docs/assets/img/example-sites/fleetio.png | Bin 39837 -> 0 bytes .../img/example-sites/gathercontent.png | Bin 76560 -> 0 bytes .../docs/assets/img/example-sites/jshint.png | Bin 7258 -> 0 bytes .../docs/assets/img/example-sites/kippt.png | Bin 48259 -> 0 bytes .../assets/img/example-sites/soundready.png | Bin 50225 -> 0 bytes .../examples/bootstrap-example-carousel.png | Bin 339980 -> 0 bytes .../img/examples/bootstrap-example-fluid.png | Bin 209039 -> 0 bytes .../bootstrap-example-justified-nav.png | Bin 136021 -> 0 bytes .../bootstrap-example-marketing-narrow.png | Bin 117303 -> 0 bytes .../examples/bootstrap-example-marketing.png | Bin 134269 -> 0 bytes .../img/examples/bootstrap-example-signin.png | Bin 22037 -> 0 bytes .../examples/bootstrap-example-starter.png | Bin 36099 -> 0 bytes .../bootstrap-example-sticky-footer.png | Bin 30820 -> 0 bytes .../img/examples/browser-icon-chrome.png | Bin 55522 -> 0 bytes .../img/examples/browser-icon-firefox.png | Bin 175994 -> 0 bytes .../img/examples/browser-icon-safari.png | Bin 209527 -> 0 bytes .../docs/assets/img/examples/slide-01.jpg | Bin 83303 -> 0 bytes .../docs/assets/img/examples/slide-02.jpg | Bin 137070 -> 0 bytes .../docs/assets/img/examples/slide-03.jpg | Bin 137378 -> 0 bytes .../assets/img/glyphicons-halflings-white.png | Bin 8777 -> 0 bytes .../docs/assets/img/glyphicons-halflings.png | Bin 12799 -> 0 bytes .../docs/assets/img/grid-baseline-20px.png | Bin 84 -> 0 bytes .../docs/assets/img/less-logo-large.png | Bin 12824 -> 0 bytes .../assets/img/responsive-illustrations.png | Bin 1008 -> 0 bytes .../bootstrap/docs/assets/js/README.md | 106 - .../bootstrap/docs/assets/js/application.js | 156 - .../docs/assets/js/bootstrap-affix.js | 117 - .../docs/assets/js/bootstrap-alert.js | 99 - .../docs/assets/js/bootstrap-button.js | 105 - .../docs/assets/js/bootstrap-carousel.js | 207 - .../docs/assets/js/bootstrap-collapse.js | 167 - .../docs/assets/js/bootstrap-dropdown.js | 165 - .../docs/assets/js/bootstrap-modal.js | 247 - .../docs/assets/js/bootstrap-popover.js | 114 - .../docs/assets/js/bootstrap-scrollspy.js | 162 - .../bootstrap/docs/assets/js/bootstrap-tab.js | 144 - .../docs/assets/js/bootstrap-tooltip.js | 353 - .../docs/assets/js/bootstrap-transition.js | 60 - .../docs/assets/js/bootstrap-typeahead.js | 335 - .../bootstrap/docs/assets/js/bootstrap.js | 2268 - .../bootstrap/docs/assets/js/bootstrap.min.js | 6 - .../js/google-code-prettify/prettify.css | 30 - .../js/google-code-prettify/prettify.js | 28 - .../bootstrap/docs/assets/js/holder/holder.js | 401 - .../bootstrap/docs/assets/js/html5shiv.js | 8 - .../bootstrap/docs/assets/js/jquery.js | 5 - .../bootstrap/docs/base-css.html | 2215 - .../bootstrap/docs/build/index.js | 44 - .../bootstrap/docs/build/package.json | 6 - .../bootstrap/docs/components.html | 2626 -- .../bootstrap/docs/customize.html | 514 - .../bootstrap/docs/examples/carousel.html | 454 - .../bootstrap/docs/examples/fluid.html | 163 - .../bootstrap/docs/examples/hero.html | 126 - .../docs/examples/justified-nav.html | 174 - .../docs/examples/marketing-narrow.html | 137 - .../bootstrap/docs/examples/signin.html | 94 - .../docs/examples/starter-template.html | 79 - .../docs/examples/sticky-footer-navbar.html | 161 - .../docs/examples/sticky-footer.html | 125 - .../bootstrap/docs/extend.html | 282 - .../bootstrap/docs/getting-started.html | 377 - .../bootstrap/docs/index.html | 221 - .../bootstrap/docs/javascript.html | 1780 - .../bootstrap/docs/scaffolding.html | 602 - .../bootstrap/docs/templates/layout.mustache | 151 - .../docs/templates/pages/base-css.mustache | 2102 - .../docs/templates/pages/components.mustache | 2505 -- .../docs/templates/pages/customize.mustache | 393 - .../docs/templates/pages/extend.mustache | 161 - .../templates/pages/getting-started.mustache | 256 - .../docs/templates/pages/index.mustache | 100 - .../docs/templates/pages/javascript.mustache | 1660 - .../docs/templates/pages/scaffolding.mustache | 485 - .../img/glyphicons-halflings-white.png | Bin 8777 -> 0 bytes .../bootstrap/img/glyphicons-halflings.png | Bin 12799 -> 0 bytes .../bower_components/bootstrap/js/.jshintrc | 12 - .../bootstrap/js/bootstrap-affix.js | 117 - .../bootstrap/js/bootstrap-alert.js | 99 - .../bootstrap/js/bootstrap-button.js | 105 - .../bootstrap/js/bootstrap-carousel.js | 207 - .../bootstrap/js/bootstrap-collapse.js | 167 - .../bootstrap/js/bootstrap-dropdown.js | 165 - .../bootstrap/js/bootstrap-modal.js | 247 - .../bootstrap/js/bootstrap-popover.js | 114 - .../bootstrap/js/bootstrap-scrollspy.js | 162 - .../bootstrap/js/bootstrap-tab.js | 144 - .../bootstrap/js/bootstrap-tooltip.js | 353 - .../bootstrap/js/bootstrap-transition.js | 60 - .../bootstrap/js/bootstrap-typeahead.js | 335 - .../bootstrap/js/tests/index.html | 56 - .../bootstrap/js/tests/phantom.js | 63 - .../bootstrap/js/tests/server.js | 14 - .../js/tests/unit/bootstrap-affix.js | 25 - .../js/tests/unit/bootstrap-alert.js | 62 - .../js/tests/unit/bootstrap-button.js | 102 - .../js/tests/unit/bootstrap-carousel.js | 81 - .../js/tests/unit/bootstrap-collapse.js | 94 - .../js/tests/unit/bootstrap-dropdown.js | 151 - .../js/tests/unit/bootstrap-modal.js | 120 - .../js/tests/unit/bootstrap-phantom.js | 21 - .../js/tests/unit/bootstrap-popover.js | 113 - .../js/tests/unit/bootstrap-scrollspy.js | 37 - .../bootstrap/js/tests/unit/bootstrap-tab.js | 86 - .../js/tests/unit/bootstrap-tooltip.js | 294 - .../js/tests/unit/bootstrap-transition.js | 13 - .../js/tests/unit/bootstrap-typeahead.js | 236 - .../bootstrap/js/tests/vendor/jquery.js | 5 - .../bootstrap/js/tests/vendor/qunit.css | 232 - .../bootstrap/js/tests/vendor/qunit.js | 1510 - .../bootstrap/less/accordion.less | 34 - .../bootstrap/less/alerts.less | 79 - .../bootstrap/less/bootstrap.less | 63 - .../bootstrap/less/breadcrumbs.less | 24 - .../bootstrap/less/button-groups.less | 229 - .../bootstrap/less/buttons.less | 228 - .../bootstrap/less/carousel.less | 158 - .../bootstrap/less/close.less | 32 - .../bower_components/bootstrap/less/code.less | 61 - .../bootstrap/less/component-animations.less | 22 - .../bootstrap/less/dropdowns.less | 237 - .../bootstrap/less/forms.less | 690 - .../bower_components/bootstrap/less/grid.less | 21 - .../bootstrap/less/hero-unit.less | 25 - .../bootstrap/less/labels-badges.less | 84 - .../bootstrap/less/layouts.less | 16 - .../bootstrap/less/media.less | 55 - .../bootstrap/less/mixins.less | 702 - .../bootstrap/less/modals.less | 95 - .../bootstrap/less/navbar.less | 497 - .../bower_components/bootstrap/less/navs.less | 409 - .../bootstrap/less/pager.less | 43 - .../bootstrap/less/pagination.less | 123 - .../bootstrap/less/popovers.less | 133 - .../bootstrap/less/progress-bars.less | 122 - .../bootstrap/less/reset.less | 216 - .../bootstrap/less/responsive-1200px-min.less | 28 - .../bootstrap/less/responsive-767px-max.less | 193 - .../less/responsive-768px-979px.less | 19 - .../bootstrap/less/responsive-navbar.less | 189 - .../bootstrap/less/responsive-utilities.less | 59 - .../bootstrap/less/responsive.less | 48 - .../bootstrap/less/scaffolding.less | 53 - .../bootstrap/less/sprites.less | 197 - .../bootstrap/less/tables.less | 244 - .../bootstrap/less/tests/buttons.html | 139 - .../bootstrap/less/tests/css-tests.css | 150 - .../bootstrap/less/tests/css-tests.html | 1399 - .../less/tests/forms-responsive.html | 71 - .../bootstrap/less/tests/forms.html | 179 - .../less/tests/navbar-fixed-top.html | 104 - .../less/tests/navbar-static-top.html | 107 - .../bootstrap/less/tests/navbar.html | 107 - .../bootstrap/less/thumbnails.less | 53 - .../bootstrap/less/tooltip.less | 70 - .../bower_components/bootstrap/less/type.less | 247 - .../bootstrap/less/utilities.less | 30 - .../bootstrap/less/variables.less | 301 - .../bootstrap/less/wells.less | 29 - .../bower_components/bootstrap/package.json | 26 - .../bower_components/jquery/.bower.json | 37 - .../bower_components/jquery/MIT-LICENSE.txt | 21 - .../webapp/bower_components/jquery/bower.json | 27 - .../bower_components/jquery/dist/jquery.js | 9205 ---- .../jquery/dist/jquery.min.js | 5 - .../jquery/dist/jquery.min.map | 1 - .../bower_components/jquery/src/ajax.js | 786 - .../bower_components/jquery/src/ajax/jsonp.js | 89 - .../bower_components/jquery/src/ajax/load.js | 75 - .../jquery/src/ajax/parseJSON.js | 13 - .../jquery/src/ajax/parseXML.js | 28 - .../jquery/src/ajax/script.js | 64 - .../jquery/src/ajax/var/nonce.js | 5 - .../jquery/src/ajax/var/rquery.js | 3 - .../bower_components/jquery/src/ajax/xhr.js | 136 - .../bower_components/jquery/src/attributes.js | 11 - .../jquery/src/attributes/attr.js | 141 - .../jquery/src/attributes/classes.js | 158 - .../jquery/src/attributes/prop.js | 94 - .../jquery/src/attributes/support.js | 35 - .../jquery/src/attributes/val.js | 161 - .../bower_components/jquery/src/callbacks.js | 205 - .../bower_components/jquery/src/core.js | 497 - .../jquery/src/core/access.js | 60 - .../bower_components/jquery/src/core/init.js | 123 - .../jquery/src/core/parseHTML.js | 39 - .../bower_components/jquery/src/core/ready.js | 97 - .../jquery/src/core/var/rsingleTag.js | 4 - .../webapp/bower_components/jquery/src/css.js | 450 - .../jquery/src/css/addGetHookIf.js | 22 - .../bower_components/jquery/src/css/curCSS.js | 57 - .../jquery/src/css/defaultDisplay.js | 70 - .../jquery/src/css/hiddenVisibleSelectors.js | 15 - .../jquery/src/css/support.js | 96 - .../bower_components/jquery/src/css/swap.js | 28 - .../jquery/src/css/var/cssExpand.js | 3 - .../jquery/src/css/var/getStyles.js | 12 - .../jquery/src/css/var/isHidden.js | 13 - .../jquery/src/css/var/rmargin.js | 3 - .../jquery/src/css/var/rnumnonpx.js | 5 - .../bower_components/jquery/src/data.js | 178 - .../bower_components/jquery/src/data/Data.js | 181 - .../jquery/src/data/accepts.js | 20 - .../jquery/src/data/var/data_priv.js | 5 - .../jquery/src/data/var/data_user.js | 5 - .../bower_components/jquery/src/deferred.js | 149 - .../bower_components/jquery/src/deprecated.js | 13 - .../bower_components/jquery/src/dimensions.js | 50 - .../bower_components/jquery/src/effects.js | 648 - .../jquery/src/effects/Tween.js | 114 - .../jquery/src/effects/animatedSelector.js | 13 - .../bower_components/jquery/src/event.js | 868 - .../bower_components/jquery/src/event/ajax.js | 13 - .../jquery/src/event/alias.js | 39 - .../jquery/src/event/support.js | 9 - .../jquery/src/exports/amd.js | 24 - .../jquery/src/exports/global.js | 32 - .../bower_components/jquery/src/intro.js | 44 - .../bower_components/jquery/src/jquery.js | 37 - .../jquery/src/manipulation.js | 580 - .../jquery/src/manipulation/_evalUrl.js | 18 - .../jquery/src/manipulation/support.js | 32 - .../src/manipulation/var/rcheckableType.js | 3 - .../bower_components/jquery/src/offset.js | 207 - .../bower_components/jquery/src/outro.js | 1 - .../bower_components/jquery/src/queue.js | 142 - .../jquery/src/queue/delay.js | 22 - .../jquery/src/selector-native.js | 172 - .../jquery/src/selector-sizzle.js | 14 - .../bower_components/jquery/src/selector.js | 1 - .../bower_components/jquery/src/serialize.js | 111 - .../jquery/src/sizzle/dist/sizzle.js | 2067 - .../jquery/src/sizzle/dist/sizzle.min.js | 3 - .../jquery/src/sizzle/dist/sizzle.min.map | 1 - .../bower_components/jquery/src/traversing.js | 199 - .../jquery/src/traversing/findFilter.js | 100 - .../src/traversing/var/rneedsContext.js | 6 - .../bower_components/jquery/src/var/arr.js | 3 - .../jquery/src/var/class2type.js | 4 - .../bower_components/jquery/src/var/concat.js | 5 - .../bower_components/jquery/src/var/hasOwn.js | 5 - .../jquery/src/var/indexOf.js | 5 - .../bower_components/jquery/src/var/pnum.js | 3 - .../bower_components/jquery/src/var/push.js | 5 - .../jquery/src/var/rnotwhite.js | 3 - .../bower_components/jquery/src/var/slice.js | 5 - .../jquery/src/var/strundefined.js | 3 - .../jquery/src/var/support.js | 4 - .../jquery/src/var/toString.js | 5 - .../bower_components/jquery/src/wrap.js | 79 - .../webapp/bower_components/json3/.bower.json | 47 - .../bower_components/json3/CHANGELOG.md | 44 - .../bower_components/json3/CONTRIBUTING.md | 3 - .../webapp/bower_components/json3/LICENSE | 20 - .../webapp/bower_components/json3/README.md | 152 - .../webapp/bower_components/json3/bower.json | 38 - .../bower_components/json3/lib/json3.js | 902 - .../bower_components/json3/lib/json3.min.js | 17 - src/main/webapp/index.html | 46 +- src/main/webapp/scripts/app/app.js | 154 +- .../scripts/app/fragments/bodyHeader.html | 24 - .../webapp/scripts/app/fragments/footer.html | 2 +- .../webapp/scripts/app/fragments/nav.html | 30 + .../webapp/scripts/app/fragments/welcome.html | 1 + .../webapp/scripts/app/main/MainController.js | 9 - src/main/webapp/scripts/app/main/main.html | 3 - .../owner-details/owner-details.component.js | 16 + .../owner-details/owner-details.template.html | 69 + .../app/owner-form/owner-form.component.js | 41 + .../app/owner-form/owner-form.template.html | 44 + .../{owner => owner-list}/OwnerController.js | 2 - .../app/owner-list/owner-list.component.js | 15 + .../app/owner-list/owner-list.template.html | 24 + .../{owner => owner-list}/ownerDetail.html | 0 .../app/{owner => owner-list}/ownerForm.html | 0 .../ownerSearchForm.html | 0 .../webapp/scripts/app/owner/ownerList.html | 26 - .../app/pet-form/pet-form.component.js | 63 + .../app/pet-form/pet-form.template.html | 43 + .../app/vet-list/vet-list.component.js | 16 + .../app/vet-list/vet-list.template.html | 15 + .../webapp/scripts/app/vet/VetController.js | 13 - src/main/webapp/scripts/app/vet/vetList.html | 16 - .../service/AbstractClinicServiceTests.java | 18 +- 372 files changed, 529 insertions(+), 144446 deletions(-) delete mode 100644 src/main/webapp/WEB-INF/jsp/pets/createOrUpdateVisitForm.jsp delete mode 100644 src/main/webapp/WEB-INF/no-spring-config-files-there.txt delete mode 100644 src/main/webapp/WEB-INF/tags/inputField.tag delete mode 100644 src/main/webapp/WEB-INF/tags/selectField.tag delete mode 100644 src/main/webapp/bower_components/angular-mocks/.bower.json delete mode 100644 src/main/webapp/bower_components/angular-mocks/README.md delete mode 100644 src/main/webapp/bower_components/angular-mocks/angular-mocks.js delete mode 100644 src/main/webapp/bower_components/angular-mocks/bower.json delete mode 100644 src/main/webapp/bower_components/angular-mocks/package.json delete mode 100644 src/main/webapp/bower_components/angular-resource/.bower.json delete mode 100644 src/main/webapp/bower_components/angular-resource/README.md delete mode 100644 src/main/webapp/bower_components/angular-resource/angular-resource.js delete mode 100644 src/main/webapp/bower_components/angular-resource/angular-resource.min.js delete mode 100644 src/main/webapp/bower_components/angular-resource/angular-resource.min.js.map delete mode 100644 src/main/webapp/bower_components/angular-resource/bower.json delete mode 100644 src/main/webapp/bower_components/angular-resource/package.json delete mode 100644 src/main/webapp/bower_components/angular-scenario/.bower.json delete mode 100644 src/main/webapp/bower_components/angular-scenario/README.md delete mode 100644 src/main/webapp/bower_components/angular-scenario/angular-scenario.js delete mode 100644 src/main/webapp/bower_components/angular-scenario/bower.json delete mode 100644 src/main/webapp/bower_components/angular-scenario/jstd-scenario-adapter-config.js delete mode 100644 src/main/webapp/bower_components/angular-scenario/jstd-scenario-adapter.js delete mode 100644 src/main/webapp/bower_components/angular-scenario/package.json delete mode 100644 src/main/webapp/bower_components/angular-ui-router/.bower.json delete mode 100644 src/main/webapp/bower_components/angular-ui-router/CHANGELOG.md delete mode 100644 src/main/webapp/bower_components/angular-ui-router/CONTRIBUTING.md delete mode 100644 src/main/webapp/bower_components/angular-ui-router/LICENSE delete mode 100644 src/main/webapp/bower_components/angular-ui-router/README.md delete mode 100644 src/main/webapp/bower_components/angular-ui-router/api/angular-ui-router.d.ts delete mode 100644 src/main/webapp/bower_components/angular-ui-router/bower.json delete mode 100644 src/main/webapp/bower_components/angular-ui-router/release/angular-ui-router.js delete mode 100644 src/main/webapp/bower_components/angular-ui-router/release/angular-ui-router.min.js delete mode 100644 src/main/webapp/bower_components/angular-ui-router/src/common.js delete mode 100644 src/main/webapp/bower_components/angular-ui-router/src/resolve.js delete mode 100644 src/main/webapp/bower_components/angular-ui-router/src/state.js delete mode 100644 src/main/webapp/bower_components/angular-ui-router/src/stateDirectives.js delete mode 100644 src/main/webapp/bower_components/angular-ui-router/src/stateFilters.js delete mode 100644 src/main/webapp/bower_components/angular-ui-router/src/templateFactory.js delete mode 100644 src/main/webapp/bower_components/angular-ui-router/src/urlMatcherFactory.js delete mode 100644 src/main/webapp/bower_components/angular-ui-router/src/urlRouter.js delete mode 100644 src/main/webapp/bower_components/angular-ui-router/src/view.js delete mode 100644 src/main/webapp/bower_components/angular-ui-router/src/viewDirective.js delete mode 100644 src/main/webapp/bower_components/angular-ui-router/src/viewScroll.js delete mode 100644 src/main/webapp/bower_components/angular/.bower.json delete mode 100644 src/main/webapp/bower_components/angular/README.md delete mode 100644 src/main/webapp/bower_components/angular/angular-csp.css delete mode 100644 src/main/webapp/bower_components/angular/angular.js delete mode 100644 src/main/webapp/bower_components/angular/angular.min.js delete mode 100644 src/main/webapp/bower_components/angular/angular.min.js.gzip delete mode 100644 src/main/webapp/bower_components/angular/angular.min.js.map delete mode 100644 src/main/webapp/bower_components/angular/bower.json delete mode 100644 src/main/webapp/bower_components/angular/package.json delete mode 100644 src/main/webapp/bower_components/bootstrap/.bower.json delete mode 100644 src/main/webapp/bower_components/bootstrap/.gitignore delete mode 100644 src/main/webapp/bower_components/bootstrap/.travis.yml delete mode 100644 src/main/webapp/bower_components/bootstrap/CHANGELOG.md delete mode 100644 src/main/webapp/bower_components/bootstrap/CONTRIBUTING.md delete mode 100644 src/main/webapp/bower_components/bootstrap/LICENSE delete mode 100644 src/main/webapp/bower_components/bootstrap/Makefile delete mode 100644 src/main/webapp/bower_components/bootstrap/README.md delete mode 100644 src/main/webapp/bower_components/bootstrap/component.json delete mode 100644 src/main/webapp/bower_components/bootstrap/composer.json delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/css/bootstrap-responsive.css delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/css/bootstrap.css delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/css/docs.css delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/ico/apple-touch-icon-114-precomposed.png delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/ico/apple-touch-icon-144-precomposed.png delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/ico/apple-touch-icon-57-precomposed.png delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/ico/apple-touch-icon-72-precomposed.png delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/ico/favicon.ico delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/ico/favicon.png delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/img/bootstrap-docs-readme.png delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/img/bootstrap-mdo-sfmoma-01.jpg delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/img/bootstrap-mdo-sfmoma-02.jpg delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/img/bootstrap-mdo-sfmoma-03.jpg delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/img/bs-docs-bootstrap-features.png delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/img/bs-docs-masthead-pattern.png delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/img/bs-docs-responsive-illustrations.png delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/img/bs-docs-twitter-github.png delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/img/example-sites/8020select.png delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/img/example-sites/adoptahydrant.png delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/img/example-sites/breakingnews.png delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/img/example-sites/fleetio.png delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/img/example-sites/gathercontent.png delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/img/example-sites/jshint.png delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/img/example-sites/kippt.png delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/img/example-sites/soundready.png delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/img/examples/bootstrap-example-carousel.png delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/img/examples/bootstrap-example-fluid.png delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/img/examples/bootstrap-example-justified-nav.png delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/img/examples/bootstrap-example-marketing-narrow.png delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/img/examples/bootstrap-example-marketing.png delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/img/examples/bootstrap-example-signin.png delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/img/examples/bootstrap-example-starter.png delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/img/examples/bootstrap-example-sticky-footer.png delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/img/examples/browser-icon-chrome.png delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/img/examples/browser-icon-firefox.png delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/img/examples/browser-icon-safari.png delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/img/examples/slide-01.jpg delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/img/examples/slide-02.jpg delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/img/examples/slide-03.jpg delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/img/glyphicons-halflings-white.png delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/img/glyphicons-halflings.png delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/img/grid-baseline-20px.png delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/img/less-logo-large.png delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/img/responsive-illustrations.png delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/js/README.md delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/js/application.js delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap-affix.js delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap-alert.js delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap-button.js delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap-carousel.js delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap-collapse.js delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap-dropdown.js delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap-modal.js delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap-popover.js delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap-scrollspy.js delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap-tab.js delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap-tooltip.js delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap-transition.js delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap-typeahead.js delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap.js delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap.min.js delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/js/google-code-prettify/prettify.css delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/js/google-code-prettify/prettify.js delete mode 100755 src/main/webapp/bower_components/bootstrap/docs/assets/js/holder/holder.js delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/js/html5shiv.js delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/assets/js/jquery.js delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/base-css.html delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/build/index.js delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/build/package.json delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/components.html delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/customize.html delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/examples/carousel.html delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/examples/fluid.html delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/examples/hero.html delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/examples/justified-nav.html delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/examples/marketing-narrow.html delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/examples/signin.html delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/examples/starter-template.html delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/examples/sticky-footer-navbar.html delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/examples/sticky-footer.html delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/extend.html delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/getting-started.html delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/index.html delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/javascript.html delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/scaffolding.html delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/templates/layout.mustache delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/templates/pages/base-css.mustache delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/templates/pages/components.mustache delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/templates/pages/customize.mustache delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/templates/pages/extend.mustache delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/templates/pages/getting-started.mustache delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/templates/pages/index.mustache delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/templates/pages/javascript.mustache delete mode 100644 src/main/webapp/bower_components/bootstrap/docs/templates/pages/scaffolding.mustache delete mode 100644 src/main/webapp/bower_components/bootstrap/img/glyphicons-halflings-white.png delete mode 100644 src/main/webapp/bower_components/bootstrap/img/glyphicons-halflings.png delete mode 100644 src/main/webapp/bower_components/bootstrap/js/.jshintrc delete mode 100644 src/main/webapp/bower_components/bootstrap/js/bootstrap-affix.js delete mode 100644 src/main/webapp/bower_components/bootstrap/js/bootstrap-alert.js delete mode 100644 src/main/webapp/bower_components/bootstrap/js/bootstrap-button.js delete mode 100644 src/main/webapp/bower_components/bootstrap/js/bootstrap-carousel.js delete mode 100644 src/main/webapp/bower_components/bootstrap/js/bootstrap-collapse.js delete mode 100644 src/main/webapp/bower_components/bootstrap/js/bootstrap-dropdown.js delete mode 100644 src/main/webapp/bower_components/bootstrap/js/bootstrap-modal.js delete mode 100644 src/main/webapp/bower_components/bootstrap/js/bootstrap-popover.js delete mode 100644 src/main/webapp/bower_components/bootstrap/js/bootstrap-scrollspy.js delete mode 100644 src/main/webapp/bower_components/bootstrap/js/bootstrap-tab.js delete mode 100644 src/main/webapp/bower_components/bootstrap/js/bootstrap-tooltip.js delete mode 100644 src/main/webapp/bower_components/bootstrap/js/bootstrap-transition.js delete mode 100644 src/main/webapp/bower_components/bootstrap/js/bootstrap-typeahead.js delete mode 100644 src/main/webapp/bower_components/bootstrap/js/tests/index.html delete mode 100644 src/main/webapp/bower_components/bootstrap/js/tests/phantom.js delete mode 100644 src/main/webapp/bower_components/bootstrap/js/tests/server.js delete mode 100644 src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-affix.js delete mode 100644 src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-alert.js delete mode 100644 src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-button.js delete mode 100644 src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-carousel.js delete mode 100644 src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-collapse.js delete mode 100644 src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-dropdown.js delete mode 100644 src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-modal.js delete mode 100644 src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-phantom.js delete mode 100644 src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-popover.js delete mode 100644 src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-scrollspy.js delete mode 100644 src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-tab.js delete mode 100644 src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-tooltip.js delete mode 100644 src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-transition.js delete mode 100644 src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-typeahead.js delete mode 100644 src/main/webapp/bower_components/bootstrap/js/tests/vendor/jquery.js delete mode 100644 src/main/webapp/bower_components/bootstrap/js/tests/vendor/qunit.css delete mode 100644 src/main/webapp/bower_components/bootstrap/js/tests/vendor/qunit.js delete mode 100644 src/main/webapp/bower_components/bootstrap/less/accordion.less delete mode 100644 src/main/webapp/bower_components/bootstrap/less/alerts.less delete mode 100644 src/main/webapp/bower_components/bootstrap/less/bootstrap.less delete mode 100644 src/main/webapp/bower_components/bootstrap/less/breadcrumbs.less delete mode 100644 src/main/webapp/bower_components/bootstrap/less/button-groups.less delete mode 100644 src/main/webapp/bower_components/bootstrap/less/buttons.less delete mode 100644 src/main/webapp/bower_components/bootstrap/less/carousel.less delete mode 100644 src/main/webapp/bower_components/bootstrap/less/close.less delete mode 100644 src/main/webapp/bower_components/bootstrap/less/code.less delete mode 100644 src/main/webapp/bower_components/bootstrap/less/component-animations.less delete mode 100644 src/main/webapp/bower_components/bootstrap/less/dropdowns.less delete mode 100644 src/main/webapp/bower_components/bootstrap/less/forms.less delete mode 100644 src/main/webapp/bower_components/bootstrap/less/grid.less delete mode 100644 src/main/webapp/bower_components/bootstrap/less/hero-unit.less delete mode 100644 src/main/webapp/bower_components/bootstrap/less/labels-badges.less delete mode 100644 src/main/webapp/bower_components/bootstrap/less/layouts.less delete mode 100644 src/main/webapp/bower_components/bootstrap/less/media.less delete mode 100644 src/main/webapp/bower_components/bootstrap/less/mixins.less delete mode 100644 src/main/webapp/bower_components/bootstrap/less/modals.less delete mode 100644 src/main/webapp/bower_components/bootstrap/less/navbar.less delete mode 100644 src/main/webapp/bower_components/bootstrap/less/navs.less delete mode 100644 src/main/webapp/bower_components/bootstrap/less/pager.less delete mode 100644 src/main/webapp/bower_components/bootstrap/less/pagination.less delete mode 100644 src/main/webapp/bower_components/bootstrap/less/popovers.less delete mode 100644 src/main/webapp/bower_components/bootstrap/less/progress-bars.less delete mode 100644 src/main/webapp/bower_components/bootstrap/less/reset.less delete mode 100644 src/main/webapp/bower_components/bootstrap/less/responsive-1200px-min.less delete mode 100644 src/main/webapp/bower_components/bootstrap/less/responsive-767px-max.less delete mode 100644 src/main/webapp/bower_components/bootstrap/less/responsive-768px-979px.less delete mode 100644 src/main/webapp/bower_components/bootstrap/less/responsive-navbar.less delete mode 100644 src/main/webapp/bower_components/bootstrap/less/responsive-utilities.less delete mode 100644 src/main/webapp/bower_components/bootstrap/less/responsive.less delete mode 100644 src/main/webapp/bower_components/bootstrap/less/scaffolding.less delete mode 100644 src/main/webapp/bower_components/bootstrap/less/sprites.less delete mode 100644 src/main/webapp/bower_components/bootstrap/less/tables.less delete mode 100644 src/main/webapp/bower_components/bootstrap/less/tests/buttons.html delete mode 100644 src/main/webapp/bower_components/bootstrap/less/tests/css-tests.css delete mode 100644 src/main/webapp/bower_components/bootstrap/less/tests/css-tests.html delete mode 100644 src/main/webapp/bower_components/bootstrap/less/tests/forms-responsive.html delete mode 100644 src/main/webapp/bower_components/bootstrap/less/tests/forms.html delete mode 100644 src/main/webapp/bower_components/bootstrap/less/tests/navbar-fixed-top.html delete mode 100644 src/main/webapp/bower_components/bootstrap/less/tests/navbar-static-top.html delete mode 100644 src/main/webapp/bower_components/bootstrap/less/tests/navbar.html delete mode 100644 src/main/webapp/bower_components/bootstrap/less/thumbnails.less delete mode 100644 src/main/webapp/bower_components/bootstrap/less/tooltip.less delete mode 100644 src/main/webapp/bower_components/bootstrap/less/type.less delete mode 100644 src/main/webapp/bower_components/bootstrap/less/utilities.less delete mode 100644 src/main/webapp/bower_components/bootstrap/less/variables.less delete mode 100644 src/main/webapp/bower_components/bootstrap/less/wells.less delete mode 100644 src/main/webapp/bower_components/bootstrap/package.json delete mode 100644 src/main/webapp/bower_components/jquery/.bower.json delete mode 100644 src/main/webapp/bower_components/jquery/MIT-LICENSE.txt delete mode 100644 src/main/webapp/bower_components/jquery/bower.json delete mode 100644 src/main/webapp/bower_components/jquery/dist/jquery.js delete mode 100644 src/main/webapp/bower_components/jquery/dist/jquery.min.js delete mode 100644 src/main/webapp/bower_components/jquery/dist/jquery.min.map delete mode 100644 src/main/webapp/bower_components/jquery/src/ajax.js delete mode 100644 src/main/webapp/bower_components/jquery/src/ajax/jsonp.js delete mode 100644 src/main/webapp/bower_components/jquery/src/ajax/load.js delete mode 100644 src/main/webapp/bower_components/jquery/src/ajax/parseJSON.js delete mode 100644 src/main/webapp/bower_components/jquery/src/ajax/parseXML.js delete mode 100644 src/main/webapp/bower_components/jquery/src/ajax/script.js delete mode 100644 src/main/webapp/bower_components/jquery/src/ajax/var/nonce.js delete mode 100644 src/main/webapp/bower_components/jquery/src/ajax/var/rquery.js delete mode 100644 src/main/webapp/bower_components/jquery/src/ajax/xhr.js delete mode 100644 src/main/webapp/bower_components/jquery/src/attributes.js delete mode 100644 src/main/webapp/bower_components/jquery/src/attributes/attr.js delete mode 100644 src/main/webapp/bower_components/jquery/src/attributes/classes.js delete mode 100644 src/main/webapp/bower_components/jquery/src/attributes/prop.js delete mode 100644 src/main/webapp/bower_components/jquery/src/attributes/support.js delete mode 100644 src/main/webapp/bower_components/jquery/src/attributes/val.js delete mode 100644 src/main/webapp/bower_components/jquery/src/callbacks.js delete mode 100644 src/main/webapp/bower_components/jquery/src/core.js delete mode 100644 src/main/webapp/bower_components/jquery/src/core/access.js delete mode 100644 src/main/webapp/bower_components/jquery/src/core/init.js delete mode 100644 src/main/webapp/bower_components/jquery/src/core/parseHTML.js delete mode 100644 src/main/webapp/bower_components/jquery/src/core/ready.js delete mode 100644 src/main/webapp/bower_components/jquery/src/core/var/rsingleTag.js delete mode 100644 src/main/webapp/bower_components/jquery/src/css.js delete mode 100644 src/main/webapp/bower_components/jquery/src/css/addGetHookIf.js delete mode 100644 src/main/webapp/bower_components/jquery/src/css/curCSS.js delete mode 100644 src/main/webapp/bower_components/jquery/src/css/defaultDisplay.js delete mode 100644 src/main/webapp/bower_components/jquery/src/css/hiddenVisibleSelectors.js delete mode 100644 src/main/webapp/bower_components/jquery/src/css/support.js delete mode 100644 src/main/webapp/bower_components/jquery/src/css/swap.js delete mode 100644 src/main/webapp/bower_components/jquery/src/css/var/cssExpand.js delete mode 100644 src/main/webapp/bower_components/jquery/src/css/var/getStyles.js delete mode 100644 src/main/webapp/bower_components/jquery/src/css/var/isHidden.js delete mode 100644 src/main/webapp/bower_components/jquery/src/css/var/rmargin.js delete mode 100644 src/main/webapp/bower_components/jquery/src/css/var/rnumnonpx.js delete mode 100644 src/main/webapp/bower_components/jquery/src/data.js delete mode 100644 src/main/webapp/bower_components/jquery/src/data/Data.js delete mode 100644 src/main/webapp/bower_components/jquery/src/data/accepts.js delete mode 100644 src/main/webapp/bower_components/jquery/src/data/var/data_priv.js delete mode 100644 src/main/webapp/bower_components/jquery/src/data/var/data_user.js delete mode 100644 src/main/webapp/bower_components/jquery/src/deferred.js delete mode 100644 src/main/webapp/bower_components/jquery/src/deprecated.js delete mode 100644 src/main/webapp/bower_components/jquery/src/dimensions.js delete mode 100644 src/main/webapp/bower_components/jquery/src/effects.js delete mode 100644 src/main/webapp/bower_components/jquery/src/effects/Tween.js delete mode 100644 src/main/webapp/bower_components/jquery/src/effects/animatedSelector.js delete mode 100644 src/main/webapp/bower_components/jquery/src/event.js delete mode 100644 src/main/webapp/bower_components/jquery/src/event/ajax.js delete mode 100644 src/main/webapp/bower_components/jquery/src/event/alias.js delete mode 100644 src/main/webapp/bower_components/jquery/src/event/support.js delete mode 100644 src/main/webapp/bower_components/jquery/src/exports/amd.js delete mode 100644 src/main/webapp/bower_components/jquery/src/exports/global.js delete mode 100644 src/main/webapp/bower_components/jquery/src/intro.js delete mode 100644 src/main/webapp/bower_components/jquery/src/jquery.js delete mode 100644 src/main/webapp/bower_components/jquery/src/manipulation.js delete mode 100644 src/main/webapp/bower_components/jquery/src/manipulation/_evalUrl.js delete mode 100644 src/main/webapp/bower_components/jquery/src/manipulation/support.js delete mode 100644 src/main/webapp/bower_components/jquery/src/manipulation/var/rcheckableType.js delete mode 100644 src/main/webapp/bower_components/jquery/src/offset.js delete mode 100644 src/main/webapp/bower_components/jquery/src/outro.js delete mode 100644 src/main/webapp/bower_components/jquery/src/queue.js delete mode 100644 src/main/webapp/bower_components/jquery/src/queue/delay.js delete mode 100644 src/main/webapp/bower_components/jquery/src/selector-native.js delete mode 100644 src/main/webapp/bower_components/jquery/src/selector-sizzle.js delete mode 100644 src/main/webapp/bower_components/jquery/src/selector.js delete mode 100644 src/main/webapp/bower_components/jquery/src/serialize.js delete mode 100644 src/main/webapp/bower_components/jquery/src/sizzle/dist/sizzle.js delete mode 100644 src/main/webapp/bower_components/jquery/src/sizzle/dist/sizzle.min.js delete mode 100644 src/main/webapp/bower_components/jquery/src/sizzle/dist/sizzle.min.map delete mode 100644 src/main/webapp/bower_components/jquery/src/traversing.js delete mode 100644 src/main/webapp/bower_components/jquery/src/traversing/findFilter.js delete mode 100644 src/main/webapp/bower_components/jquery/src/traversing/var/rneedsContext.js delete mode 100644 src/main/webapp/bower_components/jquery/src/var/arr.js delete mode 100644 src/main/webapp/bower_components/jquery/src/var/class2type.js delete mode 100644 src/main/webapp/bower_components/jquery/src/var/concat.js delete mode 100644 src/main/webapp/bower_components/jquery/src/var/hasOwn.js delete mode 100644 src/main/webapp/bower_components/jquery/src/var/indexOf.js delete mode 100644 src/main/webapp/bower_components/jquery/src/var/pnum.js delete mode 100644 src/main/webapp/bower_components/jquery/src/var/push.js delete mode 100644 src/main/webapp/bower_components/jquery/src/var/rnotwhite.js delete mode 100644 src/main/webapp/bower_components/jquery/src/var/slice.js delete mode 100644 src/main/webapp/bower_components/jquery/src/var/strundefined.js delete mode 100644 src/main/webapp/bower_components/jquery/src/var/support.js delete mode 100644 src/main/webapp/bower_components/jquery/src/var/toString.js delete mode 100644 src/main/webapp/bower_components/jquery/src/wrap.js delete mode 100644 src/main/webapp/bower_components/json3/.bower.json delete mode 100644 src/main/webapp/bower_components/json3/CHANGELOG.md delete mode 100644 src/main/webapp/bower_components/json3/CONTRIBUTING.md delete mode 100644 src/main/webapp/bower_components/json3/LICENSE delete mode 100644 src/main/webapp/bower_components/json3/README.md delete mode 100644 src/main/webapp/bower_components/json3/bower.json delete mode 100644 src/main/webapp/bower_components/json3/lib/json3.js delete mode 100644 src/main/webapp/bower_components/json3/lib/json3.min.js delete mode 100644 src/main/webapp/scripts/app/fragments/bodyHeader.html create mode 100644 src/main/webapp/scripts/app/fragments/nav.html create mode 100644 src/main/webapp/scripts/app/fragments/welcome.html delete mode 100644 src/main/webapp/scripts/app/main/MainController.js delete mode 100644 src/main/webapp/scripts/app/main/main.html create mode 100644 src/main/webapp/scripts/app/owner-details/owner-details.component.js create mode 100644 src/main/webapp/scripts/app/owner-details/owner-details.template.html create mode 100644 src/main/webapp/scripts/app/owner-form/owner-form.component.js create mode 100644 src/main/webapp/scripts/app/owner-form/owner-form.template.html rename src/main/webapp/scripts/app/{owner => owner-list}/OwnerController.js (99%) create mode 100644 src/main/webapp/scripts/app/owner-list/owner-list.component.js create mode 100644 src/main/webapp/scripts/app/owner-list/owner-list.template.html rename src/main/webapp/scripts/app/{owner => owner-list}/ownerDetail.html (100%) rename src/main/webapp/scripts/app/{owner => owner-list}/ownerForm.html (100%) rename src/main/webapp/scripts/app/{owner => owner-list}/ownerSearchForm.html (100%) delete mode 100644 src/main/webapp/scripts/app/owner/ownerList.html create mode 100644 src/main/webapp/scripts/app/pet-form/pet-form.component.js create mode 100644 src/main/webapp/scripts/app/pet-form/pet-form.template.html create mode 100644 src/main/webapp/scripts/app/vet-list/vet-list.component.js create mode 100644 src/main/webapp/scripts/app/vet-list/vet-list.template.html delete mode 100644 src/main/webapp/scripts/app/vet/VetController.js delete mode 100644 src/main/webapp/scripts/app/vet/vetList.html diff --git a/pom.xml b/pom.xml index adb51971..e8383478 100644 --- a/pom.xml +++ b/pom.xml @@ -65,6 +65,18 @@ <scope>provided</scope> </dependency> + <dependency> + <groupId>org.webjars</groupId> + <artifactId>bootstrap</artifactId> + <version>3.3.7</version> + </dependency> + + <dependency> + <groupId>org.webjars</groupId> + <artifactId>jquery</artifactId> + <version>3.1.0</version> + </dependency> + <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> diff --git a/src/main/java/org/springframework/samples/petclinic/repository/OwnerRepository.java b/src/main/java/org/springframework/samples/petclinic/repository/OwnerRepository.java index 841d0bcd..4e0c7c4a 100644 --- a/src/main/java/org/springframework/samples/petclinic/repository/OwnerRepository.java +++ b/src/main/java/org/springframework/samples/petclinic/repository/OwnerRepository.java @@ -18,6 +18,7 @@ package org.springframework.samples.petclinic.repository; import java.util.Collection; import org.springframework.dao.DataAccessException; +import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.Repository; import org.springframework.data.repository.query.Param; @@ -33,31 +34,4 @@ import org.springframework.samples.petclinic.model.Owner; * @author Sam Brannen * @author Michael Isvy */ -public interface OwnerRepository extends Repository<Owner, Integer> { - - /** - * Retrieve {@link Owner}s from the data store by last name, returning all owners - * whose last name <i>starts</i> with the given name. - * @param lastName Value to search for - * @return a Collection of matching {@link Owner}s (or an empty Collection if none - * found) - */ - @Query("SELECT DISTINCT owner FROM Owner owner left join fetch owner.pets WHERE owner.lastName LIKE :lastName%") - Collection<Owner> findByLastName(@Param("lastName") String lastName); - - /** - * Retrieve an {@link Owner} from the data store by id. - * @param id the id to search for - * @return the {@link Owner} if found - */ - @Query("SELECT owner FROM Owner owner left join fetch owner.pets WHERE owner.id =:id") - Owner findById(@Param("id") int id); - - /** - * Save an {@link Owner} to the data store, either inserting or updating it. - * @param owner the {@link Owner} to save - */ - void save(Owner owner); - - -} +public interface OwnerRepository extends JpaRepository<Owner, Integer> { } diff --git a/src/main/java/org/springframework/samples/petclinic/service/ClinicService.java b/src/main/java/org/springframework/samples/petclinic/service/ClinicService.java index 93658212..d35e26bd 100644 --- a/src/main/java/org/springframework/samples/petclinic/service/ClinicService.java +++ b/src/main/java/org/springframework/samples/petclinic/service/ClinicService.java @@ -17,7 +17,6 @@ package org.springframework.samples.petclinic.service; import java.util.Collection; -import org.springframework.dao.DataAccessException; import org.springframework.samples.petclinic.model.Owner; import org.springframework.samples.petclinic.model.Pet; import org.springframework.samples.petclinic.model.PetType; @@ -32,20 +31,20 @@ import org.springframework.samples.petclinic.model.Visit; */ public interface ClinicService { - Collection<PetType> findPetTypes() throws DataAccessException; + Collection<PetType> findPetTypes(); - Owner findOwnerById(int id) throws DataAccessException; + Owner findOwnerById(int id); - Pet findPetById(int id) throws DataAccessException; + Pet findPetById(int id); - void savePet(Pet pet) throws DataAccessException; + void savePet(Pet pet); - void saveVisit(Visit visit) throws DataAccessException; + void saveVisit(Visit visit); - Collection<Vet> findVets() throws DataAccessException; + Collection<Vet> findVets(); - void saveOwner(Owner owner) throws DataAccessException; + void saveOwner(Owner owner); - Collection<Owner> findOwnerByLastName(String lastName) throws DataAccessException; + Collection<Owner> findAll(); } diff --git a/src/main/java/org/springframework/samples/petclinic/service/ClinicServiceImpl.java b/src/main/java/org/springframework/samples/petclinic/service/ClinicServiceImpl.java index 0d7ff4d0..59b76409 100644 --- a/src/main/java/org/springframework/samples/petclinic/service/ClinicServiceImpl.java +++ b/src/main/java/org/springframework/samples/petclinic/service/ClinicServiceImpl.java @@ -63,13 +63,12 @@ public class ClinicServiceImpl implements ClinicService { @Override @Transactional(readOnly = true) public Owner findOwnerById(int id) throws DataAccessException { - return ownerRepository.findById(id); + return ownerRepository.findOne(id); } - @Override @Transactional(readOnly = true) - public Collection<Owner> findOwnerByLastName(String lastName) throws DataAccessException { - return ownerRepository.findByLastName(lastName); + public Collection<Owner> findAll() throws DataAccessException { + return ownerRepository.findAll(); } @Override diff --git a/src/main/java/org/springframework/samples/petclinic/web/OwnerResource.java b/src/main/java/org/springframework/samples/petclinic/web/OwnerResource.java index 073cf80a..2c3a1d8d 100644 --- a/src/main/java/org/springframework/samples/petclinic/web/OwnerResource.java +++ b/src/main/java/org/springframework/samples/petclinic/web/OwnerResource.java @@ -22,12 +22,12 @@ import org.springframework.http.HttpStatus; import org.springframework.samples.petclinic.model.Owner; import org.springframework.samples.petclinic.service.ClinicService; import org.springframework.web.bind.WebDataBinder; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.InitBinder; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestController; @@ -79,20 +79,9 @@ public class OwnerResource { /** * Read List of Owners */ - @RequestMapping(value = "/owner/list", method = RequestMethod.GET) - public Collection<Owner> findOwnerCollection(@RequestParam("lastName") String ownerLastName) { - - if (ownerLastName == null) { - ownerLastName = ""; - } - - Collection<Owner> results = this.clinicService.findOwnerByLastName(ownerLastName); - if (results.isEmpty()) { - return null; - } - else { - return results; - } + @GetMapping("/owner/list") + public Collection<Owner> findAll() { + return clinicService.findAll(); } /** diff --git a/src/main/java/org/springframework/samples/petclinic/web/PetResource.java b/src/main/java/org/springframework/samples/petclinic/web/PetResource.java index c96b3571..8a93d338 100644 --- a/src/main/java/org/springframework/samples/petclinic/web/PetResource.java +++ b/src/main/java/org/springframework/samples/petclinic/web/PetResource.java @@ -15,27 +15,27 @@ */ package org.springframework.samples.petclinic.web; -import java.util.Date; -import java.util.Map; - +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; import lombok.Getter; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.format.annotation.DateTimeFormat; +import org.springframework.http.HttpStatus; import org.springframework.samples.petclinic.model.Owner; import org.springframework.samples.petclinic.model.Pet; import org.springframework.samples.petclinic.model.PetType; import org.springframework.samples.petclinic.service.ClinicService; -import org.springframework.validation.BindingResult; -import org.springframework.web.bind.WebDataBinder; import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.InitBinder; -import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestController; -import org.springframework.web.bind.support.SessionStatus; + +import javax.validation.constraints.Size; +import java.util.Date; +import java.util.Map; /** * @author Juergen Hoeller @@ -52,11 +52,6 @@ public class PetResource { this.clinicService = clinicService; } - @InitBinder - public void setAllowedFields(WebDataBinder dataBinder) { - dataBinder.setDisallowedFields("id"); - } - @GetMapping("/petTypes") Object getPetTypes() { return clinicService.findPetTypes(); @@ -71,16 +66,37 @@ public class PetResource { return "pets/createOrUpdatePetForm"; } - @PostMapping("/owners/{ownerId}/pets/new") - public String processCreationForm(@ModelAttribute("pet") Pet pet, BindingResult result, SessionStatus status) { - new PetValidator().validate(pet, result); - if (result.hasErrors()) { - return "pets/createOrUpdatePetForm"; - } else { - this.clinicService.savePet(pet); - status.setComplete(); - return "redirect:/owner/{ownerId}"; + @PostMapping("/owners/{ownerId}/pets") + @ResponseStatus(HttpStatus.NO_CONTENT) + public void processCreationForm( + @RequestBody PetRequest petRequest, + @PathVariable("ownerId") int ownerId) { + + Pet pet = new Pet(); + Owner owner = this.clinicService.findOwnerById(ownerId); + owner.addPet(pet); + + save(pet, petRequest); + } + + @PutMapping("/owners/{ownerId}/pets/{petId}") + @ResponseStatus(HttpStatus.NO_CONTENT) + public void processUpdateForm(@RequestBody PetRequest petRequest) { + save(clinicService.findPetById(petRequest.getId()), petRequest); + } + + private void save(Pet pet, PetRequest petRequest) { + + pet.setName(petRequest.getName()); + pet.setBirthDate(petRequest.getBirthDate()); + + for (PetType petType : clinicService.findPetTypes()) { + if (petType.getId() == petRequest.getTypeId()) { + pet.setType(petType); + } } + + clinicService.savePet(pet); } @GetMapping("/owner/*/pet/{petId}") @@ -89,17 +105,14 @@ public class PetResource { return new PetDetails(pet); } - @RequestMapping(value = "/owners/{ownerId}/pets/{petId}/edit", method = {RequestMethod.PUT, RequestMethod.POST}) - public String processUpdateForm(@ModelAttribute("pet") Pet pet, BindingResult result, SessionStatus status) { - // we're not using @Valid annotation here because it is easier to define such validation rule in Java - new PetValidator().validate(pet, result); - if (result.hasErrors()) { - return "pets/createOrUpdatePetForm"; - } else { - this.clinicService.savePet(pet); - status.setComplete(); - return "redirect:/owners/{ownerId}"; - } + @Data + static class PetRequest { + int id; + @JsonFormat(pattern = "yyyy-MM-dd") + Date birthDate; + @Size(min = 1) + String name; + int typeId; } @Getter diff --git a/src/main/webapp/WEB-INF/jsp/pets/createOrUpdateVisitForm.jsp b/src/main/webapp/WEB-INF/jsp/pets/createOrUpdateVisitForm.jsp deleted file mode 100644 index 85408dfe..00000000 --- a/src/main/webapp/WEB-INF/jsp/pets/createOrUpdateVisitForm.jsp +++ /dev/null @@ -1,73 +0,0 @@ -<!DOCTYPE html> - -<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> -<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> -<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> -<%@ taglib prefix="joda" uri="http://www.joda.org/joda/time/tags" %> -<%@ taglib prefix="petclinic" tagdir="/WEB-INF/tags" %> - - -<html lang="en"> - - - -<body> -<script> - $(function () { - $("#date").datepicker({ dateFormat: 'yy/mm/dd'}); - }); -</script> -<div class="container"> - <h2><c:if test="${visit['new']}">New </c:if>Visit</h2> - - <b>Pet</b> - <table class="table table-striped"> - <thead> - <tr> - <th>Name</th> - <th>Birth Date</th> - <th>Type</th> - <th>Owner</th> - </tr> - </thead> - <tr> - <td><c:out value="${visit.pet.name}"/></td> - <td><joda:format value="${visit.pet.birthDate}" pattern="yyyy/MM/dd"/></td> - <td><c:out value="${visit.pet.type.name}"/></td> - <td><c:out value="${visit.pet.owner.firstName} ${visit.pet.owner.lastName}"/></td> - </tr> - </table> - - <form:form modelAttribute="visit"> - - <petclinic:inputField label="date" name="date" /> - <petclinic:inputField label="description" name="description" /> - - <div class="form-actions"> - <input type="hidden" name="petId" value="${visit.pet.id}"/> - <button type="submit">Add Visit</button> - </div> - </form:form> - - <br/> - <b>Previous Visits</b> - <table style="width: 333px;"> - <tr> - <th>Date</th> - <th>Description</th> - </tr> - <c:forEach var="visit" items="${visit.pet.visits}"> - <c:if test="${!visit['new']}"> - <tr> - <td><joda:format value="${visit.date}" pattern="yyyy/MM/dd"/></td> - <td><c:out value="${visit.description}"/></td> - </tr> - </c:if> - </c:forEach> - </table> - -</div> -</body> - -</html> diff --git a/src/main/webapp/WEB-INF/no-spring-config-files-there.txt b/src/main/webapp/WEB-INF/no-spring-config-files-there.txt deleted file mode 100644 index 45fb7bf0..00000000 --- a/src/main/webapp/WEB-INF/no-spring-config-files-there.txt +++ /dev/null @@ -1,4 +0,0 @@ -All Spring config files (including Spring MVC ones) are inside src/main/resource. -There are mostly 2 reasons to that: -- All Spring config files are grouped into one single place -- It is simpler to reference them from inside JUnit tests \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/tags/inputField.tag b/src/main/webapp/WEB-INF/tags/inputField.tag deleted file mode 100644 index 796dc91c..00000000 --- a/src/main/webapp/WEB-INF/tags/inputField.tag +++ /dev/null @@ -1,19 +0,0 @@ -<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> -<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> -<%@ attribute name="name" required="true" rtexprvalue="true" - description="Name of corresponding property in bean object" %> -<%@ attribute name="label" required="true" rtexprvalue="true" - description="Label appears in red color if input is considered as invalid after submission" %> - -<spring:bind path="${name}"> - <c:set var="cssGroup" value="control-group ${status.error ? 'error' : '' }"/> - <div class="${cssGroup}"> - <label class="control-label">${label}</label> - - <div class="controls"> - <form:input path="${name}"/> - <span class="help-inline">${status.errorMessage}</span> - </div> - </div> -</spring:bind> \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/tags/selectField.tag b/src/main/webapp/WEB-INF/tags/selectField.tag deleted file mode 100644 index f93256ac..00000000 --- a/src/main/webapp/WEB-INF/tags/selectField.tag +++ /dev/null @@ -1,23 +0,0 @@ -<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> -<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> -<%@ attribute name="name" required="true" rtexprvalue="true" - description="Name of corresponding property in bean object" %> -<%@ attribute name="label" required="true" rtexprvalue="true" - description="Label appears in red color if input is considered as invalid after submission" %> -<%@ attribute name="names" required="true" rtexprvalue="true" type="java.util.List" - description="Names in the list" %> -<%@ attribute name="size" required="true" rtexprvalue="true" - description="Size of Select" %> - -<spring:bind path="${name}"> - <c:set var="cssGroup" value="control-group ${status.error ? 'error' : '' }"/> - <div class="${cssGroup}"> - <label class="control-label">${label}</label> - - <div class="controls"> - <form:select path="${name}" items="${names}" size="${size}"/> - <span class="help-inline">${status.errorMessage}</span> - </div> - </div> -</spring:bind> \ No newline at end of file diff --git a/src/main/webapp/bower_components/angular-mocks/.bower.json b/src/main/webapp/bower_components/angular-mocks/.bower.json deleted file mode 100644 index c2d3a35a..00000000 --- a/src/main/webapp/bower_components/angular-mocks/.bower.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "angular-mocks", - "version": "1.3.11", - "main": "./angular-mocks.js", - "ignore": [], - "dependencies": { - "angular": "1.3.11" - }, - "homepage": "https://github.com/angular/bower-angular-mocks", - "_release": "1.3.11", - "_resolution": { - "type": "version", - "tag": "v1.3.11", - "commit": "2457be05bbe0d16947e2a1a0add1798cbadd11d2" - }, - "_source": "git://github.com/angular/bower-angular-mocks.git", - "_target": "1.3.11", - "_originalSource": "angular-mocks" -} \ No newline at end of file diff --git a/src/main/webapp/bower_components/angular-mocks/README.md b/src/main/webapp/bower_components/angular-mocks/README.md deleted file mode 100644 index 1604ef88..00000000 --- a/src/main/webapp/bower_components/angular-mocks/README.md +++ /dev/null @@ -1,57 +0,0 @@ -# packaged angular-mocks - -This repo is for distribution on `npm` and `bower`. The source for this module is in the -[main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngMock). -Please file issues and pull requests against that repo. - -## Install - -You can install this package either with `npm` or with `bower`. - -### npm - -```shell -npm install angular-mocks -``` - -The mocks are then available at `node_modules/angular-mocks/angular-mocks.js`. - -Note that this package is not in CommonJS format, so doing `require('angular-mocks')` will -return `undefined`. - -### bower - -```shell -bower install angular-mocks -``` - -The mocks are then available at `bower_components/angular-mocks/angular-mocks.js`. - -## Documentation - -Documentation is available on the -[AngularJS docs site](https://docs.angularjs.org/guide/unit-testing). - -## License - -The MIT License - -Copyright (c) 2010-2012 Google, Inc. http://angularjs.org - -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/src/main/webapp/bower_components/angular-mocks/angular-mocks.js b/src/main/webapp/bower_components/angular-mocks/angular-mocks.js deleted file mode 100644 index 2a411cc3..00000000 --- a/src/main/webapp/bower_components/angular-mocks/angular-mocks.js +++ /dev/null @@ -1,2382 +0,0 @@ -/** - * @license AngularJS v1.3.11 - * (c) 2010-2014 Google, Inc. http://angularjs.org - * License: MIT - */ -(function(window, angular, undefined) { - -'use strict'; - -/** - * @ngdoc object - * @name angular.mock - * @description - * - * Namespace from 'angular-mocks.js' which contains testing related code. - */ -angular.mock = {}; - -/** - * ! This is a private undocumented service ! - * - * @name $browser - * - * @description - * This service is a mock implementation of {@link ng.$browser}. It provides fake - * implementation for commonly used browser apis that are hard to test, e.g. setTimeout, xhr, - * cookies, etc... - * - * The api of this service is the same as that of the real {@link ng.$browser $browser}, except - * that there are several helper methods available which can be used in tests. - */ -angular.mock.$BrowserProvider = function() { - this.$get = function() { - return new angular.mock.$Browser(); - }; -}; - -angular.mock.$Browser = function() { - var self = this; - - this.isMock = true; - self.$$url = "http://server/"; - self.$$lastUrl = self.$$url; // used by url polling fn - self.pollFns = []; - - // TODO(vojta): remove this temporary api - self.$$completeOutstandingRequest = angular.noop; - self.$$incOutstandingRequestCount = angular.noop; - - - // register url polling fn - - self.onUrlChange = function(listener) { - self.pollFns.push( - function() { - if (self.$$lastUrl !== self.$$url || self.$$state !== self.$$lastState) { - self.$$lastUrl = self.$$url; - self.$$lastState = self.$$state; - listener(self.$$url, self.$$state); - } - } - ); - - return listener; - }; - - self.$$checkUrlChange = angular.noop; - - self.cookieHash = {}; - self.lastCookieHash = {}; - self.deferredFns = []; - self.deferredNextId = 0; - - self.defer = function(fn, delay) { - delay = delay || 0; - self.deferredFns.push({time:(self.defer.now + delay), fn:fn, id: self.deferredNextId}); - self.deferredFns.sort(function(a, b) { return a.time - b.time;}); - return self.deferredNextId++; - }; - - - /** - * @name $browser#defer.now - * - * @description - * Current milliseconds mock time. - */ - self.defer.now = 0; - - - self.defer.cancel = function(deferId) { - var fnIndex; - - angular.forEach(self.deferredFns, function(fn, index) { - if (fn.id === deferId) fnIndex = index; - }); - - if (fnIndex !== undefined) { - self.deferredFns.splice(fnIndex, 1); - return true; - } - - return false; - }; - - - /** - * @name $browser#defer.flush - * - * @description - * Flushes all pending requests and executes the defer callbacks. - * - * @param {number=} number of milliseconds to flush. See {@link #defer.now} - */ - self.defer.flush = function(delay) { - if (angular.isDefined(delay)) { - self.defer.now += delay; - } else { - if (self.deferredFns.length) { - self.defer.now = self.deferredFns[self.deferredFns.length - 1].time; - } else { - throw new Error('No deferred tasks to be flushed'); - } - } - - while (self.deferredFns.length && self.deferredFns[0].time <= self.defer.now) { - self.deferredFns.shift().fn(); - } - }; - - self.$$baseHref = '/'; - self.baseHref = function() { - return this.$$baseHref; - }; -}; -angular.mock.$Browser.prototype = { - -/** - * @name $browser#poll - * - * @description - * run all fns in pollFns - */ - poll: function poll() { - angular.forEach(this.pollFns, function(pollFn) { - pollFn(); - }); - }, - - addPollFn: function(pollFn) { - this.pollFns.push(pollFn); - return pollFn; - }, - - url: function(url, replace, state) { - if (angular.isUndefined(state)) { - state = null; - } - if (url) { - this.$$url = url; - // Native pushState serializes & copies the object; simulate it. - this.$$state = angular.copy(state); - return this; - } - - return this.$$url; - }, - - state: function() { - return this.$$state; - }, - - cookies: function(name, value) { - if (name) { - if (angular.isUndefined(value)) { - delete this.cookieHash[name]; - } else { - if (angular.isString(value) && //strings only - value.length <= 4096) { //strict cookie storage limits - this.cookieHash[name] = value; - } - } - } else { - if (!angular.equals(this.cookieHash, this.lastCookieHash)) { - this.lastCookieHash = angular.copy(this.cookieHash); - this.cookieHash = angular.copy(this.cookieHash); - } - return this.cookieHash; - } - }, - - notifyWhenNoOutstandingRequests: function(fn) { - fn(); - } -}; - - -/** - * @ngdoc provider - * @name $exceptionHandlerProvider - * - * @description - * Configures the mock implementation of {@link ng.$exceptionHandler} to rethrow or to log errors - * passed to the `$exceptionHandler`. - */ - -/** - * @ngdoc service - * @name $exceptionHandler - * - * @description - * Mock implementation of {@link ng.$exceptionHandler} that rethrows or logs errors passed - * to it. See {@link ngMock.$exceptionHandlerProvider $exceptionHandlerProvider} for configuration - * information. - * - * - * ```js - * describe('$exceptionHandlerProvider', function() { - * - * it('should capture log messages and exceptions', function() { - * - * module(function($exceptionHandlerProvider) { - * $exceptionHandlerProvider.mode('log'); - * }); - * - * inject(function($log, $exceptionHandler, $timeout) { - * $timeout(function() { $log.log(1); }); - * $timeout(function() { $log.log(2); throw 'banana peel'; }); - * $timeout(function() { $log.log(3); }); - * expect($exceptionHandler.errors).toEqual([]); - * expect($log.assertEmpty()); - * $timeout.flush(); - * expect($exceptionHandler.errors).toEqual(['banana peel']); - * expect($log.log.logs).toEqual([[1], [2], [3]]); - * }); - * }); - * }); - * ``` - */ - -angular.mock.$ExceptionHandlerProvider = function() { - var handler; - - /** - * @ngdoc method - * @name $exceptionHandlerProvider#mode - * - * @description - * Sets the logging mode. - * - * @param {string} mode Mode of operation, defaults to `rethrow`. - * - * - `log`: Sometimes it is desirable to test that an error is thrown, for this case the `log` - * mode stores an array of errors in `$exceptionHandler.errors`, to allow later - * assertion of them. See {@link ngMock.$log#assertEmpty assertEmpty()} and - * {@link ngMock.$log#reset reset()} - * - `rethrow`: If any errors are passed to the handler in tests, it typically means that there - * is a bug in the application or test, so this mock will make these tests fail. - * For any implementations that expect exceptions to be thrown, the `rethrow` mode - * will also maintain a log of thrown errors. - */ - this.mode = function(mode) { - - switch (mode) { - case 'log': - case 'rethrow': - var errors = []; - handler = function(e) { - if (arguments.length == 1) { - errors.push(e); - } else { - errors.push([].slice.call(arguments, 0)); - } - if (mode === "rethrow") { - throw e; - } - }; - handler.errors = errors; - break; - default: - throw new Error("Unknown mode '" + mode + "', only 'log'/'rethrow' modes are allowed!"); - } - }; - - this.$get = function() { - return handler; - }; - - this.mode('rethrow'); -}; - - -/** - * @ngdoc service - * @name $log - * - * @description - * Mock implementation of {@link ng.$log} that gathers all logged messages in arrays - * (one array per logging level). These arrays are exposed as `logs` property of each of the - * level-specific log function, e.g. for level `error` the array is exposed as `$log.error.logs`. - * - */ -angular.mock.$LogProvider = function() { - var debug = true; - - function concat(array1, array2, index) { - return array1.concat(Array.prototype.slice.call(array2, index)); - } - - this.debugEnabled = function(flag) { - if (angular.isDefined(flag)) { - debug = flag; - return this; - } else { - return debug; - } - }; - - this.$get = function() { - var $log = { - log: function() { $log.log.logs.push(concat([], arguments, 0)); }, - warn: function() { $log.warn.logs.push(concat([], arguments, 0)); }, - info: function() { $log.info.logs.push(concat([], arguments, 0)); }, - error: function() { $log.error.logs.push(concat([], arguments, 0)); }, - debug: function() { - if (debug) { - $log.debug.logs.push(concat([], arguments, 0)); - } - } - }; - - /** - * @ngdoc method - * @name $log#reset - * - * @description - * Reset all of the logging arrays to empty. - */ - $log.reset = function() { - /** - * @ngdoc property - * @name $log#log.logs - * - * @description - * Array of messages logged using {@link ng.$log#log `log()`}. - * - * @example - * ```js - * $log.log('Some Log'); - * var first = $log.log.logs.unshift(); - * ``` - */ - $log.log.logs = []; - /** - * @ngdoc property - * @name $log#info.logs - * - * @description - * Array of messages logged using {@link ng.$log#info `info()`}. - * - * @example - * ```js - * $log.info('Some Info'); - * var first = $log.info.logs.unshift(); - * ``` - */ - $log.info.logs = []; - /** - * @ngdoc property - * @name $log#warn.logs - * - * @description - * Array of messages logged using {@link ng.$log#warn `warn()`}. - * - * @example - * ```js - * $log.warn('Some Warning'); - * var first = $log.warn.logs.unshift(); - * ``` - */ - $log.warn.logs = []; - /** - * @ngdoc property - * @name $log#error.logs - * - * @description - * Array of messages logged using {@link ng.$log#error `error()`}. - * - * @example - * ```js - * $log.error('Some Error'); - * var first = $log.error.logs.unshift(); - * ``` - */ - $log.error.logs = []; - /** - * @ngdoc property - * @name $log#debug.logs - * - * @description - * Array of messages logged using {@link ng.$log#debug `debug()`}. - * - * @example - * ```js - * $log.debug('Some Error'); - * var first = $log.debug.logs.unshift(); - * ``` - */ - $log.debug.logs = []; - }; - - /** - * @ngdoc method - * @name $log#assertEmpty - * - * @description - * Assert that all of the logging methods have no logged messages. If any messages are present, - * an exception is thrown. - */ - $log.assertEmpty = function() { - var errors = []; - angular.forEach(['error', 'warn', 'info', 'log', 'debug'], function(logLevel) { - angular.forEach($log[logLevel].logs, function(log) { - angular.forEach(log, function(logItem) { - errors.push('MOCK $log (' + logLevel + '): ' + String(logItem) + '\n' + - (logItem.stack || '')); - }); - }); - }); - if (errors.length) { - errors.unshift("Expected $log to be empty! Either a message was logged unexpectedly, or " + - "an expected log message was not checked and removed:"); - errors.push(''); - throw new Error(errors.join('\n---------\n')); - } - }; - - $log.reset(); - return $log; - }; -}; - - -/** - * @ngdoc service - * @name $interval - * - * @description - * Mock implementation of the $interval service. - * - * Use {@link ngMock.$interval#flush `$interval.flush(millis)`} to - * move forward by `millis` milliseconds and trigger any functions scheduled to run in that - * time. - * - * @param {function()} fn A function that should be called repeatedly. - * @param {number} delay Number of milliseconds between each function call. - * @param {number=} [count=0] Number of times to repeat. If not set, or 0, will repeat - * indefinitely. - * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise - * will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block. - * @returns {promise} A promise which will be notified on each iteration. - */ -angular.mock.$IntervalProvider = function() { - this.$get = ['$browser', '$rootScope', '$q', '$$q', - function($browser, $rootScope, $q, $$q) { - var repeatFns = [], - nextRepeatId = 0, - now = 0; - - var $interval = function(fn, delay, count, invokeApply) { - var iteration = 0, - skipApply = (angular.isDefined(invokeApply) && !invokeApply), - deferred = (skipApply ? $$q : $q).defer(), - promise = deferred.promise; - - count = (angular.isDefined(count)) ? count : 0; - promise.then(null, null, fn); - - promise.$$intervalId = nextRepeatId; - - function tick() { - deferred.notify(iteration++); - - if (count > 0 && iteration >= count) { - var fnIndex; - deferred.resolve(iteration); - - angular.forEach(repeatFns, function(fn, index) { - if (fn.id === promise.$$intervalId) fnIndex = index; - }); - - if (fnIndex !== undefined) { - repeatFns.splice(fnIndex, 1); - } - } - - if (skipApply) { - $browser.defer.flush(); - } else { - $rootScope.$apply(); - } - } - - repeatFns.push({ - nextTime:(now + delay), - delay: delay, - fn: tick, - id: nextRepeatId, - deferred: deferred - }); - repeatFns.sort(function(a, b) { return a.nextTime - b.nextTime;}); - - nextRepeatId++; - return promise; - }; - /** - * @ngdoc method - * @name $interval#cancel - * - * @description - * Cancels a task associated with the `promise`. - * - * @param {promise} promise A promise from calling the `$interval` function. - * @returns {boolean} Returns `true` if the task was successfully cancelled. - */ - $interval.cancel = function(promise) { - if (!promise) return false; - var fnIndex; - - angular.forEach(repeatFns, function(fn, index) { - if (fn.id === promise.$$intervalId) fnIndex = index; - }); - - if (fnIndex !== undefined) { - repeatFns[fnIndex].deferred.reject('canceled'); - repeatFns.splice(fnIndex, 1); - return true; - } - - return false; - }; - - /** - * @ngdoc method - * @name $interval#flush - * @description - * - * Runs interval tasks scheduled to be run in the next `millis` milliseconds. - * - * @param {number=} millis maximum timeout amount to flush up until. - * - * @return {number} The amount of time moved forward. - */ - $interval.flush = function(millis) { - now += millis; - while (repeatFns.length && repeatFns[0].nextTime <= now) { - var task = repeatFns[0]; - task.fn(); - task.nextTime += task.delay; - repeatFns.sort(function(a, b) { return a.nextTime - b.nextTime;}); - } - return millis; - }; - - return $interval; - }]; -}; - - -/* jshint -W101 */ -/* The R_ISO8061_STR regex is never going to fit into the 100 char limit! - * This directive should go inside the anonymous function but a bug in JSHint means that it would - * not be enacted early enough to prevent the warning. - */ -var R_ISO8061_STR = /^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?:\:?(\d\d)(?:\:?(\d\d)(?:\.(\d{3}))?)?)?(Z|([+-])(\d\d):?(\d\d)))?$/; - -function jsonStringToDate(string) { - var match; - if (match = string.match(R_ISO8061_STR)) { - var date = new Date(0), - tzHour = 0, - tzMin = 0; - if (match[9]) { - tzHour = int(match[9] + match[10]); - tzMin = int(match[9] + match[11]); - } - date.setUTCFullYear(int(match[1]), int(match[2]) - 1, int(match[3])); - date.setUTCHours(int(match[4] || 0) - tzHour, - int(match[5] || 0) - tzMin, - int(match[6] || 0), - int(match[7] || 0)); - return date; - } - return string; -} - -function int(str) { - return parseInt(str, 10); -} - -function padNumber(num, digits, trim) { - var neg = ''; - if (num < 0) { - neg = '-'; - num = -num; - } - num = '' + num; - while (num.length < digits) num = '0' + num; - if (trim) - num = num.substr(num.length - digits); - return neg + num; -} - - -/** - * @ngdoc type - * @name angular.mock.TzDate - * @description - * - * *NOTE*: this is not an injectable instance, just a globally available mock class of `Date`. - * - * Mock of the Date type which has its timezone specified via constructor arg. - * - * The main purpose is to create Date-like instances with timezone fixed to the specified timezone - * offset, so that we can test code that depends on local timezone settings without dependency on - * the time zone settings of the machine where the code is running. - * - * @param {number} offset Offset of the *desired* timezone in hours (fractions will be honored) - * @param {(number|string)} timestamp Timestamp representing the desired time in *UTC* - * - * @example - * !!!! WARNING !!!!! - * This is not a complete Date object so only methods that were implemented can be called safely. - * To make matters worse, TzDate instances inherit stuff from Date via a prototype. - * - * We do our best to intercept calls to "unimplemented" methods, but since the list of methods is - * incomplete we might be missing some non-standard methods. This can result in errors like: - * "Date.prototype.foo called on incompatible Object". - * - * ```js - * var newYearInBratislava = new TzDate(-1, '2009-12-31T23:00:00Z'); - * newYearInBratislava.getTimezoneOffset() => -60; - * newYearInBratislava.getFullYear() => 2010; - * newYearInBratislava.getMonth() => 0; - * newYearInBratislava.getDate() => 1; - * newYearInBratislava.getHours() => 0; - * newYearInBratislava.getMinutes() => 0; - * newYearInBratislava.getSeconds() => 0; - * ``` - * - */ -angular.mock.TzDate = function(offset, timestamp) { - var self = new Date(0); - if (angular.isString(timestamp)) { - var tsStr = timestamp; - - self.origDate = jsonStringToDate(timestamp); - - timestamp = self.origDate.getTime(); - if (isNaN(timestamp)) - throw { - name: "Illegal Argument", - message: "Arg '" + tsStr + "' passed into TzDate constructor is not a valid date string" - }; - } else { - self.origDate = new Date(timestamp); - } - - var localOffset = new Date(timestamp).getTimezoneOffset(); - self.offsetDiff = localOffset * 60 * 1000 - offset * 1000 * 60 * 60; - self.date = new Date(timestamp + self.offsetDiff); - - self.getTime = function() { - return self.date.getTime() - self.offsetDiff; - }; - - self.toLocaleDateString = function() { - return self.date.toLocaleDateString(); - }; - - self.getFullYear = function() { - return self.date.getFullYear(); - }; - - self.getMonth = function() { - return self.date.getMonth(); - }; - - self.getDate = function() { - return self.date.getDate(); - }; - - self.getHours = function() { - return self.date.getHours(); - }; - - self.getMinutes = function() { - return self.date.getMinutes(); - }; - - self.getSeconds = function() { - return self.date.getSeconds(); - }; - - self.getMilliseconds = function() { - return self.date.getMilliseconds(); - }; - - self.getTimezoneOffset = function() { - return offset * 60; - }; - - self.getUTCFullYear = function() { - return self.origDate.getUTCFullYear(); - }; - - self.getUTCMonth = function() { - return self.origDate.getUTCMonth(); - }; - - self.getUTCDate = function() { - return self.origDate.getUTCDate(); - }; - - self.getUTCHours = function() { - return self.origDate.getUTCHours(); - }; - - self.getUTCMinutes = function() { - return self.origDate.getUTCMinutes(); - }; - - self.getUTCSeconds = function() { - return self.origDate.getUTCSeconds(); - }; - - self.getUTCMilliseconds = function() { - return self.origDate.getUTCMilliseconds(); - }; - - self.getDay = function() { - return self.date.getDay(); - }; - - // provide this method only on browsers that already have it - if (self.toISOString) { - self.toISOString = function() { - return padNumber(self.origDate.getUTCFullYear(), 4) + '-' + - padNumber(self.origDate.getUTCMonth() + 1, 2) + '-' + - padNumber(self.origDate.getUTCDate(), 2) + 'T' + - padNumber(self.origDate.getUTCHours(), 2) + ':' + - padNumber(self.origDate.getUTCMinutes(), 2) + ':' + - padNumber(self.origDate.getUTCSeconds(), 2) + '.' + - padNumber(self.origDate.getUTCMilliseconds(), 3) + 'Z'; - }; - } - - //hide all methods not implemented in this mock that the Date prototype exposes - var unimplementedMethods = ['getUTCDay', - 'getYear', 'setDate', 'setFullYear', 'setHours', 'setMilliseconds', - 'setMinutes', 'setMonth', 'setSeconds', 'setTime', 'setUTCDate', 'setUTCFullYear', - 'setUTCHours', 'setUTCMilliseconds', 'setUTCMinutes', 'setUTCMonth', 'setUTCSeconds', - 'setYear', 'toDateString', 'toGMTString', 'toJSON', 'toLocaleFormat', 'toLocaleString', - 'toLocaleTimeString', 'toSource', 'toString', 'toTimeString', 'toUTCString', 'valueOf']; - - angular.forEach(unimplementedMethods, function(methodName) { - self[methodName] = function() { - throw new Error("Method '" + methodName + "' is not implemented in the TzDate mock"); - }; - }); - - return self; -}; - -//make "tzDateInstance instanceof Date" return true -angular.mock.TzDate.prototype = Date.prototype; -/* jshint +W101 */ - -angular.mock.animate = angular.module('ngAnimateMock', ['ng']) - - .config(['$provide', function($provide) { - - var reflowQueue = []; - $provide.value('$$animateReflow', function(fn) { - var index = reflowQueue.length; - reflowQueue.push(fn); - return function cancel() { - reflowQueue.splice(index, 1); - }; - }); - - $provide.decorator('$animate', ['$delegate', '$$asyncCallback', '$timeout', '$browser', - function($delegate, $$asyncCallback, $timeout, $browser) { - var animate = { - queue: [], - cancel: $delegate.cancel, - enabled: $delegate.enabled, - triggerCallbackEvents: function() { - $$asyncCallback.flush(); - }, - triggerCallbackPromise: function() { - $timeout.flush(0); - }, - triggerCallbacks: function() { - this.triggerCallbackEvents(); - this.triggerCallbackPromise(); - }, - triggerReflow: function() { - angular.forEach(reflowQueue, function(fn) { - fn(); - }); - reflowQueue = []; - } - }; - - angular.forEach( - ['animate','enter','leave','move','addClass','removeClass','setClass'], function(method) { - animate[method] = function() { - animate.queue.push({ - event: method, - element: arguments[0], - options: arguments[arguments.length - 1], - args: arguments - }); - return $delegate[method].apply($delegate, arguments); - }; - }); - - return animate; - }]); - - }]); - - -/** - * @ngdoc function - * @name angular.mock.dump - * @description - * - * *NOTE*: this is not an injectable instance, just a globally available function. - * - * Method for serializing common angular objects (scope, elements, etc..) into strings, useful for - * debugging. - * - * This method is also available on window, where it can be used to display objects on debug - * console. - * - * @param {*} object - any object to turn into string. - * @return {string} a serialized string of the argument - */ -angular.mock.dump = function(object) { - return serialize(object); - - function serialize(object) { - var out; - - if (angular.isElement(object)) { - object = angular.element(object); - out = angular.element('<div></div>'); - angular.forEach(object, function(element) { - out.append(angular.element(element).clone()); - }); - out = out.html(); - } else if (angular.isArray(object)) { - out = []; - angular.forEach(object, function(o) { - out.push(serialize(o)); - }); - out = '[ ' + out.join(', ') + ' ]'; - } else if (angular.isObject(object)) { - if (angular.isFunction(object.$eval) && angular.isFunction(object.$apply)) { - out = serializeScope(object); - } else if (object instanceof Error) { - out = object.stack || ('' + object.name + ': ' + object.message); - } else { - // TODO(i): this prevents methods being logged, - // we should have a better way to serialize objects - out = angular.toJson(object, true); - } - } else { - out = String(object); - } - - return out; - } - - function serializeScope(scope, offset) { - offset = offset || ' '; - var log = [offset + 'Scope(' + scope.$id + '): {']; - for (var key in scope) { - if (Object.prototype.hasOwnProperty.call(scope, key) && !key.match(/^(\$|this)/)) { - log.push(' ' + key + ': ' + angular.toJson(scope[key])); - } - } - var child = scope.$$childHead; - while (child) { - log.push(serializeScope(child, offset + ' ')); - child = child.$$nextSibling; - } - log.push('}'); - return log.join('\n' + offset); - } -}; - -/** - * @ngdoc service - * @name $httpBackend - * @description - * Fake HTTP backend implementation suitable for unit testing applications that use the - * {@link ng.$http $http service}. - * - * *Note*: For fake HTTP backend implementation suitable for end-to-end testing or backend-less - * development please see {@link ngMockE2E.$httpBackend e2e $httpBackend mock}. - * - * During unit testing, we want our unit tests to run quickly and have no external dependencies so - * we don’t want to send [XHR](https://developer.mozilla.org/en/xmlhttprequest) or - * [JSONP](http://en.wikipedia.org/wiki/JSONP) requests to a real server. All we really need is - * to verify whether a certain request has been sent or not, or alternatively just let the - * application make requests, respond with pre-trained responses and assert that the end result is - * what we expect it to be. - * - * This mock implementation can be used to respond with static or dynamic responses via the - * `expect` and `when` apis and their shortcuts (`expectGET`, `whenPOST`, etc). - * - * When an Angular application needs some data from a server, it calls the $http service, which - * sends the request to a real server using $httpBackend service. With dependency injection, it is - * easy to inject $httpBackend mock (which has the same API as $httpBackend) and use it to verify - * the requests and respond with some testing data without sending a request to a real server. - * - * There are two ways to specify what test data should be returned as http responses by the mock - * backend when the code under test makes http requests: - * - * - `$httpBackend.expect` - specifies a request expectation - * - `$httpBackend.when` - specifies a backend definition - * - * - * # Request Expectations vs Backend Definitions - * - * Request expectations provide a way to make assertions about requests made by the application and - * to define responses for those requests. The test will fail if the expected requests are not made - * or they are made in the wrong order. - * - * Backend definitions allow you to define a fake backend for your application which doesn't assert - * if a particular request was made or not, it just returns a trained response if a request is made. - * The test will pass whether or not the request gets made during testing. - * - * - * <table class="table"> - * <tr><th width="220px"></th><th>Request expectations</th><th>Backend definitions</th></tr> - * <tr> - * <th>Syntax</th> - * <td>.expect(...).respond(...)</td> - * <td>.when(...).respond(...)</td> - * </tr> - * <tr> - * <th>Typical usage</th> - * <td>strict unit tests</td> - * <td>loose (black-box) unit testing</td> - * </tr> - * <tr> - * <th>Fulfills multiple requests</th> - * <td>NO</td> - * <td>YES</td> - * </tr> - * <tr> - * <th>Order of requests matters</th> - * <td>YES</td> - * <td>NO</td> - * </tr> - * <tr> - * <th>Request required</th> - * <td>YES</td> - * <td>NO</td> - * </tr> - * <tr> - * <th>Response required</th> - * <td>optional (see below)</td> - * <td>YES</td> - * </tr> - * </table> - * - * In cases where both backend definitions and request expectations are specified during unit - * testing, the request expectations are evaluated first. - * - * If a request expectation has no response specified, the algorithm will search your backend - * definitions for an appropriate response. - * - * If a request didn't match any expectation or if the expectation doesn't have the response - * defined, the backend definitions are evaluated in sequential order to see if any of them match - * the request. The response from the first matched definition is returned. - * - * - * # Flushing HTTP requests - * - * The $httpBackend used in production always responds to requests asynchronously. If we preserved - * this behavior in unit testing, we'd have to create async unit tests, which are hard to write, - * to follow and to maintain. But neither can the testing mock respond synchronously; that would - * change the execution of the code under test. For this reason, the mock $httpBackend has a - * `flush()` method, which allows the test to explicitly flush pending requests. This preserves - * the async api of the backend, while allowing the test to execute synchronously. - * - * - * # Unit testing with mock $httpBackend - * The following code shows how to setup and use the mock backend when unit testing a controller. - * First we create the controller under test: - * - ```js - // The module code - angular - .module('MyApp', []) - .controller('MyController', MyController); - - // The controller code - function MyController($scope, $http) { - var authToken; - - $http.get('/auth.py').success(function(data, status, headers) { - authToken = headers('A-Token'); - $scope.user = data; - }); - - $scope.saveMessage = function(message) { - var headers = { 'Authorization': authToken }; - $scope.status = 'Saving...'; - - $http.post('/add-msg.py', message, { headers: headers } ).success(function(response) { - $scope.status = ''; - }).error(function() { - $scope.status = 'ERROR!'; - }); - }; - } - ``` - * - * Now we setup the mock backend and create the test specs: - * - ```js - // testing controller - describe('MyController', function() { - var $httpBackend, $rootScope, createController, authRequestHandler; - - // Set up the module - beforeEach(module('MyApp')); - - beforeEach(inject(function($injector) { - // Set up the mock http service responses - $httpBackend = $injector.get('$httpBackend'); - // backend definition common for all tests - authRequestHandler = $httpBackend.when('GET', '/auth.py') - .respond({userId: 'userX'}, {'A-Token': 'xxx'}); - - // Get hold of a scope (i.e. the root scope) - $rootScope = $injector.get('$rootScope'); - // The $controller service is used to create instances of controllers - var $controller = $injector.get('$controller'); - - createController = function() { - return $controller('MyController', {'$scope' : $rootScope }); - }; - })); - - - afterEach(function() { - $httpBackend.verifyNoOutstandingExpectation(); - $httpBackend.verifyNoOutstandingRequest(); - }); - - - it('should fetch authentication token', function() { - $httpBackend.expectGET('/auth.py'); - var controller = createController(); - $httpBackend.flush(); - }); - - - it('should fail authentication', function() { - - // Notice how you can change the response even after it was set - authRequestHandler.respond(401, ''); - - $httpBackend.expectGET('/auth.py'); - var controller = createController(); - $httpBackend.flush(); - expect($rootScope.status).toBe('Failed...'); - }); - - - it('should send msg to server', function() { - var controller = createController(); - $httpBackend.flush(); - - // now you don’t care about the authentication, but - // the controller will still send the request and - // $httpBackend will respond without you having to - // specify the expectation and response for this request - - $httpBackend.expectPOST('/add-msg.py', 'message content').respond(201, ''); - $rootScope.saveMessage('message content'); - expect($rootScope.status).toBe('Saving...'); - $httpBackend.flush(); - expect($rootScope.status).toBe(''); - }); - - - it('should send auth header', function() { - var controller = createController(); - $httpBackend.flush(); - - $httpBackend.expectPOST('/add-msg.py', undefined, function(headers) { - // check if the header was send, if it wasn't the expectation won't - // match the request and the test will fail - return headers['Authorization'] == 'xxx'; - }).respond(201, ''); - - $rootScope.saveMessage('whatever'); - $httpBackend.flush(); - }); - }); - ``` - */ -angular.mock.$HttpBackendProvider = function() { - this.$get = ['$rootScope', '$timeout', createHttpBackendMock]; -}; - -/** - * General factory function for $httpBackend mock. - * Returns instance for unit testing (when no arguments specified): - * - passing through is disabled - * - auto flushing is disabled - * - * Returns instance for e2e testing (when `$delegate` and `$browser` specified): - * - passing through (delegating request to real backend) is enabled - * - auto flushing is enabled - * - * @param {Object=} $delegate Real $httpBackend instance (allow passing through if specified) - * @param {Object=} $browser Auto-flushing enabled if specified - * @return {Object} Instance of $httpBackend mock - */ -function createHttpBackendMock($rootScope, $timeout, $delegate, $browser) { - var definitions = [], - expectations = [], - responses = [], - responsesPush = angular.bind(responses, responses.push), - copy = angular.copy; - - function createResponse(status, data, headers, statusText) { - if (angular.isFunction(status)) return status; - - return function() { - return angular.isNumber(status) - ? [status, data, headers, statusText] - : [200, status, data, headers]; - }; - } - - // TODO(vojta): change params to: method, url, data, headers, callback - function $httpBackend(method, url, data, callback, headers, timeout, withCredentials) { - var xhr = new MockXhr(), - expectation = expectations[0], - wasExpected = false; - - function prettyPrint(data) { - return (angular.isString(data) || angular.isFunction(data) || data instanceof RegExp) - ? data - : angular.toJson(data); - } - - function wrapResponse(wrapped) { - if (!$browser && timeout) { - timeout.then ? timeout.then(handleTimeout) : $timeout(handleTimeout, timeout); - } - - return handleResponse; - - function handleResponse() { - var response = wrapped.response(method, url, data, headers); - xhr.$$respHeaders = response[2]; - callback(copy(response[0]), copy(response[1]), xhr.getAllResponseHeaders(), - copy(response[3] || '')); - } - - function handleTimeout() { - for (var i = 0, ii = responses.length; i < ii; i++) { - if (responses[i] === handleResponse) { - responses.splice(i, 1); - callback(-1, undefined, ''); - break; - } - } - } - } - - if (expectation && expectation.match(method, url)) { - if (!expectation.matchData(data)) - throw new Error('Expected ' + expectation + ' with different data\n' + - 'EXPECTED: ' + prettyPrint(expectation.data) + '\nGOT: ' + data); - - if (!expectation.matchHeaders(headers)) - throw new Error('Expected ' + expectation + ' with different headers\n' + - 'EXPECTED: ' + prettyPrint(expectation.headers) + '\nGOT: ' + - prettyPrint(headers)); - - expectations.shift(); - - if (expectation.response) { - responses.push(wrapResponse(expectation)); - return; - } - wasExpected = true; - } - - var i = -1, definition; - while ((definition = definitions[++i])) { - if (definition.match(method, url, data, headers || {})) { - if (definition.response) { - // if $browser specified, we do auto flush all requests - ($browser ? $browser.defer : responsesPush)(wrapResponse(definition)); - } else if (definition.passThrough) { - $delegate(method, url, data, callback, headers, timeout, withCredentials); - } else throw new Error('No response defined !'); - return; - } - } - throw wasExpected ? - new Error('No response defined !') : - new Error('Unexpected request: ' + method + ' ' + url + '\n' + - (expectation ? 'Expected ' + expectation : 'No more request expected')); - } - - /** - * @ngdoc method - * @name $httpBackend#when - * @description - * Creates a new backend definition. - * - * @param {string} method HTTP method. - * @param {string|RegExp|function(string)} url HTTP url or function that receives the url - * and returns true if the url match the current definition. - * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives - * data string and returns true if the data is as expected. - * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header - * object and returns true if the headers match the current definition. - * @returns {requestHandler} Returns an object with `respond` method that controls how a matched - * request is handled. You can save this object for later use and invoke `respond` again in - * order to change how a matched request is handled. - * - * - respond – - * `{function([status,] data[, headers, statusText]) - * | function(function(method, url, data, headers)}` - * – The respond method takes a set of static data to be returned or a function that can - * return an array containing response status (number), response data (string), response - * headers (Object), and the text for the status (string). The respond method returns the - * `requestHandler` object for possible overrides. - */ - $httpBackend.when = function(method, url, data, headers) { - var definition = new MockHttpExpectation(method, url, data, headers), - chain = { - respond: function(status, data, headers, statusText) { - definition.passThrough = undefined; - definition.response = createResponse(status, data, headers, statusText); - return chain; - } - }; - - if ($browser) { - chain.passThrough = function() { - definition.response = undefined; - definition.passThrough = true; - return chain; - }; - } - - definitions.push(definition); - return chain; - }; - - /** - * @ngdoc method - * @name $httpBackend#whenGET - * @description - * Creates a new backend definition for GET requests. For more info see `when()`. - * - * @param {string|RegExp|function(string)} url HTTP url or function that receives the url - * and returns true if the url match the current definition. - * @param {(Object|function(Object))=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` method that controls how a matched - * request is handled. You can save this object for later use and invoke `respond` again in - * order to change how a matched request is handled. - */ - - /** - * @ngdoc method - * @name $httpBackend#whenHEAD - * @description - * Creates a new backend definition for HEAD requests. For more info see `when()`. - * - * @param {string|RegExp|function(string)} url HTTP url or function that receives the url - * and returns true if the url match the current definition. - * @param {(Object|function(Object))=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` method that controls how a matched - * request is handled. You can save this object for later use and invoke `respond` again in - * order to change how a matched request is handled. - */ - - /** - * @ngdoc method - * @name $httpBackend#whenDELETE - * @description - * Creates a new backend definition for DELETE requests. For more info see `when()`. - * - * @param {string|RegExp|function(string)} url HTTP url or function that receives the url - * and returns true if the url match the current definition. - * @param {(Object|function(Object))=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` method that controls how a matched - * request is handled. You can save this object for later use and invoke `respond` again in - * order to change how a matched request is handled. - */ - - /** - * @ngdoc method - * @name $httpBackend#whenPOST - * @description - * Creates a new backend definition for POST requests. For more info see `when()`. - * - * @param {string|RegExp|function(string)} url HTTP url or function that receives the url - * and returns true if the url match the current definition. - * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives - * data string and returns true if the data is as expected. - * @param {(Object|function(Object))=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` method that controls how a matched - * request is handled. You can save this object for later use and invoke `respond` again in - * order to change how a matched request is handled. - */ - - /** - * @ngdoc method - * @name $httpBackend#whenPUT - * @description - * Creates a new backend definition for PUT requests. For more info see `when()`. - * - * @param {string|RegExp|function(string)} url HTTP url or function that receives the url - * and returns true if the url match the current definition. - * @param {(string|RegExp|function(string))=} data HTTP request body or function that receives - * data string and returns true if the data is as expected. - * @param {(Object|function(Object))=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` method that controls how a matched - * request is handled. You can save this object for later use and invoke `respond` again in - * order to change how a matched request is handled. - */ - - /** - * @ngdoc method - * @name $httpBackend#whenJSONP - * @description - * Creates a new backend definition for JSONP requests. For more info see `when()`. - * - * @param {string|RegExp|function(string)} url HTTP url or function that receives the url - * and returns true if the url match the current definition. - * @returns {requestHandler} Returns an object with `respond` method that controls how a matched - * request is handled. You can save this object for later use and invoke `respond` again in - * order to change how a matched request is handled. - */ - createShortMethods('when'); - - - /** - * @ngdoc method - * @name $httpBackend#expect - * @description - * Creates a new request expectation. - * - * @param {string} method HTTP method. - * @param {string|RegExp|function(string)} url HTTP url or function that receives the url - * and returns true if the url match the current definition. - * @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that - * receives data string and returns true if the data is as expected, or Object if request body - * is in JSON format. - * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header - * object and returns true if the headers match the current expectation. - * @returns {requestHandler} Returns an object with `respond` method that controls how a matched - * request is handled. You can save this object for later use and invoke `respond` again in - * order to change how a matched request is handled. - * - * - respond – - * `{function([status,] data[, headers, statusText]) - * | function(function(method, url, data, headers)}` - * – The respond method takes a set of static data to be returned or a function that can - * return an array containing response status (number), response data (string), response - * headers (Object), and the text for the status (string). The respond method returns the - * `requestHandler` object for possible overrides. - */ - $httpBackend.expect = function(method, url, data, headers) { - var expectation = new MockHttpExpectation(method, url, data, headers), - chain = { - respond: function(status, data, headers, statusText) { - expectation.response = createResponse(status, data, headers, statusText); - return chain; - } - }; - - expectations.push(expectation); - return chain; - }; - - - /** - * @ngdoc method - * @name $httpBackend#expectGET - * @description - * Creates a new request expectation for GET requests. For more info see `expect()`. - * - * @param {string|RegExp|function(string)} url HTTP url or function that receives the url - * and returns true if the url match the current definition. - * @param {Object=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` method that controls how a matched - * request is handled. You can save this object for later use and invoke `respond` again in - * order to change how a matched request is handled. See #expect for more info. - */ - - /** - * @ngdoc method - * @name $httpBackend#expectHEAD - * @description - * Creates a new request expectation for HEAD requests. For more info see `expect()`. - * - * @param {string|RegExp|function(string)} url HTTP url or function that receives the url - * and returns true if the url match the current definition. - * @param {Object=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` method that controls how a matched - * request is handled. You can save this object for later use and invoke `respond` again in - * order to change how a matched request is handled. - */ - - /** - * @ngdoc method - * @name $httpBackend#expectDELETE - * @description - * Creates a new request expectation for DELETE requests. For more info see `expect()`. - * - * @param {string|RegExp|function(string)} url HTTP url or function that receives the url - * and returns true if the url match the current definition. - * @param {Object=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` method that controls how a matched - * request is handled. You can save this object for later use and invoke `respond` again in - * order to change how a matched request is handled. - */ - - /** - * @ngdoc method - * @name $httpBackend#expectPOST - * @description - * Creates a new request expectation for POST requests. For more info see `expect()`. - * - * @param {string|RegExp|function(string)} url HTTP url or function that receives the url - * and returns true if the url match the current definition. - * @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that - * receives data string and returns true if the data is as expected, or Object if request body - * is in JSON format. - * @param {Object=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` method that controls how a matched - * request is handled. You can save this object for later use and invoke `respond` again in - * order to change how a matched request is handled. - */ - - /** - * @ngdoc method - * @name $httpBackend#expectPUT - * @description - * Creates a new request expectation for PUT requests. For more info see `expect()`. - * - * @param {string|RegExp|function(string)} url HTTP url or function that receives the url - * and returns true if the url match the current definition. - * @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that - * receives data string and returns true if the data is as expected, or Object if request body - * is in JSON format. - * @param {Object=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` method that controls how a matched - * request is handled. You can save this object for later use and invoke `respond` again in - * order to change how a matched request is handled. - */ - - /** - * @ngdoc method - * @name $httpBackend#expectPATCH - * @description - * Creates a new request expectation for PATCH requests. For more info see `expect()`. - * - * @param {string|RegExp|function(string)} url HTTP url or function that receives the url - * and returns true if the url match the current definition. - * @param {(string|RegExp|function(string)|Object)=} data HTTP request body or function that - * receives data string and returns true if the data is as expected, or Object if request body - * is in JSON format. - * @param {Object=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` method that controls how a matched - * request is handled. You can save this object for later use and invoke `respond` again in - * order to change how a matched request is handled. - */ - - /** - * @ngdoc method - * @name $httpBackend#expectJSONP - * @description - * Creates a new request expectation for JSONP requests. For more info see `expect()`. - * - * @param {string|RegExp|function(string)} url HTTP url or function that receives the url - * and returns true if the url match the current definition. - * @returns {requestHandler} Returns an object with `respond` method that controls how a matched - * request is handled. You can save this object for later use and invoke `respond` again in - * order to change how a matched request is handled. - */ - createShortMethods('expect'); - - - /** - * @ngdoc method - * @name $httpBackend#flush - * @description - * Flushes all pending requests using the trained responses. - * - * @param {number=} count Number of responses to flush (in the order they arrived). If undefined, - * all pending requests will be flushed. If there are no pending requests when the flush method - * is called an exception is thrown (as this typically a sign of programming error). - */ - $httpBackend.flush = function(count, digest) { - if (digest !== false) $rootScope.$digest(); - if (!responses.length) throw new Error('No pending request to flush !'); - - if (angular.isDefined(count) && count !== null) { - while (count--) { - if (!responses.length) throw new Error('No more pending request to flush !'); - responses.shift()(); - } - } else { - while (responses.length) { - responses.shift()(); - } - } - $httpBackend.verifyNoOutstandingExpectation(digest); - }; - - - /** - * @ngdoc method - * @name $httpBackend#verifyNoOutstandingExpectation - * @description - * Verifies that all of the requests defined via the `expect` api were made. If any of the - * requests were not made, verifyNoOutstandingExpectation throws an exception. - * - * Typically, you would call this method following each test case that asserts requests using an - * "afterEach" clause. - * - * ```js - * afterEach($httpBackend.verifyNoOutstandingExpectation); - * ``` - */ - $httpBackend.verifyNoOutstandingExpectation = function(digest) { - if (digest !== false) $rootScope.$digest(); - if (expectations.length) { - throw new Error('Unsatisfied requests: ' + expectations.join(', ')); - } - }; - - - /** - * @ngdoc method - * @name $httpBackend#verifyNoOutstandingRequest - * @description - * Verifies that there are no outstanding requests that need to be flushed. - * - * Typically, you would call this method following each test case that asserts requests using an - * "afterEach" clause. - * - * ```js - * afterEach($httpBackend.verifyNoOutstandingRequest); - * ``` - */ - $httpBackend.verifyNoOutstandingRequest = function() { - if (responses.length) { - throw new Error('Unflushed requests: ' + responses.length); - } - }; - - - /** - * @ngdoc method - * @name $httpBackend#resetExpectations - * @description - * Resets all request expectations, but preserves all backend definitions. Typically, you would - * call resetExpectations during a multiple-phase test when you want to reuse the same instance of - * $httpBackend mock. - */ - $httpBackend.resetExpectations = function() { - expectations.length = 0; - responses.length = 0; - }; - - return $httpBackend; - - - function createShortMethods(prefix) { - angular.forEach(['GET', 'DELETE', 'JSONP', 'HEAD'], function(method) { - $httpBackend[prefix + method] = function(url, headers) { - return $httpBackend[prefix](method, url, undefined, headers); - }; - }); - - angular.forEach(['PUT', 'POST', 'PATCH'], function(method) { - $httpBackend[prefix + method] = function(url, data, headers) { - return $httpBackend[prefix](method, url, data, headers); - }; - }); - } -} - -function MockHttpExpectation(method, url, data, headers) { - - this.data = data; - this.headers = headers; - - this.match = function(m, u, d, h) { - if (method != m) return false; - if (!this.matchUrl(u)) return false; - if (angular.isDefined(d) && !this.matchData(d)) return false; - if (angular.isDefined(h) && !this.matchHeaders(h)) return false; - return true; - }; - - this.matchUrl = function(u) { - if (!url) return true; - if (angular.isFunction(url.test)) return url.test(u); - if (angular.isFunction(url)) return url(u); - return url == u; - }; - - this.matchHeaders = function(h) { - if (angular.isUndefined(headers)) return true; - if (angular.isFunction(headers)) return headers(h); - return angular.equals(headers, h); - }; - - this.matchData = function(d) { - if (angular.isUndefined(data)) return true; - if (data && angular.isFunction(data.test)) return data.test(d); - if (data && angular.isFunction(data)) return data(d); - if (data && !angular.isString(data)) { - return angular.equals(angular.fromJson(angular.toJson(data)), angular.fromJson(d)); - } - return data == d; - }; - - this.toString = function() { - return method + ' ' + url; - }; -} - -function createMockXhr() { - return new MockXhr(); -} - -function MockXhr() { - - // hack for testing $http, $httpBackend - MockXhr.$$lastInstance = this; - - this.open = function(method, url, async) { - this.$$method = method; - this.$$url = url; - this.$$async = async; - this.$$reqHeaders = {}; - this.$$respHeaders = {}; - }; - - this.send = function(data) { - this.$$data = data; - }; - - this.setRequestHeader = function(key, value) { - this.$$reqHeaders[key] = value; - }; - - this.getResponseHeader = function(name) { - // the lookup must be case insensitive, - // that's why we try two quick lookups first and full scan last - var header = this.$$respHeaders[name]; - if (header) return header; - - name = angular.lowercase(name); - header = this.$$respHeaders[name]; - if (header) return header; - - header = undefined; - angular.forEach(this.$$respHeaders, function(headerVal, headerName) { - if (!header && angular.lowercase(headerName) == name) header = headerVal; - }); - return header; - }; - - this.getAllResponseHeaders = function() { - var lines = []; - - angular.forEach(this.$$respHeaders, function(value, key) { - lines.push(key + ': ' + value); - }); - return lines.join('\n'); - }; - - this.abort = angular.noop; -} - - -/** - * @ngdoc service - * @name $timeout - * @description - * - * This service is just a simple decorator for {@link ng.$timeout $timeout} service - * that adds a "flush" and "verifyNoPendingTasks" methods. - */ - -angular.mock.$TimeoutDecorator = ['$delegate', '$browser', function($delegate, $browser) { - - /** - * @ngdoc method - * @name $timeout#flush - * @description - * - * Flushes the queue of pending tasks. - * - * @param {number=} delay maximum timeout amount to flush up until - */ - $delegate.flush = function(delay) { - $browser.defer.flush(delay); - }; - - /** - * @ngdoc method - * @name $timeout#verifyNoPendingTasks - * @description - * - * Verifies that there are no pending tasks that need to be flushed. - */ - $delegate.verifyNoPendingTasks = function() { - if ($browser.deferredFns.length) { - throw new Error('Deferred tasks to flush (' + $browser.deferredFns.length + '): ' + - formatPendingTasksAsString($browser.deferredFns)); - } - }; - - function formatPendingTasksAsString(tasks) { - var result = []; - angular.forEach(tasks, function(task) { - result.push('{id: ' + task.id + ', ' + 'time: ' + task.time + '}'); - }); - - return result.join(', '); - } - - return $delegate; -}]; - -angular.mock.$RAFDecorator = ['$delegate', function($delegate) { - var queue = []; - var rafFn = function(fn) { - var index = queue.length; - queue.push(fn); - return function() { - queue.splice(index, 1); - }; - }; - - rafFn.supported = $delegate.supported; - - rafFn.flush = function() { - if (queue.length === 0) { - throw new Error('No rAF callbacks present'); - } - - var length = queue.length; - for (var i = 0; i < length; i++) { - queue[i](); - } - - queue = []; - }; - - return rafFn; -}]; - -angular.mock.$AsyncCallbackDecorator = ['$delegate', function($delegate) { - var callbacks = []; - var addFn = function(fn) { - callbacks.push(fn); - }; - addFn.flush = function() { - angular.forEach(callbacks, function(fn) { - fn(); - }); - callbacks = []; - }; - return addFn; -}]; - -/** - * - */ -angular.mock.$RootElementProvider = function() { - this.$get = function() { - return angular.element('<div ng-app></div>'); - }; -}; - -/** - * @ngdoc module - * @name ngMock - * @packageName angular-mocks - * @description - * - * # ngMock - * - * The `ngMock` module provides support to inject and mock Angular services into unit tests. - * In addition, ngMock also extends various core ng services such that they can be - * inspected and controlled in a synchronous manner within test code. - * - * - * <div doc-module-components="ngMock"></div> - * - */ -angular.module('ngMock', ['ng']).provider({ - $browser: angular.mock.$BrowserProvider, - $exceptionHandler: angular.mock.$ExceptionHandlerProvider, - $log: angular.mock.$LogProvider, - $interval: angular.mock.$IntervalProvider, - $httpBackend: angular.mock.$HttpBackendProvider, - $rootElement: angular.mock.$RootElementProvider -}).config(['$provide', function($provide) { - $provide.decorator('$timeout', angular.mock.$TimeoutDecorator); - $provide.decorator('$$rAF', angular.mock.$RAFDecorator); - $provide.decorator('$$asyncCallback', angular.mock.$AsyncCallbackDecorator); - $provide.decorator('$rootScope', angular.mock.$RootScopeDecorator); -}]); - -/** - * @ngdoc module - * @name ngMockE2E - * @module ngMockE2E - * @packageName angular-mocks - * @description - * - * The `ngMockE2E` is an angular module which contains mocks suitable for end-to-end testing. - * Currently there is only one mock present in this module - - * the {@link ngMockE2E.$httpBackend e2e $httpBackend} mock. - */ -angular.module('ngMockE2E', ['ng']).config(['$provide', function($provide) { - $provide.decorator('$httpBackend', angular.mock.e2e.$httpBackendDecorator); -}]); - -/** - * @ngdoc service - * @name $httpBackend - * @module ngMockE2E - * @description - * Fake HTTP backend implementation suitable for end-to-end testing or backend-less development of - * applications that use the {@link ng.$http $http service}. - * - * *Note*: For fake http backend implementation suitable for unit testing please see - * {@link ngMock.$httpBackend unit-testing $httpBackend mock}. - * - * This implementation can be used to respond with static or dynamic responses via the `when` api - * and its shortcuts (`whenGET`, `whenPOST`, etc) and optionally pass through requests to the - * real $httpBackend for specific requests (e.g. to interact with certain remote apis or to fetch - * templates from a webserver). - * - * As opposed to unit-testing, in an end-to-end testing scenario or in scenario when an application - * is being developed with the real backend api replaced with a mock, it is often desirable for - * certain category of requests to bypass the mock and issue a real http request (e.g. to fetch - * templates or static files from the webserver). To configure the backend with this behavior - * use the `passThrough` request handler of `when` instead of `respond`. - * - * Additionally, we don't want to manually have to flush mocked out requests like we do during unit - * testing. For this reason the e2e $httpBackend flushes mocked out requests - * automatically, closely simulating the behavior of the XMLHttpRequest object. - * - * To setup the application to run with this http backend, you have to create a module that depends - * on the `ngMockE2E` and your application modules and defines the fake backend: - * - * ```js - * myAppDev = angular.module('myAppDev', ['myApp', 'ngMockE2E']); - * myAppDev.run(function($httpBackend) { - * phones = [{name: 'phone1'}, {name: 'phone2'}]; - * - * // returns the current list of phones - * $httpBackend.whenGET('/phones').respond(phones); - * - * // adds a new phone to the phones array - * $httpBackend.whenPOST('/phones').respond(function(method, url, data) { - * var phone = angular.fromJson(data); - * phones.push(phone); - * return [200, phone, {}]; - * }); - * $httpBackend.whenGET(/^\/templates\//).passThrough(); - * //... - * }); - * ``` - * - * Afterwards, bootstrap your app with this new module. - */ - -/** - * @ngdoc method - * @name $httpBackend#when - * @module ngMockE2E - * @description - * Creates a new backend definition. - * - * @param {string} method HTTP method. - * @param {string|RegExp|function(string)} url HTTP url or function that receives the url - * and returns true if the url match the current definition. - * @param {(string|RegExp)=} data HTTP request body. - * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header - * object and returns true if the headers match the current definition. - * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that - * control how a matched request is handled. You can save this object for later use and invoke - * `respond` or `passThrough` again in order to change how a matched request is handled. - * - * - respond – - * `{function([status,] data[, headers, statusText]) - * | function(function(method, url, data, headers)}` - * – The respond method takes a set of static data to be returned or a function that can return - * an array containing response status (number), response data (string), response headers - * (Object), and the text for the status (string). - * - passThrough – `{function()}` – Any request matching a backend definition with - * `passThrough` handler will be passed through to the real backend (an XHR request will be made - * to the server.) - * - Both methods return the `requestHandler` object for possible overrides. - */ - -/** - * @ngdoc method - * @name $httpBackend#whenGET - * @module ngMockE2E - * @description - * Creates a new backend definition for GET requests. For more info see `when()`. - * - * @param {string|RegExp|function(string)} url HTTP url or function that receives the url - * and returns true if the url match the current definition. - * @param {(Object|function(Object))=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that - * control how a matched request is handled. You can save this object for later use and invoke - * `respond` or `passThrough` again in order to change how a matched request is handled. - */ - -/** - * @ngdoc method - * @name $httpBackend#whenHEAD - * @module ngMockE2E - * @description - * Creates a new backend definition for HEAD requests. For more info see `when()`. - * - * @param {string|RegExp|function(string)} url HTTP url or function that receives the url - * and returns true if the url match the current definition. - * @param {(Object|function(Object))=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that - * control how a matched request is handled. You can save this object for later use and invoke - * `respond` or `passThrough` again in order to change how a matched request is handled. - */ - -/** - * @ngdoc method - * @name $httpBackend#whenDELETE - * @module ngMockE2E - * @description - * Creates a new backend definition for DELETE requests. For more info see `when()`. - * - * @param {string|RegExp|function(string)} url HTTP url or function that receives the url - * and returns true if the url match the current definition. - * @param {(Object|function(Object))=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that - * control how a matched request is handled. You can save this object for later use and invoke - * `respond` or `passThrough` again in order to change how a matched request is handled. - */ - -/** - * @ngdoc method - * @name $httpBackend#whenPOST - * @module ngMockE2E - * @description - * Creates a new backend definition for POST requests. For more info see `when()`. - * - * @param {string|RegExp|function(string)} url HTTP url or function that receives the url - * and returns true if the url match the current definition. - * @param {(string|RegExp)=} data HTTP request body. - * @param {(Object|function(Object))=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that - * control how a matched request is handled. You can save this object for later use and invoke - * `respond` or `passThrough` again in order to change how a matched request is handled. - */ - -/** - * @ngdoc method - * @name $httpBackend#whenPUT - * @module ngMockE2E - * @description - * Creates a new backend definition for PUT requests. For more info see `when()`. - * - * @param {string|RegExp|function(string)} url HTTP url or function that receives the url - * and returns true if the url match the current definition. - * @param {(string|RegExp)=} data HTTP request body. - * @param {(Object|function(Object))=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that - * control how a matched request is handled. You can save this object for later use and invoke - * `respond` or `passThrough` again in order to change how a matched request is handled. - */ - -/** - * @ngdoc method - * @name $httpBackend#whenPATCH - * @module ngMockE2E - * @description - * Creates a new backend definition for PATCH requests. For more info see `when()`. - * - * @param {string|RegExp|function(string)} url HTTP url or function that receives the url - * and returns true if the url match the current definition. - * @param {(string|RegExp)=} data HTTP request body. - * @param {(Object|function(Object))=} headers HTTP headers. - * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that - * control how a matched request is handled. You can save this object for later use and invoke - * `respond` or `passThrough` again in order to change how a matched request is handled. - */ - -/** - * @ngdoc method - * @name $httpBackend#whenJSONP - * @module ngMockE2E - * @description - * Creates a new backend definition for JSONP requests. For more info see `when()`. - * - * @param {string|RegExp|function(string)} url HTTP url or function that receives the url - * and returns true if the url match the current definition. - * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that - * control how a matched request is handled. You can save this object for later use and invoke - * `respond` or `passThrough` again in order to change how a matched request is handled. - */ -angular.mock.e2e = {}; -angular.mock.e2e.$httpBackendDecorator = - ['$rootScope', '$timeout', '$delegate', '$browser', createHttpBackendMock]; - - -/** - * @ngdoc type - * @name $rootScope.Scope - * @module ngMock - * @description - * {@link ng.$rootScope.Scope Scope} type decorated with helper methods useful for testing. These - * methods are automatically available on any {@link ng.$rootScope.Scope Scope} instance when - * `ngMock` module is loaded. - * - * In addition to all the regular `Scope` methods, the following helper methods are available: - */ -angular.mock.$RootScopeDecorator = ['$delegate', function($delegate) { - - var $rootScopePrototype = Object.getPrototypeOf($delegate); - - $rootScopePrototype.$countChildScopes = countChildScopes; - $rootScopePrototype.$countWatchers = countWatchers; - - return $delegate; - - // ------------------------------------------------------------------------------------------ // - - /** - * @ngdoc method - * @name $rootScope.Scope#$countChildScopes - * @module ngMock - * @description - * Counts all the direct and indirect child scopes of the current scope. - * - * The current scope is excluded from the count. The count includes all isolate child scopes. - * - * @returns {number} Total number of child scopes. - */ - function countChildScopes() { - // jshint validthis: true - var count = 0; // exclude the current scope - var pendingChildHeads = [this.$$childHead]; - var currentScope; - - while (pendingChildHeads.length) { - currentScope = pendingChildHeads.shift(); - - while (currentScope) { - count += 1; - pendingChildHeads.push(currentScope.$$childHead); - currentScope = currentScope.$$nextSibling; - } - } - - return count; - } - - - /** - * @ngdoc method - * @name $rootScope.Scope#$countWatchers - * @module ngMock - * @description - * Counts all the watchers of direct and indirect child scopes of the current scope. - * - * The watchers of the current scope are included in the count and so are all the watchers of - * isolate child scopes. - * - * @returns {number} Total number of watchers. - */ - function countWatchers() { - // jshint validthis: true - var count = this.$$watchers ? this.$$watchers.length : 0; // include the current scope - var pendingChildHeads = [this.$$childHead]; - var currentScope; - - while (pendingChildHeads.length) { - currentScope = pendingChildHeads.shift(); - - while (currentScope) { - count += currentScope.$$watchers ? currentScope.$$watchers.length : 0; - pendingChildHeads.push(currentScope.$$childHead); - currentScope = currentScope.$$nextSibling; - } - } - - return count; - } -}]; - - -if (window.jasmine || window.mocha) { - - var currentSpec = null, - isSpecRunning = function() { - return !!currentSpec; - }; - - - (window.beforeEach || window.setup)(function() { - currentSpec = this; - }); - - (window.afterEach || window.teardown)(function() { - var injector = currentSpec.$injector; - - angular.forEach(currentSpec.$modules, function(module) { - if (module && module.$$hashKey) { - module.$$hashKey = undefined; - } - }); - - currentSpec.$injector = null; - currentSpec.$modules = null; - currentSpec = null; - - if (injector) { - injector.get('$rootElement').off(); - injector.get('$browser').pollFns.length = 0; - } - - // clean up jquery's fragment cache - angular.forEach(angular.element.fragments, function(val, key) { - delete angular.element.fragments[key]; - }); - - MockXhr.$$lastInstance = null; - - angular.forEach(angular.callbacks, function(val, key) { - delete angular.callbacks[key]; - }); - angular.callbacks.counter = 0; - }); - - /** - * @ngdoc function - * @name angular.mock.module - * @description - * - * *NOTE*: This function is also published on window for easy access.<br> - * *NOTE*: This function is declared ONLY WHEN running tests with jasmine or mocha - * - * This function registers a module configuration code. It collects the configuration information - * which will be used when the injector is created by {@link angular.mock.inject inject}. - * - * See {@link angular.mock.inject inject} for usage example - * - * @param {...(string|Function|Object)} fns any number of modules which are represented as string - * aliases or as anonymous module initialization functions. The modules are used to - * configure the injector. The 'ng' and 'ngMock' modules are automatically loaded. If an - * object literal is passed they will be registered as values in the module, the key being - * the module name and the value being what is returned. - */ - window.module = angular.mock.module = function() { - var moduleFns = Array.prototype.slice.call(arguments, 0); - return isSpecRunning() ? workFn() : workFn; - ///////////////////// - function workFn() { - if (currentSpec.$injector) { - throw new Error('Injector already created, can not register a module!'); - } else { - var modules = currentSpec.$modules || (currentSpec.$modules = []); - angular.forEach(moduleFns, function(module) { - if (angular.isObject(module) && !angular.isArray(module)) { - modules.push(function($provide) { - angular.forEach(module, function(value, key) { - $provide.value(key, value); - }); - }); - } else { - modules.push(module); - } - }); - } - } - }; - - /** - * @ngdoc function - * @name angular.mock.inject - * @description - * - * *NOTE*: This function is also published on window for easy access.<br> - * *NOTE*: This function is declared ONLY WHEN running tests with jasmine or mocha - * - * The inject function wraps a function into an injectable function. The inject() creates new - * instance of {@link auto.$injector $injector} per test, which is then used for - * resolving references. - * - * - * ## Resolving References (Underscore Wrapping) - * Often, we would like to inject a reference once, in a `beforeEach()` block and reuse this - * in multiple `it()` clauses. To be able to do this we must assign the reference to a variable - * that is declared in the scope of the `describe()` block. Since we would, most likely, want - * the variable to have the same name of the reference we have a problem, since the parameter - * to the `inject()` function would hide the outer variable. - * - * To help with this, the injected parameters can, optionally, be enclosed with underscores. - * These are ignored by the injector when the reference name is resolved. - * - * For example, the parameter `_myService_` would be resolved as the reference `myService`. - * Since it is available in the function body as _myService_, we can then assign it to a variable - * defined in an outer scope. - * - * ``` - * // Defined out reference variable outside - * var myService; - * - * // Wrap the parameter in underscores - * beforeEach( inject( function(_myService_){ - * myService = _myService_; - * })); - * - * // Use myService in a series of tests. - * it('makes use of myService', function() { - * myService.doStuff(); - * }); - * - * ``` - * - * See also {@link angular.mock.module angular.mock.module} - * - * ## Example - * Example of what a typical jasmine tests looks like with the inject method. - * ```js - * - * angular.module('myApplicationModule', []) - * .value('mode', 'app') - * .value('version', 'v1.0.1'); - * - * - * describe('MyApp', function() { - * - * // You need to load modules that you want to test, - * // it loads only the "ng" module by default. - * beforeEach(module('myApplicationModule')); - * - * - * // inject() is used to inject arguments of all given functions - * it('should provide a version', inject(function(mode, version) { - * expect(version).toEqual('v1.0.1'); - * expect(mode).toEqual('app'); - * })); - * - * - * // The inject and module method can also be used inside of the it or beforeEach - * it('should override a version and test the new version is injected', function() { - * // module() takes functions or strings (module aliases) - * module(function($provide) { - * $provide.value('version', 'overridden'); // override version here - * }); - * - * inject(function(version) { - * expect(version).toEqual('overridden'); - * }); - * }); - * }); - * - * ``` - * - * @param {...Function} fns any number of functions which will be injected using the injector. - */ - - - - var ErrorAddingDeclarationLocationStack = function(e, errorForStack) { - this.message = e.message; - this.name = e.name; - if (e.line) this.line = e.line; - if (e.sourceId) this.sourceId = e.sourceId; - if (e.stack && errorForStack) - this.stack = e.stack + '\n' + errorForStack.stack; - if (e.stackArray) this.stackArray = e.stackArray; - }; - ErrorAddingDeclarationLocationStack.prototype.toString = Error.prototype.toString; - - window.inject = angular.mock.inject = function() { - var blockFns = Array.prototype.slice.call(arguments, 0); - var errorForStack = new Error('Declaration Location'); - return isSpecRunning() ? workFn.call(currentSpec) : workFn; - ///////////////////// - function workFn() { - var modules = currentSpec.$modules || []; - var strictDi = !!currentSpec.$injectorStrict; - modules.unshift('ngMock'); - modules.unshift('ng'); - var injector = currentSpec.$injector; - if (!injector) { - if (strictDi) { - // If strictDi is enabled, annotate the providerInjector blocks - angular.forEach(modules, function(moduleFn) { - if (typeof moduleFn === "function") { - angular.injector.$$annotate(moduleFn); - } - }); - } - injector = currentSpec.$injector = angular.injector(modules, strictDi); - currentSpec.$injectorStrict = strictDi; - } - for (var i = 0, ii = blockFns.length; i < ii; i++) { - if (currentSpec.$injectorStrict) { - // If the injector is strict / strictDi, and the spec wants to inject using automatic - // annotation, then annotate the function here. - injector.annotate(blockFns[i]); - } - try { - /* jshint -W040 *//* Jasmine explicitly provides a `this` object when calling functions */ - injector.invoke(blockFns[i] || angular.noop, this); - /* jshint +W040 */ - } catch (e) { - if (e.stack && errorForStack) { - throw new ErrorAddingDeclarationLocationStack(e, errorForStack); - } - throw e; - } finally { - errorForStack = null; - } - } - } - }; - - - angular.mock.inject.strictDi = function(value) { - value = arguments.length ? !!value : true; - return isSpecRunning() ? workFn() : workFn; - - function workFn() { - if (value !== currentSpec.$injectorStrict) { - if (currentSpec.$injector) { - throw new Error('Injector already created, can not modify strict annotations'); - } else { - currentSpec.$injectorStrict = value; - } - } - } - }; -} - - -})(window, window.angular); diff --git a/src/main/webapp/bower_components/angular-mocks/bower.json b/src/main/webapp/bower_components/angular-mocks/bower.json deleted file mode 100644 index cd52be40..00000000 --- a/src/main/webapp/bower_components/angular-mocks/bower.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "angular-mocks", - "version": "1.3.11", - "main": "./angular-mocks.js", - "ignore": [], - "dependencies": { - "angular": "1.3.11" - } -} diff --git a/src/main/webapp/bower_components/angular-mocks/package.json b/src/main/webapp/bower_components/angular-mocks/package.json deleted file mode 100644 index c32d09fb..00000000 --- a/src/main/webapp/bower_components/angular-mocks/package.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "angular-mocks", - "version": "1.3.11", - "description": "AngularJS mocks for testing", - "main": "angular-mocks.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "repository": { - "type": "git", - "url": "https://github.com/angular/angular.js.git" - }, - "keywords": [ - "angular", - "framework", - "browser", - "mocks", - "testing", - "client-side" - ], - "author": "Angular Core Team <angular-core+npm@google.com>", - "license": "MIT", - "bugs": { - "url": "https://github.com/angular/angular.js/issues" - }, - "homepage": "http://angularjs.org" -} diff --git a/src/main/webapp/bower_components/angular-resource/.bower.json b/src/main/webapp/bower_components/angular-resource/.bower.json deleted file mode 100644 index 2ab3e3c6..00000000 --- a/src/main/webapp/bower_components/angular-resource/.bower.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "angular-resource", - "version": "1.3.11", - "main": "./angular-resource.js", - "ignore": [], - "dependencies": { - "angular": "1.3.11" - }, - "homepage": "https://github.com/angular/bower-angular-resource", - "_release": "1.3.11", - "_resolution": { - "type": "version", - "tag": "v1.3.11", - "commit": "b2ace539da53a66ca54ff88c145a12e9e1606355" - }, - "_source": "git://github.com/angular/bower-angular-resource.git", - "_target": "1.3.11", - "_originalSource": "angular-resource" -} \ No newline at end of file diff --git a/src/main/webapp/bower_components/angular-resource/README.md b/src/main/webapp/bower_components/angular-resource/README.md deleted file mode 100644 index b09e0a7b..00000000 --- a/src/main/webapp/bower_components/angular-resource/README.md +++ /dev/null @@ -1,77 +0,0 @@ -# packaged angular-resource - -This repo is for distribution on `npm` and `bower`. The source for this module is in the -[main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngResource). -Please file issues and pull requests against that repo. - -## Install - -You can install this package either with `npm` or with `bower`. - -### npm - -```shell -npm install angular-resource -``` - -Add a `<script>` to your `index.html`: - -```html -<script src="/node_modules/angular-resource/angular-resource.js"></script> -``` - -Then add `ngResource` as a dependency for your app: - -```javascript -angular.module('myApp', ['ngResource']); -``` - -Note that this package is not in CommonJS format, so doing `require('angular-resource')` will -return `undefined`. - -### bower - -```shell -bower install angular-resource -``` - -Add a `<script>` to your `index.html`: - -```html -<script src="/bower_components/angular-resource/angular-resource.js"></script> -``` - -Then add `ngResource` as a dependency for your app: - -```javascript -angular.module('myApp', ['ngResource']); -``` - -## Documentation - -Documentation is available on the -[AngularJS docs site](http://docs.angularjs.org/api/ngResource). - -## License - -The MIT License - -Copyright (c) 2010-2012 Google, Inc. http://angularjs.org - -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/src/main/webapp/bower_components/angular-resource/angular-resource.js b/src/main/webapp/bower_components/angular-resource/angular-resource.js deleted file mode 100644 index 6040d797..00000000 --- a/src/main/webapp/bower_components/angular-resource/angular-resource.js +++ /dev/null @@ -1,667 +0,0 @@ -/** - * @license AngularJS v1.3.11 - * (c) 2010-2014 Google, Inc. http://angularjs.org - * License: MIT - */ -(function(window, angular, undefined) {'use strict'; - -var $resourceMinErr = angular.$$minErr('$resource'); - -// Helper functions and regex to lookup a dotted path on an object -// stopping at undefined/null. The path must be composed of ASCII -// identifiers (just like $parse) -var MEMBER_NAME_REGEX = /^(\.[a-zA-Z_$][0-9a-zA-Z_$]*)+$/; - -function isValidDottedPath(path) { - return (path != null && path !== '' && path !== 'hasOwnProperty' && - MEMBER_NAME_REGEX.test('.' + path)); -} - -function lookupDottedPath(obj, path) { - if (!isValidDottedPath(path)) { - throw $resourceMinErr('badmember', 'Dotted member path "@{0}" is invalid.', path); - } - var keys = path.split('.'); - for (var i = 0, ii = keys.length; i < ii && obj !== undefined; i++) { - var key = keys[i]; - obj = (obj !== null) ? obj[key] : undefined; - } - return obj; -} - -/** - * Create a shallow copy of an object and clear other fields from the destination - */ -function shallowClearAndCopy(src, dst) { - dst = dst || {}; - - angular.forEach(dst, function(value, key) { - delete dst[key]; - }); - - for (var key in src) { - if (src.hasOwnProperty(key) && !(key.charAt(0) === '$' && key.charAt(1) === '$')) { - dst[key] = src[key]; - } - } - - return dst; -} - -/** - * @ngdoc module - * @name ngResource - * @description - * - * # ngResource - * - * The `ngResource` module provides interaction support with RESTful services - * via the $resource service. - * - * - * <div doc-module-components="ngResource"></div> - * - * See {@link ngResource.$resource `$resource`} for usage. - */ - -/** - * @ngdoc service - * @name $resource - * @requires $http - * - * @description - * A factory which creates a resource object that lets you interact with - * [RESTful](http://en.wikipedia.org/wiki/Representational_State_Transfer) server-side data sources. - * - * The returned resource object has action methods which provide high-level behaviors without - * the need to interact with the low level {@link ng.$http $http} service. - * - * Requires the {@link ngResource `ngResource`} module to be installed. - * - * By default, trailing slashes will be stripped from the calculated URLs, - * which can pose problems with server backends that do not expect that - * behavior. This can be disabled by configuring the `$resourceProvider` like - * this: - * - * ```js - app.config(['$resourceProvider', function($resourceProvider) { - // Don't strip trailing slashes from calculated URLs - $resourceProvider.defaults.stripTrailingSlashes = false; - }]); - * ``` - * - * @param {string} url A parametrized URL template with parameters prefixed by `:` as in - * `/user/:username`. If you are using a URL with a port number (e.g. - * `http://example.com:8080/api`), it will be respected. - * - * If you are using a url with a suffix, just add the suffix, like this: - * `$resource('http://example.com/resource.json')` or `$resource('http://example.com/:id.json')` - * or even `$resource('http://example.com/resource/:resource_id.:format')` - * If the parameter before the suffix is empty, :resource_id in this case, then the `/.` will be - * collapsed down to a single `.`. If you need this sequence to appear and not collapse then you - * can escape it with `/\.`. - * - * @param {Object=} paramDefaults Default values for `url` parameters. These can be overridden in - * `actions` methods. If any of the parameter value is a function, it will be executed every time - * when a param value needs to be obtained for a request (unless the param was overridden). - * - * Each key value in the parameter object is first bound to url template if present and then any - * excess keys are appended to the url search query after the `?`. - * - * Given a template `/path/:verb` and parameter `{verb:'greet', salutation:'Hello'}` results in - * URL `/path/greet?salutation=Hello`. - * - * If the parameter value is prefixed with `@` then the value for that parameter will be extracted - * from the corresponding property on the `data` object (provided when calling an action method). For - * example, if the `defaultParam` object is `{someParam: '@someProp'}` then the value of `someParam` - * will be `data.someProp`. - * - * @param {Object.<Object>=} actions Hash with declaration of custom actions that should extend - * the default set of resource actions. The declaration should be created in the format of {@link - * ng.$http#usage $http.config}: - * - * {action1: {method:?, params:?, isArray:?, headers:?, ...}, - * action2: {method:?, params:?, isArray:?, headers:?, ...}, - * ...} - * - * Where: - * - * - **`action`** – {string} – The name of action. This name becomes the name of the method on - * your resource object. - * - **`method`** – {string} – Case insensitive HTTP method (e.g. `GET`, `POST`, `PUT`, - * `DELETE`, `JSONP`, etc). - * - **`params`** – {Object=} – Optional set of pre-bound parameters for this action. If any of - * the parameter value is a function, it will be executed every time when a param value needs to - * be obtained for a request (unless the param was overridden). - * - **`url`** – {string} – action specific `url` override. The url templating is supported just - * like for the resource-level urls. - * - **`isArray`** – {boolean=} – If true then the returned object for this action is an array, - * see `returns` section. - * - **`transformRequest`** – - * `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` – - * transform function or an array of such functions. The transform function takes the http - * request body and headers and returns its transformed (typically serialized) version. - * By default, transformRequest will contain one function that checks if the request data is - * an object and serializes to using `angular.toJson`. To prevent this behavior, set - * `transformRequest` to an empty array: `transformRequest: []` - * - **`transformResponse`** – - * `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` – - * transform function or an array of such functions. The transform function takes the http - * response body and headers and returns its transformed (typically deserialized) version. - * By default, transformResponse will contain one function that checks if the response looks like - * a JSON string and deserializes it using `angular.fromJson`. To prevent this behavior, set - * `transformResponse` to an empty array: `transformResponse: []` - * - **`cache`** – `{boolean|Cache}` – If true, a default $http cache will be used to cache the - * GET request, otherwise if a cache instance built with - * {@link ng.$cacheFactory $cacheFactory}, this cache will be used for - * caching. - * - **`timeout`** – `{number|Promise}` – timeout in milliseconds, or {@link ng.$q promise} that - * should abort the request when resolved. - * - **`withCredentials`** - `{boolean}` - whether to set the `withCredentials` flag on the - * XHR object. See - * [requests with credentials](https://developer.mozilla.org/en/http_access_control#section_5) - * for more information. - * - **`responseType`** - `{string}` - see - * [requestType](https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#responseType). - * - **`interceptor`** - `{Object=}` - The interceptor object has two optional methods - - * `response` and `responseError`. Both `response` and `responseError` interceptors get called - * with `http response` object. See {@link ng.$http $http interceptors}. - * - * @param {Object} options Hash with custom settings that should extend the - * default `$resourceProvider` behavior. The only supported option is - * - * Where: - * - * - **`stripTrailingSlashes`** – {boolean} – If true then the trailing - * slashes from any calculated URL will be stripped. (Defaults to true.) - * - * @returns {Object} A resource "class" object with methods for the default set of resource actions - * optionally extended with custom `actions`. The default set contains these actions: - * ```js - * { 'get': {method:'GET'}, - * 'save': {method:'POST'}, - * 'query': {method:'GET', isArray:true}, - * 'remove': {method:'DELETE'}, - * 'delete': {method:'DELETE'} }; - * ``` - * - * Calling these methods invoke an {@link ng.$http} with the specified http method, - * destination and parameters. When the data is returned from the server then the object is an - * instance of the resource class. The actions `save`, `remove` and `delete` are available on it - * as methods with the `$` prefix. This allows you to easily perform CRUD operations (create, - * read, update, delete) on server-side data like this: - * ```js - * var User = $resource('/user/:userId', {userId:'@id'}); - * var user = User.get({userId:123}, function() { - * user.abc = true; - * user.$save(); - * }); - * ``` - * - * It is important to realize that invoking a $resource object method immediately returns an - * empty reference (object or array depending on `isArray`). Once the data is returned from the - * server the existing reference is populated with the actual data. This is a useful trick since - * usually the resource is assigned to a model which is then rendered by the view. Having an empty - * object results in no rendering, once the data arrives from the server then the object is - * populated with the data and the view automatically re-renders itself showing the new data. This - * means that in most cases one never has to write a callback function for the action methods. - * - * The action methods on the class object or instance object can be invoked with the following - * parameters: - * - * - HTTP GET "class" actions: `Resource.action([parameters], [success], [error])` - * - non-GET "class" actions: `Resource.action([parameters], postData, [success], [error])` - * - non-GET instance actions: `instance.$action([parameters], [success], [error])` - * - * Success callback is called with (value, responseHeaders) arguments. Error callback is called - * with (httpResponse) argument. - * - * Class actions return empty instance (with additional properties below). - * Instance actions return promise of the action. - * - * The Resource instances and collection have these additional properties: - * - * - `$promise`: the {@link ng.$q promise} of the original server interaction that created this - * instance or collection. - * - * On success, the promise is resolved with the same resource instance or collection object, - * updated with data from server. This makes it easy to use in - * {@link ngRoute.$routeProvider resolve section of $routeProvider.when()} to defer view - * rendering until the resource(s) are loaded. - * - * On failure, the promise is resolved with the {@link ng.$http http response} object, without - * the `resource` property. - * - * If an interceptor object was provided, the promise will instead be resolved with the value - * returned by the interceptor. - * - * - `$resolved`: `true` after first server interaction is completed (either with success or - * rejection), `false` before that. Knowing if the Resource has been resolved is useful in - * data-binding. - * - * @example - * - * # Credit card resource - * - * ```js - // Define CreditCard class - var CreditCard = $resource('/user/:userId/card/:cardId', - {userId:123, cardId:'@id'}, { - charge: {method:'POST', params:{charge:true}} - }); - - // We can retrieve a collection from the server - var cards = CreditCard.query(function() { - // GET: /user/123/card - // server returns: [ {id:456, number:'1234', name:'Smith'} ]; - - var card = cards[0]; - // each item is an instance of CreditCard - expect(card instanceof CreditCard).toEqual(true); - card.name = "J. Smith"; - // non GET methods are mapped onto the instances - card.$save(); - // POST: /user/123/card/456 {id:456, number:'1234', name:'J. Smith'} - // server returns: {id:456, number:'1234', name: 'J. Smith'}; - - // our custom method is mapped as well. - card.$charge({amount:9.99}); - // POST: /user/123/card/456?amount=9.99&charge=true {id:456, number:'1234', name:'J. Smith'} - }); - - // we can create an instance as well - var newCard = new CreditCard({number:'0123'}); - newCard.name = "Mike Smith"; - newCard.$save(); - // POST: /user/123/card {number:'0123', name:'Mike Smith'} - // server returns: {id:789, number:'0123', name: 'Mike Smith'}; - expect(newCard.id).toEqual(789); - * ``` - * - * The object returned from this function execution is a resource "class" which has "static" method - * for each action in the definition. - * - * Calling these methods invoke `$http` on the `url` template with the given `method`, `params` and - * `headers`. - * When the data is returned from the server then the object is an instance of the resource type and - * all of the non-GET methods are available with `$` prefix. This allows you to easily support CRUD - * operations (create, read, update, delete) on server-side data. - - ```js - var User = $resource('/user/:userId', {userId:'@id'}); - User.get({userId:123}, function(user) { - user.abc = true; - user.$save(); - }); - ``` - * - * It's worth noting that the success callback for `get`, `query` and other methods gets passed - * in the response that came from the server as well as $http header getter function, so one - * could rewrite the above example and get access to http headers as: - * - ```js - var User = $resource('/user/:userId', {userId:'@id'}); - User.get({userId:123}, function(u, getResponseHeaders){ - u.abc = true; - u.$save(function(u, putResponseHeaders) { - //u => saved user object - //putResponseHeaders => $http header getter - }); - }); - ``` - * - * You can also access the raw `$http` promise via the `$promise` property on the object returned - * - ``` - var User = $resource('/user/:userId', {userId:'@id'}); - User.get({userId:123}) - .$promise.then(function(user) { - $scope.user = user; - }); - ``` - - * # Creating a custom 'PUT' request - * In this example we create a custom method on our resource to make a PUT request - * ```js - * var app = angular.module('app', ['ngResource', 'ngRoute']); - * - * // Some APIs expect a PUT request in the format URL/object/ID - * // Here we are creating an 'update' method - * app.factory('Notes', ['$resource', function($resource) { - * return $resource('/notes/:id', null, - * { - * 'update': { method:'PUT' } - * }); - * }]); - * - * // In our controller we get the ID from the URL using ngRoute and $routeParams - * // We pass in $routeParams and our Notes factory along with $scope - * app.controller('NotesCtrl', ['$scope', '$routeParams', 'Notes', - function($scope, $routeParams, Notes) { - * // First get a note object from the factory - * var note = Notes.get({ id:$routeParams.id }); - * $id = note.id; - * - * // Now call update passing in the ID first then the object you are updating - * Notes.update({ id:$id }, note); - * - * // This will PUT /notes/ID with the note object in the request payload - * }]); - * ``` - */ -angular.module('ngResource', ['ng']). - provider('$resource', function() { - var provider = this; - - this.defaults = { - // Strip slashes by default - stripTrailingSlashes: true, - - // Default actions configuration - actions: { - 'get': {method: 'GET'}, - 'save': {method: 'POST'}, - 'query': {method: 'GET', isArray: true}, - 'remove': {method: 'DELETE'}, - 'delete': {method: 'DELETE'} - } - }; - - this.$get = ['$http', '$q', function($http, $q) { - - var noop = angular.noop, - forEach = angular.forEach, - extend = angular.extend, - copy = angular.copy, - isFunction = angular.isFunction; - - /** - * We need our custom method because encodeURIComponent is too aggressive and doesn't follow - * http://www.ietf.org/rfc/rfc3986.txt with regards to the character set - * (pchar) allowed in path segments: - * segment = *pchar - * pchar = unreserved / pct-encoded / sub-delims / ":" / "@" - * pct-encoded = "%" HEXDIG HEXDIG - * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" - * sub-delims = "!" / "$" / "&" / "'" / "(" / ")" - * / "*" / "+" / "," / ";" / "=" - */ - function encodeUriSegment(val) { - return encodeUriQuery(val, true). - replace(/%26/gi, '&'). - replace(/%3D/gi, '='). - replace(/%2B/gi, '+'); - } - - - /** - * This method is intended for encoding *key* or *value* parts of query component. We need a - * custom method because encodeURIComponent is too aggressive and encodes stuff that doesn't - * have to be encoded per http://tools.ietf.org/html/rfc3986: - * query = *( pchar / "/" / "?" ) - * pchar = unreserved / pct-encoded / sub-delims / ":" / "@" - * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" - * pct-encoded = "%" HEXDIG HEXDIG - * sub-delims = "!" / "$" / "&" / "'" / "(" / ")" - * / "*" / "+" / "," / ";" / "=" - */ - function encodeUriQuery(val, pctEncodeSpaces) { - return encodeURIComponent(val). - replace(/%40/gi, '@'). - replace(/%3A/gi, ':'). - replace(/%24/g, '$'). - replace(/%2C/gi, ','). - replace(/%20/g, (pctEncodeSpaces ? '%20' : '+')); - } - - function Route(template, defaults) { - this.template = template; - this.defaults = extend({}, provider.defaults, defaults); - this.urlParams = {}; - } - - Route.prototype = { - setUrlParams: function(config, params, actionUrl) { - var self = this, - url = actionUrl || self.template, - val, - encodedVal; - - var urlParams = self.urlParams = {}; - forEach(url.split(/\W/), function(param) { - if (param === 'hasOwnProperty') { - throw $resourceMinErr('badname', "hasOwnProperty is not a valid parameter name."); - } - if (!(new RegExp("^\\d+$").test(param)) && param && - (new RegExp("(^|[^\\\\]):" + param + "(\\W|$)").test(url))) { - urlParams[param] = true; - } - }); - url = url.replace(/\\:/g, ':'); - - params = params || {}; - forEach(self.urlParams, function(_, urlParam) { - val = params.hasOwnProperty(urlParam) ? params[urlParam] : self.defaults[urlParam]; - if (angular.isDefined(val) && val !== null) { - encodedVal = encodeUriSegment(val); - url = url.replace(new RegExp(":" + urlParam + "(\\W|$)", "g"), function(match, p1) { - return encodedVal + p1; - }); - } else { - url = url.replace(new RegExp("(\/?):" + urlParam + "(\\W|$)", "g"), function(match, - leadingSlashes, tail) { - if (tail.charAt(0) == '/') { - return tail; - } else { - return leadingSlashes + tail; - } - }); - } - }); - - // strip trailing slashes and set the url (unless this behavior is specifically disabled) - if (self.defaults.stripTrailingSlashes) { - url = url.replace(/\/+$/, '') || '/'; - } - - // then replace collapse `/.` if found in the last URL path segment before the query - // E.g. `http://url.com/id./format?q=x` becomes `http://url.com/id.format?q=x` - url = url.replace(/\/\.(?=\w+($|\?))/, '.'); - // replace escaped `/\.` with `/.` - config.url = url.replace(/\/\\\./, '/.'); - - - // set params - delegate param encoding to $http - forEach(params, function(value, key) { - if (!self.urlParams[key]) { - config.params = config.params || {}; - config.params[key] = value; - } - }); - } - }; - - - function resourceFactory(url, paramDefaults, actions, options) { - var route = new Route(url, options); - - actions = extend({}, provider.defaults.actions, actions); - - function extractParams(data, actionParams) { - var ids = {}; - actionParams = extend({}, paramDefaults, actionParams); - forEach(actionParams, function(value, key) { - if (isFunction(value)) { value = value(); } - ids[key] = value && value.charAt && value.charAt(0) == '@' ? - lookupDottedPath(data, value.substr(1)) : value; - }); - return ids; - } - - function defaultResponseInterceptor(response) { - return response.resource; - } - - function Resource(value) { - shallowClearAndCopy(value || {}, this); - } - - Resource.prototype.toJSON = function() { - var data = extend({}, this); - delete data.$promise; - delete data.$resolved; - return data; - }; - - forEach(actions, function(action, name) { - var hasBody = /^(POST|PUT|PATCH)$/i.test(action.method); - - Resource[name] = function(a1, a2, a3, a4) { - var params = {}, data, success, error; - - /* jshint -W086 */ /* (purposefully fall through case statements) */ - switch (arguments.length) { - case 4: - error = a4; - success = a3; - //fallthrough - case 3: - case 2: - if (isFunction(a2)) { - if (isFunction(a1)) { - success = a1; - error = a2; - break; - } - - success = a2; - error = a3; - //fallthrough - } else { - params = a1; - data = a2; - success = a3; - break; - } - case 1: - if (isFunction(a1)) success = a1; - else if (hasBody) data = a1; - else params = a1; - break; - case 0: break; - default: - throw $resourceMinErr('badargs', - "Expected up to 4 arguments [params, data, success, error], got {0} arguments", - arguments.length); - } - /* jshint +W086 */ /* (purposefully fall through case statements) */ - - var isInstanceCall = this instanceof Resource; - var value = isInstanceCall ? data : (action.isArray ? [] : new Resource(data)); - var httpConfig = {}; - var responseInterceptor = action.interceptor && action.interceptor.response || - defaultResponseInterceptor; - var responseErrorInterceptor = action.interceptor && action.interceptor.responseError || - undefined; - - forEach(action, function(value, key) { - if (key != 'params' && key != 'isArray' && key != 'interceptor') { - httpConfig[key] = copy(value); - } - }); - - if (hasBody) httpConfig.data = data; - route.setUrlParams(httpConfig, - extend({}, extractParams(data, action.params || {}), params), - action.url); - - var promise = $http(httpConfig).then(function(response) { - var data = response.data, - promise = value.$promise; - - if (data) { - // Need to convert action.isArray to boolean in case it is undefined - // jshint -W018 - if (angular.isArray(data) !== (!!action.isArray)) { - throw $resourceMinErr('badcfg', - 'Error in resource configuration for action `{0}`. Expected response to ' + - 'contain an {1} but got an {2}', name, action.isArray ? 'array' : 'object', - angular.isArray(data) ? 'array' : 'object'); - } - // jshint +W018 - if (action.isArray) { - value.length = 0; - forEach(data, function(item) { - if (typeof item === "object") { - value.push(new Resource(item)); - } else { - // Valid JSON values may be string literals, and these should not be converted - // into objects. These items will not have access to the Resource prototype - // methods, but unfortunately there - value.push(item); - } - }); - } else { - shallowClearAndCopy(data, value); - value.$promise = promise; - } - } - - value.$resolved = true; - - response.resource = value; - - return response; - }, function(response) { - value.$resolved = true; - - (error || noop)(response); - - return $q.reject(response); - }); - - promise = promise.then( - function(response) { - var value = responseInterceptor(response); - (success || noop)(value, response.headers); - return value; - }, - responseErrorInterceptor); - - if (!isInstanceCall) { - // we are creating instance / collection - // - set the initial promise - // - return the instance / collection - value.$promise = promise; - value.$resolved = false; - - return value; - } - - // instance call - return promise; - }; - - - Resource.prototype['$' + name] = function(params, success, error) { - if (isFunction(params)) { - error = success; success = params; params = {}; - } - var result = Resource[name].call(this, params, this, success, error); - return result.$promise || result; - }; - }); - - Resource.bind = function(additionalParamDefaults) { - return resourceFactory(url, extend({}, paramDefaults, additionalParamDefaults), actions); - }; - - return Resource; - } - - return resourceFactory; - }]; - }); - - -})(window, window.angular); diff --git a/src/main/webapp/bower_components/angular-resource/angular-resource.min.js b/src/main/webapp/bower_components/angular-resource/angular-resource.min.js deleted file mode 100644 index 880ac287..00000000 --- a/src/main/webapp/bower_components/angular-resource/angular-resource.min.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - AngularJS v1.3.11 - (c) 2010-2014 Google, Inc. http://angularjs.org - License: MIT -*/ -(function(I,d,B){'use strict';function D(f,q){q=q||{};d.forEach(q,function(d,h){delete q[h]});for(var h in f)!f.hasOwnProperty(h)||"$"===h.charAt(0)&&"$"===h.charAt(1)||(q[h]=f[h]);return q}var w=d.$$minErr("$resource"),C=/^(\.[a-zA-Z_$][0-9a-zA-Z_$]*)+$/;d.module("ngResource",["ng"]).provider("$resource",function(){var f=this;this.defaults={stripTrailingSlashes:!0,actions:{get:{method:"GET"},save:{method:"POST"},query:{method:"GET",isArray:!0},remove:{method:"DELETE"},"delete":{method:"DELETE"}}}; -this.$get=["$http","$q",function(q,h){function t(d,g){this.template=d;this.defaults=s({},f.defaults,g);this.urlParams={}}function v(x,g,l,m){function c(b,k){var c={};k=s({},g,k);r(k,function(a,k){u(a)&&(a=a());var d;if(a&&a.charAt&&"@"==a.charAt(0)){d=b;var e=a.substr(1);if(null==e||""===e||"hasOwnProperty"===e||!C.test("."+e))throw w("badmember",e);for(var e=e.split("."),n=0,g=e.length;n<g&&d!==B;n++){var h=e[n];d=null!==d?d[h]:B}}else d=a;c[k]=d});return c}function F(b){return b.resource}function e(b){D(b|| -{},this)}var G=new t(x,m);l=s({},f.defaults.actions,l);e.prototype.toJSON=function(){var b=s({},this);delete b.$promise;delete b.$resolved;return b};r(l,function(b,k){var g=/^(POST|PUT|PATCH)$/i.test(b.method);e[k]=function(a,y,m,x){var n={},f,l,z;switch(arguments.length){case 4:z=x,l=m;case 3:case 2:if(u(y)){if(u(a)){l=a;z=y;break}l=y;z=m}else{n=a;f=y;l=m;break}case 1:u(a)?l=a:g?f=a:n=a;break;case 0:break;default:throw w("badargs",arguments.length);}var t=this instanceof e,p=t?f:b.isArray?[]:new e(f), -A={},v=b.interceptor&&b.interceptor.response||F,C=b.interceptor&&b.interceptor.responseError||B;r(b,function(b,a){"params"!=a&&"isArray"!=a&&"interceptor"!=a&&(A[a]=H(b))});g&&(A.data=f);G.setUrlParams(A,s({},c(f,b.params||{}),n),b.url);n=q(A).then(function(a){var c=a.data,g=p.$promise;if(c){if(d.isArray(c)!==!!b.isArray)throw w("badcfg",k,b.isArray?"array":"object",d.isArray(c)?"array":"object");b.isArray?(p.length=0,r(c,function(a){"object"===typeof a?p.push(new e(a)):p.push(a)})):(D(c,p),p.$promise= -g)}p.$resolved=!0;a.resource=p;return a},function(a){p.$resolved=!0;(z||E)(a);return h.reject(a)});n=n.then(function(a){var b=v(a);(l||E)(b,a.headers);return b},C);return t?n:(p.$promise=n,p.$resolved=!1,p)};e.prototype["$"+k]=function(a,b,c){u(a)&&(c=b,b=a,a={});a=e[k].call(this,a,this,b,c);return a.$promise||a}});e.bind=function(b){return v(x,s({},g,b),l)};return e}var E=d.noop,r=d.forEach,s=d.extend,H=d.copy,u=d.isFunction;t.prototype={setUrlParams:function(f,g,l){var m=this,c=l||m.template,h, -e,q=m.urlParams={};r(c.split(/\W/),function(b){if("hasOwnProperty"===b)throw w("badname");!/^\d+$/.test(b)&&b&&(new RegExp("(^|[^\\\\]):"+b+"(\\W|$)")).test(c)&&(q[b]=!0)});c=c.replace(/\\:/g,":");g=g||{};r(m.urlParams,function(b,k){h=g.hasOwnProperty(k)?g[k]:m.defaults[k];d.isDefined(h)&&null!==h?(e=encodeURIComponent(h).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"%20").replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+"),c=c.replace(new RegExp(":"+ -k+"(\\W|$)","g"),function(b,a){return e+a})):c=c.replace(new RegExp("(/?):"+k+"(\\W|$)","g"),function(b,a,c){return"/"==c.charAt(0)?c:a+c})});m.defaults.stripTrailingSlashes&&(c=c.replace(/\/+$/,"")||"/");c=c.replace(/\/\.(?=\w+($|\?))/,".");f.url=c.replace(/\/\\\./,"/.");r(g,function(b,c){m.urlParams[c]||(f.params=f.params||{},f.params[c]=b)})}};return v}]})})(window,window.angular); -//# sourceMappingURL=angular-resource.min.js.map diff --git a/src/main/webapp/bower_components/angular-resource/angular-resource.min.js.map b/src/main/webapp/bower_components/angular-resource/angular-resource.min.js.map deleted file mode 100644 index 4a83edf3..00000000 --- a/src/main/webapp/bower_components/angular-resource/angular-resource.min.js.map +++ /dev/null @@ -1,8 +0,0 @@ -{ -"version":3, -"file":"angular-resource.min.js", -"lineCount":12, -"mappings":"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", -"sources":["angular-resource.js"], -"names":["window","angular","undefined","shallowClearAndCopy","src","dst","forEach","value","key","hasOwnProperty","charAt","$resourceMinErr","$$minErr","MEMBER_NAME_REGEX","module","provider","defaults","stripTrailingSlashes","actions","method","isArray","$get","$http","$q","Route","template","extend","urlParams","resourceFactory","url","paramDefaults","options","extractParams","data","actionParams","ids","isFunction","path","test","keys","split","i","ii","length","obj","defaultResponseInterceptor","response","resource","Resource","route","prototype","toJSON","Resource.prototype.toJSON","$promise","$resolved","action","name","hasBody","a1","a2","a3","a4","params","success","error","arguments","isInstanceCall","httpConfig","responseInterceptor","interceptor","responseErrorInterceptor","responseError","copy","setUrlParams","promise","then","item","push","noop","reject","headers","result","call","bind","Resource.bind","additionalParamDefaults","config","actionUrl","self","val","encodedVal","param","RegExp","replace","_","urlParam","isDefined","encodeURIComponent","match","p1","leadingSlashes","tail"] -} diff --git a/src/main/webapp/bower_components/angular-resource/bower.json b/src/main/webapp/bower_components/angular-resource/bower.json deleted file mode 100644 index 92e3c0cd..00000000 --- a/src/main/webapp/bower_components/angular-resource/bower.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "angular-resource", - "version": "1.3.11", - "main": "./angular-resource.js", - "ignore": [], - "dependencies": { - "angular": "1.3.11" - } -} diff --git a/src/main/webapp/bower_components/angular-resource/package.json b/src/main/webapp/bower_components/angular-resource/package.json deleted file mode 100644 index 612fe25b..00000000 --- a/src/main/webapp/bower_components/angular-resource/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "angular-resource", - "version": "1.3.11", - "description": "AngularJS module for interacting with RESTful server-side data sources", - "main": "angular-resource.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "repository": { - "type": "git", - "url": "https://github.com/angular/angular.js.git" - }, - "keywords": [ - "angular", - "framework", - "browser", - "rest", - "client-side" - ], - "author": "Angular Core Team <angular-core+npm@google.com>", - "license": "MIT", - "bugs": { - "url": "https://github.com/angular/angular.js/issues" - }, - "homepage": "http://angularjs.org" -} diff --git a/src/main/webapp/bower_components/angular-scenario/.bower.json b/src/main/webapp/bower_components/angular-scenario/.bower.json deleted file mode 100644 index c24ab1f8..00000000 --- a/src/main/webapp/bower_components/angular-scenario/.bower.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "angular-scenario", - "version": "1.3.11", - "main": "./angular-scenario.js", - "ignore": [], - "dependencies": { - "angular": "1.3.11" - }, - "homepage": "https://github.com/angular/bower-angular-scenario", - "_release": "1.3.11", - "_resolution": { - "type": "version", - "tag": "v1.3.11", - "commit": "9b452ee8978462acf5d60ab0e4873163175801e5" - }, - "_source": "git://github.com/angular/bower-angular-scenario.git", - "_target": "1.3.11", - "_originalSource": "angular-scenario" -} \ No newline at end of file diff --git a/src/main/webapp/bower_components/angular-scenario/README.md b/src/main/webapp/bower_components/angular-scenario/README.md deleted file mode 100644 index b58d56e1..00000000 --- a/src/main/webapp/bower_components/angular-scenario/README.md +++ /dev/null @@ -1,61 +0,0 @@ -# packaged angular-scenario - -This tool is now in maintenance mode. If you are starting a new project, please use -[Protractor](https://github.com/angular/protractor). Existing projects using scenario runner are -advised to migrate to protractor, as this tool is unlikely to receive updates. - -This repo is for distribution on `npm` and `bower`. The source for this module is in the -[main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngScenario). -Please file issues and pull requests against that repo. - -## Install - -You can install this package either with `npm` or with `bower`. - -### npm - -```shell -npm install angular-scenario -``` - -The files are then available at `node_modules/angular-scenario/`. - -Note that this package is not in CommonJS format, so doing `require('angular-scenario')` will -return `undefined`. - -### bower - -```shell -bower install angular-scenario -``` - -The files are then available at `bower_components/angular-scenario/`. - -## Documentation - -Documentation is available on the -[AngularJS docs site](http://docs.angularjs.org/). - -## License - -The MIT License - -Copyright (c) 2010-2012 Google, Inc. http://angularjs.org - -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/src/main/webapp/bower_components/angular-scenario/angular-scenario.js b/src/main/webapp/bower_components/angular-scenario/angular-scenario.js deleted file mode 100644 index 6e1a52a8..00000000 --- a/src/main/webapp/bower_components/angular-scenario/angular-scenario.js +++ /dev/null @@ -1,37470 +0,0 @@ -/*! - * jQuery JavaScript Library v2.1.1 - * http://jquery.com/ - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * - * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors - * Released under the MIT license - * http://jquery.org/license - * - * Date: 2014-05-01T17:11Z - */ - -(function( global, factory ) {'use strict'; - - if ( typeof module === "object" && typeof module.exports === "object" ) { - // For CommonJS and CommonJS-like environments where a proper window is present, - // execute the factory and get jQuery - // For environments that do not inherently posses a window with a document - // (such as Node.js), expose a jQuery-making factory as module.exports - // This accentuates the need for the creation of a real window - // e.g. var jQuery = require("jquery")(window); - // See ticket #14549 for more info - module.exports = global.document ? - factory( global, true ) : - function( w ) { - if ( !w.document ) { - throw new Error( "jQuery requires a window with a document" ); - } - return factory( w ); - }; - } else { - factory( global ); - } - -// Pass this if window is not defined yet -}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) { - -// 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+ -// - -var arr = []; - -var slice = arr.slice; - -var concat = arr.concat; - -var push = arr.push; - -var indexOf = arr.indexOf; - -var class2type = {}; - -var toString = class2type.toString; - -var hasOwn = class2type.hasOwnProperty; - -var support = {}; - - - -var - // Use the correct document accordingly with window argument (sandbox) - document = window.document, - - version = "2.1.1", - - // Define a local copy of jQuery - jQuery = function( selector, context ) { - // The jQuery object is actually just the init constructor 'enhanced' - // Need init if jQuery is called (just allow error to be thrown if not included) - return new jQuery.fn.init( selector, context ); - }, - - // Support: Android<4.1 - // Make sure we trim BOM and NBSP - rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/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(); - }; - -jQuery.fn = jQuery.prototype = { - // The current version of jQuery being used - jquery: version, - - constructor: jQuery, - - // Start with an empty selector - selector: "", - - // The default length of a jQuery object is 0 - length: 0, - - toArray: function() { - return 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 just the one element from the set - ( num < 0 ? this[ num + this.length ] : this[ num ] ) : - - // Return all the elements in a clean array - slice.call( this ); - }, - - // 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 ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map(this, function( elem, i ) { - return callback.call( elem, i, elem ); - })); - }, - - slice: function() { - return this.pushStack( 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] ] : [] ); - }, - - end: function() { - return this.prevObject || this.constructor(null); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: push, - sort: arr.sort, - splice: arr.splice -}; - -jQuery.extend = jQuery.fn.extend = function() { - 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; - - // skip the boolean and the target - target = arguments[ i ] || {}; - i++; - } - - // 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 ( i === length ) { - 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({ - // Unique for each copy of jQuery on the page - expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), - - // Assume jQuery is ready without the ready module - isReady: true, - - error: function( msg ) { - throw new Error( msg ); - }, - - noop: function() {}, - - // 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, - - isWindow: function( obj ) { - return obj != null && obj === obj.window; - }, - - isNumeric: function( obj ) { - // parseFloat NaNs numeric-cast false positives (null|true|false|"") - // ...but misinterprets leading-number strings, particularly hex literals ("0x...") - // subtraction forces infinities to NaN - return !jQuery.isArray( obj ) && obj - parseFloat( obj ) >= 0; - }, - - isPlainObject: function( obj ) { - // Not plain objects: - // - Any object or value whose internal [[Class]] property is not "[object Object]" - // - DOM nodes - // - window - if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { - return false; - } - - if ( obj.constructor && - !hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) { - return false; - } - - // If the function hasn't returned already, we're confident that - // |obj| is a plain object, created by {} or constructed with new Object - return true; - }, - - isEmptyObject: function( obj ) { - var name; - for ( name in obj ) { - return false; - } - return true; - }, - - type: function( obj ) { - if ( obj == null ) { - return obj + ""; - } - // Support: Android < 4.0, iOS < 6 (functionish RegExp) - return typeof obj === "object" || typeof obj === "function" ? - class2type[ toString.call(obj) ] || "object" : - typeof obj; - }, - - // Evaluates a script in a global context - globalEval: function( code ) { - var script, - indirect = eval; - - code = jQuery.trim( code ); - - if ( code ) { - // If the code includes a valid, prologue position - // strict mode pragma, execute code by injecting a - // script tag into the document. - if ( code.indexOf("use strict") === 1 ) { - script = document.createElement("script"); - script.text = code; - document.head.appendChild( script ).parentNode.removeChild( script ); - } else { - // Otherwise, avoid the DOM node creation, insertion - // and removal by using an indirect global eval - indirect( code ); - } - } - }, - - // 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; - }, - - // Support: Android<4.1 - trim: 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 { - push.call( ret, arr ); - } - } - - return ret; - }, - - inArray: function( elem, arr, i ) { - return arr == null ? -1 : indexOf.call( arr, elem, i ); - }, - - merge: function( first, second ) { - var len = +second.length, - j = 0, - i = first.length; - - for ( ; j < len; j++ ) { - first[ i++ ] = second[ j ]; - } - - first.length = i; - - return first; - }, - - grep: function( elems, callback, invert ) { - var callbackInverse, - matches = [], - i = 0, - length = elems.length, - callbackExpect = !invert; - - // Go through the array, only saving the items - // that pass the validator function - for ( ; i < length; i++ ) { - callbackInverse = !callback( elems[ i ], i ); - if ( callbackInverse !== callbackExpect ) { - matches.push( elems[ i ] ); - } - } - - return matches; - }, - - // 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 new values - if ( isArray ) { - for ( ; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - - // Go through every key on the object, - } else { - for ( i in elems ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - } - - // Flatten any nested arrays - return 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 tmp, args, proxy; - - 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 = slice.call( arguments, 2 ); - proxy = function() { - return fn.apply( context || this, args.concat( 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; - }, - - now: Date.now, - - // jQuery.support is not used in Core but other projects attach their - // properties to it so it needs to exist. - support: support -}); - -// 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 ( type === "function" || jQuery.isWindow( obj ) ) { - return false; - } - - if ( obj.nodeType === 1 && length ) { - return true; - } - - return type === "array" || length === 0 || - typeof length === "number" && length > 0 && ( length - 1 ) in obj; -} -var Sizzle = -/*! - * Sizzle CSS Selector Engine v1.10.19 - * http://sizzlejs.com/ - * - * Copyright 2013 jQuery Foundation, Inc. and other contributors - * Released under the MIT license - * http://jquery.org/license - * - * Date: 2014-04-18 - */ -(function( window ) { - -var i, - support, - Expr, - getText, - isXML, - tokenize, - compile, - select, - outermostContext, - sortInput, - hasDuplicate, - - // Local document vars - setDocument, - document, - docElem, - documentIsHTML, - rbuggyQSA, - rbuggyMatches, - matches, - contains, - - // Instance-specific data - expando = "sizzle" + -(new Date()), - preferredDoc = window.document, - dirruns = 0, - done = 0, - classCache = createCache(), - tokenCache = createCache(), - compilerCache = createCache(), - sortOrder = function( a, b ) { - if ( a === b ) { - hasDuplicate = true; - } - return 0; - }, - - // General-purpose constants - strundefined = typeof undefined, - MAX_NEGATIVE = 1 << 31, - - // Instance methods - hasOwn = ({}).hasOwnProperty, - arr = [], - pop = arr.pop, - push_native = arr.push, - 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; - }, - - booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", - - // 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#" ), - - // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors - attributes = "\\[" + whitespace + "*(" + characterEncoding + ")(?:" + whitespace + - // Operator (capture 2) - "*([*^$|!~]?=)" + whitespace + - // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" - "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + - "*\\]", - - pseudos = ":(" + characterEncoding + ")(?:\\((" + - // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: - // 1. quoted (capture 3; capture 4 or capture 5) - "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + - // 2. simple (capture 6) - "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + - // 3. anything else (capture 2) - ".*" + - ")\\)|)", - - // 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 + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), - - rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), - - rpseudo = new RegExp( pseudos ), - ridentifier = new RegExp( "^" + identifier + "$" ), - - matchExpr = { - "ID": new RegExp( "^#(" + characterEncoding + ")" ), - "CLASS": new RegExp( "^\\.(" + 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" ), - "bool": new RegExp( "^(?:" + booleans + ")$", "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" ) - }, - - rinputs = /^(?:input|select|textarea|button)$/i, - rheader = /^h\d$/i, - - rnative = /^[^{]+\{\s*\[native \w/, - - // Easily-parseable/retrievable ID or TAG or CLASS selectors - rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, - - rsibling = /[+~]/, - rescape = /'|\\/g, - - // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters - runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), - funescape = function( _, escaped, escapedWhitespace ) { - var high = "0x" + escaped - 0x10000; - // NaN means non-codepoint - // Support: Firefox<24 - // Workaround erroneous numeric interpretation of +"0x" - return high !== high || escapedWhitespace ? - escaped : - high < 0 ? - // BMP codepoint - String.fromCharCode( high + 0x10000 ) : - // Supplemental Plane codepoint (surrogate pair) - String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); - }; - -// Optimize for push.apply( _, NodeList ) -try { - push.apply( - (arr = slice.call( preferredDoc.childNodes )), - preferredDoc.childNodes - ); - // Support: Android<4.0 - // Detect silently failing push.apply - arr[ preferredDoc.childNodes.length ].nodeType; -} catch ( e ) { - push = { apply: arr.length ? - - // Leverage slice if possible - function( target, els ) { - push_native.apply( target, slice.call(els) ); - } : - - // Support: IE<9 - // Otherwise append directly - function( target, els ) { - var j = target.length, - i = 0; - // Can't trust NodeList.length - while ( (target[j++] = els[i++]) ) {} - target.length = j - 1; - } - }; -} - -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 ( documentIsHTML && !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 (jQuery #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, context.getElementsByTagName( selector ) ); - return results; - - // Speed-up: Sizzle(".CLASS") - } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) { - push.apply( results, context.getElementsByClassName( m ) ); - return results; - } - } - - // QSA path - if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { - nid = old = 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 ) && testContext( context.parentNode ) || context; - newSelector = groups.join(","); - } - - if ( newSelector ) { - try { - push.apply( results, - newContext.querySelectorAll( newSelector ) - ); - return results; - } catch(qsaError) { - } finally { - if ( !old ) { - context.removeAttribute("id"); - } - } - } - } - } - - // All others - return select( selector.replace( rtrim, "$1" ), context, results, seed ); -} - -/** - * 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 keys = []; - - function cache( 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); - } - return cache; -} - -/** - * 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 { - // Remove from its parent by default - if ( div.parentNode ) { - div.parentNode.removeChild( div ); - } - // release memory in IE - div = null; - } -} - -/** - * Adds the same handler for all of the specified attrs - * @param {String} attrs Pipe-separated list of attributes - * @param {Function} handler The method that will be applied - */ -function addHandle( attrs, handler ) { - var arr = attrs.split("|"), - i = attrs.length; - - while ( i-- ) { - Expr.attrHandle[ arr[i] ] = handler; - } -} - -/** - * Checks document order of two siblings - * @param {Element} a - * @param {Element} b - * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b - */ -function siblingCheck( a, b ) { - var cur = b && a, - diff = cur && a.nodeType === 1 && b.nodeType === 1 && - ( ~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 - * @param {String} type - */ -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 - * @param {String} type - */ -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 - * @param {Function} fn - */ -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]); - } - } - }); - }); -} - -/** - * Checks a node for validity as a Sizzle context - * @param {Element|Object=} context - * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value - */ -function testContext( context ) { - return context && typeof context.getElementsByTagName !== strundefined && context; -} - -// Expose support vars for convenience -support = Sizzle.support = {}; - -/** - * Detects XML nodes - * @param {Element|Object} elem An element or a document - * @returns {Boolean} True iff elem is a non-HTML XML node - */ -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 hasCompare, - doc = node ? node.ownerDocument || node : preferredDoc, - parent = doc.defaultView; - - // 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 - documentIsHTML = !isXML( doc ); - - // Support: IE>8 - // If iframe document is assigned to "document" variable and if iframe has been reloaded, - // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936 - // IE6-8 do not support the defaultView property so parent will be undefined - if ( parent && parent !== parent.top ) { - // IE11 does not have attachEvent, so all must suffer - if ( parent.addEventListener ) { - parent.addEventListener( "unload", function() { - setDocument(); - }, false ); - } else if ( parent.attachEvent ) { - parent.attachEvent( "onunload", function() { - setDocument(); - }); - } - } - - /* Attributes - ---------------------------------------------------------------------- */ - - // Support: IE<8 - // Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans) - support.attributes = assert(function( div ) { - div.className = "i"; - return !div.getAttribute("className"); - }); - - /* getElement(s)By* - ---------------------------------------------------------------------- */ - - // Check if getElementsByTagName("*") returns only elements - support.getElementsByTagName = assert(function( div ) { - div.appendChild( doc.createComment("") ); - return !div.getElementsByTagName("*").length; - }); - - // Check if getElementsByClassName can be trusted - support.getElementsByClassName = rnative.test( doc.getElementsByClassName ) && assert(function( div ) { - div.innerHTML = "<div class='a'></div><div class='a i'></div>"; - - // Support: Safari<4 - // Catch class over-caching - div.firstChild.className = "i"; - // Support: Opera<10 - // Catch gEBCN failure to find non-leading classes - return div.getElementsByClassName("i").length === 2; - }); - - // Support: IE<10 - // Check if getElementById returns elements by name - // The broken getElementById methods don't pick up programatically-set names, - // so use a roundabout getElementsByName test - support.getById = assert(function( div ) { - docElem.appendChild( div ).id = expando; - return !doc.getElementsByName || !doc.getElementsByName( expando ).length; - }); - - // ID find and filter - if ( support.getById ) { - Expr.find["ID"] = function( id, context ) { - if ( typeof context.getElementById !== strundefined && documentIsHTML ) { - 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 { - // Support: IE6/7 - // getElementById is not reliable as a find shortcut - delete Expr.find["ID"]; - - 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.getElementsByTagName ? - 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; - }; - - // Class - Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { - if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) { - return context.getElementsByClassName( className ); - } - }; - - /* QSA/matchesSelector - ---------------------------------------------------------------------- */ - - // QSA and matchesSelector support - - // matchesSelector(:active) reports false when true (IE9/Opera 11.5) - rbuggyMatches = []; - - // qSa(:focus) reports false when true (Chrome 21) - // We allow this because of a bug in IE8/9 that throws an error - // whenever `document.activeElement` is accessed on an iframe - // So, we allow :focus to pass through QSA all the time to avoid the IE error - // See http://bugs.jquery.com/ticket/13378 - rbuggyQSA = []; - - if ( (support.qsa = rnative.test( 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 explicitly - // setting a boolean content attribute, - // since its presence should be enough - // http://bugs.jquery.com/ticket/12359 - div.innerHTML = "<select msallowclip=''><option selected=''></option></select>"; - - // Support: IE8, Opera 11-12.16 - // Nothing should be selected when empty strings follow ^= or $= or *= - // The test attribute must be unknown in Opera but "safe" for WinRT - // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section - if ( div.querySelectorAll("[msallowclip^='']").length ) { - rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); - } - - // Support: IE8 - // Boolean attributes and "value" are not treated correctly - if ( !div.querySelectorAll("[selected]").length ) { - rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); - } - - // 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 ) { - // Support: Windows 8 Native Apps - // The type and name attributes are restricted during .innerHTML assignment - var input = doc.createElement("input"); - input.setAttribute( "type", "hidden" ); - div.appendChild( input ).setAttribute( "name", "D" ); - - // Support: IE8 - // Enforce case-sensitivity of name attribute - if ( div.querySelectorAll("[name=d]").length ) { - rbuggyQSA.push( "name" + 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 = rnative.test( (matches = docElem.matches || - docElem.webkitMatchesSelector || - docElem.mozMatchesSelector || - 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 = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); - rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); - - /* Contains - ---------------------------------------------------------------------- */ - hasCompare = rnative.test( docElem.compareDocumentPosition ); - - // Element contains another - // Purposefully does not implement inclusive descendent - // As in, an element does not contain itself - contains = hasCompare || rnative.test( docElem.contains ) ? - 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; - }; - - /* Sorting - ---------------------------------------------------------------------- */ - - // Document order sorting - sortOrder = hasCompare ? - function( a, b ) { - - // Flag for duplicate removal - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - // Sort on method existence if only one input has compareDocumentPosition - var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; - if ( compare ) { - return compare; - } - - // Calculate position if both inputs belong to the same document - compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? - a.compareDocumentPosition( b ) : - - // Otherwise we know they are disconnected - 1; - - // Disconnected nodes - if ( compare & 1 || - (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { - - // Choose the first element that is related to our preferred document - if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { - return -1; - } - if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { - return 1; - } - - // Maintain original order - return sortInput ? - ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : - 0; - } - - return compare & 4 ? -1 : 1; - } : - function( a, b ) { - // Exit early if the nodes are identical - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - var cur, - i = 0, - aup = a.parentNode, - bup = b.parentNode, - ap = [ a ], - bp = [ b ]; - - // Parentless nodes are either documents or disconnected - if ( !aup || !bup ) { - return a === doc ? -1 : - b === doc ? 1 : - aup ? -1 : - bup ? 1 : - sortInput ? - ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : - 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; - }; - - return doc; -}; - -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']" ); - - if ( support.matchesSelector && documentIsHTML && - ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && - ( !rbuggyQSA || !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 ) { - // Set document vars if needed - if ( ( elem.ownerDocument || elem ) !== document ) { - setDocument( elem ); - } - - var fn = Expr.attrHandle[ name.toLowerCase() ], - // Don't get fooled by Object.prototype properties (jQuery #13807) - val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? - fn( elem, name, !documentIsHTML ) : - undefined; - - return val !== undefined ? - val : - support.attributes || !documentIsHTML ? - elem.getAttribute( name ) : - (val = elem.getAttributeNode(name)) && val.specified ? - val.value : - null; -}; - -Sizzle.error = function( msg ) { - throw new Error( "Syntax error, unrecognized expression: " + msg ); -}; - -/** - * Document sorting and removing duplicates - * @param {ArrayLike} results - */ -Sizzle.uniqueSort = function( results ) { - var elem, - duplicates = [], - j = 0, - i = 0; - - // Unless we *know* we can detect duplicates, assume their presence - hasDuplicate = !support.detectDuplicates; - sortInput = !support.sortStable && results.slice( 0 ); - results.sort( sortOrder ); - - if ( hasDuplicate ) { - while ( (elem = results[i++]) ) { - if ( elem === results[ i ] ) { - j = duplicates.push( i ); - } - } - while ( j-- ) { - results.splice( duplicates[ j ], 1 ); - } - } - - // Clear input after sorting to release objects - // See https://github.com/jquery/sizzle/pull/225 - sortInput = null; - - return results; -}; - -/** - * 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 - while ( (node = elem[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 (jQuery #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, - - attrHandle: {}, - - 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[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[6] && match[2]; - - if ( matchExpr["CHILD"].test( match[0] ) ) { - return null; - } - - // Accept quoted arguments as-is - if ( match[3] ) { - match[2] = match[4] || match[5] || ""; - - // 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( nodeNameSelector ) { - var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); - return nodeNameSelector === "*" ? - function() { return true; } : - 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( typeof elem.className === "string" && 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 identifier - if ( !ridentifier.test(lang || "") ) { - Sizzle.error( "unsupported lang: " + lang ); - } - lang = lang.replace( runescape, funescape ).toLowerCase(); - return function( elem ) { - var elemLang; - do { - if ( (elemLang = documentIsHTML ? - elem.lang : - elem.getAttribute("xml:lang") || elem.getAttribute("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 negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), - // but not by others (comment: 8; processing instruction: 7; etc.) - // nodeType < 6 works because attributes (2) do not appear as children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - if ( elem.nodeType < 6 ) { - 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; - return elem.nodeName.toLowerCase() === "input" && - elem.type === "text" && - - // Support: IE<8 - // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" - ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); - }, - - // 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; - }) - } -}; - -Expr.pseudos["nth"] = Expr.pseudos["eq"]; - -// 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 ); -} - -// Easy API for creating new setFilters -function setFilters() {} -setFilters.prototype = Expr.filters = Expr.pseudos; -Expr.setFilters = new setFilters(); - -tokenize = Sizzle.tokenize = function( 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 oldCache, outerCache, - newCache = [ 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 ( (oldCache = outerCache[ dir ]) && - oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { - - // Assign to newCache so results back-propagate to previous elements - return (newCache[ 2 ] = oldCache[ 2 ]); - } else { - // Reuse newcache so results back-propagate to previous elements - outerCache[ dir ] = newCache; - - // A match means we're done; a fail means we have to keep checking - if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { - 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 multipleContexts( selector, contexts, results ) { - var i = 0, - len = contexts.length; - for ( ; i < len; i++ ) { - Sizzle( selector, contexts[i], results ); - } - return results; -} - -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( - // If the preceding token was a descendant combinator, insert an implicit any-element `*` - tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) - ).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 ) { - var bySet = setMatchers.length > 0, - byElement = elementMatchers.length > 0, - superMatcher = function( seed, context, xml, results, outermost ) { - var elem, j, matcher, - matchedCount = 0, - i = "0", - unmatched = seed && [], - setMatched = [], - contextBackup = outermostContext, - // We must always have either seed elements or outermost context - elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), - // Use integer dirruns iff this is the outermost matcher - dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), - len = elems.length; - - if ( outermost ) { - outermostContext = context !== document && context; - } - - // Add elements passing elementMatchers directly to results - // Keep `i` a string if there are no elements so `matchedCount` will be "00" below - // Support: IE<9, Safari - // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id - for ( ; i !== len && (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; - } - } - - // 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, match /* 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 ( !match ) { - match = tokenize( selector ); - } - i = match.length; - while ( i-- ) { - cached = matcherFromTokens( match[i] ); - if ( cached[ expando ] ) { - setMatchers.push( cached ); - } else { - elementMatchers.push( cached ); - } - } - - // Cache the compiled function - cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); - - // Save selector and tokenization - cached.selector = selector; - } - return cached; -}; - -/** - * A low-level selection function that works with Sizzle's compiled - * selector functions - * @param {String|Function} selector A selector or a pre-compiled - * selector function built with Sizzle.compile - * @param {Element} context - * @param {Array} [results] - * @param {Array} [seed] A set of elements to match against - */ -select = Sizzle.select = function( selector, context, results, seed ) { - var i, tokens, token, type, find, - compiled = typeof selector === "function" && selector, - match = !seed && tokenize( (selector = compiled.selector || selector) ); - - results = results || []; - - // Try to minimize operations if there is no seed and 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" && - support.getById && context.nodeType === 9 && documentIsHTML && - Expr.relative[ tokens[1].type ] ) { - - context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; - if ( !context ) { - return results; - - // Precompiled matchers will still verify ancestry, so step up a level - } else if ( compiled ) { - context = context.parentNode; - } - - 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 ) && testContext( 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, seed ); - return results; - } - - break; - } - } - } - } - - // Compile and execute a filtering function if one is not provided - // Provide `match` to avoid retokenization if we modified the selector above - ( compiled || compile( selector, match ) )( - seed, - context, - !documentIsHTML, - results, - rsibling.test( selector ) && testContext( context.parentNode ) || context - ); - return results; -}; - -// One-time assignments - -// Sort stability -support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; - -// Support: Chrome<14 -// Always assume duplicates if they aren't passed to the comparison function -support.detectDuplicates = !!hasDuplicate; - -// Initialize against the default document -setDocument(); - -// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) -// Detached nodes confoundingly follow *each other* -support.sortDetached = assert(function( div1 ) { - // Should return 1, but returns 4 (following) - return div1.compareDocumentPosition( document.createElement("div") ) & 1; -}); - -// Support: IE<8 -// Prevent attribute/property "interpolation" -// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx -if ( !assert(function( div ) { - div.innerHTML = "<a href='#'></a>"; - return div.firstChild.getAttribute("href") === "#" ; -}) ) { - addHandle( "type|href|height|width", function( elem, name, isXML ) { - if ( !isXML ) { - return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); - } - }); -} - -// Support: IE<9 -// Use defaultValue in place of getAttribute("value") -if ( !support.attributes || !assert(function( div ) { - div.innerHTML = "<input/>"; - div.firstChild.setAttribute( "value", "" ); - return div.firstChild.getAttribute( "value" ) === ""; -}) ) { - addHandle( "value", function( elem, name, isXML ) { - if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { - return elem.defaultValue; - } - }); -} - -// Support: IE<9 -// Use getAttributeNode to fetch booleans when getAttribute lies -if ( !assert(function( div ) { - return div.getAttribute("disabled") == null; -}) ) { - addHandle( booleans, function( elem, name, isXML ) { - var val; - if ( !isXML ) { - return elem[ name ] === true ? name.toLowerCase() : - (val = elem.getAttributeNode( name )) && val.specified ? - val.value : - null; - } - }); -} - -return Sizzle; - -})( window ); - - - -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; - - - -var rneedsContext = jQuery.expr.match.needsContext; - -var rsingleTag = (/^<(\w+)\s*\/?>(?:<\/\1>|)$/); - - - -var risSimple = /^.[^:#\[\.,]*$/; - -// Implement the identical functionality for filter and not -function winnow( elements, qualifier, not ) { - if ( jQuery.isFunction( qualifier ) ) { - return jQuery.grep( elements, function( elem, i ) { - /* jshint -W018 */ - return !!qualifier.call( elem, i, elem ) !== not; - }); - - } - - if ( qualifier.nodeType ) { - return jQuery.grep( elements, function( elem ) { - return ( elem === qualifier ) !== not; - }); - - } - - if ( typeof qualifier === "string" ) { - if ( risSimple.test( qualifier ) ) { - return jQuery.filter( qualifier, elements, not ); - } - - qualifier = jQuery.filter( qualifier, elements ); - } - - return jQuery.grep( elements, function( elem ) { - return ( indexOf.call( qualifier, elem ) >= 0 ) !== not; - }); -} - -jQuery.filter = function( expr, elems, not ) { - var elem = elems[ 0 ]; - - if ( not ) { - expr = ":not(" + expr + ")"; - } - - return elems.length === 1 && elem.nodeType === 1 ? - jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] : - jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { - return elem.nodeType === 1; - })); -}; - -jQuery.fn.extend({ - find: function( selector ) { - var i, - len = this.length, - ret = [], - self = this; - - if ( typeof selector !== "string" ) { - return this.pushStack( jQuery( selector ).filter(function() { - for ( i = 0; i < len; i++ ) { - if ( jQuery.contains( self[ i ], this ) ) { - return true; - } - } - }) ); - } - - for ( i = 0; i < len; i++ ) { - jQuery.find( selector, self[ 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 : selector; - return ret; - }, - filter: function( selector ) { - return this.pushStack( winnow(this, selector || [], false) ); - }, - not: function( selector ) { - return this.pushStack( winnow(this, selector || [], true) ); - }, - is: function( selector ) { - return !!winnow( - this, - - // 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". - typeof selector === "string" && rneedsContext.test( selector ) ? - jQuery( selector ) : - selector || [], - false - ).length; - } -}); - - -// Initialize a jQuery object - - -// A central reference to the root jQuery(document) -var rootjQuery, - - // A simple way to check for HTML strings - // Prioritize #id over <tag> to avoid XSS via location.hash (#9521) - // Strict HTML recognition (#11290: must start with <) - rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, - - init = jQuery.fn.init = function( selector, context ) { - var match, elem; - - // HANDLE: $(""), $(null), $(undefined), $(false) - if ( !selector ) { - return this; - } - - // Handle HTML strings - if ( typeof selector === "string" ) { - if ( selector[0] === "<" && selector[ 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 - // Intentionally let the error be thrown if parseHTML is not present - 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 ) { - // 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 typeof rootjQuery.ready !== "undefined" ? - rootjQuery.ready( selector ) : - // Execute immediately if ready is not present - selector( jQuery ); - } - - if ( selector.selector !== undefined ) { - this.selector = selector.selector; - this.context = selector.context; - } - - return jQuery.makeArray( selector, this ); - }; - -// Give the init function the jQuery prototype for later instantiation -init.prototype = jQuery.fn; - -// Initialize central reference -rootjQuery = jQuery( document ); - - -var rparentsprev = /^(?:parents|prev(?:Until|All))/, - // methods guaranteed to produce a unique set when starting from a unique set - guaranteedUnique = { - children: true, - contents: true, - next: true, - prev: true - }; - -jQuery.extend({ - dir: function( elem, dir, until ) { - var matched = [], - truncate = until !== undefined; - - while ( (elem = elem[ dir ]) && elem.nodeType !== 9 ) { - if ( elem.nodeType === 1 ) { - if ( truncate && jQuery( elem ).is( until ) ) { - break; - } - matched.push( elem ); - } - } - return matched; - }, - - sibling: function( n, elem ) { - var matched = []; - - for ( ; n; n = n.nextSibling ) { - if ( n.nodeType === 1 && n !== elem ) { - matched.push( n ); - } - } - - return matched; - } -}); - -jQuery.fn.extend({ - has: function( target ) { - var targets = jQuery( target, this ), - l = targets.length; - - return this.filter(function() { - var i = 0; - for ( ; i < l; i++ ) { - if ( jQuery.contains( this, targets[i] ) ) { - return true; - } - } - }); - }, - - closest: function( selectors, context ) { - var cur, - i = 0, - l = this.length, - matched = [], - pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? - jQuery( selectors, context || this.context ) : - 0; - - for ( ; i < l; i++ ) { - for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) { - // Always skip document fragments - if ( cur.nodeType < 11 && (pos ? - pos.index(cur) > -1 : - - // Don't pass non-elements to Sizzle - cur.nodeType === 1 && - jQuery.find.matchesSelector(cur, selectors)) ) { - - matched.push( cur ); - break; - } - } - } - - return this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched ); - }, - - // 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 indexOf.call( jQuery( elem ), this[ 0 ] ); - } - - // Locate the position of the desired element - return indexOf.call( this, - - // If it receives a jQuery object, the first element is used - elem.jquery ? elem[ 0 ] : elem - ); - }, - - add: function( selector, context ) { - return this.pushStack( - jQuery.unique( - jQuery.merge( this.get(), jQuery( selector, context ) ) - ) - ); - }, - - addBack: function( selector ) { - return this.add( selector == null ? - this.prevObject : this.prevObject.filter(selector) - ); - } -}); - -function sibling( cur, dir ) { - while ( (cur = cur[dir]) && 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 elem.contentDocument || jQuery.merge( [], elem.childNodes ); - } -}, function( name, fn ) { - jQuery.fn[ name ] = function( until, selector ) { - var matched = jQuery.map( this, fn, until ); - - if ( name.slice( -5 ) !== "Until" ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - matched = jQuery.filter( selector, matched ); - } - - if ( this.length > 1 ) { - // Remove duplicates - if ( !guaranteedUnique[ name ] ) { - jQuery.unique( matched ); - } - - // Reverse order for parents* and prev-derivatives - if ( rparentsprev.test( name ) ) { - matched.reverse(); - } - } - - return this.pushStack( matched ); - }; -}); -var rnotwhite = (/\S+/g); - - - -// 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( 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 // Last fire value (for non-forgettable lists) - memory, - // Flag to know if list was already fired - fired, - // Flag to know if list is currently firing - firing, - // First callback to fire (used internally by add and fireWith) - firingStart, - // End of the loop when firing - firingLength, - // Index of currently firing callback (modified by remove if needed) - firingIndex, - // 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 = []; - firingLength = 0; - 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 ) { - if ( list && ( !fired || stack ) ) { - args = args || []; - args = [ context, args.slice ? args.slice() : args ]; - 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 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[ tuple[ 0 ] + "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 = 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 ? 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(); - } -}); - - -// The deferred used on DOM ready -var readyList; - -jQuery.fn.ready = function( fn ) { - // Add the callback - jQuery.ready.promise().done( fn ); - - return this; -}; - -jQuery.extend({ - // 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; - } - - // 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.triggerHandler ) { - jQuery( document ).triggerHandler( "ready" ); - jQuery( document ).off( "ready" ); - } - } -}); - -/** - * The ready event handler and self cleanup method - */ -function completed() { - document.removeEventListener( "DOMContentLoaded", completed, false ); - window.removeEventListener( "load", completed, false ); - jQuery.ready(); -} - -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 ); - - } else { - - // Use the handy event callback - document.addEventListener( "DOMContentLoaded", completed, false ); - - // A fallback to window.onload, that will always work - window.addEventListener( "load", completed, false ); - } - } - return readyList.promise( obj ); -}; - -// Kick off the DOM ready check even if the user does not -jQuery.ready.promise(); - - - - -// Multifunctional method to get and set values of a collection -// The value/s can optionally be executed if it's a function -var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) { - var i = 0, - len = 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 < len; i++ ) { - fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) ); - } - } - } - - return chainable ? - elems : - - // Gets - bulk ? - fn.call( elems ) : - len ? fn( elems[0], key ) : emptyGet; -}; - - -/** - * Determines whether an object can have data - */ -jQuery.acceptData = function( owner ) { - // Accepts only: - // - Node - // - Node.ELEMENT_NODE - // - Node.DOCUMENT_NODE - // - Object - // - Any - /* jshint -W018 */ - return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); -}; - - -function Data() { - // Support: Android < 4, - // Old WebKit does not have Object.preventExtensions/freeze method, - // return new empty object instead with no [[set]] accessor - Object.defineProperty( this.cache = {}, 0, { - get: function() { - return {}; - } - }); - - this.expando = jQuery.expando + Math.random(); -} - -Data.uid = 1; -Data.accepts = jQuery.acceptData; - -Data.prototype = { - key: function( owner ) { - // We can accept data for non-element nodes in modern browsers, - // but we should not, see #8335. - // Always return the key for a frozen object. - if ( !Data.accepts( owner ) ) { - return 0; - } - - var descriptor = {}, - // Check if the owner object already has a cache key - unlock = owner[ this.expando ]; - - // If not, create one - if ( !unlock ) { - unlock = Data.uid++; - - // Secure it in a non-enumerable, non-writable property - try { - descriptor[ this.expando ] = { value: unlock }; - Object.defineProperties( owner, descriptor ); - - // Support: Android < 4 - // Fallback to a less secure definition - } catch ( e ) { - descriptor[ this.expando ] = unlock; - jQuery.extend( owner, descriptor ); - } - } - - // Ensure the cache object - if ( !this.cache[ unlock ] ) { - this.cache[ unlock ] = {}; - } - - return unlock; - }, - set: function( owner, data, value ) { - var prop, - // There may be an unlock assigned to this node, - // if there is no entry for this "owner", create one inline - // and set the unlock as though an owner entry had always existed - unlock = this.key( owner ), - cache = this.cache[ unlock ]; - - // Handle: [ owner, key, value ] args - if ( typeof data === "string" ) { - cache[ data ] = value; - - // Handle: [ owner, { properties } ] args - } else { - // Fresh assignments by object are shallow copied - if ( jQuery.isEmptyObject( cache ) ) { - jQuery.extend( this.cache[ unlock ], data ); - // Otherwise, copy the properties one-by-one to the cache object - } else { - for ( prop in data ) { - cache[ prop ] = data[ prop ]; - } - } - } - return cache; - }, - get: function( owner, key ) { - // Either a valid cache is found, or will be created. - // New caches will be created and the unlock returned, - // allowing direct access to the newly created - // empty data object. A valid owner object must be provided. - var cache = this.cache[ this.key( owner ) ]; - - return key === undefined ? - cache : cache[ key ]; - }, - access: function( owner, key, value ) { - var stored; - // In cases where either: - // - // 1. No key was specified - // 2. A string key was specified, but no value provided - // - // Take the "read" path and allow the get method to determine - // which value to return, respectively either: - // - // 1. The entire cache object - // 2. The data stored at the key - // - if ( key === undefined || - ((key && typeof key === "string") && value === undefined) ) { - - stored = this.get( owner, key ); - - return stored !== undefined ? - stored : this.get( owner, jQuery.camelCase(key) ); - } - - // [*]When the key is not a string, or both a key and value - // are specified, set or extend (existing objects) with either: - // - // 1. An object of properties - // 2. A key and value - // - this.set( owner, key, value ); - - // Since the "set" path can have two possible entry points - // return the expected data based on which path was taken[*] - return value !== undefined ? value : key; - }, - remove: function( owner, key ) { - var i, name, camel, - unlock = this.key( owner ), - cache = this.cache[ unlock ]; - - if ( key === undefined ) { - this.cache[ unlock ] = {}; - - } else { - // Support array or space separated string of keys - if ( jQuery.isArray( key ) ) { - // 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 = key.concat( key.map( jQuery.camelCase ) ); - } else { - camel = jQuery.camelCase( key ); - // Try the string as a key before any manipulation - if ( key in cache ) { - name = [ key, camel ]; - } else { - // If a key with the spaces exists, use it. - // Otherwise, create an array by matching non-whitespace - name = camel; - name = name in cache ? - [ name ] : ( name.match( rnotwhite ) || [] ); - } - } - - i = name.length; - while ( i-- ) { - delete cache[ name[ i ] ]; - } - } - }, - hasData: function( owner ) { - return !jQuery.isEmptyObject( - this.cache[ owner[ this.expando ] ] || {} - ); - }, - discard: function( owner ) { - if ( owner[ this.expando ] ) { - delete this.cache[ owner[ this.expando ] ]; - } - } -}; -var data_priv = new Data(); - -var data_user = new Data(); - - - -/* - Implementation Summary - - 1. Enforce API surface and semantic compatibility with 1.9.x branch - 2. Improve the module's maintainability by reducing the storage - paths to a single mechanism. - 3. Use the same single mechanism to support "private" and "user" data. - 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) - 5. Avoid exposing implementation details on user objects (eg. expando properties) - 6. Provide a clear path for implementation upgrade to WeakMap in 2014 -*/ -var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, - rmultiDash = /([A-Z])/g; - -function dataAttr( elem, key, data ) { - var name; - - // If nothing was found internally, try to fetch any - // data from the HTML5 data-* attribute - if ( data === undefined && elem.nodeType === 1 ) { - 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 - data_user.set( elem, key, data ); - } else { - data = undefined; - } - } - return data; -} - -jQuery.extend({ - hasData: function( elem ) { - return data_user.hasData( elem ) || data_priv.hasData( elem ); - }, - - data: function( elem, name, data ) { - return data_user.access( elem, name, data ); - }, - - removeData: function( elem, name ) { - data_user.remove( elem, name ); - }, - - // TODO: Now that all calls to _data and _removeData have been replaced - // with direct calls to data_priv methods, these can be deprecated. - _data: function( elem, name, data ) { - return data_priv.access( elem, name, data ); - }, - - _removeData: function( elem, name ) { - data_priv.remove( elem, name ); - } -}); - -jQuery.fn.extend({ - data: function( key, value ) { - var i, name, data, - elem = this[ 0 ], - attrs = elem && elem.attributes; - - // Gets all values - if ( key === undefined ) { - if ( this.length ) { - data = data_user.get( elem ); - - if ( elem.nodeType === 1 && !data_priv.get( elem, "hasDataAttrs" ) ) { - i = attrs.length; - while ( i-- ) { - - // Support: IE11+ - // The attrs elements can be null (#14894) - if ( attrs[ i ] ) { - name = attrs[ i ].name; - if ( name.indexOf( "data-" ) === 0 ) { - name = jQuery.camelCase( name.slice(5) ); - dataAttr( elem, name, data[ name ] ); - } - } - } - data_priv.set( elem, "hasDataAttrs", true ); - } - } - - return data; - } - - // Sets multiple values - if ( typeof key === "object" ) { - return this.each(function() { - data_user.set( this, key ); - }); - } - - return access( this, function( value ) { - var data, - camelKey = jQuery.camelCase( key ); - - // The calling jQuery object (element matches) is not empty - // (and therefore has an element appears at this[ 0 ]) and the - // `value` parameter was not undefined. An empty jQuery object - // will result in `undefined` for elem = this[ 0 ] which will - // throw an exception if an attempt to read a data cache is made. - if ( elem && value === undefined ) { - // Attempt to get data from the cache - // with the key as-is - data = data_user.get( elem, key ); - if ( data !== undefined ) { - return data; - } - - // Attempt to get data from the cache - // with the key camelized - data = data_user.get( elem, camelKey ); - if ( data !== undefined ) { - return data; - } - - // Attempt to "discover" the data in - // HTML5 custom data-* attrs - data = dataAttr( elem, camelKey, undefined ); - if ( data !== undefined ) { - return data; - } - - // We tried really hard, but the data doesn't exist. - return; - } - - // Set the data... - this.each(function() { - // First, attempt to store a copy or reference of any - // data that might've been store with a camelCased key. - var data = data_user.get( this, camelKey ); - - // For HTML5 data-* attribute interop, we have to - // store property names with dashes in a camelCase form. - // This might not apply to all properties...* - data_user.set( this, camelKey, value ); - - // *... In the case of properties that might _actually_ - // have dashes, we need to also store a copy of that - // unchanged property. - if ( key.indexOf("-") !== -1 && data !== undefined ) { - data_user.set( this, key, value ); - } - }); - }, null, value, arguments.length > 1, null, true ); - }, - - removeData: function( key ) { - return this.each(function() { - data_user.remove( this, key ); - }); - } -}); - - -jQuery.extend({ - queue: function( elem, type, data ) { - var queue; - - if ( elem ) { - type = ( type || "fx" ) + "queue"; - queue = data_priv.get( elem, type ); - - // Speed up dequeue by getting out quickly if this is just a lookup - if ( data ) { - if ( !queue || jQuery.isArray( data ) ) { - queue = data_priv.access( 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--; - } - - 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 data_priv.get( elem, key ) || data_priv.access( elem, key, { - empty: jQuery.Callbacks("once memory").add(function() { - data_priv.remove( elem, [ type + "queue", 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 ); - }); - }, - 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 = data_priv.get( elements[ i ], type + "queueHooks" ); - if ( tmp && tmp.empty ) { - count++; - tmp.empty.add( resolve ); - } - } - resolve(); - return defer.promise( obj ); - } -}); -var pnum = (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source; - -var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; - -var isHidden = function( 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 ); - }; - -var rcheckableType = (/^(?:checkbox|radio)$/i); - - - -(function() { - var fragment = document.createDocumentFragment(), - div = fragment.appendChild( document.createElement( "div" ) ), - input = document.createElement( "input" ); - - // #11217 - WebKit loses check when the name is after the checked attribute - // Support: Windows Web Apps (WWA) - // `name` and `type` need .setAttribute for WWA - input.setAttribute( "type", "radio" ); - input.setAttribute( "checked", "checked" ); - input.setAttribute( "name", "t" ); - - div.appendChild( input ); - - // Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3 - // old WebKit doesn't clone checked state correctly in fragments - support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; - - // Make sure textarea (and checkbox) defaultValue is properly cloned - // Support: IE9-IE11+ - div.innerHTML = "<textarea>x</textarea>"; - support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; -})(); -var strundefined = typeof undefined; - - - -support.focusinBubbles = "onfocusin" in window; - - -var - rkeyEvent = /^key/, - rmouseEvent = /^(?:mouse|pointer|contextmenu)|click/, - rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, - rtypenamespace = /^([^.]*)(?:\.(.+)|)$/; - -function returnTrue() { - return true; -} - -function returnFalse() { - return false; -} - -function safeActiveElement() { - try { - return document.activeElement; - } catch ( err ) { } -} - -/* - * 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 handleObjIn, eventHandle, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = data_priv.get( 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 !== strundefined && jQuery.event.triggered !== e.type ? - jQuery.event.dispatch.apply( elem, arguments ) : undefined; - }; - } - - // Handle multiple events separated by a space - types = ( types || "" ).match( rnotwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[t] ) || []; - type = origType = tmp[1]; - namespaces = ( tmp[2] || "" ).split( "." ).sort(); - - // There *must* be a type, no attaching namespace-only handlers - if ( !type ) { - continue; - } - - // 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 if the special events handler returns false - if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - if ( elem.addEventListener ) { - elem.addEventListener( type, eventHandle, false ); - } - } - } - - 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; - } - - }, - - // Detach an event or set of events from an element - remove: function( elem, types, handler, selector, mappedTypes ) { - - var j, origCount, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = data_priv.hasData( elem ) && data_priv.get( elem ); - - if ( !elemData || !(events = elemData.events) ) { - return; - } - - // Once for each type.namespace in types; type may be omitted - types = ( types || "" ).match( 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; - data_priv.remove( elem, "events" ); - } - }, - - trigger: function( event, data, elem, onlyHandlers ) { - - var i, cur, tmp, bubbleType, ontype, handle, special, - eventPath = [ elem || document ], - type = hasOwn.call( event, "type" ) ? event.type : event, - namespaces = 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 ); - - // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) - event.isTrigger = onlyHandlers ? 2 : 3; - 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 = ( data_priv.get( cur, "events" ) || {} )[ event.type ] && data_priv.get( cur, "handle" ); - if ( handle ) { - handle.apply( cur, data ); - } - - // Native handler - handle = ontype && cur[ ontype ]; - if ( handle && handle.apply && jQuery.acceptData( cur ) ) { - event.result = handle.apply( cur, data ); - if ( event.result === 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( eventPath.pop(), data ) === false) && - jQuery.acceptData( elem ) ) { - - // Call a native DOM method on the target with the same name name as the event. - // Don't do default actions on window, that's where global variables be (#6170) - if ( ontype && jQuery.isFunction( 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; - elem[ type ](); - 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, j, ret, matched, handleObj, - handlerQueue = [], - args = slice.call( arguments ), - handlers = ( data_priv.get( 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 i, matches, sel, handleObj, - handlerQueue = [], - delegateCount = handlers.delegateCount, - cur = event.target; - - // Find delegate handlers - // Black-hole SVG <use> 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 process clicks on disabled elements (#6911, #8165, #11382, #11764) - if ( 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; - }, - - // 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 offsetX offsetY pageX pageY screenX screenY toElement".split(" "), - filter: function( event, original ) { - var eventDoc, doc, body, - button = original.button; - - // 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 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; - } - }, - - 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: Cordova 2.5 (WebKit) (#13255) - // All events should have a target; Cordova deviceready doesn't - if ( !event.target ) { - event.target = document; - } - - // Support: Safari 6.0+, Chrome < 28 - // Target should not be a text node (#504, #13143) - if ( event.target.nodeType === 3 ) { - event.target = event.target.parentNode; - } - - return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; - }, - - special: { - load: { - // Prevent triggered image.load events from bubbling to window.load - noBubble: true - }, - focus: { - // Fire native event if possible so blur/focus sequence is correct - trigger: function() { - if ( this !== safeActiveElement() && this.focus ) { - this.focus(); - return false; - } - }, - delegateType: "focusin" - }, - blur: { - trigger: function() { - if ( this === safeActiveElement() && this.blur ) { - this.blur(); - return false; - } - }, - delegateType: "focusout" - }, - click: { - // For checkbox, fire native event so checked state will be right - trigger: function() { - if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) { - this.click(); - return false; - } - }, - - // For cross-browser consistency, don't fire native .click() on links - _default: function( event ) { - return jQuery.nodeName( event.target, "a" ); - } - }, - - beforeunload: { - postDispatch: function( event ) { - - // Support: Firefox 20+ - // Firefox doesn't alert if the returnValue field is not set. - if ( event.result !== undefined && event.originalEvent ) { - 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 = function( elem, type, handle ) { - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle, false ); - } -}; - -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.defaultPrevented === undefined && - // Support: Android < 4.0 - src.returnValue === false ? - 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 && e.preventDefault ) { - e.preventDefault(); - } - }, - stopPropagation: function() { - var e = this.originalEvent; - - this.isPropagationStopped = returnTrue; - - if ( e && e.stopPropagation ) { - e.stopPropagation(); - } - }, - stopImmediatePropagation: function() { - var e = this.originalEvent; - - this.isImmediatePropagationStopped = returnTrue; - - if ( e && e.stopImmediatePropagation ) { - e.stopImmediatePropagation(); - } - - this.stopPropagation(); - } -}; - -// Create mouseenter/leave events using mouseover/out and event-time checks -// Support: Chrome 15+ -jQuery.each({ - mouseenter: "mouseover", - mouseleave: "mouseout", - pointerenter: "pointerover", - pointerleave: "pointerout" -}, 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; - } - }; -}); - -// Create "bubbling" focus and blur events -// Support: Firefox, Chrome, Safari -if ( !support.focusinBubbles ) { - jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { - - // Attach a single capturing handler on the document while someone wants focusin/focusout - var handler = function( event ) { - jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); - }; - - jQuery.event.special[ fix ] = { - setup: function() { - var doc = this.ownerDocument || this, - attaches = data_priv.access( doc, fix ); - - if ( !attaches ) { - doc.addEventListener( orig, handler, true ); - } - data_priv.access( doc, fix, ( attaches || 0 ) + 1 ); - }, - teardown: function() { - var doc = this.ownerDocument || this, - attaches = data_priv.access( doc, fix ) - 1; - - if ( !attaches ) { - doc.removeEventListener( orig, handler, true ); - data_priv.remove( doc, fix ); - - } else { - data_priv.access( doc, fix, attaches ); - } - } - }; - }); -} - -jQuery.fn.extend({ - - on: function( types, selector, data, fn, /*INTERNAL*/ one ) { - var origFn, type; - - // 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 ); - }); - }, - - 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 ); - } - } -}); - - -var - rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, - rtagName = /<([\w:]+)/, - rhtml = /<|&#?\w+;/, - rnoInnerhtml = /<(?:script|style|link)/i, - // checked="checked" or checked - rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, - rscriptType = /^$|\/(?:java|ecma)script/i, - rscriptTypeMasked = /^true\/(.*)/, - rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g, - - // We have to close these tags to support XHTML (#13200) - wrapMap = { - - // Support: IE 9 - option: [ 1, "<select multiple='multiple'>", "</select>" ], - - thead: [ 1, "<table>", "</table>" ], - col: [ 2, "<table><colgroup>", "</colgroup></table>" ], - tr: [ 2, "<table><tbody>", "</tbody></table>" ], - td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ], - - _default: [ 0, "", "" ] - }; - -// Support: IE 9 -wrapMap.optgroup = wrapMap.option; - -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - -// Support: 1.x compatibility -// Manipulating tables requires a tbody -function manipulationTarget( elem, content ) { - return jQuery.nodeName( elem, "table" ) && - jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ? - - elem.getElementsByTagName("tbody")[0] || - elem.appendChild( elem.ownerDocument.createElement("tbody") ) : - elem; -} - -// Replace/restore the type attribute of script elements for safe DOM manipulation -function disableScript( elem ) { - elem.type = (elem.getAttribute("type") !== null) + "/" + 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 i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - data_priv.set( - elems[ i ], "globalEval", !refElements || data_priv.get( refElements[ i ], "globalEval" ) - ); - } -} - -function cloneCopyEvent( src, dest ) { - var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; - - if ( dest.nodeType !== 1 ) { - return; - } - - // 1. Copy private data: events, handlers, etc. - if ( data_priv.hasData( src ) ) { - pdataOld = data_priv.access( src ); - pdataCur = data_priv.set( dest, pdataOld ); - events = pdataOld.events; - - if ( events ) { - delete pdataCur.handle; - pdataCur.events = {}; - - for ( type in events ) { - for ( i = 0, l = events[ type ].length; i < l; i++ ) { - jQuery.event.add( dest, type, events[ type ][ i ] ); - } - } - } - } - - // 2. Copy user data - if ( data_user.hasData( src ) ) { - udataOld = data_user.access( src ); - udataCur = jQuery.extend( {}, udataOld ); - - data_user.set( dest, udataCur ); - } -} - -function getAll( context, tag ) { - var ret = context.getElementsByTagName ? context.getElementsByTagName( tag || "*" ) : - context.querySelectorAll ? context.querySelectorAll( tag || "*" ) : - []; - - return tag === undefined || tag && jQuery.nodeName( context, tag ) ? - jQuery.merge( [ context ], ret ) : - ret; -} - -// Support: IE >= 9 -function fixInput( src, dest ) { - var nodeName = dest.nodeName.toLowerCase(); - - // Fails to persist the checked state of a cloned checkbox or radio button. - if ( nodeName === "input" && rcheckableType.test( src.type ) ) { - dest.checked = src.checked; - - // Fails to return the selected option to the default selected state when cloning options - } else if ( nodeName === "input" || nodeName === "textarea" ) { - dest.defaultValue = src.defaultValue; - } -} - -jQuery.extend({ - clone: function( elem, dataAndEvents, deepDataAndEvents ) { - var i, l, srcElements, destElements, - clone = elem.cloneNode( true ), - inPage = jQuery.contains( elem.ownerDocument, elem ); - - // Support: IE >= 9 - // Fix Cloning issues - if ( !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 ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - fixInput( srcElements[ i ], 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, l = srcElements.length; i < l; i++ ) { - cloneCopyEvent( srcElements[ i ], destElements[ i ] ); - } - } else { - cloneCopyEvent( elem, clone ); - } - } - - // Preserve script evaluation history - destElements = getAll( clone, "script" ); - if ( destElements.length > 0 ) { - setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); - } - - // Return the cloned set - return clone; - }, - - buildFragment: function( elems, context, scripts, selection ) { - var elem, tmp, tag, wrap, contains, j, - fragment = context.createDocumentFragment(), - nodes = [], - i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - elem = elems[ i ]; - - if ( elem || elem === 0 ) { - - // Add nodes directly - if ( jQuery.type( elem ) === "object" ) { - // Support: QtWebKit - // jQuery.merge because push.apply(_, arraylike) throws - 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 || fragment.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></$2>" ) + wrap[ 2 ]; - - // Descend through wrappers to the right content - j = wrap[ 0 ]; - while ( j-- ) { - tmp = tmp.lastChild; - } - - // Support: QtWebKit - // jQuery.merge because push.apply(_, arraylike) throws - jQuery.merge( nodes, tmp.childNodes ); - - // Remember the top-level container - tmp = fragment.firstChild; - - // Fixes #12346 - // Support: Webkit, IE - tmp.textContent = ""; - } - } - } - - // Remove wrapper from fragment - fragment.textContent = ""; - - 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( fragment.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 ); - } - } - } - } - - return fragment; - }, - - cleanData: function( elems ) { - var data, elem, type, key, - special = jQuery.event.special, - i = 0; - - for ( ; (elem = elems[ i ]) !== undefined; i++ ) { - if ( jQuery.acceptData( elem ) ) { - key = elem[ data_priv.expando ]; - - if ( key && (data = data_priv.cache[ key ]) ) { - 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 ); - } - } - } - if ( data_priv.cache[ key ] ) { - // Discard any remaining `private` data - delete data_priv.cache[ key ]; - } - } - } - // Discard any remaining `user` data - delete data_user.cache[ elem[ data_user.expando ] ]; - } - } -}); - -jQuery.fn.extend({ - text: function( value ) { - return access( this, function( value ) { - return value === undefined ? - jQuery.text( this ) : - this.empty().each(function() { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - this.textContent = value; - } - }); - }, null, value, arguments.length ); - }, - - append: function() { - return this.domManip( arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.appendChild( elem ); - } - }); - }, - - prepend: function() { - return this.domManip( arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.insertBefore( elem, target.firstChild ); - } - }); - }, - - before: function() { - return this.domManip( arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this ); - } - }); - }, - - after: function() { - return this.domManip( arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this.nextSibling ); - } - }); - }, - - remove: function( selector, keepData /* Internal Use Only */ ) { - var elem, - elems = selector ? jQuery.filter( selector, this ) : this, - i = 0; - - for ( ; (elem = elems[i]) != null; i++ ) { - 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++ ) { - if ( elem.nodeType === 1 ) { - - // Prevent memory leaks - jQuery.cleanData( getAll( elem, false ) ); - - // Remove any remaining nodes - elem.textContent = ""; - } - } - - 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 access( this, function( value ) { - var elem = this[ 0 ] || {}, - i = 0, - l = this.length; - - if ( value === undefined && elem.nodeType === 1 ) { - return elem.innerHTML; - } - - // See if we can take a shortcut and just use innerHTML - if ( typeof value === "string" && !rnoInnerhtml.test( value ) && - !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { - - value = value.replace( rxhtmlTag, "<$1></$2>" ); - - try { - for ( ; i < l; i++ ) { - elem = this[ i ] || {}; - - // Remove element nodes and prevent memory leaks - 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() { - var arg = arguments[ 0 ]; - - // Make the changes, replacing each context element with the new content - this.domManip( arguments, function( elem ) { - arg = this.parentNode; - - jQuery.cleanData( getAll( this ) ); - - if ( arg ) { - arg.replaceChild( elem, this ); - } - }); - - // Force removal if there was no new content (e.g., from empty arguments) - return arg && (arg.length || arg.nodeType) ? this : this.remove(); - }, - - detach: function( selector ) { - return this.remove( selector, true ); - }, - - domManip: function( args, callback ) { - - // Flatten any nested arrays - args = concat.apply( [], args ); - - var fragment, first, scripts, hasScripts, node, doc, - 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" && - !support.checkClone && rchecked.test( value ) ) ) { - return this.each(function( index ) { - var self = set.eq( index ); - if ( isFunction ) { - args[ 0 ] = value.call( this, index, self.html() ); - } - self.domManip( args, callback ); - }); - } - - if ( l ) { - fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this ); - first = fragment.firstChild; - - if ( fragment.childNodes.length === 1 ) { - fragment = first; - } - - if ( first ) { - 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 ) { - // Support: QtWebKit - // jQuery.merge because push.apply(_, arraylike) throws - jQuery.merge( scripts, getAll( node, "script" ) ); - } - } - - callback.call( 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 || "" ) && - !data_priv.access( node, "globalEval" ) && jQuery.contains( doc, node ) ) { - - if ( node.src ) { - // Optional AJAX dependency, but won't run scripts if not present - if ( jQuery._evalUrl ) { - jQuery._evalUrl( node.src ); - } - } else { - jQuery.globalEval( node.textContent.replace( rcleanScript, "" ) ); - } - } - } - } - } - } - - return this; - } -}); - -jQuery.each({ - appendTo: "append", - prependTo: "prepend", - insertBefore: "before", - insertAfter: "after", - replaceAll: "replaceWith" -}, function( name, original ) { - jQuery.fn[ name ] = function( selector ) { - var elems, - ret = [], - insert = jQuery( selector ), - last = insert.length - 1, - i = 0; - - for ( ; i <= last; i++ ) { - elems = i === last ? this : this.clone( true ); - jQuery( insert[ i ] )[ original ]( elems ); - - // Support: QtWebKit - // .get() because push.apply(_, arraylike) throws - push.apply( ret, elems.get() ); - } - - return this.pushStack( ret ); - }; -}); - - -var iframe, - elemdisplay = {}; - -/** - * Retrieve the actual display of a element - * @param {String} name nodeName of the element - * @param {Object} doc Document object - */ -// Called only from within defaultDisplay -function actualDisplay( name, doc ) { - var style, - elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ), - - // getDefaultComputedStyle might be reliably used only on attached element - display = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ? - - // Use of this method is a temporary fix (more like optmization) until something better comes along, - // since it was removed from specification and supported only in FF - style.display : jQuery.css( elem[ 0 ], "display" ); - - // We don't have any data stored on the element, - // so use "detach" method as fast way to get rid of the element - elem.detach(); - - return display; -} - -/** - * Try to determine the default display value of an element - * @param {String} nodeName - */ -function 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( "<iframe frameborder='0' width='0' height='0'/>" )).appendTo( doc.documentElement ); - - // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse - doc = iframe[ 0 ].contentDocument; - - // Support: IE - doc.write(); - doc.close(); - - display = actualDisplay( nodeName, doc ); - iframe.detach(); - } - - // Store the correct default display - elemdisplay[ nodeName ] = display; - } - - return display; -} -var rmargin = (/^margin/); - -var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); - -var getStyles = function( elem ) { - return elem.ownerDocument.defaultView.getComputedStyle( elem, null ); - }; - - - -function curCSS( elem, name, computed ) { - var width, minWidth, maxWidth, ret, - style = elem.style; - - computed = computed || getStyles( elem ); - - // Support: IE9 - // getPropertyValue is only needed for .css('filter') in IE9, see #12537 - if ( computed ) { - ret = computed.getPropertyValue( name ) || computed[ name ]; - } - - if ( computed ) { - - if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { - ret = jQuery.style( elem, name ); - } - - // Support: iOS < 6 - // A tribute to the "awesome hack by Dean Edwards" - // iOS < 6 (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 !== undefined ? - // Support: IE - // IE returns zIndex value as an integer. - ret + "" : - ret; -} - - -function addGetHookIf( conditionFn, hookFn ) { - // Define the hook, we'll check on the first run if it's really needed. - return { - get: function() { - if ( conditionFn() ) { - // Hook not needed (or it's not possible to use it due to missing dependency), - // remove it. - // Since there are no other hooks for marginRight, remove the whole object. - delete this.get; - return; - } - - // Hook needed; redefine it so that the support test is not executed again. - - return (this.get = hookFn).apply( this, arguments ); - } - }; -} - - -(function() { - var pixelPositionVal, boxSizingReliableVal, - docElem = document.documentElement, - container = document.createElement( "div" ), - div = document.createElement( "div" ); - - if ( !div.style ) { - return; - } - - div.style.backgroundClip = "content-box"; - div.cloneNode( true ).style.backgroundClip = ""; - support.clearCloneStyle = div.style.backgroundClip === "content-box"; - - container.style.cssText = "border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;" + - "position:absolute"; - container.appendChild( div ); - - // Executing both pixelPosition & boxSizingReliable tests require only one layout - // so they're executed at the same time to save the second computation. - function computePixelPositionAndBoxSizingReliable() { - div.style.cssText = - // Support: Firefox<29, Android 2.3 - // Vendor-prefix box-sizing - "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;" + - "box-sizing:border-box;display:block;margin-top:1%;top:1%;" + - "border:1px;padding:1px;width:4px;position:absolute"; - div.innerHTML = ""; - docElem.appendChild( container ); - - var divStyle = window.getComputedStyle( div, null ); - pixelPositionVal = divStyle.top !== "1%"; - boxSizingReliableVal = divStyle.width === "4px"; - - docElem.removeChild( container ); - } - - // Support: node.js jsdom - // Don't assume that getComputedStyle is a property of the global object - if ( window.getComputedStyle ) { - jQuery.extend( support, { - pixelPosition: function() { - // This test is executed only once but we still do memoizing - // since we can use the boxSizingReliable pre-computing. - // No need to check if the test was already performed, though. - computePixelPositionAndBoxSizingReliable(); - return pixelPositionVal; - }, - boxSizingReliable: function() { - if ( boxSizingReliableVal == null ) { - computePixelPositionAndBoxSizingReliable(); - } - return boxSizingReliableVal; - }, - reliableMarginRight: function() { - // Support: Android 2.3 - // Check if div with explicit width and no margin-right incorrectly - // gets computed margin-right based on width of container. (#3333) - // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right - // This support function is only executed once so no memoizing is needed. - var ret, - marginDiv = div.appendChild( document.createElement( "div" ) ); - - // Reset CSS: box-sizing; display; margin; border; padding - marginDiv.style.cssText = div.style.cssText = - // Support: Firefox<29, Android 2.3 - // Vendor-prefix box-sizing - "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" + - "box-sizing:content-box;display:block;margin:0;border:0;padding:0"; - marginDiv.style.marginRight = marginDiv.style.width = "0"; - div.style.width = "1px"; - docElem.appendChild( container ); - - ret = !parseFloat( window.getComputedStyle( marginDiv, null ).marginRight ); - - docElem.removeChild( container ); - - return ret; - } - }); - } -})(); - - -// A method for quickly swapping in/out CSS properties to get correct calculations. -jQuery.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; -}; - - -var - // 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]).+)/, - rnumsplit = new RegExp( "^(" + pnum + ")(.*)$", "i" ), - rrelNum = new RegExp( "^([+-])=(" + pnum + ")", "i" ), - - cssShow = { position: "absolute", visibility: "hidden", display: "block" }, - cssNormalTransform = { - letterSpacing: "0", - fontWeight: "400" - }, - - 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[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 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.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 && - ( 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"; -} - -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 ] = data_priv.get( 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 ] = data_priv.access( elem, "olddisplay", defaultDisplay(elem.nodeName) ); - } - } else { - hidden = isHidden( elem ); - - if ( display !== "none" || !hidden ) { - data_priv.set( 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.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; - } - } - } - }, - - // Don't automatically add "px" to these possibly-unitless properties - cssNumber: { - "columnCount": true, - "fillOpacity": true, - "flexGrow": true, - "flexShrink": true, - "fontWeight": true, - "lineHeight": true, - "opacity": true, - "order": 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": "cssFloat" - }, - - // 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 null and NaN values aren't set. See: #7116 - if ( value == null || value !== 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 specifying setters in cssHooks, - // but it would mean to define eight (for every problematic property) identical functions - if ( !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 ) { - style[ name ] = value; - } - - } 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 val, num, 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; - } -}); - -jQuery.each([ "height", "width" ], function( i, name ) { - jQuery.cssHooks[ name ] = { - get: function( elem, computed, extra ) { - if ( computed ) { - // certain elements can have dimension info if we invisibly show them - // however, it must have a current display style that would benefit from this - return rdisplayswap.test( jQuery.css( elem, "display" ) ) && elem.offsetWidth === 0 ? - jQuery.swap( elem, cssShow, function() { - return getWidthOrHeight( elem, name, extra ); - }) : - getWidthOrHeight( elem, name, extra ); - } - }, - - set: function( elem, value, extra ) { - var styles = extra && getStyles( elem ); - return setPositiveNumber( elem, value, extra ? - augmentWidthOrHeight( - elem, - name, - extra, - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - styles - ) : 0 - ); - } - }; -}); - -// Support: Android 2.3 -jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight, - function( elem, computed ) { - if ( computed ) { - // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right - // Work around by temporarily setting element display to inline-block - return jQuery.swap( elem, { "display": "inline-block" }, - curCSS, [ elem, "marginRight" ] ); - } - } -); - -// These hooks are used by animate to expand properties -jQuery.each({ - margin: "", - padding: "", - border: "Width" -}, function( prefix, suffix ) { - jQuery.cssHooks[ prefix + suffix ] = { - expand: function( value ) { - var i = 0, - expanded = {}, - - // assumes a single number if not a string - parts = typeof value === "string" ? value.split(" ") : [ value ]; - - for ( ; i < 4; i++ ) { - expanded[ prefix + cssExpand[ i ] + suffix ] = - parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; - } - - return expanded; - } - }; - - if ( !rmargin.test( prefix ) ) { - jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; - } -}); - -jQuery.fn.extend({ - css: function( name, value ) { - return access( this, function( elem, name, value ) { - var styles, len, - 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 ) { - if ( typeof state === "boolean" ) { - return state ? this.show() : this.hide(); - } - - return this.each(function() { - if ( isHidden( this ) ) { - jQuery( this ).show(); - } else { - jQuery( this ).hide(); - } - }); - } -}); - - -function Tween( elem, options, prop, end, easing ) { - return new Tween.prototype.init( elem, options, prop, end, easing ); -} -jQuery.Tween = Tween; - -Tween.prototype = { - constructor: Tween, - init: function( elem, options, prop, end, easing, unit ) { - this.elem = elem; - this.prop = prop; - this.easing = easing || "swing"; - this.options = options; - this.start = this.now = this.cur(); - this.end = end; - this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); - }, - cur: function() { - var hooks = Tween.propHooks[ this.prop ]; - - return hooks && hooks.get ? - hooks.get( this ) : - Tween.propHooks._default.get( this ); - }, - run: function( percent ) { - var eased, - hooks = Tween.propHooks[ this.prop ]; - - if ( this.options.duration ) { - this.pos = eased = jQuery.easing[ this.easing ]( - percent, this.options.duration * percent, 0, 1, this.options.duration - ); - } else { - this.pos = eased = percent; - } - this.now = ( this.end - this.start ) * eased + this.start; - - if ( this.options.step ) { - this.options.step.call( this.elem, this.now, this ); - } - - if ( hooks && hooks.set ) { - hooks.set( this ); - } else { - Tween.propHooks._default.set( this ); - } - return this; - } -}; - -Tween.prototype.init.prototype = Tween.prototype; - -Tween.propHooks = { - _default: { - get: function( tween ) { - var result; - - if ( tween.elem[ tween.prop ] != null && - (!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) { - return tween.elem[ tween.prop ]; - } - - // passing an empty string as a 3rd parameter to .css will automatically - // attempt a parseFloat and fallback to a string if the parse fails - // so, simple values such as "10px" are parsed to Float. - // complex values such as "rotate(1rad)" are returned as is. - result = jQuery.css( tween.elem, tween.prop, "" ); - // Empty strings, null, undefined and "auto" are converted to 0. - return !result || result === "auto" ? 0 : result; - }, - set: function( tween ) { - // use step hook for back compat - use cssHook if its there - use .style if its - // available and use plain properties where available - if ( jQuery.fx.step[ tween.prop ] ) { - jQuery.fx.step[ tween.prop ]( tween ); - } else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) { - jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); - } else { - tween.elem[ tween.prop ] = tween.now; - } - } - } -}; - -// Support: IE9 -// Panic based approach to setting things on disconnected nodes - -Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { - set: function( tween ) { - if ( tween.elem.nodeType && tween.elem.parentNode ) { - tween.elem[ tween.prop ] = tween.now; - } - } -}; - -jQuery.easing = { - linear: function( p ) { - return p; - }, - swing: function( p ) { - return 0.5 - Math.cos( p * Math.PI ) / 2; - } -}; - -jQuery.fx = Tween.prototype.init; - -// Back Compat <1.8 extension point -jQuery.fx.step = {}; - - - - -var - fxNow, timerId, - rfxtypes = /^(?:toggle|show|hide)$/, - rfxnum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ), - rrun = /queueHooks$/, - animationPrefilters = [ defaultPrefilter ], - tweeners = { - "*": [ function( prop, value ) { - var tween = this.createTween( prop, value ), - target = tween.cur(), - parts = rfxnum.exec( value ), - unit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), - - // Starting value computation is required for potential unit mismatches - start = ( jQuery.cssNumber[ prop ] || unit !== "px" && +target ) && - rfxnum.exec( jQuery.css( tween.elem, prop ) ), - scale = 1, - maxIterations = 20; - - if ( start && start[ 3 ] !== unit ) { - // Trust units reported by jQuery.css - unit = unit || start[ 3 ]; - - // Make sure we update the tween properties later on - parts = parts || []; - - // Iteratively approximate from a nonzero starting point - start = +target || 1; - - do { - // If previous iteration zeroed out, double until we get *something* - // Use a string for doubling factor so we don't accidentally see scale as unchanged below - scale = scale || ".5"; - - // Adjust and apply - start = start / scale; - jQuery.style( tween.elem, prop, start + unit ); - - // Update scale, tolerating zero or NaN from tween.cur() - // And breaking the loop if scale is unchanged or perfect, or if we've just had enough - } while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations ); - } - - // Update tween properties - if ( parts ) { - start = tween.start = +start || +target || 0; - tween.unit = unit; - // If a +=/-= token was provided, we're doing a relative animation - tween.end = parts[ 1 ] ? - start + ( parts[ 1 ] + 1 ) * parts[ 2 ] : - +parts[ 2 ]; - } - - return tween; - } ] - }; - -// Animations created synchronously will run synchronously -function createFxNow() { - setTimeout(function() { - fxNow = undefined; - }); - return ( fxNow = jQuery.now() ); -} - -// Generate parameters to create a standard animation -function genFx( type, includeWidth ) { - var which, - i = 0, - attrs = { height: type }; - - // if we include width, step value is 1 to do all cssExpand values, - // if we don't include width, step value is 2 to skip over Left and Right - includeWidth = includeWidth ? 1 : 0; - for ( ; i < 4 ; i += 2 - includeWidth ) { - which = cssExpand[ i ]; - attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; - } - - if ( includeWidth ) { - attrs.opacity = attrs.width = type; - } - - return attrs; -} - -function createTween( value, prop, animation ) { - var tween, - collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ), - index = 0, - length = collection.length; - for ( ; index < length; index++ ) { - if ( (tween = collection[ index ].call( animation, prop, value )) ) { - - // we're done with this property - return tween; - } - } -} - -function defaultPrefilter( elem, props, opts ) { - /* jshint validthis: true */ - var prop, value, toggle, tween, hooks, oldfire, display, checkDisplay, - anim = this, - orig = {}, - style = elem.style, - hidden = elem.nodeType && isHidden( elem ), - dataShow = data_priv.get( elem, "fxshow" ); - - // handle queue: false promises - if ( !opts.queue ) { - hooks = jQuery._queueHooks( elem, "fx" ); - if ( hooks.unqueued == null ) { - hooks.unqueued = 0; - oldfire = hooks.empty.fire; - hooks.empty.fire = function() { - if ( !hooks.unqueued ) { - oldfire(); - } - }; - } - hooks.unqueued++; - - anim.always(function() { - // doing this makes sure that the complete handler will be called - // before this completes - anim.always(function() { - hooks.unqueued--; - if ( !jQuery.queue( elem, "fx" ).length ) { - hooks.empty.fire(); - } - }); - }); - } - - // height/width overflow pass - if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) { - // Make sure that nothing sneaks out - // Record all 3 overflow attributes because IE9-10 do not - // change the overflow attribute when overflowX and - // overflowY are set to the same value - opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; - - // Set display property to inline-block for height/width - // animations on inline elements that are having width/height animated - display = jQuery.css( elem, "display" ); - - // Test default display if display is currently "none" - checkDisplay = display === "none" ? - data_priv.get( elem, "olddisplay" ) || defaultDisplay( elem.nodeName ) : display; - - if ( checkDisplay === "inline" && jQuery.css( elem, "float" ) === "none" ) { - style.display = "inline-block"; - } - } - - if ( opts.overflow ) { - style.overflow = "hidden"; - anim.always(function() { - style.overflow = opts.overflow[ 0 ]; - style.overflowX = opts.overflow[ 1 ]; - style.overflowY = opts.overflow[ 2 ]; - }); - } - - // show/hide pass - for ( prop in props ) { - value = props[ prop ]; - if ( rfxtypes.exec( value ) ) { - delete props[ prop ]; - toggle = toggle || value === "toggle"; - if ( value === ( hidden ? "hide" : "show" ) ) { - - // If there is dataShow left over from a stopped hide or show and we are going to proceed with show, we should pretend to be hidden - if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { - hidden = true; - } else { - continue; - } - } - orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); - - // Any non-fx value stops us from restoring the original display value - } else { - display = undefined; - } - } - - if ( !jQuery.isEmptyObject( orig ) ) { - if ( dataShow ) { - if ( "hidden" in dataShow ) { - hidden = dataShow.hidden; - } - } else { - dataShow = data_priv.access( elem, "fxshow", {} ); - } - - // store state if its toggle - enables .stop().toggle() to "reverse" - if ( toggle ) { - dataShow.hidden = !hidden; - } - if ( hidden ) { - jQuery( elem ).show(); - } else { - anim.done(function() { - jQuery( elem ).hide(); - }); - } - anim.done(function() { - var prop; - - data_priv.remove( elem, "fxshow" ); - for ( prop in orig ) { - jQuery.style( elem, prop, orig[ prop ] ); - } - }); - for ( prop in orig ) { - tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); - - if ( !( prop in dataShow ) ) { - dataShow[ prop ] = tween.start; - if ( hidden ) { - tween.end = tween.start; - tween.start = prop === "width" || prop === "height" ? 1 : 0; - } - } - } - - // If this is a noop like .hide().hide(), restore an overwritten display value - } else if ( (display === "none" ? defaultDisplay( elem.nodeName ) : display) === "inline" ) { - style.display = display; - } -} - -function propFilter( props, specialEasing ) { - var index, name, easing, value, hooks; - - // camelCase, specialEasing and expand cssHook pass - for ( index in props ) { - name = jQuery.camelCase( index ); - easing = specialEasing[ name ]; - value = props[ index ]; - if ( jQuery.isArray( value ) ) { - easing = value[ 1 ]; - value = props[ index ] = value[ 0 ]; - } - - if ( index !== name ) { - props[ name ] = value; - delete props[ index ]; - } - - hooks = jQuery.cssHooks[ name ]; - if ( hooks && "expand" in hooks ) { - value = hooks.expand( value ); - delete props[ name ]; - - // not quite $.extend, this wont overwrite keys already present. - // also - reusing 'index' from above because we have the correct "name" - for ( index in value ) { - if ( !( index in props ) ) { - props[ index ] = value[ index ]; - specialEasing[ index ] = easing; - } - } - } else { - specialEasing[ name ] = easing; - } - } -} - -function Animation( elem, properties, options ) { - var result, - stopped, - index = 0, - length = animationPrefilters.length, - deferred = jQuery.Deferred().always( function() { - // don't match elem in the :animated selector - delete tick.elem; - }), - tick = function() { - if ( stopped ) { - return false; - } - var currentTime = fxNow || createFxNow(), - remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), - // archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497) - temp = remaining / animation.duration || 0, - percent = 1 - temp, - index = 0, - length = animation.tweens.length; - - for ( ; index < length ; index++ ) { - animation.tweens[ index ].run( percent ); - } - - deferred.notifyWith( elem, [ animation, percent, remaining ]); - - if ( percent < 1 && length ) { - return remaining; - } else { - deferred.resolveWith( elem, [ animation ] ); - return false; - } - }, - animation = deferred.promise({ - elem: elem, - props: jQuery.extend( {}, properties ), - opts: jQuery.extend( true, { specialEasing: {} }, options ), - originalProperties: properties, - originalOptions: options, - startTime: fxNow || createFxNow(), - duration: options.duration, - tweens: [], - createTween: function( prop, end ) { - var tween = jQuery.Tween( elem, animation.opts, prop, end, - animation.opts.specialEasing[ prop ] || animation.opts.easing ); - animation.tweens.push( tween ); - return tween; - }, - stop: function( gotoEnd ) { - var index = 0, - // if we are going to the end, we want to run all the tweens - // otherwise we skip this part - length = gotoEnd ? animation.tweens.length : 0; - if ( stopped ) { - return this; - } - stopped = true; - for ( ; index < length ; index++ ) { - animation.tweens[ index ].run( 1 ); - } - - // resolve when we played the last frame - // otherwise, reject - if ( gotoEnd ) { - deferred.resolveWith( elem, [ animation, gotoEnd ] ); - } else { - deferred.rejectWith( elem, [ animation, gotoEnd ] ); - } - return this; - } - }), - props = animation.props; - - propFilter( props, animation.opts.specialEasing ); - - for ( ; index < length ; index++ ) { - result = animationPrefilters[ index ].call( animation, elem, props, animation.opts ); - if ( result ) { - return result; - } - } - - jQuery.map( props, createTween, animation ); - - if ( jQuery.isFunction( animation.opts.start ) ) { - animation.opts.start.call( elem, animation ); - } - - jQuery.fx.timer( - jQuery.extend( tick, { - elem: elem, - anim: animation, - queue: animation.opts.queue - }) - ); - - // attach callbacks from options - return animation.progress( animation.opts.progress ) - .done( animation.opts.done, animation.opts.complete ) - .fail( animation.opts.fail ) - .always( animation.opts.always ); -} - -jQuery.Animation = jQuery.extend( Animation, { - - tweener: function( props, callback ) { - if ( jQuery.isFunction( props ) ) { - callback = props; - props = [ "*" ]; - } else { - props = props.split(" "); - } - - var prop, - index = 0, - length = props.length; - - for ( ; index < length ; index++ ) { - prop = props[ index ]; - tweeners[ prop ] = tweeners[ prop ] || []; - tweeners[ prop ].unshift( callback ); - } - }, - - prefilter: function( callback, prepend ) { - if ( prepend ) { - animationPrefilters.unshift( callback ); - } else { - animationPrefilters.push( callback ); - } - } -}); - -jQuery.speed = function( speed, easing, fn ) { - var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { - complete: fn || !fn && easing || - jQuery.isFunction( speed ) && speed, - duration: speed, - easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing - }; - - opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration : - opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default; - - // normalize opt.queue - true/undefined/null -> "fx" - if ( opt.queue == null || opt.queue === true ) { - opt.queue = "fx"; - } - - // Queueing - opt.old = opt.complete; - - opt.complete = function() { - if ( jQuery.isFunction( opt.old ) ) { - opt.old.call( this ); - } - - if ( opt.queue ) { - jQuery.dequeue( this, opt.queue ); - } - }; - - return opt; -}; - -jQuery.fn.extend({ - fadeTo: function( speed, to, easing, callback ) { - - // show any hidden elements after setting opacity to 0 - return this.filter( isHidden ).css( "opacity", 0 ).show() - - // animate to the value specified - .end().animate({ opacity: to }, speed, easing, callback ); - }, - animate: function( prop, speed, easing, callback ) { - var empty = jQuery.isEmptyObject( prop ), - optall = jQuery.speed( speed, easing, callback ), - doAnimation = function() { - // Operate on a copy of prop so per-property easing won't be lost - var anim = Animation( this, jQuery.extend( {}, prop ), optall ); - - // Empty animations, or finishing resolves immediately - if ( empty || data_priv.get( this, "finish" ) ) { - anim.stop( true ); - } - }; - doAnimation.finish = doAnimation; - - return empty || optall.queue === false ? - this.each( doAnimation ) : - this.queue( optall.queue, doAnimation ); - }, - stop: function( type, clearQueue, gotoEnd ) { - var stopQueue = function( hooks ) { - var stop = hooks.stop; - delete hooks.stop; - stop( gotoEnd ); - }; - - if ( typeof type !== "string" ) { - gotoEnd = clearQueue; - clearQueue = type; - type = undefined; - } - if ( clearQueue && type !== false ) { - this.queue( type || "fx", [] ); - } - - return this.each(function() { - var dequeue = true, - index = type != null && type + "queueHooks", - timers = jQuery.timers, - data = data_priv.get( this ); - - if ( index ) { - if ( data[ index ] && data[ index ].stop ) { - stopQueue( data[ index ] ); - } - } else { - for ( index in data ) { - if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { - stopQueue( data[ index ] ); - } - } - } - - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) { - timers[ index ].anim.stop( gotoEnd ); - dequeue = false; - timers.splice( index, 1 ); - } - } - - // start the next in the queue if the last step wasn't forced - // timers currently will call their complete callbacks, which will dequeue - // but only if they were gotoEnd - if ( dequeue || !gotoEnd ) { - jQuery.dequeue( this, type ); - } - }); - }, - finish: function( type ) { - if ( type !== false ) { - type = type || "fx"; - } - return this.each(function() { - var index, - data = data_priv.get( this ), - queue = data[ type + "queue" ], - hooks = data[ type + "queueHooks" ], - timers = jQuery.timers, - length = queue ? queue.length : 0; - - // enable finishing flag on private data - data.finish = true; - - // empty the queue first - jQuery.queue( this, type, [] ); - - if ( hooks && hooks.stop ) { - hooks.stop.call( this, true ); - } - - // look for any active animations, and finish them - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && timers[ index ].queue === type ) { - timers[ index ].anim.stop( true ); - timers.splice( index, 1 ); - } - } - - // look for any animations in the old queue and finish them - for ( index = 0; index < length; index++ ) { - if ( queue[ index ] && queue[ index ].finish ) { - queue[ index ].finish.call( this ); - } - } - - // turn off finishing flag - delete data.finish; - }); - } -}); - -jQuery.each([ "toggle", "show", "hide" ], function( i, name ) { - var cssFn = jQuery.fn[ name ]; - jQuery.fn[ name ] = function( speed, easing, callback ) { - return speed == null || typeof speed === "boolean" ? - cssFn.apply( this, arguments ) : - this.animate( genFx( name, true ), speed, easing, callback ); - }; -}); - -// Generate shortcuts for custom animations -jQuery.each({ - slideDown: genFx("show"), - slideUp: genFx("hide"), - slideToggle: genFx("toggle"), - fadeIn: { opacity: "show" }, - fadeOut: { opacity: "hide" }, - fadeToggle: { opacity: "toggle" } -}, function( name, props ) { - jQuery.fn[ name ] = function( speed, easing, callback ) { - return this.animate( props, speed, easing, callback ); - }; -}); - -jQuery.timers = []; -jQuery.fx.tick = function() { - var timer, - i = 0, - timers = jQuery.timers; - - fxNow = jQuery.now(); - - for ( ; i < timers.length; i++ ) { - timer = timers[ i ]; - // Checks the timer has not already been removed - if ( !timer() && timers[ i ] === timer ) { - timers.splice( i--, 1 ); - } - } - - if ( !timers.length ) { - jQuery.fx.stop(); - } - fxNow = undefined; -}; - -jQuery.fx.timer = function( timer ) { - jQuery.timers.push( timer ); - if ( timer() ) { - jQuery.fx.start(); - } else { - jQuery.timers.pop(); - } -}; - -jQuery.fx.interval = 13; - -jQuery.fx.start = function() { - if ( !timerId ) { - timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval ); - } -}; - -jQuery.fx.stop = function() { - clearInterval( timerId ); - timerId = null; -}; - -jQuery.fx.speeds = { - slow: 600, - fast: 200, - // Default speed - _default: 400 -}; - - -// Based off of the plugin by Clint Helfers, with permission. -// http://blindsignals.com/index.php/2009/07/jquery-delay/ -jQuery.fn.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 ); - }; - }); -}; - - -(function() { - var input = document.createElement( "input" ), - select = document.createElement( "select" ), - opt = select.appendChild( document.createElement( "option" ) ); - - input.type = "checkbox"; - - // Support: iOS 5.1, Android 4.x, Android 2.3 - // Check the default checkbox/radio value ("" on old WebKit; "on" elsewhere) - support.checkOn = input.value !== ""; - - // Must access the parent to make an option select properly - // Support: IE9, IE10 - support.optSelected = opt.selected; - - // 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; - - // Check if an input maintains its value after becoming a radio - // Support: IE9, IE10 - input = document.createElement( "input" ); - input.value = "t"; - input.type = "radio"; - support.radioValue = input.value === "t"; -})(); - - -var nodeHook, boolHook, - attrHandle = jQuery.expr.attrHandle; - -jQuery.fn.extend({ - attr: function( name, value ) { - return access( this, jQuery.attr, name, value, arguments.length > 1 ); - }, - - removeAttr: function( name ) { - return this.each(function() { - jQuery.removeAttr( this, name ); - }); - } -}); - -jQuery.extend({ - attr: function( elem, name, value ) { - var hooks, 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 === strundefined ) { - return jQuery.prop( elem, name, value ); - } - - // All attributes are lowercase - // Grab necessary hook if one is defined - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - name = name.toLowerCase(); - hooks = jQuery.attrHooks[ name ] || - ( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook ); - } - - if ( value !== undefined ) { - - if ( value === null ) { - jQuery.removeAttr( elem, name ); - - } else if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { - return ret; - - } else { - elem.setAttribute( name, value + "" ); - return value; - } - - } else if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { - return ret; - - } else { - ret = jQuery.find.attr( elem, 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( rnotwhite ); - - if ( attrNames && elem.nodeType === 1 ) { - while ( (name = attrNames[i++]) ) { - propName = jQuery.propFix[ name ] || name; - - // Boolean attributes get special treatment (#10870) - if ( jQuery.expr.match.bool.test( name ) ) { - // Set corresponding property to false - elem[ propName ] = false; - } - - elem.removeAttribute( name ); - } - } - }, - - attrHooks: { - type: { - set: function( elem, value ) { - if ( !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; - } - } - } - } -}); - -// Hooks for boolean attributes -boolHook = { - set: function( elem, value, name ) { - if ( value === false ) { - // Remove boolean attributes when set to false - jQuery.removeAttr( elem, name ); - } else { - elem.setAttribute( name, name ); - } - return name; - } -}; -jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { - var getter = attrHandle[ name ] || jQuery.find.attr; - - attrHandle[ name ] = function( elem, name, isXML ) { - var ret, handle; - if ( !isXML ) { - // Avoid an infinite loop by temporarily removing this function from the getter - handle = attrHandle[ name ]; - attrHandle[ name ] = ret; - ret = getter( elem, name, isXML ) != null ? - name.toLowerCase() : - null; - attrHandle[ name ] = handle; - } - return ret; - }; -}); - - - - -var rfocusable = /^(?:input|select|textarea|button)$/i; - -jQuery.fn.extend({ - prop: function( name, value ) { - return access( this, jQuery.prop, name, value, arguments.length > 1 ); - }, - - removeProp: function( name ) { - return this.each(function() { - delete this[ jQuery.propFix[ name ] || name ]; - }); - } -}); - -jQuery.extend({ - propFix: { - "for": "htmlFor", - "class": "className" - }, - - 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 ) { - return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ? - ret : - ( elem[ name ] = value ); - - } else { - return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ? - ret : - elem[ name ]; - } - }, - - propHooks: { - tabIndex: { - get: function( elem ) { - return elem.hasAttribute( "tabindex" ) || rfocusable.test( elem.nodeName ) || elem.href ? - elem.tabIndex : - -1; - } - } - } -}); - -// Support: IE9+ -// Selectedness for an option in an optgroup can be inaccurate -if ( !support.optSelected ) { - jQuery.propHooks.selected = { - get: function( elem ) { - var parent = elem.parentNode; - if ( parent && parent.parentNode ) { - parent.parentNode.selectedIndex; - } - return null; - } - }; -} - -jQuery.each([ - "tabIndex", - "readOnly", - "maxLength", - "cellSpacing", - "cellPadding", - "rowSpan", - "colSpan", - "useMap", - "frameBorder", - "contentEditable" -], function() { - jQuery.propFix[ this.toLowerCase() ] = this; -}); - - - - -var rclass = /[\t\r\n\f]/g; - -jQuery.fn.extend({ - addClass: function( value ) { - var classes, elem, cur, clazz, j, finalValue, - proceed = typeof value === "string" && value, - i = 0, - len = this.length; - - 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( 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 + " "; - } - } - - // only assign if different to avoid unneeded rendering. - finalValue = jQuery.trim( cur ); - if ( elem.className !== finalValue ) { - elem.className = finalValue; - } - } - } - } - - return this; - }, - - removeClass: function( value ) { - var classes, elem, cur, clazz, j, finalValue, - proceed = arguments.length === 0 || typeof value === "string" && value, - i = 0, - len = this.length; - - if ( jQuery.isFunction( value ) ) { - return this.each(function( j ) { - jQuery( this ).removeClass( value.call( this, j, this.className ) ); - }); - } - if ( proceed ) { - classes = ( value || "" ).match( 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 + " ", " " ); - } - } - - // only assign if different to avoid unneeded rendering. - finalValue = value ? jQuery.trim( cur ) : ""; - if ( elem.className !== finalValue ) { - elem.className = finalValue; - } - } - } - } - - return this; - }, - - toggleClass: function( value, stateVal ) { - var type = typeof value; - - if ( typeof stateVal === "boolean" && type === "string" ) { - return stateVal ? this.addClass( value ) : this.removeClass( value ); - } - - 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 ), - classNames = value.match( rnotwhite ) || []; - - while ( (className = classNames[ i++ ]) ) { - // check each className given, space separated list - if ( self.hasClass( className ) ) { - self.removeClass( className ); - } else { - self.addClass( className ); - } - } - - // Toggle whole class name - } else if ( type === strundefined || type === "boolean" ) { - if ( this.className ) { - // store className if set - data_priv.set( 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 ? "" : data_priv.get( 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; - } -}); - - - - -var rreturn = /\r/g; - -jQuery.fn.extend({ - val: function( value ) { - var hooks, ret, 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; - - if ( this.nodeType !== 1 ) { - return; - } - - if ( isFunction ) { - val = value.call( this, i, jQuery( this ).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 ) { - var val = jQuery.find.attr( elem, "value" ); - return val != null ? - val : - // Support: IE10-11+ - // option.text throws exceptions (#14686, #14858) - jQuery.trim( jQuery.text( elem ) ); - } - }, - 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 ]; - - // IE6-9 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 - ( 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 optionSet, option, - options = elem.options, - values = jQuery.makeArray( value ), - i = options.length; - - while ( i-- ) { - option = options[ i ]; - if ( (option.selected = jQuery.inArray( option.value, values ) >= 0) ) { - optionSet = true; - } - } - - // force browsers to behave consistently when non-matching value is set - if ( !optionSet ) { - elem.selectedIndex = -1; - } - return values; - } - } - } -}); - -// Radios and checkboxes getter/setter -jQuery.each([ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = { - set: function( elem, value ) { - if ( jQuery.isArray( value ) ) { - return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 ); - } - } - }; - if ( !support.checkOn ) { - jQuery.valHooks[ this ].get = function( elem ) { - // Support: Webkit - // "" is returned instead of "on" if a value isn't specified - return elem.getAttribute("value") === null ? "on" : elem.value; - }; - } -}); - - - - -// Return jQuery for attributes-only inclusion - - -jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + - "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + - "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) { - - // Handle event binding - jQuery.fn[ name ] = function( data, fn ) { - return arguments.length > 0 ? - this.on( name, null, data, fn ) : - this.trigger( name ); - }; -}); - -jQuery.fn.extend({ - hover: function( fnOver, fnOut ) { - return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); - }, - - 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 ); - } -}); - - -var nonce = jQuery.now(); - -var rquery = (/\?/); - - - -// Support: Android 2.3 -// Workaround failure to string-cast null input -jQuery.parseJSON = function( data ) { - return JSON.parse( data + "" ); -}; - - -// Cross-browser xml parsing -jQuery.parseXML = function( data ) { - var xml, tmp; - if ( !data || typeof data !== "string" ) { - return null; - } - - // Support: IE9 - try { - tmp = new DOMParser(); - xml = tmp.parseFromString( data, "text/xml" ); - } catch ( e ) { - xml = undefined; - } - - if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { - jQuery.error( "Invalid XML: " + data ); - } - return xml; -}; - - -var - // Document location - ajaxLocParts, - ajaxLocation, - - rhash = /#.*$/, - rts = /([?&])_=[^&]*/, - rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, - // #7653, #8125, #8152: local protocol detection - rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, - rnoContent = /^(?:GET|HEAD)$/, - rprotocol = /^\/\//, - rurl = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/, - - /* Prefilters - * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) - * 2) These are called: - * - BEFORE asking for a transport - * - AFTER param serialization (s.data is a string if s.processData is true) - * 3) key is the dataType - * 4) the catchall symbol "*" can be used - * 5) execution will start with transport dataType and THEN continue down to "*" if needed - */ - prefilters = {}, - - /* Transports bindings - * 1) key is the dataType - * 2) the catchall symbol "*" can be used - * 3) selection will start with transport dataType and THEN go to "*" if needed - */ - transports = {}, - - // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression - allTypes = "*/".concat("*"); - -// #8138, IE may throw an exception when accessing -// a field from window.location if document.domain has been set -try { - ajaxLocation = location.href; -} catch( e ) { - // Use the href attribute of an A element - // since IE will modify it given document.location - ajaxLocation = document.createElement( "a" ); - ajaxLocation.href = ""; - ajaxLocation = ajaxLocation.href; -} - -// Segment location into parts -ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || []; - -// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport -function addToPrefiltersOrTransports( structure ) { - - // dataTypeExpression is optional and defaults to "*" - return function( dataTypeExpression, func ) { - - if ( typeof dataTypeExpression !== "string" ) { - func = dataTypeExpression; - dataTypeExpression = "*"; - } - - var dataType, - i = 0, - dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || []; - - if ( jQuery.isFunction( func ) ) { - // For each dataType in the dataTypeExpression - while ( (dataType = dataTypes[i++]) ) { - // Prepend if requested - if ( dataType[0] === "+" ) { - dataType = dataType.slice( 1 ) || "*"; - (structure[ dataType ] = structure[ dataType ] || []).unshift( func ); - - // Otherwise append - } else { - (structure[ dataType ] = structure[ dataType ] || []).push( func ); - } - } - } - }; -} - -// Base inspection function for prefilters and transports -function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { - - var inspected = {}, - seekingTransport = ( structure === transports ); - - function inspect( dataType ) { - var selected; - inspected[ dataType ] = true; - jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { - var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); - if ( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) { - options.dataTypes.unshift( dataTypeOrTransport ); - inspect( dataTypeOrTransport ); - return false; - } else if ( seekingTransport ) { - return !( selected = dataTypeOrTransport ); - } - }); - return selected; - } - - return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); -} - -// A special extend for ajax options -// that takes "flat" options (not to be deep extended) -// Fixes #9887 -function ajaxExtend( target, src ) { - var key, deep, - flatOptions = jQuery.ajaxSettings.flatOptions || {}; - - for ( key in src ) { - if ( src[ key ] !== undefined ) { - ( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ]; - } - } - if ( deep ) { - jQuery.extend( true, target, deep ); - } - - return target; -} - -/* Handles responses to an ajax request: - * - finds the right dataType (mediates between content-type and expected dataType) - * - returns the corresponding response - */ -function ajaxHandleResponses( s, jqXHR, responses ) { - - var ct, type, finalDataType, firstDataType, - contents = s.contents, - dataTypes = s.dataTypes; - - // Remove auto dataType and get content-type in the process - while ( dataTypes[ 0 ] === "*" ) { - dataTypes.shift(); - if ( ct === undefined ) { - ct = s.mimeType || jqXHR.getResponseHeader("Content-Type"); - } - } - - // Check if we're dealing with a known content-type - if ( ct ) { - for ( type in contents ) { - if ( contents[ type ] && contents[ type ].test( ct ) ) { - dataTypes.unshift( type ); - break; - } - } - } - - // Check to see if we have a response for the expected dataType - if ( dataTypes[ 0 ] in responses ) { - finalDataType = dataTypes[ 0 ]; - } else { - // Try convertible dataTypes - for ( type in responses ) { - if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) { - finalDataType = type; - break; - } - if ( !firstDataType ) { - firstDataType = type; - } - } - // Or just use first one - finalDataType = finalDataType || firstDataType; - } - - // If we found a dataType - // We add the dataType to the list if needed - // and return the corresponding response - if ( finalDataType ) { - if ( finalDataType !== dataTypes[ 0 ] ) { - dataTypes.unshift( finalDataType ); - } - return responses[ finalDataType ]; - } -} - -/* Chain conversions given the request and the original response - * Also sets the responseXXX fields on the jqXHR instance - */ -function ajaxConvert( s, response, jqXHR, isSuccess ) { - var conv2, current, conv, tmp, prev, - converters = {}, - // Work with a copy of dataTypes in case we need to modify it for conversion - dataTypes = s.dataTypes.slice(); - - // Create converters map with lowercased keys - if ( dataTypes[ 1 ] ) { - for ( conv in s.converters ) { - converters[ conv.toLowerCase() ] = s.converters[ conv ]; - } - } - - current = dataTypes.shift(); - - // Convert to each sequential dataType - while ( current ) { - - if ( s.responseFields[ current ] ) { - jqXHR[ s.responseFields[ current ] ] = response; - } - - // Apply the dataFilter if provided - if ( !prev && isSuccess && s.dataFilter ) { - response = s.dataFilter( response, s.dataType ); - } - - prev = current; - current = dataTypes.shift(); - - if ( current ) { - - // There's only work to do if current dataType is non-auto - if ( current === "*" ) { - - current = prev; - - // Convert response if prev dataType is non-auto and differs from current - } else if ( prev !== "*" && prev !== current ) { - - // Seek a direct converter - conv = converters[ prev + " " + current ] || converters[ "* " + current ]; - - // If none found, seek a pair - if ( !conv ) { - for ( conv2 in converters ) { - - // If conv2 outputs current - tmp = conv2.split( " " ); - if ( tmp[ 1 ] === current ) { - - // If prev can be converted to accepted input - conv = converters[ prev + " " + tmp[ 0 ] ] || - converters[ "* " + tmp[ 0 ] ]; - if ( conv ) { - // Condense equivalence converters - if ( conv === true ) { - conv = converters[ conv2 ]; - - // Otherwise, insert the intermediate dataType - } else if ( converters[ conv2 ] !== true ) { - current = tmp[ 0 ]; - dataTypes.unshift( tmp[ 1 ] ); - } - break; - } - } - } - } - - // Apply converter (if not an equivalence) - if ( conv !== true ) { - - // Unless errors are allowed to bubble, catch and return them - if ( conv && s[ "throws" ] ) { - response = conv( response ); - } else { - try { - response = conv( response ); - } catch ( e ) { - return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current }; - } - } - } - } - } - } - - return { state: "success", data: response }; -} - -jQuery.extend({ - - // Counter for holding the number of active queries - active: 0, - - // Last-Modified header cache for next request - lastModified: {}, - etag: {}, - - ajaxSettings: { - url: ajaxLocation, - type: "GET", - isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ), - global: true, - processData: true, - async: true, - contentType: "application/x-www-form-urlencoded; charset=UTF-8", - /* - timeout: 0, - data: null, - dataType: null, - username: null, - password: null, - cache: null, - throws: false, - traditional: false, - headers: {}, - */ - - accepts: { - "*": allTypes, - text: "text/plain", - html: "text/html", - xml: "application/xml, text/xml", - json: "application/json, text/javascript" - }, - - contents: { - xml: /xml/, - html: /html/, - json: /json/ - }, - - responseFields: { - xml: "responseXML", - text: "responseText", - json: "responseJSON" - }, - - // Data converters - // Keys separate source (or catchall "*") and destination types with a single space - converters: { - - // Convert anything to text - "* text": String, - - // Text to html (true = no transformation) - "text html": true, - - // Evaluate text as a json expression - "text json": jQuery.parseJSON, - - // Parse text as xml - "text xml": jQuery.parseXML - }, - - // For options that shouldn't be deep extended: - // you can add your own custom options here if - // and when you create one that shouldn't be - // deep extended (see ajaxExtend) - flatOptions: { - url: true, - context: true - } - }, - - // Creates a full fledged settings object into target - // with both ajaxSettings and settings fields. - // If target is omitted, writes into ajaxSettings. - ajaxSetup: function( target, settings ) { - return settings ? - - // Building a settings object - ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : - - // Extending ajaxSettings - ajaxExtend( jQuery.ajaxSettings, target ); - }, - - ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), - ajaxTransport: addToPrefiltersOrTransports( transports ), - - // Main method - ajax: function( url, options ) { - - // If url is an object, simulate pre-1.5 signature - if ( typeof url === "object" ) { - options = url; - url = undefined; - } - - // Force options to be an object - options = options || {}; - - var transport, - // URL without anti-cache param - cacheURL, - // Response headers - responseHeadersString, - responseHeaders, - // timeout handle - timeoutTimer, - // Cross-domain detection vars - parts, - // To know if global events are to be dispatched - fireGlobals, - // Loop variable - i, - // Create the final options object - s = jQuery.ajaxSetup( {}, options ), - // Callbacks context - callbackContext = s.context || s, - // Context for global events is callbackContext if it is a DOM node or jQuery collection - globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ? - jQuery( callbackContext ) : - jQuery.event, - // Deferreds - deferred = jQuery.Deferred(), - completeDeferred = jQuery.Callbacks("once memory"), - // Status-dependent callbacks - statusCode = s.statusCode || {}, - // Headers (they are sent all at once) - requestHeaders = {}, - requestHeadersNames = {}, - // The jqXHR state - state = 0, - // Default abort message - strAbort = "canceled", - // Fake xhr - jqXHR = { - readyState: 0, - - // Builds headers hashtable if needed - getResponseHeader: function( key ) { - var match; - if ( state === 2 ) { - if ( !responseHeaders ) { - responseHeaders = {}; - while ( (match = rheaders.exec( responseHeadersString )) ) { - responseHeaders[ match[1].toLowerCase() ] = match[ 2 ]; - } - } - match = responseHeaders[ key.toLowerCase() ]; - } - return match == null ? null : match; - }, - - // Raw string - getAllResponseHeaders: function() { - return state === 2 ? responseHeadersString : null; - }, - - // Caches the header - setRequestHeader: function( name, value ) { - var lname = name.toLowerCase(); - if ( !state ) { - name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name; - requestHeaders[ name ] = value; - } - return this; - }, - - // Overrides response content-type header - overrideMimeType: function( type ) { - if ( !state ) { - s.mimeType = type; - } - return this; - }, - - // Status-dependent callbacks - statusCode: function( map ) { - var code; - if ( map ) { - if ( state < 2 ) { - for ( code in map ) { - // Lazy-add the new callback in a way that preserves old ones - statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; - } - } else { - // Execute the appropriate callbacks - jqXHR.always( map[ jqXHR.status ] ); - } - } - return this; - }, - - // Cancel the request - abort: function( statusText ) { - var finalText = statusText || strAbort; - if ( transport ) { - transport.abort( finalText ); - } - done( 0, finalText ); - return this; - } - }; - - // Attach deferreds - deferred.promise( jqXHR ).complete = completeDeferred.add; - jqXHR.success = jqXHR.done; - jqXHR.error = jqXHR.fail; - - // Remove hash character (#7531: and string promotion) - // Add protocol if not provided (prefilters might expect it) - // Handle falsy url in the settings object (#10093: consistency with old signature) - // We also use the url parameter if available - s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" ) - .replace( rprotocol, ajaxLocParts[ 1 ] + "//" ); - - // Alias method option to type as per ticket #12004 - s.type = options.method || options.type || s.method || s.type; - - // Extract dataTypes list - s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ]; - - // A cross-domain request is in order when we have a protocol:host:port mismatch - if ( s.crossDomain == null ) { - parts = rurl.exec( s.url.toLowerCase() ); - s.crossDomain = !!( parts && - ( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] || - ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? "80" : "443" ) ) !== - ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? "80" : "443" ) ) ) - ); - } - - // Convert data if not already a string - if ( s.data && s.processData && typeof s.data !== "string" ) { - s.data = jQuery.param( s.data, s.traditional ); - } - - // Apply prefilters - inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); - - // If request was aborted inside a prefilter, stop there - if ( state === 2 ) { - return jqXHR; - } - - // We can fire global events as of now if asked to - fireGlobals = s.global; - - // Watch for a new set of requests - if ( fireGlobals && jQuery.active++ === 0 ) { - jQuery.event.trigger("ajaxStart"); - } - - // Uppercase the type - s.type = s.type.toUpperCase(); - - // Determine if request has content - s.hasContent = !rnoContent.test( s.type ); - - // Save the URL in case we're toying with the If-Modified-Since - // and/or If-None-Match header later on - cacheURL = s.url; - - // More options handling for requests with no content - if ( !s.hasContent ) { - - // If data is available, append data to url - if ( s.data ) { - cacheURL = ( s.url += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data ); - // #9682: remove data so that it's not used in an eventual retry - delete s.data; - } - - // Add anti-cache in url if needed - if ( s.cache === false ) { - s.url = rts.test( cacheURL ) ? - - // If there is already a '_' parameter, set its value - cacheURL.replace( rts, "$1_=" + nonce++ ) : - - // Otherwise add one to the end - cacheURL + ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + nonce++; - } - } - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - if ( jQuery.lastModified[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); - } - if ( jQuery.etag[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); - } - } - - // Set the correct header, if data is being sent - if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { - jqXHR.setRequestHeader( "Content-Type", s.contentType ); - } - - // Set the Accepts header for the server, depending on the dataType - jqXHR.setRequestHeader( - "Accept", - s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ? - s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : - s.accepts[ "*" ] - ); - - // Check for headers option - for ( i in s.headers ) { - jqXHR.setRequestHeader( i, s.headers[ i ] ); - } - - // Allow custom headers/mimetypes and early abort - if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) { - // Abort if not done already and return - return jqXHR.abort(); - } - - // aborting is no longer a cancellation - strAbort = "abort"; - - // Install callbacks on deferreds - for ( i in { success: 1, error: 1, complete: 1 } ) { - jqXHR[ i ]( s[ i ] ); - } - - // Get transport - transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); - - // If no transport, we auto-abort - if ( !transport ) { - done( -1, "No Transport" ); - } else { - jqXHR.readyState = 1; - - // Send global event - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); - } - // Timeout - if ( s.async && s.timeout > 0 ) { - timeoutTimer = setTimeout(function() { - jqXHR.abort("timeout"); - }, s.timeout ); - } - - try { - state = 1; - transport.send( requestHeaders, done ); - } catch ( e ) { - // Propagate exception as error if not done - if ( state < 2 ) { - done( -1, e ); - // Simply rethrow otherwise - } else { - throw e; - } - } - } - - // Callback for when everything is done - function done( status, nativeStatusText, responses, headers ) { - var isSuccess, success, error, response, modified, - statusText = nativeStatusText; - - // Called once - if ( state === 2 ) { - return; - } - - // State is "done" now - state = 2; - - // Clear timeout if it exists - if ( timeoutTimer ) { - clearTimeout( timeoutTimer ); - } - - // Dereference transport for early garbage collection - // (no matter how long the jqXHR object will be used) - transport = undefined; - - // Cache response headers - responseHeadersString = headers || ""; - - // Set readyState - jqXHR.readyState = status > 0 ? 4 : 0; - - // Determine if successful - isSuccess = status >= 200 && status < 300 || status === 304; - - // Get response data - if ( responses ) { - response = ajaxHandleResponses( s, jqXHR, responses ); - } - - // Convert no matter what (that way responseXXX fields are always set) - response = ajaxConvert( s, response, jqXHR, isSuccess ); - - // If successful, handle type chaining - if ( isSuccess ) { - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - modified = jqXHR.getResponseHeader("Last-Modified"); - if ( modified ) { - jQuery.lastModified[ cacheURL ] = modified; - } - modified = jqXHR.getResponseHeader("etag"); - if ( modified ) { - jQuery.etag[ cacheURL ] = modified; - } - } - - // if no content - if ( status === 204 || s.type === "HEAD" ) { - statusText = "nocontent"; - - // if not modified - } else if ( status === 304 ) { - statusText = "notmodified"; - - // If we have data, let's convert it - } else { - statusText = response.state; - success = response.data; - error = response.error; - isSuccess = !error; - } - } else { - // We extract error from statusText - // then normalize statusText and status for non-aborts - error = statusText; - if ( status || !statusText ) { - statusText = "error"; - if ( status < 0 ) { - status = 0; - } - } - } - - // Set data for the fake xhr object - jqXHR.status = status; - jqXHR.statusText = ( nativeStatusText || statusText ) + ""; - - // Success/Error - if ( isSuccess ) { - deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); - } else { - deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); - } - - // Status-dependent callbacks - jqXHR.statusCode( statusCode ); - statusCode = undefined; - - if ( fireGlobals ) { - globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", - [ jqXHR, s, isSuccess ? success : error ] ); - } - - // Complete - completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); - - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); - // Handle the global AJAX counter - if ( !( --jQuery.active ) ) { - jQuery.event.trigger("ajaxStop"); - } - } - } - - return jqXHR; - }, - - getJSON: function( url, data, callback ) { - return jQuery.get( url, data, callback, "json" ); - }, - - getScript: function( url, callback ) { - return jQuery.get( url, undefined, callback, "script" ); - } -}); - -jQuery.each( [ "get", "post" ], function( i, method ) { - jQuery[ method ] = function( url, data, callback, type ) { - // shift arguments if data argument was omitted - if ( jQuery.isFunction( data ) ) { - type = type || callback; - callback = data; - data = undefined; - } - - return jQuery.ajax({ - url: url, - type: method, - dataType: type, - data: data, - success: callback - }); - }; -}); - -// Attach a bunch of functions for handling common AJAX events -jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ) { - jQuery.fn[ type ] = function( fn ) { - return this.on( type, fn ); - }; -}); - - -jQuery._evalUrl = function( url ) { - return jQuery.ajax({ - url: url, - type: "GET", - dataType: "script", - async: false, - global: false, - "throws": true - }); -}; - - -jQuery.fn.extend({ - wrapAll: function( html ) { - var wrap; - - 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 - 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.firstElementChild ) { - elem = elem.firstElementChild; - } - - 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(); - } -}); - - -jQuery.expr.filters.hidden = function( elem ) { - // Support: Opera <= 12.12 - // Opera reports offsetWidths and offsetHeights less than zero on some elements - return elem.offsetWidth <= 0 && elem.offsetHeight <= 0; -}; -jQuery.expr.filters.visible = function( elem ) { - return !jQuery.expr.filters.hidden( elem ); -}; - - - - -var r20 = /%20/g, - rbracket = /\[\]$/, - rCRLF = /\r?\n/g, - rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, - rsubmittable = /^(?:input|select|textarea|keygen)/i; - -function buildParams( prefix, obj, traditional, add ) { - var name; - - if ( jQuery.isArray( obj ) ) { - // Serialize array item. - jQuery.each( obj, function( i, v ) { - if ( traditional || rbracket.test( prefix ) ) { - // Treat each array item as a scalar. - add( prefix, v ); - - } else { - // Item is non-scalar (array or object), encode its numeric index. - buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add ); - } - }); - - } else if ( !traditional && jQuery.type( obj ) === "object" ) { - // Serialize object item. - for ( name in obj ) { - buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); - } - - } else { - // Serialize scalar item. - add( prefix, obj ); - } -} - -// Serialize an array of form elements or a set of -// key/values into a query string -jQuery.param = function( a, traditional ) { - var prefix, - s = [], - add = function( key, value ) { - // If value is a function, invoke it and return its value - value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value ); - s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value ); - }; - - // Set traditional to true for jQuery <= 1.3.2 behavior. - if ( traditional === undefined ) { - traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional; - } - - // If an array was passed in, assume that it is an array of form elements. - if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { - // Serialize the form elements - jQuery.each( a, function() { - add( this.name, this.value ); - }); - - } else { - // If traditional, encode the "old" way (the way 1.3.2 or older - // did it), otherwise encode params recursively. - for ( prefix in a ) { - buildParams( prefix, a[ prefix ], traditional, add ); - } - } - - // Return the resulting serialization - return s.join( "&" ).replace( r20, "+" ); -}; - -jQuery.fn.extend({ - serialize: function() { - return jQuery.param( this.serializeArray() ); - }, - serializeArray: function() { - return this.map(function() { - // Can add propHook for "elements" to filter or add form elements - var elements = jQuery.prop( this, "elements" ); - return elements ? jQuery.makeArray( elements ) : this; - }) - .filter(function() { - var type = this.type; - - // Use .is( ":disabled" ) so that fieldset[disabled] works - return this.name && !jQuery( this ).is( ":disabled" ) && - rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && - ( this.checked || !rcheckableType.test( type ) ); - }) - .map(function( i, elem ) { - var val = jQuery( this ).val(); - - return val == null ? - null : - jQuery.isArray( val ) ? - jQuery.map( val, function( val ) { - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - }) : - { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - }).get(); - } -}); - - -jQuery.ajaxSettings.xhr = function() { - try { - return new XMLHttpRequest(); - } catch( e ) {} -}; - -var xhrId = 0, - xhrCallbacks = {}, - xhrSuccessStatus = { - // file protocol always yields status code 0, assume 200 - 0: 200, - // Support: IE9 - // #1450: sometimes IE returns 1223 when it should be 204 - 1223: 204 - }, - xhrSupported = jQuery.ajaxSettings.xhr(); - -// Support: IE9 -// Open requests must be manually aborted on unload (#5280) -if ( window.ActiveXObject ) { - jQuery( window ).on( "unload", function() { - for ( var key in xhrCallbacks ) { - xhrCallbacks[ key ](); - } - }); -} - -support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); -support.ajax = xhrSupported = !!xhrSupported; - -jQuery.ajaxTransport(function( options ) { - var callback; - - // Cross domain only allowed if supported through XMLHttpRequest - if ( support.cors || xhrSupported && !options.crossDomain ) { - return { - send: function( headers, complete ) { - var i, - xhr = options.xhr(), - id = ++xhrId; - - xhr.open( options.type, options.url, options.async, options.username, options.password ); - - // Apply custom fields if provided - if ( options.xhrFields ) { - for ( i in options.xhrFields ) { - xhr[ i ] = options.xhrFields[ i ]; - } - } - - // Override mime type if needed - if ( options.mimeType && xhr.overrideMimeType ) { - xhr.overrideMimeType( options.mimeType ); - } - - // X-Requested-With header - // For cross-domain requests, seeing as conditions for a preflight are - // akin to a jigsaw puzzle, we simply never set it to be sure. - // (it can always be set on a per-request basis or even using ajaxSetup) - // For same-domain requests, won't change header if already provided. - if ( !options.crossDomain && !headers["X-Requested-With"] ) { - headers["X-Requested-With"] = "XMLHttpRequest"; - } - - // Set headers - for ( i in headers ) { - xhr.setRequestHeader( i, headers[ i ] ); - } - - // Callback - callback = function( type ) { - return function() { - if ( callback ) { - delete xhrCallbacks[ id ]; - callback = xhr.onload = xhr.onerror = null; - - if ( type === "abort" ) { - xhr.abort(); - } else if ( type === "error" ) { - complete( - // file: protocol always yields status 0; see #8605, #14207 - xhr.status, - xhr.statusText - ); - } else { - complete( - xhrSuccessStatus[ xhr.status ] || xhr.status, - xhr.statusText, - // Support: IE9 - // Accessing binary-data responseText throws an exception - // (#11426) - typeof xhr.responseText === "string" ? { - text: xhr.responseText - } : undefined, - xhr.getAllResponseHeaders() - ); - } - } - }; - }; - - // Listen to events - xhr.onload = callback(); - xhr.onerror = callback("error"); - - // Create the abort callback - callback = xhrCallbacks[ id ] = callback("abort"); - - try { - // Do send the request (this may raise an exception) - xhr.send( options.hasContent && options.data || null ); - } catch ( e ) { - // #14683: Only rethrow if this hasn't been notified as an error yet - if ( callback ) { - throw e; - } - } - }, - - abort: function() { - if ( callback ) { - callback(); - } - } - }; - } -}); - - - - -// Install script dataType -jQuery.ajaxSetup({ - accepts: { - script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript" - }, - contents: { - script: /(?:java|ecma)script/ - }, - converters: { - "text script": function( text ) { - jQuery.globalEval( text ); - return text; - } - } -}); - -// Handle cache's special case and crossDomain -jQuery.ajaxPrefilter( "script", function( s ) { - if ( s.cache === undefined ) { - s.cache = false; - } - if ( s.crossDomain ) { - s.type = "GET"; - } -}); - -// Bind script tag hack transport -jQuery.ajaxTransport( "script", function( s ) { - // This transport only deals with cross domain requests - if ( s.crossDomain ) { - var script, callback; - return { - send: function( _, complete ) { - script = jQuery("<script>").prop({ - async: true, - charset: s.scriptCharset, - src: s.url - }).on( - "load error", - callback = function( evt ) { - script.remove(); - callback = null; - if ( evt ) { - complete( evt.type === "error" ? 404 : 200, evt.type ); - } - } - ); - document.head.appendChild( script[ 0 ] ); - }, - abort: function() { - if ( callback ) { - callback(); - } - } - }; - } -}); - - - - -var oldCallbacks = [], - rjsonp = /(=)\?(?=&|$)|\?\?/; - -// Default jsonp settings -jQuery.ajaxSetup({ - jsonp: "callback", - jsonpCallback: function() { - var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) ); - this[ callback ] = true; - return callback; - } -}); - -// Detect, normalize options and install callbacks for jsonp requests -jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { - - var callbackName, overwritten, responseContainer, - jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ? - "url" : - typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data" - ); - - // Handle iff the expected data type is "jsonp" or we have a parameter to set - if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) { - - // Get callback name, remembering preexisting value associated with it - callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ? - s.jsonpCallback() : - s.jsonpCallback; - - // Insert callback into url or form data - if ( jsonProp ) { - s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName ); - } else if ( s.jsonp !== false ) { - s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; - } - - // Use data converter to retrieve json after script execution - s.converters["script json"] = function() { - if ( !responseContainer ) { - jQuery.error( callbackName + " was not called" ); - } - return responseContainer[ 0 ]; - }; - - // force json dataType - s.dataTypes[ 0 ] = "json"; - - // Install callback - overwritten = window[ callbackName ]; - window[ callbackName ] = function() { - responseContainer = arguments; - }; - - // Clean-up function (fires after converters) - jqXHR.always(function() { - // Restore preexisting value - window[ callbackName ] = overwritten; - - // Save back as free - if ( s[ callbackName ] ) { - // make sure that re-using the options doesn't screw things around - s.jsonpCallback = originalSettings.jsonpCallback; - - // save the callback name for future use - oldCallbacks.push( callbackName ); - } - - // Call if it was a function and we have a response - if ( responseContainer && jQuery.isFunction( overwritten ) ) { - overwritten( responseContainer[ 0 ] ); - } - - responseContainer = overwritten = undefined; - }); - - // Delegate to script - return "script"; - } -}); - - - - -// 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 -jQuery.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 && scripts.length ) { - jQuery( scripts ).remove(); - } - - return jQuery.merge( [], parsed.childNodes ); -}; - - -// Keep a copy of the old load method -var _load = jQuery.fn.load; - -/** - * Load a url into a page - */ -jQuery.fn.load = function( url, params, callback ) { - if ( typeof url !== "string" && _load ) { - return _load.apply( this, arguments ); - } - - var selector, type, response, - self = this, - off = url.indexOf(" "); - - if ( off >= 0 ) { - selector = jQuery.trim( url.slice( off ) ); - url = url.slice( 0, off ); - } - - // If it's a function - if ( jQuery.isFunction( params ) ) { - - // We assume that it's the callback - callback = params; - params = undefined; - - // Otherwise, build a param string - } else if ( params && typeof params === "object" ) { - type = "POST"; - } - - // If we have elements to modify, make the request - if ( self.length > 0 ) { - jQuery.ajax({ - url: url, - - // if "type" variable is undefined, then "GET" method will be used - type: type, - dataType: "html", - data: params - }).done(function( responseText ) { - - // Save response for use in complete callback - response = arguments; - - self.html( selector ? - - // If a selector was specified, locate the right elements in a dummy div - // Exclude scripts to avoid IE 'Permission Denied' errors - jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) : - - // Otherwise use the full result - responseText ); - - }).complete( callback && function( jqXHR, status ) { - self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] ); - }); - } - - return this; -}; - - - - -jQuery.expr.filters.animated = function( elem ) { - return jQuery.grep(jQuery.timers, function( fn ) { - return elem === fn.elem; - }).length; -}; - - - - -var docElem = window.document.documentElement; - -/** - * Gets a window from an element - */ -function getWindow( elem ) { - return jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView; -} - -jQuery.offset = { - setOffset: function( elem, options, i ) { - var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition, - position = jQuery.css( elem, "position" ), - curElem = jQuery( elem ), - props = {}; - - // Set position first, in-case top/left are set even on static elem - if ( position === "static" ) { - elem.style.position = "relative"; - } - - curOffset = curElem.offset(); - curCSSTop = jQuery.css( elem, "top" ); - curCSSLeft = jQuery.css( elem, "left" ); - calculatePosition = ( position === "absolute" || position === "fixed" ) && - ( curCSSTop + curCSSLeft ).indexOf("auto") > -1; - - // Need to be able to calculate position if either top or left is auto and position is either absolute or fixed - if ( calculatePosition ) { - curPosition = curElem.position(); - curTop = curPosition.top; - curLeft = curPosition.left; - - } else { - curTop = parseFloat( curCSSTop ) || 0; - curLeft = parseFloat( curCSSLeft ) || 0; - } - - if ( jQuery.isFunction( options ) ) { - options = options.call( elem, i, curOffset ); - } - - if ( options.top != null ) { - props.top = ( options.top - curOffset.top ) + curTop; - } - if ( options.left != null ) { - props.left = ( options.left - curOffset.left ) + curLeft; - } - - if ( "using" in options ) { - options.using.call( elem, props ); - - } else { - curElem.css( props ); - } - } -}; - -jQuery.fn.extend({ - offset: function( options ) { - if ( arguments.length ) { - return options === undefined ? - this : - this.each(function( i ) { - jQuery.offset.setOffset( this, options, i ); - }); - } - - var docElem, win, - elem = this[ 0 ], - box = { top: 0, left: 0 }, - doc = elem && elem.ownerDocument; - - if ( !doc ) { - return; - } - - docElem = doc.documentElement; - - // Make sure it's not a disconnected DOM node - if ( !jQuery.contains( docElem, elem ) ) { - return box; - } - - // If we don't have gBCR, just use 0,0 rather than error - // BlackBerry 5, iOS 3 (original iPhone) - if ( typeof elem.getBoundingClientRect !== strundefined ) { - box = elem.getBoundingClientRect(); - } - win = getWindow( doc ); - return { - top: box.top + win.pageYOffset - docElem.clientTop, - left: box.left + win.pageXOffset - docElem.clientLeft - }; - }, - - position: function() { - if ( !this[ 0 ] ) { - return; - } - - var offsetParent, offset, - elem = this[ 0 ], - parentOffset = { top: 0, left: 0 }; - - // Fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is its only offset parent - if ( jQuery.css( elem, "position" ) === "fixed" ) { - // We assume that getBoundingClientRect is available when computed position is fixed - offset = elem.getBoundingClientRect(); - - } else { - // Get *real* offsetParent - offsetParent = this.offsetParent(); - - // Get correct offsets - offset = this.offset(); - if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) { - parentOffset = offsetParent.offset(); - } - - // Add offsetParent borders - parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ); - parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true ); - } - - // Subtract parent offsets and element margins - return { - top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ), - left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true ) - }; - }, - - offsetParent: function() { - return this.map(function() { - var offsetParent = this.offsetParent || docElem; - - while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position" ) === "static" ) ) { - offsetParent = offsetParent.offsetParent; - } - - return offsetParent || docElem; - }); - } -}); - -// Create scrollLeft and scrollTop methods -jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) { - var top = "pageYOffset" === prop; - - jQuery.fn[ method ] = function( val ) { - return access( this, function( elem, method, val ) { - var win = getWindow( elem ); - - if ( val === undefined ) { - return win ? win[ prop ] : elem[ method ]; - } - - if ( win ) { - win.scrollTo( - !top ? val : window.pageXOffset, - top ? val : window.pageYOffset - ); - - } else { - elem[ method ] = val; - } - }, method, val, arguments.length, null ); - }; -}); - -// Add the top/left cssHooks using jQuery.fn.position -// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 -// getComputedStyle returns percent when specified for top/left/bottom/right -// rather than make the css module depend on the offset module, we just check for it here -jQuery.each( [ "top", "left" ], function( i, prop ) { - jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition, - function( elem, computed ) { - if ( computed ) { - computed = curCSS( elem, prop ); - // if curCSS returns percentage, fallback to offset - return rnumnonpx.test( computed ) ? - jQuery( elem ).position()[ prop ] + "px" : - computed; - } - } - ); -}); - - -// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods -jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { - jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) { - // margin is only for outerHeight, outerWidth - jQuery.fn[ funcName ] = function( margin, value ) { - var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ), - extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ); - - return access( this, function( elem, type, value ) { - var doc; - - if ( jQuery.isWindow( elem ) ) { - // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there - // isn't a whole lot we can do. See pull request at this URL for discussion: - // https://github.com/jquery/jquery/pull/764 - return elem.document.documentElement[ "client" + name ]; - } - - // Get document width or height - if ( elem.nodeType === 9 ) { - doc = elem.documentElement; - - // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], - // whichever is greatest - return Math.max( - elem.body[ "scroll" + name ], doc[ "scroll" + name ], - elem.body[ "offset" + name ], doc[ "offset" + name ], - doc[ "client" + name ] - ); - } - - return value === undefined ? - // Get width or height on the element, requesting but not forcing parseFloat - jQuery.css( elem, type, extra ) : - - // Set width or height on the element - jQuery.style( elem, type, value, extra ); - }, type, chainable ? margin : undefined, chainable, null ); - }; - }); -}); - - -// The number of elements contained in the matched element set -jQuery.fn.size = function() { - return this.length; -}; - -jQuery.fn.andSelf = jQuery.fn.addBack; - - - - -// Register as a named AMD module, since jQuery can be concatenated with other -// files that may use define, but not via a proper concatenation script that -// understands anonymous AMD modules. A named AMD is safest and most robust -// way to register. Lowercase jquery is used because AMD module names are -// derived from file names, and jQuery is normally delivered in a lowercase -// file name. Do this after creating the global so that if an AMD module wants -// to call noConflict to hide this version of jQuery, it will work. - -// Note that for maximum portability, libraries that are not jQuery should -// declare themselves as anonymous modules, and avoid setting a global if an -// AMD loader is present. jQuery is a special case. For more information, see -// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon - -if ( typeof define === "function" && define.amd ) { - define( "jquery", [], function() { - return jQuery; - }); -} - - - - -var - // Map over jQuery in case of overwrite - _jQuery = window.jQuery, - - // Map over the $ in case of overwrite - _$ = window.$; - -jQuery.noConflict = function( deep ) { - if ( window.$ === jQuery ) { - window.$ = _$; - } - - if ( deep && window.jQuery === jQuery ) { - window.jQuery = _jQuery; - } - - return jQuery; -}; - -// Expose jQuery and $ identifiers, even in -// AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557) -// and CommonJS for browser emulators (#13566) -if ( typeof noGlobal === strundefined ) { - window.jQuery = window.$ = jQuery; -} - - - - -return jQuery; - -})); - -/** - * @license AngularJS v1.3.11 - * (c) 2010-2014 Google, Inc. http://angularjs.org - * License: MIT - */ -(function(window, document){ - var _jQuery = window.jQuery.noConflict(true); - -/** - * @description - * - * This object provides a utility for producing rich Error messages within - * Angular. It can be called as follows: - * - * var exampleMinErr = minErr('example'); - * throw exampleMinErr('one', 'This {0} is {1}', foo, bar); - * - * The above creates an instance of minErr in the example namespace. The - * resulting error will have a namespaced error code of example.one. The - * resulting error will replace {0} with the value of foo, and {1} with the - * value of bar. The object is not restricted in the number of arguments it can - * take. - * - * If fewer arguments are specified than necessary for interpolation, the extra - * interpolation markers will be preserved in the final string. - * - * Since data will be parsed statically during a build step, some restrictions - * are applied with respect to how minErr instances are created and called. - * Instances should have names of the form namespaceMinErr for a minErr created - * using minErr('namespace') . Error codes, namespaces and template strings - * should all be static strings, not variables or general expressions. - * - * @param {string} module The namespace to use for the new minErr instance. - * @param {function} ErrorConstructor Custom error constructor to be instantiated when returning - * error from returned function, for cases when a particular type of error is useful. - * @returns {function(code:string, template:string, ...templateArgs): Error} minErr instance - */ - -function minErr(module, ErrorConstructor) { - ErrorConstructor = ErrorConstructor || Error; - return function() { - var code = arguments[0], - prefix = '[' + (module ? module + ':' : '') + code + '] ', - template = arguments[1], - templateArgs = arguments, - - message, i; - - message = prefix + template.replace(/\{\d+\}/g, function(match) { - var index = +match.slice(1, -1), arg; - - if (index + 2 < templateArgs.length) { - return toDebugString(templateArgs[index + 2]); - } - return match; - }); - - message = message + '\nhttp://errors.angularjs.org/1.3.11/' + - (module ? module + '/' : '') + code; - for (i = 2; i < arguments.length; i++) { - message = message + (i == 2 ? '?' : '&') + 'p' + (i - 2) + '=' + - encodeURIComponent(toDebugString(arguments[i])); - } - return new ErrorConstructor(message); - }; -} - -/* We need to tell jshint what variables are being exported */ -/* global angular: true, - msie: true, - jqLite: true, - jQuery: true, - slice: true, - splice: true, - push: true, - toString: true, - ngMinErr: true, - angularModule: true, - uid: true, - REGEX_STRING_REGEXP: true, - VALIDITY_STATE_PROPERTY: true, - - lowercase: true, - uppercase: true, - manualLowercase: true, - manualUppercase: true, - nodeName_: true, - isArrayLike: true, - forEach: true, - sortedKeys: true, - forEachSorted: true, - reverseParams: true, - nextUid: true, - setHashKey: true, - extend: true, - int: true, - inherit: true, - noop: true, - identity: true, - valueFn: true, - isUndefined: true, - isDefined: true, - isObject: true, - isString: true, - isNumber: true, - isDate: true, - isArray: true, - isFunction: true, - isRegExp: true, - isWindow: true, - isScope: true, - isFile: true, - isFormData: true, - isBlob: true, - isBoolean: true, - isPromiseLike: true, - trim: true, - escapeForRegexp: true, - isElement: true, - makeMap: true, - includes: true, - arrayRemove: true, - copy: true, - shallowCopy: true, - equals: true, - csp: true, - concat: true, - sliceArgs: true, - bind: true, - toJsonReplacer: true, - toJson: true, - fromJson: true, - startingTag: true, - tryDecodeURIComponent: true, - parseKeyValue: true, - toKeyValue: true, - encodeUriSegment: true, - encodeUriQuery: true, - angularInit: true, - bootstrap: true, - getTestability: true, - snake_case: true, - bindJQuery: true, - assertArg: true, - assertArgFn: true, - assertNotHasOwnProperty: true, - getter: true, - getBlockNodes: true, - hasOwnProperty: true, - createMap: true, - - NODE_TYPE_ELEMENT: true, - NODE_TYPE_TEXT: true, - NODE_TYPE_COMMENT: true, - NODE_TYPE_DOCUMENT: true, - NODE_TYPE_DOCUMENT_FRAGMENT: true, -*/ - -//////////////////////////////////// - -/** - * @ngdoc module - * @name ng - * @module ng - * @description - * - * # ng (core module) - * The ng module is loaded by default when an AngularJS application is started. The module itself - * contains the essential components for an AngularJS application to function. The table below - * lists a high level breakdown of each of the services/factories, filters, directives and testing - * components available within this core module. - * - * <div doc-module-components="ng"></div> - */ - -var REGEX_STRING_REGEXP = /^\/(.+)\/([a-z]*)$/; - -// The name of a form control's ValidityState property. -// This is used so that it's possible for internal tests to create mock ValidityStates. -var VALIDITY_STATE_PROPERTY = 'validity'; - -/** - * @ngdoc function - * @name angular.lowercase - * @module ng - * @kind function - * - * @description Converts the specified string to lowercase. - * @param {string} string String to be converted to lowercase. - * @returns {string} Lowercased string. - */ -var lowercase = function(string) {return isString(string) ? string.toLowerCase() : string;}; -var hasOwnProperty = Object.prototype.hasOwnProperty; - -/** - * @ngdoc function - * @name angular.uppercase - * @module ng - * @kind function - * - * @description Converts the specified string to uppercase. - * @param {string} string String to be converted to uppercase. - * @returns {string} Uppercased string. - */ -var uppercase = function(string) {return isString(string) ? string.toUpperCase() : string;}; - - -var manualLowercase = function(s) { - /* jshint bitwise: false */ - return isString(s) - ? s.replace(/[A-Z]/g, function(ch) {return String.fromCharCode(ch.charCodeAt(0) | 32);}) - : s; -}; -var manualUppercase = function(s) { - /* jshint bitwise: false */ - return isString(s) - ? s.replace(/[a-z]/g, function(ch) {return String.fromCharCode(ch.charCodeAt(0) & ~32);}) - : s; -}; - - -// String#toLowerCase and String#toUpperCase don't produce correct results in browsers with Turkish -// locale, for this reason we need to detect this case and redefine lowercase/uppercase methods -// with correct but slower alternatives. -if ('i' !== 'I'.toLowerCase()) { - lowercase = manualLowercase; - uppercase = manualUppercase; -} - - -var - msie, // holds major version number for IE, or NaN if UA is not IE. - jqLite, // delay binding since jQuery could be loaded after us. - jQuery, // delay binding - slice = [].slice, - splice = [].splice, - push = [].push, - toString = Object.prototype.toString, - ngMinErr = minErr('ng'), - - /** @name angular */ - angular = window.angular || (window.angular = {}), - angularModule, - uid = 0; - -/** - * documentMode is an IE-only property - * http://msdn.microsoft.com/en-us/library/ie/cc196988(v=vs.85).aspx - */ -msie = document.documentMode; - - -/** - * @private - * @param {*} obj - * @return {boolean} Returns true if `obj` is an array or array-like object (NodeList, Arguments, - * String ...) - */ -function isArrayLike(obj) { - if (obj == null || isWindow(obj)) { - return false; - } - - var length = obj.length; - - if (obj.nodeType === NODE_TYPE_ELEMENT && length) { - return true; - } - - return isString(obj) || isArray(obj) || length === 0 || - typeof length === 'number' && length > 0 && (length - 1) in obj; -} - -/** - * @ngdoc function - * @name angular.forEach - * @module ng - * @kind function - * - * @description - * Invokes the `iterator` function once for each item in `obj` collection, which can be either an - * object or an array. The `iterator` function is invoked with `iterator(value, key, obj)`, where `value` - * is the value of an object property or an array element, `key` is the object property key or - * array element index and obj is the `obj` itself. Specifying a `context` for the function is optional. - * - * It is worth noting that `.forEach` does not iterate over inherited properties because it filters - * using the `hasOwnProperty` method. - * - * Unlike ES262's - * [Array.prototype.forEach](http://www.ecma-international.org/ecma-262/5.1/#sec-15.4.4.18), - * Providing 'undefined' or 'null' values for `obj` will not throw a TypeError, but rather just - * return the value provided. - * - ```js - var values = {name: 'misko', gender: 'male'}; - var log = []; - angular.forEach(values, function(value, key) { - this.push(key + ': ' + value); - }, log); - expect(log).toEqual(['name: misko', 'gender: male']); - ``` - * - * @param {Object|Array} obj Object to iterate over. - * @param {Function} iterator Iterator function. - * @param {Object=} context Object to become context (`this`) for the iterator function. - * @returns {Object|Array} Reference to `obj`. - */ - -function forEach(obj, iterator, context) { - var key, length; - if (obj) { - if (isFunction(obj)) { - for (key in obj) { - // Need to check if hasOwnProperty exists, - // as on IE8 the result of querySelectorAll is an object without a hasOwnProperty function - if (key != 'prototype' && key != 'length' && key != 'name' && (!obj.hasOwnProperty || obj.hasOwnProperty(key))) { - iterator.call(context, obj[key], key, obj); - } - } - } else if (isArray(obj) || isArrayLike(obj)) { - var isPrimitive = typeof obj !== 'object'; - for (key = 0, length = obj.length; key < length; key++) { - if (isPrimitive || key in obj) { - iterator.call(context, obj[key], key, obj); - } - } - } else if (obj.forEach && obj.forEach !== forEach) { - obj.forEach(iterator, context, obj); - } else { - for (key in obj) { - if (obj.hasOwnProperty(key)) { - iterator.call(context, obj[key], key, obj); - } - } - } - } - return obj; -} - -function sortedKeys(obj) { - return Object.keys(obj).sort(); -} - -function forEachSorted(obj, iterator, context) { - var keys = sortedKeys(obj); - for (var i = 0; i < keys.length; i++) { - iterator.call(context, obj[keys[i]], keys[i]); - } - return keys; -} - - -/** - * when using forEach the params are value, key, but it is often useful to have key, value. - * @param {function(string, *)} iteratorFn - * @returns {function(*, string)} - */ -function reverseParams(iteratorFn) { - return function(value, key) { iteratorFn(key, value); }; -} - -/** - * A consistent way of creating unique IDs in angular. - * - * Using simple numbers allows us to generate 28.6 million unique ids per second for 10 years before - * we hit number precision issues in JavaScript. - * - * Math.pow(2,53) / 60 / 60 / 24 / 365 / 10 = 28.6M - * - * @returns {number} an unique alpha-numeric string - */ -function nextUid() { - return ++uid; -} - - -/** - * Set or clear the hashkey for an object. - * @param obj object - * @param h the hashkey (!truthy to delete the hashkey) - */ -function setHashKey(obj, h) { - if (h) { - obj.$$hashKey = h; - } - else { - delete obj.$$hashKey; - } -} - -/** - * @ngdoc function - * @name angular.extend - * @module ng - * @kind function - * - * @description - * Extends the destination object `dst` by copying own enumerable properties from the `src` object(s) - * to `dst`. You can specify multiple `src` objects. If you want to preserve original objects, you can do so - * by passing an empty object as the target: `var object = angular.extend({}, object1, object2)`. - * Note: Keep in mind that `angular.extend` does not support recursive merge (deep copy). - * - * @param {Object} dst Destination object. - * @param {...Object} src Source object(s). - * @returns {Object} Reference to `dst`. - */ -function extend(dst) { - var h = dst.$$hashKey; - - for (var i = 1, ii = arguments.length; i < ii; i++) { - var obj = arguments[i]; - if (obj) { - var keys = Object.keys(obj); - for (var j = 0, jj = keys.length; j < jj; j++) { - var key = keys[j]; - dst[key] = obj[key]; - } - } - } - - setHashKey(dst, h); - return dst; -} - -function int(str) { - return parseInt(str, 10); -} - - -function inherit(parent, extra) { - return extend(Object.create(parent), extra); -} - -/** - * @ngdoc function - * @name angular.noop - * @module ng - * @kind function - * - * @description - * A function that performs no operations. This function can be useful when writing code in the - * functional style. - ```js - function foo(callback) { - var result = calculateResult(); - (callback || angular.noop)(result); - } - ``` - */ -function noop() {} -noop.$inject = []; - - -/** - * @ngdoc function - * @name angular.identity - * @module ng - * @kind function - * - * @description - * A function that returns its first argument. This function is useful when writing code in the - * functional style. - * - ```js - function transformer(transformationFn, value) { - return (transformationFn || angular.identity)(value); - }; - ``` - * @param {*} value to be returned. - * @returns {*} the value passed in. - */ -function identity($) {return $;} -identity.$inject = []; - - -function valueFn(value) {return function() {return value;};} - -/** - * @ngdoc function - * @name angular.isUndefined - * @module ng - * @kind function - * - * @description - * Determines if a reference is undefined. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is undefined. - */ -function isUndefined(value) {return typeof value === 'undefined';} - - -/** - * @ngdoc function - * @name angular.isDefined - * @module ng - * @kind function - * - * @description - * Determines if a reference is defined. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is defined. - */ -function isDefined(value) {return typeof value !== 'undefined';} - - -/** - * @ngdoc function - * @name angular.isObject - * @module ng - * @kind function - * - * @description - * Determines if a reference is an `Object`. Unlike `typeof` in JavaScript, `null`s are not - * considered to be objects. Note that JavaScript arrays are objects. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is an `Object` but not `null`. - */ -function isObject(value) { - // http://jsperf.com/isobject4 - return value !== null && typeof value === 'object'; -} - - -/** - * @ngdoc function - * @name angular.isString - * @module ng - * @kind function - * - * @description - * Determines if a reference is a `String`. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is a `String`. - */ -function isString(value) {return typeof value === 'string';} - - -/** - * @ngdoc function - * @name angular.isNumber - * @module ng - * @kind function - * - * @description - * Determines if a reference is a `Number`. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is a `Number`. - */ -function isNumber(value) {return typeof value === 'number';} - - -/** - * @ngdoc function - * @name angular.isDate - * @module ng - * @kind function - * - * @description - * Determines if a value is a date. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is a `Date`. - */ -function isDate(value) { - return toString.call(value) === '[object Date]'; -} - - -/** - * @ngdoc function - * @name angular.isArray - * @module ng - * @kind function - * - * @description - * Determines if a reference is an `Array`. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is an `Array`. - */ -var isArray = Array.isArray; - -/** - * @ngdoc function - * @name angular.isFunction - * @module ng - * @kind function - * - * @description - * Determines if a reference is a `Function`. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is a `Function`. - */ -function isFunction(value) {return typeof value === 'function';} - - -/** - * Determines if a value is a regular expression object. - * - * @private - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is a `RegExp`. - */ -function isRegExp(value) { - return toString.call(value) === '[object RegExp]'; -} - - -/** - * Checks if `obj` is a window object. - * - * @private - * @param {*} obj Object to check - * @returns {boolean} True if `obj` is a window obj. - */ -function isWindow(obj) { - return obj && obj.window === obj; -} - - -function isScope(obj) { - return obj && obj.$evalAsync && obj.$watch; -} - - -function isFile(obj) { - return toString.call(obj) === '[object File]'; -} - - -function isFormData(obj) { - return toString.call(obj) === '[object FormData]'; -} - - -function isBlob(obj) { - return toString.call(obj) === '[object Blob]'; -} - - -function isBoolean(value) { - return typeof value === 'boolean'; -} - - -function isPromiseLike(obj) { - return obj && isFunction(obj.then); -} - - -var trim = function(value) { - return isString(value) ? value.trim() : value; -}; - -// Copied from: -// http://docs.closure-library.googlecode.com/git/local_closure_goog_string_string.js.source.html#line1021 -// Prereq: s is a string. -var escapeForRegexp = function(s) { - return s.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g, '\\$1'). - replace(/\x08/g, '\\x08'); -}; - - -/** - * @ngdoc function - * @name angular.isElement - * @module ng - * @kind function - * - * @description - * Determines if a reference is a DOM element (or wrapped jQuery element). - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is a DOM element (or wrapped jQuery element). - */ -function isElement(node) { - return !!(node && - (node.nodeName // we are a direct element - || (node.prop && node.attr && node.find))); // we have an on and find method part of jQuery API -} - -/** - * @param str 'key1,key2,...' - * @returns {object} in the form of {key1:true, key2:true, ...} - */ -function makeMap(str) { - var obj = {}, items = str.split(","), i; - for (i = 0; i < items.length; i++) - obj[ items[i] ] = true; - return obj; -} - - -function nodeName_(element) { - return lowercase(element.nodeName || (element[0] && element[0].nodeName)); -} - -function includes(array, obj) { - return Array.prototype.indexOf.call(array, obj) != -1; -} - -function arrayRemove(array, value) { - var index = array.indexOf(value); - if (index >= 0) - array.splice(index, 1); - return value; -} - -/** - * @ngdoc function - * @name angular.copy - * @module ng - * @kind function - * - * @description - * Creates a deep copy of `source`, which should be an object or an array. - * - * * If no destination is supplied, a copy of the object or array is created. - * * If a destination is provided, all of its elements (for arrays) or properties (for objects) - * are deleted and then all elements/properties from the source are copied to it. - * * If `source` is not an object or array (inc. `null` and `undefined`), `source` is returned. - * * If `source` is identical to 'destination' an exception will be thrown. - * - * @param {*} source The source that will be used to make a copy. - * Can be any type, including primitives, `null`, and `undefined`. - * @param {(Object|Array)=} destination Destination into which the source is copied. If - * provided, must be of the same type as `source`. - * @returns {*} The copy or updated `destination`, if `destination` was specified. - * - * @example - <example module="copyExample"> - <file name="index.html"> - <div ng-controller="ExampleController"> - <form novalidate class="simple-form"> - Name: <input type="text" ng-model="user.name" /><br /> - E-mail: <input type="email" ng-model="user.email" /><br /> - Gender: <input type="radio" ng-model="user.gender" value="male" />male - <input type="radio" ng-model="user.gender" value="female" />female<br /> - <button ng-click="reset()">RESET</button> - <button ng-click="update(user)">SAVE</button> - </form> - <pre>form = {{user | json}}</pre> - <pre>master = {{master | json}}</pre> - </div> - - <script> - angular.module('copyExample', []) - .controller('ExampleController', ['$scope', function($scope) { - $scope.master= {}; - - $scope.update = function(user) { - // Example with 1 argument - $scope.master= angular.copy(user); - }; - - $scope.reset = function() { - // Example with 2 arguments - angular.copy($scope.master, $scope.user); - }; - - $scope.reset(); - }]); - </script> - </file> - </example> - */ -function copy(source, destination, stackSource, stackDest) { - if (isWindow(source) || isScope(source)) { - throw ngMinErr('cpws', - "Can't copy! Making copies of Window or Scope instances is not supported."); - } - - if (!destination) { - destination = source; - if (source) { - if (isArray(source)) { - destination = copy(source, [], stackSource, stackDest); - } else if (isDate(source)) { - destination = new Date(source.getTime()); - } else if (isRegExp(source)) { - destination = new RegExp(source.source, source.toString().match(/[^\/]*$/)[0]); - destination.lastIndex = source.lastIndex; - } else if (isObject(source)) { - var emptyObject = Object.create(Object.getPrototypeOf(source)); - destination = copy(source, emptyObject, stackSource, stackDest); - } - } - } else { - if (source === destination) throw ngMinErr('cpi', - "Can't copy! Source and destination are identical."); - - stackSource = stackSource || []; - stackDest = stackDest || []; - - if (isObject(source)) { - var index = stackSource.indexOf(source); - if (index !== -1) return stackDest[index]; - - stackSource.push(source); - stackDest.push(destination); - } - - var result; - if (isArray(source)) { - destination.length = 0; - for (var i = 0; i < source.length; i++) { - result = copy(source[i], null, stackSource, stackDest); - if (isObject(source[i])) { - stackSource.push(source[i]); - stackDest.push(result); - } - destination.push(result); - } - } else { - var h = destination.$$hashKey; - if (isArray(destination)) { - destination.length = 0; - } else { - forEach(destination, function(value, key) { - delete destination[key]; - }); - } - for (var key in source) { - if (source.hasOwnProperty(key)) { - result = copy(source[key], null, stackSource, stackDest); - if (isObject(source[key])) { - stackSource.push(source[key]); - stackDest.push(result); - } - destination[key] = result; - } - } - setHashKey(destination,h); - } - - } - return destination; -} - -/** - * Creates a shallow copy of an object, an array or a primitive. - * - * Assumes that there are no proto properties for objects. - */ -function shallowCopy(src, dst) { - if (isArray(src)) { - dst = dst || []; - - for (var i = 0, ii = src.length; i < ii; i++) { - dst[i] = src[i]; - } - } else if (isObject(src)) { - dst = dst || {}; - - for (var key in src) { - if (!(key.charAt(0) === '$' && key.charAt(1) === '$')) { - dst[key] = src[key]; - } - } - } - - return dst || src; -} - - -/** - * @ngdoc function - * @name angular.equals - * @module ng - * @kind function - * - * @description - * Determines if two objects or two values are equivalent. Supports value types, regular - * expressions, arrays and objects. - * - * Two objects or values are considered equivalent if at least one of the following is true: - * - * * Both objects or values pass `===` comparison. - * * Both objects or values are of the same type and all of their properties are equal by - * comparing them with `angular.equals`. - * * Both values are NaN. (In JavaScript, NaN == NaN => false. But we consider two NaN as equal) - * * Both values represent the same regular expression (In JavaScript, - * /abc/ == /abc/ => false. But we consider two regular expressions as equal when their textual - * representation matches). - * - * During a property comparison, properties of `function` type and properties with names - * that begin with `$` are ignored. - * - * Scope and DOMWindow objects are being compared only by identify (`===`). - * - * @param {*} o1 Object or value to compare. - * @param {*} o2 Object or value to compare. - * @returns {boolean} True if arguments are equal. - */ -function equals(o1, o2) { - if (o1 === o2) return true; - if (o1 === null || o2 === null) return false; - if (o1 !== o1 && o2 !== o2) return true; // NaN === NaN - var t1 = typeof o1, t2 = typeof o2, length, key, keySet; - if (t1 == t2) { - if (t1 == 'object') { - if (isArray(o1)) { - if (!isArray(o2)) return false; - if ((length = o1.length) == o2.length) { - for (key = 0; key < length; key++) { - if (!equals(o1[key], o2[key])) return false; - } - return true; - } - } else if (isDate(o1)) { - if (!isDate(o2)) return false; - return equals(o1.getTime(), o2.getTime()); - } else if (isRegExp(o1) && isRegExp(o2)) { - return o1.toString() == o2.toString(); - } else { - if (isScope(o1) || isScope(o2) || isWindow(o1) || isWindow(o2) || isArray(o2)) return false; - keySet = {}; - for (key in o1) { - if (key.charAt(0) === '$' || isFunction(o1[key])) continue; - if (!equals(o1[key], o2[key])) return false; - keySet[key] = true; - } - for (key in o2) { - if (!keySet.hasOwnProperty(key) && - key.charAt(0) !== '$' && - o2[key] !== undefined && - !isFunction(o2[key])) return false; - } - return true; - } - } - } - return false; -} - -var csp = function() { - if (isDefined(csp.isActive_)) return csp.isActive_; - - var active = !!(document.querySelector('[ng-csp]') || - document.querySelector('[data-ng-csp]')); - - if (!active) { - try { - /* jshint -W031, -W054 */ - new Function(''); - /* jshint +W031, +W054 */ - } catch (e) { - active = true; - } - } - - return (csp.isActive_ = active); -}; - - - -function concat(array1, array2, index) { - return array1.concat(slice.call(array2, index)); -} - -function sliceArgs(args, startIndex) { - return slice.call(args, startIndex || 0); -} - - -/* jshint -W101 */ -/** - * @ngdoc function - * @name angular.bind - * @module ng - * @kind function - * - * @description - * Returns a function which calls function `fn` bound to `self` (`self` becomes the `this` for - * `fn`). You can supply optional `args` that are prebound to the function. This feature is also - * known as [partial application](http://en.wikipedia.org/wiki/Partial_application), as - * distinguished from [function currying](http://en.wikipedia.org/wiki/Currying#Contrast_with_partial_function_application). - * - * @param {Object} self Context which `fn` should be evaluated in. - * @param {function()} fn Function to be bound. - * @param {...*} args Optional arguments to be prebound to the `fn` function call. - * @returns {function()} Function that wraps the `fn` with all the specified bindings. - */ -/* jshint +W101 */ -function bind(self, fn) { - var curryArgs = arguments.length > 2 ? sliceArgs(arguments, 2) : []; - if (isFunction(fn) && !(fn instanceof RegExp)) { - return curryArgs.length - ? function() { - return arguments.length - ? fn.apply(self, concat(curryArgs, arguments, 0)) - : fn.apply(self, curryArgs); - } - : function() { - return arguments.length - ? fn.apply(self, arguments) - : fn.call(self); - }; - } else { - // in IE, native methods are not functions so they cannot be bound (note: they don't need to be) - return fn; - } -} - - -function toJsonReplacer(key, value) { - var val = value; - - if (typeof key === 'string' && key.charAt(0) === '$' && key.charAt(1) === '$') { - val = undefined; - } else if (isWindow(value)) { - val = '$WINDOW'; - } else if (value && document === value) { - val = '$DOCUMENT'; - } else if (isScope(value)) { - val = '$SCOPE'; - } - - return val; -} - - -/** - * @ngdoc function - * @name angular.toJson - * @module ng - * @kind function - * - * @description - * Serializes input into a JSON-formatted string. Properties with leading $$ characters will be - * stripped since angular uses this notation internally. - * - * @param {Object|Array|Date|string|number} obj Input to be serialized into JSON. - * @param {boolean|number=} pretty If set to true, the JSON output will contain newlines and whitespace. - * If set to an integer, the JSON output will contain that many spaces per indentation (the default is 2). - * @returns {string|undefined} JSON-ified string representing `obj`. - */ -function toJson(obj, pretty) { - if (typeof obj === 'undefined') return undefined; - if (!isNumber(pretty)) { - pretty = pretty ? 2 : null; - } - return JSON.stringify(obj, toJsonReplacer, pretty); -} - - -/** - * @ngdoc function - * @name angular.fromJson - * @module ng - * @kind function - * - * @description - * Deserializes a JSON string. - * - * @param {string} json JSON string to deserialize. - * @returns {Object|Array|string|number} Deserialized JSON string. - */ -function fromJson(json) { - return isString(json) - ? JSON.parse(json) - : json; -} - - -/** - * @returns {string} Returns the string representation of the element. - */ -function startingTag(element) { - element = jqLite(element).clone(); - try { - // turns out IE does not let you set .html() on elements which - // are not allowed to have children. So we just ignore it. - element.empty(); - } catch (e) {} - var elemHtml = jqLite('<div>').append(element).html(); - try { - return element[0].nodeType === NODE_TYPE_TEXT ? lowercase(elemHtml) : - elemHtml. - match(/^(<[^>]+>)/)[1]. - replace(/^<([\w\-]+)/, function(match, nodeName) { return '<' + lowercase(nodeName); }); - } catch (e) { - return lowercase(elemHtml); - } - -} - - -///////////////////////////////////////////////// - -/** - * Tries to decode the URI component without throwing an exception. - * - * @private - * @param str value potential URI component to check. - * @returns {boolean} True if `value` can be decoded - * with the decodeURIComponent function. - */ -function tryDecodeURIComponent(value) { - try { - return decodeURIComponent(value); - } catch (e) { - // Ignore any invalid uri component - } -} - - -/** - * Parses an escaped url query string into key-value pairs. - * @returns {Object.<string,boolean|Array>} - */ -function parseKeyValue(/**string*/keyValue) { - var obj = {}, key_value, key; - forEach((keyValue || "").split('&'), function(keyValue) { - if (keyValue) { - key_value = keyValue.replace(/\+/g,'%20').split('='); - key = tryDecodeURIComponent(key_value[0]); - if (isDefined(key)) { - var val = isDefined(key_value[1]) ? tryDecodeURIComponent(key_value[1]) : true; - if (!hasOwnProperty.call(obj, key)) { - obj[key] = val; - } else if (isArray(obj[key])) { - obj[key].push(val); - } else { - obj[key] = [obj[key],val]; - } - } - } - }); - return obj; -} - -function toKeyValue(obj) { - var parts = []; - forEach(obj, function(value, key) { - if (isArray(value)) { - forEach(value, function(arrayValue) { - parts.push(encodeUriQuery(key, true) + - (arrayValue === true ? '' : '=' + encodeUriQuery(arrayValue, true))); - }); - } else { - parts.push(encodeUriQuery(key, true) + - (value === true ? '' : '=' + encodeUriQuery(value, true))); - } - }); - return parts.length ? parts.join('&') : ''; -} - - -/** - * We need our custom method because encodeURIComponent is too aggressive and doesn't follow - * http://www.ietf.org/rfc/rfc3986.txt with regards to the character set (pchar) allowed in path - * segments: - * segment = *pchar - * pchar = unreserved / pct-encoded / sub-delims / ":" / "@" - * pct-encoded = "%" HEXDIG HEXDIG - * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" - * sub-delims = "!" / "$" / "&" / "'" / "(" / ")" - * / "*" / "+" / "," / ";" / "=" - */ -function encodeUriSegment(val) { - return encodeUriQuery(val, true). - replace(/%26/gi, '&'). - replace(/%3D/gi, '='). - replace(/%2B/gi, '+'); -} - - -/** - * This method is intended for encoding *key* or *value* parts of query component. We need a custom - * method because encodeURIComponent is too aggressive and encodes stuff that doesn't have to be - * encoded per http://tools.ietf.org/html/rfc3986: - * query = *( pchar / "/" / "?" ) - * pchar = unreserved / pct-encoded / sub-delims / ":" / "@" - * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" - * pct-encoded = "%" HEXDIG HEXDIG - * sub-delims = "!" / "$" / "&" / "'" / "(" / ")" - * / "*" / "+" / "," / ";" / "=" - */ -function encodeUriQuery(val, pctEncodeSpaces) { - return encodeURIComponent(val). - replace(/%40/gi, '@'). - replace(/%3A/gi, ':'). - replace(/%24/g, '$'). - replace(/%2C/gi, ','). - replace(/%3B/gi, ';'). - replace(/%20/g, (pctEncodeSpaces ? '%20' : '+')); -} - -var ngAttrPrefixes = ['ng-', 'data-ng-', 'ng:', 'x-ng-']; - -function getNgAttribute(element, ngAttr) { - var attr, i, ii = ngAttrPrefixes.length; - element = jqLite(element); - for (i = 0; i < ii; ++i) { - attr = ngAttrPrefixes[i] + ngAttr; - if (isString(attr = element.attr(attr))) { - return attr; - } - } - return null; -} - -/** - * @ngdoc directive - * @name ngApp - * @module ng - * - * @element ANY - * @param {angular.Module} ngApp an optional application - * {@link angular.module module} name to load. - * @param {boolean=} ngStrictDi if this attribute is present on the app element, the injector will be - * created in "strict-di" mode. This means that the application will fail to invoke functions which - * do not use explicit function annotation (and are thus unsuitable for minification), as described - * in {@link guide/di the Dependency Injection guide}, and useful debugging info will assist in - * tracking down the root of these bugs. - * - * @description - * - * Use this directive to **auto-bootstrap** an AngularJS application. The `ngApp` directive - * designates the **root element** of the application and is typically placed near the root element - * of the page - e.g. on the `<body>` or `<html>` tags. - * - * Only one AngularJS application can be auto-bootstrapped per HTML document. The first `ngApp` - * found in the document will be used to define the root element to auto-bootstrap as an - * application. To run multiple applications in an HTML document you must manually bootstrap them using - * {@link angular.bootstrap} instead. AngularJS applications cannot be nested within each other. - * - * You can specify an **AngularJS module** to be used as the root module for the application. This - * module will be loaded into the {@link auto.$injector} when the application is bootstrapped. It - * should contain the application code needed or have dependencies on other modules that will - * contain the code. See {@link angular.module} for more information. - * - * In the example below if the `ngApp` directive were not placed on the `html` element then the - * document would not be compiled, the `AppController` would not be instantiated and the `{{ a+b }}` - * would not be resolved to `3`. - * - * `ngApp` is the easiest, and most common way to bootstrap an application. - * - <example module="ngAppDemo"> - <file name="index.html"> - <div ng-controller="ngAppDemoController"> - I can add: {{a}} + {{b}} = {{ a+b }} - </div> - </file> - <file name="script.js"> - angular.module('ngAppDemo', []).controller('ngAppDemoController', function($scope) { - $scope.a = 1; - $scope.b = 2; - }); - </file> - </example> - * - * Using `ngStrictDi`, you would see something like this: - * - <example ng-app-included="true"> - <file name="index.html"> - <div ng-app="ngAppStrictDemo" ng-strict-di> - <div ng-controller="GoodController1"> - I can add: {{a}} + {{b}} = {{ a+b }} - - <p>This renders because the controller does not fail to - instantiate, by using explicit annotation style (see - script.js for details) - </p> - </div> - - <div ng-controller="GoodController2"> - Name: <input ng-model="name"><br /> - Hello, {{name}}! - - <p>This renders because the controller does not fail to - instantiate, by using explicit annotation style - (see script.js for details) - </p> - </div> - - <div ng-controller="BadController"> - I can add: {{a}} + {{b}} = {{ a+b }} - - <p>The controller could not be instantiated, due to relying - on automatic function annotations (which are disabled in - strict mode). As such, the content of this section is not - interpolated, and there should be an error in your web console. - </p> - </div> - </div> - </file> - <file name="script.js"> - angular.module('ngAppStrictDemo', []) - // BadController will fail to instantiate, due to relying on automatic function annotation, - // rather than an explicit annotation - .controller('BadController', function($scope) { - $scope.a = 1; - $scope.b = 2; - }) - // Unlike BadController, GoodController1 and GoodController2 will not fail to be instantiated, - // due to using explicit annotations using the array style and $inject property, respectively. - .controller('GoodController1', ['$scope', function($scope) { - $scope.a = 1; - $scope.b = 2; - }]) - .controller('GoodController2', GoodController2); - function GoodController2($scope) { - $scope.name = "World"; - } - GoodController2.$inject = ['$scope']; - </file> - <file name="style.css"> - div[ng-controller] { - margin-bottom: 1em; - -webkit-border-radius: 4px; - border-radius: 4px; - border: 1px solid; - padding: .5em; - } - div[ng-controller^=Good] { - border-color: #d6e9c6; - background-color: #dff0d8; - color: #3c763d; - } - div[ng-controller^=Bad] { - border-color: #ebccd1; - background-color: #f2dede; - color: #a94442; - margin-bottom: 0; - } - </file> - </example> - */ -function angularInit(element, bootstrap) { - var appElement, - module, - config = {}; - - // The element `element` has priority over any other element - forEach(ngAttrPrefixes, function(prefix) { - var name = prefix + 'app'; - - if (!appElement && element.hasAttribute && element.hasAttribute(name)) { - appElement = element; - module = element.getAttribute(name); - } - }); - forEach(ngAttrPrefixes, function(prefix) { - var name = prefix + 'app'; - var candidate; - - if (!appElement && (candidate = element.querySelector('[' + name.replace(':', '\\:') + ']'))) { - appElement = candidate; - module = candidate.getAttribute(name); - } - }); - if (appElement) { - config.strictDi = getNgAttribute(appElement, "strict-di") !== null; - bootstrap(appElement, module ? [module] : [], config); - } -} - -/** - * @ngdoc function - * @name angular.bootstrap - * @module ng - * @description - * Use this function to manually start up angular application. - * - * See: {@link guide/bootstrap Bootstrap} - * - * Note that Protractor based end-to-end tests cannot use this function to bootstrap manually. - * They must use {@link ng.directive:ngApp ngApp}. - * - * Angular will detect if it has been loaded into the browser more than once and only allow the - * first loaded script to be bootstrapped and will report a warning to the browser console for - * each of the subsequent scripts. This prevents strange results in applications, where otherwise - * multiple instances of Angular try to work on the DOM. - * - * ```html - * <!doctype html> - * <html> - * <body> - * <div ng-controller="WelcomeController"> - * {{greeting}} - * </div> - * - * <script src="angular.js"></script> - * <script> - * var app = angular.module('demo', []) - * .controller('WelcomeController', function($scope) { - * $scope.greeting = 'Welcome!'; - * }); - * angular.bootstrap(document, ['demo']); - * </script> - * </body> - * </html> - * ``` - * - * @param {DOMElement} element DOM element which is the root of angular application. - * @param {Array<String|Function|Array>=} modules an array of modules to load into the application. - * Each item in the array should be the name of a predefined module or a (DI annotated) - * function that will be invoked by the injector as a `config` block. - * See: {@link angular.module modules} - * @param {Object=} config an object for defining configuration options for the application. The - * following keys are supported: - * - * * `strictDi` - disable automatic function annotation for the application. This is meant to - * assist in finding bugs which break minified code. Defaults to `false`. - * - * @returns {auto.$injector} Returns the newly created injector for this app. - */ -function bootstrap(element, modules, config) { - if (!isObject(config)) config = {}; - var defaultConfig = { - strictDi: false - }; - config = extend(defaultConfig, config); - var doBootstrap = function() { - element = jqLite(element); - - if (element.injector()) { - var tag = (element[0] === document) ? 'document' : startingTag(element); - //Encode angle brackets to prevent input from being sanitized to empty string #8683 - throw ngMinErr( - 'btstrpd', - "App Already Bootstrapped with this Element '{0}'", - tag.replace(/</,'<').replace(/>/,'>')); - } - - modules = modules || []; - modules.unshift(['$provide', function($provide) { - $provide.value('$rootElement', element); - }]); - - if (config.debugInfoEnabled) { - // Pushing so that this overrides `debugInfoEnabled` setting defined in user's `modules`. - modules.push(['$compileProvider', function($compileProvider) { - $compileProvider.debugInfoEnabled(true); - }]); - } - - modules.unshift('ng'); - var injector = createInjector(modules, config.strictDi); - injector.invoke(['$rootScope', '$rootElement', '$compile', '$injector', - function bootstrapApply(scope, element, compile, injector) { - scope.$apply(function() { - element.data('$injector', injector); - compile(element)(scope); - }); - }] - ); - return injector; - }; - - var NG_ENABLE_DEBUG_INFO = /^NG_ENABLE_DEBUG_INFO!/; - var NG_DEFER_BOOTSTRAP = /^NG_DEFER_BOOTSTRAP!/; - - if (window && NG_ENABLE_DEBUG_INFO.test(window.name)) { - config.debugInfoEnabled = true; - window.name = window.name.replace(NG_ENABLE_DEBUG_INFO, ''); - } - - if (window && !NG_DEFER_BOOTSTRAP.test(window.name)) { - return doBootstrap(); - } - - window.name = window.name.replace(NG_DEFER_BOOTSTRAP, ''); - angular.resumeBootstrap = function(extraModules) { - forEach(extraModules, function(module) { - modules.push(module); - }); - doBootstrap(); - }; -} - -/** - * @ngdoc function - * @name angular.reloadWithDebugInfo - * @module ng - * @description - * Use this function to reload the current application with debug information turned on. - * This takes precedence over a call to `$compileProvider.debugInfoEnabled(false)`. - * - * See {@link ng.$compileProvider#debugInfoEnabled} for more. - */ -function reloadWithDebugInfo() { - window.name = 'NG_ENABLE_DEBUG_INFO!' + window.name; - window.location.reload(); -} - -/** - * @name angular.getTestability - * @module ng - * @description - * Get the testability service for the instance of Angular on the given - * element. - * @param {DOMElement} element DOM element which is the root of angular application. - */ -function getTestability(rootElement) { - var injector = angular.element(rootElement).injector(); - if (!injector) { - throw ngMinErr('test', - 'no injector found for element argument to getTestability'); - } - return injector.get('$$testability'); -} - -var SNAKE_CASE_REGEXP = /[A-Z]/g; -function snake_case(name, separator) { - separator = separator || '_'; - return name.replace(SNAKE_CASE_REGEXP, function(letter, pos) { - return (pos ? separator : '') + letter.toLowerCase(); - }); -} - -var bindJQueryFired = false; -var skipDestroyOnNextJQueryCleanData; -function bindJQuery() { - var originalCleanData; - - if (bindJQueryFired) { - return; - } - - // bind to jQuery if present; - jQuery = window.jQuery; - // Use jQuery if it exists with proper functionality, otherwise default to us. - // Angular 1.2+ requires jQuery 1.7+ for on()/off() support. - // Angular 1.3+ technically requires at least jQuery 2.1+ but it may work with older - // versions. It will not work for sure with jQuery <1.7, though. - if (jQuery && jQuery.fn.on) { - jqLite = jQuery; - extend(jQuery.fn, { - scope: JQLitePrototype.scope, - isolateScope: JQLitePrototype.isolateScope, - controller: JQLitePrototype.controller, - injector: JQLitePrototype.injector, - inheritedData: JQLitePrototype.inheritedData - }); - - // All nodes removed from the DOM via various jQuery APIs like .remove() - // are passed through jQuery.cleanData. Monkey-patch this method to fire - // the $destroy event on all removed nodes. - originalCleanData = jQuery.cleanData; - jQuery.cleanData = function(elems) { - var events; - if (!skipDestroyOnNextJQueryCleanData) { - for (var i = 0, elem; (elem = elems[i]) != null; i++) { - events = jQuery._data(elem, "events"); - if (events && events.$destroy) { - jQuery(elem).triggerHandler('$destroy'); - } - } - } else { - skipDestroyOnNextJQueryCleanData = false; - } - originalCleanData(elems); - }; - } else { - jqLite = JQLite; - } - - angular.element = jqLite; - - // Prevent double-proxying. - bindJQueryFired = true; -} - -/** - * throw error if the argument is falsy. - */ -function assertArg(arg, name, reason) { - if (!arg) { - throw ngMinErr('areq', "Argument '{0}' is {1}", (name || '?'), (reason || "required")); - } - return arg; -} - -function assertArgFn(arg, name, acceptArrayAnnotation) { - if (acceptArrayAnnotation && isArray(arg)) { - arg = arg[arg.length - 1]; - } - - assertArg(isFunction(arg), name, 'not a function, got ' + - (arg && typeof arg === 'object' ? arg.constructor.name || 'Object' : typeof arg)); - return arg; -} - -/** - * throw error if the name given is hasOwnProperty - * @param {String} name the name to test - * @param {String} context the context in which the name is used, such as module or directive - */ -function assertNotHasOwnProperty(name, context) { - if (name === 'hasOwnProperty') { - throw ngMinErr('badname', "hasOwnProperty is not a valid {0} name", context); - } -} - -/** - * Return the value accessible from the object by path. Any undefined traversals are ignored - * @param {Object} obj starting object - * @param {String} path path to traverse - * @param {boolean} [bindFnToScope=true] - * @returns {Object} value as accessible by path - */ -//TODO(misko): this function needs to be removed -function getter(obj, path, bindFnToScope) { - if (!path) return obj; - var keys = path.split('.'); - var key; - var lastInstance = obj; - var len = keys.length; - - for (var i = 0; i < len; i++) { - key = keys[i]; - if (obj) { - obj = (lastInstance = obj)[key]; - } - } - if (!bindFnToScope && isFunction(obj)) { - return bind(lastInstance, obj); - } - return obj; -} - -/** - * Return the DOM siblings between the first and last node in the given array. - * @param {Array} array like object - * @returns {jqLite} jqLite collection containing the nodes - */ -function getBlockNodes(nodes) { - // TODO(perf): just check if all items in `nodes` are siblings and if they are return the original - // collection, otherwise update the original collection. - var node = nodes[0]; - var endNode = nodes[nodes.length - 1]; - var blockNodes = [node]; - - do { - node = node.nextSibling; - if (!node) break; - blockNodes.push(node); - } while (node !== endNode); - - return jqLite(blockNodes); -} - - -/** - * Creates a new object without a prototype. This object is useful for lookup without having to - * guard against prototypically inherited properties via hasOwnProperty. - * - * Related micro-benchmarks: - * - http://jsperf.com/object-create2 - * - http://jsperf.com/proto-map-lookup/2 - * - http://jsperf.com/for-in-vs-object-keys2 - * - * @returns {Object} - */ -function createMap() { - return Object.create(null); -} - -var NODE_TYPE_ELEMENT = 1; -var NODE_TYPE_TEXT = 3; -var NODE_TYPE_COMMENT = 8; -var NODE_TYPE_DOCUMENT = 9; -var NODE_TYPE_DOCUMENT_FRAGMENT = 11; - -/** - * @ngdoc type - * @name angular.Module - * @module ng - * @description - * - * Interface for configuring angular {@link angular.module modules}. - */ - -function setupModuleLoader(window) { - - var $injectorMinErr = minErr('$injector'); - var ngMinErr = minErr('ng'); - - function ensure(obj, name, factory) { - return obj[name] || (obj[name] = factory()); - } - - var angular = ensure(window, 'angular', Object); - - // We need to expose `angular.$$minErr` to modules such as `ngResource` that reference it during bootstrap - angular.$$minErr = angular.$$minErr || minErr; - - return ensure(angular, 'module', function() { - /** @type {Object.<string, angular.Module>} */ - var modules = {}; - - /** - * @ngdoc function - * @name angular.module - * @module ng - * @description - * - * The `angular.module` is a global place for creating, registering and retrieving Angular - * modules. - * All modules (angular core or 3rd party) that should be available to an application must be - * registered using this mechanism. - * - * When passed two or more arguments, a new module is created. If passed only one argument, an - * existing module (the name passed as the first argument to `module`) is retrieved. - * - * - * # Module - * - * A module is a collection of services, directives, controllers, filters, and configuration information. - * `angular.module` is used to configure the {@link auto.$injector $injector}. - * - * ```js - * // Create a new module - * var myModule = angular.module('myModule', []); - * - * // register a new service - * myModule.value('appName', 'MyCoolApp'); - * - * // configure existing services inside initialization blocks. - * myModule.config(['$locationProvider', function($locationProvider) { - * // Configure existing providers - * $locationProvider.hashPrefix('!'); - * }]); - * ``` - * - * Then you can create an injector and load your modules like this: - * - * ```js - * var injector = angular.injector(['ng', 'myModule']) - * ``` - * - * However it's more likely that you'll just use - * {@link ng.directive:ngApp ngApp} or - * {@link angular.bootstrap} to simplify this process for you. - * - * @param {!string} name The name of the module to create or retrieve. - * @param {!Array.<string>=} requires If specified then new module is being created. If - * unspecified then the module is being retrieved for further configuration. - * @param {Function=} configFn Optional configuration function for the module. Same as - * {@link angular.Module#config Module#config()}. - * @returns {module} new module with the {@link angular.Module} api. - */ - return function module(name, requires, configFn) { - var assertNotHasOwnProperty = function(name, context) { - if (name === 'hasOwnProperty') { - throw ngMinErr('badname', 'hasOwnProperty is not a valid {0} name', context); - } - }; - - assertNotHasOwnProperty(name, 'module'); - if (requires && modules.hasOwnProperty(name)) { - modules[name] = null; - } - return ensure(modules, name, function() { - if (!requires) { - throw $injectorMinErr('nomod', "Module '{0}' is not available! You either misspelled " + - "the module name or forgot to load it. If registering a module ensure that you " + - "specify the dependencies as the second argument.", name); - } - - /** @type {!Array.<Array.<*>>} */ - var invokeQueue = []; - - /** @type {!Array.<Function>} */ - var configBlocks = []; - - /** @type {!Array.<Function>} */ - var runBlocks = []; - - var config = invokeLater('$injector', 'invoke', 'push', configBlocks); - - /** @type {angular.Module} */ - var moduleInstance = { - // Private state - _invokeQueue: invokeQueue, - _configBlocks: configBlocks, - _runBlocks: runBlocks, - - /** - * @ngdoc property - * @name angular.Module#requires - * @module ng - * - * @description - * Holds the list of modules which the injector will load before the current module is - * loaded. - */ - requires: requires, - - /** - * @ngdoc property - * @name angular.Module#name - * @module ng - * - * @description - * Name of the module. - */ - name: name, - - - /** - * @ngdoc method - * @name angular.Module#provider - * @module ng - * @param {string} name service name - * @param {Function} providerType Construction function for creating new instance of the - * service. - * @description - * See {@link auto.$provide#provider $provide.provider()}. - */ - provider: invokeLater('$provide', 'provider'), - - /** - * @ngdoc method - * @name angular.Module#factory - * @module ng - * @param {string} name service name - * @param {Function} providerFunction Function for creating new instance of the service. - * @description - * See {@link auto.$provide#factory $provide.factory()}. - */ - factory: invokeLater('$provide', 'factory'), - - /** - * @ngdoc method - * @name angular.Module#service - * @module ng - * @param {string} name service name - * @param {Function} constructor A constructor function that will be instantiated. - * @description - * See {@link auto.$provide#service $provide.service()}. - */ - service: invokeLater('$provide', 'service'), - - /** - * @ngdoc method - * @name angular.Module#value - * @module ng - * @param {string} name service name - * @param {*} object Service instance object. - * @description - * See {@link auto.$provide#value $provide.value()}. - */ - value: invokeLater('$provide', 'value'), - - /** - * @ngdoc method - * @name angular.Module#constant - * @module ng - * @param {string} name constant name - * @param {*} object Constant value. - * @description - * Because the constant are fixed, they get applied before other provide methods. - * See {@link auto.$provide#constant $provide.constant()}. - */ - constant: invokeLater('$provide', 'constant', 'unshift'), - - /** - * @ngdoc method - * @name angular.Module#animation - * @module ng - * @param {string} name animation name - * @param {Function} animationFactory Factory function for creating new instance of an - * animation. - * @description - * - * **NOTE**: animations take effect only if the **ngAnimate** module is loaded. - * - * - * Defines an animation hook that can be later used with - * {@link ngAnimate.$animate $animate} service and directives that use this service. - * - * ```js - * module.animation('.animation-name', function($inject1, $inject2) { - * return { - * eventName : function(element, done) { - * //code to run the animation - * //once complete, then run done() - * return function cancellationFunction(element) { - * //code to cancel the animation - * } - * } - * } - * }) - * ``` - * - * See {@link ng.$animateProvider#register $animateProvider.register()} and - * {@link ngAnimate ngAnimate module} for more information. - */ - animation: invokeLater('$animateProvider', 'register'), - - /** - * @ngdoc method - * @name angular.Module#filter - * @module ng - * @param {string} name Filter name. - * @param {Function} filterFactory Factory function for creating new instance of filter. - * @description - * See {@link ng.$filterProvider#register $filterProvider.register()}. - */ - filter: invokeLater('$filterProvider', 'register'), - - /** - * @ngdoc method - * @name angular.Module#controller - * @module ng - * @param {string|Object} name Controller name, or an object map of controllers where the - * keys are the names and the values are the constructors. - * @param {Function} constructor Controller constructor function. - * @description - * See {@link ng.$controllerProvider#register $controllerProvider.register()}. - */ - controller: invokeLater('$controllerProvider', 'register'), - - /** - * @ngdoc method - * @name angular.Module#directive - * @module ng - * @param {string|Object} name Directive name, or an object map of directives where the - * keys are the names and the values are the factories. - * @param {Function} directiveFactory Factory function for creating new instance of - * directives. - * @description - * See {@link ng.$compileProvider#directive $compileProvider.directive()}. - */ - directive: invokeLater('$compileProvider', 'directive'), - - /** - * @ngdoc method - * @name angular.Module#config - * @module ng - * @param {Function} configFn Execute this function on module load. Useful for service - * configuration. - * @description - * Use this method to register work which needs to be performed on module loading. - * For more about how to configure services, see - * {@link providers#provider-recipe Provider Recipe}. - */ - config: config, - - /** - * @ngdoc method - * @name angular.Module#run - * @module ng - * @param {Function} initializationFn Execute this function after injector creation. - * Useful for application initialization. - * @description - * Use this method to register work which should be performed when the injector is done - * loading all modules. - */ - run: function(block) { - runBlocks.push(block); - return this; - } - }; - - if (configFn) { - config(configFn); - } - - return moduleInstance; - - /** - * @param {string} provider - * @param {string} method - * @param {String=} insertMethod - * @returns {angular.Module} - */ - function invokeLater(provider, method, insertMethod, queue) { - if (!queue) queue = invokeQueue; - return function() { - queue[insertMethod || 'push']([provider, method, arguments]); - return moduleInstance; - }; - } - }); - }; - }); - -} - -/* global: toDebugString: true */ - -function serializeObject(obj) { - var seen = []; - - return JSON.stringify(obj, function(key, val) { - val = toJsonReplacer(key, val); - if (isObject(val)) { - - if (seen.indexOf(val) >= 0) return '<<already seen>>'; - - seen.push(val); - } - return val; - }); -} - -function toDebugString(obj) { - if (typeof obj === 'function') { - return obj.toString().replace(/ \{[\s\S]*$/, ''); - } else if (typeof obj === 'undefined') { - return 'undefined'; - } else if (typeof obj !== 'string') { - return serializeObject(obj); - } - return obj; -} - -/* global angularModule: true, - version: true, - - $LocaleProvider, - $CompileProvider, - - htmlAnchorDirective, - inputDirective, - inputDirective, - formDirective, - scriptDirective, - selectDirective, - styleDirective, - optionDirective, - ngBindDirective, - ngBindHtmlDirective, - ngBindTemplateDirective, - ngClassDirective, - ngClassEvenDirective, - ngClassOddDirective, - ngCspDirective, - ngCloakDirective, - ngControllerDirective, - ngFormDirective, - ngHideDirective, - ngIfDirective, - ngIncludeDirective, - ngIncludeFillContentDirective, - ngInitDirective, - ngNonBindableDirective, - ngPluralizeDirective, - ngRepeatDirective, - ngShowDirective, - ngStyleDirective, - ngSwitchDirective, - ngSwitchWhenDirective, - ngSwitchDefaultDirective, - ngOptionsDirective, - ngTranscludeDirective, - ngModelDirective, - ngListDirective, - ngChangeDirective, - patternDirective, - patternDirective, - requiredDirective, - requiredDirective, - minlengthDirective, - minlengthDirective, - maxlengthDirective, - maxlengthDirective, - ngValueDirective, - ngModelOptionsDirective, - ngAttributeAliasDirectives, - ngEventDirectives, - - $AnchorScrollProvider, - $AnimateProvider, - $BrowserProvider, - $CacheFactoryProvider, - $ControllerProvider, - $DocumentProvider, - $ExceptionHandlerProvider, - $FilterProvider, - $InterpolateProvider, - $IntervalProvider, - $HttpProvider, - $HttpBackendProvider, - $LocationProvider, - $LogProvider, - $ParseProvider, - $RootScopeProvider, - $QProvider, - $$QProvider, - $$SanitizeUriProvider, - $SceProvider, - $SceDelegateProvider, - $SnifferProvider, - $TemplateCacheProvider, - $TemplateRequestProvider, - $$TestabilityProvider, - $TimeoutProvider, - $$RAFProvider, - $$AsyncCallbackProvider, - $WindowProvider, - $$jqLiteProvider -*/ - - -/** - * @ngdoc object - * @name angular.version - * @module ng - * @description - * An object that contains information about the current AngularJS version. This object has the - * following properties: - * - * - `full` – `{string}` – Full version string, such as "0.9.18". - * - `major` – `{number}` – Major version number, such as "0". - * - `minor` – `{number}` – Minor version number, such as "9". - * - `dot` – `{number}` – Dot version number, such as "18". - * - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat". - */ -var version = { - full: '1.3.11', // all of these placeholder strings will be replaced by grunt's - major: 1, // package task - minor: 3, - dot: 11, - codeName: 'spiffy-manatee' -}; - - -function publishExternalAPI(angular) { - extend(angular, { - 'bootstrap': bootstrap, - 'copy': copy, - 'extend': extend, - 'equals': equals, - 'element': jqLite, - 'forEach': forEach, - 'injector': createInjector, - 'noop': noop, - 'bind': bind, - 'toJson': toJson, - 'fromJson': fromJson, - 'identity': identity, - 'isUndefined': isUndefined, - 'isDefined': isDefined, - 'isString': isString, - 'isFunction': isFunction, - 'isObject': isObject, - 'isNumber': isNumber, - 'isElement': isElement, - 'isArray': isArray, - 'version': version, - 'isDate': isDate, - 'lowercase': lowercase, - 'uppercase': uppercase, - 'callbacks': {counter: 0}, - 'getTestability': getTestability, - '$$minErr': minErr, - '$$csp': csp, - 'reloadWithDebugInfo': reloadWithDebugInfo - }); - - angularModule = setupModuleLoader(window); - try { - angularModule('ngLocale'); - } catch (e) { - angularModule('ngLocale', []).provider('$locale', $LocaleProvider); - } - - angularModule('ng', ['ngLocale'], ['$provide', - function ngModule($provide) { - // $$sanitizeUriProvider needs to be before $compileProvider as it is used by it. - $provide.provider({ - $$sanitizeUri: $$SanitizeUriProvider - }); - $provide.provider('$compile', $CompileProvider). - directive({ - a: htmlAnchorDirective, - input: inputDirective, - textarea: inputDirective, - form: formDirective, - script: scriptDirective, - select: selectDirective, - style: styleDirective, - option: optionDirective, - ngBind: ngBindDirective, - ngBindHtml: ngBindHtmlDirective, - ngBindTemplate: ngBindTemplateDirective, - ngClass: ngClassDirective, - ngClassEven: ngClassEvenDirective, - ngClassOdd: ngClassOddDirective, - ngCloak: ngCloakDirective, - ngController: ngControllerDirective, - ngForm: ngFormDirective, - ngHide: ngHideDirective, - ngIf: ngIfDirective, - ngInclude: ngIncludeDirective, - ngInit: ngInitDirective, - ngNonBindable: ngNonBindableDirective, - ngPluralize: ngPluralizeDirective, - ngRepeat: ngRepeatDirective, - ngShow: ngShowDirective, - ngStyle: ngStyleDirective, - ngSwitch: ngSwitchDirective, - ngSwitchWhen: ngSwitchWhenDirective, - ngSwitchDefault: ngSwitchDefaultDirective, - ngOptions: ngOptionsDirective, - ngTransclude: ngTranscludeDirective, - ngModel: ngModelDirective, - ngList: ngListDirective, - ngChange: ngChangeDirective, - pattern: patternDirective, - ngPattern: patternDirective, - required: requiredDirective, - ngRequired: requiredDirective, - minlength: minlengthDirective, - ngMinlength: minlengthDirective, - maxlength: maxlengthDirective, - ngMaxlength: maxlengthDirective, - ngValue: ngValueDirective, - ngModelOptions: ngModelOptionsDirective - }). - directive({ - ngInclude: ngIncludeFillContentDirective - }). - directive(ngAttributeAliasDirectives). - directive(ngEventDirectives); - $provide.provider({ - $anchorScroll: $AnchorScrollProvider, - $animate: $AnimateProvider, - $browser: $BrowserProvider, - $cacheFactory: $CacheFactoryProvider, - $controller: $ControllerProvider, - $document: $DocumentProvider, - $exceptionHandler: $ExceptionHandlerProvider, - $filter: $FilterProvider, - $interpolate: $InterpolateProvider, - $interval: $IntervalProvider, - $http: $HttpProvider, - $httpBackend: $HttpBackendProvider, - $location: $LocationProvider, - $log: $LogProvider, - $parse: $ParseProvider, - $rootScope: $RootScopeProvider, - $q: $QProvider, - $$q: $$QProvider, - $sce: $SceProvider, - $sceDelegate: $SceDelegateProvider, - $sniffer: $SnifferProvider, - $templateCache: $TemplateCacheProvider, - $templateRequest: $TemplateRequestProvider, - $$testability: $$TestabilityProvider, - $timeout: $TimeoutProvider, - $window: $WindowProvider, - $$rAF: $$RAFProvider, - $$asyncCallback: $$AsyncCallbackProvider, - $$jqLite: $$jqLiteProvider - }); - } - ]); -} - -/* global JQLitePrototype: true, - addEventListenerFn: true, - removeEventListenerFn: true, - BOOLEAN_ATTR: true, - ALIASED_ATTR: true, -*/ - -////////////////////////////////// -//JQLite -////////////////////////////////// - -/** - * @ngdoc function - * @name angular.element - * @module ng - * @kind function - * - * @description - * Wraps a raw DOM element or HTML string as a [jQuery](http://jquery.com) element. - * - * If jQuery is available, `angular.element` is an alias for the - * [jQuery](http://api.jquery.com/jQuery/) function. If jQuery is not available, `angular.element` - * delegates to Angular's built-in subset of jQuery, called "jQuery lite" or "jqLite." - * - * <div class="alert alert-success">jqLite is a tiny, API-compatible subset of jQuery that allows - * Angular to manipulate the DOM in a cross-browser compatible way. **jqLite** implements only the most - * commonly needed functionality with the goal of having a very small footprint.</div> - * - * To use jQuery, simply load it before `DOMContentLoaded` event fired. - * - * <div class="alert">**Note:** all element references in Angular are always wrapped with jQuery or - * jqLite; they are never raw DOM references.</div> - * - * ## Angular's jqLite - * jqLite provides only the following jQuery methods: - * - * - [`addClass()`](http://api.jquery.com/addClass/) - * - [`after()`](http://api.jquery.com/after/) - * - [`append()`](http://api.jquery.com/append/) - * - [`attr()`](http://api.jquery.com/attr/) - Does not support functions as parameters - * - [`bind()`](http://api.jquery.com/bind/) - Does not support namespaces, selectors or eventData - * - [`children()`](http://api.jquery.com/children/) - Does not support selectors - * - [`clone()`](http://api.jquery.com/clone/) - * - [`contents()`](http://api.jquery.com/contents/) - * - [`css()`](http://api.jquery.com/css/) - Only retrieves inline-styles, does not call `getComputedStyle()` - * - [`data()`](http://api.jquery.com/data/) - * - [`detach()`](http://api.jquery.com/detach/) - * - [`empty()`](http://api.jquery.com/empty/) - * - [`eq()`](http://api.jquery.com/eq/) - * - [`find()`](http://api.jquery.com/find/) - Limited to lookups by tag name - * - [`hasClass()`](http://api.jquery.com/hasClass/) - * - [`html()`](http://api.jquery.com/html/) - * - [`next()`](http://api.jquery.com/next/) - Does not support selectors - * - [`on()`](http://api.jquery.com/on/) - Does not support namespaces, selectors or eventData - * - [`off()`](http://api.jquery.com/off/) - Does not support namespaces or selectors - * - [`one()`](http://api.jquery.com/one/) - Does not support namespaces or selectors - * - [`parent()`](http://api.jquery.com/parent/) - Does not support selectors - * - [`prepend()`](http://api.jquery.com/prepend/) - * - [`prop()`](http://api.jquery.com/prop/) - * - [`ready()`](http://api.jquery.com/ready/) - * - [`remove()`](http://api.jquery.com/remove/) - * - [`removeAttr()`](http://api.jquery.com/removeAttr/) - * - [`removeClass()`](http://api.jquery.com/removeClass/) - * - [`removeData()`](http://api.jquery.com/removeData/) - * - [`replaceWith()`](http://api.jquery.com/replaceWith/) - * - [`text()`](http://api.jquery.com/text/) - * - [`toggleClass()`](http://api.jquery.com/toggleClass/) - * - [`triggerHandler()`](http://api.jquery.com/triggerHandler/) - Passes a dummy event object to handlers. - * - [`unbind()`](http://api.jquery.com/unbind/) - Does not support namespaces - * - [`val()`](http://api.jquery.com/val/) - * - [`wrap()`](http://api.jquery.com/wrap/) - * - * ## jQuery/jqLite Extras - * Angular also provides the following additional methods and events to both jQuery and jqLite: - * - * ### Events - * - `$destroy` - AngularJS intercepts all jqLite/jQuery's DOM destruction apis and fires this event - * on all DOM nodes being removed. This can be used to clean up any 3rd party bindings to the DOM - * element before it is removed. - * - * ### Methods - * - `controller(name)` - retrieves the controller of the current element or its parent. By default - * retrieves controller associated with the `ngController` directive. If `name` is provided as - * camelCase directive name, then the controller for this directive will be retrieved (e.g. - * `'ngModel'`). - * - `injector()` - retrieves the injector of the current element or its parent. - * - `scope()` - retrieves the {@link ng.$rootScope.Scope scope} of the current - * element or its parent. Requires {@link guide/production#disabling-debug-data Debug Data} to - * be enabled. - * - `isolateScope()` - retrieves an isolate {@link ng.$rootScope.Scope scope} if one is attached directly to the - * current element. This getter should be used only on elements that contain a directive which starts a new isolate - * scope. Calling `scope()` on this element always returns the original non-isolate scope. - * Requires {@link guide/production#disabling-debug-data Debug Data} to be enabled. - * - `inheritedData()` - same as `data()`, but walks up the DOM until a value is found or the top - * parent element is reached. - * - * @param {string|DOMElement} element HTML string or DOMElement to be wrapped into jQuery. - * @returns {Object} jQuery object. - */ - -JQLite.expando = 'ng339'; - -var jqCache = JQLite.cache = {}, - jqId = 1, - addEventListenerFn = function(element, type, fn) { - element.addEventListener(type, fn, false); - }, - removeEventListenerFn = function(element, type, fn) { - element.removeEventListener(type, fn, false); - }; - -/* - * !!! This is an undocumented "private" function !!! - */ -JQLite._data = function(node) { - //jQuery always returns an object on cache miss - return this.cache[node[this.expando]] || {}; -}; - -function jqNextId() { return ++jqId; } - - -var SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g; -var MOZ_HACK_REGEXP = /^moz([A-Z])/; -var MOUSE_EVENT_MAP= { mouseleave: "mouseout", mouseenter: "mouseover"}; -var jqLiteMinErr = minErr('jqLite'); - -/** - * Converts snake_case to camelCase. - * Also there is special case for Moz prefix starting with upper case letter. - * @param name Name to normalize - */ -function camelCase(name) { - return name. - replace(SPECIAL_CHARS_REGEXP, function(_, separator, letter, offset) { - return offset ? letter.toUpperCase() : letter; - }). - replace(MOZ_HACK_REGEXP, 'Moz$1'); -} - -var SINGLE_TAG_REGEXP = /^<(\w+)\s*\/?>(?:<\/\1>|)$/; -var HTML_REGEXP = /<|&#?\w+;/; -var TAG_NAME_REGEXP = /<([\w:]+)/; -var XHTML_TAG_REGEXP = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi; - -var wrapMap = { - 'option': [1, '<select multiple="multiple">', '</select>'], - - 'thead': [1, '<table>', '</table>'], - 'col': [2, '<table><colgroup>', '</colgroup></table>'], - 'tr': [2, '<table><tbody>', '</tbody></table>'], - 'td': [3, '<table><tbody><tr>', '</tr></tbody></table>'], - '_default': [0, "", ""] -}; - -wrapMap.optgroup = wrapMap.option; -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - - -function jqLiteIsTextNode(html) { - return !HTML_REGEXP.test(html); -} - -function jqLiteAcceptsData(node) { - // The window object can accept data but has no nodeType - // Otherwise we are only interested in elements (1) and documents (9) - var nodeType = node.nodeType; - return nodeType === NODE_TYPE_ELEMENT || !nodeType || nodeType === NODE_TYPE_DOCUMENT; -} - -function jqLiteBuildFragment(html, context) { - var tmp, tag, wrap, - fragment = context.createDocumentFragment(), - nodes = [], i; - - if (jqLiteIsTextNode(html)) { - // Convert non-html into a text node - nodes.push(context.createTextNode(html)); - } else { - // Convert html into DOM nodes - tmp = tmp || fragment.appendChild(context.createElement("div")); - tag = (TAG_NAME_REGEXP.exec(html) || ["", ""])[1].toLowerCase(); - wrap = wrapMap[tag] || wrapMap._default; - tmp.innerHTML = wrap[1] + html.replace(XHTML_TAG_REGEXP, "<$1></$2>") + wrap[2]; - - // Descend through wrappers to the right content - i = wrap[0]; - while (i--) { - tmp = tmp.lastChild; - } - - nodes = concat(nodes, tmp.childNodes); - - tmp = fragment.firstChild; - tmp.textContent = ""; - } - - // Remove wrapper from fragment - fragment.textContent = ""; - fragment.innerHTML = ""; // Clear inner HTML - forEach(nodes, function(node) { - fragment.appendChild(node); - }); - - return fragment; -} - -function jqLiteParseHTML(html, context) { - context = context || document; - var parsed; - - if ((parsed = SINGLE_TAG_REGEXP.exec(html))) { - return [context.createElement(parsed[1])]; - } - - if ((parsed = jqLiteBuildFragment(html, context))) { - return parsed.childNodes; - } - - return []; -} - -///////////////////////////////////////////// -function JQLite(element) { - if (element instanceof JQLite) { - return element; - } - - var argIsString; - - if (isString(element)) { - element = trim(element); - argIsString = true; - } - if (!(this instanceof JQLite)) { - if (argIsString && element.charAt(0) != '<') { - throw jqLiteMinErr('nosel', 'Looking up elements via selectors is not supported by jqLite! See: http://docs.angularjs.org/api/angular.element'); - } - return new JQLite(element); - } - - if (argIsString) { - jqLiteAddNodes(this, jqLiteParseHTML(element)); - } else { - jqLiteAddNodes(this, element); - } -} - -function jqLiteClone(element) { - return element.cloneNode(true); -} - -function jqLiteDealoc(element, onlyDescendants) { - if (!onlyDescendants) jqLiteRemoveData(element); - - if (element.querySelectorAll) { - var descendants = element.querySelectorAll('*'); - for (var i = 0, l = descendants.length; i < l; i++) { - jqLiteRemoveData(descendants[i]); - } - } -} - -function jqLiteOff(element, type, fn, unsupported) { - if (isDefined(unsupported)) throw jqLiteMinErr('offargs', 'jqLite#off() does not support the `selector` argument'); - - var expandoStore = jqLiteExpandoStore(element); - var events = expandoStore && expandoStore.events; - var handle = expandoStore && expandoStore.handle; - - if (!handle) return; //no listeners registered - - if (!type) { - for (type in events) { - if (type !== '$destroy') { - removeEventListenerFn(element, type, handle); - } - delete events[type]; - } - } else { - forEach(type.split(' '), function(type) { - if (isDefined(fn)) { - var listenerFns = events[type]; - arrayRemove(listenerFns || [], fn); - if (listenerFns && listenerFns.length > 0) { - return; - } - } - - removeEventListenerFn(element, type, handle); - delete events[type]; - }); - } -} - -function jqLiteRemoveData(element, name) { - var expandoId = element.ng339; - var expandoStore = expandoId && jqCache[expandoId]; - - if (expandoStore) { - if (name) { - delete expandoStore.data[name]; - return; - } - - if (expandoStore.handle) { - if (expandoStore.events.$destroy) { - expandoStore.handle({}, '$destroy'); - } - jqLiteOff(element); - } - delete jqCache[expandoId]; - element.ng339 = undefined; // don't delete DOM expandos. IE and Chrome don't like it - } -} - - -function jqLiteExpandoStore(element, createIfNecessary) { - var expandoId = element.ng339, - expandoStore = expandoId && jqCache[expandoId]; - - if (createIfNecessary && !expandoStore) { - element.ng339 = expandoId = jqNextId(); - expandoStore = jqCache[expandoId] = {events: {}, data: {}, handle: undefined}; - } - - return expandoStore; -} - - -function jqLiteData(element, key, value) { - if (jqLiteAcceptsData(element)) { - - var isSimpleSetter = isDefined(value); - var isSimpleGetter = !isSimpleSetter && key && !isObject(key); - var massGetter = !key; - var expandoStore = jqLiteExpandoStore(element, !isSimpleGetter); - var data = expandoStore && expandoStore.data; - - if (isSimpleSetter) { // data('key', value) - data[key] = value; - } else { - if (massGetter) { // data() - return data; - } else { - if (isSimpleGetter) { // data('key') - // don't force creation of expandoStore if it doesn't exist yet - return data && data[key]; - } else { // mass-setter: data({key1: val1, key2: val2}) - extend(data, key); - } - } - } - } -} - -function jqLiteHasClass(element, selector) { - if (!element.getAttribute) return false; - return ((" " + (element.getAttribute('class') || '') + " ").replace(/[\n\t]/g, " "). - indexOf(" " + selector + " ") > -1); -} - -function jqLiteRemoveClass(element, cssClasses) { - if (cssClasses && element.setAttribute) { - forEach(cssClasses.split(' '), function(cssClass) { - element.setAttribute('class', trim( - (" " + (element.getAttribute('class') || '') + " ") - .replace(/[\n\t]/g, " ") - .replace(" " + trim(cssClass) + " ", " ")) - ); - }); - } -} - -function jqLiteAddClass(element, cssClasses) { - if (cssClasses && element.setAttribute) { - var existingClasses = (' ' + (element.getAttribute('class') || '') + ' ') - .replace(/[\n\t]/g, " "); - - forEach(cssClasses.split(' '), function(cssClass) { - cssClass = trim(cssClass); - if (existingClasses.indexOf(' ' + cssClass + ' ') === -1) { - existingClasses += cssClass + ' '; - } - }); - - element.setAttribute('class', trim(existingClasses)); - } -} - - -function jqLiteAddNodes(root, elements) { - // THIS CODE IS VERY HOT. Don't make changes without benchmarking. - - if (elements) { - - // if a Node (the most common case) - if (elements.nodeType) { - root[root.length++] = elements; - } else { - var length = elements.length; - - // if an Array or NodeList and not a Window - if (typeof length === 'number' && elements.window !== elements) { - if (length) { - for (var i = 0; i < length; i++) { - root[root.length++] = elements[i]; - } - } - } else { - root[root.length++] = elements; - } - } - } -} - - -function jqLiteController(element, name) { - return jqLiteInheritedData(element, '$' + (name || 'ngController') + 'Controller'); -} - -function jqLiteInheritedData(element, name, value) { - // if element is the document object work with the html element instead - // this makes $(document).scope() possible - if (element.nodeType == NODE_TYPE_DOCUMENT) { - element = element.documentElement; - } - var names = isArray(name) ? name : [name]; - - while (element) { - for (var i = 0, ii = names.length; i < ii; i++) { - if ((value = jqLite.data(element, names[i])) !== undefined) return value; - } - - // If dealing with a document fragment node with a host element, and no parent, use the host - // element as the parent. This enables directives within a Shadow DOM or polyfilled Shadow DOM - // to lookup parent controllers. - element = element.parentNode || (element.nodeType === NODE_TYPE_DOCUMENT_FRAGMENT && element.host); - } -} - -function jqLiteEmpty(element) { - jqLiteDealoc(element, true); - while (element.firstChild) { - element.removeChild(element.firstChild); - } -} - -function jqLiteRemove(element, keepData) { - if (!keepData) jqLiteDealoc(element); - var parent = element.parentNode; - if (parent) parent.removeChild(element); -} - - -function jqLiteDocumentLoaded(action, win) { - win = win || window; - if (win.document.readyState === 'complete') { - // Force the action to be run async for consistent behaviour - // from the action's point of view - // i.e. it will definitely not be in a $apply - win.setTimeout(action); - } else { - // No need to unbind this handler as load is only ever called once - jqLite(win).on('load', action); - } -} - -////////////////////////////////////////// -// Functions which are declared directly. -////////////////////////////////////////// -var JQLitePrototype = JQLite.prototype = { - ready: function(fn) { - var fired = false; - - function trigger() { - if (fired) return; - fired = true; - fn(); - } - - // check if document is already loaded - if (document.readyState === 'complete') { - setTimeout(trigger); - } else { - this.on('DOMContentLoaded', trigger); // works for modern browsers and IE9 - // we can not use jqLite since we are not done loading and jQuery could be loaded later. - // jshint -W064 - JQLite(window).on('load', trigger); // fallback to window.onload for others - // jshint +W064 - } - }, - toString: function() { - var value = []; - forEach(this, function(e) { value.push('' + e);}); - return '[' + value.join(', ') + ']'; - }, - - eq: function(index) { - return (index >= 0) ? jqLite(this[index]) : jqLite(this[this.length + index]); - }, - - length: 0, - push: push, - sort: [].sort, - splice: [].splice -}; - -////////////////////////////////////////// -// Functions iterating getter/setters. -// these functions return self on setter and -// value on get. -////////////////////////////////////////// -var BOOLEAN_ATTR = {}; -forEach('multiple,selected,checked,disabled,readOnly,required,open'.split(','), function(value) { - BOOLEAN_ATTR[lowercase(value)] = value; -}); -var BOOLEAN_ELEMENTS = {}; -forEach('input,select,option,textarea,button,form,details'.split(','), function(value) { - BOOLEAN_ELEMENTS[value] = true; -}); -var ALIASED_ATTR = { - 'ngMinlength': 'minlength', - 'ngMaxlength': 'maxlength', - 'ngMin': 'min', - 'ngMax': 'max', - 'ngPattern': 'pattern' -}; - -function getBooleanAttrName(element, name) { - // check dom last since we will most likely fail on name - var booleanAttr = BOOLEAN_ATTR[name.toLowerCase()]; - - // booleanAttr is here twice to minimize DOM access - return booleanAttr && BOOLEAN_ELEMENTS[nodeName_(element)] && booleanAttr; -} - -function getAliasedAttrName(element, name) { - var nodeName = element.nodeName; - return (nodeName === 'INPUT' || nodeName === 'TEXTAREA') && ALIASED_ATTR[name]; -} - -forEach({ - data: jqLiteData, - removeData: jqLiteRemoveData -}, function(fn, name) { - JQLite[name] = fn; -}); - -forEach({ - data: jqLiteData, - inheritedData: jqLiteInheritedData, - - scope: function(element) { - // Can't use jqLiteData here directly so we stay compatible with jQuery! - return jqLite.data(element, '$scope') || jqLiteInheritedData(element.parentNode || element, ['$isolateScope', '$scope']); - }, - - isolateScope: function(element) { - // Can't use jqLiteData here directly so we stay compatible with jQuery! - return jqLite.data(element, '$isolateScope') || jqLite.data(element, '$isolateScopeNoTemplate'); - }, - - controller: jqLiteController, - - injector: function(element) { - return jqLiteInheritedData(element, '$injector'); - }, - - removeAttr: function(element, name) { - element.removeAttribute(name); - }, - - hasClass: jqLiteHasClass, - - css: function(element, name, value) { - name = camelCase(name); - - if (isDefined(value)) { - element.style[name] = value; - } else { - return element.style[name]; - } - }, - - attr: function(element, name, value) { - var lowercasedName = lowercase(name); - if (BOOLEAN_ATTR[lowercasedName]) { - if (isDefined(value)) { - if (!!value) { - element[name] = true; - element.setAttribute(name, lowercasedName); - } else { - element[name] = false; - element.removeAttribute(lowercasedName); - } - } else { - return (element[name] || - (element.attributes.getNamedItem(name) || noop).specified) - ? lowercasedName - : undefined; - } - } else if (isDefined(value)) { - element.setAttribute(name, value); - } else if (element.getAttribute) { - // the extra argument "2" is to get the right thing for a.href in IE, see jQuery code - // some elements (e.g. Document) don't have get attribute, so return undefined - var ret = element.getAttribute(name, 2); - // normalize non-existing attributes to undefined (as jQuery) - return ret === null ? undefined : ret; - } - }, - - prop: function(element, name, value) { - if (isDefined(value)) { - element[name] = value; - } else { - return element[name]; - } - }, - - text: (function() { - getText.$dv = ''; - return getText; - - function getText(element, value) { - if (isUndefined(value)) { - var nodeType = element.nodeType; - return (nodeType === NODE_TYPE_ELEMENT || nodeType === NODE_TYPE_TEXT) ? element.textContent : ''; - } - element.textContent = value; - } - })(), - - val: function(element, value) { - if (isUndefined(value)) { - if (element.multiple && nodeName_(element) === 'select') { - var result = []; - forEach(element.options, function(option) { - if (option.selected) { - result.push(option.value || option.text); - } - }); - return result.length === 0 ? null : result; - } - return element.value; - } - element.value = value; - }, - - html: function(element, value) { - if (isUndefined(value)) { - return element.innerHTML; - } - jqLiteDealoc(element, true); - element.innerHTML = value; - }, - - empty: jqLiteEmpty -}, function(fn, name) { - /** - * Properties: writes return selection, reads return first value - */ - JQLite.prototype[name] = function(arg1, arg2) { - var i, key; - var nodeCount = this.length; - - // jqLiteHasClass has only two arguments, but is a getter-only fn, so we need to special-case it - // in a way that survives minification. - // jqLiteEmpty takes no arguments but is a setter. - if (fn !== jqLiteEmpty && - (((fn.length == 2 && (fn !== jqLiteHasClass && fn !== jqLiteController)) ? arg1 : arg2) === undefined)) { - if (isObject(arg1)) { - - // we are a write, but the object properties are the key/values - for (i = 0; i < nodeCount; i++) { - if (fn === jqLiteData) { - // data() takes the whole object in jQuery - fn(this[i], arg1); - } else { - for (key in arg1) { - fn(this[i], key, arg1[key]); - } - } - } - // return self for chaining - return this; - } else { - // we are a read, so read the first child. - // TODO: do we still need this? - var value = fn.$dv; - // Only if we have $dv do we iterate over all, otherwise it is just the first element. - var jj = (value === undefined) ? Math.min(nodeCount, 1) : nodeCount; - for (var j = 0; j < jj; j++) { - var nodeValue = fn(this[j], arg1, arg2); - value = value ? value + nodeValue : nodeValue; - } - return value; - } - } else { - // we are a write, so apply to all children - for (i = 0; i < nodeCount; i++) { - fn(this[i], arg1, arg2); - } - // return self for chaining - return this; - } - }; -}); - -function createEventHandler(element, events) { - var eventHandler = function(event, type) { - // jQuery specific api - event.isDefaultPrevented = function() { - return event.defaultPrevented; - }; - - var eventFns = events[type || event.type]; - var eventFnsLength = eventFns ? eventFns.length : 0; - - if (!eventFnsLength) return; - - if (isUndefined(event.immediatePropagationStopped)) { - var originalStopImmediatePropagation = event.stopImmediatePropagation; - event.stopImmediatePropagation = function() { - event.immediatePropagationStopped = true; - - if (event.stopPropagation) { - event.stopPropagation(); - } - - if (originalStopImmediatePropagation) { - originalStopImmediatePropagation.call(event); - } - }; - } - - event.isImmediatePropagationStopped = function() { - return event.immediatePropagationStopped === true; - }; - - // Copy event handlers in case event handlers array is modified during execution. - if ((eventFnsLength > 1)) { - eventFns = shallowCopy(eventFns); - } - - for (var i = 0; i < eventFnsLength; i++) { - if (!event.isImmediatePropagationStopped()) { - eventFns[i].call(element, event); - } - } - }; - - // TODO: this is a hack for angularMocks/clearDataCache that makes it possible to deregister all - // events on `element` - eventHandler.elem = element; - return eventHandler; -} - -////////////////////////////////////////// -// Functions iterating traversal. -// These functions chain results into a single -// selector. -////////////////////////////////////////// -forEach({ - removeData: jqLiteRemoveData, - - on: function jqLiteOn(element, type, fn, unsupported) { - if (isDefined(unsupported)) throw jqLiteMinErr('onargs', 'jqLite#on() does not support the `selector` or `eventData` parameters'); - - // Do not add event handlers to non-elements because they will not be cleaned up. - if (!jqLiteAcceptsData(element)) { - return; - } - - var expandoStore = jqLiteExpandoStore(element, true); - var events = expandoStore.events; - var handle = expandoStore.handle; - - if (!handle) { - handle = expandoStore.handle = createEventHandler(element, events); - } - - // http://jsperf.com/string-indexof-vs-split - var types = type.indexOf(' ') >= 0 ? type.split(' ') : [type]; - var i = types.length; - - while (i--) { - type = types[i]; - var eventFns = events[type]; - - if (!eventFns) { - events[type] = []; - - if (type === 'mouseenter' || type === 'mouseleave') { - // Refer to jQuery's implementation of mouseenter & mouseleave - // Read about mouseenter and mouseleave: - // http://www.quirksmode.org/js/events_mouse.html#link8 - - jqLiteOn(element, MOUSE_EVENT_MAP[type], function(event) { - var target = this, related = event.relatedTarget; - // 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 && !target.contains(related))) { - handle(event, type); - } - }); - - } else { - if (type !== '$destroy') { - addEventListenerFn(element, type, handle); - } - } - eventFns = events[type]; - } - eventFns.push(fn); - } - }, - - off: jqLiteOff, - - one: function(element, type, fn) { - element = jqLite(element); - - //add the listener twice so that when it is called - //you can remove the original function and still be - //able to call element.off(ev, fn) normally - element.on(type, function onFn() { - element.off(type, fn); - element.off(type, onFn); - }); - element.on(type, fn); - }, - - replaceWith: function(element, replaceNode) { - var index, parent = element.parentNode; - jqLiteDealoc(element); - forEach(new JQLite(replaceNode), function(node) { - if (index) { - parent.insertBefore(node, index.nextSibling); - } else { - parent.replaceChild(node, element); - } - index = node; - }); - }, - - children: function(element) { - var children = []; - forEach(element.childNodes, function(element) { - if (element.nodeType === NODE_TYPE_ELEMENT) - children.push(element); - }); - return children; - }, - - contents: function(element) { - return element.contentDocument || element.childNodes || []; - }, - - append: function(element, node) { - var nodeType = element.nodeType; - if (nodeType !== NODE_TYPE_ELEMENT && nodeType !== NODE_TYPE_DOCUMENT_FRAGMENT) return; - - node = new JQLite(node); - - for (var i = 0, ii = node.length; i < ii; i++) { - var child = node[i]; - element.appendChild(child); - } - }, - - prepend: function(element, node) { - if (element.nodeType === NODE_TYPE_ELEMENT) { - var index = element.firstChild; - forEach(new JQLite(node), function(child) { - element.insertBefore(child, index); - }); - } - }, - - wrap: function(element, wrapNode) { - wrapNode = jqLite(wrapNode).eq(0).clone()[0]; - var parent = element.parentNode; - if (parent) { - parent.replaceChild(wrapNode, element); - } - wrapNode.appendChild(element); - }, - - remove: jqLiteRemove, - - detach: function(element) { - jqLiteRemove(element, true); - }, - - after: function(element, newElement) { - var index = element, parent = element.parentNode; - newElement = new JQLite(newElement); - - for (var i = 0, ii = newElement.length; i < ii; i++) { - var node = newElement[i]; - parent.insertBefore(node, index.nextSibling); - index = node; - } - }, - - addClass: jqLiteAddClass, - removeClass: jqLiteRemoveClass, - - toggleClass: function(element, selector, condition) { - if (selector) { - forEach(selector.split(' '), function(className) { - var classCondition = condition; - if (isUndefined(classCondition)) { - classCondition = !jqLiteHasClass(element, className); - } - (classCondition ? jqLiteAddClass : jqLiteRemoveClass)(element, className); - }); - } - }, - - parent: function(element) { - var parent = element.parentNode; - return parent && parent.nodeType !== NODE_TYPE_DOCUMENT_FRAGMENT ? parent : null; - }, - - next: function(element) { - return element.nextElementSibling; - }, - - find: function(element, selector) { - if (element.getElementsByTagName) { - return element.getElementsByTagName(selector); - } else { - return []; - } - }, - - clone: jqLiteClone, - - triggerHandler: function(element, event, extraParameters) { - - var dummyEvent, eventFnsCopy, handlerArgs; - var eventName = event.type || event; - var expandoStore = jqLiteExpandoStore(element); - var events = expandoStore && expandoStore.events; - var eventFns = events && events[eventName]; - - if (eventFns) { - // Create a dummy event to pass to the handlers - dummyEvent = { - preventDefault: function() { this.defaultPrevented = true; }, - isDefaultPrevented: function() { return this.defaultPrevented === true; }, - stopImmediatePropagation: function() { this.immediatePropagationStopped = true; }, - isImmediatePropagationStopped: function() { return this.immediatePropagationStopped === true; }, - stopPropagation: noop, - type: eventName, - target: element - }; - - // If a custom event was provided then extend our dummy event with it - if (event.type) { - dummyEvent = extend(dummyEvent, event); - } - - // Copy event handlers in case event handlers array is modified during execution. - eventFnsCopy = shallowCopy(eventFns); - handlerArgs = extraParameters ? [dummyEvent].concat(extraParameters) : [dummyEvent]; - - forEach(eventFnsCopy, function(fn) { - if (!dummyEvent.isImmediatePropagationStopped()) { - fn.apply(element, handlerArgs); - } - }); - } - } -}, function(fn, name) { - /** - * chaining functions - */ - JQLite.prototype[name] = function(arg1, arg2, arg3) { - var value; - - for (var i = 0, ii = this.length; i < ii; i++) { - if (isUndefined(value)) { - value = fn(this[i], arg1, arg2, arg3); - if (isDefined(value)) { - // any function which returns a value needs to be wrapped - value = jqLite(value); - } - } else { - jqLiteAddNodes(value, fn(this[i], arg1, arg2, arg3)); - } - } - return isDefined(value) ? value : this; - }; - - // bind legacy bind/unbind to on/off - JQLite.prototype.bind = JQLite.prototype.on; - JQLite.prototype.unbind = JQLite.prototype.off; -}); - - -// Provider for private $$jqLite service -function $$jqLiteProvider() { - this.$get = function $$jqLite() { - return extend(JQLite, { - hasClass: function(node, classes) { - if (node.attr) node = node[0]; - return jqLiteHasClass(node, classes); - }, - addClass: function(node, classes) { - if (node.attr) node = node[0]; - return jqLiteAddClass(node, classes); - }, - removeClass: function(node, classes) { - if (node.attr) node = node[0]; - return jqLiteRemoveClass(node, classes); - } - }); - }; -} - -/** - * Computes a hash of an 'obj'. - * Hash of a: - * string is string - * number is number as string - * object is either result of calling $$hashKey function on the object or uniquely generated id, - * that is also assigned to the $$hashKey property of the object. - * - * @param obj - * @returns {string} hash string such that the same input will have the same hash string. - * The resulting string key is in 'type:hashKey' format. - */ -function hashKey(obj, nextUidFn) { - var key = obj && obj.$$hashKey; - - if (key) { - if (typeof key === 'function') { - key = obj.$$hashKey(); - } - return key; - } - - var objType = typeof obj; - if (objType == 'function' || (objType == 'object' && obj !== null)) { - key = obj.$$hashKey = objType + ':' + (nextUidFn || nextUid)(); - } else { - key = objType + ':' + obj; - } - - return key; -} - -/** - * HashMap which can use objects as keys - */ -function HashMap(array, isolatedUid) { - if (isolatedUid) { - var uid = 0; - this.nextUid = function() { - return ++uid; - }; - } - forEach(array, this.put, this); -} -HashMap.prototype = { - /** - * Store key value pair - * @param key key to store can be any type - * @param value value to store can be any type - */ - put: function(key, value) { - this[hashKey(key, this.nextUid)] = value; - }, - - /** - * @param key - * @returns {Object} the value for the key - */ - get: function(key) { - return this[hashKey(key, this.nextUid)]; - }, - - /** - * Remove the key/value pair - * @param key - */ - remove: function(key) { - var value = this[key = hashKey(key, this.nextUid)]; - delete this[key]; - return value; - } -}; - -/** - * @ngdoc function - * @module ng - * @name angular.injector - * @kind function - * - * @description - * Creates an injector object that can be used for retrieving services as well as for - * dependency injection (see {@link guide/di dependency injection}). - * - * @param {Array.<string|Function>} modules A list of module functions or their aliases. See - * {@link angular.module}. The `ng` module must be explicitly added. - * @param {boolean=} [strictDi=false] Whether the injector should be in strict mode, which - * disallows argument name annotation inference. - * @returns {injector} Injector object. See {@link auto.$injector $injector}. - * - * @example - * Typical usage - * ```js - * // create an injector - * var $injector = angular.injector(['ng']); - * - * // use the injector to kick off your application - * // use the type inference to auto inject arguments, or use implicit injection - * $injector.invoke(function($rootScope, $compile, $document) { - * $compile($document)($rootScope); - * $rootScope.$digest(); - * }); - * ``` - * - * Sometimes you want to get access to the injector of a currently running Angular app - * from outside Angular. Perhaps, you want to inject and compile some markup after the - * application has been bootstrapped. You can do this using the extra `injector()` added - * to JQuery/jqLite elements. See {@link angular.element}. - * - * *This is fairly rare but could be the case if a third party library is injecting the - * markup.* - * - * In the following example a new block of HTML containing a `ng-controller` - * directive is added to the end of the document body by JQuery. We then compile and link - * it into the current AngularJS scope. - * - * ```js - * var $div = $('<div ng-controller="MyCtrl">{{content.label}}</div>'); - * $(document.body).append($div); - * - * angular.element(document).injector().invoke(function($compile) { - * var scope = angular.element($div).scope(); - * $compile($div)(scope); - * }); - * ``` - */ - - -/** - * @ngdoc module - * @name auto - * @description - * - * Implicit module which gets automatically added to each {@link auto.$injector $injector}. - */ - -var FN_ARGS = /^function\s*[^\(]*\(\s*([^\)]*)\)/m; -var FN_ARG_SPLIT = /,/; -var FN_ARG = /^\s*(_?)(\S+?)\1\s*$/; -var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg; -var $injectorMinErr = minErr('$injector'); - -function anonFn(fn) { - // For anonymous functions, showing at the very least the function signature can help in - // debugging. - var fnText = fn.toString().replace(STRIP_COMMENTS, ''), - args = fnText.match(FN_ARGS); - if (args) { - return 'function(' + (args[1] || '').replace(/[\s\r\n]+/, ' ') + ')'; - } - return 'fn'; -} - -function annotate(fn, strictDi, name) { - var $inject, - fnText, - argDecl, - last; - - if (typeof fn === 'function') { - if (!($inject = fn.$inject)) { - $inject = []; - if (fn.length) { - if (strictDi) { - if (!isString(name) || !name) { - name = fn.name || anonFn(fn); - } - throw $injectorMinErr('strictdi', - '{0} is not using explicit annotation and cannot be invoked in strict mode', name); - } - fnText = fn.toString().replace(STRIP_COMMENTS, ''); - argDecl = fnText.match(FN_ARGS); - forEach(argDecl[1].split(FN_ARG_SPLIT), function(arg) { - arg.replace(FN_ARG, function(all, underscore, name) { - $inject.push(name); - }); - }); - } - fn.$inject = $inject; - } - } else if (isArray(fn)) { - last = fn.length - 1; - assertArgFn(fn[last], 'fn'); - $inject = fn.slice(0, last); - } else { - assertArgFn(fn, 'fn', true); - } - return $inject; -} - -/////////////////////////////////////// - -/** - * @ngdoc service - * @name $injector - * - * @description - * - * `$injector` is used to retrieve object instances as defined by - * {@link auto.$provide provider}, instantiate types, invoke methods, - * and load modules. - * - * The following always holds true: - * - * ```js - * var $injector = angular.injector(); - * expect($injector.get('$injector')).toBe($injector); - * expect($injector.invoke(function($injector) { - * return $injector; - * })).toBe($injector); - * ``` - * - * # Injection Function Annotation - * - * JavaScript does not have annotations, and annotations are needed for dependency injection. The - * following are all valid ways of annotating function with injection arguments and are equivalent. - * - * ```js - * // inferred (only works if code not minified/obfuscated) - * $injector.invoke(function(serviceA){}); - * - * // annotated - * function explicit(serviceA) {}; - * explicit.$inject = ['serviceA']; - * $injector.invoke(explicit); - * - * // inline - * $injector.invoke(['serviceA', function(serviceA){}]); - * ``` - * - * ## Inference - * - * In JavaScript calling `toString()` on a function returns the function definition. The definition - * can then be parsed and the function arguments can be extracted. This method of discovering - * annotations is disallowed when the injector is in strict mode. - * *NOTE:* This does not work with minification, and obfuscation tools since these tools change the - * argument names. - * - * ## `$inject` Annotation - * By adding an `$inject` property onto a function the injection parameters can be specified. - * - * ## Inline - * As an array of injection names, where the last item in the array is the function to call. - */ - -/** - * @ngdoc method - * @name $injector#get - * - * @description - * Return an instance of the service. - * - * @param {string} name The name of the instance to retrieve. - * @param {string} caller An optional string to provide the origin of the function call for error messages. - * @return {*} The instance. - */ - -/** - * @ngdoc method - * @name $injector#invoke - * - * @description - * Invoke the method and supply the method arguments from the `$injector`. - * - * @param {!Function} fn The function to invoke. Function parameters are injected according to the - * {@link guide/di $inject Annotation} rules. - * @param {Object=} self The `this` for the invoked method. - * @param {Object=} locals Optional object. If preset then any argument names are read from this - * object first, before the `$injector` is consulted. - * @returns {*} the value returned by the invoked `fn` function. - */ - -/** - * @ngdoc method - * @name $injector#has - * - * @description - * Allows the user to query if the particular service exists. - * - * @param {string} name Name of the service to query. - * @returns {boolean} `true` if injector has given service. - */ - -/** - * @ngdoc method - * @name $injector#instantiate - * @description - * Create a new instance of JS type. The method takes a constructor function, invokes the new - * operator, and supplies all of the arguments to the constructor function as specified by the - * constructor annotation. - * - * @param {Function} Type Annotated constructor function. - * @param {Object=} locals Optional object. If preset then any argument names are read from this - * object first, before the `$injector` is consulted. - * @returns {Object} new instance of `Type`. - */ - -/** - * @ngdoc method - * @name $injector#annotate - * - * @description - * Returns an array of service names which the function is requesting for injection. This API is - * used by the injector to determine which services need to be injected into the function when the - * function is invoked. There are three ways in which the function can be annotated with the needed - * dependencies. - * - * # Argument names - * - * The simplest form is to extract the dependencies from the arguments of the function. This is done - * by converting the function into a string using `toString()` method and extracting the argument - * names. - * ```js - * // Given - * function MyController($scope, $route) { - * // ... - * } - * - * // Then - * expect(injector.annotate(MyController)).toEqual(['$scope', '$route']); - * ``` - * - * You can disallow this method by using strict injection mode. - * - * This method does not work with code minification / obfuscation. For this reason the following - * annotation strategies are supported. - * - * # The `$inject` property - * - * If a function has an `$inject` property and its value is an array of strings, then the strings - * represent names of services to be injected into the function. - * ```js - * // Given - * var MyController = function(obfuscatedScope, obfuscatedRoute) { - * // ... - * } - * // Define function dependencies - * MyController['$inject'] = ['$scope', '$route']; - * - * // Then - * expect(injector.annotate(MyController)).toEqual(['$scope', '$route']); - * ``` - * - * # The array notation - * - * It is often desirable to inline Injected functions and that's when setting the `$inject` property - * is very inconvenient. In these situations using the array notation to specify the dependencies in - * a way that survives minification is a better choice: - * - * ```js - * // We wish to write this (not minification / obfuscation safe) - * injector.invoke(function($compile, $rootScope) { - * // ... - * }); - * - * // We are forced to write break inlining - * var tmpFn = function(obfuscatedCompile, obfuscatedRootScope) { - * // ... - * }; - * tmpFn.$inject = ['$compile', '$rootScope']; - * injector.invoke(tmpFn); - * - * // To better support inline function the inline annotation is supported - * injector.invoke(['$compile', '$rootScope', function(obfCompile, obfRootScope) { - * // ... - * }]); - * - * // Therefore - * expect(injector.annotate( - * ['$compile', '$rootScope', function(obfus_$compile, obfus_$rootScope) {}]) - * ).toEqual(['$compile', '$rootScope']); - * ``` - * - * @param {Function|Array.<string|Function>} fn Function for which dependent service names need to - * be retrieved as described above. - * - * @param {boolean=} [strictDi=false] Disallow argument name annotation inference. - * - * @returns {Array.<string>} The names of the services which the function requires. - */ - - - - -/** - * @ngdoc service - * @name $provide - * - * @description - * - * The {@link auto.$provide $provide} service has a number of methods for registering components - * with the {@link auto.$injector $injector}. Many of these functions are also exposed on - * {@link angular.Module}. - * - * An Angular **service** is a singleton object created by a **service factory**. These **service - * factories** are functions which, in turn, are created by a **service provider**. - * The **service providers** are constructor functions. When instantiated they must contain a - * property called `$get`, which holds the **service factory** function. - * - * When you request a service, the {@link auto.$injector $injector} is responsible for finding the - * correct **service provider**, instantiating it and then calling its `$get` **service factory** - * function to get the instance of the **service**. - * - * Often services have no configuration options and there is no need to add methods to the service - * provider. The provider will be no more than a constructor function with a `$get` property. For - * these cases the {@link auto.$provide $provide} service has additional helper methods to register - * services without specifying a provider. - * - * * {@link auto.$provide#provider provider(provider)} - registers a **service provider** with the - * {@link auto.$injector $injector} - * * {@link auto.$provide#constant constant(obj)} - registers a value/object that can be accessed by - * providers and services. - * * {@link auto.$provide#value value(obj)} - registers a value/object that can only be accessed by - * services, not providers. - * * {@link auto.$provide#factory factory(fn)} - registers a service **factory function**, `fn`, - * that will be wrapped in a **service provider** object, whose `$get` property will contain the - * given factory function. - * * {@link auto.$provide#service service(class)} - registers a **constructor function**, `class` - * that will be wrapped in a **service provider** object, whose `$get` property will instantiate - * a new object using the given constructor function. - * - * See the individual methods for more information and examples. - */ - -/** - * @ngdoc method - * @name $provide#provider - * @description - * - * Register a **provider function** with the {@link auto.$injector $injector}. Provider functions - * are constructor functions, whose instances are responsible for "providing" a factory for a - * service. - * - * Service provider names start with the name of the service they provide followed by `Provider`. - * For example, the {@link ng.$log $log} service has a provider called - * {@link ng.$logProvider $logProvider}. - * - * Service provider objects can have additional methods which allow configuration of the provider - * and its service. Importantly, you can configure what kind of service is created by the `$get` - * method, or how that service will act. For example, the {@link ng.$logProvider $logProvider} has a - * method {@link ng.$logProvider#debugEnabled debugEnabled} - * which lets you specify whether the {@link ng.$log $log} service will log debug messages to the - * console or not. - * - * @param {string} name The name of the instance. NOTE: the provider will be available under `name + - 'Provider'` key. - * @param {(Object|function())} provider If the provider is: - * - * - `Object`: then it should have a `$get` method. The `$get` method will be invoked using - * {@link auto.$injector#invoke $injector.invoke()} when an instance needs to be created. - * - `Constructor`: a new instance of the provider will be created using - * {@link auto.$injector#instantiate $injector.instantiate()}, then treated as `object`. - * - * @returns {Object} registered provider instance - - * @example - * - * The following example shows how to create a simple event tracking service and register it using - * {@link auto.$provide#provider $provide.provider()}. - * - * ```js - * // Define the eventTracker provider - * function EventTrackerProvider() { - * var trackingUrl = '/track'; - * - * // A provider method for configuring where the tracked events should been saved - * this.setTrackingUrl = function(url) { - * trackingUrl = url; - * }; - * - * // The service factory function - * this.$get = ['$http', function($http) { - * var trackedEvents = {}; - * return { - * // Call this to track an event - * event: function(event) { - * var count = trackedEvents[event] || 0; - * count += 1; - * trackedEvents[event] = count; - * return count; - * }, - * // Call this to save the tracked events to the trackingUrl - * save: function() { - * $http.post(trackingUrl, trackedEvents); - * } - * }; - * }]; - * } - * - * describe('eventTracker', function() { - * var postSpy; - * - * beforeEach(module(function($provide) { - * // Register the eventTracker provider - * $provide.provider('eventTracker', EventTrackerProvider); - * })); - * - * beforeEach(module(function(eventTrackerProvider) { - * // Configure eventTracker provider - * eventTrackerProvider.setTrackingUrl('/custom-track'); - * })); - * - * it('tracks events', inject(function(eventTracker) { - * expect(eventTracker.event('login')).toEqual(1); - * expect(eventTracker.event('login')).toEqual(2); - * })); - * - * it('saves to the tracking url', inject(function(eventTracker, $http) { - * postSpy = spyOn($http, 'post'); - * eventTracker.event('login'); - * eventTracker.save(); - * expect(postSpy).toHaveBeenCalled(); - * expect(postSpy.mostRecentCall.args[0]).not.toEqual('/track'); - * expect(postSpy.mostRecentCall.args[0]).toEqual('/custom-track'); - * expect(postSpy.mostRecentCall.args[1]).toEqual({ 'login': 1 }); - * })); - * }); - * ``` - */ - -/** - * @ngdoc method - * @name $provide#factory - * @description - * - * Register a **service factory**, which will be called to return the service instance. - * This is short for registering a service where its provider consists of only a `$get` property, - * which is the given service factory function. - * You should use {@link auto.$provide#factory $provide.factory(getFn)} if you do not need to - * configure your service in a provider. - * - * @param {string} name The name of the instance. - * @param {function()} $getFn The $getFn for the instance creation. Internally this is a short hand - * for `$provide.provider(name, {$get: $getFn})`. - * @returns {Object} registered provider instance - * - * @example - * Here is an example of registering a service - * ```js - * $provide.factory('ping', ['$http', function($http) { - * return function ping() { - * return $http.send('/ping'); - * }; - * }]); - * ``` - * You would then inject and use this service like this: - * ```js - * someModule.controller('Ctrl', ['ping', function(ping) { - * ping(); - * }]); - * ``` - */ - - -/** - * @ngdoc method - * @name $provide#service - * @description - * - * Register a **service constructor**, which will be invoked with `new` to create the service - * instance. - * This is short for registering a service where its provider's `$get` property is the service - * constructor function that will be used to instantiate the service instance. - * - * You should use {@link auto.$provide#service $provide.service(class)} if you define your service - * as a type/class. - * - * @param {string} name The name of the instance. - * @param {Function} constructor A class (constructor function) that will be instantiated. - * @returns {Object} registered provider instance - * - * @example - * Here is an example of registering a service using - * {@link auto.$provide#service $provide.service(class)}. - * ```js - * var Ping = function($http) { - * this.$http = $http; - * }; - * - * Ping.$inject = ['$http']; - * - * Ping.prototype.send = function() { - * return this.$http.get('/ping'); - * }; - * $provide.service('ping', Ping); - * ``` - * You would then inject and use this service like this: - * ```js - * someModule.controller('Ctrl', ['ping', function(ping) { - * ping.send(); - * }]); - * ``` - */ - - -/** - * @ngdoc method - * @name $provide#value - * @description - * - * Register a **value service** with the {@link auto.$injector $injector}, such as a string, a - * number, an array, an object or a function. This is short for registering a service where its - * provider's `$get` property is a factory function that takes no arguments and returns the **value - * service**. - * - * Value services are similar to constant services, except that they cannot be injected into a - * module configuration function (see {@link angular.Module#config}) but they can be overridden by - * an Angular - * {@link auto.$provide#decorator decorator}. - * - * @param {string} name The name of the instance. - * @param {*} value The value. - * @returns {Object} registered provider instance - * - * @example - * Here are some examples of creating value services. - * ```js - * $provide.value('ADMIN_USER', 'admin'); - * - * $provide.value('RoleLookup', { admin: 0, writer: 1, reader: 2 }); - * - * $provide.value('halfOf', function(value) { - * return value / 2; - * }); - * ``` - */ - - -/** - * @ngdoc method - * @name $provide#constant - * @description - * - * Register a **constant service**, such as a string, a number, an array, an object or a function, - * with the {@link auto.$injector $injector}. Unlike {@link auto.$provide#value value} it can be - * injected into a module configuration function (see {@link angular.Module#config}) and it cannot - * be overridden by an Angular {@link auto.$provide#decorator decorator}. - * - * @param {string} name The name of the constant. - * @param {*} value The constant value. - * @returns {Object} registered instance - * - * @example - * Here a some examples of creating constants: - * ```js - * $provide.constant('SHARD_HEIGHT', 306); - * - * $provide.constant('MY_COLOURS', ['red', 'blue', 'grey']); - * - * $provide.constant('double', function(value) { - * return value * 2; - * }); - * ``` - */ - - -/** - * @ngdoc method - * @name $provide#decorator - * @description - * - * Register a **service decorator** with the {@link auto.$injector $injector}. A service decorator - * intercepts the creation of a service, allowing it to override or modify the behaviour of the - * service. The object returned by the decorator may be the original service, or a new service - * object which replaces or wraps and delegates to the original service. - * - * @param {string} name The name of the service to decorate. - * @param {function()} decorator This function will be invoked when the service needs to be - * instantiated and should return the decorated service instance. The function is called using - * the {@link auto.$injector#invoke injector.invoke} method and is therefore fully injectable. - * Local injection arguments: - * - * * `$delegate` - The original service instance, which can be monkey patched, configured, - * decorated or delegated to. - * - * @example - * Here we decorate the {@link ng.$log $log} service to convert warnings to errors by intercepting - * calls to {@link ng.$log#error $log.warn()}. - * ```js - * $provide.decorator('$log', ['$delegate', function($delegate) { - * $delegate.warn = $delegate.error; - * return $delegate; - * }]); - * ``` - */ - - -function createInjector(modulesToLoad, strictDi) { - strictDi = (strictDi === true); - var INSTANTIATING = {}, - providerSuffix = 'Provider', - path = [], - loadedModules = new HashMap([], true), - providerCache = { - $provide: { - provider: supportObject(provider), - factory: supportObject(factory), - service: supportObject(service), - value: supportObject(value), - constant: supportObject(constant), - decorator: decorator - } - }, - providerInjector = (providerCache.$injector = - createInternalInjector(providerCache, function(serviceName, caller) { - if (angular.isString(caller)) { - path.push(caller); - } - throw $injectorMinErr('unpr', "Unknown provider: {0}", path.join(' <- ')); - })), - instanceCache = {}, - instanceInjector = (instanceCache.$injector = - createInternalInjector(instanceCache, function(serviceName, caller) { - var provider = providerInjector.get(serviceName + providerSuffix, caller); - return instanceInjector.invoke(provider.$get, provider, undefined, serviceName); - })); - - - forEach(loadModules(modulesToLoad), function(fn) { instanceInjector.invoke(fn || noop); }); - - return instanceInjector; - - //////////////////////////////////// - // $provider - //////////////////////////////////// - - function supportObject(delegate) { - return function(key, value) { - if (isObject(key)) { - forEach(key, reverseParams(delegate)); - } else { - return delegate(key, value); - } - }; - } - - function provider(name, provider_) { - assertNotHasOwnProperty(name, 'service'); - if (isFunction(provider_) || isArray(provider_)) { - provider_ = providerInjector.instantiate(provider_); - } - if (!provider_.$get) { - throw $injectorMinErr('pget', "Provider '{0}' must define $get factory method.", name); - } - return providerCache[name + providerSuffix] = provider_; - } - - function enforceReturnValue(name, factory) { - return function enforcedReturnValue() { - var result = instanceInjector.invoke(factory, this); - if (isUndefined(result)) { - throw $injectorMinErr('undef', "Provider '{0}' must return a value from $get factory method.", name); - } - return result; - }; - } - - function factory(name, factoryFn, enforce) { - return provider(name, { - $get: enforce !== false ? enforceReturnValue(name, factoryFn) : factoryFn - }); - } - - function service(name, constructor) { - return factory(name, ['$injector', function($injector) { - return $injector.instantiate(constructor); - }]); - } - - function value(name, val) { return factory(name, valueFn(val), false); } - - function constant(name, value) { - assertNotHasOwnProperty(name, 'constant'); - providerCache[name] = value; - instanceCache[name] = value; - } - - function decorator(serviceName, decorFn) { - var origProvider = providerInjector.get(serviceName + providerSuffix), - orig$get = origProvider.$get; - - origProvider.$get = function() { - var origInstance = instanceInjector.invoke(orig$get, origProvider); - return instanceInjector.invoke(decorFn, null, {$delegate: origInstance}); - }; - } - - //////////////////////////////////// - // Module Loading - //////////////////////////////////// - function loadModules(modulesToLoad) { - var runBlocks = [], moduleFn; - forEach(modulesToLoad, function(module) { - if (loadedModules.get(module)) return; - loadedModules.put(module, true); - - function runInvokeQueue(queue) { - var i, ii; - for (i = 0, ii = queue.length; i < ii; i++) { - var invokeArgs = queue[i], - provider = providerInjector.get(invokeArgs[0]); - - provider[invokeArgs[1]].apply(provider, invokeArgs[2]); - } - } - - try { - if (isString(module)) { - moduleFn = angularModule(module); - runBlocks = runBlocks.concat(loadModules(moduleFn.requires)).concat(moduleFn._runBlocks); - runInvokeQueue(moduleFn._invokeQueue); - runInvokeQueue(moduleFn._configBlocks); - } else if (isFunction(module)) { - runBlocks.push(providerInjector.invoke(module)); - } else if (isArray(module)) { - runBlocks.push(providerInjector.invoke(module)); - } else { - assertArgFn(module, 'module'); - } - } catch (e) { - if (isArray(module)) { - module = module[module.length - 1]; - } - if (e.message && e.stack && e.stack.indexOf(e.message) == -1) { - // Safari & FF's stack traces don't contain error.message content - // unlike those of Chrome and IE - // So if stack doesn't contain message, we create a new string that contains both. - // Since error.stack is read-only in Safari, I'm overriding e and not e.stack here. - /* jshint -W022 */ - e = e.message + '\n' + e.stack; - } - throw $injectorMinErr('modulerr', "Failed to instantiate module {0} due to:\n{1}", - module, e.stack || e.message || e); - } - }); - return runBlocks; - } - - //////////////////////////////////// - // internal Injector - //////////////////////////////////// - - function createInternalInjector(cache, factory) { - - function getService(serviceName, caller) { - if (cache.hasOwnProperty(serviceName)) { - if (cache[serviceName] === INSTANTIATING) { - throw $injectorMinErr('cdep', 'Circular dependency found: {0}', - serviceName + ' <- ' + path.join(' <- ')); - } - return cache[serviceName]; - } else { - try { - path.unshift(serviceName); - cache[serviceName] = INSTANTIATING; - return cache[serviceName] = factory(serviceName, caller); - } catch (err) { - if (cache[serviceName] === INSTANTIATING) { - delete cache[serviceName]; - } - throw err; - } finally { - path.shift(); - } - } - } - - function invoke(fn, self, locals, serviceName) { - if (typeof locals === 'string') { - serviceName = locals; - locals = null; - } - - var args = [], - $inject = annotate(fn, strictDi, serviceName), - length, i, - key; - - for (i = 0, length = $inject.length; i < length; i++) { - key = $inject[i]; - if (typeof key !== 'string') { - throw $injectorMinErr('itkn', - 'Incorrect injection token! Expected service name as string, got {0}', key); - } - args.push( - locals && locals.hasOwnProperty(key) - ? locals[key] - : getService(key, serviceName) - ); - } - if (isArray(fn)) { - fn = fn[length]; - } - - // http://jsperf.com/angularjs-invoke-apply-vs-switch - // #5388 - return fn.apply(self, args); - } - - function instantiate(Type, locals, serviceName) { - // Check if Type is annotated and use just the given function at n-1 as parameter - // e.g. someModule.factory('greeter', ['$window', function(renamed$window) {}]); - // Object creation: http://jsperf.com/create-constructor/2 - var instance = Object.create((isArray(Type) ? Type[Type.length - 1] : Type).prototype || null); - var returnedValue = invoke(Type, instance, locals, serviceName); - - return isObject(returnedValue) || isFunction(returnedValue) ? returnedValue : instance; - } - - return { - invoke: invoke, - instantiate: instantiate, - get: getService, - annotate: annotate, - has: function(name) { - return providerCache.hasOwnProperty(name + providerSuffix) || cache.hasOwnProperty(name); - } - }; - } -} - -createInjector.$$annotate = annotate; - -/** - * @ngdoc provider - * @name $anchorScrollProvider - * - * @description - * Use `$anchorScrollProvider` to disable automatic scrolling whenever - * {@link ng.$location#hash $location.hash()} changes. - */ -function $AnchorScrollProvider() { - - var autoScrollingEnabled = true; - - /** - * @ngdoc method - * @name $anchorScrollProvider#disableAutoScrolling - * - * @description - * By default, {@link ng.$anchorScroll $anchorScroll()} will automatically detect changes to - * {@link ng.$location#hash $location.hash()} and scroll to the element matching the new hash.<br /> - * Use this method to disable automatic scrolling. - * - * If automatic scrolling is disabled, one must explicitly call - * {@link ng.$anchorScroll $anchorScroll()} in order to scroll to the element related to the - * current hash. - */ - this.disableAutoScrolling = function() { - autoScrollingEnabled = false; - }; - - /** - * @ngdoc service - * @name $anchorScroll - * @kind function - * @requires $window - * @requires $location - * @requires $rootScope - * - * @description - * When called, it checks the current value of {@link ng.$location#hash $location.hash()} and - * scrolls to the related element, according to the rules specified in the - * [Html5 spec](http://dev.w3.org/html5/spec/Overview.html#the-indicated-part-of-the-document). - * - * It also watches the {@link ng.$location#hash $location.hash()} and automatically scrolls to - * match any anchor whenever it changes. This can be disabled by calling - * {@link ng.$anchorScrollProvider#disableAutoScrolling $anchorScrollProvider.disableAutoScrolling()}. - * - * Additionally, you can use its {@link ng.$anchorScroll#yOffset yOffset} property to specify a - * vertical scroll-offset (either fixed or dynamic). - * - * @property {(number|function|jqLite)} yOffset - * If set, specifies a vertical scroll-offset. This is often useful when there are fixed - * positioned elements at the top of the page, such as navbars, headers etc. - * - * `yOffset` can be specified in various ways: - * - **number**: A fixed number of pixels to be used as offset.<br /><br /> - * - **function**: A getter function called everytime `$anchorScroll()` is executed. Must return - * a number representing the offset (in pixels).<br /><br /> - * - **jqLite**: A jqLite/jQuery element to be used for specifying the offset. The distance from - * the top of the page to the element's bottom will be used as offset.<br /> - * **Note**: The element will be taken into account only as long as its `position` is set to - * `fixed`. This option is useful, when dealing with responsive navbars/headers that adjust - * their height and/or positioning according to the viewport's size. - * - * <br /> - * <div class="alert alert-warning"> - * In order for `yOffset` to work properly, scrolling should take place on the document's root and - * not some child element. - * </div> - * - * @example - <example module="anchorScrollExample"> - <file name="index.html"> - <div id="scrollArea" ng-controller="ScrollController"> - <a ng-click="gotoBottom()">Go to bottom</a> - <a id="bottom"></a> You're at the bottom! - </div> - </file> - <file name="script.js"> - angular.module('anchorScrollExample', []) - .controller('ScrollController', ['$scope', '$location', '$anchorScroll', - function ($scope, $location, $anchorScroll) { - $scope.gotoBottom = function() { - // set the location.hash to the id of - // the element you wish to scroll to. - $location.hash('bottom'); - - // call $anchorScroll() - $anchorScroll(); - }; - }]); - </file> - <file name="style.css"> - #scrollArea { - height: 280px; - overflow: auto; - } - - #bottom { - display: block; - margin-top: 2000px; - } - </file> - </example> - * - * <hr /> - * The example below illustrates the use of a vertical scroll-offset (specified as a fixed value). - * See {@link ng.$anchorScroll#yOffset $anchorScroll.yOffset} for more details. - * - * @example - <example module="anchorScrollOffsetExample"> - <file name="index.html"> - <div class="fixed-header" ng-controller="headerCtrl"> - <a href="" ng-click="gotoAnchor(x)" ng-repeat="x in [1,2,3,4,5]"> - Go to anchor {{x}} - </a> - </div> - <div id="anchor{{x}}" class="anchor" ng-repeat="x in [1,2,3,4,5]"> - Anchor {{x}} of 5 - </div> - </file> - <file name="script.js"> - angular.module('anchorScrollOffsetExample', []) - .run(['$anchorScroll', function($anchorScroll) { - $anchorScroll.yOffset = 50; // always scroll by 50 extra pixels - }]) - .controller('headerCtrl', ['$anchorScroll', '$location', '$scope', - function ($anchorScroll, $location, $scope) { - $scope.gotoAnchor = function(x) { - var newHash = 'anchor' + x; - if ($location.hash() !== newHash) { - // set the $location.hash to `newHash` and - // $anchorScroll will automatically scroll to it - $location.hash('anchor' + x); - } else { - // call $anchorScroll() explicitly, - // since $location.hash hasn't changed - $anchorScroll(); - } - }; - } - ]); - </file> - <file name="style.css"> - body { - padding-top: 50px; - } - - .anchor { - border: 2px dashed DarkOrchid; - padding: 10px 10px 200px 10px; - } - - .fixed-header { - background-color: rgba(0, 0, 0, 0.2); - height: 50px; - position: fixed; - top: 0; left: 0; right: 0; - } - - .fixed-header > a { - display: inline-block; - margin: 5px 15px; - } - </file> - </example> - */ - this.$get = ['$window', '$location', '$rootScope', function($window, $location, $rootScope) { - var document = $window.document; - - // Helper function to get first anchor from a NodeList - // (using `Array#some()` instead of `angular#forEach()` since it's more performant - // and working in all supported browsers.) - function getFirstAnchor(list) { - var result = null; - Array.prototype.some.call(list, function(element) { - if (nodeName_(element) === 'a') { - result = element; - return true; - } - }); - return result; - } - - function getYOffset() { - - var offset = scroll.yOffset; - - if (isFunction(offset)) { - offset = offset(); - } else if (isElement(offset)) { - var elem = offset[0]; - var style = $window.getComputedStyle(elem); - if (style.position !== 'fixed') { - offset = 0; - } else { - offset = elem.getBoundingClientRect().bottom; - } - } else if (!isNumber(offset)) { - offset = 0; - } - - return offset; - } - - function scrollTo(elem) { - if (elem) { - elem.scrollIntoView(); - - var offset = getYOffset(); - - if (offset) { - // `offset` is the number of pixels we should scroll UP in order to align `elem` properly. - // This is true ONLY if the call to `elem.scrollIntoView()` initially aligns `elem` at the - // top of the viewport. - // - // IF the number of pixels from the top of `elem` to the end of the page's content is less - // than the height of the viewport, then `elem.scrollIntoView()` will align the `elem` some - // way down the page. - // - // This is often the case for elements near the bottom of the page. - // - // In such cases we do not need to scroll the whole `offset` up, just the difference between - // the top of the element and the offset, which is enough to align the top of `elem` at the - // desired position. - var elemTop = elem.getBoundingClientRect().top; - $window.scrollBy(0, elemTop - offset); - } - } else { - $window.scrollTo(0, 0); - } - } - - function scroll() { - var hash = $location.hash(), elm; - - // empty hash, scroll to the top of the page - if (!hash) scrollTo(null); - - // element with given id - else if ((elm = document.getElementById(hash))) scrollTo(elm); - - // first anchor with given name :-D - else if ((elm = getFirstAnchor(document.getElementsByName(hash)))) scrollTo(elm); - - // no element and hash == 'top', scroll to the top of the page - else if (hash === 'top') scrollTo(null); - } - - // does not scroll when user clicks on anchor link that is currently on - // (no url change, no $location.hash() change), browser native does scroll - if (autoScrollingEnabled) { - $rootScope.$watch(function autoScrollWatch() {return $location.hash();}, - function autoScrollWatchAction(newVal, oldVal) { - // skip the initial scroll if $location.hash is empty - if (newVal === oldVal && newVal === '') return; - - jqLiteDocumentLoaded(function() { - $rootScope.$evalAsync(scroll); - }); - }); - } - - return scroll; - }]; -} - -var $animateMinErr = minErr('$animate'); - -/** - * @ngdoc provider - * @name $animateProvider - * - * @description - * Default implementation of $animate that doesn't perform any animations, instead just - * synchronously performs DOM - * updates and calls done() callbacks. - * - * In order to enable animations the ngAnimate module has to be loaded. - * - * To see the functional implementation check out src/ngAnimate/animate.js - */ -var $AnimateProvider = ['$provide', function($provide) { - - - this.$$selectors = {}; - - - /** - * @ngdoc method - * @name $animateProvider#register - * - * @description - * Registers a new injectable animation factory function. The factory function produces the - * animation object which contains callback functions for each event that is expected to be - * animated. - * - * * `eventFn`: `function(Element, doneFunction)` The element to animate, the `doneFunction` - * must be called once the element animation is complete. If a function is returned then the - * animation service will use this function to cancel the animation whenever a cancel event is - * triggered. - * - * - * ```js - * return { - * eventFn : function(element, done) { - * //code to run the animation - * //once complete, then run done() - * return function cancellationFunction() { - * //code to cancel the animation - * } - * } - * } - * ``` - * - * @param {string} name The name of the animation. - * @param {Function} factory The factory function that will be executed to return the animation - * object. - */ - this.register = function(name, factory) { - var key = name + '-animation'; - if (name && name.charAt(0) != '.') throw $animateMinErr('notcsel', - "Expecting class selector starting with '.' got '{0}'.", name); - this.$$selectors[name.substr(1)] = key; - $provide.factory(key, factory); - }; - - /** - * @ngdoc method - * @name $animateProvider#classNameFilter - * - * @description - * Sets and/or returns the CSS class regular expression that is checked when performing - * an animation. Upon bootstrap the classNameFilter value is not set at all and will - * therefore enable $animate to attempt to perform an animation on any element. - * When setting the classNameFilter value, animations will only be performed on elements - * that successfully match the filter expression. This in turn can boost performance - * for low-powered devices as well as applications containing a lot of structural operations. - * @param {RegExp=} expression The className expression which will be checked against all animations - * @return {RegExp} The current CSS className expression value. If null then there is no expression value - */ - this.classNameFilter = function(expression) { - if (arguments.length === 1) { - this.$$classNameFilter = (expression instanceof RegExp) ? expression : null; - } - return this.$$classNameFilter; - }; - - this.$get = ['$$q', '$$asyncCallback', '$rootScope', function($$q, $$asyncCallback, $rootScope) { - - var currentDefer; - - function runAnimationPostDigest(fn) { - var cancelFn, defer = $$q.defer(); - defer.promise.$$cancelFn = function ngAnimateMaybeCancel() { - cancelFn && cancelFn(); - }; - - $rootScope.$$postDigest(function ngAnimatePostDigest() { - cancelFn = fn(function ngAnimateNotifyComplete() { - defer.resolve(); - }); - }); - - return defer.promise; - } - - function resolveElementClasses(element, classes) { - var toAdd = [], toRemove = []; - - var hasClasses = createMap(); - forEach((element.attr('class') || '').split(/\s+/), function(className) { - hasClasses[className] = true; - }); - - forEach(classes, function(status, className) { - var hasClass = hasClasses[className]; - - // If the most recent class manipulation (via $animate) was to remove the class, and the - // element currently has the class, the class is scheduled for removal. Otherwise, if - // the most recent class manipulation (via $animate) was to add the class, and the - // element does not currently have the class, the class is scheduled to be added. - if (status === false && hasClass) { - toRemove.push(className); - } else if (status === true && !hasClass) { - toAdd.push(className); - } - }); - - return (toAdd.length + toRemove.length) > 0 && - [toAdd.length ? toAdd : null, toRemove.length ? toRemove : null]; - } - - function cachedClassManipulation(cache, classes, op) { - for (var i=0, ii = classes.length; i < ii; ++i) { - var className = classes[i]; - cache[className] = op; - } - } - - function asyncPromise() { - // only serve one instance of a promise in order to save CPU cycles - if (!currentDefer) { - currentDefer = $$q.defer(); - $$asyncCallback(function() { - currentDefer.resolve(); - currentDefer = null; - }); - } - return currentDefer.promise; - } - - function applyStyles(element, options) { - if (angular.isObject(options)) { - var styles = extend(options.from || {}, options.to || {}); - element.css(styles); - } - } - - /** - * - * @ngdoc service - * @name $animate - * @description The $animate service provides rudimentary DOM manipulation functions to - * insert, remove and move elements within the DOM, as well as adding and removing classes. - * This service is the core service used by the ngAnimate $animator service which provides - * high-level animation hooks for CSS and JavaScript. - * - * $animate is available in the AngularJS core, however, the ngAnimate module must be included - * to enable full out animation support. Otherwise, $animate will only perform simple DOM - * manipulation operations. - * - * To learn more about enabling animation support, click here to visit the {@link ngAnimate - * ngAnimate module page} as well as the {@link ngAnimate.$animate ngAnimate $animate service - * page}. - */ - return { - animate: function(element, from, to) { - applyStyles(element, { from: from, to: to }); - return asyncPromise(); - }, - - /** - * - * @ngdoc method - * @name $animate#enter - * @kind function - * @description Inserts the element into the DOM either after the `after` element or - * as the first child within the `parent` element. When the function is called a promise - * is returned that will be resolved at a later time. - * @param {DOMElement} element the element which will be inserted into the DOM - * @param {DOMElement} parent the parent element which will append the element as - * a child (if the after element is not present) - * @param {DOMElement} after the sibling element which will append the element - * after itself - * @param {object=} options an optional collection of styles that will be applied to the element. - * @return {Promise} the animation callback promise - */ - enter: function(element, parent, after, options) { - applyStyles(element, options); - after ? after.after(element) - : parent.prepend(element); - return asyncPromise(); - }, - - /** - * - * @ngdoc method - * @name $animate#leave - * @kind function - * @description Removes the element from the DOM. When the function is called a promise - * is returned that will be resolved at a later time. - * @param {DOMElement} element the element which will be removed from the DOM - * @param {object=} options an optional collection of options that will be applied to the element. - * @return {Promise} the animation callback promise - */ - leave: function(element, options) { - element.remove(); - return asyncPromise(); - }, - - /** - * - * @ngdoc method - * @name $animate#move - * @kind function - * @description Moves the position of the provided element within the DOM to be placed - * either after the `after` element or inside of the `parent` element. When the function - * is called a promise is returned that will be resolved at a later time. - * - * @param {DOMElement} element the element which will be moved around within the - * DOM - * @param {DOMElement} parent the parent element where the element will be - * inserted into (if the after element is not present) - * @param {DOMElement} after the sibling element where the element will be - * positioned next to - * @param {object=} options an optional collection of options that will be applied to the element. - * @return {Promise} the animation callback promise - */ - move: function(element, parent, after, options) { - // Do not remove element before insert. Removing will cause data associated with the - // element to be dropped. Insert will implicitly do the remove. - return this.enter(element, parent, after, options); - }, - - /** - * - * @ngdoc method - * @name $animate#addClass - * @kind function - * @description Adds the provided className CSS class value to the provided element. - * When the function is called a promise is returned that will be resolved at a later time. - * @param {DOMElement} element the element which will have the className value - * added to it - * @param {string} className the CSS class which will be added to the element - * @param {object=} options an optional collection of options that will be applied to the element. - * @return {Promise} the animation callback promise - */ - addClass: function(element, className, options) { - return this.setClass(element, className, [], options); - }, - - $$addClassImmediately: function(element, className, options) { - element = jqLite(element); - className = !isString(className) - ? (isArray(className) ? className.join(' ') : '') - : className; - forEach(element, function(element) { - jqLiteAddClass(element, className); - }); - applyStyles(element, options); - return asyncPromise(); - }, - - /** - * - * @ngdoc method - * @name $animate#removeClass - * @kind function - * @description Removes the provided className CSS class value from the provided element. - * When the function is called a promise is returned that will be resolved at a later time. - * @param {DOMElement} element the element which will have the className value - * removed from it - * @param {string} className the CSS class which will be removed from the element - * @param {object=} options an optional collection of options that will be applied to the element. - * @return {Promise} the animation callback promise - */ - removeClass: function(element, className, options) { - return this.setClass(element, [], className, options); - }, - - $$removeClassImmediately: function(element, className, options) { - element = jqLite(element); - className = !isString(className) - ? (isArray(className) ? className.join(' ') : '') - : className; - forEach(element, function(element) { - jqLiteRemoveClass(element, className); - }); - applyStyles(element, options); - return asyncPromise(); - }, - - /** - * - * @ngdoc method - * @name $animate#setClass - * @kind function - * @description Adds and/or removes the given CSS classes to and from the element. - * When the function is called a promise is returned that will be resolved at a later time. - * @param {DOMElement} element the element which will have its CSS classes changed - * removed from it - * @param {string} add the CSS classes which will be added to the element - * @param {string} remove the CSS class which will be removed from the element - * @param {object=} options an optional collection of options that will be applied to the element. - * @return {Promise} the animation callback promise - */ - setClass: function(element, add, remove, options) { - var self = this; - var STORAGE_KEY = '$$animateClasses'; - var createdCache = false; - element = jqLite(element); - - var cache = element.data(STORAGE_KEY); - if (!cache) { - cache = { - classes: {}, - options: options - }; - createdCache = true; - } else if (options && cache.options) { - cache.options = angular.extend(cache.options || {}, options); - } - - var classes = cache.classes; - - add = isArray(add) ? add : add.split(' '); - remove = isArray(remove) ? remove : remove.split(' '); - cachedClassManipulation(classes, add, true); - cachedClassManipulation(classes, remove, false); - - if (createdCache) { - cache.promise = runAnimationPostDigest(function(done) { - var cache = element.data(STORAGE_KEY); - element.removeData(STORAGE_KEY); - - // in the event that the element is removed before postDigest - // is run then the cache will be undefined and there will be - // no need anymore to add or remove and of the element classes - if (cache) { - var classes = resolveElementClasses(element, cache.classes); - if (classes) { - self.$$setClassImmediately(element, classes[0], classes[1], cache.options); - } - } - - done(); - }); - element.data(STORAGE_KEY, cache); - } - - return cache.promise; - }, - - $$setClassImmediately: function(element, add, remove, options) { - add && this.$$addClassImmediately(element, add); - remove && this.$$removeClassImmediately(element, remove); - applyStyles(element, options); - return asyncPromise(); - }, - - enabled: noop, - cancel: noop - }; - }]; -}]; - -function $$AsyncCallbackProvider() { - this.$get = ['$$rAF', '$timeout', function($$rAF, $timeout) { - return $$rAF.supported - ? function(fn) { return $$rAF(fn); } - : function(fn) { - return $timeout(fn, 0, false); - }; - }]; -} - -/* global stripHash: true */ - -/** - * ! This is a private undocumented service ! - * - * @name $browser - * @requires $log - * @description - * This object has two goals: - * - * - hide all the global state in the browser caused by the window object - * - abstract away all the browser specific features and inconsistencies - * - * For tests we provide {@link ngMock.$browser mock implementation} of the `$browser` - * service, which can be used for convenient testing of the application without the interaction with - * the real browser apis. - */ -/** - * @param {object} window The global window object. - * @param {object} document jQuery wrapped document. - * @param {object} $log window.console or an object with the same interface. - * @param {object} $sniffer $sniffer service - */ -function Browser(window, document, $log, $sniffer) { - var self = this, - rawDocument = document[0], - location = window.location, - history = window.history, - setTimeout = window.setTimeout, - clearTimeout = window.clearTimeout, - pendingDeferIds = {}; - - self.isMock = false; - - var outstandingRequestCount = 0; - var outstandingRequestCallbacks = []; - - // TODO(vojta): remove this temporary api - self.$$completeOutstandingRequest = completeOutstandingRequest; - self.$$incOutstandingRequestCount = function() { outstandingRequestCount++; }; - - /** - * Executes the `fn` function(supports currying) and decrements the `outstandingRequestCallbacks` - * counter. If the counter reaches 0, all the `outstandingRequestCallbacks` are executed. - */ - function completeOutstandingRequest(fn) { - try { - fn.apply(null, sliceArgs(arguments, 1)); - } finally { - outstandingRequestCount--; - if (outstandingRequestCount === 0) { - while (outstandingRequestCallbacks.length) { - try { - outstandingRequestCallbacks.pop()(); - } catch (e) { - $log.error(e); - } - } - } - } - } - - function getHash(url) { - var index = url.indexOf('#'); - return index === -1 ? '' : url.substr(index + 1); - } - - /** - * @private - * Note: this method is used only by scenario runner - * TODO(vojta): prefix this method with $$ ? - * @param {function()} callback Function that will be called when no outstanding request - */ - self.notifyWhenNoOutstandingRequests = function(callback) { - // force browser to execute all pollFns - this is needed so that cookies and other pollers fire - // at some deterministic time in respect to the test runner's actions. Leaving things up to the - // regular poller would result in flaky tests. - forEach(pollFns, function(pollFn) { pollFn(); }); - - if (outstandingRequestCount === 0) { - callback(); - } else { - outstandingRequestCallbacks.push(callback); - } - }; - - ////////////////////////////////////////////////////////////// - // Poll Watcher API - ////////////////////////////////////////////////////////////// - var pollFns = [], - pollTimeout; - - /** - * @name $browser#addPollFn - * - * @param {function()} fn Poll function to add - * - * @description - * Adds a function to the list of functions that poller periodically executes, - * and starts polling if not started yet. - * - * @returns {function()} the added function - */ - self.addPollFn = function(fn) { - if (isUndefined(pollTimeout)) startPoller(100, setTimeout); - pollFns.push(fn); - return fn; - }; - - /** - * @param {number} interval How often should browser call poll functions (ms) - * @param {function()} setTimeout Reference to a real or fake `setTimeout` function. - * - * @description - * Configures the poller to run in the specified intervals, using the specified - * setTimeout fn and kicks it off. - */ - function startPoller(interval, setTimeout) { - (function check() { - forEach(pollFns, function(pollFn) { pollFn(); }); - pollTimeout = setTimeout(check, interval); - })(); - } - - ////////////////////////////////////////////////////////////// - // URL API - ////////////////////////////////////////////////////////////// - - var cachedState, lastHistoryState, - lastBrowserUrl = location.href, - baseElement = document.find('base'), - reloadLocation = null; - - cacheState(); - lastHistoryState = cachedState; - - /** - * @name $browser#url - * - * @description - * GETTER: - * Without any argument, this method just returns current value of location.href. - * - * SETTER: - * With at least one argument, this method sets url to new value. - * If html5 history api supported, pushState/replaceState is used, otherwise - * location.href/location.replace is used. - * Returns its own instance to allow chaining - * - * NOTE: this api is intended for use only by the $location service. Please use the - * {@link ng.$location $location service} to change url. - * - * @param {string} url New url (when used as setter) - * @param {boolean=} replace Should new url replace current history record? - * @param {object=} state object to use with pushState/replaceState - */ - self.url = function(url, replace, state) { - // In modern browsers `history.state` is `null` by default; treating it separately - // from `undefined` would cause `$browser.url('/foo')` to change `history.state` - // to undefined via `pushState`. Instead, let's change `undefined` to `null` here. - if (isUndefined(state)) { - state = null; - } - - // Android Browser BFCache causes location, history reference to become stale. - if (location !== window.location) location = window.location; - if (history !== window.history) history = window.history; - - // setter - if (url) { - var sameState = lastHistoryState === state; - - // Don't change anything if previous and current URLs and states match. This also prevents - // IE<10 from getting into redirect loop when in LocationHashbangInHtml5Url mode. - // See https://github.com/angular/angular.js/commit/ffb2701 - if (lastBrowserUrl === url && (!$sniffer.history || sameState)) { - return self; - } - var sameBase = lastBrowserUrl && stripHash(lastBrowserUrl) === stripHash(url); - lastBrowserUrl = url; - lastHistoryState = state; - // Don't use history API if only the hash changed - // due to a bug in IE10/IE11 which leads - // to not firing a `hashchange` nor `popstate` event - // in some cases (see #9143). - if ($sniffer.history && (!sameBase || !sameState)) { - history[replace ? 'replaceState' : 'pushState'](state, '', url); - cacheState(); - // Do the assignment again so that those two variables are referentially identical. - lastHistoryState = cachedState; - } else { - if (!sameBase) { - reloadLocation = url; - } - if (replace) { - location.replace(url); - } else if (!sameBase) { - location.href = url; - } else { - location.hash = getHash(url); - } - } - return self; - // getter - } else { - // - reloadLocation is needed as browsers don't allow to read out - // the new location.href if a reload happened. - // - the replacement is a workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=407172 - return reloadLocation || location.href.replace(/%27/g,"'"); - } - }; - - /** - * @name $browser#state - * - * @description - * This method is a getter. - * - * Return history.state or null if history.state is undefined. - * - * @returns {object} state - */ - self.state = function() { - return cachedState; - }; - - var urlChangeListeners = [], - urlChangeInit = false; - - function cacheStateAndFireUrlChange() { - cacheState(); - fireUrlChange(); - } - - // This variable should be used *only* inside the cacheState function. - var lastCachedState = null; - function cacheState() { - // This should be the only place in $browser where `history.state` is read. - cachedState = window.history.state; - cachedState = isUndefined(cachedState) ? null : cachedState; - - // Prevent callbacks fo fire twice if both hashchange & popstate were fired. - if (equals(cachedState, lastCachedState)) { - cachedState = lastCachedState; - } - lastCachedState = cachedState; - } - - function fireUrlChange() { - if (lastBrowserUrl === self.url() && lastHistoryState === cachedState) { - return; - } - - lastBrowserUrl = self.url(); - lastHistoryState = cachedState; - forEach(urlChangeListeners, function(listener) { - listener(self.url(), cachedState); - }); - } - - /** - * @name $browser#onUrlChange - * - * @description - * Register callback function that will be called, when url changes. - * - * It's only called when the url is changed from outside of angular: - * - user types different url into address bar - * - user clicks on history (forward/back) button - * - user clicks on a link - * - * It's not called when url is changed by $browser.url() method - * - * The listener gets called with new url as parameter. - * - * NOTE: this api is intended for use only by the $location service. Please use the - * {@link ng.$location $location service} to monitor url changes in angular apps. - * - * @param {function(string)} listener Listener function to be called when url changes. - * @return {function(string)} Returns the registered listener fn - handy if the fn is anonymous. - */ - self.onUrlChange = function(callback) { - // TODO(vojta): refactor to use node's syntax for events - if (!urlChangeInit) { - // We listen on both (hashchange/popstate) when available, as some browsers (e.g. Opera) - // don't fire popstate when user change the address bar and don't fire hashchange when url - // changed by push/replaceState - - // html5 history api - popstate event - if ($sniffer.history) jqLite(window).on('popstate', cacheStateAndFireUrlChange); - // hashchange event - jqLite(window).on('hashchange', cacheStateAndFireUrlChange); - - urlChangeInit = true; - } - - urlChangeListeners.push(callback); - return callback; - }; - - /** - * Checks whether the url has changed outside of Angular. - * Needs to be exported to be able to check for changes that have been done in sync, - * as hashchange/popstate events fire in async. - */ - self.$$checkUrlChange = fireUrlChange; - - ////////////////////////////////////////////////////////////// - // Misc API - ////////////////////////////////////////////////////////////// - - /** - * @name $browser#baseHref - * - * @description - * Returns current <base href> - * (always relative - without domain) - * - * @returns {string} The current base href - */ - self.baseHref = function() { - var href = baseElement.attr('href'); - return href ? href.replace(/^(https?\:)?\/\/[^\/]*/, '') : ''; - }; - - ////////////////////////////////////////////////////////////// - // Cookies API - ////////////////////////////////////////////////////////////// - var lastCookies = {}; - var lastCookieString = ''; - var cookiePath = self.baseHref(); - - function safeDecodeURIComponent(str) { - try { - return decodeURIComponent(str); - } catch (e) { - return str; - } - } - - /** - * @name $browser#cookies - * - * @param {string=} name Cookie name - * @param {string=} value Cookie value - * - * @description - * The cookies method provides a 'private' low level access to browser cookies. - * It is not meant to be used directly, use the $cookie service instead. - * - * The return values vary depending on the arguments that the method was called with as follows: - * - * - cookies() -> hash of all cookies, this is NOT a copy of the internal state, so do not modify - * it - * - cookies(name, value) -> set name to value, if value is undefined delete the cookie - * - cookies(name) -> the same as (name, undefined) == DELETES (no one calls it right now that - * way) - * - * @returns {Object} Hash of all cookies (if called without any parameter) - */ - self.cookies = function(name, value) { - var cookieLength, cookieArray, cookie, i, index; - - if (name) { - if (value === undefined) { - rawDocument.cookie = encodeURIComponent(name) + "=;path=" + cookiePath + - ";expires=Thu, 01 Jan 1970 00:00:00 GMT"; - } else { - if (isString(value)) { - cookieLength = (rawDocument.cookie = encodeURIComponent(name) + '=' + encodeURIComponent(value) + - ';path=' + cookiePath).length + 1; - - // per http://www.ietf.org/rfc/rfc2109.txt browser must allow at minimum: - // - 300 cookies - // - 20 cookies per unique domain - // - 4096 bytes per cookie - if (cookieLength > 4096) { - $log.warn("Cookie '" + name + - "' possibly not set or overflowed because it was too large (" + - cookieLength + " > 4096 bytes)!"); - } - } - } - } else { - if (rawDocument.cookie !== lastCookieString) { - lastCookieString = rawDocument.cookie; - cookieArray = lastCookieString.split("; "); - lastCookies = {}; - - for (i = 0; i < cookieArray.length; i++) { - cookie = cookieArray[i]; - index = cookie.indexOf('='); - if (index > 0) { //ignore nameless cookies - name = safeDecodeURIComponent(cookie.substring(0, index)); - // the first value that is seen for a cookie is the most - // specific one. values for the same cookie name that - // follow are for less specific paths. - if (lastCookies[name] === undefined) { - lastCookies[name] = safeDecodeURIComponent(cookie.substring(index + 1)); - } - } - } - } - return lastCookies; - } - }; - - - /** - * @name $browser#defer - * @param {function()} fn A function, who's execution should be deferred. - * @param {number=} [delay=0] of milliseconds to defer the function execution. - * @returns {*} DeferId that can be used to cancel the task via `$browser.defer.cancel()`. - * - * @description - * Executes a fn asynchronously via `setTimeout(fn, delay)`. - * - * Unlike when calling `setTimeout` directly, in test this function is mocked and instead of using - * `setTimeout` in tests, the fns are queued in an array, which can be programmatically flushed - * via `$browser.defer.flush()`. - * - */ - self.defer = function(fn, delay) { - var timeoutId; - outstandingRequestCount++; - timeoutId = setTimeout(function() { - delete pendingDeferIds[timeoutId]; - completeOutstandingRequest(fn); - }, delay || 0); - pendingDeferIds[timeoutId] = true; - return timeoutId; - }; - - - /** - * @name $browser#defer.cancel - * - * @description - * Cancels a deferred task identified with `deferId`. - * - * @param {*} deferId Token returned by the `$browser.defer` function. - * @returns {boolean} Returns `true` if the task hasn't executed yet and was successfully - * canceled. - */ - self.defer.cancel = function(deferId) { - if (pendingDeferIds[deferId]) { - delete pendingDeferIds[deferId]; - clearTimeout(deferId); - completeOutstandingRequest(noop); - return true; - } - return false; - }; - -} - -function $BrowserProvider() { - this.$get = ['$window', '$log', '$sniffer', '$document', - function($window, $log, $sniffer, $document) { - return new Browser($window, $document, $log, $sniffer); - }]; -} - -/** - * @ngdoc service - * @name $cacheFactory - * - * @description - * Factory that constructs {@link $cacheFactory.Cache Cache} objects and gives access to - * them. - * - * ```js - * - * var cache = $cacheFactory('cacheId'); - * expect($cacheFactory.get('cacheId')).toBe(cache); - * expect($cacheFactory.get('noSuchCacheId')).not.toBeDefined(); - * - * cache.put("key", "value"); - * cache.put("another key", "another value"); - * - * // We've specified no options on creation - * expect(cache.info()).toEqual({id: 'cacheId', size: 2}); - * - * ``` - * - * - * @param {string} cacheId Name or id of the newly created cache. - * @param {object=} options Options object that specifies the cache behavior. Properties: - * - * - `{number=}` `capacity` — turns the cache into LRU cache. - * - * @returns {object} Newly created cache object with the following set of methods: - * - * - `{object}` `info()` — Returns id, size, and options of cache. - * - `{{*}}` `put({string} key, {*} value)` — Puts a new key-value pair into the cache and returns - * it. - * - `{{*}}` `get({string} key)` — Returns cached value for `key` or undefined for cache miss. - * - `{void}` `remove({string} key)` — Removes a key-value pair from the cache. - * - `{void}` `removeAll()` — Removes all cached values. - * - `{void}` `destroy()` — Removes references to this cache from $cacheFactory. - * - * @example - <example module="cacheExampleApp"> - <file name="index.html"> - <div ng-controller="CacheController"> - <input ng-model="newCacheKey" placeholder="Key"> - <input ng-model="newCacheValue" placeholder="Value"> - <button ng-click="put(newCacheKey, newCacheValue)">Cache</button> - - <p ng-if="keys.length">Cached Values</p> - <div ng-repeat="key in keys"> - <span ng-bind="key"></span> - <span>: </span> - <b ng-bind="cache.get(key)"></b> - </div> - - <p>Cache Info</p> - <div ng-repeat="(key, value) in cache.info()"> - <span ng-bind="key"></span> - <span>: </span> - <b ng-bind="value"></b> - </div> - </div> - </file> - <file name="script.js"> - angular.module('cacheExampleApp', []). - controller('CacheController', ['$scope', '$cacheFactory', function($scope, $cacheFactory) { - $scope.keys = []; - $scope.cache = $cacheFactory('cacheId'); - $scope.put = function(key, value) { - if ($scope.cache.get(key) === undefined) { - $scope.keys.push(key); - } - $scope.cache.put(key, value === undefined ? null : value); - }; - }]); - </file> - <file name="style.css"> - p { - margin: 10px 0 3px; - } - </file> - </example> - */ -function $CacheFactoryProvider() { - - this.$get = function() { - var caches = {}; - - function cacheFactory(cacheId, options) { - if (cacheId in caches) { - throw minErr('$cacheFactory')('iid', "CacheId '{0}' is already taken!", cacheId); - } - - var size = 0, - stats = extend({}, options, {id: cacheId}), - data = {}, - capacity = (options && options.capacity) || Number.MAX_VALUE, - lruHash = {}, - freshEnd = null, - staleEnd = null; - - /** - * @ngdoc type - * @name $cacheFactory.Cache - * - * @description - * A cache object used to store and retrieve data, primarily used by - * {@link $http $http} and the {@link ng.directive:script script} directive to cache - * templates and other data. - * - * ```js - * angular.module('superCache') - * .factory('superCache', ['$cacheFactory', function($cacheFactory) { - * return $cacheFactory('super-cache'); - * }]); - * ``` - * - * Example test: - * - * ```js - * it('should behave like a cache', inject(function(superCache) { - * superCache.put('key', 'value'); - * superCache.put('another key', 'another value'); - * - * expect(superCache.info()).toEqual({ - * id: 'super-cache', - * size: 2 - * }); - * - * superCache.remove('another key'); - * expect(superCache.get('another key')).toBeUndefined(); - * - * superCache.removeAll(); - * expect(superCache.info()).toEqual({ - * id: 'super-cache', - * size: 0 - * }); - * })); - * ``` - */ - return caches[cacheId] = { - - /** - * @ngdoc method - * @name $cacheFactory.Cache#put - * @kind function - * - * @description - * Inserts a named entry into the {@link $cacheFactory.Cache Cache} object to be - * retrieved later, and incrementing the size of the cache if the key was not already - * present in the cache. If behaving like an LRU cache, it will also remove stale - * entries from the set. - * - * It will not insert undefined values into the cache. - * - * @param {string} key the key under which the cached data is stored. - * @param {*} value the value to store alongside the key. If it is undefined, the key - * will not be stored. - * @returns {*} the value stored. - */ - put: function(key, value) { - if (capacity < Number.MAX_VALUE) { - var lruEntry = lruHash[key] || (lruHash[key] = {key: key}); - - refresh(lruEntry); - } - - if (isUndefined(value)) return; - if (!(key in data)) size++; - data[key] = value; - - if (size > capacity) { - this.remove(staleEnd.key); - } - - return value; - }, - - /** - * @ngdoc method - * @name $cacheFactory.Cache#get - * @kind function - * - * @description - * Retrieves named data stored in the {@link $cacheFactory.Cache Cache} object. - * - * @param {string} key the key of the data to be retrieved - * @returns {*} the value stored. - */ - get: function(key) { - if (capacity < Number.MAX_VALUE) { - var lruEntry = lruHash[key]; - - if (!lruEntry) return; - - refresh(lruEntry); - } - - return data[key]; - }, - - - /** - * @ngdoc method - * @name $cacheFactory.Cache#remove - * @kind function - * - * @description - * Removes an entry from the {@link $cacheFactory.Cache Cache} object. - * - * @param {string} key the key of the entry to be removed - */ - remove: function(key) { - if (capacity < Number.MAX_VALUE) { - var lruEntry = lruHash[key]; - - if (!lruEntry) return; - - if (lruEntry == freshEnd) freshEnd = lruEntry.p; - if (lruEntry == staleEnd) staleEnd = lruEntry.n; - link(lruEntry.n,lruEntry.p); - - delete lruHash[key]; - } - - delete data[key]; - size--; - }, - - - /** - * @ngdoc method - * @name $cacheFactory.Cache#removeAll - * @kind function - * - * @description - * Clears the cache object of any entries. - */ - removeAll: function() { - data = {}; - size = 0; - lruHash = {}; - freshEnd = staleEnd = null; - }, - - - /** - * @ngdoc method - * @name $cacheFactory.Cache#destroy - * @kind function - * - * @description - * Destroys the {@link $cacheFactory.Cache Cache} object entirely, - * removing it from the {@link $cacheFactory $cacheFactory} set. - */ - destroy: function() { - data = null; - stats = null; - lruHash = null; - delete caches[cacheId]; - }, - - - /** - * @ngdoc method - * @name $cacheFactory.Cache#info - * @kind function - * - * @description - * Retrieve information regarding a particular {@link $cacheFactory.Cache Cache}. - * - * @returns {object} an object with the following properties: - * <ul> - * <li>**id**: the id of the cache instance</li> - * <li>**size**: the number of entries kept in the cache instance</li> - * <li>**...**: any additional properties from the options object when creating the - * cache.</li> - * </ul> - */ - info: function() { - return extend({}, stats, {size: size}); - } - }; - - - /** - * makes the `entry` the freshEnd of the LRU linked list - */ - function refresh(entry) { - if (entry != freshEnd) { - if (!staleEnd) { - staleEnd = entry; - } else if (staleEnd == entry) { - staleEnd = entry.n; - } - - link(entry.n, entry.p); - link(entry, freshEnd); - freshEnd = entry; - freshEnd.n = null; - } - } - - - /** - * bidirectionally links two entries of the LRU linked list - */ - function link(nextEntry, prevEntry) { - if (nextEntry != prevEntry) { - if (nextEntry) nextEntry.p = prevEntry; //p stands for previous, 'prev' didn't minify - if (prevEntry) prevEntry.n = nextEntry; //n stands for next, 'next' didn't minify - } - } - } - - - /** - * @ngdoc method - * @name $cacheFactory#info - * - * @description - * Get information about all the caches that have been created - * - * @returns {Object} - key-value map of `cacheId` to the result of calling `cache#info` - */ - cacheFactory.info = function() { - var info = {}; - forEach(caches, function(cache, cacheId) { - info[cacheId] = cache.info(); - }); - return info; - }; - - - /** - * @ngdoc method - * @name $cacheFactory#get - * - * @description - * Get access to a cache object by the `cacheId` used when it was created. - * - * @param {string} cacheId Name or id of a cache to access. - * @returns {object} Cache object identified by the cacheId or undefined if no such cache. - */ - cacheFactory.get = function(cacheId) { - return caches[cacheId]; - }; - - - return cacheFactory; - }; -} - -/** - * @ngdoc service - * @name $templateCache - * - * @description - * The first time a template is used, it is loaded in the template cache for quick retrieval. You - * can load templates directly into the cache in a `script` tag, or by consuming the - * `$templateCache` service directly. - * - * Adding via the `script` tag: - * - * ```html - * <script type="text/ng-template" id="templateId.html"> - * <p>This is the content of the template</p> - * </script> - * ``` - * - * **Note:** the `script` tag containing the template does not need to be included in the `head` of - * the document, but it must be a descendent of the {@link ng.$rootElement $rootElement} (IE, - * element with ng-app attribute), otherwise the template will be ignored. - * - * Adding via the $templateCache service: - * - * ```js - * var myApp = angular.module('myApp', []); - * myApp.run(function($templateCache) { - * $templateCache.put('templateId.html', 'This is the content of the template'); - * }); - * ``` - * - * To retrieve the template later, simply use it in your HTML: - * ```html - * <div ng-include=" 'templateId.html' "></div> - * ``` - * - * or get it via Javascript: - * ```js - * $templateCache.get('templateId.html') - * ``` - * - * See {@link ng.$cacheFactory $cacheFactory}. - * - */ -function $TemplateCacheProvider() { - this.$get = ['$cacheFactory', function($cacheFactory) { - return $cacheFactory('templates'); - }]; -} - -/* ! VARIABLE/FUNCTION NAMING CONVENTIONS THAT APPLY TO THIS FILE! - * - * DOM-related variables: - * - * - "node" - DOM Node - * - "element" - DOM Element or Node - * - "$node" or "$element" - jqLite-wrapped node or element - * - * - * Compiler related stuff: - * - * - "linkFn" - linking fn of a single directive - * - "nodeLinkFn" - function that aggregates all linking fns for a particular node - * - "childLinkFn" - function that aggregates all linking fns for child nodes of a particular node - * - "compositeLinkFn" - function that aggregates all linking fns for a compilation root (nodeList) - */ - - -/** - * @ngdoc service - * @name $compile - * @kind function - * - * @description - * Compiles an HTML string or DOM into a template and produces a template function, which - * can then be used to link {@link ng.$rootScope.Scope `scope`} and the template together. - * - * The compilation is a process of walking the DOM tree and matching DOM elements to - * {@link ng.$compileProvider#directive directives}. - * - * <div class="alert alert-warning"> - * **Note:** This document is an in-depth reference of all directive options. - * For a gentle introduction to directives with examples of common use cases, - * see the {@link guide/directive directive guide}. - * </div> - * - * ## Comprehensive Directive API - * - * There are many different options for a directive. - * - * The difference resides in the return value of the factory function. - * You can either return a "Directive Definition Object" (see below) that defines the directive properties, - * or just the `postLink` function (all other properties will have the default values). - * - * <div class="alert alert-success"> - * **Best Practice:** It's recommended to use the "directive definition object" form. - * </div> - * - * Here's an example directive declared with a Directive Definition Object: - * - * ```js - * var myModule = angular.module(...); - * - * myModule.directive('directiveName', function factory(injectables) { - * var directiveDefinitionObject = { - * priority: 0, - * template: '<div></div>', // or // function(tElement, tAttrs) { ... }, - * // or - * // templateUrl: 'directive.html', // or // function(tElement, tAttrs) { ... }, - * transclude: false, - * restrict: 'A', - * templateNamespace: 'html', - * scope: false, - * controller: function($scope, $element, $attrs, $transclude, otherInjectables) { ... }, - * controllerAs: 'stringAlias', - * require: 'siblingDirectiveName', // or // ['^parentDirectiveName', '?optionalDirectiveName', '?^optionalParent'], - * compile: function compile(tElement, tAttrs, transclude) { - * return { - * pre: function preLink(scope, iElement, iAttrs, controller) { ... }, - * post: function postLink(scope, iElement, iAttrs, controller) { ... } - * } - * // or - * // return function postLink( ... ) { ... } - * }, - * // or - * // link: { - * // pre: function preLink(scope, iElement, iAttrs, controller) { ... }, - * // post: function postLink(scope, iElement, iAttrs, controller) { ... } - * // } - * // or - * // link: function postLink( ... ) { ... } - * }; - * return directiveDefinitionObject; - * }); - * ``` - * - * <div class="alert alert-warning"> - * **Note:** Any unspecified options will use the default value. You can see the default values below. - * </div> - * - * Therefore the above can be simplified as: - * - * ```js - * var myModule = angular.module(...); - * - * myModule.directive('directiveName', function factory(injectables) { - * var directiveDefinitionObject = { - * link: function postLink(scope, iElement, iAttrs) { ... } - * }; - * return directiveDefinitionObject; - * // or - * // return function postLink(scope, iElement, iAttrs) { ... } - * }); - * ``` - * - * - * - * ### Directive Definition Object - * - * The directive definition object provides instructions to the {@link ng.$compile - * compiler}. The attributes are: - * - * #### `multiElement` - * When this property is set to true, the HTML compiler will collect DOM nodes between - * nodes with the attributes `directive-name-start` and `directive-name-end`, and group them - * together as the directive elements. It is recommended that this feature be used on directives - * which are not strictly behavioural (such as {@link ngClick}), and which - * do not manipulate or replace child nodes (such as {@link ngInclude}). - * - * #### `priority` - * When there are multiple directives defined on a single DOM element, sometimes it - * is necessary to specify the order in which the directives are applied. The `priority` is used - * to sort the directives before their `compile` functions get called. Priority is defined as a - * number. Directives with greater numerical `priority` are compiled first. Pre-link functions - * are also run in priority order, but post-link functions are run in reverse order. The order - * of directives with the same priority is undefined. The default priority is `0`. - * - * #### `terminal` - * If set to true then the current `priority` will be the last set of directives - * which will execute (any directives at the current priority will still execute - * as the order of execution on same `priority` is undefined). Note that expressions - * and other directives used in the directive's template will also be excluded from execution. - * - * #### `scope` - * **If set to `true`,** then a new scope will be created for this directive. If multiple directives on the - * same element request a new scope, only one new scope is created. The new scope rule does not - * apply for the root of the template since the root of the template always gets a new scope. - * - * **If set to `{}` (object hash),** then a new "isolate" scope is created. The 'isolate' scope differs from - * normal scope in that it does not prototypically inherit from the parent scope. This is useful - * when creating reusable components, which should not accidentally read or modify data in the - * parent scope. - * - * The 'isolate' scope takes an object hash which defines a set of local scope properties - * derived from the parent scope. These local properties are useful for aliasing values for - * templates. Locals definition is a hash of local scope property to its source: - * - * * `@` or `@attr` - bind a local scope property to the value of DOM attribute. The result is - * always a string since DOM attributes are strings. If no `attr` name is specified then the - * attribute name is assumed to be the same as the local name. - * Given `<widget my-attr="hello {{name}}">` and widget definition - * of `scope: { localName:'@myAttr' }`, then widget scope property `localName` will reflect - * the interpolated value of `hello {{name}}`. As the `name` attribute changes so will the - * `localName` property on the widget scope. The `name` is read from the parent scope (not - * component scope). - * - * * `=` or `=attr` - set up bi-directional binding between a local scope property and the - * parent scope property of name defined via the value of the `attr` attribute. If no `attr` - * name is specified then the attribute name is assumed to be the same as the local name. - * Given `<widget my-attr="parentModel">` and widget definition of - * `scope: { localModel:'=myAttr' }`, then widget scope property `localModel` will reflect the - * value of `parentModel` on the parent scope. Any changes to `parentModel` will be reflected - * in `localModel` and any changes in `localModel` will reflect in `parentModel`. If the parent - * scope property doesn't exist, it will throw a NON_ASSIGNABLE_MODEL_EXPRESSION exception. You - * can avoid this behavior using `=?` or `=?attr` in order to flag the property as optional. If - * you want to shallow watch for changes (i.e. $watchCollection instead of $watch) you can use - * `=*` or `=*attr` (`=*?` or `=*?attr` if the property is optional). - * - * * `&` or `&attr` - provides a way to execute an expression in the context of the parent scope. - * If no `attr` name is specified then the attribute name is assumed to be the same as the - * local name. Given `<widget my-attr="count = count + value">` and widget definition of - * `scope: { localFn:'&myAttr' }`, then isolate scope property `localFn` will point to - * a function wrapper for the `count = count + value` expression. Often it's desirable to - * pass data from the isolated scope via an expression to the parent scope, this can be - * done by passing a map of local variable names and values into the expression wrapper fn. - * For example, if the expression is `increment(amount)` then we can specify the amount value - * by calling the `localFn` as `localFn({amount: 22})`. - * - * - * #### `bindToController` - * When an isolate scope is used for a component (see above), and `controllerAs` is used, `bindToController: true` will - * allow a component to have its properties bound to the controller, rather than to scope. When the controller - * is instantiated, the initial values of the isolate scope bindings are already available. - * - * #### `controller` - * Controller constructor function. The controller is instantiated before the - * pre-linking phase and it is shared with other directives (see - * `require` attribute). This allows the directives to communicate with each other and augment - * each other's behavior. The controller is injectable (and supports bracket notation) with the following locals: - * - * * `$scope` - Current scope associated with the element - * * `$element` - Current element - * * `$attrs` - Current attributes object for the element - * * `$transclude` - A transclude linking function pre-bound to the correct transclusion scope: - * `function([scope], cloneLinkingFn, futureParentElement)`. - * * `scope`: optional argument to override the scope. - * * `cloneLinkingFn`: optional argument to create clones of the original transcluded content. - * * `futureParentElement`: - * * defines the parent to which the `cloneLinkingFn` will add the cloned elements. - * * default: `$element.parent()` resp. `$element` for `transclude:'element'` resp. `transclude:true`. - * * only needed for transcludes that are allowed to contain non html elements (e.g. SVG elements) - * and when the `cloneLinkinFn` is passed, - * as those elements need to created and cloned in a special way when they are defined outside their - * usual containers (e.g. like `<svg>`). - * * See also the `directive.templateNamespace` property. - * - * - * #### `require` - * Require another directive and inject its controller as the fourth argument to the linking function. The - * `require` takes a string name (or array of strings) of the directive(s) to pass in. If an array is used, the - * injected argument will be an array in corresponding order. If no such directive can be - * found, or if the directive does not have a controller, then an error is raised. The name can be prefixed with: - * - * * (no prefix) - Locate the required controller on the current element. Throw an error if not found. - * * `?` - Attempt to locate the required controller or pass `null` to the `link` fn if not found. - * * `^` - Locate the required controller by searching the element and its parents. Throw an error if not found. - * * `^^` - Locate the required controller by searching the element's parents. Throw an error if not found. - * * `?^` - Attempt to locate the required controller by searching the element and its parents or pass - * `null` to the `link` fn if not found. - * * `?^^` - Attempt to locate the required controller by searching the element's parents, or pass - * `null` to the `link` fn if not found. - * - * - * #### `controllerAs` - * Controller alias at the directive scope. An alias for the controller so it - * can be referenced at the directive template. The directive needs to define a scope for this - * configuration to be used. Useful in the case when directive is used as component. - * - * - * #### `restrict` - * String of subset of `EACM` which restricts the directive to a specific directive - * declaration style. If omitted, the defaults (elements and attributes) are used. - * - * * `E` - Element name (default): `<my-directive></my-directive>` - * * `A` - Attribute (default): `<div my-directive="exp"></div>` - * * `C` - Class: `<div class="my-directive: exp;"></div>` - * * `M` - Comment: `<!-- directive: my-directive exp -->` - * - * - * #### `templateNamespace` - * String representing the document type used by the markup in the template. - * AngularJS needs this information as those elements need to be created and cloned - * in a special way when they are defined outside their usual containers like `<svg>` and `<math>`. - * - * * `html` - All root nodes in the template are HTML. Root nodes may also be - * top-level elements such as `<svg>` or `<math>`. - * * `svg` - The root nodes in the template are SVG elements (excluding `<math>`). - * * `math` - The root nodes in the template are MathML elements (excluding `<svg>`). - * - * If no `templateNamespace` is specified, then the namespace is considered to be `html`. - * - * #### `template` - * HTML markup that may: - * * Replace the contents of the directive's element (default). - * * Replace the directive's element itself (if `replace` is true - DEPRECATED). - * * Wrap the contents of the directive's element (if `transclude` is true). - * - * Value may be: - * - * * A string. For example `<div red-on-hover>{{delete_str}}</div>`. - * * A function which takes two arguments `tElement` and `tAttrs` (described in the `compile` - * function api below) and returns a string value. - * - * - * #### `templateUrl` - * This is similar to `template` but the template is loaded from the specified URL, asynchronously. - * - * Because template loading is asynchronous the compiler will suspend compilation of directives on that element - * for later when the template has been resolved. In the meantime it will continue to compile and link - * sibling and parent elements as though this element had not contained any directives. - * - * The compiler does not suspend the entire compilation to wait for templates to be loaded because this - * would result in the whole app "stalling" until all templates are loaded asynchronously - even in the - * case when only one deeply nested directive has `templateUrl`. - * - * Template loading is asynchronous even if the template has been preloaded into the {@link $templateCache} - * - * You can specify `templateUrl` as a string representing the URL or as a function which takes two - * arguments `tElement` and `tAttrs` (described in the `compile` function api below) and returns - * a string value representing the url. In either case, the template URL is passed through {@link - * $sce#getTrustedResourceUrl $sce.getTrustedResourceUrl}. - * - * - * #### `replace` ([*DEPRECATED*!], will be removed in next major release - i.e. v2.0) - * specify what the template should replace. Defaults to `false`. - * - * * `true` - the template will replace the directive's element. - * * `false` - the template will replace the contents of the directive's element. - * - * The replacement process migrates all of the attributes / classes from the old element to the new - * one. See the {@link guide/directive#template-expanding-directive - * Directives Guide} for an example. - * - * There are very few scenarios where element replacement is required for the application function, - * the main one being reusable custom components that are used within SVG contexts - * (because SVG doesn't work with custom elements in the DOM tree). - * - * #### `transclude` - * Extract the contents of the element where the directive appears and make it available to the directive. - * The contents are compiled and provided to the directive as a **transclusion function**. See the - * {@link $compile#transclusion Transclusion} section below. - * - * There are two kinds of transclusion depending upon whether you want to transclude just the contents of the - * directive's element or the entire element: - * - * * `true` - transclude the content (i.e. the child nodes) of the directive's element. - * * `'element'` - transclude the whole of the directive's element including any directives on this - * element that defined at a lower priority than this directive. When used, the `template` - * property is ignored. - * - * - * #### `compile` - * - * ```js - * function compile(tElement, tAttrs, transclude) { ... } - * ``` - * - * The compile function deals with transforming the template DOM. Since most directives do not do - * template transformation, it is not used often. The compile function takes the following arguments: - * - * * `tElement` - template element - The element where the directive has been declared. It is - * safe to do template transformation on the element and child elements only. - * - * * `tAttrs` - template attributes - Normalized list of attributes declared on this element shared - * between all directive compile functions. - * - * * `transclude` - [*DEPRECATED*!] A transclude linking function: `function(scope, cloneLinkingFn)` - * - * <div class="alert alert-warning"> - * **Note:** The template instance and the link instance may be different objects if the template has - * been cloned. For this reason it is **not** safe to do anything other than DOM transformations that - * apply to all cloned DOM nodes within the compile function. Specifically, DOM listener registration - * should be done in a linking function rather than in a compile function. - * </div> - - * <div class="alert alert-warning"> - * **Note:** The compile function cannot handle directives that recursively use themselves in their - * own templates or compile functions. Compiling these directives results in an infinite loop and a - * stack overflow errors. - * - * This can be avoided by manually using $compile in the postLink function to imperatively compile - * a directive's template instead of relying on automatic template compilation via `template` or - * `templateUrl` declaration or manual compilation inside the compile function. - * </div> - * - * <div class="alert alert-error"> - * **Note:** The `transclude` function that is passed to the compile function is deprecated, as it - * e.g. does not know about the right outer scope. Please use the transclude function that is passed - * to the link function instead. - * </div> - - * A compile function can have a return value which can be either a function or an object. - * - * * returning a (post-link) function - is equivalent to registering the linking function via the - * `link` property of the config object when the compile function is empty. - * - * * returning an object with function(s) registered via `pre` and `post` properties - allows you to - * control when a linking function should be called during the linking phase. See info about - * pre-linking and post-linking functions below. - * - * - * #### `link` - * This property is used only if the `compile` property is not defined. - * - * ```js - * function link(scope, iElement, iAttrs, controller, transcludeFn) { ... } - * ``` - * - * The link function is responsible for registering DOM listeners as well as updating the DOM. It is - * executed after the template has been cloned. This is where most of the directive logic will be - * put. - * - * * `scope` - {@link ng.$rootScope.Scope Scope} - The scope to be used by the - * directive for registering {@link ng.$rootScope.Scope#$watch watches}. - * - * * `iElement` - instance element - The element where the directive is to be used. It is safe to - * manipulate the children of the element only in `postLink` function since the children have - * already been linked. - * - * * `iAttrs` - instance attributes - Normalized list of attributes declared on this element shared - * between all directive linking functions. - * - * * `controller` - a controller instance - A controller instance if at least one directive on the - * element defines a controller. The controller is shared among all the directives, which allows - * the directives to use the controllers as a communication channel. - * - * * `transcludeFn` - A transclude linking function pre-bound to the correct transclusion scope. - * This is the same as the `$transclude` - * parameter of directive controllers, see there for details. - * `function([scope], cloneLinkingFn, futureParentElement)`. - * - * #### Pre-linking function - * - * Executed before the child elements are linked. Not safe to do DOM transformation since the - * compiler linking function will fail to locate the correct elements for linking. - * - * #### Post-linking function - * - * Executed after the child elements are linked. - * - * Note that child elements that contain `templateUrl` directives will not have been compiled - * and linked since they are waiting for their template to load asynchronously and their own - * compilation and linking has been suspended until that occurs. - * - * It is safe to do DOM transformation in the post-linking function on elements that are not waiting - * for their async templates to be resolved. - * - * - * ### Transclusion - * - * Transclusion is the process of extracting a collection of DOM element from one part of the DOM and - * copying them to another part of the DOM, while maintaining their connection to the original AngularJS - * scope from where they were taken. - * - * Transclusion is used (often with {@link ngTransclude}) to insert the - * original contents of a directive's element into a specified place in the template of the directive. - * The benefit of transclusion, over simply moving the DOM elements manually, is that the transcluded - * content has access to the properties on the scope from which it was taken, even if the directive - * has isolated scope. - * See the {@link guide/directive#creating-a-directive-that-wraps-other-elements Directives Guide}. - * - * This makes it possible for the widget to have private state for its template, while the transcluded - * content has access to its originating scope. - * - * <div class="alert alert-warning"> - * **Note:** When testing an element transclude directive you must not place the directive at the root of the - * DOM fragment that is being compiled. See {@link guide/unit-testing#testing-transclusion-directives - * Testing Transclusion Directives}. - * </div> - * - * #### Transclusion Functions - * - * When a directive requests transclusion, the compiler extracts its contents and provides a **transclusion - * function** to the directive's `link` function and `controller`. This transclusion function is a special - * **linking function** that will return the compiled contents linked to a new transclusion scope. - * - * <div class="alert alert-info"> - * If you are just using {@link ngTransclude} then you don't need to worry about this function, since - * ngTransclude will deal with it for us. - * </div> - * - * If you want to manually control the insertion and removal of the transcluded content in your directive - * then you must use this transclude function. When you call a transclude function it returns a a jqLite/JQuery - * object that contains the compiled DOM, which is linked to the correct transclusion scope. - * - * When you call a transclusion function you can pass in a **clone attach function**. This function accepts - * two parameters, `function(clone, scope) { ... }`, where the `clone` is a fresh compiled copy of your transcluded - * content and the `scope` is the newly created transclusion scope, to which the clone is bound. - * - * <div class="alert alert-info"> - * **Best Practice**: Always provide a `cloneFn` (clone attach function) when you call a translude function - * since you then get a fresh clone of the original DOM and also have access to the new transclusion scope. - * </div> - * - * It is normal practice to attach your transcluded content (`clone`) to the DOM inside your **clone - * attach function**: - * - * ```js - * var transcludedContent, transclusionScope; - * - * $transclude(function(clone, scope) { - * element.append(clone); - * transcludedContent = clone; - * transclusionScope = scope; - * }); - * ``` - * - * Later, if you want to remove the transcluded content from your DOM then you should also destroy the - * associated transclusion scope: - * - * ```js - * transcludedContent.remove(); - * transclusionScope.$destroy(); - * ``` - * - * <div class="alert alert-info"> - * **Best Practice**: if you intend to add and remove transcluded content manually in your directive - * (by calling the transclude function to get the DOM and and calling `element.remove()` to remove it), - * then you are also responsible for calling `$destroy` on the transclusion scope. - * </div> - * - * The built-in DOM manipulation directives, such as {@link ngIf}, {@link ngSwitch} and {@link ngRepeat} - * automatically destroy their transluded clones as necessary so you do not need to worry about this if - * you are simply using {@link ngTransclude} to inject the transclusion into your directive. - * - * - * #### Transclusion Scopes - * - * When you call a transclude function it returns a DOM fragment that is pre-bound to a **transclusion - * scope**. This scope is special, in that it is a child of the directive's scope (and so gets destroyed - * when the directive's scope gets destroyed) but it inherits the properties of the scope from which it - * was taken. - * - * For example consider a directive that uses transclusion and isolated scope. The DOM hierarchy might look - * like this: - * - * ```html - * <div ng-app> - * <div isolate> - * <div transclusion> - * </div> - * </div> - * </div> - * ``` - * - * The `$parent` scope hierarchy will look like this: - * - * ``` - * - $rootScope - * - isolate - * - transclusion - * ``` - * - * but the scopes will inherit prototypically from different scopes to their `$parent`. - * - * ``` - * - $rootScope - * - transclusion - * - isolate - * ``` - * - * - * ### Attributes - * - * The {@link ng.$compile.directive.Attributes Attributes} object - passed as a parameter in the - * `link()` or `compile()` functions. It has a variety of uses. - * - * accessing *Normalized attribute names:* - * Directives like 'ngBind' can be expressed in many ways: 'ng:bind', `data-ng-bind`, or 'x-ng-bind'. - * the attributes object allows for normalized access to - * the attributes. - * - * * *Directive inter-communication:* All directives share the same instance of the attributes - * object which allows the directives to use the attributes object as inter directive - * communication. - * - * * *Supports interpolation:* Interpolation attributes are assigned to the attribute object - * allowing other directives to read the interpolated value. - * - * * *Observing interpolated attributes:* Use `$observe` to observe the value changes of attributes - * that contain interpolation (e.g. `src="{{bar}}"`). Not only is this very efficient but it's also - * the only way to easily get the actual value because during the linking phase the interpolation - * hasn't been evaluated yet and so the value is at this time set to `undefined`. - * - * ```js - * function linkingFn(scope, elm, attrs, ctrl) { - * // get the attribute value - * console.log(attrs.ngModel); - * - * // change the attribute - * attrs.$set('ngModel', 'new value'); - * - * // observe changes to interpolated attribute - * attrs.$observe('ngModel', function(value) { - * console.log('ngModel has changed value to ' + value); - * }); - * } - * ``` - * - * ## Example - * - * <div class="alert alert-warning"> - * **Note**: Typically directives are registered with `module.directive`. The example below is - * to illustrate how `$compile` works. - * </div> - * - <example module="compileExample"> - <file name="index.html"> - <script> - angular.module('compileExample', [], function($compileProvider) { - // configure new 'compile' directive by passing a directive - // factory function. The factory function injects the '$compile' - $compileProvider.directive('compile', function($compile) { - // directive factory creates a link function - return function(scope, element, attrs) { - scope.$watch( - function(scope) { - // watch the 'compile' expression for changes - return scope.$eval(attrs.compile); - }, - function(value) { - // when the 'compile' expression changes - // assign it into the current DOM - element.html(value); - - // compile the new DOM and link it to the current - // scope. - // NOTE: we only compile .childNodes so that - // we don't get into infinite loop compiling ourselves - $compile(element.contents())(scope); - } - ); - }; - }); - }) - .controller('GreeterController', ['$scope', function($scope) { - $scope.name = 'Angular'; - $scope.html = 'Hello {{name}}'; - }]); - </script> - <div ng-controller="GreeterController"> - <input ng-model="name"> <br> - <textarea ng-model="html"></textarea> <br> - <div compile="html"></div> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should auto compile', function() { - var textarea = $('textarea'); - var output = $('div[compile]'); - // The initial state reads 'Hello Angular'. - expect(output.getText()).toBe('Hello Angular'); - textarea.clear(); - textarea.sendKeys('{{name}}!'); - expect(output.getText()).toBe('Angular!'); - }); - </file> - </example> - - * - * - * @param {string|DOMElement} element Element or HTML string to compile into a template function. - * @param {function(angular.Scope, cloneAttachFn=)} transclude function available to directives - DEPRECATED. - * - * <div class="alert alert-error"> - * **Note:** Passing a `transclude` function to the $compile function is deprecated, as it - * e.g. will not use the right outer scope. Please pass the transclude function as a - * `parentBoundTranscludeFn` to the link function instead. - * </div> - * - * @param {number} maxPriority only apply directives lower than given priority (Only effects the - * root element(s), not their children) - * @returns {function(scope, cloneAttachFn=, options=)} a link function which is used to bind template - * (a DOM element/tree) to a scope. Where: - * - * * `scope` - A {@link ng.$rootScope.Scope Scope} to bind to. - * * `cloneAttachFn` - If `cloneAttachFn` is provided, then the link function will clone the - * `template` and call the `cloneAttachFn` function allowing the caller to attach the - * cloned elements to the DOM document at the appropriate place. The `cloneAttachFn` is - * called as: <br> `cloneAttachFn(clonedElement, scope)` where: - * - * * `clonedElement` - is a clone of the original `element` passed into the compiler. - * * `scope` - is the current scope with which the linking function is working with. - * - * * `options` - An optional object hash with linking options. If `options` is provided, then the following - * keys may be used to control linking behavior: - * - * * `parentBoundTranscludeFn` - the transclude function made available to - * directives; if given, it will be passed through to the link functions of - * directives found in `element` during compilation. - * * `transcludeControllers` - an object hash with keys that map controller names - * to controller instances; if given, it will make the controllers - * available to directives. - * * `futureParentElement` - defines the parent to which the `cloneAttachFn` will add - * the cloned elements; only needed for transcludes that are allowed to contain non html - * elements (e.g. SVG elements). See also the directive.controller property. - * - * Calling the linking function returns the element of the template. It is either the original - * element passed in, or the clone of the element if the `cloneAttachFn` is provided. - * - * After linking the view is not updated until after a call to $digest which typically is done by - * Angular automatically. - * - * If you need access to the bound view, there are two ways to do it: - * - * - If you are not asking the linking function to clone the template, create the DOM element(s) - * before you send them to the compiler and keep this reference around. - * ```js - * var element = $compile('<p>{{total}}</p>')(scope); - * ``` - * - * - if on the other hand, you need the element to be cloned, the view reference from the original - * example would not point to the clone, but rather to the original template that was cloned. In - * this case, you can access the clone via the cloneAttachFn: - * ```js - * var templateElement = angular.element('<p>{{total}}</p>'), - * scope = ....; - * - * var clonedElement = $compile(templateElement)(scope, function(clonedElement, scope) { - * //attach the clone to DOM document at the right place - * }); - * - * //now we have reference to the cloned DOM via `clonedElement` - * ``` - * - * - * For information on how the compiler works, see the - * {@link guide/compiler Angular HTML Compiler} section of the Developer Guide. - */ - -var $compileMinErr = minErr('$compile'); - -/** - * @ngdoc provider - * @name $compileProvider - * - * @description - */ -$CompileProvider.$inject = ['$provide', '$$sanitizeUriProvider']; -function $CompileProvider($provide, $$sanitizeUriProvider) { - var hasDirectives = {}, - Suffix = 'Directive', - COMMENT_DIRECTIVE_REGEXP = /^\s*directive\:\s*([\w\-]+)\s+(.*)$/, - CLASS_DIRECTIVE_REGEXP = /(([\w\-]+)(?:\:([^;]+))?;?)/, - ALL_OR_NOTHING_ATTRS = makeMap('ngSrc,ngSrcset,src,srcset'), - REQUIRE_PREFIX_REGEXP = /^(?:(\^\^?)?(\?)?(\^\^?)?)?/; - - // Ref: http://developers.whatwg.org/webappapis.html#event-handler-idl-attributes - // The assumption is that future DOM event attribute names will begin with - // 'on' and be composed of only English letters. - var EVENT_HANDLER_ATTR_REGEXP = /^(on[a-z]+|formaction)$/; - - function parseIsolateBindings(scope, directiveName) { - var LOCAL_REGEXP = /^\s*([@&]|=(\*?))(\??)\s*(\w*)\s*$/; - - var bindings = {}; - - forEach(scope, function(definition, scopeName) { - var match = definition.match(LOCAL_REGEXP); - - if (!match) { - throw $compileMinErr('iscp', - "Invalid isolate scope definition for directive '{0}'." + - " Definition: {... {1}: '{2}' ...}", - directiveName, scopeName, definition); - } - - bindings[scopeName] = { - mode: match[1][0], - collection: match[2] === '*', - optional: match[3] === '?', - attrName: match[4] || scopeName - }; - }); - - return bindings; - } - - /** - * @ngdoc method - * @name $compileProvider#directive - * @kind function - * - * @description - * Register a new directive with the compiler. - * - * @param {string|Object} name Name of the directive in camel-case (i.e. <code>ngBind</code> which - * will match as <code>ng-bind</code>), or an object map of directives where the keys are the - * names and the values are the factories. - * @param {Function|Array} directiveFactory An injectable directive factory function. See - * {@link guide/directive} for more info. - * @returns {ng.$compileProvider} Self for chaining. - */ - this.directive = function registerDirective(name, directiveFactory) { - assertNotHasOwnProperty(name, 'directive'); - if (isString(name)) { - assertArg(directiveFactory, 'directiveFactory'); - if (!hasDirectives.hasOwnProperty(name)) { - hasDirectives[name] = []; - $provide.factory(name + Suffix, ['$injector', '$exceptionHandler', - function($injector, $exceptionHandler) { - var directives = []; - forEach(hasDirectives[name], function(directiveFactory, index) { - try { - var directive = $injector.invoke(directiveFactory); - if (isFunction(directive)) { - directive = { compile: valueFn(directive) }; - } else if (!directive.compile && directive.link) { - directive.compile = valueFn(directive.link); - } - directive.priority = directive.priority || 0; - directive.index = index; - directive.name = directive.name || name; - directive.require = directive.require || (directive.controller && directive.name); - directive.restrict = directive.restrict || 'EA'; - if (isObject(directive.scope)) { - directive.$$isolateBindings = parseIsolateBindings(directive.scope, directive.name); - } - directives.push(directive); - } catch (e) { - $exceptionHandler(e); - } - }); - return directives; - }]); - } - hasDirectives[name].push(directiveFactory); - } else { - forEach(name, reverseParams(registerDirective)); - } - return this; - }; - - - /** - * @ngdoc method - * @name $compileProvider#aHrefSanitizationWhitelist - * @kind function - * - * @description - * Retrieves or overrides the default regular expression that is used for whitelisting of safe - * urls during a[href] sanitization. - * - * The sanitization is a security measure aimed at preventing XSS attacks via html links. - * - * Any url about to be assigned to a[href] via data-binding is first normalized and turned into - * an absolute url. Afterwards, the url is matched against the `aHrefSanitizationWhitelist` - * regular expression. If a match is found, the original url is written into the dom. Otherwise, - * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM. - * - * @param {RegExp=} regexp New regexp to whitelist urls with. - * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for - * chaining otherwise. - */ - this.aHrefSanitizationWhitelist = function(regexp) { - if (isDefined(regexp)) { - $$sanitizeUriProvider.aHrefSanitizationWhitelist(regexp); - return this; - } else { - return $$sanitizeUriProvider.aHrefSanitizationWhitelist(); - } - }; - - - /** - * @ngdoc method - * @name $compileProvider#imgSrcSanitizationWhitelist - * @kind function - * - * @description - * Retrieves or overrides the default regular expression that is used for whitelisting of safe - * urls during img[src] sanitization. - * - * The sanitization is a security measure aimed at prevent XSS attacks via html links. - * - * Any url about to be assigned to img[src] via data-binding is first normalized and turned into - * an absolute url. Afterwards, the url is matched against the `imgSrcSanitizationWhitelist` - * regular expression. If a match is found, the original url is written into the dom. Otherwise, - * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM. - * - * @param {RegExp=} regexp New regexp to whitelist urls with. - * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for - * chaining otherwise. - */ - this.imgSrcSanitizationWhitelist = function(regexp) { - if (isDefined(regexp)) { - $$sanitizeUriProvider.imgSrcSanitizationWhitelist(regexp); - return this; - } else { - return $$sanitizeUriProvider.imgSrcSanitizationWhitelist(); - } - }; - - /** - * @ngdoc method - * @name $compileProvider#debugInfoEnabled - * - * @param {boolean=} enabled update the debugInfoEnabled state if provided, otherwise just return the - * current debugInfoEnabled state - * @returns {*} current value if used as getter or itself (chaining) if used as setter - * - * @kind function - * - * @description - * Call this method to enable/disable various debug runtime information in the compiler such as adding - * binding information and a reference to the current scope on to DOM elements. - * If enabled, the compiler will add the following to DOM elements that have been bound to the scope - * * `ng-binding` CSS class - * * `$binding` data property containing an array of the binding expressions - * - * You may want to disable this in production for a significant performance boost. See - * {@link guide/production#disabling-debug-data Disabling Debug Data} for more. - * - * The default value is true. - */ - var debugInfoEnabled = true; - this.debugInfoEnabled = function(enabled) { - if (isDefined(enabled)) { - debugInfoEnabled = enabled; - return this; - } - return debugInfoEnabled; - }; - - this.$get = [ - '$injector', '$interpolate', '$exceptionHandler', '$templateRequest', '$parse', - '$controller', '$rootScope', '$document', '$sce', '$animate', '$$sanitizeUri', - function($injector, $interpolate, $exceptionHandler, $templateRequest, $parse, - $controller, $rootScope, $document, $sce, $animate, $$sanitizeUri) { - - var Attributes = function(element, attributesToCopy) { - if (attributesToCopy) { - var keys = Object.keys(attributesToCopy); - var i, l, key; - - for (i = 0, l = keys.length; i < l; i++) { - key = keys[i]; - this[key] = attributesToCopy[key]; - } - } else { - this.$attr = {}; - } - - this.$$element = element; - }; - - Attributes.prototype = { - /** - * @ngdoc method - * @name $compile.directive.Attributes#$normalize - * @kind function - * - * @description - * Converts an attribute name (e.g. dash/colon/underscore-delimited string, optionally prefixed with `x-` or - * `data-`) to its normalized, camelCase form. - * - * Also there is special case for Moz prefix starting with upper case letter. - * - * For further information check out the guide on {@link guide/directive#matching-directives Matching Directives} - * - * @param {string} name Name to normalize - */ - $normalize: directiveNormalize, - - - /** - * @ngdoc method - * @name $compile.directive.Attributes#$addClass - * @kind function - * - * @description - * Adds the CSS class value specified by the classVal parameter to the element. If animations - * are enabled then an animation will be triggered for the class addition. - * - * @param {string} classVal The className value that will be added to the element - */ - $addClass: function(classVal) { - if (classVal && classVal.length > 0) { - $animate.addClass(this.$$element, classVal); - } - }, - - /** - * @ngdoc method - * @name $compile.directive.Attributes#$removeClass - * @kind function - * - * @description - * Removes the CSS class value specified by the classVal parameter from the element. If - * animations are enabled then an animation will be triggered for the class removal. - * - * @param {string} classVal The className value that will be removed from the element - */ - $removeClass: function(classVal) { - if (classVal && classVal.length > 0) { - $animate.removeClass(this.$$element, classVal); - } - }, - - /** - * @ngdoc method - * @name $compile.directive.Attributes#$updateClass - * @kind function - * - * @description - * Adds and removes the appropriate CSS class values to the element based on the difference - * between the new and old CSS class values (specified as newClasses and oldClasses). - * - * @param {string} newClasses The current CSS className value - * @param {string} oldClasses The former CSS className value - */ - $updateClass: function(newClasses, oldClasses) { - var toAdd = tokenDifference(newClasses, oldClasses); - if (toAdd && toAdd.length) { - $animate.addClass(this.$$element, toAdd); - } - - var toRemove = tokenDifference(oldClasses, newClasses); - if (toRemove && toRemove.length) { - $animate.removeClass(this.$$element, toRemove); - } - }, - - /** - * Set a normalized attribute on the element in a way such that all directives - * can share the attribute. This function properly handles boolean attributes. - * @param {string} key Normalized key. (ie ngAttribute) - * @param {string|boolean} value The value to set. If `null` attribute will be deleted. - * @param {boolean=} writeAttr If false, does not write the value to DOM element attribute. - * Defaults to true. - * @param {string=} attrName Optional none normalized name. Defaults to key. - */ - $set: function(key, value, writeAttr, attrName) { - // TODO: decide whether or not to throw an error if "class" - //is set through this function since it may cause $updateClass to - //become unstable. - - var node = this.$$element[0], - booleanKey = getBooleanAttrName(node, key), - aliasedKey = getAliasedAttrName(node, key), - observer = key, - nodeName; - - if (booleanKey) { - this.$$element.prop(key, value); - attrName = booleanKey; - } else if (aliasedKey) { - this[aliasedKey] = value; - observer = aliasedKey; - } - - this[key] = value; - - // translate normalized key to actual key - if (attrName) { - this.$attr[key] = attrName; - } else { - attrName = this.$attr[key]; - if (!attrName) { - this.$attr[key] = attrName = snake_case(key, '-'); - } - } - - nodeName = nodeName_(this.$$element); - - if ((nodeName === 'a' && key === 'href') || - (nodeName === 'img' && key === 'src')) { - // sanitize a[href] and img[src] values - this[key] = value = $$sanitizeUri(value, key === 'src'); - } else if (nodeName === 'img' && key === 'srcset') { - // sanitize img[srcset] values - var result = ""; - - // first check if there are spaces because it's not the same pattern - var trimmedSrcset = trim(value); - // ( 999x ,| 999w ,| ,|, ) - var srcPattern = /(\s+\d+x\s*,|\s+\d+w\s*,|\s+,|,\s+)/; - var pattern = /\s/.test(trimmedSrcset) ? srcPattern : /(,)/; - - // split srcset into tuple of uri and descriptor except for the last item - var rawUris = trimmedSrcset.split(pattern); - - // for each tuples - var nbrUrisWith2parts = Math.floor(rawUris.length / 2); - for (var i = 0; i < nbrUrisWith2parts; i++) { - var innerIdx = i * 2; - // sanitize the uri - result += $$sanitizeUri(trim(rawUris[innerIdx]), true); - // add the descriptor - result += (" " + trim(rawUris[innerIdx + 1])); - } - - // split the last item into uri and descriptor - var lastTuple = trim(rawUris[i * 2]).split(/\s/); - - // sanitize the last uri - result += $$sanitizeUri(trim(lastTuple[0]), true); - - // and add the last descriptor if any - if (lastTuple.length === 2) { - result += (" " + trim(lastTuple[1])); - } - this[key] = value = result; - } - - if (writeAttr !== false) { - if (value === null || value === undefined) { - this.$$element.removeAttr(attrName); - } else { - this.$$element.attr(attrName, value); - } - } - - // fire observers - var $$observers = this.$$observers; - $$observers && forEach($$observers[observer], function(fn) { - try { - fn(value); - } catch (e) { - $exceptionHandler(e); - } - }); - }, - - - /** - * @ngdoc method - * @name $compile.directive.Attributes#$observe - * @kind function - * - * @description - * Observes an interpolated attribute. - * - * The observer function will be invoked once during the next `$digest` following - * compilation. The observer is then invoked whenever the interpolated value - * changes. - * - * @param {string} key Normalized key. (ie ngAttribute) . - * @param {function(interpolatedValue)} fn Function that will be called whenever - the interpolated value of the attribute changes. - * See the {@link guide/directive#text-and-attribute-bindings Directives} guide for more info. - * @returns {function()} Returns a deregistration function for this observer. - */ - $observe: function(key, fn) { - var attrs = this, - $$observers = (attrs.$$observers || (attrs.$$observers = createMap())), - listeners = ($$observers[key] || ($$observers[key] = [])); - - listeners.push(fn); - $rootScope.$evalAsync(function() { - if (!listeners.$$inter && attrs.hasOwnProperty(key)) { - // no one registered attribute interpolation function, so lets call it manually - fn(attrs[key]); - } - }); - - return function() { - arrayRemove(listeners, fn); - }; - } - }; - - - function safeAddClass($element, className) { - try { - $element.addClass(className); - } catch (e) { - // ignore, since it means that we are trying to set class on - // SVG element, where class name is read-only. - } - } - - - var startSymbol = $interpolate.startSymbol(), - endSymbol = $interpolate.endSymbol(), - denormalizeTemplate = (startSymbol == '{{' || endSymbol == '}}') - ? identity - : function denormalizeTemplate(template) { - return template.replace(/\{\{/g, startSymbol).replace(/}}/g, endSymbol); - }, - NG_ATTR_BINDING = /^ngAttr[A-Z]/; - - compile.$$addBindingInfo = debugInfoEnabled ? function $$addBindingInfo($element, binding) { - var bindings = $element.data('$binding') || []; - - if (isArray(binding)) { - bindings = bindings.concat(binding); - } else { - bindings.push(binding); - } - - $element.data('$binding', bindings); - } : noop; - - compile.$$addBindingClass = debugInfoEnabled ? function $$addBindingClass($element) { - safeAddClass($element, 'ng-binding'); - } : noop; - - compile.$$addScopeInfo = debugInfoEnabled ? function $$addScopeInfo($element, scope, isolated, noTemplate) { - var dataName = isolated ? (noTemplate ? '$isolateScopeNoTemplate' : '$isolateScope') : '$scope'; - $element.data(dataName, scope); - } : noop; - - compile.$$addScopeClass = debugInfoEnabled ? function $$addScopeClass($element, isolated) { - safeAddClass($element, isolated ? 'ng-isolate-scope' : 'ng-scope'); - } : noop; - - return compile; - - //================================ - - function compile($compileNodes, transcludeFn, maxPriority, ignoreDirective, - previousCompileContext) { - if (!($compileNodes instanceof jqLite)) { - // jquery always rewraps, whereas we need to preserve the original selector so that we can - // modify it. - $compileNodes = jqLite($compileNodes); - } - // We can not compile top level text elements since text nodes can be merged and we will - // not be able to attach scope data to them, so we will wrap them in <span> - forEach($compileNodes, function(node, index) { - if (node.nodeType == NODE_TYPE_TEXT && node.nodeValue.match(/\S+/) /* non-empty */ ) { - $compileNodes[index] = jqLite(node).wrap('<span></span>').parent()[0]; - } - }); - var compositeLinkFn = - compileNodes($compileNodes, transcludeFn, $compileNodes, - maxPriority, ignoreDirective, previousCompileContext); - compile.$$addScopeClass($compileNodes); - var namespace = null; - return function publicLinkFn(scope, cloneConnectFn, options) { - assertArg(scope, 'scope'); - - options = options || {}; - var parentBoundTranscludeFn = options.parentBoundTranscludeFn, - transcludeControllers = options.transcludeControllers, - futureParentElement = options.futureParentElement; - - // When `parentBoundTranscludeFn` is passed, it is a - // `controllersBoundTransclude` function (it was previously passed - // as `transclude` to directive.link) so we must unwrap it to get - // its `boundTranscludeFn` - if (parentBoundTranscludeFn && parentBoundTranscludeFn.$$boundTransclude) { - parentBoundTranscludeFn = parentBoundTranscludeFn.$$boundTransclude; - } - - if (!namespace) { - namespace = detectNamespaceForChildElements(futureParentElement); - } - var $linkNode; - if (namespace !== 'html') { - // When using a directive with replace:true and templateUrl the $compileNodes - // (or a child element inside of them) - // might change, so we need to recreate the namespace adapted compileNodes - // for call to the link function. - // Note: This will already clone the nodes... - $linkNode = jqLite( - wrapTemplate(namespace, jqLite('<div>').append($compileNodes).html()) - ); - } else if (cloneConnectFn) { - // important!!: we must call our jqLite.clone() since the jQuery one is trying to be smart - // and sometimes changes the structure of the DOM. - $linkNode = JQLitePrototype.clone.call($compileNodes); - } else { - $linkNode = $compileNodes; - } - - if (transcludeControllers) { - for (var controllerName in transcludeControllers) { - $linkNode.data('$' + controllerName + 'Controller', transcludeControllers[controllerName].instance); - } - } - - compile.$$addScopeInfo($linkNode, scope); - - if (cloneConnectFn) cloneConnectFn($linkNode, scope); - if (compositeLinkFn) compositeLinkFn(scope, $linkNode, $linkNode, parentBoundTranscludeFn); - return $linkNode; - }; - } - - function detectNamespaceForChildElements(parentElement) { - // TODO: Make this detect MathML as well... - var node = parentElement && parentElement[0]; - if (!node) { - return 'html'; - } else { - return nodeName_(node) !== 'foreignobject' && node.toString().match(/SVG/) ? 'svg' : 'html'; - } - } - - /** - * Compile function matches each node in nodeList against the directives. Once all directives - * for a particular node are collected their compile functions are executed. The compile - * functions return values - the linking functions - are combined into a composite linking - * function, which is the a linking function for the node. - * - * @param {NodeList} nodeList an array of nodes or NodeList to compile - * @param {function(angular.Scope, cloneAttachFn=)} transcludeFn A linking function, where the - * scope argument is auto-generated to the new child of the transcluded parent scope. - * @param {DOMElement=} $rootElement If the nodeList is the root of the compilation tree then - * the rootElement must be set the jqLite collection of the compile root. This is - * needed so that the jqLite collection items can be replaced with widgets. - * @param {number=} maxPriority Max directive priority. - * @returns {Function} A composite linking function of all of the matched directives or null. - */ - function compileNodes(nodeList, transcludeFn, $rootElement, maxPriority, ignoreDirective, - previousCompileContext) { - var linkFns = [], - attrs, directives, nodeLinkFn, childNodes, childLinkFn, linkFnFound, nodeLinkFnFound; - - for (var i = 0; i < nodeList.length; i++) { - attrs = new Attributes(); - - // we must always refer to nodeList[i] since the nodes can be replaced underneath us. - directives = collectDirectives(nodeList[i], [], attrs, i === 0 ? maxPriority : undefined, - ignoreDirective); - - nodeLinkFn = (directives.length) - ? applyDirectivesToNode(directives, nodeList[i], attrs, transcludeFn, $rootElement, - null, [], [], previousCompileContext) - : null; - - if (nodeLinkFn && nodeLinkFn.scope) { - compile.$$addScopeClass(attrs.$$element); - } - - childLinkFn = (nodeLinkFn && nodeLinkFn.terminal || - !(childNodes = nodeList[i].childNodes) || - !childNodes.length) - ? null - : compileNodes(childNodes, - nodeLinkFn ? ( - (nodeLinkFn.transcludeOnThisElement || !nodeLinkFn.templateOnThisElement) - && nodeLinkFn.transclude) : transcludeFn); - - if (nodeLinkFn || childLinkFn) { - linkFns.push(i, nodeLinkFn, childLinkFn); - linkFnFound = true; - nodeLinkFnFound = nodeLinkFnFound || nodeLinkFn; - } - - //use the previous context only for the first element in the virtual group - previousCompileContext = null; - } - - // return a linking function if we have found anything, null otherwise - return linkFnFound ? compositeLinkFn : null; - - function compositeLinkFn(scope, nodeList, $rootElement, parentBoundTranscludeFn) { - var nodeLinkFn, childLinkFn, node, childScope, i, ii, idx, childBoundTranscludeFn; - var stableNodeList; - - - if (nodeLinkFnFound) { - // copy nodeList so that if a nodeLinkFn removes or adds an element at this DOM level our - // offsets don't get screwed up - var nodeListLength = nodeList.length; - stableNodeList = new Array(nodeListLength); - - // create a sparse array by only copying the elements which have a linkFn - for (i = 0; i < linkFns.length; i+=3) { - idx = linkFns[i]; - stableNodeList[idx] = nodeList[idx]; - } - } else { - stableNodeList = nodeList; - } - - for (i = 0, ii = linkFns.length; i < ii;) { - node = stableNodeList[linkFns[i++]]; - nodeLinkFn = linkFns[i++]; - childLinkFn = linkFns[i++]; - - if (nodeLinkFn) { - if (nodeLinkFn.scope) { - childScope = scope.$new(); - compile.$$addScopeInfo(jqLite(node), childScope); - } else { - childScope = scope; - } - - if (nodeLinkFn.transcludeOnThisElement) { - childBoundTranscludeFn = createBoundTranscludeFn( - scope, nodeLinkFn.transclude, parentBoundTranscludeFn, - nodeLinkFn.elementTranscludeOnThisElement); - - } else if (!nodeLinkFn.templateOnThisElement && parentBoundTranscludeFn) { - childBoundTranscludeFn = parentBoundTranscludeFn; - - } else if (!parentBoundTranscludeFn && transcludeFn) { - childBoundTranscludeFn = createBoundTranscludeFn(scope, transcludeFn); - - } else { - childBoundTranscludeFn = null; - } - - nodeLinkFn(childLinkFn, childScope, node, $rootElement, childBoundTranscludeFn); - - } else if (childLinkFn) { - childLinkFn(scope, node.childNodes, undefined, parentBoundTranscludeFn); - } - } - } - } - - function createBoundTranscludeFn(scope, transcludeFn, previousBoundTranscludeFn, elementTransclusion) { - - var boundTranscludeFn = function(transcludedScope, cloneFn, controllers, futureParentElement, containingScope) { - - if (!transcludedScope) { - transcludedScope = scope.$new(false, containingScope); - transcludedScope.$$transcluded = true; - } - - return transcludeFn(transcludedScope, cloneFn, { - parentBoundTranscludeFn: previousBoundTranscludeFn, - transcludeControllers: controllers, - futureParentElement: futureParentElement - }); - }; - - return boundTranscludeFn; - } - - /** - * Looks for directives on the given node and adds them to the directive collection which is - * sorted. - * - * @param node Node to search. - * @param directives An array to which the directives are added to. This array is sorted before - * the function returns. - * @param attrs The shared attrs object which is used to populate the normalized attributes. - * @param {number=} maxPriority Max directive priority. - */ - function collectDirectives(node, directives, attrs, maxPriority, ignoreDirective) { - var nodeType = node.nodeType, - attrsMap = attrs.$attr, - match, - className; - - switch (nodeType) { - case NODE_TYPE_ELEMENT: /* Element */ - // use the node name: <directive> - addDirective(directives, - directiveNormalize(nodeName_(node)), 'E', maxPriority, ignoreDirective); - - // iterate over the attributes - for (var attr, name, nName, ngAttrName, value, isNgAttr, nAttrs = node.attributes, - j = 0, jj = nAttrs && nAttrs.length; j < jj; j++) { - var attrStartName = false; - var attrEndName = false; - - attr = nAttrs[j]; - name = attr.name; - value = trim(attr.value); - - // support ngAttr attribute binding - ngAttrName = directiveNormalize(name); - if (isNgAttr = NG_ATTR_BINDING.test(ngAttrName)) { - name = name.replace(PREFIX_REGEXP, '') - .substr(8).replace(/_(.)/g, function(match, letter) { - return letter.toUpperCase(); - }); - } - - var directiveNName = ngAttrName.replace(/(Start|End)$/, ''); - if (directiveIsMultiElement(directiveNName)) { - if (ngAttrName === directiveNName + 'Start') { - attrStartName = name; - attrEndName = name.substr(0, name.length - 5) + 'end'; - name = name.substr(0, name.length - 6); - } - } - - nName = directiveNormalize(name.toLowerCase()); - attrsMap[nName] = name; - if (isNgAttr || !attrs.hasOwnProperty(nName)) { - attrs[nName] = value; - if (getBooleanAttrName(node, nName)) { - attrs[nName] = true; // presence means true - } - } - addAttrInterpolateDirective(node, directives, value, nName, isNgAttr); - addDirective(directives, nName, 'A', maxPriority, ignoreDirective, attrStartName, - attrEndName); - } - - // use class as directive - className = node.className; - if (isObject(className)) { - // Maybe SVGAnimatedString - className = className.animVal; - } - if (isString(className) && className !== '') { - while (match = CLASS_DIRECTIVE_REGEXP.exec(className)) { - nName = directiveNormalize(match[2]); - if (addDirective(directives, nName, 'C', maxPriority, ignoreDirective)) { - attrs[nName] = trim(match[3]); - } - className = className.substr(match.index + match[0].length); - } - } - break; - case NODE_TYPE_TEXT: /* Text Node */ - addTextInterpolateDirective(directives, node.nodeValue); - break; - case NODE_TYPE_COMMENT: /* Comment */ - try { - match = COMMENT_DIRECTIVE_REGEXP.exec(node.nodeValue); - if (match) { - nName = directiveNormalize(match[1]); - if (addDirective(directives, nName, 'M', maxPriority, ignoreDirective)) { - attrs[nName] = trim(match[2]); - } - } - } catch (e) { - // turns out that under some circumstances IE9 throws errors when one attempts to read - // comment's node value. - // Just ignore it and continue. (Can't seem to reproduce in test case.) - } - break; - } - - directives.sort(byPriority); - return directives; - } - - /** - * Given a node with an directive-start it collects all of the siblings until it finds - * directive-end. - * @param node - * @param attrStart - * @param attrEnd - * @returns {*} - */ - function groupScan(node, attrStart, attrEnd) { - var nodes = []; - var depth = 0; - if (attrStart && node.hasAttribute && node.hasAttribute(attrStart)) { - do { - if (!node) { - throw $compileMinErr('uterdir', - "Unterminated attribute, found '{0}' but no matching '{1}' found.", - attrStart, attrEnd); - } - if (node.nodeType == NODE_TYPE_ELEMENT) { - if (node.hasAttribute(attrStart)) depth++; - if (node.hasAttribute(attrEnd)) depth--; - } - nodes.push(node); - node = node.nextSibling; - } while (depth > 0); - } else { - nodes.push(node); - } - - return jqLite(nodes); - } - - /** - * Wrapper for linking function which converts normal linking function into a grouped - * linking function. - * @param linkFn - * @param attrStart - * @param attrEnd - * @returns {Function} - */ - function groupElementsLinkFnWrapper(linkFn, attrStart, attrEnd) { - return function(scope, element, attrs, controllers, transcludeFn) { - element = groupScan(element[0], attrStart, attrEnd); - return linkFn(scope, element, attrs, controllers, transcludeFn); - }; - } - - /** - * Once the directives have been collected, their compile functions are executed. This method - * is responsible for inlining directive templates as well as terminating the application - * of the directives if the terminal directive has been reached. - * - * @param {Array} directives Array of collected directives to execute their compile function. - * this needs to be pre-sorted by priority order. - * @param {Node} compileNode The raw DOM node to apply the compile functions to - * @param {Object} templateAttrs The shared attribute function - * @param {function(angular.Scope, cloneAttachFn=)} transcludeFn A linking function, where the - * scope argument is auto-generated to the new - * child of the transcluded parent scope. - * @param {JQLite} jqCollection If we are working on the root of the compile tree then this - * argument has the root jqLite array so that we can replace nodes - * on it. - * @param {Object=} originalReplaceDirective An optional directive that will be ignored when - * compiling the transclusion. - * @param {Array.<Function>} preLinkFns - * @param {Array.<Function>} postLinkFns - * @param {Object} previousCompileContext Context used for previous compilation of the current - * node - * @returns {Function} linkFn - */ - function applyDirectivesToNode(directives, compileNode, templateAttrs, transcludeFn, - jqCollection, originalReplaceDirective, preLinkFns, postLinkFns, - previousCompileContext) { - previousCompileContext = previousCompileContext || {}; - - var terminalPriority = -Number.MAX_VALUE, - newScopeDirective, - controllerDirectives = previousCompileContext.controllerDirectives, - controllers, - newIsolateScopeDirective = previousCompileContext.newIsolateScopeDirective, - templateDirective = previousCompileContext.templateDirective, - nonTlbTranscludeDirective = previousCompileContext.nonTlbTranscludeDirective, - hasTranscludeDirective = false, - hasTemplate = false, - hasElementTranscludeDirective = previousCompileContext.hasElementTranscludeDirective, - $compileNode = templateAttrs.$$element = jqLite(compileNode), - directive, - directiveName, - $template, - replaceDirective = originalReplaceDirective, - childTranscludeFn = transcludeFn, - linkFn, - directiveValue; - - // executes all directives on the current element - for (var i = 0, ii = directives.length; i < ii; i++) { - directive = directives[i]; - var attrStart = directive.$$start; - var attrEnd = directive.$$end; - - // collect multiblock sections - if (attrStart) { - $compileNode = groupScan(compileNode, attrStart, attrEnd); - } - $template = undefined; - - if (terminalPriority > directive.priority) { - break; // prevent further processing of directives - } - - if (directiveValue = directive.scope) { - - // skip the check for directives with async templates, we'll check the derived sync - // directive when the template arrives - if (!directive.templateUrl) { - if (isObject(directiveValue)) { - // This directive is trying to add an isolated scope. - // Check that there is no scope of any kind already - assertNoDuplicate('new/isolated scope', newIsolateScopeDirective || newScopeDirective, - directive, $compileNode); - newIsolateScopeDirective = directive; - } else { - // This directive is trying to add a child scope. - // Check that there is no isolated scope already - assertNoDuplicate('new/isolated scope', newIsolateScopeDirective, directive, - $compileNode); - } - } - - newScopeDirective = newScopeDirective || directive; - } - - directiveName = directive.name; - - if (!directive.templateUrl && directive.controller) { - directiveValue = directive.controller; - controllerDirectives = controllerDirectives || {}; - assertNoDuplicate("'" + directiveName + "' controller", - controllerDirectives[directiveName], directive, $compileNode); - controllerDirectives[directiveName] = directive; - } - - if (directiveValue = directive.transclude) { - hasTranscludeDirective = true; - - // Special case ngIf and ngRepeat so that we don't complain about duplicate transclusion. - // This option should only be used by directives that know how to safely handle element transclusion, - // where the transcluded nodes are added or replaced after linking. - if (!directive.$$tlb) { - assertNoDuplicate('transclusion', nonTlbTranscludeDirective, directive, $compileNode); - nonTlbTranscludeDirective = directive; - } - - if (directiveValue == 'element') { - hasElementTranscludeDirective = true; - terminalPriority = directive.priority; - $template = $compileNode; - $compileNode = templateAttrs.$$element = - jqLite(document.createComment(' ' + directiveName + ': ' + - templateAttrs[directiveName] + ' ')); - compileNode = $compileNode[0]; - replaceWith(jqCollection, sliceArgs($template), compileNode); - - childTranscludeFn = compile($template, transcludeFn, terminalPriority, - replaceDirective && replaceDirective.name, { - // Don't pass in: - // - controllerDirectives - otherwise we'll create duplicates controllers - // - newIsolateScopeDirective or templateDirective - combining templates with - // element transclusion doesn't make sense. - // - // We need only nonTlbTranscludeDirective so that we prevent putting transclusion - // on the same element more than once. - nonTlbTranscludeDirective: nonTlbTranscludeDirective - }); - } else { - $template = jqLite(jqLiteClone(compileNode)).contents(); - $compileNode.empty(); // clear contents - childTranscludeFn = compile($template, transcludeFn); - } - } - - if (directive.template) { - hasTemplate = true; - assertNoDuplicate('template', templateDirective, directive, $compileNode); - templateDirective = directive; - - directiveValue = (isFunction(directive.template)) - ? directive.template($compileNode, templateAttrs) - : directive.template; - - directiveValue = denormalizeTemplate(directiveValue); - - if (directive.replace) { - replaceDirective = directive; - if (jqLiteIsTextNode(directiveValue)) { - $template = []; - } else { - $template = removeComments(wrapTemplate(directive.templateNamespace, trim(directiveValue))); - } - compileNode = $template[0]; - - if ($template.length != 1 || compileNode.nodeType !== NODE_TYPE_ELEMENT) { - throw $compileMinErr('tplrt', - "Template for directive '{0}' must have exactly one root element. {1}", - directiveName, ''); - } - - replaceWith(jqCollection, $compileNode, compileNode); - - var newTemplateAttrs = {$attr: {}}; - - // combine directives from the original node and from the template: - // - take the array of directives for this element - // - split it into two parts, those that already applied (processed) and those that weren't (unprocessed) - // - collect directives from the template and sort them by priority - // - combine directives as: processed + template + unprocessed - var templateDirectives = collectDirectives(compileNode, [], newTemplateAttrs); - var unprocessedDirectives = directives.splice(i + 1, directives.length - (i + 1)); - - if (newIsolateScopeDirective) { - markDirectivesAsIsolate(templateDirectives); - } - directives = directives.concat(templateDirectives).concat(unprocessedDirectives); - mergeTemplateAttributes(templateAttrs, newTemplateAttrs); - - ii = directives.length; - } else { - $compileNode.html(directiveValue); - } - } - - if (directive.templateUrl) { - hasTemplate = true; - assertNoDuplicate('template', templateDirective, directive, $compileNode); - templateDirective = directive; - - if (directive.replace) { - replaceDirective = directive; - } - - nodeLinkFn = compileTemplateUrl(directives.splice(i, directives.length - i), $compileNode, - templateAttrs, jqCollection, hasTranscludeDirective && childTranscludeFn, preLinkFns, postLinkFns, { - controllerDirectives: controllerDirectives, - newIsolateScopeDirective: newIsolateScopeDirective, - templateDirective: templateDirective, - nonTlbTranscludeDirective: nonTlbTranscludeDirective - }); - ii = directives.length; - } else if (directive.compile) { - try { - linkFn = directive.compile($compileNode, templateAttrs, childTranscludeFn); - if (isFunction(linkFn)) { - addLinkFns(null, linkFn, attrStart, attrEnd); - } else if (linkFn) { - addLinkFns(linkFn.pre, linkFn.post, attrStart, attrEnd); - } - } catch (e) { - $exceptionHandler(e, startingTag($compileNode)); - } - } - - if (directive.terminal) { - nodeLinkFn.terminal = true; - terminalPriority = Math.max(terminalPriority, directive.priority); - } - - } - - nodeLinkFn.scope = newScopeDirective && newScopeDirective.scope === true; - nodeLinkFn.transcludeOnThisElement = hasTranscludeDirective; - nodeLinkFn.elementTranscludeOnThisElement = hasElementTranscludeDirective; - nodeLinkFn.templateOnThisElement = hasTemplate; - nodeLinkFn.transclude = childTranscludeFn; - - previousCompileContext.hasElementTranscludeDirective = hasElementTranscludeDirective; - - // might be normal or delayed nodeLinkFn depending on if templateUrl is present - return nodeLinkFn; - - //////////////////// - - function addLinkFns(pre, post, attrStart, attrEnd) { - if (pre) { - if (attrStart) pre = groupElementsLinkFnWrapper(pre, attrStart, attrEnd); - pre.require = directive.require; - pre.directiveName = directiveName; - if (newIsolateScopeDirective === directive || directive.$$isolateScope) { - pre = cloneAndAnnotateFn(pre, {isolateScope: true}); - } - preLinkFns.push(pre); - } - if (post) { - if (attrStart) post = groupElementsLinkFnWrapper(post, attrStart, attrEnd); - post.require = directive.require; - post.directiveName = directiveName; - if (newIsolateScopeDirective === directive || directive.$$isolateScope) { - post = cloneAndAnnotateFn(post, {isolateScope: true}); - } - postLinkFns.push(post); - } - } - - - function getControllers(directiveName, require, $element, elementControllers) { - var value, retrievalMethod = 'data', optional = false; - var $searchElement = $element; - var match; - if (isString(require)) { - match = require.match(REQUIRE_PREFIX_REGEXP); - require = require.substring(match[0].length); - - if (match[3]) { - if (match[1]) match[3] = null; - else match[1] = match[3]; - } - if (match[1] === '^') { - retrievalMethod = 'inheritedData'; - } else if (match[1] === '^^') { - retrievalMethod = 'inheritedData'; - $searchElement = $element.parent(); - } - if (match[2] === '?') { - optional = true; - } - - value = null; - - if (elementControllers && retrievalMethod === 'data') { - if (value = elementControllers[require]) { - value = value.instance; - } - } - value = value || $searchElement[retrievalMethod]('$' + require + 'Controller'); - - if (!value && !optional) { - throw $compileMinErr('ctreq', - "Controller '{0}', required by directive '{1}', can't be found!", - require, directiveName); - } - return value || null; - } else if (isArray(require)) { - value = []; - forEach(require, function(require) { - value.push(getControllers(directiveName, require, $element, elementControllers)); - }); - } - return value; - } - - - function nodeLinkFn(childLinkFn, scope, linkNode, $rootElement, boundTranscludeFn) { - var i, ii, linkFn, controller, isolateScope, elementControllers, transcludeFn, $element, - attrs; - - if (compileNode === linkNode) { - attrs = templateAttrs; - $element = templateAttrs.$$element; - } else { - $element = jqLite(linkNode); - attrs = new Attributes($element, templateAttrs); - } - - if (newIsolateScopeDirective) { - isolateScope = scope.$new(true); - } - - if (boundTranscludeFn) { - // track `boundTranscludeFn` so it can be unwrapped if `transcludeFn` - // is later passed as `parentBoundTranscludeFn` to `publicLinkFn` - transcludeFn = controllersBoundTransclude; - transcludeFn.$$boundTransclude = boundTranscludeFn; - } - - if (controllerDirectives) { - // TODO: merge `controllers` and `elementControllers` into single object. - controllers = {}; - elementControllers = {}; - forEach(controllerDirectives, function(directive) { - var locals = { - $scope: directive === newIsolateScopeDirective || directive.$$isolateScope ? isolateScope : scope, - $element: $element, - $attrs: attrs, - $transclude: transcludeFn - }, controllerInstance; - - controller = directive.controller; - if (controller == '@') { - controller = attrs[directive.name]; - } - - controllerInstance = $controller(controller, locals, true, directive.controllerAs); - - // For directives with element transclusion the element is a comment, - // but jQuery .data doesn't support attaching data to comment nodes as it's hard to - // clean up (http://bugs.jquery.com/ticket/8335). - // Instead, we save the controllers for the element in a local hash and attach to .data - // later, once we have the actual element. - elementControllers[directive.name] = controllerInstance; - if (!hasElementTranscludeDirective) { - $element.data('$' + directive.name + 'Controller', controllerInstance.instance); - } - - controllers[directive.name] = controllerInstance; - }); - } - - if (newIsolateScopeDirective) { - compile.$$addScopeInfo($element, isolateScope, true, !(templateDirective && (templateDirective === newIsolateScopeDirective || - templateDirective === newIsolateScopeDirective.$$originalDirective))); - compile.$$addScopeClass($element, true); - - var isolateScopeController = controllers && controllers[newIsolateScopeDirective.name]; - var isolateBindingContext = isolateScope; - if (isolateScopeController && isolateScopeController.identifier && - newIsolateScopeDirective.bindToController === true) { - isolateBindingContext = isolateScopeController.instance; - } - - forEach(isolateScope.$$isolateBindings = newIsolateScopeDirective.$$isolateBindings, function(definition, scopeName) { - var attrName = definition.attrName, - optional = definition.optional, - mode = definition.mode, // @, =, or & - lastValue, - parentGet, parentSet, compare; - - switch (mode) { - - case '@': - attrs.$observe(attrName, function(value) { - isolateBindingContext[scopeName] = value; - }); - attrs.$$observers[attrName].$$scope = scope; - if (attrs[attrName]) { - // If the attribute has been provided then we trigger an interpolation to ensure - // the value is there for use in the link fn - isolateBindingContext[scopeName] = $interpolate(attrs[attrName])(scope); - } - break; - - case '=': - if (optional && !attrs[attrName]) { - return; - } - parentGet = $parse(attrs[attrName]); - if (parentGet.literal) { - compare = equals; - } else { - compare = function(a, b) { return a === b || (a !== a && b !== b); }; - } - parentSet = parentGet.assign || function() { - // reset the change, or we will throw this exception on every $digest - lastValue = isolateBindingContext[scopeName] = parentGet(scope); - throw $compileMinErr('nonassign', - "Expression '{0}' used with directive '{1}' is non-assignable!", - attrs[attrName], newIsolateScopeDirective.name); - }; - lastValue = isolateBindingContext[scopeName] = parentGet(scope); - var parentValueWatch = function parentValueWatch(parentValue) { - if (!compare(parentValue, isolateBindingContext[scopeName])) { - // we are out of sync and need to copy - if (!compare(parentValue, lastValue)) { - // parent changed and it has precedence - isolateBindingContext[scopeName] = parentValue; - } else { - // if the parent can be assigned then do so - parentSet(scope, parentValue = isolateBindingContext[scopeName]); - } - } - return lastValue = parentValue; - }; - parentValueWatch.$stateful = true; - var unwatch; - if (definition.collection) { - unwatch = scope.$watchCollection(attrs[attrName], parentValueWatch); - } else { - unwatch = scope.$watch($parse(attrs[attrName], parentValueWatch), null, parentGet.literal); - } - isolateScope.$on('$destroy', unwatch); - break; - - case '&': - parentGet = $parse(attrs[attrName]); - isolateBindingContext[scopeName] = function(locals) { - return parentGet(scope, locals); - }; - break; - } - }); - } - if (controllers) { - forEach(controllers, function(controller) { - controller(); - }); - controllers = null; - } - - // PRELINKING - for (i = 0, ii = preLinkFns.length; i < ii; i++) { - linkFn = preLinkFns[i]; - invokeLinkFn(linkFn, - linkFn.isolateScope ? isolateScope : scope, - $element, - attrs, - linkFn.require && getControllers(linkFn.directiveName, linkFn.require, $element, elementControllers), - transcludeFn - ); - } - - // RECURSION - // We only pass the isolate scope, if the isolate directive has a template, - // otherwise the child elements do not belong to the isolate directive. - var scopeToChild = scope; - if (newIsolateScopeDirective && (newIsolateScopeDirective.template || newIsolateScopeDirective.templateUrl === null)) { - scopeToChild = isolateScope; - } - childLinkFn && childLinkFn(scopeToChild, linkNode.childNodes, undefined, boundTranscludeFn); - - // POSTLINKING - for (i = postLinkFns.length - 1; i >= 0; i--) { - linkFn = postLinkFns[i]; - invokeLinkFn(linkFn, - linkFn.isolateScope ? isolateScope : scope, - $element, - attrs, - linkFn.require && getControllers(linkFn.directiveName, linkFn.require, $element, elementControllers), - transcludeFn - ); - } - - // This is the function that is injected as `$transclude`. - // Note: all arguments are optional! - function controllersBoundTransclude(scope, cloneAttachFn, futureParentElement) { - var transcludeControllers; - - // No scope passed in: - if (!isScope(scope)) { - futureParentElement = cloneAttachFn; - cloneAttachFn = scope; - scope = undefined; - } - - if (hasElementTranscludeDirective) { - transcludeControllers = elementControllers; - } - if (!futureParentElement) { - futureParentElement = hasElementTranscludeDirective ? $element.parent() : $element; - } - return boundTranscludeFn(scope, cloneAttachFn, transcludeControllers, futureParentElement, scopeToChild); - } - } - } - - function markDirectivesAsIsolate(directives) { - // mark all directives as needing isolate scope. - for (var j = 0, jj = directives.length; j < jj; j++) { - directives[j] = inherit(directives[j], {$$isolateScope: true}); - } - } - - /** - * looks up the directive and decorates it with exception handling and proper parameters. We - * call this the boundDirective. - * - * @param {string} name name of the directive to look up. - * @param {string} location The directive must be found in specific format. - * String containing any of theses characters: - * - * * `E`: element name - * * `A': attribute - * * `C`: class - * * `M`: comment - * @returns {boolean} true if directive was added. - */ - function addDirective(tDirectives, name, location, maxPriority, ignoreDirective, startAttrName, - endAttrName) { - if (name === ignoreDirective) return null; - var match = null; - if (hasDirectives.hasOwnProperty(name)) { - for (var directive, directives = $injector.get(name + Suffix), - i = 0, ii = directives.length; i < ii; i++) { - try { - directive = directives[i]; - if ((maxPriority === undefined || maxPriority > directive.priority) && - directive.restrict.indexOf(location) != -1) { - if (startAttrName) { - directive = inherit(directive, {$$start: startAttrName, $$end: endAttrName}); - } - tDirectives.push(directive); - match = directive; - } - } catch (e) { $exceptionHandler(e); } - } - } - return match; - } - - - /** - * looks up the directive and returns true if it is a multi-element directive, - * and therefore requires DOM nodes between -start and -end markers to be grouped - * together. - * - * @param {string} name name of the directive to look up. - * @returns true if directive was registered as multi-element. - */ - function directiveIsMultiElement(name) { - if (hasDirectives.hasOwnProperty(name)) { - for (var directive, directives = $injector.get(name + Suffix), - i = 0, ii = directives.length; i < ii; i++) { - directive = directives[i]; - if (directive.multiElement) { - return true; - } - } - } - return false; - } - - /** - * When the element is replaced with HTML template then the new attributes - * on the template need to be merged with the existing attributes in the DOM. - * The desired effect is to have both of the attributes present. - * - * @param {object} dst destination attributes (original DOM) - * @param {object} src source attributes (from the directive template) - */ - function mergeTemplateAttributes(dst, src) { - var srcAttr = src.$attr, - dstAttr = dst.$attr, - $element = dst.$$element; - - // reapply the old attributes to the new element - forEach(dst, function(value, key) { - if (key.charAt(0) != '$') { - if (src[key] && src[key] !== value) { - value += (key === 'style' ? ';' : ' ') + src[key]; - } - dst.$set(key, value, true, srcAttr[key]); - } - }); - - // copy the new attributes on the old attrs object - forEach(src, function(value, key) { - if (key == 'class') { - safeAddClass($element, value); - dst['class'] = (dst['class'] ? dst['class'] + ' ' : '') + value; - } else if (key == 'style') { - $element.attr('style', $element.attr('style') + ';' + value); - dst['style'] = (dst['style'] ? dst['style'] + ';' : '') + value; - // `dst` will never contain hasOwnProperty as DOM parser won't let it. - // You will get an "InvalidCharacterError: DOM Exception 5" error if you - // have an attribute like "has-own-property" or "data-has-own-property", etc. - } else if (key.charAt(0) != '$' && !dst.hasOwnProperty(key)) { - dst[key] = value; - dstAttr[key] = srcAttr[key]; - } - }); - } - - - function compileTemplateUrl(directives, $compileNode, tAttrs, - $rootElement, childTranscludeFn, preLinkFns, postLinkFns, previousCompileContext) { - var linkQueue = [], - afterTemplateNodeLinkFn, - afterTemplateChildLinkFn, - beforeTemplateCompileNode = $compileNode[0], - origAsyncDirective = directives.shift(), - // The fact that we have to copy and patch the directive seems wrong! - derivedSyncDirective = extend({}, origAsyncDirective, { - templateUrl: null, transclude: null, replace: null, $$originalDirective: origAsyncDirective - }), - templateUrl = (isFunction(origAsyncDirective.templateUrl)) - ? origAsyncDirective.templateUrl($compileNode, tAttrs) - : origAsyncDirective.templateUrl, - templateNamespace = origAsyncDirective.templateNamespace; - - $compileNode.empty(); - - $templateRequest($sce.getTrustedResourceUrl(templateUrl)) - .then(function(content) { - var compileNode, tempTemplateAttrs, $template, childBoundTranscludeFn; - - content = denormalizeTemplate(content); - - if (origAsyncDirective.replace) { - if (jqLiteIsTextNode(content)) { - $template = []; - } else { - $template = removeComments(wrapTemplate(templateNamespace, trim(content))); - } - compileNode = $template[0]; - - if ($template.length != 1 || compileNode.nodeType !== NODE_TYPE_ELEMENT) { - throw $compileMinErr('tplrt', - "Template for directive '{0}' must have exactly one root element. {1}", - origAsyncDirective.name, templateUrl); - } - - tempTemplateAttrs = {$attr: {}}; - replaceWith($rootElement, $compileNode, compileNode); - var templateDirectives = collectDirectives(compileNode, [], tempTemplateAttrs); - - if (isObject(origAsyncDirective.scope)) { - markDirectivesAsIsolate(templateDirectives); - } - directives = templateDirectives.concat(directives); - mergeTemplateAttributes(tAttrs, tempTemplateAttrs); - } else { - compileNode = beforeTemplateCompileNode; - $compileNode.html(content); - } - - directives.unshift(derivedSyncDirective); - - afterTemplateNodeLinkFn = applyDirectivesToNode(directives, compileNode, tAttrs, - childTranscludeFn, $compileNode, origAsyncDirective, preLinkFns, postLinkFns, - previousCompileContext); - forEach($rootElement, function(node, i) { - if (node == compileNode) { - $rootElement[i] = $compileNode[0]; - } - }); - afterTemplateChildLinkFn = compileNodes($compileNode[0].childNodes, childTranscludeFn); - - while (linkQueue.length) { - var scope = linkQueue.shift(), - beforeTemplateLinkNode = linkQueue.shift(), - linkRootElement = linkQueue.shift(), - boundTranscludeFn = linkQueue.shift(), - linkNode = $compileNode[0]; - - if (scope.$$destroyed) continue; - - if (beforeTemplateLinkNode !== beforeTemplateCompileNode) { - var oldClasses = beforeTemplateLinkNode.className; - - if (!(previousCompileContext.hasElementTranscludeDirective && - origAsyncDirective.replace)) { - // it was cloned therefore we have to clone as well. - linkNode = jqLiteClone(compileNode); - } - replaceWith(linkRootElement, jqLite(beforeTemplateLinkNode), linkNode); - - // Copy in CSS classes from original node - safeAddClass(jqLite(linkNode), oldClasses); - } - if (afterTemplateNodeLinkFn.transcludeOnThisElement) { - childBoundTranscludeFn = createBoundTranscludeFn(scope, afterTemplateNodeLinkFn.transclude, boundTranscludeFn); - } else { - childBoundTranscludeFn = boundTranscludeFn; - } - afterTemplateNodeLinkFn(afterTemplateChildLinkFn, scope, linkNode, $rootElement, - childBoundTranscludeFn); - } - linkQueue = null; - }); - - return function delayedNodeLinkFn(ignoreChildLinkFn, scope, node, rootElement, boundTranscludeFn) { - var childBoundTranscludeFn = boundTranscludeFn; - if (scope.$$destroyed) return; - if (linkQueue) { - linkQueue.push(scope, - node, - rootElement, - childBoundTranscludeFn); - } else { - if (afterTemplateNodeLinkFn.transcludeOnThisElement) { - childBoundTranscludeFn = createBoundTranscludeFn(scope, afterTemplateNodeLinkFn.transclude, boundTranscludeFn); - } - afterTemplateNodeLinkFn(afterTemplateChildLinkFn, scope, node, rootElement, childBoundTranscludeFn); - } - }; - } - - - /** - * Sorting function for bound directives. - */ - function byPriority(a, b) { - var diff = b.priority - a.priority; - if (diff !== 0) return diff; - if (a.name !== b.name) return (a.name < b.name) ? -1 : 1; - return a.index - b.index; - } - - - function assertNoDuplicate(what, previousDirective, directive, element) { - if (previousDirective) { - throw $compileMinErr('multidir', 'Multiple directives [{0}, {1}] asking for {2} on: {3}', - previousDirective.name, directive.name, what, startingTag(element)); - } - } - - - function addTextInterpolateDirective(directives, text) { - var interpolateFn = $interpolate(text, true); - if (interpolateFn) { - directives.push({ - priority: 0, - compile: function textInterpolateCompileFn(templateNode) { - var templateNodeParent = templateNode.parent(), - hasCompileParent = !!templateNodeParent.length; - - // When transcluding a template that has bindings in the root - // we don't have a parent and thus need to add the class during linking fn. - if (hasCompileParent) compile.$$addBindingClass(templateNodeParent); - - return function textInterpolateLinkFn(scope, node) { - var parent = node.parent(); - if (!hasCompileParent) compile.$$addBindingClass(parent); - compile.$$addBindingInfo(parent, interpolateFn.expressions); - scope.$watch(interpolateFn, function interpolateFnWatchAction(value) { - node[0].nodeValue = value; - }); - }; - } - }); - } - } - - - function wrapTemplate(type, template) { - type = lowercase(type || 'html'); - switch (type) { - case 'svg': - case 'math': - var wrapper = document.createElement('div'); - wrapper.innerHTML = '<' + type + '>' + template + '</' + type + '>'; - return wrapper.childNodes[0].childNodes; - default: - return template; - } - } - - - function getTrustedContext(node, attrNormalizedName) { - if (attrNormalizedName == "srcdoc") { - return $sce.HTML; - } - var tag = nodeName_(node); - // maction[xlink:href] can source SVG. It's not limited to <maction>. - if (attrNormalizedName == "xlinkHref" || - (tag == "form" && attrNormalizedName == "action") || - (tag != "img" && (attrNormalizedName == "src" || - attrNormalizedName == "ngSrc"))) { - return $sce.RESOURCE_URL; - } - } - - - function addAttrInterpolateDirective(node, directives, value, name, allOrNothing) { - var trustedContext = getTrustedContext(node, name); - allOrNothing = ALL_OR_NOTHING_ATTRS[name] || allOrNothing; - - var interpolateFn = $interpolate(value, true, trustedContext, allOrNothing); - - // no interpolation found -> ignore - if (!interpolateFn) return; - - - if (name === "multiple" && nodeName_(node) === "select") { - throw $compileMinErr("selmulti", - "Binding to the 'multiple' attribute is not supported. Element: {0}", - startingTag(node)); - } - - directives.push({ - priority: 100, - compile: function() { - return { - pre: function attrInterpolatePreLinkFn(scope, element, attr) { - var $$observers = (attr.$$observers || (attr.$$observers = {})); - - if (EVENT_HANDLER_ATTR_REGEXP.test(name)) { - throw $compileMinErr('nodomevents', - "Interpolations for HTML DOM event attributes are disallowed. Please use the " + - "ng- versions (such as ng-click instead of onclick) instead."); - } - - // If the attribute has changed since last $interpolate()ed - var newValue = attr[name]; - if (newValue !== value) { - // we need to interpolate again since the attribute value has been updated - // (e.g. by another directive's compile function) - // ensure unset/empty values make interpolateFn falsy - interpolateFn = newValue && $interpolate(newValue, true, trustedContext, allOrNothing); - value = newValue; - } - - // if attribute was updated so that there is no interpolation going on we don't want to - // register any observers - if (!interpolateFn) return; - - // initialize attr object so that it's ready in case we need the value for isolate - // scope initialization, otherwise the value would not be available from isolate - // directive's linking fn during linking phase - attr[name] = interpolateFn(scope); - - ($$observers[name] || ($$observers[name] = [])).$$inter = true; - (attr.$$observers && attr.$$observers[name].$$scope || scope). - $watch(interpolateFn, function interpolateFnWatchAction(newValue, oldValue) { - //special case for class attribute addition + removal - //so that class changes can tap into the animation - //hooks provided by the $animate service. Be sure to - //skip animations when the first digest occurs (when - //both the new and the old values are the same) since - //the CSS classes are the non-interpolated values - if (name === 'class' && newValue != oldValue) { - attr.$updateClass(newValue, oldValue); - } else { - attr.$set(name, newValue); - } - }); - } - }; - } - }); - } - - - /** - * This is a special jqLite.replaceWith, which can replace items which - * have no parents, provided that the containing jqLite collection is provided. - * - * @param {JqLite=} $rootElement The root of the compile tree. Used so that we can replace nodes - * in the root of the tree. - * @param {JqLite} elementsToRemove The jqLite element which we are going to replace. We keep - * the shell, but replace its DOM node reference. - * @param {Node} newNode The new DOM node. - */ - function replaceWith($rootElement, elementsToRemove, newNode) { - var firstElementToRemove = elementsToRemove[0], - removeCount = elementsToRemove.length, - parent = firstElementToRemove.parentNode, - i, ii; - - if ($rootElement) { - for (i = 0, ii = $rootElement.length; i < ii; i++) { - if ($rootElement[i] == firstElementToRemove) { - $rootElement[i++] = newNode; - for (var j = i, j2 = j + removeCount - 1, - jj = $rootElement.length; - j < jj; j++, j2++) { - if (j2 < jj) { - $rootElement[j] = $rootElement[j2]; - } else { - delete $rootElement[j]; - } - } - $rootElement.length -= removeCount - 1; - - // If the replaced element is also the jQuery .context then replace it - // .context is a deprecated jQuery api, so we should set it only when jQuery set it - // http://api.jquery.com/context/ - if ($rootElement.context === firstElementToRemove) { - $rootElement.context = newNode; - } - break; - } - } - } - - if (parent) { - parent.replaceChild(newNode, firstElementToRemove); - } - - // TODO(perf): what's this document fragment for? is it needed? can we at least reuse it? - var fragment = document.createDocumentFragment(); - fragment.appendChild(firstElementToRemove); - - // Copy over user data (that includes Angular's $scope etc.). Don't copy private - // data here because there's no public interface in jQuery to do that and copying over - // event listeners (which is the main use of private data) wouldn't work anyway. - jqLite(newNode).data(jqLite(firstElementToRemove).data()); - - // Remove data of the replaced element. We cannot just call .remove() - // on the element it since that would deallocate scope that is needed - // for the new node. Instead, remove the data "manually". - if (!jQuery) { - delete jqLite.cache[firstElementToRemove[jqLite.expando]]; - } else { - // jQuery 2.x doesn't expose the data storage. Use jQuery.cleanData to clean up after - // the replaced element. The cleanData version monkey-patched by Angular would cause - // the scope to be trashed and we do need the very same scope to work with the new - // element. However, we cannot just cache the non-patched version and use it here as - // that would break if another library patches the method after Angular does (one - // example is jQuery UI). Instead, set a flag indicating scope destroying should be - // skipped this one time. - skipDestroyOnNextJQueryCleanData = true; - jQuery.cleanData([firstElementToRemove]); - } - - for (var k = 1, kk = elementsToRemove.length; k < kk; k++) { - var element = elementsToRemove[k]; - jqLite(element).remove(); // must do this way to clean up expando - fragment.appendChild(element); - delete elementsToRemove[k]; - } - - elementsToRemove[0] = newNode; - elementsToRemove.length = 1; - } - - - function cloneAndAnnotateFn(fn, annotation) { - return extend(function() { return fn.apply(null, arguments); }, fn, annotation); - } - - - function invokeLinkFn(linkFn, scope, $element, attrs, controllers, transcludeFn) { - try { - linkFn(scope, $element, attrs, controllers, transcludeFn); - } catch (e) { - $exceptionHandler(e, startingTag($element)); - } - } - }]; -} - -var PREFIX_REGEXP = /^((?:x|data)[\:\-_])/i; -/** - * Converts all accepted directives format into proper directive name. - * @param name Name to normalize - */ -function directiveNormalize(name) { - return camelCase(name.replace(PREFIX_REGEXP, '')); -} - -/** - * @ngdoc type - * @name $compile.directive.Attributes - * - * @description - * A shared object between directive compile / linking functions which contains normalized DOM - * element attributes. The values reflect current binding state `{{ }}`. The normalization is - * needed since all of these are treated as equivalent in Angular: - * - * ``` - * <span ng:bind="a" ng-bind="a" data-ng-bind="a" x-ng-bind="a"> - * ``` - */ - -/** - * @ngdoc property - * @name $compile.directive.Attributes#$attr - * - * @description - * A map of DOM element attribute names to the normalized name. This is - * needed to do reverse lookup from normalized name back to actual name. - */ - - -/** - * @ngdoc method - * @name $compile.directive.Attributes#$set - * @kind function - * - * @description - * Set DOM element attribute value. - * - * - * @param {string} name Normalized element attribute name of the property to modify. The name is - * reverse-translated using the {@link ng.$compile.directive.Attributes#$attr $attr} - * property to the original name. - * @param {string} value Value to set the attribute to. The value can be an interpolated string. - */ - - - -/** - * Closure compiler type information - */ - -function nodesetLinkingFn( - /* angular.Scope */ scope, - /* NodeList */ nodeList, - /* Element */ rootElement, - /* function(Function) */ boundTranscludeFn -) {} - -function directiveLinkingFn( - /* nodesetLinkingFn */ nodesetLinkingFn, - /* angular.Scope */ scope, - /* Node */ node, - /* Element */ rootElement, - /* function(Function) */ boundTranscludeFn -) {} - -function tokenDifference(str1, str2) { - var values = '', - tokens1 = str1.split(/\s+/), - tokens2 = str2.split(/\s+/); - - outer: - for (var i = 0; i < tokens1.length; i++) { - var token = tokens1[i]; - for (var j = 0; j < tokens2.length; j++) { - if (token == tokens2[j]) continue outer; - } - values += (values.length > 0 ? ' ' : '') + token; - } - return values; -} - -function removeComments(jqNodes) { - jqNodes = jqLite(jqNodes); - var i = jqNodes.length; - - if (i <= 1) { - return jqNodes; - } - - while (i--) { - var node = jqNodes[i]; - if (node.nodeType === NODE_TYPE_COMMENT) { - splice.call(jqNodes, i, 1); - } - } - return jqNodes; -} - -/** - * @ngdoc provider - * @name $controllerProvider - * @description - * The {@link ng.$controller $controller service} is used by Angular to create new - * controllers. - * - * This provider allows controller registration via the - * {@link ng.$controllerProvider#register register} method. - */ -function $ControllerProvider() { - var controllers = {}, - globals = false, - CNTRL_REG = /^(\S+)(\s+as\s+(\w+))?$/; - - - /** - * @ngdoc method - * @name $controllerProvider#register - * @param {string|Object} name Controller name, or an object map of controllers where the keys are - * the names and the values are the constructors. - * @param {Function|Array} constructor Controller constructor fn (optionally decorated with DI - * annotations in the array notation). - */ - this.register = function(name, constructor) { - assertNotHasOwnProperty(name, 'controller'); - if (isObject(name)) { - extend(controllers, name); - } else { - controllers[name] = constructor; - } - }; - - /** - * @ngdoc method - * @name $controllerProvider#allowGlobals - * @description If called, allows `$controller` to find controller constructors on `window` - */ - this.allowGlobals = function() { - globals = true; - }; - - - this.$get = ['$injector', '$window', function($injector, $window) { - - /** - * @ngdoc service - * @name $controller - * @requires $injector - * - * @param {Function|string} constructor If called with a function then it's considered to be the - * controller constructor function. Otherwise it's considered to be a string which is used - * to retrieve the controller constructor using the following steps: - * - * * check if a controller with given name is registered via `$controllerProvider` - * * check if evaluating the string on the current scope returns a constructor - * * if $controllerProvider#allowGlobals, check `window[constructor]` on the global - * `window` object (not recommended) - * - * The string can use the `controller as property` syntax, where the controller instance is published - * as the specified property on the `scope`; the `scope` must be injected into `locals` param for this - * to work correctly. - * - * @param {Object} locals Injection locals for Controller. - * @return {Object} Instance of given controller. - * - * @description - * `$controller` service is responsible for instantiating controllers. - * - * It's just a simple call to {@link auto.$injector $injector}, but extracted into - * a service, so that one can override this service with [BC version](https://gist.github.com/1649788). - */ - return function(expression, locals, later, ident) { - // PRIVATE API: - // param `later` --- indicates that the controller's constructor is invoked at a later time. - // If true, $controller will allocate the object with the correct - // prototype chain, but will not invoke the controller until a returned - // callback is invoked. - // param `ident` --- An optional label which overrides the label parsed from the controller - // expression, if any. - var instance, match, constructor, identifier; - later = later === true; - if (ident && isString(ident)) { - identifier = ident; - } - - if (isString(expression)) { - match = expression.match(CNTRL_REG), - constructor = match[1], - identifier = identifier || match[3]; - expression = controllers.hasOwnProperty(constructor) - ? controllers[constructor] - : getter(locals.$scope, constructor, true) || - (globals ? getter($window, constructor, true) : undefined); - - assertArgFn(expression, constructor, true); - } - - if (later) { - // Instantiate controller later: - // This machinery is used to create an instance of the object before calling the - // controller's constructor itself. - // - // This allows properties to be added to the controller before the constructor is - // invoked. Primarily, this is used for isolate scope bindings in $compile. - // - // This feature is not intended for use by applications, and is thus not documented - // publicly. - // Object creation: http://jsperf.com/create-constructor/2 - var controllerPrototype = (isArray(expression) ? - expression[expression.length - 1] : expression).prototype; - instance = Object.create(controllerPrototype || null); - - if (identifier) { - addIdentifier(locals, identifier, instance, constructor || expression.name); - } - - return extend(function() { - $injector.invoke(expression, instance, locals, constructor); - return instance; - }, { - instance: instance, - identifier: identifier - }); - } - - instance = $injector.instantiate(expression, locals, constructor); - - if (identifier) { - addIdentifier(locals, identifier, instance, constructor || expression.name); - } - - return instance; - }; - - function addIdentifier(locals, identifier, instance, name) { - if (!(locals && isObject(locals.$scope))) { - throw minErr('$controller')('noscp', - "Cannot export controller '{0}' as '{1}'! No $scope object provided via `locals`.", - name, identifier); - } - - locals.$scope[identifier] = instance; - } - }]; -} - -/** - * @ngdoc service - * @name $document - * @requires $window - * - * @description - * A {@link angular.element jQuery or jqLite} wrapper for the browser's `window.document` object. - * - * @example - <example module="documentExample"> - <file name="index.html"> - <div ng-controller="ExampleController"> - <p>$document title: <b ng-bind="title"></b></p> - <p>window.document title: <b ng-bind="windowTitle"></b></p> - </div> - </file> - <file name="script.js"> - angular.module('documentExample', []) - .controller('ExampleController', ['$scope', '$document', function($scope, $document) { - $scope.title = $document[0].title; - $scope.windowTitle = angular.element(window.document)[0].title; - }]); - </file> - </example> - */ -function $DocumentProvider() { - this.$get = ['$window', function(window) { - return jqLite(window.document); - }]; -} - -/** - * @ngdoc service - * @name $exceptionHandler - * @requires ng.$log - * - * @description - * Any uncaught exception in angular expressions is delegated to this service. - * The default implementation simply delegates to `$log.error` which logs it into - * the browser console. - * - * In unit tests, if `angular-mocks.js` is loaded, this service is overridden by - * {@link ngMock.$exceptionHandler mock $exceptionHandler} which aids in testing. - * - * ## Example: - * - * ```js - * angular.module('exceptionOverride', []).factory('$exceptionHandler', function() { - * return function(exception, cause) { - * exception.message += ' (caused by "' + cause + '")'; - * throw exception; - * }; - * }); - * ``` - * - * This example will override the normal action of `$exceptionHandler`, to make angular - * exceptions fail hard when they happen, instead of just logging to the console. - * - * <hr /> - * Note, that code executed in event-listeners (even those registered using jqLite's `on`/`bind` - * methods) does not delegate exceptions to the {@link ng.$exceptionHandler $exceptionHandler} - * (unless executed during a digest). - * - * If you wish, you can manually delegate exceptions, e.g. - * `try { ... } catch(e) { $exceptionHandler(e); }` - * - * @param {Error} exception Exception associated with the error. - * @param {string=} cause optional information about the context in which - * the error was thrown. - * - */ -function $ExceptionHandlerProvider() { - this.$get = ['$log', function($log) { - return function(exception, cause) { - $log.error.apply($log, arguments); - }; - }]; -} - -var APPLICATION_JSON = 'application/json'; -var CONTENT_TYPE_APPLICATION_JSON = {'Content-Type': APPLICATION_JSON + ';charset=utf-8'}; -var JSON_START = /^\[|^\{(?!\{)/; -var JSON_ENDS = { - '[': /]$/, - '{': /}$/ -}; -var JSON_PROTECTION_PREFIX = /^\)\]\}',?\n/; - -function defaultHttpResponseTransform(data, headers) { - if (isString(data)) { - // Strip json vulnerability protection prefix and trim whitespace - var tempData = data.replace(JSON_PROTECTION_PREFIX, '').trim(); - - if (tempData) { - var contentType = headers('Content-Type'); - if ((contentType && (contentType.indexOf(APPLICATION_JSON) === 0)) || isJsonLike(tempData)) { - data = fromJson(tempData); - } - } - } - - return data; -} - -function isJsonLike(str) { - var jsonStart = str.match(JSON_START); - return jsonStart && JSON_ENDS[jsonStart[0]].test(str); -} - -/** - * Parse headers into key value object - * - * @param {string} headers Raw headers as a string - * @returns {Object} Parsed headers as key value object - */ -function parseHeaders(headers) { - var parsed = createMap(), key, val, i; - - if (!headers) return parsed; - - forEach(headers.split('\n'), function(line) { - i = line.indexOf(':'); - key = lowercase(trim(line.substr(0, i))); - val = trim(line.substr(i + 1)); - - if (key) { - parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val; - } - }); - - return parsed; -} - - -/** - * Returns a function that provides access to parsed headers. - * - * Headers are lazy parsed when first requested. - * @see parseHeaders - * - * @param {(string|Object)} headers Headers to provide access to. - * @returns {function(string=)} Returns a getter function which if called with: - * - * - if called with single an argument returns a single header value or null - * - if called with no arguments returns an object containing all headers. - */ -function headersGetter(headers) { - var headersObj = isObject(headers) ? headers : undefined; - - return function(name) { - if (!headersObj) headersObj = parseHeaders(headers); - - if (name) { - var value = headersObj[lowercase(name)]; - if (value === void 0) { - value = null; - } - return value; - } - - return headersObj; - }; -} - - -/** - * Chain all given functions - * - * This function is used for both request and response transforming - * - * @param {*} data Data to transform. - * @param {function(string=)} headers HTTP headers getter fn. - * @param {number} status HTTP status code of the response. - * @param {(Function|Array.<Function>)} fns Function or an array of functions. - * @returns {*} Transformed data. - */ -function transformData(data, headers, status, fns) { - if (isFunction(fns)) - return fns(data, headers, status); - - forEach(fns, function(fn) { - data = fn(data, headers, status); - }); - - return data; -} - - -function isSuccess(status) { - return 200 <= status && status < 300; -} - - -/** - * @ngdoc provider - * @name $httpProvider - * @description - * Use `$httpProvider` to change the default behavior of the {@link ng.$http $http} service. - * */ -function $HttpProvider() { - /** - * @ngdoc property - * @name $httpProvider#defaults - * @description - * - * Object containing default values for all {@link ng.$http $http} requests. - * - * - **`defaults.cache`** - {Object} - an object built with {@link ng.$cacheFactory `$cacheFactory`} - * that will provide the cache for all requests who set their `cache` property to `true`. - * If you set the `default.cache = false` then only requests that specify their own custom - * cache object will be cached. See {@link $http#caching $http Caching} for more information. - * - * - **`defaults.xsrfCookieName`** - {string} - Name of cookie containing the XSRF token. - * Defaults value is `'XSRF-TOKEN'`. - * - * - **`defaults.xsrfHeaderName`** - {string} - Name of HTTP header to populate with the - * XSRF token. Defaults value is `'X-XSRF-TOKEN'`. - * - * - **`defaults.headers`** - {Object} - Default headers for all $http requests. - * Refer to {@link ng.$http#setting-http-headers $http} for documentation on - * setting default headers. - * - **`defaults.headers.common`** - * - **`defaults.headers.post`** - * - **`defaults.headers.put`** - * - **`defaults.headers.patch`** - * - **/ - var defaults = this.defaults = { - // transform incoming response data - transformResponse: [defaultHttpResponseTransform], - - // transform outgoing request data - transformRequest: [function(d) { - return isObject(d) && !isFile(d) && !isBlob(d) && !isFormData(d) ? toJson(d) : d; - }], - - // default headers - headers: { - common: { - 'Accept': 'application/json, text/plain, */*' - }, - post: shallowCopy(CONTENT_TYPE_APPLICATION_JSON), - put: shallowCopy(CONTENT_TYPE_APPLICATION_JSON), - patch: shallowCopy(CONTENT_TYPE_APPLICATION_JSON) - }, - - xsrfCookieName: 'XSRF-TOKEN', - xsrfHeaderName: 'X-XSRF-TOKEN' - }; - - var useApplyAsync = false; - /** - * @ngdoc method - * @name $httpProvider#useApplyAsync - * @description - * - * Configure $http service to combine processing of multiple http responses received at around - * the same time via {@link ng.$rootScope.Scope#$applyAsync $rootScope.$applyAsync}. This can result in - * significant performance improvement for bigger applications that make many HTTP requests - * concurrently (common during application bootstrap). - * - * Defaults to false. If no value is specifed, returns the current configured value. - * - * @param {boolean=} value If true, when requests are loaded, they will schedule a deferred - * "apply" on the next tick, giving time for subsequent requests in a roughly ~10ms window - * to load and share the same digest cycle. - * - * @returns {boolean|Object} If a value is specified, returns the $httpProvider for chaining. - * otherwise, returns the current configured value. - **/ - this.useApplyAsync = function(value) { - if (isDefined(value)) { - useApplyAsync = !!value; - return this; - } - return useApplyAsync; - }; - - /** - * @ngdoc property - * @name $httpProvider#interceptors - * @description - * - * Array containing service factories for all synchronous or asynchronous {@link ng.$http $http} - * pre-processing of request or postprocessing of responses. - * - * These service factories are ordered by request, i.e. they are applied in the same order as the - * array, on request, but reverse order, on response. - * - * {@link ng.$http#interceptors Interceptors detailed info} - **/ - var interceptorFactories = this.interceptors = []; - - this.$get = ['$httpBackend', '$browser', '$cacheFactory', '$rootScope', '$q', '$injector', - function($httpBackend, $browser, $cacheFactory, $rootScope, $q, $injector) { - - var defaultCache = $cacheFactory('$http'); - - /** - * Interceptors stored in reverse order. Inner interceptors before outer interceptors. - * The reversal is needed so that we can build up the interception chain around the - * server request. - */ - var reversedInterceptors = []; - - forEach(interceptorFactories, function(interceptorFactory) { - reversedInterceptors.unshift(isString(interceptorFactory) - ? $injector.get(interceptorFactory) : $injector.invoke(interceptorFactory)); - }); - - /** - * @ngdoc service - * @kind function - * @name $http - * @requires ng.$httpBackend - * @requires $cacheFactory - * @requires $rootScope - * @requires $q - * @requires $injector - * - * @description - * The `$http` service is a core Angular service that facilitates communication with the remote - * HTTP servers via the browser's [XMLHttpRequest](https://developer.mozilla.org/en/xmlhttprequest) - * object or via [JSONP](http://en.wikipedia.org/wiki/JSONP). - * - * For unit testing applications that use `$http` service, see - * {@link ngMock.$httpBackend $httpBackend mock}. - * - * For a higher level of abstraction, please check out the {@link ngResource.$resource - * $resource} service. - * - * The $http API is based on the {@link ng.$q deferred/promise APIs} exposed by - * the $q service. While for simple usage patterns this doesn't matter much, for advanced usage - * it is important to familiarize yourself with these APIs and the guarantees they provide. - * - * - * ## General usage - * The `$http` service is a function which takes a single argument — a configuration object — - * that is used to generate an HTTP request and returns a {@link ng.$q promise} - * with two $http specific methods: `success` and `error`. - * - * ```js - * // Simple GET request example : - * $http.get('/someUrl'). - * success(function(data, status, headers, config) { - * // this callback will be called asynchronously - * // when the response is available - * }). - * error(function(data, status, headers, config) { - * // called asynchronously if an error occurs - * // or server returns response with an error status. - * }); - * ``` - * - * ```js - * // Simple POST request example (passing data) : - * $http.post('/someUrl', {msg:'hello word!'}). - * success(function(data, status, headers, config) { - * // this callback will be called asynchronously - * // when the response is available - * }). - * error(function(data, status, headers, config) { - * // called asynchronously if an error occurs - * // or server returns response with an error status. - * }); - * ``` - * - * - * Since the returned value of calling the $http function is a `promise`, you can also use - * the `then` method to register callbacks, and these callbacks will receive a single argument – - * an object representing the response. See the API signature and type info below for more - * details. - * - * A response status code between 200 and 299 is considered a success status and - * will result in the success callback being called. Note that if the response is a redirect, - * XMLHttpRequest will transparently follow it, meaning that the error callback will not be - * called for such responses. - * - * ## Writing Unit Tests that use $http - * When unit testing (using {@link ngMock ngMock}), it is necessary to call - * {@link ngMock.$httpBackend#flush $httpBackend.flush()} to flush each pending - * request using trained responses. - * - * ``` - * $httpBackend.expectGET(...); - * $http.get(...); - * $httpBackend.flush(); - * ``` - * - * ## Shortcut methods - * - * Shortcut methods are also available. All shortcut methods require passing in the URL, and - * request data must be passed in for POST/PUT requests. - * - * ```js - * $http.get('/someUrl').success(successCallback); - * $http.post('/someUrl', data).success(successCallback); - * ``` - * - * Complete list of shortcut methods: - * - * - {@link ng.$http#get $http.get} - * - {@link ng.$http#head $http.head} - * - {@link ng.$http#post $http.post} - * - {@link ng.$http#put $http.put} - * - {@link ng.$http#delete $http.delete} - * - {@link ng.$http#jsonp $http.jsonp} - * - {@link ng.$http#patch $http.patch} - * - * - * ## Setting HTTP Headers - * - * The $http service will automatically add certain HTTP headers to all requests. These defaults - * can be fully configured by accessing the `$httpProvider.defaults.headers` configuration - * object, which currently contains this default configuration: - * - * - `$httpProvider.defaults.headers.common` (headers that are common for all requests): - * - `Accept: application/json, text/plain, * / *` - * - `$httpProvider.defaults.headers.post`: (header defaults for POST requests) - * - `Content-Type: application/json` - * - `$httpProvider.defaults.headers.put` (header defaults for PUT requests) - * - `Content-Type: application/json` - * - * To add or overwrite these defaults, simply add or remove a property from these configuration - * objects. To add headers for an HTTP method other than POST or PUT, simply add a new object - * with the lowercased HTTP method name as the key, e.g. - * `$httpProvider.defaults.headers.get = { 'My-Header' : 'value' }. - * - * The defaults can also be set at runtime via the `$http.defaults` object in the same - * fashion. For example: - * - * ``` - * module.run(function($http) { - * $http.defaults.headers.common.Authorization = 'Basic YmVlcDpib29w' - * }); - * ``` - * - * In addition, you can supply a `headers` property in the config object passed when - * calling `$http(config)`, which overrides the defaults without changing them globally. - * - * To explicitly remove a header automatically added via $httpProvider.defaults.headers on a per request basis, - * Use the `headers` property, setting the desired header to `undefined`. For example: - * - * ```js - * var req = { - * method: 'POST', - * url: 'http://example.com', - * headers: { - * 'Content-Type': undefined - * }, - * data: { test: 'test' }, - * } - * - * $http(req).success(function(){...}).error(function(){...}); - * ``` - * - * ## Transforming Requests and Responses - * - * Both requests and responses can be transformed using transformation functions: `transformRequest` - * and `transformResponse`. These properties can be a single function that returns - * the transformed value (`function(data, headersGetter, status)`) or an array of such transformation functions, - * which allows you to `push` or `unshift` a new transformation function into the transformation chain. - * - * ### Default Transformations - * - * The `$httpProvider` provider and `$http` service expose `defaults.transformRequest` and - * `defaults.transformResponse` properties. If a request does not provide its own transformations - * then these will be applied. - * - * You can augment or replace the default transformations by modifying these properties by adding to or - * replacing the array. - * - * Angular provides the following default transformations: - * - * Request transformations (`$httpProvider.defaults.transformRequest` and `$http.defaults.transformRequest`): - * - * - If the `data` property of the request configuration object contains an object, serialize it - * into JSON format. - * - * Response transformations (`$httpProvider.defaults.transformResponse` and `$http.defaults.transformResponse`): - * - * - If XSRF prefix is detected, strip it (see Security Considerations section below). - * - If JSON response is detected, deserialize it using a JSON parser. - * - * - * ### Overriding the Default Transformations Per Request - * - * If you wish override the request/response transformations only for a single request then provide - * `transformRequest` and/or `transformResponse` properties on the configuration object passed - * into `$http`. - * - * Note that if you provide these properties on the config object the default transformations will be - * overwritten. If you wish to augment the default transformations then you must include them in your - * local transformation array. - * - * The following code demonstrates adding a new response transformation to be run after the default response - * transformations have been run. - * - * ```js - * function appendTransform(defaults, transform) { - * - * // We can't guarantee that the default transformation is an array - * defaults = angular.isArray(defaults) ? defaults : [defaults]; - * - * // Append the new transformation to the defaults - * return defaults.concat(transform); - * } - * - * $http({ - * url: '...', - * method: 'GET', - * transformResponse: appendTransform($http.defaults.transformResponse, function(value) { - * return doTransform(value); - * }) - * }); - * ``` - * - * - * ## Caching - * - * To enable caching, set the request configuration `cache` property to `true` (to use default - * cache) or to a custom cache object (built with {@link ng.$cacheFactory `$cacheFactory`}). - * When the cache is enabled, `$http` stores the response from the server in the specified - * cache. The next time the same request is made, the response is served from the cache without - * sending a request to the server. - * - * Note that even if the response is served from cache, delivery of the data is asynchronous in - * the same way that real requests are. - * - * If there are multiple GET requests for the same URL that should be cached using the same - * cache, but the cache is not populated yet, only one request to the server will be made and - * the remaining requests will be fulfilled using the response from the first request. - * - * You can change the default cache to a new object (built with - * {@link ng.$cacheFactory `$cacheFactory`}) by updating the - * {@link ng.$http#defaults `$http.defaults.cache`} property. All requests who set - * their `cache` property to `true` will now use this cache object. - * - * If you set the default cache to `false` then only requests that specify their own custom - * cache object will be cached. - * - * ## Interceptors - * - * Before you start creating interceptors, be sure to understand the - * {@link ng.$q $q and deferred/promise APIs}. - * - * For purposes of global error handling, authentication, or any kind of synchronous or - * asynchronous pre-processing of request or postprocessing of responses, it is desirable to be - * able to intercept requests before they are handed to the server and - * responses before they are handed over to the application code that - * initiated these requests. The interceptors leverage the {@link ng.$q - * promise APIs} to fulfill this need for both synchronous and asynchronous pre-processing. - * - * The interceptors are service factories that are registered with the `$httpProvider` by - * adding them to the `$httpProvider.interceptors` array. The factory is called and - * injected with dependencies (if specified) and returns the interceptor. - * - * There are two kinds of interceptors (and two kinds of rejection interceptors): - * - * * `request`: interceptors get called with a http `config` object. The function is free to - * modify the `config` object or create a new one. The function needs to return the `config` - * object directly, or a promise containing the `config` or a new `config` object. - * * `requestError`: interceptor gets called when a previous interceptor threw an error or - * resolved with a rejection. - * * `response`: interceptors get called with http `response` object. The function is free to - * modify the `response` object or create a new one. The function needs to return the `response` - * object directly, or as a promise containing the `response` or a new `response` object. - * * `responseError`: interceptor gets called when a previous interceptor threw an error or - * resolved with a rejection. - * - * - * ```js - * // register the interceptor as a service - * $provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) { - * return { - * // optional method - * 'request': function(config) { - * // do something on success - * return config; - * }, - * - * // optional method - * 'requestError': function(rejection) { - * // do something on error - * if (canRecover(rejection)) { - * return responseOrNewPromise - * } - * return $q.reject(rejection); - * }, - * - * - * - * // optional method - * 'response': function(response) { - * // do something on success - * return response; - * }, - * - * // optional method - * 'responseError': function(rejection) { - * // do something on error - * if (canRecover(rejection)) { - * return responseOrNewPromise - * } - * return $q.reject(rejection); - * } - * }; - * }); - * - * $httpProvider.interceptors.push('myHttpInterceptor'); - * - * - * // alternatively, register the interceptor via an anonymous factory - * $httpProvider.interceptors.push(function($q, dependency1, dependency2) { - * return { - * 'request': function(config) { - * // same as above - * }, - * - * 'response': function(response) { - * // same as above - * } - * }; - * }); - * ``` - * - * ## Security Considerations - * - * When designing web applications, consider security threats from: - * - * - [JSON vulnerability](http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx) - * - [XSRF](http://en.wikipedia.org/wiki/Cross-site_request_forgery) - * - * Both server and the client must cooperate in order to eliminate these threats. Angular comes - * pre-configured with strategies that address these issues, but for this to work backend server - * cooperation is required. - * - * ### JSON Vulnerability Protection - * - * A [JSON vulnerability](http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx) - * allows third party website to turn your JSON resource URL into - * [JSONP](http://en.wikipedia.org/wiki/JSONP) request under some conditions. To - * counter this your server can prefix all JSON requests with following string `")]}',\n"`. - * Angular will automatically strip the prefix before processing it as JSON. - * - * For example if your server needs to return: - * ```js - * ['one','two'] - * ``` - * - * which is vulnerable to attack, your server can return: - * ```js - * )]}', - * ['one','two'] - * ``` - * - * Angular will strip the prefix, before processing the JSON. - * - * - * ### Cross Site Request Forgery (XSRF) Protection - * - * [XSRF](http://en.wikipedia.org/wiki/Cross-site_request_forgery) is a technique by which - * an unauthorized site can gain your user's private data. Angular provides a mechanism - * to counter XSRF. When performing XHR requests, the $http service reads a token from a cookie - * (by default, `XSRF-TOKEN`) and sets it as an HTTP header (`X-XSRF-TOKEN`). Since only - * JavaScript that runs on your domain could read the cookie, your server can be assured that - * the XHR came from JavaScript running on your domain. The header will not be set for - * cross-domain requests. - * - * To take advantage of this, your server needs to set a token in a JavaScript readable session - * cookie called `XSRF-TOKEN` on the first HTTP GET request. On subsequent XHR requests the - * server can verify that the cookie matches `X-XSRF-TOKEN` HTTP header, and therefore be sure - * that only JavaScript running on your domain could have sent the request. The token must be - * unique for each user and must be verifiable by the server (to prevent the JavaScript from - * making up its own tokens). We recommend that the token is a digest of your site's - * authentication cookie with a [salt](https://en.wikipedia.org/wiki/Salt_(cryptography)) - * for added security. - * - * The name of the headers can be specified using the xsrfHeaderName and xsrfCookieName - * properties of either $httpProvider.defaults at config-time, $http.defaults at run-time, - * or the per-request config object. - * - * - * @param {object} config Object describing the request to be made and how it should be - * processed. The object has following properties: - * - * - **method** – `{string}` – HTTP method (e.g. 'GET', 'POST', etc) - * - **url** – `{string}` – Absolute or relative URL of the resource that is being requested. - * - **params** – `{Object.<string|Object>}` – Map of strings or objects which will be turned - * to `?key1=value1&key2=value2` after the url. If the value is not a string, it will be - * JSONified. - * - **data** – `{string|Object}` – Data to be sent as the request message data. - * - **headers** – `{Object}` – Map of strings or functions which return strings representing - * HTTP headers to send to the server. If the return value of a function is null, the - * header will not be sent. - * - **xsrfHeaderName** – `{string}` – Name of HTTP header to populate with the XSRF token. - * - **xsrfCookieName** – `{string}` – Name of cookie containing the XSRF token. - * - **transformRequest** – - * `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` – - * transform function or an array of such functions. The transform function takes the http - * request body and headers and returns its transformed (typically serialized) version. - * See {@link ng.$http#overriding-the-default-transformations-per-request - * Overriding the Default Transformations} - * - **transformResponse** – - * `{function(data, headersGetter, status)|Array.<function(data, headersGetter, status)>}` – - * transform function or an array of such functions. The transform function takes the http - * response body, headers and status and returns its transformed (typically deserialized) version. - * See {@link ng.$http#overriding-the-default-transformations-per-request - * Overriding the Default Transformations} - * - **cache** – `{boolean|Cache}` – If true, a default $http cache will be used to cache the - * GET request, otherwise if a cache instance built with - * {@link ng.$cacheFactory $cacheFactory}, this cache will be used for - * caching. - * - **timeout** – `{number|Promise}` – timeout in milliseconds, or {@link ng.$q promise} - * that should abort the request when resolved. - * - **withCredentials** - `{boolean}` - whether to set the `withCredentials` flag on the - * XHR object. See [requests with credentials](https://developer.mozilla.org/docs/Web/HTTP/Access_control_CORS#Requests_with_credentials) - * for more information. - * - **responseType** - `{string}` - see - * [requestType](https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#responseType). - * - * @returns {HttpPromise} Returns a {@link ng.$q promise} object with the - * standard `then` method and two http specific methods: `success` and `error`. The `then` - * method takes two arguments a success and an error callback which will be called with a - * response object. The `success` and `error` methods take a single argument - a function that - * will be called when the request succeeds or fails respectively. The arguments passed into - * these functions are destructured representation of the response object passed into the - * `then` method. The response object has these properties: - * - * - **data** – `{string|Object}` – The response body transformed with the transform - * functions. - * - **status** – `{number}` – HTTP status code of the response. - * - **headers** – `{function([headerName])}` – Header getter function. - * - **config** – `{Object}` – The configuration object that was used to generate the request. - * - **statusText** – `{string}` – HTTP status text of the response. - * - * @property {Array.<Object>} pendingRequests Array of config objects for currently pending - * requests. This is primarily meant to be used for debugging purposes. - * - * - * @example -<example module="httpExample"> -<file name="index.html"> - <div ng-controller="FetchController"> - <select ng-model="method"> - <option>GET</option> - <option>JSONP</option> - </select> - <input type="text" ng-model="url" size="80"/> - <button id="fetchbtn" ng-click="fetch()">fetch</button><br> - <button id="samplegetbtn" ng-click="updateModel('GET', 'http-hello.html')">Sample GET</button> - <button id="samplejsonpbtn" - ng-click="updateModel('JSONP', - 'https://angularjs.org/greet.php?callback=JSON_CALLBACK&name=Super%20Hero')"> - Sample JSONP - </button> - <button id="invalidjsonpbtn" - ng-click="updateModel('JSONP', 'https://angularjs.org/doesntexist&callback=JSON_CALLBACK')"> - Invalid JSONP - </button> - <pre>http status code: {{status}}</pre> - <pre>http response data: {{data}}</pre> - </div> -</file> -<file name="script.js"> - angular.module('httpExample', []) - .controller('FetchController', ['$scope', '$http', '$templateCache', - function($scope, $http, $templateCache) { - $scope.method = 'GET'; - $scope.url = 'http-hello.html'; - - $scope.fetch = function() { - $scope.code = null; - $scope.response = null; - - $http({method: $scope.method, url: $scope.url, cache: $templateCache}). - success(function(data, status) { - $scope.status = status; - $scope.data = data; - }). - error(function(data, status) { - $scope.data = data || "Request failed"; - $scope.status = status; - }); - }; - - $scope.updateModel = function(method, url) { - $scope.method = method; - $scope.url = url; - }; - }]); -</file> -<file name="http-hello.html"> - Hello, $http! -</file> -<file name="protractor.js" type="protractor"> - var status = element(by.binding('status')); - var data = element(by.binding('data')); - var fetchBtn = element(by.id('fetchbtn')); - var sampleGetBtn = element(by.id('samplegetbtn')); - var sampleJsonpBtn = element(by.id('samplejsonpbtn')); - var invalidJsonpBtn = element(by.id('invalidjsonpbtn')); - - it('should make an xhr GET request', function() { - sampleGetBtn.click(); - fetchBtn.click(); - expect(status.getText()).toMatch('200'); - expect(data.getText()).toMatch(/Hello, \$http!/); - }); - -// Commented out due to flakes. See https://github.com/angular/angular.js/issues/9185 -// it('should make a JSONP request to angularjs.org', function() { -// sampleJsonpBtn.click(); -// fetchBtn.click(); -// expect(status.getText()).toMatch('200'); -// expect(data.getText()).toMatch(/Super Hero!/); -// }); - - it('should make JSONP request to invalid URL and invoke the error handler', - function() { - invalidJsonpBtn.click(); - fetchBtn.click(); - expect(status.getText()).toMatch('0'); - expect(data.getText()).toMatch('Request failed'); - }); -</file> -</example> - */ - function $http(requestConfig) { - - if (!angular.isObject(requestConfig)) { - throw minErr('$http')('badreq', 'Http request configuration must be an object. Received: {0}', requestConfig); - } - - var config = extend({ - method: 'get', - transformRequest: defaults.transformRequest, - transformResponse: defaults.transformResponse - }, requestConfig); - - config.headers = mergeHeaders(requestConfig); - config.method = uppercase(config.method); - - var serverRequest = function(config) { - var headers = config.headers; - var reqData = transformData(config.data, headersGetter(headers), undefined, config.transformRequest); - - // strip content-type if data is undefined - if (isUndefined(reqData)) { - forEach(headers, function(value, header) { - if (lowercase(header) === 'content-type') { - delete headers[header]; - } - }); - } - - if (isUndefined(config.withCredentials) && !isUndefined(defaults.withCredentials)) { - config.withCredentials = defaults.withCredentials; - } - - // send request - return sendReq(config, reqData).then(transformResponse, transformResponse); - }; - - var chain = [serverRequest, undefined]; - var promise = $q.when(config); - - // apply interceptors - forEach(reversedInterceptors, function(interceptor) { - if (interceptor.request || interceptor.requestError) { - chain.unshift(interceptor.request, interceptor.requestError); - } - if (interceptor.response || interceptor.responseError) { - chain.push(interceptor.response, interceptor.responseError); - } - }); - - while (chain.length) { - var thenFn = chain.shift(); - var rejectFn = chain.shift(); - - promise = promise.then(thenFn, rejectFn); - } - - promise.success = function(fn) { - promise.then(function(response) { - fn(response.data, response.status, response.headers, config); - }); - return promise; - }; - - promise.error = function(fn) { - promise.then(null, function(response) { - fn(response.data, response.status, response.headers, config); - }); - return promise; - }; - - return promise; - - function transformResponse(response) { - // make a copy since the response must be cacheable - var resp = extend({}, response); - if (!response.data) { - resp.data = response.data; - } else { - resp.data = transformData(response.data, response.headers, response.status, config.transformResponse); - } - return (isSuccess(response.status)) - ? resp - : $q.reject(resp); - } - - function executeHeaderFns(headers) { - var headerContent, processedHeaders = {}; - - forEach(headers, function(headerFn, header) { - if (isFunction(headerFn)) { - headerContent = headerFn(); - if (headerContent != null) { - processedHeaders[header] = headerContent; - } - } else { - processedHeaders[header] = headerFn; - } - }); - - return processedHeaders; - } - - function mergeHeaders(config) { - var defHeaders = defaults.headers, - reqHeaders = extend({}, config.headers), - defHeaderName, lowercaseDefHeaderName, reqHeaderName; - - defHeaders = extend({}, defHeaders.common, defHeaders[lowercase(config.method)]); - - // using for-in instead of forEach to avoid unecessary iteration after header has been found - defaultHeadersIteration: - for (defHeaderName in defHeaders) { - lowercaseDefHeaderName = lowercase(defHeaderName); - - for (reqHeaderName in reqHeaders) { - if (lowercase(reqHeaderName) === lowercaseDefHeaderName) { - continue defaultHeadersIteration; - } - } - - reqHeaders[defHeaderName] = defHeaders[defHeaderName]; - } - - // execute if header value is a function for merged headers - return executeHeaderFns(reqHeaders); - } - } - - $http.pendingRequests = []; - - /** - * @ngdoc method - * @name $http#get - * - * @description - * Shortcut method to perform `GET` request. - * - * @param {string} url Relative or absolute URL specifying the destination of the request - * @param {Object=} config Optional configuration object - * @returns {HttpPromise} Future object - */ - - /** - * @ngdoc method - * @name $http#delete - * - * @description - * Shortcut method to perform `DELETE` request. - * - * @param {string} url Relative or absolute URL specifying the destination of the request - * @param {Object=} config Optional configuration object - * @returns {HttpPromise} Future object - */ - - /** - * @ngdoc method - * @name $http#head - * - * @description - * Shortcut method to perform `HEAD` request. - * - * @param {string} url Relative or absolute URL specifying the destination of the request - * @param {Object=} config Optional configuration object - * @returns {HttpPromise} Future object - */ - - /** - * @ngdoc method - * @name $http#jsonp - * - * @description - * Shortcut method to perform `JSONP` request. - * - * @param {string} url Relative or absolute URL specifying the destination of the request. - * The name of the callback should be the string `JSON_CALLBACK`. - * @param {Object=} config Optional configuration object - * @returns {HttpPromise} Future object - */ - createShortMethods('get', 'delete', 'head', 'jsonp'); - - /** - * @ngdoc method - * @name $http#post - * - * @description - * Shortcut method to perform `POST` request. - * - * @param {string} url Relative or absolute URL specifying the destination of the request - * @param {*} data Request content - * @param {Object=} config Optional configuration object - * @returns {HttpPromise} Future object - */ - - /** - * @ngdoc method - * @name $http#put - * - * @description - * Shortcut method to perform `PUT` request. - * - * @param {string} url Relative or absolute URL specifying the destination of the request - * @param {*} data Request content - * @param {Object=} config Optional configuration object - * @returns {HttpPromise} Future object - */ - - /** - * @ngdoc method - * @name $http#patch - * - * @description - * Shortcut method to perform `PATCH` request. - * - * @param {string} url Relative or absolute URL specifying the destination of the request - * @param {*} data Request content - * @param {Object=} config Optional configuration object - * @returns {HttpPromise} Future object - */ - createShortMethodsWithData('post', 'put', 'patch'); - - /** - * @ngdoc property - * @name $http#defaults - * - * @description - * Runtime equivalent of the `$httpProvider.defaults` property. Allows configuration of - * default headers, withCredentials as well as request and response transformations. - * - * See "Setting HTTP Headers" and "Transforming Requests and Responses" sections above. - */ - $http.defaults = defaults; - - - return $http; - - - function createShortMethods(names) { - forEach(arguments, function(name) { - $http[name] = function(url, config) { - return $http(extend(config || {}, { - method: name, - url: url - })); - }; - }); - } - - - function createShortMethodsWithData(name) { - forEach(arguments, function(name) { - $http[name] = function(url, data, config) { - return $http(extend(config || {}, { - method: name, - url: url, - data: data - })); - }; - }); - } - - - /** - * Makes the request. - * - * !!! ACCESSES CLOSURE VARS: - * $httpBackend, defaults, $log, $rootScope, defaultCache, $http.pendingRequests - */ - function sendReq(config, reqData) { - var deferred = $q.defer(), - promise = deferred.promise, - cache, - cachedResp, - reqHeaders = config.headers, - url = buildUrl(config.url, config.params); - - $http.pendingRequests.push(config); - promise.then(removePendingReq, removePendingReq); - - - if ((config.cache || defaults.cache) && config.cache !== false && - (config.method === 'GET' || config.method === 'JSONP')) { - cache = isObject(config.cache) ? config.cache - : isObject(defaults.cache) ? defaults.cache - : defaultCache; - } - - if (cache) { - cachedResp = cache.get(url); - if (isDefined(cachedResp)) { - if (isPromiseLike(cachedResp)) { - // cached request has already been sent, but there is no response yet - cachedResp.then(resolvePromiseWithResult, resolvePromiseWithResult); - } else { - // serving from cache - if (isArray(cachedResp)) { - resolvePromise(cachedResp[1], cachedResp[0], shallowCopy(cachedResp[2]), cachedResp[3]); - } else { - resolvePromise(cachedResp, 200, {}, 'OK'); - } - } - } else { - // put the promise for the non-transformed response into cache as a placeholder - cache.put(url, promise); - } - } - - - // if we won't have the response in cache, set the xsrf headers and - // send the request to the backend - if (isUndefined(cachedResp)) { - var xsrfValue = urlIsSameOrigin(config.url) - ? $browser.cookies()[config.xsrfCookieName || defaults.xsrfCookieName] - : undefined; - if (xsrfValue) { - reqHeaders[(config.xsrfHeaderName || defaults.xsrfHeaderName)] = xsrfValue; - } - - $httpBackend(config.method, url, reqData, done, reqHeaders, config.timeout, - config.withCredentials, config.responseType); - } - - return promise; - - - /** - * Callback registered to $httpBackend(): - * - caches the response if desired - * - resolves the raw $http promise - * - calls $apply - */ - function done(status, response, headersString, statusText) { - if (cache) { - if (isSuccess(status)) { - cache.put(url, [status, response, parseHeaders(headersString), statusText]); - } else { - // remove promise from the cache - cache.remove(url); - } - } - - function resolveHttpPromise() { - resolvePromise(response, status, headersString, statusText); - } - - if (useApplyAsync) { - $rootScope.$applyAsync(resolveHttpPromise); - } else { - resolveHttpPromise(); - if (!$rootScope.$$phase) $rootScope.$apply(); - } - } - - - /** - * Resolves the raw $http promise. - */ - function resolvePromise(response, status, headers, statusText) { - // normalize internal statuses to 0 - status = Math.max(status, 0); - - (isSuccess(status) ? deferred.resolve : deferred.reject)({ - data: response, - status: status, - headers: headersGetter(headers), - config: config, - statusText: statusText - }); - } - - function resolvePromiseWithResult(result) { - resolvePromise(result.data, result.status, shallowCopy(result.headers()), result.statusText); - } - - function removePendingReq() { - var idx = $http.pendingRequests.indexOf(config); - if (idx !== -1) $http.pendingRequests.splice(idx, 1); - } - } - - - function buildUrl(url, params) { - if (!params) return url; - var parts = []; - forEachSorted(params, function(value, key) { - if (value === null || isUndefined(value)) return; - if (!isArray(value)) value = [value]; - - forEach(value, function(v) { - if (isObject(v)) { - if (isDate(v)) { - v = v.toISOString(); - } else { - v = toJson(v); - } - } - parts.push(encodeUriQuery(key) + '=' + - encodeUriQuery(v)); - }); - }); - if (parts.length > 0) { - url += ((url.indexOf('?') == -1) ? '?' : '&') + parts.join('&'); - } - return url; - } - }]; -} - -function createXhr() { - return new window.XMLHttpRequest(); -} - -/** - * @ngdoc service - * @name $httpBackend - * @requires $window - * @requires $document - * - * @description - * HTTP backend used by the {@link ng.$http service} that delegates to - * XMLHttpRequest object or JSONP and deals with browser incompatibilities. - * - * You should never need to use this service directly, instead use the higher-level abstractions: - * {@link ng.$http $http} or {@link ngResource.$resource $resource}. - * - * During testing this implementation is swapped with {@link ngMock.$httpBackend mock - * $httpBackend} which can be trained with responses. - */ -function $HttpBackendProvider() { - this.$get = ['$browser', '$window', '$document', function($browser, $window, $document) { - return createHttpBackend($browser, createXhr, $browser.defer, $window.angular.callbacks, $document[0]); - }]; -} - -function createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDocument) { - // TODO(vojta): fix the signature - return function(method, url, post, callback, headers, timeout, withCredentials, responseType) { - $browser.$$incOutstandingRequestCount(); - url = url || $browser.url(); - - if (lowercase(method) == 'jsonp') { - var callbackId = '_' + (callbacks.counter++).toString(36); - callbacks[callbackId] = function(data) { - callbacks[callbackId].data = data; - callbacks[callbackId].called = true; - }; - - var jsonpDone = jsonpReq(url.replace('JSON_CALLBACK', 'angular.callbacks.' + callbackId), - callbackId, function(status, text) { - completeRequest(callback, status, callbacks[callbackId].data, "", text); - callbacks[callbackId] = noop; - }); - } else { - - var xhr = createXhr(); - - xhr.open(method, url, true); - forEach(headers, function(value, key) { - if (isDefined(value)) { - xhr.setRequestHeader(key, value); - } - }); - - xhr.onload = function requestLoaded() { - var statusText = xhr.statusText || ''; - - // responseText is the old-school way of retrieving response (supported by IE8 & 9) - // response/responseType properties were introduced in XHR Level2 spec (supported by IE10) - var response = ('response' in xhr) ? xhr.response : xhr.responseText; - - // normalize IE9 bug (http://bugs.jquery.com/ticket/1450) - var status = xhr.status === 1223 ? 204 : xhr.status; - - // fix status code when it is 0 (0 status is undocumented). - // Occurs when accessing file resources or on Android 4.1 stock browser - // while retrieving files from application cache. - if (status === 0) { - status = response ? 200 : urlResolve(url).protocol == 'file' ? 404 : 0; - } - - completeRequest(callback, - status, - response, - xhr.getAllResponseHeaders(), - statusText); - }; - - var requestError = function() { - // The response is always empty - // See https://xhr.spec.whatwg.org/#request-error-steps and https://fetch.spec.whatwg.org/#concept-network-error - completeRequest(callback, -1, null, null, ''); - }; - - xhr.onerror = requestError; - xhr.onabort = requestError; - - if (withCredentials) { - xhr.withCredentials = true; - } - - if (responseType) { - try { - xhr.responseType = responseType; - } catch (e) { - // WebKit added support for the json responseType value on 09/03/2013 - // https://bugs.webkit.org/show_bug.cgi?id=73648. Versions of Safari prior to 7 are - // known to throw when setting the value "json" as the response type. Other older - // browsers implementing the responseType - // - // The json response type can be ignored if not supported, because JSON payloads are - // parsed on the client-side regardless. - if (responseType !== 'json') { - throw e; - } - } - } - - xhr.send(post || null); - } - - if (timeout > 0) { - var timeoutId = $browserDefer(timeoutRequest, timeout); - } else if (isPromiseLike(timeout)) { - timeout.then(timeoutRequest); - } - - - function timeoutRequest() { - jsonpDone && jsonpDone(); - xhr && xhr.abort(); - } - - function completeRequest(callback, status, response, headersString, statusText) { - // cancel timeout and subsequent timeout promise resolution - if (timeoutId !== undefined) { - $browserDefer.cancel(timeoutId); - } - jsonpDone = xhr = null; - - callback(status, response, headersString, statusText); - $browser.$$completeOutstandingRequest(noop); - } - }; - - function jsonpReq(url, callbackId, done) { - // we can't use jQuery/jqLite here because jQuery does crazy shit with script elements, e.g.: - // - fetches local scripts via XHR and evals them - // - adds and immediately removes script elements from the document - var script = rawDocument.createElement('script'), callback = null; - script.type = "text/javascript"; - script.src = url; - script.async = true; - - callback = function(event) { - removeEventListenerFn(script, "load", callback); - removeEventListenerFn(script, "error", callback); - rawDocument.body.removeChild(script); - script = null; - var status = -1; - var text = "unknown"; - - if (event) { - if (event.type === "load" && !callbacks[callbackId].called) { - event = { type: "error" }; - } - text = event.type; - status = event.type === "error" ? 404 : 200; - } - - if (done) { - done(status, text); - } - }; - - addEventListenerFn(script, "load", callback); - addEventListenerFn(script, "error", callback); - rawDocument.body.appendChild(script); - return callback; - } -} - -var $interpolateMinErr = minErr('$interpolate'); - -/** - * @ngdoc provider - * @name $interpolateProvider - * - * @description - * - * Used for configuring the interpolation markup. Defaults to `{{` and `}}`. - * - * @example -<example module="customInterpolationApp"> -<file name="index.html"> -<script> - var customInterpolationApp = angular.module('customInterpolationApp', []); - - customInterpolationApp.config(function($interpolateProvider) { - $interpolateProvider.startSymbol('//'); - $interpolateProvider.endSymbol('//'); - }); - - - customInterpolationApp.controller('DemoController', function() { - this.label = "This binding is brought you by // interpolation symbols."; - }); -</script> -<div ng-app="App" ng-controller="DemoController as demo"> - //demo.label// -</div> -</file> -<file name="protractor.js" type="protractor"> - it('should interpolate binding with custom symbols', function() { - expect(element(by.binding('demo.label')).getText()).toBe('This binding is brought you by // interpolation symbols.'); - }); -</file> -</example> - */ -function $InterpolateProvider() { - var startSymbol = '{{'; - var endSymbol = '}}'; - - /** - * @ngdoc method - * @name $interpolateProvider#startSymbol - * @description - * Symbol to denote start of expression in the interpolated string. Defaults to `{{`. - * - * @param {string=} value new value to set the starting symbol to. - * @returns {string|self} Returns the symbol when used as getter and self if used as setter. - */ - this.startSymbol = function(value) { - if (value) { - startSymbol = value; - return this; - } else { - return startSymbol; - } - }; - - /** - * @ngdoc method - * @name $interpolateProvider#endSymbol - * @description - * Symbol to denote the end of expression in the interpolated string. Defaults to `}}`. - * - * @param {string=} value new value to set the ending symbol to. - * @returns {string|self} Returns the symbol when used as getter and self if used as setter. - */ - this.endSymbol = function(value) { - if (value) { - endSymbol = value; - return this; - } else { - return endSymbol; - } - }; - - - this.$get = ['$parse', '$exceptionHandler', '$sce', function($parse, $exceptionHandler, $sce) { - var startSymbolLength = startSymbol.length, - endSymbolLength = endSymbol.length, - escapedStartRegexp = new RegExp(startSymbol.replace(/./g, escape), 'g'), - escapedEndRegexp = new RegExp(endSymbol.replace(/./g, escape), 'g'); - - function escape(ch) { - return '\\\\\\' + ch; - } - - /** - * @ngdoc service - * @name $interpolate - * @kind function - * - * @requires $parse - * @requires $sce - * - * @description - * - * Compiles a string with markup into an interpolation function. This service is used by the - * HTML {@link ng.$compile $compile} service for data binding. See - * {@link ng.$interpolateProvider $interpolateProvider} for configuring the - * interpolation markup. - * - * - * ```js - * var $interpolate = ...; // injected - * var exp = $interpolate('Hello {{name | uppercase}}!'); - * expect(exp({name:'Angular'}).toEqual('Hello ANGULAR!'); - * ``` - * - * `$interpolate` takes an optional fourth argument, `allOrNothing`. If `allOrNothing` is - * `true`, the interpolation function will return `undefined` unless all embedded expressions - * evaluate to a value other than `undefined`. - * - * ```js - * var $interpolate = ...; // injected - * var context = {greeting: 'Hello', name: undefined }; - * - * // default "forgiving" mode - * var exp = $interpolate('{{greeting}} {{name}}!'); - * expect(exp(context)).toEqual('Hello !'); - * - * // "allOrNothing" mode - * exp = $interpolate('{{greeting}} {{name}}!', false, null, true); - * expect(exp(context)).toBeUndefined(); - * context.name = 'Angular'; - * expect(exp(context)).toEqual('Hello Angular!'); - * ``` - * - * `allOrNothing` is useful for interpolating URLs. `ngSrc` and `ngSrcset` use this behavior. - * - * ####Escaped Interpolation - * $interpolate provides a mechanism for escaping interpolation markers. Start and end markers - * can be escaped by preceding each of their characters with a REVERSE SOLIDUS U+005C (backslash). - * It will be rendered as a regular start/end marker, and will not be interpreted as an expression - * or binding. - * - * This enables web-servers to prevent script injection attacks and defacing attacks, to some - * degree, while also enabling code examples to work without relying on the - * {@link ng.directive:ngNonBindable ngNonBindable} directive. - * - * **For security purposes, it is strongly encouraged that web servers escape user-supplied data, - * replacing angle brackets (<, >) with &lt; and &gt; respectively, and replacing all - * interpolation start/end markers with their escaped counterparts.** - * - * Escaped interpolation markers are only replaced with the actual interpolation markers in rendered - * output when the $interpolate service processes the text. So, for HTML elements interpolated - * by {@link ng.$compile $compile}, or otherwise interpolated with the `mustHaveExpression` parameter - * set to `true`, the interpolated text must contain an unescaped interpolation expression. As such, - * this is typically useful only when user-data is used in rendering a template from the server, or - * when otherwise untrusted data is used by a directive. - * - * <example> - * <file name="index.html"> - * <div ng-init="username='A user'"> - * <p ng-init="apptitle='Escaping demo'">{{apptitle}}: \{\{ username = "defaced value"; \}\} - * </p> - * <p><strong>{{username}}</strong> attempts to inject code which will deface the - * application, but fails to accomplish their task, because the server has correctly - * escaped the interpolation start/end markers with REVERSE SOLIDUS U+005C (backslash) - * characters.</p> - * <p>Instead, the result of the attempted script injection is visible, and can be removed - * from the database by an administrator.</p> - * </div> - * </file> - * </example> - * - * @param {string} text The text with markup to interpolate. - * @param {boolean=} mustHaveExpression if set to true then the interpolation string must have - * embedded expression in order to return an interpolation function. Strings with no - * embedded expression will return null for the interpolation function. - * @param {string=} trustedContext when provided, the returned function passes the interpolated - * result through {@link ng.$sce#getTrusted $sce.getTrusted(interpolatedResult, - * trustedContext)} before returning it. Refer to the {@link ng.$sce $sce} service that - * provides Strict Contextual Escaping for details. - * @param {boolean=} allOrNothing if `true`, then the returned function returns undefined - * unless all embedded expressions evaluate to a value other than `undefined`. - * @returns {function(context)} an interpolation function which is used to compute the - * interpolated string. The function has these parameters: - * - * - `context`: evaluation context for all expressions embedded in the interpolated text - */ - function $interpolate(text, mustHaveExpression, trustedContext, allOrNothing) { - allOrNothing = !!allOrNothing; - var startIndex, - endIndex, - index = 0, - expressions = [], - parseFns = [], - textLength = text.length, - exp, - concat = [], - expressionPositions = []; - - while (index < textLength) { - if (((startIndex = text.indexOf(startSymbol, index)) != -1) && - ((endIndex = text.indexOf(endSymbol, startIndex + startSymbolLength)) != -1)) { - if (index !== startIndex) { - concat.push(unescapeText(text.substring(index, startIndex))); - } - exp = text.substring(startIndex + startSymbolLength, endIndex); - expressions.push(exp); - parseFns.push($parse(exp, parseStringifyInterceptor)); - index = endIndex + endSymbolLength; - expressionPositions.push(concat.length); - concat.push(''); - } else { - // we did not find an interpolation, so we have to add the remainder to the separators array - if (index !== textLength) { - concat.push(unescapeText(text.substring(index))); - } - break; - } - } - - // Concatenating expressions makes it hard to reason about whether some combination of - // concatenated values are unsafe to use and could easily lead to XSS. By requiring that a - // single expression be used for iframe[src], object[src], etc., we ensure that the value - // that's used is assigned or constructed by some JS code somewhere that is more testable or - // make it obvious that you bound the value to some user controlled value. This helps reduce - // the load when auditing for XSS issues. - if (trustedContext && concat.length > 1) { - throw $interpolateMinErr('noconcat', - "Error while interpolating: {0}\nStrict Contextual Escaping disallows " + - "interpolations that concatenate multiple expressions when a trusted value is " + - "required. See http://docs.angularjs.org/api/ng.$sce", text); - } - - if (!mustHaveExpression || expressions.length) { - var compute = function(values) { - for (var i = 0, ii = expressions.length; i < ii; i++) { - if (allOrNothing && isUndefined(values[i])) return; - concat[expressionPositions[i]] = values[i]; - } - return concat.join(''); - }; - - var getValue = function(value) { - return trustedContext ? - $sce.getTrusted(trustedContext, value) : - $sce.valueOf(value); - }; - - var stringify = function(value) { - if (value == null) { // null || undefined - return ''; - } - switch (typeof value) { - case 'string': - break; - case 'number': - value = '' + value; - break; - default: - value = toJson(value); - } - - return value; - }; - - return extend(function interpolationFn(context) { - var i = 0; - var ii = expressions.length; - var values = new Array(ii); - - try { - for (; i < ii; i++) { - values[i] = parseFns[i](context); - } - - return compute(values); - } catch (err) { - var newErr = $interpolateMinErr('interr', "Can't interpolate: {0}\n{1}", text, - err.toString()); - $exceptionHandler(newErr); - } - - }, { - // all of these properties are undocumented for now - exp: text, //just for compatibility with regular watchers created via $watch - expressions: expressions, - $$watchDelegate: function(scope, listener, objectEquality) { - var lastValue; - return scope.$watchGroup(parseFns, function interpolateFnWatcher(values, oldValues) { - var currValue = compute(values); - if (isFunction(listener)) { - listener.call(this, currValue, values !== oldValues ? lastValue : currValue, scope); - } - lastValue = currValue; - }, objectEquality); - } - }); - } - - function unescapeText(text) { - return text.replace(escapedStartRegexp, startSymbol). - replace(escapedEndRegexp, endSymbol); - } - - function parseStringifyInterceptor(value) { - try { - value = getValue(value); - return allOrNothing && !isDefined(value) ? value : stringify(value); - } catch (err) { - var newErr = $interpolateMinErr('interr', "Can't interpolate: {0}\n{1}", text, - err.toString()); - $exceptionHandler(newErr); - } - } - } - - - /** - * @ngdoc method - * @name $interpolate#startSymbol - * @description - * Symbol to denote the start of expression in the interpolated string. Defaults to `{{`. - * - * Use {@link ng.$interpolateProvider#startSymbol `$interpolateProvider.startSymbol`} to change - * the symbol. - * - * @returns {string} start symbol. - */ - $interpolate.startSymbol = function() { - return startSymbol; - }; - - - /** - * @ngdoc method - * @name $interpolate#endSymbol - * @description - * Symbol to denote the end of expression in the interpolated string. Defaults to `}}`. - * - * Use {@link ng.$interpolateProvider#endSymbol `$interpolateProvider.endSymbol`} to change - * the symbol. - * - * @returns {string} end symbol. - */ - $interpolate.endSymbol = function() { - return endSymbol; - }; - - return $interpolate; - }]; -} - -function $IntervalProvider() { - this.$get = ['$rootScope', '$window', '$q', '$$q', - function($rootScope, $window, $q, $$q) { - var intervals = {}; - - - /** - * @ngdoc service - * @name $interval - * - * @description - * Angular's wrapper for `window.setInterval`. The `fn` function is executed every `delay` - * milliseconds. - * - * The return value of registering an interval function is a promise. This promise will be - * notified upon each tick of the interval, and will be resolved after `count` iterations, or - * run indefinitely if `count` is not defined. The value of the notification will be the - * number of iterations that have run. - * To cancel an interval, call `$interval.cancel(promise)`. - * - * In tests you can use {@link ngMock.$interval#flush `$interval.flush(millis)`} to - * move forward by `millis` milliseconds and trigger any functions scheduled to run in that - * time. - * - * <div class="alert alert-warning"> - * **Note**: Intervals created by this service must be explicitly destroyed when you are finished - * with them. In particular they are not automatically destroyed when a controller's scope or a - * directive's element are destroyed. - * You should take this into consideration and make sure to always cancel the interval at the - * appropriate moment. See the example below for more details on how and when to do this. - * </div> - * - * @param {function()} fn A function that should be called repeatedly. - * @param {number} delay Number of milliseconds between each function call. - * @param {number=} [count=0] Number of times to repeat. If not set, or 0, will repeat - * indefinitely. - * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise - * will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block. - * @returns {promise} A promise which will be notified on each iteration. - * - * @example - * <example module="intervalExample"> - * <file name="index.html"> - * <script> - * angular.module('intervalExample', []) - * .controller('ExampleController', ['$scope', '$interval', - * function($scope, $interval) { - * $scope.format = 'M/d/yy h:mm:ss a'; - * $scope.blood_1 = 100; - * $scope.blood_2 = 120; - * - * var stop; - * $scope.fight = function() { - * // Don't start a new fight if we are already fighting - * if ( angular.isDefined(stop) ) return; - * - * stop = $interval(function() { - * if ($scope.blood_1 > 0 && $scope.blood_2 > 0) { - * $scope.blood_1 = $scope.blood_1 - 3; - * $scope.blood_2 = $scope.blood_2 - 4; - * } else { - * $scope.stopFight(); - * } - * }, 100); - * }; - * - * $scope.stopFight = function() { - * if (angular.isDefined(stop)) { - * $interval.cancel(stop); - * stop = undefined; - * } - * }; - * - * $scope.resetFight = function() { - * $scope.blood_1 = 100; - * $scope.blood_2 = 120; - * }; - * - * $scope.$on('$destroy', function() { - * // Make sure that the interval is destroyed too - * $scope.stopFight(); - * }); - * }]) - * // Register the 'myCurrentTime' directive factory method. - * // We inject $interval and dateFilter service since the factory method is DI. - * .directive('myCurrentTime', ['$interval', 'dateFilter', - * function($interval, dateFilter) { - * // return the directive link function. (compile function not needed) - * return function(scope, element, attrs) { - * var format, // date format - * stopTime; // so that we can cancel the time updates - * - * // used to update the UI - * function updateTime() { - * element.text(dateFilter(new Date(), format)); - * } - * - * // watch the expression, and update the UI on change. - * scope.$watch(attrs.myCurrentTime, function(value) { - * format = value; - * updateTime(); - * }); - * - * stopTime = $interval(updateTime, 1000); - * - * // listen on DOM destroy (removal) event, and cancel the next UI update - * // to prevent updating time after the DOM element was removed. - * element.on('$destroy', function() { - * $interval.cancel(stopTime); - * }); - * } - * }]); - * </script> - * - * <div> - * <div ng-controller="ExampleController"> - * Date format: <input ng-model="format"> <hr/> - * Current time is: <span my-current-time="format"></span> - * <hr/> - * Blood 1 : <font color='red'>{{blood_1}}</font> - * Blood 2 : <font color='red'>{{blood_2}}</font> - * <button type="button" data-ng-click="fight()">Fight</button> - * <button type="button" data-ng-click="stopFight()">StopFight</button> - * <button type="button" data-ng-click="resetFight()">resetFight</button> - * </div> - * </div> - * - * </file> - * </example> - */ - function interval(fn, delay, count, invokeApply) { - var setInterval = $window.setInterval, - clearInterval = $window.clearInterval, - iteration = 0, - skipApply = (isDefined(invokeApply) && !invokeApply), - deferred = (skipApply ? $$q : $q).defer(), - promise = deferred.promise; - - count = isDefined(count) ? count : 0; - - promise.then(null, null, fn); - - promise.$$intervalId = setInterval(function tick() { - deferred.notify(iteration++); - - if (count > 0 && iteration >= count) { - deferred.resolve(iteration); - clearInterval(promise.$$intervalId); - delete intervals[promise.$$intervalId]; - } - - if (!skipApply) $rootScope.$apply(); - - }, delay); - - intervals[promise.$$intervalId] = deferred; - - return promise; - } - - - /** - * @ngdoc method - * @name $interval#cancel - * - * @description - * Cancels a task associated with the `promise`. - * - * @param {promise} promise returned by the `$interval` function. - * @returns {boolean} Returns `true` if the task was successfully canceled. - */ - interval.cancel = function(promise) { - if (promise && promise.$$intervalId in intervals) { - intervals[promise.$$intervalId].reject('canceled'); - $window.clearInterval(promise.$$intervalId); - delete intervals[promise.$$intervalId]; - return true; - } - return false; - }; - - return interval; - }]; -} - -/** - * @ngdoc service - * @name $locale - * - * @description - * $locale service provides localization rules for various Angular components. As of right now the - * only public api is: - * - * * `id` – `{string}` – locale id formatted as `languageId-countryId` (e.g. `en-us`) - */ -function $LocaleProvider() { - this.$get = function() { - return { - id: 'en-us', - - NUMBER_FORMATS: { - DECIMAL_SEP: '.', - GROUP_SEP: ',', - PATTERNS: [ - { // Decimal Pattern - minInt: 1, - minFrac: 0, - maxFrac: 3, - posPre: '', - posSuf: '', - negPre: '-', - negSuf: '', - gSize: 3, - lgSize: 3 - },{ //Currency Pattern - minInt: 1, - minFrac: 2, - maxFrac: 2, - posPre: '\u00A4', - posSuf: '', - negPre: '(\u00A4', - negSuf: ')', - gSize: 3, - lgSize: 3 - } - ], - CURRENCY_SYM: '$' - }, - - DATETIME_FORMATS: { - MONTH: - 'January,February,March,April,May,June,July,August,September,October,November,December' - .split(','), - SHORTMONTH: 'Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'.split(','), - DAY: 'Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday'.split(','), - SHORTDAY: 'Sun,Mon,Tue,Wed,Thu,Fri,Sat'.split(','), - AMPMS: ['AM','PM'], - medium: 'MMM d, y h:mm:ss a', - 'short': 'M/d/yy h:mm a', - fullDate: 'EEEE, MMMM d, y', - longDate: 'MMMM d, y', - mediumDate: 'MMM d, y', - shortDate: 'M/d/yy', - mediumTime: 'h:mm:ss a', - shortTime: 'h:mm a' - }, - - pluralCat: function(num) { - if (num === 1) { - return 'one'; - } - return 'other'; - } - }; - }; -} - -var PATH_MATCH = /^([^\?#]*)(\?([^#]*))?(#(.*))?$/, - DEFAULT_PORTS = {'http': 80, 'https': 443, 'ftp': 21}; -var $locationMinErr = minErr('$location'); - - -/** - * Encode path using encodeUriSegment, ignoring forward slashes - * - * @param {string} path Path to encode - * @returns {string} - */ -function encodePath(path) { - var segments = path.split('/'), - i = segments.length; - - while (i--) { - segments[i] = encodeUriSegment(segments[i]); - } - - return segments.join('/'); -} - -function parseAbsoluteUrl(absoluteUrl, locationObj) { - var parsedUrl = urlResolve(absoluteUrl); - - locationObj.$$protocol = parsedUrl.protocol; - locationObj.$$host = parsedUrl.hostname; - locationObj.$$port = int(parsedUrl.port) || DEFAULT_PORTS[parsedUrl.protocol] || null; -} - - -function parseAppUrl(relativeUrl, locationObj) { - var prefixed = (relativeUrl.charAt(0) !== '/'); - if (prefixed) { - relativeUrl = '/' + relativeUrl; - } - var match = urlResolve(relativeUrl); - locationObj.$$path = decodeURIComponent(prefixed && match.pathname.charAt(0) === '/' ? - match.pathname.substring(1) : match.pathname); - locationObj.$$search = parseKeyValue(match.search); - locationObj.$$hash = decodeURIComponent(match.hash); - - // make sure path starts with '/'; - if (locationObj.$$path && locationObj.$$path.charAt(0) != '/') { - locationObj.$$path = '/' + locationObj.$$path; - } -} - - -/** - * - * @param {string} begin - * @param {string} whole - * @returns {string} returns text from whole after begin or undefined if it does not begin with - * expected string. - */ -function beginsWith(begin, whole) { - if (whole.indexOf(begin) === 0) { - return whole.substr(begin.length); - } -} - - -function stripHash(url) { - var index = url.indexOf('#'); - return index == -1 ? url : url.substr(0, index); -} - -function trimEmptyHash(url) { - return url.replace(/(#.+)|#$/, '$1'); -} - - -function stripFile(url) { - return url.substr(0, stripHash(url).lastIndexOf('/') + 1); -} - -/* return the server only (scheme://host:port) */ -function serverBase(url) { - return url.substring(0, url.indexOf('/', url.indexOf('//') + 2)); -} - - -/** - * LocationHtml5Url represents an url - * This object is exposed as $location service when HTML5 mode is enabled and supported - * - * @constructor - * @param {string} appBase application base URL - * @param {string} basePrefix url path prefix - */ -function LocationHtml5Url(appBase, basePrefix) { - this.$$html5 = true; - basePrefix = basePrefix || ''; - var appBaseNoFile = stripFile(appBase); - parseAbsoluteUrl(appBase, this); - - - /** - * Parse given html5 (regular) url string into properties - * @param {string} url HTML5 url - * @private - */ - this.$$parse = function(url) { - var pathUrl = beginsWith(appBaseNoFile, url); - if (!isString(pathUrl)) { - throw $locationMinErr('ipthprfx', 'Invalid url "{0}", missing path prefix "{1}".', url, - appBaseNoFile); - } - - parseAppUrl(pathUrl, this); - - if (!this.$$path) { - this.$$path = '/'; - } - - this.$$compose(); - }; - - /** - * Compose url and update `absUrl` property - * @private - */ - this.$$compose = function() { - var search = toKeyValue(this.$$search), - hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : ''; - - this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash; - this.$$absUrl = appBaseNoFile + this.$$url.substr(1); // first char is always '/' - }; - - this.$$parseLinkUrl = function(url, relHref) { - if (relHref && relHref[0] === '#') { - // special case for links to hash fragments: - // keep the old url and only replace the hash fragment - this.hash(relHref.slice(1)); - return true; - } - var appUrl, prevAppUrl; - var rewrittenUrl; - - if ((appUrl = beginsWith(appBase, url)) !== undefined) { - prevAppUrl = appUrl; - if ((appUrl = beginsWith(basePrefix, appUrl)) !== undefined) { - rewrittenUrl = appBaseNoFile + (beginsWith('/', appUrl) || appUrl); - } else { - rewrittenUrl = appBase + prevAppUrl; - } - } else if ((appUrl = beginsWith(appBaseNoFile, url)) !== undefined) { - rewrittenUrl = appBaseNoFile + appUrl; - } else if (appBaseNoFile == url + '/') { - rewrittenUrl = appBaseNoFile; - } - if (rewrittenUrl) { - this.$$parse(rewrittenUrl); - } - return !!rewrittenUrl; - }; -} - - -/** - * LocationHashbangUrl represents url - * This object is exposed as $location service when developer doesn't opt into html5 mode. - * It also serves as the base class for html5 mode fallback on legacy browsers. - * - * @constructor - * @param {string} appBase application base URL - * @param {string} hashPrefix hashbang prefix - */ -function LocationHashbangUrl(appBase, hashPrefix) { - var appBaseNoFile = stripFile(appBase); - - parseAbsoluteUrl(appBase, this); - - - /** - * Parse given hashbang url into properties - * @param {string} url Hashbang url - * @private - */ - this.$$parse = function(url) { - var withoutBaseUrl = beginsWith(appBase, url) || beginsWith(appBaseNoFile, url); - var withoutHashUrl; - - if (withoutBaseUrl.charAt(0) === '#') { - - // The rest of the url starts with a hash so we have - // got either a hashbang path or a plain hash fragment - withoutHashUrl = beginsWith(hashPrefix, withoutBaseUrl); - if (isUndefined(withoutHashUrl)) { - // There was no hashbang prefix so we just have a hash fragment - withoutHashUrl = withoutBaseUrl; - } - - } else { - // There was no hashbang path nor hash fragment: - // If we are in HTML5 mode we use what is left as the path; - // Otherwise we ignore what is left - withoutHashUrl = this.$$html5 ? withoutBaseUrl : ''; - } - - parseAppUrl(withoutHashUrl, this); - - this.$$path = removeWindowsDriveName(this.$$path, withoutHashUrl, appBase); - - this.$$compose(); - - /* - * In Windows, on an anchor node on documents loaded from - * the filesystem, the browser will return a pathname - * prefixed with the drive name ('/C:/path') when a - * pathname without a drive is set: - * * a.setAttribute('href', '/foo') - * * a.pathname === '/C:/foo' //true - * - * Inside of Angular, we're always using pathnames that - * do not include drive names for routing. - */ - function removeWindowsDriveName(path, url, base) { - /* - Matches paths for file protocol on windows, - such as /C:/foo/bar, and captures only /foo/bar. - */ - var windowsFilePathExp = /^\/[A-Z]:(\/.*)/; - - var firstPathSegmentMatch; - - //Get the relative path from the input URL. - if (url.indexOf(base) === 0) { - url = url.replace(base, ''); - } - - // The input URL intentionally contains a first path segment that ends with a colon. - if (windowsFilePathExp.exec(url)) { - return path; - } - - firstPathSegmentMatch = windowsFilePathExp.exec(path); - return firstPathSegmentMatch ? firstPathSegmentMatch[1] : path; - } - }; - - /** - * Compose hashbang url and update `absUrl` property - * @private - */ - this.$$compose = function() { - var search = toKeyValue(this.$$search), - hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : ''; - - this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash; - this.$$absUrl = appBase + (this.$$url ? hashPrefix + this.$$url : ''); - }; - - this.$$parseLinkUrl = function(url, relHref) { - if (stripHash(appBase) == stripHash(url)) { - this.$$parse(url); - return true; - } - return false; - }; -} - - -/** - * LocationHashbangUrl represents url - * This object is exposed as $location service when html5 history api is enabled but the browser - * does not support it. - * - * @constructor - * @param {string} appBase application base URL - * @param {string} hashPrefix hashbang prefix - */ -function LocationHashbangInHtml5Url(appBase, hashPrefix) { - this.$$html5 = true; - LocationHashbangUrl.apply(this, arguments); - - var appBaseNoFile = stripFile(appBase); - - this.$$parseLinkUrl = function(url, relHref) { - if (relHref && relHref[0] === '#') { - // special case for links to hash fragments: - // keep the old url and only replace the hash fragment - this.hash(relHref.slice(1)); - return true; - } - - var rewrittenUrl; - var appUrl; - - if (appBase == stripHash(url)) { - rewrittenUrl = url; - } else if ((appUrl = beginsWith(appBaseNoFile, url))) { - rewrittenUrl = appBase + hashPrefix + appUrl; - } else if (appBaseNoFile === url + '/') { - rewrittenUrl = appBaseNoFile; - } - if (rewrittenUrl) { - this.$$parse(rewrittenUrl); - } - return !!rewrittenUrl; - }; - - this.$$compose = function() { - var search = toKeyValue(this.$$search), - hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : ''; - - this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash; - // include hashPrefix in $$absUrl when $$url is empty so IE8 & 9 do not reload page because of removal of '#' - this.$$absUrl = appBase + hashPrefix + this.$$url; - }; - -} - - -var locationPrototype = { - - /** - * Are we in html5 mode? - * @private - */ - $$html5: false, - - /** - * Has any change been replacing? - * @private - */ - $$replace: false, - - /** - * @ngdoc method - * @name $location#absUrl - * - * @description - * This method is getter only. - * - * Return full url representation with all segments encoded according to rules specified in - * [RFC 3986](http://www.ietf.org/rfc/rfc3986.txt). - * - * - * ```js - * // given url http://example.com/#/some/path?foo=bar&baz=xoxo - * var absUrl = $location.absUrl(); - * // => "http://example.com/#/some/path?foo=bar&baz=xoxo" - * ``` - * - * @return {string} full url - */ - absUrl: locationGetter('$$absUrl'), - - /** - * @ngdoc method - * @name $location#url - * - * @description - * This method is getter / setter. - * - * Return url (e.g. `/path?a=b#hash`) when called without any parameter. - * - * Change path, search and hash, when called with parameter and return `$location`. - * - * - * ```js - * // given url http://example.com/#/some/path?foo=bar&baz=xoxo - * var url = $location.url(); - * // => "/some/path?foo=bar&baz=xoxo" - * ``` - * - * @param {string=} url New url without base prefix (e.g. `/path?a=b#hash`) - * @return {string} url - */ - url: function(url) { - if (isUndefined(url)) - return this.$$url; - - var match = PATH_MATCH.exec(url); - if (match[1] || url === '') this.path(decodeURIComponent(match[1])); - if (match[2] || match[1] || url === '') this.search(match[3] || ''); - this.hash(match[5] || ''); - - return this; - }, - - /** - * @ngdoc method - * @name $location#protocol - * - * @description - * This method is getter only. - * - * Return protocol of current url. - * - * - * ```js - * // given url http://example.com/#/some/path?foo=bar&baz=xoxo - * var protocol = $location.protocol(); - * // => "http" - * ``` - * - * @return {string} protocol of current url - */ - protocol: locationGetter('$$protocol'), - - /** - * @ngdoc method - * @name $location#host - * - * @description - * This method is getter only. - * - * Return host of current url. - * - * - * ```js - * // given url http://example.com/#/some/path?foo=bar&baz=xoxo - * var host = $location.host(); - * // => "example.com" - * ``` - * - * @return {string} host of current url. - */ - host: locationGetter('$$host'), - - /** - * @ngdoc method - * @name $location#port - * - * @description - * This method is getter only. - * - * Return port of current url. - * - * - * ```js - * // given url http://example.com/#/some/path?foo=bar&baz=xoxo - * var port = $location.port(); - * // => 80 - * ``` - * - * @return {Number} port - */ - port: locationGetter('$$port'), - - /** - * @ngdoc method - * @name $location#path - * - * @description - * This method is getter / setter. - * - * Return path of current url when called without any parameter. - * - * Change path when called with parameter and return `$location`. - * - * Note: Path should always begin with forward slash (/), this method will add the forward slash - * if it is missing. - * - * - * ```js - * // given url http://example.com/#/some/path?foo=bar&baz=xoxo - * var path = $location.path(); - * // => "/some/path" - * ``` - * - * @param {(string|number)=} path New path - * @return {string} path - */ - path: locationGetterSetter('$$path', function(path) { - path = path !== null ? path.toString() : ''; - return path.charAt(0) == '/' ? path : '/' + path; - }), - - /** - * @ngdoc method - * @name $location#search - * - * @description - * This method is getter / setter. - * - * Return search part (as object) of current url when called without any parameter. - * - * Change search part when called with parameter and return `$location`. - * - * - * ```js - * // given url http://example.com/#/some/path?foo=bar&baz=xoxo - * var searchObject = $location.search(); - * // => {foo: 'bar', baz: 'xoxo'} - * - * // set foo to 'yipee' - * $location.search('foo', 'yipee'); - * // $location.search() => {foo: 'yipee', baz: 'xoxo'} - * ``` - * - * @param {string|Object.<string>|Object.<Array.<string>>} search New search params - string or - * hash object. - * - * When called with a single argument the method acts as a setter, setting the `search` component - * of `$location` to the specified value. - * - * If the argument is a hash object containing an array of values, these values will be encoded - * as duplicate search parameters in the url. - * - * @param {(string|Number|Array<string>|boolean)=} paramValue If `search` is a string or number, then `paramValue` - * will override only a single search property. - * - * If `paramValue` is an array, it will override the property of the `search` component of - * `$location` specified via the first argument. - * - * If `paramValue` is `null`, the property specified via the first argument will be deleted. - * - * If `paramValue` is `true`, the property specified via the first argument will be added with no - * value nor trailing equal sign. - * - * @return {Object} If called with no arguments returns the parsed `search` object. If called with - * one or more arguments returns `$location` object itself. - */ - search: function(search, paramValue) { - switch (arguments.length) { - case 0: - return this.$$search; - case 1: - if (isString(search) || isNumber(search)) { - search = search.toString(); - this.$$search = parseKeyValue(search); - } else if (isObject(search)) { - search = copy(search, {}); - // remove object undefined or null properties - forEach(search, function(value, key) { - if (value == null) delete search[key]; - }); - - this.$$search = search; - } else { - throw $locationMinErr('isrcharg', - 'The first argument of the `$location#search()` call must be a string or an object.'); - } - break; - default: - if (isUndefined(paramValue) || paramValue === null) { - delete this.$$search[search]; - } else { - this.$$search[search] = paramValue; - } - } - - this.$$compose(); - return this; - }, - - /** - * @ngdoc method - * @name $location#hash - * - * @description - * This method is getter / setter. - * - * Return hash fragment when called without any parameter. - * - * Change hash fragment when called with parameter and return `$location`. - * - * - * ```js - * // given url http://example.com/#/some/path?foo=bar&baz=xoxo#hashValue - * var hash = $location.hash(); - * // => "hashValue" - * ``` - * - * @param {(string|number)=} hash New hash fragment - * @return {string} hash - */ - hash: locationGetterSetter('$$hash', function(hash) { - return hash !== null ? hash.toString() : ''; - }), - - /** - * @ngdoc method - * @name $location#replace - * - * @description - * If called, all changes to $location during current `$digest` will be replacing current history - * record, instead of adding new one. - */ - replace: function() { - this.$$replace = true; - return this; - } -}; - -forEach([LocationHashbangInHtml5Url, LocationHashbangUrl, LocationHtml5Url], function(Location) { - Location.prototype = Object.create(locationPrototype); - - /** - * @ngdoc method - * @name $location#state - * - * @description - * This method is getter / setter. - * - * Return the history state object when called without any parameter. - * - * Change the history state object when called with one parameter and return `$location`. - * The state object is later passed to `pushState` or `replaceState`. - * - * NOTE: This method is supported only in HTML5 mode and only in browsers supporting - * the HTML5 History API (i.e. methods `pushState` and `replaceState`). If you need to support - * older browsers (like IE9 or Android < 4.0), don't use this method. - * - * @param {object=} state State object for pushState or replaceState - * @return {object} state - */ - Location.prototype.state = function(state) { - if (!arguments.length) - return this.$$state; - - if (Location !== LocationHtml5Url || !this.$$html5) { - throw $locationMinErr('nostate', 'History API state support is available only ' + - 'in HTML5 mode and only in browsers supporting HTML5 History API'); - } - // The user might modify `stateObject` after invoking `$location.state(stateObject)` - // but we're changing the $$state reference to $browser.state() during the $digest - // so the modification window is narrow. - this.$$state = isUndefined(state) ? null : state; - - return this; - }; -}); - - -function locationGetter(property) { - return function() { - return this[property]; - }; -} - - -function locationGetterSetter(property, preprocess) { - return function(value) { - if (isUndefined(value)) - return this[property]; - - this[property] = preprocess(value); - this.$$compose(); - - return this; - }; -} - - -/** - * @ngdoc service - * @name $location - * - * @requires $rootElement - * - * @description - * The $location service parses the URL in the browser address bar (based on the - * [window.location](https://developer.mozilla.org/en/window.location)) and makes the URL - * available to your application. Changes to the URL in the address bar are reflected into - * $location service and changes to $location are reflected into the browser address bar. - * - * **The $location service:** - * - * - Exposes the current URL in the browser address bar, so you can - * - Watch and observe the URL. - * - Change the URL. - * - Synchronizes the URL with the browser when the user - * - Changes the address bar. - * - Clicks the back or forward button (or clicks a History link). - * - Clicks on a link. - * - Represents the URL object as a set of methods (protocol, host, port, path, search, hash). - * - * For more information see {@link guide/$location Developer Guide: Using $location} - */ - -/** - * @ngdoc provider - * @name $locationProvider - * @description - * Use the `$locationProvider` to configure how the application deep linking paths are stored. - */ -function $LocationProvider() { - var hashPrefix = '', - html5Mode = { - enabled: false, - requireBase: true, - rewriteLinks: true - }; - - /** - * @ngdoc method - * @name $locationProvider#hashPrefix - * @description - * @param {string=} prefix Prefix for hash part (containing path and search) - * @returns {*} current value if used as getter or itself (chaining) if used as setter - */ - this.hashPrefix = function(prefix) { - if (isDefined(prefix)) { - hashPrefix = prefix; - return this; - } else { - return hashPrefix; - } - }; - - /** - * @ngdoc method - * @name $locationProvider#html5Mode - * @description - * @param {(boolean|Object)=} mode If boolean, sets `html5Mode.enabled` to value. - * If object, sets `enabled`, `requireBase` and `rewriteLinks` to respective values. Supported - * properties: - * - **enabled** – `{boolean}` – (default: false) If true, will rely on `history.pushState` to - * change urls where supported. Will fall back to hash-prefixed paths in browsers that do not - * support `pushState`. - * - **requireBase** - `{boolean}` - (default: `true`) When html5Mode is enabled, specifies - * whether or not a <base> tag is required to be present. If `enabled` and `requireBase` are - * true, and a base tag is not present, an error will be thrown when `$location` is injected. - * See the {@link guide/$location $location guide for more information} - * - **rewriteLinks** - `{boolean}` - (default: `true`) When html5Mode is enabled, - * enables/disables url rewriting for relative links. - * - * @returns {Object} html5Mode object if used as getter or itself (chaining) if used as setter - */ - this.html5Mode = function(mode) { - if (isBoolean(mode)) { - html5Mode.enabled = mode; - return this; - } else if (isObject(mode)) { - - if (isBoolean(mode.enabled)) { - html5Mode.enabled = mode.enabled; - } - - if (isBoolean(mode.requireBase)) { - html5Mode.requireBase = mode.requireBase; - } - - if (isBoolean(mode.rewriteLinks)) { - html5Mode.rewriteLinks = mode.rewriteLinks; - } - - return this; - } else { - return html5Mode; - } - }; - - /** - * @ngdoc event - * @name $location#$locationChangeStart - * @eventType broadcast on root scope - * @description - * Broadcasted before a URL will change. - * - * This change can be prevented by calling - * `preventDefault` method of the event. See {@link ng.$rootScope.Scope#$on} for more - * details about event object. Upon successful change - * {@link ng.$location#$locationChangeSuccess $locationChangeSuccess} is fired. - * - * The `newState` and `oldState` parameters may be defined only in HTML5 mode and when - * the browser supports the HTML5 History API. - * - * @param {Object} angularEvent Synthetic event object. - * @param {string} newUrl New URL - * @param {string=} oldUrl URL that was before it was changed. - * @param {string=} newState New history state object - * @param {string=} oldState History state object that was before it was changed. - */ - - /** - * @ngdoc event - * @name $location#$locationChangeSuccess - * @eventType broadcast on root scope - * @description - * Broadcasted after a URL was changed. - * - * The `newState` and `oldState` parameters may be defined only in HTML5 mode and when - * the browser supports the HTML5 History API. - * - * @param {Object} angularEvent Synthetic event object. - * @param {string} newUrl New URL - * @param {string=} oldUrl URL that was before it was changed. - * @param {string=} newState New history state object - * @param {string=} oldState History state object that was before it was changed. - */ - - this.$get = ['$rootScope', '$browser', '$sniffer', '$rootElement', '$window', - function($rootScope, $browser, $sniffer, $rootElement, $window) { - var $location, - LocationMode, - baseHref = $browser.baseHref(), // if base[href] is undefined, it defaults to '' - initialUrl = $browser.url(), - appBase; - - if (html5Mode.enabled) { - if (!baseHref && html5Mode.requireBase) { - throw $locationMinErr('nobase', - "$location in HTML5 mode requires a <base> tag to be present!"); - } - appBase = serverBase(initialUrl) + (baseHref || '/'); - LocationMode = $sniffer.history ? LocationHtml5Url : LocationHashbangInHtml5Url; - } else { - appBase = stripHash(initialUrl); - LocationMode = LocationHashbangUrl; - } - $location = new LocationMode(appBase, '#' + hashPrefix); - $location.$$parseLinkUrl(initialUrl, initialUrl); - - $location.$$state = $browser.state(); - - var IGNORE_URI_REGEXP = /^\s*(javascript|mailto):/i; - - function setBrowserUrlWithFallback(url, replace, state) { - var oldUrl = $location.url(); - var oldState = $location.$$state; - try { - $browser.url(url, replace, state); - - // Make sure $location.state() returns referentially identical (not just deeply equal) - // state object; this makes possible quick checking if the state changed in the digest - // loop. Checking deep equality would be too expensive. - $location.$$state = $browser.state(); - } catch (e) { - // Restore old values if pushState fails - $location.url(oldUrl); - $location.$$state = oldState; - - throw e; - } - } - - $rootElement.on('click', function(event) { - // TODO(vojta): rewrite link when opening in new tab/window (in legacy browser) - // currently we open nice url link and redirect then - - if (!html5Mode.rewriteLinks || event.ctrlKey || event.metaKey || event.shiftKey || event.which == 2 || event.button == 2) return; - - var elm = jqLite(event.target); - - // traverse the DOM up to find first A tag - while (nodeName_(elm[0]) !== 'a') { - // ignore rewriting if no A tag (reached root element, or no parent - removed from document) - if (elm[0] === $rootElement[0] || !(elm = elm.parent())[0]) return; - } - - var absHref = elm.prop('href'); - // get the actual href attribute - see - // http://msdn.microsoft.com/en-us/library/ie/dd347148(v=vs.85).aspx - var relHref = elm.attr('href') || elm.attr('xlink:href'); - - if (isObject(absHref) && absHref.toString() === '[object SVGAnimatedString]') { - // SVGAnimatedString.animVal should be identical to SVGAnimatedString.baseVal, unless during - // an animation. - absHref = urlResolve(absHref.animVal).href; - } - - // Ignore when url is started with javascript: or mailto: - if (IGNORE_URI_REGEXP.test(absHref)) return; - - if (absHref && !elm.attr('target') && !event.isDefaultPrevented()) { - if ($location.$$parseLinkUrl(absHref, relHref)) { - // We do a preventDefault for all urls that are part of the angular application, - // in html5mode and also without, so that we are able to abort navigation without - // getting double entries in the location history. - event.preventDefault(); - // update location manually - if ($location.absUrl() != $browser.url()) { - $rootScope.$apply(); - // hack to work around FF6 bug 684208 when scenario runner clicks on links - $window.angular['ff-684208-preventDefault'] = true; - } - } - } - }); - - - // rewrite hashbang url <> html5 url - if ($location.absUrl() != initialUrl) { - $browser.url($location.absUrl(), true); - } - - var initializing = true; - - // update $location when $browser url changes - $browser.onUrlChange(function(newUrl, newState) { - $rootScope.$evalAsync(function() { - var oldUrl = $location.absUrl(); - var oldState = $location.$$state; - var defaultPrevented; - - $location.$$parse(newUrl); - $location.$$state = newState; - - defaultPrevented = $rootScope.$broadcast('$locationChangeStart', newUrl, oldUrl, - newState, oldState).defaultPrevented; - - // if the location was changed by a `$locationChangeStart` handler then stop - // processing this location change - if ($location.absUrl() !== newUrl) return; - - if (defaultPrevented) { - $location.$$parse(oldUrl); - $location.$$state = oldState; - setBrowserUrlWithFallback(oldUrl, false, oldState); - } else { - initializing = false; - afterLocationChange(oldUrl, oldState); - } - }); - if (!$rootScope.$$phase) $rootScope.$digest(); - }); - - // update browser - $rootScope.$watch(function $locationWatch() { - var oldUrl = trimEmptyHash($browser.url()); - var newUrl = trimEmptyHash($location.absUrl()); - var oldState = $browser.state(); - var currentReplace = $location.$$replace; - var urlOrStateChanged = oldUrl !== newUrl || - ($location.$$html5 && $sniffer.history && oldState !== $location.$$state); - - if (initializing || urlOrStateChanged) { - initializing = false; - - $rootScope.$evalAsync(function() { - var newUrl = $location.absUrl(); - var defaultPrevented = $rootScope.$broadcast('$locationChangeStart', newUrl, oldUrl, - $location.$$state, oldState).defaultPrevented; - - // if the location was changed by a `$locationChangeStart` handler then stop - // processing this location change - if ($location.absUrl() !== newUrl) return; - - if (defaultPrevented) { - $location.$$parse(oldUrl); - $location.$$state = oldState; - } else { - if (urlOrStateChanged) { - setBrowserUrlWithFallback(newUrl, currentReplace, - oldState === $location.$$state ? null : $location.$$state); - } - afterLocationChange(oldUrl, oldState); - } - }); - } - - $location.$$replace = false; - - // we don't need to return anything because $evalAsync will make the digest loop dirty when - // there is a change - }); - - return $location; - - function afterLocationChange(oldUrl, oldState) { - $rootScope.$broadcast('$locationChangeSuccess', $location.absUrl(), oldUrl, - $location.$$state, oldState); - } -}]; -} - -/** - * @ngdoc service - * @name $log - * @requires $window - * - * @description - * Simple service for logging. Default implementation safely writes the message - * into the browser's console (if present). - * - * The main purpose of this service is to simplify debugging and troubleshooting. - * - * The default is to log `debug` messages. You can use - * {@link ng.$logProvider ng.$logProvider#debugEnabled} to change this. - * - * @example - <example module="logExample"> - <file name="script.js"> - angular.module('logExample', []) - .controller('LogController', ['$scope', '$log', function($scope, $log) { - $scope.$log = $log; - $scope.message = 'Hello World!'; - }]); - </file> - <file name="index.html"> - <div ng-controller="LogController"> - <p>Reload this page with open console, enter text and hit the log button...</p> - Message: - <input type="text" ng-model="message"/> - <button ng-click="$log.log(message)">log</button> - <button ng-click="$log.warn(message)">warn</button> - <button ng-click="$log.info(message)">info</button> - <button ng-click="$log.error(message)">error</button> - </div> - </file> - </example> - */ - -/** - * @ngdoc provider - * @name $logProvider - * @description - * Use the `$logProvider` to configure how the application logs messages - */ -function $LogProvider() { - var debug = true, - self = this; - - /** - * @ngdoc method - * @name $logProvider#debugEnabled - * @description - * @param {boolean=} flag enable or disable debug level messages - * @returns {*} current value if used as getter or itself (chaining) if used as setter - */ - this.debugEnabled = function(flag) { - if (isDefined(flag)) { - debug = flag; - return this; - } else { - return debug; - } - }; - - this.$get = ['$window', function($window) { - return { - /** - * @ngdoc method - * @name $log#log - * - * @description - * Write a log message - */ - log: consoleLog('log'), - - /** - * @ngdoc method - * @name $log#info - * - * @description - * Write an information message - */ - info: consoleLog('info'), - - /** - * @ngdoc method - * @name $log#warn - * - * @description - * Write a warning message - */ - warn: consoleLog('warn'), - - /** - * @ngdoc method - * @name $log#error - * - * @description - * Write an error message - */ - error: consoleLog('error'), - - /** - * @ngdoc method - * @name $log#debug - * - * @description - * Write a debug message - */ - debug: (function() { - var fn = consoleLog('debug'); - - return function() { - if (debug) { - fn.apply(self, arguments); - } - }; - }()) - }; - - function formatError(arg) { - if (arg instanceof Error) { - if (arg.stack) { - arg = (arg.message && arg.stack.indexOf(arg.message) === -1) - ? 'Error: ' + arg.message + '\n' + arg.stack - : arg.stack; - } else if (arg.sourceURL) { - arg = arg.message + '\n' + arg.sourceURL + ':' + arg.line; - } - } - return arg; - } - - function consoleLog(type) { - var console = $window.console || {}, - logFn = console[type] || console.log || noop, - hasApply = false; - - // Note: reading logFn.apply throws an error in IE11 in IE8 document mode. - // The reason behind this is that console.log has type "object" in IE8... - try { - hasApply = !!logFn.apply; - } catch (e) {} - - if (hasApply) { - return function() { - var args = []; - forEach(arguments, function(arg) { - args.push(formatError(arg)); - }); - return logFn.apply(console, args); - }; - } - - // we are IE which either doesn't have window.console => this is noop and we do nothing, - // or we are IE where console.log doesn't have apply so we log at least first 2 args - return function(arg1, arg2) { - logFn(arg1, arg2 == null ? '' : arg2); - }; - } - }]; -} - -var $parseMinErr = minErr('$parse'); - -// Sandboxing Angular Expressions -// ------------------------------ -// Angular expressions are generally considered safe because these expressions only have direct -// access to `$scope` and locals. However, one can obtain the ability to execute arbitrary JS code by -// obtaining a reference to native JS functions such as the Function constructor. -// -// As an example, consider the following Angular expression: -// -// {}.toString.constructor('alert("evil JS code")') -// -// This sandboxing technique is not perfect and doesn't aim to be. The goal is to prevent exploits -// against the expression language, but not to prevent exploits that were enabled by exposing -// sensitive JavaScript or browser APIs on Scope. Exposing such objects on a Scope is never a good -// practice and therefore we are not even trying to protect against interaction with an object -// explicitly exposed in this way. -// -// In general, it is not possible to access a Window object from an angular expression unless a -// window or some DOM object that has a reference to window is published onto a Scope. -// Similarly we prevent invocations of function known to be dangerous, as well as assignments to -// native objects. -// -// See https://docs.angularjs.org/guide/security - - -function ensureSafeMemberName(name, fullExpression) { - if (name === "__defineGetter__" || name === "__defineSetter__" - || name === "__lookupGetter__" || name === "__lookupSetter__" - || name === "__proto__") { - throw $parseMinErr('isecfld', - 'Attempting to access a disallowed field in Angular expressions! ' - + 'Expression: {0}', fullExpression); - } - return name; -} - -function ensureSafeObject(obj, fullExpression) { - // nifty check if obj is Function that is fast and works across iframes and other contexts - if (obj) { - if (obj.constructor === obj) { - throw $parseMinErr('isecfn', - 'Referencing Function in Angular expressions is disallowed! Expression: {0}', - fullExpression); - } else if (// isWindow(obj) - obj.window === obj) { - throw $parseMinErr('isecwindow', - 'Referencing the Window in Angular expressions is disallowed! Expression: {0}', - fullExpression); - } else if (// isElement(obj) - obj.children && (obj.nodeName || (obj.prop && obj.attr && obj.find))) { - throw $parseMinErr('isecdom', - 'Referencing DOM nodes in Angular expressions is disallowed! Expression: {0}', - fullExpression); - } else if (// block Object so that we can't get hold of dangerous Object.* methods - obj === Object) { - throw $parseMinErr('isecobj', - 'Referencing Object in Angular expressions is disallowed! Expression: {0}', - fullExpression); - } - } - return obj; -} - -var CALL = Function.prototype.call; -var APPLY = Function.prototype.apply; -var BIND = Function.prototype.bind; - -function ensureSafeFunction(obj, fullExpression) { - if (obj) { - if (obj.constructor === obj) { - throw $parseMinErr('isecfn', - 'Referencing Function in Angular expressions is disallowed! Expression: {0}', - fullExpression); - } else if (obj === CALL || obj === APPLY || obj === BIND) { - throw $parseMinErr('isecff', - 'Referencing call, apply or bind in Angular expressions is disallowed! Expression: {0}', - fullExpression); - } - } -} - -//Keyword constants -var CONSTANTS = createMap(); -forEach({ - 'null': function() { return null; }, - 'true': function() { return true; }, - 'false': function() { return false; }, - 'undefined': function() {} -}, function(constantGetter, name) { - constantGetter.constant = constantGetter.literal = constantGetter.sharedGetter = true; - CONSTANTS[name] = constantGetter; -}); - -//Not quite a constant, but can be lex/parsed the same -CONSTANTS['this'] = function(self) { return self; }; -CONSTANTS['this'].sharedGetter = true; - - -//Operators - will be wrapped by binaryFn/unaryFn/assignment/filter -var OPERATORS = extend(createMap(), { - '+':function(self, locals, a, b) { - a=a(self, locals); b=b(self, locals); - if (isDefined(a)) { - if (isDefined(b)) { - return a + b; - } - return a; - } - return isDefined(b) ? b : undefined;}, - '-':function(self, locals, a, b) { - a=a(self, locals); b=b(self, locals); - return (isDefined(a) ? a : 0) - (isDefined(b) ? b : 0); - }, - '*':function(self, locals, a, b) {return a(self, locals) * b(self, locals);}, - '/':function(self, locals, a, b) {return a(self, locals) / b(self, locals);}, - '%':function(self, locals, a, b) {return a(self, locals) % b(self, locals);}, - '===':function(self, locals, a, b) {return a(self, locals) === b(self, locals);}, - '!==':function(self, locals, a, b) {return a(self, locals) !== b(self, locals);}, - '==':function(self, locals, a, b) {return a(self, locals) == b(self, locals);}, - '!=':function(self, locals, a, b) {return a(self, locals) != b(self, locals);}, - '<':function(self, locals, a, b) {return a(self, locals) < b(self, locals);}, - '>':function(self, locals, a, b) {return a(self, locals) > b(self, locals);}, - '<=':function(self, locals, a, b) {return a(self, locals) <= b(self, locals);}, - '>=':function(self, locals, a, b) {return a(self, locals) >= b(self, locals);}, - '&&':function(self, locals, a, b) {return a(self, locals) && b(self, locals);}, - '||':function(self, locals, a, b) {return a(self, locals) || b(self, locals);}, - '!':function(self, locals, a) {return !a(self, locals);}, - - //Tokenized as operators but parsed as assignment/filters - '=':true, - '|':true -}); -var ESCAPE = {"n":"\n", "f":"\f", "r":"\r", "t":"\t", "v":"\v", "'":"'", '"':'"'}; - - -///////////////////////////////////////// - - -/** - * @constructor - */ -var Lexer = function(options) { - this.options = options; -}; - -Lexer.prototype = { - constructor: Lexer, - - lex: function(text) { - this.text = text; - this.index = 0; - this.tokens = []; - - while (this.index < this.text.length) { - var ch = this.text.charAt(this.index); - if (ch === '"' || ch === "'") { - this.readString(ch); - } else if (this.isNumber(ch) || ch === '.' && this.isNumber(this.peek())) { - this.readNumber(); - } else if (this.isIdent(ch)) { - this.readIdent(); - } else if (this.is(ch, '(){}[].,;:?')) { - this.tokens.push({index: this.index, text: ch}); - this.index++; - } else if (this.isWhitespace(ch)) { - this.index++; - } else { - var ch2 = ch + this.peek(); - var ch3 = ch2 + this.peek(2); - var op1 = OPERATORS[ch]; - var op2 = OPERATORS[ch2]; - var op3 = OPERATORS[ch3]; - if (op1 || op2 || op3) { - var token = op3 ? ch3 : (op2 ? ch2 : ch); - this.tokens.push({index: this.index, text: token, operator: true}); - this.index += token.length; - } else { - this.throwError('Unexpected next character ', this.index, this.index + 1); - } - } - } - return this.tokens; - }, - - is: function(ch, chars) { - return chars.indexOf(ch) !== -1; - }, - - peek: function(i) { - var num = i || 1; - return (this.index + num < this.text.length) ? this.text.charAt(this.index + num) : false; - }, - - isNumber: function(ch) { - return ('0' <= ch && ch <= '9') && typeof ch === "string"; - }, - - isWhitespace: function(ch) { - // IE treats non-breaking space as \u00A0 - return (ch === ' ' || ch === '\r' || ch === '\t' || - ch === '\n' || ch === '\v' || ch === '\u00A0'); - }, - - isIdent: function(ch) { - return ('a' <= ch && ch <= 'z' || - 'A' <= ch && ch <= 'Z' || - '_' === ch || ch === '$'); - }, - - isExpOperator: function(ch) { - return (ch === '-' || ch === '+' || this.isNumber(ch)); - }, - - throwError: function(error, start, end) { - end = end || this.index; - var colStr = (isDefined(start) - ? 's ' + start + '-' + this.index + ' [' + this.text.substring(start, end) + ']' - : ' ' + end); - throw $parseMinErr('lexerr', 'Lexer Error: {0} at column{1} in expression [{2}].', - error, colStr, this.text); - }, - - readNumber: function() { - var number = ''; - var start = this.index; - while (this.index < this.text.length) { - var ch = lowercase(this.text.charAt(this.index)); - if (ch == '.' || this.isNumber(ch)) { - number += ch; - } else { - var peekCh = this.peek(); - if (ch == 'e' && this.isExpOperator(peekCh)) { - number += ch; - } else if (this.isExpOperator(ch) && - peekCh && this.isNumber(peekCh) && - number.charAt(number.length - 1) == 'e') { - number += ch; - } else if (this.isExpOperator(ch) && - (!peekCh || !this.isNumber(peekCh)) && - number.charAt(number.length - 1) == 'e') { - this.throwError('Invalid exponent'); - } else { - break; - } - } - this.index++; - } - this.tokens.push({ - index: start, - text: number, - constant: true, - value: Number(number) - }); - }, - - readIdent: function() { - var start = this.index; - while (this.index < this.text.length) { - var ch = this.text.charAt(this.index); - if (!(this.isIdent(ch) || this.isNumber(ch))) { - break; - } - this.index++; - } - this.tokens.push({ - index: start, - text: this.text.slice(start, this.index), - identifier: true - }); - }, - - readString: function(quote) { - var start = this.index; - this.index++; - var string = ''; - var rawString = quote; - var escape = false; - while (this.index < this.text.length) { - var ch = this.text.charAt(this.index); - rawString += ch; - if (escape) { - if (ch === 'u') { - var hex = this.text.substring(this.index + 1, this.index + 5); - if (!hex.match(/[\da-f]{4}/i)) - this.throwError('Invalid unicode escape [\\u' + hex + ']'); - this.index += 4; - string += String.fromCharCode(parseInt(hex, 16)); - } else { - var rep = ESCAPE[ch]; - string = string + (rep || ch); - } - escape = false; - } else if (ch === '\\') { - escape = true; - } else if (ch === quote) { - this.index++; - this.tokens.push({ - index: start, - text: rawString, - constant: true, - value: string - }); - return; - } else { - string += ch; - } - this.index++; - } - this.throwError('Unterminated quote', start); - } -}; - - -function isConstant(exp) { - return exp.constant; -} - -/** - * @constructor - */ -var Parser = function(lexer, $filter, options) { - this.lexer = lexer; - this.$filter = $filter; - this.options = options; -}; - -Parser.ZERO = extend(function() { - return 0; -}, { - sharedGetter: true, - constant: true -}); - -Parser.prototype = { - constructor: Parser, - - parse: function(text) { - this.text = text; - this.tokens = this.lexer.lex(text); - - var value = this.statements(); - - if (this.tokens.length !== 0) { - this.throwError('is an unexpected token', this.tokens[0]); - } - - value.literal = !!value.literal; - value.constant = !!value.constant; - - return value; - }, - - primary: function() { - var primary; - if (this.expect('(')) { - primary = this.filterChain(); - this.consume(')'); - } else if (this.expect('[')) { - primary = this.arrayDeclaration(); - } else if (this.expect('{')) { - primary = this.object(); - } else if (this.peek().identifier && this.peek().text in CONSTANTS) { - primary = CONSTANTS[this.consume().text]; - } else if (this.peek().identifier) { - primary = this.identifier(); - } else if (this.peek().constant) { - primary = this.constant(); - } else { - this.throwError('not a primary expression', this.peek()); - } - - var next, context; - while ((next = this.expect('(', '[', '.'))) { - if (next.text === '(') { - primary = this.functionCall(primary, context); - context = null; - } else if (next.text === '[') { - context = primary; - primary = this.objectIndex(primary); - } else if (next.text === '.') { - context = primary; - primary = this.fieldAccess(primary); - } else { - this.throwError('IMPOSSIBLE'); - } - } - return primary; - }, - - throwError: function(msg, token) { - throw $parseMinErr('syntax', - 'Syntax Error: Token \'{0}\' {1} at column {2} of the expression [{3}] starting at [{4}].', - token.text, msg, (token.index + 1), this.text, this.text.substring(token.index)); - }, - - peekToken: function() { - if (this.tokens.length === 0) - throw $parseMinErr('ueoe', 'Unexpected end of expression: {0}', this.text); - return this.tokens[0]; - }, - - peek: function(e1, e2, e3, e4) { - return this.peekAhead(0, e1, e2, e3, e4); - }, - peekAhead: function(i, e1, e2, e3, e4) { - if (this.tokens.length > i) { - var token = this.tokens[i]; - var t = token.text; - if (t === e1 || t === e2 || t === e3 || t === e4 || - (!e1 && !e2 && !e3 && !e4)) { - return token; - } - } - return false; - }, - - expect: function(e1, e2, e3, e4) { - var token = this.peek(e1, e2, e3, e4); - if (token) { - this.tokens.shift(); - return token; - } - return false; - }, - - consume: function(e1) { - if (this.tokens.length === 0) { - throw $parseMinErr('ueoe', 'Unexpected end of expression: {0}', this.text); - } - - var token = this.expect(e1); - if (!token) { - this.throwError('is unexpected, expecting [' + e1 + ']', this.peek()); - } - return token; - }, - - unaryFn: function(op, right) { - var fn = OPERATORS[op]; - return extend(function $parseUnaryFn(self, locals) { - return fn(self, locals, right); - }, { - constant:right.constant, - inputs: [right] - }); - }, - - binaryFn: function(left, op, right, isBranching) { - var fn = OPERATORS[op]; - return extend(function $parseBinaryFn(self, locals) { - return fn(self, locals, left, right); - }, { - constant: left.constant && right.constant, - inputs: !isBranching && [left, right] - }); - }, - - identifier: function() { - var id = this.consume().text; - - //Continue reading each `.identifier` unless it is a method invocation - while (this.peek('.') && this.peekAhead(1).identifier && !this.peekAhead(2, '(')) { - id += this.consume().text + this.consume().text; - } - - return getterFn(id, this.options, this.text); - }, - - constant: function() { - var value = this.consume().value; - - return extend(function $parseConstant() { - return value; - }, { - constant: true, - literal: true - }); - }, - - statements: function() { - var statements = []; - while (true) { - if (this.tokens.length > 0 && !this.peek('}', ')', ';', ']')) - statements.push(this.filterChain()); - if (!this.expect(';')) { - // optimize for the common case where there is only one statement. - // TODO(size): maybe we should not support multiple statements? - return (statements.length === 1) - ? statements[0] - : function $parseStatements(self, locals) { - var value; - for (var i = 0, ii = statements.length; i < ii; i++) { - value = statements[i](self, locals); - } - return value; - }; - } - } - }, - - filterChain: function() { - var left = this.expression(); - var token; - while ((token = this.expect('|'))) { - left = this.filter(left); - } - return left; - }, - - filter: function(inputFn) { - var fn = this.$filter(this.consume().text); - var argsFn; - var args; - - if (this.peek(':')) { - argsFn = []; - args = []; // we can safely reuse the array - while (this.expect(':')) { - argsFn.push(this.expression()); - } - } - - var inputs = [inputFn].concat(argsFn || []); - - return extend(function $parseFilter(self, locals) { - var input = inputFn(self, locals); - if (args) { - args[0] = input; - - var i = argsFn.length; - while (i--) { - args[i + 1] = argsFn[i](self, locals); - } - - return fn.apply(undefined, args); - } - - return fn(input); - }, { - constant: !fn.$stateful && inputs.every(isConstant), - inputs: !fn.$stateful && inputs - }); - }, - - expression: function() { - return this.assignment(); - }, - - assignment: function() { - var left = this.ternary(); - var right; - var token; - if ((token = this.expect('='))) { - if (!left.assign) { - this.throwError('implies assignment but [' + - this.text.substring(0, token.index) + '] can not be assigned to', token); - } - right = this.ternary(); - return extend(function $parseAssignment(scope, locals) { - return left.assign(scope, right(scope, locals), locals); - }, { - inputs: [left, right] - }); - } - return left; - }, - - ternary: function() { - var left = this.logicalOR(); - var middle; - var token; - if ((token = this.expect('?'))) { - middle = this.assignment(); - if (this.consume(':')) { - var right = this.assignment(); - - return extend(function $parseTernary(self, locals) { - return left(self, locals) ? middle(self, locals) : right(self, locals); - }, { - constant: left.constant && middle.constant && right.constant - }); - } - } - - return left; - }, - - logicalOR: function() { - var left = this.logicalAND(); - var token; - while ((token = this.expect('||'))) { - left = this.binaryFn(left, token.text, this.logicalAND(), true); - } - return left; - }, - - logicalAND: function() { - var left = this.equality(); - var token; - while ((token = this.expect('&&'))) { - left = this.binaryFn(left, token.text, this.equality(), true); - } - return left; - }, - - equality: function() { - var left = this.relational(); - var token; - while ((token = this.expect('==','!=','===','!=='))) { - left = this.binaryFn(left, token.text, this.relational()); - } - return left; - }, - - relational: function() { - var left = this.additive(); - var token; - while ((token = this.expect('<', '>', '<=', '>='))) { - left = this.binaryFn(left, token.text, this.additive()); - } - return left; - }, - - additive: function() { - var left = this.multiplicative(); - var token; - while ((token = this.expect('+','-'))) { - left = this.binaryFn(left, token.text, this.multiplicative()); - } - return left; - }, - - multiplicative: function() { - var left = this.unary(); - var token; - while ((token = this.expect('*','/','%'))) { - left = this.binaryFn(left, token.text, this.unary()); - } - return left; - }, - - unary: function() { - var token; - if (this.expect('+')) { - return this.primary(); - } else if ((token = this.expect('-'))) { - return this.binaryFn(Parser.ZERO, token.text, this.unary()); - } else if ((token = this.expect('!'))) { - return this.unaryFn(token.text, this.unary()); - } else { - return this.primary(); - } - }, - - fieldAccess: function(object) { - var getter = this.identifier(); - - return extend(function $parseFieldAccess(scope, locals, self) { - var o = self || object(scope, locals); - return (o == null) ? undefined : getter(o); - }, { - assign: function(scope, value, locals) { - var o = object(scope, locals); - if (!o) object.assign(scope, o = {}, locals); - return getter.assign(o, value); - } - }); - }, - - objectIndex: function(obj) { - var expression = this.text; - - var indexFn = this.expression(); - this.consume(']'); - - return extend(function $parseObjectIndex(self, locals) { - var o = obj(self, locals), - i = indexFn(self, locals), - v; - - ensureSafeMemberName(i, expression); - if (!o) return undefined; - v = ensureSafeObject(o[i], expression); - return v; - }, { - assign: function(self, value, locals) { - var key = ensureSafeMemberName(indexFn(self, locals), expression); - // prevent overwriting of Function.constructor which would break ensureSafeObject check - var o = ensureSafeObject(obj(self, locals), expression); - if (!o) obj.assign(self, o = {}, locals); - return o[key] = value; - } - }); - }, - - functionCall: function(fnGetter, contextGetter) { - var argsFn = []; - if (this.peekToken().text !== ')') { - do { - argsFn.push(this.expression()); - } while (this.expect(',')); - } - this.consume(')'); - - var expressionText = this.text; - // we can safely reuse the array across invocations - var args = argsFn.length ? [] : null; - - return function $parseFunctionCall(scope, locals) { - var context = contextGetter ? contextGetter(scope, locals) : isDefined(contextGetter) ? undefined : scope; - var fn = fnGetter(scope, locals, context) || noop; - - if (args) { - var i = argsFn.length; - while (i--) { - args[i] = ensureSafeObject(argsFn[i](scope, locals), expressionText); - } - } - - ensureSafeObject(context, expressionText); - ensureSafeFunction(fn, expressionText); - - // IE doesn't have apply for some native functions - var v = fn.apply - ? fn.apply(context, args) - : fn(args[0], args[1], args[2], args[3], args[4]); - - return ensureSafeObject(v, expressionText); - }; - }, - - // This is used with json array declaration - arrayDeclaration: function() { - var elementFns = []; - if (this.peekToken().text !== ']') { - do { - if (this.peek(']')) { - // Support trailing commas per ES5.1. - break; - } - elementFns.push(this.expression()); - } while (this.expect(',')); - } - this.consume(']'); - - return extend(function $parseArrayLiteral(self, locals) { - var array = []; - for (var i = 0, ii = elementFns.length; i < ii; i++) { - array.push(elementFns[i](self, locals)); - } - return array; - }, { - literal: true, - constant: elementFns.every(isConstant), - inputs: elementFns - }); - }, - - object: function() { - var keys = [], valueFns = []; - if (this.peekToken().text !== '}') { - do { - if (this.peek('}')) { - // Support trailing commas per ES5.1. - break; - } - var token = this.consume(); - if (token.constant) { - keys.push(token.value); - } else if (token.identifier) { - keys.push(token.text); - } else { - this.throwError("invalid key", token); - } - this.consume(':'); - valueFns.push(this.expression()); - } while (this.expect(',')); - } - this.consume('}'); - - return extend(function $parseObjectLiteral(self, locals) { - var object = {}; - for (var i = 0, ii = valueFns.length; i < ii; i++) { - object[keys[i]] = valueFns[i](self, locals); - } - return object; - }, { - literal: true, - constant: valueFns.every(isConstant), - inputs: valueFns - }); - } -}; - - -////////////////////////////////////////////////// -// Parser helper functions -////////////////////////////////////////////////// - -function setter(obj, locals, path, setValue, fullExp) { - ensureSafeObject(obj, fullExp); - ensureSafeObject(locals, fullExp); - - var element = path.split('.'), key; - for (var i = 0; element.length > 1; i++) { - key = ensureSafeMemberName(element.shift(), fullExp); - var propertyObj = (i === 0 && locals && locals[key]) || obj[key]; - if (!propertyObj) { - propertyObj = {}; - obj[key] = propertyObj; - } - obj = ensureSafeObject(propertyObj, fullExp); - } - key = ensureSafeMemberName(element.shift(), fullExp); - ensureSafeObject(obj[key], fullExp); - obj[key] = setValue; - return setValue; -} - -var getterFnCacheDefault = createMap(); -var getterFnCacheExpensive = createMap(); - -function isPossiblyDangerousMemberName(name) { - return name == 'constructor'; -} - -/** - * Implementation of the "Black Hole" variant from: - * - http://jsperf.com/angularjs-parse-getter/4 - * - http://jsperf.com/path-evaluation-simplified/7 - */ -function cspSafeGetterFn(key0, key1, key2, key3, key4, fullExp, expensiveChecks) { - ensureSafeMemberName(key0, fullExp); - ensureSafeMemberName(key1, fullExp); - ensureSafeMemberName(key2, fullExp); - ensureSafeMemberName(key3, fullExp); - ensureSafeMemberName(key4, fullExp); - var eso = function(o) { - return ensureSafeObject(o, fullExp); - }; - var eso0 = (expensiveChecks || isPossiblyDangerousMemberName(key0)) ? eso : identity; - var eso1 = (expensiveChecks || isPossiblyDangerousMemberName(key1)) ? eso : identity; - var eso2 = (expensiveChecks || isPossiblyDangerousMemberName(key2)) ? eso : identity; - var eso3 = (expensiveChecks || isPossiblyDangerousMemberName(key3)) ? eso : identity; - var eso4 = (expensiveChecks || isPossiblyDangerousMemberName(key4)) ? eso : identity; - - return function cspSafeGetter(scope, locals) { - var pathVal = (locals && locals.hasOwnProperty(key0)) ? locals : scope; - - if (pathVal == null) return pathVal; - pathVal = eso0(pathVal[key0]); - - if (!key1) return pathVal; - if (pathVal == null) return undefined; - pathVal = eso1(pathVal[key1]); - - if (!key2) return pathVal; - if (pathVal == null) return undefined; - pathVal = eso2(pathVal[key2]); - - if (!key3) return pathVal; - if (pathVal == null) return undefined; - pathVal = eso3(pathVal[key3]); - - if (!key4) return pathVal; - if (pathVal == null) return undefined; - pathVal = eso4(pathVal[key4]); - - return pathVal; - }; -} - -function getterFnWithEnsureSafeObject(fn, fullExpression) { - return function(s, l) { - return fn(s, l, ensureSafeObject, fullExpression); - }; -} - -function getterFn(path, options, fullExp) { - var expensiveChecks = options.expensiveChecks; - var getterFnCache = (expensiveChecks ? getterFnCacheExpensive : getterFnCacheDefault); - var fn = getterFnCache[path]; - if (fn) return fn; - - - var pathKeys = path.split('.'), - pathKeysLength = pathKeys.length; - - // http://jsperf.com/angularjs-parse-getter/6 - if (options.csp) { - if (pathKeysLength < 6) { - fn = cspSafeGetterFn(pathKeys[0], pathKeys[1], pathKeys[2], pathKeys[3], pathKeys[4], fullExp, expensiveChecks); - } else { - fn = function cspSafeGetter(scope, locals) { - var i = 0, val; - do { - val = cspSafeGetterFn(pathKeys[i++], pathKeys[i++], pathKeys[i++], pathKeys[i++], - pathKeys[i++], fullExp, expensiveChecks)(scope, locals); - - locals = undefined; // clear after first iteration - scope = val; - } while (i < pathKeysLength); - return val; - }; - } - } else { - var code = ''; - if (expensiveChecks) { - code += 's = eso(s, fe);\nl = eso(l, fe);\n'; - } - var needsEnsureSafeObject = expensiveChecks; - forEach(pathKeys, function(key, index) { - ensureSafeMemberName(key, fullExp); - var lookupJs = (index - // we simply dereference 's' on any .dot notation - ? 's' - // but if we are first then we check locals first, and if so read it first - : '((l&&l.hasOwnProperty("' + key + '"))?l:s)') + '.' + key; - if (expensiveChecks || isPossiblyDangerousMemberName(key)) { - lookupJs = 'eso(' + lookupJs + ', fe)'; - needsEnsureSafeObject = true; - } - code += 'if(s == null) return undefined;\n' + - 's=' + lookupJs + ';\n'; - }); - code += 'return s;'; - - /* jshint -W054 */ - var evaledFnGetter = new Function('s', 'l', 'eso', 'fe', code); // s=scope, l=locals, eso=ensureSafeObject - /* jshint +W054 */ - evaledFnGetter.toString = valueFn(code); - if (needsEnsureSafeObject) { - evaledFnGetter = getterFnWithEnsureSafeObject(evaledFnGetter, fullExp); - } - fn = evaledFnGetter; - } - - fn.sharedGetter = true; - fn.assign = function(self, value, locals) { - return setter(self, locals, path, value, path); - }; - getterFnCache[path] = fn; - return fn; -} - -var objectValueOf = Object.prototype.valueOf; - -function getValueOf(value) { - return isFunction(value.valueOf) ? value.valueOf() : objectValueOf.call(value); -} - -/////////////////////////////////// - -/** - * @ngdoc service - * @name $parse - * @kind function - * - * @description - * - * Converts Angular {@link guide/expression expression} into a function. - * - * ```js - * var getter = $parse('user.name'); - * var setter = getter.assign; - * var context = {user:{name:'angular'}}; - * var locals = {user:{name:'local'}}; - * - * expect(getter(context)).toEqual('angular'); - * setter(context, 'newValue'); - * expect(context.user.name).toEqual('newValue'); - * expect(getter(context, locals)).toEqual('local'); - * ``` - * - * - * @param {string} expression String expression to compile. - * @returns {function(context, locals)} a function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the strings - * are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values in - * `context`. - * - * The returned function also has the following properties: - * * `literal` – `{boolean}` – whether the expression's top-level node is a JavaScript - * literal. - * * `constant` – `{boolean}` – whether the expression is made entirely of JavaScript - * constant literals. - * * `assign` – `{?function(context, value)}` – if the expression is assignable, this will be - * set to a function to change its value on the given context. - * - */ - - -/** - * @ngdoc provider - * @name $parseProvider - * - * @description - * `$parseProvider` can be used for configuring the default behavior of the {@link ng.$parse $parse} - * service. - */ -function $ParseProvider() { - var cacheDefault = createMap(); - var cacheExpensive = createMap(); - - - - this.$get = ['$filter', '$sniffer', function($filter, $sniffer) { - var $parseOptions = { - csp: $sniffer.csp, - expensiveChecks: false - }, - $parseOptionsExpensive = { - csp: $sniffer.csp, - expensiveChecks: true - }; - - function wrapSharedExpression(exp) { - var wrapped = exp; - - if (exp.sharedGetter) { - wrapped = function $parseWrapper(self, locals) { - return exp(self, locals); - }; - wrapped.literal = exp.literal; - wrapped.constant = exp.constant; - wrapped.assign = exp.assign; - } - - return wrapped; - } - - return function $parse(exp, interceptorFn, expensiveChecks) { - var parsedExpression, oneTime, cacheKey; - - switch (typeof exp) { - case 'string': - cacheKey = exp = exp.trim(); - - var cache = (expensiveChecks ? cacheExpensive : cacheDefault); - parsedExpression = cache[cacheKey]; - - if (!parsedExpression) { - if (exp.charAt(0) === ':' && exp.charAt(1) === ':') { - oneTime = true; - exp = exp.substring(2); - } - - var parseOptions = expensiveChecks ? $parseOptionsExpensive : $parseOptions; - var lexer = new Lexer(parseOptions); - var parser = new Parser(lexer, $filter, parseOptions); - parsedExpression = parser.parse(exp); - - if (parsedExpression.constant) { - parsedExpression.$$watchDelegate = constantWatchDelegate; - } else if (oneTime) { - //oneTime is not part of the exp passed to the Parser so we may have to - //wrap the parsedExpression before adding a $$watchDelegate - parsedExpression = wrapSharedExpression(parsedExpression); - parsedExpression.$$watchDelegate = parsedExpression.literal ? - oneTimeLiteralWatchDelegate : oneTimeWatchDelegate; - } else if (parsedExpression.inputs) { - parsedExpression.$$watchDelegate = inputsWatchDelegate; - } - - cache[cacheKey] = parsedExpression; - } - return addInterceptor(parsedExpression, interceptorFn); - - case 'function': - return addInterceptor(exp, interceptorFn); - - default: - return addInterceptor(noop, interceptorFn); - } - }; - - function collectExpressionInputs(inputs, list) { - for (var i = 0, ii = inputs.length; i < ii; i++) { - var input = inputs[i]; - if (!input.constant) { - if (input.inputs) { - collectExpressionInputs(input.inputs, list); - } else if (list.indexOf(input) === -1) { // TODO(perf) can we do better? - list.push(input); - } - } - } - - return list; - } - - function expressionInputDirtyCheck(newValue, oldValueOfValue) { - - if (newValue == null || oldValueOfValue == null) { // null/undefined - return newValue === oldValueOfValue; - } - - if (typeof newValue === 'object') { - - // attempt to convert the value to a primitive type - // TODO(docs): add a note to docs that by implementing valueOf even objects and arrays can - // be cheaply dirty-checked - newValue = getValueOf(newValue); - - if (typeof newValue === 'object') { - // objects/arrays are not supported - deep-watching them would be too expensive - return false; - } - - // fall-through to the primitive equality check - } - - //Primitive or NaN - return newValue === oldValueOfValue || (newValue !== newValue && oldValueOfValue !== oldValueOfValue); - } - - function inputsWatchDelegate(scope, listener, objectEquality, parsedExpression) { - var inputExpressions = parsedExpression.$$inputs || - (parsedExpression.$$inputs = collectExpressionInputs(parsedExpression.inputs, [])); - - var lastResult; - - if (inputExpressions.length === 1) { - var oldInputValue = expressionInputDirtyCheck; // init to something unique so that equals check fails - inputExpressions = inputExpressions[0]; - return scope.$watch(function expressionInputWatch(scope) { - var newInputValue = inputExpressions(scope); - if (!expressionInputDirtyCheck(newInputValue, oldInputValue)) { - lastResult = parsedExpression(scope); - oldInputValue = newInputValue && getValueOf(newInputValue); - } - return lastResult; - }, listener, objectEquality); - } - - var oldInputValueOfValues = []; - for (var i = 0, ii = inputExpressions.length; i < ii; i++) { - oldInputValueOfValues[i] = expressionInputDirtyCheck; // init to something unique so that equals check fails - } - - return scope.$watch(function expressionInputsWatch(scope) { - var changed = false; - - for (var i = 0, ii = inputExpressions.length; i < ii; i++) { - var newInputValue = inputExpressions[i](scope); - if (changed || (changed = !expressionInputDirtyCheck(newInputValue, oldInputValueOfValues[i]))) { - oldInputValueOfValues[i] = newInputValue && getValueOf(newInputValue); - } - } - - if (changed) { - lastResult = parsedExpression(scope); - } - - return lastResult; - }, listener, objectEquality); - } - - function oneTimeWatchDelegate(scope, listener, objectEquality, parsedExpression) { - var unwatch, lastValue; - return unwatch = scope.$watch(function oneTimeWatch(scope) { - return parsedExpression(scope); - }, function oneTimeListener(value, old, scope) { - lastValue = value; - if (isFunction(listener)) { - listener.apply(this, arguments); - } - if (isDefined(value)) { - scope.$$postDigest(function() { - if (isDefined(lastValue)) { - unwatch(); - } - }); - } - }, objectEquality); - } - - function oneTimeLiteralWatchDelegate(scope, listener, objectEquality, parsedExpression) { - var unwatch, lastValue; - return unwatch = scope.$watch(function oneTimeWatch(scope) { - return parsedExpression(scope); - }, function oneTimeListener(value, old, scope) { - lastValue = value; - if (isFunction(listener)) { - listener.call(this, value, old, scope); - } - if (isAllDefined(value)) { - scope.$$postDigest(function() { - if (isAllDefined(lastValue)) unwatch(); - }); - } - }, objectEquality); - - function isAllDefined(value) { - var allDefined = true; - forEach(value, function(val) { - if (!isDefined(val)) allDefined = false; - }); - return allDefined; - } - } - - function constantWatchDelegate(scope, listener, objectEquality, parsedExpression) { - var unwatch; - return unwatch = scope.$watch(function constantWatch(scope) { - return parsedExpression(scope); - }, function constantListener(value, old, scope) { - if (isFunction(listener)) { - listener.apply(this, arguments); - } - unwatch(); - }, objectEquality); - } - - function addInterceptor(parsedExpression, interceptorFn) { - if (!interceptorFn) return parsedExpression; - var watchDelegate = parsedExpression.$$watchDelegate; - - var regularWatch = - watchDelegate !== oneTimeLiteralWatchDelegate && - watchDelegate !== oneTimeWatchDelegate; - - var fn = regularWatch ? function regularInterceptedExpression(scope, locals) { - var value = parsedExpression(scope, locals); - return interceptorFn(value, scope, locals); - } : function oneTimeInterceptedExpression(scope, locals) { - var value = parsedExpression(scope, locals); - var result = interceptorFn(value, scope, locals); - // we only return the interceptor's result if the - // initial value is defined (for bind-once) - return isDefined(value) ? result : value; - }; - - // Propagate $$watchDelegates other then inputsWatchDelegate - if (parsedExpression.$$watchDelegate && - parsedExpression.$$watchDelegate !== inputsWatchDelegate) { - fn.$$watchDelegate = parsedExpression.$$watchDelegate; - } else if (!interceptorFn.$stateful) { - // If there is an interceptor, but no watchDelegate then treat the interceptor like - // we treat filters - it is assumed to be a pure function unless flagged with $stateful - fn.$$watchDelegate = inputsWatchDelegate; - fn.inputs = [parsedExpression]; - } - - return fn; - } - }]; -} - -/** - * @ngdoc service - * @name $q - * @requires $rootScope - * - * @description - * A service that helps you run functions asynchronously, and use their return values (or exceptions) - * when they are done processing. - * - * This is an implementation of promises/deferred objects inspired by - * [Kris Kowal's Q](https://github.com/kriskowal/q). - * - * $q can be used in two fashions --- one which is more similar to Kris Kowal's Q or jQuery's Deferred - * implementations, and the other which resembles ES6 promises to some degree. - * - * # $q constructor - * - * The streamlined ES6 style promise is essentially just using $q as a constructor which takes a `resolver` - * function as the first argument. This is similar to the native Promise implementation from ES6 Harmony, - * see [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise). - * - * While the constructor-style use is supported, not all of the supporting methods from ES6 Harmony promises are - * available yet. - * - * It can be used like so: - * - * ```js - * // for the purpose of this example let's assume that variables `$q` and `okToGreet` - * // are available in the current lexical scope (they could have been injected or passed in). - * - * function asyncGreet(name) { - * // perform some asynchronous operation, resolve or reject the promise when appropriate. - * return $q(function(resolve, reject) { - * setTimeout(function() { - * if (okToGreet(name)) { - * resolve('Hello, ' + name + '!'); - * } else { - * reject('Greeting ' + name + ' is not allowed.'); - * } - * }, 1000); - * }); - * } - * - * var promise = asyncGreet('Robin Hood'); - * promise.then(function(greeting) { - * alert('Success: ' + greeting); - * }, function(reason) { - * alert('Failed: ' + reason); - * }); - * ``` - * - * Note: progress/notify callbacks are not currently supported via the ES6-style interface. - * - * However, the more traditional CommonJS-style usage is still available, and documented below. - * - * [The CommonJS Promise proposal](http://wiki.commonjs.org/wiki/Promises) describes a promise as an - * interface for interacting with an object that represents the result of an action that is - * performed asynchronously, and may or may not be finished at any given point in time. - * - * From the perspective of dealing with error handling, deferred and promise APIs are to - * asynchronous programming what `try`, `catch` and `throw` keywords are to synchronous programming. - * - * ```js - * // for the purpose of this example let's assume that variables `$q` and `okToGreet` - * // are available in the current lexical scope (they could have been injected or passed in). - * - * function asyncGreet(name) { - * var deferred = $q.defer(); - * - * setTimeout(function() { - * deferred.notify('About to greet ' + name + '.'); - * - * if (okToGreet(name)) { - * deferred.resolve('Hello, ' + name + '!'); - * } else { - * deferred.reject('Greeting ' + name + ' is not allowed.'); - * } - * }, 1000); - * - * return deferred.promise; - * } - * - * var promise = asyncGreet('Robin Hood'); - * promise.then(function(greeting) { - * alert('Success: ' + greeting); - * }, function(reason) { - * alert('Failed: ' + reason); - * }, function(update) { - * alert('Got notification: ' + update); - * }); - * ``` - * - * At first it might not be obvious why this extra complexity is worth the trouble. The payoff - * comes in the way of guarantees that promise and deferred APIs make, see - * https://github.com/kriskowal/uncommonjs/blob/master/promises/specification.md. - * - * Additionally the promise api allows for composition that is very hard to do with the - * traditional callback ([CPS](http://en.wikipedia.org/wiki/Continuation-passing_style)) approach. - * For more on this please see the [Q documentation](https://github.com/kriskowal/q) especially the - * section on serial or parallel joining of promises. - * - * # The Deferred API - * - * A new instance of deferred is constructed by calling `$q.defer()`. - * - * The purpose of the deferred object is to expose the associated Promise instance as well as APIs - * that can be used for signaling the successful or unsuccessful completion, as well as the status - * of the task. - * - * **Methods** - * - * - `resolve(value)` – resolves the derived promise with the `value`. If the value is a rejection - * constructed via `$q.reject`, the promise will be rejected instead. - * - `reject(reason)` – rejects the derived promise with the `reason`. This is equivalent to - * resolving it with a rejection constructed via `$q.reject`. - * - `notify(value)` - provides updates on the status of the promise's execution. This may be called - * multiple times before the promise is either resolved or rejected. - * - * **Properties** - * - * - promise – `{Promise}` – promise object associated with this deferred. - * - * - * # The Promise API - * - * A new promise instance is created when a deferred instance is created and can be retrieved by - * calling `deferred.promise`. - * - * The purpose of the promise object is to allow for interested parties to get access to the result - * of the deferred task when it completes. - * - * **Methods** - * - * - `then(successCallback, errorCallback, notifyCallback)` – regardless of when the promise was or - * will be resolved or rejected, `then` calls one of the success or error callbacks asynchronously - * as soon as the result is available. The callbacks are called with a single argument: the result - * or rejection reason. Additionally, the notify callback may be called zero or more times to - * provide a progress indication, before the promise is resolved or rejected. - * - * This method *returns a new promise* which is resolved or rejected via the return value of the - * `successCallback`, `errorCallback`. It also notifies via the return value of the - * `notifyCallback` method. The promise cannot be resolved or rejected from the notifyCallback - * method. - * - * - `catch(errorCallback)` – shorthand for `promise.then(null, errorCallback)` - * - * - `finally(callback, notifyCallback)` – allows you to observe either the fulfillment or rejection of a promise, - * but to do so without modifying the final value. This is useful to release resources or do some - * clean-up that needs to be done whether the promise was rejected or resolved. See the [full - * specification](https://github.com/kriskowal/q/wiki/API-Reference#promisefinallycallback) for - * more information. - * - * # Chaining promises - * - * Because calling the `then` method of a promise returns a new derived promise, it is easily - * possible to create a chain of promises: - * - * ```js - * promiseB = promiseA.then(function(result) { - * return result + 1; - * }); - * - * // promiseB will be resolved immediately after promiseA is resolved and its value - * // will be the result of promiseA incremented by 1 - * ``` - * - * It is possible to create chains of any length and since a promise can be resolved with another - * promise (which will defer its resolution further), it is possible to pause/defer resolution of - * the promises at any point in the chain. This makes it possible to implement powerful APIs like - * $http's response interceptors. - * - * - * # Differences between Kris Kowal's Q and $q - * - * There are two main differences: - * - * - $q is integrated with the {@link ng.$rootScope.Scope} Scope model observation - * mechanism in angular, which means faster propagation of resolution or rejection into your - * models and avoiding unnecessary browser repaints, which would result in flickering UI. - * - Q has many more features than $q, but that comes at a cost of bytes. $q is tiny, but contains - * all the important functionality needed for common async tasks. - * - * # Testing - * - * ```js - * it('should simulate promise', inject(function($q, $rootScope) { - * var deferred = $q.defer(); - * var promise = deferred.promise; - * var resolvedValue; - * - * promise.then(function(value) { resolvedValue = value; }); - * expect(resolvedValue).toBeUndefined(); - * - * // Simulate resolving of promise - * deferred.resolve(123); - * // Note that the 'then' function does not get called synchronously. - * // This is because we want the promise API to always be async, whether or not - * // it got called synchronously or asynchronously. - * expect(resolvedValue).toBeUndefined(); - * - * // Propagate promise resolution to 'then' functions using $apply(). - * $rootScope.$apply(); - * expect(resolvedValue).toEqual(123); - * })); - * ``` - * - * @param {function(function, function)} resolver Function which is responsible for resolving or - * rejecting the newly created promise. The first parameter is a function which resolves the - * promise, the second parameter is a function which rejects the promise. - * - * @returns {Promise} The newly created promise. - */ -function $QProvider() { - - this.$get = ['$rootScope', '$exceptionHandler', function($rootScope, $exceptionHandler) { - return qFactory(function(callback) { - $rootScope.$evalAsync(callback); - }, $exceptionHandler); - }]; -} - -function $$QProvider() { - this.$get = ['$browser', '$exceptionHandler', function($browser, $exceptionHandler) { - return qFactory(function(callback) { - $browser.defer(callback); - }, $exceptionHandler); - }]; -} - -/** - * Constructs a promise manager. - * - * @param {function(function)} nextTick Function for executing functions in the next turn. - * @param {function(...*)} exceptionHandler Function into which unexpected exceptions are passed for - * debugging purposes. - * @returns {object} Promise manager. - */ -function qFactory(nextTick, exceptionHandler) { - var $qMinErr = minErr('$q', TypeError); - function callOnce(self, resolveFn, rejectFn) { - var called = false; - function wrap(fn) { - return function(value) { - if (called) return; - called = true; - fn.call(self, value); - }; - } - - return [wrap(resolveFn), wrap(rejectFn)]; - } - - /** - * @ngdoc method - * @name ng.$q#defer - * @kind function - * - * @description - * Creates a `Deferred` object which represents a task which will finish in the future. - * - * @returns {Deferred} Returns a new instance of deferred. - */ - var defer = function() { - return new Deferred(); - }; - - function Promise() { - this.$$state = { status: 0 }; - } - - Promise.prototype = { - then: function(onFulfilled, onRejected, progressBack) { - var result = new Deferred(); - - this.$$state.pending = this.$$state.pending || []; - this.$$state.pending.push([result, onFulfilled, onRejected, progressBack]); - if (this.$$state.status > 0) scheduleProcessQueue(this.$$state); - - return result.promise; - }, - - "catch": function(callback) { - return this.then(null, callback); - }, - - "finally": function(callback, progressBack) { - return this.then(function(value) { - return handleCallback(value, true, callback); - }, function(error) { - return handleCallback(error, false, callback); - }, progressBack); - } - }; - - //Faster, more basic than angular.bind http://jsperf.com/angular-bind-vs-custom-vs-native - function simpleBind(context, fn) { - return function(value) { - fn.call(context, value); - }; - } - - function processQueue(state) { - var fn, promise, pending; - - pending = state.pending; - state.processScheduled = false; - state.pending = undefined; - for (var i = 0, ii = pending.length; i < ii; ++i) { - promise = pending[i][0]; - fn = pending[i][state.status]; - try { - if (isFunction(fn)) { - promise.resolve(fn(state.value)); - } else if (state.status === 1) { - promise.resolve(state.value); - } else { - promise.reject(state.value); - } - } catch (e) { - promise.reject(e); - exceptionHandler(e); - } - } - } - - function scheduleProcessQueue(state) { - if (state.processScheduled || !state.pending) return; - state.processScheduled = true; - nextTick(function() { processQueue(state); }); - } - - function Deferred() { - this.promise = new Promise(); - //Necessary to support unbound execution :/ - this.resolve = simpleBind(this, this.resolve); - this.reject = simpleBind(this, this.reject); - this.notify = simpleBind(this, this.notify); - } - - Deferred.prototype = { - resolve: function(val) { - if (this.promise.$$state.status) return; - if (val === this.promise) { - this.$$reject($qMinErr( - 'qcycle', - "Expected promise to be resolved with value other than itself '{0}'", - val)); - } - else { - this.$$resolve(val); - } - - }, - - $$resolve: function(val) { - var then, fns; - - fns = callOnce(this, this.$$resolve, this.$$reject); - try { - if ((isObject(val) || isFunction(val))) then = val && val.then; - if (isFunction(then)) { - this.promise.$$state.status = -1; - then.call(val, fns[0], fns[1], this.notify); - } else { - this.promise.$$state.value = val; - this.promise.$$state.status = 1; - scheduleProcessQueue(this.promise.$$state); - } - } catch (e) { - fns[1](e); - exceptionHandler(e); - } - }, - - reject: function(reason) { - if (this.promise.$$state.status) return; - this.$$reject(reason); - }, - - $$reject: function(reason) { - this.promise.$$state.value = reason; - this.promise.$$state.status = 2; - scheduleProcessQueue(this.promise.$$state); - }, - - notify: function(progress) { - var callbacks = this.promise.$$state.pending; - - if ((this.promise.$$state.status <= 0) && callbacks && callbacks.length) { - nextTick(function() { - var callback, result; - for (var i = 0, ii = callbacks.length; i < ii; i++) { - result = callbacks[i][0]; - callback = callbacks[i][3]; - try { - result.notify(isFunction(callback) ? callback(progress) : progress); - } catch (e) { - exceptionHandler(e); - } - } - }); - } - } - }; - - /** - * @ngdoc method - * @name $q#reject - * @kind function - * - * @description - * Creates a promise that is resolved as rejected with the specified `reason`. This api should be - * used to forward rejection in a chain of promises. If you are dealing with the last promise in - * a promise chain, you don't need to worry about it. - * - * When comparing deferreds/promises to the familiar behavior of try/catch/throw, think of - * `reject` as the `throw` keyword in JavaScript. This also means that if you "catch" an error via - * a promise error callback and you want to forward the error to the promise derived from the - * current promise, you have to "rethrow" the error by returning a rejection constructed via - * `reject`. - * - * ```js - * promiseB = promiseA.then(function(result) { - * // success: do something and resolve promiseB - * // with the old or a new result - * return result; - * }, function(reason) { - * // error: handle the error if possible and - * // resolve promiseB with newPromiseOrValue, - * // otherwise forward the rejection to promiseB - * if (canHandle(reason)) { - * // handle the error and recover - * return newPromiseOrValue; - * } - * return $q.reject(reason); - * }); - * ``` - * - * @param {*} reason Constant, message, exception or an object representing the rejection reason. - * @returns {Promise} Returns a promise that was already resolved as rejected with the `reason`. - */ - var reject = function(reason) { - var result = new Deferred(); - result.reject(reason); - return result.promise; - }; - - var makePromise = function makePromise(value, resolved) { - var result = new Deferred(); - if (resolved) { - result.resolve(value); - } else { - result.reject(value); - } - return result.promise; - }; - - var handleCallback = function handleCallback(value, isResolved, callback) { - var callbackOutput = null; - try { - if (isFunction(callback)) callbackOutput = callback(); - } catch (e) { - return makePromise(e, false); - } - if (isPromiseLike(callbackOutput)) { - return callbackOutput.then(function() { - return makePromise(value, isResolved); - }, function(error) { - return makePromise(error, false); - }); - } else { - return makePromise(value, isResolved); - } - }; - - /** - * @ngdoc method - * @name $q#when - * @kind function - * - * @description - * Wraps an object that might be a value or a (3rd party) then-able promise into a $q promise. - * This is useful when you are dealing with an object that might or might not be a promise, or if - * the promise comes from a source that can't be trusted. - * - * @param {*} value Value or a promise - * @returns {Promise} Returns a promise of the passed value or promise - */ - - - var when = function(value, callback, errback, progressBack) { - var result = new Deferred(); - result.resolve(value); - return result.promise.then(callback, errback, progressBack); - }; - - /** - * @ngdoc method - * @name $q#all - * @kind function - * - * @description - * Combines multiple promises into a single promise that is resolved when all of the input - * promises are resolved. - * - * @param {Array.<Promise>|Object.<Promise>} promises An array or hash of promises. - * @returns {Promise} Returns a single promise that will be resolved with an array/hash of values, - * each value corresponding to the promise at the same index/key in the `promises` array/hash. - * If any of the promises is resolved with a rejection, this resulting promise will be rejected - * with the same rejection value. - */ - - function all(promises) { - var deferred = new Deferred(), - counter = 0, - results = isArray(promises) ? [] : {}; - - forEach(promises, function(promise, key) { - counter++; - when(promise).then(function(value) { - if (results.hasOwnProperty(key)) return; - results[key] = value; - if (!(--counter)) deferred.resolve(results); - }, function(reason) { - if (results.hasOwnProperty(key)) return; - deferred.reject(reason); - }); - }); - - if (counter === 0) { - deferred.resolve(results); - } - - return deferred.promise; - } - - var $Q = function Q(resolver) { - if (!isFunction(resolver)) { - throw $qMinErr('norslvr', "Expected resolverFn, got '{0}'", resolver); - } - - if (!(this instanceof Q)) { - // More useful when $Q is the Promise itself. - return new Q(resolver); - } - - var deferred = new Deferred(); - - function resolveFn(value) { - deferred.resolve(value); - } - - function rejectFn(reason) { - deferred.reject(reason); - } - - resolver(resolveFn, rejectFn); - - return deferred.promise; - }; - - $Q.defer = defer; - $Q.reject = reject; - $Q.when = when; - $Q.all = all; - - return $Q; -} - -function $$RAFProvider() { //rAF - this.$get = ['$window', '$timeout', function($window, $timeout) { - var requestAnimationFrame = $window.requestAnimationFrame || - $window.webkitRequestAnimationFrame; - - var cancelAnimationFrame = $window.cancelAnimationFrame || - $window.webkitCancelAnimationFrame || - $window.webkitCancelRequestAnimationFrame; - - var rafSupported = !!requestAnimationFrame; - var raf = rafSupported - ? function(fn) { - var id = requestAnimationFrame(fn); - return function() { - cancelAnimationFrame(id); - }; - } - : function(fn) { - var timer = $timeout(fn, 16.66, false); // 1000 / 60 = 16.666 - return function() { - $timeout.cancel(timer); - }; - }; - - raf.supported = rafSupported; - - return raf; - }]; -} - -/** - * DESIGN NOTES - * - * The design decisions behind the scope are heavily favored for speed and memory consumption. - * - * The typical use of scope is to watch the expressions, which most of the time return the same - * value as last time so we optimize the operation. - * - * Closures construction is expensive in terms of speed as well as memory: - * - No closures, instead use prototypical inheritance for API - * - Internal state needs to be stored on scope directly, which means that private state is - * exposed as $$____ properties - * - * Loop operations are optimized by using while(count--) { ... } - * - this means that in order to keep the same order of execution as addition we have to add - * items to the array at the beginning (unshift) instead of at the end (push) - * - * Child scopes are created and removed often - * - Using an array would be slow since inserts in middle are expensive so we use linked list - * - * There are few watches then a lot of observers. This is why you don't want the observer to be - * implemented in the same way as watch. Watch requires return of initialization function which - * are expensive to construct. - */ - - -/** - * @ngdoc provider - * @name $rootScopeProvider - * @description - * - * Provider for the $rootScope service. - */ - -/** - * @ngdoc method - * @name $rootScopeProvider#digestTtl - * @description - * - * Sets the number of `$digest` iterations the scope should attempt to execute before giving up and - * assuming that the model is unstable. - * - * The current default is 10 iterations. - * - * In complex applications it's possible that the dependencies between `$watch`s will result in - * several digest iterations. However if an application needs more than the default 10 digest - * iterations for its model to stabilize then you should investigate what is causing the model to - * continuously change during the digest. - * - * Increasing the TTL could have performance implications, so you should not change it without - * proper justification. - * - * @param {number} limit The number of digest iterations. - */ - - -/** - * @ngdoc service - * @name $rootScope - * @description - * - * Every application has a single root {@link ng.$rootScope.Scope scope}. - * All other scopes are descendant scopes of the root scope. Scopes provide separation - * between the model and the view, via a mechanism for watching the model for changes. - * They also provide an event emission/broadcast and subscription facility. See the - * {@link guide/scope developer guide on scopes}. - */ -function $RootScopeProvider() { - var TTL = 10; - var $rootScopeMinErr = minErr('$rootScope'); - var lastDirtyWatch = null; - var applyAsyncId = null; - - this.digestTtl = function(value) { - if (arguments.length) { - TTL = value; - } - return TTL; - }; - - this.$get = ['$injector', '$exceptionHandler', '$parse', '$browser', - function($injector, $exceptionHandler, $parse, $browser) { - - /** - * @ngdoc type - * @name $rootScope.Scope - * - * @description - * A root scope can be retrieved using the {@link ng.$rootScope $rootScope} key from the - * {@link auto.$injector $injector}. Child scopes are created using the - * {@link ng.$rootScope.Scope#$new $new()} method. (Most scopes are created automatically when - * compiled HTML template is executed.) - * - * Here is a simple scope snippet to show how you can interact with the scope. - * ```html - * <file src="./test/ng/rootScopeSpec.js" tag="docs1" /> - * ``` - * - * # Inheritance - * A scope can inherit from a parent scope, as in this example: - * ```js - var parent = $rootScope; - var child = parent.$new(); - - parent.salutation = "Hello"; - expect(child.salutation).toEqual('Hello'); - - child.salutation = "Welcome"; - expect(child.salutation).toEqual('Welcome'); - expect(parent.salutation).toEqual('Hello'); - * ``` - * - * When interacting with `Scope` in tests, additional helper methods are available on the - * instances of `Scope` type. See {@link ngMock.$rootScope.Scope ngMock Scope} for additional - * details. - * - * - * @param {Object.<string, function()>=} providers Map of service factory which need to be - * provided for the current scope. Defaults to {@link ng}. - * @param {Object.<string, *>=} instanceCache Provides pre-instantiated services which should - * append/override services provided by `providers`. This is handy - * when unit-testing and having the need to override a default - * service. - * @returns {Object} Newly created scope. - * - */ - function Scope() { - this.$id = nextUid(); - this.$$phase = this.$parent = this.$$watchers = - this.$$nextSibling = this.$$prevSibling = - this.$$childHead = this.$$childTail = null; - this.$root = this; - this.$$destroyed = false; - this.$$listeners = {}; - this.$$listenerCount = {}; - this.$$isolateBindings = null; - } - - /** - * @ngdoc property - * @name $rootScope.Scope#$id - * - * @description - * Unique scope ID (monotonically increasing) useful for debugging. - */ - - /** - * @ngdoc property - * @name $rootScope.Scope#$parent - * - * @description - * Reference to the parent scope. - */ - - /** - * @ngdoc property - * @name $rootScope.Scope#$root - * - * @description - * Reference to the root scope. - */ - - Scope.prototype = { - constructor: Scope, - /** - * @ngdoc method - * @name $rootScope.Scope#$new - * @kind function - * - * @description - * Creates a new child {@link ng.$rootScope.Scope scope}. - * - * The parent scope will propagate the {@link ng.$rootScope.Scope#$digest $digest()} event. - * The scope can be removed from the scope hierarchy using {@link ng.$rootScope.Scope#$destroy $destroy()}. - * - * {@link ng.$rootScope.Scope#$destroy $destroy()} must be called on a scope when it is - * desired for the scope and its child scopes to be permanently detached from the parent and - * thus stop participating in model change detection and listener notification by invoking. - * - * @param {boolean} isolate If true, then the scope does not prototypically inherit from the - * parent scope. The scope is isolated, as it can not see parent scope properties. - * When creating widgets, it is useful for the widget to not accidentally read parent - * state. - * - * @param {Scope} [parent=this] The {@link ng.$rootScope.Scope `Scope`} that will be the `$parent` - * of the newly created scope. Defaults to `this` scope if not provided. - * This is used when creating a transclude scope to correctly place it - * in the scope hierarchy while maintaining the correct prototypical - * inheritance. - * - * @returns {Object} The newly created child scope. - * - */ - $new: function(isolate, parent) { - var child; - - parent = parent || this; - - if (isolate) { - child = new Scope(); - child.$root = this.$root; - } else { - // Only create a child scope class if somebody asks for one, - // but cache it to allow the VM to optimize lookups. - if (!this.$$ChildScope) { - this.$$ChildScope = function ChildScope() { - this.$$watchers = this.$$nextSibling = - this.$$childHead = this.$$childTail = null; - this.$$listeners = {}; - this.$$listenerCount = {}; - this.$id = nextUid(); - this.$$ChildScope = null; - }; - this.$$ChildScope.prototype = this; - } - child = new this.$$ChildScope(); - } - child.$parent = parent; - child.$$prevSibling = parent.$$childTail; - if (parent.$$childHead) { - parent.$$childTail.$$nextSibling = child; - parent.$$childTail = child; - } else { - parent.$$childHead = parent.$$childTail = child; - } - - // When the new scope is not isolated or we inherit from `this`, and - // the parent scope is destroyed, the property `$$destroyed` is inherited - // prototypically. In all other cases, this property needs to be set - // when the parent scope is destroyed. - // The listener needs to be added after the parent is set - if (isolate || parent != this) child.$on('$destroy', destroyChild); - - return child; - - function destroyChild() { - child.$$destroyed = true; - } - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$watch - * @kind function - * - * @description - * Registers a `listener` callback to be executed whenever the `watchExpression` changes. - * - * - The `watchExpression` is called on every call to {@link ng.$rootScope.Scope#$digest - * $digest()} and should return the value that will be watched. (Since - * {@link ng.$rootScope.Scope#$digest $digest()} reruns when it detects changes the - * `watchExpression` can execute multiple times per - * {@link ng.$rootScope.Scope#$digest $digest()} and should be idempotent.) - * - The `listener` is called only when the value from the current `watchExpression` and the - * previous call to `watchExpression` are not equal (with the exception of the initial run, - * see below). Inequality is determined according to reference inequality, - * [strict comparison](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators) - * via the `!==` Javascript operator, unless `objectEquality == true` - * (see next point) - * - When `objectEquality == true`, inequality of the `watchExpression` is determined - * according to the {@link angular.equals} function. To save the value of the object for - * later comparison, the {@link angular.copy} function is used. This therefore means that - * watching complex objects will have adverse memory and performance implications. - * - The watch `listener` may change the model, which may trigger other `listener`s to fire. - * This is achieved by rerunning the watchers until no changes are detected. The rerun - * iteration limit is 10 to prevent an infinite loop deadlock. - * - * - * If you want to be notified whenever {@link ng.$rootScope.Scope#$digest $digest} is called, - * you can register a `watchExpression` function with no `listener`. (Since `watchExpression` - * can execute multiple times per {@link ng.$rootScope.Scope#$digest $digest} cycle when a - * change is detected, be prepared for multiple calls to your listener.) - * - * After a watcher is registered with the scope, the `listener` fn is called asynchronously - * (via {@link ng.$rootScope.Scope#$evalAsync $evalAsync}) to initialize the - * watcher. In rare cases, this is undesirable because the listener is called when the result - * of `watchExpression` didn't change. To detect this scenario within the `listener` fn, you - * can compare the `newVal` and `oldVal`. If these two values are identical (`===`) then the - * listener was called due to initialization. - * - * - * - * # Example - * ```js - // let's assume that scope was dependency injected as the $rootScope - var scope = $rootScope; - scope.name = 'misko'; - scope.counter = 0; - - expect(scope.counter).toEqual(0); - scope.$watch('name', function(newValue, oldValue) { - scope.counter = scope.counter + 1; - }); - expect(scope.counter).toEqual(0); - - scope.$digest(); - // the listener is always called during the first $digest loop after it was registered - expect(scope.counter).toEqual(1); - - scope.$digest(); - // but now it will not be called unless the value changes - expect(scope.counter).toEqual(1); - - scope.name = 'adam'; - scope.$digest(); - expect(scope.counter).toEqual(2); - - - - // Using a function as a watchExpression - var food; - scope.foodCounter = 0; - expect(scope.foodCounter).toEqual(0); - scope.$watch( - // This function returns the value being watched. It is called for each turn of the $digest loop - function() { return food; }, - // This is the change listener, called when the value returned from the above function changes - function(newValue, oldValue) { - if ( newValue !== oldValue ) { - // Only increment the counter if the value changed - scope.foodCounter = scope.foodCounter + 1; - } - } - ); - // No digest has been run so the counter will be zero - expect(scope.foodCounter).toEqual(0); - - // Run the digest but since food has not changed count will still be zero - scope.$digest(); - expect(scope.foodCounter).toEqual(0); - - // Update food and run digest. Now the counter will increment - food = 'cheeseburger'; - scope.$digest(); - expect(scope.foodCounter).toEqual(1); - - * ``` - * - * - * - * @param {(function()|string)} watchExpression Expression that is evaluated on each - * {@link ng.$rootScope.Scope#$digest $digest} cycle. A change in the return value triggers - * a call to the `listener`. - * - * - `string`: Evaluated as {@link guide/expression expression} - * - `function(scope)`: called with current `scope` as a parameter. - * @param {function(newVal, oldVal, scope)} listener Callback called whenever the value - * of `watchExpression` changes. - * - * - `newVal` contains the current value of the `watchExpression` - * - `oldVal` contains the previous value of the `watchExpression` - * - `scope` refers to the current scope - * @param {boolean=} objectEquality Compare for object equality using {@link angular.equals} instead of - * comparing for reference equality. - * @returns {function()} Returns a deregistration function for this listener. - */ - $watch: function(watchExp, listener, objectEquality) { - var get = $parse(watchExp); - - if (get.$$watchDelegate) { - return get.$$watchDelegate(this, listener, objectEquality, get); - } - var scope = this, - array = scope.$$watchers, - watcher = { - fn: listener, - last: initWatchVal, - get: get, - exp: watchExp, - eq: !!objectEquality - }; - - lastDirtyWatch = null; - - if (!isFunction(listener)) { - watcher.fn = noop; - } - - if (!array) { - array = scope.$$watchers = []; - } - // we use unshift since we use a while loop in $digest for speed. - // the while loop reads in reverse order. - array.unshift(watcher); - - return function deregisterWatch() { - arrayRemove(array, watcher); - lastDirtyWatch = null; - }; - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$watchGroup - * @kind function - * - * @description - * A variant of {@link ng.$rootScope.Scope#$watch $watch()} where it watches an array of `watchExpressions`. - * If any one expression in the collection changes the `listener` is executed. - * - * - The items in the `watchExpressions` array are observed via standard $watch operation and are examined on every - * call to $digest() to see if any items changes. - * - The `listener` is called whenever any expression in the `watchExpressions` array changes. - * - * @param {Array.<string|Function(scope)>} watchExpressions Array of expressions that will be individually - * watched using {@link ng.$rootScope.Scope#$watch $watch()} - * - * @param {function(newValues, oldValues, scope)} listener Callback called whenever the return value of any - * expression in `watchExpressions` changes - * The `newValues` array contains the current values of the `watchExpressions`, with the indexes matching - * those of `watchExpression` - * and the `oldValues` array contains the previous values of the `watchExpressions`, with the indexes matching - * those of `watchExpression` - * The `scope` refers to the current scope. - * @returns {function()} Returns a de-registration function for all listeners. - */ - $watchGroup: function(watchExpressions, listener) { - var oldValues = new Array(watchExpressions.length); - var newValues = new Array(watchExpressions.length); - var deregisterFns = []; - var self = this; - var changeReactionScheduled = false; - var firstRun = true; - - if (!watchExpressions.length) { - // No expressions means we call the listener ASAP - var shouldCall = true; - self.$evalAsync(function() { - if (shouldCall) listener(newValues, newValues, self); - }); - return function deregisterWatchGroup() { - shouldCall = false; - }; - } - - if (watchExpressions.length === 1) { - // Special case size of one - return this.$watch(watchExpressions[0], function watchGroupAction(value, oldValue, scope) { - newValues[0] = value; - oldValues[0] = oldValue; - listener(newValues, (value === oldValue) ? newValues : oldValues, scope); - }); - } - - forEach(watchExpressions, function(expr, i) { - var unwatchFn = self.$watch(expr, function watchGroupSubAction(value, oldValue) { - newValues[i] = value; - oldValues[i] = oldValue; - if (!changeReactionScheduled) { - changeReactionScheduled = true; - self.$evalAsync(watchGroupAction); - } - }); - deregisterFns.push(unwatchFn); - }); - - function watchGroupAction() { - changeReactionScheduled = false; - - if (firstRun) { - firstRun = false; - listener(newValues, newValues, self); - } else { - listener(newValues, oldValues, self); - } - } - - return function deregisterWatchGroup() { - while (deregisterFns.length) { - deregisterFns.shift()(); - } - }; - }, - - - /** - * @ngdoc method - * @name $rootScope.Scope#$watchCollection - * @kind function - * - * @description - * Shallow watches the properties of an object and fires whenever any of the properties change - * (for arrays, this implies watching the array items; for object maps, this implies watching - * the properties). If a change is detected, the `listener` callback is fired. - * - * - The `obj` collection is observed via standard $watch operation and is examined on every - * call to $digest() to see if any items have been added, removed, or moved. - * - The `listener` is called whenever anything within the `obj` has changed. Examples include - * adding, removing, and moving items belonging to an object or array. - * - * - * # Example - * ```js - $scope.names = ['igor', 'matias', 'misko', 'james']; - $scope.dataCount = 4; - - $scope.$watchCollection('names', function(newNames, oldNames) { - $scope.dataCount = newNames.length; - }); - - expect($scope.dataCount).toEqual(4); - $scope.$digest(); - - //still at 4 ... no changes - expect($scope.dataCount).toEqual(4); - - $scope.names.pop(); - $scope.$digest(); - - //now there's been a change - expect($scope.dataCount).toEqual(3); - * ``` - * - * - * @param {string|function(scope)} obj Evaluated as {@link guide/expression expression}. The - * expression value should evaluate to an object or an array which is observed on each - * {@link ng.$rootScope.Scope#$digest $digest} cycle. Any shallow change within the - * collection will trigger a call to the `listener`. - * - * @param {function(newCollection, oldCollection, scope)} listener a callback function called - * when a change is detected. - * - The `newCollection` object is the newly modified data obtained from the `obj` expression - * - The `oldCollection` object is a copy of the former collection data. - * Due to performance considerations, the`oldCollection` value is computed only if the - * `listener` function declares two or more arguments. - * - The `scope` argument refers to the current scope. - * - * @returns {function()} Returns a de-registration function for this listener. When the - * de-registration function is executed, the internal watch operation is terminated. - */ - $watchCollection: function(obj, listener) { - $watchCollectionInterceptor.$stateful = true; - - var self = this; - // the current value, updated on each dirty-check run - var newValue; - // a shallow copy of the newValue from the last dirty-check run, - // updated to match newValue during dirty-check run - var oldValue; - // a shallow copy of the newValue from when the last change happened - var veryOldValue; - // only track veryOldValue if the listener is asking for it - var trackVeryOldValue = (listener.length > 1); - var changeDetected = 0; - var changeDetector = $parse(obj, $watchCollectionInterceptor); - var internalArray = []; - var internalObject = {}; - var initRun = true; - var oldLength = 0; - - function $watchCollectionInterceptor(_value) { - newValue = _value; - var newLength, key, bothNaN, newItem, oldItem; - - // If the new value is undefined, then return undefined as the watch may be a one-time watch - if (isUndefined(newValue)) return; - - if (!isObject(newValue)) { // if primitive - if (oldValue !== newValue) { - oldValue = newValue; - changeDetected++; - } - } else if (isArrayLike(newValue)) { - if (oldValue !== internalArray) { - // we are transitioning from something which was not an array into array. - oldValue = internalArray; - oldLength = oldValue.length = 0; - changeDetected++; - } - - newLength = newValue.length; - - if (oldLength !== newLength) { - // if lengths do not match we need to trigger change notification - changeDetected++; - oldValue.length = oldLength = newLength; - } - // copy the items to oldValue and look for changes. - for (var i = 0; i < newLength; i++) { - oldItem = oldValue[i]; - newItem = newValue[i]; - - bothNaN = (oldItem !== oldItem) && (newItem !== newItem); - if (!bothNaN && (oldItem !== newItem)) { - changeDetected++; - oldValue[i] = newItem; - } - } - } else { - if (oldValue !== internalObject) { - // we are transitioning from something which was not an object into object. - oldValue = internalObject = {}; - oldLength = 0; - changeDetected++; - } - // copy the items to oldValue and look for changes. - newLength = 0; - for (key in newValue) { - if (newValue.hasOwnProperty(key)) { - newLength++; - newItem = newValue[key]; - oldItem = oldValue[key]; - - if (key in oldValue) { - bothNaN = (oldItem !== oldItem) && (newItem !== newItem); - if (!bothNaN && (oldItem !== newItem)) { - changeDetected++; - oldValue[key] = newItem; - } - } else { - oldLength++; - oldValue[key] = newItem; - changeDetected++; - } - } - } - if (oldLength > newLength) { - // we used to have more keys, need to find them and destroy them. - changeDetected++; - for (key in oldValue) { - if (!newValue.hasOwnProperty(key)) { - oldLength--; - delete oldValue[key]; - } - } - } - } - return changeDetected; - } - - function $watchCollectionAction() { - if (initRun) { - initRun = false; - listener(newValue, newValue, self); - } else { - listener(newValue, veryOldValue, self); - } - - // make a copy for the next time a collection is changed - if (trackVeryOldValue) { - if (!isObject(newValue)) { - //primitive - veryOldValue = newValue; - } else if (isArrayLike(newValue)) { - veryOldValue = new Array(newValue.length); - for (var i = 0; i < newValue.length; i++) { - veryOldValue[i] = newValue[i]; - } - } else { // if object - veryOldValue = {}; - for (var key in newValue) { - if (hasOwnProperty.call(newValue, key)) { - veryOldValue[key] = newValue[key]; - } - } - } - } - } - - return this.$watch(changeDetector, $watchCollectionAction); - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$digest - * @kind function - * - * @description - * Processes all of the {@link ng.$rootScope.Scope#$watch watchers} of the current scope and - * its children. Because a {@link ng.$rootScope.Scope#$watch watcher}'s listener can change - * the model, the `$digest()` keeps calling the {@link ng.$rootScope.Scope#$watch watchers} - * until no more listeners are firing. This means that it is possible to get into an infinite - * loop. This function will throw `'Maximum iteration limit exceeded.'` if the number of - * iterations exceeds 10. - * - * Usually, you don't call `$digest()` directly in - * {@link ng.directive:ngController controllers} or in - * {@link ng.$compileProvider#directive directives}. - * Instead, you should call {@link ng.$rootScope.Scope#$apply $apply()} (typically from within - * a {@link ng.$compileProvider#directive directive}), which will force a `$digest()`. - * - * If you want to be notified whenever `$digest()` is called, - * you can register a `watchExpression` function with - * {@link ng.$rootScope.Scope#$watch $watch()} with no `listener`. - * - * In unit tests, you may need to call `$digest()` to simulate the scope life cycle. - * - * # Example - * ```js - var scope = ...; - scope.name = 'misko'; - scope.counter = 0; - - expect(scope.counter).toEqual(0); - scope.$watch('name', function(newValue, oldValue) { - scope.counter = scope.counter + 1; - }); - expect(scope.counter).toEqual(0); - - scope.$digest(); - // the listener is always called during the first $digest loop after it was registered - expect(scope.counter).toEqual(1); - - scope.$digest(); - // but now it will not be called unless the value changes - expect(scope.counter).toEqual(1); - - scope.name = 'adam'; - scope.$digest(); - expect(scope.counter).toEqual(2); - * ``` - * - */ - $digest: function() { - var watch, value, last, - watchers, - length, - dirty, ttl = TTL, - next, current, target = this, - watchLog = [], - logIdx, logMsg, asyncTask; - - beginPhase('$digest'); - // Check for changes to browser url that happened in sync before the call to $digest - $browser.$$checkUrlChange(); - - if (this === $rootScope && applyAsyncId !== null) { - // If this is the root scope, and $applyAsync has scheduled a deferred $apply(), then - // cancel the scheduled $apply and flush the queue of expressions to be evaluated. - $browser.defer.cancel(applyAsyncId); - flushApplyAsync(); - } - - lastDirtyWatch = null; - - do { // "while dirty" loop - dirty = false; - current = target; - - while (asyncQueue.length) { - try { - asyncTask = asyncQueue.shift(); - asyncTask.scope.$eval(asyncTask.expression, asyncTask.locals); - } catch (e) { - $exceptionHandler(e); - } - lastDirtyWatch = null; - } - - traverseScopesLoop: - do { // "traverse the scopes" loop - if ((watchers = current.$$watchers)) { - // process our watches - length = watchers.length; - while (length--) { - try { - watch = watchers[length]; - // Most common watches are on primitives, in which case we can short - // circuit it with === operator, only when === fails do we use .equals - if (watch) { - if ((value = watch.get(current)) !== (last = watch.last) && - !(watch.eq - ? equals(value, last) - : (typeof value === 'number' && typeof last === 'number' - && isNaN(value) && isNaN(last)))) { - dirty = true; - lastDirtyWatch = watch; - watch.last = watch.eq ? copy(value, null) : value; - watch.fn(value, ((last === initWatchVal) ? value : last), current); - if (ttl < 5) { - logIdx = 4 - ttl; - if (!watchLog[logIdx]) watchLog[logIdx] = []; - watchLog[logIdx].push({ - msg: isFunction(watch.exp) ? 'fn: ' + (watch.exp.name || watch.exp.toString()) : watch.exp, - newVal: value, - oldVal: last - }); - } - } else if (watch === lastDirtyWatch) { - // If the most recently dirty watcher is now clean, short circuit since the remaining watchers - // have already been tested. - dirty = false; - break traverseScopesLoop; - } - } - } catch (e) { - $exceptionHandler(e); - } - } - } - - // Insanity Warning: scope depth-first traversal - // yes, this code is a bit crazy, but it works and we have tests to prove it! - // this piece should be kept in sync with the traversal in $broadcast - if (!(next = (current.$$childHead || - (current !== target && current.$$nextSibling)))) { - while (current !== target && !(next = current.$$nextSibling)) { - current = current.$parent; - } - } - } while ((current = next)); - - // `break traverseScopesLoop;` takes us to here - - if ((dirty || asyncQueue.length) && !(ttl--)) { - clearPhase(); - throw $rootScopeMinErr('infdig', - '{0} $digest() iterations reached. Aborting!\n' + - 'Watchers fired in the last 5 iterations: {1}', - TTL, watchLog); - } - - } while (dirty || asyncQueue.length); - - clearPhase(); - - while (postDigestQueue.length) { - try { - postDigestQueue.shift()(); - } catch (e) { - $exceptionHandler(e); - } - } - }, - - - /** - * @ngdoc event - * @name $rootScope.Scope#$destroy - * @eventType broadcast on scope being destroyed - * - * @description - * Broadcasted when a scope and its children are being destroyed. - * - * Note that, in AngularJS, there is also a `$destroy` jQuery event, which can be used to - * clean up DOM bindings before an element is removed from the DOM. - */ - - /** - * @ngdoc method - * @name $rootScope.Scope#$destroy - * @kind function - * - * @description - * Removes the current scope (and all of its children) from the parent scope. Removal implies - * that calls to {@link ng.$rootScope.Scope#$digest $digest()} will no longer - * propagate to the current scope and its children. Removal also implies that the current - * scope is eligible for garbage collection. - * - * The `$destroy()` is usually used by directives such as - * {@link ng.directive:ngRepeat ngRepeat} for managing the - * unrolling of the loop. - * - * Just before a scope is destroyed, a `$destroy` event is broadcasted on this scope. - * Application code can register a `$destroy` event handler that will give it a chance to - * perform any necessary cleanup. - * - * Note that, in AngularJS, there is also a `$destroy` jQuery event, which can be used to - * clean up DOM bindings before an element is removed from the DOM. - */ - $destroy: function() { - // we can't destroy the root scope or a scope that has been already destroyed - if (this.$$destroyed) return; - var parent = this.$parent; - - this.$broadcast('$destroy'); - this.$$destroyed = true; - if (this === $rootScope) return; - - for (var eventName in this.$$listenerCount) { - decrementListenerCount(this, this.$$listenerCount[eventName], eventName); - } - - // sever all the references to parent scopes (after this cleanup, the current scope should - // not be retained by any of our references and should be eligible for garbage collection) - if (parent.$$childHead == this) parent.$$childHead = this.$$nextSibling; - if (parent.$$childTail == this) parent.$$childTail = this.$$prevSibling; - if (this.$$prevSibling) this.$$prevSibling.$$nextSibling = this.$$nextSibling; - if (this.$$nextSibling) this.$$nextSibling.$$prevSibling = this.$$prevSibling; - - // Disable listeners, watchers and apply/digest methods - this.$destroy = this.$digest = this.$apply = this.$evalAsync = this.$applyAsync = noop; - this.$on = this.$watch = this.$watchGroup = function() { return noop; }; - this.$$listeners = {}; - - // All of the code below is bogus code that works around V8's memory leak via optimized code - // and inline caches. - // - // see: - // - https://code.google.com/p/v8/issues/detail?id=2073#c26 - // - https://github.com/angular/angular.js/issues/6794#issuecomment-38648909 - // - https://github.com/angular/angular.js/issues/1313#issuecomment-10378451 - - this.$parent = this.$$nextSibling = this.$$prevSibling = this.$$childHead = - this.$$childTail = this.$root = this.$$watchers = null; - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$eval - * @kind function - * - * @description - * Executes the `expression` on the current scope and returns the result. Any exceptions in - * the expression are propagated (uncaught). This is useful when evaluating Angular - * expressions. - * - * # Example - * ```js - var scope = ng.$rootScope.Scope(); - scope.a = 1; - scope.b = 2; - - expect(scope.$eval('a+b')).toEqual(3); - expect(scope.$eval(function(scope){ return scope.a + scope.b; })).toEqual(3); - * ``` - * - * @param {(string|function())=} expression An angular expression to be executed. - * - * - `string`: execute using the rules as defined in {@link guide/expression expression}. - * - `function(scope)`: execute the function with the current `scope` parameter. - * - * @param {(object)=} locals Local variables object, useful for overriding values in scope. - * @returns {*} The result of evaluating the expression. - */ - $eval: function(expr, locals) { - return $parse(expr)(this, locals); - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$evalAsync - * @kind function - * - * @description - * Executes the expression on the current scope at a later point in time. - * - * The `$evalAsync` makes no guarantees as to when the `expression` will be executed, only - * that: - * - * - it will execute after the function that scheduled the evaluation (preferably before DOM - * rendering). - * - at least one {@link ng.$rootScope.Scope#$digest $digest cycle} will be performed after - * `expression` execution. - * - * Any exceptions from the execution of the expression are forwarded to the - * {@link ng.$exceptionHandler $exceptionHandler} service. - * - * __Note:__ if this function is called outside of a `$digest` cycle, a new `$digest` cycle - * will be scheduled. However, it is encouraged to always call code that changes the model - * from within an `$apply` call. That includes code evaluated via `$evalAsync`. - * - * @param {(string|function())=} expression An angular expression to be executed. - * - * - `string`: execute using the rules as defined in {@link guide/expression expression}. - * - `function(scope)`: execute the function with the current `scope` parameter. - * - * @param {(object)=} locals Local variables object, useful for overriding values in scope. - */ - $evalAsync: function(expr, locals) { - // if we are outside of an $digest loop and this is the first time we are scheduling async - // task also schedule async auto-flush - if (!$rootScope.$$phase && !asyncQueue.length) { - $browser.defer(function() { - if (asyncQueue.length) { - $rootScope.$digest(); - } - }); - } - - asyncQueue.push({scope: this, expression: expr, locals: locals}); - }, - - $$postDigest: function(fn) { - postDigestQueue.push(fn); - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$apply - * @kind function - * - * @description - * `$apply()` is used to execute an expression in angular from outside of the angular - * framework. (For example from browser DOM events, setTimeout, XHR or third party libraries). - * Because we are calling into the angular framework we need to perform proper scope life - * cycle of {@link ng.$exceptionHandler exception handling}, - * {@link ng.$rootScope.Scope#$digest executing watches}. - * - * ## Life cycle - * - * # Pseudo-Code of `$apply()` - * ```js - function $apply(expr) { - try { - return $eval(expr); - } catch (e) { - $exceptionHandler(e); - } finally { - $root.$digest(); - } - } - * ``` - * - * - * Scope's `$apply()` method transitions through the following stages: - * - * 1. The {@link guide/expression expression} is executed using the - * {@link ng.$rootScope.Scope#$eval $eval()} method. - * 2. Any exceptions from the execution of the expression are forwarded to the - * {@link ng.$exceptionHandler $exceptionHandler} service. - * 3. The {@link ng.$rootScope.Scope#$watch watch} listeners are fired immediately after the - * expression was executed using the {@link ng.$rootScope.Scope#$digest $digest()} method. - * - * - * @param {(string|function())=} exp An angular expression to be executed. - * - * - `string`: execute using the rules as defined in {@link guide/expression expression}. - * - `function(scope)`: execute the function with current `scope` parameter. - * - * @returns {*} The result of evaluating the expression. - */ - $apply: function(expr) { - try { - beginPhase('$apply'); - return this.$eval(expr); - } catch (e) { - $exceptionHandler(e); - } finally { - clearPhase(); - try { - $rootScope.$digest(); - } catch (e) { - $exceptionHandler(e); - throw e; - } - } - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$applyAsync - * @kind function - * - * @description - * Schedule the invocation of $apply to occur at a later time. The actual time difference - * varies across browsers, but is typically around ~10 milliseconds. - * - * This can be used to queue up multiple expressions which need to be evaluated in the same - * digest. - * - * @param {(string|function())=} exp An angular expression to be executed. - * - * - `string`: execute using the rules as defined in {@link guide/expression expression}. - * - `function(scope)`: execute the function with current `scope` parameter. - */ - $applyAsync: function(expr) { - var scope = this; - expr && applyAsyncQueue.push($applyAsyncExpression); - scheduleApplyAsync(); - - function $applyAsyncExpression() { - scope.$eval(expr); - } - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$on - * @kind function - * - * @description - * Listens on events of a given type. See {@link ng.$rootScope.Scope#$emit $emit} for - * discussion of event life cycle. - * - * The event listener function format is: `function(event, args...)`. The `event` object - * passed into the listener has the following attributes: - * - * - `targetScope` - `{Scope}`: the scope on which the event was `$emit`-ed or - * `$broadcast`-ed. - * - `currentScope` - `{Scope}`: the scope that is currently handling the event. Once the - * event propagates through the scope hierarchy, this property is set to null. - * - `name` - `{string}`: name of the event. - * - `stopPropagation` - `{function=}`: calling `stopPropagation` function will cancel - * further event propagation (available only for events that were `$emit`-ed). - * - `preventDefault` - `{function}`: calling `preventDefault` sets `defaultPrevented` flag - * to true. - * - `defaultPrevented` - `{boolean}`: true if `preventDefault` was called. - * - * @param {string} name Event name to listen on. - * @param {function(event, ...args)} listener Function to call when the event is emitted. - * @returns {function()} Returns a deregistration function for this listener. - */ - $on: function(name, listener) { - var namedListeners = this.$$listeners[name]; - if (!namedListeners) { - this.$$listeners[name] = namedListeners = []; - } - namedListeners.push(listener); - - var current = this; - do { - if (!current.$$listenerCount[name]) { - current.$$listenerCount[name] = 0; - } - current.$$listenerCount[name]++; - } while ((current = current.$parent)); - - var self = this; - return function() { - var indexOfListener = namedListeners.indexOf(listener); - if (indexOfListener !== -1) { - namedListeners[indexOfListener] = null; - decrementListenerCount(self, 1, name); - } - }; - }, - - - /** - * @ngdoc method - * @name $rootScope.Scope#$emit - * @kind function - * - * @description - * Dispatches an event `name` upwards through the scope hierarchy notifying the - * registered {@link ng.$rootScope.Scope#$on} listeners. - * - * The event life cycle starts at the scope on which `$emit` was called. All - * {@link ng.$rootScope.Scope#$on listeners} listening for `name` event on this scope get - * notified. Afterwards, the event traverses upwards toward the root scope and calls all - * registered listeners along the way. The event will stop propagating if one of the listeners - * cancels it. - * - * Any exception emitted from the {@link ng.$rootScope.Scope#$on listeners} will be passed - * onto the {@link ng.$exceptionHandler $exceptionHandler} service. - * - * @param {string} name Event name to emit. - * @param {...*} args Optional one or more arguments which will be passed onto the event listeners. - * @return {Object} Event object (see {@link ng.$rootScope.Scope#$on}). - */ - $emit: function(name, args) { - var empty = [], - namedListeners, - scope = this, - stopPropagation = false, - event = { - name: name, - targetScope: scope, - stopPropagation: function() {stopPropagation = true;}, - preventDefault: function() { - event.defaultPrevented = true; - }, - defaultPrevented: false - }, - listenerArgs = concat([event], arguments, 1), - i, length; - - do { - namedListeners = scope.$$listeners[name] || empty; - event.currentScope = scope; - for (i = 0, length = namedListeners.length; i < length; i++) { - - // if listeners were deregistered, defragment the array - if (!namedListeners[i]) { - namedListeners.splice(i, 1); - i--; - length--; - continue; - } - try { - //allow all listeners attached to the current scope to run - namedListeners[i].apply(null, listenerArgs); - } catch (e) { - $exceptionHandler(e); - } - } - //if any listener on the current scope stops propagation, prevent bubbling - if (stopPropagation) { - event.currentScope = null; - return event; - } - //traverse upwards - scope = scope.$parent; - } while (scope); - - event.currentScope = null; - - return event; - }, - - - /** - * @ngdoc method - * @name $rootScope.Scope#$broadcast - * @kind function - * - * @description - * Dispatches an event `name` downwards to all child scopes (and their children) notifying the - * registered {@link ng.$rootScope.Scope#$on} listeners. - * - * The event life cycle starts at the scope on which `$broadcast` was called. All - * {@link ng.$rootScope.Scope#$on listeners} listening for `name` event on this scope get - * notified. Afterwards, the event propagates to all direct and indirect scopes of the current - * scope and calls all registered listeners along the way. The event cannot be canceled. - * - * Any exception emitted from the {@link ng.$rootScope.Scope#$on listeners} will be passed - * onto the {@link ng.$exceptionHandler $exceptionHandler} service. - * - * @param {string} name Event name to broadcast. - * @param {...*} args Optional one or more arguments which will be passed onto the event listeners. - * @return {Object} Event object, see {@link ng.$rootScope.Scope#$on} - */ - $broadcast: function(name, args) { - var target = this, - current = target, - next = target, - event = { - name: name, - targetScope: target, - preventDefault: function() { - event.defaultPrevented = true; - }, - defaultPrevented: false - }; - - if (!target.$$listenerCount[name]) return event; - - var listenerArgs = concat([event], arguments, 1), - listeners, i, length; - - //down while you can, then up and next sibling or up and next sibling until back at root - while ((current = next)) { - event.currentScope = current; - listeners = current.$$listeners[name] || []; - for (i = 0, length = listeners.length; i < length; i++) { - // if listeners were deregistered, defragment the array - if (!listeners[i]) { - listeners.splice(i, 1); - i--; - length--; - continue; - } - - try { - listeners[i].apply(null, listenerArgs); - } catch (e) { - $exceptionHandler(e); - } - } - - // Insanity Warning: scope depth-first traversal - // yes, this code is a bit crazy, but it works and we have tests to prove it! - // this piece should be kept in sync with the traversal in $digest - // (though it differs due to having the extra check for $$listenerCount) - if (!(next = ((current.$$listenerCount[name] && current.$$childHead) || - (current !== target && current.$$nextSibling)))) { - while (current !== target && !(next = current.$$nextSibling)) { - current = current.$parent; - } - } - } - - event.currentScope = null; - return event; - } - }; - - var $rootScope = new Scope(); - - //The internal queues. Expose them on the $rootScope for debugging/testing purposes. - var asyncQueue = $rootScope.$$asyncQueue = []; - var postDigestQueue = $rootScope.$$postDigestQueue = []; - var applyAsyncQueue = $rootScope.$$applyAsyncQueue = []; - - return $rootScope; - - - function beginPhase(phase) { - if ($rootScope.$$phase) { - throw $rootScopeMinErr('inprog', '{0} already in progress', $rootScope.$$phase); - } - - $rootScope.$$phase = phase; - } - - function clearPhase() { - $rootScope.$$phase = null; - } - - - function decrementListenerCount(current, count, name) { - do { - current.$$listenerCount[name] -= count; - - if (current.$$listenerCount[name] === 0) { - delete current.$$listenerCount[name]; - } - } while ((current = current.$parent)); - } - - /** - * function used as an initial value for watchers. - * because it's unique we can easily tell it apart from other values - */ - function initWatchVal() {} - - function flushApplyAsync() { - while (applyAsyncQueue.length) { - try { - applyAsyncQueue.shift()(); - } catch (e) { - $exceptionHandler(e); - } - } - applyAsyncId = null; - } - - function scheduleApplyAsync() { - if (applyAsyncId === null) { - applyAsyncId = $browser.defer(function() { - $rootScope.$apply(flushApplyAsync); - }); - } - } - }]; -} - -/** - * @description - * Private service to sanitize uris for links and images. Used by $compile and $sanitize. - */ -function $$SanitizeUriProvider() { - var aHrefSanitizationWhitelist = /^\s*(https?|ftp|mailto|tel|file):/, - imgSrcSanitizationWhitelist = /^\s*((https?|ftp|file|blob):|data:image\/)/; - - /** - * @description - * Retrieves or overrides the default regular expression that is used for whitelisting of safe - * urls during a[href] sanitization. - * - * The sanitization is a security measure aimed at prevent XSS attacks via html links. - * - * Any url about to be assigned to a[href] via data-binding is first normalized and turned into - * an absolute url. Afterwards, the url is matched against the `aHrefSanitizationWhitelist` - * regular expression. If a match is found, the original url is written into the dom. Otherwise, - * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM. - * - * @param {RegExp=} regexp New regexp to whitelist urls with. - * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for - * chaining otherwise. - */ - this.aHrefSanitizationWhitelist = function(regexp) { - if (isDefined(regexp)) { - aHrefSanitizationWhitelist = regexp; - return this; - } - return aHrefSanitizationWhitelist; - }; - - - /** - * @description - * Retrieves or overrides the default regular expression that is used for whitelisting of safe - * urls during img[src] sanitization. - * - * The sanitization is a security measure aimed at prevent XSS attacks via html links. - * - * Any url about to be assigned to img[src] via data-binding is first normalized and turned into - * an absolute url. Afterwards, the url is matched against the `imgSrcSanitizationWhitelist` - * regular expression. If a match is found, the original url is written into the dom. Otherwise, - * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM. - * - * @param {RegExp=} regexp New regexp to whitelist urls with. - * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for - * chaining otherwise. - */ - this.imgSrcSanitizationWhitelist = function(regexp) { - if (isDefined(regexp)) { - imgSrcSanitizationWhitelist = regexp; - return this; - } - return imgSrcSanitizationWhitelist; - }; - - this.$get = function() { - return function sanitizeUri(uri, isImage) { - var regex = isImage ? imgSrcSanitizationWhitelist : aHrefSanitizationWhitelist; - var normalizedVal; - normalizedVal = urlResolve(uri).href; - if (normalizedVal !== '' && !normalizedVal.match(regex)) { - return 'unsafe:' + normalizedVal; - } - return uri; - }; - }; -} - -var $sceMinErr = minErr('$sce'); - -var SCE_CONTEXTS = { - HTML: 'html', - CSS: 'css', - URL: 'url', - // RESOURCE_URL is a subtype of URL used in contexts where a privileged resource is sourced from a - // url. (e.g. ng-include, script src, templateUrl) - RESOURCE_URL: 'resourceUrl', - JS: 'js' -}; - -// Helper functions follow. - -function adjustMatcher(matcher) { - if (matcher === 'self') { - return matcher; - } else if (isString(matcher)) { - // Strings match exactly except for 2 wildcards - '*' and '**'. - // '*' matches any character except those from the set ':/.?&'. - // '**' matches any character (like .* in a RegExp). - // More than 2 *'s raises an error as it's ill defined. - if (matcher.indexOf('***') > -1) { - throw $sceMinErr('iwcard', - 'Illegal sequence *** in string matcher. String: {0}', matcher); - } - matcher = escapeForRegexp(matcher). - replace('\\*\\*', '.*'). - replace('\\*', '[^:/.?&;]*'); - return new RegExp('^' + matcher + '$'); - } else if (isRegExp(matcher)) { - // The only other type of matcher allowed is a Regexp. - // Match entire URL / disallow partial matches. - // Flags are reset (i.e. no global, ignoreCase or multiline) - return new RegExp('^' + matcher.source + '$'); - } else { - throw $sceMinErr('imatcher', - 'Matchers may only be "self", string patterns or RegExp objects'); - } -} - - -function adjustMatchers(matchers) { - var adjustedMatchers = []; - if (isDefined(matchers)) { - forEach(matchers, function(matcher) { - adjustedMatchers.push(adjustMatcher(matcher)); - }); - } - return adjustedMatchers; -} - - -/** - * @ngdoc service - * @name $sceDelegate - * @kind function - * - * @description - * - * `$sceDelegate` is a service that is used by the `$sce` service to provide {@link ng.$sce Strict - * Contextual Escaping (SCE)} services to AngularJS. - * - * Typically, you would configure or override the {@link ng.$sceDelegate $sceDelegate} instead of - * the `$sce` service to customize the way Strict Contextual Escaping works in AngularJS. This is - * because, while the `$sce` provides numerous shorthand methods, etc., you really only need to - * override 3 core functions (`trustAs`, `getTrusted` and `valueOf`) to replace the way things - * work because `$sce` delegates to `$sceDelegate` for these operations. - * - * Refer {@link ng.$sceDelegateProvider $sceDelegateProvider} to configure this service. - * - * The default instance of `$sceDelegate` should work out of the box with little pain. While you - * can override it completely to change the behavior of `$sce`, the common case would - * involve configuring the {@link ng.$sceDelegateProvider $sceDelegateProvider} instead by setting - * your own whitelists and blacklists for trusting URLs used for loading AngularJS resources such as - * templates. Refer {@link ng.$sceDelegateProvider#resourceUrlWhitelist - * $sceDelegateProvider.resourceUrlWhitelist} and {@link - * ng.$sceDelegateProvider#resourceUrlBlacklist $sceDelegateProvider.resourceUrlBlacklist} - */ - -/** - * @ngdoc provider - * @name $sceDelegateProvider - * @description - * - * The `$sceDelegateProvider` provider allows developers to configure the {@link ng.$sceDelegate - * $sceDelegate} service. This allows one to get/set the whitelists and blacklists used to ensure - * that the URLs used for sourcing Angular templates are safe. Refer {@link - * ng.$sceDelegateProvider#resourceUrlWhitelist $sceDelegateProvider.resourceUrlWhitelist} and - * {@link ng.$sceDelegateProvider#resourceUrlBlacklist $sceDelegateProvider.resourceUrlBlacklist} - * - * For the general details about this service in Angular, read the main page for {@link ng.$sce - * Strict Contextual Escaping (SCE)}. - * - * **Example**: Consider the following case. <a name="example"></a> - * - * - your app is hosted at url `http://myapp.example.com/` - * - but some of your templates are hosted on other domains you control such as - * `http://srv01.assets.example.com/`, `http://srv02.assets.example.com/`, etc. - * - and you have an open redirect at `http://myapp.example.com/clickThru?...`. - * - * Here is what a secure configuration for this scenario might look like: - * - * ``` - * angular.module('myApp', []).config(function($sceDelegateProvider) { - * $sceDelegateProvider.resourceUrlWhitelist([ - * // Allow same origin resource loads. - * 'self', - * // Allow loading from our assets domain. Notice the difference between * and **. - * 'http://srv*.assets.example.com/**' - * ]); - * - * // The blacklist overrides the whitelist so the open redirect here is blocked. - * $sceDelegateProvider.resourceUrlBlacklist([ - * 'http://myapp.example.com/clickThru**' - * ]); - * }); - * ``` - */ - -function $SceDelegateProvider() { - this.SCE_CONTEXTS = SCE_CONTEXTS; - - // Resource URLs can also be trusted by policy. - var resourceUrlWhitelist = ['self'], - resourceUrlBlacklist = []; - - /** - * @ngdoc method - * @name $sceDelegateProvider#resourceUrlWhitelist - * @kind function - * - * @param {Array=} whitelist When provided, replaces the resourceUrlWhitelist with the value - * provided. This must be an array or null. A snapshot of this array is used so further - * changes to the array are ignored. - * - * Follow {@link ng.$sce#resourceUrlPatternItem this link} for a description of the items - * allowed in this array. - * - * Note: **an empty whitelist array will block all URLs**! - * - * @return {Array} the currently set whitelist array. - * - * The **default value** when no whitelist has been explicitly set is `['self']` allowing only - * same origin resource requests. - * - * @description - * Sets/Gets the whitelist of trusted resource URLs. - */ - this.resourceUrlWhitelist = function(value) { - if (arguments.length) { - resourceUrlWhitelist = adjustMatchers(value); - } - return resourceUrlWhitelist; - }; - - /** - * @ngdoc method - * @name $sceDelegateProvider#resourceUrlBlacklist - * @kind function - * - * @param {Array=} blacklist When provided, replaces the resourceUrlBlacklist with the value - * provided. This must be an array or null. A snapshot of this array is used so further - * changes to the array are ignored. - * - * Follow {@link ng.$sce#resourceUrlPatternItem this link} for a description of the items - * allowed in this array. - * - * The typical usage for the blacklist is to **block - * [open redirects](http://cwe.mitre.org/data/definitions/601.html)** served by your domain as - * these would otherwise be trusted but actually return content from the redirected domain. - * - * Finally, **the blacklist overrides the whitelist** and has the final say. - * - * @return {Array} the currently set blacklist array. - * - * The **default value** when no whitelist has been explicitly set is the empty array (i.e. there - * is no blacklist.) - * - * @description - * Sets/Gets the blacklist of trusted resource URLs. - */ - - this.resourceUrlBlacklist = function(value) { - if (arguments.length) { - resourceUrlBlacklist = adjustMatchers(value); - } - return resourceUrlBlacklist; - }; - - this.$get = ['$injector', function($injector) { - - var htmlSanitizer = function htmlSanitizer(html) { - throw $sceMinErr('unsafe', 'Attempting to use an unsafe value in a safe context.'); - }; - - if ($injector.has('$sanitize')) { - htmlSanitizer = $injector.get('$sanitize'); - } - - - function matchUrl(matcher, parsedUrl) { - if (matcher === 'self') { - return urlIsSameOrigin(parsedUrl); - } else { - // definitely a regex. See adjustMatchers() - return !!matcher.exec(parsedUrl.href); - } - } - - function isResourceUrlAllowedByPolicy(url) { - var parsedUrl = urlResolve(url.toString()); - var i, n, allowed = false; - // Ensure that at least one item from the whitelist allows this url. - for (i = 0, n = resourceUrlWhitelist.length; i < n; i++) { - if (matchUrl(resourceUrlWhitelist[i], parsedUrl)) { - allowed = true; - break; - } - } - if (allowed) { - // Ensure that no item from the blacklist blocked this url. - for (i = 0, n = resourceUrlBlacklist.length; i < n; i++) { - if (matchUrl(resourceUrlBlacklist[i], parsedUrl)) { - allowed = false; - break; - } - } - } - return allowed; - } - - function generateHolderType(Base) { - var holderType = function TrustedValueHolderType(trustedValue) { - this.$$unwrapTrustedValue = function() { - return trustedValue; - }; - }; - if (Base) { - holderType.prototype = new Base(); - } - holderType.prototype.valueOf = function sceValueOf() { - return this.$$unwrapTrustedValue(); - }; - holderType.prototype.toString = function sceToString() { - return this.$$unwrapTrustedValue().toString(); - }; - return holderType; - } - - var trustedValueHolderBase = generateHolderType(), - byType = {}; - - byType[SCE_CONTEXTS.HTML] = generateHolderType(trustedValueHolderBase); - byType[SCE_CONTEXTS.CSS] = generateHolderType(trustedValueHolderBase); - byType[SCE_CONTEXTS.URL] = generateHolderType(trustedValueHolderBase); - byType[SCE_CONTEXTS.JS] = generateHolderType(trustedValueHolderBase); - byType[SCE_CONTEXTS.RESOURCE_URL] = generateHolderType(byType[SCE_CONTEXTS.URL]); - - /** - * @ngdoc method - * @name $sceDelegate#trustAs - * - * @description - * Returns an object that is trusted by angular for use in specified strict - * contextual escaping contexts (such as ng-bind-html, ng-include, any src - * attribute interpolation, any dom event binding attribute interpolation - * such as for onclick, etc.) that uses the provided value. - * See {@link ng.$sce $sce} for enabling strict contextual escaping. - * - * @param {string} type The kind of context in which this value is safe for use. e.g. url, - * resourceUrl, html, js and css. - * @param {*} value The value that that should be considered trusted/safe. - * @returns {*} A value that can be used to stand in for the provided `value` in places - * where Angular expects a $sce.trustAs() return value. - */ - function trustAs(type, trustedValue) { - var Constructor = (byType.hasOwnProperty(type) ? byType[type] : null); - if (!Constructor) { - throw $sceMinErr('icontext', - 'Attempted to trust a value in invalid context. Context: {0}; Value: {1}', - type, trustedValue); - } - if (trustedValue === null || trustedValue === undefined || trustedValue === '') { - return trustedValue; - } - // All the current contexts in SCE_CONTEXTS happen to be strings. In order to avoid trusting - // mutable objects, we ensure here that the value passed in is actually a string. - if (typeof trustedValue !== 'string') { - throw $sceMinErr('itype', - 'Attempted to trust a non-string value in a content requiring a string: Context: {0}', - type); - } - return new Constructor(trustedValue); - } - - /** - * @ngdoc method - * @name $sceDelegate#valueOf - * - * @description - * If the passed parameter had been returned by a prior call to {@link ng.$sceDelegate#trustAs - * `$sceDelegate.trustAs`}, returns the value that had been passed to {@link - * ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}. - * - * If the passed parameter is not a value that had been returned by {@link - * ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}, returns it as-is. - * - * @param {*} value The result of a prior {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`} - * call or anything else. - * @returns {*} The `value` that was originally provided to {@link ng.$sceDelegate#trustAs - * `$sceDelegate.trustAs`} if `value` is the result of such a call. Otherwise, returns - * `value` unchanged. - */ - function valueOf(maybeTrusted) { - if (maybeTrusted instanceof trustedValueHolderBase) { - return maybeTrusted.$$unwrapTrustedValue(); - } else { - return maybeTrusted; - } - } - - /** - * @ngdoc method - * @name $sceDelegate#getTrusted - * - * @description - * Takes the result of a {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`} call and - * returns the originally supplied value if the queried context type is a supertype of the - * created type. If this condition isn't satisfied, throws an exception. - * - * @param {string} type The kind of context in which this value is to be used. - * @param {*} maybeTrusted The result of a prior {@link ng.$sceDelegate#trustAs - * `$sceDelegate.trustAs`} call. - * @returns {*} The value the was originally provided to {@link ng.$sceDelegate#trustAs - * `$sceDelegate.trustAs`} if valid in this context. Otherwise, throws an exception. - */ - function getTrusted(type, maybeTrusted) { - if (maybeTrusted === null || maybeTrusted === undefined || maybeTrusted === '') { - return maybeTrusted; - } - var constructor = (byType.hasOwnProperty(type) ? byType[type] : null); - if (constructor && maybeTrusted instanceof constructor) { - return maybeTrusted.$$unwrapTrustedValue(); - } - // If we get here, then we may only take one of two actions. - // 1. sanitize the value for the requested type, or - // 2. throw an exception. - if (type === SCE_CONTEXTS.RESOURCE_URL) { - if (isResourceUrlAllowedByPolicy(maybeTrusted)) { - return maybeTrusted; - } else { - throw $sceMinErr('insecurl', - 'Blocked loading resource from url not allowed by $sceDelegate policy. URL: {0}', - maybeTrusted.toString()); - } - } else if (type === SCE_CONTEXTS.HTML) { - return htmlSanitizer(maybeTrusted); - } - throw $sceMinErr('unsafe', 'Attempting to use an unsafe value in a safe context.'); - } - - return { trustAs: trustAs, - getTrusted: getTrusted, - valueOf: valueOf }; - }]; -} - - -/** - * @ngdoc provider - * @name $sceProvider - * @description - * - * The $sceProvider provider allows developers to configure the {@link ng.$sce $sce} service. - * - enable/disable Strict Contextual Escaping (SCE) in a module - * - override the default implementation with a custom delegate - * - * Read more about {@link ng.$sce Strict Contextual Escaping (SCE)}. - */ - -/* jshint maxlen: false*/ - -/** - * @ngdoc service - * @name $sce - * @kind function - * - * @description - * - * `$sce` is a service that provides Strict Contextual Escaping services to AngularJS. - * - * # Strict Contextual Escaping - * - * Strict Contextual Escaping (SCE) is a mode in which AngularJS requires bindings in certain - * contexts to result in a value that is marked as safe to use for that context. One example of - * such a context is binding arbitrary html controlled by the user via `ng-bind-html`. We refer - * to these contexts as privileged or SCE contexts. - * - * As of version 1.2, Angular ships with SCE enabled by default. - * - * Note: When enabled (the default), IE<11 in quirks mode is not supported. In this mode, IE<11 allow - * one to execute arbitrary javascript by the use of the expression() syntax. Refer - * <http://blogs.msdn.com/b/ie/archive/2008/10/16/ending-expressions.aspx> to learn more about them. - * You can ensure your document is in standards mode and not quirks mode by adding `<!doctype html>` - * to the top of your HTML document. - * - * SCE assists in writing code in way that (a) is secure by default and (b) makes auditing for - * security vulnerabilities such as XSS, clickjacking, etc. a lot easier. - * - * Here's an example of a binding in a privileged context: - * - * ``` - * <input ng-model="userHtml"> - * <div ng-bind-html="userHtml"></div> - * ``` - * - * Notice that `ng-bind-html` is bound to `userHtml` controlled by the user. With SCE - * disabled, this application allows the user to render arbitrary HTML into the DIV. - * In a more realistic example, one may be rendering user comments, blog articles, etc. via - * bindings. (HTML is just one example of a context where rendering user controlled input creates - * security vulnerabilities.) - * - * For the case of HTML, you might use a library, either on the client side, or on the server side, - * to sanitize unsafe HTML before binding to the value and rendering it in the document. - * - * How would you ensure that every place that used these types of bindings was bound to a value that - * was sanitized by your library (or returned as safe for rendering by your server?) How can you - * ensure that you didn't accidentally delete the line that sanitized the value, or renamed some - * properties/fields and forgot to update the binding to the sanitized value? - * - * To be secure by default, you want to ensure that any such bindings are disallowed unless you can - * determine that something explicitly says it's safe to use a value for binding in that - * context. You can then audit your code (a simple grep would do) to ensure that this is only done - * for those values that you can easily tell are safe - because they were received from your server, - * sanitized by your library, etc. You can organize your codebase to help with this - perhaps - * allowing only the files in a specific directory to do this. Ensuring that the internal API - * exposed by that code doesn't markup arbitrary values as safe then becomes a more manageable task. - * - * In the case of AngularJS' SCE service, one uses {@link ng.$sce#trustAs $sce.trustAs} - * (and shorthand methods such as {@link ng.$sce#trustAsHtml $sce.trustAsHtml}, etc.) to - * obtain values that will be accepted by SCE / privileged contexts. - * - * - * ## How does it work? - * - * In privileged contexts, directives and code will bind to the result of {@link ng.$sce#getTrusted - * $sce.getTrusted(context, value)} rather than to the value directly. Directives use {@link - * ng.$sce#parseAs $sce.parseAs} rather than `$parse` to watch attribute bindings, which performs the - * {@link ng.$sce#getTrusted $sce.getTrusted} behind the scenes on non-constant literals. - * - * As an example, {@link ng.directive:ngBindHtml ngBindHtml} uses {@link - * ng.$sce#parseAsHtml $sce.parseAsHtml(binding expression)}. Here's the actual code (slightly - * simplified): - * - * ``` - * var ngBindHtmlDirective = ['$sce', function($sce) { - * return function(scope, element, attr) { - * scope.$watch($sce.parseAsHtml(attr.ngBindHtml), function(value) { - * element.html(value || ''); - * }); - * }; - * }]; - * ``` - * - * ## Impact on loading templates - * - * This applies both to the {@link ng.directive:ngInclude `ng-include`} directive as well as - * `templateUrl`'s specified by {@link guide/directive directives}. - * - * By default, Angular only loads templates from the same domain and protocol as the application - * document. This is done by calling {@link ng.$sce#getTrustedResourceUrl - * $sce.getTrustedResourceUrl} on the template URL. To load templates from other domains and/or - * protocols, you may either either {@link ng.$sceDelegateProvider#resourceUrlWhitelist whitelist - * them} or {@link ng.$sce#trustAsResourceUrl wrap it} into a trusted value. - * - * *Please note*: - * The browser's - * [Same Origin Policy](https://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest) - * and [Cross-Origin Resource Sharing (CORS)](http://www.w3.org/TR/cors/) - * policy apply in addition to this and may further restrict whether the template is successfully - * loaded. This means that without the right CORS policy, loading templates from a different domain - * won't work on all browsers. Also, loading templates from `file://` URL does not work on some - * browsers. - * - * ## This feels like too much overhead - * - * It's important to remember that SCE only applies to interpolation expressions. - * - * If your expressions are constant literals, they're automatically trusted and you don't need to - * call `$sce.trustAs` on them (remember to include the `ngSanitize` module) (e.g. - * `<div ng-bind-html="'<b>implicitly trusted</b>'"></div>`) just works. - * - * Additionally, `a[href]` and `img[src]` automatically sanitize their URLs and do not pass them - * through {@link ng.$sce#getTrusted $sce.getTrusted}. SCE doesn't play a role here. - * - * The included {@link ng.$sceDelegate $sceDelegate} comes with sane defaults to allow you to load - * templates in `ng-include` from your application's domain without having to even know about SCE. - * It blocks loading templates from other domains or loading templates over http from an https - * served document. You can change these by setting your own custom {@link - * ng.$sceDelegateProvider#resourceUrlWhitelist whitelists} and {@link - * ng.$sceDelegateProvider#resourceUrlBlacklist blacklists} for matching such URLs. - * - * This significantly reduces the overhead. It is far easier to pay the small overhead and have an - * application that's secure and can be audited to verify that with much more ease than bolting - * security onto an application later. - * - * <a name="contexts"></a> - * ## What trusted context types are supported? - * - * | Context | Notes | - * |---------------------|----------------| - * | `$sce.HTML` | For HTML that's safe to source into the application. The {@link ng.directive:ngBindHtml ngBindHtml} directive uses this context for bindings. If an unsafe value is encountered and the {@link ngSanitize $sanitize} module is present this will sanitize the value instead of throwing an error. | - * | `$sce.CSS` | For CSS that's safe to source into the application. Currently unused. Feel free to use it in your own directives. | - * | `$sce.URL` | For URLs that are safe to follow as links. Currently unused (`<a href=` and `<img src=` sanitize their urls and don't constitute an SCE context. | - * | `$sce.RESOURCE_URL` | For URLs that are not only safe to follow as links, but whose contents are also safe to include in your application. Examples include `ng-include`, `src` / `ngSrc` bindings for tags other than `IMG` (e.g. `IFRAME`, `OBJECT`, etc.) <br><br>Note that `$sce.RESOURCE_URL` makes a stronger statement about the URL than `$sce.URL` does and therefore contexts requiring values trusted for `$sce.RESOURCE_URL` can be used anywhere that values trusted for `$sce.URL` are required. | - * | `$sce.JS` | For JavaScript that is safe to execute in your application's context. Currently unused. Feel free to use it in your own directives. | - * - * ## Format of items in {@link ng.$sceDelegateProvider#resourceUrlWhitelist resourceUrlWhitelist}/{@link ng.$sceDelegateProvider#resourceUrlBlacklist Blacklist} <a name="resourceUrlPatternItem"></a> - * - * Each element in these arrays must be one of the following: - * - * - **'self'** - * - The special **string**, `'self'`, can be used to match against all URLs of the **same - * domain** as the application document using the **same protocol**. - * - **String** (except the special value `'self'`) - * - The string is matched against the full *normalized / absolute URL* of the resource - * being tested (substring matches are not good enough.) - * - There are exactly **two wildcard sequences** - `*` and `**`. All other characters - * match themselves. - * - `*`: matches zero or more occurrences of any character other than one of the following 6 - * characters: '`:`', '`/`', '`.`', '`?`', '`&`' and ';'. It's a useful wildcard for use - * in a whitelist. - * - `**`: matches zero or more occurrences of *any* character. As such, it's not - * not appropriate to use in for a scheme, domain, etc. as it would match too much. (e.g. - * http://**.example.com/ would match http://evil.com/?ignore=.example.com/ and that might - * not have been the intention.) Its usage at the very end of the path is ok. (e.g. - * http://foo.example.com/templates/**). - * - **RegExp** (*see caveat below*) - * - *Caveat*: While regular expressions are powerful and offer great flexibility, their syntax - * (and all the inevitable escaping) makes them *harder to maintain*. It's easy to - * accidentally introduce a bug when one updates a complex expression (imho, all regexes should - * have good test coverage.). For instance, the use of `.` in the regex is correct only in a - * small number of cases. A `.` character in the regex used when matching the scheme or a - * subdomain could be matched against a `:` or literal `.` that was likely not intended. It - * is highly recommended to use the string patterns and only fall back to regular expressions - * if they as a last resort. - * - The regular expression must be an instance of RegExp (i.e. not a string.) It is - * matched against the **entire** *normalized / absolute URL* of the resource being tested - * (even when the RegExp did not have the `^` and `$` codes.) In addition, any flags - * present on the RegExp (such as multiline, global, ignoreCase) are ignored. - * - If you are generating your JavaScript from some other templating engine (not - * recommended, e.g. in issue [#4006](https://github.com/angular/angular.js/issues/4006)), - * remember to escape your regular expression (and be aware that you might need more than - * one level of escaping depending on your templating engine and the way you interpolated - * the value.) Do make use of your platform's escaping mechanism as it might be good - * enough before coding your own. e.g. Ruby has - * [Regexp.escape(str)](http://www.ruby-doc.org/core-2.0.0/Regexp.html#method-c-escape) - * and Python has [re.escape](http://docs.python.org/library/re.html#re.escape). - * Javascript lacks a similar built in function for escaping. Take a look at Google - * Closure library's [goog.string.regExpEscape(s)]( - * http://docs.closure-library.googlecode.com/git/closure_goog_string_string.js.source.html#line962). - * - * Refer {@link ng.$sceDelegateProvider $sceDelegateProvider} for an example. - * - * ## Show me an example using SCE. - * - * <example module="mySceApp" deps="angular-sanitize.js"> - * <file name="index.html"> - * <div ng-controller="AppController as myCtrl"> - * <i ng-bind-html="myCtrl.explicitlyTrustedHtml" id="explicitlyTrustedHtml"></i><br><br> - * <b>User comments</b><br> - * By default, HTML that isn't explicitly trusted (e.g. Alice's comment) is sanitized when - * $sanitize is available. If $sanitize isn't available, this results in an error instead of an - * exploit. - * <div class="well"> - * <div ng-repeat="userComment in myCtrl.userComments"> - * <b>{{userComment.name}}</b>: - * <span ng-bind-html="userComment.htmlComment" class="htmlComment"></span> - * <br> - * </div> - * </div> - * </div> - * </file> - * - * <file name="script.js"> - * angular.module('mySceApp', ['ngSanitize']) - * .controller('AppController', ['$http', '$templateCache', '$sce', - * function($http, $templateCache, $sce) { - * var self = this; - * $http.get("test_data.json", {cache: $templateCache}).success(function(userComments) { - * self.userComments = userComments; - * }); - * self.explicitlyTrustedHtml = $sce.trustAsHtml( - * '<span onmouseover="this.textContent="Explicitly trusted HTML bypasses ' + - * 'sanitization."">Hover over this text.</span>'); - * }]); - * </file> - * - * <file name="test_data.json"> - * [ - * { "name": "Alice", - * "htmlComment": - * "<span onmouseover='this.textContent=\"PWN3D!\"'>Is <i>anyone</i> reading this?</span>" - * }, - * { "name": "Bob", - * "htmlComment": "<i>Yes!</i> Am I the only other one?" - * } - * ] - * </file> - * - * <file name="protractor.js" type="protractor"> - * describe('SCE doc demo', function() { - * it('should sanitize untrusted values', function() { - * expect(element.all(by.css('.htmlComment')).first().getInnerHtml()) - * .toBe('<span>Is <i>anyone</i> reading this?</span>'); - * }); - * - * it('should NOT sanitize explicitly trusted values', function() { - * expect(element(by.id('explicitlyTrustedHtml')).getInnerHtml()).toBe( - * '<span onmouseover="this.textContent="Explicitly trusted HTML bypasses ' + - * 'sanitization."">Hover over this text.</span>'); - * }); - * }); - * </file> - * </example> - * - * - * - * ## Can I disable SCE completely? - * - * Yes, you can. However, this is strongly discouraged. SCE gives you a lot of security benefits - * for little coding overhead. It will be much harder to take an SCE disabled application and - * either secure it on your own or enable SCE at a later stage. It might make sense to disable SCE - * for cases where you have a lot of existing code that was written before SCE was introduced and - * you're migrating them a module at a time. - * - * That said, here's how you can completely disable SCE: - * - * ``` - * angular.module('myAppWithSceDisabledmyApp', []).config(function($sceProvider) { - * // Completely disable SCE. For demonstration purposes only! - * // Do not use in new projects. - * $sceProvider.enabled(false); - * }); - * ``` - * - */ -/* jshint maxlen: 100 */ - -function $SceProvider() { - var enabled = true; - - /** - * @ngdoc method - * @name $sceProvider#enabled - * @kind function - * - * @param {boolean=} value If provided, then enables/disables SCE. - * @return {boolean} true if SCE is enabled, false otherwise. - * - * @description - * Enables/disables SCE and returns the current value. - */ - this.enabled = function(value) { - if (arguments.length) { - enabled = !!value; - } - return enabled; - }; - - - /* Design notes on the default implementation for SCE. - * - * The API contract for the SCE delegate - * ------------------------------------- - * The SCE delegate object must provide the following 3 methods: - * - * - trustAs(contextEnum, value) - * This method is used to tell the SCE service that the provided value is OK to use in the - * contexts specified by contextEnum. It must return an object that will be accepted by - * getTrusted() for a compatible contextEnum and return this value. - * - * - valueOf(value) - * For values that were not produced by trustAs(), return them as is. For values that were - * produced by trustAs(), return the corresponding input value to trustAs. Basically, if - * trustAs is wrapping the given values into some type, this operation unwraps it when given - * such a value. - * - * - getTrusted(contextEnum, value) - * This function should return the a value that is safe to use in the context specified by - * contextEnum or throw and exception otherwise. - * - * NOTE: This contract deliberately does NOT state that values returned by trustAs() must be - * opaque or wrapped in some holder object. That happens to be an implementation detail. For - * instance, an implementation could maintain a registry of all trusted objects by context. In - * such a case, trustAs() would return the same object that was passed in. getTrusted() would - * return the same object passed in if it was found in the registry under a compatible context or - * throw an exception otherwise. An implementation might only wrap values some of the time based - * on some criteria. getTrusted() might return a value and not throw an exception for special - * constants or objects even if not wrapped. All such implementations fulfill this contract. - * - * - * A note on the inheritance model for SCE contexts - * ------------------------------------------------ - * I've used inheritance and made RESOURCE_URL wrapped types a subtype of URL wrapped types. This - * is purely an implementation details. - * - * The contract is simply this: - * - * getTrusted($sce.RESOURCE_URL, value) succeeding implies that getTrusted($sce.URL, value) - * will also succeed. - * - * Inheritance happens to capture this in a natural way. In some future, we - * may not use inheritance anymore. That is OK because no code outside of - * sce.js and sceSpecs.js would need to be aware of this detail. - */ - - this.$get = ['$parse', '$sceDelegate', function( - $parse, $sceDelegate) { - // Prereq: Ensure that we're not running in IE<11 quirks mode. In that mode, IE < 11 allow - // the "expression(javascript expression)" syntax which is insecure. - if (enabled && msie < 8) { - throw $sceMinErr('iequirks', - 'Strict Contextual Escaping does not support Internet Explorer version < 11 in quirks ' + - 'mode. You can fix this by adding the text <!doctype html> to the top of your HTML ' + - 'document. See http://docs.angularjs.org/api/ng.$sce for more information.'); - } - - var sce = shallowCopy(SCE_CONTEXTS); - - /** - * @ngdoc method - * @name $sce#isEnabled - * @kind function - * - * @return {Boolean} true if SCE is enabled, false otherwise. If you want to set the value, you - * have to do it at module config time on {@link ng.$sceProvider $sceProvider}. - * - * @description - * Returns a boolean indicating if SCE is enabled. - */ - sce.isEnabled = function() { - return enabled; - }; - sce.trustAs = $sceDelegate.trustAs; - sce.getTrusted = $sceDelegate.getTrusted; - sce.valueOf = $sceDelegate.valueOf; - - if (!enabled) { - sce.trustAs = sce.getTrusted = function(type, value) { return value; }; - sce.valueOf = identity; - } - - /** - * @ngdoc method - * @name $sce#parseAs - * - * @description - * Converts Angular {@link guide/expression expression} into a function. This is like {@link - * ng.$parse $parse} and is identical when the expression is a literal constant. Otherwise, it - * wraps the expression in a call to {@link ng.$sce#getTrusted $sce.getTrusted(*type*, - * *result*)} - * - * @param {string} type The kind of SCE context in which this result will be used. - * @param {string} expression String expression to compile. - * @returns {function(context, locals)} a function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the strings - * are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values in - * `context`. - */ - sce.parseAs = function sceParseAs(type, expr) { - var parsed = $parse(expr); - if (parsed.literal && parsed.constant) { - return parsed; - } else { - return $parse(expr, function(value) { - return sce.getTrusted(type, value); - }); - } - }; - - /** - * @ngdoc method - * @name $sce#trustAs - * - * @description - * Delegates to {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}. As such, - * returns an object that is trusted by angular for use in specified strict contextual - * escaping contexts (such as ng-bind-html, ng-include, any src attribute - * interpolation, any dom event binding attribute interpolation such as for onclick, etc.) - * that uses the provided value. See * {@link ng.$sce $sce} for enabling strict contextual - * escaping. - * - * @param {string} type The kind of context in which this value is safe for use. e.g. url, - * resource_url, html, js and css. - * @param {*} value The value that that should be considered trusted/safe. - * @returns {*} A value that can be used to stand in for the provided `value` in places - * where Angular expects a $sce.trustAs() return value. - */ - - /** - * @ngdoc method - * @name $sce#trustAsHtml - * - * @description - * Shorthand method. `$sce.trustAsHtml(value)` → - * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.HTML, value)`} - * - * @param {*} value The value to trustAs. - * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedHtml - * $sce.getTrustedHtml(value)} to obtain the original value. (privileged directives - * only accept expressions that are either literal constants or are the - * return value of {@link ng.$sce#trustAs $sce.trustAs}.) - */ - - /** - * @ngdoc method - * @name $sce#trustAsUrl - * - * @description - * Shorthand method. `$sce.trustAsUrl(value)` → - * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.URL, value)`} - * - * @param {*} value The value to trustAs. - * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedUrl - * $sce.getTrustedUrl(value)} to obtain the original value. (privileged directives - * only accept expressions that are either literal constants or are the - * return value of {@link ng.$sce#trustAs $sce.trustAs}.) - */ - - /** - * @ngdoc method - * @name $sce#trustAsResourceUrl - * - * @description - * Shorthand method. `$sce.trustAsResourceUrl(value)` → - * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.RESOURCE_URL, value)`} - * - * @param {*} value The value to trustAs. - * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedResourceUrl - * $sce.getTrustedResourceUrl(value)} to obtain the original value. (privileged directives - * only accept expressions that are either literal constants or are the return - * value of {@link ng.$sce#trustAs $sce.trustAs}.) - */ - - /** - * @ngdoc method - * @name $sce#trustAsJs - * - * @description - * Shorthand method. `$sce.trustAsJs(value)` → - * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.JS, value)`} - * - * @param {*} value The value to trustAs. - * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedJs - * $sce.getTrustedJs(value)} to obtain the original value. (privileged directives - * only accept expressions that are either literal constants or are the - * return value of {@link ng.$sce#trustAs $sce.trustAs}.) - */ - - /** - * @ngdoc method - * @name $sce#getTrusted - * - * @description - * Delegates to {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted`}. As such, - * takes the result of a {@link ng.$sce#trustAs `$sce.trustAs`}() call and returns the - * originally supplied value if the queried context type is a supertype of the created type. - * If this condition isn't satisfied, throws an exception. - * - * @param {string} type The kind of context in which this value is to be used. - * @param {*} maybeTrusted The result of a prior {@link ng.$sce#trustAs `$sce.trustAs`} - * call. - * @returns {*} The value the was originally provided to - * {@link ng.$sce#trustAs `$sce.trustAs`} if valid in this context. - * Otherwise, throws an exception. - */ - - /** - * @ngdoc method - * @name $sce#getTrustedHtml - * - * @description - * Shorthand method. `$sce.getTrustedHtml(value)` → - * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.HTML, value)`} - * - * @param {*} value The value to pass to `$sce.getTrusted`. - * @returns {*} The return value of `$sce.getTrusted($sce.HTML, value)` - */ - - /** - * @ngdoc method - * @name $sce#getTrustedCss - * - * @description - * Shorthand method. `$sce.getTrustedCss(value)` → - * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.CSS, value)`} - * - * @param {*} value The value to pass to `$sce.getTrusted`. - * @returns {*} The return value of `$sce.getTrusted($sce.CSS, value)` - */ - - /** - * @ngdoc method - * @name $sce#getTrustedUrl - * - * @description - * Shorthand method. `$sce.getTrustedUrl(value)` → - * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.URL, value)`} - * - * @param {*} value The value to pass to `$sce.getTrusted`. - * @returns {*} The return value of `$sce.getTrusted($sce.URL, value)` - */ - - /** - * @ngdoc method - * @name $sce#getTrustedResourceUrl - * - * @description - * Shorthand method. `$sce.getTrustedResourceUrl(value)` → - * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.RESOURCE_URL, value)`} - * - * @param {*} value The value to pass to `$sceDelegate.getTrusted`. - * @returns {*} The return value of `$sce.getTrusted($sce.RESOURCE_URL, value)` - */ - - /** - * @ngdoc method - * @name $sce#getTrustedJs - * - * @description - * Shorthand method. `$sce.getTrustedJs(value)` → - * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.JS, value)`} - * - * @param {*} value The value to pass to `$sce.getTrusted`. - * @returns {*} The return value of `$sce.getTrusted($sce.JS, value)` - */ - - /** - * @ngdoc method - * @name $sce#parseAsHtml - * - * @description - * Shorthand method. `$sce.parseAsHtml(expression string)` → - * {@link ng.$sce#parseAs `$sce.parseAs($sce.HTML, value)`} - * - * @param {string} expression String expression to compile. - * @returns {function(context, locals)} a function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the strings - * are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values in - * `context`. - */ - - /** - * @ngdoc method - * @name $sce#parseAsCss - * - * @description - * Shorthand method. `$sce.parseAsCss(value)` → - * {@link ng.$sce#parseAs `$sce.parseAs($sce.CSS, value)`} - * - * @param {string} expression String expression to compile. - * @returns {function(context, locals)} a function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the strings - * are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values in - * `context`. - */ - - /** - * @ngdoc method - * @name $sce#parseAsUrl - * - * @description - * Shorthand method. `$sce.parseAsUrl(value)` → - * {@link ng.$sce#parseAs `$sce.parseAs($sce.URL, value)`} - * - * @param {string} expression String expression to compile. - * @returns {function(context, locals)} a function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the strings - * are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values in - * `context`. - */ - - /** - * @ngdoc method - * @name $sce#parseAsResourceUrl - * - * @description - * Shorthand method. `$sce.parseAsResourceUrl(value)` → - * {@link ng.$sce#parseAs `$sce.parseAs($sce.RESOURCE_URL, value)`} - * - * @param {string} expression String expression to compile. - * @returns {function(context, locals)} a function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the strings - * are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values in - * `context`. - */ - - /** - * @ngdoc method - * @name $sce#parseAsJs - * - * @description - * Shorthand method. `$sce.parseAsJs(value)` → - * {@link ng.$sce#parseAs `$sce.parseAs($sce.JS, value)`} - * - * @param {string} expression String expression to compile. - * @returns {function(context, locals)} a function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the strings - * are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values in - * `context`. - */ - - // Shorthand delegations. - var parse = sce.parseAs, - getTrusted = sce.getTrusted, - trustAs = sce.trustAs; - - forEach(SCE_CONTEXTS, function(enumValue, name) { - var lName = lowercase(name); - sce[camelCase("parse_as_" + lName)] = function(expr) { - return parse(enumValue, expr); - }; - sce[camelCase("get_trusted_" + lName)] = function(value) { - return getTrusted(enumValue, value); - }; - sce[camelCase("trust_as_" + lName)] = function(value) { - return trustAs(enumValue, value); - }; - }); - - return sce; - }]; -} - -/** - * !!! This is an undocumented "private" service !!! - * - * @name $sniffer - * @requires $window - * @requires $document - * - * @property {boolean} history Does the browser support html5 history api ? - * @property {boolean} transitions Does the browser support CSS transition events ? - * @property {boolean} animations Does the browser support CSS animation events ? - * - * @description - * This is very simple implementation of testing browser's features. - */ -function $SnifferProvider() { - this.$get = ['$window', '$document', function($window, $document) { - var eventSupport = {}, - android = - int((/android (\d+)/.exec(lowercase(($window.navigator || {}).userAgent)) || [])[1]), - boxee = /Boxee/i.test(($window.navigator || {}).userAgent), - document = $document[0] || {}, - vendorPrefix, - vendorRegex = /^(Moz|webkit|ms)(?=[A-Z])/, - bodyStyle = document.body && document.body.style, - transitions = false, - animations = false, - match; - - if (bodyStyle) { - for (var prop in bodyStyle) { - if (match = vendorRegex.exec(prop)) { - vendorPrefix = match[0]; - vendorPrefix = vendorPrefix.substr(0, 1).toUpperCase() + vendorPrefix.substr(1); - break; - } - } - - if (!vendorPrefix) { - vendorPrefix = ('WebkitOpacity' in bodyStyle) && 'webkit'; - } - - transitions = !!(('transition' in bodyStyle) || (vendorPrefix + 'Transition' in bodyStyle)); - animations = !!(('animation' in bodyStyle) || (vendorPrefix + 'Animation' in bodyStyle)); - - if (android && (!transitions || !animations)) { - transitions = isString(document.body.style.webkitTransition); - animations = isString(document.body.style.webkitAnimation); - } - } - - - return { - // Android has history.pushState, but it does not update location correctly - // so let's not use the history API at all. - // http://code.google.com/p/android/issues/detail?id=17471 - // https://github.com/angular/angular.js/issues/904 - - // older webkit browser (533.9) on Boxee box has exactly the same problem as Android has - // so let's not use the history API also - // We are purposefully using `!(android < 4)` to cover the case when `android` is undefined - // jshint -W018 - history: !!($window.history && $window.history.pushState && !(android < 4) && !boxee), - // jshint +W018 - hasEvent: function(event) { - // IE9 implements 'input' event it's so fubared that we rather pretend that it doesn't have - // it. In particular the event is not fired when backspace or delete key are pressed or - // when cut operation is performed. - // IE10+ implements 'input' event but it erroneously fires under various situations, - // e.g. when placeholder changes, or a form is focused. - if (event === 'input' && msie <= 11) return false; - - if (isUndefined(eventSupport[event])) { - var divElm = document.createElement('div'); - eventSupport[event] = 'on' + event in divElm; - } - - return eventSupport[event]; - }, - csp: csp(), - vendorPrefix: vendorPrefix, - transitions: transitions, - animations: animations, - android: android - }; - }]; -} - -var $compileMinErr = minErr('$compile'); - -/** - * @ngdoc service - * @name $templateRequest - * - * @description - * The `$templateRequest` service downloads the provided template using `$http` and, upon success, - * stores the contents inside of `$templateCache`. If the HTTP request fails or the response data - * of the HTTP request is empty, a `$compile` error will be thrown (the exception can be thwarted - * by setting the 2nd parameter of the function to true). - * - * @param {string} tpl The HTTP request template URL - * @param {boolean=} ignoreRequestError Whether or not to ignore the exception when the request fails or the template is empty - * - * @return {Promise} the HTTP Promise for the given. - * - * @property {number} totalPendingRequests total amount of pending template requests being downloaded. - */ -function $TemplateRequestProvider() { - this.$get = ['$templateCache', '$http', '$q', function($templateCache, $http, $q) { - function handleRequestFn(tpl, ignoreRequestError) { - handleRequestFn.totalPendingRequests++; - - var transformResponse = $http.defaults && $http.defaults.transformResponse; - - if (isArray(transformResponse)) { - transformResponse = transformResponse.filter(function(transformer) { - return transformer !== defaultHttpResponseTransform; - }); - } else if (transformResponse === defaultHttpResponseTransform) { - transformResponse = null; - } - - var httpOptions = { - cache: $templateCache, - transformResponse: transformResponse - }; - - return $http.get(tpl, httpOptions) - .finally(function() { - handleRequestFn.totalPendingRequests--; - }) - .then(function(response) { - return response.data; - }, handleError); - - function handleError(resp) { - if (!ignoreRequestError) { - throw $compileMinErr('tpload', 'Failed to load template: {0}', tpl); - } - return $q.reject(resp); - } - } - - handleRequestFn.totalPendingRequests = 0; - - return handleRequestFn; - }]; -} - -function $$TestabilityProvider() { - this.$get = ['$rootScope', '$browser', '$location', - function($rootScope, $browser, $location) { - - /** - * @name $testability - * - * @description - * The private $$testability service provides a collection of methods for use when debugging - * or by automated test and debugging tools. - */ - var testability = {}; - - /** - * @name $$testability#findBindings - * - * @description - * Returns an array of elements that are bound (via ng-bind or {{}}) - * to expressions matching the input. - * - * @param {Element} element The element root to search from. - * @param {string} expression The binding expression to match. - * @param {boolean} opt_exactMatch If true, only returns exact matches - * for the expression. Filters and whitespace are ignored. - */ - testability.findBindings = function(element, expression, opt_exactMatch) { - var bindings = element.getElementsByClassName('ng-binding'); - var matches = []; - forEach(bindings, function(binding) { - var dataBinding = angular.element(binding).data('$binding'); - if (dataBinding) { - forEach(dataBinding, function(bindingName) { - if (opt_exactMatch) { - var matcher = new RegExp('(^|\\s)' + escapeForRegexp(expression) + '(\\s|\\||$)'); - if (matcher.test(bindingName)) { - matches.push(binding); - } - } else { - if (bindingName.indexOf(expression) != -1) { - matches.push(binding); - } - } - }); - } - }); - return matches; - }; - - /** - * @name $$testability#findModels - * - * @description - * Returns an array of elements that are two-way found via ng-model to - * expressions matching the input. - * - * @param {Element} element The element root to search from. - * @param {string} expression The model expression to match. - * @param {boolean} opt_exactMatch If true, only returns exact matches - * for the expression. - */ - testability.findModels = function(element, expression, opt_exactMatch) { - var prefixes = ['ng-', 'data-ng-', 'ng\\:']; - for (var p = 0; p < prefixes.length; ++p) { - var attributeEquals = opt_exactMatch ? '=' : '*='; - var selector = '[' + prefixes[p] + 'model' + attributeEquals + '"' + expression + '"]'; - var elements = element.querySelectorAll(selector); - if (elements.length) { - return elements; - } - } - }; - - /** - * @name $$testability#getLocation - * - * @description - * Shortcut for getting the location in a browser agnostic way. Returns - * the path, search, and hash. (e.g. /path?a=b#hash) - */ - testability.getLocation = function() { - return $location.url(); - }; - - /** - * @name $$testability#setLocation - * - * @description - * Shortcut for navigating to a location without doing a full page reload. - * - * @param {string} url The location url (path, search and hash, - * e.g. /path?a=b#hash) to go to. - */ - testability.setLocation = function(url) { - if (url !== $location.url()) { - $location.url(url); - $rootScope.$digest(); - } - }; - - /** - * @name $$testability#whenStable - * - * @description - * Calls the callback when $timeout and $http requests are completed. - * - * @param {function} callback - */ - testability.whenStable = function(callback) { - $browser.notifyWhenNoOutstandingRequests(callback); - }; - - return testability; - }]; -} - -function $TimeoutProvider() { - this.$get = ['$rootScope', '$browser', '$q', '$$q', '$exceptionHandler', - function($rootScope, $browser, $q, $$q, $exceptionHandler) { - var deferreds = {}; - - - /** - * @ngdoc service - * @name $timeout - * - * @description - * Angular's wrapper for `window.setTimeout`. The `fn` function is wrapped into a try/catch - * block and delegates any exceptions to - * {@link ng.$exceptionHandler $exceptionHandler} service. - * - * The return value of registering a timeout function is a promise, which will be resolved when - * the timeout is reached and the timeout function is executed. - * - * To cancel a timeout request, call `$timeout.cancel(promise)`. - * - * In tests you can use {@link ngMock.$timeout `$timeout.flush()`} to - * synchronously flush the queue of deferred functions. - * - * @param {function()} fn A function, whose execution should be delayed. - * @param {number=} [delay=0] Delay in milliseconds. - * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise - * will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block. - * @returns {Promise} Promise that will be resolved when the timeout is reached. The value this - * promise will be resolved with is the return value of the `fn` function. - * - */ - function timeout(fn, delay, invokeApply) { - var skipApply = (isDefined(invokeApply) && !invokeApply), - deferred = (skipApply ? $$q : $q).defer(), - promise = deferred.promise, - timeoutId; - - timeoutId = $browser.defer(function() { - try { - deferred.resolve(fn()); - } catch (e) { - deferred.reject(e); - $exceptionHandler(e); - } - finally { - delete deferreds[promise.$$timeoutId]; - } - - if (!skipApply) $rootScope.$apply(); - }, delay); - - promise.$$timeoutId = timeoutId; - deferreds[timeoutId] = deferred; - - return promise; - } - - - /** - * @ngdoc method - * @name $timeout#cancel - * - * @description - * Cancels a task associated with the `promise`. As a result of this, the promise will be - * resolved with a rejection. - * - * @param {Promise=} promise Promise returned by the `$timeout` function. - * @returns {boolean} Returns `true` if the task hasn't executed yet and was successfully - * canceled. - */ - timeout.cancel = function(promise) { - if (promise && promise.$$timeoutId in deferreds) { - deferreds[promise.$$timeoutId].reject('canceled'); - delete deferreds[promise.$$timeoutId]; - return $browser.defer.cancel(promise.$$timeoutId); - } - return false; - }; - - return timeout; - }]; -} - -// NOTE: The usage of window and document instead of $window and $document here is -// deliberate. This service depends on the specific behavior of anchor nodes created by the -// browser (resolving and parsing URLs) that is unlikely to be provided by mock objects and -// cause us to break tests. In addition, when the browser resolves a URL for XHR, it -// doesn't know about mocked locations and resolves URLs to the real document - which is -// exactly the behavior needed here. There is little value is mocking these out for this -// service. -var urlParsingNode = document.createElement("a"); -var originUrl = urlResolve(window.location.href); - - -/** - * - * Implementation Notes for non-IE browsers - * ---------------------------------------- - * Assigning a URL to the href property of an anchor DOM node, even one attached to the DOM, - * results both in the normalizing and parsing of the URL. Normalizing means that a relative - * URL will be resolved into an absolute URL in the context of the application document. - * Parsing means that the anchor node's host, hostname, protocol, port, pathname and related - * properties are all populated to reflect the normalized URL. This approach has wide - * compatibility - Safari 1+, Mozilla 1+, Opera 7+,e etc. See - * http://www.aptana.com/reference/html/api/HTMLAnchorElement.html - * - * Implementation Notes for IE - * --------------------------- - * IE >= 8 and <= 10 normalizes the URL when assigned to the anchor node similar to the other - * browsers. However, the parsed components will not be set if the URL assigned did not specify - * them. (e.g. if you assign a.href = "foo", then a.protocol, a.host, etc. will be empty.) We - * work around that by performing the parsing in a 2nd step by taking a previously normalized - * URL (e.g. by assigning to a.href) and assigning it a.href again. This correctly populates the - * properties such as protocol, hostname, port, etc. - * - * IE7 does not normalize the URL when assigned to an anchor node. (Apparently, it does, if one - * uses the inner HTML approach to assign the URL as part of an HTML snippet - - * http://stackoverflow.com/a/472729) However, setting img[src] does normalize the URL. - * Unfortunately, setting img[src] to something like "javascript:foo" on IE throws an exception. - * Since the primary usage for normalizing URLs is to sanitize such URLs, we can't use that - * method and IE < 8 is unsupported. - * - * References: - * http://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement - * http://www.aptana.com/reference/html/api/HTMLAnchorElement.html - * http://url.spec.whatwg.org/#urlutils - * https://github.com/angular/angular.js/pull/2902 - * http://james.padolsey.com/javascript/parsing-urls-with-the-dom/ - * - * @kind function - * @param {string} url The URL to be parsed. - * @description Normalizes and parses a URL. - * @returns {object} Returns the normalized URL as a dictionary. - * - * | member name | Description | - * |---------------|----------------| - * | href | A normalized version of the provided URL if it was not an absolute URL | - * | protocol | The protocol including the trailing colon | - * | host | The host and port (if the port is non-default) of the normalizedUrl | - * | search | The search params, minus the question mark | - * | hash | The hash string, minus the hash symbol - * | hostname | The hostname - * | port | The port, without ":" - * | pathname | The pathname, beginning with "/" - * - */ -function urlResolve(url) { - var href = url; - - if (msie) { - // Normalize before parse. Refer Implementation Notes on why this is - // done in two steps on IE. - urlParsingNode.setAttribute("href", href); - href = urlParsingNode.href; - } - - urlParsingNode.setAttribute('href', href); - - // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils - return { - href: urlParsingNode.href, - protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '', - host: urlParsingNode.host, - search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '', - hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '', - hostname: urlParsingNode.hostname, - port: urlParsingNode.port, - pathname: (urlParsingNode.pathname.charAt(0) === '/') - ? urlParsingNode.pathname - : '/' + urlParsingNode.pathname - }; -} - -/** - * Parse a request URL and determine whether this is a same-origin request as the application document. - * - * @param {string|object} requestUrl The url of the request as a string that will be resolved - * or a parsed URL object. - * @returns {boolean} Whether the request is for the same origin as the application document. - */ -function urlIsSameOrigin(requestUrl) { - var parsed = (isString(requestUrl)) ? urlResolve(requestUrl) : requestUrl; - return (parsed.protocol === originUrl.protocol && - parsed.host === originUrl.host); -} - -/** - * @ngdoc service - * @name $window - * - * @description - * A reference to the browser's `window` object. While `window` - * is globally available in JavaScript, it causes testability problems, because - * it is a global variable. In angular we always refer to it through the - * `$window` service, so it may be overridden, removed or mocked for testing. - * - * Expressions, like the one defined for the `ngClick` directive in the example - * below, are evaluated with respect to the current scope. Therefore, there is - * no risk of inadvertently coding in a dependency on a global value in such an - * expression. - * - * @example - <example module="windowExample"> - <file name="index.html"> - <script> - angular.module('windowExample', []) - .controller('ExampleController', ['$scope', '$window', function($scope, $window) { - $scope.greeting = 'Hello, World!'; - $scope.doGreeting = function(greeting) { - $window.alert(greeting); - }; - }]); - </script> - <div ng-controller="ExampleController"> - <input type="text" ng-model="greeting" /> - <button ng-click="doGreeting(greeting)">ALERT</button> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should display the greeting in the input box', function() { - element(by.model('greeting')).sendKeys('Hello, E2E Tests'); - // If we click the button it will block the test runner - // element(':button').click(); - }); - </file> - </example> - */ -function $WindowProvider() { - this.$get = valueFn(window); -} - -/* global currencyFilter: true, - dateFilter: true, - filterFilter: true, - jsonFilter: true, - limitToFilter: true, - lowercaseFilter: true, - numberFilter: true, - orderByFilter: true, - uppercaseFilter: true, - */ - -/** - * @ngdoc provider - * @name $filterProvider - * @description - * - * Filters are just functions which transform input to an output. However filters need to be - * Dependency Injected. To achieve this a filter definition consists of a factory function which is - * annotated with dependencies and is responsible for creating a filter function. - * - * ```js - * // Filter registration - * function MyModule($provide, $filterProvider) { - * // create a service to demonstrate injection (not always needed) - * $provide.value('greet', function(name){ - * return 'Hello ' + name + '!'; - * }); - * - * // register a filter factory which uses the - * // greet service to demonstrate DI. - * $filterProvider.register('greet', function(greet){ - * // return the filter function which uses the greet service - * // to generate salutation - * return function(text) { - * // filters need to be forgiving so check input validity - * return text && greet(text) || text; - * }; - * }); - * } - * ``` - * - * The filter function is registered with the `$injector` under the filter name suffix with - * `Filter`. - * - * ```js - * it('should be the same instance', inject( - * function($filterProvider) { - * $filterProvider.register('reverse', function(){ - * return ...; - * }); - * }, - * function($filter, reverseFilter) { - * expect($filter('reverse')).toBe(reverseFilter); - * }); - * ``` - * - * - * For more information about how angular filters work, and how to create your own filters, see - * {@link guide/filter Filters} in the Angular Developer Guide. - */ - -/** - * @ngdoc service - * @name $filter - * @kind function - * @description - * Filters are used for formatting data displayed to the user. - * - * The general syntax in templates is as follows: - * - * {{ expression [| filter_name[:parameter_value] ... ] }} - * - * @param {String} name Name of the filter function to retrieve - * @return {Function} the filter function - * @example - <example name="$filter" module="filterExample"> - <file name="index.html"> - <div ng-controller="MainCtrl"> - <h3>{{ originalText }}</h3> - <h3>{{ filteredText }}</h3> - </div> - </file> - - <file name="script.js"> - angular.module('filterExample', []) - .controller('MainCtrl', function($scope, $filter) { - $scope.originalText = 'hello'; - $scope.filteredText = $filter('uppercase')($scope.originalText); - }); - </file> - </example> - */ -$FilterProvider.$inject = ['$provide']; -function $FilterProvider($provide) { - var suffix = 'Filter'; - - /** - * @ngdoc method - * @name $filterProvider#register - * @param {string|Object} name Name of the filter function, or an object map of filters where - * the keys are the filter names and the values are the filter factories. - * @returns {Object} Registered filter instance, or if a map of filters was provided then a map - * of the registered filter instances. - */ - function register(name, factory) { - if (isObject(name)) { - var filters = {}; - forEach(name, function(filter, key) { - filters[key] = register(key, filter); - }); - return filters; - } else { - return $provide.factory(name + suffix, factory); - } - } - this.register = register; - - this.$get = ['$injector', function($injector) { - return function(name) { - return $injector.get(name + suffix); - }; - }]; - - //////////////////////////////////////// - - /* global - currencyFilter: false, - dateFilter: false, - filterFilter: false, - jsonFilter: false, - limitToFilter: false, - lowercaseFilter: false, - numberFilter: false, - orderByFilter: false, - uppercaseFilter: false, - */ - - register('currency', currencyFilter); - register('date', dateFilter); - register('filter', filterFilter); - register('json', jsonFilter); - register('limitTo', limitToFilter); - register('lowercase', lowercaseFilter); - register('number', numberFilter); - register('orderBy', orderByFilter); - register('uppercase', uppercaseFilter); -} - -/** - * @ngdoc filter - * @name filter - * @kind function - * - * @description - * Selects a subset of items from `array` and returns it as a new array. - * - * @param {Array} array The source array. - * @param {string|Object|function()} expression The predicate to be used for selecting items from - * `array`. - * - * Can be one of: - * - * - `string`: The string is used for matching against the contents of the `array`. All strings or - * objects with string properties in `array` that match this string will be returned. This also - * applies to nested object properties. - * The predicate can be negated by prefixing the string with `!`. - * - * - `Object`: A pattern object can be used to filter specific properties on objects contained - * by `array`. For example `{name:"M", phone:"1"}` predicate will return an array of items - * which have property `name` containing "M" and property `phone` containing "1". A special - * property name `$` can be used (as in `{$:"text"}`) to accept a match against any - * property of the object or its nested object properties. That's equivalent to the simple - * substring match with a `string` as described above. The predicate can be negated by prefixing - * the string with `!`. - * For example `{name: "!M"}` predicate will return an array of items which have property `name` - * not containing "M". - * - * Note that a named property will match properties on the same level only, while the special - * `$` property will match properties on the same level or deeper. E.g. an array item like - * `{name: {first: 'John', last: 'Doe'}}` will **not** be matched by `{name: 'John'}`, but - * **will** be matched by `{$: 'John'}`. - * - * - `function(value, index)`: A predicate function can be used to write arbitrary filters. The - * function is called for each element of `array`. The final result is an array of those - * elements that the predicate returned true for. - * - * @param {function(actual, expected)|true|undefined} comparator Comparator which is used in - * determining if the expected value (from the filter expression) and actual value (from - * the object in the array) should be considered a match. - * - * Can be one of: - * - * - `function(actual, expected)`: - * The function will be given the object value and the predicate value to compare and - * should return true if both values should be considered equal. - * - * - `true`: A shorthand for `function(actual, expected) { return angular.equals(actual, expected)}`. - * This is essentially strict comparison of expected and actual. - * - * - `false|undefined`: A short hand for a function which will look for a substring match in case - * insensitive way. - * - * @example - <example> - <file name="index.html"> - <div ng-init="friends = [{name:'John', phone:'555-1276'}, - {name:'Mary', phone:'800-BIG-MARY'}, - {name:'Mike', phone:'555-4321'}, - {name:'Adam', phone:'555-5678'}, - {name:'Julie', phone:'555-8765'}, - {name:'Juliette', phone:'555-5678'}]"></div> - - Search: <input ng-model="searchText"> - <table id="searchTextResults"> - <tr><th>Name</th><th>Phone</th></tr> - <tr ng-repeat="friend in friends | filter:searchText"> - <td>{{friend.name}}</td> - <td>{{friend.phone}}</td> - </tr> - </table> - <hr> - Any: <input ng-model="search.$"> <br> - Name only <input ng-model="search.name"><br> - Phone only <input ng-model="search.phone"><br> - Equality <input type="checkbox" ng-model="strict"><br> - <table id="searchObjResults"> - <tr><th>Name</th><th>Phone</th></tr> - <tr ng-repeat="friendObj in friends | filter:search:strict"> - <td>{{friendObj.name}}</td> - <td>{{friendObj.phone}}</td> - </tr> - </table> - </file> - <file name="protractor.js" type="protractor"> - var expectFriendNames = function(expectedNames, key) { - element.all(by.repeater(key + ' in friends').column(key + '.name')).then(function(arr) { - arr.forEach(function(wd, i) { - expect(wd.getText()).toMatch(expectedNames[i]); - }); - }); - }; - - it('should search across all fields when filtering with a string', function() { - var searchText = element(by.model('searchText')); - searchText.clear(); - searchText.sendKeys('m'); - expectFriendNames(['Mary', 'Mike', 'Adam'], 'friend'); - - searchText.clear(); - searchText.sendKeys('76'); - expectFriendNames(['John', 'Julie'], 'friend'); - }); - - it('should search in specific fields when filtering with a predicate object', function() { - var searchAny = element(by.model('search.$')); - searchAny.clear(); - searchAny.sendKeys('i'); - expectFriendNames(['Mary', 'Mike', 'Julie', 'Juliette'], 'friendObj'); - }); - it('should use a equal comparison when comparator is true', function() { - var searchName = element(by.model('search.name')); - var strict = element(by.model('strict')); - searchName.clear(); - searchName.sendKeys('Julie'); - strict.click(); - expectFriendNames(['Julie'], 'friendObj'); - }); - </file> - </example> - */ -function filterFilter() { - return function(array, expression, comparator) { - if (!isArray(array)) return array; - - var predicateFn; - var matchAgainstAnyProp; - - switch (typeof expression) { - case 'function': - predicateFn = expression; - break; - case 'boolean': - case 'number': - case 'string': - matchAgainstAnyProp = true; - //jshint -W086 - case 'object': - //jshint +W086 - predicateFn = createPredicateFn(expression, comparator, matchAgainstAnyProp); - break; - default: - return array; - } - - return array.filter(predicateFn); - }; -} - -// Helper functions for `filterFilter` -function createPredicateFn(expression, comparator, matchAgainstAnyProp) { - var shouldMatchPrimitives = isObject(expression) && ('$' in expression); - var predicateFn; - - if (comparator === true) { - comparator = equals; - } else if (!isFunction(comparator)) { - comparator = function(actual, expected) { - if (isObject(actual) || isObject(expected)) { - // Prevent an object to be considered equal to a string like `'[object'` - return false; - } - - actual = lowercase('' + actual); - expected = lowercase('' + expected); - return actual.indexOf(expected) !== -1; - }; - } - - predicateFn = function(item) { - if (shouldMatchPrimitives && !isObject(item)) { - return deepCompare(item, expression.$, comparator, false); - } - return deepCompare(item, expression, comparator, matchAgainstAnyProp); - }; - - return predicateFn; -} - -function deepCompare(actual, expected, comparator, matchAgainstAnyProp, dontMatchWholeObject) { - var actualType = typeof actual; - var expectedType = typeof expected; - - if ((expectedType === 'string') && (expected.charAt(0) === '!')) { - return !deepCompare(actual, expected.substring(1), comparator, matchAgainstAnyProp); - } else if (isArray(actual)) { - // In case `actual` is an array, consider it a match - // if ANY of it's items matches `expected` - return actual.some(function(item) { - return deepCompare(item, expected, comparator, matchAgainstAnyProp); - }); - } - - switch (actualType) { - case 'object': - var key; - if (matchAgainstAnyProp) { - for (key in actual) { - if ((key.charAt(0) !== '$') && deepCompare(actual[key], expected, comparator, true)) { - return true; - } - } - return dontMatchWholeObject ? false : deepCompare(actual, expected, comparator, false); - } else if (expectedType === 'object') { - for (key in expected) { - var expectedVal = expected[key]; - if (isFunction(expectedVal)) { - continue; - } - - var matchAnyProperty = key === '$'; - var actualVal = matchAnyProperty ? actual : actual[key]; - if (!deepCompare(actualVal, expectedVal, comparator, matchAnyProperty, matchAnyProperty)) { - return false; - } - } - return true; - } else { - return comparator(actual, expected); - } - break; - case 'function': - return false; - default: - return comparator(actual, expected); - } -} - -/** - * @ngdoc filter - * @name currency - * @kind function - * - * @description - * Formats a number as a currency (ie $1,234.56). When no currency symbol is provided, default - * symbol for current locale is used. - * - * @param {number} amount Input to filter. - * @param {string=} symbol Currency symbol or identifier to be displayed. - * @param {number=} fractionSize Number of decimal places to round the amount to, defaults to default max fraction size for current locale - * @returns {string} Formatted number. - * - * - * @example - <example module="currencyExample"> - <file name="index.html"> - <script> - angular.module('currencyExample', []) - .controller('ExampleController', ['$scope', function($scope) { - $scope.amount = 1234.56; - }]); - </script> - <div ng-controller="ExampleController"> - <input type="number" ng-model="amount"> <br> - default currency symbol ($): <span id="currency-default">{{amount | currency}}</span><br> - custom currency identifier (USD$): <span id="currency-custom">{{amount | currency:"USD$"}}</span> - no fractions (0): <span id="currency-no-fractions">{{amount | currency:"USD$":0}}</span> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should init with 1234.56', function() { - expect(element(by.id('currency-default')).getText()).toBe('$1,234.56'); - expect(element(by.id('currency-custom')).getText()).toBe('USD$1,234.56'); - expect(element(by.id('currency-no-fractions')).getText()).toBe('USD$1,235'); - }); - it('should update', function() { - if (browser.params.browser == 'safari') { - // Safari does not understand the minus key. See - // https://github.com/angular/protractor/issues/481 - return; - } - element(by.model('amount')).clear(); - element(by.model('amount')).sendKeys('-1234'); - expect(element(by.id('currency-default')).getText()).toBe('($1,234.00)'); - expect(element(by.id('currency-custom')).getText()).toBe('(USD$1,234.00)'); - expect(element(by.id('currency-no-fractions')).getText()).toBe('(USD$1,234)'); - }); - </file> - </example> - */ -currencyFilter.$inject = ['$locale']; -function currencyFilter($locale) { - var formats = $locale.NUMBER_FORMATS; - return function(amount, currencySymbol, fractionSize) { - if (isUndefined(currencySymbol)) { - currencySymbol = formats.CURRENCY_SYM; - } - - if (isUndefined(fractionSize)) { - fractionSize = formats.PATTERNS[1].maxFrac; - } - - // if null or undefined pass it through - return (amount == null) - ? amount - : formatNumber(amount, formats.PATTERNS[1], formats.GROUP_SEP, formats.DECIMAL_SEP, fractionSize). - replace(/\u00A4/g, currencySymbol); - }; -} - -/** - * @ngdoc filter - * @name number - * @kind function - * - * @description - * Formats a number as text. - * - * If the input is not a number an empty string is returned. - * - * @param {number|string} number Number to format. - * @param {(number|string)=} fractionSize Number of decimal places to round the number to. - * If this is not provided then the fraction size is computed from the current locale's number - * formatting pattern. In the case of the default locale, it will be 3. - * @returns {string} Number rounded to decimalPlaces and places a “,†after each third digit. - * - * @example - <example module="numberFilterExample"> - <file name="index.html"> - <script> - angular.module('numberFilterExample', []) - .controller('ExampleController', ['$scope', function($scope) { - $scope.val = 1234.56789; - }]); - </script> - <div ng-controller="ExampleController"> - Enter number: <input ng-model='val'><br> - Default formatting: <span id='number-default'>{{val | number}}</span><br> - No fractions: <span>{{val | number:0}}</span><br> - Negative number: <span>{{-val | number:4}}</span> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should format numbers', function() { - expect(element(by.id('number-default')).getText()).toBe('1,234.568'); - expect(element(by.binding('val | number:0')).getText()).toBe('1,235'); - expect(element(by.binding('-val | number:4')).getText()).toBe('-1,234.5679'); - }); - - it('should update', function() { - element(by.model('val')).clear(); - element(by.model('val')).sendKeys('3374.333'); - expect(element(by.id('number-default')).getText()).toBe('3,374.333'); - expect(element(by.binding('val | number:0')).getText()).toBe('3,374'); - expect(element(by.binding('-val | number:4')).getText()).toBe('-3,374.3330'); - }); - </file> - </example> - */ - - -numberFilter.$inject = ['$locale']; -function numberFilter($locale) { - var formats = $locale.NUMBER_FORMATS; - return function(number, fractionSize) { - - // if null or undefined pass it through - return (number == null) - ? number - : formatNumber(number, formats.PATTERNS[0], formats.GROUP_SEP, formats.DECIMAL_SEP, - fractionSize); - }; -} - -var DECIMAL_SEP = '.'; -function formatNumber(number, pattern, groupSep, decimalSep, fractionSize) { - if (!isFinite(number) || isObject(number)) return ''; - - var isNegative = number < 0; - number = Math.abs(number); - var numStr = number + '', - formatedText = '', - parts = []; - - var hasExponent = false; - if (numStr.indexOf('e') !== -1) { - var match = numStr.match(/([\d\.]+)e(-?)(\d+)/); - if (match && match[2] == '-' && match[3] > fractionSize + 1) { - number = 0; - } else { - formatedText = numStr; - hasExponent = true; - } - } - - if (!hasExponent) { - var fractionLen = (numStr.split(DECIMAL_SEP)[1] || '').length; - - // determine fractionSize if it is not specified - if (isUndefined(fractionSize)) { - fractionSize = Math.min(Math.max(pattern.minFrac, fractionLen), pattern.maxFrac); - } - - // safely round numbers in JS without hitting imprecisions of floating-point arithmetics - // inspired by: - // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/round - number = +(Math.round(+(number.toString() + 'e' + fractionSize)).toString() + 'e' + -fractionSize); - - var fraction = ('' + number).split(DECIMAL_SEP); - var whole = fraction[0]; - fraction = fraction[1] || ''; - - var i, pos = 0, - lgroup = pattern.lgSize, - group = pattern.gSize; - - if (whole.length >= (lgroup + group)) { - pos = whole.length - lgroup; - for (i = 0; i < pos; i++) { - if ((pos - i) % group === 0 && i !== 0) { - formatedText += groupSep; - } - formatedText += whole.charAt(i); - } - } - - for (i = pos; i < whole.length; i++) { - if ((whole.length - i) % lgroup === 0 && i !== 0) { - formatedText += groupSep; - } - formatedText += whole.charAt(i); - } - - // format fraction part. - while (fraction.length < fractionSize) { - fraction += '0'; - } - - if (fractionSize && fractionSize !== "0") formatedText += decimalSep + fraction.substr(0, fractionSize); - } else { - if (fractionSize > 0 && number < 1) { - formatedText = number.toFixed(fractionSize); - number = parseFloat(formatedText); - } - } - - if (number === 0) { - isNegative = false; - } - - parts.push(isNegative ? pattern.negPre : pattern.posPre, - formatedText, - isNegative ? pattern.negSuf : pattern.posSuf); - return parts.join(''); -} - -function padNumber(num, digits, trim) { - var neg = ''; - if (num < 0) { - neg = '-'; - num = -num; - } - num = '' + num; - while (num.length < digits) num = '0' + num; - if (trim) - num = num.substr(num.length - digits); - return neg + num; -} - - -function dateGetter(name, size, offset, trim) { - offset = offset || 0; - return function(date) { - var value = date['get' + name](); - if (offset > 0 || value > -offset) - value += offset; - if (value === 0 && offset == -12) value = 12; - return padNumber(value, size, trim); - }; -} - -function dateStrGetter(name, shortForm) { - return function(date, formats) { - var value = date['get' + name](); - var get = uppercase(shortForm ? ('SHORT' + name) : name); - - return formats[get][value]; - }; -} - -function timeZoneGetter(date) { - var zone = -1 * date.getTimezoneOffset(); - var paddedZone = (zone >= 0) ? "+" : ""; - - paddedZone += padNumber(Math[zone > 0 ? 'floor' : 'ceil'](zone / 60), 2) + - padNumber(Math.abs(zone % 60), 2); - - return paddedZone; -} - -function getFirstThursdayOfYear(year) { - // 0 = index of January - var dayOfWeekOnFirst = (new Date(year, 0, 1)).getDay(); - // 4 = index of Thursday (+1 to account for 1st = 5) - // 11 = index of *next* Thursday (+1 account for 1st = 12) - return new Date(year, 0, ((dayOfWeekOnFirst <= 4) ? 5 : 12) - dayOfWeekOnFirst); -} - -function getThursdayThisWeek(datetime) { - return new Date(datetime.getFullYear(), datetime.getMonth(), - // 4 = index of Thursday - datetime.getDate() + (4 - datetime.getDay())); -} - -function weekGetter(size) { - return function(date) { - var firstThurs = getFirstThursdayOfYear(date.getFullYear()), - thisThurs = getThursdayThisWeek(date); - - var diff = +thisThurs - +firstThurs, - result = 1 + Math.round(diff / 6.048e8); // 6.048e8 ms per week - - return padNumber(result, size); - }; -} - -function ampmGetter(date, formats) { - return date.getHours() < 12 ? formats.AMPMS[0] : formats.AMPMS[1]; -} - -var DATE_FORMATS = { - yyyy: dateGetter('FullYear', 4), - yy: dateGetter('FullYear', 2, 0, true), - y: dateGetter('FullYear', 1), - MMMM: dateStrGetter('Month'), - MMM: dateStrGetter('Month', true), - MM: dateGetter('Month', 2, 1), - M: dateGetter('Month', 1, 1), - dd: dateGetter('Date', 2), - d: dateGetter('Date', 1), - HH: dateGetter('Hours', 2), - H: dateGetter('Hours', 1), - hh: dateGetter('Hours', 2, -12), - h: dateGetter('Hours', 1, -12), - mm: dateGetter('Minutes', 2), - m: dateGetter('Minutes', 1), - ss: dateGetter('Seconds', 2), - s: dateGetter('Seconds', 1), - // while ISO 8601 requires fractions to be prefixed with `.` or `,` - // we can be just safely rely on using `sss` since we currently don't support single or two digit fractions - sss: dateGetter('Milliseconds', 3), - EEEE: dateStrGetter('Day'), - EEE: dateStrGetter('Day', true), - a: ampmGetter, - Z: timeZoneGetter, - ww: weekGetter(2), - w: weekGetter(1) -}; - -var DATE_FORMATS_SPLIT = /((?:[^yMdHhmsaZEw']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z|w+))(.*)/, - NUMBER_STRING = /^\-?\d+$/; - -/** - * @ngdoc filter - * @name date - * @kind function - * - * @description - * Formats `date` to a string based on the requested `format`. - * - * `format` string can be composed of the following elements: - * - * * `'yyyy'`: 4 digit representation of year (e.g. AD 1 => 0001, AD 2010 => 2010) - * * `'yy'`: 2 digit representation of year, padded (00-99). (e.g. AD 2001 => 01, AD 2010 => 10) - * * `'y'`: 1 digit representation of year, e.g. (AD 1 => 1, AD 199 => 199) - * * `'MMMM'`: Month in year (January-December) - * * `'MMM'`: Month in year (Jan-Dec) - * * `'MM'`: Month in year, padded (01-12) - * * `'M'`: Month in year (1-12) - * * `'dd'`: Day in month, padded (01-31) - * * `'d'`: Day in month (1-31) - * * `'EEEE'`: Day in Week,(Sunday-Saturday) - * * `'EEE'`: Day in Week, (Sun-Sat) - * * `'HH'`: Hour in day, padded (00-23) - * * `'H'`: Hour in day (0-23) - * * `'hh'`: Hour in AM/PM, padded (01-12) - * * `'h'`: Hour in AM/PM, (1-12) - * * `'mm'`: Minute in hour, padded (00-59) - * * `'m'`: Minute in hour (0-59) - * * `'ss'`: Second in minute, padded (00-59) - * * `'s'`: Second in minute (0-59) - * * `'sss'`: Millisecond in second, padded (000-999) - * * `'a'`: AM/PM marker - * * `'Z'`: 4 digit (+sign) representation of the timezone offset (-1200-+1200) - * * `'ww'`: Week of year, padded (00-53). Week 01 is the week with the first Thursday of the year - * * `'w'`: Week of year (0-53). Week 1 is the week with the first Thursday of the year - * - * `format` string can also be one of the following predefined - * {@link guide/i18n localizable formats}: - * - * * `'medium'`: equivalent to `'MMM d, y h:mm:ss a'` for en_US locale - * (e.g. Sep 3, 2010 12:05:08 PM) - * * `'short'`: equivalent to `'M/d/yy h:mm a'` for en_US locale (e.g. 9/3/10 12:05 PM) - * * `'fullDate'`: equivalent to `'EEEE, MMMM d, y'` for en_US locale - * (e.g. Friday, September 3, 2010) - * * `'longDate'`: equivalent to `'MMMM d, y'` for en_US locale (e.g. September 3, 2010) - * * `'mediumDate'`: equivalent to `'MMM d, y'` for en_US locale (e.g. Sep 3, 2010) - * * `'shortDate'`: equivalent to `'M/d/yy'` for en_US locale (e.g. 9/3/10) - * * `'mediumTime'`: equivalent to `'h:mm:ss a'` for en_US locale (e.g. 12:05:08 PM) - * * `'shortTime'`: equivalent to `'h:mm a'` for en_US locale (e.g. 12:05 PM) - * - * `format` string can contain literal values. These need to be escaped by surrounding with single quotes (e.g. - * `"h 'in the morning'"`). In order to output a single quote, escape it - i.e., two single quotes in a sequence - * (e.g. `"h 'o''clock'"`). - * - * @param {(Date|number|string)} date Date to format either as Date object, milliseconds (string or - * number) or various ISO 8601 datetime string formats (e.g. yyyy-MM-ddTHH:mm:ss.sssZ and its - * shorter versions like yyyy-MM-ddTHH:mmZ, yyyy-MM-dd or yyyyMMddTHHmmssZ). If no timezone is - * specified in the string input, the time is considered to be in the local timezone. - * @param {string=} format Formatting rules (see Description). If not specified, - * `mediumDate` is used. - * @param {string=} timezone Timezone to be used for formatting. Right now, only `'UTC'` is supported. - * If not specified, the timezone of the browser will be used. - * @returns {string} Formatted string or the input if input is not recognized as date/millis. - * - * @example - <example> - <file name="index.html"> - <span ng-non-bindable>{{1288323623006 | date:'medium'}}</span>: - <span>{{1288323623006 | date:'medium'}}</span><br> - <span ng-non-bindable>{{1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'}}</span>: - <span>{{1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'}}</span><br> - <span ng-non-bindable>{{1288323623006 | date:'MM/dd/yyyy @ h:mma'}}</span>: - <span>{{'1288323623006' | date:'MM/dd/yyyy @ h:mma'}}</span><br> - <span ng-non-bindable>{{1288323623006 | date:"MM/dd/yyyy 'at' h:mma"}}</span>: - <span>{{'1288323623006' | date:"MM/dd/yyyy 'at' h:mma"}}</span><br> - </file> - <file name="protractor.js" type="protractor"> - it('should format date', function() { - expect(element(by.binding("1288323623006 | date:'medium'")).getText()). - toMatch(/Oct 2\d, 2010 \d{1,2}:\d{2}:\d{2} (AM|PM)/); - expect(element(by.binding("1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'")).getText()). - toMatch(/2010\-10\-2\d \d{2}:\d{2}:\d{2} (\-|\+)?\d{4}/); - expect(element(by.binding("'1288323623006' | date:'MM/dd/yyyy @ h:mma'")).getText()). - toMatch(/10\/2\d\/2010 @ \d{1,2}:\d{2}(AM|PM)/); - expect(element(by.binding("'1288323623006' | date:\"MM/dd/yyyy 'at' h:mma\"")).getText()). - toMatch(/10\/2\d\/2010 at \d{1,2}:\d{2}(AM|PM)/); - }); - </file> - </example> - */ -dateFilter.$inject = ['$locale']; -function dateFilter($locale) { - - - var R_ISO8601_STR = /^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/; - // 1 2 3 4 5 6 7 8 9 10 11 - function jsonStringToDate(string) { - var match; - if (match = string.match(R_ISO8601_STR)) { - var date = new Date(0), - tzHour = 0, - tzMin = 0, - dateSetter = match[8] ? date.setUTCFullYear : date.setFullYear, - timeSetter = match[8] ? date.setUTCHours : date.setHours; - - if (match[9]) { - tzHour = int(match[9] + match[10]); - tzMin = int(match[9] + match[11]); - } - dateSetter.call(date, int(match[1]), int(match[2]) - 1, int(match[3])); - var h = int(match[4] || 0) - tzHour; - var m = int(match[5] || 0) - tzMin; - var s = int(match[6] || 0); - var ms = Math.round(parseFloat('0.' + (match[7] || 0)) * 1000); - timeSetter.call(date, h, m, s, ms); - return date; - } - return string; - } - - - return function(date, format, timezone) { - var text = '', - parts = [], - fn, match; - - format = format || 'mediumDate'; - format = $locale.DATETIME_FORMATS[format] || format; - if (isString(date)) { - date = NUMBER_STRING.test(date) ? int(date) : jsonStringToDate(date); - } - - if (isNumber(date)) { - date = new Date(date); - } - - if (!isDate(date)) { - return date; - } - - while (format) { - match = DATE_FORMATS_SPLIT.exec(format); - if (match) { - parts = concat(parts, match, 1); - format = parts.pop(); - } else { - parts.push(format); - format = null; - } - } - - if (timezone && timezone === 'UTC') { - date = new Date(date.getTime()); - date.setMinutes(date.getMinutes() + date.getTimezoneOffset()); - } - forEach(parts, function(value) { - fn = DATE_FORMATS[value]; - text += fn ? fn(date, $locale.DATETIME_FORMATS) - : value.replace(/(^'|'$)/g, '').replace(/''/g, "'"); - }); - - return text; - }; -} - - -/** - * @ngdoc filter - * @name json - * @kind function - * - * @description - * Allows you to convert a JavaScript object into JSON string. - * - * This filter is mostly useful for debugging. When using the double curly {{value}} notation - * the binding is automatically converted to JSON. - * - * @param {*} object Any JavaScript object (including arrays and primitive types) to filter. - * @param {number=} spacing The number of spaces to use per indentation, defaults to 2. - * @returns {string} JSON string. - * - * - * @example - <example> - <file name="index.html"> - <pre id="default-spacing">{{ {'name':'value'} | json }}</pre> - <pre id="custom-spacing">{{ {'name':'value'} | json:4 }}</pre> - </file> - <file name="protractor.js" type="protractor"> - it('should jsonify filtered objects', function() { - expect(element(by.id('default-spacing')).getText()).toMatch(/\{\n "name": ?"value"\n}/); - expect(element(by.id('custom-spacing')).getText()).toMatch(/\{\n "name": ?"value"\n}/); - }); - </file> - </example> - * - */ -function jsonFilter() { - return function(object, spacing) { - if (isUndefined(spacing)) { - spacing = 2; - } - return toJson(object, spacing); - }; -} - - -/** - * @ngdoc filter - * @name lowercase - * @kind function - * @description - * Converts string to lowercase. - * @see angular.lowercase - */ -var lowercaseFilter = valueFn(lowercase); - - -/** - * @ngdoc filter - * @name uppercase - * @kind function - * @description - * Converts string to uppercase. - * @see angular.uppercase - */ -var uppercaseFilter = valueFn(uppercase); - -/** - * @ngdoc filter - * @name limitTo - * @kind function - * - * @description - * Creates a new array or string containing only a specified number of elements. The elements - * are taken from either the beginning or the end of the source array, string or number, as specified by - * the value and sign (positive or negative) of `limit`. If a number is used as input, it is - * converted to a string. - * - * @param {Array|string|number} input Source array, string or number to be limited. - * @param {string|number} limit The length of the returned array or string. If the `limit` number - * is positive, `limit` number of items from the beginning of the source array/string are copied. - * If the number is negative, `limit` number of items from the end of the source array/string - * are copied. The `limit` will be trimmed if it exceeds `array.length` - * @returns {Array|string} A new sub-array or substring of length `limit` or less if input array - * had less than `limit` elements. - * - * @example - <example module="limitToExample"> - <file name="index.html"> - <script> - angular.module('limitToExample', []) - .controller('ExampleController', ['$scope', function($scope) { - $scope.numbers = [1,2,3,4,5,6,7,8,9]; - $scope.letters = "abcdefghi"; - $scope.longNumber = 2345432342; - $scope.numLimit = 3; - $scope.letterLimit = 3; - $scope.longNumberLimit = 3; - }]); - </script> - <div ng-controller="ExampleController"> - Limit {{numbers}} to: <input type="number" step="1" ng-model="numLimit"> - <p>Output numbers: {{ numbers | limitTo:numLimit }}</p> - Limit {{letters}} to: <input type="number" step="1" ng-model="letterLimit"> - <p>Output letters: {{ letters | limitTo:letterLimit }}</p> - Limit {{longNumber}} to: <input type="number" step="1" ng-model="longNumberLimit"> - <p>Output long number: {{ longNumber | limitTo:longNumberLimit }}</p> - </div> - </file> - <file name="protractor.js" type="protractor"> - var numLimitInput = element(by.model('numLimit')); - var letterLimitInput = element(by.model('letterLimit')); - var longNumberLimitInput = element(by.model('longNumberLimit')); - var limitedNumbers = element(by.binding('numbers | limitTo:numLimit')); - var limitedLetters = element(by.binding('letters | limitTo:letterLimit')); - var limitedLongNumber = element(by.binding('longNumber | limitTo:longNumberLimit')); - - it('should limit the number array to first three items', function() { - expect(numLimitInput.getAttribute('value')).toBe('3'); - expect(letterLimitInput.getAttribute('value')).toBe('3'); - expect(longNumberLimitInput.getAttribute('value')).toBe('3'); - expect(limitedNumbers.getText()).toEqual('Output numbers: [1,2,3]'); - expect(limitedLetters.getText()).toEqual('Output letters: abc'); - expect(limitedLongNumber.getText()).toEqual('Output long number: 234'); - }); - - // There is a bug in safari and protractor that doesn't like the minus key - // it('should update the output when -3 is entered', function() { - // numLimitInput.clear(); - // numLimitInput.sendKeys('-3'); - // letterLimitInput.clear(); - // letterLimitInput.sendKeys('-3'); - // longNumberLimitInput.clear(); - // longNumberLimitInput.sendKeys('-3'); - // expect(limitedNumbers.getText()).toEqual('Output numbers: [7,8,9]'); - // expect(limitedLetters.getText()).toEqual('Output letters: ghi'); - // expect(limitedLongNumber.getText()).toEqual('Output long number: 342'); - // }); - - it('should not exceed the maximum size of input array', function() { - numLimitInput.clear(); - numLimitInput.sendKeys('100'); - letterLimitInput.clear(); - letterLimitInput.sendKeys('100'); - longNumberLimitInput.clear(); - longNumberLimitInput.sendKeys('100'); - expect(limitedNumbers.getText()).toEqual('Output numbers: [1,2,3,4,5,6,7,8,9]'); - expect(limitedLetters.getText()).toEqual('Output letters: abcdefghi'); - expect(limitedLongNumber.getText()).toEqual('Output long number: 2345432342'); - }); - </file> - </example> -*/ -function limitToFilter() { - return function(input, limit) { - if (isNumber(input)) input = input.toString(); - if (!isArray(input) && !isString(input)) return input; - - if (Math.abs(Number(limit)) === Infinity) { - limit = Number(limit); - } else { - limit = int(limit); - } - - //NaN check on limit - if (limit) { - return limit > 0 ? input.slice(0, limit) : input.slice(limit); - } else { - return isString(input) ? "" : []; - } - }; -} - -/** - * @ngdoc filter - * @name orderBy - * @kind function - * - * @description - * Orders a specified `array` by the `expression` predicate. It is ordered alphabetically - * for strings and numerically for numbers. Note: if you notice numbers are not being sorted - * correctly, make sure they are actually being saved as numbers and not strings. - * - * @param {Array} array The array to sort. - * @param {function(*)|string|Array.<(function(*)|string)>=} expression A predicate to be - * used by the comparator to determine the order of elements. - * - * Can be one of: - * - * - `function`: Getter function. The result of this function will be sorted using the - * `<`, `=`, `>` operator. - * - `string`: An Angular expression. The result of this expression is used to compare elements - * (for example `name` to sort by a property called `name` or `name.substr(0, 3)` to sort by - * 3 first characters of a property called `name`). The result of a constant expression - * is interpreted as a property name to be used in comparisons (for example `"special name"` - * to sort object by the value of their `special name` property). An expression can be - * optionally prefixed with `+` or `-` to control ascending or descending sort order - * (for example, `+name` or `-name`). If no property is provided, (e.g. `'+'`) then the array - * element itself is used to compare where sorting. - * - `Array`: An array of function or string predicates. The first predicate in the array - * is used for sorting, but when two items are equivalent, the next predicate is used. - * - * If the predicate is missing or empty then it defaults to `'+'`. - * - * @param {boolean=} reverse Reverse the order of the array. - * @returns {Array} Sorted copy of the source array. - * - * @example - <example module="orderByExample"> - <file name="index.html"> - <script> - angular.module('orderByExample', []) - .controller('ExampleController', ['$scope', function($scope) { - $scope.friends = - [{name:'John', phone:'555-1212', age:10}, - {name:'Mary', phone:'555-9876', age:19}, - {name:'Mike', phone:'555-4321', age:21}, - {name:'Adam', phone:'555-5678', age:35}, - {name:'Julie', phone:'555-8765', age:29}]; - $scope.predicate = '-age'; - }]); - </script> - <div ng-controller="ExampleController"> - <pre>Sorting predicate = {{predicate}}; reverse = {{reverse}}</pre> - <hr/> - [ <a href="" ng-click="predicate=''">unsorted</a> ] - <table class="friend"> - <tr> - <th><a href="" ng-click="predicate = 'name'; reverse=false">Name</a> - (<a href="" ng-click="predicate = '-name'; reverse=false">^</a>)</th> - <th><a href="" ng-click="predicate = 'phone'; reverse=!reverse">Phone Number</a></th> - <th><a href="" ng-click="predicate = 'age'; reverse=!reverse">Age</a></th> - </tr> - <tr ng-repeat="friend in friends | orderBy:predicate:reverse"> - <td>{{friend.name}}</td> - <td>{{friend.phone}}</td> - <td>{{friend.age}}</td> - </tr> - </table> - </div> - </file> - </example> - * - * It's also possible to call the orderBy filter manually, by injecting `$filter`, retrieving the - * filter routine with `$filter('orderBy')`, and calling the returned filter routine with the - * desired parameters. - * - * Example: - * - * @example - <example module="orderByExample"> - <file name="index.html"> - <div ng-controller="ExampleController"> - <table class="friend"> - <tr> - <th><a href="" ng-click="reverse=false;order('name', false)">Name</a> - (<a href="" ng-click="order('-name',false)">^</a>)</th> - <th><a href="" ng-click="reverse=!reverse;order('phone', reverse)">Phone Number</a></th> - <th><a href="" ng-click="reverse=!reverse;order('age',reverse)">Age</a></th> - </tr> - <tr ng-repeat="friend in friends"> - <td>{{friend.name}}</td> - <td>{{friend.phone}}</td> - <td>{{friend.age}}</td> - </tr> - </table> - </div> - </file> - - <file name="script.js"> - angular.module('orderByExample', []) - .controller('ExampleController', ['$scope', '$filter', function($scope, $filter) { - var orderBy = $filter('orderBy'); - $scope.friends = [ - { name: 'John', phone: '555-1212', age: 10 }, - { name: 'Mary', phone: '555-9876', age: 19 }, - { name: 'Mike', phone: '555-4321', age: 21 }, - { name: 'Adam', phone: '555-5678', age: 35 }, - { name: 'Julie', phone: '555-8765', age: 29 } - ]; - $scope.order = function(predicate, reverse) { - $scope.friends = orderBy($scope.friends, predicate, reverse); - }; - $scope.order('-age',false); - }]); - </file> -</example> - */ -orderByFilter.$inject = ['$parse']; -function orderByFilter($parse) { - return function(array, sortPredicate, reverseOrder) { - if (!(isArrayLike(array))) return array; - sortPredicate = isArray(sortPredicate) ? sortPredicate : [sortPredicate]; - if (sortPredicate.length === 0) { sortPredicate = ['+']; } - sortPredicate = sortPredicate.map(function(predicate) { - var descending = false, get = predicate || identity; - if (isString(predicate)) { - if ((predicate.charAt(0) == '+' || predicate.charAt(0) == '-')) { - descending = predicate.charAt(0) == '-'; - predicate = predicate.substring(1); - } - if (predicate === '') { - // Effectively no predicate was passed so we compare identity - return reverseComparator(compare, descending); - } - get = $parse(predicate); - if (get.constant) { - var key = get(); - return reverseComparator(function(a, b) { - return compare(a[key], b[key]); - }, descending); - } - } - return reverseComparator(function(a, b) { - return compare(get(a),get(b)); - }, descending); - }); - return slice.call(array).sort(reverseComparator(comparator, reverseOrder)); - - function comparator(o1, o2) { - for (var i = 0; i < sortPredicate.length; i++) { - var comp = sortPredicate[i](o1, o2); - if (comp !== 0) return comp; - } - return 0; - } - function reverseComparator(comp, descending) { - return descending - ? function(a, b) {return comp(b,a);} - : comp; - } - - function isPrimitive(value) { - switch (typeof value) { - case 'number': /* falls through */ - case 'boolean': /* falls through */ - case 'string': - return true; - default: - return false; - } - } - - function objectToString(value) { - if (value === null) return 'null'; - if (typeof value.valueOf === 'function') { - value = value.valueOf(); - if (isPrimitive(value)) return value; - } - if (typeof value.toString === 'function') { - value = value.toString(); - if (isPrimitive(value)) return value; - } - return ''; - } - - function compare(v1, v2) { - var t1 = typeof v1; - var t2 = typeof v2; - if (t1 === t2 && t1 === "object") { - v1 = objectToString(v1); - v2 = objectToString(v2); - } - if (t1 === t2) { - if (t1 === "string") { - v1 = v1.toLowerCase(); - v2 = v2.toLowerCase(); - } - if (v1 === v2) return 0; - return v1 < v2 ? -1 : 1; - } else { - return t1 < t2 ? -1 : 1; - } - } - }; -} - -function ngDirective(directive) { - if (isFunction(directive)) { - directive = { - link: directive - }; - } - directive.restrict = directive.restrict || 'AC'; - return valueFn(directive); -} - -/** - * @ngdoc directive - * @name a - * @restrict E - * - * @description - * Modifies the default behavior of the html A tag so that the default action is prevented when - * the href attribute is empty. - * - * This change permits the easy creation of action links with the `ngClick` directive - * without changing the location or causing page reloads, e.g.: - * `<a href="" ng-click="list.addItem()">Add Item</a>` - */ -var htmlAnchorDirective = valueFn({ - restrict: 'E', - compile: function(element, attr) { - if (!attr.href && !attr.xlinkHref && !attr.name) { - return function(scope, element) { - // If the linked element is not an anchor tag anymore, do nothing - if (element[0].nodeName.toLowerCase() !== 'a') return; - - // SVGAElement does not use the href attribute, but rather the 'xlinkHref' attribute. - var href = toString.call(element.prop('href')) === '[object SVGAnimatedString]' ? - 'xlink:href' : 'href'; - element.on('click', function(event) { - // if we have no href url, then don't navigate anywhere. - if (!element.attr(href)) { - event.preventDefault(); - } - }); - }; - } - } -}); - -/** - * @ngdoc directive - * @name ngHref - * @restrict A - * @priority 99 - * - * @description - * Using Angular markup like `{{hash}}` in an href attribute will - * make the link go to the wrong URL if the user clicks it before - * Angular has a chance to replace the `{{hash}}` markup with its - * value. Until Angular replaces the markup the link will be broken - * and will most likely return a 404 error. The `ngHref` directive - * solves this problem. - * - * The wrong way to write it: - * ```html - * <a href="http://www.gravatar.com/avatar/{{hash}}">link1</a> - * ``` - * - * The correct way to write it: - * ```html - * <a ng-href="http://www.gravatar.com/avatar/{{hash}}">link1</a> - * ``` - * - * @element A - * @param {template} ngHref any string which can contain `{{}}` markup. - * - * @example - * This example shows various combinations of `href`, `ng-href` and `ng-click` attributes - * in links and their different behaviors: - <example> - <file name="index.html"> - <input ng-model="value" /><br /> - <a id="link-1" href ng-click="value = 1">link 1</a> (link, don't reload)<br /> - <a id="link-2" href="" ng-click="value = 2">link 2</a> (link, don't reload)<br /> - <a id="link-3" ng-href="/{{'123'}}">link 3</a> (link, reload!)<br /> - <a id="link-4" href="" name="xx" ng-click="value = 4">anchor</a> (link, don't reload)<br /> - <a id="link-5" name="xxx" ng-click="value = 5">anchor</a> (no link)<br /> - <a id="link-6" ng-href="{{value}}">link</a> (link, change location) - </file> - <file name="protractor.js" type="protractor"> - it('should execute ng-click but not reload when href without value', function() { - element(by.id('link-1')).click(); - expect(element(by.model('value')).getAttribute('value')).toEqual('1'); - expect(element(by.id('link-1')).getAttribute('href')).toBe(''); - }); - - it('should execute ng-click but not reload when href empty string', function() { - element(by.id('link-2')).click(); - expect(element(by.model('value')).getAttribute('value')).toEqual('2'); - expect(element(by.id('link-2')).getAttribute('href')).toBe(''); - }); - - it('should execute ng-click and change url when ng-href specified', function() { - expect(element(by.id('link-3')).getAttribute('href')).toMatch(/\/123$/); - - element(by.id('link-3')).click(); - - // At this point, we navigate away from an Angular page, so we need - // to use browser.driver to get the base webdriver. - - browser.wait(function() { - return browser.driver.getCurrentUrl().then(function(url) { - return url.match(/\/123$/); - }); - }, 5000, 'page should navigate to /123'); - }); - - xit('should execute ng-click but not reload when href empty string and name specified', function() { - element(by.id('link-4')).click(); - expect(element(by.model('value')).getAttribute('value')).toEqual('4'); - expect(element(by.id('link-4')).getAttribute('href')).toBe(''); - }); - - it('should execute ng-click but not reload when no href but name specified', function() { - element(by.id('link-5')).click(); - expect(element(by.model('value')).getAttribute('value')).toEqual('5'); - expect(element(by.id('link-5')).getAttribute('href')).toBe(null); - }); - - it('should only change url when only ng-href', function() { - element(by.model('value')).clear(); - element(by.model('value')).sendKeys('6'); - expect(element(by.id('link-6')).getAttribute('href')).toMatch(/\/6$/); - - element(by.id('link-6')).click(); - - // At this point, we navigate away from an Angular page, so we need - // to use browser.driver to get the base webdriver. - browser.wait(function() { - return browser.driver.getCurrentUrl().then(function(url) { - return url.match(/\/6$/); - }); - }, 5000, 'page should navigate to /6'); - }); - </file> - </example> - */ - -/** - * @ngdoc directive - * @name ngSrc - * @restrict A - * @priority 99 - * - * @description - * Using Angular markup like `{{hash}}` in a `src` attribute doesn't - * work right: The browser will fetch from the URL with the literal - * text `{{hash}}` until Angular replaces the expression inside - * `{{hash}}`. The `ngSrc` directive solves this problem. - * - * The buggy way to write it: - * ```html - * <img src="http://www.gravatar.com/avatar/{{hash}}"/> - * ``` - * - * The correct way to write it: - * ```html - * <img ng-src="http://www.gravatar.com/avatar/{{hash}}"/> - * ``` - * - * @element IMG - * @param {template} ngSrc any string which can contain `{{}}` markup. - */ - -/** - * @ngdoc directive - * @name ngSrcset - * @restrict A - * @priority 99 - * - * @description - * Using Angular markup like `{{hash}}` in a `srcset` attribute doesn't - * work right: The browser will fetch from the URL with the literal - * text `{{hash}}` until Angular replaces the expression inside - * `{{hash}}`. The `ngSrcset` directive solves this problem. - * - * The buggy way to write it: - * ```html - * <img srcset="http://www.gravatar.com/avatar/{{hash}} 2x"/> - * ``` - * - * The correct way to write it: - * ```html - * <img ng-srcset="http://www.gravatar.com/avatar/{{hash}} 2x"/> - * ``` - * - * @element IMG - * @param {template} ngSrcset any string which can contain `{{}}` markup. - */ - -/** - * @ngdoc directive - * @name ngDisabled - * @restrict A - * @priority 100 - * - * @description - * - * We shouldn't do this, because it will make the button enabled on Chrome/Firefox but not on IE8 and older IEs: - * ```html - * <div ng-init="scope = { isDisabled: false }"> - * <button disabled="{{scope.isDisabled}}">Disabled</button> - * </div> - * ``` - * - * The HTML specification does not require browsers to preserve the values of boolean attributes - * such as disabled. (Their presence means true and their absence means false.) - * If we put an Angular interpolation expression into such an attribute then the - * binding information would be lost when the browser removes the attribute. - * The `ngDisabled` directive solves this problem for the `disabled` attribute. - * This complementary directive is not removed by the browser and so provides - * a permanent reliable place to store the binding information. - * - * @example - <example> - <file name="index.html"> - Click me to toggle: <input type="checkbox" ng-model="checked"><br/> - <button ng-model="button" ng-disabled="checked">Button</button> - </file> - <file name="protractor.js" type="protractor"> - it('should toggle button', function() { - expect(element(by.css('button')).getAttribute('disabled')).toBeFalsy(); - element(by.model('checked')).click(); - expect(element(by.css('button')).getAttribute('disabled')).toBeTruthy(); - }); - </file> - </example> - * - * @element INPUT - * @param {expression} ngDisabled If the {@link guide/expression expression} is truthy, - * then special attribute "disabled" will be set on the element - */ - - -/** - * @ngdoc directive - * @name ngChecked - * @restrict A - * @priority 100 - * - * @description - * The HTML specification does not require browsers to preserve the values of boolean attributes - * such as checked. (Their presence means true and their absence means false.) - * If we put an Angular interpolation expression into such an attribute then the - * binding information would be lost when the browser removes the attribute. - * The `ngChecked` directive solves this problem for the `checked` attribute. - * This complementary directive is not removed by the browser and so provides - * a permanent reliable place to store the binding information. - * @example - <example> - <file name="index.html"> - Check me to check both: <input type="checkbox" ng-model="master"><br/> - <input id="checkSlave" type="checkbox" ng-checked="master"> - </file> - <file name="protractor.js" type="protractor"> - it('should check both checkBoxes', function() { - expect(element(by.id('checkSlave')).getAttribute('checked')).toBeFalsy(); - element(by.model('master')).click(); - expect(element(by.id('checkSlave')).getAttribute('checked')).toBeTruthy(); - }); - </file> - </example> - * - * @element INPUT - * @param {expression} ngChecked If the {@link guide/expression expression} is truthy, - * then special attribute "checked" will be set on the element - */ - - -/** - * @ngdoc directive - * @name ngReadonly - * @restrict A - * @priority 100 - * - * @description - * The HTML specification does not require browsers to preserve the values of boolean attributes - * such as readonly. (Their presence means true and their absence means false.) - * If we put an Angular interpolation expression into such an attribute then the - * binding information would be lost when the browser removes the attribute. - * The `ngReadonly` directive solves this problem for the `readonly` attribute. - * This complementary directive is not removed by the browser and so provides - * a permanent reliable place to store the binding information. - * @example - <example> - <file name="index.html"> - Check me to make text readonly: <input type="checkbox" ng-model="checked"><br/> - <input type="text" ng-readonly="checked" value="I'm Angular"/> - </file> - <file name="protractor.js" type="protractor"> - it('should toggle readonly attr', function() { - expect(element(by.css('[type="text"]')).getAttribute('readonly')).toBeFalsy(); - element(by.model('checked')).click(); - expect(element(by.css('[type="text"]')).getAttribute('readonly')).toBeTruthy(); - }); - </file> - </example> - * - * @element INPUT - * @param {expression} ngReadonly If the {@link guide/expression expression} is truthy, - * then special attribute "readonly" will be set on the element - */ - - -/** - * @ngdoc directive - * @name ngSelected - * @restrict A - * @priority 100 - * - * @description - * The HTML specification does not require browsers to preserve the values of boolean attributes - * such as selected. (Their presence means true and their absence means false.) - * If we put an Angular interpolation expression into such an attribute then the - * binding information would be lost when the browser removes the attribute. - * The `ngSelected` directive solves this problem for the `selected` attribute. - * This complementary directive is not removed by the browser and so provides - * a permanent reliable place to store the binding information. - * - * @example - <example> - <file name="index.html"> - Check me to select: <input type="checkbox" ng-model="selected"><br/> - <select> - <option>Hello!</option> - <option id="greet" ng-selected="selected">Greetings!</option> - </select> - </file> - <file name="protractor.js" type="protractor"> - it('should select Greetings!', function() { - expect(element(by.id('greet')).getAttribute('selected')).toBeFalsy(); - element(by.model('selected')).click(); - expect(element(by.id('greet')).getAttribute('selected')).toBeTruthy(); - }); - </file> - </example> - * - * @element OPTION - * @param {expression} ngSelected If the {@link guide/expression expression} is truthy, - * then special attribute "selected" will be set on the element - */ - -/** - * @ngdoc directive - * @name ngOpen - * @restrict A - * @priority 100 - * - * @description - * The HTML specification does not require browsers to preserve the values of boolean attributes - * such as open. (Their presence means true and their absence means false.) - * If we put an Angular interpolation expression into such an attribute then the - * binding information would be lost when the browser removes the attribute. - * The `ngOpen` directive solves this problem for the `open` attribute. - * This complementary directive is not removed by the browser and so provides - * a permanent reliable place to store the binding information. - * @example - <example> - <file name="index.html"> - Check me check multiple: <input type="checkbox" ng-model="open"><br/> - <details id="details" ng-open="open"> - <summary>Show/Hide me</summary> - </details> - </file> - <file name="protractor.js" type="protractor"> - it('should toggle open', function() { - expect(element(by.id('details')).getAttribute('open')).toBeFalsy(); - element(by.model('open')).click(); - expect(element(by.id('details')).getAttribute('open')).toBeTruthy(); - }); - </file> - </example> - * - * @element DETAILS - * @param {expression} ngOpen If the {@link guide/expression expression} is truthy, - * then special attribute "open" will be set on the element - */ - -var ngAttributeAliasDirectives = {}; - - -// boolean attrs are evaluated -forEach(BOOLEAN_ATTR, function(propName, attrName) { - // binding to multiple is not supported - if (propName == "multiple") return; - - var normalized = directiveNormalize('ng-' + attrName); - ngAttributeAliasDirectives[normalized] = function() { - return { - restrict: 'A', - priority: 100, - link: function(scope, element, attr) { - scope.$watch(attr[normalized], function ngBooleanAttrWatchAction(value) { - attr.$set(attrName, !!value); - }); - } - }; - }; -}); - -// aliased input attrs are evaluated -forEach(ALIASED_ATTR, function(htmlAttr, ngAttr) { - ngAttributeAliasDirectives[ngAttr] = function() { - return { - priority: 100, - link: function(scope, element, attr) { - //special case ngPattern when a literal regular expression value - //is used as the expression (this way we don't have to watch anything). - if (ngAttr === "ngPattern" && attr.ngPattern.charAt(0) == "/") { - var match = attr.ngPattern.match(REGEX_STRING_REGEXP); - if (match) { - attr.$set("ngPattern", new RegExp(match[1], match[2])); - return; - } - } - - scope.$watch(attr[ngAttr], function ngAttrAliasWatchAction(value) { - attr.$set(ngAttr, value); - }); - } - }; - }; -}); - -// ng-src, ng-srcset, ng-href are interpolated -forEach(['src', 'srcset', 'href'], function(attrName) { - var normalized = directiveNormalize('ng-' + attrName); - ngAttributeAliasDirectives[normalized] = function() { - return { - priority: 99, // it needs to run after the attributes are interpolated - link: function(scope, element, attr) { - var propName = attrName, - name = attrName; - - if (attrName === 'href' && - toString.call(element.prop('href')) === '[object SVGAnimatedString]') { - name = 'xlinkHref'; - attr.$attr[name] = 'xlink:href'; - propName = null; - } - - attr.$observe(normalized, function(value) { - if (!value) { - if (attrName === 'href') { - attr.$set(name, null); - } - return; - } - - attr.$set(name, value); - - // on IE, if "ng:src" directive declaration is used and "src" attribute doesn't exist - // then calling element.setAttribute('src', 'foo') doesn't do anything, so we need - // to set the property as well to achieve the desired effect. - // we use attr[attrName] value since $set can sanitize the url. - if (msie && propName) element.prop(propName, attr[name]); - }); - } - }; - }; -}); - -/* global -nullFormCtrl, -SUBMITTED_CLASS, addSetValidityMethod: true - */ -var nullFormCtrl = { - $addControl: noop, - $$renameControl: nullFormRenameControl, - $removeControl: noop, - $setValidity: noop, - $setDirty: noop, - $setPristine: noop, - $setSubmitted: noop -}, -SUBMITTED_CLASS = 'ng-submitted'; - -function nullFormRenameControl(control, name) { - control.$name = name; -} - -/** - * @ngdoc type - * @name form.FormController - * - * @property {boolean} $pristine True if user has not interacted with the form yet. - * @property {boolean} $dirty True if user has already interacted with the form. - * @property {boolean} $valid True if all of the containing forms and controls are valid. - * @property {boolean} $invalid True if at least one containing control or form is invalid. - * @property {boolean} $submitted True if user has submitted the form even if its invalid. - * - * @property {Object} $error Is an object hash, containing references to controls or - * forms with failing validators, where: - * - * - keys are validation tokens (error names), - * - values are arrays of controls or forms that have a failing validator for given error name. - * - * Built-in validation tokens: - * - * - `email` - * - `max` - * - `maxlength` - * - `min` - * - `minlength` - * - `number` - * - `pattern` - * - `required` - * - `url` - * - `date` - * - `datetimelocal` - * - `time` - * - `week` - * - `month` - * - * @description - * `FormController` keeps track of all its controls and nested forms as well as the state of them, - * such as being valid/invalid or dirty/pristine. - * - * Each {@link ng.directive:form form} directive creates an instance - * of `FormController`. - * - */ -//asks for $scope to fool the BC controller module -FormController.$inject = ['$element', '$attrs', '$scope', '$animate', '$interpolate']; -function FormController(element, attrs, $scope, $animate, $interpolate) { - var form = this, - controls = []; - - var parentForm = form.$$parentForm = element.parent().controller('form') || nullFormCtrl; - - // init state - form.$error = {}; - form.$$success = {}; - form.$pending = undefined; - form.$name = $interpolate(attrs.name || attrs.ngForm || '')($scope); - form.$dirty = false; - form.$pristine = true; - form.$valid = true; - form.$invalid = false; - form.$submitted = false; - - parentForm.$addControl(form); - - /** - * @ngdoc method - * @name form.FormController#$rollbackViewValue - * - * @description - * Rollback all form controls pending updates to the `$modelValue`. - * - * Updates may be pending by a debounced event or because the input is waiting for a some future - * event defined in `ng-model-options`. This method is typically needed by the reset button of - * a form that uses `ng-model-options` to pend updates. - */ - form.$rollbackViewValue = function() { - forEach(controls, function(control) { - control.$rollbackViewValue(); - }); - }; - - /** - * @ngdoc method - * @name form.FormController#$commitViewValue - * - * @description - * Commit all form controls pending updates to the `$modelValue`. - * - * Updates may be pending by a debounced event or because the input is waiting for a some future - * event defined in `ng-model-options`. This method is rarely needed as `NgModelController` - * usually handles calling this in response to input events. - */ - form.$commitViewValue = function() { - forEach(controls, function(control) { - control.$commitViewValue(); - }); - }; - - /** - * @ngdoc method - * @name form.FormController#$addControl - * - * @description - * Register a control with the form. - * - * Input elements using ngModelController do this automatically when they are linked. - */ - form.$addControl = function(control) { - // Breaking change - before, inputs whose name was "hasOwnProperty" were quietly ignored - // and not added to the scope. Now we throw an error. - assertNotHasOwnProperty(control.$name, 'input'); - controls.push(control); - - if (control.$name) { - form[control.$name] = control; - } - }; - - // Private API: rename a form control - form.$$renameControl = function(control, newName) { - var oldName = control.$name; - - if (form[oldName] === control) { - delete form[oldName]; - } - form[newName] = control; - control.$name = newName; - }; - - /** - * @ngdoc method - * @name form.FormController#$removeControl - * - * @description - * Deregister a control from the form. - * - * Input elements using ngModelController do this automatically when they are destroyed. - */ - form.$removeControl = function(control) { - if (control.$name && form[control.$name] === control) { - delete form[control.$name]; - } - forEach(form.$pending, function(value, name) { - form.$setValidity(name, null, control); - }); - forEach(form.$error, function(value, name) { - form.$setValidity(name, null, control); - }); - forEach(form.$$success, function(value, name) { - form.$setValidity(name, null, control); - }); - - arrayRemove(controls, control); - }; - - - /** - * @ngdoc method - * @name form.FormController#$setValidity - * - * @description - * Sets the validity of a form control. - * - * This method will also propagate to parent forms. - */ - addSetValidityMethod({ - ctrl: this, - $element: element, - set: function(object, property, controller) { - var list = object[property]; - if (!list) { - object[property] = [controller]; - } else { - var index = list.indexOf(controller); - if (index === -1) { - list.push(controller); - } - } - }, - unset: function(object, property, controller) { - var list = object[property]; - if (!list) { - return; - } - arrayRemove(list, controller); - if (list.length === 0) { - delete object[property]; - } - }, - parentForm: parentForm, - $animate: $animate - }); - - /** - * @ngdoc method - * @name form.FormController#$setDirty - * - * @description - * Sets the form to a dirty state. - * - * This method can be called to add the 'ng-dirty' class and set the form to a dirty - * state (ng-dirty class). This method will also propagate to parent forms. - */ - form.$setDirty = function() { - $animate.removeClass(element, PRISTINE_CLASS); - $animate.addClass(element, DIRTY_CLASS); - form.$dirty = true; - form.$pristine = false; - parentForm.$setDirty(); - }; - - /** - * @ngdoc method - * @name form.FormController#$setPristine - * - * @description - * Sets the form to its pristine state. - * - * This method can be called to remove the 'ng-dirty' class and set the form to its pristine - * state (ng-pristine class). This method will also propagate to all the controls contained - * in this form. - * - * Setting a form back to a pristine state is often useful when we want to 'reuse' a form after - * saving or resetting it. - */ - form.$setPristine = function() { - $animate.setClass(element, PRISTINE_CLASS, DIRTY_CLASS + ' ' + SUBMITTED_CLASS); - form.$dirty = false; - form.$pristine = true; - form.$submitted = false; - forEach(controls, function(control) { - control.$setPristine(); - }); - }; - - /** - * @ngdoc method - * @name form.FormController#$setUntouched - * - * @description - * Sets the form to its untouched state. - * - * This method can be called to remove the 'ng-touched' class and set the form controls to their - * untouched state (ng-untouched class). - * - * Setting a form controls back to their untouched state is often useful when setting the form - * back to its pristine state. - */ - form.$setUntouched = function() { - forEach(controls, function(control) { - control.$setUntouched(); - }); - }; - - /** - * @ngdoc method - * @name form.FormController#$setSubmitted - * - * @description - * Sets the form to its submitted state. - */ - form.$setSubmitted = function() { - $animate.addClass(element, SUBMITTED_CLASS); - form.$submitted = true; - parentForm.$setSubmitted(); - }; -} - -/** - * @ngdoc directive - * @name ngForm - * @restrict EAC - * - * @description - * Nestable alias of {@link ng.directive:form `form`} directive. HTML - * does not allow nesting of form elements. It is useful to nest forms, for example if the validity of a - * sub-group of controls needs to be determined. - * - * Note: the purpose of `ngForm` is to group controls, - * but not to be a replacement for the `<form>` tag with all of its capabilities - * (e.g. posting to the server, ...). - * - * @param {string=} ngForm|name Name of the form. If specified, the form controller will be published into - * related scope, under this name. - * - */ - - /** - * @ngdoc directive - * @name form - * @restrict E - * - * @description - * Directive that instantiates - * {@link form.FormController FormController}. - * - * If the `name` attribute is specified, the form controller is published onto the current scope under - * this name. - * - * # Alias: {@link ng.directive:ngForm `ngForm`} - * - * In Angular forms can be nested. This means that the outer form is valid when all of the child - * forms are valid as well. However, browsers do not allow nesting of `<form>` elements, so - * Angular provides the {@link ng.directive:ngForm `ngForm`} directive which behaves identically to - * `<form>` but can be nested. This allows you to have nested forms, which is very useful when - * using Angular validation directives in forms that are dynamically generated using the - * {@link ng.directive:ngRepeat `ngRepeat`} directive. Since you cannot dynamically generate the `name` - * attribute of input elements using interpolation, you have to wrap each set of repeated inputs in an - * `ngForm` directive and nest these in an outer `form` element. - * - * - * # CSS classes - * - `ng-valid` is set if the form is valid. - * - `ng-invalid` is set if the form is invalid. - * - `ng-pristine` is set if the form is pristine. - * - `ng-dirty` is set if the form is dirty. - * - `ng-submitted` is set if the form was submitted. - * - * Keep in mind that ngAnimate can detect each of these classes when added and removed. - * - * - * # Submitting a form and preventing the default action - * - * Since the role of forms in client-side Angular applications is different than in classical - * roundtrip apps, it is desirable for the browser not to translate the form submission into a full - * page reload that sends the data to the server. Instead some javascript logic should be triggered - * to handle the form submission in an application-specific way. - * - * For this reason, Angular prevents the default action (form submission to the server) unless the - * `<form>` element has an `action` attribute specified. - * - * You can use one of the following two ways to specify what javascript method should be called when - * a form is submitted: - * - * - {@link ng.directive:ngSubmit ngSubmit} directive on the form element - * - {@link ng.directive:ngClick ngClick} directive on the first - * button or input field of type submit (input[type=submit]) - * - * To prevent double execution of the handler, use only one of the {@link ng.directive:ngSubmit ngSubmit} - * or {@link ng.directive:ngClick ngClick} directives. - * This is because of the following form submission rules in the HTML specification: - * - * - If a form has only one input field then hitting enter in this field triggers form submit - * (`ngSubmit`) - * - if a form has 2+ input fields and no buttons or input[type=submit] then hitting enter - * doesn't trigger submit - * - if a form has one or more input fields and one or more buttons or input[type=submit] then - * hitting enter in any of the input fields will trigger the click handler on the *first* button or - * input[type=submit] (`ngClick`) *and* a submit handler on the enclosing form (`ngSubmit`) - * - * Any pending `ngModelOptions` changes will take place immediately when an enclosing form is - * submitted. Note that `ngClick` events will occur before the model is updated. Use `ngSubmit` - * to have access to the updated model. - * - * ## Animation Hooks - * - * Animations in ngForm are triggered when any of the associated CSS classes are added and removed. - * These classes are: `.ng-pristine`, `.ng-dirty`, `.ng-invalid` and `.ng-valid` as well as any - * other validations that are performed within the form. Animations in ngForm are similar to how - * they work in ngClass and animations can be hooked into using CSS transitions, keyframes as well - * as JS animations. - * - * The following example shows a simple way to utilize CSS transitions to style a form element - * that has been rendered as invalid after it has been validated: - * - * <pre> - * //be sure to include ngAnimate as a module to hook into more - * //advanced animations - * .my-form { - * transition:0.5s linear all; - * background: white; - * } - * .my-form.ng-invalid { - * background: red; - * color:white; - * } - * </pre> - * - * @example - <example deps="angular-animate.js" animations="true" fixBase="true" module="formExample"> - <file name="index.html"> - <script> - angular.module('formExample', []) - .controller('FormController', ['$scope', function($scope) { - $scope.userType = 'guest'; - }]); - </script> - <style> - .my-form { - -webkit-transition:all linear 0.5s; - transition:all linear 0.5s; - background: transparent; - } - .my-form.ng-invalid { - background: red; - } - </style> - <form name="myForm" ng-controller="FormController" class="my-form"> - userType: <input name="input" ng-model="userType" required> - <span class="error" ng-show="myForm.input.$error.required">Required!</span><br> - <tt>userType = {{userType}}</tt><br> - <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br> - <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br> - <tt>myForm.$valid = {{myForm.$valid}}</tt><br> - <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br> - </form> - </file> - <file name="protractor.js" type="protractor"> - it('should initialize to model', function() { - var userType = element(by.binding('userType')); - var valid = element(by.binding('myForm.input.$valid')); - - expect(userType.getText()).toContain('guest'); - expect(valid.getText()).toContain('true'); - }); - - it('should be invalid if empty', function() { - var userType = element(by.binding('userType')); - var valid = element(by.binding('myForm.input.$valid')); - var userInput = element(by.model('userType')); - - userInput.clear(); - userInput.sendKeys(''); - - expect(userType.getText()).toEqual('userType ='); - expect(valid.getText()).toContain('false'); - }); - </file> - </example> - * - * @param {string=} name Name of the form. If specified, the form controller will be published into - * related scope, under this name. - */ -var formDirectiveFactory = function(isNgForm) { - return ['$timeout', function($timeout) { - var formDirective = { - name: 'form', - restrict: isNgForm ? 'EAC' : 'E', - controller: FormController, - compile: function ngFormCompile(formElement) { - // Setup initial state of the control - formElement.addClass(PRISTINE_CLASS).addClass(VALID_CLASS); - - return { - pre: function ngFormPreLink(scope, formElement, attr, controller) { - // if `action` attr is not present on the form, prevent the default action (submission) - if (!('action' in attr)) { - // we can't use jq events because if a form is destroyed during submission the default - // action is not prevented. see #1238 - // - // IE 9 is not affected because it doesn't fire a submit event and try to do a full - // page reload if the form was destroyed by submission of the form via a click handler - // on a button in the form. Looks like an IE9 specific bug. - var handleFormSubmission = function(event) { - scope.$apply(function() { - controller.$commitViewValue(); - controller.$setSubmitted(); - }); - - event.preventDefault(); - }; - - addEventListenerFn(formElement[0], 'submit', handleFormSubmission); - - // unregister the preventDefault listener so that we don't not leak memory but in a - // way that will achieve the prevention of the default action. - formElement.on('$destroy', function() { - $timeout(function() { - removeEventListenerFn(formElement[0], 'submit', handleFormSubmission); - }, 0, false); - }); - } - - var parentFormCtrl = controller.$$parentForm, - alias = controller.$name; - - if (alias) { - setter(scope, null, alias, controller, alias); - attr.$observe(attr.name ? 'name' : 'ngForm', function(newValue) { - if (alias === newValue) return; - setter(scope, null, alias, undefined, alias); - alias = newValue; - setter(scope, null, alias, controller, alias); - parentFormCtrl.$$renameControl(controller, alias); - }); - } - formElement.on('$destroy', function() { - parentFormCtrl.$removeControl(controller); - if (alias) { - setter(scope, null, alias, undefined, alias); - } - extend(controller, nullFormCtrl); //stop propagating child destruction handlers upwards - }); - } - }; - } - }; - - return formDirective; - }]; -}; - -var formDirective = formDirectiveFactory(); -var ngFormDirective = formDirectiveFactory(true); - -/* global VALID_CLASS: false, - INVALID_CLASS: false, - PRISTINE_CLASS: false, - DIRTY_CLASS: false, - UNTOUCHED_CLASS: false, - TOUCHED_CLASS: false, - $ngModelMinErr: false, -*/ - -// Regex code is obtained from SO: https://stackoverflow.com/questions/3143070/javascript-regex-iso-datetime#answer-3143231 -var ISO_DATE_REGEXP = /\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)/; -var URL_REGEXP = /^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/; -var EMAIL_REGEXP = /^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i; -var NUMBER_REGEXP = /^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/; -var DATE_REGEXP = /^(\d{4})-(\d{2})-(\d{2})$/; -var DATETIMELOCAL_REGEXP = /^(\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/; -var WEEK_REGEXP = /^(\d{4})-W(\d\d)$/; -var MONTH_REGEXP = /^(\d{4})-(\d\d)$/; -var TIME_REGEXP = /^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/; - -var inputType = { - - /** - * @ngdoc input - * @name input[text] - * - * @description - * Standard HTML text input with angular data binding, inherited by most of the `input` elements. - * - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} required Adds `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than - * minlength. - * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than - * maxlength. Setting the attribute to a negative or non-numeric value, allows view values of - * any length. - * @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string - * that contains the regular expression body that will be converted to a regular expression - * as in the ngPattern directive. - * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel value does not match - * a RegExp found by evaluating the Angular expression given in the attribute value. - * If the expression evaluates to a RegExp object then this is used directly. - * If the expression is a string then it will be converted to a RegExp after wrapping it in `^` and `$` - * characters. For instance, `"abc"` will be converted to `new RegExp('^abc$')`. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * @param {boolean=} [ngTrim=true] If set to false Angular will not automatically trim the input. - * This parameter is ignored for input[type=password] controls, which will never trim the - * input. - * - * @example - <example name="text-input-directive" module="textInputExample"> - <file name="index.html"> - <script> - angular.module('textInputExample', []) - .controller('ExampleController', ['$scope', function($scope) { - $scope.example = { - text: 'guest', - word: /^\s*\w*\s*$/ - }; - }]); - </script> - <form name="myForm" ng-controller="ExampleController"> - Single word: <input type="text" name="input" ng-model="example.text" - ng-pattern="example.word" required ng-trim="false"> - <span class="error" ng-show="myForm.input.$error.required"> - Required!</span> - <span class="error" ng-show="myForm.input.$error.pattern"> - Single word only!</span> - - <tt>text = {{example.text}}</tt><br/> - <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/> - <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/> - <tt>myForm.$valid = {{myForm.$valid}}</tt><br/> - <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/> - </form> - </file> - <file name="protractor.js" type="protractor"> - var text = element(by.binding('example.text')); - var valid = element(by.binding('myForm.input.$valid')); - var input = element(by.model('example.text')); - - it('should initialize to model', function() { - expect(text.getText()).toContain('guest'); - expect(valid.getText()).toContain('true'); - }); - - it('should be invalid if empty', function() { - input.clear(); - input.sendKeys(''); - - expect(text.getText()).toEqual('text ='); - expect(valid.getText()).toContain('false'); - }); - - it('should be invalid if multi word', function() { - input.clear(); - input.sendKeys('hello world'); - - expect(valid.getText()).toContain('false'); - }); - </file> - </example> - */ - 'text': textInputType, - - /** - * @ngdoc input - * @name input[date] - * - * @description - * Input with date validation and transformation. In browsers that do not yet support - * the HTML5 date input, a text element will be used. In that case, text must be entered in a valid ISO-8601 - * date format (yyyy-MM-dd), for example: `2009-01-06`. Since many - * modern browsers do not yet support this input type, it is important to provide cues to users on the - * expected input format via a placeholder or label. - * - * The model must always be a Date object, otherwise Angular will throw an error. - * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string. - * - * The timezone to be used to read/write the `Date` instance in the model can be defined using - * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. This must be a - * valid ISO date string (yyyy-MM-dd). - * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. This must be - * a valid ISO date string (yyyy-MM-dd). - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - <example name="date-input-directive" module="dateInputExample"> - <file name="index.html"> - <script> - angular.module('dateInputExample', []) - .controller('DateController', ['$scope', function($scope) { - $scope.example = { - value: new Date(2013, 9, 22) - }; - }]); - </script> - <form name="myForm" ng-controller="DateController as dateCtrl"> - Pick a date in 2013: - <input type="date" id="exampleInput" name="input" ng-model="example.value" - placeholder="yyyy-MM-dd" min="2013-01-01" max="2013-12-31" required /> - <span class="error" ng-show="myForm.input.$error.required"> - Required!</span> - <span class="error" ng-show="myForm.input.$error.date"> - Not a valid date!</span> - <tt>value = {{example.value | date: "yyyy-MM-dd"}}</tt><br/> - <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/> - <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/> - <tt>myForm.$valid = {{myForm.$valid}}</tt><br/> - <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/> - </form> - </file> - <file name="protractor.js" type="protractor"> - var value = element(by.binding('example.value | date: "yyyy-MM-dd"')); - var valid = element(by.binding('myForm.input.$valid')); - var input = element(by.model('example.value')); - - // currently protractor/webdriver does not support - // sending keys to all known HTML5 input controls - // for various browsers (see https://github.com/angular/protractor/issues/562). - function setInput(val) { - // set the value of the element and force validation. - var scr = "var ipt = document.getElementById('exampleInput'); " + - "ipt.value = '" + val + "';" + - "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });"; - browser.executeScript(scr); - } - - it('should initialize to model', function() { - expect(value.getText()).toContain('2013-10-22'); - expect(valid.getText()).toContain('myForm.input.$valid = true'); - }); - - it('should be invalid if empty', function() { - setInput(''); - expect(value.getText()).toEqual('value ='); - expect(valid.getText()).toContain('myForm.input.$valid = false'); - }); - - it('should be invalid if over max', function() { - setInput('2015-01-01'); - expect(value.getText()).toContain(''); - expect(valid.getText()).toContain('myForm.input.$valid = false'); - }); - </file> - </example> - */ - 'date': createDateInputType('date', DATE_REGEXP, - createDateParser(DATE_REGEXP, ['yyyy', 'MM', 'dd']), - 'yyyy-MM-dd'), - - /** - * @ngdoc input - * @name input[datetime-local] - * - * @description - * Input with datetime validation and transformation. In browsers that do not yet support - * the HTML5 date input, a text element will be used. In that case, the text must be entered in a valid ISO-8601 - * local datetime format (yyyy-MM-ddTHH:mm:ss), for example: `2010-12-28T14:57:00`. - * - * The model must always be a Date object, otherwise Angular will throw an error. - * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string. - * - * The timezone to be used to read/write the `Date` instance in the model can be defined using - * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. This must be a - * valid ISO datetime format (yyyy-MM-ddTHH:mm:ss). - * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. This must be - * a valid ISO datetime format (yyyy-MM-ddTHH:mm:ss). - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - <example name="datetimelocal-input-directive" module="dateExample"> - <file name="index.html"> - <script> - angular.module('dateExample', []) - .controller('DateController', ['$scope', function($scope) { - $scope.example = { - value: new Date(2010, 11, 28, 14, 57) - }; - }]); - </script> - <form name="myForm" ng-controller="DateController as dateCtrl"> - Pick a date between in 2013: - <input type="datetime-local" id="exampleInput" name="input" ng-model="example.value" - placeholder="yyyy-MM-ddTHH:mm:ss" min="2001-01-01T00:00:00" max="2013-12-31T00:00:00" required /> - <span class="error" ng-show="myForm.input.$error.required"> - Required!</span> - <span class="error" ng-show="myForm.input.$error.datetimelocal"> - Not a valid date!</span> - <tt>value = {{example.value | date: "yyyy-MM-ddTHH:mm:ss"}}</tt><br/> - <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/> - <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/> - <tt>myForm.$valid = {{myForm.$valid}}</tt><br/> - <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/> - </form> - </file> - <file name="protractor.js" type="protractor"> - var value = element(by.binding('example.value | date: "yyyy-MM-ddTHH:mm:ss"')); - var valid = element(by.binding('myForm.input.$valid')); - var input = element(by.model('example.value')); - - // currently protractor/webdriver does not support - // sending keys to all known HTML5 input controls - // for various browsers (https://github.com/angular/protractor/issues/562). - function setInput(val) { - // set the value of the element and force validation. - var scr = "var ipt = document.getElementById('exampleInput'); " + - "ipt.value = '" + val + "';" + - "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });"; - browser.executeScript(scr); - } - - it('should initialize to model', function() { - expect(value.getText()).toContain('2010-12-28T14:57:00'); - expect(valid.getText()).toContain('myForm.input.$valid = true'); - }); - - it('should be invalid if empty', function() { - setInput(''); - expect(value.getText()).toEqual('value ='); - expect(valid.getText()).toContain('myForm.input.$valid = false'); - }); - - it('should be invalid if over max', function() { - setInput('2015-01-01T23:59:00'); - expect(value.getText()).toContain(''); - expect(valid.getText()).toContain('myForm.input.$valid = false'); - }); - </file> - </example> - */ - 'datetime-local': createDateInputType('datetimelocal', DATETIMELOCAL_REGEXP, - createDateParser(DATETIMELOCAL_REGEXP, ['yyyy', 'MM', 'dd', 'HH', 'mm', 'ss', 'sss']), - 'yyyy-MM-ddTHH:mm:ss.sss'), - - /** - * @ngdoc input - * @name input[time] - * - * @description - * Input with time validation and transformation. In browsers that do not yet support - * the HTML5 date input, a text element will be used. In that case, the text must be entered in a valid ISO-8601 - * local time format (HH:mm:ss), for example: `14:57:00`. Model must be a Date object. This binding will always output a - * Date object to the model of January 1, 1970, or local date `new Date(1970, 0, 1, HH, mm, ss)`. - * - * The model must always be a Date object, otherwise Angular will throw an error. - * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string. - * - * The timezone to be used to read/write the `Date` instance in the model can be defined using - * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. This must be a - * valid ISO time format (HH:mm:ss). - * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. This must be a - * valid ISO time format (HH:mm:ss). - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - <example name="time-input-directive" module="timeExample"> - <file name="index.html"> - <script> - angular.module('timeExample', []) - .controller('DateController', ['$scope', function($scope) { - $scope.example = { - value: new Date(1970, 0, 1, 14, 57, 0) - }; - }]); - </script> - <form name="myForm" ng-controller="DateController as dateCtrl"> - Pick a between 8am and 5pm: - <input type="time" id="exampleInput" name="input" ng-model="example.value" - placeholder="HH:mm:ss" min="08:00:00" max="17:00:00" required /> - <span class="error" ng-show="myForm.input.$error.required"> - Required!</span> - <span class="error" ng-show="myForm.input.$error.time"> - Not a valid date!</span> - <tt>value = {{example.value | date: "HH:mm:ss"}}</tt><br/> - <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/> - <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/> - <tt>myForm.$valid = {{myForm.$valid}}</tt><br/> - <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/> - </form> - </file> - <file name="protractor.js" type="protractor"> - var value = element(by.binding('example.value | date: "HH:mm:ss"')); - var valid = element(by.binding('myForm.input.$valid')); - var input = element(by.model('example.value')); - - // currently protractor/webdriver does not support - // sending keys to all known HTML5 input controls - // for various browsers (https://github.com/angular/protractor/issues/562). - function setInput(val) { - // set the value of the element and force validation. - var scr = "var ipt = document.getElementById('exampleInput'); " + - "ipt.value = '" + val + "';" + - "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });"; - browser.executeScript(scr); - } - - it('should initialize to model', function() { - expect(value.getText()).toContain('14:57:00'); - expect(valid.getText()).toContain('myForm.input.$valid = true'); - }); - - it('should be invalid if empty', function() { - setInput(''); - expect(value.getText()).toEqual('value ='); - expect(valid.getText()).toContain('myForm.input.$valid = false'); - }); - - it('should be invalid if over max', function() { - setInput('23:59:00'); - expect(value.getText()).toContain(''); - expect(valid.getText()).toContain('myForm.input.$valid = false'); - }); - </file> - </example> - */ - 'time': createDateInputType('time', TIME_REGEXP, - createDateParser(TIME_REGEXP, ['HH', 'mm', 'ss', 'sss']), - 'HH:mm:ss.sss'), - - /** - * @ngdoc input - * @name input[week] - * - * @description - * Input with week-of-the-year validation and transformation to Date. In browsers that do not yet support - * the HTML5 week input, a text element will be used. In that case, the text must be entered in a valid ISO-8601 - * week format (yyyy-W##), for example: `2013-W02`. - * - * The model must always be a Date object, otherwise Angular will throw an error. - * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string. - * - * The timezone to be used to read/write the `Date` instance in the model can be defined using - * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. This must be a - * valid ISO week format (yyyy-W##). - * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. This must be - * a valid ISO week format (yyyy-W##). - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - <example name="week-input-directive" module="weekExample"> - <file name="index.html"> - <script> - angular.module('weekExample', []) - .controller('DateController', ['$scope', function($scope) { - $scope.example = { - value: new Date(2013, 0, 3) - }; - }]); - </script> - <form name="myForm" ng-controller="DateController as dateCtrl"> - Pick a date between in 2013: - <input id="exampleInput" type="week" name="input" ng-model="example.value" - placeholder="YYYY-W##" min="2012-W32" max="2013-W52" required /> - <span class="error" ng-show="myForm.input.$error.required"> - Required!</span> - <span class="error" ng-show="myForm.input.$error.week"> - Not a valid date!</span> - <tt>value = {{example.value | date: "yyyy-Www"}}</tt><br/> - <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/> - <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/> - <tt>myForm.$valid = {{myForm.$valid}}</tt><br/> - <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/> - </form> - </file> - <file name="protractor.js" type="protractor"> - var value = element(by.binding('example.value | date: "yyyy-Www"')); - var valid = element(by.binding('myForm.input.$valid')); - var input = element(by.model('example.value')); - - // currently protractor/webdriver does not support - // sending keys to all known HTML5 input controls - // for various browsers (https://github.com/angular/protractor/issues/562). - function setInput(val) { - // set the value of the element and force validation. - var scr = "var ipt = document.getElementById('exampleInput'); " + - "ipt.value = '" + val + "';" + - "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });"; - browser.executeScript(scr); - } - - it('should initialize to model', function() { - expect(value.getText()).toContain('2013-W01'); - expect(valid.getText()).toContain('myForm.input.$valid = true'); - }); - - it('should be invalid if empty', function() { - setInput(''); - expect(value.getText()).toEqual('value ='); - expect(valid.getText()).toContain('myForm.input.$valid = false'); - }); - - it('should be invalid if over max', function() { - setInput('2015-W01'); - expect(value.getText()).toContain(''); - expect(valid.getText()).toContain('myForm.input.$valid = false'); - }); - </file> - </example> - */ - 'week': createDateInputType('week', WEEK_REGEXP, weekParser, 'yyyy-Www'), - - /** - * @ngdoc input - * @name input[month] - * - * @description - * Input with month validation and transformation. In browsers that do not yet support - * the HTML5 month input, a text element will be used. In that case, the text must be entered in a valid ISO-8601 - * month format (yyyy-MM), for example: `2009-01`. - * - * The model must always be a Date object, otherwise Angular will throw an error. - * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string. - * If the model is not set to the first of the month, the next view to model update will set it - * to the first of the month. - * - * The timezone to be used to read/write the `Date` instance in the model can be defined using - * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. This must be - * a valid ISO month format (yyyy-MM). - * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. This must - * be a valid ISO month format (yyyy-MM). - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - <example name="month-input-directive" module="monthExample"> - <file name="index.html"> - <script> - angular.module('monthExample', []) - .controller('DateController', ['$scope', function($scope) { - $scope.example = { - value: new Date(2013, 9, 1) - }; - }]); - </script> - <form name="myForm" ng-controller="DateController as dateCtrl"> - Pick a month in 2013: - <input id="exampleInput" type="month" name="input" ng-model="example.value" - placeholder="yyyy-MM" min="2013-01" max="2013-12" required /> - <span class="error" ng-show="myForm.input.$error.required"> - Required!</span> - <span class="error" ng-show="myForm.input.$error.month"> - Not a valid month!</span> - <tt>value = {{example.value | date: "yyyy-MM"}}</tt><br/> - <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/> - <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/> - <tt>myForm.$valid = {{myForm.$valid}}</tt><br/> - <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/> - </form> - </file> - <file name="protractor.js" type="protractor"> - var value = element(by.binding('example.value | date: "yyyy-MM"')); - var valid = element(by.binding('myForm.input.$valid')); - var input = element(by.model('example.value')); - - // currently protractor/webdriver does not support - // sending keys to all known HTML5 input controls - // for various browsers (https://github.com/angular/protractor/issues/562). - function setInput(val) { - // set the value of the element and force validation. - var scr = "var ipt = document.getElementById('exampleInput'); " + - "ipt.value = '" + val + "';" + - "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });"; - browser.executeScript(scr); - } - - it('should initialize to model', function() { - expect(value.getText()).toContain('2013-10'); - expect(valid.getText()).toContain('myForm.input.$valid = true'); - }); - - it('should be invalid if empty', function() { - setInput(''); - expect(value.getText()).toEqual('value ='); - expect(valid.getText()).toContain('myForm.input.$valid = false'); - }); - - it('should be invalid if over max', function() { - setInput('2015-01'); - expect(value.getText()).toContain(''); - expect(valid.getText()).toContain('myForm.input.$valid = false'); - }); - </file> - </example> - */ - 'month': createDateInputType('month', MONTH_REGEXP, - createDateParser(MONTH_REGEXP, ['yyyy', 'MM']), - 'yyyy-MM'), - - /** - * @ngdoc input - * @name input[number] - * - * @description - * Text input with number validation and transformation. Sets the `number` validation - * error if not a valid number. - * - * The model must always be a number, otherwise Angular will throw an error. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. - * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than - * minlength. - * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than - * maxlength. Setting the attribute to a negative or non-numeric value, allows view values of - * any length. - * @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string - * that contains the regular expression body that will be converted to a regular expression - * as in the ngPattern directive. - * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel value does not match - * a RegExp found by evaluating the Angular expression given in the attribute value. - * If the expression evaluates to a RegExp object then this is used directly. - * If the expression is a string then it will be converted to a RegExp after wrapping it in `^` and `$` - * characters. For instance, `"abc"` will be converted to `new RegExp('^abc$')`. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - <example name="number-input-directive" module="numberExample"> - <file name="index.html"> - <script> - angular.module('numberExample', []) - .controller('ExampleController', ['$scope', function($scope) { - $scope.example = { - value: 12 - }; - }]); - </script> - <form name="myForm" ng-controller="ExampleController"> - Number: <input type="number" name="input" ng-model="example.value" - min="0" max="99" required> - <span class="error" ng-show="myForm.input.$error.required"> - Required!</span> - <span class="error" ng-show="myForm.input.$error.number"> - Not valid number!</span> - <tt>value = {{example.value}}</tt><br/> - <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/> - <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/> - <tt>myForm.$valid = {{myForm.$valid}}</tt><br/> - <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/> - </form> - </file> - <file name="protractor.js" type="protractor"> - var value = element(by.binding('example.value')); - var valid = element(by.binding('myForm.input.$valid')); - var input = element(by.model('example.value')); - - it('should initialize to model', function() { - expect(value.getText()).toContain('12'); - expect(valid.getText()).toContain('true'); - }); - - it('should be invalid if empty', function() { - input.clear(); - input.sendKeys(''); - expect(value.getText()).toEqual('value ='); - expect(valid.getText()).toContain('false'); - }); - - it('should be invalid if over max', function() { - input.clear(); - input.sendKeys('123'); - expect(value.getText()).toEqual('value ='); - expect(valid.getText()).toContain('false'); - }); - </file> - </example> - */ - 'number': numberInputType, - - - /** - * @ngdoc input - * @name input[url] - * - * @description - * Text input with URL validation. Sets the `url` validation error key if the content is not a - * valid URL. - * - * <div class="alert alert-warning"> - * **Note:** `input[url]` uses a regex to validate urls that is derived from the regex - * used in Chromium. If you need stricter validation, you can use `ng-pattern` or modify - * the built-in validators (see the {@link guide/forms Forms guide}) - * </div> - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than - * minlength. - * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than - * maxlength. Setting the attribute to a negative or non-numeric value, allows view values of - * any length. - * @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string - * that contains the regular expression body that will be converted to a regular expression - * as in the ngPattern directive. - * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel value does not match - * a RegExp found by evaluating the Angular expression given in the attribute value. - * If the expression evaluates to a RegExp object then this is used directly. - * If the expression is a string then it will be converted to a RegExp after wrapping it in `^` and `$` - * characters. For instance, `"abc"` will be converted to `new RegExp('^abc$')`. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - <example name="url-input-directive" module="urlExample"> - <file name="index.html"> - <script> - angular.module('urlExample', []) - .controller('ExampleController', ['$scope', function($scope) { - $scope.url = { - text: 'http://google.com' - }; - }]); - </script> - <form name="myForm" ng-controller="ExampleController"> - URL: <input type="url" name="input" ng-model="url.text" required> - <span class="error" ng-show="myForm.input.$error.required"> - Required!</span> - <span class="error" ng-show="myForm.input.$error.url"> - Not valid url!</span> - <tt>text = {{url.text}}</tt><br/> - <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/> - <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/> - <tt>myForm.$valid = {{myForm.$valid}}</tt><br/> - <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/> - <tt>myForm.$error.url = {{!!myForm.$error.url}}</tt><br/> - </form> - </file> - <file name="protractor.js" type="protractor"> - var text = element(by.binding('url.text')); - var valid = element(by.binding('myForm.input.$valid')); - var input = element(by.model('url.text')); - - it('should initialize to model', function() { - expect(text.getText()).toContain('http://google.com'); - expect(valid.getText()).toContain('true'); - }); - - it('should be invalid if empty', function() { - input.clear(); - input.sendKeys(''); - - expect(text.getText()).toEqual('text ='); - expect(valid.getText()).toContain('false'); - }); - - it('should be invalid if not url', function() { - input.clear(); - input.sendKeys('box'); - - expect(valid.getText()).toContain('false'); - }); - </file> - </example> - */ - 'url': urlInputType, - - - /** - * @ngdoc input - * @name input[email] - * - * @description - * Text input with email validation. Sets the `email` validation error key if not a valid email - * address. - * - * <div class="alert alert-warning"> - * **Note:** `input[email]` uses a regex to validate email addresses that is derived from the regex - * used in Chromium. If you need stricter validation (e.g. requiring a top-level domain), you can - * use `ng-pattern` or modify the built-in validators (see the {@link guide/forms Forms guide}) - * </div> - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than - * minlength. - * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than - * maxlength. Setting the attribute to a negative or non-numeric value, allows view values of - * any length. - * @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string - * that contains the regular expression body that will be converted to a regular expression - * as in the ngPattern directive. - * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel value does not match - * a RegExp found by evaluating the Angular expression given in the attribute value. - * If the expression evaluates to a RegExp object then this is used directly. - * If the expression is a string then it will be converted to a RegExp after wrapping it in `^` and `$` - * characters. For instance, `"abc"` will be converted to `new RegExp('^abc$')`. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - <example name="email-input-directive" module="emailExample"> - <file name="index.html"> - <script> - angular.module('emailExample', []) - .controller('ExampleController', ['$scope', function($scope) { - $scope.email = { - text: 'me@example.com' - }; - }]); - </script> - <form name="myForm" ng-controller="ExampleController"> - Email: <input type="email" name="input" ng-model="email.text" required> - <span class="error" ng-show="myForm.input.$error.required"> - Required!</span> - <span class="error" ng-show="myForm.input.$error.email"> - Not valid email!</span> - <tt>text = {{email.text}}</tt><br/> - <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/> - <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/> - <tt>myForm.$valid = {{myForm.$valid}}</tt><br/> - <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/> - <tt>myForm.$error.email = {{!!myForm.$error.email}}</tt><br/> - </form> - </file> - <file name="protractor.js" type="protractor"> - var text = element(by.binding('email.text')); - var valid = element(by.binding('myForm.input.$valid')); - var input = element(by.model('email.text')); - - it('should initialize to model', function() { - expect(text.getText()).toContain('me@example.com'); - expect(valid.getText()).toContain('true'); - }); - - it('should be invalid if empty', function() { - input.clear(); - input.sendKeys(''); - expect(text.getText()).toEqual('text ='); - expect(valid.getText()).toContain('false'); - }); - - it('should be invalid if not email', function() { - input.clear(); - input.sendKeys('xxx'); - - expect(valid.getText()).toContain('false'); - }); - </file> - </example> - */ - 'email': emailInputType, - - - /** - * @ngdoc input - * @name input[radio] - * - * @description - * HTML radio button. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string} value The value to which the expression should be set when selected. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * @param {string} ngValue Angular expression which sets the value to which the expression should - * be set when selected. - * - * @example - <example name="radio-input-directive" module="radioExample"> - <file name="index.html"> - <script> - angular.module('radioExample', []) - .controller('ExampleController', ['$scope', function($scope) { - $scope.color = { - name: 'blue' - }; - $scope.specialValue = { - "id": "12345", - "value": "green" - }; - }]); - </script> - <form name="myForm" ng-controller="ExampleController"> - <input type="radio" ng-model="color.name" value="red"> Red <br/> - <input type="radio" ng-model="color.name" ng-value="specialValue"> Green <br/> - <input type="radio" ng-model="color.name" value="blue"> Blue <br/> - <tt>color = {{color.name | json}}</tt><br/> - </form> - Note that `ng-value="specialValue"` sets radio item's value to be the value of `$scope.specialValue`. - </file> - <file name="protractor.js" type="protractor"> - it('should change state', function() { - var color = element(by.binding('color.name')); - - expect(color.getText()).toContain('blue'); - - element.all(by.model('color.name')).get(0).click(); - - expect(color.getText()).toContain('red'); - }); - </file> - </example> - */ - 'radio': radioInputType, - - - /** - * @ngdoc input - * @name input[checkbox] - * - * @description - * HTML checkbox. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {expression=} ngTrueValue The value to which the expression should be set when selected. - * @param {expression=} ngFalseValue The value to which the expression should be set when not selected. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - <example name="checkbox-input-directive" module="checkboxExample"> - <file name="index.html"> - <script> - angular.module('checkboxExample', []) - .controller('ExampleController', ['$scope', function($scope) { - $scope.checkboxModel = { - value1 : true, - value2 : 'YES' - }; - }]); - </script> - <form name="myForm" ng-controller="ExampleController"> - Value1: <input type="checkbox" ng-model="checkboxModel.value1"> <br/> - Value2: <input type="checkbox" ng-model="checkboxModel.value2" - ng-true-value="'YES'" ng-false-value="'NO'"> <br/> - <tt>value1 = {{checkboxModel.value1}}</tt><br/> - <tt>value2 = {{checkboxModel.value2}}</tt><br/> - </form> - </file> - <file name="protractor.js" type="protractor"> - it('should change state', function() { - var value1 = element(by.binding('checkboxModel.value1')); - var value2 = element(by.binding('checkboxModel.value2')); - - expect(value1.getText()).toContain('true'); - expect(value2.getText()).toContain('YES'); - - element(by.model('checkboxModel.value1')).click(); - element(by.model('checkboxModel.value2')).click(); - - expect(value1.getText()).toContain('false'); - expect(value2.getText()).toContain('NO'); - }); - </file> - </example> - */ - 'checkbox': checkboxInputType, - - 'hidden': noop, - 'button': noop, - 'submit': noop, - 'reset': noop, - 'file': noop -}; - -function stringBasedInputType(ctrl) { - ctrl.$formatters.push(function(value) { - return ctrl.$isEmpty(value) ? value : value.toString(); - }); -} - -function textInputType(scope, element, attr, ctrl, $sniffer, $browser) { - baseInputType(scope, element, attr, ctrl, $sniffer, $browser); - stringBasedInputType(ctrl); -} - -function baseInputType(scope, element, attr, ctrl, $sniffer, $browser) { - var type = lowercase(element[0].type); - - // In composition mode, users are still inputing intermediate text buffer, - // hold the listener until composition is done. - // More about composition events: https://developer.mozilla.org/en-US/docs/Web/API/CompositionEvent - if (!$sniffer.android) { - var composing = false; - - element.on('compositionstart', function(data) { - composing = true; - }); - - element.on('compositionend', function() { - composing = false; - listener(); - }); - } - - var listener = function(ev) { - if (timeout) { - $browser.defer.cancel(timeout); - timeout = null; - } - if (composing) return; - var value = element.val(), - event = ev && ev.type; - - // By default we will trim the value - // If the attribute ng-trim exists we will avoid trimming - // If input type is 'password', the value is never trimmed - if (type !== 'password' && (!attr.ngTrim || attr.ngTrim !== 'false')) { - value = trim(value); - } - - // If a control is suffering from bad input (due to native validators), browsers discard its - // value, so it may be necessary to revalidate (by calling $setViewValue again) even if the - // control's value is the same empty value twice in a row. - if (ctrl.$viewValue !== value || (value === '' && ctrl.$$hasNativeValidators)) { - ctrl.$setViewValue(value, event); - } - }; - - // if the browser does support "input" event, we are fine - except on IE9 which doesn't fire the - // input event on backspace, delete or cut - if ($sniffer.hasEvent('input')) { - element.on('input', listener); - } else { - var timeout; - - var deferListener = function(ev, input, origValue) { - if (!timeout) { - timeout = $browser.defer(function() { - timeout = null; - if (!input || input.value !== origValue) { - listener(ev); - } - }); - } - }; - - element.on('keydown', function(event) { - var key = event.keyCode; - - // ignore - // command modifiers arrows - if (key === 91 || (15 < key && key < 19) || (37 <= key && key <= 40)) return; - - deferListener(event, this, this.value); - }); - - // if user modifies input value using context menu in IE, we need "paste" and "cut" events to catch it - if ($sniffer.hasEvent('paste')) { - element.on('paste cut', deferListener); - } - } - - // if user paste into input using mouse on older browser - // or form autocomplete on newer browser, we need "change" event to catch it - element.on('change', listener); - - ctrl.$render = function() { - element.val(ctrl.$isEmpty(ctrl.$viewValue) ? '' : ctrl.$viewValue); - }; -} - -function weekParser(isoWeek, existingDate) { - if (isDate(isoWeek)) { - return isoWeek; - } - - if (isString(isoWeek)) { - WEEK_REGEXP.lastIndex = 0; - var parts = WEEK_REGEXP.exec(isoWeek); - if (parts) { - var year = +parts[1], - week = +parts[2], - hours = 0, - minutes = 0, - seconds = 0, - milliseconds = 0, - firstThurs = getFirstThursdayOfYear(year), - addDays = (week - 1) * 7; - - if (existingDate) { - hours = existingDate.getHours(); - minutes = existingDate.getMinutes(); - seconds = existingDate.getSeconds(); - milliseconds = existingDate.getMilliseconds(); - } - - return new Date(year, 0, firstThurs.getDate() + addDays, hours, minutes, seconds, milliseconds); - } - } - - return NaN; -} - -function createDateParser(regexp, mapping) { - return function(iso, date) { - var parts, map; - - if (isDate(iso)) { - return iso; - } - - if (isString(iso)) { - // When a date is JSON'ified to wraps itself inside of an extra - // set of double quotes. This makes the date parsing code unable - // to match the date string and parse it as a date. - if (iso.charAt(0) == '"' && iso.charAt(iso.length - 1) == '"') { - iso = iso.substring(1, iso.length - 1); - } - if (ISO_DATE_REGEXP.test(iso)) { - return new Date(iso); - } - regexp.lastIndex = 0; - parts = regexp.exec(iso); - - if (parts) { - parts.shift(); - if (date) { - map = { - yyyy: date.getFullYear(), - MM: date.getMonth() + 1, - dd: date.getDate(), - HH: date.getHours(), - mm: date.getMinutes(), - ss: date.getSeconds(), - sss: date.getMilliseconds() / 1000 - }; - } else { - map = { yyyy: 1970, MM: 1, dd: 1, HH: 0, mm: 0, ss: 0, sss: 0 }; - } - - forEach(parts, function(part, index) { - if (index < mapping.length) { - map[mapping[index]] = +part; - } - }); - return new Date(map.yyyy, map.MM - 1, map.dd, map.HH, map.mm, map.ss || 0, map.sss * 1000 || 0); - } - } - - return NaN; - }; -} - -function createDateInputType(type, regexp, parseDate, format) { - return function dynamicDateInputType(scope, element, attr, ctrl, $sniffer, $browser, $filter) { - badInputChecker(scope, element, attr, ctrl); - baseInputType(scope, element, attr, ctrl, $sniffer, $browser); - var timezone = ctrl && ctrl.$options && ctrl.$options.timezone; - var previousDate; - - ctrl.$$parserName = type; - ctrl.$parsers.push(function(value) { - if (ctrl.$isEmpty(value)) return null; - if (regexp.test(value)) { - // Note: We cannot read ctrl.$modelValue, as there might be a different - // parser/formatter in the processing chain so that the model - // contains some different data format! - var parsedDate = parseDate(value, previousDate); - if (timezone === 'UTC') { - parsedDate.setMinutes(parsedDate.getMinutes() - parsedDate.getTimezoneOffset()); - } - return parsedDate; - } - return undefined; - }); - - ctrl.$formatters.push(function(value) { - if (value && !isDate(value)) { - throw $ngModelMinErr('datefmt', 'Expected `{0}` to be a date', value); - } - if (isValidDate(value)) { - previousDate = value; - if (previousDate && timezone === 'UTC') { - var timezoneOffset = 60000 * previousDate.getTimezoneOffset(); - previousDate = new Date(previousDate.getTime() + timezoneOffset); - } - return $filter('date')(value, format, timezone); - } else { - previousDate = null; - return ''; - } - }); - - if (isDefined(attr.min) || attr.ngMin) { - var minVal; - ctrl.$validators.min = function(value) { - return !isValidDate(value) || isUndefined(minVal) || parseDate(value) >= minVal; - }; - attr.$observe('min', function(val) { - minVal = parseObservedDateValue(val); - ctrl.$validate(); - }); - } - - if (isDefined(attr.max) || attr.ngMax) { - var maxVal; - ctrl.$validators.max = function(value) { - return !isValidDate(value) || isUndefined(maxVal) || parseDate(value) <= maxVal; - }; - attr.$observe('max', function(val) { - maxVal = parseObservedDateValue(val); - ctrl.$validate(); - }); - } - - function isValidDate(value) { - // Invalid Date: getTime() returns NaN - return value && !(value.getTime && value.getTime() !== value.getTime()); - } - - function parseObservedDateValue(val) { - return isDefined(val) ? (isDate(val) ? val : parseDate(val)) : undefined; - } - }; -} - -function badInputChecker(scope, element, attr, ctrl) { - var node = element[0]; - var nativeValidation = ctrl.$$hasNativeValidators = isObject(node.validity); - if (nativeValidation) { - ctrl.$parsers.push(function(value) { - var validity = element.prop(VALIDITY_STATE_PROPERTY) || {}; - // Detect bug in FF35 for input[email] (https://bugzilla.mozilla.org/show_bug.cgi?id=1064430): - // - also sets validity.badInput (should only be validity.typeMismatch). - // - see http://www.whatwg.org/specs/web-apps/current-work/multipage/forms.html#e-mail-state-(type=email) - // - can ignore this case as we can still read out the erroneous email... - return validity.badInput && !validity.typeMismatch ? undefined : value; - }); - } -} - -function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) { - badInputChecker(scope, element, attr, ctrl); - baseInputType(scope, element, attr, ctrl, $sniffer, $browser); - - ctrl.$$parserName = 'number'; - ctrl.$parsers.push(function(value) { - if (ctrl.$isEmpty(value)) return null; - if (NUMBER_REGEXP.test(value)) return parseFloat(value); - return undefined; - }); - - ctrl.$formatters.push(function(value) { - if (!ctrl.$isEmpty(value)) { - if (!isNumber(value)) { - throw $ngModelMinErr('numfmt', 'Expected `{0}` to be a number', value); - } - value = value.toString(); - } - return value; - }); - - if (attr.min || attr.ngMin) { - var minVal; - ctrl.$validators.min = function(value) { - return ctrl.$isEmpty(value) || isUndefined(minVal) || value >= minVal; - }; - - attr.$observe('min', function(val) { - if (isDefined(val) && !isNumber(val)) { - val = parseFloat(val, 10); - } - minVal = isNumber(val) && !isNaN(val) ? val : undefined; - // TODO(matsko): implement validateLater to reduce number of validations - ctrl.$validate(); - }); - } - - if (attr.max || attr.ngMax) { - var maxVal; - ctrl.$validators.max = function(value) { - return ctrl.$isEmpty(value) || isUndefined(maxVal) || value <= maxVal; - }; - - attr.$observe('max', function(val) { - if (isDefined(val) && !isNumber(val)) { - val = parseFloat(val, 10); - } - maxVal = isNumber(val) && !isNaN(val) ? val : undefined; - // TODO(matsko): implement validateLater to reduce number of validations - ctrl.$validate(); - }); - } -} - -function urlInputType(scope, element, attr, ctrl, $sniffer, $browser) { - // Note: no badInputChecker here by purpose as `url` is only a validation - // in browsers, i.e. we can always read out input.value even if it is not valid! - baseInputType(scope, element, attr, ctrl, $sniffer, $browser); - stringBasedInputType(ctrl); - - ctrl.$$parserName = 'url'; - ctrl.$validators.url = function(modelValue, viewValue) { - var value = modelValue || viewValue; - return ctrl.$isEmpty(value) || URL_REGEXP.test(value); - }; -} - -function emailInputType(scope, element, attr, ctrl, $sniffer, $browser) { - // Note: no badInputChecker here by purpose as `url` is only a validation - // in browsers, i.e. we can always read out input.value even if it is not valid! - baseInputType(scope, element, attr, ctrl, $sniffer, $browser); - stringBasedInputType(ctrl); - - ctrl.$$parserName = 'email'; - ctrl.$validators.email = function(modelValue, viewValue) { - var value = modelValue || viewValue; - return ctrl.$isEmpty(value) || EMAIL_REGEXP.test(value); - }; -} - -function radioInputType(scope, element, attr, ctrl) { - // make the name unique, if not defined - if (isUndefined(attr.name)) { - element.attr('name', nextUid()); - } - - var listener = function(ev) { - if (element[0].checked) { - ctrl.$setViewValue(attr.value, ev && ev.type); - } - }; - - element.on('click', listener); - - ctrl.$render = function() { - var value = attr.value; - element[0].checked = (value == ctrl.$viewValue); - }; - - attr.$observe('value', ctrl.$render); -} - -function parseConstantExpr($parse, context, name, expression, fallback) { - var parseFn; - if (isDefined(expression)) { - parseFn = $parse(expression); - if (!parseFn.constant) { - throw minErr('ngModel')('constexpr', 'Expected constant expression for `{0}`, but saw ' + - '`{1}`.', name, expression); - } - return parseFn(context); - } - return fallback; -} - -function checkboxInputType(scope, element, attr, ctrl, $sniffer, $browser, $filter, $parse) { - var trueValue = parseConstantExpr($parse, scope, 'ngTrueValue', attr.ngTrueValue, true); - var falseValue = parseConstantExpr($parse, scope, 'ngFalseValue', attr.ngFalseValue, false); - - var listener = function(ev) { - ctrl.$setViewValue(element[0].checked, ev && ev.type); - }; - - element.on('click', listener); - - ctrl.$render = function() { - element[0].checked = ctrl.$viewValue; - }; - - // Override the standard `$isEmpty` because the $viewValue of an empty checkbox is always set to `false` - // This is because of the parser below, which compares the `$modelValue` with `trueValue` to convert - // it to a boolean. - ctrl.$isEmpty = function(value) { - return value === false; - }; - - ctrl.$formatters.push(function(value) { - return equals(value, trueValue); - }); - - ctrl.$parsers.push(function(value) { - return value ? trueValue : falseValue; - }); -} - - -/** - * @ngdoc directive - * @name textarea - * @restrict E - * - * @description - * HTML textarea element control with angular data-binding. The data-binding and validation - * properties of this element are exactly the same as those of the - * {@link ng.directive:input input element}. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than - * minlength. - * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than - * maxlength. Setting the attribute to a negative or non-numeric value, allows view values of any - * length. - * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the - * RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for - * patterns defined as scope expressions. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * @param {boolean=} [ngTrim=true] If set to false Angular will not automatically trim the input. - */ - - -/** - * @ngdoc directive - * @name input - * @restrict E - * - * @description - * HTML input element control. When used together with {@link ngModel `ngModel`}, it provides data-binding, - * input state control, and validation. - * Input control follows HTML5 input types and polyfills the HTML5 validation behavior for older browsers. - * - * <div class="alert alert-warning"> - * **Note:** Not every feature offered is available for all input types. - * Specifically, data binding and event handling via `ng-model` is unsupported for `input[file]`. - * </div> - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {boolean=} ngRequired Sets `required` attribute if set to true - * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than - * minlength. - * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than - * maxlength. Setting the attribute to a negative or non-numeric value, allows view values of any - * length. - * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the - * RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for - * patterns defined as scope expressions. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * @param {boolean=} [ngTrim=true] If set to false Angular will not automatically trim the input. - * This parameter is ignored for input[type=password] controls, which will never trim the - * input. - * - * @example - <example name="input-directive" module="inputExample"> - <file name="index.html"> - <script> - angular.module('inputExample', []) - .controller('ExampleController', ['$scope', function($scope) { - $scope.user = {name: 'guest', last: 'visitor'}; - }]); - </script> - <div ng-controller="ExampleController"> - <form name="myForm"> - User name: <input type="text" name="userName" ng-model="user.name" required> - <span class="error" ng-show="myForm.userName.$error.required"> - Required!</span><br> - Last name: <input type="text" name="lastName" ng-model="user.last" - ng-minlength="3" ng-maxlength="10"> - <span class="error" ng-show="myForm.lastName.$error.minlength"> - Too short!</span> - <span class="error" ng-show="myForm.lastName.$error.maxlength"> - Too long!</span><br> - </form> - <hr> - <tt>user = {{user}}</tt><br/> - <tt>myForm.userName.$valid = {{myForm.userName.$valid}}</tt><br> - <tt>myForm.userName.$error = {{myForm.userName.$error}}</tt><br> - <tt>myForm.lastName.$valid = {{myForm.lastName.$valid}}</tt><br> - <tt>myForm.lastName.$error = {{myForm.lastName.$error}}</tt><br> - <tt>myForm.$valid = {{myForm.$valid}}</tt><br> - <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br> - <tt>myForm.$error.minlength = {{!!myForm.$error.minlength}}</tt><br> - <tt>myForm.$error.maxlength = {{!!myForm.$error.maxlength}}</tt><br> - </div> - </file> - <file name="protractor.js" type="protractor"> - var user = element(by.exactBinding('user')); - var userNameValid = element(by.binding('myForm.userName.$valid')); - var lastNameValid = element(by.binding('myForm.lastName.$valid')); - var lastNameError = element(by.binding('myForm.lastName.$error')); - var formValid = element(by.binding('myForm.$valid')); - var userNameInput = element(by.model('user.name')); - var userLastInput = element(by.model('user.last')); - - it('should initialize to model', function() { - expect(user.getText()).toContain('{"name":"guest","last":"visitor"}'); - expect(userNameValid.getText()).toContain('true'); - expect(formValid.getText()).toContain('true'); - }); - - it('should be invalid if empty when required', function() { - userNameInput.clear(); - userNameInput.sendKeys(''); - - expect(user.getText()).toContain('{"last":"visitor"}'); - expect(userNameValid.getText()).toContain('false'); - expect(formValid.getText()).toContain('false'); - }); - - it('should be valid if empty when min length is set', function() { - userLastInput.clear(); - userLastInput.sendKeys(''); - - expect(user.getText()).toContain('{"name":"guest","last":""}'); - expect(lastNameValid.getText()).toContain('true'); - expect(formValid.getText()).toContain('true'); - }); - - it('should be invalid if less than required min length', function() { - userLastInput.clear(); - userLastInput.sendKeys('xx'); - - expect(user.getText()).toContain('{"name":"guest"}'); - expect(lastNameValid.getText()).toContain('false'); - expect(lastNameError.getText()).toContain('minlength'); - expect(formValid.getText()).toContain('false'); - }); - - it('should be invalid if longer than max length', function() { - userLastInput.clear(); - userLastInput.sendKeys('some ridiculously long name'); - - expect(user.getText()).toContain('{"name":"guest"}'); - expect(lastNameValid.getText()).toContain('false'); - expect(lastNameError.getText()).toContain('maxlength'); - expect(formValid.getText()).toContain('false'); - }); - </file> - </example> - */ -var inputDirective = ['$browser', '$sniffer', '$filter', '$parse', - function($browser, $sniffer, $filter, $parse) { - return { - restrict: 'E', - require: ['?ngModel'], - link: { - pre: function(scope, element, attr, ctrls) { - if (ctrls[0]) { - (inputType[lowercase(attr.type)] || inputType.text)(scope, element, attr, ctrls[0], $sniffer, - $browser, $filter, $parse); - } - } - } - }; -}]; - - - -var CONSTANT_VALUE_REGEXP = /^(true|false|\d+)$/; -/** - * @ngdoc directive - * @name ngValue - * - * @description - * Binds the given expression to the value of `<option>` or {@link input[radio] `input[radio]`}, - * so that when the element is selected, the {@link ngModel `ngModel`} of that element is set to - * the bound value. - * - * `ngValue` is useful when dynamically generating lists of radio buttons using - * {@link ngRepeat `ngRepeat`}, as shown below. - * - * Likewise, `ngValue` can be used to generate `<option>` elements for - * the {@link select `select`} element. In that case however, only strings are supported - * for the `value `attribute, so the resulting `ngModel` will always be a string. - * Support for `select` models with non-string values is available via `ngOptions`. - * - * @element input - * @param {string=} ngValue angular expression, whose value will be bound to the `value` attribute - * of the `input` element - * - * @example - <example name="ngValue-directive" module="valueExample"> - <file name="index.html"> - <script> - angular.module('valueExample', []) - .controller('ExampleController', ['$scope', function($scope) { - $scope.names = ['pizza', 'unicorns', 'robots']; - $scope.my = { favorite: 'unicorns' }; - }]); - </script> - <form ng-controller="ExampleController"> - <h2>Which is your favorite?</h2> - <label ng-repeat="name in names" for="{{name}}"> - {{name}} - <input type="radio" - ng-model="my.favorite" - ng-value="name" - id="{{name}}" - name="favorite"> - </label> - <div>You chose {{my.favorite}}</div> - </form> - </file> - <file name="protractor.js" type="protractor"> - var favorite = element(by.binding('my.favorite')); - - it('should initialize to model', function() { - expect(favorite.getText()).toContain('unicorns'); - }); - it('should bind the values to the inputs', function() { - element.all(by.model('my.favorite')).get(0).click(); - expect(favorite.getText()).toContain('pizza'); - }); - </file> - </example> - */ -var ngValueDirective = function() { - return { - restrict: 'A', - priority: 100, - compile: function(tpl, tplAttr) { - if (CONSTANT_VALUE_REGEXP.test(tplAttr.ngValue)) { - return function ngValueConstantLink(scope, elm, attr) { - attr.$set('value', scope.$eval(attr.ngValue)); - }; - } else { - return function ngValueLink(scope, elm, attr) { - scope.$watch(attr.ngValue, function valueWatchAction(value) { - attr.$set('value', value); - }); - }; - } - } - }; -}; - -/** - * @ngdoc directive - * @name ngBind - * @restrict AC - * - * @description - * The `ngBind` attribute tells Angular to replace the text content of the specified HTML element - * with the value of a given expression, and to update the text content when the value of that - * expression changes. - * - * Typically, you don't use `ngBind` directly, but instead you use the double curly markup like - * `{{ expression }}` which is similar but less verbose. - * - * It is preferable to use `ngBind` instead of `{{ expression }}` if a template is momentarily - * displayed by the browser in its raw state before Angular compiles it. Since `ngBind` is an - * element attribute, it makes the bindings invisible to the user while the page is loading. - * - * An alternative solution to this problem would be using the - * {@link ng.directive:ngCloak ngCloak} directive. - * - * - * @element ANY - * @param {expression} ngBind {@link guide/expression Expression} to evaluate. - * - * @example - * Enter a name in the Live Preview text box; the greeting below the text box changes instantly. - <example module="bindExample"> - <file name="index.html"> - <script> - angular.module('bindExample', []) - .controller('ExampleController', ['$scope', function($scope) { - $scope.name = 'Whirled'; - }]); - </script> - <div ng-controller="ExampleController"> - Enter name: <input type="text" ng-model="name"><br> - Hello <span ng-bind="name"></span>! - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-bind', function() { - var nameInput = element(by.model('name')); - - expect(element(by.binding('name')).getText()).toBe('Whirled'); - nameInput.clear(); - nameInput.sendKeys('world'); - expect(element(by.binding('name')).getText()).toBe('world'); - }); - </file> - </example> - */ -var ngBindDirective = ['$compile', function($compile) { - return { - restrict: 'AC', - compile: function ngBindCompile(templateElement) { - $compile.$$addBindingClass(templateElement); - return function ngBindLink(scope, element, attr) { - $compile.$$addBindingInfo(element, attr.ngBind); - element = element[0]; - scope.$watch(attr.ngBind, function ngBindWatchAction(value) { - element.textContent = value === undefined ? '' : value; - }); - }; - } - }; -}]; - - -/** - * @ngdoc directive - * @name ngBindTemplate - * - * @description - * The `ngBindTemplate` directive specifies that the element - * text content should be replaced with the interpolation of the template - * in the `ngBindTemplate` attribute. - * Unlike `ngBind`, the `ngBindTemplate` can contain multiple `{{` `}}` - * expressions. This directive is needed since some HTML elements - * (such as TITLE and OPTION) cannot contain SPAN elements. - * - * @element ANY - * @param {string} ngBindTemplate template of form - * <tt>{{</tt> <tt>expression</tt> <tt>}}</tt> to eval. - * - * @example - * Try it here: enter text in text box and watch the greeting change. - <example module="bindExample"> - <file name="index.html"> - <script> - angular.module('bindExample', []) - .controller('ExampleController', ['$scope', function($scope) { - $scope.salutation = 'Hello'; - $scope.name = 'World'; - }]); - </script> - <div ng-controller="ExampleController"> - Salutation: <input type="text" ng-model="salutation"><br> - Name: <input type="text" ng-model="name"><br> - <pre ng-bind-template="{{salutation}} {{name}}!"></pre> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-bind', function() { - var salutationElem = element(by.binding('salutation')); - var salutationInput = element(by.model('salutation')); - var nameInput = element(by.model('name')); - - expect(salutationElem.getText()).toBe('Hello World!'); - - salutationInput.clear(); - salutationInput.sendKeys('Greetings'); - nameInput.clear(); - nameInput.sendKeys('user'); - - expect(salutationElem.getText()).toBe('Greetings user!'); - }); - </file> - </example> - */ -var ngBindTemplateDirective = ['$interpolate', '$compile', function($interpolate, $compile) { - return { - compile: function ngBindTemplateCompile(templateElement) { - $compile.$$addBindingClass(templateElement); - return function ngBindTemplateLink(scope, element, attr) { - var interpolateFn = $interpolate(element.attr(attr.$attr.ngBindTemplate)); - $compile.$$addBindingInfo(element, interpolateFn.expressions); - element = element[0]; - attr.$observe('ngBindTemplate', function(value) { - element.textContent = value === undefined ? '' : value; - }); - }; - } - }; -}]; - - -/** - * @ngdoc directive - * @name ngBindHtml - * - * @description - * Evaluates the expression and inserts the resulting HTML into the element in a secure way. By default, - * the resulting HTML content will be sanitized using the {@link ngSanitize.$sanitize $sanitize} service. - * To utilize this functionality, ensure that `$sanitize` is available, for example, by including {@link - * ngSanitize} in your module's dependencies (not in core Angular). In order to use {@link ngSanitize} - * in your module's dependencies, you need to include "angular-sanitize.js" in your application. - * - * You may also bypass sanitization for values you know are safe. To do so, bind to - * an explicitly trusted value via {@link ng.$sce#trustAsHtml $sce.trustAsHtml}. See the example - * under {@link ng.$sce#show-me-an-example-using-sce- Strict Contextual Escaping (SCE)}. - * - * Note: If a `$sanitize` service is unavailable and the bound value isn't explicitly trusted, you - * will have an exception (instead of an exploit.) - * - * @element ANY - * @param {expression} ngBindHtml {@link guide/expression Expression} to evaluate. - * - * @example - - <example module="bindHtmlExample" deps="angular-sanitize.js"> - <file name="index.html"> - <div ng-controller="ExampleController"> - <p ng-bind-html="myHTML"></p> - </div> - </file> - - <file name="script.js"> - angular.module('bindHtmlExample', ['ngSanitize']) - .controller('ExampleController', ['$scope', function($scope) { - $scope.myHTML = - 'I am an <code>HTML</code>string with ' + - '<a href="#">links!</a> and other <em>stuff</em>'; - }]); - </file> - - <file name="protractor.js" type="protractor"> - it('should check ng-bind-html', function() { - expect(element(by.binding('myHTML')).getText()).toBe( - 'I am an HTMLstring with links! and other stuff'); - }); - </file> - </example> - */ -var ngBindHtmlDirective = ['$sce', '$parse', '$compile', function($sce, $parse, $compile) { - return { - restrict: 'A', - compile: function ngBindHtmlCompile(tElement, tAttrs) { - var ngBindHtmlGetter = $parse(tAttrs.ngBindHtml); - var ngBindHtmlWatch = $parse(tAttrs.ngBindHtml, function getStringValue(value) { - return (value || '').toString(); - }); - $compile.$$addBindingClass(tElement); - - return function ngBindHtmlLink(scope, element, attr) { - $compile.$$addBindingInfo(element, attr.ngBindHtml); - - scope.$watch(ngBindHtmlWatch, function ngBindHtmlWatchAction() { - // we re-evaluate the expr because we want a TrustedValueHolderType - // for $sce, not a string - element.html($sce.getTrustedHtml(ngBindHtmlGetter(scope)) || ''); - }); - }; - } - }; -}]; - -/** - * @ngdoc directive - * @name ngChange - * - * @description - * Evaluate the given expression when the user changes the input. - * The expression is evaluated immediately, unlike the JavaScript onchange event - * which only triggers at the end of a change (usually, when the user leaves the - * form element or presses the return key). - * - * The `ngChange` expression is only evaluated when a change in the input value causes - * a new value to be committed to the model. - * - * It will not be evaluated: - * * if the value returned from the `$parsers` transformation pipeline has not changed - * * if the input has continued to be invalid since the model will stay `null` - * * if the model is changed programmatically and not by a change to the input value - * - * - * Note, this directive requires `ngModel` to be present. - * - * @element input - * @param {expression} ngChange {@link guide/expression Expression} to evaluate upon change - * in input value. - * - * @example - * <example name="ngChange-directive" module="changeExample"> - * <file name="index.html"> - * <script> - * angular.module('changeExample', []) - * .controller('ExampleController', ['$scope', function($scope) { - * $scope.counter = 0; - * $scope.change = function() { - * $scope.counter++; - * }; - * }]); - * </script> - * <div ng-controller="ExampleController"> - * <input type="checkbox" ng-model="confirmed" ng-change="change()" id="ng-change-example1" /> - * <input type="checkbox" ng-model="confirmed" id="ng-change-example2" /> - * <label for="ng-change-example2">Confirmed</label><br /> - * <tt>debug = {{confirmed}}</tt><br/> - * <tt>counter = {{counter}}</tt><br/> - * </div> - * </file> - * <file name="protractor.js" type="protractor"> - * var counter = element(by.binding('counter')); - * var debug = element(by.binding('confirmed')); - * - * it('should evaluate the expression if changing from view', function() { - * expect(counter.getText()).toContain('0'); - * - * element(by.id('ng-change-example1')).click(); - * - * expect(counter.getText()).toContain('1'); - * expect(debug.getText()).toContain('true'); - * }); - * - * it('should not evaluate the expression if changing from model', function() { - * element(by.id('ng-change-example2')).click(); - - * expect(counter.getText()).toContain('0'); - * expect(debug.getText()).toContain('true'); - * }); - * </file> - * </example> - */ -var ngChangeDirective = valueFn({ - restrict: 'A', - require: 'ngModel', - link: function(scope, element, attr, ctrl) { - ctrl.$viewChangeListeners.push(function() { - scope.$eval(attr.ngChange); - }); - } -}); - -function classDirective(name, selector) { - name = 'ngClass' + name; - return ['$animate', function($animate) { - return { - restrict: 'AC', - link: function(scope, element, attr) { - var oldVal; - - scope.$watch(attr[name], ngClassWatchAction, true); - - attr.$observe('class', function(value) { - ngClassWatchAction(scope.$eval(attr[name])); - }); - - - if (name !== 'ngClass') { - scope.$watch('$index', function($index, old$index) { - // jshint bitwise: false - var mod = $index & 1; - if (mod !== (old$index & 1)) { - var classes = arrayClasses(scope.$eval(attr[name])); - mod === selector ? - addClasses(classes) : - removeClasses(classes); - } - }); - } - - function addClasses(classes) { - var newClasses = digestClassCounts(classes, 1); - attr.$addClass(newClasses); - } - - function removeClasses(classes) { - var newClasses = digestClassCounts(classes, -1); - attr.$removeClass(newClasses); - } - - function digestClassCounts(classes, count) { - var classCounts = element.data('$classCounts') || {}; - var classesToUpdate = []; - forEach(classes, function(className) { - if (count > 0 || classCounts[className]) { - classCounts[className] = (classCounts[className] || 0) + count; - if (classCounts[className] === +(count > 0)) { - classesToUpdate.push(className); - } - } - }); - element.data('$classCounts', classCounts); - return classesToUpdate.join(' '); - } - - function updateClasses(oldClasses, newClasses) { - var toAdd = arrayDifference(newClasses, oldClasses); - var toRemove = arrayDifference(oldClasses, newClasses); - toAdd = digestClassCounts(toAdd, 1); - toRemove = digestClassCounts(toRemove, -1); - if (toAdd && toAdd.length) { - $animate.addClass(element, toAdd); - } - if (toRemove && toRemove.length) { - $animate.removeClass(element, toRemove); - } - } - - function ngClassWatchAction(newVal) { - if (selector === true || scope.$index % 2 === selector) { - var newClasses = arrayClasses(newVal || []); - if (!oldVal) { - addClasses(newClasses); - } else if (!equals(newVal,oldVal)) { - var oldClasses = arrayClasses(oldVal); - updateClasses(oldClasses, newClasses); - } - } - oldVal = shallowCopy(newVal); - } - } - }; - - function arrayDifference(tokens1, tokens2) { - var values = []; - - outer: - for (var i = 0; i < tokens1.length; i++) { - var token = tokens1[i]; - for (var j = 0; j < tokens2.length; j++) { - if (token == tokens2[j]) continue outer; - } - values.push(token); - } - return values; - } - - function arrayClasses(classVal) { - if (isArray(classVal)) { - return classVal; - } else if (isString(classVal)) { - return classVal.split(' '); - } else if (isObject(classVal)) { - var classes = []; - forEach(classVal, function(v, k) { - if (v) { - classes = classes.concat(k.split(' ')); - } - }); - return classes; - } - return classVal; - } - }]; -} - -/** - * @ngdoc directive - * @name ngClass - * @restrict AC - * - * @description - * The `ngClass` directive allows you to dynamically set CSS classes on an HTML element by databinding - * an expression that represents all classes to be added. - * - * The directive operates in three different ways, depending on which of three types the expression - * evaluates to: - * - * 1. If the expression evaluates to a string, the string should be one or more space-delimited class - * names. - * - * 2. If the expression evaluates to an array, each element of the array should be a string that is - * one or more space-delimited class names. - * - * 3. If the expression evaluates to an object, then for each key-value pair of the - * object with a truthy value the corresponding key is used as a class name. - * - * The directive won't add duplicate classes if a particular class was already set. - * - * When the expression changes, the previously added classes are removed and only then the - * new classes are added. - * - * @animations - * **add** - happens just before the class is applied to the elements - * - * **remove** - happens just before the class is removed from the element - * - * @element ANY - * @param {expression} ngClass {@link guide/expression Expression} to eval. The result - * of the evaluation can be a string representing space delimited class - * names, an array, or a map of class names to boolean values. In the case of a map, the - * names of the properties whose values are truthy will be added as css classes to the - * element. - * - * @example Example that demonstrates basic bindings via ngClass directive. - <example> - <file name="index.html"> - <p ng-class="{strike: deleted, bold: important, red: error}">Map Syntax Example</p> - <input type="checkbox" ng-model="deleted"> deleted (apply "strike" class)<br> - <input type="checkbox" ng-model="important"> important (apply "bold" class)<br> - <input type="checkbox" ng-model="error"> error (apply "red" class) - <hr> - <p ng-class="style">Using String Syntax</p> - <input type="text" ng-model="style" placeholder="Type: bold strike red"> - <hr> - <p ng-class="[style1, style2, style3]">Using Array Syntax</p> - <input ng-model="style1" placeholder="Type: bold, strike or red"><br> - <input ng-model="style2" placeholder="Type: bold, strike or red"><br> - <input ng-model="style3" placeholder="Type: bold, strike or red"><br> - </file> - <file name="style.css"> - .strike { - text-decoration: line-through; - } - .bold { - font-weight: bold; - } - .red { - color: red; - } - </file> - <file name="protractor.js" type="protractor"> - var ps = element.all(by.css('p')); - - it('should let you toggle the class', function() { - - expect(ps.first().getAttribute('class')).not.toMatch(/bold/); - expect(ps.first().getAttribute('class')).not.toMatch(/red/); - - element(by.model('important')).click(); - expect(ps.first().getAttribute('class')).toMatch(/bold/); - - element(by.model('error')).click(); - expect(ps.first().getAttribute('class')).toMatch(/red/); - }); - - it('should let you toggle string example', function() { - expect(ps.get(1).getAttribute('class')).toBe(''); - element(by.model('style')).clear(); - element(by.model('style')).sendKeys('red'); - expect(ps.get(1).getAttribute('class')).toBe('red'); - }); - - it('array example should have 3 classes', function() { - expect(ps.last().getAttribute('class')).toBe(''); - element(by.model('style1')).sendKeys('bold'); - element(by.model('style2')).sendKeys('strike'); - element(by.model('style3')).sendKeys('red'); - expect(ps.last().getAttribute('class')).toBe('bold strike red'); - }); - </file> - </example> - - ## Animations - - The example below demonstrates how to perform animations using ngClass. - - <example module="ngAnimate" deps="angular-animate.js" animations="true"> - <file name="index.html"> - <input id="setbtn" type="button" value="set" ng-click="myVar='my-class'"> - <input id="clearbtn" type="button" value="clear" ng-click="myVar=''"> - <br> - <span class="base-class" ng-class="myVar">Sample Text</span> - </file> - <file name="style.css"> - .base-class { - -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; - transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; - } - - .base-class.my-class { - color: red; - font-size:3em; - } - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-class', function() { - expect(element(by.css('.base-class')).getAttribute('class')).not. - toMatch(/my-class/); - - element(by.id('setbtn')).click(); - - expect(element(by.css('.base-class')).getAttribute('class')). - toMatch(/my-class/); - - element(by.id('clearbtn')).click(); - - expect(element(by.css('.base-class')).getAttribute('class')).not. - toMatch(/my-class/); - }); - </file> - </example> - - - ## ngClass and pre-existing CSS3 Transitions/Animations - The ngClass directive still supports CSS3 Transitions/Animations even if they do not follow the ngAnimate CSS naming structure. - Upon animation ngAnimate will apply supplementary CSS classes to track the start and end of an animation, but this will not hinder - any pre-existing CSS transitions already on the element. To get an idea of what happens during a class-based animation, be sure - to view the step by step details of {@link ng.$animate#addClass $animate.addClass} and - {@link ng.$animate#removeClass $animate.removeClass}. - */ -var ngClassDirective = classDirective('', true); - -/** - * @ngdoc directive - * @name ngClassOdd - * @restrict AC - * - * @description - * The `ngClassOdd` and `ngClassEven` directives work exactly as - * {@link ng.directive:ngClass ngClass}, except they work in - * conjunction with `ngRepeat` and take effect only on odd (even) rows. - * - * This directive can be applied only within the scope of an - * {@link ng.directive:ngRepeat ngRepeat}. - * - * @element ANY - * @param {expression} ngClassOdd {@link guide/expression Expression} to eval. The result - * of the evaluation can be a string representing space delimited class names or an array. - * - * @example - <example> - <file name="index.html"> - <ol ng-init="names=['John', 'Mary', 'Cate', 'Suz']"> - <li ng-repeat="name in names"> - <span ng-class-odd="'odd'" ng-class-even="'even'"> - {{name}} - </span> - </li> - </ol> - </file> - <file name="style.css"> - .odd { - color: red; - } - .even { - color: blue; - } - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-class-odd and ng-class-even', function() { - expect(element(by.repeater('name in names').row(0).column('name')).getAttribute('class')). - toMatch(/odd/); - expect(element(by.repeater('name in names').row(1).column('name')).getAttribute('class')). - toMatch(/even/); - }); - </file> - </example> - */ -var ngClassOddDirective = classDirective('Odd', 0); - -/** - * @ngdoc directive - * @name ngClassEven - * @restrict AC - * - * @description - * The `ngClassOdd` and `ngClassEven` directives work exactly as - * {@link ng.directive:ngClass ngClass}, except they work in - * conjunction with `ngRepeat` and take effect only on odd (even) rows. - * - * This directive can be applied only within the scope of an - * {@link ng.directive:ngRepeat ngRepeat}. - * - * @element ANY - * @param {expression} ngClassEven {@link guide/expression Expression} to eval. The - * result of the evaluation can be a string representing space delimited class names or an array. - * - * @example - <example> - <file name="index.html"> - <ol ng-init="names=['John', 'Mary', 'Cate', 'Suz']"> - <li ng-repeat="name in names"> - <span ng-class-odd="'odd'" ng-class-even="'even'"> - {{name}} - </span> - </li> - </ol> - </file> - <file name="style.css"> - .odd { - color: red; - } - .even { - color: blue; - } - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-class-odd and ng-class-even', function() { - expect(element(by.repeater('name in names').row(0).column('name')).getAttribute('class')). - toMatch(/odd/); - expect(element(by.repeater('name in names').row(1).column('name')).getAttribute('class')). - toMatch(/even/); - }); - </file> - </example> - */ -var ngClassEvenDirective = classDirective('Even', 1); - -/** - * @ngdoc directive - * @name ngCloak - * @restrict AC - * - * @description - * The `ngCloak` directive is used to prevent the Angular html template from being briefly - * displayed by the browser in its raw (uncompiled) form while your application is loading. Use this - * directive to avoid the undesirable flicker effect caused by the html template display. - * - * The directive can be applied to the `<body>` element, but the preferred usage is to apply - * multiple `ngCloak` directives to small portions of the page to permit progressive rendering - * of the browser view. - * - * `ngCloak` works in cooperation with the following css rule embedded within `angular.js` and - * `angular.min.js`. - * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}). - * - * ```css - * [ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak { - * display: none !important; - * } - * ``` - * - * When this css rule is loaded by the browser, all html elements (including their children) that - * are tagged with the `ngCloak` directive are hidden. When Angular encounters this directive - * during the compilation of the template it deletes the `ngCloak` element attribute, making - * the compiled element visible. - * - * For the best result, the `angular.js` script must be loaded in the head section of the html - * document; alternatively, the css rule above must be included in the external stylesheet of the - * application. - * - * Legacy browsers, like IE7, do not provide attribute selector support (added in CSS 2.1) so they - * cannot match the `[ng\:cloak]` selector. To work around this limitation, you must add the css - * class `ng-cloak` in addition to the `ngCloak` directive as shown in the example below. - * - * @element ANY - * - * @example - <example> - <file name="index.html"> - <div id="template1" ng-cloak>{{ 'hello' }}</div> - <div id="template2" ng-cloak class="ng-cloak">{{ 'hello IE7' }}</div> - </file> - <file name="protractor.js" type="protractor"> - it('should remove the template directive and css class', function() { - expect($('#template1').getAttribute('ng-cloak')). - toBeNull(); - expect($('#template2').getAttribute('ng-cloak')). - toBeNull(); - }); - </file> - </example> - * - */ -var ngCloakDirective = ngDirective({ - compile: function(element, attr) { - attr.$set('ngCloak', undefined); - element.removeClass('ng-cloak'); - } -}); - -/** - * @ngdoc directive - * @name ngController - * - * @description - * The `ngController` directive attaches a controller class to the view. This is a key aspect of how angular - * supports the principles behind the Model-View-Controller design pattern. - * - * MVC components in angular: - * - * * Model — Models are the properties of a scope; scopes are attached to the DOM where scope properties - * are accessed through bindings. - * * View — The template (HTML with data bindings) that is rendered into the View. - * * Controller — The `ngController` directive specifies a Controller class; the class contains business - * logic behind the application to decorate the scope with functions and values - * - * Note that you can also attach controllers to the DOM by declaring it in a route definition - * via the {@link ngRoute.$route $route} service. A common mistake is to declare the controller - * again using `ng-controller` in the template itself. This will cause the controller to be attached - * and executed twice. - * - * @element ANY - * @scope - * @priority 500 - * @param {expression} ngController Name of a constructor function registered with the current - * {@link ng.$controllerProvider $controllerProvider} or an {@link guide/expression expression} - * that on the current scope evaluates to a constructor function. - * - * The controller instance can be published into a scope property by specifying - * `ng-controller="as propertyName"`. - * - * If the current `$controllerProvider` is configured to use globals (via - * {@link ng.$controllerProvider#allowGlobals `$controllerProvider.allowGlobals()` }), this may - * also be the name of a globally accessible constructor function (not recommended). - * - * @example - * Here is a simple form for editing user contact information. Adding, removing, clearing, and - * greeting are methods declared on the controller (see source tab). These methods can - * easily be called from the angular markup. Any changes to the data are automatically reflected - * in the View without the need for a manual update. - * - * Two different declaration styles are included below: - * - * * one binds methods and properties directly onto the controller using `this`: - * `ng-controller="SettingsController1 as settings"` - * * one injects `$scope` into the controller: - * `ng-controller="SettingsController2"` - * - * The second option is more common in the Angular community, and is generally used in boilerplates - * and in this guide. However, there are advantages to binding properties directly to the controller - * and avoiding scope. - * - * * Using `controller as` makes it obvious which controller you are accessing in the template when - * multiple controllers apply to an element. - * * If you are writing your controllers as classes you have easier access to the properties and - * methods, which will appear on the scope, from inside the controller code. - * * Since there is always a `.` in the bindings, you don't have to worry about prototypal - * inheritance masking primitives. - * - * This example demonstrates the `controller as` syntax. - * - * <example name="ngControllerAs" module="controllerAsExample"> - * <file name="index.html"> - * <div id="ctrl-as-exmpl" ng-controller="SettingsController1 as settings"> - * Name: <input type="text" ng-model="settings.name"/> - * [ <a href="" ng-click="settings.greet()">greet</a> ]<br/> - * Contact: - * <ul> - * <li ng-repeat="contact in settings.contacts"> - * <select ng-model="contact.type"> - * <option>phone</option> - * <option>email</option> - * </select> - * <input type="text" ng-model="contact.value"/> - * [ <a href="" ng-click="settings.clearContact(contact)">clear</a> - * | <a href="" ng-click="settings.removeContact(contact)">X</a> ] - * </li> - * <li>[ <a href="" ng-click="settings.addContact()">add</a> ]</li> - * </ul> - * </div> - * </file> - * <file name="app.js"> - * angular.module('controllerAsExample', []) - * .controller('SettingsController1', SettingsController1); - * - * function SettingsController1() { - * this.name = "John Smith"; - * this.contacts = [ - * {type: 'phone', value: '408 555 1212'}, - * {type: 'email', value: 'john.smith@example.org'} ]; - * } - * - * SettingsController1.prototype.greet = function() { - * alert(this.name); - * }; - * - * SettingsController1.prototype.addContact = function() { - * this.contacts.push({type: 'email', value: 'yourname@example.org'}); - * }; - * - * SettingsController1.prototype.removeContact = function(contactToRemove) { - * var index = this.contacts.indexOf(contactToRemove); - * this.contacts.splice(index, 1); - * }; - * - * SettingsController1.prototype.clearContact = function(contact) { - * contact.type = 'phone'; - * contact.value = ''; - * }; - * </file> - * <file name="protractor.js" type="protractor"> - * it('should check controller as', function() { - * var container = element(by.id('ctrl-as-exmpl')); - * expect(container.element(by.model('settings.name')) - * .getAttribute('value')).toBe('John Smith'); - * - * var firstRepeat = - * container.element(by.repeater('contact in settings.contacts').row(0)); - * var secondRepeat = - * container.element(by.repeater('contact in settings.contacts').row(1)); - * - * expect(firstRepeat.element(by.model('contact.value')).getAttribute('value')) - * .toBe('408 555 1212'); - * - * expect(secondRepeat.element(by.model('contact.value')).getAttribute('value')) - * .toBe('john.smith@example.org'); - * - * firstRepeat.element(by.linkText('clear')).click(); - * - * expect(firstRepeat.element(by.model('contact.value')).getAttribute('value')) - * .toBe(''); - * - * container.element(by.linkText('add')).click(); - * - * expect(container.element(by.repeater('contact in settings.contacts').row(2)) - * .element(by.model('contact.value')) - * .getAttribute('value')) - * .toBe('yourname@example.org'); - * }); - * </file> - * </example> - * - * This example demonstrates the "attach to `$scope`" style of controller. - * - * <example name="ngController" module="controllerExample"> - * <file name="index.html"> - * <div id="ctrl-exmpl" ng-controller="SettingsController2"> - * Name: <input type="text" ng-model="name"/> - * [ <a href="" ng-click="greet()">greet</a> ]<br/> - * Contact: - * <ul> - * <li ng-repeat="contact in contacts"> - * <select ng-model="contact.type"> - * <option>phone</option> - * <option>email</option> - * </select> - * <input type="text" ng-model="contact.value"/> - * [ <a href="" ng-click="clearContact(contact)">clear</a> - * | <a href="" ng-click="removeContact(contact)">X</a> ] - * </li> - * <li>[ <a href="" ng-click="addContact()">add</a> ]</li> - * </ul> - * </div> - * </file> - * <file name="app.js"> - * angular.module('controllerExample', []) - * .controller('SettingsController2', ['$scope', SettingsController2]); - * - * function SettingsController2($scope) { - * $scope.name = "John Smith"; - * $scope.contacts = [ - * {type:'phone', value:'408 555 1212'}, - * {type:'email', value:'john.smith@example.org'} ]; - * - * $scope.greet = function() { - * alert($scope.name); - * }; - * - * $scope.addContact = function() { - * $scope.contacts.push({type:'email', value:'yourname@example.org'}); - * }; - * - * $scope.removeContact = function(contactToRemove) { - * var index = $scope.contacts.indexOf(contactToRemove); - * $scope.contacts.splice(index, 1); - * }; - * - * $scope.clearContact = function(contact) { - * contact.type = 'phone'; - * contact.value = ''; - * }; - * } - * </file> - * <file name="protractor.js" type="protractor"> - * it('should check controller', function() { - * var container = element(by.id('ctrl-exmpl')); - * - * expect(container.element(by.model('name')) - * .getAttribute('value')).toBe('John Smith'); - * - * var firstRepeat = - * container.element(by.repeater('contact in contacts').row(0)); - * var secondRepeat = - * container.element(by.repeater('contact in contacts').row(1)); - * - * expect(firstRepeat.element(by.model('contact.value')).getAttribute('value')) - * .toBe('408 555 1212'); - * expect(secondRepeat.element(by.model('contact.value')).getAttribute('value')) - * .toBe('john.smith@example.org'); - * - * firstRepeat.element(by.linkText('clear')).click(); - * - * expect(firstRepeat.element(by.model('contact.value')).getAttribute('value')) - * .toBe(''); - * - * container.element(by.linkText('add')).click(); - * - * expect(container.element(by.repeater('contact in contacts').row(2)) - * .element(by.model('contact.value')) - * .getAttribute('value')) - * .toBe('yourname@example.org'); - * }); - * </file> - *</example> - - */ -var ngControllerDirective = [function() { - return { - restrict: 'A', - scope: true, - controller: '@', - priority: 500 - }; -}]; - -/** - * @ngdoc directive - * @name ngCsp - * - * @element html - * @description - * Enables [CSP (Content Security Policy)](https://developer.mozilla.org/en/Security/CSP) support. - * - * This is necessary when developing things like Google Chrome Extensions or Universal Windows Apps. - * - * CSP forbids apps to use `eval` or `Function(string)` generated functions (among other things). - * For Angular to be CSP compatible there are only two things that we need to do differently: - * - * - don't use `Function` constructor to generate optimized value getters - * - don't inject custom stylesheet into the document - * - * AngularJS uses `Function(string)` generated functions as a speed optimization. Applying the `ngCsp` - * directive will cause Angular to use CSP compatibility mode. When this mode is on AngularJS will - * evaluate all expressions up to 30% slower than in non-CSP mode, but no security violations will - * be raised. - * - * CSP forbids JavaScript to inline stylesheet rules. In non CSP mode Angular automatically - * includes some CSS rules (e.g. {@link ng.directive:ngCloak ngCloak}). - * To make those directives work in CSP mode, include the `angular-csp.css` manually. - * - * Angular tries to autodetect if CSP is active and automatically turn on the CSP-safe mode. This - * autodetection however triggers a CSP error to be logged in the console: - * - * ``` - * Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of - * script in the following Content Security Policy directive: "default-src 'self'". Note that - * 'script-src' was not explicitly set, so 'default-src' is used as a fallback. - * ``` - * - * This error is harmless but annoying. To prevent the error from showing up, put the `ngCsp` - * directive on the root element of the application or on the `angular.js` script tag, whichever - * appears first in the html document. - * - * *Note: This directive is only available in the `ng-csp` and `data-ng-csp` attribute form.* - * - * @example - * This example shows how to apply the `ngCsp` directive to the `html` tag. - ```html - <!doctype html> - <html ng-app ng-csp> - ... - ... - </html> - ``` - * @example - // Note: the suffix `.csp` in the example name triggers - // csp mode in our http server! - <example name="example.csp" module="cspExample" ng-csp="true"> - <file name="index.html"> - <div ng-controller="MainController as ctrl"> - <div> - <button ng-click="ctrl.inc()" id="inc">Increment</button> - <span id="counter"> - {{ctrl.counter}} - </span> - </div> - - <div> - <button ng-click="ctrl.evil()" id="evil">Evil</button> - <span id="evilError"> - {{ctrl.evilError}} - </span> - </div> - </div> - </file> - <file name="script.js"> - angular.module('cspExample', []) - .controller('MainController', function() { - this.counter = 0; - this.inc = function() { - this.counter++; - }; - this.evil = function() { - // jshint evil:true - try { - eval('1+2'); - } catch (e) { - this.evilError = e.message; - } - }; - }); - </file> - <file name="protractor.js" type="protractor"> - var util, webdriver; - - var incBtn = element(by.id('inc')); - var counter = element(by.id('counter')); - var evilBtn = element(by.id('evil')); - var evilError = element(by.id('evilError')); - - function getAndClearSevereErrors() { - return browser.manage().logs().get('browser').then(function(browserLog) { - return browserLog.filter(function(logEntry) { - return logEntry.level.value > webdriver.logging.Level.WARNING.value; - }); - }); - } - - function clearErrors() { - getAndClearSevereErrors(); - } - - function expectNoErrors() { - getAndClearSevereErrors().then(function(filteredLog) { - expect(filteredLog.length).toEqual(0); - if (filteredLog.length) { - console.log('browser console errors: ' + util.inspect(filteredLog)); - } - }); - } - - function expectError(regex) { - getAndClearSevereErrors().then(function(filteredLog) { - var found = false; - filteredLog.forEach(function(log) { - if (log.message.match(regex)) { - found = true; - } - }); - if (!found) { - throw new Error('expected an error that matches ' + regex); - } - }); - } - - beforeEach(function() { - util = require('util'); - webdriver = require('protractor/node_modules/selenium-webdriver'); - }); - - // For now, we only test on Chrome, - // as Safari does not load the page with Protractor's injected scripts, - // and Firefox webdriver always disables content security policy (#6358) - if (browser.params.browser !== 'chrome') { - return; - } - - it('should not report errors when the page is loaded', function() { - // clear errors so we are not dependent on previous tests - clearErrors(); - // Need to reload the page as the page is already loaded when - // we come here - browser.driver.getCurrentUrl().then(function(url) { - browser.get(url); - }); - expectNoErrors(); - }); - - it('should evaluate expressions', function() { - expect(counter.getText()).toEqual('0'); - incBtn.click(); - expect(counter.getText()).toEqual('1'); - expectNoErrors(); - }); - - it('should throw and report an error when using "eval"', function() { - evilBtn.click(); - expect(evilError.getText()).toMatch(/Content Security Policy/); - expectError(/Content Security Policy/); - }); - </file> - </example> - */ - -// ngCsp is not implemented as a proper directive any more, because we need it be processed while we -// bootstrap the system (before $parse is instantiated), for this reason we just have -// the csp.isActive() fn that looks for ng-csp attribute anywhere in the current doc - -/** - * @ngdoc directive - * @name ngClick - * - * @description - * The ngClick directive allows you to specify custom behavior when - * an element is clicked. - * - * @element ANY - * @priority 0 - * @param {expression} ngClick {@link guide/expression Expression} to evaluate upon - * click. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <button ng-click="count = count + 1" ng-init="count=0"> - Increment - </button> - <span> - count: {{count}} - </span> - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-click', function() { - expect(element(by.binding('count')).getText()).toMatch('0'); - element(by.css('button')).click(); - expect(element(by.binding('count')).getText()).toMatch('1'); - }); - </file> - </example> - */ -/* - * A collection of directives that allows creation of custom event handlers that are defined as - * angular expressions and are compiled and executed within the current scope. - */ -var ngEventDirectives = {}; - -// For events that might fire synchronously during DOM manipulation -// we need to execute their event handlers asynchronously using $evalAsync, -// so that they are not executed in an inconsistent state. -var forceAsyncEvents = { - 'blur': true, - 'focus': true -}; -forEach( - 'click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste'.split(' '), - function(eventName) { - var directiveName = directiveNormalize('ng-' + eventName); - ngEventDirectives[directiveName] = ['$parse', '$rootScope', function($parse, $rootScope) { - return { - restrict: 'A', - compile: function($element, attr) { - // We expose the powerful $event object on the scope that provides access to the Window, - // etc. that isn't protected by the fast paths in $parse. We explicitly request better - // checks at the cost of speed since event handler expressions are not executed as - // frequently as regular change detection. - var fn = $parse(attr[directiveName], /* interceptorFn */ null, /* expensiveChecks */ true); - return function ngEventHandler(scope, element) { - element.on(eventName, function(event) { - var callback = function() { - fn(scope, {$event:event}); - }; - if (forceAsyncEvents[eventName] && $rootScope.$$phase) { - scope.$evalAsync(callback); - } else { - scope.$apply(callback); - } - }); - }; - } - }; - }]; - } -); - -/** - * @ngdoc directive - * @name ngDblclick - * - * @description - * The `ngDblclick` directive allows you to specify custom behavior on a dblclick event. - * - * @element ANY - * @priority 0 - * @param {expression} ngDblclick {@link guide/expression Expression} to evaluate upon - * a dblclick. (The Event object is available as `$event`) - * - * @example - <example> - <file name="index.html"> - <button ng-dblclick="count = count + 1" ng-init="count=0"> - Increment (on double click) - </button> - count: {{count}} - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngMousedown - * - * @description - * The ngMousedown directive allows you to specify custom behavior on mousedown event. - * - * @element ANY - * @priority 0 - * @param {expression} ngMousedown {@link guide/expression Expression} to evaluate upon - * mousedown. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <button ng-mousedown="count = count + 1" ng-init="count=0"> - Increment (on mouse down) - </button> - count: {{count}} - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngMouseup - * - * @description - * Specify custom behavior on mouseup event. - * - * @element ANY - * @priority 0 - * @param {expression} ngMouseup {@link guide/expression Expression} to evaluate upon - * mouseup. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <button ng-mouseup="count = count + 1" ng-init="count=0"> - Increment (on mouse up) - </button> - count: {{count}} - </file> - </example> - */ - -/** - * @ngdoc directive - * @name ngMouseover - * - * @description - * Specify custom behavior on mouseover event. - * - * @element ANY - * @priority 0 - * @param {expression} ngMouseover {@link guide/expression Expression} to evaluate upon - * mouseover. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <button ng-mouseover="count = count + 1" ng-init="count=0"> - Increment (when mouse is over) - </button> - count: {{count}} - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngMouseenter - * - * @description - * Specify custom behavior on mouseenter event. - * - * @element ANY - * @priority 0 - * @param {expression} ngMouseenter {@link guide/expression Expression} to evaluate upon - * mouseenter. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <button ng-mouseenter="count = count + 1" ng-init="count=0"> - Increment (when mouse enters) - </button> - count: {{count}} - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngMouseleave - * - * @description - * Specify custom behavior on mouseleave event. - * - * @element ANY - * @priority 0 - * @param {expression} ngMouseleave {@link guide/expression Expression} to evaluate upon - * mouseleave. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <button ng-mouseleave="count = count + 1" ng-init="count=0"> - Increment (when mouse leaves) - </button> - count: {{count}} - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngMousemove - * - * @description - * Specify custom behavior on mousemove event. - * - * @element ANY - * @priority 0 - * @param {expression} ngMousemove {@link guide/expression Expression} to evaluate upon - * mousemove. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <button ng-mousemove="count = count + 1" ng-init="count=0"> - Increment (when mouse moves) - </button> - count: {{count}} - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngKeydown - * - * @description - * Specify custom behavior on keydown event. - * - * @element ANY - * @priority 0 - * @param {expression} ngKeydown {@link guide/expression Expression} to evaluate upon - * keydown. (Event object is available as `$event` and can be interrogated for keyCode, altKey, etc.) - * - * @example - <example> - <file name="index.html"> - <input ng-keydown="count = count + 1" ng-init="count=0"> - key down count: {{count}} - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngKeyup - * - * @description - * Specify custom behavior on keyup event. - * - * @element ANY - * @priority 0 - * @param {expression} ngKeyup {@link guide/expression Expression} to evaluate upon - * keyup. (Event object is available as `$event` and can be interrogated for keyCode, altKey, etc.) - * - * @example - <example> - <file name="index.html"> - <p>Typing in the input box below updates the key count</p> - <input ng-keyup="count = count + 1" ng-init="count=0"> key up count: {{count}} - - <p>Typing in the input box below updates the keycode</p> - <input ng-keyup="event=$event"> - <p>event keyCode: {{ event.keyCode }}</p> - <p>event altKey: {{ event.altKey }}</p> - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngKeypress - * - * @description - * Specify custom behavior on keypress event. - * - * @element ANY - * @param {expression} ngKeypress {@link guide/expression Expression} to evaluate upon - * keypress. ({@link guide/expression#-event- Event object is available as `$event`} - * and can be interrogated for keyCode, altKey, etc.) - * - * @example - <example> - <file name="index.html"> - <input ng-keypress="count = count + 1" ng-init="count=0"> - key press count: {{count}} - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngSubmit - * - * @description - * Enables binding angular expressions to onsubmit events. - * - * Additionally it prevents the default action (which for form means sending the request to the - * server and reloading the current page), but only if the form does not contain `action`, - * `data-action`, or `x-action` attributes. - * - * <div class="alert alert-warning"> - * **Warning:** Be careful not to cause "double-submission" by using both the `ngClick` and - * `ngSubmit` handlers together. See the - * {@link form#submitting-a-form-and-preventing-the-default-action `form` directive documentation} - * for a detailed discussion of when `ngSubmit` may be triggered. - * </div> - * - * @element form - * @priority 0 - * @param {expression} ngSubmit {@link guide/expression Expression} to eval. - * ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example module="submitExample"> - <file name="index.html"> - <script> - angular.module('submitExample', []) - .controller('ExampleController', ['$scope', function($scope) { - $scope.list = []; - $scope.text = 'hello'; - $scope.submit = function() { - if ($scope.text) { - $scope.list.push(this.text); - $scope.text = ''; - } - }; - }]); - </script> - <form ng-submit="submit()" ng-controller="ExampleController"> - Enter text and hit enter: - <input type="text" ng-model="text" name="text" /> - <input type="submit" id="submit" value="Submit" /> - <pre>list={{list}}</pre> - </form> - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-submit', function() { - expect(element(by.binding('list')).getText()).toBe('list=[]'); - element(by.css('#submit')).click(); - expect(element(by.binding('list')).getText()).toContain('hello'); - expect(element(by.model('text')).getAttribute('value')).toBe(''); - }); - it('should ignore empty strings', function() { - expect(element(by.binding('list')).getText()).toBe('list=[]'); - element(by.css('#submit')).click(); - element(by.css('#submit')).click(); - expect(element(by.binding('list')).getText()).toContain('hello'); - }); - </file> - </example> - */ - -/** - * @ngdoc directive - * @name ngFocus - * - * @description - * Specify custom behavior on focus event. - * - * Note: As the `focus` event is executed synchronously when calling `input.focus()` - * AngularJS executes the expression using `scope.$evalAsync` if the event is fired - * during an `$apply` to ensure a consistent state. - * - * @element window, input, select, textarea, a - * @priority 0 - * @param {expression} ngFocus {@link guide/expression Expression} to evaluate upon - * focus. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - * See {@link ng.directive:ngClick ngClick} - */ - -/** - * @ngdoc directive - * @name ngBlur - * - * @description - * Specify custom behavior on blur event. - * - * A [blur event](https://developer.mozilla.org/en-US/docs/Web/Events/blur) fires when - * an element has lost focus. - * - * Note: As the `blur` event is executed synchronously also during DOM manipulations - * (e.g. removing a focussed input), - * AngularJS executes the expression using `scope.$evalAsync` if the event is fired - * during an `$apply` to ensure a consistent state. - * - * @element window, input, select, textarea, a - * @priority 0 - * @param {expression} ngBlur {@link guide/expression Expression} to evaluate upon - * blur. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - * See {@link ng.directive:ngClick ngClick} - */ - -/** - * @ngdoc directive - * @name ngCopy - * - * @description - * Specify custom behavior on copy event. - * - * @element window, input, select, textarea, a - * @priority 0 - * @param {expression} ngCopy {@link guide/expression Expression} to evaluate upon - * copy. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <input ng-copy="copied=true" ng-init="copied=false; value='copy me'" ng-model="value"> - copied: {{copied}} - </file> - </example> - */ - -/** - * @ngdoc directive - * @name ngCut - * - * @description - * Specify custom behavior on cut event. - * - * @element window, input, select, textarea, a - * @priority 0 - * @param {expression} ngCut {@link guide/expression Expression} to evaluate upon - * cut. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <input ng-cut="cut=true" ng-init="cut=false; value='cut me'" ng-model="value"> - cut: {{cut}} - </file> - </example> - */ - -/** - * @ngdoc directive - * @name ngPaste - * - * @description - * Specify custom behavior on paste event. - * - * @element window, input, select, textarea, a - * @priority 0 - * @param {expression} ngPaste {@link guide/expression Expression} to evaluate upon - * paste. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <input ng-paste="paste=true" ng-init="paste=false" placeholder='paste here'> - pasted: {{paste}} - </file> - </example> - */ - -/** - * @ngdoc directive - * @name ngIf - * @restrict A - * - * @description - * The `ngIf` directive removes or recreates a portion of the DOM tree based on an - * {expression}. If the expression assigned to `ngIf` evaluates to a false - * value then the element is removed from the DOM, otherwise a clone of the - * element is reinserted into the DOM. - * - * `ngIf` differs from `ngShow` and `ngHide` in that `ngIf` completely removes and recreates the - * element in the DOM rather than changing its visibility via the `display` css property. A common - * case when this difference is significant is when using css selectors that rely on an element's - * position within the DOM, such as the `:first-child` or `:last-child` pseudo-classes. - * - * Note that when an element is removed using `ngIf` its scope is destroyed and a new scope - * is created when the element is restored. The scope created within `ngIf` inherits from - * its parent scope using - * [prototypal inheritance](https://github.com/angular/angular.js/wiki/Understanding-Scopes#javascript-prototypal-inheritance). - * An important implication of this is if `ngModel` is used within `ngIf` to bind to - * a javascript primitive defined in the parent scope. In this case any modifications made to the - * variable within the child scope will override (hide) the value in the parent scope. - * - * Also, `ngIf` recreates elements using their compiled state. An example of this behavior - * is if an element's class attribute is directly modified after it's compiled, using something like - * jQuery's `.addClass()` method, and the element is later removed. When `ngIf` recreates the element - * the added class will be lost because the original compiled state is used to regenerate the element. - * - * Additionally, you can provide animations via the `ngAnimate` module to animate the `enter` - * and `leave` effects. - * - * @animations - * enter - happens just after the `ngIf` contents change and a new DOM element is created and injected into the `ngIf` container - * leave - happens just before the `ngIf` contents are removed from the DOM - * - * @element ANY - * @scope - * @priority 600 - * @param {expression} ngIf If the {@link guide/expression expression} is falsy then - * the element is removed from the DOM tree. If it is truthy a copy of the compiled - * element is added to the DOM tree. - * - * @example - <example module="ngAnimate" deps="angular-animate.js" animations="true"> - <file name="index.html"> - Click me: <input type="checkbox" ng-model="checked" ng-init="checked=true" /><br/> - Show when checked: - <span ng-if="checked" class="animate-if"> - This is removed when the checkbox is unchecked. - </span> - </file> - <file name="animations.css"> - .animate-if { - background:white; - border:1px solid black; - padding:10px; - } - - .animate-if.ng-enter, .animate-if.ng-leave { - -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; - transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; - } - - .animate-if.ng-enter, - .animate-if.ng-leave.ng-leave-active { - opacity:0; - } - - .animate-if.ng-leave, - .animate-if.ng-enter.ng-enter-active { - opacity:1; - } - </file> - </example> - */ -var ngIfDirective = ['$animate', function($animate) { - return { - multiElement: true, - transclude: 'element', - priority: 600, - terminal: true, - restrict: 'A', - $$tlb: true, - link: function($scope, $element, $attr, ctrl, $transclude) { - var block, childScope, previousElements; - $scope.$watch($attr.ngIf, function ngIfWatchAction(value) { - - if (value) { - if (!childScope) { - $transclude(function(clone, newScope) { - childScope = newScope; - clone[clone.length++] = document.createComment(' end ngIf: ' + $attr.ngIf + ' '); - // Note: We only need the first/last node of the cloned nodes. - // However, we need to keep the reference to the jqlite wrapper as it might be changed later - // by a directive with templateUrl when its template arrives. - block = { - clone: clone - }; - $animate.enter(clone, $element.parent(), $element); - }); - } - } else { - if (previousElements) { - previousElements.remove(); - previousElements = null; - } - if (childScope) { - childScope.$destroy(); - childScope = null; - } - if (block) { - previousElements = getBlockNodes(block.clone); - $animate.leave(previousElements).then(function() { - previousElements = null; - }); - block = null; - } - } - }); - } - }; -}]; - -/** - * @ngdoc directive - * @name ngInclude - * @restrict ECA - * - * @description - * Fetches, compiles and includes an external HTML fragment. - * - * By default, the template URL is restricted to the same domain and protocol as the - * application document. This is done by calling {@link $sce#getTrustedResourceUrl - * $sce.getTrustedResourceUrl} on it. To load templates from other domains or protocols - * you may either {@link ng.$sceDelegateProvider#resourceUrlWhitelist whitelist them} or - * {@link $sce#trustAsResourceUrl wrap them} as trusted values. Refer to Angular's {@link - * ng.$sce Strict Contextual Escaping}. - * - * In addition, the browser's - * [Same Origin Policy](https://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest) - * and [Cross-Origin Resource Sharing (CORS)](http://www.w3.org/TR/cors/) - * policy may further restrict whether the template is successfully loaded. - * For example, `ngInclude` won't work for cross-domain requests on all browsers and for `file://` - * access on some browsers. - * - * @animations - * enter - animation is used to bring new content into the browser. - * leave - animation is used to animate existing content away. - * - * The enter and leave animation occur concurrently. - * - * @scope - * @priority 400 - * - * @param {string} ngInclude|src angular expression evaluating to URL. If the source is a string constant, - * make sure you wrap it in **single** quotes, e.g. `src="'myPartialTemplate.html'"`. - * @param {string=} onload Expression to evaluate when a new partial is loaded. - * - * @param {string=} autoscroll Whether `ngInclude` should call {@link ng.$anchorScroll - * $anchorScroll} to scroll the viewport after the content is loaded. - * - * - If the attribute is not set, disable scrolling. - * - If the attribute is set without value, enable scrolling. - * - Otherwise enable scrolling only if the expression evaluates to truthy value. - * - * @example - <example module="includeExample" deps="angular-animate.js" animations="true"> - <file name="index.html"> - <div ng-controller="ExampleController"> - <select ng-model="template" ng-options="t.name for t in templates"> - <option value="">(blank)</option> - </select> - url of the template: <code>{{template.url}}</code> - <hr/> - <div class="slide-animate-container"> - <div class="slide-animate" ng-include="template.url"></div> - </div> - </div> - </file> - <file name="script.js"> - angular.module('includeExample', ['ngAnimate']) - .controller('ExampleController', ['$scope', function($scope) { - $scope.templates = - [ { name: 'template1.html', url: 'template1.html'}, - { name: 'template2.html', url: 'template2.html'} ]; - $scope.template = $scope.templates[0]; - }]); - </file> - <file name="template1.html"> - Content of template1.html - </file> - <file name="template2.html"> - Content of template2.html - </file> - <file name="animations.css"> - .slide-animate-container { - position:relative; - background:white; - border:1px solid black; - height:40px; - overflow:hidden; - } - - .slide-animate { - padding:10px; - } - - .slide-animate.ng-enter, .slide-animate.ng-leave { - -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; - transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; - - position:absolute; - top:0; - left:0; - right:0; - bottom:0; - display:block; - padding:10px; - } - - .slide-animate.ng-enter { - top:-50px; - } - .slide-animate.ng-enter.ng-enter-active { - top:0; - } - - .slide-animate.ng-leave { - top:0; - } - .slide-animate.ng-leave.ng-leave-active { - top:50px; - } - </file> - <file name="protractor.js" type="protractor"> - var templateSelect = element(by.model('template')); - var includeElem = element(by.css('[ng-include]')); - - it('should load template1.html', function() { - expect(includeElem.getText()).toMatch(/Content of template1.html/); - }); - - it('should load template2.html', function() { - if (browser.params.browser == 'firefox') { - // Firefox can't handle using selects - // See https://github.com/angular/protractor/issues/480 - return; - } - templateSelect.click(); - templateSelect.all(by.css('option')).get(2).click(); - expect(includeElem.getText()).toMatch(/Content of template2.html/); - }); - - it('should change to blank', function() { - if (browser.params.browser == 'firefox') { - // Firefox can't handle using selects - return; - } - templateSelect.click(); - templateSelect.all(by.css('option')).get(0).click(); - expect(includeElem.isPresent()).toBe(false); - }); - </file> - </example> - */ - - -/** - * @ngdoc event - * @name ngInclude#$includeContentRequested - * @eventType emit on the scope ngInclude was declared in - * @description - * Emitted every time the ngInclude content is requested. - * - * @param {Object} angularEvent Synthetic event object. - * @param {String} src URL of content to load. - */ - - -/** - * @ngdoc event - * @name ngInclude#$includeContentLoaded - * @eventType emit on the current ngInclude scope - * @description - * Emitted every time the ngInclude content is reloaded. - * - * @param {Object} angularEvent Synthetic event object. - * @param {String} src URL of content to load. - */ - - -/** - * @ngdoc event - * @name ngInclude#$includeContentError - * @eventType emit on the scope ngInclude was declared in - * @description - * Emitted when a template HTTP request yields an erroneous response (status < 200 || status > 299) - * - * @param {Object} angularEvent Synthetic event object. - * @param {String} src URL of content to load. - */ -var ngIncludeDirective = ['$templateRequest', '$anchorScroll', '$animate', '$sce', - function($templateRequest, $anchorScroll, $animate, $sce) { - return { - restrict: 'ECA', - priority: 400, - terminal: true, - transclude: 'element', - controller: angular.noop, - compile: function(element, attr) { - var srcExp = attr.ngInclude || attr.src, - onloadExp = attr.onload || '', - autoScrollExp = attr.autoscroll; - - return function(scope, $element, $attr, ctrl, $transclude) { - var changeCounter = 0, - currentScope, - previousElement, - currentElement; - - var cleanupLastIncludeContent = function() { - if (previousElement) { - previousElement.remove(); - previousElement = null; - } - if (currentScope) { - currentScope.$destroy(); - currentScope = null; - } - if (currentElement) { - $animate.leave(currentElement).then(function() { - previousElement = null; - }); - previousElement = currentElement; - currentElement = null; - } - }; - - scope.$watch($sce.parseAsResourceUrl(srcExp), function ngIncludeWatchAction(src) { - var afterAnimation = function() { - if (isDefined(autoScrollExp) && (!autoScrollExp || scope.$eval(autoScrollExp))) { - $anchorScroll(); - } - }; - var thisChangeId = ++changeCounter; - - if (src) { - //set the 2nd param to true to ignore the template request error so that the inner - //contents and scope can be cleaned up. - $templateRequest(src, true).then(function(response) { - if (thisChangeId !== changeCounter) return; - var newScope = scope.$new(); - ctrl.template = response; - - // Note: This will also link all children of ng-include that were contained in the original - // html. If that content contains controllers, ... they could pollute/change the scope. - // However, using ng-include on an element with additional content does not make sense... - // Note: We can't remove them in the cloneAttchFn of $transclude as that - // function is called before linking the content, which would apply child - // directives to non existing elements. - var clone = $transclude(newScope, function(clone) { - cleanupLastIncludeContent(); - $animate.enter(clone, null, $element).then(afterAnimation); - }); - - currentScope = newScope; - currentElement = clone; - - currentScope.$emit('$includeContentLoaded', src); - scope.$eval(onloadExp); - }, function() { - if (thisChangeId === changeCounter) { - cleanupLastIncludeContent(); - scope.$emit('$includeContentError', src); - } - }); - scope.$emit('$includeContentRequested', src); - } else { - cleanupLastIncludeContent(); - ctrl.template = null; - } - }); - }; - } - }; -}]; - -// This directive is called during the $transclude call of the first `ngInclude` directive. -// It will replace and compile the content of the element with the loaded template. -// We need this directive so that the element content is already filled when -// the link function of another directive on the same element as ngInclude -// is called. -var ngIncludeFillContentDirective = ['$compile', - function($compile) { - return { - restrict: 'ECA', - priority: -400, - require: 'ngInclude', - link: function(scope, $element, $attr, ctrl) { - if (/SVG/.test($element[0].toString())) { - // WebKit: https://bugs.webkit.org/show_bug.cgi?id=135698 --- SVG elements do not - // support innerHTML, so detect this here and try to generate the contents - // specially. - $element.empty(); - $compile(jqLiteBuildFragment(ctrl.template, document).childNodes)(scope, - function namespaceAdaptedClone(clone) { - $element.append(clone); - }, {futureParentElement: $element}); - return; - } - - $element.html(ctrl.template); - $compile($element.contents())(scope); - } - }; - }]; - -/** - * @ngdoc directive - * @name ngInit - * @restrict AC - * - * @description - * The `ngInit` directive allows you to evaluate an expression in the - * current scope. - * - * <div class="alert alert-error"> - * The only appropriate use of `ngInit` is for aliasing special properties of - * {@link ng.directive:ngRepeat `ngRepeat`}, as seen in the demo below. Besides this case, you - * should use {@link guide/controller controllers} rather than `ngInit` - * to initialize values on a scope. - * </div> - * <div class="alert alert-warning"> - * **Note**: If you have assignment in `ngInit` along with {@link ng.$filter `$filter`}, make - * sure you have parenthesis for correct precedence: - * <pre class="prettyprint"> - * `<div ng-init="test1 = (data | orderBy:'name')"></div>` - * </pre> - * </div> - * - * @priority 450 - * - * @element ANY - * @param {expression} ngInit {@link guide/expression Expression} to eval. - * - * @example - <example module="initExample"> - <file name="index.html"> - <script> - angular.module('initExample', []) - .controller('ExampleController', ['$scope', function($scope) { - $scope.list = [['a', 'b'], ['c', 'd']]; - }]); - </script> - <div ng-controller="ExampleController"> - <div ng-repeat="innerList in list" ng-init="outerIndex = $index"> - <div ng-repeat="value in innerList" ng-init="innerIndex = $index"> - <span class="example-init">list[ {{outerIndex}} ][ {{innerIndex}} ] = {{value}};</span> - </div> - </div> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should alias index positions', function() { - var elements = element.all(by.css('.example-init')); - expect(elements.get(0).getText()).toBe('list[ 0 ][ 0 ] = a;'); - expect(elements.get(1).getText()).toBe('list[ 0 ][ 1 ] = b;'); - expect(elements.get(2).getText()).toBe('list[ 1 ][ 0 ] = c;'); - expect(elements.get(3).getText()).toBe('list[ 1 ][ 1 ] = d;'); - }); - </file> - </example> - */ -var ngInitDirective = ngDirective({ - priority: 450, - compile: function() { - return { - pre: function(scope, element, attrs) { - scope.$eval(attrs.ngInit); - } - }; - } -}); - -/** - * @ngdoc directive - * @name ngList - * - * @description - * Text input that converts between a delimited string and an array of strings. The default - * delimiter is a comma followed by a space - equivalent to `ng-list=", "`. You can specify a custom - * delimiter as the value of the `ngList` attribute - for example, `ng-list=" | "`. - * - * The behaviour of the directive is affected by the use of the `ngTrim` attribute. - * * If `ngTrim` is set to `"false"` then whitespace around both the separator and each - * list item is respected. This implies that the user of the directive is responsible for - * dealing with whitespace but also allows you to use whitespace as a delimiter, such as a - * tab or newline character. - * * Otherwise whitespace around the delimiter is ignored when splitting (although it is respected - * when joining the list items back together) and whitespace around each list item is stripped - * before it is added to the model. - * - * ### Example with Validation - * - * <example name="ngList-directive" module="listExample"> - * <file name="app.js"> - * angular.module('listExample', []) - * .controller('ExampleController', ['$scope', function($scope) { - * $scope.names = ['morpheus', 'neo', 'trinity']; - * }]); - * </file> - * <file name="index.html"> - * <form name="myForm" ng-controller="ExampleController"> - * List: <input name="namesInput" ng-model="names" ng-list required> - * <span class="error" ng-show="myForm.namesInput.$error.required"> - * Required!</span> - * <br> - * <tt>names = {{names}}</tt><br/> - * <tt>myForm.namesInput.$valid = {{myForm.namesInput.$valid}}</tt><br/> - * <tt>myForm.namesInput.$error = {{myForm.namesInput.$error}}</tt><br/> - * <tt>myForm.$valid = {{myForm.$valid}}</tt><br/> - * <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/> - * </form> - * </file> - * <file name="protractor.js" type="protractor"> - * var listInput = element(by.model('names')); - * var names = element(by.exactBinding('names')); - * var valid = element(by.binding('myForm.namesInput.$valid')); - * var error = element(by.css('span.error')); - * - * it('should initialize to model', function() { - * expect(names.getText()).toContain('["morpheus","neo","trinity"]'); - * expect(valid.getText()).toContain('true'); - * expect(error.getCssValue('display')).toBe('none'); - * }); - * - * it('should be invalid if empty', function() { - * listInput.clear(); - * listInput.sendKeys(''); - * - * expect(names.getText()).toContain(''); - * expect(valid.getText()).toContain('false'); - * expect(error.getCssValue('display')).not.toBe('none'); - * }); - * </file> - * </example> - * - * ### Example - splitting on whitespace - * <example name="ngList-directive-newlines"> - * <file name="index.html"> - * <textarea ng-model="list" ng-list=" " ng-trim="false"></textarea> - * <pre>{{ list | json }}</pre> - * </file> - * <file name="protractor.js" type="protractor"> - * it("should split the text by newlines", function() { - * var listInput = element(by.model('list')); - * var output = element(by.binding('list | json')); - * listInput.sendKeys('abc\ndef\nghi'); - * expect(output.getText()).toContain('[\n "abc",\n "def",\n "ghi"\n]'); - * }); - * </file> - * </example> - * - * @element input - * @param {string=} ngList optional delimiter that should be used to split the value. - */ -var ngListDirective = function() { - return { - restrict: 'A', - priority: 100, - require: 'ngModel', - link: function(scope, element, attr, ctrl) { - // We want to control whitespace trimming so we use this convoluted approach - // to access the ngList attribute, which doesn't pre-trim the attribute - var ngList = element.attr(attr.$attr.ngList) || ', '; - var trimValues = attr.ngTrim !== 'false'; - var separator = trimValues ? trim(ngList) : ngList; - - var parse = function(viewValue) { - // If the viewValue is invalid (say required but empty) it will be `undefined` - if (isUndefined(viewValue)) return; - - var list = []; - - if (viewValue) { - forEach(viewValue.split(separator), function(value) { - if (value) list.push(trimValues ? trim(value) : value); - }); - } - - return list; - }; - - ctrl.$parsers.push(parse); - ctrl.$formatters.push(function(value) { - if (isArray(value)) { - return value.join(ngList); - } - - return undefined; - }); - - // Override the standard $isEmpty because an empty array means the input is empty. - ctrl.$isEmpty = function(value) { - return !value || !value.length; - }; - } - }; -}; - -/* global VALID_CLASS: true, - INVALID_CLASS: true, - PRISTINE_CLASS: true, - DIRTY_CLASS: true, - UNTOUCHED_CLASS: true, - TOUCHED_CLASS: true, -*/ - -var VALID_CLASS = 'ng-valid', - INVALID_CLASS = 'ng-invalid', - PRISTINE_CLASS = 'ng-pristine', - DIRTY_CLASS = 'ng-dirty', - UNTOUCHED_CLASS = 'ng-untouched', - TOUCHED_CLASS = 'ng-touched', - PENDING_CLASS = 'ng-pending'; - - -var $ngModelMinErr = new minErr('ngModel'); - -/** - * @ngdoc type - * @name ngModel.NgModelController - * - * @property {string} $viewValue Actual string value in the view. - * @property {*} $modelValue The value in the model that the control is bound to. - * @property {Array.<Function>} $parsers Array of functions to execute, as a pipeline, whenever - the control reads value from the DOM. The functions are called in array order, each passing - its return value through to the next. The last return value is forwarded to the - {@link ngModel.NgModelController#$validators `$validators`} collection. - -Parsers are used to sanitize / convert the {@link ngModel.NgModelController#$viewValue -`$viewValue`}. - -Returning `undefined` from a parser means a parse error occurred. In that case, -no {@link ngModel.NgModelController#$validators `$validators`} will run and the `ngModel` -will be set to `undefined` unless {@link ngModelOptions `ngModelOptions.allowInvalid`} -is set to `true`. The parse error is stored in `ngModel.$error.parse`. - - * - * @property {Array.<Function>} $formatters Array of functions to execute, as a pipeline, whenever - the model value changes. The functions are called in reverse array order, each passing the value through to the - next. The last return value is used as the actual DOM value. - Used to format / convert values for display in the control. - * ```js - * function formatter(value) { - * if (value) { - * return value.toUpperCase(); - * } - * } - * ngModel.$formatters.push(formatter); - * ``` - * - * @property {Object.<string, function>} $validators A collection of validators that are applied - * whenever the model value changes. The key value within the object refers to the name of the - * validator while the function refers to the validation operation. The validation operation is - * provided with the model value as an argument and must return a true or false value depending - * on the response of that validation. - * - * ```js - * ngModel.$validators.validCharacters = function(modelValue, viewValue) { - * var value = modelValue || viewValue; - * return /[0-9]+/.test(value) && - * /[a-z]+/.test(value) && - * /[A-Z]+/.test(value) && - * /\W+/.test(value); - * }; - * ``` - * - * @property {Object.<string, function>} $asyncValidators A collection of validations that are expected to - * perform an asynchronous validation (e.g. a HTTP request). The validation function that is provided - * is expected to return a promise when it is run during the model validation process. Once the promise - * is delivered then the validation status will be set to true when fulfilled and false when rejected. - * When the asynchronous validators are triggered, each of the validators will run in parallel and the model - * value will only be updated once all validators have been fulfilled. As long as an asynchronous validator - * is unfulfilled, its key will be added to the controllers `$pending` property. Also, all asynchronous validators - * will only run once all synchronous validators have passed. - * - * Please note that if $http is used then it is important that the server returns a success HTTP response code - * in order to fulfill the validation and a status level of `4xx` in order to reject the validation. - * - * ```js - * ngModel.$asyncValidators.uniqueUsername = function(modelValue, viewValue) { - * var value = modelValue || viewValue; - * - * // Lookup user by username - * return $http.get('/api/users/' + value). - * then(function resolved() { - * //username exists, this means validation fails - * return $q.reject('exists'); - * }, function rejected() { - * //username does not exist, therefore this validation passes - * return true; - * }); - * }; - * ``` - * - * @property {Array.<Function>} $viewChangeListeners Array of functions to execute whenever the - * view value has changed. It is called with no arguments, and its return value is ignored. - * This can be used in place of additional $watches against the model value. - * - * @property {Object} $error An object hash with all failing validator ids as keys. - * @property {Object} $pending An object hash with all pending validator ids as keys. - * - * @property {boolean} $untouched True if control has not lost focus yet. - * @property {boolean} $touched True if control has lost focus. - * @property {boolean} $pristine True if user has not interacted with the control yet. - * @property {boolean} $dirty True if user has already interacted with the control. - * @property {boolean} $valid True if there is no error. - * @property {boolean} $invalid True if at least one error on the control. - * @property {string} $name The name attribute of the control. - * - * @description - * - * `NgModelController` provides API for the {@link ngModel `ngModel`} directive. - * The controller contains services for data-binding, validation, CSS updates, and value formatting - * and parsing. It purposefully does not contain any logic which deals with DOM rendering or - * listening to DOM events. - * Such DOM related logic should be provided by other directives which make use of - * `NgModelController` for data-binding to control elements. - * Angular provides this DOM logic for most {@link input `input`} elements. - * At the end of this page you can find a {@link ngModel.NgModelController#custom-control-example - * custom control example} that uses `ngModelController` to bind to `contenteditable` elements. - * - * @example - * ### Custom Control Example - * This example shows how to use `NgModelController` with a custom control to achieve - * data-binding. Notice how different directives (`contenteditable`, `ng-model`, and `required`) - * collaborate together to achieve the desired result. - * - * Note that `contenteditable` is an HTML5 attribute, which tells the browser to let the element - * contents be edited in place by the user. This will not work on older browsers. - * - * We are using the {@link ng.service:$sce $sce} service here and include the {@link ngSanitize $sanitize} - * module to automatically remove "bad" content like inline event listener (e.g. `<span onclick="...">`). - * However, as we are using `$sce` the model can still decide to provide unsafe content if it marks - * that content using the `$sce` service. - * - * <example name="NgModelController" module="customControl" deps="angular-sanitize.js"> - <file name="style.css"> - [contenteditable] { - border: 1px solid black; - background-color: white; - min-height: 20px; - } - - .ng-invalid { - border: 1px solid red; - } - - </file> - <file name="script.js"> - angular.module('customControl', ['ngSanitize']). - directive('contenteditable', ['$sce', function($sce) { - return { - restrict: 'A', // only activate on element attribute - require: '?ngModel', // get a hold of NgModelController - link: function(scope, element, attrs, ngModel) { - if (!ngModel) return; // do nothing if no ng-model - - // Specify how UI should be updated - ngModel.$render = function() { - element.html($sce.getTrustedHtml(ngModel.$viewValue || '')); - }; - - // Listen for change events to enable binding - element.on('blur keyup change', function() { - scope.$evalAsync(read); - }); - read(); // initialize - - // Write data to the model - function read() { - var html = element.html(); - // When we clear the content editable the browser leaves a <br> behind - // If strip-br attribute is provided then we strip this out - if ( attrs.stripBr && html == '<br>' ) { - html = ''; - } - ngModel.$setViewValue(html); - } - } - }; - }]); - </file> - <file name="index.html"> - <form name="myForm"> - <div contenteditable - name="myWidget" ng-model="userContent" - strip-br="true" - required>Change me!</div> - <span ng-show="myForm.myWidget.$error.required">Required!</span> - <hr> - <textarea ng-model="userContent"></textarea> - </form> - </file> - <file name="protractor.js" type="protractor"> - it('should data-bind and become invalid', function() { - if (browser.params.browser == 'safari' || browser.params.browser == 'firefox') { - // SafariDriver can't handle contenteditable - // and Firefox driver can't clear contenteditables very well - return; - } - var contentEditable = element(by.css('[contenteditable]')); - var content = 'Change me!'; - - expect(contentEditable.getText()).toEqual(content); - - contentEditable.clear(); - contentEditable.sendKeys(protractor.Key.BACK_SPACE); - expect(contentEditable.getText()).toEqual(''); - expect(contentEditable.getAttribute('class')).toMatch(/ng-invalid-required/); - }); - </file> - * </example> - * - * - */ -var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$parse', '$animate', '$timeout', '$rootScope', '$q', '$interpolate', - function($scope, $exceptionHandler, $attr, $element, $parse, $animate, $timeout, $rootScope, $q, $interpolate) { - this.$viewValue = Number.NaN; - this.$modelValue = Number.NaN; - this.$$rawModelValue = undefined; // stores the parsed modelValue / model set from scope regardless of validity. - this.$validators = {}; - this.$asyncValidators = {}; - this.$parsers = []; - this.$formatters = []; - this.$viewChangeListeners = []; - this.$untouched = true; - this.$touched = false; - this.$pristine = true; - this.$dirty = false; - this.$valid = true; - this.$invalid = false; - this.$error = {}; // keep invalid keys here - this.$$success = {}; // keep valid keys here - this.$pending = undefined; // keep pending keys here - this.$name = $interpolate($attr.name || '', false)($scope); - - - var parsedNgModel = $parse($attr.ngModel), - parsedNgModelAssign = parsedNgModel.assign, - ngModelGet = parsedNgModel, - ngModelSet = parsedNgModelAssign, - pendingDebounce = null, - ctrl = this; - - this.$$setOptions = function(options) { - ctrl.$options = options; - if (options && options.getterSetter) { - var invokeModelGetter = $parse($attr.ngModel + '()'), - invokeModelSetter = $parse($attr.ngModel + '($$$p)'); - - ngModelGet = function($scope) { - var modelValue = parsedNgModel($scope); - if (isFunction(modelValue)) { - modelValue = invokeModelGetter($scope); - } - return modelValue; - }; - ngModelSet = function($scope, newValue) { - if (isFunction(parsedNgModel($scope))) { - invokeModelSetter($scope, {$$$p: ctrl.$modelValue}); - } else { - parsedNgModelAssign($scope, ctrl.$modelValue); - } - }; - } else if (!parsedNgModel.assign) { - throw $ngModelMinErr('nonassign', "Expression '{0}' is non-assignable. Element: {1}", - $attr.ngModel, startingTag($element)); - } - }; - - /** - * @ngdoc method - * @name ngModel.NgModelController#$render - * - * @description - * Called when the view needs to be updated. It is expected that the user of the ng-model - * directive will implement this method. - * - * The `$render()` method is invoked in the following situations: - * - * * `$rollbackViewValue()` is called. If we are rolling back the view value to the last - * committed value then `$render()` is called to update the input control. - * * The value referenced by `ng-model` is changed programmatically and both the `$modelValue` and - * the `$viewValue` are different to last time. - * - * Since `ng-model` does not do a deep watch, `$render()` is only invoked if the values of - * `$modelValue` and `$viewValue` are actually different to their previous value. If `$modelValue` - * or `$viewValue` are objects (rather than a string or number) then `$render()` will not be - * invoked if you only change a property on the objects. - */ - this.$render = noop; - - /** - * @ngdoc method - * @name ngModel.NgModelController#$isEmpty - * - * @description - * This is called when we need to determine if the value of an input is empty. - * - * For instance, the required directive does this to work out if the input has data or not. - * - * The default `$isEmpty` function checks whether the value is `undefined`, `''`, `null` or `NaN`. - * - * You can override this for input directives whose concept of being empty is different to the - * default. The `checkboxInputType` directive does this because in its case a value of `false` - * implies empty. - * - * @param {*} value The value of the input to check for emptiness. - * @returns {boolean} True if `value` is "empty". - */ - this.$isEmpty = function(value) { - return isUndefined(value) || value === '' || value === null || value !== value; - }; - - var parentForm = $element.inheritedData('$formController') || nullFormCtrl, - currentValidationRunId = 0; - - /** - * @ngdoc method - * @name ngModel.NgModelController#$setValidity - * - * @description - * Change the validity state, and notify the form. - * - * This method can be called within $parsers/$formatters or a custom validation implementation. - * However, in most cases it should be sufficient to use the `ngModel.$validators` and - * `ngModel.$asyncValidators` collections which will call `$setValidity` automatically. - * - * @param {string} validationErrorKey Name of the validator. The `validationErrorKey` will be assigned - * to either `$error[validationErrorKey]` or `$pending[validationErrorKey]` - * (for unfulfilled `$asyncValidators`), so that it is available for data-binding. - * The `validationErrorKey` should be in camelCase and will get converted into dash-case - * for class name. Example: `myError` will result in `ng-valid-my-error` and `ng-invalid-my-error` - * class and can be bound to as `{{someForm.someControl.$error.myError}}` . - * @param {boolean} isValid Whether the current state is valid (true), invalid (false), pending (undefined), - * or skipped (null). Pending is used for unfulfilled `$asyncValidators`. - * Skipped is used by Angular when validators do not run because of parse errors and - * when `$asyncValidators` do not run because any of the `$validators` failed. - */ - addSetValidityMethod({ - ctrl: this, - $element: $element, - set: function(object, property) { - object[property] = true; - }, - unset: function(object, property) { - delete object[property]; - }, - parentForm: parentForm, - $animate: $animate - }); - - /** - * @ngdoc method - * @name ngModel.NgModelController#$setPristine - * - * @description - * Sets the control to its pristine state. - * - * This method can be called to remove the `ng-dirty` class and set the control to its pristine - * state (`ng-pristine` class). A model is considered to be pristine when the control - * has not been changed from when first compiled. - */ - this.$setPristine = function() { - ctrl.$dirty = false; - ctrl.$pristine = true; - $animate.removeClass($element, DIRTY_CLASS); - $animate.addClass($element, PRISTINE_CLASS); - }; - - /** - * @ngdoc method - * @name ngModel.NgModelController#$setDirty - * - * @description - * Sets the control to its dirty state. - * - * This method can be called to remove the `ng-pristine` class and set the control to its dirty - * state (`ng-dirty` class). A model is considered to be dirty when the control has been changed - * from when first compiled. - */ - this.$setDirty = function() { - ctrl.$dirty = true; - ctrl.$pristine = false; - $animate.removeClass($element, PRISTINE_CLASS); - $animate.addClass($element, DIRTY_CLASS); - parentForm.$setDirty(); - }; - - /** - * @ngdoc method - * @name ngModel.NgModelController#$setUntouched - * - * @description - * Sets the control to its untouched state. - * - * This method can be called to remove the `ng-touched` class and set the control to its - * untouched state (`ng-untouched` class). Upon compilation, a model is set as untouched - * by default, however this function can be used to restore that state if the model has - * already been touched by the user. - */ - this.$setUntouched = function() { - ctrl.$touched = false; - ctrl.$untouched = true; - $animate.setClass($element, UNTOUCHED_CLASS, TOUCHED_CLASS); - }; - - /** - * @ngdoc method - * @name ngModel.NgModelController#$setTouched - * - * @description - * Sets the control to its touched state. - * - * This method can be called to remove the `ng-untouched` class and set the control to its - * touched state (`ng-touched` class). A model is considered to be touched when the user has - * first focused the control element and then shifted focus away from the control (blur event). - */ - this.$setTouched = function() { - ctrl.$touched = true; - ctrl.$untouched = false; - $animate.setClass($element, TOUCHED_CLASS, UNTOUCHED_CLASS); - }; - - /** - * @ngdoc method - * @name ngModel.NgModelController#$rollbackViewValue - * - * @description - * Cancel an update and reset the input element's value to prevent an update to the `$modelValue`, - * which may be caused by a pending debounced event or because the input is waiting for a some - * future event. - * - * If you have an input that uses `ng-model-options` to set up debounced events or events such - * as blur you can have a situation where there is a period when the `$viewValue` - * is out of synch with the ngModel's `$modelValue`. - * - * In this case, you can run into difficulties if you try to update the ngModel's `$modelValue` - * programmatically before these debounced/future events have resolved/occurred, because Angular's - * dirty checking mechanism is not able to tell whether the model has actually changed or not. - * - * The `$rollbackViewValue()` method should be called before programmatically changing the model of an - * input which may have such events pending. This is important in order to make sure that the - * input field will be updated with the new model value and any pending operations are cancelled. - * - * <example name="ng-model-cancel-update" module="cancel-update-example"> - * <file name="app.js"> - * angular.module('cancel-update-example', []) - * - * .controller('CancelUpdateController', ['$scope', function($scope) { - * $scope.resetWithCancel = function(e) { - * if (e.keyCode == 27) { - * $scope.myForm.myInput1.$rollbackViewValue(); - * $scope.myValue = ''; - * } - * }; - * $scope.resetWithoutCancel = function(e) { - * if (e.keyCode == 27) { - * $scope.myValue = ''; - * } - * }; - * }]); - * </file> - * <file name="index.html"> - * <div ng-controller="CancelUpdateController"> - * <p>Try typing something in each input. See that the model only updates when you - * blur off the input. - * </p> - * <p>Now see what happens if you start typing then press the Escape key</p> - * - * <form name="myForm" ng-model-options="{ updateOn: 'blur' }"> - * <p>With $rollbackViewValue()</p> - * <input name="myInput1" ng-model="myValue" ng-keydown="resetWithCancel($event)"><br/> - * myValue: "{{ myValue }}" - * - * <p>Without $rollbackViewValue()</p> - * <input name="myInput2" ng-model="myValue" ng-keydown="resetWithoutCancel($event)"><br/> - * myValue: "{{ myValue }}" - * </form> - * </div> - * </file> - * </example> - */ - this.$rollbackViewValue = function() { - $timeout.cancel(pendingDebounce); - ctrl.$viewValue = ctrl.$$lastCommittedViewValue; - ctrl.$render(); - }; - - /** - * @ngdoc method - * @name ngModel.NgModelController#$validate - * - * @description - * Runs each of the registered validators (first synchronous validators and then - * asynchronous validators). - * If the validity changes to invalid, the model will be set to `undefined`, - * unless {@link ngModelOptions `ngModelOptions.allowInvalid`} is `true`. - * If the validity changes to valid, it will set the model to the last available valid - * modelValue, i.e. either the last parsed value or the last value set from the scope. - */ - this.$validate = function() { - // ignore $validate before model is initialized - if (isNumber(ctrl.$modelValue) && isNaN(ctrl.$modelValue)) { - return; - } - - var viewValue = ctrl.$$lastCommittedViewValue; - // Note: we use the $$rawModelValue as $modelValue might have been - // set to undefined during a view -> model update that found validation - // errors. We can't parse the view here, since that could change - // the model although neither viewValue nor the model on the scope changed - var modelValue = ctrl.$$rawModelValue; - - // Check if the there's a parse error, so we don't unset it accidentially - var parserName = ctrl.$$parserName || 'parse'; - var parserValid = ctrl.$error[parserName] ? false : undefined; - - var prevValid = ctrl.$valid; - var prevModelValue = ctrl.$modelValue; - - var allowInvalid = ctrl.$options && ctrl.$options.allowInvalid; - - ctrl.$$runValidators(parserValid, modelValue, viewValue, function(allValid) { - // If there was no change in validity, don't update the model - // This prevents changing an invalid modelValue to undefined - if (!allowInvalid && prevValid !== allValid) { - // Note: Don't check ctrl.$valid here, as we could have - // external validators (e.g. calculated on the server), - // that just call $setValidity and need the model value - // to calculate their validity. - ctrl.$modelValue = allValid ? modelValue : undefined; - - if (ctrl.$modelValue !== prevModelValue) { - ctrl.$$writeModelToScope(); - } - } - }); - - }; - - this.$$runValidators = function(parseValid, modelValue, viewValue, doneCallback) { - currentValidationRunId++; - var localValidationRunId = currentValidationRunId; - - // check parser error - if (!processParseErrors(parseValid)) { - validationDone(false); - return; - } - if (!processSyncValidators()) { - validationDone(false); - return; - } - processAsyncValidators(); - - function processParseErrors(parseValid) { - var errorKey = ctrl.$$parserName || 'parse'; - if (parseValid === undefined) { - setValidity(errorKey, null); - } else { - setValidity(errorKey, parseValid); - if (!parseValid) { - forEach(ctrl.$validators, function(v, name) { - setValidity(name, null); - }); - forEach(ctrl.$asyncValidators, function(v, name) { - setValidity(name, null); - }); - return false; - } - } - return true; - } - - function processSyncValidators() { - var syncValidatorsValid = true; - forEach(ctrl.$validators, function(validator, name) { - var result = validator(modelValue, viewValue); - syncValidatorsValid = syncValidatorsValid && result; - setValidity(name, result); - }); - if (!syncValidatorsValid) { - forEach(ctrl.$asyncValidators, function(v, name) { - setValidity(name, null); - }); - return false; - } - return true; - } - - function processAsyncValidators() { - var validatorPromises = []; - var allValid = true; - forEach(ctrl.$asyncValidators, function(validator, name) { - var promise = validator(modelValue, viewValue); - if (!isPromiseLike(promise)) { - throw $ngModelMinErr("$asyncValidators", - "Expected asynchronous validator to return a promise but got '{0}' instead.", promise); - } - setValidity(name, undefined); - validatorPromises.push(promise.then(function() { - setValidity(name, true); - }, function(error) { - allValid = false; - setValidity(name, false); - })); - }); - if (!validatorPromises.length) { - validationDone(true); - } else { - $q.all(validatorPromises).then(function() { - validationDone(allValid); - }, noop); - } - } - - function setValidity(name, isValid) { - if (localValidationRunId === currentValidationRunId) { - ctrl.$setValidity(name, isValid); - } - } - - function validationDone(allValid) { - if (localValidationRunId === currentValidationRunId) { - - doneCallback(allValid); - } - } - }; - - /** - * @ngdoc method - * @name ngModel.NgModelController#$commitViewValue - * - * @description - * Commit a pending update to the `$modelValue`. - * - * Updates may be pending by a debounced event or because the input is waiting for a some future - * event defined in `ng-model-options`. this method is rarely needed as `NgModelController` - * usually handles calling this in response to input events. - */ - this.$commitViewValue = function() { - var viewValue = ctrl.$viewValue; - - $timeout.cancel(pendingDebounce); - - // If the view value has not changed then we should just exit, except in the case where there is - // a native validator on the element. In this case the validation state may have changed even though - // the viewValue has stayed empty. - if (ctrl.$$lastCommittedViewValue === viewValue && (viewValue !== '' || !ctrl.$$hasNativeValidators)) { - return; - } - ctrl.$$lastCommittedViewValue = viewValue; - - // change to dirty - if (ctrl.$pristine) { - this.$setDirty(); - } - this.$$parseAndValidate(); - }; - - this.$$parseAndValidate = function() { - var viewValue = ctrl.$$lastCommittedViewValue; - var modelValue = viewValue; - var parserValid = isUndefined(modelValue) ? undefined : true; - - if (parserValid) { - for (var i = 0; i < ctrl.$parsers.length; i++) { - modelValue = ctrl.$parsers[i](modelValue); - if (isUndefined(modelValue)) { - parserValid = false; - break; - } - } - } - if (isNumber(ctrl.$modelValue) && isNaN(ctrl.$modelValue)) { - // ctrl.$modelValue has not been touched yet... - ctrl.$modelValue = ngModelGet($scope); - } - var prevModelValue = ctrl.$modelValue; - var allowInvalid = ctrl.$options && ctrl.$options.allowInvalid; - ctrl.$$rawModelValue = modelValue; - - if (allowInvalid) { - ctrl.$modelValue = modelValue; - writeToModelIfNeeded(); - } - - // Pass the $$lastCommittedViewValue here, because the cached viewValue might be out of date. - // This can happen if e.g. $setViewValue is called from inside a parser - ctrl.$$runValidators(parserValid, modelValue, ctrl.$$lastCommittedViewValue, function(allValid) { - if (!allowInvalid) { - // Note: Don't check ctrl.$valid here, as we could have - // external validators (e.g. calculated on the server), - // that just call $setValidity and need the model value - // to calculate their validity. - ctrl.$modelValue = allValid ? modelValue : undefined; - writeToModelIfNeeded(); - } - }); - - function writeToModelIfNeeded() { - if (ctrl.$modelValue !== prevModelValue) { - ctrl.$$writeModelToScope(); - } - } - }; - - this.$$writeModelToScope = function() { - ngModelSet($scope, ctrl.$modelValue); - forEach(ctrl.$viewChangeListeners, function(listener) { - try { - listener(); - } catch (e) { - $exceptionHandler(e); - } - }); - }; - - /** - * @ngdoc method - * @name ngModel.NgModelController#$setViewValue - * - * @description - * Update the view value. - * - * This method should be called when an input directive want to change the view value; typically, - * this is done from within a DOM event handler. - * - * For example {@link ng.directive:input input} calls it when the value of the input changes and - * {@link ng.directive:select select} calls it when an option is selected. - * - * If the new `value` is an object (rather than a string or a number), we should make a copy of the - * object before passing it to `$setViewValue`. This is because `ngModel` does not perform a deep - * watch of objects, it only looks for a change of identity. If you only change the property of - * the object then ngModel will not realise that the object has changed and will not invoke the - * `$parsers` and `$validators` pipelines. - * - * For this reason, you should not change properties of the copy once it has been passed to - * `$setViewValue`. Otherwise you may cause the model value on the scope to change incorrectly. - * - * When this method is called, the new `value` will be staged for committing through the `$parsers` - * and `$validators` pipelines. If there are no special {@link ngModelOptions} specified then the staged - * value sent directly for processing, finally to be applied to `$modelValue` and then the - * **expression** specified in the `ng-model` attribute. - * - * Lastly, all the registered change listeners, in the `$viewChangeListeners` list, are called. - * - * In case the {@link ng.directive:ngModelOptions ngModelOptions} directive is used with `updateOn` - * and the `default` trigger is not listed, all those actions will remain pending until one of the - * `updateOn` events is triggered on the DOM element. - * All these actions will be debounced if the {@link ng.directive:ngModelOptions ngModelOptions} - * directive is used with a custom debounce for this particular event. - * - * Note that calling this function does not trigger a `$digest`. - * - * @param {string} value Value from the view. - * @param {string} trigger Event that triggered the update. - */ - this.$setViewValue = function(value, trigger) { - ctrl.$viewValue = value; - if (!ctrl.$options || ctrl.$options.updateOnDefault) { - ctrl.$$debounceViewValueCommit(trigger); - } - }; - - this.$$debounceViewValueCommit = function(trigger) { - var debounceDelay = 0, - options = ctrl.$options, - debounce; - - if (options && isDefined(options.debounce)) { - debounce = options.debounce; - if (isNumber(debounce)) { - debounceDelay = debounce; - } else if (isNumber(debounce[trigger])) { - debounceDelay = debounce[trigger]; - } else if (isNumber(debounce['default'])) { - debounceDelay = debounce['default']; - } - } - - $timeout.cancel(pendingDebounce); - if (debounceDelay) { - pendingDebounce = $timeout(function() { - ctrl.$commitViewValue(); - }, debounceDelay); - } else if ($rootScope.$$phase) { - ctrl.$commitViewValue(); - } else { - $scope.$apply(function() { - ctrl.$commitViewValue(); - }); - } - }; - - // model -> value - // Note: we cannot use a normal scope.$watch as we want to detect the following: - // 1. scope value is 'a' - // 2. user enters 'b' - // 3. ng-change kicks in and reverts scope value to 'a' - // -> scope value did not change since the last digest as - // ng-change executes in apply phase - // 4. view should be changed back to 'a' - $scope.$watch(function ngModelWatch() { - var modelValue = ngModelGet($scope); - - // if scope model value and ngModel value are out of sync - // TODO(perf): why not move this to the action fn? - if (modelValue !== ctrl.$modelValue) { - ctrl.$modelValue = ctrl.$$rawModelValue = modelValue; - - var formatters = ctrl.$formatters, - idx = formatters.length; - - var viewValue = modelValue; - while (idx--) { - viewValue = formatters[idx](viewValue); - } - if (ctrl.$viewValue !== viewValue) { - ctrl.$viewValue = ctrl.$$lastCommittedViewValue = viewValue; - ctrl.$render(); - - ctrl.$$runValidators(undefined, modelValue, viewValue, noop); - } - } - - return modelValue; - }); -}]; - - -/** - * @ngdoc directive - * @name ngModel - * - * @element input - * @priority 1 - * - * @description - * The `ngModel` directive binds an `input`,`select`, `textarea` (or custom form control) to a - * property on the scope using {@link ngModel.NgModelController NgModelController}, - * which is created and exposed by this directive. - * - * `ngModel` is responsible for: - * - * - Binding the view into the model, which other directives such as `input`, `textarea` or `select` - * require. - * - Providing validation behavior (i.e. required, number, email, url). - * - Keeping the state of the control (valid/invalid, dirty/pristine, touched/untouched, validation errors). - * - Setting related css classes on the element (`ng-valid`, `ng-invalid`, `ng-dirty`, `ng-pristine`, `ng-touched`, `ng-untouched`) including animations. - * - Registering the control with its parent {@link ng.directive:form form}. - * - * Note: `ngModel` will try to bind to the property given by evaluating the expression on the - * current scope. If the property doesn't already exist on this scope, it will be created - * implicitly and added to the scope. - * - * For best practices on using `ngModel`, see: - * - * - [Understanding Scopes](https://github.com/angular/angular.js/wiki/Understanding-Scopes) - * - * For basic examples, how to use `ngModel`, see: - * - * - {@link ng.directive:input input} - * - {@link input[text] text} - * - {@link input[checkbox] checkbox} - * - {@link input[radio] radio} - * - {@link input[number] number} - * - {@link input[email] email} - * - {@link input[url] url} - * - {@link input[date] date} - * - {@link input[datetime-local] datetime-local} - * - {@link input[time] time} - * - {@link input[month] month} - * - {@link input[week] week} - * - {@link ng.directive:select select} - * - {@link ng.directive:textarea textarea} - * - * # CSS classes - * The following CSS classes are added and removed on the associated input/select/textarea element - * depending on the validity of the model. - * - * - `ng-valid`: the model is valid - * - `ng-invalid`: the model is invalid - * - `ng-valid-[key]`: for each valid key added by `$setValidity` - * - `ng-invalid-[key]`: for each invalid key added by `$setValidity` - * - `ng-pristine`: the control hasn't been interacted with yet - * - `ng-dirty`: the control has been interacted with - * - `ng-touched`: the control has been blurred - * - `ng-untouched`: the control hasn't been blurred - * - `ng-pending`: any `$asyncValidators` are unfulfilled - * - * Keep in mind that ngAnimate can detect each of these classes when added and removed. - * - * ## Animation Hooks - * - * Animations within models are triggered when any of the associated CSS classes are added and removed - * on the input element which is attached to the model. These classes are: `.ng-pristine`, `.ng-dirty`, - * `.ng-invalid` and `.ng-valid` as well as any other validations that are performed on the model itself. - * The animations that are triggered within ngModel are similar to how they work in ngClass and - * animations can be hooked into using CSS transitions, keyframes as well as JS animations. - * - * The following example shows a simple way to utilize CSS transitions to style an input element - * that has been rendered as invalid after it has been validated: - * - * <pre> - * //be sure to include ngAnimate as a module to hook into more - * //advanced animations - * .my-input { - * transition:0.5s linear all; - * background: white; - * } - * .my-input.ng-invalid { - * background: red; - * color:white; - * } - * </pre> - * - * @example - * <example deps="angular-animate.js" animations="true" fixBase="true" module="inputExample"> - <file name="index.html"> - <script> - angular.module('inputExample', []) - .controller('ExampleController', ['$scope', function($scope) { - $scope.val = '1'; - }]); - </script> - <style> - .my-input { - -webkit-transition:all linear 0.5s; - transition:all linear 0.5s; - background: transparent; - } - .my-input.ng-invalid { - color:white; - background: red; - } - </style> - Update input to see transitions when valid/invalid. - Integer is a valid value. - <form name="testForm" ng-controller="ExampleController"> - <input ng-model="val" ng-pattern="/^\d+$/" name="anim" class="my-input" /> - </form> - </file> - * </example> - * - * ## Binding to a getter/setter - * - * Sometimes it's helpful to bind `ngModel` to a getter/setter function. A getter/setter is a - * function that returns a representation of the model when called with zero arguments, and sets - * the internal state of a model when called with an argument. It's sometimes useful to use this - * for models that have an internal representation that's different than what the model exposes - * to the view. - * - * <div class="alert alert-success"> - * **Best Practice:** It's best to keep getters fast because Angular is likely to call them more - * frequently than other parts of your code. - * </div> - * - * You use this behavior by adding `ng-model-options="{ getterSetter: true }"` to an element that - * has `ng-model` attached to it. You can also add `ng-model-options="{ getterSetter: true }"` to - * a `<form>`, which will enable this behavior for all `<input>`s within it. See - * {@link ng.directive:ngModelOptions `ngModelOptions`} for more. - * - * The following example shows how to use `ngModel` with a getter/setter: - * - * @example - * <example name="ngModel-getter-setter" module="getterSetterExample"> - <file name="index.html"> - <div ng-controller="ExampleController"> - <form name="userForm"> - Name: - <input type="text" name="userName" - ng-model="user.name" - ng-model-options="{ getterSetter: true }" /> - </form> - <pre>user.name = <span ng-bind="user.name()"></span></pre> - </div> - </file> - <file name="app.js"> - angular.module('getterSetterExample', []) - .controller('ExampleController', ['$scope', function($scope) { - var _name = 'Brian'; - $scope.user = { - name: function(newName) { - if (angular.isDefined(newName)) { - _name = newName; - } - return _name; - } - }; - }]); - </file> - * </example> - */ -var ngModelDirective = ['$rootScope', function($rootScope) { - return { - restrict: 'A', - require: ['ngModel', '^?form', '^?ngModelOptions'], - controller: NgModelController, - // Prelink needs to run before any input directive - // so that we can set the NgModelOptions in NgModelController - // before anyone else uses it. - priority: 1, - compile: function ngModelCompile(element) { - // Setup initial state of the control - element.addClass(PRISTINE_CLASS).addClass(UNTOUCHED_CLASS).addClass(VALID_CLASS); - - return { - pre: function ngModelPreLink(scope, element, attr, ctrls) { - var modelCtrl = ctrls[0], - formCtrl = ctrls[1] || nullFormCtrl; - - modelCtrl.$$setOptions(ctrls[2] && ctrls[2].$options); - - // notify others, especially parent forms - formCtrl.$addControl(modelCtrl); - - attr.$observe('name', function(newValue) { - if (modelCtrl.$name !== newValue) { - formCtrl.$$renameControl(modelCtrl, newValue); - } - }); - - scope.$on('$destroy', function() { - formCtrl.$removeControl(modelCtrl); - }); - }, - post: function ngModelPostLink(scope, element, attr, ctrls) { - var modelCtrl = ctrls[0]; - if (modelCtrl.$options && modelCtrl.$options.updateOn) { - element.on(modelCtrl.$options.updateOn, function(ev) { - modelCtrl.$$debounceViewValueCommit(ev && ev.type); - }); - } - - element.on('blur', function(ev) { - if (modelCtrl.$touched) return; - - if ($rootScope.$$phase) { - scope.$evalAsync(modelCtrl.$setTouched); - } else { - scope.$apply(modelCtrl.$setTouched); - } - }); - } - }; - } - }; -}]; - -var DEFAULT_REGEXP = /(\s+|^)default(\s+|$)/; - -/** - * @ngdoc directive - * @name ngModelOptions - * - * @description - * Allows tuning how model updates are done. Using `ngModelOptions` you can specify a custom list of - * events that will trigger a model update and/or a debouncing delay so that the actual update only - * takes place when a timer expires; this timer will be reset after another change takes place. - * - * Given the nature of `ngModelOptions`, the value displayed inside input fields in the view might - * be different than the value in the actual model. This means that if you update the model you - * should also invoke {@link ngModel.NgModelController `$rollbackViewValue`} on the relevant input field in - * order to make sure it is synchronized with the model and that any debounced action is canceled. - * - * The easiest way to reference the control's {@link ngModel.NgModelController `$rollbackViewValue`} - * method is by making sure the input is placed inside a form that has a `name` attribute. This is - * important because `form` controllers are published to the related scope under the name in their - * `name` attribute. - * - * Any pending changes will take place immediately when an enclosing form is submitted via the - * `submit` event. Note that `ngClick` events will occur before the model is updated. Use `ngSubmit` - * to have access to the updated model. - * - * `ngModelOptions` has an effect on the element it's declared on and its descendants. - * - * @param {Object} ngModelOptions options to apply to the current model. Valid keys are: - * - `updateOn`: string specifying which event should the input be bound to. You can set several - * events using an space delimited list. There is a special event called `default` that - * matches the default events belonging of the control. - * - `debounce`: integer value which contains the debounce model update value in milliseconds. A - * value of 0 triggers an immediate update. If an object is supplied instead, you can specify a - * custom value for each event. For example: - * `ng-model-options="{ updateOn: 'default blur', debounce: {'default': 500, 'blur': 0} }"` - * - `allowInvalid`: boolean value which indicates that the model can be set with values that did - * not validate correctly instead of the default behavior of setting the model to undefined. - * - `getterSetter`: boolean value which determines whether or not to treat functions bound to - `ngModel` as getters/setters. - * - `timezone`: Defines the timezone to be used to read/write the `Date` instance in the model for - * `<input type="date">`, `<input type="time">`, ... . Right now, the only supported value is `'UTC'`, - * otherwise the default timezone of the browser will be used. - * - * @example - - The following example shows how to override immediate updates. Changes on the inputs within the - form will update the model only when the control loses focus (blur event). If `escape` key is - pressed while the input field is focused, the value is reset to the value in the current model. - - <example name="ngModelOptions-directive-blur" module="optionsExample"> - <file name="index.html"> - <div ng-controller="ExampleController"> - <form name="userForm"> - Name: - <input type="text" name="userName" - ng-model="user.name" - ng-model-options="{ updateOn: 'blur' }" - ng-keyup="cancel($event)" /><br /> - - Other data: - <input type="text" ng-model="user.data" /><br /> - </form> - <pre>user.name = <span ng-bind="user.name"></span></pre> - </div> - </file> - <file name="app.js"> - angular.module('optionsExample', []) - .controller('ExampleController', ['$scope', function($scope) { - $scope.user = { name: 'say', data: '' }; - - $scope.cancel = function(e) { - if (e.keyCode == 27) { - $scope.userForm.userName.$rollbackViewValue(); - } - }; - }]); - </file> - <file name="protractor.js" type="protractor"> - var model = element(by.binding('user.name')); - var input = element(by.model('user.name')); - var other = element(by.model('user.data')); - - it('should allow custom events', function() { - input.sendKeys(' hello'); - input.click(); - expect(model.getText()).toEqual('say'); - other.click(); - expect(model.getText()).toEqual('say hello'); - }); - - it('should $rollbackViewValue when model changes', function() { - input.sendKeys(' hello'); - expect(input.getAttribute('value')).toEqual('say hello'); - input.sendKeys(protractor.Key.ESCAPE); - expect(input.getAttribute('value')).toEqual('say'); - other.click(); - expect(model.getText()).toEqual('say'); - }); - </file> - </example> - - This one shows how to debounce model changes. Model will be updated only 1 sec after last change. - If the `Clear` button is pressed, any debounced action is canceled and the value becomes empty. - - <example name="ngModelOptions-directive-debounce" module="optionsExample"> - <file name="index.html"> - <div ng-controller="ExampleController"> - <form name="userForm"> - Name: - <input type="text" name="userName" - ng-model="user.name" - ng-model-options="{ debounce: 1000 }" /> - <button ng-click="userForm.userName.$rollbackViewValue(); user.name=''">Clear</button><br /> - </form> - <pre>user.name = <span ng-bind="user.name"></span></pre> - </div> - </file> - <file name="app.js"> - angular.module('optionsExample', []) - .controller('ExampleController', ['$scope', function($scope) { - $scope.user = { name: 'say' }; - }]); - </file> - </example> - - This one shows how to bind to getter/setters: - - <example name="ngModelOptions-directive-getter-setter" module="getterSetterExample"> - <file name="index.html"> - <div ng-controller="ExampleController"> - <form name="userForm"> - Name: - <input type="text" name="userName" - ng-model="user.name" - ng-model-options="{ getterSetter: true }" /> - </form> - <pre>user.name = <span ng-bind="user.name()"></span></pre> - </div> - </file> - <file name="app.js"> - angular.module('getterSetterExample', []) - .controller('ExampleController', ['$scope', function($scope) { - var _name = 'Brian'; - $scope.user = { - name: function(newName) { - return angular.isDefined(newName) ? (_name = newName) : _name; - } - }; - }]); - </file> - </example> - */ -var ngModelOptionsDirective = function() { - return { - restrict: 'A', - controller: ['$scope', '$attrs', function($scope, $attrs) { - var that = this; - this.$options = $scope.$eval($attrs.ngModelOptions); - // Allow adding/overriding bound events - if (this.$options.updateOn !== undefined) { - this.$options.updateOnDefault = false; - // extract "default" pseudo-event from list of events that can trigger a model update - this.$options.updateOn = trim(this.$options.updateOn.replace(DEFAULT_REGEXP, function() { - that.$options.updateOnDefault = true; - return ' '; - })); - } else { - this.$options.updateOnDefault = true; - } - }] - }; -}; - - - -// helper methods -function addSetValidityMethod(context) { - var ctrl = context.ctrl, - $element = context.$element, - classCache = {}, - set = context.set, - unset = context.unset, - parentForm = context.parentForm, - $animate = context.$animate; - - classCache[INVALID_CLASS] = !(classCache[VALID_CLASS] = $element.hasClass(VALID_CLASS)); - - ctrl.$setValidity = setValidity; - - function setValidity(validationErrorKey, state, controller) { - if (state === undefined) { - createAndSet('$pending', validationErrorKey, controller); - } else { - unsetAndCleanup('$pending', validationErrorKey, controller); - } - if (!isBoolean(state)) { - unset(ctrl.$error, validationErrorKey, controller); - unset(ctrl.$$success, validationErrorKey, controller); - } else { - if (state) { - unset(ctrl.$error, validationErrorKey, controller); - set(ctrl.$$success, validationErrorKey, controller); - } else { - set(ctrl.$error, validationErrorKey, controller); - unset(ctrl.$$success, validationErrorKey, controller); - } - } - if (ctrl.$pending) { - cachedToggleClass(PENDING_CLASS, true); - ctrl.$valid = ctrl.$invalid = undefined; - toggleValidationCss('', null); - } else { - cachedToggleClass(PENDING_CLASS, false); - ctrl.$valid = isObjectEmpty(ctrl.$error); - ctrl.$invalid = !ctrl.$valid; - toggleValidationCss('', ctrl.$valid); - } - - // re-read the state as the set/unset methods could have - // combined state in ctrl.$error[validationError] (used for forms), - // where setting/unsetting only increments/decrements the value, - // and does not replace it. - var combinedState; - if (ctrl.$pending && ctrl.$pending[validationErrorKey]) { - combinedState = undefined; - } else if (ctrl.$error[validationErrorKey]) { - combinedState = false; - } else if (ctrl.$$success[validationErrorKey]) { - combinedState = true; - } else { - combinedState = null; - } - - toggleValidationCss(validationErrorKey, combinedState); - parentForm.$setValidity(validationErrorKey, combinedState, ctrl); - } - - function createAndSet(name, value, controller) { - if (!ctrl[name]) { - ctrl[name] = {}; - } - set(ctrl[name], value, controller); - } - - function unsetAndCleanup(name, value, controller) { - if (ctrl[name]) { - unset(ctrl[name], value, controller); - } - if (isObjectEmpty(ctrl[name])) { - ctrl[name] = undefined; - } - } - - function cachedToggleClass(className, switchValue) { - if (switchValue && !classCache[className]) { - $animate.addClass($element, className); - classCache[className] = true; - } else if (!switchValue && classCache[className]) { - $animate.removeClass($element, className); - classCache[className] = false; - } - } - - function toggleValidationCss(validationErrorKey, isValid) { - validationErrorKey = validationErrorKey ? '-' + snake_case(validationErrorKey, '-') : ''; - - cachedToggleClass(VALID_CLASS + validationErrorKey, isValid === true); - cachedToggleClass(INVALID_CLASS + validationErrorKey, isValid === false); - } -} - -function isObjectEmpty(obj) { - if (obj) { - for (var prop in obj) { - return false; - } - } - return true; -} - -/** - * @ngdoc directive - * @name ngNonBindable - * @restrict AC - * @priority 1000 - * - * @description - * The `ngNonBindable` directive tells Angular not to compile or bind the contents of the current - * DOM element. This is useful if the element contains what appears to be Angular directives and - * bindings but which should be ignored by Angular. This could be the case if you have a site that - * displays snippets of code, for instance. - * - * @element ANY - * - * @example - * In this example there are two locations where a simple interpolation binding (`{{}}`) is present, - * but the one wrapped in `ngNonBindable` is left alone. - * - * @example - <example> - <file name="index.html"> - <div>Normal: {{1 + 2}}</div> - <div ng-non-bindable>Ignored: {{1 + 2}}</div> - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-non-bindable', function() { - expect(element(by.binding('1 + 2')).getText()).toContain('3'); - expect(element.all(by.css('div')).last().getText()).toMatch(/1 \+ 2/); - }); - </file> - </example> - */ -var ngNonBindableDirective = ngDirective({ terminal: true, priority: 1000 }); - -/** - * @ngdoc directive - * @name ngPluralize - * @restrict EA - * - * @description - * `ngPluralize` is a directive that displays messages according to en-US localization rules. - * These rules are bundled with angular.js, but can be overridden - * (see {@link guide/i18n Angular i18n} dev guide). You configure ngPluralize directive - * by specifying the mappings between - * [plural categories](http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html) - * and the strings to be displayed. - * - * # Plural categories and explicit number rules - * There are two - * [plural categories](http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html) - * in Angular's default en-US locale: "one" and "other". - * - * While a plural category may match many numbers (for example, in en-US locale, "other" can match - * any number that is not 1), an explicit number rule can only match one number. For example, the - * explicit number rule for "3" matches the number 3. There are examples of plural categories - * and explicit number rules throughout the rest of this documentation. - * - * # Configuring ngPluralize - * You configure ngPluralize by providing 2 attributes: `count` and `when`. - * You can also provide an optional attribute, `offset`. - * - * The value of the `count` attribute can be either a string or an {@link guide/expression - * Angular expression}; these are evaluated on the current scope for its bound value. - * - * The `when` attribute specifies the mappings between plural categories and the actual - * string to be displayed. The value of the attribute should be a JSON object. - * - * The following example shows how to configure ngPluralize: - * - * ```html - * <ng-pluralize count="personCount" - when="{'0': 'Nobody is viewing.', - * 'one': '1 person is viewing.', - * 'other': '{} people are viewing.'}"> - * </ng-pluralize> - *``` - * - * In the example, `"0: Nobody is viewing."` is an explicit number rule. If you did not - * specify this rule, 0 would be matched to the "other" category and "0 people are viewing" - * would be shown instead of "Nobody is viewing". You can specify an explicit number rule for - * other numbers, for example 12, so that instead of showing "12 people are viewing", you can - * show "a dozen people are viewing". - * - * You can use a set of closed braces (`{}`) as a placeholder for the number that you want substituted - * into pluralized strings. In the previous example, Angular will replace `{}` with - * <span ng-non-bindable>`{{personCount}}`</span>. The closed braces `{}` is a placeholder - * for <span ng-non-bindable>{{numberExpression}}</span>. - * - * # Configuring ngPluralize with offset - * The `offset` attribute allows further customization of pluralized text, which can result in - * a better user experience. For example, instead of the message "4 people are viewing this document", - * you might display "John, Kate and 2 others are viewing this document". - * The offset attribute allows you to offset a number by any desired value. - * Let's take a look at an example: - * - * ```html - * <ng-pluralize count="personCount" offset=2 - * when="{'0': 'Nobody is viewing.', - * '1': '{{person1}} is viewing.', - * '2': '{{person1}} and {{person2}} are viewing.', - * 'one': '{{person1}}, {{person2}} and one other person are viewing.', - * 'other': '{{person1}}, {{person2}} and {} other people are viewing.'}"> - * </ng-pluralize> - * ``` - * - * Notice that we are still using two plural categories(one, other), but we added - * three explicit number rules 0, 1 and 2. - * When one person, perhaps John, views the document, "John is viewing" will be shown. - * When three people view the document, no explicit number rule is found, so - * an offset of 2 is taken off 3, and Angular uses 1 to decide the plural category. - * In this case, plural category 'one' is matched and "John, Mary and one other person are viewing" - * is shown. - * - * Note that when you specify offsets, you must provide explicit number rules for - * numbers from 0 up to and including the offset. If you use an offset of 3, for example, - * you must provide explicit number rules for 0, 1, 2 and 3. You must also provide plural strings for - * plural categories "one" and "other". - * - * @param {string|expression} count The variable to be bound to. - * @param {string} when The mapping between plural category to its corresponding strings. - * @param {number=} offset Offset to deduct from the total number. - * - * @example - <example module="pluralizeExample"> - <file name="index.html"> - <script> - angular.module('pluralizeExample', []) - .controller('ExampleController', ['$scope', function($scope) { - $scope.person1 = 'Igor'; - $scope.person2 = 'Misko'; - $scope.personCount = 1; - }]); - </script> - <div ng-controller="ExampleController"> - Person 1:<input type="text" ng-model="person1" value="Igor" /><br/> - Person 2:<input type="text" ng-model="person2" value="Misko" /><br/> - Number of People:<input type="text" ng-model="personCount" value="1" /><br/> - - <!--- Example with simple pluralization rules for en locale ---> - Without Offset: - <ng-pluralize count="personCount" - when="{'0': 'Nobody is viewing.', - 'one': '1 person is viewing.', - 'other': '{} people are viewing.'}"> - </ng-pluralize><br> - - <!--- Example with offset ---> - With Offset(2): - <ng-pluralize count="personCount" offset=2 - when="{'0': 'Nobody is viewing.', - '1': '{{person1}} is viewing.', - '2': '{{person1}} and {{person2}} are viewing.', - 'one': '{{person1}}, {{person2}} and one other person are viewing.', - 'other': '{{person1}}, {{person2}} and {} other people are viewing.'}"> - </ng-pluralize> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should show correct pluralized string', function() { - var withoutOffset = element.all(by.css('ng-pluralize')).get(0); - var withOffset = element.all(by.css('ng-pluralize')).get(1); - var countInput = element(by.model('personCount')); - - expect(withoutOffset.getText()).toEqual('1 person is viewing.'); - expect(withOffset.getText()).toEqual('Igor is viewing.'); - - countInput.clear(); - countInput.sendKeys('0'); - - expect(withoutOffset.getText()).toEqual('Nobody is viewing.'); - expect(withOffset.getText()).toEqual('Nobody is viewing.'); - - countInput.clear(); - countInput.sendKeys('2'); - - expect(withoutOffset.getText()).toEqual('2 people are viewing.'); - expect(withOffset.getText()).toEqual('Igor and Misko are viewing.'); - - countInput.clear(); - countInput.sendKeys('3'); - - expect(withoutOffset.getText()).toEqual('3 people are viewing.'); - expect(withOffset.getText()).toEqual('Igor, Misko and one other person are viewing.'); - - countInput.clear(); - countInput.sendKeys('4'); - - expect(withoutOffset.getText()).toEqual('4 people are viewing.'); - expect(withOffset.getText()).toEqual('Igor, Misko and 2 other people are viewing.'); - }); - it('should show data-bound names', function() { - var withOffset = element.all(by.css('ng-pluralize')).get(1); - var personCount = element(by.model('personCount')); - var person1 = element(by.model('person1')); - var person2 = element(by.model('person2')); - personCount.clear(); - personCount.sendKeys('4'); - person1.clear(); - person1.sendKeys('Di'); - person2.clear(); - person2.sendKeys('Vojta'); - expect(withOffset.getText()).toEqual('Di, Vojta and 2 other people are viewing.'); - }); - </file> - </example> - */ -var ngPluralizeDirective = ['$locale', '$interpolate', function($locale, $interpolate) { - var BRACE = /{}/g, - IS_WHEN = /^when(Minus)?(.+)$/; - - return { - restrict: 'EA', - link: function(scope, element, attr) { - var numberExp = attr.count, - whenExp = attr.$attr.when && element.attr(attr.$attr.when), // we have {{}} in attrs - offset = attr.offset || 0, - whens = scope.$eval(whenExp) || {}, - whensExpFns = {}, - startSymbol = $interpolate.startSymbol(), - endSymbol = $interpolate.endSymbol(), - braceReplacement = startSymbol + numberExp + '-' + offset + endSymbol, - watchRemover = angular.noop, - lastCount; - - forEach(attr, function(expression, attributeName) { - var tmpMatch = IS_WHEN.exec(attributeName); - if (tmpMatch) { - var whenKey = (tmpMatch[1] ? '-' : '') + lowercase(tmpMatch[2]); - whens[whenKey] = element.attr(attr.$attr[attributeName]); - } - }); - forEach(whens, function(expression, key) { - whensExpFns[key] = $interpolate(expression.replace(BRACE, braceReplacement)); - - }); - - scope.$watch(numberExp, function ngPluralizeWatchAction(newVal) { - var count = parseFloat(newVal); - var countIsNaN = isNaN(count); - - if (!countIsNaN && !(count in whens)) { - // If an explicit number rule such as 1, 2, 3... is defined, just use it. - // Otherwise, check it against pluralization rules in $locale service. - count = $locale.pluralCat(count - offset); - } - - // If both `count` and `lastCount` are NaN, we don't need to re-register a watch. - // In JS `NaN !== NaN`, so we have to exlicitly check. - if ((count !== lastCount) && !(countIsNaN && isNaN(lastCount))) { - watchRemover(); - watchRemover = scope.$watch(whensExpFns[count], updateElementText); - lastCount = count; - } - }); - - function updateElementText(newText) { - element.text(newText || ''); - } - } - }; -}]; - -/** - * @ngdoc directive - * @name ngRepeat - * - * @description - * The `ngRepeat` directive instantiates a template once per item from a collection. Each template - * instance gets its own scope, where the given loop variable is set to the current collection item, - * and `$index` is set to the item index or key. - * - * Special properties are exposed on the local scope of each template instance, including: - * - * | Variable | Type | Details | - * |-----------|-----------------|-----------------------------------------------------------------------------| - * | `$index` | {@type number} | iterator offset of the repeated element (0..length-1) | - * | `$first` | {@type boolean} | true if the repeated element is first in the iterator. | - * | `$middle` | {@type boolean} | true if the repeated element is between the first and last in the iterator. | - * | `$last` | {@type boolean} | true if the repeated element is last in the iterator. | - * | `$even` | {@type boolean} | true if the iterator position `$index` is even (otherwise false). | - * | `$odd` | {@type boolean} | true if the iterator position `$index` is odd (otherwise false). | - * - * Creating aliases for these properties is possible with {@link ng.directive:ngInit `ngInit`}. - * This may be useful when, for instance, nesting ngRepeats. - * - * # Iterating over object properties - * - * It is possible to get `ngRepeat` to iterate over the properties of an object using the following - * syntax: - * - * ```js - * <div ng-repeat="(key, value) in myObj"> ... </div> - * ``` - * - * You need to be aware that the JavaScript specification does not define what order - * it will return the keys for an object. In order to have a guaranteed deterministic order - * for the keys, Angular versions up to and including 1.3 **sort the keys alphabetically**. - * - * If this is not desired, the recommended workaround is to convert your object into an array - * that is sorted into the order that you prefer before providing it to `ngRepeat`. You could - * do this with a filter such as [toArrayFilter](http://ngmodules.org/modules/angular-toArrayFilter) - * or implement a `$watch` on the object yourself. - * - * In version 1.4 we will remove the sorting, since it seems that browsers generally follow the - * strategy of providing keys in the order in which they were defined, although there are exceptions - * when keys are deleted and reinstated. - * - * - * # Special repeat start and end points - * To repeat a series of elements instead of just one parent element, ngRepeat (as well as other ng directives) supports extending - * the range of the repeater by defining explicit start and end points by using **ng-repeat-start** and **ng-repeat-end** respectively. - * The **ng-repeat-start** directive works the same as **ng-repeat**, but will repeat all the HTML code (including the tag it's defined on) - * up to and including the ending HTML tag where **ng-repeat-end** is placed. - * - * The example below makes use of this feature: - * ```html - * <header ng-repeat-start="item in items"> - * Header {{ item }} - * </header> - * <div class="body"> - * Body {{ item }} - * </div> - * <footer ng-repeat-end> - * Footer {{ item }} - * </footer> - * ``` - * - * And with an input of {@type ['A','B']} for the items variable in the example above, the output will evaluate to: - * ```html - * <header> - * Header A - * </header> - * <div class="body"> - * Body A - * </div> - * <footer> - * Footer A - * </footer> - * <header> - * Header B - * </header> - * <div class="body"> - * Body B - * </div> - * <footer> - * Footer B - * </footer> - * ``` - * - * The custom start and end points for ngRepeat also support all other HTML directive syntax flavors provided in AngularJS (such - * as **data-ng-repeat-start**, **x-ng-repeat-start** and **ng:repeat-start**). - * - * @animations - * **.enter** - when a new item is added to the list or when an item is revealed after a filter - * - * **.leave** - when an item is removed from the list or when an item is filtered out - * - * **.move** - when an adjacent item is filtered out causing a reorder or when the item contents are reordered - * - * @element ANY - * @scope - * @priority 1000 - * @param {repeat_expression} ngRepeat The expression indicating how to enumerate a collection. These - * formats are currently supported: - * - * * `variable in expression` – where variable is the user defined loop variable and `expression` - * is a scope expression giving the collection to enumerate. - * - * For example: `album in artist.albums`. - * - * * `(key, value) in expression` – where `key` and `value` can be any user defined identifiers, - * and `expression` is the scope expression giving the collection to enumerate. - * - * For example: `(name, age) in {'adam':10, 'amalie':12}`. - * - * * `variable in expression track by tracking_expression` – You can also provide an optional tracking function - * which can be used to associate the objects in the collection with the DOM elements. If no tracking function - * is specified the ng-repeat associates elements by identity in the collection. It is an error to have - * more than one tracking function to resolve to the same key. (This would mean that two distinct objects are - * mapped to the same DOM element, which is not possible.) Filters should be applied to the expression, - * before specifying a tracking expression. - * - * For example: `item in items` is equivalent to `item in items track by $id(item)`. This implies that the DOM elements - * will be associated by item identity in the array. - * - * For example: `item in items track by $id(item)`. A built in `$id()` function can be used to assign a unique - * `$$hashKey` property to each item in the array. This property is then used as a key to associated DOM elements - * with the corresponding item in the array by identity. Moving the same object in array would move the DOM - * element in the same way in the DOM. - * - * For example: `item in items track by item.id` is a typical pattern when the items come from the database. In this - * case the object identity does not matter. Two objects are considered equivalent as long as their `id` - * property is same. - * - * For example: `item in items | filter:searchText track by item.id` is a pattern that might be used to apply a filter - * to items in conjunction with a tracking expression. - * - * * `variable in expression as alias_expression` – You can also provide an optional alias expression which will then store the - * intermediate results of the repeater after the filters have been applied. Typically this is used to render a special message - * when a filter is active on the repeater, but the filtered result set is empty. - * - * For example: `item in items | filter:x as results` will store the fragment of the repeated items as `results`, but only after - * the items have been processed through the filter. - * - * @example - * This example initializes the scope to a list of names and - * then uses `ngRepeat` to display every person: - <example module="ngAnimate" deps="angular-animate.js" animations="true"> - <file name="index.html"> - <div ng-init="friends = [ - {name:'John', age:25, gender:'boy'}, - {name:'Jessie', age:30, gender:'girl'}, - {name:'Johanna', age:28, gender:'girl'}, - {name:'Joy', age:15, gender:'girl'}, - {name:'Mary', age:28, gender:'girl'}, - {name:'Peter', age:95, gender:'boy'}, - {name:'Sebastian', age:50, gender:'boy'}, - {name:'Erika', age:27, gender:'girl'}, - {name:'Patrick', age:40, gender:'boy'}, - {name:'Samantha', age:60, gender:'girl'} - ]"> - I have {{friends.length}} friends. They are: - <input type="search" ng-model="q" placeholder="filter friends..." /> - <ul class="example-animate-container"> - <li class="animate-repeat" ng-repeat="friend in friends | filter:q as results"> - [{{$index + 1}}] {{friend.name}} who is {{friend.age}} years old. - </li> - <li class="animate-repeat" ng-if="results.length == 0"> - <strong>No results found...</strong> - </li> - </ul> - </div> - </file> - <file name="animations.css"> - .example-animate-container { - background:white; - border:1px solid black; - list-style:none; - margin:0; - padding:0 10px; - } - - .animate-repeat { - line-height:40px; - list-style:none; - box-sizing:border-box; - } - - .animate-repeat.ng-move, - .animate-repeat.ng-enter, - .animate-repeat.ng-leave { - -webkit-transition:all linear 0.5s; - transition:all linear 0.5s; - } - - .animate-repeat.ng-leave.ng-leave-active, - .animate-repeat.ng-move, - .animate-repeat.ng-enter { - opacity:0; - max-height:0; - } - - .animate-repeat.ng-leave, - .animate-repeat.ng-move.ng-move-active, - .animate-repeat.ng-enter.ng-enter-active { - opacity:1; - max-height:40px; - } - </file> - <file name="protractor.js" type="protractor"> - var friends = element.all(by.repeater('friend in friends')); - - it('should render initial data set', function() { - expect(friends.count()).toBe(10); - expect(friends.get(0).getText()).toEqual('[1] John who is 25 years old.'); - expect(friends.get(1).getText()).toEqual('[2] Jessie who is 30 years old.'); - expect(friends.last().getText()).toEqual('[10] Samantha who is 60 years old.'); - expect(element(by.binding('friends.length')).getText()) - .toMatch("I have 10 friends. They are:"); - }); - - it('should update repeater when filter predicate changes', function() { - expect(friends.count()).toBe(10); - - element(by.model('q')).sendKeys('ma'); - - expect(friends.count()).toBe(2); - expect(friends.get(0).getText()).toEqual('[1] Mary who is 28 years old.'); - expect(friends.last().getText()).toEqual('[2] Samantha who is 60 years old.'); - }); - </file> - </example> - */ -var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) { - var NG_REMOVED = '$$NG_REMOVED'; - var ngRepeatMinErr = minErr('ngRepeat'); - - var updateScope = function(scope, index, valueIdentifier, value, keyIdentifier, key, arrayLength) { - // TODO(perf): generate setters to shave off ~40ms or 1-1.5% - scope[valueIdentifier] = value; - if (keyIdentifier) scope[keyIdentifier] = key; - scope.$index = index; - scope.$first = (index === 0); - scope.$last = (index === (arrayLength - 1)); - scope.$middle = !(scope.$first || scope.$last); - // jshint bitwise: false - scope.$odd = !(scope.$even = (index&1) === 0); - // jshint bitwise: true - }; - - var getBlockStart = function(block) { - return block.clone[0]; - }; - - var getBlockEnd = function(block) { - return block.clone[block.clone.length - 1]; - }; - - - return { - restrict: 'A', - multiElement: true, - transclude: 'element', - priority: 1000, - terminal: true, - $$tlb: true, - compile: function ngRepeatCompile($element, $attr) { - var expression = $attr.ngRepeat; - var ngRepeatEndComment = document.createComment(' end ngRepeat: ' + expression + ' '); - - var match = expression.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/); - - if (!match) { - throw ngRepeatMinErr('iexp', "Expected expression in form of '_item_ in _collection_[ track by _id_]' but got '{0}'.", - expression); - } - - var lhs = match[1]; - var rhs = match[2]; - var aliasAs = match[3]; - var trackByExp = match[4]; - - match = lhs.match(/^(?:(\s*[\$\w]+)|\(\s*([\$\w]+)\s*,\s*([\$\w]+)\s*\))$/); - - if (!match) { - throw ngRepeatMinErr('iidexp', "'_item_' in '_item_ in _collection_' should be an identifier or '(_key_, _value_)' expression, but got '{0}'.", - lhs); - } - var valueIdentifier = match[3] || match[1]; - var keyIdentifier = match[2]; - - if (aliasAs && (!/^[$a-zA-Z_][$a-zA-Z0-9_]*$/.test(aliasAs) || - /^(null|undefined|this|\$index|\$first|\$middle|\$last|\$even|\$odd|\$parent|\$root|\$id)$/.test(aliasAs))) { - throw ngRepeatMinErr('badident', "alias '{0}' is invalid --- must be a valid JS identifier which is not a reserved name.", - aliasAs); - } - - var trackByExpGetter, trackByIdExpFn, trackByIdArrayFn, trackByIdObjFn; - var hashFnLocals = {$id: hashKey}; - - if (trackByExp) { - trackByExpGetter = $parse(trackByExp); - } else { - trackByIdArrayFn = function(key, value) { - return hashKey(value); - }; - trackByIdObjFn = function(key) { - return key; - }; - } - - return function ngRepeatLink($scope, $element, $attr, ctrl, $transclude) { - - if (trackByExpGetter) { - trackByIdExpFn = function(key, value, index) { - // assign key, value, and $index to the locals so that they can be used in hash functions - if (keyIdentifier) hashFnLocals[keyIdentifier] = key; - hashFnLocals[valueIdentifier] = value; - hashFnLocals.$index = index; - return trackByExpGetter($scope, hashFnLocals); - }; - } - - // Store a list of elements from previous run. This is a hash where key is the item from the - // iterator, and the value is objects with following properties. - // - scope: bound scope - // - element: previous element. - // - index: position - // - // We are using no-proto object so that we don't need to guard against inherited props via - // hasOwnProperty. - var lastBlockMap = createMap(); - - //watch props - $scope.$watchCollection(rhs, function ngRepeatAction(collection) { - var index, length, - previousNode = $element[0], // node that cloned nodes should be inserted after - // initialized to the comment node anchor - nextNode, - // Same as lastBlockMap but it has the current state. It will become the - // lastBlockMap on the next iteration. - nextBlockMap = createMap(), - collectionLength, - key, value, // key/value of iteration - trackById, - trackByIdFn, - collectionKeys, - block, // last object information {scope, element, id} - nextBlockOrder, - elementsToRemove; - - if (aliasAs) { - $scope[aliasAs] = collection; - } - - if (isArrayLike(collection)) { - collectionKeys = collection; - trackByIdFn = trackByIdExpFn || trackByIdArrayFn; - } else { - trackByIdFn = trackByIdExpFn || trackByIdObjFn; - // if object, extract keys, sort them and use to determine order of iteration over obj props - collectionKeys = []; - for (var itemKey in collection) { - if (collection.hasOwnProperty(itemKey) && itemKey.charAt(0) != '$') { - collectionKeys.push(itemKey); - } - } - collectionKeys.sort(); - } - - collectionLength = collectionKeys.length; - nextBlockOrder = new Array(collectionLength); - - // locate existing items - for (index = 0; index < collectionLength; index++) { - key = (collection === collectionKeys) ? index : collectionKeys[index]; - value = collection[key]; - trackById = trackByIdFn(key, value, index); - if (lastBlockMap[trackById]) { - // found previously seen block - block = lastBlockMap[trackById]; - delete lastBlockMap[trackById]; - nextBlockMap[trackById] = block; - nextBlockOrder[index] = block; - } else if (nextBlockMap[trackById]) { - // if collision detected. restore lastBlockMap and throw an error - forEach(nextBlockOrder, function(block) { - if (block && block.scope) lastBlockMap[block.id] = block; - }); - throw ngRepeatMinErr('dupes', - "Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: {0}, Duplicate key: {1}, Duplicate value: {2}", - expression, trackById, value); - } else { - // new never before seen block - nextBlockOrder[index] = {id: trackById, scope: undefined, clone: undefined}; - nextBlockMap[trackById] = true; - } - } - - // remove leftover items - for (var blockKey in lastBlockMap) { - block = lastBlockMap[blockKey]; - elementsToRemove = getBlockNodes(block.clone); - $animate.leave(elementsToRemove); - if (elementsToRemove[0].parentNode) { - // if the element was not removed yet because of pending animation, mark it as deleted - // so that we can ignore it later - for (index = 0, length = elementsToRemove.length; index < length; index++) { - elementsToRemove[index][NG_REMOVED] = true; - } - } - block.scope.$destroy(); - } - - // we are not using forEach for perf reasons (trying to avoid #call) - for (index = 0; index < collectionLength; index++) { - key = (collection === collectionKeys) ? index : collectionKeys[index]; - value = collection[key]; - block = nextBlockOrder[index]; - - if (block.scope) { - // if we have already seen this object, then we need to reuse the - // associated scope/element - - nextNode = previousNode; - - // skip nodes that are already pending removal via leave animation - do { - nextNode = nextNode.nextSibling; - } while (nextNode && nextNode[NG_REMOVED]); - - if (getBlockStart(block) != nextNode) { - // existing item which got moved - $animate.move(getBlockNodes(block.clone), null, jqLite(previousNode)); - } - previousNode = getBlockEnd(block); - updateScope(block.scope, index, valueIdentifier, value, keyIdentifier, key, collectionLength); - } else { - // new item which we don't know about - $transclude(function ngRepeatTransclude(clone, scope) { - block.scope = scope; - // http://jsperf.com/clone-vs-createcomment - var endNode = ngRepeatEndComment.cloneNode(false); - clone[clone.length++] = endNode; - - // TODO(perf): support naked previousNode in `enter` to avoid creation of jqLite wrapper? - $animate.enter(clone, null, jqLite(previousNode)); - previousNode = endNode; - // Note: We only need the first/last node of the cloned nodes. - // However, we need to keep the reference to the jqlite wrapper as it might be changed later - // by a directive with templateUrl when its template arrives. - block.clone = clone; - nextBlockMap[block.id] = block; - updateScope(block.scope, index, valueIdentifier, value, keyIdentifier, key, collectionLength); - }); - } - } - lastBlockMap = nextBlockMap; - }); - }; - } - }; -}]; - -var NG_HIDE_CLASS = 'ng-hide'; -var NG_HIDE_IN_PROGRESS_CLASS = 'ng-hide-animate'; -/** - * @ngdoc directive - * @name ngShow - * - * @description - * The `ngShow` directive shows or hides the given HTML element based on the expression - * provided to the `ngShow` attribute. The element is shown or hidden by removing or adding - * the `.ng-hide` CSS class onto the element. The `.ng-hide` CSS class is predefined - * in AngularJS and sets the display style to none (using an !important flag). - * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}). - * - * ```html - * <!-- when $scope.myValue is truthy (element is visible) --> - * <div ng-show="myValue"></div> - * - * <!-- when $scope.myValue is falsy (element is hidden) --> - * <div ng-show="myValue" class="ng-hide"></div> - * ``` - * - * When the `ngShow` expression evaluates to a falsy value then the `.ng-hide` CSS class is added to the class - * attribute on the element causing it to become hidden. When truthy, the `.ng-hide` CSS class is removed - * from the element causing the element not to appear hidden. - * - * ## Why is !important used? - * - * You may be wondering why !important is used for the `.ng-hide` CSS class. This is because the `.ng-hide` selector - * can be easily overridden by heavier selectors. For example, something as simple - * as changing the display style on a HTML list item would make hidden elements appear visible. - * This also becomes a bigger issue when dealing with CSS frameworks. - * - * By using !important, the show and hide behavior will work as expected despite any clash between CSS selector - * specificity (when !important isn't used with any conflicting styles). If a developer chooses to override the - * styling to change how to hide an element then it is just a matter of using !important in their own CSS code. - * - * ### Overriding `.ng-hide` - * - * By default, the `.ng-hide` class will style the element with `display: none!important`. If you wish to change - * the hide behavior with ngShow/ngHide then this can be achieved by restating the styles for the `.ng-hide` - * class in CSS: - * - * ```css - * .ng-hide { - * /* this is just another form of hiding an element */ - * display: block!important; - * position: absolute; - * top: -9999px; - * left: -9999px; - * } - * ``` - * - * By default you don't need to override in CSS anything and the animations will work around the display style. - * - * ## A note about animations with `ngShow` - * - * Animations in ngShow/ngHide work with the show and hide events that are triggered when the directive expression - * is true and false. This system works like the animation system present with ngClass except that - * you must also include the !important flag to override the display property - * so that you can perform an animation when the element is hidden during the time of the animation. - * - * ```css - * // - * //a working example can be found at the bottom of this page - * // - * .my-element.ng-hide-add, .my-element.ng-hide-remove { - * /* this is required as of 1.3x to properly - * apply all styling in a show/hide animation */ - * transition: 0s linear all; - * } - * - * .my-element.ng-hide-add-active, - * .my-element.ng-hide-remove-active { - * /* the transition is defined in the active class */ - * transition: 1s linear all; - * } - * - * .my-element.ng-hide-add { ... } - * .my-element.ng-hide-add.ng-hide-add-active { ... } - * .my-element.ng-hide-remove { ... } - * .my-element.ng-hide-remove.ng-hide-remove-active { ... } - * ``` - * - * Keep in mind that, as of AngularJS version 1.3.0-beta.11, there is no need to change the display - * property to block during animation states--ngAnimate will handle the style toggling automatically for you. - * - * @animations - * addClass: `.ng-hide` - happens after the `ngShow` expression evaluates to a truthy value and the just before contents are set to visible - * removeClass: `.ng-hide` - happens after the `ngShow` expression evaluates to a non truthy value and just before the contents are set to hidden - * - * @element ANY - * @param {expression} ngShow If the {@link guide/expression expression} is truthy - * then the element is shown or hidden respectively. - * - * @example - <example module="ngAnimate" deps="angular-animate.js" animations="true"> - <file name="index.html"> - Click me: <input type="checkbox" ng-model="checked"><br/> - <div> - Show: - <div class="check-element animate-show" ng-show="checked"> - <span class="glyphicon glyphicon-thumbs-up"></span> I show up when your checkbox is checked. - </div> - </div> - <div> - Hide: - <div class="check-element animate-show" ng-hide="checked"> - <span class="glyphicon glyphicon-thumbs-down"></span> I hide when your checkbox is checked. - </div> - </div> - </file> - <file name="glyphicons.css"> - @import url(../../components/bootstrap-3.1.1/css/bootstrap.css); - </file> - <file name="animations.css"> - .animate-show { - line-height: 20px; - opacity: 1; - padding: 10px; - border: 1px solid black; - background: white; - } - - .animate-show.ng-hide-add.ng-hide-add-active, - .animate-show.ng-hide-remove.ng-hide-remove-active { - -webkit-transition: all linear 0.5s; - transition: all linear 0.5s; - } - - .animate-show.ng-hide { - line-height: 0; - opacity: 0; - padding: 0 10px; - } - - .check-element { - padding: 10px; - border: 1px solid black; - background: white; - } - </file> - <file name="protractor.js" type="protractor"> - var thumbsUp = element(by.css('span.glyphicon-thumbs-up')); - var thumbsDown = element(by.css('span.glyphicon-thumbs-down')); - - it('should check ng-show / ng-hide', function() { - expect(thumbsUp.isDisplayed()).toBeFalsy(); - expect(thumbsDown.isDisplayed()).toBeTruthy(); - - element(by.model('checked')).click(); - - expect(thumbsUp.isDisplayed()).toBeTruthy(); - expect(thumbsDown.isDisplayed()).toBeFalsy(); - }); - </file> - </example> - */ -var ngShowDirective = ['$animate', function($animate) { - return { - restrict: 'A', - multiElement: true, - link: function(scope, element, attr) { - scope.$watch(attr.ngShow, function ngShowWatchAction(value) { - // we're adding a temporary, animation-specific class for ng-hide since this way - // we can control when the element is actually displayed on screen without having - // to have a global/greedy CSS selector that breaks when other animations are run. - // Read: https://github.com/angular/angular.js/issues/9103#issuecomment-58335845 - $animate[value ? 'removeClass' : 'addClass'](element, NG_HIDE_CLASS, { - tempClasses: NG_HIDE_IN_PROGRESS_CLASS - }); - }); - } - }; -}]; - - -/** - * @ngdoc directive - * @name ngHide - * - * @description - * The `ngHide` directive shows or hides the given HTML element based on the expression - * provided to the `ngHide` attribute. The element is shown or hidden by removing or adding - * the `ng-hide` CSS class onto the element. The `.ng-hide` CSS class is predefined - * in AngularJS and sets the display style to none (using an !important flag). - * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}). - * - * ```html - * <!-- when $scope.myValue is truthy (element is hidden) --> - * <div ng-hide="myValue" class="ng-hide"></div> - * - * <!-- when $scope.myValue is falsy (element is visible) --> - * <div ng-hide="myValue"></div> - * ``` - * - * When the `ngHide` expression evaluates to a truthy value then the `.ng-hide` CSS class is added to the class - * attribute on the element causing it to become hidden. When falsy, the `.ng-hide` CSS class is removed - * from the element causing the element not to appear hidden. - * - * ## Why is !important used? - * - * You may be wondering why !important is used for the `.ng-hide` CSS class. This is because the `.ng-hide` selector - * can be easily overridden by heavier selectors. For example, something as simple - * as changing the display style on a HTML list item would make hidden elements appear visible. - * This also becomes a bigger issue when dealing with CSS frameworks. - * - * By using !important, the show and hide behavior will work as expected despite any clash between CSS selector - * specificity (when !important isn't used with any conflicting styles). If a developer chooses to override the - * styling to change how to hide an element then it is just a matter of using !important in their own CSS code. - * - * ### Overriding `.ng-hide` - * - * By default, the `.ng-hide` class will style the element with `display: none!important`. If you wish to change - * the hide behavior with ngShow/ngHide then this can be achieved by restating the styles for the `.ng-hide` - * class in CSS: - * - * ```css - * .ng-hide { - * /* this is just another form of hiding an element */ - * display: block!important; - * position: absolute; - * top: -9999px; - * left: -9999px; - * } - * ``` - * - * By default you don't need to override in CSS anything and the animations will work around the display style. - * - * ## A note about animations with `ngHide` - * - * Animations in ngShow/ngHide work with the show and hide events that are triggered when the directive expression - * is true and false. This system works like the animation system present with ngClass, except that the `.ng-hide` - * CSS class is added and removed for you instead of your own CSS class. - * - * ```css - * // - * //a working example can be found at the bottom of this page - * // - * .my-element.ng-hide-add, .my-element.ng-hide-remove { - * transition: 0.5s linear all; - * } - * - * .my-element.ng-hide-add { ... } - * .my-element.ng-hide-add.ng-hide-add-active { ... } - * .my-element.ng-hide-remove { ... } - * .my-element.ng-hide-remove.ng-hide-remove-active { ... } - * ``` - * - * Keep in mind that, as of AngularJS version 1.3.0-beta.11, there is no need to change the display - * property to block during animation states--ngAnimate will handle the style toggling automatically for you. - * - * @animations - * removeClass: `.ng-hide` - happens after the `ngHide` expression evaluates to a truthy value and just before the contents are set to hidden - * addClass: `.ng-hide` - happens after the `ngHide` expression evaluates to a non truthy value and just before the contents are set to visible - * - * @element ANY - * @param {expression} ngHide If the {@link guide/expression expression} is truthy then - * the element is shown or hidden respectively. - * - * @example - <example module="ngAnimate" deps="angular-animate.js" animations="true"> - <file name="index.html"> - Click me: <input type="checkbox" ng-model="checked"><br/> - <div> - Show: - <div class="check-element animate-hide" ng-show="checked"> - <span class="glyphicon glyphicon-thumbs-up"></span> I show up when your checkbox is checked. - </div> - </div> - <div> - Hide: - <div class="check-element animate-hide" ng-hide="checked"> - <span class="glyphicon glyphicon-thumbs-down"></span> I hide when your checkbox is checked. - </div> - </div> - </file> - <file name="glyphicons.css"> - @import url(../../components/bootstrap-3.1.1/css/bootstrap.css); - </file> - <file name="animations.css"> - .animate-hide { - -webkit-transition: all linear 0.5s; - transition: all linear 0.5s; - line-height: 20px; - opacity: 1; - padding: 10px; - border: 1px solid black; - background: white; - } - - .animate-hide.ng-hide { - line-height: 0; - opacity: 0; - padding: 0 10px; - } - - .check-element { - padding: 10px; - border: 1px solid black; - background: white; - } - </file> - <file name="protractor.js" type="protractor"> - var thumbsUp = element(by.css('span.glyphicon-thumbs-up')); - var thumbsDown = element(by.css('span.glyphicon-thumbs-down')); - - it('should check ng-show / ng-hide', function() { - expect(thumbsUp.isDisplayed()).toBeFalsy(); - expect(thumbsDown.isDisplayed()).toBeTruthy(); - - element(by.model('checked')).click(); - - expect(thumbsUp.isDisplayed()).toBeTruthy(); - expect(thumbsDown.isDisplayed()).toBeFalsy(); - }); - </file> - </example> - */ -var ngHideDirective = ['$animate', function($animate) { - return { - restrict: 'A', - multiElement: true, - link: function(scope, element, attr) { - scope.$watch(attr.ngHide, function ngHideWatchAction(value) { - // The comment inside of the ngShowDirective explains why we add and - // remove a temporary class for the show/hide animation - $animate[value ? 'addClass' : 'removeClass'](element,NG_HIDE_CLASS, { - tempClasses: NG_HIDE_IN_PROGRESS_CLASS - }); - }); - } - }; -}]; - -/** - * @ngdoc directive - * @name ngStyle - * @restrict AC - * - * @description - * The `ngStyle` directive allows you to set CSS style on an HTML element conditionally. - * - * @element ANY - * @param {expression} ngStyle - * - * {@link guide/expression Expression} which evals to an - * object whose keys are CSS style names and values are corresponding values for those CSS - * keys. - * - * Since some CSS style names are not valid keys for an object, they must be quoted. - * See the 'background-color' style in the example below. - * - * @example - <example> - <file name="index.html"> - <input type="button" value="set color" ng-click="myStyle={color:'red'}"> - <input type="button" value="set background" ng-click="myStyle={'background-color':'blue'}"> - <input type="button" value="clear" ng-click="myStyle={}"> - <br/> - <span ng-style="myStyle">Sample Text</span> - <pre>myStyle={{myStyle}}</pre> - </file> - <file name="style.css"> - span { - color: black; - } - </file> - <file name="protractor.js" type="protractor"> - var colorSpan = element(by.css('span')); - - it('should check ng-style', function() { - expect(colorSpan.getCssValue('color')).toBe('rgba(0, 0, 0, 1)'); - element(by.css('input[value=\'set color\']')).click(); - expect(colorSpan.getCssValue('color')).toBe('rgba(255, 0, 0, 1)'); - element(by.css('input[value=clear]')).click(); - expect(colorSpan.getCssValue('color')).toBe('rgba(0, 0, 0, 1)'); - }); - </file> - </example> - */ -var ngStyleDirective = ngDirective(function(scope, element, attr) { - scope.$watchCollection(attr.ngStyle, function ngStyleWatchAction(newStyles, oldStyles) { - if (oldStyles && (newStyles !== oldStyles)) { - forEach(oldStyles, function(val, style) { element.css(style, '');}); - } - if (newStyles) element.css(newStyles); - }); -}); - -/** - * @ngdoc directive - * @name ngSwitch - * @restrict EA - * - * @description - * The `ngSwitch` directive is used to conditionally swap DOM structure on your template based on a scope expression. - * Elements within `ngSwitch` but without `ngSwitchWhen` or `ngSwitchDefault` directives will be preserved at the location - * as specified in the template. - * - * The directive itself works similar to ngInclude, however, instead of downloading template code (or loading it - * from the template cache), `ngSwitch` simply chooses one of the nested elements and makes it visible based on which element - * matches the value obtained from the evaluated expression. In other words, you define a container element - * (where you place the directive), place an expression on the **`on="..."` attribute** - * (or the **`ng-switch="..."` attribute**), define any inner elements inside of the directive and place - * a when attribute per element. The when attribute is used to inform ngSwitch which element to display when the on - * expression is evaluated. If a matching expression is not found via a when attribute then an element with the default - * attribute is displayed. - * - * <div class="alert alert-info"> - * Be aware that the attribute values to match against cannot be expressions. They are interpreted - * as literal string values to match against. - * For example, **`ng-switch-when="someVal"`** will match against the string `"someVal"` not against the - * value of the expression `$scope.someVal`. - * </div> - - * @animations - * enter - happens after the ngSwitch contents change and the matched child element is placed inside the container - * leave - happens just after the ngSwitch contents change and just before the former contents are removed from the DOM - * - * @usage - * - * ``` - * <ANY ng-switch="expression"> - * <ANY ng-switch-when="matchValue1">...</ANY> - * <ANY ng-switch-when="matchValue2">...</ANY> - * <ANY ng-switch-default>...</ANY> - * </ANY> - * ``` - * - * - * @scope - * @priority 1200 - * @param {*} ngSwitch|on expression to match against <tt>ng-switch-when</tt>. - * On child elements add: - * - * * `ngSwitchWhen`: the case statement to match against. If match then this - * case will be displayed. If the same match appears multiple times, all the - * elements will be displayed. - * * `ngSwitchDefault`: the default case when no other case match. If there - * are multiple default cases, all of them will be displayed when no other - * case match. - * - * - * @example - <example module="switchExample" deps="angular-animate.js" animations="true"> - <file name="index.html"> - <div ng-controller="ExampleController"> - <select ng-model="selection" ng-options="item for item in items"> - </select> - <tt>selection={{selection}}</tt> - <hr/> - <div class="animate-switch-container" - ng-switch on="selection"> - <div class="animate-switch" ng-switch-when="settings">Settings Div</div> - <div class="animate-switch" ng-switch-when="home">Home Span</div> - <div class="animate-switch" ng-switch-default>default</div> - </div> - </div> - </file> - <file name="script.js"> - angular.module('switchExample', ['ngAnimate']) - .controller('ExampleController', ['$scope', function($scope) { - $scope.items = ['settings', 'home', 'other']; - $scope.selection = $scope.items[0]; - }]); - </file> - <file name="animations.css"> - .animate-switch-container { - position:relative; - background:white; - border:1px solid black; - height:40px; - overflow:hidden; - } - - .animate-switch { - padding:10px; - } - - .animate-switch.ng-animate { - -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; - transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; - - position:absolute; - top:0; - left:0; - right:0; - bottom:0; - } - - .animate-switch.ng-leave.ng-leave-active, - .animate-switch.ng-enter { - top:-50px; - } - .animate-switch.ng-leave, - .animate-switch.ng-enter.ng-enter-active { - top:0; - } - </file> - <file name="protractor.js" type="protractor"> - var switchElem = element(by.css('[ng-switch]')); - var select = element(by.model('selection')); - - it('should start in settings', function() { - expect(switchElem.getText()).toMatch(/Settings Div/); - }); - it('should change to home', function() { - select.all(by.css('option')).get(1).click(); - expect(switchElem.getText()).toMatch(/Home Span/); - }); - it('should select default', function() { - select.all(by.css('option')).get(2).click(); - expect(switchElem.getText()).toMatch(/default/); - }); - </file> - </example> - */ -var ngSwitchDirective = ['$animate', function($animate) { - return { - restrict: 'EA', - require: 'ngSwitch', - - // asks for $scope to fool the BC controller module - controller: ['$scope', function ngSwitchController() { - this.cases = {}; - }], - link: function(scope, element, attr, ngSwitchController) { - var watchExpr = attr.ngSwitch || attr.on, - selectedTranscludes = [], - selectedElements = [], - previousLeaveAnimations = [], - selectedScopes = []; - - var spliceFactory = function(array, index) { - return function() { array.splice(index, 1); }; - }; - - scope.$watch(watchExpr, function ngSwitchWatchAction(value) { - var i, ii; - for (i = 0, ii = previousLeaveAnimations.length; i < ii; ++i) { - $animate.cancel(previousLeaveAnimations[i]); - } - previousLeaveAnimations.length = 0; - - for (i = 0, ii = selectedScopes.length; i < ii; ++i) { - var selected = getBlockNodes(selectedElements[i].clone); - selectedScopes[i].$destroy(); - var promise = previousLeaveAnimations[i] = $animate.leave(selected); - promise.then(spliceFactory(previousLeaveAnimations, i)); - } - - selectedElements.length = 0; - selectedScopes.length = 0; - - if ((selectedTranscludes = ngSwitchController.cases['!' + value] || ngSwitchController.cases['?'])) { - forEach(selectedTranscludes, function(selectedTransclude) { - selectedTransclude.transclude(function(caseElement, selectedScope) { - selectedScopes.push(selectedScope); - var anchor = selectedTransclude.element; - caseElement[caseElement.length++] = document.createComment(' end ngSwitchWhen: '); - var block = { clone: caseElement }; - - selectedElements.push(block); - $animate.enter(caseElement, anchor.parent(), anchor); - }); - }); - } - }); - } - }; -}]; - -var ngSwitchWhenDirective = ngDirective({ - transclude: 'element', - priority: 1200, - require: '^ngSwitch', - multiElement: true, - link: function(scope, element, attrs, ctrl, $transclude) { - ctrl.cases['!' + attrs.ngSwitchWhen] = (ctrl.cases['!' + attrs.ngSwitchWhen] || []); - ctrl.cases['!' + attrs.ngSwitchWhen].push({ transclude: $transclude, element: element }); - } -}); - -var ngSwitchDefaultDirective = ngDirective({ - transclude: 'element', - priority: 1200, - require: '^ngSwitch', - multiElement: true, - link: function(scope, element, attr, ctrl, $transclude) { - ctrl.cases['?'] = (ctrl.cases['?'] || []); - ctrl.cases['?'].push({ transclude: $transclude, element: element }); - } -}); - -/** - * @ngdoc directive - * @name ngTransclude - * @restrict EAC - * - * @description - * Directive that marks the insertion point for the transcluded DOM of the nearest parent directive that uses transclusion. - * - * Any existing content of the element that this directive is placed on will be removed before the transcluded content is inserted. - * - * @element ANY - * - * @example - <example module="transcludeExample"> - <file name="index.html"> - <script> - angular.module('transcludeExample', []) - .directive('pane', function(){ - return { - restrict: 'E', - transclude: true, - scope: { title:'@' }, - template: '<div style="border: 1px solid black;">' + - '<div style="background-color: gray">{{title}}</div>' + - '<ng-transclude></ng-transclude>' + - '</div>' - }; - }) - .controller('ExampleController', ['$scope', function($scope) { - $scope.title = 'Lorem Ipsum'; - $scope.text = 'Neque porro quisquam est qui dolorem ipsum quia dolor...'; - }]); - </script> - <div ng-controller="ExampleController"> - <input ng-model="title"> <br/> - <textarea ng-model="text"></textarea> <br/> - <pane title="{{title}}">{{text}}</pane> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should have transcluded', function() { - var titleElement = element(by.model('title')); - titleElement.clear(); - titleElement.sendKeys('TITLE'); - var textElement = element(by.model('text')); - textElement.clear(); - textElement.sendKeys('TEXT'); - expect(element(by.binding('title')).getText()).toEqual('TITLE'); - expect(element(by.binding('text')).getText()).toEqual('TEXT'); - }); - </file> - </example> - * - */ -var ngTranscludeDirective = ngDirective({ - restrict: 'EAC', - link: function($scope, $element, $attrs, controller, $transclude) { - if (!$transclude) { - throw minErr('ngTransclude')('orphan', - 'Illegal use of ngTransclude directive in the template! ' + - 'No parent directive that requires a transclusion found. ' + - 'Element: {0}', - startingTag($element)); - } - - $transclude(function(clone) { - $element.empty(); - $element.append(clone); - }); - } -}); - -/** - * @ngdoc directive - * @name script - * @restrict E - * - * @description - * Load the content of a `<script>` element into {@link ng.$templateCache `$templateCache`}, so that the - * template can be used by {@link ng.directive:ngInclude `ngInclude`}, - * {@link ngRoute.directive:ngView `ngView`}, or {@link guide/directive directives}. The type of the - * `<script>` element must be specified as `text/ng-template`, and a cache name for the template must be - * assigned through the element's `id`, which can then be used as a directive's `templateUrl`. - * - * @param {string} type Must be set to `'text/ng-template'`. - * @param {string} id Cache name of the template. - * - * @example - <example> - <file name="index.html"> - <script type="text/ng-template" id="/tpl.html"> - Content of the template. - </script> - - <a ng-click="currentTpl='/tpl.html'" id="tpl-link">Load inlined template</a> - <div id="tpl-content" ng-include src="currentTpl"></div> - </file> - <file name="protractor.js" type="protractor"> - it('should load template defined inside script tag', function() { - element(by.css('#tpl-link')).click(); - expect(element(by.css('#tpl-content')).getText()).toMatch(/Content of the template/); - }); - </file> - </example> - */ -var scriptDirective = ['$templateCache', function($templateCache) { - return { - restrict: 'E', - terminal: true, - compile: function(element, attr) { - if (attr.type == 'text/ng-template') { - var templateUrl = attr.id, - text = element[0].text; - - $templateCache.put(templateUrl, text); - } - } - }; -}]; - -var ngOptionsMinErr = minErr('ngOptions'); -/** - * @ngdoc directive - * @name select - * @restrict E - * - * @description - * HTML `SELECT` element with angular data-binding. - * - * # `ngOptions` - * - * The `ngOptions` attribute can be used to dynamically generate a list of `<option>` - * elements for the `<select>` element using the array or object obtained by evaluating the - * `ngOptions` comprehension expression. - * - * In many cases, `ngRepeat` can be used on `<option>` elements instead of `ngOptions` to achieve a - * similar result. However, `ngOptions` provides some benefits such as reducing memory and - * increasing speed by not creating a new scope for each repeated instance, as well as providing - * more flexibility in how the `<select>`'s model is assigned via the `select` **`as`** part of the - * comprehension expression. `ngOptions` should be used when the `<select>` model needs to be bound - * to a non-string value. This is because an option element can only be bound to string values at - * present. - * - * When an item in the `<select>` menu is selected, the array element or object property - * represented by the selected option will be bound to the model identified by the `ngModel` - * directive. - * - * Optionally, a single hard-coded `<option>` element, with the value set to an empty string, can - * be nested into the `<select>` element. This element will then represent the `null` or "not selected" - * option. See example below for demonstration. - * - * <div class="alert alert-warning"> - * **Note:** `ngModel` compares by reference, not value. This is important when binding to an - * array of objects. See an example [in this jsfiddle](http://jsfiddle.net/qWzTb/). - * </div> - * - * ## `select` **`as`** - * - * Using `select` **`as`** will bind the result of the `select` expression to the model, but - * the value of the `<select>` and `<option>` html elements will be either the index (for array data sources) - * or property name (for object data sources) of the value within the collection. If a **`track by`** expression - * is used, the result of that expression will be set as the value of the `option` and `select` elements. - * - * - * ### `select` **`as`** and **`track by`** - * - * <div class="alert alert-warning"> - * Do not use `select` **`as`** and **`track by`** in the same expression. They are not designed to work together. - * </div> - * - * Consider the following example: - * - * ```html - * <select ng-options="item.subItem as item.label for item in values track by item.id" ng-model="selected"> - * ``` - * - * ```js - * $scope.values = [{ - * id: 1, - * label: 'aLabel', - * subItem: { name: 'aSubItem' } - * }, { - * id: 2, - * label: 'bLabel', - * subItem: { name: 'bSubItem' } - * }]; - * - * $scope.selected = { name: 'aSubItem' }; - * ``` - * - * With the purpose of preserving the selection, the **`track by`** expression is always applied to the element - * of the data source (to `item` in this example). To calculate whether an element is selected, we do the - * following: - * - * 1. Apply **`track by`** to the elements in the array. In the example: `[1, 2]` - * 2. Apply **`track by`** to the already selected value in `ngModel`. - * In the example: this is not possible as **`track by`** refers to `item.id`, but the selected - * value from `ngModel` is `{name: 'aSubItem'}`, so the **`track by`** expression is applied to - * a wrong object, the selected element can't be found, `<select>` is always reset to the "not - * selected" option. - * - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} required The control is considered valid only if value is entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {comprehension_expression=} ngOptions in one of the following forms: - * - * * for array data sources: - * * `label` **`for`** `value` **`in`** `array` - * * `select` **`as`** `label` **`for`** `value` **`in`** `array` - * * `label` **`group by`** `group` **`for`** `value` **`in`** `array` - * * `label` **`group by`** `group` **`for`** `value` **`in`** `array` **`track by`** `trackexpr` - * * `label` **`for`** `value` **`in`** `array` | orderBy:`orderexpr` **`track by`** `trackexpr` - * (for including a filter with `track by`) - * * for object data sources: - * * `label` **`for (`**`key` **`,`** `value`**`) in`** `object` - * * `select` **`as`** `label` **`for (`**`key` **`,`** `value`**`) in`** `object` - * * `label` **`group by`** `group` **`for (`**`key`**`,`** `value`**`) in`** `object` - * * `select` **`as`** `label` **`group by`** `group` - * **`for` `(`**`key`**`,`** `value`**`) in`** `object` - * - * Where: - * - * * `array` / `object`: an expression which evaluates to an array / object to iterate over. - * * `value`: local variable which will refer to each item in the `array` or each property value - * of `object` during iteration. - * * `key`: local variable which will refer to a property name in `object` during iteration. - * * `label`: The result of this expression will be the label for `<option>` element. The - * `expression` will most likely refer to the `value` variable (e.g. `value.propertyName`). - * * `select`: The result of this expression will be bound to the model of the parent `<select>` - * element. If not specified, `select` expression will default to `value`. - * * `group`: The result of this expression will be used to group options using the `<optgroup>` - * DOM element. - * * `trackexpr`: Used when working with an array of objects. The result of this expression will be - * used to identify the objects in the array. The `trackexpr` will most likely refer to the - * `value` variable (e.g. `value.propertyName`). With this the selection is preserved - * even when the options are recreated (e.g. reloaded from the server). - * - * @example - <example module="selectExample"> - <file name="index.html"> - <script> - angular.module('selectExample', []) - .controller('ExampleController', ['$scope', function($scope) { - $scope.colors = [ - {name:'black', shade:'dark'}, - {name:'white', shade:'light'}, - {name:'red', shade:'dark'}, - {name:'blue', shade:'dark'}, - {name:'yellow', shade:'light'} - ]; - $scope.myColor = $scope.colors[2]; // red - }]); - </script> - <div ng-controller="ExampleController"> - <ul> - <li ng-repeat="color in colors"> - Name: <input ng-model="color.name"> - [<a href ng-click="colors.splice($index, 1)">X</a>] - </li> - <li> - [<a href ng-click="colors.push({})">add</a>] - </li> - </ul> - <hr/> - Color (null not allowed): - <select ng-model="myColor" ng-options="color.name for color in colors"></select><br> - - Color (null allowed): - <span class="nullable"> - <select ng-model="myColor" ng-options="color.name for color in colors"> - <option value="">-- choose color --</option> - </select> - </span><br/> - - Color grouped by shade: - <select ng-model="myColor" ng-options="color.name group by color.shade for color in colors"> - </select><br/> - - - Select <a href ng-click="myColor = { name:'not in list', shade: 'other' }">bogus</a>.<br> - <hr/> - Currently selected: {{ {selected_color:myColor} }} - <div style="border:solid 1px black; height:20px" - ng-style="{'background-color':myColor.name}"> - </div> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-options', function() { - expect(element(by.binding('{selected_color:myColor}')).getText()).toMatch('red'); - element.all(by.model('myColor')).first().click(); - element.all(by.css('select[ng-model="myColor"] option')).first().click(); - expect(element(by.binding('{selected_color:myColor}')).getText()).toMatch('black'); - element(by.css('.nullable select[ng-model="myColor"]')).click(); - element.all(by.css('.nullable select[ng-model="myColor"] option')).first().click(); - expect(element(by.binding('{selected_color:myColor}')).getText()).toMatch('null'); - }); - </file> - </example> - */ - -var ngOptionsDirective = valueFn({ - restrict: 'A', - terminal: true -}); - -// jshint maxlen: false -var selectDirective = ['$compile', '$parse', function($compile, $parse) { - //000011111111110000000000022222222220000000000000000000003333333333000000000000004444444444444440000000005555555555555550000000666666666666666000000000000000777777777700000000000000000008888888888 - var NG_OPTIONS_REGEXP = /^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/, - nullModelCtrl = {$setViewValue: noop}; -// jshint maxlen: 100 - - return { - restrict: 'E', - require: ['select', '?ngModel'], - controller: ['$element', '$scope', '$attrs', function($element, $scope, $attrs) { - var self = this, - optionsMap = {}, - ngModelCtrl = nullModelCtrl, - nullOption, - unknownOption; - - - self.databound = $attrs.ngModel; - - - self.init = function(ngModelCtrl_, nullOption_, unknownOption_) { - ngModelCtrl = ngModelCtrl_; - nullOption = nullOption_; - unknownOption = unknownOption_; - }; - - - self.addOption = function(value, element) { - assertNotHasOwnProperty(value, '"option value"'); - optionsMap[value] = true; - - if (ngModelCtrl.$viewValue == value) { - $element.val(value); - if (unknownOption.parent()) unknownOption.remove(); - } - // Workaround for https://code.google.com/p/chromium/issues/detail?id=381459 - // Adding an <option selected="selected"> element to a <select required="required"> should - // automatically select the new element - if (element && element[0].hasAttribute('selected')) { - element[0].selected = true; - } - }; - - - self.removeOption = function(value) { - if (this.hasOption(value)) { - delete optionsMap[value]; - if (ngModelCtrl.$viewValue === value) { - this.renderUnknownOption(value); - } - } - }; - - - self.renderUnknownOption = function(val) { - var unknownVal = '? ' + hashKey(val) + ' ?'; - unknownOption.val(unknownVal); - $element.prepend(unknownOption); - $element.val(unknownVal); - unknownOption.prop('selected', true); // needed for IE - }; - - - self.hasOption = function(value) { - return optionsMap.hasOwnProperty(value); - }; - - $scope.$on('$destroy', function() { - // disable unknown option so that we don't do work when the whole select is being destroyed - self.renderUnknownOption = noop; - }); - }], - - link: function(scope, element, attr, ctrls) { - // if ngModel is not defined, we don't need to do anything - if (!ctrls[1]) return; - - var selectCtrl = ctrls[0], - ngModelCtrl = ctrls[1], - multiple = attr.multiple, - optionsExp = attr.ngOptions, - nullOption = false, // if false, user will not be able to select it (used by ngOptions) - emptyOption, - renderScheduled = false, - // we can't just jqLite('<option>') since jqLite is not smart enough - // to create it in <select> and IE barfs otherwise. - optionTemplate = jqLite(document.createElement('option')), - optGroupTemplate =jqLite(document.createElement('optgroup')), - unknownOption = optionTemplate.clone(); - - // find "null" option - for (var i = 0, children = element.children(), ii = children.length; i < ii; i++) { - if (children[i].value === '') { - emptyOption = nullOption = children.eq(i); - break; - } - } - - selectCtrl.init(ngModelCtrl, nullOption, unknownOption); - - // required validator - if (multiple) { - ngModelCtrl.$isEmpty = function(value) { - return !value || value.length === 0; - }; - } - - if (optionsExp) setupAsOptions(scope, element, ngModelCtrl); - else if (multiple) setupAsMultiple(scope, element, ngModelCtrl); - else setupAsSingle(scope, element, ngModelCtrl, selectCtrl); - - - //////////////////////////// - - - - function setupAsSingle(scope, selectElement, ngModelCtrl, selectCtrl) { - ngModelCtrl.$render = function() { - var viewValue = ngModelCtrl.$viewValue; - - if (selectCtrl.hasOption(viewValue)) { - if (unknownOption.parent()) unknownOption.remove(); - selectElement.val(viewValue); - if (viewValue === '') emptyOption.prop('selected', true); // to make IE9 happy - } else { - if (isUndefined(viewValue) && emptyOption) { - selectElement.val(''); - } else { - selectCtrl.renderUnknownOption(viewValue); - } - } - }; - - selectElement.on('change', function() { - scope.$apply(function() { - if (unknownOption.parent()) unknownOption.remove(); - ngModelCtrl.$setViewValue(selectElement.val()); - }); - }); - } - - function setupAsMultiple(scope, selectElement, ctrl) { - var lastView; - ctrl.$render = function() { - var items = new HashMap(ctrl.$viewValue); - forEach(selectElement.find('option'), function(option) { - option.selected = isDefined(items.get(option.value)); - }); - }; - - // we have to do it on each watch since ngModel watches reference, but - // we need to work of an array, so we need to see if anything was inserted/removed - scope.$watch(function selectMultipleWatch() { - if (!equals(lastView, ctrl.$viewValue)) { - lastView = shallowCopy(ctrl.$viewValue); - ctrl.$render(); - } - }); - - selectElement.on('change', function() { - scope.$apply(function() { - var array = []; - forEach(selectElement.find('option'), function(option) { - if (option.selected) { - array.push(option.value); - } - }); - ctrl.$setViewValue(array); - }); - }); - } - - function setupAsOptions(scope, selectElement, ctrl) { - var match; - - if (!(match = optionsExp.match(NG_OPTIONS_REGEXP))) { - throw ngOptionsMinErr('iexp', - "Expected expression in form of " + - "'_select_ (as _label_)? for (_key_,)?_value_ in _collection_'" + - " but got '{0}'. Element: {1}", - optionsExp, startingTag(selectElement)); - } - - var displayFn = $parse(match[2] || match[1]), - valueName = match[4] || match[6], - selectAs = / as /.test(match[0]) && match[1], - selectAsFn = selectAs ? $parse(selectAs) : null, - keyName = match[5], - groupByFn = $parse(match[3] || ''), - valueFn = $parse(match[2] ? match[1] : valueName), - valuesFn = $parse(match[7]), - track = match[8], - trackFn = track ? $parse(match[8]) : null, - trackKeysCache = {}, - // This is an array of array of existing option groups in DOM. - // We try to reuse these if possible - // - optionGroupsCache[0] is the options with no option group - // - optionGroupsCache[?][0] is the parent: either the SELECT or OPTGROUP element - optionGroupsCache = [[{element: selectElement, label:''}]], - //re-usable object to represent option's locals - locals = {}; - - if (nullOption) { - // compile the element since there might be bindings in it - $compile(nullOption)(scope); - - // remove the class, which is added automatically because we recompile the element and it - // becomes the compilation root - nullOption.removeClass('ng-scope'); - - // we need to remove it before calling selectElement.empty() because otherwise IE will - // remove the label from the element. wtf? - nullOption.remove(); - } - - // clear contents, we'll add what's needed based on the model - selectElement.empty(); - - selectElement.on('change', selectionChanged); - - ctrl.$render = render; - - scope.$watchCollection(valuesFn, scheduleRendering); - scope.$watchCollection(getLabels, scheduleRendering); - - if (multiple) { - scope.$watchCollection(function() { return ctrl.$modelValue; }, scheduleRendering); - } - - // ------------------------------------------------------------------ // - - function callExpression(exprFn, key, value) { - locals[valueName] = value; - if (keyName) locals[keyName] = key; - return exprFn(scope, locals); - } - - function selectionChanged() { - scope.$apply(function() { - var collection = valuesFn(scope) || []; - var viewValue; - if (multiple) { - viewValue = []; - forEach(selectElement.val(), function(selectedKey) { - selectedKey = trackFn ? trackKeysCache[selectedKey] : selectedKey; - viewValue.push(getViewValue(selectedKey, collection[selectedKey])); - }); - } else { - var selectedKey = trackFn ? trackKeysCache[selectElement.val()] : selectElement.val(); - viewValue = getViewValue(selectedKey, collection[selectedKey]); - } - ctrl.$setViewValue(viewValue); - render(); - }); - } - - function getViewValue(key, value) { - if (key === '?') { - return undefined; - } else if (key === '') { - return null; - } else { - var viewValueFn = selectAsFn ? selectAsFn : valueFn; - return callExpression(viewValueFn, key, value); - } - } - - function getLabels() { - var values = valuesFn(scope); - var toDisplay; - if (values && isArray(values)) { - toDisplay = new Array(values.length); - for (var i = 0, ii = values.length; i < ii; i++) { - toDisplay[i] = callExpression(displayFn, i, values[i]); - } - return toDisplay; - } else if (values) { - // TODO: Add a test for this case - toDisplay = {}; - for (var prop in values) { - if (values.hasOwnProperty(prop)) { - toDisplay[prop] = callExpression(displayFn, prop, values[prop]); - } - } - } - return toDisplay; - } - - function createIsSelectedFn(viewValue) { - var selectedSet; - if (multiple) { - if (trackFn && isArray(viewValue)) { - - selectedSet = new HashMap([]); - for (var trackIndex = 0; trackIndex < viewValue.length; trackIndex++) { - // tracking by key - selectedSet.put(callExpression(trackFn, null, viewValue[trackIndex]), true); - } - } else { - selectedSet = new HashMap(viewValue); - } - } else if (trackFn) { - viewValue = callExpression(trackFn, null, viewValue); - } - - return function isSelected(key, value) { - var compareValueFn; - if (trackFn) { - compareValueFn = trackFn; - } else if (selectAsFn) { - compareValueFn = selectAsFn; - } else { - compareValueFn = valueFn; - } - - if (multiple) { - return isDefined(selectedSet.remove(callExpression(compareValueFn, key, value))); - } else { - return viewValue === callExpression(compareValueFn, key, value); - } - }; - } - - function scheduleRendering() { - if (!renderScheduled) { - scope.$$postDigest(render); - renderScheduled = true; - } - } - - /** - * A new labelMap is created with each render. - * This function is called for each existing option with added=false, - * and each new option with added=true. - * - Labels that are passed to this method twice, - * (once with added=true and once with added=false) will end up with a value of 0, and - * will cause no change to happen to the corresponding option. - * - Labels that are passed to this method only once with added=false will end up with a - * value of -1 and will eventually be passed to selectCtrl.removeOption() - * - Labels that are passed to this method only once with added=true will end up with a - * value of 1 and will eventually be passed to selectCtrl.addOption() - */ - function updateLabelMap(labelMap, label, added) { - labelMap[label] = labelMap[label] || 0; - labelMap[label] += (added ? 1 : -1); - } - - function render() { - renderScheduled = false; - - // Temporary location for the option groups before we render them - var optionGroups = {'':[]}, - optionGroupNames = [''], - optionGroupName, - optionGroup, - option, - existingParent, existingOptions, existingOption, - viewValue = ctrl.$viewValue, - values = valuesFn(scope) || [], - keys = keyName ? sortedKeys(values) : values, - key, - value, - groupLength, length, - groupIndex, index, - labelMap = {}, - selected, - isSelected = createIsSelectedFn(viewValue), - anySelected = false, - lastElement, - element, - label, - optionId; - - trackKeysCache = {}; - - // We now build up the list of options we need (we merge later) - for (index = 0; length = keys.length, index < length; index++) { - key = index; - if (keyName) { - key = keys[index]; - if (key.charAt(0) === '$') continue; - } - value = values[key]; - - optionGroupName = callExpression(groupByFn, key, value) || ''; - if (!(optionGroup = optionGroups[optionGroupName])) { - optionGroup = optionGroups[optionGroupName] = []; - optionGroupNames.push(optionGroupName); - } - - selected = isSelected(key, value); - anySelected = anySelected || selected; - - label = callExpression(displayFn, key, value); // what will be seen by the user - - // doing displayFn(scope, locals) || '' overwrites zero values - label = isDefined(label) ? label : ''; - optionId = trackFn ? trackFn(scope, locals) : (keyName ? keys[index] : index); - if (trackFn) { - trackKeysCache[optionId] = key; - } - - optionGroup.push({ - // either the index into array or key from object - id: optionId, - label: label, - selected: selected // determine if we should be selected - }); - } - if (!multiple) { - if (nullOption || viewValue === null) { - // insert null option if we have a placeholder, or the model is null - optionGroups[''].unshift({id:'', label:'', selected:!anySelected}); - } else if (!anySelected) { - // option could not be found, we have to insert the undefined item - optionGroups[''].unshift({id:'?', label:'', selected:true}); - } - } - - // Now we need to update the list of DOM nodes to match the optionGroups we computed above - for (groupIndex = 0, groupLength = optionGroupNames.length; - groupIndex < groupLength; - groupIndex++) { - // current option group name or '' if no group - optionGroupName = optionGroupNames[groupIndex]; - - // list of options for that group. (first item has the parent) - optionGroup = optionGroups[optionGroupName]; - - if (optionGroupsCache.length <= groupIndex) { - // we need to grow the optionGroups - existingParent = { - element: optGroupTemplate.clone().attr('label', optionGroupName), - label: optionGroup.label - }; - existingOptions = [existingParent]; - optionGroupsCache.push(existingOptions); - selectElement.append(existingParent.element); - } else { - existingOptions = optionGroupsCache[groupIndex]; - existingParent = existingOptions[0]; // either SELECT (no group) or OPTGROUP element - - // update the OPTGROUP label if not the same. - if (existingParent.label != optionGroupName) { - existingParent.element.attr('label', existingParent.label = optionGroupName); - } - } - - lastElement = null; // start at the beginning - for (index = 0, length = optionGroup.length; index < length; index++) { - option = optionGroup[index]; - if ((existingOption = existingOptions[index + 1])) { - // reuse elements - lastElement = existingOption.element; - if (existingOption.label !== option.label) { - updateLabelMap(labelMap, existingOption.label, false); - updateLabelMap(labelMap, option.label, true); - lastElement.text(existingOption.label = option.label); - lastElement.prop('label', existingOption.label); - } - if (existingOption.id !== option.id) { - lastElement.val(existingOption.id = option.id); - } - // lastElement.prop('selected') provided by jQuery has side-effects - if (lastElement[0].selected !== option.selected) { - lastElement.prop('selected', (existingOption.selected = option.selected)); - if (msie) { - // See #7692 - // The selected item wouldn't visually update on IE without this. - // Tested on Win7: IE9, IE10 and IE11. Future IEs should be tested as well - lastElement.prop('selected', existingOption.selected); - } - } - } else { - // grow elements - - // if it's a null option - if (option.id === '' && nullOption) { - // put back the pre-compiled element - element = nullOption; - } else { - // jQuery(v1.4.2) Bug: We should be able to chain the method calls, but - // in this version of jQuery on some browser the .text() returns a string - // rather then the element. - (element = optionTemplate.clone()) - .val(option.id) - .prop('selected', option.selected) - .attr('selected', option.selected) - .prop('label', option.label) - .text(option.label); - } - - existingOptions.push(existingOption = { - element: element, - label: option.label, - id: option.id, - selected: option.selected - }); - updateLabelMap(labelMap, option.label, true); - if (lastElement) { - lastElement.after(element); - } else { - existingParent.element.append(element); - } - lastElement = element; - } - } - // remove any excessive OPTIONs in a group - index++; // increment since the existingOptions[0] is parent element not OPTION - while (existingOptions.length > index) { - option = existingOptions.pop(); - updateLabelMap(labelMap, option.label, false); - option.element.remove(); - } - } - // remove any excessive OPTGROUPs from select - while (optionGroupsCache.length > groupIndex) { - // remove all the labels in the option group - optionGroup = optionGroupsCache.pop(); - for (index = 1; index < optionGroup.length; ++index) { - updateLabelMap(labelMap, optionGroup[index].label, false); - } - optionGroup[0].element.remove(); - } - forEach(labelMap, function(count, label) { - if (count > 0) { - selectCtrl.addOption(label); - } else if (count < 0) { - selectCtrl.removeOption(label); - } - }); - } - } - } - }; -}]; - -var optionDirective = ['$interpolate', function($interpolate) { - var nullSelectCtrl = { - addOption: noop, - removeOption: noop - }; - - return { - restrict: 'E', - priority: 100, - compile: function(element, attr) { - if (isUndefined(attr.value)) { - var interpolateFn = $interpolate(element.text(), true); - if (!interpolateFn) { - attr.$set('value', element.text()); - } - } - - return function(scope, element, attr) { - var selectCtrlName = '$selectController', - parent = element.parent(), - selectCtrl = parent.data(selectCtrlName) || - parent.parent().data(selectCtrlName); // in case we are in optgroup - - if (!selectCtrl || !selectCtrl.databound) { - selectCtrl = nullSelectCtrl; - } - - if (interpolateFn) { - scope.$watch(interpolateFn, function interpolateWatchAction(newVal, oldVal) { - attr.$set('value', newVal); - if (oldVal !== newVal) { - selectCtrl.removeOption(oldVal); - } - selectCtrl.addOption(newVal, element); - }); - } else { - selectCtrl.addOption(attr.value, element); - } - - element.on('$destroy', function() { - selectCtrl.removeOption(attr.value); - }); - }; - } - }; -}]; - -var styleDirective = valueFn({ - restrict: 'E', - terminal: false -}); - -var requiredDirective = function() { - return { - restrict: 'A', - require: '?ngModel', - link: function(scope, elm, attr, ctrl) { - if (!ctrl) return; - attr.required = true; // force truthy in case we are on non input element - - ctrl.$validators.required = function(modelValue, viewValue) { - return !attr.required || !ctrl.$isEmpty(viewValue); - }; - - attr.$observe('required', function() { - ctrl.$validate(); - }); - } - }; -}; - - -var patternDirective = function() { - return { - restrict: 'A', - require: '?ngModel', - link: function(scope, elm, attr, ctrl) { - if (!ctrl) return; - - var regexp, patternExp = attr.ngPattern || attr.pattern; - attr.$observe('pattern', function(regex) { - if (isString(regex) && regex.length > 0) { - regex = new RegExp('^' + regex + '$'); - } - - if (regex && !regex.test) { - throw minErr('ngPattern')('noregexp', - 'Expected {0} to be a RegExp but was {1}. Element: {2}', patternExp, - regex, startingTag(elm)); - } - - regexp = regex || undefined; - ctrl.$validate(); - }); - - ctrl.$validators.pattern = function(value) { - return ctrl.$isEmpty(value) || isUndefined(regexp) || regexp.test(value); - }; - } - }; -}; - - -var maxlengthDirective = function() { - return { - restrict: 'A', - require: '?ngModel', - link: function(scope, elm, attr, ctrl) { - if (!ctrl) return; - - var maxlength = -1; - attr.$observe('maxlength', function(value) { - var intVal = int(value); - maxlength = isNaN(intVal) ? -1 : intVal; - ctrl.$validate(); - }); - ctrl.$validators.maxlength = function(modelValue, viewValue) { - return (maxlength < 0) || ctrl.$isEmpty(modelValue) || (viewValue.length <= maxlength); - }; - } - }; -}; - -var minlengthDirective = function() { - return { - restrict: 'A', - require: '?ngModel', - link: function(scope, elm, attr, ctrl) { - if (!ctrl) return; - - var minlength = 0; - attr.$observe('minlength', function(value) { - minlength = int(value) || 0; - ctrl.$validate(); - }); - ctrl.$validators.minlength = function(modelValue, viewValue) { - return ctrl.$isEmpty(viewValue) || viewValue.length >= minlength; - }; - } - }; -}; - -/** - * Setup file for the Scenario. - * Must be first in the compilation/bootstrap list. - */ - -// Public namespace -angular.scenario = angular.scenario || {}; - -/** - * Expose jQuery (e.g. for custom dsl extensions). - */ -angular.scenario.jQuery = _jQuery; - -/** - * Defines a new output format. - * - * @param {string} name the name of the new output format - * @param {function()} fn function(context, runner) that generates the output - */ -angular.scenario.output = angular.scenario.output || function(name, fn) { - angular.scenario.output[name] = fn; -}; - -/** - * Defines a new DSL statement. If your factory function returns a Future - * it's returned, otherwise the result is assumed to be a map of functions - * for chaining. Chained functions are subject to the same rules. - * - * Note: All functions on the chain are bound to the chain scope so values - * set on "this" in your statement function are available in the chained - * functions. - * - * @param {string} name The name of the statement - * @param {function()} fn Factory function(), return a function for - * the statement. - */ -angular.scenario.dsl = angular.scenario.dsl || function(name, fn) { - angular.scenario.dsl[name] = function() { - /* jshint -W040 *//* The dsl binds `this` for us when calling chained functions */ - function executeStatement(statement, args) { - var result = statement.apply(this, args); - if (angular.isFunction(result) || result instanceof angular.scenario.Future) - return result; - var self = this; - var chain = angular.extend({}, result); - angular.forEach(chain, function(value, name) { - if (angular.isFunction(value)) { - chain[name] = function() { - return executeStatement.call(self, value, arguments); - }; - } else { - chain[name] = value; - } - }); - return chain; - } - var statement = fn.apply(this, arguments); - return function() { - return executeStatement.call(this, statement, arguments); - }; - }; -}; - -/** - * Defines a new matcher for use with the expects() statement. The value - * this.actual (like in Jasmine) is available in your matcher to compare - * against. Your function should return a boolean. The future is automatically - * created for you. - * - * @param {string} name The name of the matcher - * @param {function()} fn The matching function(expected). - */ -angular.scenario.matcher = angular.scenario.matcher || function(name, fn) { - angular.scenario.matcher[name] = function(expected) { - var description = this.future.name + - (this.inverse ? ' not ' : ' ') + name + - ' ' + angular.toJson(expected); - var self = this; - this.addFuture('expect ' + description, - function(done) { - var error; - self.actual = self.future.value; - if ((self.inverse && fn.call(self, expected)) || - (!self.inverse && !fn.call(self, expected))) { - error = 'expected ' + description + - ' but was ' + angular.toJson(self.actual); - } - done(error); - }); - }; -}; - -/** - * Initialize the scenario runner and run ! - * - * Access global window and document object - * Access $runner through closure - * - * @param {Object=} config Config options - */ -angular.scenario.setUpAndRun = function(config) { - var href = window.location.href; - var body = _jQuery(document.body); - var output = []; - var objModel = new angular.scenario.ObjectModel($runner); - - if (config && config.scenario_output) { - output = config.scenario_output.split(','); - } - - angular.forEach(angular.scenario.output, function(fn, name) { - if (!output.length || output.indexOf(name) != -1) { - var context = body.append('<div></div>').find('div:last'); - context.attr('id', name); - fn.call({}, context, $runner, objModel); - } - }); - - if (!/^http/.test(href) && !/^https/.test(href)) { - body.append('<p id="system-error"></p>'); - body.find('#system-error').text( - 'Scenario runner must be run using http or https. The protocol ' + - href.split(':')[0] + ':// is not supported.' - ); - return; - } - - var appFrame = body.append('<div id="application"></div>').find('#application'); - var application = new angular.scenario.Application(appFrame); - - $runner.on('RunnerEnd', function() { - appFrame.css('display', 'none'); - appFrame.find('iframe').attr('src', 'about:blank'); - }); - - $runner.on('RunnerError', function(error) { - if (window.console) { - console.log(formatException(error)); - } else { - // Do something for IE - alert(error); - } - }); - - $runner.run(application); -}; - -/** - * Iterates through list with iterator function that must call the - * continueFunction to continue iterating. - * - * @param {Array} list list to iterate over - * @param {function()} iterator Callback function(value, continueFunction) - * @param {function()} done Callback function(error, result) called when - * iteration finishes or an error occurs. - */ -function asyncForEach(list, iterator, done) { - var i = 0; - function loop(error, index) { - if (index && index > i) { - i = index; - } - if (error || i >= list.length) { - done(error); - } else { - try { - iterator(list[i++], loop); - } catch (e) { - done(e); - } - } - } - loop(); -} - -/** - * Formats an exception into a string with the stack trace, but limits - * to a specific line length. - * - * @param {Object} error The exception to format, can be anything throwable - * @param {Number=} [maxStackLines=5] max lines of the stack trace to include - * default is 5. - */ -function formatException(error, maxStackLines) { - maxStackLines = maxStackLines || 5; - var message = error.toString(); - if (error.stack) { - var stack = error.stack.split('\n'); - if (stack[0].indexOf(message) === -1) { - maxStackLines++; - stack.unshift(error.message); - } - message = stack.slice(0, maxStackLines).join('\n'); - } - return message; -} - -/** - * Returns a function that gets the file name and line number from a - * location in the stack if available based on the call site. - * - * Note: this returns another function because accessing .stack is very - * expensive in Chrome. - * - * @param {Number} offset Number of stack lines to skip - */ -function callerFile(offset) { - var error = new Error(); - - return function() { - var line = (error.stack || '').split('\n')[offset]; - - // Clean up the stack trace line - if (line) { - if (line.indexOf('@') !== -1) { - // Firefox - line = line.substring(line.indexOf('@') + 1); - } else { - // Chrome - line = line.substring(line.indexOf('(') + 1).replace(')', ''); - } - } - - return line || ''; - }; -} - - -/** - * Don't use the jQuery trigger method since it works incorrectly. - * - * jQuery notifies listeners and then changes the state of a checkbox and - * does not create a real browser event. A real click changes the state of - * the checkbox and then notifies listeners. - * - * To work around this we instead use our own handler that fires a real event. - */ -(function(fn) { - // We need a handle to the original trigger function for input tests. - var parentTrigger = fn._originalTrigger = fn.trigger; - fn.trigger = function(type) { - if (/(click|change|keydown|blur|input|mousedown|mouseup)/.test(type)) { - var processDefaults = []; - this.each(function(index, node) { - processDefaults.push(browserTrigger(node, type)); - }); - - // this is not compatible with jQuery - we return an array of returned values, - // so that scenario runner know whether JS code has preventDefault() of the event or not... - return processDefaults; - } - return parentTrigger.apply(this, arguments); - }; -})(_jQuery.fn); - -/** - * Finds all bindings with the substring match of name and returns an - * array of their values. - * - * @param {string} bindExp The name to match - * @return {Array.<string>} String of binding values - */ -_jQuery.fn.bindings = function(windowJquery, bindExp) { - var result = [], match, - bindSelector = '.ng-binding:visible'; - if (angular.isString(bindExp)) { - bindExp = bindExp.replace(/\s/g, ''); - match = function(actualExp) { - if (actualExp) { - actualExp = actualExp.replace(/\s/g, ''); - if (actualExp == bindExp) return true; - if (actualExp.indexOf(bindExp) === 0) { - return actualExp.charAt(bindExp.length) == '|'; - } - } - }; - } else if (bindExp) { - match = function(actualExp) { - return actualExp && bindExp.exec(actualExp); - }; - } else { - match = function(actualExp) { - return !!actualExp; - }; - } - var selection = this.find(bindSelector); - if (this.is(bindSelector)) { - selection = selection.add(this); - } - - function push(value) { - if (value === undefined) { - value = ''; - } else if (typeof value !== 'string') { - value = angular.toJson(value); - } - result.push('' + value); - } - - selection.each(function() { - var element = windowJquery(this), - bindings; - if (bindings = element.data('$binding')) { - for (var expressions = [], binding, j=0, jj=bindings.length; j < jj; j++) { - binding = bindings[j]; - - if (binding.expressions) { - expressions = binding.expressions; - } else { - expressions = [binding]; - } - for (var scope, expression, i = 0, ii = expressions.length; i < ii; i++) { - expression = expressions[i]; - if (match(expression)) { - scope = scope || element.scope(); - push(scope.$eval(expression)); - } - } - } - } - }); - return result; -}; - -(function() { - /** - * Triggers a browser event. Attempts to choose the right event if one is - * not specified. - * - * @param {Object} element Either a wrapped jQuery/jqLite node or a DOMElement - * @param {string} eventType Optional event type - * @param {Object=} eventData An optional object which contains additional event data (such as x,y - * coordinates, keys, etc...) that are passed into the event when triggered - */ - window.browserTrigger = function browserTrigger(element, eventType, eventData) { - if (element && !element.nodeName) element = element[0]; - if (!element) return; - - eventData = eventData || {}; - var keys = eventData.keys; - var x = eventData.x; - var y = eventData.y; - - var inputType = (element.type) ? element.type.toLowerCase() : null, - nodeName = element.nodeName.toLowerCase(); - if (!eventType) { - eventType = { - 'text': 'change', - 'textarea': 'change', - 'hidden': 'change', - 'password': 'change', - 'button': 'click', - 'submit': 'click', - 'reset': 'click', - 'image': 'click', - 'checkbox': 'click', - 'radio': 'click', - 'select-one': 'change', - 'select-multiple': 'change', - '_default_': 'click' - }[inputType || '_default_']; - } - - if (nodeName == 'option') { - element.parentNode.value = element.value; - element = element.parentNode; - eventType = 'change'; - } - - keys = keys || []; - function pressed(key) { - return keys.indexOf(key) !== -1; - } - - var evnt; - if (/transitionend/.test(eventType)) { - if (window.WebKitTransitionEvent) { - evnt = new WebKitTransitionEvent(eventType, eventData); - evnt.initEvent(eventType, false, true); - } - else { - try { - evnt = new TransitionEvent(eventType, eventData); - } - catch (e) { - evnt = document.createEvent('TransitionEvent'); - evnt.initTransitionEvent(eventType, null, null, null, eventData.elapsedTime || 0); - } - } - } - else if (/animationend/.test(eventType)) { - if (window.WebKitAnimationEvent) { - evnt = new WebKitAnimationEvent(eventType, eventData); - evnt.initEvent(eventType, false, true); - } - else { - try { - evnt = new AnimationEvent(eventType, eventData); - } - catch (e) { - evnt = document.createEvent('AnimationEvent'); - evnt.initAnimationEvent(eventType, null, null, null, eventData.elapsedTime || 0); - } - } - } - else { - evnt = document.createEvent('MouseEvents'); - x = x || 0; - y = y || 0; - evnt.initMouseEvent(eventType, true, true, window, 0, x, y, x, y, pressed('ctrl'), - pressed('alt'), pressed('shift'), pressed('meta'), 0, element); - } - - /* we're unable to change the timeStamp value directly so this - * is only here to allow for testing where the timeStamp value is - * read */ - evnt.$manualTimeStamp = eventData.timeStamp; - - if (!evnt) return; - - var originalPreventDefault = evnt.preventDefault, - appWindow = element.ownerDocument.defaultView, - fakeProcessDefault = true, - finalProcessDefault, - angular = appWindow.angular || {}; - - // igor: temporary fix for https://bugzilla.mozilla.org/show_bug.cgi?id=684208 - angular['ff-684208-preventDefault'] = false; - evnt.preventDefault = function() { - fakeProcessDefault = false; - return originalPreventDefault.apply(evnt, arguments); - }; - - element.dispatchEvent(evnt); - finalProcessDefault = !(angular['ff-684208-preventDefault'] || !fakeProcessDefault); - - delete angular['ff-684208-preventDefault']; - - return finalProcessDefault; - }; -}()); - -/** - * Represents the application currently being tested and abstracts usage - * of iframes or separate windows. - * - * @param {Object} context jQuery wrapper around HTML context. - */ -angular.scenario.Application = function(context) { - this.context = context; - context.append( - '<h2>Current URL: <a href="about:blank">None</a></h2>' + - '<div id="test-frames"></div>' - ); -}; - -/** - * Gets the jQuery collection of frames. Don't use this directly because - * frames may go stale. - * - * @private - * @return {Object} jQuery collection - */ -angular.scenario.Application.prototype.getFrame_ = function() { - return this.context.find('#test-frames iframe:last'); -}; - -/** - * Gets the window of the test runner frame. Always favor executeAction() - * instead of this method since it prevents you from getting a stale window. - * - * @private - * @return {Object} the window of the frame - */ -angular.scenario.Application.prototype.getWindow_ = function() { - var contentWindow = this.getFrame_().prop('contentWindow'); - if (!contentWindow) - throw 'Frame window is not accessible.'; - return contentWindow; -}; - -/** - * Changes the location of the frame. - * - * @param {string} url The URL. If it begins with a # then only the - * hash of the page is changed. - * @param {function()} loadFn function($window, $document) Called when frame loads. - * @param {function()} errorFn function(error) Called if any error when loading. - */ -angular.scenario.Application.prototype.navigateTo = function(url, loadFn, errorFn) { - var self = this; - var frame = self.getFrame_(); - //TODO(esprehn): Refactor to use rethrow() - errorFn = errorFn || function(e) { throw e; }; - if (url === 'about:blank') { - errorFn('Sandbox Error: Navigating to about:blank is not allowed.'); - } else if (url.charAt(0) === '#') { - url = frame.attr('src').split('#')[0] + url; - frame.attr('src', url); - self.executeAction(loadFn); - } else { - frame.remove(); - self.context.find('#test-frames').append('<iframe>'); - frame = self.getFrame_(); - - frame.load(function() { - frame.off(); - try { - var $window = self.getWindow_(); - - if ($window.angular) { - // Disable animations - $window.angular.resumeBootstrap([['$provide', function($provide) { - return ['$animate', function($animate) { - $animate.enabled(false); - }]; - }]]); - } - - self.executeAction(loadFn); - } catch (e) { - errorFn(e); - } - }).attr('src', url); - - // for IE compatibility set the name *after* setting the frame url - frame[0].contentWindow.name = "NG_DEFER_BOOTSTRAP!"; - } - self.context.find('> h2 a').attr('href', url).text(url); -}; - -/** - * Executes a function in the context of the tested application. Will wait - * for all pending angular xhr requests before executing. - * - * @param {function()} action The callback to execute. function($window, $document) - * $document is a jQuery wrapped document. - */ -angular.scenario.Application.prototype.executeAction = function(action) { - var self = this; - var $window = this.getWindow_(); - if (!$window.document) { - throw 'Sandbox Error: Application document not accessible.'; - } - if (!$window.angular) { - return action.call(this, $window, _jQuery($window.document)); - } - angularInit($window.document, function(element) { - var $injector = $window.angular.element(element).injector(); - var $element = _jQuery(element); - - $element.injector = function() { - return $injector; - }; - - $injector.invoke(function($browser) { - $browser.notifyWhenNoOutstandingRequests(function() { - action.call(self, $window, $element); - }); - }); - }); -}; - -/** - * The representation of define blocks. Don't used directly, instead use - * define() in your tests. - * - * @param {string} descName Name of the block - * @param {Object} parent describe or undefined if the root. - */ -angular.scenario.Describe = function(descName, parent) { - this.only = parent && parent.only; - this.beforeEachFns = []; - this.afterEachFns = []; - this.its = []; - this.children = []; - this.name = descName; - this.parent = parent; - this.id = angular.scenario.Describe.id++; - - /** - * Calls all before functions. - */ - var beforeEachFns = this.beforeEachFns; - this.setupBefore = function() { - if (parent) parent.setupBefore.call(this); - angular.forEach(beforeEachFns, function(fn) { fn.call(this); }, this); - }; - - /** - * Calls all after functions. - */ - var afterEachFns = this.afterEachFns; - this.setupAfter = function() { - angular.forEach(afterEachFns, function(fn) { fn.call(this); }, this); - if (parent) parent.setupAfter.call(this); - }; -}; - -// Shared Unique ID generator for every describe block -angular.scenario.Describe.id = 0; - -// Shared Unique ID generator for every it (spec) -angular.scenario.Describe.specId = 0; - -/** - * Defines a block to execute before each it or nested describe. - * - * @param {function()} body Body of the block. - */ -angular.scenario.Describe.prototype.beforeEach = function(body) { - this.beforeEachFns.push(body); -}; - -/** - * Defines a block to execute after each it or nested describe. - * - * @param {function()} body Body of the block. - */ -angular.scenario.Describe.prototype.afterEach = function(body) { - this.afterEachFns.push(body); -}; - -/** - * Creates a new describe block that's a child of this one. - * - * @param {string} name Name of the block. Appended to the parent block's name. - * @param {function()} body Body of the block. - */ -angular.scenario.Describe.prototype.describe = function(name, body) { - var child = new angular.scenario.Describe(name, this); - this.children.push(child); - body.call(child); -}; - -/** - * Same as describe() but makes ddescribe blocks the only to run. - * - * @param {string} name Name of the test. - * @param {function()} body Body of the block. - */ -angular.scenario.Describe.prototype.ddescribe = function(name, body) { - var child = new angular.scenario.Describe(name, this); - child.only = true; - this.children.push(child); - body.call(child); -}; - -/** - * Use to disable a describe block. - */ -angular.scenario.Describe.prototype.xdescribe = angular.noop; - -/** - * Defines a test. - * - * @param {string} name Name of the test. - * @param {function()} body Body of the block. - */ -angular.scenario.Describe.prototype.it = function(name, body) { - this.its.push({ - id: angular.scenario.Describe.specId++, - definition: this, - only: this.only, - name: name, - before: this.setupBefore, - body: body, - after: this.setupAfter - }); -}; - -/** - * Same as it() but makes iit tests the only test to run. - * - * @param {string} name Name of the test. - * @param {function()} body Body of the block. - */ -angular.scenario.Describe.prototype.iit = function(name, body) { - this.it.apply(this, arguments); - this.its[this.its.length - 1].only = true; -}; - -/** - * Use to disable a test block. - */ -angular.scenario.Describe.prototype.xit = angular.noop; - -/** - * Gets an array of functions representing all the tests (recursively). - * that can be executed with SpecRunner's. - * - * @return {Array<Object>} Array of it blocks { - * definition : Object // parent Describe - * only: boolean - * name: string - * before: Function - * body: Function - * after: Function - * } - */ -angular.scenario.Describe.prototype.getSpecs = function() { - var specs = arguments[0] || []; - angular.forEach(this.children, function(child) { - child.getSpecs(specs); - }); - angular.forEach(this.its, function(it) { - specs.push(it); - }); - var only = []; - angular.forEach(specs, function(it) { - if (it.only) { - only.push(it); - } - }); - return (only.length && only) || specs; -}; - -/** - * A future action in a spec. - * - * @param {string} name name of the future action - * @param {function()} behavior future callback(error, result) - * @param {function()} line Optional. function that returns the file/line number. - */ -angular.scenario.Future = function(name, behavior, line) { - this.name = name; - this.behavior = behavior; - this.fulfilled = false; - this.value = undefined; - this.parser = angular.identity; - this.line = line || function() { return ''; }; -}; - -/** - * Executes the behavior of the closure. - * - * @param {function()} doneFn Callback function(error, result) - */ -angular.scenario.Future.prototype.execute = function(doneFn) { - var self = this; - this.behavior(function(error, result) { - self.fulfilled = true; - if (result) { - try { - result = self.parser(result); - } catch (e) { - error = e; - } - } - self.value = error || result; - doneFn(error, result); - }); -}; - -/** - * Configures the future to convert its final with a function fn(value) - * - * @param {function()} fn function(value) that returns the parsed value - */ -angular.scenario.Future.prototype.parsedWith = function(fn) { - this.parser = fn; - return this; -}; - -/** - * Configures the future to parse its final value from JSON - * into objects. - */ -angular.scenario.Future.prototype.fromJson = function() { - return this.parsedWith(angular.fromJson); -}; - -/** - * Configures the future to convert its final value from objects - * into JSON. - */ -angular.scenario.Future.prototype.toJson = function() { - return this.parsedWith(angular.toJson); -}; - -/** - * Maintains an object tree from the runner events. - * - * @param {Object} runner The scenario Runner instance to connect to. - * - * TODO(esprehn): Every output type creates one of these, but we probably - * want one global shared instance. Need to handle events better too - * so the HTML output doesn't need to do spec model.getSpec(spec.id) - * silliness. - * - * TODO(vojta) refactor on, emit methods (from all objects) - use inheritance - */ -angular.scenario.ObjectModel = function(runner) { - var self = this; - - this.specMap = {}; - this.listeners = []; - this.value = { - name: '', - children: {} - }; - - runner.on('SpecBegin', function(spec) { - var block = self.value, - definitions = []; - - angular.forEach(self.getDefinitionPath(spec), function(def) { - if (!block.children[def.name]) { - block.children[def.name] = { - id: def.id, - name: def.name, - children: {}, - specs: {} - }; - } - block = block.children[def.name]; - definitions.push(def.name); - }); - - var it = self.specMap[spec.id] = - block.specs[spec.name] = - new angular.scenario.ObjectModel.Spec(spec.id, spec.name, definitions); - - // forward the event - self.emit('SpecBegin', it); - }); - - runner.on('SpecError', function(spec, error) { - var it = self.getSpec(spec.id); - it.status = 'error'; - it.error = error; - - // forward the event - self.emit('SpecError', it, error); - }); - - runner.on('SpecEnd', function(spec) { - var it = self.getSpec(spec.id); - complete(it); - - // forward the event - self.emit('SpecEnd', it); - }); - - runner.on('StepBegin', function(spec, step) { - var it = self.getSpec(spec.id); - step = new angular.scenario.ObjectModel.Step(step.name); - it.steps.push(step); - - // forward the event - self.emit('StepBegin', it, step); - }); - - runner.on('StepEnd', function(spec) { - var it = self.getSpec(spec.id); - var step = it.getLastStep(); - if (step.name !== step.name) - throw 'Events fired in the wrong order. Step names don\'t match.'; - complete(step); - - // forward the event - self.emit('StepEnd', it, step); - }); - - runner.on('StepFailure', function(spec, step, error) { - var it = self.getSpec(spec.id), - modelStep = it.getLastStep(); - - modelStep.setErrorStatus('failure', error, step.line()); - it.setStatusFromStep(modelStep); - - // forward the event - self.emit('StepFailure', it, modelStep, error); - }); - - runner.on('StepError', function(spec, step, error) { - var it = self.getSpec(spec.id), - modelStep = it.getLastStep(); - - modelStep.setErrorStatus('error', error, step.line()); - it.setStatusFromStep(modelStep); - - // forward the event - self.emit('StepError', it, modelStep, error); - }); - - runner.on('RunnerBegin', function() { - self.emit('RunnerBegin'); - }); - runner.on('RunnerEnd', function() { - self.emit('RunnerEnd'); - }); - - function complete(item) { - item.endTime = new Date().getTime(); - item.duration = item.endTime - item.startTime; - item.status = item.status || 'success'; - } -}; - -/** - * Adds a listener for an event. - * - * @param {string} eventName Name of the event to add a handler for - * @param {function()} listener Function that will be called when event is fired - */ -angular.scenario.ObjectModel.prototype.on = function(eventName, listener) { - eventName = eventName.toLowerCase(); - this.listeners[eventName] = this.listeners[eventName] || []; - this.listeners[eventName].push(listener); -}; - -/** - * Emits an event which notifies listeners and passes extra - * arguments. - * - * @param {string} eventName Name of the event to fire. - */ -angular.scenario.ObjectModel.prototype.emit = function(eventName) { - var self = this, - args = Array.prototype.slice.call(arguments, 1); - - eventName = eventName.toLowerCase(); - - if (this.listeners[eventName]) { - angular.forEach(this.listeners[eventName], function(listener) { - listener.apply(self, args); - }); - } -}; - -/** - * Computes the path of definition describe blocks that wrap around - * this spec. - * - * @param spec Spec to compute the path for. - * @return {Array<Describe>} The describe block path - */ -angular.scenario.ObjectModel.prototype.getDefinitionPath = function(spec) { - var path = []; - var currentDefinition = spec.definition; - while (currentDefinition && currentDefinition.name) { - path.unshift(currentDefinition); - currentDefinition = currentDefinition.parent; - } - return path; -}; - -/** - * Gets a spec by id. - * - * @param {string} id The id of the spec to get the object for. - * @return {Object} the Spec instance - */ -angular.scenario.ObjectModel.prototype.getSpec = function(id) { - return this.specMap[id]; -}; - -/** - * A single it block. - * - * @param {string} id Id of the spec - * @param {string} name Name of the spec - * @param {Array<string>=} definitionNames List of all describe block names that wrap this spec - */ -angular.scenario.ObjectModel.Spec = function(id, name, definitionNames) { - this.id = id; - this.name = name; - this.startTime = new Date().getTime(); - this.steps = []; - this.fullDefinitionName = (definitionNames || []).join(' '); -}; - -/** - * Adds a new step to the Spec. - * - * @param {string} name Name of the step (really name of the future) - * @return {Object} the added step - */ -angular.scenario.ObjectModel.Spec.prototype.addStep = function(name) { - var step = new angular.scenario.ObjectModel.Step(name); - this.steps.push(step); - return step; -}; - -/** - * Gets the most recent step. - * - * @return {Object} the step - */ -angular.scenario.ObjectModel.Spec.prototype.getLastStep = function() { - return this.steps[this.steps.length - 1]; -}; - -/** - * Set status of the Spec from given Step - * - * @param {angular.scenario.ObjectModel.Step} step - */ -angular.scenario.ObjectModel.Spec.prototype.setStatusFromStep = function(step) { - if (!this.status || step.status == 'error') { - this.status = step.status; - this.error = step.error; - this.line = step.line; - } -}; - -/** - * A single step inside a Spec. - * - * @param {string} name Name of the step - */ -angular.scenario.ObjectModel.Step = function(name) { - this.name = name; - this.startTime = new Date().getTime(); -}; - -/** - * Helper method for setting all error status related properties - * - * @param {string} status - * @param {string} error - * @param {string} line - */ -angular.scenario.ObjectModel.Step.prototype.setErrorStatus = function(status, error, line) { - this.status = status; - this.error = error; - this.line = line; -}; - -/** - * Runner for scenarios - * - * Has to be initialized before any test is loaded, - * because it publishes the API into window (global space). - */ -angular.scenario.Runner = function($window) { - this.listeners = []; - this.$window = $window; - this.rootDescribe = new angular.scenario.Describe(); - this.currentDescribe = this.rootDescribe; - this.api = { - it: this.it, - iit: this.iit, - xit: angular.noop, - describe: this.describe, - ddescribe: this.ddescribe, - xdescribe: angular.noop, - beforeEach: this.beforeEach, - afterEach: this.afterEach - }; - angular.forEach(this.api, angular.bind(this, function(fn, key) { - this.$window[key] = angular.bind(this, fn); - })); -}; - -/** - * Emits an event which notifies listeners and passes extra - * arguments. - * - * @param {string} eventName Name of the event to fire. - */ -angular.scenario.Runner.prototype.emit = function(eventName) { - var self = this; - var args = Array.prototype.slice.call(arguments, 1); - eventName = eventName.toLowerCase(); - if (!this.listeners[eventName]) - return; - angular.forEach(this.listeners[eventName], function(listener) { - listener.apply(self, args); - }); -}; - -/** - * Adds a listener for an event. - * - * @param {string} eventName The name of the event to add a handler for - * @param {string} listener The fn(...) that takes the extra arguments from emit() - */ -angular.scenario.Runner.prototype.on = function(eventName, listener) { - eventName = eventName.toLowerCase(); - this.listeners[eventName] = this.listeners[eventName] || []; - this.listeners[eventName].push(listener); -}; - -/** - * Defines a describe block of a spec. - * - * @see Describe.js - * - * @param {string} name Name of the block - * @param {function()} body Body of the block - */ -angular.scenario.Runner.prototype.describe = function(name, body) { - var self = this; - this.currentDescribe.describe(name, function() { - var parentDescribe = self.currentDescribe; - self.currentDescribe = this; - try { - body.call(this); - } finally { - self.currentDescribe = parentDescribe; - } - }); -}; - -/** - * Same as describe, but makes ddescribe the only blocks to run. - * - * @see Describe.js - * - * @param {string} name Name of the block - * @param {function()} body Body of the block - */ -angular.scenario.Runner.prototype.ddescribe = function(name, body) { - var self = this; - this.currentDescribe.ddescribe(name, function() { - var parentDescribe = self.currentDescribe; - self.currentDescribe = this; - try { - body.call(this); - } finally { - self.currentDescribe = parentDescribe; - } - }); -}; - -/** - * Defines a test in a describe block of a spec. - * - * @see Describe.js - * - * @param {string} name Name of the block - * @param {function()} body Body of the block - */ -angular.scenario.Runner.prototype.it = function(name, body) { - this.currentDescribe.it(name, body); -}; - -/** - * Same as it, but makes iit tests the only tests to run. - * - * @see Describe.js - * - * @param {string} name Name of the block - * @param {function()} body Body of the block - */ -angular.scenario.Runner.prototype.iit = function(name, body) { - this.currentDescribe.iit(name, body); -}; - -/** - * Defines a function to be called before each it block in the describe - * (and before all nested describes). - * - * @see Describe.js - * - * @param {function()} Callback to execute - */ -angular.scenario.Runner.prototype.beforeEach = function(body) { - this.currentDescribe.beforeEach(body); -}; - -/** - * Defines a function to be called after each it block in the describe - * (and before all nested describes). - * - * @see Describe.js - * - * @param {function()} Callback to execute - */ -angular.scenario.Runner.prototype.afterEach = function(body) { - this.currentDescribe.afterEach(body); -}; - -/** - * Creates a new spec runner. - * - * @private - * @param {Object} scope parent scope - */ -angular.scenario.Runner.prototype.createSpecRunner_ = function(scope) { - var child = scope.$new(); - var Cls = angular.scenario.SpecRunner; - - // Export all the methods to child scope manually as now we don't mess controllers with scopes - // TODO(vojta): refactor scenario runner so that these objects are not tightly coupled as current - for (var name in Cls.prototype) - child[name] = angular.bind(child, Cls.prototype[name]); - - Cls.call(child); - return child; -}; - -/** - * Runs all the loaded tests with the specified runner class on the - * provided application. - * - * @param {angular.scenario.Application} application App to remote control. - */ -angular.scenario.Runner.prototype.run = function(application) { - var self = this; - var $root = angular.injector(['ng']).get('$rootScope'); - angular.extend($root, this); - angular.forEach(angular.scenario.Runner.prototype, function(fn, name) { - $root[name] = angular.bind(self, fn); - }); - $root.application = application; - $root.emit('RunnerBegin'); - asyncForEach(this.rootDescribe.getSpecs(), function(spec, specDone) { - var dslCache = {}; - var runner = self.createSpecRunner_($root); - angular.forEach(angular.scenario.dsl, function(fn, key) { - dslCache[key] = fn.call($root); - }); - angular.forEach(angular.scenario.dsl, function(fn, key) { - self.$window[key] = function() { - var line = callerFile(3); - var scope = runner.$new(); - - // Make the dsl accessible on the current chain - scope.dsl = {}; - angular.forEach(dslCache, function(fn, key) { - scope.dsl[key] = function() { - return dslCache[key].apply(scope, arguments); - }; - }); - - // Make these methods work on the current chain - scope.addFuture = function() { - Array.prototype.push.call(arguments, line); - return angular.scenario.SpecRunner. - prototype.addFuture.apply(scope, arguments); - }; - scope.addFutureAction = function() { - Array.prototype.push.call(arguments, line); - return angular.scenario.SpecRunner. - prototype.addFutureAction.apply(scope, arguments); - }; - - return scope.dsl[key].apply(scope, arguments); - }; - }); - runner.run(spec, function() { - runner.$destroy(); - specDone.apply(this, arguments); - }); - }, - function(error) { - if (error) { - self.emit('RunnerError', error); - } - self.emit('RunnerEnd'); - }); -}; - -/** - * This class is the "this" of the it/beforeEach/afterEach method. - * Responsibilities: - * - "this" for it/beforeEach/afterEach - * - keep state for single it/beforeEach/afterEach execution - * - keep track of all of the futures to execute - * - run single spec (execute each future) - */ -angular.scenario.SpecRunner = function() { - this.futures = []; - this.afterIndex = 0; -}; - -/** - * Executes a spec which is an it block with associated before/after functions - * based on the describe nesting. - * - * @param {Object} spec A spec object - * @param {function()} specDone function that is called when the spec finishes, - * of the form `Function(error, index)` - */ -angular.scenario.SpecRunner.prototype.run = function(spec, specDone) { - var self = this; - this.spec = spec; - - this.emit('SpecBegin', spec); - - try { - spec.before.call(this); - spec.body.call(this); - this.afterIndex = this.futures.length; - spec.after.call(this); - } catch (e) { - this.emit('SpecError', spec, e); - this.emit('SpecEnd', spec); - specDone(); - return; - } - - var handleError = function(error, done) { - if (self.error) { - return done(); - } - self.error = true; - done(null, self.afterIndex); - }; - - asyncForEach( - this.futures, - function(future, futureDone) { - self.step = future; - self.emit('StepBegin', spec, future); - try { - future.execute(function(error) { - if (error) { - self.emit('StepFailure', spec, future, error); - self.emit('StepEnd', spec, future); - return handleError(error, futureDone); - } - self.emit('StepEnd', spec, future); - self.$window.setTimeout(function() { futureDone(); }, 0); - }); - } catch (e) { - self.emit('StepError', spec, future, e); - self.emit('StepEnd', spec, future); - handleError(e, futureDone); - } - }, - function(e) { - if (e) { - self.emit('SpecError', spec, e); - } - self.emit('SpecEnd', spec); - // Call done in a timeout so exceptions don't recursively - // call this function - self.$window.setTimeout(function() { specDone(); }, 0); - } - ); -}; - -/** - * Adds a new future action. - * - * Note: Do not pass line manually. It happens automatically. - * - * @param {string} name Name of the future - * @param {function()} behavior Behavior of the future - * @param {function()} line fn() that returns file/line number - */ -angular.scenario.SpecRunner.prototype.addFuture = function(name, behavior, line) { - var future = new angular.scenario.Future(name, angular.bind(this, behavior), line); - this.futures.push(future); - return future; -}; - -/** - * Adds a new future action to be executed on the application window. - * - * Note: Do not pass line manually. It happens automatically. - * - * @param {string} name Name of the future - * @param {function()} behavior Behavior of the future - * @param {function()} line fn() that returns file/line number - */ -angular.scenario.SpecRunner.prototype.addFutureAction = function(name, behavior, line) { - var self = this; - var NG = /\[ng\\\:/; - return this.addFuture(name, function(done) { - this.application.executeAction(function($window, $document) { - - //TODO(esprehn): Refactor this so it doesn't need to be in here. - $document.elements = function(selector) { - var args = Array.prototype.slice.call(arguments, 1); - selector = (self.selector || '') + ' ' + (selector || ''); - selector = _jQuery.trim(selector) || '*'; - angular.forEach(args, function(value, index) { - selector = selector.replace('$' + (index + 1), value); - }); - var result = $document.find(selector); - if (selector.match(NG)) { - angular.forEach(['[ng-','[data-ng-','[x-ng-'], function(value, index) { - result = result.add(selector.replace(NG, value), $document); - }); - } - if (!result.length) { - throw { - type: 'selector', - message: 'Selector ' + selector + ' did not match any elements.' - }; - } - - return result; - }; - - try { - behavior.call(self, $window, $document, done); - } catch (e) { - if (e.type && e.type === 'selector') { - done(e.message); - } else { - throw e; - } - } - }); - }, line); -}; - -/** - * Shared DSL statements that are useful to all scenarios. - */ - - /** - * Usage: - * pause() pauses until you call resume() in the console - */ -angular.scenario.dsl('pause', function() { - return function() { - return this.addFuture('pausing for you to resume', function(done) { - this.emit('InteractivePause', this.spec, this.step); - this.$window.resume = function() { done(); }; - }); - }; -}); - -/** - * Usage: - * sleep(seconds) pauses the test for specified number of seconds - */ -angular.scenario.dsl('sleep', function() { - return function(time) { - return this.addFuture('sleep for ' + time + ' seconds', function(done) { - this.$window.setTimeout(function() { done(null, time * 1000); }, time * 1000); - }); - }; -}); - -/** - * Usage: - * browser().navigateTo(url) Loads the url into the frame - * browser().navigateTo(url, fn) where fn(url) is called and returns the URL to navigate to - * browser().reload() refresh the page (reload the same URL) - * browser().window.href() window.location.href - * browser().window.path() window.location.pathname - * browser().window.search() window.location.search - * browser().window.hash() window.location.hash without # prefix - * browser().location().url() see ng.$location#url - * browser().location().path() see ng.$location#path - * browser().location().search() see ng.$location#search - * browser().location().hash() see ng.$location#hash - */ -angular.scenario.dsl('browser', function() { - var chain = {}; - - chain.navigateTo = function(url, delegate) { - var application = this.application; - return this.addFuture("browser navigate to '" + url + "'", function(done) { - if (delegate) { - url = delegate.call(this, url); - } - application.navigateTo(url, function() { - done(null, url); - }, done); - }); - }; - - chain.reload = function() { - var application = this.application; - return this.addFutureAction('browser reload', function($window, $document, done) { - var href = $window.location.href; - application.navigateTo(href, function() { - done(null, href); - }, done); - }); - }; - - chain.window = function() { - var api = {}; - - api.href = function() { - return this.addFutureAction('window.location.href', function($window, $document, done) { - done(null, $window.location.href); - }); - }; - - api.path = function() { - return this.addFutureAction('window.location.path', function($window, $document, done) { - done(null, $window.location.pathname); - }); - }; - - api.search = function() { - return this.addFutureAction('window.location.search', function($window, $document, done) { - done(null, $window.location.search); - }); - }; - - api.hash = function() { - return this.addFutureAction('window.location.hash', function($window, $document, done) { - done(null, $window.location.hash.replace('#', '')); - }); - }; - - return api; - }; - - chain.location = function() { - var api = {}; - - api.url = function() { - return this.addFutureAction('$location.url()', function($window, $document, done) { - done(null, $document.injector().get('$location').url()); - }); - }; - - api.path = function() { - return this.addFutureAction('$location.path()', function($window, $document, done) { - done(null, $document.injector().get('$location').path()); - }); - }; - - api.search = function() { - return this.addFutureAction('$location.search()', function($window, $document, done) { - done(null, $document.injector().get('$location').search()); - }); - }; - - api.hash = function() { - return this.addFutureAction('$location.hash()', function($window, $document, done) { - done(null, $document.injector().get('$location').hash()); - }); - }; - - return api; - }; - - return function() { - return chain; - }; -}); - -/** - * Usage: - * expect(future).{matcher} where matcher is one of the matchers defined - * with angular.scenario.matcher - * - * ex. expect(binding("name")).toEqual("Elliott") - */ -angular.scenario.dsl('expect', function() { - var chain = angular.extend({}, angular.scenario.matcher); - - chain.not = function() { - this.inverse = true; - return chain; - }; - - return function(future) { - this.future = future; - return chain; - }; -}); - -/** - * Usage: - * using(selector, label) scopes the next DSL element selection - * - * ex. - * using('#foo', "'Foo' text field").input('bar') - */ -angular.scenario.dsl('using', function() { - return function(selector, label) { - this.selector = _jQuery.trim((this.selector || '') + ' ' + selector); - if (angular.isString(label) && label.length) { - this.label = label + ' ( ' + this.selector + ' )'; - } else { - this.label = this.selector; - } - return this.dsl; - }; -}); - -/** - * Usage: - * binding(name) returns the value of the first matching binding - */ -angular.scenario.dsl('binding', function() { - return function(name) { - return this.addFutureAction("select binding '" + name + "'", - function($window, $document, done) { - var values = $document.elements().bindings($window.angular.element, name); - if (!values.length) { - return done("Binding selector '" + name + "' did not match."); - } - done(null, values[0]); - }); - }; -}); - -/** - * Usage: - * input(name).enter(value) enters value in input with specified name - * input(name).check() checks checkbox - * input(name).select(value) selects the radio button with specified name/value - * input(name).val() returns the value of the input. - */ -angular.scenario.dsl('input', function() { - var chain = {}; - var supportInputEvent = 'oninput' in document.createElement('div') && !(msie && msie <= 11); - - chain.enter = function(value, event) { - return this.addFutureAction("input '" + this.name + "' enter '" + value + "'", - function($window, $document, done) { - var input = $document.elements('[ng\\:model="$1"]', this.name).filter(':input'); - input.val(value); - input.trigger(event || (supportInputEvent ? 'input' : 'change')); - done(); - }); - }; - - chain.check = function() { - return this.addFutureAction("checkbox '" + this.name + "' toggle", - function($window, $document, done) { - var input = $document.elements('[ng\\:model="$1"]', this.name).filter(':checkbox'); - input.trigger('click'); - done(); - }); - }; - - chain.select = function(value) { - return this.addFutureAction("radio button '" + this.name + "' toggle '" + value + "'", - function($window, $document, done) { - var input = $document. - elements('[ng\\:model="$1"][value="$2"]', this.name, value).filter(':radio'); - input.trigger('click'); - done(); - }); - }; - - chain.val = function() { - return this.addFutureAction("return input val", function($window, $document, done) { - var input = $document.elements('[ng\\:model="$1"]', this.name).filter(':input'); - done(null,input.val()); - }); - }; - - return function(name) { - this.name = name; - return chain; - }; -}); - - -/** - * Usage: - * repeater('#products table', 'Product List').count() number of rows - * repeater('#products table', 'Product List').row(1) all bindings in row as an array - * repeater('#products table', 'Product List').column('product.name') all values across all rows - * in an array - */ -angular.scenario.dsl('repeater', function() { - var chain = {}; - - chain.count = function() { - return this.addFutureAction("repeater '" + this.label + "' count", - function($window, $document, done) { - try { - done(null, $document.elements().length); - } catch (e) { - done(null, 0); - } - }); - }; - - chain.column = function(binding) { - return this.addFutureAction("repeater '" + this.label + "' column '" + binding + "'", - function($window, $document, done) { - done(null, $document.elements().bindings($window.angular.element, binding)); - }); - }; - - chain.row = function(index) { - return this.addFutureAction("repeater '" + this.label + "' row '" + index + "'", - function($window, $document, done) { - var matches = $document.elements().slice(index, index + 1); - if (!matches.length) - return done('row ' + index + ' out of bounds'); - done(null, matches.bindings($window.angular.element)); - }); - }; - - return function(selector, label) { - this.dsl.using(selector, label); - return chain; - }; -}); - -/** - * Usage: - * select(name).option('value') select one option - * select(name).options('value1', 'value2', ...) select options from a multi select - */ -angular.scenario.dsl('select', function() { - var chain = {}; - - chain.option = function(value) { - return this.addFutureAction("select '" + this.name + "' option '" + value + "'", - function($window, $document, done) { - var select = $document.elements('select[ng\\:model="$1"]', this.name); - var option = select.find('option[value="' + value + '"]'); - if (option.length) { - select.val(value); - } else { - option = select.find('option').filter(function() { - return _jQuery(this).text() === value; - }); - if (!option.length) { - option = select.find('option:contains("' + value + '")'); - } - if (option.length) { - select.val(option.val()); - } else { - return done("option '" + value + "' not found"); - } - } - select.trigger('change'); - done(); - }); - }; - - chain.options = function() { - var values = arguments; - return this.addFutureAction("select '" + this.name + "' options '" + values + "'", - function($window, $document, done) { - var select = $document.elements('select[multiple][ng\\:model="$1"]', this.name); - select.val(values); - select.trigger('change'); - done(); - }); - }; - - return function(name) { - this.name = name; - return chain; - }; -}); - -/** - * Usage: - * element(selector, label).count() get the number of elements that match selector - * element(selector, label).click() clicks an element - * element(selector, label).mouseover() mouseover an element - * element(selector, label).mousedown() mousedown an element - * element(selector, label).mouseup() mouseup an element - * element(selector, label).query(fn) executes fn(selectedElements, done) - * element(selector, label).{method}() gets the value (as defined by jQuery, ex. val) - * element(selector, label).{method}(value) sets the value (as defined by jQuery, ex. val) - * element(selector, label).{method}(key) gets the value (as defined by jQuery, ex. attr) - * element(selector, label).{method}(key, value) sets the value (as defined by jQuery, ex. attr) - */ -angular.scenario.dsl('element', function() { - var KEY_VALUE_METHODS = ['attr', 'css', 'prop']; - var VALUE_METHODS = [ - 'val', 'text', 'html', 'height', 'innerHeight', 'outerHeight', 'width', - 'innerWidth', 'outerWidth', 'position', 'scrollLeft', 'scrollTop', 'offset' - ]; - var chain = {}; - - chain.count = function() { - return this.addFutureAction("element '" + this.label + "' count", - function($window, $document, done) { - try { - done(null, $document.elements().length); - } catch (e) { - done(null, 0); - } - }); - }; - - chain.click = function() { - return this.addFutureAction("element '" + this.label + "' click", - function($window, $document, done) { - var elements = $document.elements(); - var href = elements.attr('href'); - var eventProcessDefault = elements.trigger('click')[0]; - - if (href && elements[0].nodeName.toLowerCase() === 'a' && eventProcessDefault) { - this.application.navigateTo(href, function() { - done(); - }, done); - } else { - done(); - } - }); - }; - - chain.dblclick = function() { - return this.addFutureAction("element '" + this.label + "' dblclick", - function($window, $document, done) { - var elements = $document.elements(); - var href = elements.attr('href'); - var eventProcessDefault = elements.trigger('dblclick')[0]; - - if (href && elements[0].nodeName.toLowerCase() === 'a' && eventProcessDefault) { - this.application.navigateTo(href, function() { - done(); - }, done); - } else { - done(); - } - }); - }; - - chain.mouseover = function() { - return this.addFutureAction("element '" + this.label + "' mouseover", - function($window, $document, done) { - var elements = $document.elements(); - elements.trigger('mouseover'); - done(); - }); - }; - - chain.mousedown = function() { - return this.addFutureAction("element '" + this.label + "' mousedown", - function($window, $document, done) { - var elements = $document.elements(); - elements.trigger('mousedown'); - done(); - }); - }; - - chain.mouseup = function() { - return this.addFutureAction("element '" + this.label + "' mouseup", - function($window, $document, done) { - var elements = $document.elements(); - elements.trigger('mouseup'); - done(); - }); - }; - - chain.query = function(fn) { - return this.addFutureAction('element ' + this.label + ' custom query', - function($window, $document, done) { - fn.call(this, $document.elements(), done); - }); - }; - - angular.forEach(KEY_VALUE_METHODS, function(methodName) { - chain[methodName] = function(name, value) { - var args = arguments, - futureName = (args.length == 1) - ? "element '" + this.label + "' get " + methodName + " '" + name + "'" - : "element '" + this.label + "' set " + methodName + " '" + name + "' to " + "'" + - value + "'"; - - return this.addFutureAction(futureName, function($window, $document, done) { - var element = $document.elements(); - done(null, element[methodName].apply(element, args)); - }); - }; - }); - - angular.forEach(VALUE_METHODS, function(methodName) { - chain[methodName] = function(value) { - var args = arguments, - futureName = (args.length === 0) - ? "element '" + this.label + "' " + methodName - : "element '" + this.label + "' set " + methodName + " to '" + value + "'"; - - return this.addFutureAction(futureName, function($window, $document, done) { - var element = $document.elements(); - done(null, element[methodName].apply(element, args)); - }); - }; - }); - - return function(selector, label) { - this.dsl.using(selector, label); - return chain; - }; -}); - -/** - * Matchers for implementing specs. Follows the Jasmine spec conventions. - */ - -angular.scenario.matcher('toEqual', function(expected) { - return angular.equals(this.actual, expected); -}); - -angular.scenario.matcher('toBe', function(expected) { - return this.actual === expected; -}); - -angular.scenario.matcher('toBeDefined', function() { - return angular.isDefined(this.actual); -}); - -angular.scenario.matcher('toBeTruthy', function() { - return this.actual; -}); - -angular.scenario.matcher('toBeFalsy', function() { - return !this.actual; -}); - -angular.scenario.matcher('toMatch', function(expected) { - return new RegExp(expected).test(this.actual); -}); - -angular.scenario.matcher('toBeNull', function() { - return this.actual === null; -}); - -angular.scenario.matcher('toContain', function(expected) { - return includes(this.actual, expected); -}); - -angular.scenario.matcher('toBeLessThan', function(expected) { - return this.actual < expected; -}); - -angular.scenario.matcher('toBeGreaterThan', function(expected) { - return this.actual > expected; -}); - -/** - * User Interface for the Scenario Runner. - * - * TODO(esprehn): This should be refactored now that ObjectModel exists - * to use angular bindings for the UI. - */ -angular.scenario.output('html', function(context, runner, model) { - var specUiMap = {}, - lastStepUiMap = {}; - - context.append( - '<div id="header">' + - ' <h1><span class="angular">AngularJS</span>: Scenario Test Runner</h1>' + - ' <ul id="status-legend" class="status-display">' + - ' <li class="status-error">0 Errors</li>' + - ' <li class="status-failure">0 Failures</li>' + - ' <li class="status-success">0 Passed</li>' + - ' </ul>' + - '</div>' + - '<div id="specs">' + - ' <div class="test-children"></div>' + - '</div>' - ); - - runner.on('InteractivePause', function(spec) { - var ui = lastStepUiMap[spec.id]; - ui.find('.test-title'). - html('paused... <a href="javascript:resume()">resume</a> when ready.'); - }); - - runner.on('SpecBegin', function(spec) { - var ui = findContext(spec); - ui.find('> .tests').append( - '<li class="status-pending test-it"></li>' - ); - ui = ui.find('> .tests li:last'); - ui.append( - '<div class="test-info">' + - ' <p class="test-title">' + - ' <span class="timer-result"></span>' + - ' <span class="test-name"></span>' + - ' </p>' + - '</div>' + - '<div class="scrollpane">' + - ' <ol class="test-actions"></ol>' + - '</div>' - ); - ui.find('> .test-info .test-name').text(spec.name); - ui.find('> .test-info').click(function() { - var scrollpane = ui.find('> .scrollpane'); - var actions = scrollpane.find('> .test-actions'); - var name = context.find('> .test-info .test-name'); - if (actions.find(':visible').length) { - actions.hide(); - name.removeClass('open').addClass('closed'); - } else { - actions.show(); - scrollpane.attr('scrollTop', scrollpane.attr('scrollHeight')); - name.removeClass('closed').addClass('open'); - } - }); - - specUiMap[spec.id] = ui; - }); - - runner.on('SpecError', function(spec, error) { - var ui = specUiMap[spec.id]; - ui.append('<pre></pre>'); - ui.find('> pre').text(formatException(error)); - }); - - runner.on('SpecEnd', function(spec) { - var ui = specUiMap[spec.id]; - spec = model.getSpec(spec.id); - ui.removeClass('status-pending'); - ui.addClass('status-' + spec.status); - ui.find("> .test-info .timer-result").text(spec.duration + "ms"); - if (spec.status === 'success') { - ui.find('> .test-info .test-name').addClass('closed'); - ui.find('> .scrollpane .test-actions').hide(); - } - updateTotals(spec.status); - }); - - runner.on('StepBegin', function(spec, step) { - var ui = specUiMap[spec.id]; - spec = model.getSpec(spec.id); - step = spec.getLastStep(); - ui.find('> .scrollpane .test-actions').append('<li class="status-pending"></li>'); - var stepUi = lastStepUiMap[spec.id] = ui.find('> .scrollpane .test-actions li:last'); - stepUi.append( - '<div class="timer-result"></div>' + - '<div class="test-title"></div>' - ); - stepUi.find('> .test-title').text(step.name); - var scrollpane = stepUi.parents('.scrollpane'); - scrollpane.attr('scrollTop', scrollpane.attr('scrollHeight')); - }); - - runner.on('StepFailure', function(spec, step, error) { - var ui = lastStepUiMap[spec.id]; - addError(ui, step.line, error); - }); - - runner.on('StepError', function(spec, step, error) { - var ui = lastStepUiMap[spec.id]; - addError(ui, step.line, error); - }); - - runner.on('StepEnd', function(spec, step) { - var stepUi = lastStepUiMap[spec.id]; - spec = model.getSpec(spec.id); - step = spec.getLastStep(); - stepUi.find('.timer-result').text(step.duration + 'ms'); - stepUi.removeClass('status-pending'); - stepUi.addClass('status-' + step.status); - var scrollpane = specUiMap[spec.id].find('> .scrollpane'); - scrollpane.attr('scrollTop', scrollpane.attr('scrollHeight')); - }); - - /** - * Finds the context of a spec block defined by the passed definition. - * - * @param {Object} The definition created by the Describe object. - */ - function findContext(spec) { - var currentContext = context.find('#specs'); - angular.forEach(model.getDefinitionPath(spec), function(defn) { - var id = 'describe-' + defn.id; - if (!context.find('#' + id).length) { - currentContext.find('> .test-children').append( - '<div class="test-describe" id="' + id + '">' + - ' <h2></h2>' + - ' <div class="test-children"></div>' + - ' <ul class="tests"></ul>' + - '</div>' - ); - context.find('#' + id).find('> h2').text('describe: ' + defn.name); - } - currentContext = context.find('#' + id); - }); - return context.find('#describe-' + spec.definition.id); - } - - /** - * Updates the test counter for the status. - * - * @param {string} the status. - */ - function updateTotals(status) { - var legend = context.find('#status-legend .status-' + status); - var parts = legend.text().split(' '); - var value = (parts[0] * 1) + 1; - legend.text(value + ' ' + parts[1]); - } - - /** - * Add an error to a step. - * - * @param {Object} The JQuery wrapped context - * @param {function()} fn() that should return the file/line number of the error - * @param {Object} the error. - */ - function addError(context, line, error) { - context.find('.test-title').append('<pre></pre>'); - var message = _jQuery.trim(line() + '\n\n' + formatException(error)); - context.find('.test-title pre:last').text(message); - } -}); - -/** - * Generates JSON output into a context. - */ -angular.scenario.output('json', function(context, runner, model) { - model.on('RunnerEnd', function() { - context.text(angular.toJson(model.value)); - }); -}); - -/** - * Generates XML output into a context. - */ -angular.scenario.output('xml', function(context, runner, model) { - var $ = function(args) {return new context.init(args);}; - model.on('RunnerEnd', function() { - var scenario = $('<scenario></scenario>'); - context.append(scenario); - serializeXml(scenario, model.value); - }); - - /** - * Convert the tree into XML. - * - * @param {Object} context jQuery context to add the XML to. - * @param {Object} tree node to serialize - */ - function serializeXml(context, tree) { - angular.forEach(tree.children, function(child) { - var describeContext = $('<describe></describe>'); - describeContext.attr('id', child.id); - describeContext.attr('name', child.name); - context.append(describeContext); - serializeXml(describeContext, child); - }); - var its = $('<its></its>'); - context.append(its); - angular.forEach(tree.specs, function(spec) { - var it = $('<it></it>'); - it.attr('id', spec.id); - it.attr('name', spec.name); - it.attr('duration', spec.duration); - it.attr('status', spec.status); - its.append(it); - angular.forEach(spec.steps, function(step) { - var stepContext = $('<step></step>'); - stepContext.attr('name', step.name); - stepContext.attr('duration', step.duration); - stepContext.attr('status', step.status); - it.append(stepContext); - if (step.error) { - var error = $('<error></error>'); - stepContext.append(error); - error.text(formatException(step.error)); - } - }); - }); - } -}); - -/** - * Creates a global value $result with the result of the runner. - */ -angular.scenario.output('object', function(context, runner, model) { - runner.$window.$result = model.value; -}); - -bindJQuery(); -publishExternalAPI(angular); - -var $runner = new angular.scenario.Runner(window), - scripts = document.getElementsByTagName('script'), - script = scripts[scripts.length - 1], - config = {}; - -angular.forEach(script.attributes, function(attr) { - var match = attr.name.match(/ng[:\-](.*)/); - if (match) { - config[match[1]] = attr.value || true; - } -}); - -if (config.autotest) { - JQLite(document).ready(function() { - angular.scenario.setUpAndRun(config); - }); -} -})(window, document); - - -!window.angular.$$csp() && window.angular.element(document).find('head').prepend('<style type="text/css">@charset "UTF-8";\n\n[ng\\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak],\n.ng-cloak, .x-ng-cloak,\n.ng-hide:not(.ng-hide-animate) {\n display: none !important;\n}\n\nng\\:form {\n display: block;\n}\n</style>'); -!window.angular.$$csp() && window.angular.element(document).find('head').prepend('<style type="text/css">@charset "UTF-8";\n/* CSS Document */\n\n/** Structure */\nbody {\n font-family: Arial, sans-serif;\n margin: 0;\n font-size: 14px;\n}\n\n#system-error {\n font-size: 1.5em;\n text-align: center;\n}\n\n#json, #xml {\n display: none;\n}\n\n#header {\n position: fixed;\n width: 100%;\n}\n\n#specs {\n padding-top: 50px;\n}\n\n#header .angular {\n font-family: Courier New, monospace;\n font-weight: bold;\n}\n\n#header h1 {\n font-weight: normal;\n float: left;\n font-size: 30px;\n line-height: 30px;\n margin: 0;\n padding: 10px 10px;\n height: 30px;\n}\n\n#application h2,\n#specs h2 {\n margin: 0;\n padding: 0.5em;\n font-size: 1.1em;\n}\n\n#status-legend {\n margin-top: 10px;\n margin-right: 10px;\n}\n\n#header,\n#application,\n.test-info,\n.test-actions li {\n overflow: hidden;\n}\n\n#application {\n margin: 10px;\n}\n\n#application iframe {\n width: 100%;\n height: 758px;\n}\n\n#application .popout {\n float: right;\n}\n\n#application iframe {\n border: none;\n}\n\n.tests li,\n.test-actions li,\n.test-it li,\n.test-it ol,\n.status-display {\n list-style-type: none;\n}\n\n.tests,\n.test-it ol,\n.status-display {\n margin: 0;\n padding: 0;\n}\n\n.test-info {\n margin-left: 1em;\n margin-top: 0.5em;\n border-radius: 8px 0 0 8px;\n -webkit-border-radius: 8px 0 0 8px;\n -moz-border-radius: 8px 0 0 8px;\n cursor: pointer;\n}\n\n.test-info:hover .test-name {\n text-decoration: underline;\n}\n\n.test-info .closed:before {\n content: \'\\25b8\\00A0\';\n}\n\n.test-info .open:before {\n content: \'\\25be\\00A0\';\n font-weight: bold;\n}\n\n.test-it ol {\n margin-left: 2.5em;\n}\n\n.status-display,\n.status-display li {\n float: right;\n}\n\n.status-display li {\n padding: 5px 10px;\n}\n\n.timer-result,\n.test-title {\n display: inline-block;\n margin: 0;\n padding: 4px;\n}\n\n.test-actions .test-title,\n.test-actions .test-result {\n display: table-cell;\n padding-left: 0.5em;\n padding-right: 0.5em;\n}\n\n.test-actions {\n display: table;\n}\n\n.test-actions li {\n display: table-row;\n}\n\n.timer-result {\n width: 4em;\n padding: 0 10px;\n text-align: right;\n font-family: monospace;\n}\n\n.test-it pre,\n.test-actions pre {\n clear: left;\n color: black;\n margin-left: 6em;\n}\n\n.test-describe {\n padding-bottom: 0.5em;\n}\n\n.test-describe .test-describe {\n margin: 5px 5px 10px 2em;\n}\n\n.test-actions .status-pending .test-title:before {\n content: \'\\00bb\\00A0\';\n}\n\n.scrollpane {\n max-height: 20em;\n overflow: auto;\n}\n\n/** Colors */\n\n#header {\n background-color: #F2C200;\n}\n\n#specs h2 {\n border-top: 2px solid #BABAD1;\n}\n\n#specs h2,\n#application h2 {\n background-color: #efefef;\n}\n\n#application {\n border: 1px solid #BABAD1;\n}\n\n.test-describe .test-describe {\n border-left: 1px solid #BABAD1;\n border-right: 1px solid #BABAD1;\n border-bottom: 1px solid #BABAD1;\n}\n\n.status-display {\n border: 1px solid #777;\n}\n\n.status-display .status-pending,\n.status-pending .test-info {\n background-color: #F9EEBC;\n}\n\n.status-display .status-success,\n.status-success .test-info {\n background-color: #B1D7A1;\n}\n\n.status-display .status-failure,\n.status-failure .test-info {\n background-color: #FF8286;\n}\n\n.status-display .status-error,\n.status-error .test-info {\n background-color: black;\n color: white;\n}\n\n.test-actions .status-success .test-title {\n color: #30B30A;\n}\n\n.test-actions .status-failure .test-title {\n color: #DF0000;\n}\n\n.test-actions .status-error .test-title {\n color: black;\n}\n\n.test-actions .timer-result {\n color: #888;\n}\n</style>'); \ No newline at end of file diff --git a/src/main/webapp/bower_components/angular-scenario/bower.json b/src/main/webapp/bower_components/angular-scenario/bower.json deleted file mode 100644 index 9d43e06b..00000000 --- a/src/main/webapp/bower_components/angular-scenario/bower.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "angular-scenario", - "version": "1.3.11", - "main": "./angular-scenario.js", - "ignore": [], - "dependencies": { - "angular": "1.3.11" - } -} diff --git a/src/main/webapp/bower_components/angular-scenario/jstd-scenario-adapter-config.js b/src/main/webapp/bower_components/angular-scenario/jstd-scenario-adapter-config.js deleted file mode 100644 index 5147ab34..00000000 --- a/src/main/webapp/bower_components/angular-scenario/jstd-scenario-adapter-config.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * Configuration for jstd scenario adapter - */ -var jstdScenarioAdapter = { - relativeUrlPrefix: '/build/docs/' -}; diff --git a/src/main/webapp/bower_components/angular-scenario/jstd-scenario-adapter.js b/src/main/webapp/bower_components/angular-scenario/jstd-scenario-adapter.js deleted file mode 100644 index f65afd90..00000000 --- a/src/main/webapp/bower_components/angular-scenario/jstd-scenario-adapter.js +++ /dev/null @@ -1,185 +0,0 @@ -/** - * @license AngularJS v1.0.4 - * (c) 2010-2012 Google, Inc. http://angularjs.org - * License: MIT - */ -(function(window) { -'use strict'; - -/** - * JSTestDriver adapter for angular scenario tests - * - * Example of jsTestDriver.conf for running scenario tests with JSTD: - <pre> - server: http://localhost:9877 - - load: - - lib/angular-scenario.js - - lib/jstd-scenario-adapter-config.js - - lib/jstd-scenario-adapter.js - # your test files go here # - - proxy: - - {matcher: "/your-prefix/*", server: "http://localhost:8000/"} - </pre> - * - * For more information on how to configure jstd proxy, see {@link http://code.google.com/p/js-test-driver/wiki/Proxy} - * Note the order of files - it's important ! - * - * Example of jstd-scenario-adapter-config.js - <pre> - var jstdScenarioAdapter = { - relativeUrlPrefix: '/your-prefix/' - }; - </pre> - * - * Whenever you use <code>browser().navigateTo('relativeUrl')</code> in your scenario test, the relativeUrlPrefix will be prepended. - * You have to configure this to work together with JSTD proxy. - * - * Let's assume you are using the above configuration (jsTestDriver.conf and jstd-scenario-adapter-config.js): - * Now, when you call <code>browser().navigateTo('index.html')</code> in your scenario test, the browser will open /your-prefix/index.html. - * That matches the proxy, so JSTD will proxy this request to http://localhost:8000/index.html. - */ - -/** - * Custom type of test case - * - * @const - * @see jstestdriver.TestCaseInfo - */ -var SCENARIO_TYPE = 'scenario'; - -/** - * Plugin for JSTestDriver - * Connection point between scenario's jstd output and jstestdriver. - * - * @see jstestdriver.PluginRegistrar - */ -function JstdPlugin() { - var nop = function() {}; - - this.reportResult = nop; - this.reportEnd = nop; - this.runScenario = nop; - - this.name = 'Angular Scenario Adapter'; - - /** - * Called for each JSTD TestCase - * - * Handles only SCENARIO_TYPE test cases. There should be only one fake TestCase. - * Runs all scenario tests (under one fake TestCase) and report all results to JSTD. - * - * @param {jstestdriver.TestRunConfiguration} configuration - * @param {Function} onTestDone - * @param {Function} onAllTestsComplete - * @returns {boolean} True if this type of test is handled by this plugin, false otherwise - */ - this.runTestConfiguration = function(configuration, onTestDone, onAllTestsComplete) { - if (configuration.getTestCaseInfo().getType() != SCENARIO_TYPE) return false; - - this.reportResult = onTestDone; - this.reportEnd = onAllTestsComplete; - this.runScenario(); - - return true; - }; - - this.getTestRunsConfigurationFor = function(testCaseInfos, expressions, testRunsConfiguration) { - testRunsConfiguration.push( - new jstestdriver.TestRunConfiguration( - new jstestdriver.TestCaseInfo( - 'Angular Scenario Tests', function() {}, SCENARIO_TYPE), [])); - - return true; - }; -} - -/** - * Singleton instance of the plugin - * Accessed using closure by: - * - jstd output (reports to this plugin) - * - initScenarioAdapter (register the plugin to jstd) - */ -var plugin = new JstdPlugin(); - -/** - * Initialise scenario jstd-adapter - * (only if jstestdriver is defined) - * - * @param {Object} jstestdriver Undefined when run from browser (without jstd) - * @param {Function} initScenarioAndRun Function that inits scenario and runs all the tests - * @param {Object=} config Configuration object, supported properties: - * - relativeUrlPrefix: prefix for all relative links when navigateTo() - */ -function initScenarioAdapter(jstestdriver, initScenarioAndRun, config) { - if (jstestdriver) { - // create and register ScenarioPlugin - jstestdriver.pluginRegistrar.register(plugin); - plugin.runScenario = initScenarioAndRun; - - /** - * HACK (angular.scenario.Application.navigateTo) - * - * We need to navigate to relative urls when running from browser (without JSTD), - * because we want to allow running scenario tests without creating its own virtual host. - * For example: http://angular.local/build/docs/docs-scenario.html - * - * On the other hand, when running with JSTD, we need to navigate to absolute urls, - * because of JSTD proxy. (proxy, because of same domain policy) - * - * So this hack is applied only if running with JSTD and change all relative urls to absolute. - */ - var appProto = angular.scenario.Application.prototype, - navigateTo = appProto.navigateTo, - relativeUrlPrefix = config && config.relativeUrlPrefix || '/'; - - appProto.navigateTo = function(url, loadFn, errorFn) { - if (url.charAt(0) != '/' && url.charAt(0) != '#' && - url != 'about:blank' && !url.match(/^https?/)) { - url = relativeUrlPrefix + url; - } - - return navigateTo.call(this, url, loadFn, errorFn); - }; - } -} - -/** - * Builds proper TestResult object from given model spec - * - * TODO(vojta) report error details - * - * @param {angular.scenario.ObjectModel.Spec} spec - * @returns {jstestdriver.TestResult} - */ -function createTestResultFromSpec(spec) { - var map = { - success: 'PASSED', - error: 'ERROR', - failure: 'FAILED' - }; - - return new jstestdriver.TestResult( - spec.fullDefinitionName, - spec.name, - jstestdriver.TestResult.RESULT[map[spec.status]], - spec.error || '', - spec.line || '', - spec.duration); -} - -/** - * Generates JSTD output (jstestdriver.TestResult) - */ -angular.scenario.output('jstd', function(context, runner, model) { - model.on('SpecEnd', function(spec) { - plugin.reportResult(createTestResultFromSpec(spec)); - }); - - model.on('RunnerEnd', function() { - plugin.reportEnd(); - }); -}); -initScenarioAdapter(window.jstestdriver, angular.scenario.setUpAndRun, window.jstdScenarioAdapter); -})(window); diff --git a/src/main/webapp/bower_components/angular-scenario/package.json b/src/main/webapp/bower_components/angular-scenario/package.json deleted file mode 100644 index c11ff383..00000000 --- a/src/main/webapp/bower_components/angular-scenario/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "angular-scenario", - "version": "1.3.11", - "description": "AngularJS module for end-to-end testing", - "main": "angular-scenario.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "repository": { - "type": "git", - "url": "https://github.com/angular/angular.js.git" - }, - "keywords": [ - "angular", - "framework", - "browser", - "testing", - "client-side" - ], - "author": "Angular Core Team <angular-core+npm@google.com>", - "license": "MIT", - "bugs": { - "url": "https://github.com/angular/angular.js/issues" - }, - "homepage": "http://angularjs.org" -} diff --git a/src/main/webapp/bower_components/angular-ui-router/.bower.json b/src/main/webapp/bower_components/angular-ui-router/.bower.json deleted file mode 100644 index 64d84e8d..00000000 --- a/src/main/webapp/bower_components/angular-ui-router/.bower.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "name": "angular-ui-router", - "version": "0.2.15", - "main": "./release/angular-ui-router.js", - "dependencies": { - "angular": ">= 1.0.8" - }, - "ignore": [ - "**/.*", - "node_modules", - "bower_components", - "component.json", - "package.json", - "lib", - "config", - "sample", - "test", - "tests", - "ngdoc_assets", - "Gruntfile.js", - "files.js" - ], - "homepage": "https://github.com/angular-ui/ui-router", - "_release": "0.2.15", - "_resolution": { - "type": "version", - "tag": "0.2.15", - "commit": "805e69bae319e922e4d3265b7ef565058aaff850" - }, - "_source": "git://github.com/angular-ui/ui-router.git", - "_target": "0.2.15", - "_originalSource": "angular-ui-router" -} \ No newline at end of file diff --git a/src/main/webapp/bower_components/angular-ui-router/CHANGELOG.md b/src/main/webapp/bower_components/angular-ui-router/CHANGELOG.md deleted file mode 100644 index 23b59d3a..00000000 --- a/src/main/webapp/bower_components/angular-ui-router/CHANGELOG.md +++ /dev/null @@ -1,228 +0,0 @@ -<a name="0.2.14"></a> -### 0.2.14 (2015-04-23) - - -#### Bug Fixes - -* **$StateRefDirective:** resolve missing support for svg anchor elements #1667 ([0149a7bb](https://github.com/angular-ui/ui-router/commit/0149a7bb38b7af99388a1ad7cc9909a7b7c4439d)) -* **$urlMatcherFactory:** - * regex params should respect case-sensitivity ([1e10519f](https://github.com/angular-ui/ui-router/commit/1e10519f3be6bbf0cefdcce623cd2ade06e649e5), closes [#1671](https://github.com/angular-ui/ui-router/issues/1671)) - * unquote all dashes from array params ([06664d33](https://github.com/angular-ui/ui-router/commit/06664d330f882390655dcfa83e10276110d0d0fa)) - * add Type.$normalize function ([b0c6aa23](https://github.com/angular-ui/ui-router/commit/b0c6aa2350fdd3ce8483144774adc12f5a72b7e9)) - * make optional params regex grouping optional ([06f73794](https://github.com/angular-ui/ui-router/commit/06f737945e83e668d09cfc3bcffd04a500ff1963), closes [#1576](https://github.com/angular-ui/ui-router/issues/1576)) -* **$state:** allow about.*.** glob patterns ([e39b27a2](https://github.com/angular-ui/ui-router/commit/e39b27a2cb7d88525c446a041f9fbf1553202010)) -* **uiSref:** - * use Object's toString instead of Window's toString ([2aa7f4d1](https://github.com/angular-ui/ui-router/commit/2aa7f4d139dbd5b9fcc4afdcf2ab6642c87f5671)) - * add absolute to allowed transition options ([ae1b3c4e](https://github.com/angular-ui/ui-router/commit/ae1b3c4eedc37983400d830895afb50457c63af4)) -* **uiSrefActive:** Apply active classes on lazy loaded states ([f0ddbe7b](https://github.com/angular-ui/ui-router/commit/f0ddbe7b4a91daf279c3b7d0cee732bb1f3be5b4)) -* **uiView:** add `$element` to locals for view controller ([db68914c](https://github.com/angular-ui/ui-router/commit/db68914cd6c821e7dec8155bd33142a3a97f5453)) - - -#### Features - -* **$state:** - * support URLs with #fragments ([3da0a170](https://github.com/angular-ui/ui-router/commit/3da0a17069e27598c0f9d9164e104dd5ce05cdc6)) - * inject resolve params into controllerProvider ([b380c223](https://github.com/angular-ui/ui-router/commit/b380c223fe12e2fde7582c0d6b1ed7b15a23579b), closes [#1131](https://github.com/angular-ui/ui-router/issues/1131)) - * added 'state' to state reload method (feat no.1612) - modiefied options.reload ([b8f04575](https://github.com/angular-ui/ui-router/commit/b8f04575a8557035c1858c4d5c8dbde3e1855aaa)) - * broadcast $stateChangeCancel event when event.preventDefault() is called in $sta ([ecefb758](https://github.com/angular-ui/ui-router/commit/ecefb758cb445e41620b62a272aafa3638613d7a)) -* **$uiViewScroll:** change function to return promise ([c2a9a311](https://github.com/angular-ui/ui-router/commit/c2a9a311388bb212e5a2e820536d1d739f829ccd), closes [#1702](https://github.com/angular-ui/ui-router/issues/1702)) -* **uiSrefActive:** Added support for multiple nested uiSref directives ([b1844948](https://github.com/angular-ui/ui-router/commit/b18449481d152b50705abfce2493a444eb059fa5)) - - -<a name="0.2.13"></a> -### 0.2.13 (2014-11-20) - -This release primarily fixes issues reported against 0.2.12 - -#### Bug Fixes - -* **$state:** fix $state.includes/.is to apply param types before comparisions fix(uiSref): ma ([19715d15](https://github.com/angular-ui/ui-router/commit/19715d15e3cbfff724519e9febedd05b49c75baa), closes [#1513](https://github.com/angular-ui/ui-router/issues/1513)) - * Avoid re-synchronizing from url after .transitionTo ([b267ecd3](https://github.com/angular-ui/ui-router/commit/b267ecd348e5c415233573ef95ebdbd051875f52), closes [#1573](https://github.com/angular-ui/ui-router/issues/1573)) -* **$urlMatcherFactory:** - * Built-in date type uses local time zone ([d726bedc](https://github.com/angular-ui/ui-router/commit/d726bedcbb5f70a5660addf43fd52ec730790293)) - * make date type fn check .is before running ([aa94ce3b](https://github.com/angular-ui/ui-router/commit/aa94ce3b86632ad05301530a2213099da73a3dc0), closes [#1564](https://github.com/angular-ui/ui-router/issues/1564)) - * early binding of array handler bypasses type resolution ([ada4bc27](https://github.com/angular-ui/ui-router/commit/ada4bc27df5eff3ba3ab0de94a09bd91b0f7a28c)) - * add 'any' Type for non-encoding non-url params ([3bfd75ab](https://github.com/angular-ui/ui-router/commit/3bfd75ab445ee2f1dd55275465059ed116b10b27), closes [#1562](https://github.com/angular-ui/ui-router/issues/1562)) - * fix encoding slashes in params ([0c983a08](https://github.com/angular-ui/ui-router/commit/0c983a08e2947f999683571477debd73038e95cf), closes [#1119](https://github.com/angular-ui/ui-router/issues/1119)) - * fix mixed path/query params ordering problem ([a479fbd0](https://github.com/angular-ui/ui-router/commit/a479fbd0b8eb393a94320973e5b9a62d83912ee2), closes [#1543](https://github.com/angular-ui/ui-router/issues/1543)) -* **ArrayType:** - * specify empty array mapping corner case ([74aa6091](https://github.com/angular-ui/ui-router/commit/74aa60917e996b0b4e27bbb4eb88c3c03832021d), closes [#1511](https://github.com/angular-ui/ui-router/issues/1511)) - * fix .equals for array types ([5e6783b7](https://github.com/angular-ui/ui-router/commit/5e6783b77af9a90ddff154f990b43dbb17eeda6e), closes [#1538](https://github.com/angular-ui/ui-router/issues/1538)) -* **Param:** fix default value shorthand declaration ([831d812a](https://github.com/angular-ui/ui-router/commit/831d812a524524c71f0ee1c9afaf0487a5a66230), closes [#1554](https://github.com/angular-ui/ui-router/issues/1554)) -* **common:** fixed the _.filter clone to not create sparse arrays ([750f5cf5](https://github.com/angular-ui/ui-router/commit/750f5cf5fd91f9ada96f39e50d39aceb2caf22b6), closes [#1563](https://github.com/angular-ui/ui-router/issues/1563)) -* **ie8:** fix calls to indexOf and filter ([dcb31b84](https://github.com/angular-ui/ui-router/commit/dcb31b843391b3e61dee4de13f368c109541813e), closes [#1556](https://github.com/angular-ui/ui-router/issues/1556)) - - -#### Features - -* add json parameter Type ([027f1fcf](https://github.com/angular-ui/ui-router/commit/027f1fcf9c0916cea651e88981345da6f9ff214a)) - - -<a name="0.2.12"></a> -### 0.2.12 (2014-11-13) - -#### Bug Fixes - -* **$resolve:** use resolve fn result, not parent resolved value of same name ([67f5e00c](https://github.com/angular-ui/ui-router/commit/67f5e00cc9aa006ce3fe6cde9dff261c28eab70a), closes [#1317], [#1353]) -* **$state:** - * populate default params in .transitionTo. ([3f60fbe6](https://github.com/angular-ui/ui-router/commit/3f60fbe6d65ebeca8d97952c05aa1d269f1b7ba1), closes [#1396]) - * reload() now reinvokes controllers ([73443420](https://github.com/angular-ui/ui-router/commit/7344342018847902594dc1fc62d30a5c30f01763), closes [#582]) - * do not emit $viewContentLoading if notify: false ([74255feb](https://github.com/angular-ui/ui-router/commit/74255febdf48ae082a02ca1e735165f2c369a463), closes [#1387](https://github.com/angular-ui/ui-router/issues/1387)) - * register states at config-time ([4533fe36](https://github.com/angular-ui/ui-router/commit/4533fe36e0ab2f0143edd854a4145deaa013915a)) - * handle parent.name when parent is obj ([4533fe36](https://github.com/angular-ui/ui-router/commit/4533fe36e0ab2f0143edd854a4145deaa013915a)) -* **$urlMatcherFactory:** - * register types at config ([4533fe36](https://github.com/angular-ui/ui-router/commit/4533fe36e0ab2f0143edd854a4145deaa013915a), closes [#1476]) - * made path params default value "" for backwards compat ([8f998e71](https://github.com/angular-ui/ui-router/commit/8f998e71e43a0b31293331c981f5db0f0097b8ba)) - * Pre-replace certain param values for better mapping ([6374a3e2](https://github.com/angular-ui/ui-router/commit/6374a3e29ab932014a7c77d2e1ab884cc841a2e3)) - * fixed ParamSet.$$keys() ordering ([9136fecb](https://github.com/angular-ui/ui-router/commit/9136fecbc2bfd4fda748a9914f0225a46c933860)) - * empty string policy now respected in Param.value() ([db12c85c](https://github.com/angular-ui/ui-router/commit/db12c85c16f2d105415f9bbbdeb11863f64728e0)) - * "string" type now encodes/decodes slashes ([3045e415](https://github.com/angular-ui/ui-router/commit/3045e41577a8b8b8afc6039f42adddf5f3c061ec), closes [#1119]) - * allow arrays in both path and query params ([fdd2f2c1](https://github.com/angular-ui/ui-router/commit/fdd2f2c191c4a67c874fdb9ec9a34f8dde9ad180), closes [#1073], [#1045], [#1486], [#1394]) - * typed params in search ([8d4cab69](https://github.com/angular-ui/ui-router/commit/8d4cab69dd67058e1a716892cc37b7d80a57037f), closes [#1488](https://github.com/angular-ui/ui-router/issues/1488)) - * no longer generate unroutable urls ([cb9fd9d8](https://github.com/angular-ui/ui-router/commit/cb9fd9d8943cb26c7223f6990db29c82ae8740f8), closes [#1487](https://github.com/angular-ui/ui-router/issues/1487)) - * handle optional parameter followed by required parameter in url format. ([efc72106](https://github.com/angular-ui/ui-router/commit/efc72106ddcc4774b48ea176a505ef9e95193b41)) - * default to parameter string coersion. ([13a468a7](https://github.com/angular-ui/ui-router/commit/13a468a7d54c2fb0751b94c0c1841d580b71e6dc), closes [#1414](https://github.com/angular-ui/ui-router/issues/1414)) - * concat respects strictMode/caseInsensitive ([dd72e103](https://github.com/angular-ui/ui-router/commit/dd72e103edb342d9cf802816fe127e1bbd68fd5f), closes [#1395]) -* **ui-sref:** - * Allow sref state options to take a scope object ([b5f7b596](https://github.com/angular-ui/ui-router/commit/b5f7b59692ce4933e2d63eb5df3f50a4ba68ccc0)) - * replace raw href modification with attrs. ([08c96782](https://github.com/angular-ui/ui-router/commit/08c96782faf881b0c7ab00afc233ee6729548fa0)) - * nagivate to state when url is "" fix($state.href): generate href for state with ([656b5aab](https://github.com/angular-ui/ui-router/commit/656b5aab906e5749db9b5a080c6a83b95f50fd91), closes [#1363](https://github.com/angular-ui/ui-router/issues/1363)) - * Check that state is defined in isMatch() ([92aebc75](https://github.com/angular-ui/ui-router/commit/92aebc7520f88babdc6e266536086e07263514c3), closes [#1314](https://github.com/angular-ui/ui-router/issues/1314), [#1332](https://github.com/angular-ui/ui-router/issues/1332)) -* **uiView:** - * allow inteprolated ui-view names ([81f6a19a](https://github.com/angular-ui/ui-router/commit/81f6a19a432dac9198fd33243855bfd3b4fea8c0), closes [#1324](https://github.com/angular-ui/ui-router/issues/1324)) - * Made anim work with angular 1.3 ([c3bb7ad9](https://github.com/angular-ui/ui-router/commit/c3bb7ad903da1e1f3c91019cfd255be8489ff4ef), closes [#1367](https://github.com/angular-ui/ui-router/issues/1367), [#1345](https://github.com/angular-ui/ui-router/issues/1345)) -* **urlRouter:** html5Mode accepts an object from angular v1.3.0-rc.3 ([7fea1e9d](https://github.com/angular-ui/ui-router/commit/7fea1e9d0d8c6e09cc6c895ecb93d4221e9adf48)) -* **stateFilters:** mark state filters as stateful. ([a00b353e](https://github.com/angular-ui/ui-router/commit/a00b353e3036f64a81245c4e7898646ba218f833), closes [#1479]) -* **ui-router:** re-add IE8 compatibility for map/filter/keys ([8ce69d9f](https://github.com/angular-ui/ui-router/commit/8ce69d9f7c886888ab53eca7e53536f36b428aae), closes [#1518], [#1383]) -* **package:** point 'main' to a valid filename ([ac903350](https://github.com/angular-ui/ui-router/commit/ac9033501debb63364539d91fbf3a0cba4579f8e)) -* **travis:** make CI build faster ([0531de05](https://github.com/angular-ui/ui-router/commit/0531de052e414a8d839fbb4e7635e923e94865b3)) - - -#### Features - -##### Default and Typed params - -This release includes a lot of bug fixes around default/optional and typed parameters. As such, 0.2.12 is the first release where we recommend those features be used. - -* **$state:** - * add state params validation ([b1379e6a](https://github.com/angular-ui/ui-router/commit/b1379e6a4d38f7ed7436e05873932d7c279af578), closes [#1433](https://github.com/angular-ui/ui-router/issues/1433)) - * is/includes/get work on relative stateOrName ([232e94b3](https://github.com/angular-ui/ui-router/commit/232e94b3c2ca2c764bb9510046e4b61690c87852)) - * .reload() returns state transition promise ([639e0565](https://github.com/angular-ui/ui-router/commit/639e0565dece9d5544cc93b3eee6e11c99bd7373)) -* **$templateFactory:** request templateURL as text/html ([ccd60769](https://github.com/angular-ui/ui-router/commit/ccd6076904a4b801d77b47f6e2de4c06ce9962f8), closes [#1287]) -* **$urlMatcherFactory:** Made a Params and ParamSet class ([0cc1e6cc](https://github.com/angular-ui/ui-router/commit/0cc1e6cc461a4640618e2bb594566551c54834e2)) - - - -<a name="0.2.11"></a> -### 0.2.11 (2014-08-26) - - -#### Bug Fixes - -* **$resolve:** Resolves only inherit from immediate parent fixes #702 ([df34e20c](https://github.com/angular-ui/ui-router/commit/df34e20c576299e7a3c8bd4ebc68d42341c0ace9)) -* **$state:** - * change $state.href default options.inherit to true ([deea695f](https://github.com/angular-ui/ui-router/commit/deea695f5cacc55de351ab985144fd233c02a769)) - * sanity-check state lookups ([456fd5ae](https://github.com/angular-ui/ui-router/commit/456fd5aec9ea507518927bfabd62b4afad4cf714), closes [#980](https://github.com/angular-ui/ui-router/issues/980)) - * didn't comply to inherit parameter ([09836781](https://github.com/angular-ui/ui-router/commit/09836781f126c1c485b06551eb9cfd4fa0f45c35)) - * allow view content loading broadcast ([7b78edee](https://github.com/angular-ui/ui-router/commit/7b78edeeb52a74abf4d3f00f79534033d5a08d1a)) -* **$urlMatcherFactory:** - * detect injected functions ([91f75ae6](https://github.com/angular-ui/ui-router/commit/91f75ae66c4d129f6f69e53bd547594e9661f5d5)) - * syntax ([1ebed370](https://github.com/angular-ui/ui-router/commit/1ebed37069bae8614d41541d56521f5c45f703f3)) -* **UrlMatcher:** - * query param function defaults ([f9c20530](https://github.com/angular-ui/ui-router/commit/f9c205304f10d8a4ebe7efe9025e642016479a51)) - * don't decode default values ([63607bdb](https://github.com/angular-ui/ui-router/commit/63607bdbbcb432d3fb37856a1cb3da0cd496804e)) -* **travis:** update Node version to fix build ([d6b95ef2](https://github.com/angular-ui/ui-router/commit/d6b95ef23d9dacb4eba08897f5190a0bcddb3a48)) -* **uiSref:** - * Generate an href for states with a blank url. closes #1293 ([691745b1](https://github.com/angular-ui/ui-router/commit/691745b12fa05d3700dd28f0c8d25f8a105074ad)) - * should inherit params by default ([b973dad1](https://github.com/angular-ui/ui-router/commit/b973dad155ad09a7975e1476bd096f7b2c758eeb)) - * cancel transition if preventDefault() has been called ([2e6d9167](https://github.com/angular-ui/ui-router/commit/2e6d9167d3afbfbca6427e53e012f94fb5fb8022)) -* **uiView:** Fixed infinite loop when is called .go() from a controller. ([e13988b8](https://github.com/angular-ui/ui-router/commit/e13988b8cd6231d75c78876ee9d012cc87f4a8d9), closes [#1194](https://github.com/angular-ui/ui-router/issues/1194)) -* **docs:** - * Fixed link to milestones ([6c0ae500](https://github.com/angular-ui/ui-router/commit/6c0ae500cc238ea9fc95adcc15415c55fc9e1f33)) - * fix bug in decorator example ([4bd00af5](https://github.com/angular-ui/ui-router/commit/4bd00af50b8b88a49d1545a76290731cb8e0feb1)) - * Removed an incorrect semi-colon ([af97cef8](https://github.com/angular-ui/ui-router/commit/af97cef8b967f2e32177e539ef41450dca131a7d)) - * Explain return value of rule as function ([5e887890](https://github.com/angular-ui/ui-router/commit/5e8878900a6ffe59a81aed531a3925e34a297377)) - - -#### Features - -* **$state:** - * allow parameters to pass unharmed ([8939d057](https://github.com/angular-ui/ui-router/commit/8939d0572ab1316e458ef016317ecff53131a822)) - * **BREAKING CHANGE**: state parameters are no longer automatically coerced to strings, and unspecified parameter values are now set to undefined rather than null. - * allow prevent syncUrl on failure ([753060b9](https://github.com/angular-ui/ui-router/commit/753060b910d5d2da600a6fa0757976e401c33172)) -* **typescript:** Add typescript definitions for component builds ([521ceb3f](https://github.com/angular-ui/ui-router/commit/521ceb3fd7850646422f411921e21ce5e7d82e0f)) -* **uiSref:** extend syntax for ui-sref ([71cad3d6](https://github.com/angular-ui/ui-router/commit/71cad3d636508b5a9fe004775ad1f1adc0c80c3e)) -* **uiSrefActive:** - * Also activate for child states. ([bf163ad6](https://github.com/angular-ui/ui-router/commit/bf163ad6ce176ce28792696c8302d7cdf5c05a01), closes [#818](https://github.com/angular-ui/ui-router/issues/818)) - * **BREAKING CHANGE** Since ui-sref-active now activates even when child states are active you may need to swap out your ui-sref-active with ui-sref-active-eq, thought typically we think devs want the auto inheritance. - - * uiSrefActiveEq: new directive with old ui-sref-active behavior -* **$urlRouter:** - * defer URL change interception ([c72d8ce1](https://github.com/angular-ui/ui-router/commit/c72d8ce11916d0ac22c81b409c9e61d7048554d7)) - * force URLs to have valid params ([d48505cd](https://github.com/angular-ui/ui-router/commit/d48505cd328d83e39d5706e085ba319715f999a6)) - * abstract $location handling ([08b4636b](https://github.com/angular-ui/ui-router/commit/08b4636b294611f08db35f00641eb5211686fb50)) -* **$urlMatcherFactory:** - * fail on bad parameters ([d8f124c1](https://github.com/angular-ui/ui-router/commit/d8f124c10d00c7e5dde88c602d966db261aea221)) - * date type support ([b7f074ff](https://github.com/angular-ui/ui-router/commit/b7f074ff65ca150a3cdbda4d5ad6cb17107300eb)) - * implement type support ([450b1f0e](https://github.com/angular-ui/ui-router/commit/450b1f0e8e03c738174ff967f688b9a6373290f4)) -* **UrlMatcher:** - * handle query string arrays ([9cf764ef](https://github.com/angular-ui/ui-router/commit/9cf764efab45fa9309368688d535ddf6e96d6449), closes [#373](https://github.com/angular-ui/ui-router/issues/373)) - * injectable functions as defaults ([00966ecd](https://github.com/angular-ui/ui-router/commit/00966ecd91fb745846039160cab707bfca8b3bec)) - * default values & type decoding for query params ([a472b301](https://github.com/angular-ui/ui-router/commit/a472b301389fbe84d1c1fa9f24852b492a569d11)) - * allow shorthand definitions ([5b724304](https://github.com/angular-ui/ui-router/commit/5b7243049793505e44b6608ea09878c37c95b1f5)) - * validates whole interface ([32b27db1](https://github.com/angular-ui/ui-router/commit/32b27db173722e9194ef1d5c0ea7d93f25a98d11)) - * implement non-strict matching ([a3e21366](https://github.com/angular-ui/ui-router/commit/a3e21366bee0475c9795a1ec76f70eec41c5b4e3)) - * add per-param config support ([07b3029f](https://github.com/angular-ui/ui-router/commit/07b3029f4d409cf955780113df92e36401b47580)) - * **BREAKING CHANGE**: the `params` option in state configurations must now be an object keyed by parameter name. - -### 0.2.10 (2014-03-12) - - -#### Bug Fixes - -* **$state:** use $browser.baseHref() when generating urls with .href() ([cbcc8488](https://github.com/angular-ui/ui-router/commit/cbcc84887d6b6d35258adabb97c714cd9c1e272d)) -* **bower.json:** JS files should not be ignored ([ccdab193](https://github.com/angular-ui/ui-router/commit/ccdab193315f304eb3be5f5b97c47a926c79263e)) -* **dev:** karma:background task is missing, can't run grunt:dev. ([d9f7b898](https://github.com/angular-ui/ui-router/commit/d9f7b898e8e3abb8c846b0faa16a382913d7b22b)) -* **sample:** Contacts menu button not staying active when navigating to detail states. Need t ([2fcb8443](https://github.com/angular-ui/ui-router/commit/2fcb84437cb43ade12682a92b764f13cac77dfe7)) -* **uiSref:** support mock-clicks/events with no data ([717d3ff7](https://github.com/angular-ui/ui-router/commit/717d3ff7d0ba72d239892dee562b401cdf90e418)) -* **uiView:** - * Do NOT autoscroll when autoscroll attr is missing ([affe5bd7](https://github.com/angular-ui/ui-router/commit/affe5bd785cdc3f02b7a9f64a52e3900386ec3a0), closes [#807](https://github.com/angular-ui/ui-router/issues/807)) - * Refactoring uiView directive to copy ngView logic ([548fab6a](https://github.com/angular-ui/ui-router/commit/548fab6ab9debc9904c5865c8bc68b4fc3271dd0), closes [#857](https://github.com/angular-ui/ui-router/issues/857), [#552](https://github.com/angular-ui/ui-router/issues/552)) - - -#### Features - -* **$state:** includes() allows glob patterns for state matching. ([2d5f6b37](https://github.com/angular-ui/ui-router/commit/2d5f6b37191a3135f4a6d9e8f344c54edcdc065b)) -* **UrlMatcher:** Add support for case insensitive url matching ([642d5247](https://github.com/angular-ui/ui-router/commit/642d524799f604811e680331002feec7199a1fb5)) -* **uiSref:** add support for transition options ([2ed7a728](https://github.com/angular-ui/ui-router/commit/2ed7a728cee6854b38501fbc1df6139d3de5b28a)) -* **uiView:** add controllerAs config with function ([1ee7334a](https://github.com/angular-ui/ui-router/commit/1ee7334a73efeccc9b95340e315cdfd59944762d)) - - -### 0.2.9 (2014-01-17) - - -This release is identical to 0.2.8. 0.2.8 was re-tagged in git to fix a problem with bower. - - -### 0.2.8 (2014-01-16) - - -#### Bug Fixes - -* **$state:** allow null to be passed as 'params' param ([094dc30e](https://github.com/angular-ui/ui-router/commit/094dc30e883e1bd14e50a475553bafeaade3b178)) -* **$state.go:** param inheritance shouldn't inherit from siblings ([aea872e0](https://github.com/angular-ui/ui-router/commit/aea872e0b983cb433436ce5875df10c838fccedb)) -* **bower.json:** fixes bower.json ([eed3cc4d](https://github.com/angular-ui/ui-router/commit/eed3cc4d4dfef1d3ef84b9fd063127538ebf59d3)) -* **uiSrefActive:** annotate controller injection ([85921422](https://github.com/angular-ui/ui-router/commit/85921422ff7fb0effed358136426d616cce3d583), closes [#671](https://github.com/angular-ui/ui-router/issues/671)) -* **uiView:** - * autoscroll tests pass on 1.2.4 & 1.1.5 ([86eacac0](https://github.com/angular-ui/ui-router/commit/86eacac09ca5e9000bd3b9c7ba6e2cc95d883a3a)) - * don't animate initial load ([83b6634d](https://github.com/angular-ui/ui-router/commit/83b6634d27942ca74766b2b1244a7fc52c5643d9)) - * test pass against 1.0.8 and 1.2.4 ([a402415a](https://github.com/angular-ui/ui-router/commit/a402415a2a28b360c43b9fe8f4f54c540f6c33de)) - * it should autoscroll when expr is missing. ([8bb9e27a](https://github.com/angular-ui/ui-router/commit/8bb9e27a2986725f45daf44c4c9f846385095aff)) - - -#### Features - -* **uiSref:** add target attribute behaviour ([c12bf9a5](https://github.com/angular-ui/ui-router/commit/c12bf9a520d30d70294e3d82de7661900f8e394e)) -* **uiView:** - * merge autoscroll expression test. ([b89e0f87](https://github.com/angular-ui/ui-router/commit/b89e0f871d5cc35c10925ede986c10684d5c9252)) - * cache and test autoscroll expression ([ee262282](https://github.com/angular-ui/ui-router/commit/ee2622828c2ce83807f006a459ac4e11406d9258)) diff --git a/src/main/webapp/bower_components/angular-ui-router/CONTRIBUTING.md b/src/main/webapp/bower_components/angular-ui-router/CONTRIBUTING.md deleted file mode 100644 index 63829a54..00000000 --- a/src/main/webapp/bower_components/angular-ui-router/CONTRIBUTING.md +++ /dev/null @@ -1,65 +0,0 @@ - -# Report an Issue - -Help us make UI-Router better! If you think you might have found a bug, or some other weirdness, start by making sure -it hasn't already been reported. You can [search through existing issues](https://github.com/angular-ui/ui-router/search?q=wat%3F&type=Issues) -to see if someone's reported one similar to yours. - -If not, then [create a plunkr](http://bit.ly/UIR-Plunk) that demonstrates the problem (try to use as little code -as possible: the more minimalist, the faster we can debug it). - -Next, [create a new issue](https://github.com/angular-ui/ui-router/issues/new) that briefly explains the problem, -and provides a bit of background as to the circumstances that triggered it. Don't forget to include the link to -that plunkr you created! - -**Note**: If you're unsure how a feature is used, or are encountering some unexpected behavior that you aren't sure -is a bug, it's best to talk it out on -[StackOverflow](http://stackoverflow.com/questions/ask?tags=angularjs,angular-ui-router) before reporting it. This -keeps development streamlined, and helps us focus on building great software. - - -Issues only! | --------------| -Please keep in mind that the issue tracker is for *issues*. Please do *not* post an issue if you need help or support. Instead, see one of the above-mentioned forums or [IRC](irc://irc.freenode.net/#angularjs). | - -####Purple Labels -A purple label means that **you** need to take some further action. - - : Your issue is not specific enough, or there is no clear action that we can take. Please clarify and refine your issue. - - : Please [create a plunkr](http://bit.ly/UIR-Plunk) - - : We suspect your issue is really a help request, or could be answered by the community. Please ask your question on [StackOverflow](http://stackoverflow.com/questions/ask?tags=angularjs,angular-ui-router). If you determine that is an actual issue, please explain why. - -If your issue gets labeled with purple label, no further action will be taken until you respond to the label appropriately. - -# Contribute - -**(1)** See the **[Developing](#developing)** section below, to get the development version of UI-Router up and running on your local machine. - -**(2)** Check out the [roadmap](https://github.com/angular-ui/ui-router/milestones) to see where the project is headed, and if your feature idea fits with where we're headed. - -**(3)** If you're not sure, [open an RFC](https://github.com/angular-ui/ui-router/issues/new?title=RFC:%20My%20idea) to get some feedback on your idea. - -**(4)** Finally, commit some code and open a pull request. Code & commits should abide by the following rules: - -- *Always* have test coverage for new features (or regression tests for bug fixes), and *never* break existing tests -- Commits should represent one logical change each; if a feature goes through multiple iterations, squash your commits down to one -- Make sure to follow the [Angular commit message format](https://github.com/angular/angular.js/blob/master/CONTRIBUTING.md#commit-message-format) so your change will appear in the changelog of the next release. -- Changes should always respect the coding style of the project - - - -# Developing - -UI-Router uses <code>grunt >= 0.4.x</code>. Make sure to upgrade your environment and read the -[Migration Guide](http://gruntjs.com/upgrading-from-0.3-to-0.4). - -Dependencies for building from source and running tests: - -* [grunt-cli](https://github.com/gruntjs/grunt-cli) - run: `$ npm install -g grunt-cli` -* Then, install the development dependencies by running `$ npm install` from the project directory - -There are a number of targets in the gruntfile that are used to generating different builds: - -* `grunt`: Perform a normal build, runs jshint and karma tests -* `grunt build`: Perform a normal build -* `grunt dist`: Perform a clean build and generate documentation -* `grunt dev`: Run dev server (sample app) and watch for changes, builds and runs karma tests on changes. diff --git a/src/main/webapp/bower_components/angular-ui-router/LICENSE b/src/main/webapp/bower_components/angular-ui-router/LICENSE deleted file mode 100644 index 6413b092..00000000 --- a/src/main/webapp/bower_components/angular-ui-router/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License - -Copyright (c) 2013-2015 The AngularUI Team, Karsten Sperling - -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/src/main/webapp/bower_components/angular-ui-router/README.md b/src/main/webapp/bower_components/angular-ui-router/README.md deleted file mode 100644 index 1d8bcd61..00000000 --- a/src/main/webapp/bower_components/angular-ui-router/README.md +++ /dev/null @@ -1,245 +0,0 @@ -# AngularUI Router [](https://travis-ci.org/angular-ui/ui-router) - -#### The de-facto solution to flexible routing with nested views ---- -**[Download 0.2.15](http://angular-ui.github.io/ui-router/release/angular-ui-router.js)** (or **[Minified](http://angular-ui.github.io/ui-router/release/angular-ui-router.min.js)**) **|** -**[Guide](https://github.com/angular-ui/ui-router/wiki) |** -**[API](http://angular-ui.github.io/ui-router/site) |** -**[Sample](http://angular-ui.github.com/ui-router/sample/) ([Src](https://github.com/angular-ui/ui-router/tree/gh-pages/sample)) |** -**[FAQ](https://github.com/angular-ui/ui-router/wiki/Frequently-Asked-Questions) |** -**[Resources](#resources) |** -**[Report an Issue](https://github.com/angular-ui/ui-router/blob/master/CONTRIBUTING.md#report-an-issue) |** -**[Contribute](https://github.com/angular-ui/ui-router/blob/master/CONTRIBUTING.md#contribute) |** -**[Help!](http://stackoverflow.com/questions/ask?tags=angularjs,angular-ui-router) |** -**[Discuss](https://groups.google.com/forum/#!categories/angular-ui/router)** - ---- - -AngularUI Router is a routing framework for [AngularJS](http://angularjs.org), which allows you to organize the -parts of your interface into a [*state machine*](https://en.wikipedia.org/wiki/Finite-state_machine). Unlike the -[`$route` service](http://docs.angularjs.org/api/ngRoute.$route) in the Angular ngRoute module, which is organized around URL -routes, UI-Router is organized around [*states*](https://github.com/angular-ui/ui-router/wiki), -which may optionally have routes, as well as other behavior, attached. - -States are bound to *named*, *nested* and *parallel views*, allowing you to powerfully manage your application's interface. - -Check out the sample app: http://angular-ui.github.io/ui-router/sample/ - -- -**Note:** *UI-Router is under active development. As such, while this library is well-tested, the API may change. Consider using it in production applications only if you're comfortable following a changelog and updating your usage accordingly.* - - -## Get Started - -**(1)** Get UI-Router in one of the following ways: - - clone & [build](CONTRIBUTING.md#developing) this repository - - [download the release](http://angular-ui.github.io/ui-router/release/angular-ui-router.js) (or [minified](http://angular-ui.github.io/ui-router/release/angular-ui-router.min.js)) - - [link to cdn](http://cdnjs.com/libraries/angular-ui-router) - - via **[jspm](http://jspm.io/)**: by running `$ jspm install angular-ui-router` from your console - - or via **[npm](https://www.npmjs.org/)**: by running `$ npm install angular-ui-router` from your console - - or via **[Bower](http://bower.io/)**: by running `$ bower install angular-ui-router` from your console - - or via **[Component](https://github.com/component/component)**: by running `$ component install angular-ui/ui-router` from your console - -**(2)** Include `angular-ui-router.js` (or `angular-ui-router.min.js`) in your `index.html`, after including Angular itself (For Component users: ignore this step) - -**(3)** Add `'ui.router'` to your main module's list of dependencies (For Component users: replace `'ui.router'` with `require('angular-ui-router')`) - -When you're done, your setup should look similar to the following: - -> -```html -<!doctype html> -<html ng-app="myApp"> -<head> - <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.1.5/angular.min.js"></script> - <script src="js/angular-ui-router.min.js"></script> - <script> - var myApp = angular.module('myApp', ['ui.router']); - // For Component users, it should look like this: - // var myApp = angular.module('myApp', [require('angular-ui-router')]); - </script> - ... -</head> -<body> - ... -</body> -</html> -``` - -### [Nested States & Views](http://plnkr.co/edit/u18KQc?p=preview) - -The majority of UI-Router's power is in its ability to nest states & views. - -**(1)** First, follow the [setup](#get-started) instructions detailed above. - -**(2)** Then, add a [`ui-view` directive](https://github.com/angular-ui/ui-router/wiki/Quick-Reference#ui-view) to the `<body />` of your app. - -> -```html -<!-- index.html --> -<body> - <div ui-view></div> - <!-- We'll also add some navigation: --> - <a ui-sref="state1">State 1</a> - <a ui-sref="state2">State 2</a> -</body> -``` - -**(3)** You'll notice we also added some links with [`ui-sref` directives](https://github.com/angular-ui/ui-router/wiki/Quick-Reference#ui-sref). In addition to managing state transitions, this directive auto-generates the `href` attribute of the `<a />` element it's attached to, if the corresponding state has a URL. Next we'll add some templates. These will plug into the `ui-view` within `index.html`. Notice that they have their own `ui-view` as well! That is the key to nesting states and views. - -> -```html -<!-- partials/state1.html --> -<h1>State 1</h1> -<hr/> -<a ui-sref="state1.list">Show List</a> -<div ui-view></div> -``` -```html -<!-- partials/state2.html --> -<h1>State 2</h1> -<hr/> -<a ui-sref="state2.list">Show List</a> -<div ui-view></div> -``` - -**(4)** Next, we'll add some child templates. *These* will get plugged into the `ui-view` of their parent state templates. - -> -```html -<!-- partials/state1.list.html --> -<h3>List of State 1 Items</h3> -<ul> - <li ng-repeat="item in items">{{ item }}</li> -</ul> -``` - -> -```html -<!-- partials/state2.list.html --> -<h3>List of State 2 Things</h3> -<ul> - <li ng-repeat="thing in things">{{ thing }}</li> -</ul> -``` - -**(5)** Finally, we'll wire it all up with `$stateProvider`. Set up your states in the module config, as in the following: - - -> -```javascript -myApp.config(function($stateProvider, $urlRouterProvider) { - // - // For any unmatched url, redirect to /state1 - $urlRouterProvider.otherwise("/state1"); - // - // Now set up the states - $stateProvider - .state('state1', { - url: "/state1", - templateUrl: "partials/state1.html" - }) - .state('state1.list', { - url: "/list", - templateUrl: "partials/state1.list.html", - controller: function($scope) { - $scope.items = ["A", "List", "Of", "Items"]; - } - }) - .state('state2', { - url: "/state2", - templateUrl: "partials/state2.html" - }) - .state('state2.list', { - url: "/list", - templateUrl: "partials/state2.list.html", - controller: function($scope) { - $scope.things = ["A", "Set", "Of", "Things"]; - } - }); -}); -``` - -**(6)** See this quick start example in action. ->**[Go to Quick Start Plunker for Nested States & Views](http://plnkr.co/edit/u18KQc?p=preview)** - -**(7)** This only scratches the surface ->**[Dive Deeper!](https://github.com/angular-ui/ui-router/wiki)** - - -### [Multiple & Named Views](http://plnkr.co/edit/SDOcGS?p=preview) - -Another great feature is the ability to have multiple `ui-view`s view per template. - -**Pro Tip:** *While multiple parallel views are a powerful feature, you'll often be able to manage your -interfaces more effectively by nesting your views, and pairing those views with nested states.* - -**(1)** Follow the [setup](#get-started) instructions detailed above. - -**(2)** Add one or more `ui-view` to your app, give them names. -> -```html -<!-- index.html --> -<body> - <div ui-view="viewA"></div> - <div ui-view="viewB"></div> - <!-- Also a way to navigate --> - <a ui-sref="route1">Route 1</a> - <a ui-sref="route2">Route 2</a> -</body> -``` - -**(3)** Set up your states in the module config: -> -```javascript -myApp.config(function($stateProvider) { - $stateProvider - .state('index', { - url: "", - views: { - "viewA": { template: "index.viewA" }, - "viewB": { template: "index.viewB" } - } - }) - .state('route1', { - url: "/route1", - views: { - "viewA": { template: "route1.viewA" }, - "viewB": { template: "route1.viewB" } - } - }) - .state('route2', { - url: "/route2", - views: { - "viewA": { template: "route2.viewA" }, - "viewB": { template: "route2.viewB" } - } - }) -}); -``` - -**(4)** See this quick start example in action. ->**[Go to Quick Start Plunker for Multiple & Named Views](http://plnkr.co/edit/SDOcGS?p=preview)** - - -## Resources - -* [In-Depth Guide](https://github.com/angular-ui/ui-router/wiki) -* [API Reference](http://angular-ui.github.io/ui-router/site) -* [Sample App](http://angular-ui.github.com/ui-router/sample/) ([Source](https://github.com/angular-ui/ui-router/tree/gh-pages/sample)) -* [FAQ](https://github.com/angular-ui/ui-router/wiki/Frequently-Asked-Questions) -* [Slides comparing ngRoute to ui-router](http://slid.es/timkindberg/ui-router#/) -* [UI-Router Extras / Addons](http://christopherthielen.github.io/ui-router-extras/#/home) (@christopherthielen) - -### Videos - -* [Introduction Video](https://egghead.io/lessons/angularjs-introduction-ui-router) (egghead.io) -* [Tim Kindberg on Angular UI-Router](https://www.youtube.com/watch?v=lBqiZSemrqg) -* [Activating States](https://egghead.io/lessons/angularjs-ui-router-activating-states) (egghead.io) -* [Learn Angular.js using UI-Router](http://youtu.be/QETUuZ27N0w) (LearnCode.academy) - - - -## Reporting issues and Contributing - -Please read our [Contributor guidelines](CONTRIBUTING.md) before reporting an issue or creating a pull request. diff --git a/src/main/webapp/bower_components/angular-ui-router/api/angular-ui-router.d.ts b/src/main/webapp/bower_components/angular-ui-router/api/angular-ui-router.d.ts deleted file mode 100644 index 55c5d5e0..00000000 --- a/src/main/webapp/bower_components/angular-ui-router/api/angular-ui-router.d.ts +++ /dev/null @@ -1,126 +0,0 @@ -// Type definitions for Angular JS 1.1.5+ (ui.router module) -// Project: https://github.com/angular-ui/ui-router -// Definitions by: Michel Salib <https://github.com/michelsalib> -// Definitions: https://github.com/borisyankov/DefinitelyTyped - -declare module ng.ui { - - interface IState { - name?: string; - template?: string; - templateUrl?: any; // string || () => string - templateProvider?: any; // () => string || IPromise<string> - controller?: any; - controllerAs?: string; - controllerProvider?: any; - resolve?: {}; - url?: string; - params?: any; - views?: {}; - abstract?: boolean; - onEnter?: (...args: any[]) => void; - onExit?: (...args: any[]) => void; - data?: any; - reloadOnSearch?: boolean; - } - - interface ITypedState<T> extends IState { - data?: T; - } - - interface IStateProvider extends IServiceProvider { - state(name: string, config: IState): IStateProvider; - state(config: IState): IStateProvider; - decorator(name?: string, decorator?: (state: IState, parent: Function) => any): any; - } - - interface IUrlMatcher { - concat(pattern: string): IUrlMatcher; - exec(path: string, searchParams: {}): {}; - parameters(): string[]; - format(values: {}): string; - } - - interface IUrlMatcherFactory { - compile(pattern: string): IUrlMatcher; - isMatcher(o: any): boolean; - } - - interface IUrlRouterProvider extends IServiceProvider { - when(whenPath: RegExp, handler: Function): IUrlRouterProvider; - when(whenPath: RegExp, handler: any[]): IUrlRouterProvider; - when(whenPath: RegExp, toPath: string): IUrlRouterProvider; - when(whenPath: IUrlMatcher, hanlder: Function): IUrlRouterProvider; - when(whenPath: IUrlMatcher, handler: any[]): IUrlRouterProvider; - when(whenPath: IUrlMatcher, toPath: string): IUrlRouterProvider; - when(whenPath: string, handler: Function): IUrlRouterProvider; - when(whenPath: string, handler: any[]): IUrlRouterProvider; - when(whenPath: string, toPath: string): IUrlRouterProvider; - otherwise(handler: Function): IUrlRouterProvider; - otherwise(handler: any[]): IUrlRouterProvider; - otherwise(path: string): IUrlRouterProvider; - rule(handler: Function): IUrlRouterProvider; - rule(handler: any[]): IUrlRouterProvider; - } - - interface IStateOptions { - location?: any; - inherit?: boolean; - relative?: IState; - notify?: boolean; - reload?: boolean; - } - - interface IHrefOptions { - lossy?: boolean; - inherit?: boolean; - relative?: IState; - absolute?: boolean; - } - - interface IStateService { - go(to: string, params?: {}, options?: IStateOptions): IPromise<any>; - transitionTo(state: string, params?: {}, updateLocation?: boolean): void; - transitionTo(state: string, params?: {}, options?: IStateOptions): void; - includes(state: string, params?: {}): boolean; - is(state:string, params?: {}): boolean; - is(state: IState, params?: {}): boolean; - href(state: IState, params?: {}, options?: IHrefOptions): string; - href(state: string, params?: {}, options?: IHrefOptions): string; - get(state: string): IState; - get(): IState[]; - current: IState; - params: any; - reload(): void; - } - - interface IStateParamsService { - [key: string]: any; - } - - interface IStateParams { - [key: string]: any; - } - - interface IUrlRouterService { - /* - * Triggers an update; the same update that happens when the address bar - * url changes, aka $locationChangeSuccess. - * - * This method is useful when you need to use preventDefault() on the - * $locationChangeSuccess event, perform some custom logic (route protection, - * auth, config, redirection, etc) and then finally proceed with the transition - * by calling $urlRouter.sync(). - * - */ - sync(): void; - } - - interface IUiViewScrollProvider { - /* - * Reverts back to using the core $anchorScroll service for scrolling - * based on the url anchor. - */ - useAnchorScroll(): void; - } -} diff --git a/src/main/webapp/bower_components/angular-ui-router/bower.json b/src/main/webapp/bower_components/angular-ui-router/bower.json deleted file mode 100644 index f4f08fa2..00000000 --- a/src/main/webapp/bower_components/angular-ui-router/bower.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "angular-ui-router", - "version": "0.2.15", - "main": "./release/angular-ui-router.js", - "dependencies": { - "angular": ">= 1.0.8" - }, - "ignore": [ - "**/.*", - "node_modules", - "bower_components", - "component.json", - "package.json", - "lib", - "config", - "sample", - "test", - "tests", - "ngdoc_assets", - "Gruntfile.js", - "files.js" - ] -} diff --git a/src/main/webapp/bower_components/angular-ui-router/release/angular-ui-router.js b/src/main/webapp/bower_components/angular-ui-router/release/angular-ui-router.js deleted file mode 100644 index 57c62cca..00000000 --- a/src/main/webapp/bower_components/angular-ui-router/release/angular-ui-router.js +++ /dev/null @@ -1,4370 +0,0 @@ -/** - * State-based routing for AngularJS - * @version v0.2.15 - * @link http://angular-ui.github.com/ - * @license MIT License, http://www.opensource.org/licenses/MIT - */ - -/* commonjs package manager support (eg componentjs) */ -if (typeof module !== "undefined" && typeof exports !== "undefined" && module.exports === exports){ - module.exports = 'ui.router'; -} - -(function (window, angular, undefined) { -/*jshint globalstrict:true*/ -/*global angular:false*/ -'use strict'; - -var isDefined = angular.isDefined, - isFunction = angular.isFunction, - isString = angular.isString, - isObject = angular.isObject, - isArray = angular.isArray, - forEach = angular.forEach, - extend = angular.extend, - copy = angular.copy; - -function inherit(parent, extra) { - return extend(new (extend(function() {}, { prototype: parent }))(), extra); -} - -function merge(dst) { - forEach(arguments, function(obj) { - if (obj !== dst) { - forEach(obj, function(value, key) { - if (!dst.hasOwnProperty(key)) dst[key] = value; - }); - } - }); - return dst; -} - -/** - * Finds the common ancestor path between two states. - * - * @param {Object} first The first state. - * @param {Object} second The second state. - * @return {Array} Returns an array of state names in descending order, not including the root. - */ -function ancestors(first, second) { - var path = []; - - for (var n in first.path) { - if (first.path[n] !== second.path[n]) break; - path.push(first.path[n]); - } - return path; -} - -/** - * IE8-safe wrapper for `Object.keys()`. - * - * @param {Object} object A JavaScript object. - * @return {Array} Returns the keys of the object as an array. - */ -function objectKeys(object) { - if (Object.keys) { - return Object.keys(object); - } - var result = []; - - forEach(object, function(val, key) { - result.push(key); - }); - return result; -} - -/** - * IE8-safe wrapper for `Array.prototype.indexOf()`. - * - * @param {Array} array A JavaScript array. - * @param {*} value A value to search the array for. - * @return {Number} Returns the array index value of `value`, or `-1` if not present. - */ -function indexOf(array, value) { - if (Array.prototype.indexOf) { - return array.indexOf(value, Number(arguments[2]) || 0); - } - var len = array.length >>> 0, from = Number(arguments[2]) || 0; - from = (from < 0) ? Math.ceil(from) : Math.floor(from); - - if (from < 0) from += len; - - for (; from < len; from++) { - if (from in array && array[from] === value) return from; - } - return -1; -} - -/** - * Merges a set of parameters with all parameters inherited between the common parents of the - * current state and a given destination state. - * - * @param {Object} currentParams The value of the current state parameters ($stateParams). - * @param {Object} newParams The set of parameters which will be composited with inherited params. - * @param {Object} $current Internal definition of object representing the current state. - * @param {Object} $to Internal definition of object representing state to transition to. - */ -function inheritParams(currentParams, newParams, $current, $to) { - var parents = ancestors($current, $to), parentParams, inherited = {}, inheritList = []; - - for (var i in parents) { - if (!parents[i].params) continue; - parentParams = objectKeys(parents[i].params); - if (!parentParams.length) continue; - - for (var j in parentParams) { - if (indexOf(inheritList, parentParams[j]) >= 0) continue; - inheritList.push(parentParams[j]); - inherited[parentParams[j]] = currentParams[parentParams[j]]; - } - } - return extend({}, inherited, newParams); -} - -/** - * Performs a non-strict comparison of the subset of two objects, defined by a list of keys. - * - * @param {Object} a The first object. - * @param {Object} b The second object. - * @param {Array} keys The list of keys within each object to compare. If the list is empty or not specified, - * it defaults to the list of keys in `a`. - * @return {Boolean} Returns `true` if the keys match, otherwise `false`. - */ -function equalForKeys(a, b, keys) { - if (!keys) { - keys = []; - for (var n in a) keys.push(n); // Used instead of Object.keys() for IE8 compatibility - } - - for (var i=0; i<keys.length; i++) { - var k = keys[i]; - if (a[k] != b[k]) return false; // Not '===', values aren't necessarily normalized - } - return true; -} - -/** - * Returns the subset of an object, based on a list of keys. - * - * @param {Array} keys - * @param {Object} values - * @return {Boolean} Returns a subset of `values`. - */ -function filterByKeys(keys, values) { - var filtered = {}; - - forEach(keys, function (name) { - filtered[name] = values[name]; - }); - return filtered; -} - -// like _.indexBy -// when you know that your index values will be unique, or you want last-one-in to win -function indexBy(array, propName) { - var result = {}; - forEach(array, function(item) { - result[item[propName]] = item; - }); - return result; -} - -// extracted from underscore.js -// Return a copy of the object only containing the whitelisted properties. -function pick(obj) { - var copy = {}; - var keys = Array.prototype.concat.apply(Array.prototype, Array.prototype.slice.call(arguments, 1)); - forEach(keys, function(key) { - if (key in obj) copy[key] = obj[key]; - }); - return copy; -} - -// extracted from underscore.js -// Return a copy of the object omitting the blacklisted properties. -function omit(obj) { - var copy = {}; - var keys = Array.prototype.concat.apply(Array.prototype, Array.prototype.slice.call(arguments, 1)); - for (var key in obj) { - if (indexOf(keys, key) == -1) copy[key] = obj[key]; - } - return copy; -} - -function pluck(collection, key) { - var result = isArray(collection) ? [] : {}; - - forEach(collection, function(val, i) { - result[i] = isFunction(key) ? key(val) : val[key]; - }); - return result; -} - -function filter(collection, callback) { - var array = isArray(collection); - var result = array ? [] : {}; - forEach(collection, function(val, i) { - if (callback(val, i)) { - result[array ? result.length : i] = val; - } - }); - return result; -} - -function map(collection, callback) { - var result = isArray(collection) ? [] : {}; - - forEach(collection, function(val, i) { - result[i] = callback(val, i); - }); - return result; -} - -/** - * @ngdoc overview - * @name ui.router.util - * - * @description - * # ui.router.util sub-module - * - * This module is a dependency of other sub-modules. Do not include this module as a dependency - * in your angular app (use {@link ui.router} module instead). - * - */ -angular.module('ui.router.util', ['ng']); - -/** - * @ngdoc overview - * @name ui.router.router - * - * @requires ui.router.util - * - * @description - * # ui.router.router sub-module - * - * This module is a dependency of other sub-modules. Do not include this module as a dependency - * in your angular app (use {@link ui.router} module instead). - */ -angular.module('ui.router.router', ['ui.router.util']); - -/** - * @ngdoc overview - * @name ui.router.state - * - * @requires ui.router.router - * @requires ui.router.util - * - * @description - * # ui.router.state sub-module - * - * This module is a dependency of the main ui.router module. Do not include this module as a dependency - * in your angular app (use {@link ui.router} module instead). - * - */ -angular.module('ui.router.state', ['ui.router.router', 'ui.router.util']); - -/** - * @ngdoc overview - * @name ui.router - * - * @requires ui.router.state - * - * @description - * # ui.router - * - * ## The main module for ui.router - * There are several sub-modules included with the ui.router module, however only this module is needed - * as a dependency within your angular app. The other modules are for organization purposes. - * - * The modules are: - * * ui.router - the main "umbrella" module - * * ui.router.router - - * - * *You'll need to include **only** this module as the dependency within your angular app.* - * - * <pre> - * <!doctype html> - * <html ng-app="myApp"> - * <head> - * <script src="js/angular.js"></script> - * <!-- Include the ui-router script --> - * <script src="js/angular-ui-router.min.js"></script> - * <script> - * // ...and add 'ui.router' as a dependency - * var myApp = angular.module('myApp', ['ui.router']); - * </script> - * </head> - * <body> - * </body> - * </html> - * </pre> - */ -angular.module('ui.router', ['ui.router.state']); - -angular.module('ui.router.compat', ['ui.router']); - -/** - * @ngdoc object - * @name ui.router.util.$resolve - * - * @requires $q - * @requires $injector - * - * @description - * Manages resolution of (acyclic) graphs of promises. - */ -$Resolve.$inject = ['$q', '$injector']; -function $Resolve( $q, $injector) { - - var VISIT_IN_PROGRESS = 1, - VISIT_DONE = 2, - NOTHING = {}, - NO_DEPENDENCIES = [], - NO_LOCALS = NOTHING, - NO_PARENT = extend($q.when(NOTHING), { $$promises: NOTHING, $$values: NOTHING }); - - - /** - * @ngdoc function - * @name ui.router.util.$resolve#study - * @methodOf ui.router.util.$resolve - * - * @description - * Studies a set of invocables that are likely to be used multiple times. - * <pre> - * $resolve.study(invocables)(locals, parent, self) - * </pre> - * is equivalent to - * <pre> - * $resolve.resolve(invocables, locals, parent, self) - * </pre> - * but the former is more efficient (in fact `resolve` just calls `study` - * internally). - * - * @param {object} invocables Invocable objects - * @return {function} a function to pass in locals, parent and self - */ - this.study = function (invocables) { - if (!isObject(invocables)) throw new Error("'invocables' must be an object"); - var invocableKeys = objectKeys(invocables || {}); - - // Perform a topological sort of invocables to build an ordered plan - var plan = [], cycle = [], visited = {}; - function visit(value, key) { - if (visited[key] === VISIT_DONE) return; - - cycle.push(key); - if (visited[key] === VISIT_IN_PROGRESS) { - cycle.splice(0, indexOf(cycle, key)); - throw new Error("Cyclic dependency: " + cycle.join(" -> ")); - } - visited[key] = VISIT_IN_PROGRESS; - - if (isString(value)) { - plan.push(key, [ function() { return $injector.get(value); }], NO_DEPENDENCIES); - } else { - var params = $injector.annotate(value); - forEach(params, function (param) { - if (param !== key && invocables.hasOwnProperty(param)) visit(invocables[param], param); - }); - plan.push(key, value, params); - } - - cycle.pop(); - visited[key] = VISIT_DONE; - } - forEach(invocables, visit); - invocables = cycle = visited = null; // plan is all that's required - - function isResolve(value) { - return isObject(value) && value.then && value.$$promises; - } - - return function (locals, parent, self) { - if (isResolve(locals) && self === undefined) { - self = parent; parent = locals; locals = null; - } - if (!locals) locals = NO_LOCALS; - else if (!isObject(locals)) { - throw new Error("'locals' must be an object"); - } - if (!parent) parent = NO_PARENT; - else if (!isResolve(parent)) { - throw new Error("'parent' must be a promise returned by $resolve.resolve()"); - } - - // To complete the overall resolution, we have to wait for the parent - // promise and for the promise for each invokable in our plan. - var resolution = $q.defer(), - result = resolution.promise, - promises = result.$$promises = {}, - values = extend({}, locals), - wait = 1 + plan.length/3, - merged = false; - - function done() { - // Merge parent values we haven't got yet and publish our own $$values - if (!--wait) { - if (!merged) merge(values, parent.$$values); - result.$$values = values; - result.$$promises = result.$$promises || true; // keep for isResolve() - delete result.$$inheritedValues; - resolution.resolve(values); - } - } - - function fail(reason) { - result.$$failure = reason; - resolution.reject(reason); - } - - // Short-circuit if parent has already failed - if (isDefined(parent.$$failure)) { - fail(parent.$$failure); - return result; - } - - if (parent.$$inheritedValues) { - merge(values, omit(parent.$$inheritedValues, invocableKeys)); - } - - // Merge parent values if the parent has already resolved, or merge - // parent promises and wait if the parent resolve is still in progress. - extend(promises, parent.$$promises); - if (parent.$$values) { - merged = merge(values, omit(parent.$$values, invocableKeys)); - result.$$inheritedValues = omit(parent.$$values, invocableKeys); - done(); - } else { - if (parent.$$inheritedValues) { - result.$$inheritedValues = omit(parent.$$inheritedValues, invocableKeys); - } - parent.then(done, fail); - } - - // Process each invocable in the plan, but ignore any where a local of the same name exists. - for (var i=0, ii=plan.length; i<ii; i+=3) { - if (locals.hasOwnProperty(plan[i])) done(); - else invoke(plan[i], plan[i+1], plan[i+2]); - } - - function invoke(key, invocable, params) { - // Create a deferred for this invocation. Failures will propagate to the resolution as well. - var invocation = $q.defer(), waitParams = 0; - function onfailure(reason) { - invocation.reject(reason); - fail(reason); - } - // Wait for any parameter that we have a promise for (either from parent or from this - // resolve; in that case study() will have made sure it's ordered before us in the plan). - forEach(params, function (dep) { - if (promises.hasOwnProperty(dep) && !locals.hasOwnProperty(dep)) { - waitParams++; - promises[dep].then(function (result) { - values[dep] = result; - if (!(--waitParams)) proceed(); - }, onfailure); - } - }); - if (!waitParams) proceed(); - function proceed() { - if (isDefined(result.$$failure)) return; - try { - invocation.resolve($injector.invoke(invocable, self, values)); - invocation.promise.then(function (result) { - values[key] = result; - done(); - }, onfailure); - } catch (e) { - onfailure(e); - } - } - // Publish promise synchronously; invocations further down in the plan may depend on it. - promises[key] = invocation.promise; - } - - return result; - }; - }; - - /** - * @ngdoc function - * @name ui.router.util.$resolve#resolve - * @methodOf ui.router.util.$resolve - * - * @description - * Resolves a set of invocables. An invocable is a function to be invoked via - * `$injector.invoke()`, and can have an arbitrary number of dependencies. - * An invocable can either return a value directly, - * or a `$q` promise. If a promise is returned it will be resolved and the - * resulting value will be used instead. Dependencies of invocables are resolved - * (in this order of precedence) - * - * - from the specified `locals` - * - from another invocable that is part of this `$resolve` call - * - from an invocable that is inherited from a `parent` call to `$resolve` - * (or recursively - * - from any ancestor `$resolve` of that parent). - * - * The return value of `$resolve` is a promise for an object that contains - * (in this order of precedence) - * - * - any `locals` (if specified) - * - the resolved return values of all injectables - * - any values inherited from a `parent` call to `$resolve` (if specified) - * - * The promise will resolve after the `parent` promise (if any) and all promises - * returned by injectables have been resolved. If any invocable - * (or `$injector.invoke`) throws an exception, or if a promise returned by an - * invocable is rejected, the `$resolve` promise is immediately rejected with the - * same error. A rejection of a `parent` promise (if specified) will likewise be - * propagated immediately. Once the `$resolve` promise has been rejected, no - * further invocables will be called. - * - * Cyclic dependencies between invocables are not permitted and will caues `$resolve` - * to throw an error. As a special case, an injectable can depend on a parameter - * with the same name as the injectable, which will be fulfilled from the `parent` - * injectable of the same name. This allows inherited values to be decorated. - * Note that in this case any other injectable in the same `$resolve` with the same - * dependency would see the decorated value, not the inherited value. - * - * Note that missing dependencies -- unlike cyclic dependencies -- will cause an - * (asynchronous) rejection of the `$resolve` promise rather than a (synchronous) - * exception. - * - * Invocables are invoked eagerly as soon as all dependencies are available. - * This is true even for dependencies inherited from a `parent` call to `$resolve`. - * - * As a special case, an invocable can be a string, in which case it is taken to - * be a service name to be passed to `$injector.get()`. This is supported primarily - * for backwards-compatibility with the `resolve` property of `$routeProvider` - * routes. - * - * @param {object} invocables functions to invoke or - * `$injector` services to fetch. - * @param {object} locals values to make available to the injectables - * @param {object} parent a promise returned by another call to `$resolve`. - * @param {object} self the `this` for the invoked methods - * @return {object} Promise for an object that contains the resolved return value - * of all invocables, as well as any inherited and local values. - */ - this.resolve = function (invocables, locals, parent, self) { - return this.study(invocables)(locals, parent, self); - }; -} - -angular.module('ui.router.util').service('$resolve', $Resolve); - - -/** - * @ngdoc object - * @name ui.router.util.$templateFactory - * - * @requires $http - * @requires $templateCache - * @requires $injector - * - * @description - * Service. Manages loading of templates. - */ -$TemplateFactory.$inject = ['$http', '$templateCache', '$injector']; -function $TemplateFactory( $http, $templateCache, $injector) { - - /** - * @ngdoc function - * @name ui.router.util.$templateFactory#fromConfig - * @methodOf ui.router.util.$templateFactory - * - * @description - * Creates a template from a configuration object. - * - * @param {object} config Configuration object for which to load a template. - * The following properties are search in the specified order, and the first one - * that is defined is used to create the template: - * - * @param {string|object} config.template html string template or function to - * load via {@link ui.router.util.$templateFactory#fromString fromString}. - * @param {string|object} config.templateUrl url to load or a function returning - * the url to load via {@link ui.router.util.$templateFactory#fromUrl fromUrl}. - * @param {Function} config.templateProvider function to invoke via - * {@link ui.router.util.$templateFactory#fromProvider fromProvider}. - * @param {object} params Parameters to pass to the template function. - * @param {object} locals Locals to pass to `invoke` if the template is loaded - * via a `templateProvider`. Defaults to `{ params: params }`. - * - * @return {string|object} The template html as a string, or a promise for - * that string,or `null` if no template is configured. - */ - this.fromConfig = function (config, params, locals) { - return ( - isDefined(config.template) ? this.fromString(config.template, params) : - isDefined(config.templateUrl) ? this.fromUrl(config.templateUrl, params) : - isDefined(config.templateProvider) ? this.fromProvider(config.templateProvider, params, locals) : - null - ); - }; - - /** - * @ngdoc function - * @name ui.router.util.$templateFactory#fromString - * @methodOf ui.router.util.$templateFactory - * - * @description - * Creates a template from a string or a function returning a string. - * - * @param {string|object} template html template as a string or function that - * returns an html template as a string. - * @param {object} params Parameters to pass to the template function. - * - * @return {string|object} The template html as a string, or a promise for that - * string. - */ - this.fromString = function (template, params) { - return isFunction(template) ? template(params) : template; - }; - - /** - * @ngdoc function - * @name ui.router.util.$templateFactory#fromUrl - * @methodOf ui.router.util.$templateFactory - * - * @description - * Loads a template from the a URL via `$http` and `$templateCache`. - * - * @param {string|Function} url url of the template to load, or a function - * that returns a url. - * @param {Object} params Parameters to pass to the url function. - * @return {string|Promise.<string>} The template html as a string, or a promise - * for that string. - */ - this.fromUrl = function (url, params) { - if (isFunction(url)) url = url(params); - if (url == null) return null; - else return $http - .get(url, { cache: $templateCache, headers: { Accept: 'text/html' }}) - .then(function(response) { return response.data; }); - }; - - /** - * @ngdoc function - * @name ui.router.util.$templateFactory#fromProvider - * @methodOf ui.router.util.$templateFactory - * - * @description - * Creates a template by invoking an injectable provider function. - * - * @param {Function} provider Function to invoke via `$injector.invoke` - * @param {Object} params Parameters for the template. - * @param {Object} locals Locals to pass to `invoke`. Defaults to - * `{ params: params }`. - * @return {string|Promise.<string>} The template html as a string, or a promise - * for that string. - */ - this.fromProvider = function (provider, params, locals) { - return $injector.invoke(provider, null, locals || { params: params }); - }; -} - -angular.module('ui.router.util').service('$templateFactory', $TemplateFactory); - -var $$UMFP; // reference to $UrlMatcherFactoryProvider - -/** - * @ngdoc object - * @name ui.router.util.type:UrlMatcher - * - * @description - * Matches URLs against patterns and extracts named parameters from the path or the search - * part of the URL. A URL pattern consists of a path pattern, optionally followed by '?' and a list - * of search parameters. Multiple search parameter names are separated by '&'. Search parameters - * do not influence whether or not a URL is matched, but their values are passed through into - * the matched parameters returned by {@link ui.router.util.type:UrlMatcher#methods_exec exec}. - * - * Path parameter placeholders can be specified using simple colon/catch-all syntax or curly brace - * syntax, which optionally allows a regular expression for the parameter to be specified: - * - * * `':'` name - colon placeholder - * * `'*'` name - catch-all placeholder - * * `'{' name '}'` - curly placeholder - * * `'{' name ':' regexp|type '}'` - curly placeholder with regexp or type name. Should the - * regexp itself contain curly braces, they must be in matched pairs or escaped with a backslash. - * - * Parameter names may contain only word characters (latin letters, digits, and underscore) and - * must be unique within the pattern (across both path and search parameters). For colon - * placeholders or curly placeholders without an explicit regexp, a path parameter matches any - * number of characters other than '/'. For catch-all placeholders the path parameter matches - * any number of characters. - * - * Examples: - * - * * `'/hello/'` - Matches only if the path is exactly '/hello/'. There is no special treatment for - * trailing slashes, and patterns have to match the entire path, not just a prefix. - * * `'/user/:id'` - Matches '/user/bob' or '/user/1234!!!' or even '/user/' but not '/user' or - * '/user/bob/details'. The second path segment will be captured as the parameter 'id'. - * * `'/user/{id}'` - Same as the previous example, but using curly brace syntax. - * * `'/user/{id:[^/]*}'` - Same as the previous example. - * * `'/user/{id:[0-9a-fA-F]{1,8}}'` - Similar to the previous example, but only matches if the id - * parameter consists of 1 to 8 hex digits. - * * `'/files/{path:.*}'` - Matches any URL starting with '/files/' and captures the rest of the - * path into the parameter 'path'. - * * `'/files/*path'` - ditto. - * * `'/calendar/{start:date}'` - Matches "/calendar/2014-11-12" (because the pattern defined - * in the built-in `date` Type matches `2014-11-12`) and provides a Date object in $stateParams.start - * - * @param {string} pattern The pattern to compile into a matcher. - * @param {Object} config A configuration object hash: - * @param {Object=} parentMatcher Used to concatenate the pattern/config onto - * an existing UrlMatcher - * - * * `caseInsensitive` - `true` if URL matching should be case insensitive, otherwise `false`, the default value (for backward compatibility) is `false`. - * * `strict` - `false` if matching against a URL with a trailing slash should be treated as equivalent to a URL without a trailing slash, the default value is `true`. - * - * @property {string} prefix A static prefix of this pattern. The matcher guarantees that any - * URL matching this matcher (i.e. any string for which {@link ui.router.util.type:UrlMatcher#methods_exec exec()} returns - * non-null) will start with this prefix. - * - * @property {string} source The pattern that was passed into the constructor - * - * @property {string} sourcePath The path portion of the source property - * - * @property {string} sourceSearch The search portion of the source property - * - * @property {string} regex The constructed regex that will be used to match against the url when - * it is time to determine which url will match. - * - * @returns {Object} New `UrlMatcher` object - */ -function UrlMatcher(pattern, config, parentMatcher) { - config = extend({ params: {} }, isObject(config) ? config : {}); - - // Find all placeholders and create a compiled pattern, using either classic or curly syntax: - // '*' name - // ':' name - // '{' name '}' - // '{' name ':' regexp '}' - // The regular expression is somewhat complicated due to the need to allow curly braces - // inside the regular expression. The placeholder regexp breaks down as follows: - // ([:*])([\w\[\]]+) - classic placeholder ($1 / $2) (search version has - for snake-case) - // \{([\w\[\]]+)(?:\:( ... ))?\} - curly brace placeholder ($3) with optional regexp/type ... ($4) (search version has - for snake-case - // (?: ... | ... | ... )+ - the regexp consists of any number of atoms, an atom being either - // [^{}\\]+ - anything other than curly braces or backslash - // \\. - a backslash escape - // \{(?:[^{}\\]+|\\.)*\} - a matched set of curly braces containing other atoms - var placeholder = /([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g, - searchPlaceholder = /([:]?)([\w\[\]-]+)|\{([\w\[\]-]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g, - compiled = '^', last = 0, m, - segments = this.segments = [], - parentParams = parentMatcher ? parentMatcher.params : {}, - params = this.params = parentMatcher ? parentMatcher.params.$$new() : new $$UMFP.ParamSet(), - paramNames = []; - - function addParameter(id, type, config, location) { - paramNames.push(id); - if (parentParams[id]) return parentParams[id]; - if (!/^\w+(-+\w+)*(?:\[\])?$/.test(id)) throw new Error("Invalid parameter name '" + id + "' in pattern '" + pattern + "'"); - if (params[id]) throw new Error("Duplicate parameter name '" + id + "' in pattern '" + pattern + "'"); - params[id] = new $$UMFP.Param(id, type, config, location); - return params[id]; - } - - function quoteRegExp(string, pattern, squash, optional) { - var surroundPattern = ['',''], result = string.replace(/[\\\[\]\^$*+?.()|{}]/g, "\\$&"); - if (!pattern) return result; - switch(squash) { - case false: surroundPattern = ['(', ')' + (optional ? "?" : "")]; break; - case true: surroundPattern = ['?(', ')?']; break; - default: surroundPattern = ['(' + squash + "|", ')?']; break; - } - return result + surroundPattern[0] + pattern + surroundPattern[1]; - } - - this.source = pattern; - - // Split into static segments separated by path parameter placeholders. - // The number of segments is always 1 more than the number of parameters. - function matchDetails(m, isSearch) { - var id, regexp, segment, type, cfg, arrayMode; - id = m[2] || m[3]; // IE[78] returns '' for unmatched groups instead of null - cfg = config.params[id]; - segment = pattern.substring(last, m.index); - regexp = isSearch ? m[4] : m[4] || (m[1] == '*' ? '.*' : null); - type = $$UMFP.type(regexp || "string") || inherit($$UMFP.type("string"), { pattern: new RegExp(regexp, config.caseInsensitive ? 'i' : undefined) }); - return { - id: id, regexp: regexp, segment: segment, type: type, cfg: cfg - }; - } - - var p, param, segment; - while ((m = placeholder.exec(pattern))) { - p = matchDetails(m, false); - if (p.segment.indexOf('?') >= 0) break; // we're into the search part - - param = addParameter(p.id, p.type, p.cfg, "path"); - compiled += quoteRegExp(p.segment, param.type.pattern.source, param.squash, param.isOptional); - segments.push(p.segment); - last = placeholder.lastIndex; - } - segment = pattern.substring(last); - - // Find any search parameter names and remove them from the last segment - var i = segment.indexOf('?'); - - if (i >= 0) { - var search = this.sourceSearch = segment.substring(i); - segment = segment.substring(0, i); - this.sourcePath = pattern.substring(0, last + i); - - if (search.length > 0) { - last = 0; - while ((m = searchPlaceholder.exec(search))) { - p = matchDetails(m, true); - param = addParameter(p.id, p.type, p.cfg, "search"); - last = placeholder.lastIndex; - // check if ?& - } - } - } else { - this.sourcePath = pattern; - this.sourceSearch = ''; - } - - compiled += quoteRegExp(segment) + (config.strict === false ? '\/?' : '') + '$'; - segments.push(segment); - - this.regexp = new RegExp(compiled, config.caseInsensitive ? 'i' : undefined); - this.prefix = segments[0]; - this.$$paramNames = paramNames; -} - -/** - * @ngdoc function - * @name ui.router.util.type:UrlMatcher#concat - * @methodOf ui.router.util.type:UrlMatcher - * - * @description - * Returns a new matcher for a pattern constructed by appending the path part and adding the - * search parameters of the specified pattern to this pattern. The current pattern is not - * modified. This can be understood as creating a pattern for URLs that are relative to (or - * suffixes of) the current pattern. - * - * @example - * The following two matchers are equivalent: - * <pre> - * new UrlMatcher('/user/{id}?q').concat('/details?date'); - * new UrlMatcher('/user/{id}/details?q&date'); - * </pre> - * - * @param {string} pattern The pattern to append. - * @param {Object} config An object hash of the configuration for the matcher. - * @returns {UrlMatcher} A matcher for the concatenated pattern. - */ -UrlMatcher.prototype.concat = function (pattern, config) { - // Because order of search parameters is irrelevant, we can add our own search - // parameters to the end of the new pattern. Parse the new pattern by itself - // and then join the bits together, but it's much easier to do this on a string level. - var defaultConfig = { - caseInsensitive: $$UMFP.caseInsensitive(), - strict: $$UMFP.strictMode(), - squash: $$UMFP.defaultSquashPolicy() - }; - return new UrlMatcher(this.sourcePath + pattern + this.sourceSearch, extend(defaultConfig, config), this); -}; - -UrlMatcher.prototype.toString = function () { - return this.source; -}; - -/** - * @ngdoc function - * @name ui.router.util.type:UrlMatcher#exec - * @methodOf ui.router.util.type:UrlMatcher - * - * @description - * Tests the specified path against this matcher, and returns an object containing the captured - * parameter values, or null if the path does not match. The returned object contains the values - * of any search parameters that are mentioned in the pattern, but their value may be null if - * they are not present in `searchParams`. This means that search parameters are always treated - * as optional. - * - * @example - * <pre> - * new UrlMatcher('/user/{id}?q&r').exec('/user/bob', { - * x: '1', q: 'hello' - * }); - * // returns { id: 'bob', q: 'hello', r: null } - * </pre> - * - * @param {string} path The URL path to match, e.g. `$location.path()`. - * @param {Object} searchParams URL search parameters, e.g. `$location.search()`. - * @returns {Object} The captured parameter values. - */ -UrlMatcher.prototype.exec = function (path, searchParams) { - var m = this.regexp.exec(path); - if (!m) return null; - searchParams = searchParams || {}; - - var paramNames = this.parameters(), nTotal = paramNames.length, - nPath = this.segments.length - 1, - values = {}, i, j, cfg, paramName; - - if (nPath !== m.length - 1) throw new Error("Unbalanced capture group in route '" + this.source + "'"); - - function decodePathArray(string) { - function reverseString(str) { return str.split("").reverse().join(""); } - function unquoteDashes(str) { return str.replace(/\\-/g, "-"); } - - var split = reverseString(string).split(/-(?!\\)/); - var allReversed = map(split, reverseString); - return map(allReversed, unquoteDashes).reverse(); - } - - for (i = 0; i < nPath; i++) { - paramName = paramNames[i]; - var param = this.params[paramName]; - var paramVal = m[i+1]; - // if the param value matches a pre-replace pair, replace the value before decoding. - for (j = 0; j < param.replace; j++) { - if (param.replace[j].from === paramVal) paramVal = param.replace[j].to; - } - if (paramVal && param.array === true) paramVal = decodePathArray(paramVal); - values[paramName] = param.value(paramVal); - } - for (/**/; i < nTotal; i++) { - paramName = paramNames[i]; - values[paramName] = this.params[paramName].value(searchParams[paramName]); - } - - return values; -}; - -/** - * @ngdoc function - * @name ui.router.util.type:UrlMatcher#parameters - * @methodOf ui.router.util.type:UrlMatcher - * - * @description - * Returns the names of all path and search parameters of this pattern in an unspecified order. - * - * @returns {Array.<string>} An array of parameter names. Must be treated as read-only. If the - * pattern has no parameters, an empty array is returned. - */ -UrlMatcher.prototype.parameters = function (param) { - if (!isDefined(param)) return this.$$paramNames; - return this.params[param] || null; -}; - -/** - * @ngdoc function - * @name ui.router.util.type:UrlMatcher#validate - * @methodOf ui.router.util.type:UrlMatcher - * - * @description - * Checks an object hash of parameters to validate their correctness according to the parameter - * types of this `UrlMatcher`. - * - * @param {Object} params The object hash of parameters to validate. - * @returns {boolean} Returns `true` if `params` validates, otherwise `false`. - */ -UrlMatcher.prototype.validates = function (params) { - return this.params.$$validates(params); -}; - -/** - * @ngdoc function - * @name ui.router.util.type:UrlMatcher#format - * @methodOf ui.router.util.type:UrlMatcher - * - * @description - * Creates a URL that matches this pattern by substituting the specified values - * for the path and search parameters. Null values for path parameters are - * treated as empty strings. - * - * @example - * <pre> - * new UrlMatcher('/user/{id}?q').format({ id:'bob', q:'yes' }); - * // returns '/user/bob?q=yes' - * </pre> - * - * @param {Object} values the values to substitute for the parameters in this pattern. - * @returns {string} the formatted URL (path and optionally search part). - */ -UrlMatcher.prototype.format = function (values) { - values = values || {}; - var segments = this.segments, params = this.parameters(), paramset = this.params; - if (!this.validates(values)) return null; - - var i, search = false, nPath = segments.length - 1, nTotal = params.length, result = segments[0]; - - function encodeDashes(str) { // Replace dashes with encoded "\-" - return encodeURIComponent(str).replace(/-/g, function(c) { return '%5C%' + c.charCodeAt(0).toString(16).toUpperCase(); }); - } - - for (i = 0; i < nTotal; i++) { - var isPathParam = i < nPath; - var name = params[i], param = paramset[name], value = param.value(values[name]); - var isDefaultValue = param.isOptional && param.type.equals(param.value(), value); - var squash = isDefaultValue ? param.squash : false; - var encoded = param.type.encode(value); - - if (isPathParam) { - var nextSegment = segments[i + 1]; - if (squash === false) { - if (encoded != null) { - if (isArray(encoded)) { - result += map(encoded, encodeDashes).join("-"); - } else { - result += encodeURIComponent(encoded); - } - } - result += nextSegment; - } else if (squash === true) { - var capture = result.match(/\/$/) ? /\/?(.*)/ : /(.*)/; - result += nextSegment.match(capture)[1]; - } else if (isString(squash)) { - result += squash + nextSegment; - } - } else { - if (encoded == null || (isDefaultValue && squash !== false)) continue; - if (!isArray(encoded)) encoded = [ encoded ]; - encoded = map(encoded, encodeURIComponent).join('&' + name + '='); - result += (search ? '&' : '?') + (name + '=' + encoded); - search = true; - } - } - - return result; -}; - -/** - * @ngdoc object - * @name ui.router.util.type:Type - * - * @description - * Implements an interface to define custom parameter types that can be decoded from and encoded to - * string parameters matched in a URL. Used by {@link ui.router.util.type:UrlMatcher `UrlMatcher`} - * objects when matching or formatting URLs, or comparing or validating parameter values. - * - * See {@link ui.router.util.$urlMatcherFactory#methods_type `$urlMatcherFactory#type()`} for more - * information on registering custom types. - * - * @param {Object} config A configuration object which contains the custom type definition. The object's - * properties will override the default methods and/or pattern in `Type`'s public interface. - * @example - * <pre> - * { - * decode: function(val) { return parseInt(val, 10); }, - * encode: function(val) { return val && val.toString(); }, - * equals: function(a, b) { return this.is(a) && a === b; }, - * is: function(val) { return angular.isNumber(val) isFinite(val) && val % 1 === 0; }, - * pattern: /\d+/ - * } - * </pre> - * - * @property {RegExp} pattern The regular expression pattern used to match values of this type when - * coming from a substring of a URL. - * - * @returns {Object} Returns a new `Type` object. - */ -function Type(config) { - extend(this, config); -} - -/** - * @ngdoc function - * @name ui.router.util.type:Type#is - * @methodOf ui.router.util.type:Type - * - * @description - * Detects whether a value is of a particular type. Accepts a native (decoded) value - * and determines whether it matches the current `Type` object. - * - * @param {*} val The value to check. - * @param {string} key Optional. If the type check is happening in the context of a specific - * {@link ui.router.util.type:UrlMatcher `UrlMatcher`} object, this is the name of the - * parameter in which `val` is stored. Can be used for meta-programming of `Type` objects. - * @returns {Boolean} Returns `true` if the value matches the type, otherwise `false`. - */ -Type.prototype.is = function(val, key) { - return true; -}; - -/** - * @ngdoc function - * @name ui.router.util.type:Type#encode - * @methodOf ui.router.util.type:Type - * - * @description - * Encodes a custom/native type value to a string that can be embedded in a URL. Note that the - * return value does *not* need to be URL-safe (i.e. passed through `encodeURIComponent()`), it - * only needs to be a representation of `val` that has been coerced to a string. - * - * @param {*} val The value to encode. - * @param {string} key The name of the parameter in which `val` is stored. Can be used for - * meta-programming of `Type` objects. - * @returns {string} Returns a string representation of `val` that can be encoded in a URL. - */ -Type.prototype.encode = function(val, key) { - return val; -}; - -/** - * @ngdoc function - * @name ui.router.util.type:Type#decode - * @methodOf ui.router.util.type:Type - * - * @description - * Converts a parameter value (from URL string or transition param) to a custom/native value. - * - * @param {string} val The URL parameter value to decode. - * @param {string} key The name of the parameter in which `val` is stored. Can be used for - * meta-programming of `Type` objects. - * @returns {*} Returns a custom representation of the URL parameter value. - */ -Type.prototype.decode = function(val, key) { - return val; -}; - -/** - * @ngdoc function - * @name ui.router.util.type:Type#equals - * @methodOf ui.router.util.type:Type - * - * @description - * Determines whether two decoded values are equivalent. - * - * @param {*} a A value to compare against. - * @param {*} b A value to compare against. - * @returns {Boolean} Returns `true` if the values are equivalent/equal, otherwise `false`. - */ -Type.prototype.equals = function(a, b) { - return a == b; -}; - -Type.prototype.$subPattern = function() { - var sub = this.pattern.toString(); - return sub.substr(1, sub.length - 2); -}; - -Type.prototype.pattern = /.*/; - -Type.prototype.toString = function() { return "{Type:" + this.name + "}"; }; - -/** Given an encoded string, or a decoded object, returns a decoded object */ -Type.prototype.$normalize = function(val) { - return this.is(val) ? val : this.decode(val); -}; - -/* - * Wraps an existing custom Type as an array of Type, depending on 'mode'. - * e.g.: - * - urlmatcher pattern "/path?{queryParam[]:int}" - * - url: "/path?queryParam=1&queryParam=2 - * - $stateParams.queryParam will be [1, 2] - * if `mode` is "auto", then - * - url: "/path?queryParam=1 will create $stateParams.queryParam: 1 - * - url: "/path?queryParam=1&queryParam=2 will create $stateParams.queryParam: [1, 2] - */ -Type.prototype.$asArray = function(mode, isSearch) { - if (!mode) return this; - if (mode === "auto" && !isSearch) throw new Error("'auto' array mode is for query parameters only"); - - function ArrayType(type, mode) { - function bindTo(type, callbackName) { - return function() { - return type[callbackName].apply(type, arguments); - }; - } - - // Wrap non-array value as array - function arrayWrap(val) { return isArray(val) ? val : (isDefined(val) ? [ val ] : []); } - // Unwrap array value for "auto" mode. Return undefined for empty array. - function arrayUnwrap(val) { - switch(val.length) { - case 0: return undefined; - case 1: return mode === "auto" ? val[0] : val; - default: return val; - } - } - function falsey(val) { return !val; } - - // Wraps type (.is/.encode/.decode) functions to operate on each value of an array - function arrayHandler(callback, allTruthyMode) { - return function handleArray(val) { - val = arrayWrap(val); - var result = map(val, callback); - if (allTruthyMode === true) - return filter(result, falsey).length === 0; - return arrayUnwrap(result); - }; - } - - // Wraps type (.equals) functions to operate on each value of an array - function arrayEqualsHandler(callback) { - return function handleArray(val1, val2) { - var left = arrayWrap(val1), right = arrayWrap(val2); - if (left.length !== right.length) return false; - for (var i = 0; i < left.length; i++) { - if (!callback(left[i], right[i])) return false; - } - return true; - }; - } - - this.encode = arrayHandler(bindTo(type, 'encode')); - this.decode = arrayHandler(bindTo(type, 'decode')); - this.is = arrayHandler(bindTo(type, 'is'), true); - this.equals = arrayEqualsHandler(bindTo(type, 'equals')); - this.pattern = type.pattern; - this.$normalize = arrayHandler(bindTo(type, '$normalize')); - this.name = type.name; - this.$arrayMode = mode; - } - - return new ArrayType(this, mode); -}; - - - -/** - * @ngdoc object - * @name ui.router.util.$urlMatcherFactory - * - * @description - * Factory for {@link ui.router.util.type:UrlMatcher `UrlMatcher`} instances. The factory - * is also available to providers under the name `$urlMatcherFactoryProvider`. - */ -function $UrlMatcherFactory() { - $$UMFP = this; - - var isCaseInsensitive = false, isStrictMode = true, defaultSquashPolicy = false; - - function valToString(val) { return val != null ? val.toString().replace(/\//g, "%2F") : val; } - function valFromString(val) { return val != null ? val.toString().replace(/%2F/g, "/") : val; } - - var $types = {}, enqueue = true, typeQueue = [], injector, defaultTypes = { - string: { - encode: valToString, - decode: valFromString, - // TODO: in 1.0, make string .is() return false if value is undefined/null by default. - // In 0.2.x, string params are optional by default for backwards compat - is: function(val) { return val == null || !isDefined(val) || typeof val === "string"; }, - pattern: /[^/]*/ - }, - int: { - encode: valToString, - decode: function(val) { return parseInt(val, 10); }, - is: function(val) { return isDefined(val) && this.decode(val.toString()) === val; }, - pattern: /\d+/ - }, - bool: { - encode: function(val) { return val ? 1 : 0; }, - decode: function(val) { return parseInt(val, 10) !== 0; }, - is: function(val) { return val === true || val === false; }, - pattern: /0|1/ - }, - date: { - encode: function (val) { - if (!this.is(val)) - return undefined; - return [ val.getFullYear(), - ('0' + (val.getMonth() + 1)).slice(-2), - ('0' + val.getDate()).slice(-2) - ].join("-"); - }, - decode: function (val) { - if (this.is(val)) return val; - var match = this.capture.exec(val); - return match ? new Date(match[1], match[2] - 1, match[3]) : undefined; - }, - is: function(val) { return val instanceof Date && !isNaN(val.valueOf()); }, - equals: function (a, b) { return this.is(a) && this.is(b) && a.toISOString() === b.toISOString(); }, - pattern: /[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/, - capture: /([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/ - }, - json: { - encode: angular.toJson, - decode: angular.fromJson, - is: angular.isObject, - equals: angular.equals, - pattern: /[^/]*/ - }, - any: { // does not encode/decode - encode: angular.identity, - decode: angular.identity, - equals: angular.equals, - pattern: /.*/ - } - }; - - function getDefaultConfig() { - return { - strict: isStrictMode, - caseInsensitive: isCaseInsensitive - }; - } - - function isInjectable(value) { - return (isFunction(value) || (isArray(value) && isFunction(value[value.length - 1]))); - } - - /** - * [Internal] Get the default value of a parameter, which may be an injectable function. - */ - $UrlMatcherFactory.$$getDefaultValue = function(config) { - if (!isInjectable(config.value)) return config.value; - if (!injector) throw new Error("Injectable functions cannot be called at configuration time"); - return injector.invoke(config.value); - }; - - /** - * @ngdoc function - * @name ui.router.util.$urlMatcherFactory#caseInsensitive - * @methodOf ui.router.util.$urlMatcherFactory - * - * @description - * Defines whether URL matching should be case sensitive (the default behavior), or not. - * - * @param {boolean} value `false` to match URL in a case sensitive manner; otherwise `true`; - * @returns {boolean} the current value of caseInsensitive - */ - this.caseInsensitive = function(value) { - if (isDefined(value)) - isCaseInsensitive = value; - return isCaseInsensitive; - }; - - /** - * @ngdoc function - * @name ui.router.util.$urlMatcherFactory#strictMode - * @methodOf ui.router.util.$urlMatcherFactory - * - * @description - * Defines whether URLs should match trailing slashes, or not (the default behavior). - * - * @param {boolean=} value `false` to match trailing slashes in URLs, otherwise `true`. - * @returns {boolean} the current value of strictMode - */ - this.strictMode = function(value) { - if (isDefined(value)) - isStrictMode = value; - return isStrictMode; - }; - - /** - * @ngdoc function - * @name ui.router.util.$urlMatcherFactory#defaultSquashPolicy - * @methodOf ui.router.util.$urlMatcherFactory - * - * @description - * Sets the default behavior when generating or matching URLs with default parameter values. - * - * @param {string} value A string that defines the default parameter URL squashing behavior. - * `nosquash`: When generating an href with a default parameter value, do not squash the parameter value from the URL - * `slash`: When generating an href with a default parameter value, squash (remove) the parameter value, and, if the - * parameter is surrounded by slashes, squash (remove) one slash from the URL - * any other string, e.g. "~": When generating an href with a default parameter value, squash (remove) - * the parameter value from the URL and replace it with this string. - */ - this.defaultSquashPolicy = function(value) { - if (!isDefined(value)) return defaultSquashPolicy; - if (value !== true && value !== false && !isString(value)) - throw new Error("Invalid squash policy: " + value + ". Valid policies: false, true, arbitrary-string"); - defaultSquashPolicy = value; - return value; - }; - - /** - * @ngdoc function - * @name ui.router.util.$urlMatcherFactory#compile - * @methodOf ui.router.util.$urlMatcherFactory - * - * @description - * Creates a {@link ui.router.util.type:UrlMatcher `UrlMatcher`} for the specified pattern. - * - * @param {string} pattern The URL pattern. - * @param {Object} config The config object hash. - * @returns {UrlMatcher} The UrlMatcher. - */ - this.compile = function (pattern, config) { - return new UrlMatcher(pattern, extend(getDefaultConfig(), config)); - }; - - /** - * @ngdoc function - * @name ui.router.util.$urlMatcherFactory#isMatcher - * @methodOf ui.router.util.$urlMatcherFactory - * - * @description - * Returns true if the specified object is a `UrlMatcher`, or false otherwise. - * - * @param {Object} object The object to perform the type check against. - * @returns {Boolean} Returns `true` if the object matches the `UrlMatcher` interface, by - * implementing all the same methods. - */ - this.isMatcher = function (o) { - if (!isObject(o)) return false; - var result = true; - - forEach(UrlMatcher.prototype, function(val, name) { - if (isFunction(val)) { - result = result && (isDefined(o[name]) && isFunction(o[name])); - } - }); - return result; - }; - - /** - * @ngdoc function - * @name ui.router.util.$urlMatcherFactory#type - * @methodOf ui.router.util.$urlMatcherFactory - * - * @description - * Registers a custom {@link ui.router.util.type:Type `Type`} object that can be used to - * generate URLs with typed parameters. - * - * @param {string} name The type name. - * @param {Object|Function} definition The type definition. See - * {@link ui.router.util.type:Type `Type`} for information on the values accepted. - * @param {Object|Function} definitionFn (optional) A function that is injected before the app - * runtime starts. The result of this function is merged into the existing `definition`. - * See {@link ui.router.util.type:Type `Type`} for information on the values accepted. - * - * @returns {Object} Returns `$urlMatcherFactoryProvider`. - * - * @example - * This is a simple example of a custom type that encodes and decodes items from an - * array, using the array index as the URL-encoded value: - * - * <pre> - * var list = ['John', 'Paul', 'George', 'Ringo']; - * - * $urlMatcherFactoryProvider.type('listItem', { - * encode: function(item) { - * // Represent the list item in the URL using its corresponding index - * return list.indexOf(item); - * }, - * decode: function(item) { - * // Look up the list item by index - * return list[parseInt(item, 10)]; - * }, - * is: function(item) { - * // Ensure the item is valid by checking to see that it appears - * // in the list - * return list.indexOf(item) > -1; - * } - * }); - * - * $stateProvider.state('list', { - * url: "/list/{item:listItem}", - * controller: function($scope, $stateParams) { - * console.log($stateParams.item); - * } - * }); - * - * // ... - * - * // Changes URL to '/list/3', logs "Ringo" to the console - * $state.go('list', { item: "Ringo" }); - * </pre> - * - * This is a more complex example of a type that relies on dependency injection to - * interact with services, and uses the parameter name from the URL to infer how to - * handle encoding and decoding parameter values: - * - * <pre> - * // Defines a custom type that gets a value from a service, - * // where each service gets different types of values from - * // a backend API: - * $urlMatcherFactoryProvider.type('dbObject', {}, function(Users, Posts) { - * - * // Matches up services to URL parameter names - * var services = { - * user: Users, - * post: Posts - * }; - * - * return { - * encode: function(object) { - * // Represent the object in the URL using its unique ID - * return object.id; - * }, - * decode: function(value, key) { - * // Look up the object by ID, using the parameter - * // name (key) to call the correct service - * return services[key].findById(value); - * }, - * is: function(object, key) { - * // Check that object is a valid dbObject - * return angular.isObject(object) && object.id && services[key]; - * } - * equals: function(a, b) { - * // Check the equality of decoded objects by comparing - * // their unique IDs - * return a.id === b.id; - * } - * }; - * }); - * - * // In a config() block, you can then attach URLs with - * // type-annotated parameters: - * $stateProvider.state('users', { - * url: "/users", - * // ... - * }).state('users.item', { - * url: "/{user:dbObject}", - * controller: function($scope, $stateParams) { - * // $stateParams.user will now be an object returned from - * // the Users service - * }, - * // ... - * }); - * </pre> - */ - this.type = function (name, definition, definitionFn) { - if (!isDefined(definition)) return $types[name]; - if ($types.hasOwnProperty(name)) throw new Error("A type named '" + name + "' has already been defined."); - - $types[name] = new Type(extend({ name: name }, definition)); - if (definitionFn) { - typeQueue.push({ name: name, def: definitionFn }); - if (!enqueue) flushTypeQueue(); - } - return this; - }; - - // `flushTypeQueue()` waits until `$urlMatcherFactory` is injected before invoking the queued `definitionFn`s - function flushTypeQueue() { - while(typeQueue.length) { - var type = typeQueue.shift(); - if (type.pattern) throw new Error("You cannot override a type's .pattern at runtime."); - angular.extend($types[type.name], injector.invoke(type.def)); - } - } - - // Register default types. Store them in the prototype of $types. - forEach(defaultTypes, function(type, name) { $types[name] = new Type(extend({name: name}, type)); }); - $types = inherit($types, {}); - - /* No need to document $get, since it returns this */ - this.$get = ['$injector', function ($injector) { - injector = $injector; - enqueue = false; - flushTypeQueue(); - - forEach(defaultTypes, function(type, name) { - if (!$types[name]) $types[name] = new Type(type); - }); - return this; - }]; - - this.Param = function Param(id, type, config, location) { - var self = this; - config = unwrapShorthand(config); - type = getType(config, type, location); - var arrayMode = getArrayMode(); - type = arrayMode ? type.$asArray(arrayMode, location === "search") : type; - if (type.name === "string" && !arrayMode && location === "path" && config.value === undefined) - config.value = ""; // for 0.2.x; in 0.3.0+ do not automatically default to "" - var isOptional = config.value !== undefined; - var squash = getSquashPolicy(config, isOptional); - var replace = getReplace(config, arrayMode, isOptional, squash); - - function unwrapShorthand(config) { - var keys = isObject(config) ? objectKeys(config) : []; - var isShorthand = indexOf(keys, "value") === -1 && indexOf(keys, "type") === -1 && - indexOf(keys, "squash") === -1 && indexOf(keys, "array") === -1; - if (isShorthand) config = { value: config }; - config.$$fn = isInjectable(config.value) ? config.value : function () { return config.value; }; - return config; - } - - function getType(config, urlType, location) { - if (config.type && urlType) throw new Error("Param '"+id+"' has two type configurations."); - if (urlType) return urlType; - if (!config.type) return (location === "config" ? $types.any : $types.string); - return config.type instanceof Type ? config.type : new Type(config.type); - } - - // array config: param name (param[]) overrides default settings. explicit config overrides param name. - function getArrayMode() { - var arrayDefaults = { array: (location === "search" ? "auto" : false) }; - var arrayParamNomenclature = id.match(/\[\]$/) ? { array: true } : {}; - return extend(arrayDefaults, arrayParamNomenclature, config).array; - } - - /** - * returns false, true, or the squash value to indicate the "default parameter url squash policy". - */ - function getSquashPolicy(config, isOptional) { - var squash = config.squash; - if (!isOptional || squash === false) return false; - if (!isDefined(squash) || squash == null) return defaultSquashPolicy; - if (squash === true || isString(squash)) return squash; - throw new Error("Invalid squash policy: '" + squash + "'. Valid policies: false, true, or arbitrary string"); - } - - function getReplace(config, arrayMode, isOptional, squash) { - var replace, configuredKeys, defaultPolicy = [ - { from: "", to: (isOptional || arrayMode ? undefined : "") }, - { from: null, to: (isOptional || arrayMode ? undefined : "") } - ]; - replace = isArray(config.replace) ? config.replace : []; - if (isString(squash)) - replace.push({ from: squash, to: undefined }); - configuredKeys = map(replace, function(item) { return item.from; } ); - return filter(defaultPolicy, function(item) { return indexOf(configuredKeys, item.from) === -1; }).concat(replace); - } - - /** - * [Internal] Get the default value of a parameter, which may be an injectable function. - */ - function $$getDefaultValue() { - if (!injector) throw new Error("Injectable functions cannot be called at configuration time"); - var defaultValue = injector.invoke(config.$$fn); - if (defaultValue !== null && defaultValue !== undefined && !self.type.is(defaultValue)) - throw new Error("Default value (" + defaultValue + ") for parameter '" + self.id + "' is not an instance of Type (" + self.type.name + ")"); - return defaultValue; - } - - /** - * [Internal] Gets the decoded representation of a value if the value is defined, otherwise, returns the - * default value, which may be the result of an injectable function. - */ - function $value(value) { - function hasReplaceVal(val) { return function(obj) { return obj.from === val; }; } - function $replace(value) { - var replacement = map(filter(self.replace, hasReplaceVal(value)), function(obj) { return obj.to; }); - return replacement.length ? replacement[0] : value; - } - value = $replace(value); - return !isDefined(value) ? $$getDefaultValue() : self.type.$normalize(value); - } - - function toString() { return "{Param:" + id + " " + type + " squash: '" + squash + "' optional: " + isOptional + "}"; } - - extend(this, { - id: id, - type: type, - location: location, - array: arrayMode, - squash: squash, - replace: replace, - isOptional: isOptional, - value: $value, - dynamic: undefined, - config: config, - toString: toString - }); - }; - - function ParamSet(params) { - extend(this, params || {}); - } - - ParamSet.prototype = { - $$new: function() { - return inherit(this, extend(new ParamSet(), { $$parent: this})); - }, - $$keys: function () { - var keys = [], chain = [], parent = this, - ignore = objectKeys(ParamSet.prototype); - while (parent) { chain.push(parent); parent = parent.$$parent; } - chain.reverse(); - forEach(chain, function(paramset) { - forEach(objectKeys(paramset), function(key) { - if (indexOf(keys, key) === -1 && indexOf(ignore, key) === -1) keys.push(key); - }); - }); - return keys; - }, - $$values: function(paramValues) { - var values = {}, self = this; - forEach(self.$$keys(), function(key) { - values[key] = self[key].value(paramValues && paramValues[key]); - }); - return values; - }, - $$equals: function(paramValues1, paramValues2) { - var equal = true, self = this; - forEach(self.$$keys(), function(key) { - var left = paramValues1 && paramValues1[key], right = paramValues2 && paramValues2[key]; - if (!self[key].type.equals(left, right)) equal = false; - }); - return equal; - }, - $$validates: function $$validate(paramValues) { - var keys = this.$$keys(), i, param, rawVal, normalized, encoded; - for (i = 0; i < keys.length; i++) { - param = this[keys[i]]; - rawVal = paramValues[keys[i]]; - if ((rawVal === undefined || rawVal === null) && param.isOptional) - break; // There was no parameter value, but the param is optional - normalized = param.type.$normalize(rawVal); - if (!param.type.is(normalized)) - return false; // The value was not of the correct Type, and could not be decoded to the correct Type - encoded = param.type.encode(normalized); - if (angular.isString(encoded) && !param.type.pattern.exec(encoded)) - return false; // The value was of the correct type, but when encoded, did not match the Type's regexp - } - return true; - }, - $$parent: undefined - }; - - this.ParamSet = ParamSet; -} - -// Register as a provider so it's available to other providers -angular.module('ui.router.util').provider('$urlMatcherFactory', $UrlMatcherFactory); -angular.module('ui.router.util').run(['$urlMatcherFactory', function($urlMatcherFactory) { }]); - -/** - * @ngdoc object - * @name ui.router.router.$urlRouterProvider - * - * @requires ui.router.util.$urlMatcherFactoryProvider - * @requires $locationProvider - * - * @description - * `$urlRouterProvider` has the responsibility of watching `$location`. - * When `$location` changes it runs through a list of rules one by one until a - * match is found. `$urlRouterProvider` is used behind the scenes anytime you specify - * a url in a state configuration. All urls are compiled into a UrlMatcher object. - * - * There are several methods on `$urlRouterProvider` that make it useful to use directly - * in your module config. - */ -$UrlRouterProvider.$inject = ['$locationProvider', '$urlMatcherFactoryProvider']; -function $UrlRouterProvider( $locationProvider, $urlMatcherFactory) { - var rules = [], otherwise = null, interceptDeferred = false, listener; - - // Returns a string that is a prefix of all strings matching the RegExp - function regExpPrefix(re) { - var prefix = /^\^((?:\\[^a-zA-Z0-9]|[^\\\[\]\^$*+?.()|{}]+)*)/.exec(re.source); - return (prefix != null) ? prefix[1].replace(/\\(.)/g, "$1") : ''; - } - - // Interpolates matched values into a String.replace()-style pattern - function interpolate(pattern, match) { - return pattern.replace(/\$(\$|\d{1,2})/, function (m, what) { - return match[what === '$' ? 0 : Number(what)]; - }); - } - - /** - * @ngdoc function - * @name ui.router.router.$urlRouterProvider#rule - * @methodOf ui.router.router.$urlRouterProvider - * - * @description - * Defines rules that are used by `$urlRouterProvider` to find matches for - * specific URLs. - * - * @example - * <pre> - * var app = angular.module('app', ['ui.router.router']); - * - * app.config(function ($urlRouterProvider) { - * // Here's an example of how you might allow case insensitive urls - * $urlRouterProvider.rule(function ($injector, $location) { - * var path = $location.path(), - * normalized = path.toLowerCase(); - * - * if (path !== normalized) { - * return normalized; - * } - * }); - * }); - * </pre> - * - * @param {object} rule Handler function that takes `$injector` and `$location` - * services as arguments. You can use them to return a valid path as a string. - * - * @return {object} `$urlRouterProvider` - `$urlRouterProvider` instance - */ - this.rule = function (rule) { - if (!isFunction(rule)) throw new Error("'rule' must be a function"); - rules.push(rule); - return this; - }; - - /** - * @ngdoc object - * @name ui.router.router.$urlRouterProvider#otherwise - * @methodOf ui.router.router.$urlRouterProvider - * - * @description - * Defines a path that is used when an invalid route is requested. - * - * @example - * <pre> - * var app = angular.module('app', ['ui.router.router']); - * - * app.config(function ($urlRouterProvider) { - * // if the path doesn't match any of the urls you configured - * // otherwise will take care of routing the user to the - * // specified url - * $urlRouterProvider.otherwise('/index'); - * - * // Example of using function rule as param - * $urlRouterProvider.otherwise(function ($injector, $location) { - * return '/a/valid/url'; - * }); - * }); - * </pre> - * - * @param {string|object} rule The url path you want to redirect to or a function - * rule that returns the url path. The function version is passed two params: - * `$injector` and `$location` services, and must return a url string. - * - * @return {object} `$urlRouterProvider` - `$urlRouterProvider` instance - */ - this.otherwise = function (rule) { - if (isString(rule)) { - var redirect = rule; - rule = function () { return redirect; }; - } - else if (!isFunction(rule)) throw new Error("'rule' must be a function"); - otherwise = rule; - return this; - }; - - - function handleIfMatch($injector, handler, match) { - if (!match) return false; - var result = $injector.invoke(handler, handler, { $match: match }); - return isDefined(result) ? result : true; - } - - /** - * @ngdoc function - * @name ui.router.router.$urlRouterProvider#when - * @methodOf ui.router.router.$urlRouterProvider - * - * @description - * Registers a handler for a given url matching. if handle is a string, it is - * treated as a redirect, and is interpolated according to the syntax of match - * (i.e. like `String.replace()` for `RegExp`, or like a `UrlMatcher` pattern otherwise). - * - * If the handler is a function, it is injectable. It gets invoked if `$location` - * matches. You have the option of inject the match object as `$match`. - * - * The handler can return - * - * - **falsy** to indicate that the rule didn't match after all, then `$urlRouter` - * will continue trying to find another one that matches. - * - **string** which is treated as a redirect and passed to `$location.url()` - * - **void** or any **truthy** value tells `$urlRouter` that the url was handled. - * - * @example - * <pre> - * var app = angular.module('app', ['ui.router.router']); - * - * app.config(function ($urlRouterProvider) { - * $urlRouterProvider.when($state.url, function ($match, $stateParams) { - * if ($state.$current.navigable !== state || - * !equalForKeys($match, $stateParams) { - * $state.transitionTo(state, $match, false); - * } - * }); - * }); - * </pre> - * - * @param {string|object} what The incoming path that you want to redirect. - * @param {string|object} handler The path you want to redirect your user to. - */ - this.when = function (what, handler) { - var redirect, handlerIsString = isString(handler); - if (isString(what)) what = $urlMatcherFactory.compile(what); - - if (!handlerIsString && !isFunction(handler) && !isArray(handler)) - throw new Error("invalid 'handler' in when()"); - - var strategies = { - matcher: function (what, handler) { - if (handlerIsString) { - redirect = $urlMatcherFactory.compile(handler); - handler = ['$match', function ($match) { return redirect.format($match); }]; - } - return extend(function ($injector, $location) { - return handleIfMatch($injector, handler, what.exec($location.path(), $location.search())); - }, { - prefix: isString(what.prefix) ? what.prefix : '' - }); - }, - regex: function (what, handler) { - if (what.global || what.sticky) throw new Error("when() RegExp must not be global or sticky"); - - if (handlerIsString) { - redirect = handler; - handler = ['$match', function ($match) { return interpolate(redirect, $match); }]; - } - return extend(function ($injector, $location) { - return handleIfMatch($injector, handler, what.exec($location.path())); - }, { - prefix: regExpPrefix(what) - }); - } - }; - - var check = { matcher: $urlMatcherFactory.isMatcher(what), regex: what instanceof RegExp }; - - for (var n in check) { - if (check[n]) return this.rule(strategies[n](what, handler)); - } - - throw new Error("invalid 'what' in when()"); - }; - - /** - * @ngdoc function - * @name ui.router.router.$urlRouterProvider#deferIntercept - * @methodOf ui.router.router.$urlRouterProvider - * - * @description - * Disables (or enables) deferring location change interception. - * - * If you wish to customize the behavior of syncing the URL (for example, if you wish to - * defer a transition but maintain the current URL), call this method at configuration time. - * Then, at run time, call `$urlRouter.listen()` after you have configured your own - * `$locationChangeSuccess` event handler. - * - * @example - * <pre> - * var app = angular.module('app', ['ui.router.router']); - * - * app.config(function ($urlRouterProvider) { - * - * // Prevent $urlRouter from automatically intercepting URL changes; - * // this allows you to configure custom behavior in between - * // location changes and route synchronization: - * $urlRouterProvider.deferIntercept(); - * - * }).run(function ($rootScope, $urlRouter, UserService) { - * - * $rootScope.$on('$locationChangeSuccess', function(e) { - * // UserService is an example service for managing user state - * if (UserService.isLoggedIn()) return; - * - * // Prevent $urlRouter's default handler from firing - * e.preventDefault(); - * - * UserService.handleLogin().then(function() { - * // Once the user has logged in, sync the current URL - * // to the router: - * $urlRouter.sync(); - * }); - * }); - * - * // Configures $urlRouter's listener *after* your custom listener - * $urlRouter.listen(); - * }); - * </pre> - * - * @param {boolean} defer Indicates whether to defer location change interception. Passing - no parameter is equivalent to `true`. - */ - this.deferIntercept = function (defer) { - if (defer === undefined) defer = true; - interceptDeferred = defer; - }; - - /** - * @ngdoc object - * @name ui.router.router.$urlRouter - * - * @requires $location - * @requires $rootScope - * @requires $injector - * @requires $browser - * - * @description - * - */ - this.$get = $get; - $get.$inject = ['$location', '$rootScope', '$injector', '$browser']; - function $get( $location, $rootScope, $injector, $browser) { - - var baseHref = $browser.baseHref(), location = $location.url(), lastPushedUrl; - - function appendBasePath(url, isHtml5, absolute) { - if (baseHref === '/') return url; - if (isHtml5) return baseHref.slice(0, -1) + url; - if (absolute) return baseHref.slice(1) + url; - return url; - } - - // TODO: Optimize groups of rules with non-empty prefix into some sort of decision tree - function update(evt) { - if (evt && evt.defaultPrevented) return; - var ignoreUpdate = lastPushedUrl && $location.url() === lastPushedUrl; - lastPushedUrl = undefined; - // TODO: Re-implement this in 1.0 for https://github.com/angular-ui/ui-router/issues/1573 - //if (ignoreUpdate) return true; - - function check(rule) { - var handled = rule($injector, $location); - - if (!handled) return false; - if (isString(handled)) $location.replace().url(handled); - return true; - } - var n = rules.length, i; - - for (i = 0; i < n; i++) { - if (check(rules[i])) return; - } - // always check otherwise last to allow dynamic updates to the set of rules - if (otherwise) check(otherwise); - } - - function listen() { - listener = listener || $rootScope.$on('$locationChangeSuccess', update); - return listener; - } - - if (!interceptDeferred) listen(); - - return { - /** - * @ngdoc function - * @name ui.router.router.$urlRouter#sync - * @methodOf ui.router.router.$urlRouter - * - * @description - * Triggers an update; the same update that happens when the address bar url changes, aka `$locationChangeSuccess`. - * This method is useful when you need to use `preventDefault()` on the `$locationChangeSuccess` event, - * perform some custom logic (route protection, auth, config, redirection, etc) and then finally proceed - * with the transition by calling `$urlRouter.sync()`. - * - * @example - * <pre> - * angular.module('app', ['ui.router']) - * .run(function($rootScope, $urlRouter) { - * $rootScope.$on('$locationChangeSuccess', function(evt) { - * // Halt state change from even starting - * evt.preventDefault(); - * // Perform custom logic - * var meetsRequirement = ... - * // Continue with the update and state transition if logic allows - * if (meetsRequirement) $urlRouter.sync(); - * }); - * }); - * </pre> - */ - sync: function() { - update(); - }, - - listen: function() { - return listen(); - }, - - update: function(read) { - if (read) { - location = $location.url(); - return; - } - if ($location.url() === location) return; - - $location.url(location); - $location.replace(); - }, - - push: function(urlMatcher, params, options) { - var url = urlMatcher.format(params || {}); - - // Handle the special hash param, if needed - if (url !== null && params && params['#']) { - url += '#' + params['#']; - } - - $location.url(url); - lastPushedUrl = options && options.$$avoidResync ? $location.url() : undefined; - if (options && options.replace) $location.replace(); - }, - - /** - * @ngdoc function - * @name ui.router.router.$urlRouter#href - * @methodOf ui.router.router.$urlRouter - * - * @description - * A URL generation method that returns the compiled URL for a given - * {@link ui.router.util.type:UrlMatcher `UrlMatcher`}, populated with the provided parameters. - * - * @example - * <pre> - * $bob = $urlRouter.href(new UrlMatcher("/about/:person"), { - * person: "bob" - * }); - * // $bob == "/about/bob"; - * </pre> - * - * @param {UrlMatcher} urlMatcher The `UrlMatcher` object which is used as the template of the URL to generate. - * @param {object=} params An object of parameter values to fill the matcher's required parameters. - * @param {object=} options Options object. The options are: - * - * - **`absolute`** - {boolean=false}, If true will generate an absolute url, e.g. "http://www.example.com/fullurl". - * - * @returns {string} Returns the fully compiled URL, or `null` if `params` fail validation against `urlMatcher` - */ - href: function(urlMatcher, params, options) { - if (!urlMatcher.validates(params)) return null; - - var isHtml5 = $locationProvider.html5Mode(); - if (angular.isObject(isHtml5)) { - isHtml5 = isHtml5.enabled; - } - - var url = urlMatcher.format(params); - options = options || {}; - - if (!isHtml5 && url !== null) { - url = "#" + $locationProvider.hashPrefix() + url; - } - - // Handle special hash param, if needed - if (url !== null && params && params['#']) { - url += '#' + params['#']; - } - - url = appendBasePath(url, isHtml5, options.absolute); - - if (!options.absolute || !url) { - return url; - } - - var slash = (!isHtml5 && url ? '/' : ''), port = $location.port(); - port = (port === 80 || port === 443 ? '' : ':' + port); - - return [$location.protocol(), '://', $location.host(), port, slash, url].join(''); - } - }; - } -} - -angular.module('ui.router.router').provider('$urlRouter', $UrlRouterProvider); - -/** - * @ngdoc object - * @name ui.router.state.$stateProvider - * - * @requires ui.router.router.$urlRouterProvider - * @requires ui.router.util.$urlMatcherFactoryProvider - * - * @description - * The new `$stateProvider` works similar to Angular's v1 router, but it focuses purely - * on state. - * - * A state corresponds to a "place" in the application in terms of the overall UI and - * navigation. A state describes (via the controller / template / view properties) what - * the UI looks like and does at that place. - * - * States often have things in common, and the primary way of factoring out these - * commonalities in this model is via the state hierarchy, i.e. parent/child states aka - * nested states. - * - * The `$stateProvider` provides interfaces to declare these states for your app. - */ -$StateProvider.$inject = ['$urlRouterProvider', '$urlMatcherFactoryProvider']; -function $StateProvider( $urlRouterProvider, $urlMatcherFactory) { - - var root, states = {}, $state, queue = {}, abstractKey = 'abstract'; - - // Builds state properties from definition passed to registerState() - var stateBuilder = { - - // Derive parent state from a hierarchical name only if 'parent' is not explicitly defined. - // state.children = []; - // if (parent) parent.children.push(state); - parent: function(state) { - if (isDefined(state.parent) && state.parent) return findState(state.parent); - // regex matches any valid composite state name - // would match "contact.list" but not "contacts" - var compositeName = /^(.+)\.[^.]+$/.exec(state.name); - return compositeName ? findState(compositeName[1]) : root; - }, - - // inherit 'data' from parent and override by own values (if any) - data: function(state) { - if (state.parent && state.parent.data) { - state.data = state.self.data = extend({}, state.parent.data, state.data); - } - return state.data; - }, - - // Build a URLMatcher if necessary, either via a relative or absolute URL - url: function(state) { - var url = state.url, config = { params: state.params || {} }; - - if (isString(url)) { - if (url.charAt(0) == '^') return $urlMatcherFactory.compile(url.substring(1), config); - return (state.parent.navigable || root).url.concat(url, config); - } - - if (!url || $urlMatcherFactory.isMatcher(url)) return url; - throw new Error("Invalid url '" + url + "' in state '" + state + "'"); - }, - - // Keep track of the closest ancestor state that has a URL (i.e. is navigable) - navigable: function(state) { - return state.url ? state : (state.parent ? state.parent.navigable : null); - }, - - // Own parameters for this state. state.url.params is already built at this point. Create and add non-url params - ownParams: function(state) { - var params = state.url && state.url.params || new $$UMFP.ParamSet(); - forEach(state.params || {}, function(config, id) { - if (!params[id]) params[id] = new $$UMFP.Param(id, null, config, "config"); - }); - return params; - }, - - // Derive parameters for this state and ensure they're a super-set of parent's parameters - params: function(state) { - return state.parent && state.parent.params ? extend(state.parent.params.$$new(), state.ownParams) : new $$UMFP.ParamSet(); - }, - - // If there is no explicit multi-view configuration, make one up so we don't have - // to handle both cases in the view directive later. Note that having an explicit - // 'views' property will mean the default unnamed view properties are ignored. This - // is also a good time to resolve view names to absolute names, so everything is a - // straight lookup at link time. - views: function(state) { - var views = {}; - - forEach(isDefined(state.views) ? state.views : { '': state }, function (view, name) { - if (name.indexOf('@') < 0) name += '@' + state.parent.name; - views[name] = view; - }); - return views; - }, - - // Keep a full path from the root down to this state as this is needed for state activation. - path: function(state) { - return state.parent ? state.parent.path.concat(state) : []; // exclude root from path - }, - - // Speed up $state.contains() as it's used a lot - includes: function(state) { - var includes = state.parent ? extend({}, state.parent.includes) : {}; - includes[state.name] = true; - return includes; - }, - - $delegates: {} - }; - - function isRelative(stateName) { - return stateName.indexOf(".") === 0 || stateName.indexOf("^") === 0; - } - - function findState(stateOrName, base) { - if (!stateOrName) return undefined; - - var isStr = isString(stateOrName), - name = isStr ? stateOrName : stateOrName.name, - path = isRelative(name); - - if (path) { - if (!base) throw new Error("No reference point given for path '" + name + "'"); - base = findState(base); - - var rel = name.split("."), i = 0, pathLength = rel.length, current = base; - - for (; i < pathLength; i++) { - if (rel[i] === "" && i === 0) { - current = base; - continue; - } - if (rel[i] === "^") { - if (!current.parent) throw new Error("Path '" + name + "' not valid for state '" + base.name + "'"); - current = current.parent; - continue; - } - break; - } - rel = rel.slice(i).join("."); - name = current.name + (current.name && rel ? "." : "") + rel; - } - var state = states[name]; - - if (state && (isStr || (!isStr && (state === stateOrName || state.self === stateOrName)))) { - return state; - } - return undefined; - } - - function queueState(parentName, state) { - if (!queue[parentName]) { - queue[parentName] = []; - } - queue[parentName].push(state); - } - - function flushQueuedChildren(parentName) { - var queued = queue[parentName] || []; - while(queued.length) { - registerState(queued.shift()); - } - } - - function registerState(state) { - // Wrap a new object around the state so we can store our private details easily. - state = inherit(state, { - self: state, - resolve: state.resolve || {}, - toString: function() { return this.name; } - }); - - var name = state.name; - if (!isString(name) || name.indexOf('@') >= 0) throw new Error("State must have a valid name"); - if (states.hasOwnProperty(name)) throw new Error("State '" + name + "'' is already defined"); - - // Get parent name - var parentName = (name.indexOf('.') !== -1) ? name.substring(0, name.lastIndexOf('.')) - : (isString(state.parent)) ? state.parent - : (isObject(state.parent) && isString(state.parent.name)) ? state.parent.name - : ''; - - // If parent is not registered yet, add state to queue and register later - if (parentName && !states[parentName]) { - return queueState(parentName, state.self); - } - - for (var key in stateBuilder) { - if (isFunction(stateBuilder[key])) state[key] = stateBuilder[key](state, stateBuilder.$delegates[key]); - } - states[name] = state; - - // Register the state in the global state list and with $urlRouter if necessary. - if (!state[abstractKey] && state.url) { - $urlRouterProvider.when(state.url, ['$match', '$stateParams', function ($match, $stateParams) { - if ($state.$current.navigable != state || !equalForKeys($match, $stateParams)) { - $state.transitionTo(state, $match, { inherit: true, location: false }); - } - }]); - } - - // Register any queued children - flushQueuedChildren(name); - - return state; - } - - // Checks text to see if it looks like a glob. - function isGlob (text) { - return text.indexOf('*') > -1; - } - - // Returns true if glob matches current $state name. - function doesStateMatchGlob (glob) { - var globSegments = glob.split('.'), - segments = $state.$current.name.split('.'); - - //match single stars - for (var i = 0, l = globSegments.length; i < l; i++) { - if (globSegments[i] === '*') { - segments[i] = '*'; - } - } - - //match greedy starts - if (globSegments[0] === '**') { - segments = segments.slice(indexOf(segments, globSegments[1])); - segments.unshift('**'); - } - //match greedy ends - if (globSegments[globSegments.length - 1] === '**') { - segments.splice(indexOf(segments, globSegments[globSegments.length - 2]) + 1, Number.MAX_VALUE); - segments.push('**'); - } - - if (globSegments.length != segments.length) { - return false; - } - - return segments.join('') === globSegments.join(''); - } - - - // Implicit root state that is always active - root = registerState({ - name: '', - url: '^', - views: null, - 'abstract': true - }); - root.navigable = null; - - - /** - * @ngdoc function - * @name ui.router.state.$stateProvider#decorator - * @methodOf ui.router.state.$stateProvider - * - * @description - * Allows you to extend (carefully) or override (at your own peril) the - * `stateBuilder` object used internally by `$stateProvider`. This can be used - * to add custom functionality to ui-router, for example inferring templateUrl - * based on the state name. - * - * When passing only a name, it returns the current (original or decorated) builder - * function that matches `name`. - * - * The builder functions that can be decorated are listed below. Though not all - * necessarily have a good use case for decoration, that is up to you to decide. - * - * In addition, users can attach custom decorators, which will generate new - * properties within the state's internal definition. There is currently no clear - * use-case for this beyond accessing internal states (i.e. $state.$current), - * however, expect this to become increasingly relevant as we introduce additional - * meta-programming features. - * - * **Warning**: Decorators should not be interdependent because the order of - * execution of the builder functions in non-deterministic. Builder functions - * should only be dependent on the state definition object and super function. - * - * - * Existing builder functions and current return values: - * - * - **parent** `{object}` - returns the parent state object. - * - **data** `{object}` - returns state data, including any inherited data that is not - * overridden by own values (if any). - * - **url** `{object}` - returns a {@link ui.router.util.type:UrlMatcher UrlMatcher} - * or `null`. - * - **navigable** `{object}` - returns closest ancestor state that has a URL (aka is - * navigable). - * - **params** `{object}` - returns an array of state params that are ensured to - * be a super-set of parent's params. - * - **views** `{object}` - returns a views object where each key is an absolute view - * name (i.e. "viewName@stateName") and each value is the config object - * (template, controller) for the view. Even when you don't use the views object - * explicitly on a state config, one is still created for you internally. - * So by decorating this builder function you have access to decorating template - * and controller properties. - * - **ownParams** `{object}` - returns an array of params that belong to the state, - * not including any params defined by ancestor states. - * - **path** `{string}` - returns the full path from the root down to this state. - * Needed for state activation. - * - **includes** `{object}` - returns an object that includes every state that - * would pass a `$state.includes()` test. - * - * @example - * <pre> - * // Override the internal 'views' builder with a function that takes the state - * // definition, and a reference to the internal function being overridden: - * $stateProvider.decorator('views', function (state, parent) { - * var result = {}, - * views = parent(state); - * - * angular.forEach(views, function (config, name) { - * var autoName = (state.name + '.' + name).replace('.', '/'); - * config.templateUrl = config.templateUrl || '/partials/' + autoName + '.html'; - * result[name] = config; - * }); - * return result; - * }); - * - * $stateProvider.state('home', { - * views: { - * 'contact.list': { controller: 'ListController' }, - * 'contact.item': { controller: 'ItemController' } - * } - * }); - * - * // ... - * - * $state.go('home'); - * // Auto-populates list and item views with /partials/home/contact/list.html, - * // and /partials/home/contact/item.html, respectively. - * </pre> - * - * @param {string} name The name of the builder function to decorate. - * @param {object} func A function that is responsible for decorating the original - * builder function. The function receives two parameters: - * - * - `{object}` - state - The state config object. - * - `{object}` - super - The original builder function. - * - * @return {object} $stateProvider - $stateProvider instance - */ - this.decorator = decorator; - function decorator(name, func) { - /*jshint validthis: true */ - if (isString(name) && !isDefined(func)) { - return stateBuilder[name]; - } - if (!isFunction(func) || !isString(name)) { - return this; - } - if (stateBuilder[name] && !stateBuilder.$delegates[name]) { - stateBuilder.$delegates[name] = stateBuilder[name]; - } - stateBuilder[name] = func; - return this; - } - - /** - * @ngdoc function - * @name ui.router.state.$stateProvider#state - * @methodOf ui.router.state.$stateProvider - * - * @description - * Registers a state configuration under a given state name. The stateConfig object - * has the following acceptable properties. - * - * @param {string} name A unique state name, e.g. "home", "about", "contacts". - * To create a parent/child state use a dot, e.g. "about.sales", "home.newest". - * @param {object} stateConfig State configuration object. - * @param {string|function=} stateConfig.template - * <a id='template'></a> - * html template as a string or a function that returns - * an html template as a string which should be used by the uiView directives. This property - * takes precedence over templateUrl. - * - * If `template` is a function, it will be called with the following parameters: - * - * - {array.<object>} - state parameters extracted from the current $location.path() by - * applying the current state - * - * <pre>template: - * "<h1>inline template definition</h1>" + - * "<div ui-view></div>"</pre> - * <pre>template: function(params) { - * return "<h1>generated template</h1>"; }</pre> - * </div> - * - * @param {string|function=} stateConfig.templateUrl - * <a id='templateUrl'></a> - * - * path or function that returns a path to an html - * template that should be used by uiView. - * - * If `templateUrl` is a function, it will be called with the following parameters: - * - * - {array.<object>} - state parameters extracted from the current $location.path() by - * applying the current state - * - * <pre>templateUrl: "home.html"</pre> - * <pre>templateUrl: function(params) { - * return myTemplates[params.pageId]; }</pre> - * - * @param {function=} stateConfig.templateProvider - * <a id='templateProvider'></a> - * Provider function that returns HTML content string. - * <pre> templateProvider: - * function(MyTemplateService, params) { - * return MyTemplateService.getTemplate(params.pageId); - * }</pre> - * - * @param {string|function=} stateConfig.controller - * <a id='controller'></a> - * - * Controller fn that should be associated with newly - * related scope or the name of a registered controller if passed as a string. - * Optionally, the ControllerAs may be declared here. - * <pre>controller: "MyRegisteredController"</pre> - * <pre>controller: - * "MyRegisteredController as fooCtrl"}</pre> - * <pre>controller: function($scope, MyService) { - * $scope.data = MyService.getData(); }</pre> - * - * @param {function=} stateConfig.controllerProvider - * <a id='controllerProvider'></a> - * - * Injectable provider function that returns the actual controller or string. - * <pre>controllerProvider: - * function(MyResolveData) { - * if (MyResolveData.foo) - * return "FooCtrl" - * else if (MyResolveData.bar) - * return "BarCtrl"; - * else return function($scope) { - * $scope.baz = "Qux"; - * } - * }</pre> - * - * @param {string=} stateConfig.controllerAs - * <a id='controllerAs'></a> - * - * A controller alias name. If present the controller will be - * published to scope under the controllerAs name. - * <pre>controllerAs: "myCtrl"</pre> - * - * @param {string|object=} stateConfig.parent - * <a id='parent'></a> - * Optionally specifies the parent state of this state. - * - * <pre>parent: 'parentState'</pre> - * <pre>parent: parentState // JS variable</pre> - * - * @param {object=} stateConfig.resolve - * <a id='resolve'></a> - * - * An optional map<string, function> of dependencies which - * should be injected into the controller. If any of these dependencies are promises, - * the router will wait for them all to be resolved before the controller is instantiated. - * If all the promises are resolved successfully, the $stateChangeSuccess event is fired - * and the values of the resolved promises are injected into any controllers that reference them. - * If any of the promises are rejected the $stateChangeError event is fired. - * - * The map object is: - * - * - key - {string}: name of dependency to be injected into controller - * - factory - {string|function}: If string then it is alias for service. Otherwise if function, - * it is injected and return value it treated as dependency. If result is a promise, it is - * resolved before its value is injected into controller. - * - * <pre>resolve: { - * myResolve1: - * function($http, $stateParams) { - * return $http.get("/api/foos/"+stateParams.fooID); - * } - * }</pre> - * - * @param {string=} stateConfig.url - * <a id='url'></a> - * - * A url fragment with optional parameters. When a state is navigated or - * transitioned to, the `$stateParams` service will be populated with any - * parameters that were passed. - * - * (See {@link ui.router.util.type:UrlMatcher UrlMatcher} `UrlMatcher`} for - * more details on acceptable patterns ) - * - * examples: - * <pre>url: "/home" - * url: "/users/:userid" - * url: "/books/{bookid:[a-zA-Z_-]}" - * url: "/books/{categoryid:int}" - * url: "/books/{publishername:string}/{categoryid:int}" - * url: "/messages?before&after" - * url: "/messages?{before:date}&{after:date}" - * url: "/messages/:mailboxid?{before:date}&{after:date}" - * </pre> - * - * @param {object=} stateConfig.views - * <a id='views'></a> - * an optional map<string, object> which defined multiple views, or targets views - * manually/explicitly. - * - * Examples: - * - * Targets three named `ui-view`s in the parent state's template - * <pre>views: { - * header: { - * controller: "headerCtrl", - * templateUrl: "header.html" - * }, body: { - * controller: "bodyCtrl", - * templateUrl: "body.html" - * }, footer: { - * controller: "footCtrl", - * templateUrl: "footer.html" - * } - * }</pre> - * - * Targets named `ui-view="header"` from grandparent state 'top''s template, and named `ui-view="body" from parent state's template. - * <pre>views: { - * 'header@top': { - * controller: "msgHeaderCtrl", - * templateUrl: "msgHeader.html" - * }, 'body': { - * controller: "messagesCtrl", - * templateUrl: "messages.html" - * } - * }</pre> - * - * @param {boolean=} [stateConfig.abstract=false] - * <a id='abstract'></a> - * An abstract state will never be directly activated, - * but can provide inherited properties to its common children states. - * <pre>abstract: true</pre> - * - * @param {function=} stateConfig.onEnter - * <a id='onEnter'></a> - * - * Callback function for when a state is entered. Good way - * to trigger an action or dispatch an event, such as opening a dialog. - * If minifying your scripts, make sure to explictly annotate this function, - * because it won't be automatically annotated by your build tools. - * - * <pre>onEnter: function(MyService, $stateParams) { - * MyService.foo($stateParams.myParam); - * }</pre> - * - * @param {function=} stateConfig.onExit - * <a id='onExit'></a> - * - * Callback function for when a state is exited. Good way to - * trigger an action or dispatch an event, such as opening a dialog. - * If minifying your scripts, make sure to explictly annotate this function, - * because it won't be automatically annotated by your build tools. - * - * <pre>onExit: function(MyService, $stateParams) { - * MyService.cleanup($stateParams.myParam); - * }</pre> - * - * @param {boolean=} [stateConfig.reloadOnSearch=true] - * <a id='reloadOnSearch'></a> - * - * If `false`, will not retrigger the same state - * just because a search/query parameter has changed (via $location.search() or $location.hash()). - * Useful for when you'd like to modify $location.search() without triggering a reload. - * <pre>reloadOnSearch: false</pre> - * - * @param {object=} stateConfig.data - * <a id='data'></a> - * - * Arbitrary data object, useful for custom configuration. The parent state's `data` is - * prototypally inherited. In other words, adding a data property to a state adds it to - * the entire subtree via prototypal inheritance. - * - * <pre>data: { - * requiredRole: 'foo' - * } </pre> - * - * @param {object=} stateConfig.params - * <a id='params'></a> - * - * A map which optionally configures parameters declared in the `url`, or - * defines additional non-url parameters. For each parameter being - * configured, add a configuration object keyed to the name of the parameter. - * - * Each parameter configuration object may contain the following properties: - * - * - ** value ** - {object|function=}: specifies the default value for this - * parameter. This implicitly sets this parameter as optional. - * - * When UI-Router routes to a state and no value is - * specified for this parameter in the URL or transition, the - * default value will be used instead. If `value` is a function, - * it will be injected and invoked, and the return value used. - * - * *Note*: `undefined` is treated as "no default value" while `null` - * is treated as "the default value is `null`". - * - * *Shorthand*: If you only need to configure the default value of the - * parameter, you may use a shorthand syntax. In the **`params`** - * map, instead mapping the param name to a full parameter configuration - * object, simply set map it to the default parameter value, e.g.: - * - * <pre>// define a parameter's default value - * params: { - * param1: { value: "defaultValue" } - * } - * // shorthand default values - * params: { - * param1: "defaultValue", - * param2: "param2Default" - * }</pre> - * - * - ** array ** - {boolean=}: *(default: false)* If true, the param value will be - * treated as an array of values. If you specified a Type, the value will be - * treated as an array of the specified Type. Note: query parameter values - * default to a special `"auto"` mode. - * - * For query parameters in `"auto"` mode, if multiple values for a single parameter - * are present in the URL (e.g.: `/foo?bar=1&bar=2&bar=3`) then the values - * are mapped to an array (e.g.: `{ foo: [ '1', '2', '3' ] }`). However, if - * only one value is present (e.g.: `/foo?bar=1`) then the value is treated as single - * value (e.g.: `{ foo: '1' }`). - * - * <pre>params: { - * param1: { array: true } - * }</pre> - * - * - ** squash ** - {bool|string=}: `squash` configures how a default parameter value is represented in the URL when - * the current parameter value is the same as the default value. If `squash` is not set, it uses the - * configured default squash policy. - * (See {@link ui.router.util.$urlMatcherFactory#methods_defaultSquashPolicy `defaultSquashPolicy()`}) - * - * There are three squash settings: - * - * - false: The parameter's default value is not squashed. It is encoded and included in the URL - * - true: The parameter's default value is omitted from the URL. If the parameter is preceeded and followed - * by slashes in the state's `url` declaration, then one of those slashes are omitted. - * This can allow for cleaner looking URLs. - * - `"<arbitrary string>"`: The parameter's default value is replaced with an arbitrary placeholder of your choice. - * - * <pre>params: { - * param1: { - * value: "defaultId", - * squash: true - * } } - * // squash "defaultValue" to "~" - * params: { - * param1: { - * value: "defaultValue", - * squash: "~" - * } } - * </pre> - * - * - * @example - * <pre> - * // Some state name examples - * - * // stateName can be a single top-level name (must be unique). - * $stateProvider.state("home", {}); - * - * // Or it can be a nested state name. This state is a child of the - * // above "home" state. - * $stateProvider.state("home.newest", {}); - * - * // Nest states as deeply as needed. - * $stateProvider.state("home.newest.abc.xyz.inception", {}); - * - * // state() returns $stateProvider, so you can chain state declarations. - * $stateProvider - * .state("home", {}) - * .state("about", {}) - * .state("contacts", {}); - * </pre> - * - */ - this.state = state; - function state(name, definition) { - /*jshint validthis: true */ - if (isObject(name)) definition = name; - else definition.name = name; - registerState(definition); - return this; - } - - /** - * @ngdoc object - * @name ui.router.state.$state - * - * @requires $rootScope - * @requires $q - * @requires ui.router.state.$view - * @requires $injector - * @requires ui.router.util.$resolve - * @requires ui.router.state.$stateParams - * @requires ui.router.router.$urlRouter - * - * @property {object} params A param object, e.g. {sectionId: section.id)}, that - * you'd like to test against the current active state. - * @property {object} current A reference to the state's config object. However - * you passed it in. Useful for accessing custom data. - * @property {object} transition Currently pending transition. A promise that'll - * resolve or reject. - * - * @description - * `$state` service is responsible for representing states as well as transitioning - * between them. It also provides interfaces to ask for current state or even states - * you're coming from. - */ - this.$get = $get; - $get.$inject = ['$rootScope', '$q', '$view', '$injector', '$resolve', '$stateParams', '$urlRouter', '$location', '$urlMatcherFactory']; - function $get( $rootScope, $q, $view, $injector, $resolve, $stateParams, $urlRouter, $location, $urlMatcherFactory) { - - var TransitionSuperseded = $q.reject(new Error('transition superseded')); - var TransitionPrevented = $q.reject(new Error('transition prevented')); - var TransitionAborted = $q.reject(new Error('transition aborted')); - var TransitionFailed = $q.reject(new Error('transition failed')); - - // Handles the case where a state which is the target of a transition is not found, and the user - // can optionally retry or defer the transition - function handleRedirect(redirect, state, params, options) { - /** - * @ngdoc event - * @name ui.router.state.$state#$stateNotFound - * @eventOf ui.router.state.$state - * @eventType broadcast on root scope - * @description - * Fired when a requested state **cannot be found** using the provided state name during transition. - * The event is broadcast allowing any handlers a single chance to deal with the error (usually by - * lazy-loading the unfound state). A special `unfoundState` object is passed to the listener handler, - * you can see its three properties in the example. You can use `event.preventDefault()` to abort the - * transition and the promise returned from `go` will be rejected with a `'transition aborted'` value. - * - * @param {Object} event Event object. - * @param {Object} unfoundState Unfound State information. Contains: `to, toParams, options` properties. - * @param {State} fromState Current state object. - * @param {Object} fromParams Current state params. - * - * @example - * - * <pre> - * // somewhere, assume lazy.state has not been defined - * $state.go("lazy.state", {a:1, b:2}, {inherit:false}); - * - * // somewhere else - * $scope.$on('$stateNotFound', - * function(event, unfoundState, fromState, fromParams){ - * console.log(unfoundState.to); // "lazy.state" - * console.log(unfoundState.toParams); // {a:1, b:2} - * console.log(unfoundState.options); // {inherit:false} + default options - * }) - * </pre> - */ - var evt = $rootScope.$broadcast('$stateNotFound', redirect, state, params); - - if (evt.defaultPrevented) { - $urlRouter.update(); - return TransitionAborted; - } - - if (!evt.retry) { - return null; - } - - // Allow the handler to return a promise to defer state lookup retry - if (options.$retry) { - $urlRouter.update(); - return TransitionFailed; - } - var retryTransition = $state.transition = $q.when(evt.retry); - - retryTransition.then(function() { - if (retryTransition !== $state.transition) return TransitionSuperseded; - redirect.options.$retry = true; - return $state.transitionTo(redirect.to, redirect.toParams, redirect.options); - }, function() { - return TransitionAborted; - }); - $urlRouter.update(); - - return retryTransition; - } - - root.locals = { resolve: null, globals: { $stateParams: {} } }; - - $state = { - params: {}, - current: root.self, - $current: root, - transition: null - }; - - /** - * @ngdoc function - * @name ui.router.state.$state#reload - * @methodOf ui.router.state.$state - * - * @description - * A method that force reloads the current state. All resolves are re-resolved, - * controllers reinstantiated, and events re-fired. - * - * @example - * <pre> - * var app angular.module('app', ['ui.router']); - * - * app.controller('ctrl', function ($scope, $state) { - * $scope.reload = function(){ - * $state.reload(); - * } - * }); - * </pre> - * - * `reload()` is just an alias for: - * <pre> - * $state.transitionTo($state.current, $stateParams, { - * reload: true, inherit: false, notify: true - * }); - * </pre> - * - * @param {string=|object=} state - A state name or a state object, which is the root of the resolves to be re-resolved. - * @example - * <pre> - * //assuming app application consists of 3 states: 'contacts', 'contacts.detail', 'contacts.detail.item' - * //and current state is 'contacts.detail.item' - * var app angular.module('app', ['ui.router']); - * - * app.controller('ctrl', function ($scope, $state) { - * $scope.reload = function(){ - * //will reload 'contact.detail' and 'contact.detail.item' states - * $state.reload('contact.detail'); - * } - * }); - * </pre> - * - * `reload()` is just an alias for: - * <pre> - * $state.transitionTo($state.current, $stateParams, { - * reload: true, inherit: false, notify: true - * }); - * </pre> - - * @returns {promise} A promise representing the state of the new transition. See - * {@link ui.router.state.$state#methods_go $state.go}. - */ - $state.reload = function reload(state) { - return $state.transitionTo($state.current, $stateParams, { reload: state || true, inherit: false, notify: true}); - }; - - /** - * @ngdoc function - * @name ui.router.state.$state#go - * @methodOf ui.router.state.$state - * - * @description - * Convenience method for transitioning to a new state. `$state.go` calls - * `$state.transitionTo` internally but automatically sets options to - * `{ location: true, inherit: true, relative: $state.$current, notify: true }`. - * This allows you to easily use an absolute or relative to path and specify - * only the parameters you'd like to update (while letting unspecified parameters - * inherit from the currently active ancestor states). - * - * @example - * <pre> - * var app = angular.module('app', ['ui.router']); - * - * app.controller('ctrl', function ($scope, $state) { - * $scope.changeState = function () { - * $state.go('contact.detail'); - * }; - * }); - * </pre> - * <img src='../ngdoc_assets/StateGoExamples.png'/> - * - * @param {string} to Absolute state name or relative state path. Some examples: - * - * - `$state.go('contact.detail')` - will go to the `contact.detail` state - * - `$state.go('^')` - will go to a parent state - * - `$state.go('^.sibling')` - will go to a sibling state - * - `$state.go('.child.grandchild')` - will go to grandchild state - * - * @param {object=} params A map of the parameters that will be sent to the state, - * will populate $stateParams. Any parameters that are not specified will be inherited from currently - * defined parameters. This allows, for example, going to a sibling state that shares parameters - * specified in a parent state. Parameter inheritance only works between common ancestor states, I.e. - * transitioning to a sibling will get you the parameters for all parents, transitioning to a child - * will get you all current parameters, etc. - * @param {object=} options Options object. The options are: - * - * - **`location`** - {boolean=true|string=} - If `true` will update the url in the location bar, if `false` - * will not. If string, must be `"replace"`, which will update url and also replace last history record. - * - **`inherit`** - {boolean=true}, If `true` will inherit url parameters from current url. - * - **`relative`** - {object=$state.$current}, When transitioning with relative path (e.g '^'), - * defines which state to be relative from. - * - **`notify`** - {boolean=true}, If `true` will broadcast $stateChangeStart and $stateChangeSuccess events. - * - **`reload`** (v0.2.5) - {boolean=false}, If `true` will force transition even if the state or params - * have not changed, aka a reload of the same state. It differs from reloadOnSearch because you'd - * use this when you want to force a reload when *everything* is the same, including search params. - * - * @returns {promise} A promise representing the state of the new transition. - * - * Possible success values: - * - * - $state.current - * - * <br/>Possible rejection values: - * - * - 'transition superseded' - when a newer transition has been started after this one - * - 'transition prevented' - when `event.preventDefault()` has been called in a `$stateChangeStart` listener - * - 'transition aborted' - when `event.preventDefault()` has been called in a `$stateNotFound` listener or - * when a `$stateNotFound` `event.retry` promise errors. - * - 'transition failed' - when a state has been unsuccessfully found after 2 tries. - * - *resolve error* - when an error has occurred with a `resolve` - * - */ - $state.go = function go(to, params, options) { - return $state.transitionTo(to, params, extend({ inherit: true, relative: $state.$current }, options)); - }; - - /** - * @ngdoc function - * @name ui.router.state.$state#transitionTo - * @methodOf ui.router.state.$state - * - * @description - * Low-level method for transitioning to a new state. {@link ui.router.state.$state#methods_go $state.go} - * uses `transitionTo` internally. `$state.go` is recommended in most situations. - * - * @example - * <pre> - * var app = angular.module('app', ['ui.router']); - * - * app.controller('ctrl', function ($scope, $state) { - * $scope.changeState = function () { - * $state.transitionTo('contact.detail'); - * }; - * }); - * </pre> - * - * @param {string} to State name. - * @param {object=} toParams A map of the parameters that will be sent to the state, - * will populate $stateParams. - * @param {object=} options Options object. The options are: - * - * - **`location`** - {boolean=true|string=} - If `true` will update the url in the location bar, if `false` - * will not. If string, must be `"replace"`, which will update url and also replace last history record. - * - **`inherit`** - {boolean=false}, If `true` will inherit url parameters from current url. - * - **`relative`** - {object=}, When transitioning with relative path (e.g '^'), - * defines which state to be relative from. - * - **`notify`** - {boolean=true}, If `true` will broadcast $stateChangeStart and $stateChangeSuccess events. - * - **`reload`** (v0.2.5) - {boolean=false|string=|object=}, If `true` will force transition even if the state or params - * have not changed, aka a reload of the same state. It differs from reloadOnSearch because you'd - * use this when you want to force a reload when *everything* is the same, including search params. - * if String, then will reload the state with the name given in reload, and any children. - * if Object, then a stateObj is expected, will reload the state found in stateObj, and any children. - * - * @returns {promise} A promise representing the state of the new transition. See - * {@link ui.router.state.$state#methods_go $state.go}. - */ - $state.transitionTo = function transitionTo(to, toParams, options) { - toParams = toParams || {}; - options = extend({ - location: true, inherit: false, relative: null, notify: true, reload: false, $retry: false - }, options || {}); - - var from = $state.$current, fromParams = $state.params, fromPath = from.path; - var evt, toState = findState(to, options.relative); - - // Store the hash param for later (since it will be stripped out by various methods) - var hash = toParams['#']; - - if (!isDefined(toState)) { - var redirect = { to: to, toParams: toParams, options: options }; - var redirectResult = handleRedirect(redirect, from.self, fromParams, options); - - if (redirectResult) { - return redirectResult; - } - - // Always retry once if the $stateNotFound was not prevented - // (handles either redirect changed or state lazy-definition) - to = redirect.to; - toParams = redirect.toParams; - options = redirect.options; - toState = findState(to, options.relative); - - if (!isDefined(toState)) { - if (!options.relative) throw new Error("No such state '" + to + "'"); - throw new Error("Could not resolve '" + to + "' from state '" + options.relative + "'"); - } - } - if (toState[abstractKey]) throw new Error("Cannot transition to abstract state '" + to + "'"); - if (options.inherit) toParams = inheritParams($stateParams, toParams || {}, $state.$current, toState); - if (!toState.params.$$validates(toParams)) return TransitionFailed; - - toParams = toState.params.$$values(toParams); - to = toState; - - var toPath = to.path; - - // Starting from the root of the path, keep all levels that haven't changed - var keep = 0, state = toPath[keep], locals = root.locals, toLocals = []; - - if (!options.reload) { - while (state && state === fromPath[keep] && state.ownParams.$$equals(toParams, fromParams)) { - locals = toLocals[keep] = state.locals; - keep++; - state = toPath[keep]; - } - } else if (isString(options.reload) || isObject(options.reload)) { - if (isObject(options.reload) && !options.reload.name) { - throw new Error('Invalid reload state object'); - } - - var reloadState = options.reload === true ? fromPath[0] : findState(options.reload); - if (options.reload && !reloadState) { - throw new Error("No such reload state '" + (isString(options.reload) ? options.reload : options.reload.name) + "'"); - } - - while (state && state === fromPath[keep] && state !== reloadState) { - locals = toLocals[keep] = state.locals; - keep++; - state = toPath[keep]; - } - } - - // If we're going to the same state and all locals are kept, we've got nothing to do. - // But clear 'transition', as we still want to cancel any other pending transitions. - // TODO: We may not want to bump 'transition' if we're called from a location change - // that we've initiated ourselves, because we might accidentally abort a legitimate - // transition initiated from code? - if (shouldSkipReload(to, toParams, from, fromParams, locals, options)) { - if (hash) toParams['#'] = hash; - $state.params = toParams; - copy($state.params, $stateParams); - if (options.location && to.navigable && to.navigable.url) { - $urlRouter.push(to.navigable.url, toParams, { - $$avoidResync: true, replace: options.location === 'replace' - }); - $urlRouter.update(true); - } - $state.transition = null; - return $q.when($state.current); - } - - // Filter parameters before we pass them to event handlers etc. - toParams = filterByKeys(to.params.$$keys(), toParams || {}); - - // Broadcast start event and cancel the transition if requested - if (options.notify) { - /** - * @ngdoc event - * @name ui.router.state.$state#$stateChangeStart - * @eventOf ui.router.state.$state - * @eventType broadcast on root scope - * @description - * Fired when the state transition **begins**. You can use `event.preventDefault()` - * to prevent the transition from happening and then the transition promise will be - * rejected with a `'transition prevented'` value. - * - * @param {Object} event Event object. - * @param {State} toState The state being transitioned to. - * @param {Object} toParams The params supplied to the `toState`. - * @param {State} fromState The current state, pre-transition. - * @param {Object} fromParams The params supplied to the `fromState`. - * - * @example - * - * <pre> - * $rootScope.$on('$stateChangeStart', - * function(event, toState, toParams, fromState, fromParams){ - * event.preventDefault(); - * // transitionTo() promise will be rejected with - * // a 'transition prevented' error - * }) - * </pre> - */ - if ($rootScope.$broadcast('$stateChangeStart', to.self, toParams, from.self, fromParams).defaultPrevented) { - $rootScope.$broadcast('$stateChangeCancel', to.self, toParams, from.self, fromParams); - $urlRouter.update(); - return TransitionPrevented; - } - } - - // Resolve locals for the remaining states, but don't update any global state just - // yet -- if anything fails to resolve the current state needs to remain untouched. - // We also set up an inheritance chain for the locals here. This allows the view directive - // to quickly look up the correct definition for each view in the current state. Even - // though we create the locals object itself outside resolveState(), it is initially - // empty and gets filled asynchronously. We need to keep track of the promise for the - // (fully resolved) current locals, and pass this down the chain. - var resolved = $q.when(locals); - - for (var l = keep; l < toPath.length; l++, state = toPath[l]) { - locals = toLocals[l] = inherit(locals); - resolved = resolveState(state, toParams, state === to, resolved, locals, options); - } - - // Once everything is resolved, we are ready to perform the actual transition - // and return a promise for the new state. We also keep track of what the - // current promise is, so that we can detect overlapping transitions and - // keep only the outcome of the last transition. - var transition = $state.transition = resolved.then(function () { - var l, entering, exiting; - - if ($state.transition !== transition) return TransitionSuperseded; - - // Exit 'from' states not kept - for (l = fromPath.length - 1; l >= keep; l--) { - exiting = fromPath[l]; - if (exiting.self.onExit) { - $injector.invoke(exiting.self.onExit, exiting.self, exiting.locals.globals); - } - exiting.locals = null; - } - - // Enter 'to' states not kept - for (l = keep; l < toPath.length; l++) { - entering = toPath[l]; - entering.locals = toLocals[l]; - if (entering.self.onEnter) { - $injector.invoke(entering.self.onEnter, entering.self, entering.locals.globals); - } - } - - // Re-add the saved hash before we start returning things - if (hash) toParams['#'] = hash; - - // Run it again, to catch any transitions in callbacks - if ($state.transition !== transition) return TransitionSuperseded; - - // Update globals in $state - $state.$current = to; - $state.current = to.self; - $state.params = toParams; - copy($state.params, $stateParams); - $state.transition = null; - - if (options.location && to.navigable) { - $urlRouter.push(to.navigable.url, to.navigable.locals.globals.$stateParams, { - $$avoidResync: true, replace: options.location === 'replace' - }); - } - - if (options.notify) { - /** - * @ngdoc event - * @name ui.router.state.$state#$stateChangeSuccess - * @eventOf ui.router.state.$state - * @eventType broadcast on root scope - * @description - * Fired once the state transition is **complete**. - * - * @param {Object} event Event object. - * @param {State} toState The state being transitioned to. - * @param {Object} toParams The params supplied to the `toState`. - * @param {State} fromState The current state, pre-transition. - * @param {Object} fromParams The params supplied to the `fromState`. - */ - $rootScope.$broadcast('$stateChangeSuccess', to.self, toParams, from.self, fromParams); - } - $urlRouter.update(true); - - return $state.current; - }, function (error) { - if ($state.transition !== transition) return TransitionSuperseded; - - $state.transition = null; - /** - * @ngdoc event - * @name ui.router.state.$state#$stateChangeError - * @eventOf ui.router.state.$state - * @eventType broadcast on root scope - * @description - * Fired when an **error occurs** during transition. It's important to note that if you - * have any errors in your resolve functions (javascript errors, non-existent services, etc) - * they will not throw traditionally. You must listen for this $stateChangeError event to - * catch **ALL** errors. - * - * @param {Object} event Event object. - * @param {State} toState The state being transitioned to. - * @param {Object} toParams The params supplied to the `toState`. - * @param {State} fromState The current state, pre-transition. - * @param {Object} fromParams The params supplied to the `fromState`. - * @param {Error} error The resolve error object. - */ - evt = $rootScope.$broadcast('$stateChangeError', to.self, toParams, from.self, fromParams, error); - - if (!evt.defaultPrevented) { - $urlRouter.update(); - } - - return $q.reject(error); - }); - - return transition; - }; - - /** - * @ngdoc function - * @name ui.router.state.$state#is - * @methodOf ui.router.state.$state - * - * @description - * Similar to {@link ui.router.state.$state#methods_includes $state.includes}, - * but only checks for the full state name. If params is supplied then it will be - * tested for strict equality against the current active params object, so all params - * must match with none missing and no extras. - * - * @example - * <pre> - * $state.$current.name = 'contacts.details.item'; - * - * // absolute name - * $state.is('contact.details.item'); // returns true - * $state.is(contactDetailItemStateObject); // returns true - * - * // relative name (. and ^), typically from a template - * // E.g. from the 'contacts.details' template - * <div ng-class="{highlighted: $state.is('.item')}">Item</div> - * </pre> - * - * @param {string|object} stateOrName The state name (absolute or relative) or state object you'd like to check. - * @param {object=} params A param object, e.g. `{sectionId: section.id}`, that you'd like - * to test against the current active state. - * @param {object=} options An options object. The options are: - * - * - **`relative`** - {string|object} - If `stateOrName` is a relative state name and `options.relative` is set, .is will - * test relative to `options.relative` state (or name). - * - * @returns {boolean} Returns true if it is the state. - */ - $state.is = function is(stateOrName, params, options) { - options = extend({ relative: $state.$current }, options || {}); - var state = findState(stateOrName, options.relative); - - if (!isDefined(state)) { return undefined; } - if ($state.$current !== state) { return false; } - return params ? equalForKeys(state.params.$$values(params), $stateParams) : true; - }; - - /** - * @ngdoc function - * @name ui.router.state.$state#includes - * @methodOf ui.router.state.$state - * - * @description - * A method to determine if the current active state is equal to or is the child of the - * state stateName. If any params are passed then they will be tested for a match as well. - * Not all the parameters need to be passed, just the ones you'd like to test for equality. - * - * @example - * Partial and relative names - * <pre> - * $state.$current.name = 'contacts.details.item'; - * - * // Using partial names - * $state.includes("contacts"); // returns true - * $state.includes("contacts.details"); // returns true - * $state.includes("contacts.details.item"); // returns true - * $state.includes("contacts.list"); // returns false - * $state.includes("about"); // returns false - * - * // Using relative names (. and ^), typically from a template - * // E.g. from the 'contacts.details' template - * <div ng-class="{highlighted: $state.includes('.item')}">Item</div> - * </pre> - * - * Basic globbing patterns - * <pre> - * $state.$current.name = 'contacts.details.item.url'; - * - * $state.includes("*.details.*.*"); // returns true - * $state.includes("*.details.**"); // returns true - * $state.includes("**.item.**"); // returns true - * $state.includes("*.details.item.url"); // returns true - * $state.includes("*.details.*.url"); // returns true - * $state.includes("*.details.*"); // returns false - * $state.includes("item.**"); // returns false - * </pre> - * - * @param {string} stateOrName A partial name, relative name, or glob pattern - * to be searched for within the current state name. - * @param {object=} params A param object, e.g. `{sectionId: section.id}`, - * that you'd like to test against the current active state. - * @param {object=} options An options object. The options are: - * - * - **`relative`** - {string|object=} - If `stateOrName` is a relative state reference and `options.relative` is set, - * .includes will test relative to `options.relative` state (or name). - * - * @returns {boolean} Returns true if it does include the state - */ - $state.includes = function includes(stateOrName, params, options) { - options = extend({ relative: $state.$current }, options || {}); - if (isString(stateOrName) && isGlob(stateOrName)) { - if (!doesStateMatchGlob(stateOrName)) { - return false; - } - stateOrName = $state.$current.name; - } - - var state = findState(stateOrName, options.relative); - if (!isDefined(state)) { return undefined; } - if (!isDefined($state.$current.includes[state.name])) { return false; } - return params ? equalForKeys(state.params.$$values(params), $stateParams, objectKeys(params)) : true; - }; - - - /** - * @ngdoc function - * @name ui.router.state.$state#href - * @methodOf ui.router.state.$state - * - * @description - * A url generation method that returns the compiled url for the given state populated with the given params. - * - * @example - * <pre> - * expect($state.href("about.person", { person: "bob" })).toEqual("/about/bob"); - * </pre> - * - * @param {string|object} stateOrName The state name or state object you'd like to generate a url from. - * @param {object=} params An object of parameter values to fill the state's required parameters. - * @param {object=} options Options object. The options are: - * - * - **`lossy`** - {boolean=true} - If true, and if there is no url associated with the state provided in the - * first parameter, then the constructed href url will be built from the first navigable ancestor (aka - * ancestor with a valid url). - * - **`inherit`** - {boolean=true}, If `true` will inherit url parameters from current url. - * - **`relative`** - {object=$state.$current}, When transitioning with relative path (e.g '^'), - * defines which state to be relative from. - * - **`absolute`** - {boolean=false}, If true will generate an absolute url, e.g. "http://www.example.com/fullurl". - * - * @returns {string} compiled state url - */ - $state.href = function href(stateOrName, params, options) { - options = extend({ - lossy: true, - inherit: true, - absolute: false, - relative: $state.$current - }, options || {}); - - var state = findState(stateOrName, options.relative); - - if (!isDefined(state)) return null; - if (options.inherit) params = inheritParams($stateParams, params || {}, $state.$current, state); - - var nav = (state && options.lossy) ? state.navigable : state; - - if (!nav || nav.url === undefined || nav.url === null) { - return null; - } - return $urlRouter.href(nav.url, filterByKeys(state.params.$$keys().concat('#'), params || {}), { - absolute: options.absolute - }); - }; - - /** - * @ngdoc function - * @name ui.router.state.$state#get - * @methodOf ui.router.state.$state - * - * @description - * Returns the state configuration object for any specific state or all states. - * - * @param {string|object=} stateOrName (absolute or relative) If provided, will only get the config for - * the requested state. If not provided, returns an array of ALL state configs. - * @param {string|object=} context When stateOrName is a relative state reference, the state will be retrieved relative to context. - * @returns {Object|Array} State configuration object or array of all objects. - */ - $state.get = function (stateOrName, context) { - if (arguments.length === 0) return map(objectKeys(states), function(name) { return states[name].self; }); - var state = findState(stateOrName, context || $state.$current); - return (state && state.self) ? state.self : null; - }; - - function resolveState(state, params, paramsAreFiltered, inherited, dst, options) { - // Make a restricted $stateParams with only the parameters that apply to this state if - // necessary. In addition to being available to the controller and onEnter/onExit callbacks, - // we also need $stateParams to be available for any $injector calls we make during the - // dependency resolution process. - var $stateParams = (paramsAreFiltered) ? params : filterByKeys(state.params.$$keys(), params); - var locals = { $stateParams: $stateParams }; - - // Resolve 'global' dependencies for the state, i.e. those not specific to a view. - // We're also including $stateParams in this; that way the parameters are restricted - // to the set that should be visible to the state, and are independent of when we update - // the global $state and $stateParams values. - dst.resolve = $resolve.resolve(state.resolve, locals, dst.resolve, state); - var promises = [dst.resolve.then(function (globals) { - dst.globals = globals; - })]; - if (inherited) promises.push(inherited); - - function resolveViews() { - var viewsPromises = []; - - // Resolve template and dependencies for all views. - forEach(state.views, function (view, name) { - var injectables = (view.resolve && view.resolve !== state.resolve ? view.resolve : {}); - injectables.$template = [ function () { - return $view.load(name, { view: view, locals: dst.globals, params: $stateParams, notify: options.notify }) || ''; - }]; - - viewsPromises.push($resolve.resolve(injectables, dst.globals, dst.resolve, state).then(function (result) { - // References to the controller (only instantiated at link time) - if (isFunction(view.controllerProvider) || isArray(view.controllerProvider)) { - var injectLocals = angular.extend({}, injectables, dst.globals); - result.$$controller = $injector.invoke(view.controllerProvider, null, injectLocals); - } else { - result.$$controller = view.controller; - } - // Provide access to the state itself for internal use - result.$$state = state; - result.$$controllerAs = view.controllerAs; - dst[name] = result; - })); - }); - - return $q.all(viewsPromises).then(function(){ - return dst.globals; - }); - } - - // Wait for all the promises and then return the activation object - return $q.all(promises).then(resolveViews).then(function (values) { - return dst; - }); - } - - return $state; - } - - function shouldSkipReload(to, toParams, from, fromParams, locals, options) { - // Return true if there are no differences in non-search (path/object) params, false if there are differences - function nonSearchParamsEqual(fromAndToState, fromParams, toParams) { - // Identify whether all the parameters that differ between `fromParams` and `toParams` were search params. - function notSearchParam(key) { - return fromAndToState.params[key].location != "search"; - } - var nonQueryParamKeys = fromAndToState.params.$$keys().filter(notSearchParam); - var nonQueryParams = pick.apply({}, [fromAndToState.params].concat(nonQueryParamKeys)); - var nonQueryParamSet = new $$UMFP.ParamSet(nonQueryParams); - return nonQueryParamSet.$$equals(fromParams, toParams); - } - - // If reload was not explicitly requested - // and we're transitioning to the same state we're already in - // and the locals didn't change - // or they changed in a way that doesn't merit reloading - // (reloadOnParams:false, or reloadOnSearch.false and only search params changed) - // Then return true. - if (!options.reload && to === from && - (locals === from.locals || (to.self.reloadOnSearch === false && nonSearchParamsEqual(from, fromParams, toParams)))) { - return true; - } - } -} - -angular.module('ui.router.state') - .value('$stateParams', {}) - .provider('$state', $StateProvider); - - -$ViewProvider.$inject = []; -function $ViewProvider() { - - this.$get = $get; - /** - * @ngdoc object - * @name ui.router.state.$view - * - * @requires ui.router.util.$templateFactory - * @requires $rootScope - * - * @description - * - */ - $get.$inject = ['$rootScope', '$templateFactory']; - function $get( $rootScope, $templateFactory) { - return { - // $view.load('full.viewName', { template: ..., controller: ..., resolve: ..., async: false, params: ... }) - /** - * @ngdoc function - * @name ui.router.state.$view#load - * @methodOf ui.router.state.$view - * - * @description - * - * @param {string} name name - * @param {object} options option object. - */ - load: function load(name, options) { - var result, defaults = { - template: null, controller: null, view: null, locals: null, notify: true, async: true, params: {} - }; - options = extend(defaults, options); - - if (options.view) { - result = $templateFactory.fromConfig(options.view, options.params, options.locals); - } - if (result && options.notify) { - /** - * @ngdoc event - * @name ui.router.state.$state#$viewContentLoading - * @eventOf ui.router.state.$view - * @eventType broadcast on root scope - * @description - * - * Fired once the view **begins loading**, *before* the DOM is rendered. - * - * @param {Object} event Event object. - * @param {Object} viewConfig The view config properties (template, controller, etc). - * - * @example - * - * <pre> - * $scope.$on('$viewContentLoading', - * function(event, viewConfig){ - * // Access to all the view config properties. - * // and one special property 'targetView' - * // viewConfig.targetView - * }); - * </pre> - */ - $rootScope.$broadcast('$viewContentLoading', options); - } - return result; - } - }; - } -} - -angular.module('ui.router.state').provider('$view', $ViewProvider); - -/** - * @ngdoc object - * @name ui.router.state.$uiViewScrollProvider - * - * @description - * Provider that returns the {@link ui.router.state.$uiViewScroll} service function. - */ -function $ViewScrollProvider() { - - var useAnchorScroll = false; - - /** - * @ngdoc function - * @name ui.router.state.$uiViewScrollProvider#useAnchorScroll - * @methodOf ui.router.state.$uiViewScrollProvider - * - * @description - * Reverts back to using the core [`$anchorScroll`](http://docs.angularjs.org/api/ng.$anchorScroll) service for - * scrolling based on the url anchor. - */ - this.useAnchorScroll = function () { - useAnchorScroll = true; - }; - - /** - * @ngdoc object - * @name ui.router.state.$uiViewScroll - * - * @requires $anchorScroll - * @requires $timeout - * - * @description - * When called with a jqLite element, it scrolls the element into view (after a - * `$timeout` so the DOM has time to refresh). - * - * If you prefer to rely on `$anchorScroll` to scroll the view to the anchor, - * this can be enabled by calling {@link ui.router.state.$uiViewScrollProvider#methods_useAnchorScroll `$uiViewScrollProvider.useAnchorScroll()`}. - */ - this.$get = ['$anchorScroll', '$timeout', function ($anchorScroll, $timeout) { - if (useAnchorScroll) { - return $anchorScroll; - } - - return function ($element) { - return $timeout(function () { - $element[0].scrollIntoView(); - }, 0, false); - }; - }]; -} - -angular.module('ui.router.state').provider('$uiViewScroll', $ViewScrollProvider); - -/** - * @ngdoc directive - * @name ui.router.state.directive:ui-view - * - * @requires ui.router.state.$state - * @requires $compile - * @requires $controller - * @requires $injector - * @requires ui.router.state.$uiViewScroll - * @requires $document - * - * @restrict ECA - * - * @description - * The ui-view directive tells $state where to place your templates. - * - * @param {string=} name A view name. The name should be unique amongst the other views in the - * same state. You can have views of the same name that live in different states. - * - * @param {string=} autoscroll It allows you to set the scroll behavior of the browser window - * when a view is populated. By default, $anchorScroll is overridden by ui-router's custom scroll - * service, {@link ui.router.state.$uiViewScroll}. This custom service let's you - * scroll ui-view elements into view when they are populated during a state activation. - * - * *Note: To revert back to old [`$anchorScroll`](http://docs.angularjs.org/api/ng.$anchorScroll) - * functionality, call `$uiViewScrollProvider.useAnchorScroll()`.* - * - * @param {string=} onload Expression to evaluate whenever the view updates. - * - * @example - * A view can be unnamed or named. - * <pre> - * <!-- Unnamed --> - * <div ui-view></div> - * - * <!-- Named --> - * <div ui-view="viewName"></div> - * </pre> - * - * You can only have one unnamed view within any template (or root html). If you are only using a - * single view and it is unnamed then you can populate it like so: - * <pre> - * <div ui-view></div> - * $stateProvider.state("home", { - * template: "<h1>HELLO!</h1>" - * }) - * </pre> - * - * The above is a convenient shortcut equivalent to specifying your view explicitly with the {@link ui.router.state.$stateProvider#views `views`} - * config property, by name, in this case an empty name: - * <pre> - * $stateProvider.state("home", { - * views: { - * "": { - * template: "<h1>HELLO!</h1>" - * } - * } - * }) - * </pre> - * - * But typically you'll only use the views property if you name your view or have more than one view - * in the same template. There's not really a compelling reason to name a view if its the only one, - * but you could if you wanted, like so: - * <pre> - * <div ui-view="main"></div> - * </pre> - * <pre> - * $stateProvider.state("home", { - * views: { - * "main": { - * template: "<h1>HELLO!</h1>" - * } - * } - * }) - * </pre> - * - * Really though, you'll use views to set up multiple views: - * <pre> - * <div ui-view></div> - * <div ui-view="chart"></div> - * <div ui-view="data"></div> - * </pre> - * - * <pre> - * $stateProvider.state("home", { - * views: { - * "": { - * template: "<h1>HELLO!</h1>" - * }, - * "chart": { - * template: "<chart_thing/>" - * }, - * "data": { - * template: "<data_thing/>" - * } - * } - * }) - * </pre> - * - * Examples for `autoscroll`: - * - * <pre> - * <!-- If autoscroll present with no expression, - * then scroll ui-view into view --> - * <ui-view autoscroll/> - * - * <!-- If autoscroll present with valid expression, - * then scroll ui-view into view if expression evaluates to true --> - * <ui-view autoscroll='true'/> - * <ui-view autoscroll='false'/> - * <ui-view autoscroll='scopeVariable'/> - * </pre> - */ -$ViewDirective.$inject = ['$state', '$injector', '$uiViewScroll', '$interpolate']; -function $ViewDirective( $state, $injector, $uiViewScroll, $interpolate) { - - function getService() { - return ($injector.has) ? function(service) { - return $injector.has(service) ? $injector.get(service) : null; - } : function(service) { - try { - return $injector.get(service); - } catch (e) { - return null; - } - }; - } - - var service = getService(), - $animator = service('$animator'), - $animate = service('$animate'); - - // Returns a set of DOM manipulation functions based on which Angular version - // it should use - function getRenderer(attrs, scope) { - var statics = function() { - return { - enter: function (element, target, cb) { target.after(element); cb(); }, - leave: function (element, cb) { element.remove(); cb(); } - }; - }; - - if ($animate) { - return { - enter: function(element, target, cb) { - var promise = $animate.enter(element, null, target, cb); - if (promise && promise.then) promise.then(cb); - }, - leave: function(element, cb) { - var promise = $animate.leave(element, cb); - if (promise && promise.then) promise.then(cb); - } - }; - } - - if ($animator) { - var animate = $animator && $animator(scope, attrs); - - return { - enter: function(element, target, cb) {animate.enter(element, null, target); cb(); }, - leave: function(element, cb) { animate.leave(element); cb(); } - }; - } - - return statics(); - } - - var directive = { - restrict: 'ECA', - terminal: true, - priority: 400, - transclude: 'element', - compile: function (tElement, tAttrs, $transclude) { - return function (scope, $element, attrs) { - var previousEl, currentEl, currentScope, latestLocals, - onloadExp = attrs.onload || '', - autoScrollExp = attrs.autoscroll, - renderer = getRenderer(attrs, scope); - - scope.$on('$stateChangeSuccess', function() { - updateView(false); - }); - scope.$on('$viewContentLoading', function() { - updateView(false); - }); - - updateView(true); - - function cleanupLastView() { - if (previousEl) { - previousEl.remove(); - previousEl = null; - } - - if (currentScope) { - currentScope.$destroy(); - currentScope = null; - } - - if (currentEl) { - renderer.leave(currentEl, function() { - previousEl = null; - }); - - previousEl = currentEl; - currentEl = null; - } - } - - function updateView(firstTime) { - var newScope, - name = getUiViewName(scope, attrs, $element, $interpolate), - previousLocals = name && $state.$current && $state.$current.locals[name]; - - if (!firstTime && previousLocals === latestLocals) return; // nothing to do - newScope = scope.$new(); - latestLocals = $state.$current.locals[name]; - - var clone = $transclude(newScope, function(clone) { - renderer.enter(clone, $element, function onUiViewEnter() { - if(currentScope) { - currentScope.$emit('$viewContentAnimationEnded'); - } - - if (angular.isDefined(autoScrollExp) && !autoScrollExp || scope.$eval(autoScrollExp)) { - $uiViewScroll(clone); - } - }); - cleanupLastView(); - }); - - currentEl = clone; - currentScope = newScope; - /** - * @ngdoc event - * @name ui.router.state.directive:ui-view#$viewContentLoaded - * @eventOf ui.router.state.directive:ui-view - * @eventType emits on ui-view directive scope - * @description * - * Fired once the view is **loaded**, *after* the DOM is rendered. - * - * @param {Object} event Event object. - */ - currentScope.$emit('$viewContentLoaded'); - currentScope.$eval(onloadExp); - } - }; - } - }; - - return directive; -} - -$ViewDirectiveFill.$inject = ['$compile', '$controller', '$state', '$interpolate']; -function $ViewDirectiveFill ( $compile, $controller, $state, $interpolate) { - return { - restrict: 'ECA', - priority: -400, - compile: function (tElement) { - var initial = tElement.html(); - return function (scope, $element, attrs) { - var current = $state.$current, - name = getUiViewName(scope, attrs, $element, $interpolate), - locals = current && current.locals[name]; - - if (! locals) { - return; - } - - $element.data('$uiView', { name: name, state: locals.$$state }); - $element.html(locals.$template ? locals.$template : initial); - - var link = $compile($element.contents()); - - if (locals.$$controller) { - locals.$scope = scope; - locals.$element = $element; - var controller = $controller(locals.$$controller, locals); - if (locals.$$controllerAs) { - scope[locals.$$controllerAs] = controller; - } - $element.data('$ngControllerController', controller); - $element.children().data('$ngControllerController', controller); - } - - link(scope); - }; - } - }; -} - -/** - * Shared ui-view code for both directives: - * Given scope, element, and its attributes, return the view's name - */ -function getUiViewName(scope, attrs, element, $interpolate) { - var name = $interpolate(attrs.uiView || attrs.name || '')(scope); - var inherited = element.inheritedData('$uiView'); - return name.indexOf('@') >= 0 ? name : (name + '@' + (inherited ? inherited.state.name : '')); -} - -angular.module('ui.router.state').directive('uiView', $ViewDirective); -angular.module('ui.router.state').directive('uiView', $ViewDirectiveFill); - -function parseStateRef(ref, current) { - var preparsed = ref.match(/^\s*({[^}]*})\s*$/), parsed; - if (preparsed) ref = current + '(' + preparsed[1] + ')'; - parsed = ref.replace(/\n/g, " ").match(/^([^(]+?)\s*(\((.*)\))?$/); - if (!parsed || parsed.length !== 4) throw new Error("Invalid state ref '" + ref + "'"); - return { state: parsed[1], paramExpr: parsed[3] || null }; -} - -function stateContext(el) { - var stateData = el.parent().inheritedData('$uiView'); - - if (stateData && stateData.state && stateData.state.name) { - return stateData.state; - } -} - -/** - * @ngdoc directive - * @name ui.router.state.directive:ui-sref - * - * @requires ui.router.state.$state - * @requires $timeout - * - * @restrict A - * - * @description - * A directive that binds a link (`<a>` tag) to a state. If the state has an associated - * URL, the directive will automatically generate & update the `href` attribute via - * the {@link ui.router.state.$state#methods_href $state.href()} method. Clicking - * the link will trigger a state transition with optional parameters. - * - * Also middle-clicking, right-clicking, and ctrl-clicking on the link will be - * handled natively by the browser. - * - * You can also use relative state paths within ui-sref, just like the relative - * paths passed to `$state.go()`. You just need to be aware that the path is relative - * to the state that the link lives in, in other words the state that loaded the - * template containing the link. - * - * You can specify options to pass to {@link ui.router.state.$state#go $state.go()} - * using the `ui-sref-opts` attribute. Options are restricted to `location`, `inherit`, - * and `reload`. - * - * @example - * Here's an example of how you'd use ui-sref and how it would compile. If you have the - * following template: - * <pre> - * <a ui-sref="home">Home</a> | <a ui-sref="about">About</a> | <a ui-sref="{page: 2}">Next page</a> - * - * <ul> - * <li ng-repeat="contact in contacts"> - * <a ui-sref="contacts.detail({ id: contact.id })">{{ contact.name }}</a> - * </li> - * </ul> - * </pre> - * - * Then the compiled html would be (assuming Html5Mode is off and current state is contacts): - * <pre> - * <a href="#/home" ui-sref="home">Home</a> | <a href="#/about" ui-sref="about">About</a> | <a href="#/contacts?page=2" ui-sref="{page: 2}">Next page</a> - * - * <ul> - * <li ng-repeat="contact in contacts"> - * <a href="#/contacts/1" ui-sref="contacts.detail({ id: contact.id })">Joe</a> - * </li> - * <li ng-repeat="contact in contacts"> - * <a href="#/contacts/2" ui-sref="contacts.detail({ id: contact.id })">Alice</a> - * </li> - * <li ng-repeat="contact in contacts"> - * <a href="#/contacts/3" ui-sref="contacts.detail({ id: contact.id })">Bob</a> - * </li> - * </ul> - * - * <a ui-sref="home" ui-sref-opts="{reload: true}">Home</a> - * </pre> - * - * @param {string} ui-sref 'stateName' can be any valid absolute or relative state - * @param {Object} ui-sref-opts options to pass to {@link ui.router.state.$state#go $state.go()} - */ -$StateRefDirective.$inject = ['$state', '$timeout']; -function $StateRefDirective($state, $timeout) { - var allowedOptions = ['location', 'inherit', 'reload', 'absolute']; - - return { - restrict: 'A', - require: ['?^uiSrefActive', '?^uiSrefActiveEq'], - link: function(scope, element, attrs, uiSrefActive) { - var ref = parseStateRef(attrs.uiSref, $state.current.name); - var params = null, url = null, base = stateContext(element) || $state.$current; - // SVGAElement does not use the href attribute, but rather the 'xlinkHref' attribute. - var hrefKind = Object.prototype.toString.call(element.prop('href')) === '[object SVGAnimatedString]' ? - 'xlink:href' : 'href'; - var newHref = null, isAnchor = element.prop("tagName").toUpperCase() === "A"; - var isForm = element[0].nodeName === "FORM"; - var attr = isForm ? "action" : hrefKind, nav = true; - - var options = { relative: base, inherit: true }; - var optionsOverride = scope.$eval(attrs.uiSrefOpts) || {}; - - angular.forEach(allowedOptions, function(option) { - if (option in optionsOverride) { - options[option] = optionsOverride[option]; - } - }); - - var update = function(newVal) { - if (newVal) params = angular.copy(newVal); - if (!nav) return; - - newHref = $state.href(ref.state, params, options); - - var activeDirective = uiSrefActive[1] || uiSrefActive[0]; - if (activeDirective) { - activeDirective.$$addStateInfo(ref.state, params); - } - if (newHref === null) { - nav = false; - return false; - } - attrs.$set(attr, newHref); - }; - - if (ref.paramExpr) { - scope.$watch(ref.paramExpr, function(newVal, oldVal) { - if (newVal !== params) update(newVal); - }, true); - params = angular.copy(scope.$eval(ref.paramExpr)); - } - update(); - - if (isForm) return; - - element.bind("click", function(e) { - var button = e.which || e.button; - if ( !(button > 1 || e.ctrlKey || e.metaKey || e.shiftKey || element.attr('target')) ) { - // HACK: This is to allow ng-clicks to be processed before the transition is initiated: - var transition = $timeout(function() { - $state.go(ref.state, params, options); - }); - e.preventDefault(); - - // if the state has no URL, ignore one preventDefault from the <a> directive. - var ignorePreventDefaultCount = isAnchor && !newHref ? 1: 0; - e.preventDefault = function() { - if (ignorePreventDefaultCount-- <= 0) - $timeout.cancel(transition); - }; - } - }); - } - }; -} - -/** - * @ngdoc directive - * @name ui.router.state.directive:ui-sref-active - * - * @requires ui.router.state.$state - * @requires ui.router.state.$stateParams - * @requires $interpolate - * - * @restrict A - * - * @description - * A directive working alongside ui-sref to add classes to an element when the - * related ui-sref directive's state is active, and removing them when it is inactive. - * The primary use-case is to simplify the special appearance of navigation menus - * relying on `ui-sref`, by having the "active" state's menu button appear different, - * distinguishing it from the inactive menu items. - * - * ui-sref-active can live on the same element as ui-sref or on a parent element. The first - * ui-sref-active found at the same level or above the ui-sref will be used. - * - * Will activate when the ui-sref's target state or any child state is active. If you - * need to activate only when the ui-sref target state is active and *not* any of - * it's children, then you will use - * {@link ui.router.state.directive:ui-sref-active-eq ui-sref-active-eq} - * - * @example - * Given the following template: - * <pre> - * <ul> - * <li ui-sref-active="active" class="item"> - * <a href ui-sref="app.user({user: 'bilbobaggins'})">@bilbobaggins</a> - * </li> - * </ul> - * </pre> - * - * - * When the app state is "app.user" (or any children states), and contains the state parameter "user" with value "bilbobaggins", - * the resulting HTML will appear as (note the 'active' class): - * <pre> - * <ul> - * <li ui-sref-active="active" class="item active"> - * <a ui-sref="app.user({user: 'bilbobaggins'})" href="/users/bilbobaggins">@bilbobaggins</a> - * </li> - * </ul> - * </pre> - * - * The class name is interpolated **once** during the directives link time (any further changes to the - * interpolated value are ignored). - * - * Multiple classes may be specified in a space-separated format: - * <pre> - * <ul> - * <li ui-sref-active='class1 class2 class3'> - * <a ui-sref="app.user">link</a> - * </li> - * </ul> - * </pre> - */ - -/** - * @ngdoc directive - * @name ui.router.state.directive:ui-sref-active-eq - * - * @requires ui.router.state.$state - * @requires ui.router.state.$stateParams - * @requires $interpolate - * - * @restrict A - * - * @description - * The same as {@link ui.router.state.directive:ui-sref-active ui-sref-active} but will only activate - * when the exact target state used in the `ui-sref` is active; no child states. - * - */ -$StateRefActiveDirective.$inject = ['$state', '$stateParams', '$interpolate']; -function $StateRefActiveDirective($state, $stateParams, $interpolate) { - return { - restrict: "A", - controller: ['$scope', '$element', '$attrs', function ($scope, $element, $attrs) { - var states = [], activeClass; - - // There probably isn't much point in $observing this - // uiSrefActive and uiSrefActiveEq share the same directive object with some - // slight difference in logic routing - activeClass = $interpolate($attrs.uiSrefActiveEq || $attrs.uiSrefActive || '', false)($scope); - - // Allow uiSref to communicate with uiSrefActive[Equals] - this.$$addStateInfo = function (newState, newParams) { - var state = $state.get(newState, stateContext($element)); - - states.push({ - state: state || { name: newState }, - params: newParams - }); - - update(); - }; - - $scope.$on('$stateChangeSuccess', update); - - // Update route state - function update() { - if (anyMatch()) { - $element.addClass(activeClass); - } else { - $element.removeClass(activeClass); - } - } - - function anyMatch() { - for (var i = 0; i < states.length; i++) { - if (isMatch(states[i].state, states[i].params)) { - return true; - } - } - return false; - } - - function isMatch(state, params) { - if (typeof $attrs.uiSrefActiveEq !== 'undefined') { - return $state.is(state.name, params); - } else { - return $state.includes(state.name, params); - } - } - }] - }; -} - -angular.module('ui.router.state') - .directive('uiSref', $StateRefDirective) - .directive('uiSrefActive', $StateRefActiveDirective) - .directive('uiSrefActiveEq', $StateRefActiveDirective); - -/** - * @ngdoc filter - * @name ui.router.state.filter:isState - * - * @requires ui.router.state.$state - * - * @description - * Translates to {@link ui.router.state.$state#methods_is $state.is("stateName")}. - */ -$IsStateFilter.$inject = ['$state']; -function $IsStateFilter($state) { - var isFilter = function (state) { - return $state.is(state); - }; - isFilter.$stateful = true; - return isFilter; -} - -/** - * @ngdoc filter - * @name ui.router.state.filter:includedByState - * - * @requires ui.router.state.$state - * - * @description - * Translates to {@link ui.router.state.$state#methods_includes $state.includes('fullOrPartialStateName')}. - */ -$IncludedByStateFilter.$inject = ['$state']; -function $IncludedByStateFilter($state) { - var includesFilter = function (state) { - return $state.includes(state); - }; - includesFilter.$stateful = true; - return includesFilter; -} - -angular.module('ui.router.state') - .filter('isState', $IsStateFilter) - .filter('includedByState', $IncludedByStateFilter); -})(window, window.angular); \ No newline at end of file diff --git a/src/main/webapp/bower_components/angular-ui-router/release/angular-ui-router.min.js b/src/main/webapp/bower_components/angular-ui-router/release/angular-ui-router.min.js deleted file mode 100644 index 18d8307f..00000000 --- a/src/main/webapp/bower_components/angular-ui-router/release/angular-ui-router.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/** - * State-based routing for AngularJS - * @version v0.2.15 - * @link http://angular-ui.github.com/ - * @license MIT License, http://www.opensource.org/licenses/MIT - */ -"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(a,b,c){"use strict";function d(a,b){return N(new(N(function(){},{prototype:a})),b)}function e(a){return M(arguments,function(b){b!==a&&M(b,function(b,c){a.hasOwnProperty(c)||(a[c]=b)})}),a}function f(a,b){var c=[];for(var d in a.path){if(a.path[d]!==b.path[d])break;c.push(a.path[d])}return c}function g(a){if(Object.keys)return Object.keys(a);var b=[];return M(a,function(a,c){b.push(c)}),b}function h(a,b){if(Array.prototype.indexOf)return a.indexOf(b,Number(arguments[2])||0);var c=a.length>>>0,d=Number(arguments[2])||0;for(d=0>d?Math.ceil(d):Math.floor(d),0>d&&(d+=c);c>d;d++)if(d in a&&a[d]===b)return d;return-1}function i(a,b,c,d){var e,i=f(c,d),j={},k=[];for(var l in i)if(i[l].params&&(e=g(i[l].params),e.length))for(var m in e)h(k,e[m])>=0||(k.push(e[m]),j[e[m]]=a[e[m]]);return N({},j,b)}function j(a,b,c){if(!c){c=[];for(var d in a)c.push(d)}for(var e=0;e<c.length;e++){var f=c[e];if(a[f]!=b[f])return!1}return!0}function k(a,b){var c={};return M(a,function(a){c[a]=b[a]}),c}function l(a){var b={},c=Array.prototype.concat.apply(Array.prototype,Array.prototype.slice.call(arguments,1));return M(c,function(c){c in a&&(b[c]=a[c])}),b}function m(a){var b={},c=Array.prototype.concat.apply(Array.prototype,Array.prototype.slice.call(arguments,1));for(var d in a)-1==h(c,d)&&(b[d]=a[d]);return b}function n(a,b){var c=L(a),d=c?[]:{};return M(a,function(a,e){b(a,e)&&(d[c?d.length:e]=a)}),d}function o(a,b){var c=L(a)?[]:{};return M(a,function(a,d){c[d]=b(a,d)}),c}function p(a,b){var d=1,f=2,i={},j=[],k=i,l=N(a.when(i),{$$promises:i,$$values:i});this.study=function(i){function n(a,c){if(s[c]!==f){if(r.push(c),s[c]===d)throw r.splice(0,h(r,c)),new Error("Cyclic dependency: "+r.join(" -> "));if(s[c]=d,J(a))q.push(c,[function(){return b.get(a)}],j);else{var e=b.annotate(a);M(e,function(a){a!==c&&i.hasOwnProperty(a)&&n(i[a],a)}),q.push(c,a,e)}r.pop(),s[c]=f}}function o(a){return K(a)&&a.then&&a.$$promises}if(!K(i))throw new Error("'invocables' must be an object");var p=g(i||{}),q=[],r=[],s={};return M(i,n),i=r=s=null,function(d,f,g){function h(){--u||(v||e(t,f.$$values),r.$$values=t,r.$$promises=r.$$promises||!0,delete r.$$inheritedValues,n.resolve(t))}function i(a){r.$$failure=a,n.reject(a)}function j(c,e,f){function j(a){l.reject(a),i(a)}function k(){if(!H(r.$$failure))try{l.resolve(b.invoke(e,g,t)),l.promise.then(function(a){t[c]=a,h()},j)}catch(a){j(a)}}var l=a.defer(),m=0;M(f,function(a){s.hasOwnProperty(a)&&!d.hasOwnProperty(a)&&(m++,s[a].then(function(b){t[a]=b,--m||k()},j))}),m||k(),s[c]=l.promise}if(o(d)&&g===c&&(g=f,f=d,d=null),d){if(!K(d))throw new Error("'locals' must be an object")}else d=k;if(f){if(!o(f))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else f=l;var n=a.defer(),r=n.promise,s=r.$$promises={},t=N({},d),u=1+q.length/3,v=!1;if(H(f.$$failure))return i(f.$$failure),r;f.$$inheritedValues&&e(t,m(f.$$inheritedValues,p)),N(s,f.$$promises),f.$$values?(v=e(t,m(f.$$values,p)),r.$$inheritedValues=m(f.$$values,p),h()):(f.$$inheritedValues&&(r.$$inheritedValues=m(f.$$inheritedValues,p)),f.then(h,i));for(var w=0,x=q.length;x>w;w+=3)d.hasOwnProperty(q[w])?h():j(q[w],q[w+1],q[w+2]);return r}},this.resolve=function(a,b,c,d){return this.study(a)(b,c,d)}}function q(a,b,c){this.fromConfig=function(a,b,c){return H(a.template)?this.fromString(a.template,b):H(a.templateUrl)?this.fromUrl(a.templateUrl,b):H(a.templateProvider)?this.fromProvider(a.templateProvider,b,c):null},this.fromString=function(a,b){return I(a)?a(b):a},this.fromUrl=function(c,d){return I(c)&&(c=c(d)),null==c?null:a.get(c,{cache:b,headers:{Accept:"text/html"}}).then(function(a){return a.data})},this.fromProvider=function(a,b,d){return c.invoke(a,null,d||{params:b})}}function r(a,b,e){function f(b,c,d,e){if(q.push(b),o[b])return o[b];if(!/^\w+(-+\w+)*(?:\[\])?$/.test(b))throw new Error("Invalid parameter name '"+b+"' in pattern '"+a+"'");if(p[b])throw new Error("Duplicate parameter name '"+b+"' in pattern '"+a+"'");return p[b]=new P.Param(b,c,d,e),p[b]}function g(a,b,c,d){var e=["",""],f=a.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!b)return f;switch(c){case!1:e=["(",")"+(d?"?":"")];break;case!0:e=["?(",")?"];break;default:e=["("+c+"|",")?"]}return f+e[0]+b+e[1]}function h(e,f){var g,h,i,j,k;return g=e[2]||e[3],k=b.params[g],i=a.substring(m,e.index),h=f?e[4]:e[4]||("*"==e[1]?".*":null),j=P.type(h||"string")||d(P.type("string"),{pattern:new RegExp(h,b.caseInsensitive?"i":c)}),{id:g,regexp:h,segment:i,type:j,cfg:k}}b=N({params:{}},K(b)?b:{});var i,j=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,k=/([:]?)([\w\[\]-]+)|\{([\w\[\]-]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l="^",m=0,n=this.segments=[],o=e?e.params:{},p=this.params=e?e.params.$$new():new P.ParamSet,q=[];this.source=a;for(var r,s,t;(i=j.exec(a))&&(r=h(i,!1),!(r.segment.indexOf("?")>=0));)s=f(r.id,r.type,r.cfg,"path"),l+=g(r.segment,s.type.pattern.source,s.squash,s.isOptional),n.push(r.segment),m=j.lastIndex;t=a.substring(m);var u=t.indexOf("?");if(u>=0){var v=this.sourceSearch=t.substring(u);if(t=t.substring(0,u),this.sourcePath=a.substring(0,m+u),v.length>0)for(m=0;i=k.exec(v);)r=h(i,!0),s=f(r.id,r.type,r.cfg,"search"),m=j.lastIndex}else this.sourcePath=a,this.sourceSearch="";l+=g(t)+(b.strict===!1?"/?":"")+"$",n.push(t),this.regexp=new RegExp(l,b.caseInsensitive?"i":c),this.prefix=n[0],this.$$paramNames=q}function s(a){N(this,a)}function t(){function a(a){return null!=a?a.toString().replace(/\//g,"%2F"):a}function e(a){return null!=a?a.toString().replace(/%2F/g,"/"):a}function f(){return{strict:p,caseInsensitive:m}}function i(a){return I(a)||L(a)&&I(a[a.length-1])}function j(){for(;w.length;){var a=w.shift();if(a.pattern)throw new Error("You cannot override a type's .pattern at runtime.");b.extend(u[a.name],l.invoke(a.def))}}function k(a){N(this,a||{})}P=this;var l,m=!1,p=!0,q=!1,u={},v=!0,w=[],x={string:{encode:a,decode:e,is:function(a){return null==a||!H(a)||"string"==typeof a},pattern:/[^/]*/},"int":{encode:a,decode:function(a){return parseInt(a,10)},is:function(a){return H(a)&&this.decode(a.toString())===a},pattern:/\d+/},bool:{encode:function(a){return a?1:0},decode:function(a){return 0!==parseInt(a,10)},is:function(a){return a===!0||a===!1},pattern:/0|1/},date:{encode:function(a){return this.is(a)?[a.getFullYear(),("0"+(a.getMonth()+1)).slice(-2),("0"+a.getDate()).slice(-2)].join("-"):c},decode:function(a){if(this.is(a))return a;var b=this.capture.exec(a);return b?new Date(b[1],b[2]-1,b[3]):c},is:function(a){return a instanceof Date&&!isNaN(a.valueOf())},equals:function(a,b){return this.is(a)&&this.is(b)&&a.toISOString()===b.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:b.toJson,decode:b.fromJson,is:b.isObject,equals:b.equals,pattern:/[^/]*/},any:{encode:b.identity,decode:b.identity,equals:b.equals,pattern:/.*/}};t.$$getDefaultValue=function(a){if(!i(a.value))return a.value;if(!l)throw new Error("Injectable functions cannot be called at configuration time");return l.invoke(a.value)},this.caseInsensitive=function(a){return H(a)&&(m=a),m},this.strictMode=function(a){return H(a)&&(p=a),p},this.defaultSquashPolicy=function(a){if(!H(a))return q;if(a!==!0&&a!==!1&&!J(a))throw new Error("Invalid squash policy: "+a+". Valid policies: false, true, arbitrary-string");return q=a,a},this.compile=function(a,b){return new r(a,N(f(),b))},this.isMatcher=function(a){if(!K(a))return!1;var b=!0;return M(r.prototype,function(c,d){I(c)&&(b=b&&H(a[d])&&I(a[d]))}),b},this.type=function(a,b,c){if(!H(b))return u[a];if(u.hasOwnProperty(a))throw new Error("A type named '"+a+"' has already been defined.");return u[a]=new s(N({name:a},b)),c&&(w.push({name:a,def:c}),v||j()),this},M(x,function(a,b){u[b]=new s(N({name:b},a))}),u=d(u,{}),this.$get=["$injector",function(a){return l=a,v=!1,j(),M(x,function(a,b){u[b]||(u[b]=new s(a))}),this}],this.Param=function(a,b,d,e){function f(a){var b=K(a)?g(a):[],c=-1===h(b,"value")&&-1===h(b,"type")&&-1===h(b,"squash")&&-1===h(b,"array");return c&&(a={value:a}),a.$$fn=i(a.value)?a.value:function(){return a.value},a}function j(b,c,d){if(b.type&&c)throw new Error("Param '"+a+"' has two type configurations.");return c?c:b.type?b.type instanceof s?b.type:new s(b.type):"config"===d?u.any:u.string}function k(){var b={array:"search"===e?"auto":!1},c=a.match(/\[\]$/)?{array:!0}:{};return N(b,c,d).array}function m(a,b){var c=a.squash;if(!b||c===!1)return!1;if(!H(c)||null==c)return q;if(c===!0||J(c))return c;throw new Error("Invalid squash policy: '"+c+"'. Valid policies: false, true, or arbitrary string")}function p(a,b,d,e){var f,g,i=[{from:"",to:d||b?c:""},{from:null,to:d||b?c:""}];return f=L(a.replace)?a.replace:[],J(e)&&f.push({from:e,to:c}),g=o(f,function(a){return a.from}),n(i,function(a){return-1===h(g,a.from)}).concat(f)}function r(){if(!l)throw new Error("Injectable functions cannot be called at configuration time");var a=l.invoke(d.$$fn);if(null!==a&&a!==c&&!w.type.is(a))throw new Error("Default value ("+a+") for parameter '"+w.id+"' is not an instance of Type ("+w.type.name+")");return a}function t(a){function b(a){return function(b){return b.from===a}}function c(a){var c=o(n(w.replace,b(a)),function(a){return a.to});return c.length?c[0]:a}return a=c(a),H(a)?w.type.$normalize(a):r()}function v(){return"{Param:"+a+" "+b+" squash: '"+z+"' optional: "+y+"}"}var w=this;d=f(d),b=j(d,b,e);var x=k();b=x?b.$asArray(x,"search"===e):b,"string"!==b.name||x||"path"!==e||d.value!==c||(d.value="");var y=d.value!==c,z=m(d,y),A=p(d,x,y,z);N(this,{id:a,type:b,location:e,array:x,squash:z,replace:A,isOptional:y,value:t,dynamic:c,config:d,toString:v})},k.prototype={$$new:function(){return d(this,N(new k,{$$parent:this}))},$$keys:function(){for(var a=[],b=[],c=this,d=g(k.prototype);c;)b.push(c),c=c.$$parent;return b.reverse(),M(b,function(b){M(g(b),function(b){-1===h(a,b)&&-1===h(d,b)&&a.push(b)})}),a},$$values:function(a){var b={},c=this;return M(c.$$keys(),function(d){b[d]=c[d].value(a&&a[d])}),b},$$equals:function(a,b){var c=!0,d=this;return M(d.$$keys(),function(e){var f=a&&a[e],g=b&&b[e];d[e].type.equals(f,g)||(c=!1)}),c},$$validates:function(a){var d,e,f,g,h,i=this.$$keys();for(d=0;d<i.length&&(e=this[i[d]],f=a[i[d]],f!==c&&null!==f||!e.isOptional);d++){if(g=e.type.$normalize(f),!e.type.is(g))return!1;if(h=e.type.encode(g),b.isString(h)&&!e.type.pattern.exec(h))return!1}return!0},$$parent:c},this.ParamSet=k}function u(a,d){function e(a){var b=/^\^((?:\\[^a-zA-Z0-9]|[^\\\[\]\^$*+?.()|{}]+)*)/.exec(a.source);return null!=b?b[1].replace(/\\(.)/g,"$1"):""}function f(a,b){return a.replace(/\$(\$|\d{1,2})/,function(a,c){return b["$"===c?0:Number(c)]})}function g(a,b,c){if(!c)return!1;var d=a.invoke(b,b,{$match:c});return H(d)?d:!0}function h(d,e,f,g){function h(a,b,c){return"/"===p?a:b?p.slice(0,-1)+a:c?p.slice(1)+a:a}function m(a){function b(a){var b=a(f,d);return b?(J(b)&&d.replace().url(b),!0):!1}if(!a||!a.defaultPrevented){o&&d.url()===o;o=c;var e,g=j.length;for(e=0;g>e;e++)if(b(j[e]))return;k&&b(k)}}function n(){return i=i||e.$on("$locationChangeSuccess",m)}var o,p=g.baseHref(),q=d.url();return l||n(),{sync:function(){m()},listen:function(){return n()},update:function(a){return a?void(q=d.url()):void(d.url()!==q&&(d.url(q),d.replace()))},push:function(a,b,e){var f=a.format(b||{});null!==f&&b&&b["#"]&&(f+="#"+b["#"]),d.url(f),o=e&&e.$$avoidResync?d.url():c,e&&e.replace&&d.replace()},href:function(c,e,f){if(!c.validates(e))return null;var g=a.html5Mode();b.isObject(g)&&(g=g.enabled);var i=c.format(e);if(f=f||{},g||null===i||(i="#"+a.hashPrefix()+i),null!==i&&e&&e["#"]&&(i+="#"+e["#"]),i=h(i,g,f.absolute),!f.absolute||!i)return i;var j=!g&&i?"/":"",k=d.port();return k=80===k||443===k?"":":"+k,[d.protocol(),"://",d.host(),k,j,i].join("")}}}var i,j=[],k=null,l=!1;this.rule=function(a){if(!I(a))throw new Error("'rule' must be a function");return j.push(a),this},this.otherwise=function(a){if(J(a)){var b=a;a=function(){return b}}else if(!I(a))throw new Error("'rule' must be a function");return k=a,this},this.when=function(a,b){var c,h=J(b);if(J(a)&&(a=d.compile(a)),!h&&!I(b)&&!L(b))throw new Error("invalid 'handler' in when()");var i={matcher:function(a,b){return h&&(c=d.compile(b),b=["$match",function(a){return c.format(a)}]),N(function(c,d){return g(c,b,a.exec(d.path(),d.search()))},{prefix:J(a.prefix)?a.prefix:""})},regex:function(a,b){if(a.global||a.sticky)throw new Error("when() RegExp must not be global or sticky");return h&&(c=b,b=["$match",function(a){return f(c,a)}]),N(function(c,d){return g(c,b,a.exec(d.path()))},{prefix:e(a)})}},j={matcher:d.isMatcher(a),regex:a instanceof RegExp};for(var k in j)if(j[k])return this.rule(i[k](a,b));throw new Error("invalid 'what' in when()")},this.deferIntercept=function(a){a===c&&(a=!0),l=a},this.$get=h,h.$inject=["$location","$rootScope","$injector","$browser"]}function v(a,e){function f(a){return 0===a.indexOf(".")||0===a.indexOf("^")}function m(a,b){if(!a)return c;var d=J(a),e=d?a:a.name,g=f(e);if(g){if(!b)throw new Error("No reference point given for path '"+e+"'");b=m(b);for(var h=e.split("."),i=0,j=h.length,k=b;j>i;i++)if(""!==h[i]||0!==i){if("^"!==h[i])break;if(!k.parent)throw new Error("Path '"+e+"' not valid for state '"+b.name+"'");k=k.parent}else k=b;h=h.slice(i).join("."),e=k.name+(k.name&&h?".":"")+h}var l=z[e];return!l||!d&&(d||l!==a&&l.self!==a)?c:l}function n(a,b){A[a]||(A[a]=[]),A[a].push(b)}function p(a){for(var b=A[a]||[];b.length;)q(b.shift())}function q(b){b=d(b,{self:b,resolve:b.resolve||{},toString:function(){return this.name}});var c=b.name;if(!J(c)||c.indexOf("@")>=0)throw new Error("State must have a valid name");if(z.hasOwnProperty(c))throw new Error("State '"+c+"'' is already defined");var e=-1!==c.indexOf(".")?c.substring(0,c.lastIndexOf(".")):J(b.parent)?b.parent:K(b.parent)&&J(b.parent.name)?b.parent.name:"";if(e&&!z[e])return n(e,b.self);for(var f in C)I(C[f])&&(b[f]=C[f](b,C.$delegates[f]));return z[c]=b,!b[B]&&b.url&&a.when(b.url,["$match","$stateParams",function(a,c){y.$current.navigable==b&&j(a,c)||y.transitionTo(b,a,{inherit:!0,location:!1})}]),p(c),b}function r(a){return a.indexOf("*")>-1}function s(a){for(var b=a.split("."),c=y.$current.name.split("."),d=0,e=b.length;e>d;d++)"*"===b[d]&&(c[d]="*");return"**"===b[0]&&(c=c.slice(h(c,b[1])),c.unshift("**")),"**"===b[b.length-1]&&(c.splice(h(c,b[b.length-2])+1,Number.MAX_VALUE),c.push("**")),b.length!=c.length?!1:c.join("")===b.join("")}function t(a,b){return J(a)&&!H(b)?C[a]:I(b)&&J(a)?(C[a]&&!C.$delegates[a]&&(C.$delegates[a]=C[a]),C[a]=b,this):this}function u(a,b){return K(a)?b=a:b.name=a,q(b),this}function v(a,e,f,h,l,n,p,q,t){function u(b,c,d,f){var g=a.$broadcast("$stateNotFound",b,c,d);if(g.defaultPrevented)return p.update(),D;if(!g.retry)return null;if(f.$retry)return p.update(),E;var h=y.transition=e.when(g.retry);return h.then(function(){return h!==y.transition?A:(b.options.$retry=!0,y.transitionTo(b.to,b.toParams,b.options))},function(){return D}),p.update(),h}function v(a,c,d,g,i,j){function m(){var c=[];return M(a.views,function(d,e){var g=d.resolve&&d.resolve!==a.resolve?d.resolve:{};g.$template=[function(){return f.load(e,{view:d,locals:i.globals,params:n,notify:j.notify})||""}],c.push(l.resolve(g,i.globals,i.resolve,a).then(function(c){if(I(d.controllerProvider)||L(d.controllerProvider)){var f=b.extend({},g,i.globals);c.$$controller=h.invoke(d.controllerProvider,null,f)}else c.$$controller=d.controller;c.$$state=a,c.$$controllerAs=d.controllerAs,i[e]=c}))}),e.all(c).then(function(){return i.globals})}var n=d?c:k(a.params.$$keys(),c),o={$stateParams:n};i.resolve=l.resolve(a.resolve,o,i.resolve,a);var p=[i.resolve.then(function(a){i.globals=a})];return g&&p.push(g),e.all(p).then(m).then(function(a){return i})}var A=e.reject(new Error("transition superseded")),C=e.reject(new Error("transition prevented")),D=e.reject(new Error("transition aborted")),E=e.reject(new Error("transition failed"));return x.locals={resolve:null,globals:{$stateParams:{}}},y={params:{},current:x.self,$current:x,transition:null},y.reload=function(a){return y.transitionTo(y.current,n,{reload:a||!0,inherit:!1,notify:!0})},y.go=function(a,b,c){return y.transitionTo(a,b,N({inherit:!0,relative:y.$current},c))},y.transitionTo=function(b,c,f){c=c||{},f=N({location:!0,inherit:!1,relative:null,notify:!0,reload:!1,$retry:!1},f||{});var g,j=y.$current,l=y.params,o=j.path,q=m(b,f.relative),r=c["#"];if(!H(q)){var s={to:b,toParams:c,options:f},t=u(s,j.self,l,f);if(t)return t;if(b=s.to,c=s.toParams,f=s.options,q=m(b,f.relative),!H(q)){if(!f.relative)throw new Error("No such state '"+b+"'");throw new Error("Could not resolve '"+b+"' from state '"+f.relative+"'")}}if(q[B])throw new Error("Cannot transition to abstract state '"+b+"'");if(f.inherit&&(c=i(n,c||{},y.$current,q)),!q.params.$$validates(c))return E;c=q.params.$$values(c),b=q;var z=b.path,D=0,F=z[D],G=x.locals,I=[];if(f.reload){if(J(f.reload)||K(f.reload)){if(K(f.reload)&&!f.reload.name)throw new Error("Invalid reload state object");var L=f.reload===!0?o[0]:m(f.reload);if(f.reload&&!L)throw new Error("No such reload state '"+(J(f.reload)?f.reload:f.reload.name)+"'");for(;F&&F===o[D]&&F!==L;)G=I[D]=F.locals,D++,F=z[D]}}else for(;F&&F===o[D]&&F.ownParams.$$equals(c,l);)G=I[D]=F.locals,D++,F=z[D];if(w(b,c,j,l,G,f))return r&&(c["#"]=r),y.params=c,O(y.params,n),f.location&&b.navigable&&b.navigable.url&&(p.push(b.navigable.url,c,{$$avoidResync:!0,replace:"replace"===f.location}),p.update(!0)),y.transition=null,e.when(y.current);if(c=k(b.params.$$keys(),c||{}),f.notify&&a.$broadcast("$stateChangeStart",b.self,c,j.self,l).defaultPrevented)return a.$broadcast("$stateChangeCancel",b.self,c,j.self,l),p.update(),C;for(var M=e.when(G),P=D;P<z.length;P++,F=z[P])G=I[P]=d(G),M=v(F,c,F===b,M,G,f);var Q=y.transition=M.then(function(){var d,e,g;if(y.transition!==Q)return A;for(d=o.length-1;d>=D;d--)g=o[d],g.self.onExit&&h.invoke(g.self.onExit,g.self,g.locals.globals),g.locals=null;for(d=D;d<z.length;d++)e=z[d],e.locals=I[d],e.self.onEnter&&h.invoke(e.self.onEnter,e.self,e.locals.globals);return r&&(c["#"]=r),y.transition!==Q?A:(y.$current=b,y.current=b.self,y.params=c,O(y.params,n),y.transition=null,f.location&&b.navigable&&p.push(b.navigable.url,b.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===f.location}),f.notify&&a.$broadcast("$stateChangeSuccess",b.self,c,j.self,l),p.update(!0),y.current)},function(d){return y.transition!==Q?A:(y.transition=null,g=a.$broadcast("$stateChangeError",b.self,c,j.self,l,d),g.defaultPrevented||p.update(),e.reject(d))});return Q},y.is=function(a,b,d){d=N({relative:y.$current},d||{});var e=m(a,d.relative);return H(e)?y.$current!==e?!1:b?j(e.params.$$values(b),n):!0:c},y.includes=function(a,b,d){if(d=N({relative:y.$current},d||{}),J(a)&&r(a)){if(!s(a))return!1;a=y.$current.name}var e=m(a,d.relative);return H(e)?H(y.$current.includes[e.name])?b?j(e.params.$$values(b),n,g(b)):!0:!1:c},y.href=function(a,b,d){d=N({lossy:!0,inherit:!0,absolute:!1,relative:y.$current},d||{});var e=m(a,d.relative);if(!H(e))return null;d.inherit&&(b=i(n,b||{},y.$current,e));var f=e&&d.lossy?e.navigable:e;return f&&f.url!==c&&null!==f.url?p.href(f.url,k(e.params.$$keys().concat("#"),b||{}),{absolute:d.absolute}):null},y.get=function(a,b){if(0===arguments.length)return o(g(z),function(a){return z[a].self});var c=m(a,b||y.$current);return c&&c.self?c.self:null},y}function w(a,b,c,d,e,f){function g(a,b,c){function d(b){return"search"!=a.params[b].location}var e=a.params.$$keys().filter(d),f=l.apply({},[a.params].concat(e)),g=new P.ParamSet(f);return g.$$equals(b,c)}return!f.reload&&a===c&&(e===c.locals||a.self.reloadOnSearch===!1&&g(c,d,b))?!0:void 0}var x,y,z={},A={},B="abstract",C={parent:function(a){if(H(a.parent)&&a.parent)return m(a.parent);var b=/^(.+)\.[^.]+$/.exec(a.name);return b?m(b[1]):x},data:function(a){return a.parent&&a.parent.data&&(a.data=a.self.data=N({},a.parent.data,a.data)),a.data},url:function(a){var b=a.url,c={params:a.params||{}};if(J(b))return"^"==b.charAt(0)?e.compile(b.substring(1),c):(a.parent.navigable||x).url.concat(b,c);if(!b||e.isMatcher(b))return b;throw new Error("Invalid url '"+b+"' in state '"+a+"'")},navigable:function(a){return a.url?a:a.parent?a.parent.navigable:null},ownParams:function(a){var b=a.url&&a.url.params||new P.ParamSet;return M(a.params||{},function(a,c){b[c]||(b[c]=new P.Param(c,null,a,"config"))}),b},params:function(a){return a.parent&&a.parent.params?N(a.parent.params.$$new(),a.ownParams):new P.ParamSet},views:function(a){var b={};return M(H(a.views)?a.views:{"":a},function(c,d){d.indexOf("@")<0&&(d+="@"+a.parent.name),b[d]=c}),b},path:function(a){return a.parent?a.parent.path.concat(a):[]},includes:function(a){var b=a.parent?N({},a.parent.includes):{};return b[a.name]=!0,b},$delegates:{}};x=q({name:"",url:"^",views:null,"abstract":!0}),x.navigable=null,this.decorator=t,this.state=u,this.$get=v,v.$inject=["$rootScope","$q","$view","$injector","$resolve","$stateParams","$urlRouter","$location","$urlMatcherFactory"]}function w(){function a(a,b){return{load:function(c,d){var e,f={template:null,controller:null,view:null,locals:null,notify:!0,async:!0,params:{}};return d=N(f,d),d.view&&(e=b.fromConfig(d.view,d.params,d.locals)),e&&d.notify&&a.$broadcast("$viewContentLoading",d),e}}}this.$get=a,a.$inject=["$rootScope","$templateFactory"]}function x(){var a=!1;this.useAnchorScroll=function(){a=!0},this.$get=["$anchorScroll","$timeout",function(b,c){return a?b:function(a){return c(function(){a[0].scrollIntoView()},0,!1)}}]}function y(a,c,d,e){function f(){return c.has?function(a){return c.has(a)?c.get(a):null}:function(a){try{return c.get(a)}catch(b){return null}}}function g(a,b){var c=function(){return{enter:function(a,b,c){b.after(a),c()},leave:function(a,b){a.remove(),b()}}};if(j)return{enter:function(a,b,c){var d=j.enter(a,null,b,c);d&&d.then&&d.then(c)},leave:function(a,b){var c=j.leave(a,b);c&&c.then&&c.then(b)}};if(i){var d=i&&i(b,a);return{enter:function(a,b,c){d.enter(a,null,b),c()},leave:function(a,b){d.leave(a),b()}}}return c()}var h=f(),i=h("$animator"),j=h("$animate"),k={restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(c,f,h){return function(c,f,i){function j(){l&&(l.remove(),l=null),n&&(n.$destroy(),n=null),m&&(r.leave(m,function(){l=null}),l=m,m=null)}function k(g){var k,l=A(c,i,f,e),s=l&&a.$current&&a.$current.locals[l];if(g||s!==o){k=c.$new(),o=a.$current.locals[l];var t=h(k,function(a){r.enter(a,f,function(){n&&n.$emit("$viewContentAnimationEnded"),(b.isDefined(q)&&!q||c.$eval(q))&&d(a)}),j()});m=t,n=k,n.$emit("$viewContentLoaded"),n.$eval(p)}}var l,m,n,o,p=i.onload||"",q=i.autoscroll,r=g(i,c);c.$on("$stateChangeSuccess",function(){k(!1)}),c.$on("$viewContentLoading",function(){k(!1)}),k(!0)}}};return k}function z(a,b,c,d){return{restrict:"ECA",priority:-400,compile:function(e){var f=e.html();return function(e,g,h){var i=c.$current,j=A(e,h,g,d),k=i&&i.locals[j];if(k){g.data("$uiView",{name:j,state:k.$$state}),g.html(k.$template?k.$template:f);var l=a(g.contents());if(k.$$controller){k.$scope=e,k.$element=g;var m=b(k.$$controller,k);k.$$controllerAs&&(e[k.$$controllerAs]=m),g.data("$ngControllerController",m),g.children().data("$ngControllerController",m)}l(e)}}}}}function A(a,b,c,d){var e=d(b.uiView||b.name||"")(a),f=c.inheritedData("$uiView");return e.indexOf("@")>=0?e:e+"@"+(f?f.state.name:"")}function B(a,b){var c,d=a.match(/^\s*({[^}]*})\s*$/);if(d&&(a=b+"("+d[1]+")"),c=a.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/),!c||4!==c.length)throw new Error("Invalid state ref '"+a+"'");return{state:c[1],paramExpr:c[3]||null}}function C(a){var b=a.parent().inheritedData("$uiView");return b&&b.state&&b.state.name?b.state:void 0}function D(a,c){var d=["location","inherit","reload","absolute"];return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(e,f,g,h){var i=B(g.uiSref,a.current.name),j=null,k=C(f)||a.$current,l="[object SVGAnimatedString]"===Object.prototype.toString.call(f.prop("href"))?"xlink:href":"href",m=null,n="A"===f.prop("tagName").toUpperCase(),o="FORM"===f[0].nodeName,p=o?"action":l,q=!0,r={relative:k,inherit:!0},s=e.$eval(g.uiSrefOpts)||{};b.forEach(d,function(a){a in s&&(r[a]=s[a])});var t=function(c){if(c&&(j=b.copy(c)),q){m=a.href(i.state,j,r);var d=h[1]||h[0];return d&&d.$$addStateInfo(i.state,j),null===m?(q=!1,!1):void g.$set(p,m)}};i.paramExpr&&(e.$watch(i.paramExpr,function(a,b){a!==j&&t(a)},!0),j=b.copy(e.$eval(i.paramExpr))),t(),o||f.bind("click",function(b){var d=b.which||b.button;if(!(d>1||b.ctrlKey||b.metaKey||b.shiftKey||f.attr("target"))){var e=c(function(){a.go(i.state,j,r)});b.preventDefault();var g=n&&!m?1:0;b.preventDefault=function(){g--<=0&&c.cancel(e)}}})}}}function E(a,b,c){return{restrict:"A",controller:["$scope","$element","$attrs",function(b,d,e){function f(){g()?d.addClass(i):d.removeClass(i)}function g(){for(var a=0;a<j.length;a++)if(h(j[a].state,j[a].params))return!0;return!1}function h(b,c){return"undefined"!=typeof e.uiSrefActiveEq?a.is(b.name,c):a.includes(b.name,c)}var i,j=[];i=c(e.uiSrefActiveEq||e.uiSrefActive||"",!1)(b),this.$$addStateInfo=function(b,c){var e=a.get(b,C(d));j.push({state:e||{name:b},params:c}),f()},b.$on("$stateChangeSuccess",f)}]}}function F(a){var b=function(b){return a.is(b)};return b.$stateful=!0,b}function G(a){var b=function(b){return a.includes(b)};return b.$stateful=!0,b}var H=b.isDefined,I=b.isFunction,J=b.isString,K=b.isObject,L=b.isArray,M=b.forEach,N=b.extend,O=b.copy;b.module("ui.router.util",["ng"]),b.module("ui.router.router",["ui.router.util"]),b.module("ui.router.state",["ui.router.router","ui.router.util"]),b.module("ui.router",["ui.router.state"]),b.module("ui.router.compat",["ui.router"]),p.$inject=["$q","$injector"],b.module("ui.router.util").service("$resolve",p),q.$inject=["$http","$templateCache","$injector"],b.module("ui.router.util").service("$templateFactory",q);var P;r.prototype.concat=function(a,b){var c={caseInsensitive:P.caseInsensitive(),strict:P.strictMode(),squash:P.defaultSquashPolicy()};return new r(this.sourcePath+a+this.sourceSearch,N(c,b),this)},r.prototype.toString=function(){return this.source},r.prototype.exec=function(a,b){function c(a){function b(a){return a.split("").reverse().join("")}function c(a){return a.replace(/\\-/g,"-")}var d=b(a).split(/-(?!\\)/),e=o(d,b);return o(e,c).reverse()}var d=this.regexp.exec(a);if(!d)return null;b=b||{};var e,f,g,h=this.parameters(),i=h.length,j=this.segments.length-1,k={};if(j!==d.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");for(e=0;j>e;e++){g=h[e];var l=this.params[g],m=d[e+1];for(f=0;f<l.replace;f++)l.replace[f].from===m&&(m=l.replace[f].to);m&&l.array===!0&&(m=c(m)),k[g]=l.value(m)}for(;i>e;e++)g=h[e],k[g]=this.params[g].value(b[g]);return k},r.prototype.parameters=function(a){return H(a)?this.params[a]||null:this.$$paramNames},r.prototype.validates=function(a){return this.params.$$validates(a)},r.prototype.format=function(a){function b(a){return encodeURIComponent(a).replace(/-/g,function(a){return"%5C%"+a.charCodeAt(0).toString(16).toUpperCase()})}a=a||{};var c=this.segments,d=this.parameters(),e=this.params;if(!this.validates(a))return null;var f,g=!1,h=c.length-1,i=d.length,j=c[0];for(f=0;i>f;f++){var k=h>f,l=d[f],m=e[l],n=m.value(a[l]),p=m.isOptional&&m.type.equals(m.value(),n),q=p?m.squash:!1,r=m.type.encode(n);if(k){var s=c[f+1];if(q===!1)null!=r&&(j+=L(r)?o(r,b).join("-"):encodeURIComponent(r)),j+=s;else if(q===!0){var t=j.match(/\/$/)?/\/?(.*)/:/(.*)/;j+=s.match(t)[1]}else J(q)&&(j+=q+s)}else{if(null==r||p&&q!==!1)continue;L(r)||(r=[r]),r=o(r,encodeURIComponent).join("&"+l+"="),j+=(g?"&":"?")+(l+"="+r),g=!0}}return j},s.prototype.is=function(a,b){return!0},s.prototype.encode=function(a,b){return a},s.prototype.decode=function(a,b){return a},s.prototype.equals=function(a,b){return a==b},s.prototype.$subPattern=function(){var a=this.pattern.toString();return a.substr(1,a.length-2)},s.prototype.pattern=/.*/,s.prototype.toString=function(){return"{Type:"+this.name+"}"},s.prototype.$normalize=function(a){return this.is(a)?a:this.decode(a)},s.prototype.$asArray=function(a,b){function d(a,b){function d(a,b){return function(){return a[b].apply(a,arguments)}}function e(a){return L(a)?a:H(a)?[a]:[]}function f(a){switch(a.length){case 0:return c;case 1:return"auto"===b?a[0]:a;default:return a}}function g(a){return!a}function h(a,b){return function(c){c=e(c);var d=o(c,a);return b===!0?0===n(d,g).length:f(d)}}function i(a){return function(b,c){var d=e(b),f=e(c);if(d.length!==f.length)return!1;for(var g=0;g<d.length;g++)if(!a(d[g],f[g]))return!1;return!0}}this.encode=h(d(a,"encode")),this.decode=h(d(a,"decode")),this.is=h(d(a,"is"),!0),this.equals=i(d(a,"equals")),this.pattern=a.pattern,this.$normalize=h(d(a,"$normalize")),this.name=a.name,this.$arrayMode=b}if(!a)return this;if("auto"===a&&!b)throw new Error("'auto' array mode is for query parameters only");return new d(this,a)},b.module("ui.router.util").provider("$urlMatcherFactory",t),b.module("ui.router.util").run(["$urlMatcherFactory",function(a){}]),u.$inject=["$locationProvider","$urlMatcherFactoryProvider"],b.module("ui.router.router").provider("$urlRouter",u),v.$inject=["$urlRouterProvider","$urlMatcherFactoryProvider"],b.module("ui.router.state").value("$stateParams",{}).provider("$state",v),w.$inject=[],b.module("ui.router.state").provider("$view",w),b.module("ui.router.state").provider("$uiViewScroll",x),y.$inject=["$state","$injector","$uiViewScroll","$interpolate"],z.$inject=["$compile","$controller","$state","$interpolate"],b.module("ui.router.state").directive("uiView",y),b.module("ui.router.state").directive("uiView",z),D.$inject=["$state","$timeout"],E.$inject=["$state","$stateParams","$interpolate"],b.module("ui.router.state").directive("uiSref",D).directive("uiSrefActive",E).directive("uiSrefActiveEq",E),F.$inject=["$state"],G.$inject=["$state"],b.module("ui.router.state").filter("isState",F).filter("includedByState",G)}(window,window.angular); \ No newline at end of file diff --git a/src/main/webapp/bower_components/angular-ui-router/src/common.js b/src/main/webapp/bower_components/angular-ui-router/src/common.js deleted file mode 100644 index a85ff9e7..00000000 --- a/src/main/webapp/bower_components/angular-ui-router/src/common.js +++ /dev/null @@ -1,292 +0,0 @@ -/*jshint globalstrict:true*/ -/*global angular:false*/ -'use strict'; - -var isDefined = angular.isDefined, - isFunction = angular.isFunction, - isString = angular.isString, - isObject = angular.isObject, - isArray = angular.isArray, - forEach = angular.forEach, - extend = angular.extend, - copy = angular.copy; - -function inherit(parent, extra) { - return extend(new (extend(function() {}, { prototype: parent }))(), extra); -} - -function merge(dst) { - forEach(arguments, function(obj) { - if (obj !== dst) { - forEach(obj, function(value, key) { - if (!dst.hasOwnProperty(key)) dst[key] = value; - }); - } - }); - return dst; -} - -/** - * Finds the common ancestor path between two states. - * - * @param {Object} first The first state. - * @param {Object} second The second state. - * @return {Array} Returns an array of state names in descending order, not including the root. - */ -function ancestors(first, second) { - var path = []; - - for (var n in first.path) { - if (first.path[n] !== second.path[n]) break; - path.push(first.path[n]); - } - return path; -} - -/** - * IE8-safe wrapper for `Object.keys()`. - * - * @param {Object} object A JavaScript object. - * @return {Array} Returns the keys of the object as an array. - */ -function objectKeys(object) { - if (Object.keys) { - return Object.keys(object); - } - var result = []; - - forEach(object, function(val, key) { - result.push(key); - }); - return result; -} - -/** - * IE8-safe wrapper for `Array.prototype.indexOf()`. - * - * @param {Array} array A JavaScript array. - * @param {*} value A value to search the array for. - * @return {Number} Returns the array index value of `value`, or `-1` if not present. - */ -function indexOf(array, value) { - if (Array.prototype.indexOf) { - return array.indexOf(value, Number(arguments[2]) || 0); - } - var len = array.length >>> 0, from = Number(arguments[2]) || 0; - from = (from < 0) ? Math.ceil(from) : Math.floor(from); - - if (from < 0) from += len; - - for (; from < len; from++) { - if (from in array && array[from] === value) return from; - } - return -1; -} - -/** - * Merges a set of parameters with all parameters inherited between the common parents of the - * current state and a given destination state. - * - * @param {Object} currentParams The value of the current state parameters ($stateParams). - * @param {Object} newParams The set of parameters which will be composited with inherited params. - * @param {Object} $current Internal definition of object representing the current state. - * @param {Object} $to Internal definition of object representing state to transition to. - */ -function inheritParams(currentParams, newParams, $current, $to) { - var parents = ancestors($current, $to), parentParams, inherited = {}, inheritList = []; - - for (var i in parents) { - if (!parents[i].params) continue; - parentParams = objectKeys(parents[i].params); - if (!parentParams.length) continue; - - for (var j in parentParams) { - if (indexOf(inheritList, parentParams[j]) >= 0) continue; - inheritList.push(parentParams[j]); - inherited[parentParams[j]] = currentParams[parentParams[j]]; - } - } - return extend({}, inherited, newParams); -} - -/** - * Performs a non-strict comparison of the subset of two objects, defined by a list of keys. - * - * @param {Object} a The first object. - * @param {Object} b The second object. - * @param {Array} keys The list of keys within each object to compare. If the list is empty or not specified, - * it defaults to the list of keys in `a`. - * @return {Boolean} Returns `true` if the keys match, otherwise `false`. - */ -function equalForKeys(a, b, keys) { - if (!keys) { - keys = []; - for (var n in a) keys.push(n); // Used instead of Object.keys() for IE8 compatibility - } - - for (var i=0; i<keys.length; i++) { - var k = keys[i]; - if (a[k] != b[k]) return false; // Not '===', values aren't necessarily normalized - } - return true; -} - -/** - * Returns the subset of an object, based on a list of keys. - * - * @param {Array} keys - * @param {Object} values - * @return {Boolean} Returns a subset of `values`. - */ -function filterByKeys(keys, values) { - var filtered = {}; - - forEach(keys, function (name) { - filtered[name] = values[name]; - }); - return filtered; -} - -// like _.indexBy -// when you know that your index values will be unique, or you want last-one-in to win -function indexBy(array, propName) { - var result = {}; - forEach(array, function(item) { - result[item[propName]] = item; - }); - return result; -} - -// extracted from underscore.js -// Return a copy of the object only containing the whitelisted properties. -function pick(obj) { - var copy = {}; - var keys = Array.prototype.concat.apply(Array.prototype, Array.prototype.slice.call(arguments, 1)); - forEach(keys, function(key) { - if (key in obj) copy[key] = obj[key]; - }); - return copy; -} - -// extracted from underscore.js -// Return a copy of the object omitting the blacklisted properties. -function omit(obj) { - var copy = {}; - var keys = Array.prototype.concat.apply(Array.prototype, Array.prototype.slice.call(arguments, 1)); - for (var key in obj) { - if (indexOf(keys, key) == -1) copy[key] = obj[key]; - } - return copy; -} - -function pluck(collection, key) { - var result = isArray(collection) ? [] : {}; - - forEach(collection, function(val, i) { - result[i] = isFunction(key) ? key(val) : val[key]; - }); - return result; -} - -function filter(collection, callback) { - var array = isArray(collection); - var result = array ? [] : {}; - forEach(collection, function(val, i) { - if (callback(val, i)) { - result[array ? result.length : i] = val; - } - }); - return result; -} - -function map(collection, callback) { - var result = isArray(collection) ? [] : {}; - - forEach(collection, function(val, i) { - result[i] = callback(val, i); - }); - return result; -} - -/** - * @ngdoc overview - * @name ui.router.util - * - * @description - * # ui.router.util sub-module - * - * This module is a dependency of other sub-modules. Do not include this module as a dependency - * in your angular app (use {@link ui.router} module instead). - * - */ -angular.module('ui.router.util', ['ng']); - -/** - * @ngdoc overview - * @name ui.router.router - * - * @requires ui.router.util - * - * @description - * # ui.router.router sub-module - * - * This module is a dependency of other sub-modules. Do not include this module as a dependency - * in your angular app (use {@link ui.router} module instead). - */ -angular.module('ui.router.router', ['ui.router.util']); - -/** - * @ngdoc overview - * @name ui.router.state - * - * @requires ui.router.router - * @requires ui.router.util - * - * @description - * # ui.router.state sub-module - * - * This module is a dependency of the main ui.router module. Do not include this module as a dependency - * in your angular app (use {@link ui.router} module instead). - * - */ -angular.module('ui.router.state', ['ui.router.router', 'ui.router.util']); - -/** - * @ngdoc overview - * @name ui.router - * - * @requires ui.router.state - * - * @description - * # ui.router - * - * ## The main module for ui.router - * There are several sub-modules included with the ui.router module, however only this module is needed - * as a dependency within your angular app. The other modules are for organization purposes. - * - * The modules are: - * * ui.router - the main "umbrella" module - * * ui.router.router - - * - * *You'll need to include **only** this module as the dependency within your angular app.* - * - * <pre> - * <!doctype html> - * <html ng-app="myApp"> - * <head> - * <script src="js/angular.js"></script> - * <!-- Include the ui-router script --> - * <script src="js/angular-ui-router.min.js"></script> - * <script> - * // ...and add 'ui.router' as a dependency - * var myApp = angular.module('myApp', ['ui.router']); - * </script> - * </head> - * <body> - * </body> - * </html> - * </pre> - */ -angular.module('ui.router', ['ui.router.state']); - -angular.module('ui.router.compat', ['ui.router']); diff --git a/src/main/webapp/bower_components/angular-ui-router/src/resolve.js b/src/main/webapp/bower_components/angular-ui-router/src/resolve.js deleted file mode 100644 index f1c17900..00000000 --- a/src/main/webapp/bower_components/angular-ui-router/src/resolve.js +++ /dev/null @@ -1,252 +0,0 @@ -/** - * @ngdoc object - * @name ui.router.util.$resolve - * - * @requires $q - * @requires $injector - * - * @description - * Manages resolution of (acyclic) graphs of promises. - */ -$Resolve.$inject = ['$q', '$injector']; -function $Resolve( $q, $injector) { - - var VISIT_IN_PROGRESS = 1, - VISIT_DONE = 2, - NOTHING = {}, - NO_DEPENDENCIES = [], - NO_LOCALS = NOTHING, - NO_PARENT = extend($q.when(NOTHING), { $$promises: NOTHING, $$values: NOTHING }); - - - /** - * @ngdoc function - * @name ui.router.util.$resolve#study - * @methodOf ui.router.util.$resolve - * - * @description - * Studies a set of invocables that are likely to be used multiple times. - * <pre> - * $resolve.study(invocables)(locals, parent, self) - * </pre> - * is equivalent to - * <pre> - * $resolve.resolve(invocables, locals, parent, self) - * </pre> - * but the former is more efficient (in fact `resolve` just calls `study` - * internally). - * - * @param {object} invocables Invocable objects - * @return {function} a function to pass in locals, parent and self - */ - this.study = function (invocables) { - if (!isObject(invocables)) throw new Error("'invocables' must be an object"); - var invocableKeys = objectKeys(invocables || {}); - - // Perform a topological sort of invocables to build an ordered plan - var plan = [], cycle = [], visited = {}; - function visit(value, key) { - if (visited[key] === VISIT_DONE) return; - - cycle.push(key); - if (visited[key] === VISIT_IN_PROGRESS) { - cycle.splice(0, indexOf(cycle, key)); - throw new Error("Cyclic dependency: " + cycle.join(" -> ")); - } - visited[key] = VISIT_IN_PROGRESS; - - if (isString(value)) { - plan.push(key, [ function() { return $injector.get(value); }], NO_DEPENDENCIES); - } else { - var params = $injector.annotate(value); - forEach(params, function (param) { - if (param !== key && invocables.hasOwnProperty(param)) visit(invocables[param], param); - }); - plan.push(key, value, params); - } - - cycle.pop(); - visited[key] = VISIT_DONE; - } - forEach(invocables, visit); - invocables = cycle = visited = null; // plan is all that's required - - function isResolve(value) { - return isObject(value) && value.then && value.$$promises; - } - - return function (locals, parent, self) { - if (isResolve(locals) && self === undefined) { - self = parent; parent = locals; locals = null; - } - if (!locals) locals = NO_LOCALS; - else if (!isObject(locals)) { - throw new Error("'locals' must be an object"); - } - if (!parent) parent = NO_PARENT; - else if (!isResolve(parent)) { - throw new Error("'parent' must be a promise returned by $resolve.resolve()"); - } - - // To complete the overall resolution, we have to wait for the parent - // promise and for the promise for each invokable in our plan. - var resolution = $q.defer(), - result = resolution.promise, - promises = result.$$promises = {}, - values = extend({}, locals), - wait = 1 + plan.length/3, - merged = false; - - function done() { - // Merge parent values we haven't got yet and publish our own $$values - if (!--wait) { - if (!merged) merge(values, parent.$$values); - result.$$values = values; - result.$$promises = result.$$promises || true; // keep for isResolve() - delete result.$$inheritedValues; - resolution.resolve(values); - } - } - - function fail(reason) { - result.$$failure = reason; - resolution.reject(reason); - } - - // Short-circuit if parent has already failed - if (isDefined(parent.$$failure)) { - fail(parent.$$failure); - return result; - } - - if (parent.$$inheritedValues) { - merge(values, omit(parent.$$inheritedValues, invocableKeys)); - } - - // Merge parent values if the parent has already resolved, or merge - // parent promises and wait if the parent resolve is still in progress. - extend(promises, parent.$$promises); - if (parent.$$values) { - merged = merge(values, omit(parent.$$values, invocableKeys)); - result.$$inheritedValues = omit(parent.$$values, invocableKeys); - done(); - } else { - if (parent.$$inheritedValues) { - result.$$inheritedValues = omit(parent.$$inheritedValues, invocableKeys); - } - parent.then(done, fail); - } - - // Process each invocable in the plan, but ignore any where a local of the same name exists. - for (var i=0, ii=plan.length; i<ii; i+=3) { - if (locals.hasOwnProperty(plan[i])) done(); - else invoke(plan[i], plan[i+1], plan[i+2]); - } - - function invoke(key, invocable, params) { - // Create a deferred for this invocation. Failures will propagate to the resolution as well. - var invocation = $q.defer(), waitParams = 0; - function onfailure(reason) { - invocation.reject(reason); - fail(reason); - } - // Wait for any parameter that we have a promise for (either from parent or from this - // resolve; in that case study() will have made sure it's ordered before us in the plan). - forEach(params, function (dep) { - if (promises.hasOwnProperty(dep) && !locals.hasOwnProperty(dep)) { - waitParams++; - promises[dep].then(function (result) { - values[dep] = result; - if (!(--waitParams)) proceed(); - }, onfailure); - } - }); - if (!waitParams) proceed(); - function proceed() { - if (isDefined(result.$$failure)) return; - try { - invocation.resolve($injector.invoke(invocable, self, values)); - invocation.promise.then(function (result) { - values[key] = result; - done(); - }, onfailure); - } catch (e) { - onfailure(e); - } - } - // Publish promise synchronously; invocations further down in the plan may depend on it. - promises[key] = invocation.promise; - } - - return result; - }; - }; - - /** - * @ngdoc function - * @name ui.router.util.$resolve#resolve - * @methodOf ui.router.util.$resolve - * - * @description - * Resolves a set of invocables. An invocable is a function to be invoked via - * `$injector.invoke()`, and can have an arbitrary number of dependencies. - * An invocable can either return a value directly, - * or a `$q` promise. If a promise is returned it will be resolved and the - * resulting value will be used instead. Dependencies of invocables are resolved - * (in this order of precedence) - * - * - from the specified `locals` - * - from another invocable that is part of this `$resolve` call - * - from an invocable that is inherited from a `parent` call to `$resolve` - * (or recursively - * - from any ancestor `$resolve` of that parent). - * - * The return value of `$resolve` is a promise for an object that contains - * (in this order of precedence) - * - * - any `locals` (if specified) - * - the resolved return values of all injectables - * - any values inherited from a `parent` call to `$resolve` (if specified) - * - * The promise will resolve after the `parent` promise (if any) and all promises - * returned by injectables have been resolved. If any invocable - * (or `$injector.invoke`) throws an exception, or if a promise returned by an - * invocable is rejected, the `$resolve` promise is immediately rejected with the - * same error. A rejection of a `parent` promise (if specified) will likewise be - * propagated immediately. Once the `$resolve` promise has been rejected, no - * further invocables will be called. - * - * Cyclic dependencies between invocables are not permitted and will caues `$resolve` - * to throw an error. As a special case, an injectable can depend on a parameter - * with the same name as the injectable, which will be fulfilled from the `parent` - * injectable of the same name. This allows inherited values to be decorated. - * Note that in this case any other injectable in the same `$resolve` with the same - * dependency would see the decorated value, not the inherited value. - * - * Note that missing dependencies -- unlike cyclic dependencies -- will cause an - * (asynchronous) rejection of the `$resolve` promise rather than a (synchronous) - * exception. - * - * Invocables are invoked eagerly as soon as all dependencies are available. - * This is true even for dependencies inherited from a `parent` call to `$resolve`. - * - * As a special case, an invocable can be a string, in which case it is taken to - * be a service name to be passed to `$injector.get()`. This is supported primarily - * for backwards-compatibility with the `resolve` property of `$routeProvider` - * routes. - * - * @param {object} invocables functions to invoke or - * `$injector` services to fetch. - * @param {object} locals values to make available to the injectables - * @param {object} parent a promise returned by another call to `$resolve`. - * @param {object} self the `this` for the invoked methods - * @return {object} Promise for an object that contains the resolved return value - * of all invocables, as well as any inherited and local values. - */ - this.resolve = function (invocables, locals, parent, self) { - return this.study(invocables)(locals, parent, self); - }; -} - -angular.module('ui.router.util').service('$resolve', $Resolve); - diff --git a/src/main/webapp/bower_components/angular-ui-router/src/state.js b/src/main/webapp/bower_components/angular-ui-router/src/state.js deleted file mode 100644 index 56ee5a05..00000000 --- a/src/main/webapp/bower_components/angular-ui-router/src/state.js +++ /dev/null @@ -1,1465 +0,0 @@ -/** - * @ngdoc object - * @name ui.router.state.$stateProvider - * - * @requires ui.router.router.$urlRouterProvider - * @requires ui.router.util.$urlMatcherFactoryProvider - * - * @description - * The new `$stateProvider` works similar to Angular's v1 router, but it focuses purely - * on state. - * - * A state corresponds to a "place" in the application in terms of the overall UI and - * navigation. A state describes (via the controller / template / view properties) what - * the UI looks like and does at that place. - * - * States often have things in common, and the primary way of factoring out these - * commonalities in this model is via the state hierarchy, i.e. parent/child states aka - * nested states. - * - * The `$stateProvider` provides interfaces to declare these states for your app. - */ -$StateProvider.$inject = ['$urlRouterProvider', '$urlMatcherFactoryProvider']; -function $StateProvider( $urlRouterProvider, $urlMatcherFactory) { - - var root, states = {}, $state, queue = {}, abstractKey = 'abstract'; - - // Builds state properties from definition passed to registerState() - var stateBuilder = { - - // Derive parent state from a hierarchical name only if 'parent' is not explicitly defined. - // state.children = []; - // if (parent) parent.children.push(state); - parent: function(state) { - if (isDefined(state.parent) && state.parent) return findState(state.parent); - // regex matches any valid composite state name - // would match "contact.list" but not "contacts" - var compositeName = /^(.+)\.[^.]+$/.exec(state.name); - return compositeName ? findState(compositeName[1]) : root; - }, - - // inherit 'data' from parent and override by own values (if any) - data: function(state) { - if (state.parent && state.parent.data) { - state.data = state.self.data = extend({}, state.parent.data, state.data); - } - return state.data; - }, - - // Build a URLMatcher if necessary, either via a relative or absolute URL - url: function(state) { - var url = state.url, config = { params: state.params || {} }; - - if (isString(url)) { - if (url.charAt(0) == '^') return $urlMatcherFactory.compile(url.substring(1), config); - return (state.parent.navigable || root).url.concat(url, config); - } - - if (!url || $urlMatcherFactory.isMatcher(url)) return url; - throw new Error("Invalid url '" + url + "' in state '" + state + "'"); - }, - - // Keep track of the closest ancestor state that has a URL (i.e. is navigable) - navigable: function(state) { - return state.url ? state : (state.parent ? state.parent.navigable : null); - }, - - // Own parameters for this state. state.url.params is already built at this point. Create and add non-url params - ownParams: function(state) { - var params = state.url && state.url.params || new $$UMFP.ParamSet(); - forEach(state.params || {}, function(config, id) { - if (!params[id]) params[id] = new $$UMFP.Param(id, null, config, "config"); - }); - return params; - }, - - // Derive parameters for this state and ensure they're a super-set of parent's parameters - params: function(state) { - return state.parent && state.parent.params ? extend(state.parent.params.$$new(), state.ownParams) : new $$UMFP.ParamSet(); - }, - - // If there is no explicit multi-view configuration, make one up so we don't have - // to handle both cases in the view directive later. Note that having an explicit - // 'views' property will mean the default unnamed view properties are ignored. This - // is also a good time to resolve view names to absolute names, so everything is a - // straight lookup at link time. - views: function(state) { - var views = {}; - - forEach(isDefined(state.views) ? state.views : { '': state }, function (view, name) { - if (name.indexOf('@') < 0) name += '@' + state.parent.name; - views[name] = view; - }); - return views; - }, - - // Keep a full path from the root down to this state as this is needed for state activation. - path: function(state) { - return state.parent ? state.parent.path.concat(state) : []; // exclude root from path - }, - - // Speed up $state.contains() as it's used a lot - includes: function(state) { - var includes = state.parent ? extend({}, state.parent.includes) : {}; - includes[state.name] = true; - return includes; - }, - - $delegates: {} - }; - - function isRelative(stateName) { - return stateName.indexOf(".") === 0 || stateName.indexOf("^") === 0; - } - - function findState(stateOrName, base) { - if (!stateOrName) return undefined; - - var isStr = isString(stateOrName), - name = isStr ? stateOrName : stateOrName.name, - path = isRelative(name); - - if (path) { - if (!base) throw new Error("No reference point given for path '" + name + "'"); - base = findState(base); - - var rel = name.split("."), i = 0, pathLength = rel.length, current = base; - - for (; i < pathLength; i++) { - if (rel[i] === "" && i === 0) { - current = base; - continue; - } - if (rel[i] === "^") { - if (!current.parent) throw new Error("Path '" + name + "' not valid for state '" + base.name + "'"); - current = current.parent; - continue; - } - break; - } - rel = rel.slice(i).join("."); - name = current.name + (current.name && rel ? "." : "") + rel; - } - var state = states[name]; - - if (state && (isStr || (!isStr && (state === stateOrName || state.self === stateOrName)))) { - return state; - } - return undefined; - } - - function queueState(parentName, state) { - if (!queue[parentName]) { - queue[parentName] = []; - } - queue[parentName].push(state); - } - - function flushQueuedChildren(parentName) { - var queued = queue[parentName] || []; - while(queued.length) { - registerState(queued.shift()); - } - } - - function registerState(state) { - // Wrap a new object around the state so we can store our private details easily. - state = inherit(state, { - self: state, - resolve: state.resolve || {}, - toString: function() { return this.name; } - }); - - var name = state.name; - if (!isString(name) || name.indexOf('@') >= 0) throw new Error("State must have a valid name"); - if (states.hasOwnProperty(name)) throw new Error("State '" + name + "'' is already defined"); - - // Get parent name - var parentName = (name.indexOf('.') !== -1) ? name.substring(0, name.lastIndexOf('.')) - : (isString(state.parent)) ? state.parent - : (isObject(state.parent) && isString(state.parent.name)) ? state.parent.name - : ''; - - // If parent is not registered yet, add state to queue and register later - if (parentName && !states[parentName]) { - return queueState(parentName, state.self); - } - - for (var key in stateBuilder) { - if (isFunction(stateBuilder[key])) state[key] = stateBuilder[key](state, stateBuilder.$delegates[key]); - } - states[name] = state; - - // Register the state in the global state list and with $urlRouter if necessary. - if (!state[abstractKey] && state.url) { - $urlRouterProvider.when(state.url, ['$match', '$stateParams', function ($match, $stateParams) { - if ($state.$current.navigable != state || !equalForKeys($match, $stateParams)) { - $state.transitionTo(state, $match, { inherit: true, location: false }); - } - }]); - } - - // Register any queued children - flushQueuedChildren(name); - - return state; - } - - // Checks text to see if it looks like a glob. - function isGlob (text) { - return text.indexOf('*') > -1; - } - - // Returns true if glob matches current $state name. - function doesStateMatchGlob (glob) { - var globSegments = glob.split('.'), - segments = $state.$current.name.split('.'); - - //match single stars - for (var i = 0, l = globSegments.length; i < l; i++) { - if (globSegments[i] === '*') { - segments[i] = '*'; - } - } - - //match greedy starts - if (globSegments[0] === '**') { - segments = segments.slice(indexOf(segments, globSegments[1])); - segments.unshift('**'); - } - //match greedy ends - if (globSegments[globSegments.length - 1] === '**') { - segments.splice(indexOf(segments, globSegments[globSegments.length - 2]) + 1, Number.MAX_VALUE); - segments.push('**'); - } - - if (globSegments.length != segments.length) { - return false; - } - - return segments.join('') === globSegments.join(''); - } - - - // Implicit root state that is always active - root = registerState({ - name: '', - url: '^', - views: null, - 'abstract': true - }); - root.navigable = null; - - - /** - * @ngdoc function - * @name ui.router.state.$stateProvider#decorator - * @methodOf ui.router.state.$stateProvider - * - * @description - * Allows you to extend (carefully) or override (at your own peril) the - * `stateBuilder` object used internally by `$stateProvider`. This can be used - * to add custom functionality to ui-router, for example inferring templateUrl - * based on the state name. - * - * When passing only a name, it returns the current (original or decorated) builder - * function that matches `name`. - * - * The builder functions that can be decorated are listed below. Though not all - * necessarily have a good use case for decoration, that is up to you to decide. - * - * In addition, users can attach custom decorators, which will generate new - * properties within the state's internal definition. There is currently no clear - * use-case for this beyond accessing internal states (i.e. $state.$current), - * however, expect this to become increasingly relevant as we introduce additional - * meta-programming features. - * - * **Warning**: Decorators should not be interdependent because the order of - * execution of the builder functions in non-deterministic. Builder functions - * should only be dependent on the state definition object and super function. - * - * - * Existing builder functions and current return values: - * - * - **parent** `{object}` - returns the parent state object. - * - **data** `{object}` - returns state data, including any inherited data that is not - * overridden by own values (if any). - * - **url** `{object}` - returns a {@link ui.router.util.type:UrlMatcher UrlMatcher} - * or `null`. - * - **navigable** `{object}` - returns closest ancestor state that has a URL (aka is - * navigable). - * - **params** `{object}` - returns an array of state params that are ensured to - * be a super-set of parent's params. - * - **views** `{object}` - returns a views object where each key is an absolute view - * name (i.e. "viewName@stateName") and each value is the config object - * (template, controller) for the view. Even when you don't use the views object - * explicitly on a state config, one is still created for you internally. - * So by decorating this builder function you have access to decorating template - * and controller properties. - * - **ownParams** `{object}` - returns an array of params that belong to the state, - * not including any params defined by ancestor states. - * - **path** `{string}` - returns the full path from the root down to this state. - * Needed for state activation. - * - **includes** `{object}` - returns an object that includes every state that - * would pass a `$state.includes()` test. - * - * @example - * <pre> - * // Override the internal 'views' builder with a function that takes the state - * // definition, and a reference to the internal function being overridden: - * $stateProvider.decorator('views', function (state, parent) { - * var result = {}, - * views = parent(state); - * - * angular.forEach(views, function (config, name) { - * var autoName = (state.name + '.' + name).replace('.', '/'); - * config.templateUrl = config.templateUrl || '/partials/' + autoName + '.html'; - * result[name] = config; - * }); - * return result; - * }); - * - * $stateProvider.state('home', { - * views: { - * 'contact.list': { controller: 'ListController' }, - * 'contact.item': { controller: 'ItemController' } - * } - * }); - * - * // ... - * - * $state.go('home'); - * // Auto-populates list and item views with /partials/home/contact/list.html, - * // and /partials/home/contact/item.html, respectively. - * </pre> - * - * @param {string} name The name of the builder function to decorate. - * @param {object} func A function that is responsible for decorating the original - * builder function. The function receives two parameters: - * - * - `{object}` - state - The state config object. - * - `{object}` - super - The original builder function. - * - * @return {object} $stateProvider - $stateProvider instance - */ - this.decorator = decorator; - function decorator(name, func) { - /*jshint validthis: true */ - if (isString(name) && !isDefined(func)) { - return stateBuilder[name]; - } - if (!isFunction(func) || !isString(name)) { - return this; - } - if (stateBuilder[name] && !stateBuilder.$delegates[name]) { - stateBuilder.$delegates[name] = stateBuilder[name]; - } - stateBuilder[name] = func; - return this; - } - - /** - * @ngdoc function - * @name ui.router.state.$stateProvider#state - * @methodOf ui.router.state.$stateProvider - * - * @description - * Registers a state configuration under a given state name. The stateConfig object - * has the following acceptable properties. - * - * @param {string} name A unique state name, e.g. "home", "about", "contacts". - * To create a parent/child state use a dot, e.g. "about.sales", "home.newest". - * @param {object} stateConfig State configuration object. - * @param {string|function=} stateConfig.template - * <a id='template'></a> - * html template as a string or a function that returns - * an html template as a string which should be used by the uiView directives. This property - * takes precedence over templateUrl. - * - * If `template` is a function, it will be called with the following parameters: - * - * - {array.<object>} - state parameters extracted from the current $location.path() by - * applying the current state - * - * <pre>template: - * "<h1>inline template definition</h1>" + - * "<div ui-view></div>"</pre> - * <pre>template: function(params) { - * return "<h1>generated template</h1>"; }</pre> - * </div> - * - * @param {string|function=} stateConfig.templateUrl - * <a id='templateUrl'></a> - * - * path or function that returns a path to an html - * template that should be used by uiView. - * - * If `templateUrl` is a function, it will be called with the following parameters: - * - * - {array.<object>} - state parameters extracted from the current $location.path() by - * applying the current state - * - * <pre>templateUrl: "home.html"</pre> - * <pre>templateUrl: function(params) { - * return myTemplates[params.pageId]; }</pre> - * - * @param {function=} stateConfig.templateProvider - * <a id='templateProvider'></a> - * Provider function that returns HTML content string. - * <pre> templateProvider: - * function(MyTemplateService, params) { - * return MyTemplateService.getTemplate(params.pageId); - * }</pre> - * - * @param {string|function=} stateConfig.controller - * <a id='controller'></a> - * - * Controller fn that should be associated with newly - * related scope or the name of a registered controller if passed as a string. - * Optionally, the ControllerAs may be declared here. - * <pre>controller: "MyRegisteredController"</pre> - * <pre>controller: - * "MyRegisteredController as fooCtrl"}</pre> - * <pre>controller: function($scope, MyService) { - * $scope.data = MyService.getData(); }</pre> - * - * @param {function=} stateConfig.controllerProvider - * <a id='controllerProvider'></a> - * - * Injectable provider function that returns the actual controller or string. - * <pre>controllerProvider: - * function(MyResolveData) { - * if (MyResolveData.foo) - * return "FooCtrl" - * else if (MyResolveData.bar) - * return "BarCtrl"; - * else return function($scope) { - * $scope.baz = "Qux"; - * } - * }</pre> - * - * @param {string=} stateConfig.controllerAs - * <a id='controllerAs'></a> - * - * A controller alias name. If present the controller will be - * published to scope under the controllerAs name. - * <pre>controllerAs: "myCtrl"</pre> - * - * @param {string|object=} stateConfig.parent - * <a id='parent'></a> - * Optionally specifies the parent state of this state. - * - * <pre>parent: 'parentState'</pre> - * <pre>parent: parentState // JS variable</pre> - * - * @param {object=} stateConfig.resolve - * <a id='resolve'></a> - * - * An optional map<string, function> of dependencies which - * should be injected into the controller. If any of these dependencies are promises, - * the router will wait for them all to be resolved before the controller is instantiated. - * If all the promises are resolved successfully, the $stateChangeSuccess event is fired - * and the values of the resolved promises are injected into any controllers that reference them. - * If any of the promises are rejected the $stateChangeError event is fired. - * - * The map object is: - * - * - key - {string}: name of dependency to be injected into controller - * - factory - {string|function}: If string then it is alias for service. Otherwise if function, - * it is injected and return value it treated as dependency. If result is a promise, it is - * resolved before its value is injected into controller. - * - * <pre>resolve: { - * myResolve1: - * function($http, $stateParams) { - * return $http.get("/api/foos/"+stateParams.fooID); - * } - * }</pre> - * - * @param {string=} stateConfig.url - * <a id='url'></a> - * - * A url fragment with optional parameters. When a state is navigated or - * transitioned to, the `$stateParams` service will be populated with any - * parameters that were passed. - * - * (See {@link ui.router.util.type:UrlMatcher UrlMatcher} `UrlMatcher`} for - * more details on acceptable patterns ) - * - * examples: - * <pre>url: "/home" - * url: "/users/:userid" - * url: "/books/{bookid:[a-zA-Z_-]}" - * url: "/books/{categoryid:int}" - * url: "/books/{publishername:string}/{categoryid:int}" - * url: "/messages?before&after" - * url: "/messages?{before:date}&{after:date}" - * url: "/messages/:mailboxid?{before:date}&{after:date}" - * </pre> - * - * @param {object=} stateConfig.views - * <a id='views'></a> - * an optional map<string, object> which defined multiple views, or targets views - * manually/explicitly. - * - * Examples: - * - * Targets three named `ui-view`s in the parent state's template - * <pre>views: { - * header: { - * controller: "headerCtrl", - * templateUrl: "header.html" - * }, body: { - * controller: "bodyCtrl", - * templateUrl: "body.html" - * }, footer: { - * controller: "footCtrl", - * templateUrl: "footer.html" - * } - * }</pre> - * - * Targets named `ui-view="header"` from grandparent state 'top''s template, and named `ui-view="body" from parent state's template. - * <pre>views: { - * 'header@top': { - * controller: "msgHeaderCtrl", - * templateUrl: "msgHeader.html" - * }, 'body': { - * controller: "messagesCtrl", - * templateUrl: "messages.html" - * } - * }</pre> - * - * @param {boolean=} [stateConfig.abstract=false] - * <a id='abstract'></a> - * An abstract state will never be directly activated, - * but can provide inherited properties to its common children states. - * <pre>abstract: true</pre> - * - * @param {function=} stateConfig.onEnter - * <a id='onEnter'></a> - * - * Callback function for when a state is entered. Good way - * to trigger an action or dispatch an event, such as opening a dialog. - * If minifying your scripts, make sure to explictly annotate this function, - * because it won't be automatically annotated by your build tools. - * - * <pre>onEnter: function(MyService, $stateParams) { - * MyService.foo($stateParams.myParam); - * }</pre> - * - * @param {function=} stateConfig.onExit - * <a id='onExit'></a> - * - * Callback function for when a state is exited. Good way to - * trigger an action or dispatch an event, such as opening a dialog. - * If minifying your scripts, make sure to explictly annotate this function, - * because it won't be automatically annotated by your build tools. - * - * <pre>onExit: function(MyService, $stateParams) { - * MyService.cleanup($stateParams.myParam); - * }</pre> - * - * @param {boolean=} [stateConfig.reloadOnSearch=true] - * <a id='reloadOnSearch'></a> - * - * If `false`, will not retrigger the same state - * just because a search/query parameter has changed (via $location.search() or $location.hash()). - * Useful for when you'd like to modify $location.search() without triggering a reload. - * <pre>reloadOnSearch: false</pre> - * - * @param {object=} stateConfig.data - * <a id='data'></a> - * - * Arbitrary data object, useful for custom configuration. The parent state's `data` is - * prototypally inherited. In other words, adding a data property to a state adds it to - * the entire subtree via prototypal inheritance. - * - * <pre>data: { - * requiredRole: 'foo' - * } </pre> - * - * @param {object=} stateConfig.params - * <a id='params'></a> - * - * A map which optionally configures parameters declared in the `url`, or - * defines additional non-url parameters. For each parameter being - * configured, add a configuration object keyed to the name of the parameter. - * - * Each parameter configuration object may contain the following properties: - * - * - ** value ** - {object|function=}: specifies the default value for this - * parameter. This implicitly sets this parameter as optional. - * - * When UI-Router routes to a state and no value is - * specified for this parameter in the URL or transition, the - * default value will be used instead. If `value` is a function, - * it will be injected and invoked, and the return value used. - * - * *Note*: `undefined` is treated as "no default value" while `null` - * is treated as "the default value is `null`". - * - * *Shorthand*: If you only need to configure the default value of the - * parameter, you may use a shorthand syntax. In the **`params`** - * map, instead mapping the param name to a full parameter configuration - * object, simply set map it to the default parameter value, e.g.: - * - * <pre>// define a parameter's default value - * params: { - * param1: { value: "defaultValue" } - * } - * // shorthand default values - * params: { - * param1: "defaultValue", - * param2: "param2Default" - * }</pre> - * - * - ** array ** - {boolean=}: *(default: false)* If true, the param value will be - * treated as an array of values. If you specified a Type, the value will be - * treated as an array of the specified Type. Note: query parameter values - * default to a special `"auto"` mode. - * - * For query parameters in `"auto"` mode, if multiple values for a single parameter - * are present in the URL (e.g.: `/foo?bar=1&bar=2&bar=3`) then the values - * are mapped to an array (e.g.: `{ foo: [ '1', '2', '3' ] }`). However, if - * only one value is present (e.g.: `/foo?bar=1`) then the value is treated as single - * value (e.g.: `{ foo: '1' }`). - * - * <pre>params: { - * param1: { array: true } - * }</pre> - * - * - ** squash ** - {bool|string=}: `squash` configures how a default parameter value is represented in the URL when - * the current parameter value is the same as the default value. If `squash` is not set, it uses the - * configured default squash policy. - * (See {@link ui.router.util.$urlMatcherFactory#methods_defaultSquashPolicy `defaultSquashPolicy()`}) - * - * There are three squash settings: - * - * - false: The parameter's default value is not squashed. It is encoded and included in the URL - * - true: The parameter's default value is omitted from the URL. If the parameter is preceeded and followed - * by slashes in the state's `url` declaration, then one of those slashes are omitted. - * This can allow for cleaner looking URLs. - * - `"<arbitrary string>"`: The parameter's default value is replaced with an arbitrary placeholder of your choice. - * - * <pre>params: { - * param1: { - * value: "defaultId", - * squash: true - * } } - * // squash "defaultValue" to "~" - * params: { - * param1: { - * value: "defaultValue", - * squash: "~" - * } } - * </pre> - * - * - * @example - * <pre> - * // Some state name examples - * - * // stateName can be a single top-level name (must be unique). - * $stateProvider.state("home", {}); - * - * // Or it can be a nested state name. This state is a child of the - * // above "home" state. - * $stateProvider.state("home.newest", {}); - * - * // Nest states as deeply as needed. - * $stateProvider.state("home.newest.abc.xyz.inception", {}); - * - * // state() returns $stateProvider, so you can chain state declarations. - * $stateProvider - * .state("home", {}) - * .state("about", {}) - * .state("contacts", {}); - * </pre> - * - */ - this.state = state; - function state(name, definition) { - /*jshint validthis: true */ - if (isObject(name)) definition = name; - else definition.name = name; - registerState(definition); - return this; - } - - /** - * @ngdoc object - * @name ui.router.state.$state - * - * @requires $rootScope - * @requires $q - * @requires ui.router.state.$view - * @requires $injector - * @requires ui.router.util.$resolve - * @requires ui.router.state.$stateParams - * @requires ui.router.router.$urlRouter - * - * @property {object} params A param object, e.g. {sectionId: section.id)}, that - * you'd like to test against the current active state. - * @property {object} current A reference to the state's config object. However - * you passed it in. Useful for accessing custom data. - * @property {object} transition Currently pending transition. A promise that'll - * resolve or reject. - * - * @description - * `$state` service is responsible for representing states as well as transitioning - * between them. It also provides interfaces to ask for current state or even states - * you're coming from. - */ - this.$get = $get; - $get.$inject = ['$rootScope', '$q', '$view', '$injector', '$resolve', '$stateParams', '$urlRouter', '$location', '$urlMatcherFactory']; - function $get( $rootScope, $q, $view, $injector, $resolve, $stateParams, $urlRouter, $location, $urlMatcherFactory) { - - var TransitionSuperseded = $q.reject(new Error('transition superseded')); - var TransitionPrevented = $q.reject(new Error('transition prevented')); - var TransitionAborted = $q.reject(new Error('transition aborted')); - var TransitionFailed = $q.reject(new Error('transition failed')); - - // Handles the case where a state which is the target of a transition is not found, and the user - // can optionally retry or defer the transition - function handleRedirect(redirect, state, params, options) { - /** - * @ngdoc event - * @name ui.router.state.$state#$stateNotFound - * @eventOf ui.router.state.$state - * @eventType broadcast on root scope - * @description - * Fired when a requested state **cannot be found** using the provided state name during transition. - * The event is broadcast allowing any handlers a single chance to deal with the error (usually by - * lazy-loading the unfound state). A special `unfoundState` object is passed to the listener handler, - * you can see its three properties in the example. You can use `event.preventDefault()` to abort the - * transition and the promise returned from `go` will be rejected with a `'transition aborted'` value. - * - * @param {Object} event Event object. - * @param {Object} unfoundState Unfound State information. Contains: `to, toParams, options` properties. - * @param {State} fromState Current state object. - * @param {Object} fromParams Current state params. - * - * @example - * - * <pre> - * // somewhere, assume lazy.state has not been defined - * $state.go("lazy.state", {a:1, b:2}, {inherit:false}); - * - * // somewhere else - * $scope.$on('$stateNotFound', - * function(event, unfoundState, fromState, fromParams){ - * console.log(unfoundState.to); // "lazy.state" - * console.log(unfoundState.toParams); // {a:1, b:2} - * console.log(unfoundState.options); // {inherit:false} + default options - * }) - * </pre> - */ - var evt = $rootScope.$broadcast('$stateNotFound', redirect, state, params); - - if (evt.defaultPrevented) { - $urlRouter.update(); - return TransitionAborted; - } - - if (!evt.retry) { - return null; - } - - // Allow the handler to return a promise to defer state lookup retry - if (options.$retry) { - $urlRouter.update(); - return TransitionFailed; - } - var retryTransition = $state.transition = $q.when(evt.retry); - - retryTransition.then(function() { - if (retryTransition !== $state.transition) return TransitionSuperseded; - redirect.options.$retry = true; - return $state.transitionTo(redirect.to, redirect.toParams, redirect.options); - }, function() { - return TransitionAborted; - }); - $urlRouter.update(); - - return retryTransition; - } - - root.locals = { resolve: null, globals: { $stateParams: {} } }; - - $state = { - params: {}, - current: root.self, - $current: root, - transition: null - }; - - /** - * @ngdoc function - * @name ui.router.state.$state#reload - * @methodOf ui.router.state.$state - * - * @description - * A method that force reloads the current state. All resolves are re-resolved, - * controllers reinstantiated, and events re-fired. - * - * @example - * <pre> - * var app angular.module('app', ['ui.router']); - * - * app.controller('ctrl', function ($scope, $state) { - * $scope.reload = function(){ - * $state.reload(); - * } - * }); - * </pre> - * - * `reload()` is just an alias for: - * <pre> - * $state.transitionTo($state.current, $stateParams, { - * reload: true, inherit: false, notify: true - * }); - * </pre> - * - * @param {string=|object=} state - A state name or a state object, which is the root of the resolves to be re-resolved. - * @example - * <pre> - * //assuming app application consists of 3 states: 'contacts', 'contacts.detail', 'contacts.detail.item' - * //and current state is 'contacts.detail.item' - * var app angular.module('app', ['ui.router']); - * - * app.controller('ctrl', function ($scope, $state) { - * $scope.reload = function(){ - * //will reload 'contact.detail' and 'contact.detail.item' states - * $state.reload('contact.detail'); - * } - * }); - * </pre> - * - * `reload()` is just an alias for: - * <pre> - * $state.transitionTo($state.current, $stateParams, { - * reload: true, inherit: false, notify: true - * }); - * </pre> - - * @returns {promise} A promise representing the state of the new transition. See - * {@link ui.router.state.$state#methods_go $state.go}. - */ - $state.reload = function reload(state) { - return $state.transitionTo($state.current, $stateParams, { reload: state || true, inherit: false, notify: true}); - }; - - /** - * @ngdoc function - * @name ui.router.state.$state#go - * @methodOf ui.router.state.$state - * - * @description - * Convenience method for transitioning to a new state. `$state.go` calls - * `$state.transitionTo` internally but automatically sets options to - * `{ location: true, inherit: true, relative: $state.$current, notify: true }`. - * This allows you to easily use an absolute or relative to path and specify - * only the parameters you'd like to update (while letting unspecified parameters - * inherit from the currently active ancestor states). - * - * @example - * <pre> - * var app = angular.module('app', ['ui.router']); - * - * app.controller('ctrl', function ($scope, $state) { - * $scope.changeState = function () { - * $state.go('contact.detail'); - * }; - * }); - * </pre> - * <img src='../ngdoc_assets/StateGoExamples.png'/> - * - * @param {string} to Absolute state name or relative state path. Some examples: - * - * - `$state.go('contact.detail')` - will go to the `contact.detail` state - * - `$state.go('^')` - will go to a parent state - * - `$state.go('^.sibling')` - will go to a sibling state - * - `$state.go('.child.grandchild')` - will go to grandchild state - * - * @param {object=} params A map of the parameters that will be sent to the state, - * will populate $stateParams. Any parameters that are not specified will be inherited from currently - * defined parameters. This allows, for example, going to a sibling state that shares parameters - * specified in a parent state. Parameter inheritance only works between common ancestor states, I.e. - * transitioning to a sibling will get you the parameters for all parents, transitioning to a child - * will get you all current parameters, etc. - * @param {object=} options Options object. The options are: - * - * - **`location`** - {boolean=true|string=} - If `true` will update the url in the location bar, if `false` - * will not. If string, must be `"replace"`, which will update url and also replace last history record. - * - **`inherit`** - {boolean=true}, If `true` will inherit url parameters from current url. - * - **`relative`** - {object=$state.$current}, When transitioning with relative path (e.g '^'), - * defines which state to be relative from. - * - **`notify`** - {boolean=true}, If `true` will broadcast $stateChangeStart and $stateChangeSuccess events. - * - **`reload`** (v0.2.5) - {boolean=false}, If `true` will force transition even if the state or params - * have not changed, aka a reload of the same state. It differs from reloadOnSearch because you'd - * use this when you want to force a reload when *everything* is the same, including search params. - * - * @returns {promise} A promise representing the state of the new transition. - * - * Possible success values: - * - * - $state.current - * - * <br/>Possible rejection values: - * - * - 'transition superseded' - when a newer transition has been started after this one - * - 'transition prevented' - when `event.preventDefault()` has been called in a `$stateChangeStart` listener - * - 'transition aborted' - when `event.preventDefault()` has been called in a `$stateNotFound` listener or - * when a `$stateNotFound` `event.retry` promise errors. - * - 'transition failed' - when a state has been unsuccessfully found after 2 tries. - * - *resolve error* - when an error has occurred with a `resolve` - * - */ - $state.go = function go(to, params, options) { - return $state.transitionTo(to, params, extend({ inherit: true, relative: $state.$current }, options)); - }; - - /** - * @ngdoc function - * @name ui.router.state.$state#transitionTo - * @methodOf ui.router.state.$state - * - * @description - * Low-level method for transitioning to a new state. {@link ui.router.state.$state#methods_go $state.go} - * uses `transitionTo` internally. `$state.go` is recommended in most situations. - * - * @example - * <pre> - * var app = angular.module('app', ['ui.router']); - * - * app.controller('ctrl', function ($scope, $state) { - * $scope.changeState = function () { - * $state.transitionTo('contact.detail'); - * }; - * }); - * </pre> - * - * @param {string} to State name. - * @param {object=} toParams A map of the parameters that will be sent to the state, - * will populate $stateParams. - * @param {object=} options Options object. The options are: - * - * - **`location`** - {boolean=true|string=} - If `true` will update the url in the location bar, if `false` - * will not. If string, must be `"replace"`, which will update url and also replace last history record. - * - **`inherit`** - {boolean=false}, If `true` will inherit url parameters from current url. - * - **`relative`** - {object=}, When transitioning with relative path (e.g '^'), - * defines which state to be relative from. - * - **`notify`** - {boolean=true}, If `true` will broadcast $stateChangeStart and $stateChangeSuccess events. - * - **`reload`** (v0.2.5) - {boolean=false|string=|object=}, If `true` will force transition even if the state or params - * have not changed, aka a reload of the same state. It differs from reloadOnSearch because you'd - * use this when you want to force a reload when *everything* is the same, including search params. - * if String, then will reload the state with the name given in reload, and any children. - * if Object, then a stateObj is expected, will reload the state found in stateObj, and any children. - * - * @returns {promise} A promise representing the state of the new transition. See - * {@link ui.router.state.$state#methods_go $state.go}. - */ - $state.transitionTo = function transitionTo(to, toParams, options) { - toParams = toParams || {}; - options = extend({ - location: true, inherit: false, relative: null, notify: true, reload: false, $retry: false - }, options || {}); - - var from = $state.$current, fromParams = $state.params, fromPath = from.path; - var evt, toState = findState(to, options.relative); - - // Store the hash param for later (since it will be stripped out by various methods) - var hash = toParams['#']; - - if (!isDefined(toState)) { - var redirect = { to: to, toParams: toParams, options: options }; - var redirectResult = handleRedirect(redirect, from.self, fromParams, options); - - if (redirectResult) { - return redirectResult; - } - - // Always retry once if the $stateNotFound was not prevented - // (handles either redirect changed or state lazy-definition) - to = redirect.to; - toParams = redirect.toParams; - options = redirect.options; - toState = findState(to, options.relative); - - if (!isDefined(toState)) { - if (!options.relative) throw new Error("No such state '" + to + "'"); - throw new Error("Could not resolve '" + to + "' from state '" + options.relative + "'"); - } - } - if (toState[abstractKey]) throw new Error("Cannot transition to abstract state '" + to + "'"); - if (options.inherit) toParams = inheritParams($stateParams, toParams || {}, $state.$current, toState); - if (!toState.params.$$validates(toParams)) return TransitionFailed; - - toParams = toState.params.$$values(toParams); - to = toState; - - var toPath = to.path; - - // Starting from the root of the path, keep all levels that haven't changed - var keep = 0, state = toPath[keep], locals = root.locals, toLocals = []; - - if (!options.reload) { - while (state && state === fromPath[keep] && state.ownParams.$$equals(toParams, fromParams)) { - locals = toLocals[keep] = state.locals; - keep++; - state = toPath[keep]; - } - } else if (isString(options.reload) || isObject(options.reload)) { - if (isObject(options.reload) && !options.reload.name) { - throw new Error('Invalid reload state object'); - } - - var reloadState = options.reload === true ? fromPath[0] : findState(options.reload); - if (options.reload && !reloadState) { - throw new Error("No such reload state '" + (isString(options.reload) ? options.reload : options.reload.name) + "'"); - } - - while (state && state === fromPath[keep] && state !== reloadState) { - locals = toLocals[keep] = state.locals; - keep++; - state = toPath[keep]; - } - } - - // If we're going to the same state and all locals are kept, we've got nothing to do. - // But clear 'transition', as we still want to cancel any other pending transitions. - // TODO: We may not want to bump 'transition' if we're called from a location change - // that we've initiated ourselves, because we might accidentally abort a legitimate - // transition initiated from code? - if (shouldSkipReload(to, toParams, from, fromParams, locals, options)) { - if (hash) toParams['#'] = hash; - $state.params = toParams; - copy($state.params, $stateParams); - if (options.location && to.navigable && to.navigable.url) { - $urlRouter.push(to.navigable.url, toParams, { - $$avoidResync: true, replace: options.location === 'replace' - }); - $urlRouter.update(true); - } - $state.transition = null; - return $q.when($state.current); - } - - // Filter parameters before we pass them to event handlers etc. - toParams = filterByKeys(to.params.$$keys(), toParams || {}); - - // Broadcast start event and cancel the transition if requested - if (options.notify) { - /** - * @ngdoc event - * @name ui.router.state.$state#$stateChangeStart - * @eventOf ui.router.state.$state - * @eventType broadcast on root scope - * @description - * Fired when the state transition **begins**. You can use `event.preventDefault()` - * to prevent the transition from happening and then the transition promise will be - * rejected with a `'transition prevented'` value. - * - * @param {Object} event Event object. - * @param {State} toState The state being transitioned to. - * @param {Object} toParams The params supplied to the `toState`. - * @param {State} fromState The current state, pre-transition. - * @param {Object} fromParams The params supplied to the `fromState`. - * - * @example - * - * <pre> - * $rootScope.$on('$stateChangeStart', - * function(event, toState, toParams, fromState, fromParams){ - * event.preventDefault(); - * // transitionTo() promise will be rejected with - * // a 'transition prevented' error - * }) - * </pre> - */ - if ($rootScope.$broadcast('$stateChangeStart', to.self, toParams, from.self, fromParams).defaultPrevented) { - $rootScope.$broadcast('$stateChangeCancel', to.self, toParams, from.self, fromParams); - $urlRouter.update(); - return TransitionPrevented; - } - } - - // Resolve locals for the remaining states, but don't update any global state just - // yet -- if anything fails to resolve the current state needs to remain untouched. - // We also set up an inheritance chain for the locals here. This allows the view directive - // to quickly look up the correct definition for each view in the current state. Even - // though we create the locals object itself outside resolveState(), it is initially - // empty and gets filled asynchronously. We need to keep track of the promise for the - // (fully resolved) current locals, and pass this down the chain. - var resolved = $q.when(locals); - - for (var l = keep; l < toPath.length; l++, state = toPath[l]) { - locals = toLocals[l] = inherit(locals); - resolved = resolveState(state, toParams, state === to, resolved, locals, options); - } - - // Once everything is resolved, we are ready to perform the actual transition - // and return a promise for the new state. We also keep track of what the - // current promise is, so that we can detect overlapping transitions and - // keep only the outcome of the last transition. - var transition = $state.transition = resolved.then(function () { - var l, entering, exiting; - - if ($state.transition !== transition) return TransitionSuperseded; - - // Exit 'from' states not kept - for (l = fromPath.length - 1; l >= keep; l--) { - exiting = fromPath[l]; - if (exiting.self.onExit) { - $injector.invoke(exiting.self.onExit, exiting.self, exiting.locals.globals); - } - exiting.locals = null; - } - - // Enter 'to' states not kept - for (l = keep; l < toPath.length; l++) { - entering = toPath[l]; - entering.locals = toLocals[l]; - if (entering.self.onEnter) { - $injector.invoke(entering.self.onEnter, entering.self, entering.locals.globals); - } - } - - // Re-add the saved hash before we start returning things - if (hash) toParams['#'] = hash; - - // Run it again, to catch any transitions in callbacks - if ($state.transition !== transition) return TransitionSuperseded; - - // Update globals in $state - $state.$current = to; - $state.current = to.self; - $state.params = toParams; - copy($state.params, $stateParams); - $state.transition = null; - - if (options.location && to.navigable) { - $urlRouter.push(to.navigable.url, to.navigable.locals.globals.$stateParams, { - $$avoidResync: true, replace: options.location === 'replace' - }); - } - - if (options.notify) { - /** - * @ngdoc event - * @name ui.router.state.$state#$stateChangeSuccess - * @eventOf ui.router.state.$state - * @eventType broadcast on root scope - * @description - * Fired once the state transition is **complete**. - * - * @param {Object} event Event object. - * @param {State} toState The state being transitioned to. - * @param {Object} toParams The params supplied to the `toState`. - * @param {State} fromState The current state, pre-transition. - * @param {Object} fromParams The params supplied to the `fromState`. - */ - $rootScope.$broadcast('$stateChangeSuccess', to.self, toParams, from.self, fromParams); - } - $urlRouter.update(true); - - return $state.current; - }, function (error) { - if ($state.transition !== transition) return TransitionSuperseded; - - $state.transition = null; - /** - * @ngdoc event - * @name ui.router.state.$state#$stateChangeError - * @eventOf ui.router.state.$state - * @eventType broadcast on root scope - * @description - * Fired when an **error occurs** during transition. It's important to note that if you - * have any errors in your resolve functions (javascript errors, non-existent services, etc) - * they will not throw traditionally. You must listen for this $stateChangeError event to - * catch **ALL** errors. - * - * @param {Object} event Event object. - * @param {State} toState The state being transitioned to. - * @param {Object} toParams The params supplied to the `toState`. - * @param {State} fromState The current state, pre-transition. - * @param {Object} fromParams The params supplied to the `fromState`. - * @param {Error} error The resolve error object. - */ - evt = $rootScope.$broadcast('$stateChangeError', to.self, toParams, from.self, fromParams, error); - - if (!evt.defaultPrevented) { - $urlRouter.update(); - } - - return $q.reject(error); - }); - - return transition; - }; - - /** - * @ngdoc function - * @name ui.router.state.$state#is - * @methodOf ui.router.state.$state - * - * @description - * Similar to {@link ui.router.state.$state#methods_includes $state.includes}, - * but only checks for the full state name. If params is supplied then it will be - * tested for strict equality against the current active params object, so all params - * must match with none missing and no extras. - * - * @example - * <pre> - * $state.$current.name = 'contacts.details.item'; - * - * // absolute name - * $state.is('contact.details.item'); // returns true - * $state.is(contactDetailItemStateObject); // returns true - * - * // relative name (. and ^), typically from a template - * // E.g. from the 'contacts.details' template - * <div ng-class="{highlighted: $state.is('.item')}">Item</div> - * </pre> - * - * @param {string|object} stateOrName The state name (absolute or relative) or state object you'd like to check. - * @param {object=} params A param object, e.g. `{sectionId: section.id}`, that you'd like - * to test against the current active state. - * @param {object=} options An options object. The options are: - * - * - **`relative`** - {string|object} - If `stateOrName` is a relative state name and `options.relative` is set, .is will - * test relative to `options.relative` state (or name). - * - * @returns {boolean} Returns true if it is the state. - */ - $state.is = function is(stateOrName, params, options) { - options = extend({ relative: $state.$current }, options || {}); - var state = findState(stateOrName, options.relative); - - if (!isDefined(state)) { return undefined; } - if ($state.$current !== state) { return false; } - return params ? equalForKeys(state.params.$$values(params), $stateParams) : true; - }; - - /** - * @ngdoc function - * @name ui.router.state.$state#includes - * @methodOf ui.router.state.$state - * - * @description - * A method to determine if the current active state is equal to or is the child of the - * state stateName. If any params are passed then they will be tested for a match as well. - * Not all the parameters need to be passed, just the ones you'd like to test for equality. - * - * @example - * Partial and relative names - * <pre> - * $state.$current.name = 'contacts.details.item'; - * - * // Using partial names - * $state.includes("contacts"); // returns true - * $state.includes("contacts.details"); // returns true - * $state.includes("contacts.details.item"); // returns true - * $state.includes("contacts.list"); // returns false - * $state.includes("about"); // returns false - * - * // Using relative names (. and ^), typically from a template - * // E.g. from the 'contacts.details' template - * <div ng-class="{highlighted: $state.includes('.item')}">Item</div> - * </pre> - * - * Basic globbing patterns - * <pre> - * $state.$current.name = 'contacts.details.item.url'; - * - * $state.includes("*.details.*.*"); // returns true - * $state.includes("*.details.**"); // returns true - * $state.includes("**.item.**"); // returns true - * $state.includes("*.details.item.url"); // returns true - * $state.includes("*.details.*.url"); // returns true - * $state.includes("*.details.*"); // returns false - * $state.includes("item.**"); // returns false - * </pre> - * - * @param {string} stateOrName A partial name, relative name, or glob pattern - * to be searched for within the current state name. - * @param {object=} params A param object, e.g. `{sectionId: section.id}`, - * that you'd like to test against the current active state. - * @param {object=} options An options object. The options are: - * - * - **`relative`** - {string|object=} - If `stateOrName` is a relative state reference and `options.relative` is set, - * .includes will test relative to `options.relative` state (or name). - * - * @returns {boolean} Returns true if it does include the state - */ - $state.includes = function includes(stateOrName, params, options) { - options = extend({ relative: $state.$current }, options || {}); - if (isString(stateOrName) && isGlob(stateOrName)) { - if (!doesStateMatchGlob(stateOrName)) { - return false; - } - stateOrName = $state.$current.name; - } - - var state = findState(stateOrName, options.relative); - if (!isDefined(state)) { return undefined; } - if (!isDefined($state.$current.includes[state.name])) { return false; } - return params ? equalForKeys(state.params.$$values(params), $stateParams, objectKeys(params)) : true; - }; - - - /** - * @ngdoc function - * @name ui.router.state.$state#href - * @methodOf ui.router.state.$state - * - * @description - * A url generation method that returns the compiled url for the given state populated with the given params. - * - * @example - * <pre> - * expect($state.href("about.person", { person: "bob" })).toEqual("/about/bob"); - * </pre> - * - * @param {string|object} stateOrName The state name or state object you'd like to generate a url from. - * @param {object=} params An object of parameter values to fill the state's required parameters. - * @param {object=} options Options object. The options are: - * - * - **`lossy`** - {boolean=true} - If true, and if there is no url associated with the state provided in the - * first parameter, then the constructed href url will be built from the first navigable ancestor (aka - * ancestor with a valid url). - * - **`inherit`** - {boolean=true}, If `true` will inherit url parameters from current url. - * - **`relative`** - {object=$state.$current}, When transitioning with relative path (e.g '^'), - * defines which state to be relative from. - * - **`absolute`** - {boolean=false}, If true will generate an absolute url, e.g. "http://www.example.com/fullurl". - * - * @returns {string} compiled state url - */ - $state.href = function href(stateOrName, params, options) { - options = extend({ - lossy: true, - inherit: true, - absolute: false, - relative: $state.$current - }, options || {}); - - var state = findState(stateOrName, options.relative); - - if (!isDefined(state)) return null; - if (options.inherit) params = inheritParams($stateParams, params || {}, $state.$current, state); - - var nav = (state && options.lossy) ? state.navigable : state; - - if (!nav || nav.url === undefined || nav.url === null) { - return null; - } - return $urlRouter.href(nav.url, filterByKeys(state.params.$$keys().concat('#'), params || {}), { - absolute: options.absolute - }); - }; - - /** - * @ngdoc function - * @name ui.router.state.$state#get - * @methodOf ui.router.state.$state - * - * @description - * Returns the state configuration object for any specific state or all states. - * - * @param {string|object=} stateOrName (absolute or relative) If provided, will only get the config for - * the requested state. If not provided, returns an array of ALL state configs. - * @param {string|object=} context When stateOrName is a relative state reference, the state will be retrieved relative to context. - * @returns {Object|Array} State configuration object or array of all objects. - */ - $state.get = function (stateOrName, context) { - if (arguments.length === 0) return map(objectKeys(states), function(name) { return states[name].self; }); - var state = findState(stateOrName, context || $state.$current); - return (state && state.self) ? state.self : null; - }; - - function resolveState(state, params, paramsAreFiltered, inherited, dst, options) { - // Make a restricted $stateParams with only the parameters that apply to this state if - // necessary. In addition to being available to the controller and onEnter/onExit callbacks, - // we also need $stateParams to be available for any $injector calls we make during the - // dependency resolution process. - var $stateParams = (paramsAreFiltered) ? params : filterByKeys(state.params.$$keys(), params); - var locals = { $stateParams: $stateParams }; - - // Resolve 'global' dependencies for the state, i.e. those not specific to a view. - // We're also including $stateParams in this; that way the parameters are restricted - // to the set that should be visible to the state, and are independent of when we update - // the global $state and $stateParams values. - dst.resolve = $resolve.resolve(state.resolve, locals, dst.resolve, state); - var promises = [dst.resolve.then(function (globals) { - dst.globals = globals; - })]; - if (inherited) promises.push(inherited); - - function resolveViews() { - var viewsPromises = []; - - // Resolve template and dependencies for all views. - forEach(state.views, function (view, name) { - var injectables = (view.resolve && view.resolve !== state.resolve ? view.resolve : {}); - injectables.$template = [ function () { - return $view.load(name, { view: view, locals: dst.globals, params: $stateParams, notify: options.notify }) || ''; - }]; - - viewsPromises.push($resolve.resolve(injectables, dst.globals, dst.resolve, state).then(function (result) { - // References to the controller (only instantiated at link time) - if (isFunction(view.controllerProvider) || isArray(view.controllerProvider)) { - var injectLocals = angular.extend({}, injectables, dst.globals); - result.$$controller = $injector.invoke(view.controllerProvider, null, injectLocals); - } else { - result.$$controller = view.controller; - } - // Provide access to the state itself for internal use - result.$$state = state; - result.$$controllerAs = view.controllerAs; - dst[name] = result; - })); - }); - - return $q.all(viewsPromises).then(function(){ - return dst.globals; - }); - } - - // Wait for all the promises and then return the activation object - return $q.all(promises).then(resolveViews).then(function (values) { - return dst; - }); - } - - return $state; - } - - function shouldSkipReload(to, toParams, from, fromParams, locals, options) { - // Return true if there are no differences in non-search (path/object) params, false if there are differences - function nonSearchParamsEqual(fromAndToState, fromParams, toParams) { - // Identify whether all the parameters that differ between `fromParams` and `toParams` were search params. - function notSearchParam(key) { - return fromAndToState.params[key].location != "search"; - } - var nonQueryParamKeys = fromAndToState.params.$$keys().filter(notSearchParam); - var nonQueryParams = pick.apply({}, [fromAndToState.params].concat(nonQueryParamKeys)); - var nonQueryParamSet = new $$UMFP.ParamSet(nonQueryParams); - return nonQueryParamSet.$$equals(fromParams, toParams); - } - - // If reload was not explicitly requested - // and we're transitioning to the same state we're already in - // and the locals didn't change - // or they changed in a way that doesn't merit reloading - // (reloadOnParams:false, or reloadOnSearch.false and only search params changed) - // Then return true. - if (!options.reload && to === from && - (locals === from.locals || (to.self.reloadOnSearch === false && nonSearchParamsEqual(from, fromParams, toParams)))) { - return true; - } - } -} - -angular.module('ui.router.state') - .value('$stateParams', {}) - .provider('$state', $StateProvider); diff --git a/src/main/webapp/bower_components/angular-ui-router/src/stateDirectives.js b/src/main/webapp/bower_components/angular-ui-router/src/stateDirectives.js deleted file mode 100644 index 09991030..00000000 --- a/src/main/webapp/bower_components/angular-ui-router/src/stateDirectives.js +++ /dev/null @@ -1,285 +0,0 @@ -function parseStateRef(ref, current) { - var preparsed = ref.match(/^\s*({[^}]*})\s*$/), parsed; - if (preparsed) ref = current + '(' + preparsed[1] + ')'; - parsed = ref.replace(/\n/g, " ").match(/^([^(]+?)\s*(\((.*)\))?$/); - if (!parsed || parsed.length !== 4) throw new Error("Invalid state ref '" + ref + "'"); - return { state: parsed[1], paramExpr: parsed[3] || null }; -} - -function stateContext(el) { - var stateData = el.parent().inheritedData('$uiView'); - - if (stateData && stateData.state && stateData.state.name) { - return stateData.state; - } -} - -/** - * @ngdoc directive - * @name ui.router.state.directive:ui-sref - * - * @requires ui.router.state.$state - * @requires $timeout - * - * @restrict A - * - * @description - * A directive that binds a link (`<a>` tag) to a state. If the state has an associated - * URL, the directive will automatically generate & update the `href` attribute via - * the {@link ui.router.state.$state#methods_href $state.href()} method. Clicking - * the link will trigger a state transition with optional parameters. - * - * Also middle-clicking, right-clicking, and ctrl-clicking on the link will be - * handled natively by the browser. - * - * You can also use relative state paths within ui-sref, just like the relative - * paths passed to `$state.go()`. You just need to be aware that the path is relative - * to the state that the link lives in, in other words the state that loaded the - * template containing the link. - * - * You can specify options to pass to {@link ui.router.state.$state#go $state.go()} - * using the `ui-sref-opts` attribute. Options are restricted to `location`, `inherit`, - * and `reload`. - * - * @example - * Here's an example of how you'd use ui-sref and how it would compile. If you have the - * following template: - * <pre> - * <a ui-sref="home">Home</a> | <a ui-sref="about">About</a> | <a ui-sref="{page: 2}">Next page</a> - * - * <ul> - * <li ng-repeat="contact in contacts"> - * <a ui-sref="contacts.detail({ id: contact.id })">{{ contact.name }}</a> - * </li> - * </ul> - * </pre> - * - * Then the compiled html would be (assuming Html5Mode is off and current state is contacts): - * <pre> - * <a href="#/home" ui-sref="home">Home</a> | <a href="#/about" ui-sref="about">About</a> | <a href="#/contacts?page=2" ui-sref="{page: 2}">Next page</a> - * - * <ul> - * <li ng-repeat="contact in contacts"> - * <a href="#/contacts/1" ui-sref="contacts.detail({ id: contact.id })">Joe</a> - * </li> - * <li ng-repeat="contact in contacts"> - * <a href="#/contacts/2" ui-sref="contacts.detail({ id: contact.id })">Alice</a> - * </li> - * <li ng-repeat="contact in contacts"> - * <a href="#/contacts/3" ui-sref="contacts.detail({ id: contact.id })">Bob</a> - * </li> - * </ul> - * - * <a ui-sref="home" ui-sref-opts="{reload: true}">Home</a> - * </pre> - * - * @param {string} ui-sref 'stateName' can be any valid absolute or relative state - * @param {Object} ui-sref-opts options to pass to {@link ui.router.state.$state#go $state.go()} - */ -$StateRefDirective.$inject = ['$state', '$timeout']; -function $StateRefDirective($state, $timeout) { - var allowedOptions = ['location', 'inherit', 'reload', 'absolute']; - - return { - restrict: 'A', - require: ['?^uiSrefActive', '?^uiSrefActiveEq'], - link: function(scope, element, attrs, uiSrefActive) { - var ref = parseStateRef(attrs.uiSref, $state.current.name); - var params = null, url = null, base = stateContext(element) || $state.$current; - // SVGAElement does not use the href attribute, but rather the 'xlinkHref' attribute. - var hrefKind = Object.prototype.toString.call(element.prop('href')) === '[object SVGAnimatedString]' ? - 'xlink:href' : 'href'; - var newHref = null, isAnchor = element.prop("tagName").toUpperCase() === "A"; - var isForm = element[0].nodeName === "FORM"; - var attr = isForm ? "action" : hrefKind, nav = true; - - var options = { relative: base, inherit: true }; - var optionsOverride = scope.$eval(attrs.uiSrefOpts) || {}; - - angular.forEach(allowedOptions, function(option) { - if (option in optionsOverride) { - options[option] = optionsOverride[option]; - } - }); - - var update = function(newVal) { - if (newVal) params = angular.copy(newVal); - if (!nav) return; - - newHref = $state.href(ref.state, params, options); - - var activeDirective = uiSrefActive[1] || uiSrefActive[0]; - if (activeDirective) { - activeDirective.$$addStateInfo(ref.state, params); - } - if (newHref === null) { - nav = false; - return false; - } - attrs.$set(attr, newHref); - }; - - if (ref.paramExpr) { - scope.$watch(ref.paramExpr, function(newVal, oldVal) { - if (newVal !== params) update(newVal); - }, true); - params = angular.copy(scope.$eval(ref.paramExpr)); - } - update(); - - if (isForm) return; - - element.bind("click", function(e) { - var button = e.which || e.button; - if ( !(button > 1 || e.ctrlKey || e.metaKey || e.shiftKey || element.attr('target')) ) { - // HACK: This is to allow ng-clicks to be processed before the transition is initiated: - var transition = $timeout(function() { - $state.go(ref.state, params, options); - }); - e.preventDefault(); - - // if the state has no URL, ignore one preventDefault from the <a> directive. - var ignorePreventDefaultCount = isAnchor && !newHref ? 1: 0; - e.preventDefault = function() { - if (ignorePreventDefaultCount-- <= 0) - $timeout.cancel(transition); - }; - } - }); - } - }; -} - -/** - * @ngdoc directive - * @name ui.router.state.directive:ui-sref-active - * - * @requires ui.router.state.$state - * @requires ui.router.state.$stateParams - * @requires $interpolate - * - * @restrict A - * - * @description - * A directive working alongside ui-sref to add classes to an element when the - * related ui-sref directive's state is active, and removing them when it is inactive. - * The primary use-case is to simplify the special appearance of navigation menus - * relying on `ui-sref`, by having the "active" state's menu button appear different, - * distinguishing it from the inactive menu items. - * - * ui-sref-active can live on the same element as ui-sref or on a parent element. The first - * ui-sref-active found at the same level or above the ui-sref will be used. - * - * Will activate when the ui-sref's target state or any child state is active. If you - * need to activate only when the ui-sref target state is active and *not* any of - * it's children, then you will use - * {@link ui.router.state.directive:ui-sref-active-eq ui-sref-active-eq} - * - * @example - * Given the following template: - * <pre> - * <ul> - * <li ui-sref-active="active" class="item"> - * <a href ui-sref="app.user({user: 'bilbobaggins'})">@bilbobaggins</a> - * </li> - * </ul> - * </pre> - * - * - * When the app state is "app.user" (or any children states), and contains the state parameter "user" with value "bilbobaggins", - * the resulting HTML will appear as (note the 'active' class): - * <pre> - * <ul> - * <li ui-sref-active="active" class="item active"> - * <a ui-sref="app.user({user: 'bilbobaggins'})" href="/users/bilbobaggins">@bilbobaggins</a> - * </li> - * </ul> - * </pre> - * - * The class name is interpolated **once** during the directives link time (any further changes to the - * interpolated value are ignored). - * - * Multiple classes may be specified in a space-separated format: - * <pre> - * <ul> - * <li ui-sref-active='class1 class2 class3'> - * <a ui-sref="app.user">link</a> - * </li> - * </ul> - * </pre> - */ - -/** - * @ngdoc directive - * @name ui.router.state.directive:ui-sref-active-eq - * - * @requires ui.router.state.$state - * @requires ui.router.state.$stateParams - * @requires $interpolate - * - * @restrict A - * - * @description - * The same as {@link ui.router.state.directive:ui-sref-active ui-sref-active} but will only activate - * when the exact target state used in the `ui-sref` is active; no child states. - * - */ -$StateRefActiveDirective.$inject = ['$state', '$stateParams', '$interpolate']; -function $StateRefActiveDirective($state, $stateParams, $interpolate) { - return { - restrict: "A", - controller: ['$scope', '$element', '$attrs', function ($scope, $element, $attrs) { - var states = [], activeClass; - - // There probably isn't much point in $observing this - // uiSrefActive and uiSrefActiveEq share the same directive object with some - // slight difference in logic routing - activeClass = $interpolate($attrs.uiSrefActiveEq || $attrs.uiSrefActive || '', false)($scope); - - // Allow uiSref to communicate with uiSrefActive[Equals] - this.$$addStateInfo = function (newState, newParams) { - var state = $state.get(newState, stateContext($element)); - - states.push({ - state: state || { name: newState }, - params: newParams - }); - - update(); - }; - - $scope.$on('$stateChangeSuccess', update); - - // Update route state - function update() { - if (anyMatch()) { - $element.addClass(activeClass); - } else { - $element.removeClass(activeClass); - } - } - - function anyMatch() { - for (var i = 0; i < states.length; i++) { - if (isMatch(states[i].state, states[i].params)) { - return true; - } - } - return false; - } - - function isMatch(state, params) { - if (typeof $attrs.uiSrefActiveEq !== 'undefined') { - return $state.is(state.name, params); - } else { - return $state.includes(state.name, params); - } - } - }] - }; -} - -angular.module('ui.router.state') - .directive('uiSref', $StateRefDirective) - .directive('uiSrefActive', $StateRefActiveDirective) - .directive('uiSrefActiveEq', $StateRefActiveDirective); diff --git a/src/main/webapp/bower_components/angular-ui-router/src/stateFilters.js b/src/main/webapp/bower_components/angular-ui-router/src/stateFilters.js deleted file mode 100644 index e0a11758..00000000 --- a/src/main/webapp/bower_components/angular-ui-router/src/stateFilters.js +++ /dev/null @@ -1,39 +0,0 @@ -/** - * @ngdoc filter - * @name ui.router.state.filter:isState - * - * @requires ui.router.state.$state - * - * @description - * Translates to {@link ui.router.state.$state#methods_is $state.is("stateName")}. - */ -$IsStateFilter.$inject = ['$state']; -function $IsStateFilter($state) { - var isFilter = function (state) { - return $state.is(state); - }; - isFilter.$stateful = true; - return isFilter; -} - -/** - * @ngdoc filter - * @name ui.router.state.filter:includedByState - * - * @requires ui.router.state.$state - * - * @description - * Translates to {@link ui.router.state.$state#methods_includes $state.includes('fullOrPartialStateName')}. - */ -$IncludedByStateFilter.$inject = ['$state']; -function $IncludedByStateFilter($state) { - var includesFilter = function (state) { - return $state.includes(state); - }; - includesFilter.$stateful = true; - return includesFilter; -} - -angular.module('ui.router.state') - .filter('isState', $IsStateFilter) - .filter('includedByState', $IncludedByStateFilter); diff --git a/src/main/webapp/bower_components/angular-ui-router/src/templateFactory.js b/src/main/webapp/bower_components/angular-ui-router/src/templateFactory.js deleted file mode 100644 index ca491a98..00000000 --- a/src/main/webapp/bower_components/angular-ui-router/src/templateFactory.js +++ /dev/null @@ -1,110 +0,0 @@ -/** - * @ngdoc object - * @name ui.router.util.$templateFactory - * - * @requires $http - * @requires $templateCache - * @requires $injector - * - * @description - * Service. Manages loading of templates. - */ -$TemplateFactory.$inject = ['$http', '$templateCache', '$injector']; -function $TemplateFactory( $http, $templateCache, $injector) { - - /** - * @ngdoc function - * @name ui.router.util.$templateFactory#fromConfig - * @methodOf ui.router.util.$templateFactory - * - * @description - * Creates a template from a configuration object. - * - * @param {object} config Configuration object for which to load a template. - * The following properties are search in the specified order, and the first one - * that is defined is used to create the template: - * - * @param {string|object} config.template html string template or function to - * load via {@link ui.router.util.$templateFactory#fromString fromString}. - * @param {string|object} config.templateUrl url to load or a function returning - * the url to load via {@link ui.router.util.$templateFactory#fromUrl fromUrl}. - * @param {Function} config.templateProvider function to invoke via - * {@link ui.router.util.$templateFactory#fromProvider fromProvider}. - * @param {object} params Parameters to pass to the template function. - * @param {object} locals Locals to pass to `invoke` if the template is loaded - * via a `templateProvider`. Defaults to `{ params: params }`. - * - * @return {string|object} The template html as a string, or a promise for - * that string,or `null` if no template is configured. - */ - this.fromConfig = function (config, params, locals) { - return ( - isDefined(config.template) ? this.fromString(config.template, params) : - isDefined(config.templateUrl) ? this.fromUrl(config.templateUrl, params) : - isDefined(config.templateProvider) ? this.fromProvider(config.templateProvider, params, locals) : - null - ); - }; - - /** - * @ngdoc function - * @name ui.router.util.$templateFactory#fromString - * @methodOf ui.router.util.$templateFactory - * - * @description - * Creates a template from a string or a function returning a string. - * - * @param {string|object} template html template as a string or function that - * returns an html template as a string. - * @param {object} params Parameters to pass to the template function. - * - * @return {string|object} The template html as a string, or a promise for that - * string. - */ - this.fromString = function (template, params) { - return isFunction(template) ? template(params) : template; - }; - - /** - * @ngdoc function - * @name ui.router.util.$templateFactory#fromUrl - * @methodOf ui.router.util.$templateFactory - * - * @description - * Loads a template from the a URL via `$http` and `$templateCache`. - * - * @param {string|Function} url url of the template to load, or a function - * that returns a url. - * @param {Object} params Parameters to pass to the url function. - * @return {string|Promise.<string>} The template html as a string, or a promise - * for that string. - */ - this.fromUrl = function (url, params) { - if (isFunction(url)) url = url(params); - if (url == null) return null; - else return $http - .get(url, { cache: $templateCache, headers: { Accept: 'text/html' }}) - .then(function(response) { return response.data; }); - }; - - /** - * @ngdoc function - * @name ui.router.util.$templateFactory#fromProvider - * @methodOf ui.router.util.$templateFactory - * - * @description - * Creates a template by invoking an injectable provider function. - * - * @param {Function} provider Function to invoke via `$injector.invoke` - * @param {Object} params Parameters for the template. - * @param {Object} locals Locals to pass to `invoke`. Defaults to - * `{ params: params }`. - * @return {string|Promise.<string>} The template html as a string, or a promise - * for that string. - */ - this.fromProvider = function (provider, params, locals) { - return $injector.invoke(provider, null, locals || { params: params }); - }; -} - -angular.module('ui.router.util').service('$templateFactory', $TemplateFactory); diff --git a/src/main/webapp/bower_components/angular-ui-router/src/urlMatcherFactory.js b/src/main/webapp/bower_components/angular-ui-router/src/urlMatcherFactory.js deleted file mode 100644 index bf116f02..00000000 --- a/src/main/webapp/bower_components/angular-ui-router/src/urlMatcherFactory.js +++ /dev/null @@ -1,1050 +0,0 @@ -var $$UMFP; // reference to $UrlMatcherFactoryProvider - -/** - * @ngdoc object - * @name ui.router.util.type:UrlMatcher - * - * @description - * Matches URLs against patterns and extracts named parameters from the path or the search - * part of the URL. A URL pattern consists of a path pattern, optionally followed by '?' and a list - * of search parameters. Multiple search parameter names are separated by '&'. Search parameters - * do not influence whether or not a URL is matched, but their values are passed through into - * the matched parameters returned by {@link ui.router.util.type:UrlMatcher#methods_exec exec}. - * - * Path parameter placeholders can be specified using simple colon/catch-all syntax or curly brace - * syntax, which optionally allows a regular expression for the parameter to be specified: - * - * * `':'` name - colon placeholder - * * `'*'` name - catch-all placeholder - * * `'{' name '}'` - curly placeholder - * * `'{' name ':' regexp|type '}'` - curly placeholder with regexp or type name. Should the - * regexp itself contain curly braces, they must be in matched pairs or escaped with a backslash. - * - * Parameter names may contain only word characters (latin letters, digits, and underscore) and - * must be unique within the pattern (across both path and search parameters). For colon - * placeholders or curly placeholders without an explicit regexp, a path parameter matches any - * number of characters other than '/'. For catch-all placeholders the path parameter matches - * any number of characters. - * - * Examples: - * - * * `'/hello/'` - Matches only if the path is exactly '/hello/'. There is no special treatment for - * trailing slashes, and patterns have to match the entire path, not just a prefix. - * * `'/user/:id'` - Matches '/user/bob' or '/user/1234!!!' or even '/user/' but not '/user' or - * '/user/bob/details'. The second path segment will be captured as the parameter 'id'. - * * `'/user/{id}'` - Same as the previous example, but using curly brace syntax. - * * `'/user/{id:[^/]*}'` - Same as the previous example. - * * `'/user/{id:[0-9a-fA-F]{1,8}}'` - Similar to the previous example, but only matches if the id - * parameter consists of 1 to 8 hex digits. - * * `'/files/{path:.*}'` - Matches any URL starting with '/files/' and captures the rest of the - * path into the parameter 'path'. - * * `'/files/*path'` - ditto. - * * `'/calendar/{start:date}'` - Matches "/calendar/2014-11-12" (because the pattern defined - * in the built-in `date` Type matches `2014-11-12`) and provides a Date object in $stateParams.start - * - * @param {string} pattern The pattern to compile into a matcher. - * @param {Object} config A configuration object hash: - * @param {Object=} parentMatcher Used to concatenate the pattern/config onto - * an existing UrlMatcher - * - * * `caseInsensitive` - `true` if URL matching should be case insensitive, otherwise `false`, the default value (for backward compatibility) is `false`. - * * `strict` - `false` if matching against a URL with a trailing slash should be treated as equivalent to a URL without a trailing slash, the default value is `true`. - * - * @property {string} prefix A static prefix of this pattern. The matcher guarantees that any - * URL matching this matcher (i.e. any string for which {@link ui.router.util.type:UrlMatcher#methods_exec exec()} returns - * non-null) will start with this prefix. - * - * @property {string} source The pattern that was passed into the constructor - * - * @property {string} sourcePath The path portion of the source property - * - * @property {string} sourceSearch The search portion of the source property - * - * @property {string} regex The constructed regex that will be used to match against the url when - * it is time to determine which url will match. - * - * @returns {Object} New `UrlMatcher` object - */ -function UrlMatcher(pattern, config, parentMatcher) { - config = extend({ params: {} }, isObject(config) ? config : {}); - - // Find all placeholders and create a compiled pattern, using either classic or curly syntax: - // '*' name - // ':' name - // '{' name '}' - // '{' name ':' regexp '}' - // The regular expression is somewhat complicated due to the need to allow curly braces - // inside the regular expression. The placeholder regexp breaks down as follows: - // ([:*])([\w\[\]]+) - classic placeholder ($1 / $2) (search version has - for snake-case) - // \{([\w\[\]]+)(?:\:( ... ))?\} - curly brace placeholder ($3) with optional regexp/type ... ($4) (search version has - for snake-case - // (?: ... | ... | ... )+ - the regexp consists of any number of atoms, an atom being either - // [^{}\\]+ - anything other than curly braces or backslash - // \\. - a backslash escape - // \{(?:[^{}\\]+|\\.)*\} - a matched set of curly braces containing other atoms - var placeholder = /([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g, - searchPlaceholder = /([:]?)([\w\[\]-]+)|\{([\w\[\]-]+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g, - compiled = '^', last = 0, m, - segments = this.segments = [], - parentParams = parentMatcher ? parentMatcher.params : {}, - params = this.params = parentMatcher ? parentMatcher.params.$$new() : new $$UMFP.ParamSet(), - paramNames = []; - - function addParameter(id, type, config, location) { - paramNames.push(id); - if (parentParams[id]) return parentParams[id]; - if (!/^\w+(-+\w+)*(?:\[\])?$/.test(id)) throw new Error("Invalid parameter name '" + id + "' in pattern '" + pattern + "'"); - if (params[id]) throw new Error("Duplicate parameter name '" + id + "' in pattern '" + pattern + "'"); - params[id] = new $$UMFP.Param(id, type, config, location); - return params[id]; - } - - function quoteRegExp(string, pattern, squash, optional) { - var surroundPattern = ['',''], result = string.replace(/[\\\[\]\^$*+?.()|{}]/g, "\\$&"); - if (!pattern) return result; - switch(squash) { - case false: surroundPattern = ['(', ')' + (optional ? "?" : "")]; break; - case true: surroundPattern = ['?(', ')?']; break; - default: surroundPattern = ['(' + squash + "|", ')?']; break; - } - return result + surroundPattern[0] + pattern + surroundPattern[1]; - } - - this.source = pattern; - - // Split into static segments separated by path parameter placeholders. - // The number of segments is always 1 more than the number of parameters. - function matchDetails(m, isSearch) { - var id, regexp, segment, type, cfg, arrayMode; - id = m[2] || m[3]; // IE[78] returns '' for unmatched groups instead of null - cfg = config.params[id]; - segment = pattern.substring(last, m.index); - regexp = isSearch ? m[4] : m[4] || (m[1] == '*' ? '.*' : null); - type = $$UMFP.type(regexp || "string") || inherit($$UMFP.type("string"), { pattern: new RegExp(regexp, config.caseInsensitive ? 'i' : undefined) }); - return { - id: id, regexp: regexp, segment: segment, type: type, cfg: cfg - }; - } - - var p, param, segment; - while ((m = placeholder.exec(pattern))) { - p = matchDetails(m, false); - if (p.segment.indexOf('?') >= 0) break; // we're into the search part - - param = addParameter(p.id, p.type, p.cfg, "path"); - compiled += quoteRegExp(p.segment, param.type.pattern.source, param.squash, param.isOptional); - segments.push(p.segment); - last = placeholder.lastIndex; - } - segment = pattern.substring(last); - - // Find any search parameter names and remove them from the last segment - var i = segment.indexOf('?'); - - if (i >= 0) { - var search = this.sourceSearch = segment.substring(i); - segment = segment.substring(0, i); - this.sourcePath = pattern.substring(0, last + i); - - if (search.length > 0) { - last = 0; - while ((m = searchPlaceholder.exec(search))) { - p = matchDetails(m, true); - param = addParameter(p.id, p.type, p.cfg, "search"); - last = placeholder.lastIndex; - // check if ?& - } - } - } else { - this.sourcePath = pattern; - this.sourceSearch = ''; - } - - compiled += quoteRegExp(segment) + (config.strict === false ? '\/?' : '') + '$'; - segments.push(segment); - - this.regexp = new RegExp(compiled, config.caseInsensitive ? 'i' : undefined); - this.prefix = segments[0]; - this.$$paramNames = paramNames; -} - -/** - * @ngdoc function - * @name ui.router.util.type:UrlMatcher#concat - * @methodOf ui.router.util.type:UrlMatcher - * - * @description - * Returns a new matcher for a pattern constructed by appending the path part and adding the - * search parameters of the specified pattern to this pattern. The current pattern is not - * modified. This can be understood as creating a pattern for URLs that are relative to (or - * suffixes of) the current pattern. - * - * @example - * The following two matchers are equivalent: - * <pre> - * new UrlMatcher('/user/{id}?q').concat('/details?date'); - * new UrlMatcher('/user/{id}/details?q&date'); - * </pre> - * - * @param {string} pattern The pattern to append. - * @param {Object} config An object hash of the configuration for the matcher. - * @returns {UrlMatcher} A matcher for the concatenated pattern. - */ -UrlMatcher.prototype.concat = function (pattern, config) { - // Because order of search parameters is irrelevant, we can add our own search - // parameters to the end of the new pattern. Parse the new pattern by itself - // and then join the bits together, but it's much easier to do this on a string level. - var defaultConfig = { - caseInsensitive: $$UMFP.caseInsensitive(), - strict: $$UMFP.strictMode(), - squash: $$UMFP.defaultSquashPolicy() - }; - return new UrlMatcher(this.sourcePath + pattern + this.sourceSearch, extend(defaultConfig, config), this); -}; - -UrlMatcher.prototype.toString = function () { - return this.source; -}; - -/** - * @ngdoc function - * @name ui.router.util.type:UrlMatcher#exec - * @methodOf ui.router.util.type:UrlMatcher - * - * @description - * Tests the specified path against this matcher, and returns an object containing the captured - * parameter values, or null if the path does not match. The returned object contains the values - * of any search parameters that are mentioned in the pattern, but their value may be null if - * they are not present in `searchParams`. This means that search parameters are always treated - * as optional. - * - * @example - * <pre> - * new UrlMatcher('/user/{id}?q&r').exec('/user/bob', { - * x: '1', q: 'hello' - * }); - * // returns { id: 'bob', q: 'hello', r: null } - * </pre> - * - * @param {string} path The URL path to match, e.g. `$location.path()`. - * @param {Object} searchParams URL search parameters, e.g. `$location.search()`. - * @returns {Object} The captured parameter values. - */ -UrlMatcher.prototype.exec = function (path, searchParams) { - var m = this.regexp.exec(path); - if (!m) return null; - searchParams = searchParams || {}; - - var paramNames = this.parameters(), nTotal = paramNames.length, - nPath = this.segments.length - 1, - values = {}, i, j, cfg, paramName; - - if (nPath !== m.length - 1) throw new Error("Unbalanced capture group in route '" + this.source + "'"); - - function decodePathArray(string) { - function reverseString(str) { return str.split("").reverse().join(""); } - function unquoteDashes(str) { return str.replace(/\\-/g, "-"); } - - var split = reverseString(string).split(/-(?!\\)/); - var allReversed = map(split, reverseString); - return map(allReversed, unquoteDashes).reverse(); - } - - for (i = 0; i < nPath; i++) { - paramName = paramNames[i]; - var param = this.params[paramName]; - var paramVal = m[i+1]; - // if the param value matches a pre-replace pair, replace the value before decoding. - for (j = 0; j < param.replace; j++) { - if (param.replace[j].from === paramVal) paramVal = param.replace[j].to; - } - if (paramVal && param.array === true) paramVal = decodePathArray(paramVal); - values[paramName] = param.value(paramVal); - } - for (/**/; i < nTotal; i++) { - paramName = paramNames[i]; - values[paramName] = this.params[paramName].value(searchParams[paramName]); - } - - return values; -}; - -/** - * @ngdoc function - * @name ui.router.util.type:UrlMatcher#parameters - * @methodOf ui.router.util.type:UrlMatcher - * - * @description - * Returns the names of all path and search parameters of this pattern in an unspecified order. - * - * @returns {Array.<string>} An array of parameter names. Must be treated as read-only. If the - * pattern has no parameters, an empty array is returned. - */ -UrlMatcher.prototype.parameters = function (param) { - if (!isDefined(param)) return this.$$paramNames; - return this.params[param] || null; -}; - -/** - * @ngdoc function - * @name ui.router.util.type:UrlMatcher#validate - * @methodOf ui.router.util.type:UrlMatcher - * - * @description - * Checks an object hash of parameters to validate their correctness according to the parameter - * types of this `UrlMatcher`. - * - * @param {Object} params The object hash of parameters to validate. - * @returns {boolean} Returns `true` if `params` validates, otherwise `false`. - */ -UrlMatcher.prototype.validates = function (params) { - return this.params.$$validates(params); -}; - -/** - * @ngdoc function - * @name ui.router.util.type:UrlMatcher#format - * @methodOf ui.router.util.type:UrlMatcher - * - * @description - * Creates a URL that matches this pattern by substituting the specified values - * for the path and search parameters. Null values for path parameters are - * treated as empty strings. - * - * @example - * <pre> - * new UrlMatcher('/user/{id}?q').format({ id:'bob', q:'yes' }); - * // returns '/user/bob?q=yes' - * </pre> - * - * @param {Object} values the values to substitute for the parameters in this pattern. - * @returns {string} the formatted URL (path and optionally search part). - */ -UrlMatcher.prototype.format = function (values) { - values = values || {}; - var segments = this.segments, params = this.parameters(), paramset = this.params; - if (!this.validates(values)) return null; - - var i, search = false, nPath = segments.length - 1, nTotal = params.length, result = segments[0]; - - function encodeDashes(str) { // Replace dashes with encoded "\-" - return encodeURIComponent(str).replace(/-/g, function(c) { return '%5C%' + c.charCodeAt(0).toString(16).toUpperCase(); }); - } - - for (i = 0; i < nTotal; i++) { - var isPathParam = i < nPath; - var name = params[i], param = paramset[name], value = param.value(values[name]); - var isDefaultValue = param.isOptional && param.type.equals(param.value(), value); - var squash = isDefaultValue ? param.squash : false; - var encoded = param.type.encode(value); - - if (isPathParam) { - var nextSegment = segments[i + 1]; - if (squash === false) { - if (encoded != null) { - if (isArray(encoded)) { - result += map(encoded, encodeDashes).join("-"); - } else { - result += encodeURIComponent(encoded); - } - } - result += nextSegment; - } else if (squash === true) { - var capture = result.match(/\/$/) ? /\/?(.*)/ : /(.*)/; - result += nextSegment.match(capture)[1]; - } else if (isString(squash)) { - result += squash + nextSegment; - } - } else { - if (encoded == null || (isDefaultValue && squash !== false)) continue; - if (!isArray(encoded)) encoded = [ encoded ]; - encoded = map(encoded, encodeURIComponent).join('&' + name + '='); - result += (search ? '&' : '?') + (name + '=' + encoded); - search = true; - } - } - - return result; -}; - -/** - * @ngdoc object - * @name ui.router.util.type:Type - * - * @description - * Implements an interface to define custom parameter types that can be decoded from and encoded to - * string parameters matched in a URL. Used by {@link ui.router.util.type:UrlMatcher `UrlMatcher`} - * objects when matching or formatting URLs, or comparing or validating parameter values. - * - * See {@link ui.router.util.$urlMatcherFactory#methods_type `$urlMatcherFactory#type()`} for more - * information on registering custom types. - * - * @param {Object} config A configuration object which contains the custom type definition. The object's - * properties will override the default methods and/or pattern in `Type`'s public interface. - * @example - * <pre> - * { - * decode: function(val) { return parseInt(val, 10); }, - * encode: function(val) { return val && val.toString(); }, - * equals: function(a, b) { return this.is(a) && a === b; }, - * is: function(val) { return angular.isNumber(val) isFinite(val) && val % 1 === 0; }, - * pattern: /\d+/ - * } - * </pre> - * - * @property {RegExp} pattern The regular expression pattern used to match values of this type when - * coming from a substring of a URL. - * - * @returns {Object} Returns a new `Type` object. - */ -function Type(config) { - extend(this, config); -} - -/** - * @ngdoc function - * @name ui.router.util.type:Type#is - * @methodOf ui.router.util.type:Type - * - * @description - * Detects whether a value is of a particular type. Accepts a native (decoded) value - * and determines whether it matches the current `Type` object. - * - * @param {*} val The value to check. - * @param {string} key Optional. If the type check is happening in the context of a specific - * {@link ui.router.util.type:UrlMatcher `UrlMatcher`} object, this is the name of the - * parameter in which `val` is stored. Can be used for meta-programming of `Type` objects. - * @returns {Boolean} Returns `true` if the value matches the type, otherwise `false`. - */ -Type.prototype.is = function(val, key) { - return true; -}; - -/** - * @ngdoc function - * @name ui.router.util.type:Type#encode - * @methodOf ui.router.util.type:Type - * - * @description - * Encodes a custom/native type value to a string that can be embedded in a URL. Note that the - * return value does *not* need to be URL-safe (i.e. passed through `encodeURIComponent()`), it - * only needs to be a representation of `val` that has been coerced to a string. - * - * @param {*} val The value to encode. - * @param {string} key The name of the parameter in which `val` is stored. Can be used for - * meta-programming of `Type` objects. - * @returns {string} Returns a string representation of `val` that can be encoded in a URL. - */ -Type.prototype.encode = function(val, key) { - return val; -}; - -/** - * @ngdoc function - * @name ui.router.util.type:Type#decode - * @methodOf ui.router.util.type:Type - * - * @description - * Converts a parameter value (from URL string or transition param) to a custom/native value. - * - * @param {string} val The URL parameter value to decode. - * @param {string} key The name of the parameter in which `val` is stored. Can be used for - * meta-programming of `Type` objects. - * @returns {*} Returns a custom representation of the URL parameter value. - */ -Type.prototype.decode = function(val, key) { - return val; -}; - -/** - * @ngdoc function - * @name ui.router.util.type:Type#equals - * @methodOf ui.router.util.type:Type - * - * @description - * Determines whether two decoded values are equivalent. - * - * @param {*} a A value to compare against. - * @param {*} b A value to compare against. - * @returns {Boolean} Returns `true` if the values are equivalent/equal, otherwise `false`. - */ -Type.prototype.equals = function(a, b) { - return a == b; -}; - -Type.prototype.$subPattern = function() { - var sub = this.pattern.toString(); - return sub.substr(1, sub.length - 2); -}; - -Type.prototype.pattern = /.*/; - -Type.prototype.toString = function() { return "{Type:" + this.name + "}"; }; - -/** Given an encoded string, or a decoded object, returns a decoded object */ -Type.prototype.$normalize = function(val) { - return this.is(val) ? val : this.decode(val); -}; - -/* - * Wraps an existing custom Type as an array of Type, depending on 'mode'. - * e.g.: - * - urlmatcher pattern "/path?{queryParam[]:int}" - * - url: "/path?queryParam=1&queryParam=2 - * - $stateParams.queryParam will be [1, 2] - * if `mode` is "auto", then - * - url: "/path?queryParam=1 will create $stateParams.queryParam: 1 - * - url: "/path?queryParam=1&queryParam=2 will create $stateParams.queryParam: [1, 2] - */ -Type.prototype.$asArray = function(mode, isSearch) { - if (!mode) return this; - if (mode === "auto" && !isSearch) throw new Error("'auto' array mode is for query parameters only"); - - function ArrayType(type, mode) { - function bindTo(type, callbackName) { - return function() { - return type[callbackName].apply(type, arguments); - }; - } - - // Wrap non-array value as array - function arrayWrap(val) { return isArray(val) ? val : (isDefined(val) ? [ val ] : []); } - // Unwrap array value for "auto" mode. Return undefined for empty array. - function arrayUnwrap(val) { - switch(val.length) { - case 0: return undefined; - case 1: return mode === "auto" ? val[0] : val; - default: return val; - } - } - function falsey(val) { return !val; } - - // Wraps type (.is/.encode/.decode) functions to operate on each value of an array - function arrayHandler(callback, allTruthyMode) { - return function handleArray(val) { - val = arrayWrap(val); - var result = map(val, callback); - if (allTruthyMode === true) - return filter(result, falsey).length === 0; - return arrayUnwrap(result); - }; - } - - // Wraps type (.equals) functions to operate on each value of an array - function arrayEqualsHandler(callback) { - return function handleArray(val1, val2) { - var left = arrayWrap(val1), right = arrayWrap(val2); - if (left.length !== right.length) return false; - for (var i = 0; i < left.length; i++) { - if (!callback(left[i], right[i])) return false; - } - return true; - }; - } - - this.encode = arrayHandler(bindTo(type, 'encode')); - this.decode = arrayHandler(bindTo(type, 'decode')); - this.is = arrayHandler(bindTo(type, 'is'), true); - this.equals = arrayEqualsHandler(bindTo(type, 'equals')); - this.pattern = type.pattern; - this.$normalize = arrayHandler(bindTo(type, '$normalize')); - this.name = type.name; - this.$arrayMode = mode; - } - - return new ArrayType(this, mode); -}; - - - -/** - * @ngdoc object - * @name ui.router.util.$urlMatcherFactory - * - * @description - * Factory for {@link ui.router.util.type:UrlMatcher `UrlMatcher`} instances. The factory - * is also available to providers under the name `$urlMatcherFactoryProvider`. - */ -function $UrlMatcherFactory() { - $$UMFP = this; - - var isCaseInsensitive = false, isStrictMode = true, defaultSquashPolicy = false; - - function valToString(val) { return val != null ? val.toString().replace(/\//g, "%2F") : val; } - function valFromString(val) { return val != null ? val.toString().replace(/%2F/g, "/") : val; } - - var $types = {}, enqueue = true, typeQueue = [], injector, defaultTypes = { - string: { - encode: valToString, - decode: valFromString, - // TODO: in 1.0, make string .is() return false if value is undefined/null by default. - // In 0.2.x, string params are optional by default for backwards compat - is: function(val) { return val == null || !isDefined(val) || typeof val === "string"; }, - pattern: /[^/]*/ - }, - int: { - encode: valToString, - decode: function(val) { return parseInt(val, 10); }, - is: function(val) { return isDefined(val) && this.decode(val.toString()) === val; }, - pattern: /\d+/ - }, - bool: { - encode: function(val) { return val ? 1 : 0; }, - decode: function(val) { return parseInt(val, 10) !== 0; }, - is: function(val) { return val === true || val === false; }, - pattern: /0|1/ - }, - date: { - encode: function (val) { - if (!this.is(val)) - return undefined; - return [ val.getFullYear(), - ('0' + (val.getMonth() + 1)).slice(-2), - ('0' + val.getDate()).slice(-2) - ].join("-"); - }, - decode: function (val) { - if (this.is(val)) return val; - var match = this.capture.exec(val); - return match ? new Date(match[1], match[2] - 1, match[3]) : undefined; - }, - is: function(val) { return val instanceof Date && !isNaN(val.valueOf()); }, - equals: function (a, b) { return this.is(a) && this.is(b) && a.toISOString() === b.toISOString(); }, - pattern: /[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/, - capture: /([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/ - }, - json: { - encode: angular.toJson, - decode: angular.fromJson, - is: angular.isObject, - equals: angular.equals, - pattern: /[^/]*/ - }, - any: { // does not encode/decode - encode: angular.identity, - decode: angular.identity, - equals: angular.equals, - pattern: /.*/ - } - }; - - function getDefaultConfig() { - return { - strict: isStrictMode, - caseInsensitive: isCaseInsensitive - }; - } - - function isInjectable(value) { - return (isFunction(value) || (isArray(value) && isFunction(value[value.length - 1]))); - } - - /** - * [Internal] Get the default value of a parameter, which may be an injectable function. - */ - $UrlMatcherFactory.$$getDefaultValue = function(config) { - if (!isInjectable(config.value)) return config.value; - if (!injector) throw new Error("Injectable functions cannot be called at configuration time"); - return injector.invoke(config.value); - }; - - /** - * @ngdoc function - * @name ui.router.util.$urlMatcherFactory#caseInsensitive - * @methodOf ui.router.util.$urlMatcherFactory - * - * @description - * Defines whether URL matching should be case sensitive (the default behavior), or not. - * - * @param {boolean} value `false` to match URL in a case sensitive manner; otherwise `true`; - * @returns {boolean} the current value of caseInsensitive - */ - this.caseInsensitive = function(value) { - if (isDefined(value)) - isCaseInsensitive = value; - return isCaseInsensitive; - }; - - /** - * @ngdoc function - * @name ui.router.util.$urlMatcherFactory#strictMode - * @methodOf ui.router.util.$urlMatcherFactory - * - * @description - * Defines whether URLs should match trailing slashes, or not (the default behavior). - * - * @param {boolean=} value `false` to match trailing slashes in URLs, otherwise `true`. - * @returns {boolean} the current value of strictMode - */ - this.strictMode = function(value) { - if (isDefined(value)) - isStrictMode = value; - return isStrictMode; - }; - - /** - * @ngdoc function - * @name ui.router.util.$urlMatcherFactory#defaultSquashPolicy - * @methodOf ui.router.util.$urlMatcherFactory - * - * @description - * Sets the default behavior when generating or matching URLs with default parameter values. - * - * @param {string} value A string that defines the default parameter URL squashing behavior. - * `nosquash`: When generating an href with a default parameter value, do not squash the parameter value from the URL - * `slash`: When generating an href with a default parameter value, squash (remove) the parameter value, and, if the - * parameter is surrounded by slashes, squash (remove) one slash from the URL - * any other string, e.g. "~": When generating an href with a default parameter value, squash (remove) - * the parameter value from the URL and replace it with this string. - */ - this.defaultSquashPolicy = function(value) { - if (!isDefined(value)) return defaultSquashPolicy; - if (value !== true && value !== false && !isString(value)) - throw new Error("Invalid squash policy: " + value + ". Valid policies: false, true, arbitrary-string"); - defaultSquashPolicy = value; - return value; - }; - - /** - * @ngdoc function - * @name ui.router.util.$urlMatcherFactory#compile - * @methodOf ui.router.util.$urlMatcherFactory - * - * @description - * Creates a {@link ui.router.util.type:UrlMatcher `UrlMatcher`} for the specified pattern. - * - * @param {string} pattern The URL pattern. - * @param {Object} config The config object hash. - * @returns {UrlMatcher} The UrlMatcher. - */ - this.compile = function (pattern, config) { - return new UrlMatcher(pattern, extend(getDefaultConfig(), config)); - }; - - /** - * @ngdoc function - * @name ui.router.util.$urlMatcherFactory#isMatcher - * @methodOf ui.router.util.$urlMatcherFactory - * - * @description - * Returns true if the specified object is a `UrlMatcher`, or false otherwise. - * - * @param {Object} object The object to perform the type check against. - * @returns {Boolean} Returns `true` if the object matches the `UrlMatcher` interface, by - * implementing all the same methods. - */ - this.isMatcher = function (o) { - if (!isObject(o)) return false; - var result = true; - - forEach(UrlMatcher.prototype, function(val, name) { - if (isFunction(val)) { - result = result && (isDefined(o[name]) && isFunction(o[name])); - } - }); - return result; - }; - - /** - * @ngdoc function - * @name ui.router.util.$urlMatcherFactory#type - * @methodOf ui.router.util.$urlMatcherFactory - * - * @description - * Registers a custom {@link ui.router.util.type:Type `Type`} object that can be used to - * generate URLs with typed parameters. - * - * @param {string} name The type name. - * @param {Object|Function} definition The type definition. See - * {@link ui.router.util.type:Type `Type`} for information on the values accepted. - * @param {Object|Function} definitionFn (optional) A function that is injected before the app - * runtime starts. The result of this function is merged into the existing `definition`. - * See {@link ui.router.util.type:Type `Type`} for information on the values accepted. - * - * @returns {Object} Returns `$urlMatcherFactoryProvider`. - * - * @example - * This is a simple example of a custom type that encodes and decodes items from an - * array, using the array index as the URL-encoded value: - * - * <pre> - * var list = ['John', 'Paul', 'George', 'Ringo']; - * - * $urlMatcherFactoryProvider.type('listItem', { - * encode: function(item) { - * // Represent the list item in the URL using its corresponding index - * return list.indexOf(item); - * }, - * decode: function(item) { - * // Look up the list item by index - * return list[parseInt(item, 10)]; - * }, - * is: function(item) { - * // Ensure the item is valid by checking to see that it appears - * // in the list - * return list.indexOf(item) > -1; - * } - * }); - * - * $stateProvider.state('list', { - * url: "/list/{item:listItem}", - * controller: function($scope, $stateParams) { - * console.log($stateParams.item); - * } - * }); - * - * // ... - * - * // Changes URL to '/list/3', logs "Ringo" to the console - * $state.go('list', { item: "Ringo" }); - * </pre> - * - * This is a more complex example of a type that relies on dependency injection to - * interact with services, and uses the parameter name from the URL to infer how to - * handle encoding and decoding parameter values: - * - * <pre> - * // Defines a custom type that gets a value from a service, - * // where each service gets different types of values from - * // a backend API: - * $urlMatcherFactoryProvider.type('dbObject', {}, function(Users, Posts) { - * - * // Matches up services to URL parameter names - * var services = { - * user: Users, - * post: Posts - * }; - * - * return { - * encode: function(object) { - * // Represent the object in the URL using its unique ID - * return object.id; - * }, - * decode: function(value, key) { - * // Look up the object by ID, using the parameter - * // name (key) to call the correct service - * return services[key].findById(value); - * }, - * is: function(object, key) { - * // Check that object is a valid dbObject - * return angular.isObject(object) && object.id && services[key]; - * } - * equals: function(a, b) { - * // Check the equality of decoded objects by comparing - * // their unique IDs - * return a.id === b.id; - * } - * }; - * }); - * - * // In a config() block, you can then attach URLs with - * // type-annotated parameters: - * $stateProvider.state('users', { - * url: "/users", - * // ... - * }).state('users.item', { - * url: "/{user:dbObject}", - * controller: function($scope, $stateParams) { - * // $stateParams.user will now be an object returned from - * // the Users service - * }, - * // ... - * }); - * </pre> - */ - this.type = function (name, definition, definitionFn) { - if (!isDefined(definition)) return $types[name]; - if ($types.hasOwnProperty(name)) throw new Error("A type named '" + name + "' has already been defined."); - - $types[name] = new Type(extend({ name: name }, definition)); - if (definitionFn) { - typeQueue.push({ name: name, def: definitionFn }); - if (!enqueue) flushTypeQueue(); - } - return this; - }; - - // `flushTypeQueue()` waits until `$urlMatcherFactory` is injected before invoking the queued `definitionFn`s - function flushTypeQueue() { - while(typeQueue.length) { - var type = typeQueue.shift(); - if (type.pattern) throw new Error("You cannot override a type's .pattern at runtime."); - angular.extend($types[type.name], injector.invoke(type.def)); - } - } - - // Register default types. Store them in the prototype of $types. - forEach(defaultTypes, function(type, name) { $types[name] = new Type(extend({name: name}, type)); }); - $types = inherit($types, {}); - - /* No need to document $get, since it returns this */ - this.$get = ['$injector', function ($injector) { - injector = $injector; - enqueue = false; - flushTypeQueue(); - - forEach(defaultTypes, function(type, name) { - if (!$types[name]) $types[name] = new Type(type); - }); - return this; - }]; - - this.Param = function Param(id, type, config, location) { - var self = this; - config = unwrapShorthand(config); - type = getType(config, type, location); - var arrayMode = getArrayMode(); - type = arrayMode ? type.$asArray(arrayMode, location === "search") : type; - if (type.name === "string" && !arrayMode && location === "path" && config.value === undefined) - config.value = ""; // for 0.2.x; in 0.3.0+ do not automatically default to "" - var isOptional = config.value !== undefined; - var squash = getSquashPolicy(config, isOptional); - var replace = getReplace(config, arrayMode, isOptional, squash); - - function unwrapShorthand(config) { - var keys = isObject(config) ? objectKeys(config) : []; - var isShorthand = indexOf(keys, "value") === -1 && indexOf(keys, "type") === -1 && - indexOf(keys, "squash") === -1 && indexOf(keys, "array") === -1; - if (isShorthand) config = { value: config }; - config.$$fn = isInjectable(config.value) ? config.value : function () { return config.value; }; - return config; - } - - function getType(config, urlType, location) { - if (config.type && urlType) throw new Error("Param '"+id+"' has two type configurations."); - if (urlType) return urlType; - if (!config.type) return (location === "config" ? $types.any : $types.string); - return config.type instanceof Type ? config.type : new Type(config.type); - } - - // array config: param name (param[]) overrides default settings. explicit config overrides param name. - function getArrayMode() { - var arrayDefaults = { array: (location === "search" ? "auto" : false) }; - var arrayParamNomenclature = id.match(/\[\]$/) ? { array: true } : {}; - return extend(arrayDefaults, arrayParamNomenclature, config).array; - } - - /** - * returns false, true, or the squash value to indicate the "default parameter url squash policy". - */ - function getSquashPolicy(config, isOptional) { - var squash = config.squash; - if (!isOptional || squash === false) return false; - if (!isDefined(squash) || squash == null) return defaultSquashPolicy; - if (squash === true || isString(squash)) return squash; - throw new Error("Invalid squash policy: '" + squash + "'. Valid policies: false, true, or arbitrary string"); - } - - function getReplace(config, arrayMode, isOptional, squash) { - var replace, configuredKeys, defaultPolicy = [ - { from: "", to: (isOptional || arrayMode ? undefined : "") }, - { from: null, to: (isOptional || arrayMode ? undefined : "") } - ]; - replace = isArray(config.replace) ? config.replace : []; - if (isString(squash)) - replace.push({ from: squash, to: undefined }); - configuredKeys = map(replace, function(item) { return item.from; } ); - return filter(defaultPolicy, function(item) { return indexOf(configuredKeys, item.from) === -1; }).concat(replace); - } - - /** - * [Internal] Get the default value of a parameter, which may be an injectable function. - */ - function $$getDefaultValue() { - if (!injector) throw new Error("Injectable functions cannot be called at configuration time"); - var defaultValue = injector.invoke(config.$$fn); - if (defaultValue !== null && defaultValue !== undefined && !self.type.is(defaultValue)) - throw new Error("Default value (" + defaultValue + ") for parameter '" + self.id + "' is not an instance of Type (" + self.type.name + ")"); - return defaultValue; - } - - /** - * [Internal] Gets the decoded representation of a value if the value is defined, otherwise, returns the - * default value, which may be the result of an injectable function. - */ - function $value(value) { - function hasReplaceVal(val) { return function(obj) { return obj.from === val; }; } - function $replace(value) { - var replacement = map(filter(self.replace, hasReplaceVal(value)), function(obj) { return obj.to; }); - return replacement.length ? replacement[0] : value; - } - value = $replace(value); - return !isDefined(value) ? $$getDefaultValue() : self.type.$normalize(value); - } - - function toString() { return "{Param:" + id + " " + type + " squash: '" + squash + "' optional: " + isOptional + "}"; } - - extend(this, { - id: id, - type: type, - location: location, - array: arrayMode, - squash: squash, - replace: replace, - isOptional: isOptional, - value: $value, - dynamic: undefined, - config: config, - toString: toString - }); - }; - - function ParamSet(params) { - extend(this, params || {}); - } - - ParamSet.prototype = { - $$new: function() { - return inherit(this, extend(new ParamSet(), { $$parent: this})); - }, - $$keys: function () { - var keys = [], chain = [], parent = this, - ignore = objectKeys(ParamSet.prototype); - while (parent) { chain.push(parent); parent = parent.$$parent; } - chain.reverse(); - forEach(chain, function(paramset) { - forEach(objectKeys(paramset), function(key) { - if (indexOf(keys, key) === -1 && indexOf(ignore, key) === -1) keys.push(key); - }); - }); - return keys; - }, - $$values: function(paramValues) { - var values = {}, self = this; - forEach(self.$$keys(), function(key) { - values[key] = self[key].value(paramValues && paramValues[key]); - }); - return values; - }, - $$equals: function(paramValues1, paramValues2) { - var equal = true, self = this; - forEach(self.$$keys(), function(key) { - var left = paramValues1 && paramValues1[key], right = paramValues2 && paramValues2[key]; - if (!self[key].type.equals(left, right)) equal = false; - }); - return equal; - }, - $$validates: function $$validate(paramValues) { - var keys = this.$$keys(), i, param, rawVal, normalized, encoded; - for (i = 0; i < keys.length; i++) { - param = this[keys[i]]; - rawVal = paramValues[keys[i]]; - if ((rawVal === undefined || rawVal === null) && param.isOptional) - break; // There was no parameter value, but the param is optional - normalized = param.type.$normalize(rawVal); - if (!param.type.is(normalized)) - return false; // The value was not of the correct Type, and could not be decoded to the correct Type - encoded = param.type.encode(normalized); - if (angular.isString(encoded) && !param.type.pattern.exec(encoded)) - return false; // The value was of the correct type, but when encoded, did not match the Type's regexp - } - return true; - }, - $$parent: undefined - }; - - this.ParamSet = ParamSet; -} - -// Register as a provider so it's available to other providers -angular.module('ui.router.util').provider('$urlMatcherFactory', $UrlMatcherFactory); -angular.module('ui.router.util').run(['$urlMatcherFactory', function($urlMatcherFactory) { }]); diff --git a/src/main/webapp/bower_components/angular-ui-router/src/urlRouter.js b/src/main/webapp/bower_components/angular-ui-router/src/urlRouter.js deleted file mode 100644 index 33c17090..00000000 --- a/src/main/webapp/bower_components/angular-ui-router/src/urlRouter.js +++ /dev/null @@ -1,427 +0,0 @@ -/** - * @ngdoc object - * @name ui.router.router.$urlRouterProvider - * - * @requires ui.router.util.$urlMatcherFactoryProvider - * @requires $locationProvider - * - * @description - * `$urlRouterProvider` has the responsibility of watching `$location`. - * When `$location` changes it runs through a list of rules one by one until a - * match is found. `$urlRouterProvider` is used behind the scenes anytime you specify - * a url in a state configuration. All urls are compiled into a UrlMatcher object. - * - * There are several methods on `$urlRouterProvider` that make it useful to use directly - * in your module config. - */ -$UrlRouterProvider.$inject = ['$locationProvider', '$urlMatcherFactoryProvider']; -function $UrlRouterProvider( $locationProvider, $urlMatcherFactory) { - var rules = [], otherwise = null, interceptDeferred = false, listener; - - // Returns a string that is a prefix of all strings matching the RegExp - function regExpPrefix(re) { - var prefix = /^\^((?:\\[^a-zA-Z0-9]|[^\\\[\]\^$*+?.()|{}]+)*)/.exec(re.source); - return (prefix != null) ? prefix[1].replace(/\\(.)/g, "$1") : ''; - } - - // Interpolates matched values into a String.replace()-style pattern - function interpolate(pattern, match) { - return pattern.replace(/\$(\$|\d{1,2})/, function (m, what) { - return match[what === '$' ? 0 : Number(what)]; - }); - } - - /** - * @ngdoc function - * @name ui.router.router.$urlRouterProvider#rule - * @methodOf ui.router.router.$urlRouterProvider - * - * @description - * Defines rules that are used by `$urlRouterProvider` to find matches for - * specific URLs. - * - * @example - * <pre> - * var app = angular.module('app', ['ui.router.router']); - * - * app.config(function ($urlRouterProvider) { - * // Here's an example of how you might allow case insensitive urls - * $urlRouterProvider.rule(function ($injector, $location) { - * var path = $location.path(), - * normalized = path.toLowerCase(); - * - * if (path !== normalized) { - * return normalized; - * } - * }); - * }); - * </pre> - * - * @param {object} rule Handler function that takes `$injector` and `$location` - * services as arguments. You can use them to return a valid path as a string. - * - * @return {object} `$urlRouterProvider` - `$urlRouterProvider` instance - */ - this.rule = function (rule) { - if (!isFunction(rule)) throw new Error("'rule' must be a function"); - rules.push(rule); - return this; - }; - - /** - * @ngdoc object - * @name ui.router.router.$urlRouterProvider#otherwise - * @methodOf ui.router.router.$urlRouterProvider - * - * @description - * Defines a path that is used when an invalid route is requested. - * - * @example - * <pre> - * var app = angular.module('app', ['ui.router.router']); - * - * app.config(function ($urlRouterProvider) { - * // if the path doesn't match any of the urls you configured - * // otherwise will take care of routing the user to the - * // specified url - * $urlRouterProvider.otherwise('/index'); - * - * // Example of using function rule as param - * $urlRouterProvider.otherwise(function ($injector, $location) { - * return '/a/valid/url'; - * }); - * }); - * </pre> - * - * @param {string|object} rule The url path you want to redirect to or a function - * rule that returns the url path. The function version is passed two params: - * `$injector` and `$location` services, and must return a url string. - * - * @return {object} `$urlRouterProvider` - `$urlRouterProvider` instance - */ - this.otherwise = function (rule) { - if (isString(rule)) { - var redirect = rule; - rule = function () { return redirect; }; - } - else if (!isFunction(rule)) throw new Error("'rule' must be a function"); - otherwise = rule; - return this; - }; - - - function handleIfMatch($injector, handler, match) { - if (!match) return false; - var result = $injector.invoke(handler, handler, { $match: match }); - return isDefined(result) ? result : true; - } - - /** - * @ngdoc function - * @name ui.router.router.$urlRouterProvider#when - * @methodOf ui.router.router.$urlRouterProvider - * - * @description - * Registers a handler for a given url matching. if handle is a string, it is - * treated as a redirect, and is interpolated according to the syntax of match - * (i.e. like `String.replace()` for `RegExp`, or like a `UrlMatcher` pattern otherwise). - * - * If the handler is a function, it is injectable. It gets invoked if `$location` - * matches. You have the option of inject the match object as `$match`. - * - * The handler can return - * - * - **falsy** to indicate that the rule didn't match after all, then `$urlRouter` - * will continue trying to find another one that matches. - * - **string** which is treated as a redirect and passed to `$location.url()` - * - **void** or any **truthy** value tells `$urlRouter` that the url was handled. - * - * @example - * <pre> - * var app = angular.module('app', ['ui.router.router']); - * - * app.config(function ($urlRouterProvider) { - * $urlRouterProvider.when($state.url, function ($match, $stateParams) { - * if ($state.$current.navigable !== state || - * !equalForKeys($match, $stateParams) { - * $state.transitionTo(state, $match, false); - * } - * }); - * }); - * </pre> - * - * @param {string|object} what The incoming path that you want to redirect. - * @param {string|object} handler The path you want to redirect your user to. - */ - this.when = function (what, handler) { - var redirect, handlerIsString = isString(handler); - if (isString(what)) what = $urlMatcherFactory.compile(what); - - if (!handlerIsString && !isFunction(handler) && !isArray(handler)) - throw new Error("invalid 'handler' in when()"); - - var strategies = { - matcher: function (what, handler) { - if (handlerIsString) { - redirect = $urlMatcherFactory.compile(handler); - handler = ['$match', function ($match) { return redirect.format($match); }]; - } - return extend(function ($injector, $location) { - return handleIfMatch($injector, handler, what.exec($location.path(), $location.search())); - }, { - prefix: isString(what.prefix) ? what.prefix : '' - }); - }, - regex: function (what, handler) { - if (what.global || what.sticky) throw new Error("when() RegExp must not be global or sticky"); - - if (handlerIsString) { - redirect = handler; - handler = ['$match', function ($match) { return interpolate(redirect, $match); }]; - } - return extend(function ($injector, $location) { - return handleIfMatch($injector, handler, what.exec($location.path())); - }, { - prefix: regExpPrefix(what) - }); - } - }; - - var check = { matcher: $urlMatcherFactory.isMatcher(what), regex: what instanceof RegExp }; - - for (var n in check) { - if (check[n]) return this.rule(strategies[n](what, handler)); - } - - throw new Error("invalid 'what' in when()"); - }; - - /** - * @ngdoc function - * @name ui.router.router.$urlRouterProvider#deferIntercept - * @methodOf ui.router.router.$urlRouterProvider - * - * @description - * Disables (or enables) deferring location change interception. - * - * If you wish to customize the behavior of syncing the URL (for example, if you wish to - * defer a transition but maintain the current URL), call this method at configuration time. - * Then, at run time, call `$urlRouter.listen()` after you have configured your own - * `$locationChangeSuccess` event handler. - * - * @example - * <pre> - * var app = angular.module('app', ['ui.router.router']); - * - * app.config(function ($urlRouterProvider) { - * - * // Prevent $urlRouter from automatically intercepting URL changes; - * // this allows you to configure custom behavior in between - * // location changes and route synchronization: - * $urlRouterProvider.deferIntercept(); - * - * }).run(function ($rootScope, $urlRouter, UserService) { - * - * $rootScope.$on('$locationChangeSuccess', function(e) { - * // UserService is an example service for managing user state - * if (UserService.isLoggedIn()) return; - * - * // Prevent $urlRouter's default handler from firing - * e.preventDefault(); - * - * UserService.handleLogin().then(function() { - * // Once the user has logged in, sync the current URL - * // to the router: - * $urlRouter.sync(); - * }); - * }); - * - * // Configures $urlRouter's listener *after* your custom listener - * $urlRouter.listen(); - * }); - * </pre> - * - * @param {boolean} defer Indicates whether to defer location change interception. Passing - no parameter is equivalent to `true`. - */ - this.deferIntercept = function (defer) { - if (defer === undefined) defer = true; - interceptDeferred = defer; - }; - - /** - * @ngdoc object - * @name ui.router.router.$urlRouter - * - * @requires $location - * @requires $rootScope - * @requires $injector - * @requires $browser - * - * @description - * - */ - this.$get = $get; - $get.$inject = ['$location', '$rootScope', '$injector', '$browser']; - function $get( $location, $rootScope, $injector, $browser) { - - var baseHref = $browser.baseHref(), location = $location.url(), lastPushedUrl; - - function appendBasePath(url, isHtml5, absolute) { - if (baseHref === '/') return url; - if (isHtml5) return baseHref.slice(0, -1) + url; - if (absolute) return baseHref.slice(1) + url; - return url; - } - - // TODO: Optimize groups of rules with non-empty prefix into some sort of decision tree - function update(evt) { - if (evt && evt.defaultPrevented) return; - var ignoreUpdate = lastPushedUrl && $location.url() === lastPushedUrl; - lastPushedUrl = undefined; - // TODO: Re-implement this in 1.0 for https://github.com/angular-ui/ui-router/issues/1573 - //if (ignoreUpdate) return true; - - function check(rule) { - var handled = rule($injector, $location); - - if (!handled) return false; - if (isString(handled)) $location.replace().url(handled); - return true; - } - var n = rules.length, i; - - for (i = 0; i < n; i++) { - if (check(rules[i])) return; - } - // always check otherwise last to allow dynamic updates to the set of rules - if (otherwise) check(otherwise); - } - - function listen() { - listener = listener || $rootScope.$on('$locationChangeSuccess', update); - return listener; - } - - if (!interceptDeferred) listen(); - - return { - /** - * @ngdoc function - * @name ui.router.router.$urlRouter#sync - * @methodOf ui.router.router.$urlRouter - * - * @description - * Triggers an update; the same update that happens when the address bar url changes, aka `$locationChangeSuccess`. - * This method is useful when you need to use `preventDefault()` on the `$locationChangeSuccess` event, - * perform some custom logic (route protection, auth, config, redirection, etc) and then finally proceed - * with the transition by calling `$urlRouter.sync()`. - * - * @example - * <pre> - * angular.module('app', ['ui.router']) - * .run(function($rootScope, $urlRouter) { - * $rootScope.$on('$locationChangeSuccess', function(evt) { - * // Halt state change from even starting - * evt.preventDefault(); - * // Perform custom logic - * var meetsRequirement = ... - * // Continue with the update and state transition if logic allows - * if (meetsRequirement) $urlRouter.sync(); - * }); - * }); - * </pre> - */ - sync: function() { - update(); - }, - - listen: function() { - return listen(); - }, - - update: function(read) { - if (read) { - location = $location.url(); - return; - } - if ($location.url() === location) return; - - $location.url(location); - $location.replace(); - }, - - push: function(urlMatcher, params, options) { - var url = urlMatcher.format(params || {}); - - // Handle the special hash param, if needed - if (url !== null && params && params['#']) { - url += '#' + params['#']; - } - - $location.url(url); - lastPushedUrl = options && options.$$avoidResync ? $location.url() : undefined; - if (options && options.replace) $location.replace(); - }, - - /** - * @ngdoc function - * @name ui.router.router.$urlRouter#href - * @methodOf ui.router.router.$urlRouter - * - * @description - * A URL generation method that returns the compiled URL for a given - * {@link ui.router.util.type:UrlMatcher `UrlMatcher`}, populated with the provided parameters. - * - * @example - * <pre> - * $bob = $urlRouter.href(new UrlMatcher("/about/:person"), { - * person: "bob" - * }); - * // $bob == "/about/bob"; - * </pre> - * - * @param {UrlMatcher} urlMatcher The `UrlMatcher` object which is used as the template of the URL to generate. - * @param {object=} params An object of parameter values to fill the matcher's required parameters. - * @param {object=} options Options object. The options are: - * - * - **`absolute`** - {boolean=false}, If true will generate an absolute url, e.g. "http://www.example.com/fullurl". - * - * @returns {string} Returns the fully compiled URL, or `null` if `params` fail validation against `urlMatcher` - */ - href: function(urlMatcher, params, options) { - if (!urlMatcher.validates(params)) return null; - - var isHtml5 = $locationProvider.html5Mode(); - if (angular.isObject(isHtml5)) { - isHtml5 = isHtml5.enabled; - } - - var url = urlMatcher.format(params); - options = options || {}; - - if (!isHtml5 && url !== null) { - url = "#" + $locationProvider.hashPrefix() + url; - } - - // Handle special hash param, if needed - if (url !== null && params && params['#']) { - url += '#' + params['#']; - } - - url = appendBasePath(url, isHtml5, options.absolute); - - if (!options.absolute || !url) { - return url; - } - - var slash = (!isHtml5 && url ? '/' : ''), port = $location.port(); - port = (port === 80 || port === 443 ? '' : ':' + port); - - return [$location.protocol(), '://', $location.host(), port, slash, url].join(''); - } - }; - } -} - -angular.module('ui.router.router').provider('$urlRouter', $UrlRouterProvider); diff --git a/src/main/webapp/bower_components/angular-ui-router/src/view.js b/src/main/webapp/bower_components/angular-ui-router/src/view.js deleted file mode 100644 index f19a3c56..00000000 --- a/src/main/webapp/bower_components/angular-ui-router/src/view.js +++ /dev/null @@ -1,71 +0,0 @@ - -$ViewProvider.$inject = []; -function $ViewProvider() { - - this.$get = $get; - /** - * @ngdoc object - * @name ui.router.state.$view - * - * @requires ui.router.util.$templateFactory - * @requires $rootScope - * - * @description - * - */ - $get.$inject = ['$rootScope', '$templateFactory']; - function $get( $rootScope, $templateFactory) { - return { - // $view.load('full.viewName', { template: ..., controller: ..., resolve: ..., async: false, params: ... }) - /** - * @ngdoc function - * @name ui.router.state.$view#load - * @methodOf ui.router.state.$view - * - * @description - * - * @param {string} name name - * @param {object} options option object. - */ - load: function load(name, options) { - var result, defaults = { - template: null, controller: null, view: null, locals: null, notify: true, async: true, params: {} - }; - options = extend(defaults, options); - - if (options.view) { - result = $templateFactory.fromConfig(options.view, options.params, options.locals); - } - if (result && options.notify) { - /** - * @ngdoc event - * @name ui.router.state.$state#$viewContentLoading - * @eventOf ui.router.state.$view - * @eventType broadcast on root scope - * @description - * - * Fired once the view **begins loading**, *before* the DOM is rendered. - * - * @param {Object} event Event object. - * @param {Object} viewConfig The view config properties (template, controller, etc). - * - * @example - * - * <pre> - * $scope.$on('$viewContentLoading', - * function(event, viewConfig){ - * // Access to all the view config properties. - * // and one special property 'targetView' - * // viewConfig.targetView - * }); - * </pre> - */ - $rootScope.$broadcast('$viewContentLoading', options); - } - return result; - } - }; - } -} - -angular.module('ui.router.state').provider('$view', $ViewProvider); diff --git a/src/main/webapp/bower_components/angular-ui-router/src/viewDirective.js b/src/main/webapp/bower_components/angular-ui-router/src/viewDirective.js deleted file mode 100644 index b7022077..00000000 --- a/src/main/webapp/bower_components/angular-ui-router/src/viewDirective.js +++ /dev/null @@ -1,303 +0,0 @@ -/** - * @ngdoc directive - * @name ui.router.state.directive:ui-view - * - * @requires ui.router.state.$state - * @requires $compile - * @requires $controller - * @requires $injector - * @requires ui.router.state.$uiViewScroll - * @requires $document - * - * @restrict ECA - * - * @description - * The ui-view directive tells $state where to place your templates. - * - * @param {string=} name A view name. The name should be unique amongst the other views in the - * same state. You can have views of the same name that live in different states. - * - * @param {string=} autoscroll It allows you to set the scroll behavior of the browser window - * when a view is populated. By default, $anchorScroll is overridden by ui-router's custom scroll - * service, {@link ui.router.state.$uiViewScroll}. This custom service let's you - * scroll ui-view elements into view when they are populated during a state activation. - * - * *Note: To revert back to old [`$anchorScroll`](http://docs.angularjs.org/api/ng.$anchorScroll) - * functionality, call `$uiViewScrollProvider.useAnchorScroll()`.* - * - * @param {string=} onload Expression to evaluate whenever the view updates. - * - * @example - * A view can be unnamed or named. - * <pre> - * <!-- Unnamed --> - * <div ui-view></div> - * - * <!-- Named --> - * <div ui-view="viewName"></div> - * </pre> - * - * You can only have one unnamed view within any template (or root html). If you are only using a - * single view and it is unnamed then you can populate it like so: - * <pre> - * <div ui-view></div> - * $stateProvider.state("home", { - * template: "<h1>HELLO!</h1>" - * }) - * </pre> - * - * The above is a convenient shortcut equivalent to specifying your view explicitly with the {@link ui.router.state.$stateProvider#views `views`} - * config property, by name, in this case an empty name: - * <pre> - * $stateProvider.state("home", { - * views: { - * "": { - * template: "<h1>HELLO!</h1>" - * } - * } - * }) - * </pre> - * - * But typically you'll only use the views property if you name your view or have more than one view - * in the same template. There's not really a compelling reason to name a view if its the only one, - * but you could if you wanted, like so: - * <pre> - * <div ui-view="main"></div> - * </pre> - * <pre> - * $stateProvider.state("home", { - * views: { - * "main": { - * template: "<h1>HELLO!</h1>" - * } - * } - * }) - * </pre> - * - * Really though, you'll use views to set up multiple views: - * <pre> - * <div ui-view></div> - * <div ui-view="chart"></div> - * <div ui-view="data"></div> - * </pre> - * - * <pre> - * $stateProvider.state("home", { - * views: { - * "": { - * template: "<h1>HELLO!</h1>" - * }, - * "chart": { - * template: "<chart_thing/>" - * }, - * "data": { - * template: "<data_thing/>" - * } - * } - * }) - * </pre> - * - * Examples for `autoscroll`: - * - * <pre> - * <!-- If autoscroll present with no expression, - * then scroll ui-view into view --> - * <ui-view autoscroll/> - * - * <!-- If autoscroll present with valid expression, - * then scroll ui-view into view if expression evaluates to true --> - * <ui-view autoscroll='true'/> - * <ui-view autoscroll='false'/> - * <ui-view autoscroll='scopeVariable'/> - * </pre> - */ -$ViewDirective.$inject = ['$state', '$injector', '$uiViewScroll', '$interpolate']; -function $ViewDirective( $state, $injector, $uiViewScroll, $interpolate) { - - function getService() { - return ($injector.has) ? function(service) { - return $injector.has(service) ? $injector.get(service) : null; - } : function(service) { - try { - return $injector.get(service); - } catch (e) { - return null; - } - }; - } - - var service = getService(), - $animator = service('$animator'), - $animate = service('$animate'); - - // Returns a set of DOM manipulation functions based on which Angular version - // it should use - function getRenderer(attrs, scope) { - var statics = function() { - return { - enter: function (element, target, cb) { target.after(element); cb(); }, - leave: function (element, cb) { element.remove(); cb(); } - }; - }; - - if ($animate) { - return { - enter: function(element, target, cb) { - var promise = $animate.enter(element, null, target, cb); - if (promise && promise.then) promise.then(cb); - }, - leave: function(element, cb) { - var promise = $animate.leave(element, cb); - if (promise && promise.then) promise.then(cb); - } - }; - } - - if ($animator) { - var animate = $animator && $animator(scope, attrs); - - return { - enter: function(element, target, cb) {animate.enter(element, null, target); cb(); }, - leave: function(element, cb) { animate.leave(element); cb(); } - }; - } - - return statics(); - } - - var directive = { - restrict: 'ECA', - terminal: true, - priority: 400, - transclude: 'element', - compile: function (tElement, tAttrs, $transclude) { - return function (scope, $element, attrs) { - var previousEl, currentEl, currentScope, latestLocals, - onloadExp = attrs.onload || '', - autoScrollExp = attrs.autoscroll, - renderer = getRenderer(attrs, scope); - - scope.$on('$stateChangeSuccess', function() { - updateView(false); - }); - scope.$on('$viewContentLoading', function() { - updateView(false); - }); - - updateView(true); - - function cleanupLastView() { - if (previousEl) { - previousEl.remove(); - previousEl = null; - } - - if (currentScope) { - currentScope.$destroy(); - currentScope = null; - } - - if (currentEl) { - renderer.leave(currentEl, function() { - previousEl = null; - }); - - previousEl = currentEl; - currentEl = null; - } - } - - function updateView(firstTime) { - var newScope, - name = getUiViewName(scope, attrs, $element, $interpolate), - previousLocals = name && $state.$current && $state.$current.locals[name]; - - if (!firstTime && previousLocals === latestLocals) return; // nothing to do - newScope = scope.$new(); - latestLocals = $state.$current.locals[name]; - - var clone = $transclude(newScope, function(clone) { - renderer.enter(clone, $element, function onUiViewEnter() { - if(currentScope) { - currentScope.$emit('$viewContentAnimationEnded'); - } - - if (angular.isDefined(autoScrollExp) && !autoScrollExp || scope.$eval(autoScrollExp)) { - $uiViewScroll(clone); - } - }); - cleanupLastView(); - }); - - currentEl = clone; - currentScope = newScope; - /** - * @ngdoc event - * @name ui.router.state.directive:ui-view#$viewContentLoaded - * @eventOf ui.router.state.directive:ui-view - * @eventType emits on ui-view directive scope - * @description * - * Fired once the view is **loaded**, *after* the DOM is rendered. - * - * @param {Object} event Event object. - */ - currentScope.$emit('$viewContentLoaded'); - currentScope.$eval(onloadExp); - } - }; - } - }; - - return directive; -} - -$ViewDirectiveFill.$inject = ['$compile', '$controller', '$state', '$interpolate']; -function $ViewDirectiveFill ( $compile, $controller, $state, $interpolate) { - return { - restrict: 'ECA', - priority: -400, - compile: function (tElement) { - var initial = tElement.html(); - return function (scope, $element, attrs) { - var current = $state.$current, - name = getUiViewName(scope, attrs, $element, $interpolate), - locals = current && current.locals[name]; - - if (! locals) { - return; - } - - $element.data('$uiView', { name: name, state: locals.$$state }); - $element.html(locals.$template ? locals.$template : initial); - - var link = $compile($element.contents()); - - if (locals.$$controller) { - locals.$scope = scope; - locals.$element = $element; - var controller = $controller(locals.$$controller, locals); - if (locals.$$controllerAs) { - scope[locals.$$controllerAs] = controller; - } - $element.data('$ngControllerController', controller); - $element.children().data('$ngControllerController', controller); - } - - link(scope); - }; - } - }; -} - -/** - * Shared ui-view code for both directives: - * Given scope, element, and its attributes, return the view's name - */ -function getUiViewName(scope, attrs, element, $interpolate) { - var name = $interpolate(attrs.uiView || attrs.name || '')(scope); - var inherited = element.inheritedData('$uiView'); - return name.indexOf('@') >= 0 ? name : (name + '@' + (inherited ? inherited.state.name : '')); -} - -angular.module('ui.router.state').directive('uiView', $ViewDirective); -angular.module('ui.router.state').directive('uiView', $ViewDirectiveFill); diff --git a/src/main/webapp/bower_components/angular-ui-router/src/viewScroll.js b/src/main/webapp/bower_components/angular-ui-router/src/viewScroll.js deleted file mode 100644 index 81114e20..00000000 --- a/src/main/webapp/bower_components/angular-ui-router/src/viewScroll.js +++ /dev/null @@ -1,52 +0,0 @@ -/** - * @ngdoc object - * @name ui.router.state.$uiViewScrollProvider - * - * @description - * Provider that returns the {@link ui.router.state.$uiViewScroll} service function. - */ -function $ViewScrollProvider() { - - var useAnchorScroll = false; - - /** - * @ngdoc function - * @name ui.router.state.$uiViewScrollProvider#useAnchorScroll - * @methodOf ui.router.state.$uiViewScrollProvider - * - * @description - * Reverts back to using the core [`$anchorScroll`](http://docs.angularjs.org/api/ng.$anchorScroll) service for - * scrolling based on the url anchor. - */ - this.useAnchorScroll = function () { - useAnchorScroll = true; - }; - - /** - * @ngdoc object - * @name ui.router.state.$uiViewScroll - * - * @requires $anchorScroll - * @requires $timeout - * - * @description - * When called with a jqLite element, it scrolls the element into view (after a - * `$timeout` so the DOM has time to refresh). - * - * If you prefer to rely on `$anchorScroll` to scroll the view to the anchor, - * this can be enabled by calling {@link ui.router.state.$uiViewScrollProvider#methods_useAnchorScroll `$uiViewScrollProvider.useAnchorScroll()`}. - */ - this.$get = ['$anchorScroll', '$timeout', function ($anchorScroll, $timeout) { - if (useAnchorScroll) { - return $anchorScroll; - } - - return function ($element) { - return $timeout(function () { - $element[0].scrollIntoView(); - }, 0, false); - }; - }]; -} - -angular.module('ui.router.state').provider('$uiViewScroll', $ViewScrollProvider); diff --git a/src/main/webapp/bower_components/angular/.bower.json b/src/main/webapp/bower_components/angular/.bower.json deleted file mode 100644 index dcc20183..00000000 --- a/src/main/webapp/bower_components/angular/.bower.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "angular", - "version": "1.3.11", - "main": "./angular.js", - "ignore": [], - "dependencies": {}, - "homepage": "https://github.com/angular/bower-angular", - "_release": "1.3.11", - "_resolution": { - "type": "version", - "tag": "v1.3.11", - "commit": "701d482321d06884dc79eae9a7b71f3c0f6d7e30" - }, - "_source": "git://github.com/angular/bower-angular.git", - "_target": "1.3.11", - "_originalSource": "angular" -} \ No newline at end of file diff --git a/src/main/webapp/bower_components/angular/README.md b/src/main/webapp/bower_components/angular/README.md deleted file mode 100644 index 897fb7f0..00000000 --- a/src/main/webapp/bower_components/angular/README.md +++ /dev/null @@ -1,67 +0,0 @@ -# packaged angular - -This repo is for distribution on `npm` and `bower`. The source for this module is in the -[main AngularJS repo](https://github.com/angular/angular.js). -Please file issues and pull requests against that repo. - -## Install - -You can install this package either with `npm` or with `bower`. - -### npm - -```shell -npm install angular -``` - -Then add a `<script>` to your `index.html`: - -```html -<script src="/node_modules/angular/angular.js"></script> -``` - -Note that this package is not in CommonJS format, so doing `require('angular')` will return `undefined`. -If you're using [Browserify](https://github.com/substack/node-browserify), you can use -[exposify](https://github.com/thlorenz/exposify) to have `require('angular')` return the `angular` -global. - -### bower - -```shell -bower install angular -``` - -Then add a `<script>` to your `index.html`: - -```html -<script src="/bower_components/angular/angular.js"></script> -``` - -## Documentation - -Documentation is available on the -[AngularJS docs site](http://docs.angularjs.org/). - -## License - -The MIT License - -Copyright (c) 2010-2012 Google, Inc. http://angularjs.org - -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/src/main/webapp/bower_components/angular/angular-csp.css b/src/main/webapp/bower_components/angular/angular-csp.css deleted file mode 100644 index 0ce9d864..00000000 --- a/src/main/webapp/bower_components/angular/angular-csp.css +++ /dev/null @@ -1,13 +0,0 @@ -/* Include this file in your html if you are using the CSP mode. */ - -@charset "UTF-8"; - -[ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], -.ng-cloak, .x-ng-cloak, -.ng-hide:not(.ng-hide-animate) { - display: none !important; -} - -ng\:form { - display: block; -} diff --git a/src/main/webapp/bower_components/angular/angular.js b/src/main/webapp/bower_components/angular/angular.js deleted file mode 100644 index 01a5386e..00000000 --- a/src/main/webapp/bower_components/angular/angular.js +++ /dev/null @@ -1,26116 +0,0 @@ -/** - * @license AngularJS v1.3.11 - * (c) 2010-2014 Google, Inc. http://angularjs.org - * License: MIT - */ -(function(window, document, undefined) {'use strict'; - -/** - * @description - * - * This object provides a utility for producing rich Error messages within - * Angular. It can be called as follows: - * - * var exampleMinErr = minErr('example'); - * throw exampleMinErr('one', 'This {0} is {1}', foo, bar); - * - * The above creates an instance of minErr in the example namespace. The - * resulting error will have a namespaced error code of example.one. The - * resulting error will replace {0} with the value of foo, and {1} with the - * value of bar. The object is not restricted in the number of arguments it can - * take. - * - * If fewer arguments are specified than necessary for interpolation, the extra - * interpolation markers will be preserved in the final string. - * - * Since data will be parsed statically during a build step, some restrictions - * are applied with respect to how minErr instances are created and called. - * Instances should have names of the form namespaceMinErr for a minErr created - * using minErr('namespace') . Error codes, namespaces and template strings - * should all be static strings, not variables or general expressions. - * - * @param {string} module The namespace to use for the new minErr instance. - * @param {function} ErrorConstructor Custom error constructor to be instantiated when returning - * error from returned function, for cases when a particular type of error is useful. - * @returns {function(code:string, template:string, ...templateArgs): Error} minErr instance - */ - -function minErr(module, ErrorConstructor) { - ErrorConstructor = ErrorConstructor || Error; - return function() { - var code = arguments[0], - prefix = '[' + (module ? module + ':' : '') + code + '] ', - template = arguments[1], - templateArgs = arguments, - - message, i; - - message = prefix + template.replace(/\{\d+\}/g, function(match) { - var index = +match.slice(1, -1), arg; - - if (index + 2 < templateArgs.length) { - return toDebugString(templateArgs[index + 2]); - } - return match; - }); - - message = message + '\nhttp://errors.angularjs.org/1.3.11/' + - (module ? module + '/' : '') + code; - for (i = 2; i < arguments.length; i++) { - message = message + (i == 2 ? '?' : '&') + 'p' + (i - 2) + '=' + - encodeURIComponent(toDebugString(arguments[i])); - } - return new ErrorConstructor(message); - }; -} - -/* We need to tell jshint what variables are being exported */ -/* global angular: true, - msie: true, - jqLite: true, - jQuery: true, - slice: true, - splice: true, - push: true, - toString: true, - ngMinErr: true, - angularModule: true, - uid: true, - REGEX_STRING_REGEXP: true, - VALIDITY_STATE_PROPERTY: true, - - lowercase: true, - uppercase: true, - manualLowercase: true, - manualUppercase: true, - nodeName_: true, - isArrayLike: true, - forEach: true, - sortedKeys: true, - forEachSorted: true, - reverseParams: true, - nextUid: true, - setHashKey: true, - extend: true, - int: true, - inherit: true, - noop: true, - identity: true, - valueFn: true, - isUndefined: true, - isDefined: true, - isObject: true, - isString: true, - isNumber: true, - isDate: true, - isArray: true, - isFunction: true, - isRegExp: true, - isWindow: true, - isScope: true, - isFile: true, - isFormData: true, - isBlob: true, - isBoolean: true, - isPromiseLike: true, - trim: true, - escapeForRegexp: true, - isElement: true, - makeMap: true, - includes: true, - arrayRemove: true, - copy: true, - shallowCopy: true, - equals: true, - csp: true, - concat: true, - sliceArgs: true, - bind: true, - toJsonReplacer: true, - toJson: true, - fromJson: true, - startingTag: true, - tryDecodeURIComponent: true, - parseKeyValue: true, - toKeyValue: true, - encodeUriSegment: true, - encodeUriQuery: true, - angularInit: true, - bootstrap: true, - getTestability: true, - snake_case: true, - bindJQuery: true, - assertArg: true, - assertArgFn: true, - assertNotHasOwnProperty: true, - getter: true, - getBlockNodes: true, - hasOwnProperty: true, - createMap: true, - - NODE_TYPE_ELEMENT: true, - NODE_TYPE_TEXT: true, - NODE_TYPE_COMMENT: true, - NODE_TYPE_DOCUMENT: true, - NODE_TYPE_DOCUMENT_FRAGMENT: true, -*/ - -//////////////////////////////////// - -/** - * @ngdoc module - * @name ng - * @module ng - * @description - * - * # ng (core module) - * The ng module is loaded by default when an AngularJS application is started. The module itself - * contains the essential components for an AngularJS application to function. The table below - * lists a high level breakdown of each of the services/factories, filters, directives and testing - * components available within this core module. - * - * <div doc-module-components="ng"></div> - */ - -var REGEX_STRING_REGEXP = /^\/(.+)\/([a-z]*)$/; - -// The name of a form control's ValidityState property. -// This is used so that it's possible for internal tests to create mock ValidityStates. -var VALIDITY_STATE_PROPERTY = 'validity'; - -/** - * @ngdoc function - * @name angular.lowercase - * @module ng - * @kind function - * - * @description Converts the specified string to lowercase. - * @param {string} string String to be converted to lowercase. - * @returns {string} Lowercased string. - */ -var lowercase = function(string) {return isString(string) ? string.toLowerCase() : string;}; -var hasOwnProperty = Object.prototype.hasOwnProperty; - -/** - * @ngdoc function - * @name angular.uppercase - * @module ng - * @kind function - * - * @description Converts the specified string to uppercase. - * @param {string} string String to be converted to uppercase. - * @returns {string} Uppercased string. - */ -var uppercase = function(string) {return isString(string) ? string.toUpperCase() : string;}; - - -var manualLowercase = function(s) { - /* jshint bitwise: false */ - return isString(s) - ? s.replace(/[A-Z]/g, function(ch) {return String.fromCharCode(ch.charCodeAt(0) | 32);}) - : s; -}; -var manualUppercase = function(s) { - /* jshint bitwise: false */ - return isString(s) - ? s.replace(/[a-z]/g, function(ch) {return String.fromCharCode(ch.charCodeAt(0) & ~32);}) - : s; -}; - - -// String#toLowerCase and String#toUpperCase don't produce correct results in browsers with Turkish -// locale, for this reason we need to detect this case and redefine lowercase/uppercase methods -// with correct but slower alternatives. -if ('i' !== 'I'.toLowerCase()) { - lowercase = manualLowercase; - uppercase = manualUppercase; -} - - -var - msie, // holds major version number for IE, or NaN if UA is not IE. - jqLite, // delay binding since jQuery could be loaded after us. - jQuery, // delay binding - slice = [].slice, - splice = [].splice, - push = [].push, - toString = Object.prototype.toString, - ngMinErr = minErr('ng'), - - /** @name angular */ - angular = window.angular || (window.angular = {}), - angularModule, - uid = 0; - -/** - * documentMode is an IE-only property - * http://msdn.microsoft.com/en-us/library/ie/cc196988(v=vs.85).aspx - */ -msie = document.documentMode; - - -/** - * @private - * @param {*} obj - * @return {boolean} Returns true if `obj` is an array or array-like object (NodeList, Arguments, - * String ...) - */ -function isArrayLike(obj) { - if (obj == null || isWindow(obj)) { - return false; - } - - var length = obj.length; - - if (obj.nodeType === NODE_TYPE_ELEMENT && length) { - return true; - } - - return isString(obj) || isArray(obj) || length === 0 || - typeof length === 'number' && length > 0 && (length - 1) in obj; -} - -/** - * @ngdoc function - * @name angular.forEach - * @module ng - * @kind function - * - * @description - * Invokes the `iterator` function once for each item in `obj` collection, which can be either an - * object or an array. The `iterator` function is invoked with `iterator(value, key, obj)`, where `value` - * is the value of an object property or an array element, `key` is the object property key or - * array element index and obj is the `obj` itself. Specifying a `context` for the function is optional. - * - * It is worth noting that `.forEach` does not iterate over inherited properties because it filters - * using the `hasOwnProperty` method. - * - * Unlike ES262's - * [Array.prototype.forEach](http://www.ecma-international.org/ecma-262/5.1/#sec-15.4.4.18), - * Providing 'undefined' or 'null' values for `obj` will not throw a TypeError, but rather just - * return the value provided. - * - ```js - var values = {name: 'misko', gender: 'male'}; - var log = []; - angular.forEach(values, function(value, key) { - this.push(key + ': ' + value); - }, log); - expect(log).toEqual(['name: misko', 'gender: male']); - ``` - * - * @param {Object|Array} obj Object to iterate over. - * @param {Function} iterator Iterator function. - * @param {Object=} context Object to become context (`this`) for the iterator function. - * @returns {Object|Array} Reference to `obj`. - */ - -function forEach(obj, iterator, context) { - var key, length; - if (obj) { - if (isFunction(obj)) { - for (key in obj) { - // Need to check if hasOwnProperty exists, - // as on IE8 the result of querySelectorAll is an object without a hasOwnProperty function - if (key != 'prototype' && key != 'length' && key != 'name' && (!obj.hasOwnProperty || obj.hasOwnProperty(key))) { - iterator.call(context, obj[key], key, obj); - } - } - } else if (isArray(obj) || isArrayLike(obj)) { - var isPrimitive = typeof obj !== 'object'; - for (key = 0, length = obj.length; key < length; key++) { - if (isPrimitive || key in obj) { - iterator.call(context, obj[key], key, obj); - } - } - } else if (obj.forEach && obj.forEach !== forEach) { - obj.forEach(iterator, context, obj); - } else { - for (key in obj) { - if (obj.hasOwnProperty(key)) { - iterator.call(context, obj[key], key, obj); - } - } - } - } - return obj; -} - -function sortedKeys(obj) { - return Object.keys(obj).sort(); -} - -function forEachSorted(obj, iterator, context) { - var keys = sortedKeys(obj); - for (var i = 0; i < keys.length; i++) { - iterator.call(context, obj[keys[i]], keys[i]); - } - return keys; -} - - -/** - * when using forEach the params are value, key, but it is often useful to have key, value. - * @param {function(string, *)} iteratorFn - * @returns {function(*, string)} - */ -function reverseParams(iteratorFn) { - return function(value, key) { iteratorFn(key, value); }; -} - -/** - * A consistent way of creating unique IDs in angular. - * - * Using simple numbers allows us to generate 28.6 million unique ids per second for 10 years before - * we hit number precision issues in JavaScript. - * - * Math.pow(2,53) / 60 / 60 / 24 / 365 / 10 = 28.6M - * - * @returns {number} an unique alpha-numeric string - */ -function nextUid() { - return ++uid; -} - - -/** - * Set or clear the hashkey for an object. - * @param obj object - * @param h the hashkey (!truthy to delete the hashkey) - */ -function setHashKey(obj, h) { - if (h) { - obj.$$hashKey = h; - } - else { - delete obj.$$hashKey; - } -} - -/** - * @ngdoc function - * @name angular.extend - * @module ng - * @kind function - * - * @description - * Extends the destination object `dst` by copying own enumerable properties from the `src` object(s) - * to `dst`. You can specify multiple `src` objects. If you want to preserve original objects, you can do so - * by passing an empty object as the target: `var object = angular.extend({}, object1, object2)`. - * Note: Keep in mind that `angular.extend` does not support recursive merge (deep copy). - * - * @param {Object} dst Destination object. - * @param {...Object} src Source object(s). - * @returns {Object} Reference to `dst`. - */ -function extend(dst) { - var h = dst.$$hashKey; - - for (var i = 1, ii = arguments.length; i < ii; i++) { - var obj = arguments[i]; - if (obj) { - var keys = Object.keys(obj); - for (var j = 0, jj = keys.length; j < jj; j++) { - var key = keys[j]; - dst[key] = obj[key]; - } - } - } - - setHashKey(dst, h); - return dst; -} - -function int(str) { - return parseInt(str, 10); -} - - -function inherit(parent, extra) { - return extend(Object.create(parent), extra); -} - -/** - * @ngdoc function - * @name angular.noop - * @module ng - * @kind function - * - * @description - * A function that performs no operations. This function can be useful when writing code in the - * functional style. - ```js - function foo(callback) { - var result = calculateResult(); - (callback || angular.noop)(result); - } - ``` - */ -function noop() {} -noop.$inject = []; - - -/** - * @ngdoc function - * @name angular.identity - * @module ng - * @kind function - * - * @description - * A function that returns its first argument. This function is useful when writing code in the - * functional style. - * - ```js - function transformer(transformationFn, value) { - return (transformationFn || angular.identity)(value); - }; - ``` - * @param {*} value to be returned. - * @returns {*} the value passed in. - */ -function identity($) {return $;} -identity.$inject = []; - - -function valueFn(value) {return function() {return value;};} - -/** - * @ngdoc function - * @name angular.isUndefined - * @module ng - * @kind function - * - * @description - * Determines if a reference is undefined. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is undefined. - */ -function isUndefined(value) {return typeof value === 'undefined';} - - -/** - * @ngdoc function - * @name angular.isDefined - * @module ng - * @kind function - * - * @description - * Determines if a reference is defined. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is defined. - */ -function isDefined(value) {return typeof value !== 'undefined';} - - -/** - * @ngdoc function - * @name angular.isObject - * @module ng - * @kind function - * - * @description - * Determines if a reference is an `Object`. Unlike `typeof` in JavaScript, `null`s are not - * considered to be objects. Note that JavaScript arrays are objects. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is an `Object` but not `null`. - */ -function isObject(value) { - // http://jsperf.com/isobject4 - return value !== null && typeof value === 'object'; -} - - -/** - * @ngdoc function - * @name angular.isString - * @module ng - * @kind function - * - * @description - * Determines if a reference is a `String`. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is a `String`. - */ -function isString(value) {return typeof value === 'string';} - - -/** - * @ngdoc function - * @name angular.isNumber - * @module ng - * @kind function - * - * @description - * Determines if a reference is a `Number`. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is a `Number`. - */ -function isNumber(value) {return typeof value === 'number';} - - -/** - * @ngdoc function - * @name angular.isDate - * @module ng - * @kind function - * - * @description - * Determines if a value is a date. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is a `Date`. - */ -function isDate(value) { - return toString.call(value) === '[object Date]'; -} - - -/** - * @ngdoc function - * @name angular.isArray - * @module ng - * @kind function - * - * @description - * Determines if a reference is an `Array`. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is an `Array`. - */ -var isArray = Array.isArray; - -/** - * @ngdoc function - * @name angular.isFunction - * @module ng - * @kind function - * - * @description - * Determines if a reference is a `Function`. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is a `Function`. - */ -function isFunction(value) {return typeof value === 'function';} - - -/** - * Determines if a value is a regular expression object. - * - * @private - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is a `RegExp`. - */ -function isRegExp(value) { - return toString.call(value) === '[object RegExp]'; -} - - -/** - * Checks if `obj` is a window object. - * - * @private - * @param {*} obj Object to check - * @returns {boolean} True if `obj` is a window obj. - */ -function isWindow(obj) { - return obj && obj.window === obj; -} - - -function isScope(obj) { - return obj && obj.$evalAsync && obj.$watch; -} - - -function isFile(obj) { - return toString.call(obj) === '[object File]'; -} - - -function isFormData(obj) { - return toString.call(obj) === '[object FormData]'; -} - - -function isBlob(obj) { - return toString.call(obj) === '[object Blob]'; -} - - -function isBoolean(value) { - return typeof value === 'boolean'; -} - - -function isPromiseLike(obj) { - return obj && isFunction(obj.then); -} - - -var trim = function(value) { - return isString(value) ? value.trim() : value; -}; - -// Copied from: -// http://docs.closure-library.googlecode.com/git/local_closure_goog_string_string.js.source.html#line1021 -// Prereq: s is a string. -var escapeForRegexp = function(s) { - return s.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g, '\\$1'). - replace(/\x08/g, '\\x08'); -}; - - -/** - * @ngdoc function - * @name angular.isElement - * @module ng - * @kind function - * - * @description - * Determines if a reference is a DOM element (or wrapped jQuery element). - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is a DOM element (or wrapped jQuery element). - */ -function isElement(node) { - return !!(node && - (node.nodeName // we are a direct element - || (node.prop && node.attr && node.find))); // we have an on and find method part of jQuery API -} - -/** - * @param str 'key1,key2,...' - * @returns {object} in the form of {key1:true, key2:true, ...} - */ -function makeMap(str) { - var obj = {}, items = str.split(","), i; - for (i = 0; i < items.length; i++) - obj[ items[i] ] = true; - return obj; -} - - -function nodeName_(element) { - return lowercase(element.nodeName || (element[0] && element[0].nodeName)); -} - -function includes(array, obj) { - return Array.prototype.indexOf.call(array, obj) != -1; -} - -function arrayRemove(array, value) { - var index = array.indexOf(value); - if (index >= 0) - array.splice(index, 1); - return value; -} - -/** - * @ngdoc function - * @name angular.copy - * @module ng - * @kind function - * - * @description - * Creates a deep copy of `source`, which should be an object or an array. - * - * * If no destination is supplied, a copy of the object or array is created. - * * If a destination is provided, all of its elements (for arrays) or properties (for objects) - * are deleted and then all elements/properties from the source are copied to it. - * * If `source` is not an object or array (inc. `null` and `undefined`), `source` is returned. - * * If `source` is identical to 'destination' an exception will be thrown. - * - * @param {*} source The source that will be used to make a copy. - * Can be any type, including primitives, `null`, and `undefined`. - * @param {(Object|Array)=} destination Destination into which the source is copied. If - * provided, must be of the same type as `source`. - * @returns {*} The copy or updated `destination`, if `destination` was specified. - * - * @example - <example module="copyExample"> - <file name="index.html"> - <div ng-controller="ExampleController"> - <form novalidate class="simple-form"> - Name: <input type="text" ng-model="user.name" /><br /> - E-mail: <input type="email" ng-model="user.email" /><br /> - Gender: <input type="radio" ng-model="user.gender" value="male" />male - <input type="radio" ng-model="user.gender" value="female" />female<br /> - <button ng-click="reset()">RESET</button> - <button ng-click="update(user)">SAVE</button> - </form> - <pre>form = {{user | json}}</pre> - <pre>master = {{master | json}}</pre> - </div> - - <script> - angular.module('copyExample', []) - .controller('ExampleController', ['$scope', function($scope) { - $scope.master= {}; - - $scope.update = function(user) { - // Example with 1 argument - $scope.master= angular.copy(user); - }; - - $scope.reset = function() { - // Example with 2 arguments - angular.copy($scope.master, $scope.user); - }; - - $scope.reset(); - }]); - </script> - </file> - </example> - */ -function copy(source, destination, stackSource, stackDest) { - if (isWindow(source) || isScope(source)) { - throw ngMinErr('cpws', - "Can't copy! Making copies of Window or Scope instances is not supported."); - } - - if (!destination) { - destination = source; - if (source) { - if (isArray(source)) { - destination = copy(source, [], stackSource, stackDest); - } else if (isDate(source)) { - destination = new Date(source.getTime()); - } else if (isRegExp(source)) { - destination = new RegExp(source.source, source.toString().match(/[^\/]*$/)[0]); - destination.lastIndex = source.lastIndex; - } else if (isObject(source)) { - var emptyObject = Object.create(Object.getPrototypeOf(source)); - destination = copy(source, emptyObject, stackSource, stackDest); - } - } - } else { - if (source === destination) throw ngMinErr('cpi', - "Can't copy! Source and destination are identical."); - - stackSource = stackSource || []; - stackDest = stackDest || []; - - if (isObject(source)) { - var index = stackSource.indexOf(source); - if (index !== -1) return stackDest[index]; - - stackSource.push(source); - stackDest.push(destination); - } - - var result; - if (isArray(source)) { - destination.length = 0; - for (var i = 0; i < source.length; i++) { - result = copy(source[i], null, stackSource, stackDest); - if (isObject(source[i])) { - stackSource.push(source[i]); - stackDest.push(result); - } - destination.push(result); - } - } else { - var h = destination.$$hashKey; - if (isArray(destination)) { - destination.length = 0; - } else { - forEach(destination, function(value, key) { - delete destination[key]; - }); - } - for (var key in source) { - if (source.hasOwnProperty(key)) { - result = copy(source[key], null, stackSource, stackDest); - if (isObject(source[key])) { - stackSource.push(source[key]); - stackDest.push(result); - } - destination[key] = result; - } - } - setHashKey(destination,h); - } - - } - return destination; -} - -/** - * Creates a shallow copy of an object, an array or a primitive. - * - * Assumes that there are no proto properties for objects. - */ -function shallowCopy(src, dst) { - if (isArray(src)) { - dst = dst || []; - - for (var i = 0, ii = src.length; i < ii; i++) { - dst[i] = src[i]; - } - } else if (isObject(src)) { - dst = dst || {}; - - for (var key in src) { - if (!(key.charAt(0) === '$' && key.charAt(1) === '$')) { - dst[key] = src[key]; - } - } - } - - return dst || src; -} - - -/** - * @ngdoc function - * @name angular.equals - * @module ng - * @kind function - * - * @description - * Determines if two objects or two values are equivalent. Supports value types, regular - * expressions, arrays and objects. - * - * Two objects or values are considered equivalent if at least one of the following is true: - * - * * Both objects or values pass `===` comparison. - * * Both objects or values are of the same type and all of their properties are equal by - * comparing them with `angular.equals`. - * * Both values are NaN. (In JavaScript, NaN == NaN => false. But we consider two NaN as equal) - * * Both values represent the same regular expression (In JavaScript, - * /abc/ == /abc/ => false. But we consider two regular expressions as equal when their textual - * representation matches). - * - * During a property comparison, properties of `function` type and properties with names - * that begin with `$` are ignored. - * - * Scope and DOMWindow objects are being compared only by identify (`===`). - * - * @param {*} o1 Object or value to compare. - * @param {*} o2 Object or value to compare. - * @returns {boolean} True if arguments are equal. - */ -function equals(o1, o2) { - if (o1 === o2) return true; - if (o1 === null || o2 === null) return false; - if (o1 !== o1 && o2 !== o2) return true; // NaN === NaN - var t1 = typeof o1, t2 = typeof o2, length, key, keySet; - if (t1 == t2) { - if (t1 == 'object') { - if (isArray(o1)) { - if (!isArray(o2)) return false; - if ((length = o1.length) == o2.length) { - for (key = 0; key < length; key++) { - if (!equals(o1[key], o2[key])) return false; - } - return true; - } - } else if (isDate(o1)) { - if (!isDate(o2)) return false; - return equals(o1.getTime(), o2.getTime()); - } else if (isRegExp(o1) && isRegExp(o2)) { - return o1.toString() == o2.toString(); - } else { - if (isScope(o1) || isScope(o2) || isWindow(o1) || isWindow(o2) || isArray(o2)) return false; - keySet = {}; - for (key in o1) { - if (key.charAt(0) === '$' || isFunction(o1[key])) continue; - if (!equals(o1[key], o2[key])) return false; - keySet[key] = true; - } - for (key in o2) { - if (!keySet.hasOwnProperty(key) && - key.charAt(0) !== '$' && - o2[key] !== undefined && - !isFunction(o2[key])) return false; - } - return true; - } - } - } - return false; -} - -var csp = function() { - if (isDefined(csp.isActive_)) return csp.isActive_; - - var active = !!(document.querySelector('[ng-csp]') || - document.querySelector('[data-ng-csp]')); - - if (!active) { - try { - /* jshint -W031, -W054 */ - new Function(''); - /* jshint +W031, +W054 */ - } catch (e) { - active = true; - } - } - - return (csp.isActive_ = active); -}; - - - -function concat(array1, array2, index) { - return array1.concat(slice.call(array2, index)); -} - -function sliceArgs(args, startIndex) { - return slice.call(args, startIndex || 0); -} - - -/* jshint -W101 */ -/** - * @ngdoc function - * @name angular.bind - * @module ng - * @kind function - * - * @description - * Returns a function which calls function `fn` bound to `self` (`self` becomes the `this` for - * `fn`). You can supply optional `args` that are prebound to the function. This feature is also - * known as [partial application](http://en.wikipedia.org/wiki/Partial_application), as - * distinguished from [function currying](http://en.wikipedia.org/wiki/Currying#Contrast_with_partial_function_application). - * - * @param {Object} self Context which `fn` should be evaluated in. - * @param {function()} fn Function to be bound. - * @param {...*} args Optional arguments to be prebound to the `fn` function call. - * @returns {function()} Function that wraps the `fn` with all the specified bindings. - */ -/* jshint +W101 */ -function bind(self, fn) { - var curryArgs = arguments.length > 2 ? sliceArgs(arguments, 2) : []; - if (isFunction(fn) && !(fn instanceof RegExp)) { - return curryArgs.length - ? function() { - return arguments.length - ? fn.apply(self, concat(curryArgs, arguments, 0)) - : fn.apply(self, curryArgs); - } - : function() { - return arguments.length - ? fn.apply(self, arguments) - : fn.call(self); - }; - } else { - // in IE, native methods are not functions so they cannot be bound (note: they don't need to be) - return fn; - } -} - - -function toJsonReplacer(key, value) { - var val = value; - - if (typeof key === 'string' && key.charAt(0) === '$' && key.charAt(1) === '$') { - val = undefined; - } else if (isWindow(value)) { - val = '$WINDOW'; - } else if (value && document === value) { - val = '$DOCUMENT'; - } else if (isScope(value)) { - val = '$SCOPE'; - } - - return val; -} - - -/** - * @ngdoc function - * @name angular.toJson - * @module ng - * @kind function - * - * @description - * Serializes input into a JSON-formatted string. Properties with leading $$ characters will be - * stripped since angular uses this notation internally. - * - * @param {Object|Array|Date|string|number} obj Input to be serialized into JSON. - * @param {boolean|number=} pretty If set to true, the JSON output will contain newlines and whitespace. - * If set to an integer, the JSON output will contain that many spaces per indentation (the default is 2). - * @returns {string|undefined} JSON-ified string representing `obj`. - */ -function toJson(obj, pretty) { - if (typeof obj === 'undefined') return undefined; - if (!isNumber(pretty)) { - pretty = pretty ? 2 : null; - } - return JSON.stringify(obj, toJsonReplacer, pretty); -} - - -/** - * @ngdoc function - * @name angular.fromJson - * @module ng - * @kind function - * - * @description - * Deserializes a JSON string. - * - * @param {string} json JSON string to deserialize. - * @returns {Object|Array|string|number} Deserialized JSON string. - */ -function fromJson(json) { - return isString(json) - ? JSON.parse(json) - : json; -} - - -/** - * @returns {string} Returns the string representation of the element. - */ -function startingTag(element) { - element = jqLite(element).clone(); - try { - // turns out IE does not let you set .html() on elements which - // are not allowed to have children. So we just ignore it. - element.empty(); - } catch (e) {} - var elemHtml = jqLite('<div>').append(element).html(); - try { - return element[0].nodeType === NODE_TYPE_TEXT ? lowercase(elemHtml) : - elemHtml. - match(/^(<[^>]+>)/)[1]. - replace(/^<([\w\-]+)/, function(match, nodeName) { return '<' + lowercase(nodeName); }); - } catch (e) { - return lowercase(elemHtml); - } - -} - - -///////////////////////////////////////////////// - -/** - * Tries to decode the URI component without throwing an exception. - * - * @private - * @param str value potential URI component to check. - * @returns {boolean} True if `value` can be decoded - * with the decodeURIComponent function. - */ -function tryDecodeURIComponent(value) { - try { - return decodeURIComponent(value); - } catch (e) { - // Ignore any invalid uri component - } -} - - -/** - * Parses an escaped url query string into key-value pairs. - * @returns {Object.<string,boolean|Array>} - */ -function parseKeyValue(/**string*/keyValue) { - var obj = {}, key_value, key; - forEach((keyValue || "").split('&'), function(keyValue) { - if (keyValue) { - key_value = keyValue.replace(/\+/g,'%20').split('='); - key = tryDecodeURIComponent(key_value[0]); - if (isDefined(key)) { - var val = isDefined(key_value[1]) ? tryDecodeURIComponent(key_value[1]) : true; - if (!hasOwnProperty.call(obj, key)) { - obj[key] = val; - } else if (isArray(obj[key])) { - obj[key].push(val); - } else { - obj[key] = [obj[key],val]; - } - } - } - }); - return obj; -} - -function toKeyValue(obj) { - var parts = []; - forEach(obj, function(value, key) { - if (isArray(value)) { - forEach(value, function(arrayValue) { - parts.push(encodeUriQuery(key, true) + - (arrayValue === true ? '' : '=' + encodeUriQuery(arrayValue, true))); - }); - } else { - parts.push(encodeUriQuery(key, true) + - (value === true ? '' : '=' + encodeUriQuery(value, true))); - } - }); - return parts.length ? parts.join('&') : ''; -} - - -/** - * We need our custom method because encodeURIComponent is too aggressive and doesn't follow - * http://www.ietf.org/rfc/rfc3986.txt with regards to the character set (pchar) allowed in path - * segments: - * segment = *pchar - * pchar = unreserved / pct-encoded / sub-delims / ":" / "@" - * pct-encoded = "%" HEXDIG HEXDIG - * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" - * sub-delims = "!" / "$" / "&" / "'" / "(" / ")" - * / "*" / "+" / "," / ";" / "=" - */ -function encodeUriSegment(val) { - return encodeUriQuery(val, true). - replace(/%26/gi, '&'). - replace(/%3D/gi, '='). - replace(/%2B/gi, '+'); -} - - -/** - * This method is intended for encoding *key* or *value* parts of query component. We need a custom - * method because encodeURIComponent is too aggressive and encodes stuff that doesn't have to be - * encoded per http://tools.ietf.org/html/rfc3986: - * query = *( pchar / "/" / "?" ) - * pchar = unreserved / pct-encoded / sub-delims / ":" / "@" - * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" - * pct-encoded = "%" HEXDIG HEXDIG - * sub-delims = "!" / "$" / "&" / "'" / "(" / ")" - * / "*" / "+" / "," / ";" / "=" - */ -function encodeUriQuery(val, pctEncodeSpaces) { - return encodeURIComponent(val). - replace(/%40/gi, '@'). - replace(/%3A/gi, ':'). - replace(/%24/g, '$'). - replace(/%2C/gi, ','). - replace(/%3B/gi, ';'). - replace(/%20/g, (pctEncodeSpaces ? '%20' : '+')); -} - -var ngAttrPrefixes = ['ng-', 'data-ng-', 'ng:', 'x-ng-']; - -function getNgAttribute(element, ngAttr) { - var attr, i, ii = ngAttrPrefixes.length; - element = jqLite(element); - for (i = 0; i < ii; ++i) { - attr = ngAttrPrefixes[i] + ngAttr; - if (isString(attr = element.attr(attr))) { - return attr; - } - } - return null; -} - -/** - * @ngdoc directive - * @name ngApp - * @module ng - * - * @element ANY - * @param {angular.Module} ngApp an optional application - * {@link angular.module module} name to load. - * @param {boolean=} ngStrictDi if this attribute is present on the app element, the injector will be - * created in "strict-di" mode. This means that the application will fail to invoke functions which - * do not use explicit function annotation (and are thus unsuitable for minification), as described - * in {@link guide/di the Dependency Injection guide}, and useful debugging info will assist in - * tracking down the root of these bugs. - * - * @description - * - * Use this directive to **auto-bootstrap** an AngularJS application. The `ngApp` directive - * designates the **root element** of the application and is typically placed near the root element - * of the page - e.g. on the `<body>` or `<html>` tags. - * - * Only one AngularJS application can be auto-bootstrapped per HTML document. The first `ngApp` - * found in the document will be used to define the root element to auto-bootstrap as an - * application. To run multiple applications in an HTML document you must manually bootstrap them using - * {@link angular.bootstrap} instead. AngularJS applications cannot be nested within each other. - * - * You can specify an **AngularJS module** to be used as the root module for the application. This - * module will be loaded into the {@link auto.$injector} when the application is bootstrapped. It - * should contain the application code needed or have dependencies on other modules that will - * contain the code. See {@link angular.module} for more information. - * - * In the example below if the `ngApp` directive were not placed on the `html` element then the - * document would not be compiled, the `AppController` would not be instantiated and the `{{ a+b }}` - * would not be resolved to `3`. - * - * `ngApp` is the easiest, and most common way to bootstrap an application. - * - <example module="ngAppDemo"> - <file name="index.html"> - <div ng-controller="ngAppDemoController"> - I can add: {{a}} + {{b}} = {{ a+b }} - </div> - </file> - <file name="script.js"> - angular.module('ngAppDemo', []).controller('ngAppDemoController', function($scope) { - $scope.a = 1; - $scope.b = 2; - }); - </file> - </example> - * - * Using `ngStrictDi`, you would see something like this: - * - <example ng-app-included="true"> - <file name="index.html"> - <div ng-app="ngAppStrictDemo" ng-strict-di> - <div ng-controller="GoodController1"> - I can add: {{a}} + {{b}} = {{ a+b }} - - <p>This renders because the controller does not fail to - instantiate, by using explicit annotation style (see - script.js for details) - </p> - </div> - - <div ng-controller="GoodController2"> - Name: <input ng-model="name"><br /> - Hello, {{name}}! - - <p>This renders because the controller does not fail to - instantiate, by using explicit annotation style - (see script.js for details) - </p> - </div> - - <div ng-controller="BadController"> - I can add: {{a}} + {{b}} = {{ a+b }} - - <p>The controller could not be instantiated, due to relying - on automatic function annotations (which are disabled in - strict mode). As such, the content of this section is not - interpolated, and there should be an error in your web console. - </p> - </div> - </div> - </file> - <file name="script.js"> - angular.module('ngAppStrictDemo', []) - // BadController will fail to instantiate, due to relying on automatic function annotation, - // rather than an explicit annotation - .controller('BadController', function($scope) { - $scope.a = 1; - $scope.b = 2; - }) - // Unlike BadController, GoodController1 and GoodController2 will not fail to be instantiated, - // due to using explicit annotations using the array style and $inject property, respectively. - .controller('GoodController1', ['$scope', function($scope) { - $scope.a = 1; - $scope.b = 2; - }]) - .controller('GoodController2', GoodController2); - function GoodController2($scope) { - $scope.name = "World"; - } - GoodController2.$inject = ['$scope']; - </file> - <file name="style.css"> - div[ng-controller] { - margin-bottom: 1em; - -webkit-border-radius: 4px; - border-radius: 4px; - border: 1px solid; - padding: .5em; - } - div[ng-controller^=Good] { - border-color: #d6e9c6; - background-color: #dff0d8; - color: #3c763d; - } - div[ng-controller^=Bad] { - border-color: #ebccd1; - background-color: #f2dede; - color: #a94442; - margin-bottom: 0; - } - </file> - </example> - */ -function angularInit(element, bootstrap) { - var appElement, - module, - config = {}; - - // The element `element` has priority over any other element - forEach(ngAttrPrefixes, function(prefix) { - var name = prefix + 'app'; - - if (!appElement && element.hasAttribute && element.hasAttribute(name)) { - appElement = element; - module = element.getAttribute(name); - } - }); - forEach(ngAttrPrefixes, function(prefix) { - var name = prefix + 'app'; - var candidate; - - if (!appElement && (candidate = element.querySelector('[' + name.replace(':', '\\:') + ']'))) { - appElement = candidate; - module = candidate.getAttribute(name); - } - }); - if (appElement) { - config.strictDi = getNgAttribute(appElement, "strict-di") !== null; - bootstrap(appElement, module ? [module] : [], config); - } -} - -/** - * @ngdoc function - * @name angular.bootstrap - * @module ng - * @description - * Use this function to manually start up angular application. - * - * See: {@link guide/bootstrap Bootstrap} - * - * Note that Protractor based end-to-end tests cannot use this function to bootstrap manually. - * They must use {@link ng.directive:ngApp ngApp}. - * - * Angular will detect if it has been loaded into the browser more than once and only allow the - * first loaded script to be bootstrapped and will report a warning to the browser console for - * each of the subsequent scripts. This prevents strange results in applications, where otherwise - * multiple instances of Angular try to work on the DOM. - * - * ```html - * <!doctype html> - * <html> - * <body> - * <div ng-controller="WelcomeController"> - * {{greeting}} - * </div> - * - * <script src="angular.js"></script> - * <script> - * var app = angular.module('demo', []) - * .controller('WelcomeController', function($scope) { - * $scope.greeting = 'Welcome!'; - * }); - * angular.bootstrap(document, ['demo']); - * </script> - * </body> - * </html> - * ``` - * - * @param {DOMElement} element DOM element which is the root of angular application. - * @param {Array<String|Function|Array>=} modules an array of modules to load into the application. - * Each item in the array should be the name of a predefined module or a (DI annotated) - * function that will be invoked by the injector as a `config` block. - * See: {@link angular.module modules} - * @param {Object=} config an object for defining configuration options for the application. The - * following keys are supported: - * - * * `strictDi` - disable automatic function annotation for the application. This is meant to - * assist in finding bugs which break minified code. Defaults to `false`. - * - * @returns {auto.$injector} Returns the newly created injector for this app. - */ -function bootstrap(element, modules, config) { - if (!isObject(config)) config = {}; - var defaultConfig = { - strictDi: false - }; - config = extend(defaultConfig, config); - var doBootstrap = function() { - element = jqLite(element); - - if (element.injector()) { - var tag = (element[0] === document) ? 'document' : startingTag(element); - //Encode angle brackets to prevent input from being sanitized to empty string #8683 - throw ngMinErr( - 'btstrpd', - "App Already Bootstrapped with this Element '{0}'", - tag.replace(/</,'<').replace(/>/,'>')); - } - - modules = modules || []; - modules.unshift(['$provide', function($provide) { - $provide.value('$rootElement', element); - }]); - - if (config.debugInfoEnabled) { - // Pushing so that this overrides `debugInfoEnabled` setting defined in user's `modules`. - modules.push(['$compileProvider', function($compileProvider) { - $compileProvider.debugInfoEnabled(true); - }]); - } - - modules.unshift('ng'); - var injector = createInjector(modules, config.strictDi); - injector.invoke(['$rootScope', '$rootElement', '$compile', '$injector', - function bootstrapApply(scope, element, compile, injector) { - scope.$apply(function() { - element.data('$injector', injector); - compile(element)(scope); - }); - }] - ); - return injector; - }; - - var NG_ENABLE_DEBUG_INFO = /^NG_ENABLE_DEBUG_INFO!/; - var NG_DEFER_BOOTSTRAP = /^NG_DEFER_BOOTSTRAP!/; - - if (window && NG_ENABLE_DEBUG_INFO.test(window.name)) { - config.debugInfoEnabled = true; - window.name = window.name.replace(NG_ENABLE_DEBUG_INFO, ''); - } - - if (window && !NG_DEFER_BOOTSTRAP.test(window.name)) { - return doBootstrap(); - } - - window.name = window.name.replace(NG_DEFER_BOOTSTRAP, ''); - angular.resumeBootstrap = function(extraModules) { - forEach(extraModules, function(module) { - modules.push(module); - }); - doBootstrap(); - }; -} - -/** - * @ngdoc function - * @name angular.reloadWithDebugInfo - * @module ng - * @description - * Use this function to reload the current application with debug information turned on. - * This takes precedence over a call to `$compileProvider.debugInfoEnabled(false)`. - * - * See {@link ng.$compileProvider#debugInfoEnabled} for more. - */ -function reloadWithDebugInfo() { - window.name = 'NG_ENABLE_DEBUG_INFO!' + window.name; - window.location.reload(); -} - -/** - * @name angular.getTestability - * @module ng - * @description - * Get the testability service for the instance of Angular on the given - * element. - * @param {DOMElement} element DOM element which is the root of angular application. - */ -function getTestability(rootElement) { - var injector = angular.element(rootElement).injector(); - if (!injector) { - throw ngMinErr('test', - 'no injector found for element argument to getTestability'); - } - return injector.get('$$testability'); -} - -var SNAKE_CASE_REGEXP = /[A-Z]/g; -function snake_case(name, separator) { - separator = separator || '_'; - return name.replace(SNAKE_CASE_REGEXP, function(letter, pos) { - return (pos ? separator : '') + letter.toLowerCase(); - }); -} - -var bindJQueryFired = false; -var skipDestroyOnNextJQueryCleanData; -function bindJQuery() { - var originalCleanData; - - if (bindJQueryFired) { - return; - } - - // bind to jQuery if present; - jQuery = window.jQuery; - // Use jQuery if it exists with proper functionality, otherwise default to us. - // Angular 1.2+ requires jQuery 1.7+ for on()/off() support. - // Angular 1.3+ technically requires at least jQuery 2.1+ but it may work with older - // versions. It will not work for sure with jQuery <1.7, though. - if (jQuery && jQuery.fn.on) { - jqLite = jQuery; - extend(jQuery.fn, { - scope: JQLitePrototype.scope, - isolateScope: JQLitePrototype.isolateScope, - controller: JQLitePrototype.controller, - injector: JQLitePrototype.injector, - inheritedData: JQLitePrototype.inheritedData - }); - - // All nodes removed from the DOM via various jQuery APIs like .remove() - // are passed through jQuery.cleanData. Monkey-patch this method to fire - // the $destroy event on all removed nodes. - originalCleanData = jQuery.cleanData; - jQuery.cleanData = function(elems) { - var events; - if (!skipDestroyOnNextJQueryCleanData) { - for (var i = 0, elem; (elem = elems[i]) != null; i++) { - events = jQuery._data(elem, "events"); - if (events && events.$destroy) { - jQuery(elem).triggerHandler('$destroy'); - } - } - } else { - skipDestroyOnNextJQueryCleanData = false; - } - originalCleanData(elems); - }; - } else { - jqLite = JQLite; - } - - angular.element = jqLite; - - // Prevent double-proxying. - bindJQueryFired = true; -} - -/** - * throw error if the argument is falsy. - */ -function assertArg(arg, name, reason) { - if (!arg) { - throw ngMinErr('areq', "Argument '{0}' is {1}", (name || '?'), (reason || "required")); - } - return arg; -} - -function assertArgFn(arg, name, acceptArrayAnnotation) { - if (acceptArrayAnnotation && isArray(arg)) { - arg = arg[arg.length - 1]; - } - - assertArg(isFunction(arg), name, 'not a function, got ' + - (arg && typeof arg === 'object' ? arg.constructor.name || 'Object' : typeof arg)); - return arg; -} - -/** - * throw error if the name given is hasOwnProperty - * @param {String} name the name to test - * @param {String} context the context in which the name is used, such as module or directive - */ -function assertNotHasOwnProperty(name, context) { - if (name === 'hasOwnProperty') { - throw ngMinErr('badname', "hasOwnProperty is not a valid {0} name", context); - } -} - -/** - * Return the value accessible from the object by path. Any undefined traversals are ignored - * @param {Object} obj starting object - * @param {String} path path to traverse - * @param {boolean} [bindFnToScope=true] - * @returns {Object} value as accessible by path - */ -//TODO(misko): this function needs to be removed -function getter(obj, path, bindFnToScope) { - if (!path) return obj; - var keys = path.split('.'); - var key; - var lastInstance = obj; - var len = keys.length; - - for (var i = 0; i < len; i++) { - key = keys[i]; - if (obj) { - obj = (lastInstance = obj)[key]; - } - } - if (!bindFnToScope && isFunction(obj)) { - return bind(lastInstance, obj); - } - return obj; -} - -/** - * Return the DOM siblings between the first and last node in the given array. - * @param {Array} array like object - * @returns {jqLite} jqLite collection containing the nodes - */ -function getBlockNodes(nodes) { - // TODO(perf): just check if all items in `nodes` are siblings and if they are return the original - // collection, otherwise update the original collection. - var node = nodes[0]; - var endNode = nodes[nodes.length - 1]; - var blockNodes = [node]; - - do { - node = node.nextSibling; - if (!node) break; - blockNodes.push(node); - } while (node !== endNode); - - return jqLite(blockNodes); -} - - -/** - * Creates a new object without a prototype. This object is useful for lookup without having to - * guard against prototypically inherited properties via hasOwnProperty. - * - * Related micro-benchmarks: - * - http://jsperf.com/object-create2 - * - http://jsperf.com/proto-map-lookup/2 - * - http://jsperf.com/for-in-vs-object-keys2 - * - * @returns {Object} - */ -function createMap() { - return Object.create(null); -} - -var NODE_TYPE_ELEMENT = 1; -var NODE_TYPE_TEXT = 3; -var NODE_TYPE_COMMENT = 8; -var NODE_TYPE_DOCUMENT = 9; -var NODE_TYPE_DOCUMENT_FRAGMENT = 11; - -/** - * @ngdoc type - * @name angular.Module - * @module ng - * @description - * - * Interface for configuring angular {@link angular.module modules}. - */ - -function setupModuleLoader(window) { - - var $injectorMinErr = minErr('$injector'); - var ngMinErr = minErr('ng'); - - function ensure(obj, name, factory) { - return obj[name] || (obj[name] = factory()); - } - - var angular = ensure(window, 'angular', Object); - - // We need to expose `angular.$$minErr` to modules such as `ngResource` that reference it during bootstrap - angular.$$minErr = angular.$$minErr || minErr; - - return ensure(angular, 'module', function() { - /** @type {Object.<string, angular.Module>} */ - var modules = {}; - - /** - * @ngdoc function - * @name angular.module - * @module ng - * @description - * - * The `angular.module` is a global place for creating, registering and retrieving Angular - * modules. - * All modules (angular core or 3rd party) that should be available to an application must be - * registered using this mechanism. - * - * When passed two or more arguments, a new module is created. If passed only one argument, an - * existing module (the name passed as the first argument to `module`) is retrieved. - * - * - * # Module - * - * A module is a collection of services, directives, controllers, filters, and configuration information. - * `angular.module` is used to configure the {@link auto.$injector $injector}. - * - * ```js - * // Create a new module - * var myModule = angular.module('myModule', []); - * - * // register a new service - * myModule.value('appName', 'MyCoolApp'); - * - * // configure existing services inside initialization blocks. - * myModule.config(['$locationProvider', function($locationProvider) { - * // Configure existing providers - * $locationProvider.hashPrefix('!'); - * }]); - * ``` - * - * Then you can create an injector and load your modules like this: - * - * ```js - * var injector = angular.injector(['ng', 'myModule']) - * ``` - * - * However it's more likely that you'll just use - * {@link ng.directive:ngApp ngApp} or - * {@link angular.bootstrap} to simplify this process for you. - * - * @param {!string} name The name of the module to create or retrieve. - * @param {!Array.<string>=} requires If specified then new module is being created. If - * unspecified then the module is being retrieved for further configuration. - * @param {Function=} configFn Optional configuration function for the module. Same as - * {@link angular.Module#config Module#config()}. - * @returns {module} new module with the {@link angular.Module} api. - */ - return function module(name, requires, configFn) { - var assertNotHasOwnProperty = function(name, context) { - if (name === 'hasOwnProperty') { - throw ngMinErr('badname', 'hasOwnProperty is not a valid {0} name', context); - } - }; - - assertNotHasOwnProperty(name, 'module'); - if (requires && modules.hasOwnProperty(name)) { - modules[name] = null; - } - return ensure(modules, name, function() { - if (!requires) { - throw $injectorMinErr('nomod', "Module '{0}' is not available! You either misspelled " + - "the module name or forgot to load it. If registering a module ensure that you " + - "specify the dependencies as the second argument.", name); - } - - /** @type {!Array.<Array.<*>>} */ - var invokeQueue = []; - - /** @type {!Array.<Function>} */ - var configBlocks = []; - - /** @type {!Array.<Function>} */ - var runBlocks = []; - - var config = invokeLater('$injector', 'invoke', 'push', configBlocks); - - /** @type {angular.Module} */ - var moduleInstance = { - // Private state - _invokeQueue: invokeQueue, - _configBlocks: configBlocks, - _runBlocks: runBlocks, - - /** - * @ngdoc property - * @name angular.Module#requires - * @module ng - * - * @description - * Holds the list of modules which the injector will load before the current module is - * loaded. - */ - requires: requires, - - /** - * @ngdoc property - * @name angular.Module#name - * @module ng - * - * @description - * Name of the module. - */ - name: name, - - - /** - * @ngdoc method - * @name angular.Module#provider - * @module ng - * @param {string} name service name - * @param {Function} providerType Construction function for creating new instance of the - * service. - * @description - * See {@link auto.$provide#provider $provide.provider()}. - */ - provider: invokeLater('$provide', 'provider'), - - /** - * @ngdoc method - * @name angular.Module#factory - * @module ng - * @param {string} name service name - * @param {Function} providerFunction Function for creating new instance of the service. - * @description - * See {@link auto.$provide#factory $provide.factory()}. - */ - factory: invokeLater('$provide', 'factory'), - - /** - * @ngdoc method - * @name angular.Module#service - * @module ng - * @param {string} name service name - * @param {Function} constructor A constructor function that will be instantiated. - * @description - * See {@link auto.$provide#service $provide.service()}. - */ - service: invokeLater('$provide', 'service'), - - /** - * @ngdoc method - * @name angular.Module#value - * @module ng - * @param {string} name service name - * @param {*} object Service instance object. - * @description - * See {@link auto.$provide#value $provide.value()}. - */ - value: invokeLater('$provide', 'value'), - - /** - * @ngdoc method - * @name angular.Module#constant - * @module ng - * @param {string} name constant name - * @param {*} object Constant value. - * @description - * Because the constant are fixed, they get applied before other provide methods. - * See {@link auto.$provide#constant $provide.constant()}. - */ - constant: invokeLater('$provide', 'constant', 'unshift'), - - /** - * @ngdoc method - * @name angular.Module#animation - * @module ng - * @param {string} name animation name - * @param {Function} animationFactory Factory function for creating new instance of an - * animation. - * @description - * - * **NOTE**: animations take effect only if the **ngAnimate** module is loaded. - * - * - * Defines an animation hook that can be later used with - * {@link ngAnimate.$animate $animate} service and directives that use this service. - * - * ```js - * module.animation('.animation-name', function($inject1, $inject2) { - * return { - * eventName : function(element, done) { - * //code to run the animation - * //once complete, then run done() - * return function cancellationFunction(element) { - * //code to cancel the animation - * } - * } - * } - * }) - * ``` - * - * See {@link ng.$animateProvider#register $animateProvider.register()} and - * {@link ngAnimate ngAnimate module} for more information. - */ - animation: invokeLater('$animateProvider', 'register'), - - /** - * @ngdoc method - * @name angular.Module#filter - * @module ng - * @param {string} name Filter name. - * @param {Function} filterFactory Factory function for creating new instance of filter. - * @description - * See {@link ng.$filterProvider#register $filterProvider.register()}. - */ - filter: invokeLater('$filterProvider', 'register'), - - /** - * @ngdoc method - * @name angular.Module#controller - * @module ng - * @param {string|Object} name Controller name, or an object map of controllers where the - * keys are the names and the values are the constructors. - * @param {Function} constructor Controller constructor function. - * @description - * See {@link ng.$controllerProvider#register $controllerProvider.register()}. - */ - controller: invokeLater('$controllerProvider', 'register'), - - /** - * @ngdoc method - * @name angular.Module#directive - * @module ng - * @param {string|Object} name Directive name, or an object map of directives where the - * keys are the names and the values are the factories. - * @param {Function} directiveFactory Factory function for creating new instance of - * directives. - * @description - * See {@link ng.$compileProvider#directive $compileProvider.directive()}. - */ - directive: invokeLater('$compileProvider', 'directive'), - - /** - * @ngdoc method - * @name angular.Module#config - * @module ng - * @param {Function} configFn Execute this function on module load. Useful for service - * configuration. - * @description - * Use this method to register work which needs to be performed on module loading. - * For more about how to configure services, see - * {@link providers#provider-recipe Provider Recipe}. - */ - config: config, - - /** - * @ngdoc method - * @name angular.Module#run - * @module ng - * @param {Function} initializationFn Execute this function after injector creation. - * Useful for application initialization. - * @description - * Use this method to register work which should be performed when the injector is done - * loading all modules. - */ - run: function(block) { - runBlocks.push(block); - return this; - } - }; - - if (configFn) { - config(configFn); - } - - return moduleInstance; - - /** - * @param {string} provider - * @param {string} method - * @param {String=} insertMethod - * @returns {angular.Module} - */ - function invokeLater(provider, method, insertMethod, queue) { - if (!queue) queue = invokeQueue; - return function() { - queue[insertMethod || 'push']([provider, method, arguments]); - return moduleInstance; - }; - } - }); - }; - }); - -} - -/* global: toDebugString: true */ - -function serializeObject(obj) { - var seen = []; - - return JSON.stringify(obj, function(key, val) { - val = toJsonReplacer(key, val); - if (isObject(val)) { - - if (seen.indexOf(val) >= 0) return '<<already seen>>'; - - seen.push(val); - } - return val; - }); -} - -function toDebugString(obj) { - if (typeof obj === 'function') { - return obj.toString().replace(/ \{[\s\S]*$/, ''); - } else if (typeof obj === 'undefined') { - return 'undefined'; - } else if (typeof obj !== 'string') { - return serializeObject(obj); - } - return obj; -} - -/* global angularModule: true, - version: true, - - $LocaleProvider, - $CompileProvider, - - htmlAnchorDirective, - inputDirective, - inputDirective, - formDirective, - scriptDirective, - selectDirective, - styleDirective, - optionDirective, - ngBindDirective, - ngBindHtmlDirective, - ngBindTemplateDirective, - ngClassDirective, - ngClassEvenDirective, - ngClassOddDirective, - ngCspDirective, - ngCloakDirective, - ngControllerDirective, - ngFormDirective, - ngHideDirective, - ngIfDirective, - ngIncludeDirective, - ngIncludeFillContentDirective, - ngInitDirective, - ngNonBindableDirective, - ngPluralizeDirective, - ngRepeatDirective, - ngShowDirective, - ngStyleDirective, - ngSwitchDirective, - ngSwitchWhenDirective, - ngSwitchDefaultDirective, - ngOptionsDirective, - ngTranscludeDirective, - ngModelDirective, - ngListDirective, - ngChangeDirective, - patternDirective, - patternDirective, - requiredDirective, - requiredDirective, - minlengthDirective, - minlengthDirective, - maxlengthDirective, - maxlengthDirective, - ngValueDirective, - ngModelOptionsDirective, - ngAttributeAliasDirectives, - ngEventDirectives, - - $AnchorScrollProvider, - $AnimateProvider, - $BrowserProvider, - $CacheFactoryProvider, - $ControllerProvider, - $DocumentProvider, - $ExceptionHandlerProvider, - $FilterProvider, - $InterpolateProvider, - $IntervalProvider, - $HttpProvider, - $HttpBackendProvider, - $LocationProvider, - $LogProvider, - $ParseProvider, - $RootScopeProvider, - $QProvider, - $$QProvider, - $$SanitizeUriProvider, - $SceProvider, - $SceDelegateProvider, - $SnifferProvider, - $TemplateCacheProvider, - $TemplateRequestProvider, - $$TestabilityProvider, - $TimeoutProvider, - $$RAFProvider, - $$AsyncCallbackProvider, - $WindowProvider, - $$jqLiteProvider -*/ - - -/** - * @ngdoc object - * @name angular.version - * @module ng - * @description - * An object that contains information about the current AngularJS version. This object has the - * following properties: - * - * - `full` – `{string}` – Full version string, such as "0.9.18". - * - `major` – `{number}` – Major version number, such as "0". - * - `minor` – `{number}` – Minor version number, such as "9". - * - `dot` – `{number}` – Dot version number, such as "18". - * - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat". - */ -var version = { - full: '1.3.11', // all of these placeholder strings will be replaced by grunt's - major: 1, // package task - minor: 3, - dot: 11, - codeName: 'spiffy-manatee' -}; - - -function publishExternalAPI(angular) { - extend(angular, { - 'bootstrap': bootstrap, - 'copy': copy, - 'extend': extend, - 'equals': equals, - 'element': jqLite, - 'forEach': forEach, - 'injector': createInjector, - 'noop': noop, - 'bind': bind, - 'toJson': toJson, - 'fromJson': fromJson, - 'identity': identity, - 'isUndefined': isUndefined, - 'isDefined': isDefined, - 'isString': isString, - 'isFunction': isFunction, - 'isObject': isObject, - 'isNumber': isNumber, - 'isElement': isElement, - 'isArray': isArray, - 'version': version, - 'isDate': isDate, - 'lowercase': lowercase, - 'uppercase': uppercase, - 'callbacks': {counter: 0}, - 'getTestability': getTestability, - '$$minErr': minErr, - '$$csp': csp, - 'reloadWithDebugInfo': reloadWithDebugInfo - }); - - angularModule = setupModuleLoader(window); - try { - angularModule('ngLocale'); - } catch (e) { - angularModule('ngLocale', []).provider('$locale', $LocaleProvider); - } - - angularModule('ng', ['ngLocale'], ['$provide', - function ngModule($provide) { - // $$sanitizeUriProvider needs to be before $compileProvider as it is used by it. - $provide.provider({ - $$sanitizeUri: $$SanitizeUriProvider - }); - $provide.provider('$compile', $CompileProvider). - directive({ - a: htmlAnchorDirective, - input: inputDirective, - textarea: inputDirective, - form: formDirective, - script: scriptDirective, - select: selectDirective, - style: styleDirective, - option: optionDirective, - ngBind: ngBindDirective, - ngBindHtml: ngBindHtmlDirective, - ngBindTemplate: ngBindTemplateDirective, - ngClass: ngClassDirective, - ngClassEven: ngClassEvenDirective, - ngClassOdd: ngClassOddDirective, - ngCloak: ngCloakDirective, - ngController: ngControllerDirective, - ngForm: ngFormDirective, - ngHide: ngHideDirective, - ngIf: ngIfDirective, - ngInclude: ngIncludeDirective, - ngInit: ngInitDirective, - ngNonBindable: ngNonBindableDirective, - ngPluralize: ngPluralizeDirective, - ngRepeat: ngRepeatDirective, - ngShow: ngShowDirective, - ngStyle: ngStyleDirective, - ngSwitch: ngSwitchDirective, - ngSwitchWhen: ngSwitchWhenDirective, - ngSwitchDefault: ngSwitchDefaultDirective, - ngOptions: ngOptionsDirective, - ngTransclude: ngTranscludeDirective, - ngModel: ngModelDirective, - ngList: ngListDirective, - ngChange: ngChangeDirective, - pattern: patternDirective, - ngPattern: patternDirective, - required: requiredDirective, - ngRequired: requiredDirective, - minlength: minlengthDirective, - ngMinlength: minlengthDirective, - maxlength: maxlengthDirective, - ngMaxlength: maxlengthDirective, - ngValue: ngValueDirective, - ngModelOptions: ngModelOptionsDirective - }). - directive({ - ngInclude: ngIncludeFillContentDirective - }). - directive(ngAttributeAliasDirectives). - directive(ngEventDirectives); - $provide.provider({ - $anchorScroll: $AnchorScrollProvider, - $animate: $AnimateProvider, - $browser: $BrowserProvider, - $cacheFactory: $CacheFactoryProvider, - $controller: $ControllerProvider, - $document: $DocumentProvider, - $exceptionHandler: $ExceptionHandlerProvider, - $filter: $FilterProvider, - $interpolate: $InterpolateProvider, - $interval: $IntervalProvider, - $http: $HttpProvider, - $httpBackend: $HttpBackendProvider, - $location: $LocationProvider, - $log: $LogProvider, - $parse: $ParseProvider, - $rootScope: $RootScopeProvider, - $q: $QProvider, - $$q: $$QProvider, - $sce: $SceProvider, - $sceDelegate: $SceDelegateProvider, - $sniffer: $SnifferProvider, - $templateCache: $TemplateCacheProvider, - $templateRequest: $TemplateRequestProvider, - $$testability: $$TestabilityProvider, - $timeout: $TimeoutProvider, - $window: $WindowProvider, - $$rAF: $$RAFProvider, - $$asyncCallback: $$AsyncCallbackProvider, - $$jqLite: $$jqLiteProvider - }); - } - ]); -} - -/* global JQLitePrototype: true, - addEventListenerFn: true, - removeEventListenerFn: true, - BOOLEAN_ATTR: true, - ALIASED_ATTR: true, -*/ - -////////////////////////////////// -//JQLite -////////////////////////////////// - -/** - * @ngdoc function - * @name angular.element - * @module ng - * @kind function - * - * @description - * Wraps a raw DOM element or HTML string as a [jQuery](http://jquery.com) element. - * - * If jQuery is available, `angular.element` is an alias for the - * [jQuery](http://api.jquery.com/jQuery/) function. If jQuery is not available, `angular.element` - * delegates to Angular's built-in subset of jQuery, called "jQuery lite" or "jqLite." - * - * <div class="alert alert-success">jqLite is a tiny, API-compatible subset of jQuery that allows - * Angular to manipulate the DOM in a cross-browser compatible way. **jqLite** implements only the most - * commonly needed functionality with the goal of having a very small footprint.</div> - * - * To use jQuery, simply load it before `DOMContentLoaded` event fired. - * - * <div class="alert">**Note:** all element references in Angular are always wrapped with jQuery or - * jqLite; they are never raw DOM references.</div> - * - * ## Angular's jqLite - * jqLite provides only the following jQuery methods: - * - * - [`addClass()`](http://api.jquery.com/addClass/) - * - [`after()`](http://api.jquery.com/after/) - * - [`append()`](http://api.jquery.com/append/) - * - [`attr()`](http://api.jquery.com/attr/) - Does not support functions as parameters - * - [`bind()`](http://api.jquery.com/bind/) - Does not support namespaces, selectors or eventData - * - [`children()`](http://api.jquery.com/children/) - Does not support selectors - * - [`clone()`](http://api.jquery.com/clone/) - * - [`contents()`](http://api.jquery.com/contents/) - * - [`css()`](http://api.jquery.com/css/) - Only retrieves inline-styles, does not call `getComputedStyle()` - * - [`data()`](http://api.jquery.com/data/) - * - [`detach()`](http://api.jquery.com/detach/) - * - [`empty()`](http://api.jquery.com/empty/) - * - [`eq()`](http://api.jquery.com/eq/) - * - [`find()`](http://api.jquery.com/find/) - Limited to lookups by tag name - * - [`hasClass()`](http://api.jquery.com/hasClass/) - * - [`html()`](http://api.jquery.com/html/) - * - [`next()`](http://api.jquery.com/next/) - Does not support selectors - * - [`on()`](http://api.jquery.com/on/) - Does not support namespaces, selectors or eventData - * - [`off()`](http://api.jquery.com/off/) - Does not support namespaces or selectors - * - [`one()`](http://api.jquery.com/one/) - Does not support namespaces or selectors - * - [`parent()`](http://api.jquery.com/parent/) - Does not support selectors - * - [`prepend()`](http://api.jquery.com/prepend/) - * - [`prop()`](http://api.jquery.com/prop/) - * - [`ready()`](http://api.jquery.com/ready/) - * - [`remove()`](http://api.jquery.com/remove/) - * - [`removeAttr()`](http://api.jquery.com/removeAttr/) - * - [`removeClass()`](http://api.jquery.com/removeClass/) - * - [`removeData()`](http://api.jquery.com/removeData/) - * - [`replaceWith()`](http://api.jquery.com/replaceWith/) - * - [`text()`](http://api.jquery.com/text/) - * - [`toggleClass()`](http://api.jquery.com/toggleClass/) - * - [`triggerHandler()`](http://api.jquery.com/triggerHandler/) - Passes a dummy event object to handlers. - * - [`unbind()`](http://api.jquery.com/unbind/) - Does not support namespaces - * - [`val()`](http://api.jquery.com/val/) - * - [`wrap()`](http://api.jquery.com/wrap/) - * - * ## jQuery/jqLite Extras - * Angular also provides the following additional methods and events to both jQuery and jqLite: - * - * ### Events - * - `$destroy` - AngularJS intercepts all jqLite/jQuery's DOM destruction apis and fires this event - * on all DOM nodes being removed. This can be used to clean up any 3rd party bindings to the DOM - * element before it is removed. - * - * ### Methods - * - `controller(name)` - retrieves the controller of the current element or its parent. By default - * retrieves controller associated with the `ngController` directive. If `name` is provided as - * camelCase directive name, then the controller for this directive will be retrieved (e.g. - * `'ngModel'`). - * - `injector()` - retrieves the injector of the current element or its parent. - * - `scope()` - retrieves the {@link ng.$rootScope.Scope scope} of the current - * element or its parent. Requires {@link guide/production#disabling-debug-data Debug Data} to - * be enabled. - * - `isolateScope()` - retrieves an isolate {@link ng.$rootScope.Scope scope} if one is attached directly to the - * current element. This getter should be used only on elements that contain a directive which starts a new isolate - * scope. Calling `scope()` on this element always returns the original non-isolate scope. - * Requires {@link guide/production#disabling-debug-data Debug Data} to be enabled. - * - `inheritedData()` - same as `data()`, but walks up the DOM until a value is found or the top - * parent element is reached. - * - * @param {string|DOMElement} element HTML string or DOMElement to be wrapped into jQuery. - * @returns {Object} jQuery object. - */ - -JQLite.expando = 'ng339'; - -var jqCache = JQLite.cache = {}, - jqId = 1, - addEventListenerFn = function(element, type, fn) { - element.addEventListener(type, fn, false); - }, - removeEventListenerFn = function(element, type, fn) { - element.removeEventListener(type, fn, false); - }; - -/* - * !!! This is an undocumented "private" function !!! - */ -JQLite._data = function(node) { - //jQuery always returns an object on cache miss - return this.cache[node[this.expando]] || {}; -}; - -function jqNextId() { return ++jqId; } - - -var SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g; -var MOZ_HACK_REGEXP = /^moz([A-Z])/; -var MOUSE_EVENT_MAP= { mouseleave: "mouseout", mouseenter: "mouseover"}; -var jqLiteMinErr = minErr('jqLite'); - -/** - * Converts snake_case to camelCase. - * Also there is special case for Moz prefix starting with upper case letter. - * @param name Name to normalize - */ -function camelCase(name) { - return name. - replace(SPECIAL_CHARS_REGEXP, function(_, separator, letter, offset) { - return offset ? letter.toUpperCase() : letter; - }). - replace(MOZ_HACK_REGEXP, 'Moz$1'); -} - -var SINGLE_TAG_REGEXP = /^<(\w+)\s*\/?>(?:<\/\1>|)$/; -var HTML_REGEXP = /<|&#?\w+;/; -var TAG_NAME_REGEXP = /<([\w:]+)/; -var XHTML_TAG_REGEXP = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi; - -var wrapMap = { - 'option': [1, '<select multiple="multiple">', '</select>'], - - 'thead': [1, '<table>', '</table>'], - 'col': [2, '<table><colgroup>', '</colgroup></table>'], - 'tr': [2, '<table><tbody>', '</tbody></table>'], - 'td': [3, '<table><tbody><tr>', '</tr></tbody></table>'], - '_default': [0, "", ""] -}; - -wrapMap.optgroup = wrapMap.option; -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - - -function jqLiteIsTextNode(html) { - return !HTML_REGEXP.test(html); -} - -function jqLiteAcceptsData(node) { - // The window object can accept data but has no nodeType - // Otherwise we are only interested in elements (1) and documents (9) - var nodeType = node.nodeType; - return nodeType === NODE_TYPE_ELEMENT || !nodeType || nodeType === NODE_TYPE_DOCUMENT; -} - -function jqLiteBuildFragment(html, context) { - var tmp, tag, wrap, - fragment = context.createDocumentFragment(), - nodes = [], i; - - if (jqLiteIsTextNode(html)) { - // Convert non-html into a text node - nodes.push(context.createTextNode(html)); - } else { - // Convert html into DOM nodes - tmp = tmp || fragment.appendChild(context.createElement("div")); - tag = (TAG_NAME_REGEXP.exec(html) || ["", ""])[1].toLowerCase(); - wrap = wrapMap[tag] || wrapMap._default; - tmp.innerHTML = wrap[1] + html.replace(XHTML_TAG_REGEXP, "<$1></$2>") + wrap[2]; - - // Descend through wrappers to the right content - i = wrap[0]; - while (i--) { - tmp = tmp.lastChild; - } - - nodes = concat(nodes, tmp.childNodes); - - tmp = fragment.firstChild; - tmp.textContent = ""; - } - - // Remove wrapper from fragment - fragment.textContent = ""; - fragment.innerHTML = ""; // Clear inner HTML - forEach(nodes, function(node) { - fragment.appendChild(node); - }); - - return fragment; -} - -function jqLiteParseHTML(html, context) { - context = context || document; - var parsed; - - if ((parsed = SINGLE_TAG_REGEXP.exec(html))) { - return [context.createElement(parsed[1])]; - } - - if ((parsed = jqLiteBuildFragment(html, context))) { - return parsed.childNodes; - } - - return []; -} - -///////////////////////////////////////////// -function JQLite(element) { - if (element instanceof JQLite) { - return element; - } - - var argIsString; - - if (isString(element)) { - element = trim(element); - argIsString = true; - } - if (!(this instanceof JQLite)) { - if (argIsString && element.charAt(0) != '<') { - throw jqLiteMinErr('nosel', 'Looking up elements via selectors is not supported by jqLite! See: http://docs.angularjs.org/api/angular.element'); - } - return new JQLite(element); - } - - if (argIsString) { - jqLiteAddNodes(this, jqLiteParseHTML(element)); - } else { - jqLiteAddNodes(this, element); - } -} - -function jqLiteClone(element) { - return element.cloneNode(true); -} - -function jqLiteDealoc(element, onlyDescendants) { - if (!onlyDescendants) jqLiteRemoveData(element); - - if (element.querySelectorAll) { - var descendants = element.querySelectorAll('*'); - for (var i = 0, l = descendants.length; i < l; i++) { - jqLiteRemoveData(descendants[i]); - } - } -} - -function jqLiteOff(element, type, fn, unsupported) { - if (isDefined(unsupported)) throw jqLiteMinErr('offargs', 'jqLite#off() does not support the `selector` argument'); - - var expandoStore = jqLiteExpandoStore(element); - var events = expandoStore && expandoStore.events; - var handle = expandoStore && expandoStore.handle; - - if (!handle) return; //no listeners registered - - if (!type) { - for (type in events) { - if (type !== '$destroy') { - removeEventListenerFn(element, type, handle); - } - delete events[type]; - } - } else { - forEach(type.split(' '), function(type) { - if (isDefined(fn)) { - var listenerFns = events[type]; - arrayRemove(listenerFns || [], fn); - if (listenerFns && listenerFns.length > 0) { - return; - } - } - - removeEventListenerFn(element, type, handle); - delete events[type]; - }); - } -} - -function jqLiteRemoveData(element, name) { - var expandoId = element.ng339; - var expandoStore = expandoId && jqCache[expandoId]; - - if (expandoStore) { - if (name) { - delete expandoStore.data[name]; - return; - } - - if (expandoStore.handle) { - if (expandoStore.events.$destroy) { - expandoStore.handle({}, '$destroy'); - } - jqLiteOff(element); - } - delete jqCache[expandoId]; - element.ng339 = undefined; // don't delete DOM expandos. IE and Chrome don't like it - } -} - - -function jqLiteExpandoStore(element, createIfNecessary) { - var expandoId = element.ng339, - expandoStore = expandoId && jqCache[expandoId]; - - if (createIfNecessary && !expandoStore) { - element.ng339 = expandoId = jqNextId(); - expandoStore = jqCache[expandoId] = {events: {}, data: {}, handle: undefined}; - } - - return expandoStore; -} - - -function jqLiteData(element, key, value) { - if (jqLiteAcceptsData(element)) { - - var isSimpleSetter = isDefined(value); - var isSimpleGetter = !isSimpleSetter && key && !isObject(key); - var massGetter = !key; - var expandoStore = jqLiteExpandoStore(element, !isSimpleGetter); - var data = expandoStore && expandoStore.data; - - if (isSimpleSetter) { // data('key', value) - data[key] = value; - } else { - if (massGetter) { // data() - return data; - } else { - if (isSimpleGetter) { // data('key') - // don't force creation of expandoStore if it doesn't exist yet - return data && data[key]; - } else { // mass-setter: data({key1: val1, key2: val2}) - extend(data, key); - } - } - } - } -} - -function jqLiteHasClass(element, selector) { - if (!element.getAttribute) return false; - return ((" " + (element.getAttribute('class') || '') + " ").replace(/[\n\t]/g, " "). - indexOf(" " + selector + " ") > -1); -} - -function jqLiteRemoveClass(element, cssClasses) { - if (cssClasses && element.setAttribute) { - forEach(cssClasses.split(' '), function(cssClass) { - element.setAttribute('class', trim( - (" " + (element.getAttribute('class') || '') + " ") - .replace(/[\n\t]/g, " ") - .replace(" " + trim(cssClass) + " ", " ")) - ); - }); - } -} - -function jqLiteAddClass(element, cssClasses) { - if (cssClasses && element.setAttribute) { - var existingClasses = (' ' + (element.getAttribute('class') || '') + ' ') - .replace(/[\n\t]/g, " "); - - forEach(cssClasses.split(' '), function(cssClass) { - cssClass = trim(cssClass); - if (existingClasses.indexOf(' ' + cssClass + ' ') === -1) { - existingClasses += cssClass + ' '; - } - }); - - element.setAttribute('class', trim(existingClasses)); - } -} - - -function jqLiteAddNodes(root, elements) { - // THIS CODE IS VERY HOT. Don't make changes without benchmarking. - - if (elements) { - - // if a Node (the most common case) - if (elements.nodeType) { - root[root.length++] = elements; - } else { - var length = elements.length; - - // if an Array or NodeList and not a Window - if (typeof length === 'number' && elements.window !== elements) { - if (length) { - for (var i = 0; i < length; i++) { - root[root.length++] = elements[i]; - } - } - } else { - root[root.length++] = elements; - } - } - } -} - - -function jqLiteController(element, name) { - return jqLiteInheritedData(element, '$' + (name || 'ngController') + 'Controller'); -} - -function jqLiteInheritedData(element, name, value) { - // if element is the document object work with the html element instead - // this makes $(document).scope() possible - if (element.nodeType == NODE_TYPE_DOCUMENT) { - element = element.documentElement; - } - var names = isArray(name) ? name : [name]; - - while (element) { - for (var i = 0, ii = names.length; i < ii; i++) { - if ((value = jqLite.data(element, names[i])) !== undefined) return value; - } - - // If dealing with a document fragment node with a host element, and no parent, use the host - // element as the parent. This enables directives within a Shadow DOM or polyfilled Shadow DOM - // to lookup parent controllers. - element = element.parentNode || (element.nodeType === NODE_TYPE_DOCUMENT_FRAGMENT && element.host); - } -} - -function jqLiteEmpty(element) { - jqLiteDealoc(element, true); - while (element.firstChild) { - element.removeChild(element.firstChild); - } -} - -function jqLiteRemove(element, keepData) { - if (!keepData) jqLiteDealoc(element); - var parent = element.parentNode; - if (parent) parent.removeChild(element); -} - - -function jqLiteDocumentLoaded(action, win) { - win = win || window; - if (win.document.readyState === 'complete') { - // Force the action to be run async for consistent behaviour - // from the action's point of view - // i.e. it will definitely not be in a $apply - win.setTimeout(action); - } else { - // No need to unbind this handler as load is only ever called once - jqLite(win).on('load', action); - } -} - -////////////////////////////////////////// -// Functions which are declared directly. -////////////////////////////////////////// -var JQLitePrototype = JQLite.prototype = { - ready: function(fn) { - var fired = false; - - function trigger() { - if (fired) return; - fired = true; - fn(); - } - - // check if document is already loaded - if (document.readyState === 'complete') { - setTimeout(trigger); - } else { - this.on('DOMContentLoaded', trigger); // works for modern browsers and IE9 - // we can not use jqLite since we are not done loading and jQuery could be loaded later. - // jshint -W064 - JQLite(window).on('load', trigger); // fallback to window.onload for others - // jshint +W064 - } - }, - toString: function() { - var value = []; - forEach(this, function(e) { value.push('' + e);}); - return '[' + value.join(', ') + ']'; - }, - - eq: function(index) { - return (index >= 0) ? jqLite(this[index]) : jqLite(this[this.length + index]); - }, - - length: 0, - push: push, - sort: [].sort, - splice: [].splice -}; - -////////////////////////////////////////// -// Functions iterating getter/setters. -// these functions return self on setter and -// value on get. -////////////////////////////////////////// -var BOOLEAN_ATTR = {}; -forEach('multiple,selected,checked,disabled,readOnly,required,open'.split(','), function(value) { - BOOLEAN_ATTR[lowercase(value)] = value; -}); -var BOOLEAN_ELEMENTS = {}; -forEach('input,select,option,textarea,button,form,details'.split(','), function(value) { - BOOLEAN_ELEMENTS[value] = true; -}); -var ALIASED_ATTR = { - 'ngMinlength': 'minlength', - 'ngMaxlength': 'maxlength', - 'ngMin': 'min', - 'ngMax': 'max', - 'ngPattern': 'pattern' -}; - -function getBooleanAttrName(element, name) { - // check dom last since we will most likely fail on name - var booleanAttr = BOOLEAN_ATTR[name.toLowerCase()]; - - // booleanAttr is here twice to minimize DOM access - return booleanAttr && BOOLEAN_ELEMENTS[nodeName_(element)] && booleanAttr; -} - -function getAliasedAttrName(element, name) { - var nodeName = element.nodeName; - return (nodeName === 'INPUT' || nodeName === 'TEXTAREA') && ALIASED_ATTR[name]; -} - -forEach({ - data: jqLiteData, - removeData: jqLiteRemoveData -}, function(fn, name) { - JQLite[name] = fn; -}); - -forEach({ - data: jqLiteData, - inheritedData: jqLiteInheritedData, - - scope: function(element) { - // Can't use jqLiteData here directly so we stay compatible with jQuery! - return jqLite.data(element, '$scope') || jqLiteInheritedData(element.parentNode || element, ['$isolateScope', '$scope']); - }, - - isolateScope: function(element) { - // Can't use jqLiteData here directly so we stay compatible with jQuery! - return jqLite.data(element, '$isolateScope') || jqLite.data(element, '$isolateScopeNoTemplate'); - }, - - controller: jqLiteController, - - injector: function(element) { - return jqLiteInheritedData(element, '$injector'); - }, - - removeAttr: function(element, name) { - element.removeAttribute(name); - }, - - hasClass: jqLiteHasClass, - - css: function(element, name, value) { - name = camelCase(name); - - if (isDefined(value)) { - element.style[name] = value; - } else { - return element.style[name]; - } - }, - - attr: function(element, name, value) { - var lowercasedName = lowercase(name); - if (BOOLEAN_ATTR[lowercasedName]) { - if (isDefined(value)) { - if (!!value) { - element[name] = true; - element.setAttribute(name, lowercasedName); - } else { - element[name] = false; - element.removeAttribute(lowercasedName); - } - } else { - return (element[name] || - (element.attributes.getNamedItem(name) || noop).specified) - ? lowercasedName - : undefined; - } - } else if (isDefined(value)) { - element.setAttribute(name, value); - } else if (element.getAttribute) { - // the extra argument "2" is to get the right thing for a.href in IE, see jQuery code - // some elements (e.g. Document) don't have get attribute, so return undefined - var ret = element.getAttribute(name, 2); - // normalize non-existing attributes to undefined (as jQuery) - return ret === null ? undefined : ret; - } - }, - - prop: function(element, name, value) { - if (isDefined(value)) { - element[name] = value; - } else { - return element[name]; - } - }, - - text: (function() { - getText.$dv = ''; - return getText; - - function getText(element, value) { - if (isUndefined(value)) { - var nodeType = element.nodeType; - return (nodeType === NODE_TYPE_ELEMENT || nodeType === NODE_TYPE_TEXT) ? element.textContent : ''; - } - element.textContent = value; - } - })(), - - val: function(element, value) { - if (isUndefined(value)) { - if (element.multiple && nodeName_(element) === 'select') { - var result = []; - forEach(element.options, function(option) { - if (option.selected) { - result.push(option.value || option.text); - } - }); - return result.length === 0 ? null : result; - } - return element.value; - } - element.value = value; - }, - - html: function(element, value) { - if (isUndefined(value)) { - return element.innerHTML; - } - jqLiteDealoc(element, true); - element.innerHTML = value; - }, - - empty: jqLiteEmpty -}, function(fn, name) { - /** - * Properties: writes return selection, reads return first value - */ - JQLite.prototype[name] = function(arg1, arg2) { - var i, key; - var nodeCount = this.length; - - // jqLiteHasClass has only two arguments, but is a getter-only fn, so we need to special-case it - // in a way that survives minification. - // jqLiteEmpty takes no arguments but is a setter. - if (fn !== jqLiteEmpty && - (((fn.length == 2 && (fn !== jqLiteHasClass && fn !== jqLiteController)) ? arg1 : arg2) === undefined)) { - if (isObject(arg1)) { - - // we are a write, but the object properties are the key/values - for (i = 0; i < nodeCount; i++) { - if (fn === jqLiteData) { - // data() takes the whole object in jQuery - fn(this[i], arg1); - } else { - for (key in arg1) { - fn(this[i], key, arg1[key]); - } - } - } - // return self for chaining - return this; - } else { - // we are a read, so read the first child. - // TODO: do we still need this? - var value = fn.$dv; - // Only if we have $dv do we iterate over all, otherwise it is just the first element. - var jj = (value === undefined) ? Math.min(nodeCount, 1) : nodeCount; - for (var j = 0; j < jj; j++) { - var nodeValue = fn(this[j], arg1, arg2); - value = value ? value + nodeValue : nodeValue; - } - return value; - } - } else { - // we are a write, so apply to all children - for (i = 0; i < nodeCount; i++) { - fn(this[i], arg1, arg2); - } - // return self for chaining - return this; - } - }; -}); - -function createEventHandler(element, events) { - var eventHandler = function(event, type) { - // jQuery specific api - event.isDefaultPrevented = function() { - return event.defaultPrevented; - }; - - var eventFns = events[type || event.type]; - var eventFnsLength = eventFns ? eventFns.length : 0; - - if (!eventFnsLength) return; - - if (isUndefined(event.immediatePropagationStopped)) { - var originalStopImmediatePropagation = event.stopImmediatePropagation; - event.stopImmediatePropagation = function() { - event.immediatePropagationStopped = true; - - if (event.stopPropagation) { - event.stopPropagation(); - } - - if (originalStopImmediatePropagation) { - originalStopImmediatePropagation.call(event); - } - }; - } - - event.isImmediatePropagationStopped = function() { - return event.immediatePropagationStopped === true; - }; - - // Copy event handlers in case event handlers array is modified during execution. - if ((eventFnsLength > 1)) { - eventFns = shallowCopy(eventFns); - } - - for (var i = 0; i < eventFnsLength; i++) { - if (!event.isImmediatePropagationStopped()) { - eventFns[i].call(element, event); - } - } - }; - - // TODO: this is a hack for angularMocks/clearDataCache that makes it possible to deregister all - // events on `element` - eventHandler.elem = element; - return eventHandler; -} - -////////////////////////////////////////// -// Functions iterating traversal. -// These functions chain results into a single -// selector. -////////////////////////////////////////// -forEach({ - removeData: jqLiteRemoveData, - - on: function jqLiteOn(element, type, fn, unsupported) { - if (isDefined(unsupported)) throw jqLiteMinErr('onargs', 'jqLite#on() does not support the `selector` or `eventData` parameters'); - - // Do not add event handlers to non-elements because they will not be cleaned up. - if (!jqLiteAcceptsData(element)) { - return; - } - - var expandoStore = jqLiteExpandoStore(element, true); - var events = expandoStore.events; - var handle = expandoStore.handle; - - if (!handle) { - handle = expandoStore.handle = createEventHandler(element, events); - } - - // http://jsperf.com/string-indexof-vs-split - var types = type.indexOf(' ') >= 0 ? type.split(' ') : [type]; - var i = types.length; - - while (i--) { - type = types[i]; - var eventFns = events[type]; - - if (!eventFns) { - events[type] = []; - - if (type === 'mouseenter' || type === 'mouseleave') { - // Refer to jQuery's implementation of mouseenter & mouseleave - // Read about mouseenter and mouseleave: - // http://www.quirksmode.org/js/events_mouse.html#link8 - - jqLiteOn(element, MOUSE_EVENT_MAP[type], function(event) { - var target = this, related = event.relatedTarget; - // 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 && !target.contains(related))) { - handle(event, type); - } - }); - - } else { - if (type !== '$destroy') { - addEventListenerFn(element, type, handle); - } - } - eventFns = events[type]; - } - eventFns.push(fn); - } - }, - - off: jqLiteOff, - - one: function(element, type, fn) { - element = jqLite(element); - - //add the listener twice so that when it is called - //you can remove the original function and still be - //able to call element.off(ev, fn) normally - element.on(type, function onFn() { - element.off(type, fn); - element.off(type, onFn); - }); - element.on(type, fn); - }, - - replaceWith: function(element, replaceNode) { - var index, parent = element.parentNode; - jqLiteDealoc(element); - forEach(new JQLite(replaceNode), function(node) { - if (index) { - parent.insertBefore(node, index.nextSibling); - } else { - parent.replaceChild(node, element); - } - index = node; - }); - }, - - children: function(element) { - var children = []; - forEach(element.childNodes, function(element) { - if (element.nodeType === NODE_TYPE_ELEMENT) - children.push(element); - }); - return children; - }, - - contents: function(element) { - return element.contentDocument || element.childNodes || []; - }, - - append: function(element, node) { - var nodeType = element.nodeType; - if (nodeType !== NODE_TYPE_ELEMENT && nodeType !== NODE_TYPE_DOCUMENT_FRAGMENT) return; - - node = new JQLite(node); - - for (var i = 0, ii = node.length; i < ii; i++) { - var child = node[i]; - element.appendChild(child); - } - }, - - prepend: function(element, node) { - if (element.nodeType === NODE_TYPE_ELEMENT) { - var index = element.firstChild; - forEach(new JQLite(node), function(child) { - element.insertBefore(child, index); - }); - } - }, - - wrap: function(element, wrapNode) { - wrapNode = jqLite(wrapNode).eq(0).clone()[0]; - var parent = element.parentNode; - if (parent) { - parent.replaceChild(wrapNode, element); - } - wrapNode.appendChild(element); - }, - - remove: jqLiteRemove, - - detach: function(element) { - jqLiteRemove(element, true); - }, - - after: function(element, newElement) { - var index = element, parent = element.parentNode; - newElement = new JQLite(newElement); - - for (var i = 0, ii = newElement.length; i < ii; i++) { - var node = newElement[i]; - parent.insertBefore(node, index.nextSibling); - index = node; - } - }, - - addClass: jqLiteAddClass, - removeClass: jqLiteRemoveClass, - - toggleClass: function(element, selector, condition) { - if (selector) { - forEach(selector.split(' '), function(className) { - var classCondition = condition; - if (isUndefined(classCondition)) { - classCondition = !jqLiteHasClass(element, className); - } - (classCondition ? jqLiteAddClass : jqLiteRemoveClass)(element, className); - }); - } - }, - - parent: function(element) { - var parent = element.parentNode; - return parent && parent.nodeType !== NODE_TYPE_DOCUMENT_FRAGMENT ? parent : null; - }, - - next: function(element) { - return element.nextElementSibling; - }, - - find: function(element, selector) { - if (element.getElementsByTagName) { - return element.getElementsByTagName(selector); - } else { - return []; - } - }, - - clone: jqLiteClone, - - triggerHandler: function(element, event, extraParameters) { - - var dummyEvent, eventFnsCopy, handlerArgs; - var eventName = event.type || event; - var expandoStore = jqLiteExpandoStore(element); - var events = expandoStore && expandoStore.events; - var eventFns = events && events[eventName]; - - if (eventFns) { - // Create a dummy event to pass to the handlers - dummyEvent = { - preventDefault: function() { this.defaultPrevented = true; }, - isDefaultPrevented: function() { return this.defaultPrevented === true; }, - stopImmediatePropagation: function() { this.immediatePropagationStopped = true; }, - isImmediatePropagationStopped: function() { return this.immediatePropagationStopped === true; }, - stopPropagation: noop, - type: eventName, - target: element - }; - - // If a custom event was provided then extend our dummy event with it - if (event.type) { - dummyEvent = extend(dummyEvent, event); - } - - // Copy event handlers in case event handlers array is modified during execution. - eventFnsCopy = shallowCopy(eventFns); - handlerArgs = extraParameters ? [dummyEvent].concat(extraParameters) : [dummyEvent]; - - forEach(eventFnsCopy, function(fn) { - if (!dummyEvent.isImmediatePropagationStopped()) { - fn.apply(element, handlerArgs); - } - }); - } - } -}, function(fn, name) { - /** - * chaining functions - */ - JQLite.prototype[name] = function(arg1, arg2, arg3) { - var value; - - for (var i = 0, ii = this.length; i < ii; i++) { - if (isUndefined(value)) { - value = fn(this[i], arg1, arg2, arg3); - if (isDefined(value)) { - // any function which returns a value needs to be wrapped - value = jqLite(value); - } - } else { - jqLiteAddNodes(value, fn(this[i], arg1, arg2, arg3)); - } - } - return isDefined(value) ? value : this; - }; - - // bind legacy bind/unbind to on/off - JQLite.prototype.bind = JQLite.prototype.on; - JQLite.prototype.unbind = JQLite.prototype.off; -}); - - -// Provider for private $$jqLite service -function $$jqLiteProvider() { - this.$get = function $$jqLite() { - return extend(JQLite, { - hasClass: function(node, classes) { - if (node.attr) node = node[0]; - return jqLiteHasClass(node, classes); - }, - addClass: function(node, classes) { - if (node.attr) node = node[0]; - return jqLiteAddClass(node, classes); - }, - removeClass: function(node, classes) { - if (node.attr) node = node[0]; - return jqLiteRemoveClass(node, classes); - } - }); - }; -} - -/** - * Computes a hash of an 'obj'. - * Hash of a: - * string is string - * number is number as string - * object is either result of calling $$hashKey function on the object or uniquely generated id, - * that is also assigned to the $$hashKey property of the object. - * - * @param obj - * @returns {string} hash string such that the same input will have the same hash string. - * The resulting string key is in 'type:hashKey' format. - */ -function hashKey(obj, nextUidFn) { - var key = obj && obj.$$hashKey; - - if (key) { - if (typeof key === 'function') { - key = obj.$$hashKey(); - } - return key; - } - - var objType = typeof obj; - if (objType == 'function' || (objType == 'object' && obj !== null)) { - key = obj.$$hashKey = objType + ':' + (nextUidFn || nextUid)(); - } else { - key = objType + ':' + obj; - } - - return key; -} - -/** - * HashMap which can use objects as keys - */ -function HashMap(array, isolatedUid) { - if (isolatedUid) { - var uid = 0; - this.nextUid = function() { - return ++uid; - }; - } - forEach(array, this.put, this); -} -HashMap.prototype = { - /** - * Store key value pair - * @param key key to store can be any type - * @param value value to store can be any type - */ - put: function(key, value) { - this[hashKey(key, this.nextUid)] = value; - }, - - /** - * @param key - * @returns {Object} the value for the key - */ - get: function(key) { - return this[hashKey(key, this.nextUid)]; - }, - - /** - * Remove the key/value pair - * @param key - */ - remove: function(key) { - var value = this[key = hashKey(key, this.nextUid)]; - delete this[key]; - return value; - } -}; - -/** - * @ngdoc function - * @module ng - * @name angular.injector - * @kind function - * - * @description - * Creates an injector object that can be used for retrieving services as well as for - * dependency injection (see {@link guide/di dependency injection}). - * - * @param {Array.<string|Function>} modules A list of module functions or their aliases. See - * {@link angular.module}. The `ng` module must be explicitly added. - * @param {boolean=} [strictDi=false] Whether the injector should be in strict mode, which - * disallows argument name annotation inference. - * @returns {injector} Injector object. See {@link auto.$injector $injector}. - * - * @example - * Typical usage - * ```js - * // create an injector - * var $injector = angular.injector(['ng']); - * - * // use the injector to kick off your application - * // use the type inference to auto inject arguments, or use implicit injection - * $injector.invoke(function($rootScope, $compile, $document) { - * $compile($document)($rootScope); - * $rootScope.$digest(); - * }); - * ``` - * - * Sometimes you want to get access to the injector of a currently running Angular app - * from outside Angular. Perhaps, you want to inject and compile some markup after the - * application has been bootstrapped. You can do this using the extra `injector()` added - * to JQuery/jqLite elements. See {@link angular.element}. - * - * *This is fairly rare but could be the case if a third party library is injecting the - * markup.* - * - * In the following example a new block of HTML containing a `ng-controller` - * directive is added to the end of the document body by JQuery. We then compile and link - * it into the current AngularJS scope. - * - * ```js - * var $div = $('<div ng-controller="MyCtrl">{{content.label}}</div>'); - * $(document.body).append($div); - * - * angular.element(document).injector().invoke(function($compile) { - * var scope = angular.element($div).scope(); - * $compile($div)(scope); - * }); - * ``` - */ - - -/** - * @ngdoc module - * @name auto - * @description - * - * Implicit module which gets automatically added to each {@link auto.$injector $injector}. - */ - -var FN_ARGS = /^function\s*[^\(]*\(\s*([^\)]*)\)/m; -var FN_ARG_SPLIT = /,/; -var FN_ARG = /^\s*(_?)(\S+?)\1\s*$/; -var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg; -var $injectorMinErr = minErr('$injector'); - -function anonFn(fn) { - // For anonymous functions, showing at the very least the function signature can help in - // debugging. - var fnText = fn.toString().replace(STRIP_COMMENTS, ''), - args = fnText.match(FN_ARGS); - if (args) { - return 'function(' + (args[1] || '').replace(/[\s\r\n]+/, ' ') + ')'; - } - return 'fn'; -} - -function annotate(fn, strictDi, name) { - var $inject, - fnText, - argDecl, - last; - - if (typeof fn === 'function') { - if (!($inject = fn.$inject)) { - $inject = []; - if (fn.length) { - if (strictDi) { - if (!isString(name) || !name) { - name = fn.name || anonFn(fn); - } - throw $injectorMinErr('strictdi', - '{0} is not using explicit annotation and cannot be invoked in strict mode', name); - } - fnText = fn.toString().replace(STRIP_COMMENTS, ''); - argDecl = fnText.match(FN_ARGS); - forEach(argDecl[1].split(FN_ARG_SPLIT), function(arg) { - arg.replace(FN_ARG, function(all, underscore, name) { - $inject.push(name); - }); - }); - } - fn.$inject = $inject; - } - } else if (isArray(fn)) { - last = fn.length - 1; - assertArgFn(fn[last], 'fn'); - $inject = fn.slice(0, last); - } else { - assertArgFn(fn, 'fn', true); - } - return $inject; -} - -/////////////////////////////////////// - -/** - * @ngdoc service - * @name $injector - * - * @description - * - * `$injector` is used to retrieve object instances as defined by - * {@link auto.$provide provider}, instantiate types, invoke methods, - * and load modules. - * - * The following always holds true: - * - * ```js - * var $injector = angular.injector(); - * expect($injector.get('$injector')).toBe($injector); - * expect($injector.invoke(function($injector) { - * return $injector; - * })).toBe($injector); - * ``` - * - * # Injection Function Annotation - * - * JavaScript does not have annotations, and annotations are needed for dependency injection. The - * following are all valid ways of annotating function with injection arguments and are equivalent. - * - * ```js - * // inferred (only works if code not minified/obfuscated) - * $injector.invoke(function(serviceA){}); - * - * // annotated - * function explicit(serviceA) {}; - * explicit.$inject = ['serviceA']; - * $injector.invoke(explicit); - * - * // inline - * $injector.invoke(['serviceA', function(serviceA){}]); - * ``` - * - * ## Inference - * - * In JavaScript calling `toString()` on a function returns the function definition. The definition - * can then be parsed and the function arguments can be extracted. This method of discovering - * annotations is disallowed when the injector is in strict mode. - * *NOTE:* This does not work with minification, and obfuscation tools since these tools change the - * argument names. - * - * ## `$inject` Annotation - * By adding an `$inject` property onto a function the injection parameters can be specified. - * - * ## Inline - * As an array of injection names, where the last item in the array is the function to call. - */ - -/** - * @ngdoc method - * @name $injector#get - * - * @description - * Return an instance of the service. - * - * @param {string} name The name of the instance to retrieve. - * @param {string} caller An optional string to provide the origin of the function call for error messages. - * @return {*} The instance. - */ - -/** - * @ngdoc method - * @name $injector#invoke - * - * @description - * Invoke the method and supply the method arguments from the `$injector`. - * - * @param {!Function} fn The function to invoke. Function parameters are injected according to the - * {@link guide/di $inject Annotation} rules. - * @param {Object=} self The `this` for the invoked method. - * @param {Object=} locals Optional object. If preset then any argument names are read from this - * object first, before the `$injector` is consulted. - * @returns {*} the value returned by the invoked `fn` function. - */ - -/** - * @ngdoc method - * @name $injector#has - * - * @description - * Allows the user to query if the particular service exists. - * - * @param {string} name Name of the service to query. - * @returns {boolean} `true` if injector has given service. - */ - -/** - * @ngdoc method - * @name $injector#instantiate - * @description - * Create a new instance of JS type. The method takes a constructor function, invokes the new - * operator, and supplies all of the arguments to the constructor function as specified by the - * constructor annotation. - * - * @param {Function} Type Annotated constructor function. - * @param {Object=} locals Optional object. If preset then any argument names are read from this - * object first, before the `$injector` is consulted. - * @returns {Object} new instance of `Type`. - */ - -/** - * @ngdoc method - * @name $injector#annotate - * - * @description - * Returns an array of service names which the function is requesting for injection. This API is - * used by the injector to determine which services need to be injected into the function when the - * function is invoked. There are three ways in which the function can be annotated with the needed - * dependencies. - * - * # Argument names - * - * The simplest form is to extract the dependencies from the arguments of the function. This is done - * by converting the function into a string using `toString()` method and extracting the argument - * names. - * ```js - * // Given - * function MyController($scope, $route) { - * // ... - * } - * - * // Then - * expect(injector.annotate(MyController)).toEqual(['$scope', '$route']); - * ``` - * - * You can disallow this method by using strict injection mode. - * - * This method does not work with code minification / obfuscation. For this reason the following - * annotation strategies are supported. - * - * # The `$inject` property - * - * If a function has an `$inject` property and its value is an array of strings, then the strings - * represent names of services to be injected into the function. - * ```js - * // Given - * var MyController = function(obfuscatedScope, obfuscatedRoute) { - * // ... - * } - * // Define function dependencies - * MyController['$inject'] = ['$scope', '$route']; - * - * // Then - * expect(injector.annotate(MyController)).toEqual(['$scope', '$route']); - * ``` - * - * # The array notation - * - * It is often desirable to inline Injected functions and that's when setting the `$inject` property - * is very inconvenient. In these situations using the array notation to specify the dependencies in - * a way that survives minification is a better choice: - * - * ```js - * // We wish to write this (not minification / obfuscation safe) - * injector.invoke(function($compile, $rootScope) { - * // ... - * }); - * - * // We are forced to write break inlining - * var tmpFn = function(obfuscatedCompile, obfuscatedRootScope) { - * // ... - * }; - * tmpFn.$inject = ['$compile', '$rootScope']; - * injector.invoke(tmpFn); - * - * // To better support inline function the inline annotation is supported - * injector.invoke(['$compile', '$rootScope', function(obfCompile, obfRootScope) { - * // ... - * }]); - * - * // Therefore - * expect(injector.annotate( - * ['$compile', '$rootScope', function(obfus_$compile, obfus_$rootScope) {}]) - * ).toEqual(['$compile', '$rootScope']); - * ``` - * - * @param {Function|Array.<string|Function>} fn Function for which dependent service names need to - * be retrieved as described above. - * - * @param {boolean=} [strictDi=false] Disallow argument name annotation inference. - * - * @returns {Array.<string>} The names of the services which the function requires. - */ - - - - -/** - * @ngdoc service - * @name $provide - * - * @description - * - * The {@link auto.$provide $provide} service has a number of methods for registering components - * with the {@link auto.$injector $injector}. Many of these functions are also exposed on - * {@link angular.Module}. - * - * An Angular **service** is a singleton object created by a **service factory**. These **service - * factories** are functions which, in turn, are created by a **service provider**. - * The **service providers** are constructor functions. When instantiated they must contain a - * property called `$get`, which holds the **service factory** function. - * - * When you request a service, the {@link auto.$injector $injector} is responsible for finding the - * correct **service provider**, instantiating it and then calling its `$get` **service factory** - * function to get the instance of the **service**. - * - * Often services have no configuration options and there is no need to add methods to the service - * provider. The provider will be no more than a constructor function with a `$get` property. For - * these cases the {@link auto.$provide $provide} service has additional helper methods to register - * services without specifying a provider. - * - * * {@link auto.$provide#provider provider(provider)} - registers a **service provider** with the - * {@link auto.$injector $injector} - * * {@link auto.$provide#constant constant(obj)} - registers a value/object that can be accessed by - * providers and services. - * * {@link auto.$provide#value value(obj)} - registers a value/object that can only be accessed by - * services, not providers. - * * {@link auto.$provide#factory factory(fn)} - registers a service **factory function**, `fn`, - * that will be wrapped in a **service provider** object, whose `$get` property will contain the - * given factory function. - * * {@link auto.$provide#service service(class)} - registers a **constructor function**, `class` - * that will be wrapped in a **service provider** object, whose `$get` property will instantiate - * a new object using the given constructor function. - * - * See the individual methods for more information and examples. - */ - -/** - * @ngdoc method - * @name $provide#provider - * @description - * - * Register a **provider function** with the {@link auto.$injector $injector}. Provider functions - * are constructor functions, whose instances are responsible for "providing" a factory for a - * service. - * - * Service provider names start with the name of the service they provide followed by `Provider`. - * For example, the {@link ng.$log $log} service has a provider called - * {@link ng.$logProvider $logProvider}. - * - * Service provider objects can have additional methods which allow configuration of the provider - * and its service. Importantly, you can configure what kind of service is created by the `$get` - * method, or how that service will act. For example, the {@link ng.$logProvider $logProvider} has a - * method {@link ng.$logProvider#debugEnabled debugEnabled} - * which lets you specify whether the {@link ng.$log $log} service will log debug messages to the - * console or not. - * - * @param {string} name The name of the instance. NOTE: the provider will be available under `name + - 'Provider'` key. - * @param {(Object|function())} provider If the provider is: - * - * - `Object`: then it should have a `$get` method. The `$get` method will be invoked using - * {@link auto.$injector#invoke $injector.invoke()} when an instance needs to be created. - * - `Constructor`: a new instance of the provider will be created using - * {@link auto.$injector#instantiate $injector.instantiate()}, then treated as `object`. - * - * @returns {Object} registered provider instance - - * @example - * - * The following example shows how to create a simple event tracking service and register it using - * {@link auto.$provide#provider $provide.provider()}. - * - * ```js - * // Define the eventTracker provider - * function EventTrackerProvider() { - * var trackingUrl = '/track'; - * - * // A provider method for configuring where the tracked events should been saved - * this.setTrackingUrl = function(url) { - * trackingUrl = url; - * }; - * - * // The service factory function - * this.$get = ['$http', function($http) { - * var trackedEvents = {}; - * return { - * // Call this to track an event - * event: function(event) { - * var count = trackedEvents[event] || 0; - * count += 1; - * trackedEvents[event] = count; - * return count; - * }, - * // Call this to save the tracked events to the trackingUrl - * save: function() { - * $http.post(trackingUrl, trackedEvents); - * } - * }; - * }]; - * } - * - * describe('eventTracker', function() { - * var postSpy; - * - * beforeEach(module(function($provide) { - * // Register the eventTracker provider - * $provide.provider('eventTracker', EventTrackerProvider); - * })); - * - * beforeEach(module(function(eventTrackerProvider) { - * // Configure eventTracker provider - * eventTrackerProvider.setTrackingUrl('/custom-track'); - * })); - * - * it('tracks events', inject(function(eventTracker) { - * expect(eventTracker.event('login')).toEqual(1); - * expect(eventTracker.event('login')).toEqual(2); - * })); - * - * it('saves to the tracking url', inject(function(eventTracker, $http) { - * postSpy = spyOn($http, 'post'); - * eventTracker.event('login'); - * eventTracker.save(); - * expect(postSpy).toHaveBeenCalled(); - * expect(postSpy.mostRecentCall.args[0]).not.toEqual('/track'); - * expect(postSpy.mostRecentCall.args[0]).toEqual('/custom-track'); - * expect(postSpy.mostRecentCall.args[1]).toEqual({ 'login': 1 }); - * })); - * }); - * ``` - */ - -/** - * @ngdoc method - * @name $provide#factory - * @description - * - * Register a **service factory**, which will be called to return the service instance. - * This is short for registering a service where its provider consists of only a `$get` property, - * which is the given service factory function. - * You should use {@link auto.$provide#factory $provide.factory(getFn)} if you do not need to - * configure your service in a provider. - * - * @param {string} name The name of the instance. - * @param {function()} $getFn The $getFn for the instance creation. Internally this is a short hand - * for `$provide.provider(name, {$get: $getFn})`. - * @returns {Object} registered provider instance - * - * @example - * Here is an example of registering a service - * ```js - * $provide.factory('ping', ['$http', function($http) { - * return function ping() { - * return $http.send('/ping'); - * }; - * }]); - * ``` - * You would then inject and use this service like this: - * ```js - * someModule.controller('Ctrl', ['ping', function(ping) { - * ping(); - * }]); - * ``` - */ - - -/** - * @ngdoc method - * @name $provide#service - * @description - * - * Register a **service constructor**, which will be invoked with `new` to create the service - * instance. - * This is short for registering a service where its provider's `$get` property is the service - * constructor function that will be used to instantiate the service instance. - * - * You should use {@link auto.$provide#service $provide.service(class)} if you define your service - * as a type/class. - * - * @param {string} name The name of the instance. - * @param {Function} constructor A class (constructor function) that will be instantiated. - * @returns {Object} registered provider instance - * - * @example - * Here is an example of registering a service using - * {@link auto.$provide#service $provide.service(class)}. - * ```js - * var Ping = function($http) { - * this.$http = $http; - * }; - * - * Ping.$inject = ['$http']; - * - * Ping.prototype.send = function() { - * return this.$http.get('/ping'); - * }; - * $provide.service('ping', Ping); - * ``` - * You would then inject and use this service like this: - * ```js - * someModule.controller('Ctrl', ['ping', function(ping) { - * ping.send(); - * }]); - * ``` - */ - - -/** - * @ngdoc method - * @name $provide#value - * @description - * - * Register a **value service** with the {@link auto.$injector $injector}, such as a string, a - * number, an array, an object or a function. This is short for registering a service where its - * provider's `$get` property is a factory function that takes no arguments and returns the **value - * service**. - * - * Value services are similar to constant services, except that they cannot be injected into a - * module configuration function (see {@link angular.Module#config}) but they can be overridden by - * an Angular - * {@link auto.$provide#decorator decorator}. - * - * @param {string} name The name of the instance. - * @param {*} value The value. - * @returns {Object} registered provider instance - * - * @example - * Here are some examples of creating value services. - * ```js - * $provide.value('ADMIN_USER', 'admin'); - * - * $provide.value('RoleLookup', { admin: 0, writer: 1, reader: 2 }); - * - * $provide.value('halfOf', function(value) { - * return value / 2; - * }); - * ``` - */ - - -/** - * @ngdoc method - * @name $provide#constant - * @description - * - * Register a **constant service**, such as a string, a number, an array, an object or a function, - * with the {@link auto.$injector $injector}. Unlike {@link auto.$provide#value value} it can be - * injected into a module configuration function (see {@link angular.Module#config}) and it cannot - * be overridden by an Angular {@link auto.$provide#decorator decorator}. - * - * @param {string} name The name of the constant. - * @param {*} value The constant value. - * @returns {Object} registered instance - * - * @example - * Here a some examples of creating constants: - * ```js - * $provide.constant('SHARD_HEIGHT', 306); - * - * $provide.constant('MY_COLOURS', ['red', 'blue', 'grey']); - * - * $provide.constant('double', function(value) { - * return value * 2; - * }); - * ``` - */ - - -/** - * @ngdoc method - * @name $provide#decorator - * @description - * - * Register a **service decorator** with the {@link auto.$injector $injector}. A service decorator - * intercepts the creation of a service, allowing it to override or modify the behaviour of the - * service. The object returned by the decorator may be the original service, or a new service - * object which replaces or wraps and delegates to the original service. - * - * @param {string} name The name of the service to decorate. - * @param {function()} decorator This function will be invoked when the service needs to be - * instantiated and should return the decorated service instance. The function is called using - * the {@link auto.$injector#invoke injector.invoke} method and is therefore fully injectable. - * Local injection arguments: - * - * * `$delegate` - The original service instance, which can be monkey patched, configured, - * decorated or delegated to. - * - * @example - * Here we decorate the {@link ng.$log $log} service to convert warnings to errors by intercepting - * calls to {@link ng.$log#error $log.warn()}. - * ```js - * $provide.decorator('$log', ['$delegate', function($delegate) { - * $delegate.warn = $delegate.error; - * return $delegate; - * }]); - * ``` - */ - - -function createInjector(modulesToLoad, strictDi) { - strictDi = (strictDi === true); - var INSTANTIATING = {}, - providerSuffix = 'Provider', - path = [], - loadedModules = new HashMap([], true), - providerCache = { - $provide: { - provider: supportObject(provider), - factory: supportObject(factory), - service: supportObject(service), - value: supportObject(value), - constant: supportObject(constant), - decorator: decorator - } - }, - providerInjector = (providerCache.$injector = - createInternalInjector(providerCache, function(serviceName, caller) { - if (angular.isString(caller)) { - path.push(caller); - } - throw $injectorMinErr('unpr', "Unknown provider: {0}", path.join(' <- ')); - })), - instanceCache = {}, - instanceInjector = (instanceCache.$injector = - createInternalInjector(instanceCache, function(serviceName, caller) { - var provider = providerInjector.get(serviceName + providerSuffix, caller); - return instanceInjector.invoke(provider.$get, provider, undefined, serviceName); - })); - - - forEach(loadModules(modulesToLoad), function(fn) { instanceInjector.invoke(fn || noop); }); - - return instanceInjector; - - //////////////////////////////////// - // $provider - //////////////////////////////////// - - function supportObject(delegate) { - return function(key, value) { - if (isObject(key)) { - forEach(key, reverseParams(delegate)); - } else { - return delegate(key, value); - } - }; - } - - function provider(name, provider_) { - assertNotHasOwnProperty(name, 'service'); - if (isFunction(provider_) || isArray(provider_)) { - provider_ = providerInjector.instantiate(provider_); - } - if (!provider_.$get) { - throw $injectorMinErr('pget', "Provider '{0}' must define $get factory method.", name); - } - return providerCache[name + providerSuffix] = provider_; - } - - function enforceReturnValue(name, factory) { - return function enforcedReturnValue() { - var result = instanceInjector.invoke(factory, this); - if (isUndefined(result)) { - throw $injectorMinErr('undef', "Provider '{0}' must return a value from $get factory method.", name); - } - return result; - }; - } - - function factory(name, factoryFn, enforce) { - return provider(name, { - $get: enforce !== false ? enforceReturnValue(name, factoryFn) : factoryFn - }); - } - - function service(name, constructor) { - return factory(name, ['$injector', function($injector) { - return $injector.instantiate(constructor); - }]); - } - - function value(name, val) { return factory(name, valueFn(val), false); } - - function constant(name, value) { - assertNotHasOwnProperty(name, 'constant'); - providerCache[name] = value; - instanceCache[name] = value; - } - - function decorator(serviceName, decorFn) { - var origProvider = providerInjector.get(serviceName + providerSuffix), - orig$get = origProvider.$get; - - origProvider.$get = function() { - var origInstance = instanceInjector.invoke(orig$get, origProvider); - return instanceInjector.invoke(decorFn, null, {$delegate: origInstance}); - }; - } - - //////////////////////////////////// - // Module Loading - //////////////////////////////////// - function loadModules(modulesToLoad) { - var runBlocks = [], moduleFn; - forEach(modulesToLoad, function(module) { - if (loadedModules.get(module)) return; - loadedModules.put(module, true); - - function runInvokeQueue(queue) { - var i, ii; - for (i = 0, ii = queue.length; i < ii; i++) { - var invokeArgs = queue[i], - provider = providerInjector.get(invokeArgs[0]); - - provider[invokeArgs[1]].apply(provider, invokeArgs[2]); - } - } - - try { - if (isString(module)) { - moduleFn = angularModule(module); - runBlocks = runBlocks.concat(loadModules(moduleFn.requires)).concat(moduleFn._runBlocks); - runInvokeQueue(moduleFn._invokeQueue); - runInvokeQueue(moduleFn._configBlocks); - } else if (isFunction(module)) { - runBlocks.push(providerInjector.invoke(module)); - } else if (isArray(module)) { - runBlocks.push(providerInjector.invoke(module)); - } else { - assertArgFn(module, 'module'); - } - } catch (e) { - if (isArray(module)) { - module = module[module.length - 1]; - } - if (e.message && e.stack && e.stack.indexOf(e.message) == -1) { - // Safari & FF's stack traces don't contain error.message content - // unlike those of Chrome and IE - // So if stack doesn't contain message, we create a new string that contains both. - // Since error.stack is read-only in Safari, I'm overriding e and not e.stack here. - /* jshint -W022 */ - e = e.message + '\n' + e.stack; - } - throw $injectorMinErr('modulerr', "Failed to instantiate module {0} due to:\n{1}", - module, e.stack || e.message || e); - } - }); - return runBlocks; - } - - //////////////////////////////////// - // internal Injector - //////////////////////////////////// - - function createInternalInjector(cache, factory) { - - function getService(serviceName, caller) { - if (cache.hasOwnProperty(serviceName)) { - if (cache[serviceName] === INSTANTIATING) { - throw $injectorMinErr('cdep', 'Circular dependency found: {0}', - serviceName + ' <- ' + path.join(' <- ')); - } - return cache[serviceName]; - } else { - try { - path.unshift(serviceName); - cache[serviceName] = INSTANTIATING; - return cache[serviceName] = factory(serviceName, caller); - } catch (err) { - if (cache[serviceName] === INSTANTIATING) { - delete cache[serviceName]; - } - throw err; - } finally { - path.shift(); - } - } - } - - function invoke(fn, self, locals, serviceName) { - if (typeof locals === 'string') { - serviceName = locals; - locals = null; - } - - var args = [], - $inject = annotate(fn, strictDi, serviceName), - length, i, - key; - - for (i = 0, length = $inject.length; i < length; i++) { - key = $inject[i]; - if (typeof key !== 'string') { - throw $injectorMinErr('itkn', - 'Incorrect injection token! Expected service name as string, got {0}', key); - } - args.push( - locals && locals.hasOwnProperty(key) - ? locals[key] - : getService(key, serviceName) - ); - } - if (isArray(fn)) { - fn = fn[length]; - } - - // http://jsperf.com/angularjs-invoke-apply-vs-switch - // #5388 - return fn.apply(self, args); - } - - function instantiate(Type, locals, serviceName) { - // Check if Type is annotated and use just the given function at n-1 as parameter - // e.g. someModule.factory('greeter', ['$window', function(renamed$window) {}]); - // Object creation: http://jsperf.com/create-constructor/2 - var instance = Object.create((isArray(Type) ? Type[Type.length - 1] : Type).prototype || null); - var returnedValue = invoke(Type, instance, locals, serviceName); - - return isObject(returnedValue) || isFunction(returnedValue) ? returnedValue : instance; - } - - return { - invoke: invoke, - instantiate: instantiate, - get: getService, - annotate: annotate, - has: function(name) { - return providerCache.hasOwnProperty(name + providerSuffix) || cache.hasOwnProperty(name); - } - }; - } -} - -createInjector.$$annotate = annotate; - -/** - * @ngdoc provider - * @name $anchorScrollProvider - * - * @description - * Use `$anchorScrollProvider` to disable automatic scrolling whenever - * {@link ng.$location#hash $location.hash()} changes. - */ -function $AnchorScrollProvider() { - - var autoScrollingEnabled = true; - - /** - * @ngdoc method - * @name $anchorScrollProvider#disableAutoScrolling - * - * @description - * By default, {@link ng.$anchorScroll $anchorScroll()} will automatically detect changes to - * {@link ng.$location#hash $location.hash()} and scroll to the element matching the new hash.<br /> - * Use this method to disable automatic scrolling. - * - * If automatic scrolling is disabled, one must explicitly call - * {@link ng.$anchorScroll $anchorScroll()} in order to scroll to the element related to the - * current hash. - */ - this.disableAutoScrolling = function() { - autoScrollingEnabled = false; - }; - - /** - * @ngdoc service - * @name $anchorScroll - * @kind function - * @requires $window - * @requires $location - * @requires $rootScope - * - * @description - * When called, it checks the current value of {@link ng.$location#hash $location.hash()} and - * scrolls to the related element, according to the rules specified in the - * [Html5 spec](http://dev.w3.org/html5/spec/Overview.html#the-indicated-part-of-the-document). - * - * It also watches the {@link ng.$location#hash $location.hash()} and automatically scrolls to - * match any anchor whenever it changes. This can be disabled by calling - * {@link ng.$anchorScrollProvider#disableAutoScrolling $anchorScrollProvider.disableAutoScrolling()}. - * - * Additionally, you can use its {@link ng.$anchorScroll#yOffset yOffset} property to specify a - * vertical scroll-offset (either fixed or dynamic). - * - * @property {(number|function|jqLite)} yOffset - * If set, specifies a vertical scroll-offset. This is often useful when there are fixed - * positioned elements at the top of the page, such as navbars, headers etc. - * - * `yOffset` can be specified in various ways: - * - **number**: A fixed number of pixels to be used as offset.<br /><br /> - * - **function**: A getter function called everytime `$anchorScroll()` is executed. Must return - * a number representing the offset (in pixels).<br /><br /> - * - **jqLite**: A jqLite/jQuery element to be used for specifying the offset. The distance from - * the top of the page to the element's bottom will be used as offset.<br /> - * **Note**: The element will be taken into account only as long as its `position` is set to - * `fixed`. This option is useful, when dealing with responsive navbars/headers that adjust - * their height and/or positioning according to the viewport's size. - * - * <br /> - * <div class="alert alert-warning"> - * In order for `yOffset` to work properly, scrolling should take place on the document's root and - * not some child element. - * </div> - * - * @example - <example module="anchorScrollExample"> - <file name="index.html"> - <div id="scrollArea" ng-controller="ScrollController"> - <a ng-click="gotoBottom()">Go to bottom</a> - <a id="bottom"></a> You're at the bottom! - </div> - </file> - <file name="script.js"> - angular.module('anchorScrollExample', []) - .controller('ScrollController', ['$scope', '$location', '$anchorScroll', - function ($scope, $location, $anchorScroll) { - $scope.gotoBottom = function() { - // set the location.hash to the id of - // the element you wish to scroll to. - $location.hash('bottom'); - - // call $anchorScroll() - $anchorScroll(); - }; - }]); - </file> - <file name="style.css"> - #scrollArea { - height: 280px; - overflow: auto; - } - - #bottom { - display: block; - margin-top: 2000px; - } - </file> - </example> - * - * <hr /> - * The example below illustrates the use of a vertical scroll-offset (specified as a fixed value). - * See {@link ng.$anchorScroll#yOffset $anchorScroll.yOffset} for more details. - * - * @example - <example module="anchorScrollOffsetExample"> - <file name="index.html"> - <div class="fixed-header" ng-controller="headerCtrl"> - <a href="" ng-click="gotoAnchor(x)" ng-repeat="x in [1,2,3,4,5]"> - Go to anchor {{x}} - </a> - </div> - <div id="anchor{{x}}" class="anchor" ng-repeat="x in [1,2,3,4,5]"> - Anchor {{x}} of 5 - </div> - </file> - <file name="script.js"> - angular.module('anchorScrollOffsetExample', []) - .run(['$anchorScroll', function($anchorScroll) { - $anchorScroll.yOffset = 50; // always scroll by 50 extra pixels - }]) - .controller('headerCtrl', ['$anchorScroll', '$location', '$scope', - function ($anchorScroll, $location, $scope) { - $scope.gotoAnchor = function(x) { - var newHash = 'anchor' + x; - if ($location.hash() !== newHash) { - // set the $location.hash to `newHash` and - // $anchorScroll will automatically scroll to it - $location.hash('anchor' + x); - } else { - // call $anchorScroll() explicitly, - // since $location.hash hasn't changed - $anchorScroll(); - } - }; - } - ]); - </file> - <file name="style.css"> - body { - padding-top: 50px; - } - - .anchor { - border: 2px dashed DarkOrchid; - padding: 10px 10px 200px 10px; - } - - .fixed-header { - background-color: rgba(0, 0, 0, 0.2); - height: 50px; - position: fixed; - top: 0; left: 0; right: 0; - } - - .fixed-header > a { - display: inline-block; - margin: 5px 15px; - } - </file> - </example> - */ - this.$get = ['$window', '$location', '$rootScope', function($window, $location, $rootScope) { - var document = $window.document; - - // Helper function to get first anchor from a NodeList - // (using `Array#some()` instead of `angular#forEach()` since it's more performant - // and working in all supported browsers.) - function getFirstAnchor(list) { - var result = null; - Array.prototype.some.call(list, function(element) { - if (nodeName_(element) === 'a') { - result = element; - return true; - } - }); - return result; - } - - function getYOffset() { - - var offset = scroll.yOffset; - - if (isFunction(offset)) { - offset = offset(); - } else if (isElement(offset)) { - var elem = offset[0]; - var style = $window.getComputedStyle(elem); - if (style.position !== 'fixed') { - offset = 0; - } else { - offset = elem.getBoundingClientRect().bottom; - } - } else if (!isNumber(offset)) { - offset = 0; - } - - return offset; - } - - function scrollTo(elem) { - if (elem) { - elem.scrollIntoView(); - - var offset = getYOffset(); - - if (offset) { - // `offset` is the number of pixels we should scroll UP in order to align `elem` properly. - // This is true ONLY if the call to `elem.scrollIntoView()` initially aligns `elem` at the - // top of the viewport. - // - // IF the number of pixels from the top of `elem` to the end of the page's content is less - // than the height of the viewport, then `elem.scrollIntoView()` will align the `elem` some - // way down the page. - // - // This is often the case for elements near the bottom of the page. - // - // In such cases we do not need to scroll the whole `offset` up, just the difference between - // the top of the element and the offset, which is enough to align the top of `elem` at the - // desired position. - var elemTop = elem.getBoundingClientRect().top; - $window.scrollBy(0, elemTop - offset); - } - } else { - $window.scrollTo(0, 0); - } - } - - function scroll() { - var hash = $location.hash(), elm; - - // empty hash, scroll to the top of the page - if (!hash) scrollTo(null); - - // element with given id - else if ((elm = document.getElementById(hash))) scrollTo(elm); - - // first anchor with given name :-D - else if ((elm = getFirstAnchor(document.getElementsByName(hash)))) scrollTo(elm); - - // no element and hash == 'top', scroll to the top of the page - else if (hash === 'top') scrollTo(null); - } - - // does not scroll when user clicks on anchor link that is currently on - // (no url change, no $location.hash() change), browser native does scroll - if (autoScrollingEnabled) { - $rootScope.$watch(function autoScrollWatch() {return $location.hash();}, - function autoScrollWatchAction(newVal, oldVal) { - // skip the initial scroll if $location.hash is empty - if (newVal === oldVal && newVal === '') return; - - jqLiteDocumentLoaded(function() { - $rootScope.$evalAsync(scroll); - }); - }); - } - - return scroll; - }]; -} - -var $animateMinErr = minErr('$animate'); - -/** - * @ngdoc provider - * @name $animateProvider - * - * @description - * Default implementation of $animate that doesn't perform any animations, instead just - * synchronously performs DOM - * updates and calls done() callbacks. - * - * In order to enable animations the ngAnimate module has to be loaded. - * - * To see the functional implementation check out src/ngAnimate/animate.js - */ -var $AnimateProvider = ['$provide', function($provide) { - - - this.$$selectors = {}; - - - /** - * @ngdoc method - * @name $animateProvider#register - * - * @description - * Registers a new injectable animation factory function. The factory function produces the - * animation object which contains callback functions for each event that is expected to be - * animated. - * - * * `eventFn`: `function(Element, doneFunction)` The element to animate, the `doneFunction` - * must be called once the element animation is complete. If a function is returned then the - * animation service will use this function to cancel the animation whenever a cancel event is - * triggered. - * - * - * ```js - * return { - * eventFn : function(element, done) { - * //code to run the animation - * //once complete, then run done() - * return function cancellationFunction() { - * //code to cancel the animation - * } - * } - * } - * ``` - * - * @param {string} name The name of the animation. - * @param {Function} factory The factory function that will be executed to return the animation - * object. - */ - this.register = function(name, factory) { - var key = name + '-animation'; - if (name && name.charAt(0) != '.') throw $animateMinErr('notcsel', - "Expecting class selector starting with '.' got '{0}'.", name); - this.$$selectors[name.substr(1)] = key; - $provide.factory(key, factory); - }; - - /** - * @ngdoc method - * @name $animateProvider#classNameFilter - * - * @description - * Sets and/or returns the CSS class regular expression that is checked when performing - * an animation. Upon bootstrap the classNameFilter value is not set at all and will - * therefore enable $animate to attempt to perform an animation on any element. - * When setting the classNameFilter value, animations will only be performed on elements - * that successfully match the filter expression. This in turn can boost performance - * for low-powered devices as well as applications containing a lot of structural operations. - * @param {RegExp=} expression The className expression which will be checked against all animations - * @return {RegExp} The current CSS className expression value. If null then there is no expression value - */ - this.classNameFilter = function(expression) { - if (arguments.length === 1) { - this.$$classNameFilter = (expression instanceof RegExp) ? expression : null; - } - return this.$$classNameFilter; - }; - - this.$get = ['$$q', '$$asyncCallback', '$rootScope', function($$q, $$asyncCallback, $rootScope) { - - var currentDefer; - - function runAnimationPostDigest(fn) { - var cancelFn, defer = $$q.defer(); - defer.promise.$$cancelFn = function ngAnimateMaybeCancel() { - cancelFn && cancelFn(); - }; - - $rootScope.$$postDigest(function ngAnimatePostDigest() { - cancelFn = fn(function ngAnimateNotifyComplete() { - defer.resolve(); - }); - }); - - return defer.promise; - } - - function resolveElementClasses(element, classes) { - var toAdd = [], toRemove = []; - - var hasClasses = createMap(); - forEach((element.attr('class') || '').split(/\s+/), function(className) { - hasClasses[className] = true; - }); - - forEach(classes, function(status, className) { - var hasClass = hasClasses[className]; - - // If the most recent class manipulation (via $animate) was to remove the class, and the - // element currently has the class, the class is scheduled for removal. Otherwise, if - // the most recent class manipulation (via $animate) was to add the class, and the - // element does not currently have the class, the class is scheduled to be added. - if (status === false && hasClass) { - toRemove.push(className); - } else if (status === true && !hasClass) { - toAdd.push(className); - } - }); - - return (toAdd.length + toRemove.length) > 0 && - [toAdd.length ? toAdd : null, toRemove.length ? toRemove : null]; - } - - function cachedClassManipulation(cache, classes, op) { - for (var i=0, ii = classes.length; i < ii; ++i) { - var className = classes[i]; - cache[className] = op; - } - } - - function asyncPromise() { - // only serve one instance of a promise in order to save CPU cycles - if (!currentDefer) { - currentDefer = $$q.defer(); - $$asyncCallback(function() { - currentDefer.resolve(); - currentDefer = null; - }); - } - return currentDefer.promise; - } - - function applyStyles(element, options) { - if (angular.isObject(options)) { - var styles = extend(options.from || {}, options.to || {}); - element.css(styles); - } - } - - /** - * - * @ngdoc service - * @name $animate - * @description The $animate service provides rudimentary DOM manipulation functions to - * insert, remove and move elements within the DOM, as well as adding and removing classes. - * This service is the core service used by the ngAnimate $animator service which provides - * high-level animation hooks for CSS and JavaScript. - * - * $animate is available in the AngularJS core, however, the ngAnimate module must be included - * to enable full out animation support. Otherwise, $animate will only perform simple DOM - * manipulation operations. - * - * To learn more about enabling animation support, click here to visit the {@link ngAnimate - * ngAnimate module page} as well as the {@link ngAnimate.$animate ngAnimate $animate service - * page}. - */ - return { - animate: function(element, from, to) { - applyStyles(element, { from: from, to: to }); - return asyncPromise(); - }, - - /** - * - * @ngdoc method - * @name $animate#enter - * @kind function - * @description Inserts the element into the DOM either after the `after` element or - * as the first child within the `parent` element. When the function is called a promise - * is returned that will be resolved at a later time. - * @param {DOMElement} element the element which will be inserted into the DOM - * @param {DOMElement} parent the parent element which will append the element as - * a child (if the after element is not present) - * @param {DOMElement} after the sibling element which will append the element - * after itself - * @param {object=} options an optional collection of styles that will be applied to the element. - * @return {Promise} the animation callback promise - */ - enter: function(element, parent, after, options) { - applyStyles(element, options); - after ? after.after(element) - : parent.prepend(element); - return asyncPromise(); - }, - - /** - * - * @ngdoc method - * @name $animate#leave - * @kind function - * @description Removes the element from the DOM. When the function is called a promise - * is returned that will be resolved at a later time. - * @param {DOMElement} element the element which will be removed from the DOM - * @param {object=} options an optional collection of options that will be applied to the element. - * @return {Promise} the animation callback promise - */ - leave: function(element, options) { - element.remove(); - return asyncPromise(); - }, - - /** - * - * @ngdoc method - * @name $animate#move - * @kind function - * @description Moves the position of the provided element within the DOM to be placed - * either after the `after` element or inside of the `parent` element. When the function - * is called a promise is returned that will be resolved at a later time. - * - * @param {DOMElement} element the element which will be moved around within the - * DOM - * @param {DOMElement} parent the parent element where the element will be - * inserted into (if the after element is not present) - * @param {DOMElement} after the sibling element where the element will be - * positioned next to - * @param {object=} options an optional collection of options that will be applied to the element. - * @return {Promise} the animation callback promise - */ - move: function(element, parent, after, options) { - // Do not remove element before insert. Removing will cause data associated with the - // element to be dropped. Insert will implicitly do the remove. - return this.enter(element, parent, after, options); - }, - - /** - * - * @ngdoc method - * @name $animate#addClass - * @kind function - * @description Adds the provided className CSS class value to the provided element. - * When the function is called a promise is returned that will be resolved at a later time. - * @param {DOMElement} element the element which will have the className value - * added to it - * @param {string} className the CSS class which will be added to the element - * @param {object=} options an optional collection of options that will be applied to the element. - * @return {Promise} the animation callback promise - */ - addClass: function(element, className, options) { - return this.setClass(element, className, [], options); - }, - - $$addClassImmediately: function(element, className, options) { - element = jqLite(element); - className = !isString(className) - ? (isArray(className) ? className.join(' ') : '') - : className; - forEach(element, function(element) { - jqLiteAddClass(element, className); - }); - applyStyles(element, options); - return asyncPromise(); - }, - - /** - * - * @ngdoc method - * @name $animate#removeClass - * @kind function - * @description Removes the provided className CSS class value from the provided element. - * When the function is called a promise is returned that will be resolved at a later time. - * @param {DOMElement} element the element which will have the className value - * removed from it - * @param {string} className the CSS class which will be removed from the element - * @param {object=} options an optional collection of options that will be applied to the element. - * @return {Promise} the animation callback promise - */ - removeClass: function(element, className, options) { - return this.setClass(element, [], className, options); - }, - - $$removeClassImmediately: function(element, className, options) { - element = jqLite(element); - className = !isString(className) - ? (isArray(className) ? className.join(' ') : '') - : className; - forEach(element, function(element) { - jqLiteRemoveClass(element, className); - }); - applyStyles(element, options); - return asyncPromise(); - }, - - /** - * - * @ngdoc method - * @name $animate#setClass - * @kind function - * @description Adds and/or removes the given CSS classes to and from the element. - * When the function is called a promise is returned that will be resolved at a later time. - * @param {DOMElement} element the element which will have its CSS classes changed - * removed from it - * @param {string} add the CSS classes which will be added to the element - * @param {string} remove the CSS class which will be removed from the element - * @param {object=} options an optional collection of options that will be applied to the element. - * @return {Promise} the animation callback promise - */ - setClass: function(element, add, remove, options) { - var self = this; - var STORAGE_KEY = '$$animateClasses'; - var createdCache = false; - element = jqLite(element); - - var cache = element.data(STORAGE_KEY); - if (!cache) { - cache = { - classes: {}, - options: options - }; - createdCache = true; - } else if (options && cache.options) { - cache.options = angular.extend(cache.options || {}, options); - } - - var classes = cache.classes; - - add = isArray(add) ? add : add.split(' '); - remove = isArray(remove) ? remove : remove.split(' '); - cachedClassManipulation(classes, add, true); - cachedClassManipulation(classes, remove, false); - - if (createdCache) { - cache.promise = runAnimationPostDigest(function(done) { - var cache = element.data(STORAGE_KEY); - element.removeData(STORAGE_KEY); - - // in the event that the element is removed before postDigest - // is run then the cache will be undefined and there will be - // no need anymore to add or remove and of the element classes - if (cache) { - var classes = resolveElementClasses(element, cache.classes); - if (classes) { - self.$$setClassImmediately(element, classes[0], classes[1], cache.options); - } - } - - done(); - }); - element.data(STORAGE_KEY, cache); - } - - return cache.promise; - }, - - $$setClassImmediately: function(element, add, remove, options) { - add && this.$$addClassImmediately(element, add); - remove && this.$$removeClassImmediately(element, remove); - applyStyles(element, options); - return asyncPromise(); - }, - - enabled: noop, - cancel: noop - }; - }]; -}]; - -function $$AsyncCallbackProvider() { - this.$get = ['$$rAF', '$timeout', function($$rAF, $timeout) { - return $$rAF.supported - ? function(fn) { return $$rAF(fn); } - : function(fn) { - return $timeout(fn, 0, false); - }; - }]; -} - -/* global stripHash: true */ - -/** - * ! This is a private undocumented service ! - * - * @name $browser - * @requires $log - * @description - * This object has two goals: - * - * - hide all the global state in the browser caused by the window object - * - abstract away all the browser specific features and inconsistencies - * - * For tests we provide {@link ngMock.$browser mock implementation} of the `$browser` - * service, which can be used for convenient testing of the application without the interaction with - * the real browser apis. - */ -/** - * @param {object} window The global window object. - * @param {object} document jQuery wrapped document. - * @param {object} $log window.console or an object with the same interface. - * @param {object} $sniffer $sniffer service - */ -function Browser(window, document, $log, $sniffer) { - var self = this, - rawDocument = document[0], - location = window.location, - history = window.history, - setTimeout = window.setTimeout, - clearTimeout = window.clearTimeout, - pendingDeferIds = {}; - - self.isMock = false; - - var outstandingRequestCount = 0; - var outstandingRequestCallbacks = []; - - // TODO(vojta): remove this temporary api - self.$$completeOutstandingRequest = completeOutstandingRequest; - self.$$incOutstandingRequestCount = function() { outstandingRequestCount++; }; - - /** - * Executes the `fn` function(supports currying) and decrements the `outstandingRequestCallbacks` - * counter. If the counter reaches 0, all the `outstandingRequestCallbacks` are executed. - */ - function completeOutstandingRequest(fn) { - try { - fn.apply(null, sliceArgs(arguments, 1)); - } finally { - outstandingRequestCount--; - if (outstandingRequestCount === 0) { - while (outstandingRequestCallbacks.length) { - try { - outstandingRequestCallbacks.pop()(); - } catch (e) { - $log.error(e); - } - } - } - } - } - - function getHash(url) { - var index = url.indexOf('#'); - return index === -1 ? '' : url.substr(index + 1); - } - - /** - * @private - * Note: this method is used only by scenario runner - * TODO(vojta): prefix this method with $$ ? - * @param {function()} callback Function that will be called when no outstanding request - */ - self.notifyWhenNoOutstandingRequests = function(callback) { - // force browser to execute all pollFns - this is needed so that cookies and other pollers fire - // at some deterministic time in respect to the test runner's actions. Leaving things up to the - // regular poller would result in flaky tests. - forEach(pollFns, function(pollFn) { pollFn(); }); - - if (outstandingRequestCount === 0) { - callback(); - } else { - outstandingRequestCallbacks.push(callback); - } - }; - - ////////////////////////////////////////////////////////////// - // Poll Watcher API - ////////////////////////////////////////////////////////////// - var pollFns = [], - pollTimeout; - - /** - * @name $browser#addPollFn - * - * @param {function()} fn Poll function to add - * - * @description - * Adds a function to the list of functions that poller periodically executes, - * and starts polling if not started yet. - * - * @returns {function()} the added function - */ - self.addPollFn = function(fn) { - if (isUndefined(pollTimeout)) startPoller(100, setTimeout); - pollFns.push(fn); - return fn; - }; - - /** - * @param {number} interval How often should browser call poll functions (ms) - * @param {function()} setTimeout Reference to a real or fake `setTimeout` function. - * - * @description - * Configures the poller to run in the specified intervals, using the specified - * setTimeout fn and kicks it off. - */ - function startPoller(interval, setTimeout) { - (function check() { - forEach(pollFns, function(pollFn) { pollFn(); }); - pollTimeout = setTimeout(check, interval); - })(); - } - - ////////////////////////////////////////////////////////////// - // URL API - ////////////////////////////////////////////////////////////// - - var cachedState, lastHistoryState, - lastBrowserUrl = location.href, - baseElement = document.find('base'), - reloadLocation = null; - - cacheState(); - lastHistoryState = cachedState; - - /** - * @name $browser#url - * - * @description - * GETTER: - * Without any argument, this method just returns current value of location.href. - * - * SETTER: - * With at least one argument, this method sets url to new value. - * If html5 history api supported, pushState/replaceState is used, otherwise - * location.href/location.replace is used. - * Returns its own instance to allow chaining - * - * NOTE: this api is intended for use only by the $location service. Please use the - * {@link ng.$location $location service} to change url. - * - * @param {string} url New url (when used as setter) - * @param {boolean=} replace Should new url replace current history record? - * @param {object=} state object to use with pushState/replaceState - */ - self.url = function(url, replace, state) { - // In modern browsers `history.state` is `null` by default; treating it separately - // from `undefined` would cause `$browser.url('/foo')` to change `history.state` - // to undefined via `pushState`. Instead, let's change `undefined` to `null` here. - if (isUndefined(state)) { - state = null; - } - - // Android Browser BFCache causes location, history reference to become stale. - if (location !== window.location) location = window.location; - if (history !== window.history) history = window.history; - - // setter - if (url) { - var sameState = lastHistoryState === state; - - // Don't change anything if previous and current URLs and states match. This also prevents - // IE<10 from getting into redirect loop when in LocationHashbangInHtml5Url mode. - // See https://github.com/angular/angular.js/commit/ffb2701 - if (lastBrowserUrl === url && (!$sniffer.history || sameState)) { - return self; - } - var sameBase = lastBrowserUrl && stripHash(lastBrowserUrl) === stripHash(url); - lastBrowserUrl = url; - lastHistoryState = state; - // Don't use history API if only the hash changed - // due to a bug in IE10/IE11 which leads - // to not firing a `hashchange` nor `popstate` event - // in some cases (see #9143). - if ($sniffer.history && (!sameBase || !sameState)) { - history[replace ? 'replaceState' : 'pushState'](state, '', url); - cacheState(); - // Do the assignment again so that those two variables are referentially identical. - lastHistoryState = cachedState; - } else { - if (!sameBase) { - reloadLocation = url; - } - if (replace) { - location.replace(url); - } else if (!sameBase) { - location.href = url; - } else { - location.hash = getHash(url); - } - } - return self; - // getter - } else { - // - reloadLocation is needed as browsers don't allow to read out - // the new location.href if a reload happened. - // - the replacement is a workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=407172 - return reloadLocation || location.href.replace(/%27/g,"'"); - } - }; - - /** - * @name $browser#state - * - * @description - * This method is a getter. - * - * Return history.state or null if history.state is undefined. - * - * @returns {object} state - */ - self.state = function() { - return cachedState; - }; - - var urlChangeListeners = [], - urlChangeInit = false; - - function cacheStateAndFireUrlChange() { - cacheState(); - fireUrlChange(); - } - - // This variable should be used *only* inside the cacheState function. - var lastCachedState = null; - function cacheState() { - // This should be the only place in $browser where `history.state` is read. - cachedState = window.history.state; - cachedState = isUndefined(cachedState) ? null : cachedState; - - // Prevent callbacks fo fire twice if both hashchange & popstate were fired. - if (equals(cachedState, lastCachedState)) { - cachedState = lastCachedState; - } - lastCachedState = cachedState; - } - - function fireUrlChange() { - if (lastBrowserUrl === self.url() && lastHistoryState === cachedState) { - return; - } - - lastBrowserUrl = self.url(); - lastHistoryState = cachedState; - forEach(urlChangeListeners, function(listener) { - listener(self.url(), cachedState); - }); - } - - /** - * @name $browser#onUrlChange - * - * @description - * Register callback function that will be called, when url changes. - * - * It's only called when the url is changed from outside of angular: - * - user types different url into address bar - * - user clicks on history (forward/back) button - * - user clicks on a link - * - * It's not called when url is changed by $browser.url() method - * - * The listener gets called with new url as parameter. - * - * NOTE: this api is intended for use only by the $location service. Please use the - * {@link ng.$location $location service} to monitor url changes in angular apps. - * - * @param {function(string)} listener Listener function to be called when url changes. - * @return {function(string)} Returns the registered listener fn - handy if the fn is anonymous. - */ - self.onUrlChange = function(callback) { - // TODO(vojta): refactor to use node's syntax for events - if (!urlChangeInit) { - // We listen on both (hashchange/popstate) when available, as some browsers (e.g. Opera) - // don't fire popstate when user change the address bar and don't fire hashchange when url - // changed by push/replaceState - - // html5 history api - popstate event - if ($sniffer.history) jqLite(window).on('popstate', cacheStateAndFireUrlChange); - // hashchange event - jqLite(window).on('hashchange', cacheStateAndFireUrlChange); - - urlChangeInit = true; - } - - urlChangeListeners.push(callback); - return callback; - }; - - /** - * Checks whether the url has changed outside of Angular. - * Needs to be exported to be able to check for changes that have been done in sync, - * as hashchange/popstate events fire in async. - */ - self.$$checkUrlChange = fireUrlChange; - - ////////////////////////////////////////////////////////////// - // Misc API - ////////////////////////////////////////////////////////////// - - /** - * @name $browser#baseHref - * - * @description - * Returns current <base href> - * (always relative - without domain) - * - * @returns {string} The current base href - */ - self.baseHref = function() { - var href = baseElement.attr('href'); - return href ? href.replace(/^(https?\:)?\/\/[^\/]*/, '') : ''; - }; - - ////////////////////////////////////////////////////////////// - // Cookies API - ////////////////////////////////////////////////////////////// - var lastCookies = {}; - var lastCookieString = ''; - var cookiePath = self.baseHref(); - - function safeDecodeURIComponent(str) { - try { - return decodeURIComponent(str); - } catch (e) { - return str; - } - } - - /** - * @name $browser#cookies - * - * @param {string=} name Cookie name - * @param {string=} value Cookie value - * - * @description - * The cookies method provides a 'private' low level access to browser cookies. - * It is not meant to be used directly, use the $cookie service instead. - * - * The return values vary depending on the arguments that the method was called with as follows: - * - * - cookies() -> hash of all cookies, this is NOT a copy of the internal state, so do not modify - * it - * - cookies(name, value) -> set name to value, if value is undefined delete the cookie - * - cookies(name) -> the same as (name, undefined) == DELETES (no one calls it right now that - * way) - * - * @returns {Object} Hash of all cookies (if called without any parameter) - */ - self.cookies = function(name, value) { - var cookieLength, cookieArray, cookie, i, index; - - if (name) { - if (value === undefined) { - rawDocument.cookie = encodeURIComponent(name) + "=;path=" + cookiePath + - ";expires=Thu, 01 Jan 1970 00:00:00 GMT"; - } else { - if (isString(value)) { - cookieLength = (rawDocument.cookie = encodeURIComponent(name) + '=' + encodeURIComponent(value) + - ';path=' + cookiePath).length + 1; - - // per http://www.ietf.org/rfc/rfc2109.txt browser must allow at minimum: - // - 300 cookies - // - 20 cookies per unique domain - // - 4096 bytes per cookie - if (cookieLength > 4096) { - $log.warn("Cookie '" + name + - "' possibly not set or overflowed because it was too large (" + - cookieLength + " > 4096 bytes)!"); - } - } - } - } else { - if (rawDocument.cookie !== lastCookieString) { - lastCookieString = rawDocument.cookie; - cookieArray = lastCookieString.split("; "); - lastCookies = {}; - - for (i = 0; i < cookieArray.length; i++) { - cookie = cookieArray[i]; - index = cookie.indexOf('='); - if (index > 0) { //ignore nameless cookies - name = safeDecodeURIComponent(cookie.substring(0, index)); - // the first value that is seen for a cookie is the most - // specific one. values for the same cookie name that - // follow are for less specific paths. - if (lastCookies[name] === undefined) { - lastCookies[name] = safeDecodeURIComponent(cookie.substring(index + 1)); - } - } - } - } - return lastCookies; - } - }; - - - /** - * @name $browser#defer - * @param {function()} fn A function, who's execution should be deferred. - * @param {number=} [delay=0] of milliseconds to defer the function execution. - * @returns {*} DeferId that can be used to cancel the task via `$browser.defer.cancel()`. - * - * @description - * Executes a fn asynchronously via `setTimeout(fn, delay)`. - * - * Unlike when calling `setTimeout` directly, in test this function is mocked and instead of using - * `setTimeout` in tests, the fns are queued in an array, which can be programmatically flushed - * via `$browser.defer.flush()`. - * - */ - self.defer = function(fn, delay) { - var timeoutId; - outstandingRequestCount++; - timeoutId = setTimeout(function() { - delete pendingDeferIds[timeoutId]; - completeOutstandingRequest(fn); - }, delay || 0); - pendingDeferIds[timeoutId] = true; - return timeoutId; - }; - - - /** - * @name $browser#defer.cancel - * - * @description - * Cancels a deferred task identified with `deferId`. - * - * @param {*} deferId Token returned by the `$browser.defer` function. - * @returns {boolean} Returns `true` if the task hasn't executed yet and was successfully - * canceled. - */ - self.defer.cancel = function(deferId) { - if (pendingDeferIds[deferId]) { - delete pendingDeferIds[deferId]; - clearTimeout(deferId); - completeOutstandingRequest(noop); - return true; - } - return false; - }; - -} - -function $BrowserProvider() { - this.$get = ['$window', '$log', '$sniffer', '$document', - function($window, $log, $sniffer, $document) { - return new Browser($window, $document, $log, $sniffer); - }]; -} - -/** - * @ngdoc service - * @name $cacheFactory - * - * @description - * Factory that constructs {@link $cacheFactory.Cache Cache} objects and gives access to - * them. - * - * ```js - * - * var cache = $cacheFactory('cacheId'); - * expect($cacheFactory.get('cacheId')).toBe(cache); - * expect($cacheFactory.get('noSuchCacheId')).not.toBeDefined(); - * - * cache.put("key", "value"); - * cache.put("another key", "another value"); - * - * // We've specified no options on creation - * expect(cache.info()).toEqual({id: 'cacheId', size: 2}); - * - * ``` - * - * - * @param {string} cacheId Name or id of the newly created cache. - * @param {object=} options Options object that specifies the cache behavior. Properties: - * - * - `{number=}` `capacity` — turns the cache into LRU cache. - * - * @returns {object} Newly created cache object with the following set of methods: - * - * - `{object}` `info()` — Returns id, size, and options of cache. - * - `{{*}}` `put({string} key, {*} value)` — Puts a new key-value pair into the cache and returns - * it. - * - `{{*}}` `get({string} key)` — Returns cached value for `key` or undefined for cache miss. - * - `{void}` `remove({string} key)` — Removes a key-value pair from the cache. - * - `{void}` `removeAll()` — Removes all cached values. - * - `{void}` `destroy()` — Removes references to this cache from $cacheFactory. - * - * @example - <example module="cacheExampleApp"> - <file name="index.html"> - <div ng-controller="CacheController"> - <input ng-model="newCacheKey" placeholder="Key"> - <input ng-model="newCacheValue" placeholder="Value"> - <button ng-click="put(newCacheKey, newCacheValue)">Cache</button> - - <p ng-if="keys.length">Cached Values</p> - <div ng-repeat="key in keys"> - <span ng-bind="key"></span> - <span>: </span> - <b ng-bind="cache.get(key)"></b> - </div> - - <p>Cache Info</p> - <div ng-repeat="(key, value) in cache.info()"> - <span ng-bind="key"></span> - <span>: </span> - <b ng-bind="value"></b> - </div> - </div> - </file> - <file name="script.js"> - angular.module('cacheExampleApp', []). - controller('CacheController', ['$scope', '$cacheFactory', function($scope, $cacheFactory) { - $scope.keys = []; - $scope.cache = $cacheFactory('cacheId'); - $scope.put = function(key, value) { - if ($scope.cache.get(key) === undefined) { - $scope.keys.push(key); - } - $scope.cache.put(key, value === undefined ? null : value); - }; - }]); - </file> - <file name="style.css"> - p { - margin: 10px 0 3px; - } - </file> - </example> - */ -function $CacheFactoryProvider() { - - this.$get = function() { - var caches = {}; - - function cacheFactory(cacheId, options) { - if (cacheId in caches) { - throw minErr('$cacheFactory')('iid', "CacheId '{0}' is already taken!", cacheId); - } - - var size = 0, - stats = extend({}, options, {id: cacheId}), - data = {}, - capacity = (options && options.capacity) || Number.MAX_VALUE, - lruHash = {}, - freshEnd = null, - staleEnd = null; - - /** - * @ngdoc type - * @name $cacheFactory.Cache - * - * @description - * A cache object used to store and retrieve data, primarily used by - * {@link $http $http} and the {@link ng.directive:script script} directive to cache - * templates and other data. - * - * ```js - * angular.module('superCache') - * .factory('superCache', ['$cacheFactory', function($cacheFactory) { - * return $cacheFactory('super-cache'); - * }]); - * ``` - * - * Example test: - * - * ```js - * it('should behave like a cache', inject(function(superCache) { - * superCache.put('key', 'value'); - * superCache.put('another key', 'another value'); - * - * expect(superCache.info()).toEqual({ - * id: 'super-cache', - * size: 2 - * }); - * - * superCache.remove('another key'); - * expect(superCache.get('another key')).toBeUndefined(); - * - * superCache.removeAll(); - * expect(superCache.info()).toEqual({ - * id: 'super-cache', - * size: 0 - * }); - * })); - * ``` - */ - return caches[cacheId] = { - - /** - * @ngdoc method - * @name $cacheFactory.Cache#put - * @kind function - * - * @description - * Inserts a named entry into the {@link $cacheFactory.Cache Cache} object to be - * retrieved later, and incrementing the size of the cache if the key was not already - * present in the cache. If behaving like an LRU cache, it will also remove stale - * entries from the set. - * - * It will not insert undefined values into the cache. - * - * @param {string} key the key under which the cached data is stored. - * @param {*} value the value to store alongside the key. If it is undefined, the key - * will not be stored. - * @returns {*} the value stored. - */ - put: function(key, value) { - if (capacity < Number.MAX_VALUE) { - var lruEntry = lruHash[key] || (lruHash[key] = {key: key}); - - refresh(lruEntry); - } - - if (isUndefined(value)) return; - if (!(key in data)) size++; - data[key] = value; - - if (size > capacity) { - this.remove(staleEnd.key); - } - - return value; - }, - - /** - * @ngdoc method - * @name $cacheFactory.Cache#get - * @kind function - * - * @description - * Retrieves named data stored in the {@link $cacheFactory.Cache Cache} object. - * - * @param {string} key the key of the data to be retrieved - * @returns {*} the value stored. - */ - get: function(key) { - if (capacity < Number.MAX_VALUE) { - var lruEntry = lruHash[key]; - - if (!lruEntry) return; - - refresh(lruEntry); - } - - return data[key]; - }, - - - /** - * @ngdoc method - * @name $cacheFactory.Cache#remove - * @kind function - * - * @description - * Removes an entry from the {@link $cacheFactory.Cache Cache} object. - * - * @param {string} key the key of the entry to be removed - */ - remove: function(key) { - if (capacity < Number.MAX_VALUE) { - var lruEntry = lruHash[key]; - - if (!lruEntry) return; - - if (lruEntry == freshEnd) freshEnd = lruEntry.p; - if (lruEntry == staleEnd) staleEnd = lruEntry.n; - link(lruEntry.n,lruEntry.p); - - delete lruHash[key]; - } - - delete data[key]; - size--; - }, - - - /** - * @ngdoc method - * @name $cacheFactory.Cache#removeAll - * @kind function - * - * @description - * Clears the cache object of any entries. - */ - removeAll: function() { - data = {}; - size = 0; - lruHash = {}; - freshEnd = staleEnd = null; - }, - - - /** - * @ngdoc method - * @name $cacheFactory.Cache#destroy - * @kind function - * - * @description - * Destroys the {@link $cacheFactory.Cache Cache} object entirely, - * removing it from the {@link $cacheFactory $cacheFactory} set. - */ - destroy: function() { - data = null; - stats = null; - lruHash = null; - delete caches[cacheId]; - }, - - - /** - * @ngdoc method - * @name $cacheFactory.Cache#info - * @kind function - * - * @description - * Retrieve information regarding a particular {@link $cacheFactory.Cache Cache}. - * - * @returns {object} an object with the following properties: - * <ul> - * <li>**id**: the id of the cache instance</li> - * <li>**size**: the number of entries kept in the cache instance</li> - * <li>**...**: any additional properties from the options object when creating the - * cache.</li> - * </ul> - */ - info: function() { - return extend({}, stats, {size: size}); - } - }; - - - /** - * makes the `entry` the freshEnd of the LRU linked list - */ - function refresh(entry) { - if (entry != freshEnd) { - if (!staleEnd) { - staleEnd = entry; - } else if (staleEnd == entry) { - staleEnd = entry.n; - } - - link(entry.n, entry.p); - link(entry, freshEnd); - freshEnd = entry; - freshEnd.n = null; - } - } - - - /** - * bidirectionally links two entries of the LRU linked list - */ - function link(nextEntry, prevEntry) { - if (nextEntry != prevEntry) { - if (nextEntry) nextEntry.p = prevEntry; //p stands for previous, 'prev' didn't minify - if (prevEntry) prevEntry.n = nextEntry; //n stands for next, 'next' didn't minify - } - } - } - - - /** - * @ngdoc method - * @name $cacheFactory#info - * - * @description - * Get information about all the caches that have been created - * - * @returns {Object} - key-value map of `cacheId` to the result of calling `cache#info` - */ - cacheFactory.info = function() { - var info = {}; - forEach(caches, function(cache, cacheId) { - info[cacheId] = cache.info(); - }); - return info; - }; - - - /** - * @ngdoc method - * @name $cacheFactory#get - * - * @description - * Get access to a cache object by the `cacheId` used when it was created. - * - * @param {string} cacheId Name or id of a cache to access. - * @returns {object} Cache object identified by the cacheId or undefined if no such cache. - */ - cacheFactory.get = function(cacheId) { - return caches[cacheId]; - }; - - - return cacheFactory; - }; -} - -/** - * @ngdoc service - * @name $templateCache - * - * @description - * The first time a template is used, it is loaded in the template cache for quick retrieval. You - * can load templates directly into the cache in a `script` tag, or by consuming the - * `$templateCache` service directly. - * - * Adding via the `script` tag: - * - * ```html - * <script type="text/ng-template" id="templateId.html"> - * <p>This is the content of the template</p> - * </script> - * ``` - * - * **Note:** the `script` tag containing the template does not need to be included in the `head` of - * the document, but it must be a descendent of the {@link ng.$rootElement $rootElement} (IE, - * element with ng-app attribute), otherwise the template will be ignored. - * - * Adding via the $templateCache service: - * - * ```js - * var myApp = angular.module('myApp', []); - * myApp.run(function($templateCache) { - * $templateCache.put('templateId.html', 'This is the content of the template'); - * }); - * ``` - * - * To retrieve the template later, simply use it in your HTML: - * ```html - * <div ng-include=" 'templateId.html' "></div> - * ``` - * - * or get it via Javascript: - * ```js - * $templateCache.get('templateId.html') - * ``` - * - * See {@link ng.$cacheFactory $cacheFactory}. - * - */ -function $TemplateCacheProvider() { - this.$get = ['$cacheFactory', function($cacheFactory) { - return $cacheFactory('templates'); - }]; -} - -/* ! VARIABLE/FUNCTION NAMING CONVENTIONS THAT APPLY TO THIS FILE! - * - * DOM-related variables: - * - * - "node" - DOM Node - * - "element" - DOM Element or Node - * - "$node" or "$element" - jqLite-wrapped node or element - * - * - * Compiler related stuff: - * - * - "linkFn" - linking fn of a single directive - * - "nodeLinkFn" - function that aggregates all linking fns for a particular node - * - "childLinkFn" - function that aggregates all linking fns for child nodes of a particular node - * - "compositeLinkFn" - function that aggregates all linking fns for a compilation root (nodeList) - */ - - -/** - * @ngdoc service - * @name $compile - * @kind function - * - * @description - * Compiles an HTML string or DOM into a template and produces a template function, which - * can then be used to link {@link ng.$rootScope.Scope `scope`} and the template together. - * - * The compilation is a process of walking the DOM tree and matching DOM elements to - * {@link ng.$compileProvider#directive directives}. - * - * <div class="alert alert-warning"> - * **Note:** This document is an in-depth reference of all directive options. - * For a gentle introduction to directives with examples of common use cases, - * see the {@link guide/directive directive guide}. - * </div> - * - * ## Comprehensive Directive API - * - * There are many different options for a directive. - * - * The difference resides in the return value of the factory function. - * You can either return a "Directive Definition Object" (see below) that defines the directive properties, - * or just the `postLink` function (all other properties will have the default values). - * - * <div class="alert alert-success"> - * **Best Practice:** It's recommended to use the "directive definition object" form. - * </div> - * - * Here's an example directive declared with a Directive Definition Object: - * - * ```js - * var myModule = angular.module(...); - * - * myModule.directive('directiveName', function factory(injectables) { - * var directiveDefinitionObject = { - * priority: 0, - * template: '<div></div>', // or // function(tElement, tAttrs) { ... }, - * // or - * // templateUrl: 'directive.html', // or // function(tElement, tAttrs) { ... }, - * transclude: false, - * restrict: 'A', - * templateNamespace: 'html', - * scope: false, - * controller: function($scope, $element, $attrs, $transclude, otherInjectables) { ... }, - * controllerAs: 'stringAlias', - * require: 'siblingDirectiveName', // or // ['^parentDirectiveName', '?optionalDirectiveName', '?^optionalParent'], - * compile: function compile(tElement, tAttrs, transclude) { - * return { - * pre: function preLink(scope, iElement, iAttrs, controller) { ... }, - * post: function postLink(scope, iElement, iAttrs, controller) { ... } - * } - * // or - * // return function postLink( ... ) { ... } - * }, - * // or - * // link: { - * // pre: function preLink(scope, iElement, iAttrs, controller) { ... }, - * // post: function postLink(scope, iElement, iAttrs, controller) { ... } - * // } - * // or - * // link: function postLink( ... ) { ... } - * }; - * return directiveDefinitionObject; - * }); - * ``` - * - * <div class="alert alert-warning"> - * **Note:** Any unspecified options will use the default value. You can see the default values below. - * </div> - * - * Therefore the above can be simplified as: - * - * ```js - * var myModule = angular.module(...); - * - * myModule.directive('directiveName', function factory(injectables) { - * var directiveDefinitionObject = { - * link: function postLink(scope, iElement, iAttrs) { ... } - * }; - * return directiveDefinitionObject; - * // or - * // return function postLink(scope, iElement, iAttrs) { ... } - * }); - * ``` - * - * - * - * ### Directive Definition Object - * - * The directive definition object provides instructions to the {@link ng.$compile - * compiler}. The attributes are: - * - * #### `multiElement` - * When this property is set to true, the HTML compiler will collect DOM nodes between - * nodes with the attributes `directive-name-start` and `directive-name-end`, and group them - * together as the directive elements. It is recommended that this feature be used on directives - * which are not strictly behavioural (such as {@link ngClick}), and which - * do not manipulate or replace child nodes (such as {@link ngInclude}). - * - * #### `priority` - * When there are multiple directives defined on a single DOM element, sometimes it - * is necessary to specify the order in which the directives are applied. The `priority` is used - * to sort the directives before their `compile` functions get called. Priority is defined as a - * number. Directives with greater numerical `priority` are compiled first. Pre-link functions - * are also run in priority order, but post-link functions are run in reverse order. The order - * of directives with the same priority is undefined. The default priority is `0`. - * - * #### `terminal` - * If set to true then the current `priority` will be the last set of directives - * which will execute (any directives at the current priority will still execute - * as the order of execution on same `priority` is undefined). Note that expressions - * and other directives used in the directive's template will also be excluded from execution. - * - * #### `scope` - * **If set to `true`,** then a new scope will be created for this directive. If multiple directives on the - * same element request a new scope, only one new scope is created. The new scope rule does not - * apply for the root of the template since the root of the template always gets a new scope. - * - * **If set to `{}` (object hash),** then a new "isolate" scope is created. The 'isolate' scope differs from - * normal scope in that it does not prototypically inherit from the parent scope. This is useful - * when creating reusable components, which should not accidentally read or modify data in the - * parent scope. - * - * The 'isolate' scope takes an object hash which defines a set of local scope properties - * derived from the parent scope. These local properties are useful for aliasing values for - * templates. Locals definition is a hash of local scope property to its source: - * - * * `@` or `@attr` - bind a local scope property to the value of DOM attribute. The result is - * always a string since DOM attributes are strings. If no `attr` name is specified then the - * attribute name is assumed to be the same as the local name. - * Given `<widget my-attr="hello {{name}}">` and widget definition - * of `scope: { localName:'@myAttr' }`, then widget scope property `localName` will reflect - * the interpolated value of `hello {{name}}`. As the `name` attribute changes so will the - * `localName` property on the widget scope. The `name` is read from the parent scope (not - * component scope). - * - * * `=` or `=attr` - set up bi-directional binding between a local scope property and the - * parent scope property of name defined via the value of the `attr` attribute. If no `attr` - * name is specified then the attribute name is assumed to be the same as the local name. - * Given `<widget my-attr="parentModel">` and widget definition of - * `scope: { localModel:'=myAttr' }`, then widget scope property `localModel` will reflect the - * value of `parentModel` on the parent scope. Any changes to `parentModel` will be reflected - * in `localModel` and any changes in `localModel` will reflect in `parentModel`. If the parent - * scope property doesn't exist, it will throw a NON_ASSIGNABLE_MODEL_EXPRESSION exception. You - * can avoid this behavior using `=?` or `=?attr` in order to flag the property as optional. If - * you want to shallow watch for changes (i.e. $watchCollection instead of $watch) you can use - * `=*` or `=*attr` (`=*?` or `=*?attr` if the property is optional). - * - * * `&` or `&attr` - provides a way to execute an expression in the context of the parent scope. - * If no `attr` name is specified then the attribute name is assumed to be the same as the - * local name. Given `<widget my-attr="count = count + value">` and widget definition of - * `scope: { localFn:'&myAttr' }`, then isolate scope property `localFn` will point to - * a function wrapper for the `count = count + value` expression. Often it's desirable to - * pass data from the isolated scope via an expression to the parent scope, this can be - * done by passing a map of local variable names and values into the expression wrapper fn. - * For example, if the expression is `increment(amount)` then we can specify the amount value - * by calling the `localFn` as `localFn({amount: 22})`. - * - * - * #### `bindToController` - * When an isolate scope is used for a component (see above), and `controllerAs` is used, `bindToController: true` will - * allow a component to have its properties bound to the controller, rather than to scope. When the controller - * is instantiated, the initial values of the isolate scope bindings are already available. - * - * #### `controller` - * Controller constructor function. The controller is instantiated before the - * pre-linking phase and it is shared with other directives (see - * `require` attribute). This allows the directives to communicate with each other and augment - * each other's behavior. The controller is injectable (and supports bracket notation) with the following locals: - * - * * `$scope` - Current scope associated with the element - * * `$element` - Current element - * * `$attrs` - Current attributes object for the element - * * `$transclude` - A transclude linking function pre-bound to the correct transclusion scope: - * `function([scope], cloneLinkingFn, futureParentElement)`. - * * `scope`: optional argument to override the scope. - * * `cloneLinkingFn`: optional argument to create clones of the original transcluded content. - * * `futureParentElement`: - * * defines the parent to which the `cloneLinkingFn` will add the cloned elements. - * * default: `$element.parent()` resp. `$element` for `transclude:'element'` resp. `transclude:true`. - * * only needed for transcludes that are allowed to contain non html elements (e.g. SVG elements) - * and when the `cloneLinkinFn` is passed, - * as those elements need to created and cloned in a special way when they are defined outside their - * usual containers (e.g. like `<svg>`). - * * See also the `directive.templateNamespace` property. - * - * - * #### `require` - * Require another directive and inject its controller as the fourth argument to the linking function. The - * `require` takes a string name (or array of strings) of the directive(s) to pass in. If an array is used, the - * injected argument will be an array in corresponding order. If no such directive can be - * found, or if the directive does not have a controller, then an error is raised. The name can be prefixed with: - * - * * (no prefix) - Locate the required controller on the current element. Throw an error if not found. - * * `?` - Attempt to locate the required controller or pass `null` to the `link` fn if not found. - * * `^` - Locate the required controller by searching the element and its parents. Throw an error if not found. - * * `^^` - Locate the required controller by searching the element's parents. Throw an error if not found. - * * `?^` - Attempt to locate the required controller by searching the element and its parents or pass - * `null` to the `link` fn if not found. - * * `?^^` - Attempt to locate the required controller by searching the element's parents, or pass - * `null` to the `link` fn if not found. - * - * - * #### `controllerAs` - * Controller alias at the directive scope. An alias for the controller so it - * can be referenced at the directive template. The directive needs to define a scope for this - * configuration to be used. Useful in the case when directive is used as component. - * - * - * #### `restrict` - * String of subset of `EACM` which restricts the directive to a specific directive - * declaration style. If omitted, the defaults (elements and attributes) are used. - * - * * `E` - Element name (default): `<my-directive></my-directive>` - * * `A` - Attribute (default): `<div my-directive="exp"></div>` - * * `C` - Class: `<div class="my-directive: exp;"></div>` - * * `M` - Comment: `<!-- directive: my-directive exp -->` - * - * - * #### `templateNamespace` - * String representing the document type used by the markup in the template. - * AngularJS needs this information as those elements need to be created and cloned - * in a special way when they are defined outside their usual containers like `<svg>` and `<math>`. - * - * * `html` - All root nodes in the template are HTML. Root nodes may also be - * top-level elements such as `<svg>` or `<math>`. - * * `svg` - The root nodes in the template are SVG elements (excluding `<math>`). - * * `math` - The root nodes in the template are MathML elements (excluding `<svg>`). - * - * If no `templateNamespace` is specified, then the namespace is considered to be `html`. - * - * #### `template` - * HTML markup that may: - * * Replace the contents of the directive's element (default). - * * Replace the directive's element itself (if `replace` is true - DEPRECATED). - * * Wrap the contents of the directive's element (if `transclude` is true). - * - * Value may be: - * - * * A string. For example `<div red-on-hover>{{delete_str}}</div>`. - * * A function which takes two arguments `tElement` and `tAttrs` (described in the `compile` - * function api below) and returns a string value. - * - * - * #### `templateUrl` - * This is similar to `template` but the template is loaded from the specified URL, asynchronously. - * - * Because template loading is asynchronous the compiler will suspend compilation of directives on that element - * for later when the template has been resolved. In the meantime it will continue to compile and link - * sibling and parent elements as though this element had not contained any directives. - * - * The compiler does not suspend the entire compilation to wait for templates to be loaded because this - * would result in the whole app "stalling" until all templates are loaded asynchronously - even in the - * case when only one deeply nested directive has `templateUrl`. - * - * Template loading is asynchronous even if the template has been preloaded into the {@link $templateCache} - * - * You can specify `templateUrl` as a string representing the URL or as a function which takes two - * arguments `tElement` and `tAttrs` (described in the `compile` function api below) and returns - * a string value representing the url. In either case, the template URL is passed through {@link - * $sce#getTrustedResourceUrl $sce.getTrustedResourceUrl}. - * - * - * #### `replace` ([*DEPRECATED*!], will be removed in next major release - i.e. v2.0) - * specify what the template should replace. Defaults to `false`. - * - * * `true` - the template will replace the directive's element. - * * `false` - the template will replace the contents of the directive's element. - * - * The replacement process migrates all of the attributes / classes from the old element to the new - * one. See the {@link guide/directive#template-expanding-directive - * Directives Guide} for an example. - * - * There are very few scenarios where element replacement is required for the application function, - * the main one being reusable custom components that are used within SVG contexts - * (because SVG doesn't work with custom elements in the DOM tree). - * - * #### `transclude` - * Extract the contents of the element where the directive appears and make it available to the directive. - * The contents are compiled and provided to the directive as a **transclusion function**. See the - * {@link $compile#transclusion Transclusion} section below. - * - * There are two kinds of transclusion depending upon whether you want to transclude just the contents of the - * directive's element or the entire element: - * - * * `true` - transclude the content (i.e. the child nodes) of the directive's element. - * * `'element'` - transclude the whole of the directive's element including any directives on this - * element that defined at a lower priority than this directive. When used, the `template` - * property is ignored. - * - * - * #### `compile` - * - * ```js - * function compile(tElement, tAttrs, transclude) { ... } - * ``` - * - * The compile function deals with transforming the template DOM. Since most directives do not do - * template transformation, it is not used often. The compile function takes the following arguments: - * - * * `tElement` - template element - The element where the directive has been declared. It is - * safe to do template transformation on the element and child elements only. - * - * * `tAttrs` - template attributes - Normalized list of attributes declared on this element shared - * between all directive compile functions. - * - * * `transclude` - [*DEPRECATED*!] A transclude linking function: `function(scope, cloneLinkingFn)` - * - * <div class="alert alert-warning"> - * **Note:** The template instance and the link instance may be different objects if the template has - * been cloned. For this reason it is **not** safe to do anything other than DOM transformations that - * apply to all cloned DOM nodes within the compile function. Specifically, DOM listener registration - * should be done in a linking function rather than in a compile function. - * </div> - - * <div class="alert alert-warning"> - * **Note:** The compile function cannot handle directives that recursively use themselves in their - * own templates or compile functions. Compiling these directives results in an infinite loop and a - * stack overflow errors. - * - * This can be avoided by manually using $compile in the postLink function to imperatively compile - * a directive's template instead of relying on automatic template compilation via `template` or - * `templateUrl` declaration or manual compilation inside the compile function. - * </div> - * - * <div class="alert alert-error"> - * **Note:** The `transclude` function that is passed to the compile function is deprecated, as it - * e.g. does not know about the right outer scope. Please use the transclude function that is passed - * to the link function instead. - * </div> - - * A compile function can have a return value which can be either a function or an object. - * - * * returning a (post-link) function - is equivalent to registering the linking function via the - * `link` property of the config object when the compile function is empty. - * - * * returning an object with function(s) registered via `pre` and `post` properties - allows you to - * control when a linking function should be called during the linking phase. See info about - * pre-linking and post-linking functions below. - * - * - * #### `link` - * This property is used only if the `compile` property is not defined. - * - * ```js - * function link(scope, iElement, iAttrs, controller, transcludeFn) { ... } - * ``` - * - * The link function is responsible for registering DOM listeners as well as updating the DOM. It is - * executed after the template has been cloned. This is where most of the directive logic will be - * put. - * - * * `scope` - {@link ng.$rootScope.Scope Scope} - The scope to be used by the - * directive for registering {@link ng.$rootScope.Scope#$watch watches}. - * - * * `iElement` - instance element - The element where the directive is to be used. It is safe to - * manipulate the children of the element only in `postLink` function since the children have - * already been linked. - * - * * `iAttrs` - instance attributes - Normalized list of attributes declared on this element shared - * between all directive linking functions. - * - * * `controller` - a controller instance - A controller instance if at least one directive on the - * element defines a controller. The controller is shared among all the directives, which allows - * the directives to use the controllers as a communication channel. - * - * * `transcludeFn` - A transclude linking function pre-bound to the correct transclusion scope. - * This is the same as the `$transclude` - * parameter of directive controllers, see there for details. - * `function([scope], cloneLinkingFn, futureParentElement)`. - * - * #### Pre-linking function - * - * Executed before the child elements are linked. Not safe to do DOM transformation since the - * compiler linking function will fail to locate the correct elements for linking. - * - * #### Post-linking function - * - * Executed after the child elements are linked. - * - * Note that child elements that contain `templateUrl` directives will not have been compiled - * and linked since they are waiting for their template to load asynchronously and their own - * compilation and linking has been suspended until that occurs. - * - * It is safe to do DOM transformation in the post-linking function on elements that are not waiting - * for their async templates to be resolved. - * - * - * ### Transclusion - * - * Transclusion is the process of extracting a collection of DOM element from one part of the DOM and - * copying them to another part of the DOM, while maintaining their connection to the original AngularJS - * scope from where they were taken. - * - * Transclusion is used (often with {@link ngTransclude}) to insert the - * original contents of a directive's element into a specified place in the template of the directive. - * The benefit of transclusion, over simply moving the DOM elements manually, is that the transcluded - * content has access to the properties on the scope from which it was taken, even if the directive - * has isolated scope. - * See the {@link guide/directive#creating-a-directive-that-wraps-other-elements Directives Guide}. - * - * This makes it possible for the widget to have private state for its template, while the transcluded - * content has access to its originating scope. - * - * <div class="alert alert-warning"> - * **Note:** When testing an element transclude directive you must not place the directive at the root of the - * DOM fragment that is being compiled. See {@link guide/unit-testing#testing-transclusion-directives - * Testing Transclusion Directives}. - * </div> - * - * #### Transclusion Functions - * - * When a directive requests transclusion, the compiler extracts its contents and provides a **transclusion - * function** to the directive's `link` function and `controller`. This transclusion function is a special - * **linking function** that will return the compiled contents linked to a new transclusion scope. - * - * <div class="alert alert-info"> - * If you are just using {@link ngTransclude} then you don't need to worry about this function, since - * ngTransclude will deal with it for us. - * </div> - * - * If you want to manually control the insertion and removal of the transcluded content in your directive - * then you must use this transclude function. When you call a transclude function it returns a a jqLite/JQuery - * object that contains the compiled DOM, which is linked to the correct transclusion scope. - * - * When you call a transclusion function you can pass in a **clone attach function**. This function accepts - * two parameters, `function(clone, scope) { ... }`, where the `clone` is a fresh compiled copy of your transcluded - * content and the `scope` is the newly created transclusion scope, to which the clone is bound. - * - * <div class="alert alert-info"> - * **Best Practice**: Always provide a `cloneFn` (clone attach function) when you call a translude function - * since you then get a fresh clone of the original DOM and also have access to the new transclusion scope. - * </div> - * - * It is normal practice to attach your transcluded content (`clone`) to the DOM inside your **clone - * attach function**: - * - * ```js - * var transcludedContent, transclusionScope; - * - * $transclude(function(clone, scope) { - * element.append(clone); - * transcludedContent = clone; - * transclusionScope = scope; - * }); - * ``` - * - * Later, if you want to remove the transcluded content from your DOM then you should also destroy the - * associated transclusion scope: - * - * ```js - * transcludedContent.remove(); - * transclusionScope.$destroy(); - * ``` - * - * <div class="alert alert-info"> - * **Best Practice**: if you intend to add and remove transcluded content manually in your directive - * (by calling the transclude function to get the DOM and and calling `element.remove()` to remove it), - * then you are also responsible for calling `$destroy` on the transclusion scope. - * </div> - * - * The built-in DOM manipulation directives, such as {@link ngIf}, {@link ngSwitch} and {@link ngRepeat} - * automatically destroy their transluded clones as necessary so you do not need to worry about this if - * you are simply using {@link ngTransclude} to inject the transclusion into your directive. - * - * - * #### Transclusion Scopes - * - * When you call a transclude function it returns a DOM fragment that is pre-bound to a **transclusion - * scope**. This scope is special, in that it is a child of the directive's scope (and so gets destroyed - * when the directive's scope gets destroyed) but it inherits the properties of the scope from which it - * was taken. - * - * For example consider a directive that uses transclusion and isolated scope. The DOM hierarchy might look - * like this: - * - * ```html - * <div ng-app> - * <div isolate> - * <div transclusion> - * </div> - * </div> - * </div> - * ``` - * - * The `$parent` scope hierarchy will look like this: - * - * ``` - * - $rootScope - * - isolate - * - transclusion - * ``` - * - * but the scopes will inherit prototypically from different scopes to their `$parent`. - * - * ``` - * - $rootScope - * - transclusion - * - isolate - * ``` - * - * - * ### Attributes - * - * The {@link ng.$compile.directive.Attributes Attributes} object - passed as a parameter in the - * `link()` or `compile()` functions. It has a variety of uses. - * - * accessing *Normalized attribute names:* - * Directives like 'ngBind' can be expressed in many ways: 'ng:bind', `data-ng-bind`, or 'x-ng-bind'. - * the attributes object allows for normalized access to - * the attributes. - * - * * *Directive inter-communication:* All directives share the same instance of the attributes - * object which allows the directives to use the attributes object as inter directive - * communication. - * - * * *Supports interpolation:* Interpolation attributes are assigned to the attribute object - * allowing other directives to read the interpolated value. - * - * * *Observing interpolated attributes:* Use `$observe` to observe the value changes of attributes - * that contain interpolation (e.g. `src="{{bar}}"`). Not only is this very efficient but it's also - * the only way to easily get the actual value because during the linking phase the interpolation - * hasn't been evaluated yet and so the value is at this time set to `undefined`. - * - * ```js - * function linkingFn(scope, elm, attrs, ctrl) { - * // get the attribute value - * console.log(attrs.ngModel); - * - * // change the attribute - * attrs.$set('ngModel', 'new value'); - * - * // observe changes to interpolated attribute - * attrs.$observe('ngModel', function(value) { - * console.log('ngModel has changed value to ' + value); - * }); - * } - * ``` - * - * ## Example - * - * <div class="alert alert-warning"> - * **Note**: Typically directives are registered with `module.directive`. The example below is - * to illustrate how `$compile` works. - * </div> - * - <example module="compileExample"> - <file name="index.html"> - <script> - angular.module('compileExample', [], function($compileProvider) { - // configure new 'compile' directive by passing a directive - // factory function. The factory function injects the '$compile' - $compileProvider.directive('compile', function($compile) { - // directive factory creates a link function - return function(scope, element, attrs) { - scope.$watch( - function(scope) { - // watch the 'compile' expression for changes - return scope.$eval(attrs.compile); - }, - function(value) { - // when the 'compile' expression changes - // assign it into the current DOM - element.html(value); - - // compile the new DOM and link it to the current - // scope. - // NOTE: we only compile .childNodes so that - // we don't get into infinite loop compiling ourselves - $compile(element.contents())(scope); - } - ); - }; - }); - }) - .controller('GreeterController', ['$scope', function($scope) { - $scope.name = 'Angular'; - $scope.html = 'Hello {{name}}'; - }]); - </script> - <div ng-controller="GreeterController"> - <input ng-model="name"> <br> - <textarea ng-model="html"></textarea> <br> - <div compile="html"></div> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should auto compile', function() { - var textarea = $('textarea'); - var output = $('div[compile]'); - // The initial state reads 'Hello Angular'. - expect(output.getText()).toBe('Hello Angular'); - textarea.clear(); - textarea.sendKeys('{{name}}!'); - expect(output.getText()).toBe('Angular!'); - }); - </file> - </example> - - * - * - * @param {string|DOMElement} element Element or HTML string to compile into a template function. - * @param {function(angular.Scope, cloneAttachFn=)} transclude function available to directives - DEPRECATED. - * - * <div class="alert alert-error"> - * **Note:** Passing a `transclude` function to the $compile function is deprecated, as it - * e.g. will not use the right outer scope. Please pass the transclude function as a - * `parentBoundTranscludeFn` to the link function instead. - * </div> - * - * @param {number} maxPriority only apply directives lower than given priority (Only effects the - * root element(s), not their children) - * @returns {function(scope, cloneAttachFn=, options=)} a link function which is used to bind template - * (a DOM element/tree) to a scope. Where: - * - * * `scope` - A {@link ng.$rootScope.Scope Scope} to bind to. - * * `cloneAttachFn` - If `cloneAttachFn` is provided, then the link function will clone the - * `template` and call the `cloneAttachFn` function allowing the caller to attach the - * cloned elements to the DOM document at the appropriate place. The `cloneAttachFn` is - * called as: <br> `cloneAttachFn(clonedElement, scope)` where: - * - * * `clonedElement` - is a clone of the original `element` passed into the compiler. - * * `scope` - is the current scope with which the linking function is working with. - * - * * `options` - An optional object hash with linking options. If `options` is provided, then the following - * keys may be used to control linking behavior: - * - * * `parentBoundTranscludeFn` - the transclude function made available to - * directives; if given, it will be passed through to the link functions of - * directives found in `element` during compilation. - * * `transcludeControllers` - an object hash with keys that map controller names - * to controller instances; if given, it will make the controllers - * available to directives. - * * `futureParentElement` - defines the parent to which the `cloneAttachFn` will add - * the cloned elements; only needed for transcludes that are allowed to contain non html - * elements (e.g. SVG elements). See also the directive.controller property. - * - * Calling the linking function returns the element of the template. It is either the original - * element passed in, or the clone of the element if the `cloneAttachFn` is provided. - * - * After linking the view is not updated until after a call to $digest which typically is done by - * Angular automatically. - * - * If you need access to the bound view, there are two ways to do it: - * - * - If you are not asking the linking function to clone the template, create the DOM element(s) - * before you send them to the compiler and keep this reference around. - * ```js - * var element = $compile('<p>{{total}}</p>')(scope); - * ``` - * - * - if on the other hand, you need the element to be cloned, the view reference from the original - * example would not point to the clone, but rather to the original template that was cloned. In - * this case, you can access the clone via the cloneAttachFn: - * ```js - * var templateElement = angular.element('<p>{{total}}</p>'), - * scope = ....; - * - * var clonedElement = $compile(templateElement)(scope, function(clonedElement, scope) { - * //attach the clone to DOM document at the right place - * }); - * - * //now we have reference to the cloned DOM via `clonedElement` - * ``` - * - * - * For information on how the compiler works, see the - * {@link guide/compiler Angular HTML Compiler} section of the Developer Guide. - */ - -var $compileMinErr = minErr('$compile'); - -/** - * @ngdoc provider - * @name $compileProvider - * - * @description - */ -$CompileProvider.$inject = ['$provide', '$$sanitizeUriProvider']; -function $CompileProvider($provide, $$sanitizeUriProvider) { - var hasDirectives = {}, - Suffix = 'Directive', - COMMENT_DIRECTIVE_REGEXP = /^\s*directive\:\s*([\w\-]+)\s+(.*)$/, - CLASS_DIRECTIVE_REGEXP = /(([\w\-]+)(?:\:([^;]+))?;?)/, - ALL_OR_NOTHING_ATTRS = makeMap('ngSrc,ngSrcset,src,srcset'), - REQUIRE_PREFIX_REGEXP = /^(?:(\^\^?)?(\?)?(\^\^?)?)?/; - - // Ref: http://developers.whatwg.org/webappapis.html#event-handler-idl-attributes - // The assumption is that future DOM event attribute names will begin with - // 'on' and be composed of only English letters. - var EVENT_HANDLER_ATTR_REGEXP = /^(on[a-z]+|formaction)$/; - - function parseIsolateBindings(scope, directiveName) { - var LOCAL_REGEXP = /^\s*([@&]|=(\*?))(\??)\s*(\w*)\s*$/; - - var bindings = {}; - - forEach(scope, function(definition, scopeName) { - var match = definition.match(LOCAL_REGEXP); - - if (!match) { - throw $compileMinErr('iscp', - "Invalid isolate scope definition for directive '{0}'." + - " Definition: {... {1}: '{2}' ...}", - directiveName, scopeName, definition); - } - - bindings[scopeName] = { - mode: match[1][0], - collection: match[2] === '*', - optional: match[3] === '?', - attrName: match[4] || scopeName - }; - }); - - return bindings; - } - - /** - * @ngdoc method - * @name $compileProvider#directive - * @kind function - * - * @description - * Register a new directive with the compiler. - * - * @param {string|Object} name Name of the directive in camel-case (i.e. <code>ngBind</code> which - * will match as <code>ng-bind</code>), or an object map of directives where the keys are the - * names and the values are the factories. - * @param {Function|Array} directiveFactory An injectable directive factory function. See - * {@link guide/directive} for more info. - * @returns {ng.$compileProvider} Self for chaining. - */ - this.directive = function registerDirective(name, directiveFactory) { - assertNotHasOwnProperty(name, 'directive'); - if (isString(name)) { - assertArg(directiveFactory, 'directiveFactory'); - if (!hasDirectives.hasOwnProperty(name)) { - hasDirectives[name] = []; - $provide.factory(name + Suffix, ['$injector', '$exceptionHandler', - function($injector, $exceptionHandler) { - var directives = []; - forEach(hasDirectives[name], function(directiveFactory, index) { - try { - var directive = $injector.invoke(directiveFactory); - if (isFunction(directive)) { - directive = { compile: valueFn(directive) }; - } else if (!directive.compile && directive.link) { - directive.compile = valueFn(directive.link); - } - directive.priority = directive.priority || 0; - directive.index = index; - directive.name = directive.name || name; - directive.require = directive.require || (directive.controller && directive.name); - directive.restrict = directive.restrict || 'EA'; - if (isObject(directive.scope)) { - directive.$$isolateBindings = parseIsolateBindings(directive.scope, directive.name); - } - directives.push(directive); - } catch (e) { - $exceptionHandler(e); - } - }); - return directives; - }]); - } - hasDirectives[name].push(directiveFactory); - } else { - forEach(name, reverseParams(registerDirective)); - } - return this; - }; - - - /** - * @ngdoc method - * @name $compileProvider#aHrefSanitizationWhitelist - * @kind function - * - * @description - * Retrieves or overrides the default regular expression that is used for whitelisting of safe - * urls during a[href] sanitization. - * - * The sanitization is a security measure aimed at preventing XSS attacks via html links. - * - * Any url about to be assigned to a[href] via data-binding is first normalized and turned into - * an absolute url. Afterwards, the url is matched against the `aHrefSanitizationWhitelist` - * regular expression. If a match is found, the original url is written into the dom. Otherwise, - * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM. - * - * @param {RegExp=} regexp New regexp to whitelist urls with. - * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for - * chaining otherwise. - */ - this.aHrefSanitizationWhitelist = function(regexp) { - if (isDefined(regexp)) { - $$sanitizeUriProvider.aHrefSanitizationWhitelist(regexp); - return this; - } else { - return $$sanitizeUriProvider.aHrefSanitizationWhitelist(); - } - }; - - - /** - * @ngdoc method - * @name $compileProvider#imgSrcSanitizationWhitelist - * @kind function - * - * @description - * Retrieves or overrides the default regular expression that is used for whitelisting of safe - * urls during img[src] sanitization. - * - * The sanitization is a security measure aimed at prevent XSS attacks via html links. - * - * Any url about to be assigned to img[src] via data-binding is first normalized and turned into - * an absolute url. Afterwards, the url is matched against the `imgSrcSanitizationWhitelist` - * regular expression. If a match is found, the original url is written into the dom. Otherwise, - * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM. - * - * @param {RegExp=} regexp New regexp to whitelist urls with. - * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for - * chaining otherwise. - */ - this.imgSrcSanitizationWhitelist = function(regexp) { - if (isDefined(regexp)) { - $$sanitizeUriProvider.imgSrcSanitizationWhitelist(regexp); - return this; - } else { - return $$sanitizeUriProvider.imgSrcSanitizationWhitelist(); - } - }; - - /** - * @ngdoc method - * @name $compileProvider#debugInfoEnabled - * - * @param {boolean=} enabled update the debugInfoEnabled state if provided, otherwise just return the - * current debugInfoEnabled state - * @returns {*} current value if used as getter or itself (chaining) if used as setter - * - * @kind function - * - * @description - * Call this method to enable/disable various debug runtime information in the compiler such as adding - * binding information and a reference to the current scope on to DOM elements. - * If enabled, the compiler will add the following to DOM elements that have been bound to the scope - * * `ng-binding` CSS class - * * `$binding` data property containing an array of the binding expressions - * - * You may want to disable this in production for a significant performance boost. See - * {@link guide/production#disabling-debug-data Disabling Debug Data} for more. - * - * The default value is true. - */ - var debugInfoEnabled = true; - this.debugInfoEnabled = function(enabled) { - if (isDefined(enabled)) { - debugInfoEnabled = enabled; - return this; - } - return debugInfoEnabled; - }; - - this.$get = [ - '$injector', '$interpolate', '$exceptionHandler', '$templateRequest', '$parse', - '$controller', '$rootScope', '$document', '$sce', '$animate', '$$sanitizeUri', - function($injector, $interpolate, $exceptionHandler, $templateRequest, $parse, - $controller, $rootScope, $document, $sce, $animate, $$sanitizeUri) { - - var Attributes = function(element, attributesToCopy) { - if (attributesToCopy) { - var keys = Object.keys(attributesToCopy); - var i, l, key; - - for (i = 0, l = keys.length; i < l; i++) { - key = keys[i]; - this[key] = attributesToCopy[key]; - } - } else { - this.$attr = {}; - } - - this.$$element = element; - }; - - Attributes.prototype = { - /** - * @ngdoc method - * @name $compile.directive.Attributes#$normalize - * @kind function - * - * @description - * Converts an attribute name (e.g. dash/colon/underscore-delimited string, optionally prefixed with `x-` or - * `data-`) to its normalized, camelCase form. - * - * Also there is special case for Moz prefix starting with upper case letter. - * - * For further information check out the guide on {@link guide/directive#matching-directives Matching Directives} - * - * @param {string} name Name to normalize - */ - $normalize: directiveNormalize, - - - /** - * @ngdoc method - * @name $compile.directive.Attributes#$addClass - * @kind function - * - * @description - * Adds the CSS class value specified by the classVal parameter to the element. If animations - * are enabled then an animation will be triggered for the class addition. - * - * @param {string} classVal The className value that will be added to the element - */ - $addClass: function(classVal) { - if (classVal && classVal.length > 0) { - $animate.addClass(this.$$element, classVal); - } - }, - - /** - * @ngdoc method - * @name $compile.directive.Attributes#$removeClass - * @kind function - * - * @description - * Removes the CSS class value specified by the classVal parameter from the element. If - * animations are enabled then an animation will be triggered for the class removal. - * - * @param {string} classVal The className value that will be removed from the element - */ - $removeClass: function(classVal) { - if (classVal && classVal.length > 0) { - $animate.removeClass(this.$$element, classVal); - } - }, - - /** - * @ngdoc method - * @name $compile.directive.Attributes#$updateClass - * @kind function - * - * @description - * Adds and removes the appropriate CSS class values to the element based on the difference - * between the new and old CSS class values (specified as newClasses and oldClasses). - * - * @param {string} newClasses The current CSS className value - * @param {string} oldClasses The former CSS className value - */ - $updateClass: function(newClasses, oldClasses) { - var toAdd = tokenDifference(newClasses, oldClasses); - if (toAdd && toAdd.length) { - $animate.addClass(this.$$element, toAdd); - } - - var toRemove = tokenDifference(oldClasses, newClasses); - if (toRemove && toRemove.length) { - $animate.removeClass(this.$$element, toRemove); - } - }, - - /** - * Set a normalized attribute on the element in a way such that all directives - * can share the attribute. This function properly handles boolean attributes. - * @param {string} key Normalized key. (ie ngAttribute) - * @param {string|boolean} value The value to set. If `null` attribute will be deleted. - * @param {boolean=} writeAttr If false, does not write the value to DOM element attribute. - * Defaults to true. - * @param {string=} attrName Optional none normalized name. Defaults to key. - */ - $set: function(key, value, writeAttr, attrName) { - // TODO: decide whether or not to throw an error if "class" - //is set through this function since it may cause $updateClass to - //become unstable. - - var node = this.$$element[0], - booleanKey = getBooleanAttrName(node, key), - aliasedKey = getAliasedAttrName(node, key), - observer = key, - nodeName; - - if (booleanKey) { - this.$$element.prop(key, value); - attrName = booleanKey; - } else if (aliasedKey) { - this[aliasedKey] = value; - observer = aliasedKey; - } - - this[key] = value; - - // translate normalized key to actual key - if (attrName) { - this.$attr[key] = attrName; - } else { - attrName = this.$attr[key]; - if (!attrName) { - this.$attr[key] = attrName = snake_case(key, '-'); - } - } - - nodeName = nodeName_(this.$$element); - - if ((nodeName === 'a' && key === 'href') || - (nodeName === 'img' && key === 'src')) { - // sanitize a[href] and img[src] values - this[key] = value = $$sanitizeUri(value, key === 'src'); - } else if (nodeName === 'img' && key === 'srcset') { - // sanitize img[srcset] values - var result = ""; - - // first check if there are spaces because it's not the same pattern - var trimmedSrcset = trim(value); - // ( 999x ,| 999w ,| ,|, ) - var srcPattern = /(\s+\d+x\s*,|\s+\d+w\s*,|\s+,|,\s+)/; - var pattern = /\s/.test(trimmedSrcset) ? srcPattern : /(,)/; - - // split srcset into tuple of uri and descriptor except for the last item - var rawUris = trimmedSrcset.split(pattern); - - // for each tuples - var nbrUrisWith2parts = Math.floor(rawUris.length / 2); - for (var i = 0; i < nbrUrisWith2parts; i++) { - var innerIdx = i * 2; - // sanitize the uri - result += $$sanitizeUri(trim(rawUris[innerIdx]), true); - // add the descriptor - result += (" " + trim(rawUris[innerIdx + 1])); - } - - // split the last item into uri and descriptor - var lastTuple = trim(rawUris[i * 2]).split(/\s/); - - // sanitize the last uri - result += $$sanitizeUri(trim(lastTuple[0]), true); - - // and add the last descriptor if any - if (lastTuple.length === 2) { - result += (" " + trim(lastTuple[1])); - } - this[key] = value = result; - } - - if (writeAttr !== false) { - if (value === null || value === undefined) { - this.$$element.removeAttr(attrName); - } else { - this.$$element.attr(attrName, value); - } - } - - // fire observers - var $$observers = this.$$observers; - $$observers && forEach($$observers[observer], function(fn) { - try { - fn(value); - } catch (e) { - $exceptionHandler(e); - } - }); - }, - - - /** - * @ngdoc method - * @name $compile.directive.Attributes#$observe - * @kind function - * - * @description - * Observes an interpolated attribute. - * - * The observer function will be invoked once during the next `$digest` following - * compilation. The observer is then invoked whenever the interpolated value - * changes. - * - * @param {string} key Normalized key. (ie ngAttribute) . - * @param {function(interpolatedValue)} fn Function that will be called whenever - the interpolated value of the attribute changes. - * See the {@link guide/directive#text-and-attribute-bindings Directives} guide for more info. - * @returns {function()} Returns a deregistration function for this observer. - */ - $observe: function(key, fn) { - var attrs = this, - $$observers = (attrs.$$observers || (attrs.$$observers = createMap())), - listeners = ($$observers[key] || ($$observers[key] = [])); - - listeners.push(fn); - $rootScope.$evalAsync(function() { - if (!listeners.$$inter && attrs.hasOwnProperty(key)) { - // no one registered attribute interpolation function, so lets call it manually - fn(attrs[key]); - } - }); - - return function() { - arrayRemove(listeners, fn); - }; - } - }; - - - function safeAddClass($element, className) { - try { - $element.addClass(className); - } catch (e) { - // ignore, since it means that we are trying to set class on - // SVG element, where class name is read-only. - } - } - - - var startSymbol = $interpolate.startSymbol(), - endSymbol = $interpolate.endSymbol(), - denormalizeTemplate = (startSymbol == '{{' || endSymbol == '}}') - ? identity - : function denormalizeTemplate(template) { - return template.replace(/\{\{/g, startSymbol).replace(/}}/g, endSymbol); - }, - NG_ATTR_BINDING = /^ngAttr[A-Z]/; - - compile.$$addBindingInfo = debugInfoEnabled ? function $$addBindingInfo($element, binding) { - var bindings = $element.data('$binding') || []; - - if (isArray(binding)) { - bindings = bindings.concat(binding); - } else { - bindings.push(binding); - } - - $element.data('$binding', bindings); - } : noop; - - compile.$$addBindingClass = debugInfoEnabled ? function $$addBindingClass($element) { - safeAddClass($element, 'ng-binding'); - } : noop; - - compile.$$addScopeInfo = debugInfoEnabled ? function $$addScopeInfo($element, scope, isolated, noTemplate) { - var dataName = isolated ? (noTemplate ? '$isolateScopeNoTemplate' : '$isolateScope') : '$scope'; - $element.data(dataName, scope); - } : noop; - - compile.$$addScopeClass = debugInfoEnabled ? function $$addScopeClass($element, isolated) { - safeAddClass($element, isolated ? 'ng-isolate-scope' : 'ng-scope'); - } : noop; - - return compile; - - //================================ - - function compile($compileNodes, transcludeFn, maxPriority, ignoreDirective, - previousCompileContext) { - if (!($compileNodes instanceof jqLite)) { - // jquery always rewraps, whereas we need to preserve the original selector so that we can - // modify it. - $compileNodes = jqLite($compileNodes); - } - // We can not compile top level text elements since text nodes can be merged and we will - // not be able to attach scope data to them, so we will wrap them in <span> - forEach($compileNodes, function(node, index) { - if (node.nodeType == NODE_TYPE_TEXT && node.nodeValue.match(/\S+/) /* non-empty */ ) { - $compileNodes[index] = jqLite(node).wrap('<span></span>').parent()[0]; - } - }); - var compositeLinkFn = - compileNodes($compileNodes, transcludeFn, $compileNodes, - maxPriority, ignoreDirective, previousCompileContext); - compile.$$addScopeClass($compileNodes); - var namespace = null; - return function publicLinkFn(scope, cloneConnectFn, options) { - assertArg(scope, 'scope'); - - options = options || {}; - var parentBoundTranscludeFn = options.parentBoundTranscludeFn, - transcludeControllers = options.transcludeControllers, - futureParentElement = options.futureParentElement; - - // When `parentBoundTranscludeFn` is passed, it is a - // `controllersBoundTransclude` function (it was previously passed - // as `transclude` to directive.link) so we must unwrap it to get - // its `boundTranscludeFn` - if (parentBoundTranscludeFn && parentBoundTranscludeFn.$$boundTransclude) { - parentBoundTranscludeFn = parentBoundTranscludeFn.$$boundTransclude; - } - - if (!namespace) { - namespace = detectNamespaceForChildElements(futureParentElement); - } - var $linkNode; - if (namespace !== 'html') { - // When using a directive with replace:true and templateUrl the $compileNodes - // (or a child element inside of them) - // might change, so we need to recreate the namespace adapted compileNodes - // for call to the link function. - // Note: This will already clone the nodes... - $linkNode = jqLite( - wrapTemplate(namespace, jqLite('<div>').append($compileNodes).html()) - ); - } else if (cloneConnectFn) { - // important!!: we must call our jqLite.clone() since the jQuery one is trying to be smart - // and sometimes changes the structure of the DOM. - $linkNode = JQLitePrototype.clone.call($compileNodes); - } else { - $linkNode = $compileNodes; - } - - if (transcludeControllers) { - for (var controllerName in transcludeControllers) { - $linkNode.data('$' + controllerName + 'Controller', transcludeControllers[controllerName].instance); - } - } - - compile.$$addScopeInfo($linkNode, scope); - - if (cloneConnectFn) cloneConnectFn($linkNode, scope); - if (compositeLinkFn) compositeLinkFn(scope, $linkNode, $linkNode, parentBoundTranscludeFn); - return $linkNode; - }; - } - - function detectNamespaceForChildElements(parentElement) { - // TODO: Make this detect MathML as well... - var node = parentElement && parentElement[0]; - if (!node) { - return 'html'; - } else { - return nodeName_(node) !== 'foreignobject' && node.toString().match(/SVG/) ? 'svg' : 'html'; - } - } - - /** - * Compile function matches each node in nodeList against the directives. Once all directives - * for a particular node are collected their compile functions are executed. The compile - * functions return values - the linking functions - are combined into a composite linking - * function, which is the a linking function for the node. - * - * @param {NodeList} nodeList an array of nodes or NodeList to compile - * @param {function(angular.Scope, cloneAttachFn=)} transcludeFn A linking function, where the - * scope argument is auto-generated to the new child of the transcluded parent scope. - * @param {DOMElement=} $rootElement If the nodeList is the root of the compilation tree then - * the rootElement must be set the jqLite collection of the compile root. This is - * needed so that the jqLite collection items can be replaced with widgets. - * @param {number=} maxPriority Max directive priority. - * @returns {Function} A composite linking function of all of the matched directives or null. - */ - function compileNodes(nodeList, transcludeFn, $rootElement, maxPriority, ignoreDirective, - previousCompileContext) { - var linkFns = [], - attrs, directives, nodeLinkFn, childNodes, childLinkFn, linkFnFound, nodeLinkFnFound; - - for (var i = 0; i < nodeList.length; i++) { - attrs = new Attributes(); - - // we must always refer to nodeList[i] since the nodes can be replaced underneath us. - directives = collectDirectives(nodeList[i], [], attrs, i === 0 ? maxPriority : undefined, - ignoreDirective); - - nodeLinkFn = (directives.length) - ? applyDirectivesToNode(directives, nodeList[i], attrs, transcludeFn, $rootElement, - null, [], [], previousCompileContext) - : null; - - if (nodeLinkFn && nodeLinkFn.scope) { - compile.$$addScopeClass(attrs.$$element); - } - - childLinkFn = (nodeLinkFn && nodeLinkFn.terminal || - !(childNodes = nodeList[i].childNodes) || - !childNodes.length) - ? null - : compileNodes(childNodes, - nodeLinkFn ? ( - (nodeLinkFn.transcludeOnThisElement || !nodeLinkFn.templateOnThisElement) - && nodeLinkFn.transclude) : transcludeFn); - - if (nodeLinkFn || childLinkFn) { - linkFns.push(i, nodeLinkFn, childLinkFn); - linkFnFound = true; - nodeLinkFnFound = nodeLinkFnFound || nodeLinkFn; - } - - //use the previous context only for the first element in the virtual group - previousCompileContext = null; - } - - // return a linking function if we have found anything, null otherwise - return linkFnFound ? compositeLinkFn : null; - - function compositeLinkFn(scope, nodeList, $rootElement, parentBoundTranscludeFn) { - var nodeLinkFn, childLinkFn, node, childScope, i, ii, idx, childBoundTranscludeFn; - var stableNodeList; - - - if (nodeLinkFnFound) { - // copy nodeList so that if a nodeLinkFn removes or adds an element at this DOM level our - // offsets don't get screwed up - var nodeListLength = nodeList.length; - stableNodeList = new Array(nodeListLength); - - // create a sparse array by only copying the elements which have a linkFn - for (i = 0; i < linkFns.length; i+=3) { - idx = linkFns[i]; - stableNodeList[idx] = nodeList[idx]; - } - } else { - stableNodeList = nodeList; - } - - for (i = 0, ii = linkFns.length; i < ii;) { - node = stableNodeList[linkFns[i++]]; - nodeLinkFn = linkFns[i++]; - childLinkFn = linkFns[i++]; - - if (nodeLinkFn) { - if (nodeLinkFn.scope) { - childScope = scope.$new(); - compile.$$addScopeInfo(jqLite(node), childScope); - } else { - childScope = scope; - } - - if (nodeLinkFn.transcludeOnThisElement) { - childBoundTranscludeFn = createBoundTranscludeFn( - scope, nodeLinkFn.transclude, parentBoundTranscludeFn, - nodeLinkFn.elementTranscludeOnThisElement); - - } else if (!nodeLinkFn.templateOnThisElement && parentBoundTranscludeFn) { - childBoundTranscludeFn = parentBoundTranscludeFn; - - } else if (!parentBoundTranscludeFn && transcludeFn) { - childBoundTranscludeFn = createBoundTranscludeFn(scope, transcludeFn); - - } else { - childBoundTranscludeFn = null; - } - - nodeLinkFn(childLinkFn, childScope, node, $rootElement, childBoundTranscludeFn); - - } else if (childLinkFn) { - childLinkFn(scope, node.childNodes, undefined, parentBoundTranscludeFn); - } - } - } - } - - function createBoundTranscludeFn(scope, transcludeFn, previousBoundTranscludeFn, elementTransclusion) { - - var boundTranscludeFn = function(transcludedScope, cloneFn, controllers, futureParentElement, containingScope) { - - if (!transcludedScope) { - transcludedScope = scope.$new(false, containingScope); - transcludedScope.$$transcluded = true; - } - - return transcludeFn(transcludedScope, cloneFn, { - parentBoundTranscludeFn: previousBoundTranscludeFn, - transcludeControllers: controllers, - futureParentElement: futureParentElement - }); - }; - - return boundTranscludeFn; - } - - /** - * Looks for directives on the given node and adds them to the directive collection which is - * sorted. - * - * @param node Node to search. - * @param directives An array to which the directives are added to. This array is sorted before - * the function returns. - * @param attrs The shared attrs object which is used to populate the normalized attributes. - * @param {number=} maxPriority Max directive priority. - */ - function collectDirectives(node, directives, attrs, maxPriority, ignoreDirective) { - var nodeType = node.nodeType, - attrsMap = attrs.$attr, - match, - className; - - switch (nodeType) { - case NODE_TYPE_ELEMENT: /* Element */ - // use the node name: <directive> - addDirective(directives, - directiveNormalize(nodeName_(node)), 'E', maxPriority, ignoreDirective); - - // iterate over the attributes - for (var attr, name, nName, ngAttrName, value, isNgAttr, nAttrs = node.attributes, - j = 0, jj = nAttrs && nAttrs.length; j < jj; j++) { - var attrStartName = false; - var attrEndName = false; - - attr = nAttrs[j]; - name = attr.name; - value = trim(attr.value); - - // support ngAttr attribute binding - ngAttrName = directiveNormalize(name); - if (isNgAttr = NG_ATTR_BINDING.test(ngAttrName)) { - name = name.replace(PREFIX_REGEXP, '') - .substr(8).replace(/_(.)/g, function(match, letter) { - return letter.toUpperCase(); - }); - } - - var directiveNName = ngAttrName.replace(/(Start|End)$/, ''); - if (directiveIsMultiElement(directiveNName)) { - if (ngAttrName === directiveNName + 'Start') { - attrStartName = name; - attrEndName = name.substr(0, name.length - 5) + 'end'; - name = name.substr(0, name.length - 6); - } - } - - nName = directiveNormalize(name.toLowerCase()); - attrsMap[nName] = name; - if (isNgAttr || !attrs.hasOwnProperty(nName)) { - attrs[nName] = value; - if (getBooleanAttrName(node, nName)) { - attrs[nName] = true; // presence means true - } - } - addAttrInterpolateDirective(node, directives, value, nName, isNgAttr); - addDirective(directives, nName, 'A', maxPriority, ignoreDirective, attrStartName, - attrEndName); - } - - // use class as directive - className = node.className; - if (isObject(className)) { - // Maybe SVGAnimatedString - className = className.animVal; - } - if (isString(className) && className !== '') { - while (match = CLASS_DIRECTIVE_REGEXP.exec(className)) { - nName = directiveNormalize(match[2]); - if (addDirective(directives, nName, 'C', maxPriority, ignoreDirective)) { - attrs[nName] = trim(match[3]); - } - className = className.substr(match.index + match[0].length); - } - } - break; - case NODE_TYPE_TEXT: /* Text Node */ - addTextInterpolateDirective(directives, node.nodeValue); - break; - case NODE_TYPE_COMMENT: /* Comment */ - try { - match = COMMENT_DIRECTIVE_REGEXP.exec(node.nodeValue); - if (match) { - nName = directiveNormalize(match[1]); - if (addDirective(directives, nName, 'M', maxPriority, ignoreDirective)) { - attrs[nName] = trim(match[2]); - } - } - } catch (e) { - // turns out that under some circumstances IE9 throws errors when one attempts to read - // comment's node value. - // Just ignore it and continue. (Can't seem to reproduce in test case.) - } - break; - } - - directives.sort(byPriority); - return directives; - } - - /** - * Given a node with an directive-start it collects all of the siblings until it finds - * directive-end. - * @param node - * @param attrStart - * @param attrEnd - * @returns {*} - */ - function groupScan(node, attrStart, attrEnd) { - var nodes = []; - var depth = 0; - if (attrStart && node.hasAttribute && node.hasAttribute(attrStart)) { - do { - if (!node) { - throw $compileMinErr('uterdir', - "Unterminated attribute, found '{0}' but no matching '{1}' found.", - attrStart, attrEnd); - } - if (node.nodeType == NODE_TYPE_ELEMENT) { - if (node.hasAttribute(attrStart)) depth++; - if (node.hasAttribute(attrEnd)) depth--; - } - nodes.push(node); - node = node.nextSibling; - } while (depth > 0); - } else { - nodes.push(node); - } - - return jqLite(nodes); - } - - /** - * Wrapper for linking function which converts normal linking function into a grouped - * linking function. - * @param linkFn - * @param attrStart - * @param attrEnd - * @returns {Function} - */ - function groupElementsLinkFnWrapper(linkFn, attrStart, attrEnd) { - return function(scope, element, attrs, controllers, transcludeFn) { - element = groupScan(element[0], attrStart, attrEnd); - return linkFn(scope, element, attrs, controllers, transcludeFn); - }; - } - - /** - * Once the directives have been collected, their compile functions are executed. This method - * is responsible for inlining directive templates as well as terminating the application - * of the directives if the terminal directive has been reached. - * - * @param {Array} directives Array of collected directives to execute their compile function. - * this needs to be pre-sorted by priority order. - * @param {Node} compileNode The raw DOM node to apply the compile functions to - * @param {Object} templateAttrs The shared attribute function - * @param {function(angular.Scope, cloneAttachFn=)} transcludeFn A linking function, where the - * scope argument is auto-generated to the new - * child of the transcluded parent scope. - * @param {JQLite} jqCollection If we are working on the root of the compile tree then this - * argument has the root jqLite array so that we can replace nodes - * on it. - * @param {Object=} originalReplaceDirective An optional directive that will be ignored when - * compiling the transclusion. - * @param {Array.<Function>} preLinkFns - * @param {Array.<Function>} postLinkFns - * @param {Object} previousCompileContext Context used for previous compilation of the current - * node - * @returns {Function} linkFn - */ - function applyDirectivesToNode(directives, compileNode, templateAttrs, transcludeFn, - jqCollection, originalReplaceDirective, preLinkFns, postLinkFns, - previousCompileContext) { - previousCompileContext = previousCompileContext || {}; - - var terminalPriority = -Number.MAX_VALUE, - newScopeDirective, - controllerDirectives = previousCompileContext.controllerDirectives, - controllers, - newIsolateScopeDirective = previousCompileContext.newIsolateScopeDirective, - templateDirective = previousCompileContext.templateDirective, - nonTlbTranscludeDirective = previousCompileContext.nonTlbTranscludeDirective, - hasTranscludeDirective = false, - hasTemplate = false, - hasElementTranscludeDirective = previousCompileContext.hasElementTranscludeDirective, - $compileNode = templateAttrs.$$element = jqLite(compileNode), - directive, - directiveName, - $template, - replaceDirective = originalReplaceDirective, - childTranscludeFn = transcludeFn, - linkFn, - directiveValue; - - // executes all directives on the current element - for (var i = 0, ii = directives.length; i < ii; i++) { - directive = directives[i]; - var attrStart = directive.$$start; - var attrEnd = directive.$$end; - - // collect multiblock sections - if (attrStart) { - $compileNode = groupScan(compileNode, attrStart, attrEnd); - } - $template = undefined; - - if (terminalPriority > directive.priority) { - break; // prevent further processing of directives - } - - if (directiveValue = directive.scope) { - - // skip the check for directives with async templates, we'll check the derived sync - // directive when the template arrives - if (!directive.templateUrl) { - if (isObject(directiveValue)) { - // This directive is trying to add an isolated scope. - // Check that there is no scope of any kind already - assertNoDuplicate('new/isolated scope', newIsolateScopeDirective || newScopeDirective, - directive, $compileNode); - newIsolateScopeDirective = directive; - } else { - // This directive is trying to add a child scope. - // Check that there is no isolated scope already - assertNoDuplicate('new/isolated scope', newIsolateScopeDirective, directive, - $compileNode); - } - } - - newScopeDirective = newScopeDirective || directive; - } - - directiveName = directive.name; - - if (!directive.templateUrl && directive.controller) { - directiveValue = directive.controller; - controllerDirectives = controllerDirectives || {}; - assertNoDuplicate("'" + directiveName + "' controller", - controllerDirectives[directiveName], directive, $compileNode); - controllerDirectives[directiveName] = directive; - } - - if (directiveValue = directive.transclude) { - hasTranscludeDirective = true; - - // Special case ngIf and ngRepeat so that we don't complain about duplicate transclusion. - // This option should only be used by directives that know how to safely handle element transclusion, - // where the transcluded nodes are added or replaced after linking. - if (!directive.$$tlb) { - assertNoDuplicate('transclusion', nonTlbTranscludeDirective, directive, $compileNode); - nonTlbTranscludeDirective = directive; - } - - if (directiveValue == 'element') { - hasElementTranscludeDirective = true; - terminalPriority = directive.priority; - $template = $compileNode; - $compileNode = templateAttrs.$$element = - jqLite(document.createComment(' ' + directiveName + ': ' + - templateAttrs[directiveName] + ' ')); - compileNode = $compileNode[0]; - replaceWith(jqCollection, sliceArgs($template), compileNode); - - childTranscludeFn = compile($template, transcludeFn, terminalPriority, - replaceDirective && replaceDirective.name, { - // Don't pass in: - // - controllerDirectives - otherwise we'll create duplicates controllers - // - newIsolateScopeDirective or templateDirective - combining templates with - // element transclusion doesn't make sense. - // - // We need only nonTlbTranscludeDirective so that we prevent putting transclusion - // on the same element more than once. - nonTlbTranscludeDirective: nonTlbTranscludeDirective - }); - } else { - $template = jqLite(jqLiteClone(compileNode)).contents(); - $compileNode.empty(); // clear contents - childTranscludeFn = compile($template, transcludeFn); - } - } - - if (directive.template) { - hasTemplate = true; - assertNoDuplicate('template', templateDirective, directive, $compileNode); - templateDirective = directive; - - directiveValue = (isFunction(directive.template)) - ? directive.template($compileNode, templateAttrs) - : directive.template; - - directiveValue = denormalizeTemplate(directiveValue); - - if (directive.replace) { - replaceDirective = directive; - if (jqLiteIsTextNode(directiveValue)) { - $template = []; - } else { - $template = removeComments(wrapTemplate(directive.templateNamespace, trim(directiveValue))); - } - compileNode = $template[0]; - - if ($template.length != 1 || compileNode.nodeType !== NODE_TYPE_ELEMENT) { - throw $compileMinErr('tplrt', - "Template for directive '{0}' must have exactly one root element. {1}", - directiveName, ''); - } - - replaceWith(jqCollection, $compileNode, compileNode); - - var newTemplateAttrs = {$attr: {}}; - - // combine directives from the original node and from the template: - // - take the array of directives for this element - // - split it into two parts, those that already applied (processed) and those that weren't (unprocessed) - // - collect directives from the template and sort them by priority - // - combine directives as: processed + template + unprocessed - var templateDirectives = collectDirectives(compileNode, [], newTemplateAttrs); - var unprocessedDirectives = directives.splice(i + 1, directives.length - (i + 1)); - - if (newIsolateScopeDirective) { - markDirectivesAsIsolate(templateDirectives); - } - directives = directives.concat(templateDirectives).concat(unprocessedDirectives); - mergeTemplateAttributes(templateAttrs, newTemplateAttrs); - - ii = directives.length; - } else { - $compileNode.html(directiveValue); - } - } - - if (directive.templateUrl) { - hasTemplate = true; - assertNoDuplicate('template', templateDirective, directive, $compileNode); - templateDirective = directive; - - if (directive.replace) { - replaceDirective = directive; - } - - nodeLinkFn = compileTemplateUrl(directives.splice(i, directives.length - i), $compileNode, - templateAttrs, jqCollection, hasTranscludeDirective && childTranscludeFn, preLinkFns, postLinkFns, { - controllerDirectives: controllerDirectives, - newIsolateScopeDirective: newIsolateScopeDirective, - templateDirective: templateDirective, - nonTlbTranscludeDirective: nonTlbTranscludeDirective - }); - ii = directives.length; - } else if (directive.compile) { - try { - linkFn = directive.compile($compileNode, templateAttrs, childTranscludeFn); - if (isFunction(linkFn)) { - addLinkFns(null, linkFn, attrStart, attrEnd); - } else if (linkFn) { - addLinkFns(linkFn.pre, linkFn.post, attrStart, attrEnd); - } - } catch (e) { - $exceptionHandler(e, startingTag($compileNode)); - } - } - - if (directive.terminal) { - nodeLinkFn.terminal = true; - terminalPriority = Math.max(terminalPriority, directive.priority); - } - - } - - nodeLinkFn.scope = newScopeDirective && newScopeDirective.scope === true; - nodeLinkFn.transcludeOnThisElement = hasTranscludeDirective; - nodeLinkFn.elementTranscludeOnThisElement = hasElementTranscludeDirective; - nodeLinkFn.templateOnThisElement = hasTemplate; - nodeLinkFn.transclude = childTranscludeFn; - - previousCompileContext.hasElementTranscludeDirective = hasElementTranscludeDirective; - - // might be normal or delayed nodeLinkFn depending on if templateUrl is present - return nodeLinkFn; - - //////////////////// - - function addLinkFns(pre, post, attrStart, attrEnd) { - if (pre) { - if (attrStart) pre = groupElementsLinkFnWrapper(pre, attrStart, attrEnd); - pre.require = directive.require; - pre.directiveName = directiveName; - if (newIsolateScopeDirective === directive || directive.$$isolateScope) { - pre = cloneAndAnnotateFn(pre, {isolateScope: true}); - } - preLinkFns.push(pre); - } - if (post) { - if (attrStart) post = groupElementsLinkFnWrapper(post, attrStart, attrEnd); - post.require = directive.require; - post.directiveName = directiveName; - if (newIsolateScopeDirective === directive || directive.$$isolateScope) { - post = cloneAndAnnotateFn(post, {isolateScope: true}); - } - postLinkFns.push(post); - } - } - - - function getControllers(directiveName, require, $element, elementControllers) { - var value, retrievalMethod = 'data', optional = false; - var $searchElement = $element; - var match; - if (isString(require)) { - match = require.match(REQUIRE_PREFIX_REGEXP); - require = require.substring(match[0].length); - - if (match[3]) { - if (match[1]) match[3] = null; - else match[1] = match[3]; - } - if (match[1] === '^') { - retrievalMethod = 'inheritedData'; - } else if (match[1] === '^^') { - retrievalMethod = 'inheritedData'; - $searchElement = $element.parent(); - } - if (match[2] === '?') { - optional = true; - } - - value = null; - - if (elementControllers && retrievalMethod === 'data') { - if (value = elementControllers[require]) { - value = value.instance; - } - } - value = value || $searchElement[retrievalMethod]('$' + require + 'Controller'); - - if (!value && !optional) { - throw $compileMinErr('ctreq', - "Controller '{0}', required by directive '{1}', can't be found!", - require, directiveName); - } - return value || null; - } else if (isArray(require)) { - value = []; - forEach(require, function(require) { - value.push(getControllers(directiveName, require, $element, elementControllers)); - }); - } - return value; - } - - - function nodeLinkFn(childLinkFn, scope, linkNode, $rootElement, boundTranscludeFn) { - var i, ii, linkFn, controller, isolateScope, elementControllers, transcludeFn, $element, - attrs; - - if (compileNode === linkNode) { - attrs = templateAttrs; - $element = templateAttrs.$$element; - } else { - $element = jqLite(linkNode); - attrs = new Attributes($element, templateAttrs); - } - - if (newIsolateScopeDirective) { - isolateScope = scope.$new(true); - } - - if (boundTranscludeFn) { - // track `boundTranscludeFn` so it can be unwrapped if `transcludeFn` - // is later passed as `parentBoundTranscludeFn` to `publicLinkFn` - transcludeFn = controllersBoundTransclude; - transcludeFn.$$boundTransclude = boundTranscludeFn; - } - - if (controllerDirectives) { - // TODO: merge `controllers` and `elementControllers` into single object. - controllers = {}; - elementControllers = {}; - forEach(controllerDirectives, function(directive) { - var locals = { - $scope: directive === newIsolateScopeDirective || directive.$$isolateScope ? isolateScope : scope, - $element: $element, - $attrs: attrs, - $transclude: transcludeFn - }, controllerInstance; - - controller = directive.controller; - if (controller == '@') { - controller = attrs[directive.name]; - } - - controllerInstance = $controller(controller, locals, true, directive.controllerAs); - - // For directives with element transclusion the element is a comment, - // but jQuery .data doesn't support attaching data to comment nodes as it's hard to - // clean up (http://bugs.jquery.com/ticket/8335). - // Instead, we save the controllers for the element in a local hash and attach to .data - // later, once we have the actual element. - elementControllers[directive.name] = controllerInstance; - if (!hasElementTranscludeDirective) { - $element.data('$' + directive.name + 'Controller', controllerInstance.instance); - } - - controllers[directive.name] = controllerInstance; - }); - } - - if (newIsolateScopeDirective) { - compile.$$addScopeInfo($element, isolateScope, true, !(templateDirective && (templateDirective === newIsolateScopeDirective || - templateDirective === newIsolateScopeDirective.$$originalDirective))); - compile.$$addScopeClass($element, true); - - var isolateScopeController = controllers && controllers[newIsolateScopeDirective.name]; - var isolateBindingContext = isolateScope; - if (isolateScopeController && isolateScopeController.identifier && - newIsolateScopeDirective.bindToController === true) { - isolateBindingContext = isolateScopeController.instance; - } - - forEach(isolateScope.$$isolateBindings = newIsolateScopeDirective.$$isolateBindings, function(definition, scopeName) { - var attrName = definition.attrName, - optional = definition.optional, - mode = definition.mode, // @, =, or & - lastValue, - parentGet, parentSet, compare; - - switch (mode) { - - case '@': - attrs.$observe(attrName, function(value) { - isolateBindingContext[scopeName] = value; - }); - attrs.$$observers[attrName].$$scope = scope; - if (attrs[attrName]) { - // If the attribute has been provided then we trigger an interpolation to ensure - // the value is there for use in the link fn - isolateBindingContext[scopeName] = $interpolate(attrs[attrName])(scope); - } - break; - - case '=': - if (optional && !attrs[attrName]) { - return; - } - parentGet = $parse(attrs[attrName]); - if (parentGet.literal) { - compare = equals; - } else { - compare = function(a, b) { return a === b || (a !== a && b !== b); }; - } - parentSet = parentGet.assign || function() { - // reset the change, or we will throw this exception on every $digest - lastValue = isolateBindingContext[scopeName] = parentGet(scope); - throw $compileMinErr('nonassign', - "Expression '{0}' used with directive '{1}' is non-assignable!", - attrs[attrName], newIsolateScopeDirective.name); - }; - lastValue = isolateBindingContext[scopeName] = parentGet(scope); - var parentValueWatch = function parentValueWatch(parentValue) { - if (!compare(parentValue, isolateBindingContext[scopeName])) { - // we are out of sync and need to copy - if (!compare(parentValue, lastValue)) { - // parent changed and it has precedence - isolateBindingContext[scopeName] = parentValue; - } else { - // if the parent can be assigned then do so - parentSet(scope, parentValue = isolateBindingContext[scopeName]); - } - } - return lastValue = parentValue; - }; - parentValueWatch.$stateful = true; - var unwatch; - if (definition.collection) { - unwatch = scope.$watchCollection(attrs[attrName], parentValueWatch); - } else { - unwatch = scope.$watch($parse(attrs[attrName], parentValueWatch), null, parentGet.literal); - } - isolateScope.$on('$destroy', unwatch); - break; - - case '&': - parentGet = $parse(attrs[attrName]); - isolateBindingContext[scopeName] = function(locals) { - return parentGet(scope, locals); - }; - break; - } - }); - } - if (controllers) { - forEach(controllers, function(controller) { - controller(); - }); - controllers = null; - } - - // PRELINKING - for (i = 0, ii = preLinkFns.length; i < ii; i++) { - linkFn = preLinkFns[i]; - invokeLinkFn(linkFn, - linkFn.isolateScope ? isolateScope : scope, - $element, - attrs, - linkFn.require && getControllers(linkFn.directiveName, linkFn.require, $element, elementControllers), - transcludeFn - ); - } - - // RECURSION - // We only pass the isolate scope, if the isolate directive has a template, - // otherwise the child elements do not belong to the isolate directive. - var scopeToChild = scope; - if (newIsolateScopeDirective && (newIsolateScopeDirective.template || newIsolateScopeDirective.templateUrl === null)) { - scopeToChild = isolateScope; - } - childLinkFn && childLinkFn(scopeToChild, linkNode.childNodes, undefined, boundTranscludeFn); - - // POSTLINKING - for (i = postLinkFns.length - 1; i >= 0; i--) { - linkFn = postLinkFns[i]; - invokeLinkFn(linkFn, - linkFn.isolateScope ? isolateScope : scope, - $element, - attrs, - linkFn.require && getControllers(linkFn.directiveName, linkFn.require, $element, elementControllers), - transcludeFn - ); - } - - // This is the function that is injected as `$transclude`. - // Note: all arguments are optional! - function controllersBoundTransclude(scope, cloneAttachFn, futureParentElement) { - var transcludeControllers; - - // No scope passed in: - if (!isScope(scope)) { - futureParentElement = cloneAttachFn; - cloneAttachFn = scope; - scope = undefined; - } - - if (hasElementTranscludeDirective) { - transcludeControllers = elementControllers; - } - if (!futureParentElement) { - futureParentElement = hasElementTranscludeDirective ? $element.parent() : $element; - } - return boundTranscludeFn(scope, cloneAttachFn, transcludeControllers, futureParentElement, scopeToChild); - } - } - } - - function markDirectivesAsIsolate(directives) { - // mark all directives as needing isolate scope. - for (var j = 0, jj = directives.length; j < jj; j++) { - directives[j] = inherit(directives[j], {$$isolateScope: true}); - } - } - - /** - * looks up the directive and decorates it with exception handling and proper parameters. We - * call this the boundDirective. - * - * @param {string} name name of the directive to look up. - * @param {string} location The directive must be found in specific format. - * String containing any of theses characters: - * - * * `E`: element name - * * `A': attribute - * * `C`: class - * * `M`: comment - * @returns {boolean} true if directive was added. - */ - function addDirective(tDirectives, name, location, maxPriority, ignoreDirective, startAttrName, - endAttrName) { - if (name === ignoreDirective) return null; - var match = null; - if (hasDirectives.hasOwnProperty(name)) { - for (var directive, directives = $injector.get(name + Suffix), - i = 0, ii = directives.length; i < ii; i++) { - try { - directive = directives[i]; - if ((maxPriority === undefined || maxPriority > directive.priority) && - directive.restrict.indexOf(location) != -1) { - if (startAttrName) { - directive = inherit(directive, {$$start: startAttrName, $$end: endAttrName}); - } - tDirectives.push(directive); - match = directive; - } - } catch (e) { $exceptionHandler(e); } - } - } - return match; - } - - - /** - * looks up the directive and returns true if it is a multi-element directive, - * and therefore requires DOM nodes between -start and -end markers to be grouped - * together. - * - * @param {string} name name of the directive to look up. - * @returns true if directive was registered as multi-element. - */ - function directiveIsMultiElement(name) { - if (hasDirectives.hasOwnProperty(name)) { - for (var directive, directives = $injector.get(name + Suffix), - i = 0, ii = directives.length; i < ii; i++) { - directive = directives[i]; - if (directive.multiElement) { - return true; - } - } - } - return false; - } - - /** - * When the element is replaced with HTML template then the new attributes - * on the template need to be merged with the existing attributes in the DOM. - * The desired effect is to have both of the attributes present. - * - * @param {object} dst destination attributes (original DOM) - * @param {object} src source attributes (from the directive template) - */ - function mergeTemplateAttributes(dst, src) { - var srcAttr = src.$attr, - dstAttr = dst.$attr, - $element = dst.$$element; - - // reapply the old attributes to the new element - forEach(dst, function(value, key) { - if (key.charAt(0) != '$') { - if (src[key] && src[key] !== value) { - value += (key === 'style' ? ';' : ' ') + src[key]; - } - dst.$set(key, value, true, srcAttr[key]); - } - }); - - // copy the new attributes on the old attrs object - forEach(src, function(value, key) { - if (key == 'class') { - safeAddClass($element, value); - dst['class'] = (dst['class'] ? dst['class'] + ' ' : '') + value; - } else if (key == 'style') { - $element.attr('style', $element.attr('style') + ';' + value); - dst['style'] = (dst['style'] ? dst['style'] + ';' : '') + value; - // `dst` will never contain hasOwnProperty as DOM parser won't let it. - // You will get an "InvalidCharacterError: DOM Exception 5" error if you - // have an attribute like "has-own-property" or "data-has-own-property", etc. - } else if (key.charAt(0) != '$' && !dst.hasOwnProperty(key)) { - dst[key] = value; - dstAttr[key] = srcAttr[key]; - } - }); - } - - - function compileTemplateUrl(directives, $compileNode, tAttrs, - $rootElement, childTranscludeFn, preLinkFns, postLinkFns, previousCompileContext) { - var linkQueue = [], - afterTemplateNodeLinkFn, - afterTemplateChildLinkFn, - beforeTemplateCompileNode = $compileNode[0], - origAsyncDirective = directives.shift(), - // The fact that we have to copy and patch the directive seems wrong! - derivedSyncDirective = extend({}, origAsyncDirective, { - templateUrl: null, transclude: null, replace: null, $$originalDirective: origAsyncDirective - }), - templateUrl = (isFunction(origAsyncDirective.templateUrl)) - ? origAsyncDirective.templateUrl($compileNode, tAttrs) - : origAsyncDirective.templateUrl, - templateNamespace = origAsyncDirective.templateNamespace; - - $compileNode.empty(); - - $templateRequest($sce.getTrustedResourceUrl(templateUrl)) - .then(function(content) { - var compileNode, tempTemplateAttrs, $template, childBoundTranscludeFn; - - content = denormalizeTemplate(content); - - if (origAsyncDirective.replace) { - if (jqLiteIsTextNode(content)) { - $template = []; - } else { - $template = removeComments(wrapTemplate(templateNamespace, trim(content))); - } - compileNode = $template[0]; - - if ($template.length != 1 || compileNode.nodeType !== NODE_TYPE_ELEMENT) { - throw $compileMinErr('tplrt', - "Template for directive '{0}' must have exactly one root element. {1}", - origAsyncDirective.name, templateUrl); - } - - tempTemplateAttrs = {$attr: {}}; - replaceWith($rootElement, $compileNode, compileNode); - var templateDirectives = collectDirectives(compileNode, [], tempTemplateAttrs); - - if (isObject(origAsyncDirective.scope)) { - markDirectivesAsIsolate(templateDirectives); - } - directives = templateDirectives.concat(directives); - mergeTemplateAttributes(tAttrs, tempTemplateAttrs); - } else { - compileNode = beforeTemplateCompileNode; - $compileNode.html(content); - } - - directives.unshift(derivedSyncDirective); - - afterTemplateNodeLinkFn = applyDirectivesToNode(directives, compileNode, tAttrs, - childTranscludeFn, $compileNode, origAsyncDirective, preLinkFns, postLinkFns, - previousCompileContext); - forEach($rootElement, function(node, i) { - if (node == compileNode) { - $rootElement[i] = $compileNode[0]; - } - }); - afterTemplateChildLinkFn = compileNodes($compileNode[0].childNodes, childTranscludeFn); - - while (linkQueue.length) { - var scope = linkQueue.shift(), - beforeTemplateLinkNode = linkQueue.shift(), - linkRootElement = linkQueue.shift(), - boundTranscludeFn = linkQueue.shift(), - linkNode = $compileNode[0]; - - if (scope.$$destroyed) continue; - - if (beforeTemplateLinkNode !== beforeTemplateCompileNode) { - var oldClasses = beforeTemplateLinkNode.className; - - if (!(previousCompileContext.hasElementTranscludeDirective && - origAsyncDirective.replace)) { - // it was cloned therefore we have to clone as well. - linkNode = jqLiteClone(compileNode); - } - replaceWith(linkRootElement, jqLite(beforeTemplateLinkNode), linkNode); - - // Copy in CSS classes from original node - safeAddClass(jqLite(linkNode), oldClasses); - } - if (afterTemplateNodeLinkFn.transcludeOnThisElement) { - childBoundTranscludeFn = createBoundTranscludeFn(scope, afterTemplateNodeLinkFn.transclude, boundTranscludeFn); - } else { - childBoundTranscludeFn = boundTranscludeFn; - } - afterTemplateNodeLinkFn(afterTemplateChildLinkFn, scope, linkNode, $rootElement, - childBoundTranscludeFn); - } - linkQueue = null; - }); - - return function delayedNodeLinkFn(ignoreChildLinkFn, scope, node, rootElement, boundTranscludeFn) { - var childBoundTranscludeFn = boundTranscludeFn; - if (scope.$$destroyed) return; - if (linkQueue) { - linkQueue.push(scope, - node, - rootElement, - childBoundTranscludeFn); - } else { - if (afterTemplateNodeLinkFn.transcludeOnThisElement) { - childBoundTranscludeFn = createBoundTranscludeFn(scope, afterTemplateNodeLinkFn.transclude, boundTranscludeFn); - } - afterTemplateNodeLinkFn(afterTemplateChildLinkFn, scope, node, rootElement, childBoundTranscludeFn); - } - }; - } - - - /** - * Sorting function for bound directives. - */ - function byPriority(a, b) { - var diff = b.priority - a.priority; - if (diff !== 0) return diff; - if (a.name !== b.name) return (a.name < b.name) ? -1 : 1; - return a.index - b.index; - } - - - function assertNoDuplicate(what, previousDirective, directive, element) { - if (previousDirective) { - throw $compileMinErr('multidir', 'Multiple directives [{0}, {1}] asking for {2} on: {3}', - previousDirective.name, directive.name, what, startingTag(element)); - } - } - - - function addTextInterpolateDirective(directives, text) { - var interpolateFn = $interpolate(text, true); - if (interpolateFn) { - directives.push({ - priority: 0, - compile: function textInterpolateCompileFn(templateNode) { - var templateNodeParent = templateNode.parent(), - hasCompileParent = !!templateNodeParent.length; - - // When transcluding a template that has bindings in the root - // we don't have a parent and thus need to add the class during linking fn. - if (hasCompileParent) compile.$$addBindingClass(templateNodeParent); - - return function textInterpolateLinkFn(scope, node) { - var parent = node.parent(); - if (!hasCompileParent) compile.$$addBindingClass(parent); - compile.$$addBindingInfo(parent, interpolateFn.expressions); - scope.$watch(interpolateFn, function interpolateFnWatchAction(value) { - node[0].nodeValue = value; - }); - }; - } - }); - } - } - - - function wrapTemplate(type, template) { - type = lowercase(type || 'html'); - switch (type) { - case 'svg': - case 'math': - var wrapper = document.createElement('div'); - wrapper.innerHTML = '<' + type + '>' + template + '</' + type + '>'; - return wrapper.childNodes[0].childNodes; - default: - return template; - } - } - - - function getTrustedContext(node, attrNormalizedName) { - if (attrNormalizedName == "srcdoc") { - return $sce.HTML; - } - var tag = nodeName_(node); - // maction[xlink:href] can source SVG. It's not limited to <maction>. - if (attrNormalizedName == "xlinkHref" || - (tag == "form" && attrNormalizedName == "action") || - (tag != "img" && (attrNormalizedName == "src" || - attrNormalizedName == "ngSrc"))) { - return $sce.RESOURCE_URL; - } - } - - - function addAttrInterpolateDirective(node, directives, value, name, allOrNothing) { - var trustedContext = getTrustedContext(node, name); - allOrNothing = ALL_OR_NOTHING_ATTRS[name] || allOrNothing; - - var interpolateFn = $interpolate(value, true, trustedContext, allOrNothing); - - // no interpolation found -> ignore - if (!interpolateFn) return; - - - if (name === "multiple" && nodeName_(node) === "select") { - throw $compileMinErr("selmulti", - "Binding to the 'multiple' attribute is not supported. Element: {0}", - startingTag(node)); - } - - directives.push({ - priority: 100, - compile: function() { - return { - pre: function attrInterpolatePreLinkFn(scope, element, attr) { - var $$observers = (attr.$$observers || (attr.$$observers = {})); - - if (EVENT_HANDLER_ATTR_REGEXP.test(name)) { - throw $compileMinErr('nodomevents', - "Interpolations for HTML DOM event attributes are disallowed. Please use the " + - "ng- versions (such as ng-click instead of onclick) instead."); - } - - // If the attribute has changed since last $interpolate()ed - var newValue = attr[name]; - if (newValue !== value) { - // we need to interpolate again since the attribute value has been updated - // (e.g. by another directive's compile function) - // ensure unset/empty values make interpolateFn falsy - interpolateFn = newValue && $interpolate(newValue, true, trustedContext, allOrNothing); - value = newValue; - } - - // if attribute was updated so that there is no interpolation going on we don't want to - // register any observers - if (!interpolateFn) return; - - // initialize attr object so that it's ready in case we need the value for isolate - // scope initialization, otherwise the value would not be available from isolate - // directive's linking fn during linking phase - attr[name] = interpolateFn(scope); - - ($$observers[name] || ($$observers[name] = [])).$$inter = true; - (attr.$$observers && attr.$$observers[name].$$scope || scope). - $watch(interpolateFn, function interpolateFnWatchAction(newValue, oldValue) { - //special case for class attribute addition + removal - //so that class changes can tap into the animation - //hooks provided by the $animate service. Be sure to - //skip animations when the first digest occurs (when - //both the new and the old values are the same) since - //the CSS classes are the non-interpolated values - if (name === 'class' && newValue != oldValue) { - attr.$updateClass(newValue, oldValue); - } else { - attr.$set(name, newValue); - } - }); - } - }; - } - }); - } - - - /** - * This is a special jqLite.replaceWith, which can replace items which - * have no parents, provided that the containing jqLite collection is provided. - * - * @param {JqLite=} $rootElement The root of the compile tree. Used so that we can replace nodes - * in the root of the tree. - * @param {JqLite} elementsToRemove The jqLite element which we are going to replace. We keep - * the shell, but replace its DOM node reference. - * @param {Node} newNode The new DOM node. - */ - function replaceWith($rootElement, elementsToRemove, newNode) { - var firstElementToRemove = elementsToRemove[0], - removeCount = elementsToRemove.length, - parent = firstElementToRemove.parentNode, - i, ii; - - if ($rootElement) { - for (i = 0, ii = $rootElement.length; i < ii; i++) { - if ($rootElement[i] == firstElementToRemove) { - $rootElement[i++] = newNode; - for (var j = i, j2 = j + removeCount - 1, - jj = $rootElement.length; - j < jj; j++, j2++) { - if (j2 < jj) { - $rootElement[j] = $rootElement[j2]; - } else { - delete $rootElement[j]; - } - } - $rootElement.length -= removeCount - 1; - - // If the replaced element is also the jQuery .context then replace it - // .context is a deprecated jQuery api, so we should set it only when jQuery set it - // http://api.jquery.com/context/ - if ($rootElement.context === firstElementToRemove) { - $rootElement.context = newNode; - } - break; - } - } - } - - if (parent) { - parent.replaceChild(newNode, firstElementToRemove); - } - - // TODO(perf): what's this document fragment for? is it needed? can we at least reuse it? - var fragment = document.createDocumentFragment(); - fragment.appendChild(firstElementToRemove); - - // Copy over user data (that includes Angular's $scope etc.). Don't copy private - // data here because there's no public interface in jQuery to do that and copying over - // event listeners (which is the main use of private data) wouldn't work anyway. - jqLite(newNode).data(jqLite(firstElementToRemove).data()); - - // Remove data of the replaced element. We cannot just call .remove() - // on the element it since that would deallocate scope that is needed - // for the new node. Instead, remove the data "manually". - if (!jQuery) { - delete jqLite.cache[firstElementToRemove[jqLite.expando]]; - } else { - // jQuery 2.x doesn't expose the data storage. Use jQuery.cleanData to clean up after - // the replaced element. The cleanData version monkey-patched by Angular would cause - // the scope to be trashed and we do need the very same scope to work with the new - // element. However, we cannot just cache the non-patched version and use it here as - // that would break if another library patches the method after Angular does (one - // example is jQuery UI). Instead, set a flag indicating scope destroying should be - // skipped this one time. - skipDestroyOnNextJQueryCleanData = true; - jQuery.cleanData([firstElementToRemove]); - } - - for (var k = 1, kk = elementsToRemove.length; k < kk; k++) { - var element = elementsToRemove[k]; - jqLite(element).remove(); // must do this way to clean up expando - fragment.appendChild(element); - delete elementsToRemove[k]; - } - - elementsToRemove[0] = newNode; - elementsToRemove.length = 1; - } - - - function cloneAndAnnotateFn(fn, annotation) { - return extend(function() { return fn.apply(null, arguments); }, fn, annotation); - } - - - function invokeLinkFn(linkFn, scope, $element, attrs, controllers, transcludeFn) { - try { - linkFn(scope, $element, attrs, controllers, transcludeFn); - } catch (e) { - $exceptionHandler(e, startingTag($element)); - } - } - }]; -} - -var PREFIX_REGEXP = /^((?:x|data)[\:\-_])/i; -/** - * Converts all accepted directives format into proper directive name. - * @param name Name to normalize - */ -function directiveNormalize(name) { - return camelCase(name.replace(PREFIX_REGEXP, '')); -} - -/** - * @ngdoc type - * @name $compile.directive.Attributes - * - * @description - * A shared object between directive compile / linking functions which contains normalized DOM - * element attributes. The values reflect current binding state `{{ }}`. The normalization is - * needed since all of these are treated as equivalent in Angular: - * - * ``` - * <span ng:bind="a" ng-bind="a" data-ng-bind="a" x-ng-bind="a"> - * ``` - */ - -/** - * @ngdoc property - * @name $compile.directive.Attributes#$attr - * - * @description - * A map of DOM element attribute names to the normalized name. This is - * needed to do reverse lookup from normalized name back to actual name. - */ - - -/** - * @ngdoc method - * @name $compile.directive.Attributes#$set - * @kind function - * - * @description - * Set DOM element attribute value. - * - * - * @param {string} name Normalized element attribute name of the property to modify. The name is - * reverse-translated using the {@link ng.$compile.directive.Attributes#$attr $attr} - * property to the original name. - * @param {string} value Value to set the attribute to. The value can be an interpolated string. - */ - - - -/** - * Closure compiler type information - */ - -function nodesetLinkingFn( - /* angular.Scope */ scope, - /* NodeList */ nodeList, - /* Element */ rootElement, - /* function(Function) */ boundTranscludeFn -) {} - -function directiveLinkingFn( - /* nodesetLinkingFn */ nodesetLinkingFn, - /* angular.Scope */ scope, - /* Node */ node, - /* Element */ rootElement, - /* function(Function) */ boundTranscludeFn -) {} - -function tokenDifference(str1, str2) { - var values = '', - tokens1 = str1.split(/\s+/), - tokens2 = str2.split(/\s+/); - - outer: - for (var i = 0; i < tokens1.length; i++) { - var token = tokens1[i]; - for (var j = 0; j < tokens2.length; j++) { - if (token == tokens2[j]) continue outer; - } - values += (values.length > 0 ? ' ' : '') + token; - } - return values; -} - -function removeComments(jqNodes) { - jqNodes = jqLite(jqNodes); - var i = jqNodes.length; - - if (i <= 1) { - return jqNodes; - } - - while (i--) { - var node = jqNodes[i]; - if (node.nodeType === NODE_TYPE_COMMENT) { - splice.call(jqNodes, i, 1); - } - } - return jqNodes; -} - -/** - * @ngdoc provider - * @name $controllerProvider - * @description - * The {@link ng.$controller $controller service} is used by Angular to create new - * controllers. - * - * This provider allows controller registration via the - * {@link ng.$controllerProvider#register register} method. - */ -function $ControllerProvider() { - var controllers = {}, - globals = false, - CNTRL_REG = /^(\S+)(\s+as\s+(\w+))?$/; - - - /** - * @ngdoc method - * @name $controllerProvider#register - * @param {string|Object} name Controller name, or an object map of controllers where the keys are - * the names and the values are the constructors. - * @param {Function|Array} constructor Controller constructor fn (optionally decorated with DI - * annotations in the array notation). - */ - this.register = function(name, constructor) { - assertNotHasOwnProperty(name, 'controller'); - if (isObject(name)) { - extend(controllers, name); - } else { - controllers[name] = constructor; - } - }; - - /** - * @ngdoc method - * @name $controllerProvider#allowGlobals - * @description If called, allows `$controller` to find controller constructors on `window` - */ - this.allowGlobals = function() { - globals = true; - }; - - - this.$get = ['$injector', '$window', function($injector, $window) { - - /** - * @ngdoc service - * @name $controller - * @requires $injector - * - * @param {Function|string} constructor If called with a function then it's considered to be the - * controller constructor function. Otherwise it's considered to be a string which is used - * to retrieve the controller constructor using the following steps: - * - * * check if a controller with given name is registered via `$controllerProvider` - * * check if evaluating the string on the current scope returns a constructor - * * if $controllerProvider#allowGlobals, check `window[constructor]` on the global - * `window` object (not recommended) - * - * The string can use the `controller as property` syntax, where the controller instance is published - * as the specified property on the `scope`; the `scope` must be injected into `locals` param for this - * to work correctly. - * - * @param {Object} locals Injection locals for Controller. - * @return {Object} Instance of given controller. - * - * @description - * `$controller` service is responsible for instantiating controllers. - * - * It's just a simple call to {@link auto.$injector $injector}, but extracted into - * a service, so that one can override this service with [BC version](https://gist.github.com/1649788). - */ - return function(expression, locals, later, ident) { - // PRIVATE API: - // param `later` --- indicates that the controller's constructor is invoked at a later time. - // If true, $controller will allocate the object with the correct - // prototype chain, but will not invoke the controller until a returned - // callback is invoked. - // param `ident` --- An optional label which overrides the label parsed from the controller - // expression, if any. - var instance, match, constructor, identifier; - later = later === true; - if (ident && isString(ident)) { - identifier = ident; - } - - if (isString(expression)) { - match = expression.match(CNTRL_REG), - constructor = match[1], - identifier = identifier || match[3]; - expression = controllers.hasOwnProperty(constructor) - ? controllers[constructor] - : getter(locals.$scope, constructor, true) || - (globals ? getter($window, constructor, true) : undefined); - - assertArgFn(expression, constructor, true); - } - - if (later) { - // Instantiate controller later: - // This machinery is used to create an instance of the object before calling the - // controller's constructor itself. - // - // This allows properties to be added to the controller before the constructor is - // invoked. Primarily, this is used for isolate scope bindings in $compile. - // - // This feature is not intended for use by applications, and is thus not documented - // publicly. - // Object creation: http://jsperf.com/create-constructor/2 - var controllerPrototype = (isArray(expression) ? - expression[expression.length - 1] : expression).prototype; - instance = Object.create(controllerPrototype || null); - - if (identifier) { - addIdentifier(locals, identifier, instance, constructor || expression.name); - } - - return extend(function() { - $injector.invoke(expression, instance, locals, constructor); - return instance; - }, { - instance: instance, - identifier: identifier - }); - } - - instance = $injector.instantiate(expression, locals, constructor); - - if (identifier) { - addIdentifier(locals, identifier, instance, constructor || expression.name); - } - - return instance; - }; - - function addIdentifier(locals, identifier, instance, name) { - if (!(locals && isObject(locals.$scope))) { - throw minErr('$controller')('noscp', - "Cannot export controller '{0}' as '{1}'! No $scope object provided via `locals`.", - name, identifier); - } - - locals.$scope[identifier] = instance; - } - }]; -} - -/** - * @ngdoc service - * @name $document - * @requires $window - * - * @description - * A {@link angular.element jQuery or jqLite} wrapper for the browser's `window.document` object. - * - * @example - <example module="documentExample"> - <file name="index.html"> - <div ng-controller="ExampleController"> - <p>$document title: <b ng-bind="title"></b></p> - <p>window.document title: <b ng-bind="windowTitle"></b></p> - </div> - </file> - <file name="script.js"> - angular.module('documentExample', []) - .controller('ExampleController', ['$scope', '$document', function($scope, $document) { - $scope.title = $document[0].title; - $scope.windowTitle = angular.element(window.document)[0].title; - }]); - </file> - </example> - */ -function $DocumentProvider() { - this.$get = ['$window', function(window) { - return jqLite(window.document); - }]; -} - -/** - * @ngdoc service - * @name $exceptionHandler - * @requires ng.$log - * - * @description - * Any uncaught exception in angular expressions is delegated to this service. - * The default implementation simply delegates to `$log.error` which logs it into - * the browser console. - * - * In unit tests, if `angular-mocks.js` is loaded, this service is overridden by - * {@link ngMock.$exceptionHandler mock $exceptionHandler} which aids in testing. - * - * ## Example: - * - * ```js - * angular.module('exceptionOverride', []).factory('$exceptionHandler', function() { - * return function(exception, cause) { - * exception.message += ' (caused by "' + cause + '")'; - * throw exception; - * }; - * }); - * ``` - * - * This example will override the normal action of `$exceptionHandler`, to make angular - * exceptions fail hard when they happen, instead of just logging to the console. - * - * <hr /> - * Note, that code executed in event-listeners (even those registered using jqLite's `on`/`bind` - * methods) does not delegate exceptions to the {@link ng.$exceptionHandler $exceptionHandler} - * (unless executed during a digest). - * - * If you wish, you can manually delegate exceptions, e.g. - * `try { ... } catch(e) { $exceptionHandler(e); }` - * - * @param {Error} exception Exception associated with the error. - * @param {string=} cause optional information about the context in which - * the error was thrown. - * - */ -function $ExceptionHandlerProvider() { - this.$get = ['$log', function($log) { - return function(exception, cause) { - $log.error.apply($log, arguments); - }; - }]; -} - -var APPLICATION_JSON = 'application/json'; -var CONTENT_TYPE_APPLICATION_JSON = {'Content-Type': APPLICATION_JSON + ';charset=utf-8'}; -var JSON_START = /^\[|^\{(?!\{)/; -var JSON_ENDS = { - '[': /]$/, - '{': /}$/ -}; -var JSON_PROTECTION_PREFIX = /^\)\]\}',?\n/; - -function defaultHttpResponseTransform(data, headers) { - if (isString(data)) { - // Strip json vulnerability protection prefix and trim whitespace - var tempData = data.replace(JSON_PROTECTION_PREFIX, '').trim(); - - if (tempData) { - var contentType = headers('Content-Type'); - if ((contentType && (contentType.indexOf(APPLICATION_JSON) === 0)) || isJsonLike(tempData)) { - data = fromJson(tempData); - } - } - } - - return data; -} - -function isJsonLike(str) { - var jsonStart = str.match(JSON_START); - return jsonStart && JSON_ENDS[jsonStart[0]].test(str); -} - -/** - * Parse headers into key value object - * - * @param {string} headers Raw headers as a string - * @returns {Object} Parsed headers as key value object - */ -function parseHeaders(headers) { - var parsed = createMap(), key, val, i; - - if (!headers) return parsed; - - forEach(headers.split('\n'), function(line) { - i = line.indexOf(':'); - key = lowercase(trim(line.substr(0, i))); - val = trim(line.substr(i + 1)); - - if (key) { - parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val; - } - }); - - return parsed; -} - - -/** - * Returns a function that provides access to parsed headers. - * - * Headers are lazy parsed when first requested. - * @see parseHeaders - * - * @param {(string|Object)} headers Headers to provide access to. - * @returns {function(string=)} Returns a getter function which if called with: - * - * - if called with single an argument returns a single header value or null - * - if called with no arguments returns an object containing all headers. - */ -function headersGetter(headers) { - var headersObj = isObject(headers) ? headers : undefined; - - return function(name) { - if (!headersObj) headersObj = parseHeaders(headers); - - if (name) { - var value = headersObj[lowercase(name)]; - if (value === void 0) { - value = null; - } - return value; - } - - return headersObj; - }; -} - - -/** - * Chain all given functions - * - * This function is used for both request and response transforming - * - * @param {*} data Data to transform. - * @param {function(string=)} headers HTTP headers getter fn. - * @param {number} status HTTP status code of the response. - * @param {(Function|Array.<Function>)} fns Function or an array of functions. - * @returns {*} Transformed data. - */ -function transformData(data, headers, status, fns) { - if (isFunction(fns)) - return fns(data, headers, status); - - forEach(fns, function(fn) { - data = fn(data, headers, status); - }); - - return data; -} - - -function isSuccess(status) { - return 200 <= status && status < 300; -} - - -/** - * @ngdoc provider - * @name $httpProvider - * @description - * Use `$httpProvider` to change the default behavior of the {@link ng.$http $http} service. - * */ -function $HttpProvider() { - /** - * @ngdoc property - * @name $httpProvider#defaults - * @description - * - * Object containing default values for all {@link ng.$http $http} requests. - * - * - **`defaults.cache`** - {Object} - an object built with {@link ng.$cacheFactory `$cacheFactory`} - * that will provide the cache for all requests who set their `cache` property to `true`. - * If you set the `default.cache = false` then only requests that specify their own custom - * cache object will be cached. See {@link $http#caching $http Caching} for more information. - * - * - **`defaults.xsrfCookieName`** - {string} - Name of cookie containing the XSRF token. - * Defaults value is `'XSRF-TOKEN'`. - * - * - **`defaults.xsrfHeaderName`** - {string} - Name of HTTP header to populate with the - * XSRF token. Defaults value is `'X-XSRF-TOKEN'`. - * - * - **`defaults.headers`** - {Object} - Default headers for all $http requests. - * Refer to {@link ng.$http#setting-http-headers $http} for documentation on - * setting default headers. - * - **`defaults.headers.common`** - * - **`defaults.headers.post`** - * - **`defaults.headers.put`** - * - **`defaults.headers.patch`** - * - **/ - var defaults = this.defaults = { - // transform incoming response data - transformResponse: [defaultHttpResponseTransform], - - // transform outgoing request data - transformRequest: [function(d) { - return isObject(d) && !isFile(d) && !isBlob(d) && !isFormData(d) ? toJson(d) : d; - }], - - // default headers - headers: { - common: { - 'Accept': 'application/json, text/plain, */*' - }, - post: shallowCopy(CONTENT_TYPE_APPLICATION_JSON), - put: shallowCopy(CONTENT_TYPE_APPLICATION_JSON), - patch: shallowCopy(CONTENT_TYPE_APPLICATION_JSON) - }, - - xsrfCookieName: 'XSRF-TOKEN', - xsrfHeaderName: 'X-XSRF-TOKEN' - }; - - var useApplyAsync = false; - /** - * @ngdoc method - * @name $httpProvider#useApplyAsync - * @description - * - * Configure $http service to combine processing of multiple http responses received at around - * the same time via {@link ng.$rootScope.Scope#$applyAsync $rootScope.$applyAsync}. This can result in - * significant performance improvement for bigger applications that make many HTTP requests - * concurrently (common during application bootstrap). - * - * Defaults to false. If no value is specifed, returns the current configured value. - * - * @param {boolean=} value If true, when requests are loaded, they will schedule a deferred - * "apply" on the next tick, giving time for subsequent requests in a roughly ~10ms window - * to load and share the same digest cycle. - * - * @returns {boolean|Object} If a value is specified, returns the $httpProvider for chaining. - * otherwise, returns the current configured value. - **/ - this.useApplyAsync = function(value) { - if (isDefined(value)) { - useApplyAsync = !!value; - return this; - } - return useApplyAsync; - }; - - /** - * @ngdoc property - * @name $httpProvider#interceptors - * @description - * - * Array containing service factories for all synchronous or asynchronous {@link ng.$http $http} - * pre-processing of request or postprocessing of responses. - * - * These service factories are ordered by request, i.e. they are applied in the same order as the - * array, on request, but reverse order, on response. - * - * {@link ng.$http#interceptors Interceptors detailed info} - **/ - var interceptorFactories = this.interceptors = []; - - this.$get = ['$httpBackend', '$browser', '$cacheFactory', '$rootScope', '$q', '$injector', - function($httpBackend, $browser, $cacheFactory, $rootScope, $q, $injector) { - - var defaultCache = $cacheFactory('$http'); - - /** - * Interceptors stored in reverse order. Inner interceptors before outer interceptors. - * The reversal is needed so that we can build up the interception chain around the - * server request. - */ - var reversedInterceptors = []; - - forEach(interceptorFactories, function(interceptorFactory) { - reversedInterceptors.unshift(isString(interceptorFactory) - ? $injector.get(interceptorFactory) : $injector.invoke(interceptorFactory)); - }); - - /** - * @ngdoc service - * @kind function - * @name $http - * @requires ng.$httpBackend - * @requires $cacheFactory - * @requires $rootScope - * @requires $q - * @requires $injector - * - * @description - * The `$http` service is a core Angular service that facilitates communication with the remote - * HTTP servers via the browser's [XMLHttpRequest](https://developer.mozilla.org/en/xmlhttprequest) - * object or via [JSONP](http://en.wikipedia.org/wiki/JSONP). - * - * For unit testing applications that use `$http` service, see - * {@link ngMock.$httpBackend $httpBackend mock}. - * - * For a higher level of abstraction, please check out the {@link ngResource.$resource - * $resource} service. - * - * The $http API is based on the {@link ng.$q deferred/promise APIs} exposed by - * the $q service. While for simple usage patterns this doesn't matter much, for advanced usage - * it is important to familiarize yourself with these APIs and the guarantees they provide. - * - * - * ## General usage - * The `$http` service is a function which takes a single argument — a configuration object — - * that is used to generate an HTTP request and returns a {@link ng.$q promise} - * with two $http specific methods: `success` and `error`. - * - * ```js - * // Simple GET request example : - * $http.get('/someUrl'). - * success(function(data, status, headers, config) { - * // this callback will be called asynchronously - * // when the response is available - * }). - * error(function(data, status, headers, config) { - * // called asynchronously if an error occurs - * // or server returns response with an error status. - * }); - * ``` - * - * ```js - * // Simple POST request example (passing data) : - * $http.post('/someUrl', {msg:'hello word!'}). - * success(function(data, status, headers, config) { - * // this callback will be called asynchronously - * // when the response is available - * }). - * error(function(data, status, headers, config) { - * // called asynchronously if an error occurs - * // or server returns response with an error status. - * }); - * ``` - * - * - * Since the returned value of calling the $http function is a `promise`, you can also use - * the `then` method to register callbacks, and these callbacks will receive a single argument – - * an object representing the response. See the API signature and type info below for more - * details. - * - * A response status code between 200 and 299 is considered a success status and - * will result in the success callback being called. Note that if the response is a redirect, - * XMLHttpRequest will transparently follow it, meaning that the error callback will not be - * called for such responses. - * - * ## Writing Unit Tests that use $http - * When unit testing (using {@link ngMock ngMock}), it is necessary to call - * {@link ngMock.$httpBackend#flush $httpBackend.flush()} to flush each pending - * request using trained responses. - * - * ``` - * $httpBackend.expectGET(...); - * $http.get(...); - * $httpBackend.flush(); - * ``` - * - * ## Shortcut methods - * - * Shortcut methods are also available. All shortcut methods require passing in the URL, and - * request data must be passed in for POST/PUT requests. - * - * ```js - * $http.get('/someUrl').success(successCallback); - * $http.post('/someUrl', data).success(successCallback); - * ``` - * - * Complete list of shortcut methods: - * - * - {@link ng.$http#get $http.get} - * - {@link ng.$http#head $http.head} - * - {@link ng.$http#post $http.post} - * - {@link ng.$http#put $http.put} - * - {@link ng.$http#delete $http.delete} - * - {@link ng.$http#jsonp $http.jsonp} - * - {@link ng.$http#patch $http.patch} - * - * - * ## Setting HTTP Headers - * - * The $http service will automatically add certain HTTP headers to all requests. These defaults - * can be fully configured by accessing the `$httpProvider.defaults.headers` configuration - * object, which currently contains this default configuration: - * - * - `$httpProvider.defaults.headers.common` (headers that are common for all requests): - * - `Accept: application/json, text/plain, * / *` - * - `$httpProvider.defaults.headers.post`: (header defaults for POST requests) - * - `Content-Type: application/json` - * - `$httpProvider.defaults.headers.put` (header defaults for PUT requests) - * - `Content-Type: application/json` - * - * To add or overwrite these defaults, simply add or remove a property from these configuration - * objects. To add headers for an HTTP method other than POST or PUT, simply add a new object - * with the lowercased HTTP method name as the key, e.g. - * `$httpProvider.defaults.headers.get = { 'My-Header' : 'value' }. - * - * The defaults can also be set at runtime via the `$http.defaults` object in the same - * fashion. For example: - * - * ``` - * module.run(function($http) { - * $http.defaults.headers.common.Authorization = 'Basic YmVlcDpib29w' - * }); - * ``` - * - * In addition, you can supply a `headers` property in the config object passed when - * calling `$http(config)`, which overrides the defaults without changing them globally. - * - * To explicitly remove a header automatically added via $httpProvider.defaults.headers on a per request basis, - * Use the `headers` property, setting the desired header to `undefined`. For example: - * - * ```js - * var req = { - * method: 'POST', - * url: 'http://example.com', - * headers: { - * 'Content-Type': undefined - * }, - * data: { test: 'test' }, - * } - * - * $http(req).success(function(){...}).error(function(){...}); - * ``` - * - * ## Transforming Requests and Responses - * - * Both requests and responses can be transformed using transformation functions: `transformRequest` - * and `transformResponse`. These properties can be a single function that returns - * the transformed value (`function(data, headersGetter, status)`) or an array of such transformation functions, - * which allows you to `push` or `unshift` a new transformation function into the transformation chain. - * - * ### Default Transformations - * - * The `$httpProvider` provider and `$http` service expose `defaults.transformRequest` and - * `defaults.transformResponse` properties. If a request does not provide its own transformations - * then these will be applied. - * - * You can augment or replace the default transformations by modifying these properties by adding to or - * replacing the array. - * - * Angular provides the following default transformations: - * - * Request transformations (`$httpProvider.defaults.transformRequest` and `$http.defaults.transformRequest`): - * - * - If the `data` property of the request configuration object contains an object, serialize it - * into JSON format. - * - * Response transformations (`$httpProvider.defaults.transformResponse` and `$http.defaults.transformResponse`): - * - * - If XSRF prefix is detected, strip it (see Security Considerations section below). - * - If JSON response is detected, deserialize it using a JSON parser. - * - * - * ### Overriding the Default Transformations Per Request - * - * If you wish override the request/response transformations only for a single request then provide - * `transformRequest` and/or `transformResponse` properties on the configuration object passed - * into `$http`. - * - * Note that if you provide these properties on the config object the default transformations will be - * overwritten. If you wish to augment the default transformations then you must include them in your - * local transformation array. - * - * The following code demonstrates adding a new response transformation to be run after the default response - * transformations have been run. - * - * ```js - * function appendTransform(defaults, transform) { - * - * // We can't guarantee that the default transformation is an array - * defaults = angular.isArray(defaults) ? defaults : [defaults]; - * - * // Append the new transformation to the defaults - * return defaults.concat(transform); - * } - * - * $http({ - * url: '...', - * method: 'GET', - * transformResponse: appendTransform($http.defaults.transformResponse, function(value) { - * return doTransform(value); - * }) - * }); - * ``` - * - * - * ## Caching - * - * To enable caching, set the request configuration `cache` property to `true` (to use default - * cache) or to a custom cache object (built with {@link ng.$cacheFactory `$cacheFactory`}). - * When the cache is enabled, `$http` stores the response from the server in the specified - * cache. The next time the same request is made, the response is served from the cache without - * sending a request to the server. - * - * Note that even if the response is served from cache, delivery of the data is asynchronous in - * the same way that real requests are. - * - * If there are multiple GET requests for the same URL that should be cached using the same - * cache, but the cache is not populated yet, only one request to the server will be made and - * the remaining requests will be fulfilled using the response from the first request. - * - * You can change the default cache to a new object (built with - * {@link ng.$cacheFactory `$cacheFactory`}) by updating the - * {@link ng.$http#defaults `$http.defaults.cache`} property. All requests who set - * their `cache` property to `true` will now use this cache object. - * - * If you set the default cache to `false` then only requests that specify their own custom - * cache object will be cached. - * - * ## Interceptors - * - * Before you start creating interceptors, be sure to understand the - * {@link ng.$q $q and deferred/promise APIs}. - * - * For purposes of global error handling, authentication, or any kind of synchronous or - * asynchronous pre-processing of request or postprocessing of responses, it is desirable to be - * able to intercept requests before they are handed to the server and - * responses before they are handed over to the application code that - * initiated these requests. The interceptors leverage the {@link ng.$q - * promise APIs} to fulfill this need for both synchronous and asynchronous pre-processing. - * - * The interceptors are service factories that are registered with the `$httpProvider` by - * adding them to the `$httpProvider.interceptors` array. The factory is called and - * injected with dependencies (if specified) and returns the interceptor. - * - * There are two kinds of interceptors (and two kinds of rejection interceptors): - * - * * `request`: interceptors get called with a http `config` object. The function is free to - * modify the `config` object or create a new one. The function needs to return the `config` - * object directly, or a promise containing the `config` or a new `config` object. - * * `requestError`: interceptor gets called when a previous interceptor threw an error or - * resolved with a rejection. - * * `response`: interceptors get called with http `response` object. The function is free to - * modify the `response` object or create a new one. The function needs to return the `response` - * object directly, or as a promise containing the `response` or a new `response` object. - * * `responseError`: interceptor gets called when a previous interceptor threw an error or - * resolved with a rejection. - * - * - * ```js - * // register the interceptor as a service - * $provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) { - * return { - * // optional method - * 'request': function(config) { - * // do something on success - * return config; - * }, - * - * // optional method - * 'requestError': function(rejection) { - * // do something on error - * if (canRecover(rejection)) { - * return responseOrNewPromise - * } - * return $q.reject(rejection); - * }, - * - * - * - * // optional method - * 'response': function(response) { - * // do something on success - * return response; - * }, - * - * // optional method - * 'responseError': function(rejection) { - * // do something on error - * if (canRecover(rejection)) { - * return responseOrNewPromise - * } - * return $q.reject(rejection); - * } - * }; - * }); - * - * $httpProvider.interceptors.push('myHttpInterceptor'); - * - * - * // alternatively, register the interceptor via an anonymous factory - * $httpProvider.interceptors.push(function($q, dependency1, dependency2) { - * return { - * 'request': function(config) { - * // same as above - * }, - * - * 'response': function(response) { - * // same as above - * } - * }; - * }); - * ``` - * - * ## Security Considerations - * - * When designing web applications, consider security threats from: - * - * - [JSON vulnerability](http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx) - * - [XSRF](http://en.wikipedia.org/wiki/Cross-site_request_forgery) - * - * Both server and the client must cooperate in order to eliminate these threats. Angular comes - * pre-configured with strategies that address these issues, but for this to work backend server - * cooperation is required. - * - * ### JSON Vulnerability Protection - * - * A [JSON vulnerability](http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx) - * allows third party website to turn your JSON resource URL into - * [JSONP](http://en.wikipedia.org/wiki/JSONP) request under some conditions. To - * counter this your server can prefix all JSON requests with following string `")]}',\n"`. - * Angular will automatically strip the prefix before processing it as JSON. - * - * For example if your server needs to return: - * ```js - * ['one','two'] - * ``` - * - * which is vulnerable to attack, your server can return: - * ```js - * )]}', - * ['one','two'] - * ``` - * - * Angular will strip the prefix, before processing the JSON. - * - * - * ### Cross Site Request Forgery (XSRF) Protection - * - * [XSRF](http://en.wikipedia.org/wiki/Cross-site_request_forgery) is a technique by which - * an unauthorized site can gain your user's private data. Angular provides a mechanism - * to counter XSRF. When performing XHR requests, the $http service reads a token from a cookie - * (by default, `XSRF-TOKEN`) and sets it as an HTTP header (`X-XSRF-TOKEN`). Since only - * JavaScript that runs on your domain could read the cookie, your server can be assured that - * the XHR came from JavaScript running on your domain. The header will not be set for - * cross-domain requests. - * - * To take advantage of this, your server needs to set a token in a JavaScript readable session - * cookie called `XSRF-TOKEN` on the first HTTP GET request. On subsequent XHR requests the - * server can verify that the cookie matches `X-XSRF-TOKEN` HTTP header, and therefore be sure - * that only JavaScript running on your domain could have sent the request. The token must be - * unique for each user and must be verifiable by the server (to prevent the JavaScript from - * making up its own tokens). We recommend that the token is a digest of your site's - * authentication cookie with a [salt](https://en.wikipedia.org/wiki/Salt_(cryptography)) - * for added security. - * - * The name of the headers can be specified using the xsrfHeaderName and xsrfCookieName - * properties of either $httpProvider.defaults at config-time, $http.defaults at run-time, - * or the per-request config object. - * - * - * @param {object} config Object describing the request to be made and how it should be - * processed. The object has following properties: - * - * - **method** – `{string}` – HTTP method (e.g. 'GET', 'POST', etc) - * - **url** – `{string}` – Absolute or relative URL of the resource that is being requested. - * - **params** – `{Object.<string|Object>}` – Map of strings or objects which will be turned - * to `?key1=value1&key2=value2` after the url. If the value is not a string, it will be - * JSONified. - * - **data** – `{string|Object}` – Data to be sent as the request message data. - * - **headers** – `{Object}` – Map of strings or functions which return strings representing - * HTTP headers to send to the server. If the return value of a function is null, the - * header will not be sent. - * - **xsrfHeaderName** – `{string}` – Name of HTTP header to populate with the XSRF token. - * - **xsrfCookieName** – `{string}` – Name of cookie containing the XSRF token. - * - **transformRequest** – - * `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` – - * transform function or an array of such functions. The transform function takes the http - * request body and headers and returns its transformed (typically serialized) version. - * See {@link ng.$http#overriding-the-default-transformations-per-request - * Overriding the Default Transformations} - * - **transformResponse** – - * `{function(data, headersGetter, status)|Array.<function(data, headersGetter, status)>}` – - * transform function or an array of such functions. The transform function takes the http - * response body, headers and status and returns its transformed (typically deserialized) version. - * See {@link ng.$http#overriding-the-default-transformations-per-request - * Overriding the Default Transformations} - * - **cache** – `{boolean|Cache}` – If true, a default $http cache will be used to cache the - * GET request, otherwise if a cache instance built with - * {@link ng.$cacheFactory $cacheFactory}, this cache will be used for - * caching. - * - **timeout** – `{number|Promise}` – timeout in milliseconds, or {@link ng.$q promise} - * that should abort the request when resolved. - * - **withCredentials** - `{boolean}` - whether to set the `withCredentials` flag on the - * XHR object. See [requests with credentials](https://developer.mozilla.org/docs/Web/HTTP/Access_control_CORS#Requests_with_credentials) - * for more information. - * - **responseType** - `{string}` - see - * [requestType](https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#responseType). - * - * @returns {HttpPromise} Returns a {@link ng.$q promise} object with the - * standard `then` method and two http specific methods: `success` and `error`. The `then` - * method takes two arguments a success and an error callback which will be called with a - * response object. The `success` and `error` methods take a single argument - a function that - * will be called when the request succeeds or fails respectively. The arguments passed into - * these functions are destructured representation of the response object passed into the - * `then` method. The response object has these properties: - * - * - **data** – `{string|Object}` – The response body transformed with the transform - * functions. - * - **status** – `{number}` – HTTP status code of the response. - * - **headers** – `{function([headerName])}` – Header getter function. - * - **config** – `{Object}` – The configuration object that was used to generate the request. - * - **statusText** – `{string}` – HTTP status text of the response. - * - * @property {Array.<Object>} pendingRequests Array of config objects for currently pending - * requests. This is primarily meant to be used for debugging purposes. - * - * - * @example -<example module="httpExample"> -<file name="index.html"> - <div ng-controller="FetchController"> - <select ng-model="method"> - <option>GET</option> - <option>JSONP</option> - </select> - <input type="text" ng-model="url" size="80"/> - <button id="fetchbtn" ng-click="fetch()">fetch</button><br> - <button id="samplegetbtn" ng-click="updateModel('GET', 'http-hello.html')">Sample GET</button> - <button id="samplejsonpbtn" - ng-click="updateModel('JSONP', - 'https://angularjs.org/greet.php?callback=JSON_CALLBACK&name=Super%20Hero')"> - Sample JSONP - </button> - <button id="invalidjsonpbtn" - ng-click="updateModel('JSONP', 'https://angularjs.org/doesntexist&callback=JSON_CALLBACK')"> - Invalid JSONP - </button> - <pre>http status code: {{status}}</pre> - <pre>http response data: {{data}}</pre> - </div> -</file> -<file name="script.js"> - angular.module('httpExample', []) - .controller('FetchController', ['$scope', '$http', '$templateCache', - function($scope, $http, $templateCache) { - $scope.method = 'GET'; - $scope.url = 'http-hello.html'; - - $scope.fetch = function() { - $scope.code = null; - $scope.response = null; - - $http({method: $scope.method, url: $scope.url, cache: $templateCache}). - success(function(data, status) { - $scope.status = status; - $scope.data = data; - }). - error(function(data, status) { - $scope.data = data || "Request failed"; - $scope.status = status; - }); - }; - - $scope.updateModel = function(method, url) { - $scope.method = method; - $scope.url = url; - }; - }]); -</file> -<file name="http-hello.html"> - Hello, $http! -</file> -<file name="protractor.js" type="protractor"> - var status = element(by.binding('status')); - var data = element(by.binding('data')); - var fetchBtn = element(by.id('fetchbtn')); - var sampleGetBtn = element(by.id('samplegetbtn')); - var sampleJsonpBtn = element(by.id('samplejsonpbtn')); - var invalidJsonpBtn = element(by.id('invalidjsonpbtn')); - - it('should make an xhr GET request', function() { - sampleGetBtn.click(); - fetchBtn.click(); - expect(status.getText()).toMatch('200'); - expect(data.getText()).toMatch(/Hello, \$http!/); - }); - -// Commented out due to flakes. See https://github.com/angular/angular.js/issues/9185 -// it('should make a JSONP request to angularjs.org', function() { -// sampleJsonpBtn.click(); -// fetchBtn.click(); -// expect(status.getText()).toMatch('200'); -// expect(data.getText()).toMatch(/Super Hero!/); -// }); - - it('should make JSONP request to invalid URL and invoke the error handler', - function() { - invalidJsonpBtn.click(); - fetchBtn.click(); - expect(status.getText()).toMatch('0'); - expect(data.getText()).toMatch('Request failed'); - }); -</file> -</example> - */ - function $http(requestConfig) { - - if (!angular.isObject(requestConfig)) { - throw minErr('$http')('badreq', 'Http request configuration must be an object. Received: {0}', requestConfig); - } - - var config = extend({ - method: 'get', - transformRequest: defaults.transformRequest, - transformResponse: defaults.transformResponse - }, requestConfig); - - config.headers = mergeHeaders(requestConfig); - config.method = uppercase(config.method); - - var serverRequest = function(config) { - var headers = config.headers; - var reqData = transformData(config.data, headersGetter(headers), undefined, config.transformRequest); - - // strip content-type if data is undefined - if (isUndefined(reqData)) { - forEach(headers, function(value, header) { - if (lowercase(header) === 'content-type') { - delete headers[header]; - } - }); - } - - if (isUndefined(config.withCredentials) && !isUndefined(defaults.withCredentials)) { - config.withCredentials = defaults.withCredentials; - } - - // send request - return sendReq(config, reqData).then(transformResponse, transformResponse); - }; - - var chain = [serverRequest, undefined]; - var promise = $q.when(config); - - // apply interceptors - forEach(reversedInterceptors, function(interceptor) { - if (interceptor.request || interceptor.requestError) { - chain.unshift(interceptor.request, interceptor.requestError); - } - if (interceptor.response || interceptor.responseError) { - chain.push(interceptor.response, interceptor.responseError); - } - }); - - while (chain.length) { - var thenFn = chain.shift(); - var rejectFn = chain.shift(); - - promise = promise.then(thenFn, rejectFn); - } - - promise.success = function(fn) { - promise.then(function(response) { - fn(response.data, response.status, response.headers, config); - }); - return promise; - }; - - promise.error = function(fn) { - promise.then(null, function(response) { - fn(response.data, response.status, response.headers, config); - }); - return promise; - }; - - return promise; - - function transformResponse(response) { - // make a copy since the response must be cacheable - var resp = extend({}, response); - if (!response.data) { - resp.data = response.data; - } else { - resp.data = transformData(response.data, response.headers, response.status, config.transformResponse); - } - return (isSuccess(response.status)) - ? resp - : $q.reject(resp); - } - - function executeHeaderFns(headers) { - var headerContent, processedHeaders = {}; - - forEach(headers, function(headerFn, header) { - if (isFunction(headerFn)) { - headerContent = headerFn(); - if (headerContent != null) { - processedHeaders[header] = headerContent; - } - } else { - processedHeaders[header] = headerFn; - } - }); - - return processedHeaders; - } - - function mergeHeaders(config) { - var defHeaders = defaults.headers, - reqHeaders = extend({}, config.headers), - defHeaderName, lowercaseDefHeaderName, reqHeaderName; - - defHeaders = extend({}, defHeaders.common, defHeaders[lowercase(config.method)]); - - // using for-in instead of forEach to avoid unecessary iteration after header has been found - defaultHeadersIteration: - for (defHeaderName in defHeaders) { - lowercaseDefHeaderName = lowercase(defHeaderName); - - for (reqHeaderName in reqHeaders) { - if (lowercase(reqHeaderName) === lowercaseDefHeaderName) { - continue defaultHeadersIteration; - } - } - - reqHeaders[defHeaderName] = defHeaders[defHeaderName]; - } - - // execute if header value is a function for merged headers - return executeHeaderFns(reqHeaders); - } - } - - $http.pendingRequests = []; - - /** - * @ngdoc method - * @name $http#get - * - * @description - * Shortcut method to perform `GET` request. - * - * @param {string} url Relative or absolute URL specifying the destination of the request - * @param {Object=} config Optional configuration object - * @returns {HttpPromise} Future object - */ - - /** - * @ngdoc method - * @name $http#delete - * - * @description - * Shortcut method to perform `DELETE` request. - * - * @param {string} url Relative or absolute URL specifying the destination of the request - * @param {Object=} config Optional configuration object - * @returns {HttpPromise} Future object - */ - - /** - * @ngdoc method - * @name $http#head - * - * @description - * Shortcut method to perform `HEAD` request. - * - * @param {string} url Relative or absolute URL specifying the destination of the request - * @param {Object=} config Optional configuration object - * @returns {HttpPromise} Future object - */ - - /** - * @ngdoc method - * @name $http#jsonp - * - * @description - * Shortcut method to perform `JSONP` request. - * - * @param {string} url Relative or absolute URL specifying the destination of the request. - * The name of the callback should be the string `JSON_CALLBACK`. - * @param {Object=} config Optional configuration object - * @returns {HttpPromise} Future object - */ - createShortMethods('get', 'delete', 'head', 'jsonp'); - - /** - * @ngdoc method - * @name $http#post - * - * @description - * Shortcut method to perform `POST` request. - * - * @param {string} url Relative or absolute URL specifying the destination of the request - * @param {*} data Request content - * @param {Object=} config Optional configuration object - * @returns {HttpPromise} Future object - */ - - /** - * @ngdoc method - * @name $http#put - * - * @description - * Shortcut method to perform `PUT` request. - * - * @param {string} url Relative or absolute URL specifying the destination of the request - * @param {*} data Request content - * @param {Object=} config Optional configuration object - * @returns {HttpPromise} Future object - */ - - /** - * @ngdoc method - * @name $http#patch - * - * @description - * Shortcut method to perform `PATCH` request. - * - * @param {string} url Relative or absolute URL specifying the destination of the request - * @param {*} data Request content - * @param {Object=} config Optional configuration object - * @returns {HttpPromise} Future object - */ - createShortMethodsWithData('post', 'put', 'patch'); - - /** - * @ngdoc property - * @name $http#defaults - * - * @description - * Runtime equivalent of the `$httpProvider.defaults` property. Allows configuration of - * default headers, withCredentials as well as request and response transformations. - * - * See "Setting HTTP Headers" and "Transforming Requests and Responses" sections above. - */ - $http.defaults = defaults; - - - return $http; - - - function createShortMethods(names) { - forEach(arguments, function(name) { - $http[name] = function(url, config) { - return $http(extend(config || {}, { - method: name, - url: url - })); - }; - }); - } - - - function createShortMethodsWithData(name) { - forEach(arguments, function(name) { - $http[name] = function(url, data, config) { - return $http(extend(config || {}, { - method: name, - url: url, - data: data - })); - }; - }); - } - - - /** - * Makes the request. - * - * !!! ACCESSES CLOSURE VARS: - * $httpBackend, defaults, $log, $rootScope, defaultCache, $http.pendingRequests - */ - function sendReq(config, reqData) { - var deferred = $q.defer(), - promise = deferred.promise, - cache, - cachedResp, - reqHeaders = config.headers, - url = buildUrl(config.url, config.params); - - $http.pendingRequests.push(config); - promise.then(removePendingReq, removePendingReq); - - - if ((config.cache || defaults.cache) && config.cache !== false && - (config.method === 'GET' || config.method === 'JSONP')) { - cache = isObject(config.cache) ? config.cache - : isObject(defaults.cache) ? defaults.cache - : defaultCache; - } - - if (cache) { - cachedResp = cache.get(url); - if (isDefined(cachedResp)) { - if (isPromiseLike(cachedResp)) { - // cached request has already been sent, but there is no response yet - cachedResp.then(resolvePromiseWithResult, resolvePromiseWithResult); - } else { - // serving from cache - if (isArray(cachedResp)) { - resolvePromise(cachedResp[1], cachedResp[0], shallowCopy(cachedResp[2]), cachedResp[3]); - } else { - resolvePromise(cachedResp, 200, {}, 'OK'); - } - } - } else { - // put the promise for the non-transformed response into cache as a placeholder - cache.put(url, promise); - } - } - - - // if we won't have the response in cache, set the xsrf headers and - // send the request to the backend - if (isUndefined(cachedResp)) { - var xsrfValue = urlIsSameOrigin(config.url) - ? $browser.cookies()[config.xsrfCookieName || defaults.xsrfCookieName] - : undefined; - if (xsrfValue) { - reqHeaders[(config.xsrfHeaderName || defaults.xsrfHeaderName)] = xsrfValue; - } - - $httpBackend(config.method, url, reqData, done, reqHeaders, config.timeout, - config.withCredentials, config.responseType); - } - - return promise; - - - /** - * Callback registered to $httpBackend(): - * - caches the response if desired - * - resolves the raw $http promise - * - calls $apply - */ - function done(status, response, headersString, statusText) { - if (cache) { - if (isSuccess(status)) { - cache.put(url, [status, response, parseHeaders(headersString), statusText]); - } else { - // remove promise from the cache - cache.remove(url); - } - } - - function resolveHttpPromise() { - resolvePromise(response, status, headersString, statusText); - } - - if (useApplyAsync) { - $rootScope.$applyAsync(resolveHttpPromise); - } else { - resolveHttpPromise(); - if (!$rootScope.$$phase) $rootScope.$apply(); - } - } - - - /** - * Resolves the raw $http promise. - */ - function resolvePromise(response, status, headers, statusText) { - // normalize internal statuses to 0 - status = Math.max(status, 0); - - (isSuccess(status) ? deferred.resolve : deferred.reject)({ - data: response, - status: status, - headers: headersGetter(headers), - config: config, - statusText: statusText - }); - } - - function resolvePromiseWithResult(result) { - resolvePromise(result.data, result.status, shallowCopy(result.headers()), result.statusText); - } - - function removePendingReq() { - var idx = $http.pendingRequests.indexOf(config); - if (idx !== -1) $http.pendingRequests.splice(idx, 1); - } - } - - - function buildUrl(url, params) { - if (!params) return url; - var parts = []; - forEachSorted(params, function(value, key) { - if (value === null || isUndefined(value)) return; - if (!isArray(value)) value = [value]; - - forEach(value, function(v) { - if (isObject(v)) { - if (isDate(v)) { - v = v.toISOString(); - } else { - v = toJson(v); - } - } - parts.push(encodeUriQuery(key) + '=' + - encodeUriQuery(v)); - }); - }); - if (parts.length > 0) { - url += ((url.indexOf('?') == -1) ? '?' : '&') + parts.join('&'); - } - return url; - } - }]; -} - -function createXhr() { - return new window.XMLHttpRequest(); -} - -/** - * @ngdoc service - * @name $httpBackend - * @requires $window - * @requires $document - * - * @description - * HTTP backend used by the {@link ng.$http service} that delegates to - * XMLHttpRequest object or JSONP and deals with browser incompatibilities. - * - * You should never need to use this service directly, instead use the higher-level abstractions: - * {@link ng.$http $http} or {@link ngResource.$resource $resource}. - * - * During testing this implementation is swapped with {@link ngMock.$httpBackend mock - * $httpBackend} which can be trained with responses. - */ -function $HttpBackendProvider() { - this.$get = ['$browser', '$window', '$document', function($browser, $window, $document) { - return createHttpBackend($browser, createXhr, $browser.defer, $window.angular.callbacks, $document[0]); - }]; -} - -function createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDocument) { - // TODO(vojta): fix the signature - return function(method, url, post, callback, headers, timeout, withCredentials, responseType) { - $browser.$$incOutstandingRequestCount(); - url = url || $browser.url(); - - if (lowercase(method) == 'jsonp') { - var callbackId = '_' + (callbacks.counter++).toString(36); - callbacks[callbackId] = function(data) { - callbacks[callbackId].data = data; - callbacks[callbackId].called = true; - }; - - var jsonpDone = jsonpReq(url.replace('JSON_CALLBACK', 'angular.callbacks.' + callbackId), - callbackId, function(status, text) { - completeRequest(callback, status, callbacks[callbackId].data, "", text); - callbacks[callbackId] = noop; - }); - } else { - - var xhr = createXhr(); - - xhr.open(method, url, true); - forEach(headers, function(value, key) { - if (isDefined(value)) { - xhr.setRequestHeader(key, value); - } - }); - - xhr.onload = function requestLoaded() { - var statusText = xhr.statusText || ''; - - // responseText is the old-school way of retrieving response (supported by IE8 & 9) - // response/responseType properties were introduced in XHR Level2 spec (supported by IE10) - var response = ('response' in xhr) ? xhr.response : xhr.responseText; - - // normalize IE9 bug (http://bugs.jquery.com/ticket/1450) - var status = xhr.status === 1223 ? 204 : xhr.status; - - // fix status code when it is 0 (0 status is undocumented). - // Occurs when accessing file resources or on Android 4.1 stock browser - // while retrieving files from application cache. - if (status === 0) { - status = response ? 200 : urlResolve(url).protocol == 'file' ? 404 : 0; - } - - completeRequest(callback, - status, - response, - xhr.getAllResponseHeaders(), - statusText); - }; - - var requestError = function() { - // The response is always empty - // See https://xhr.spec.whatwg.org/#request-error-steps and https://fetch.spec.whatwg.org/#concept-network-error - completeRequest(callback, -1, null, null, ''); - }; - - xhr.onerror = requestError; - xhr.onabort = requestError; - - if (withCredentials) { - xhr.withCredentials = true; - } - - if (responseType) { - try { - xhr.responseType = responseType; - } catch (e) { - // WebKit added support for the json responseType value on 09/03/2013 - // https://bugs.webkit.org/show_bug.cgi?id=73648. Versions of Safari prior to 7 are - // known to throw when setting the value "json" as the response type. Other older - // browsers implementing the responseType - // - // The json response type can be ignored if not supported, because JSON payloads are - // parsed on the client-side regardless. - if (responseType !== 'json') { - throw e; - } - } - } - - xhr.send(post || null); - } - - if (timeout > 0) { - var timeoutId = $browserDefer(timeoutRequest, timeout); - } else if (isPromiseLike(timeout)) { - timeout.then(timeoutRequest); - } - - - function timeoutRequest() { - jsonpDone && jsonpDone(); - xhr && xhr.abort(); - } - - function completeRequest(callback, status, response, headersString, statusText) { - // cancel timeout and subsequent timeout promise resolution - if (timeoutId !== undefined) { - $browserDefer.cancel(timeoutId); - } - jsonpDone = xhr = null; - - callback(status, response, headersString, statusText); - $browser.$$completeOutstandingRequest(noop); - } - }; - - function jsonpReq(url, callbackId, done) { - // we can't use jQuery/jqLite here because jQuery does crazy shit with script elements, e.g.: - // - fetches local scripts via XHR and evals them - // - adds and immediately removes script elements from the document - var script = rawDocument.createElement('script'), callback = null; - script.type = "text/javascript"; - script.src = url; - script.async = true; - - callback = function(event) { - removeEventListenerFn(script, "load", callback); - removeEventListenerFn(script, "error", callback); - rawDocument.body.removeChild(script); - script = null; - var status = -1; - var text = "unknown"; - - if (event) { - if (event.type === "load" && !callbacks[callbackId].called) { - event = { type: "error" }; - } - text = event.type; - status = event.type === "error" ? 404 : 200; - } - - if (done) { - done(status, text); - } - }; - - addEventListenerFn(script, "load", callback); - addEventListenerFn(script, "error", callback); - rawDocument.body.appendChild(script); - return callback; - } -} - -var $interpolateMinErr = minErr('$interpolate'); - -/** - * @ngdoc provider - * @name $interpolateProvider - * - * @description - * - * Used for configuring the interpolation markup. Defaults to `{{` and `}}`. - * - * @example -<example module="customInterpolationApp"> -<file name="index.html"> -<script> - var customInterpolationApp = angular.module('customInterpolationApp', []); - - customInterpolationApp.config(function($interpolateProvider) { - $interpolateProvider.startSymbol('//'); - $interpolateProvider.endSymbol('//'); - }); - - - customInterpolationApp.controller('DemoController', function() { - this.label = "This binding is brought you by // interpolation symbols."; - }); -</script> -<div ng-app="App" ng-controller="DemoController as demo"> - //demo.label// -</div> -</file> -<file name="protractor.js" type="protractor"> - it('should interpolate binding with custom symbols', function() { - expect(element(by.binding('demo.label')).getText()).toBe('This binding is brought you by // interpolation symbols.'); - }); -</file> -</example> - */ -function $InterpolateProvider() { - var startSymbol = '{{'; - var endSymbol = '}}'; - - /** - * @ngdoc method - * @name $interpolateProvider#startSymbol - * @description - * Symbol to denote start of expression in the interpolated string. Defaults to `{{`. - * - * @param {string=} value new value to set the starting symbol to. - * @returns {string|self} Returns the symbol when used as getter and self if used as setter. - */ - this.startSymbol = function(value) { - if (value) { - startSymbol = value; - return this; - } else { - return startSymbol; - } - }; - - /** - * @ngdoc method - * @name $interpolateProvider#endSymbol - * @description - * Symbol to denote the end of expression in the interpolated string. Defaults to `}}`. - * - * @param {string=} value new value to set the ending symbol to. - * @returns {string|self} Returns the symbol when used as getter and self if used as setter. - */ - this.endSymbol = function(value) { - if (value) { - endSymbol = value; - return this; - } else { - return endSymbol; - } - }; - - - this.$get = ['$parse', '$exceptionHandler', '$sce', function($parse, $exceptionHandler, $sce) { - var startSymbolLength = startSymbol.length, - endSymbolLength = endSymbol.length, - escapedStartRegexp = new RegExp(startSymbol.replace(/./g, escape), 'g'), - escapedEndRegexp = new RegExp(endSymbol.replace(/./g, escape), 'g'); - - function escape(ch) { - return '\\\\\\' + ch; - } - - /** - * @ngdoc service - * @name $interpolate - * @kind function - * - * @requires $parse - * @requires $sce - * - * @description - * - * Compiles a string with markup into an interpolation function. This service is used by the - * HTML {@link ng.$compile $compile} service for data binding. See - * {@link ng.$interpolateProvider $interpolateProvider} for configuring the - * interpolation markup. - * - * - * ```js - * var $interpolate = ...; // injected - * var exp = $interpolate('Hello {{name | uppercase}}!'); - * expect(exp({name:'Angular'}).toEqual('Hello ANGULAR!'); - * ``` - * - * `$interpolate` takes an optional fourth argument, `allOrNothing`. If `allOrNothing` is - * `true`, the interpolation function will return `undefined` unless all embedded expressions - * evaluate to a value other than `undefined`. - * - * ```js - * var $interpolate = ...; // injected - * var context = {greeting: 'Hello', name: undefined }; - * - * // default "forgiving" mode - * var exp = $interpolate('{{greeting}} {{name}}!'); - * expect(exp(context)).toEqual('Hello !'); - * - * // "allOrNothing" mode - * exp = $interpolate('{{greeting}} {{name}}!', false, null, true); - * expect(exp(context)).toBeUndefined(); - * context.name = 'Angular'; - * expect(exp(context)).toEqual('Hello Angular!'); - * ``` - * - * `allOrNothing` is useful for interpolating URLs. `ngSrc` and `ngSrcset` use this behavior. - * - * ####Escaped Interpolation - * $interpolate provides a mechanism for escaping interpolation markers. Start and end markers - * can be escaped by preceding each of their characters with a REVERSE SOLIDUS U+005C (backslash). - * It will be rendered as a regular start/end marker, and will not be interpreted as an expression - * or binding. - * - * This enables web-servers to prevent script injection attacks and defacing attacks, to some - * degree, while also enabling code examples to work without relying on the - * {@link ng.directive:ngNonBindable ngNonBindable} directive. - * - * **For security purposes, it is strongly encouraged that web servers escape user-supplied data, - * replacing angle brackets (<, >) with &lt; and &gt; respectively, and replacing all - * interpolation start/end markers with their escaped counterparts.** - * - * Escaped interpolation markers are only replaced with the actual interpolation markers in rendered - * output when the $interpolate service processes the text. So, for HTML elements interpolated - * by {@link ng.$compile $compile}, or otherwise interpolated with the `mustHaveExpression` parameter - * set to `true`, the interpolated text must contain an unescaped interpolation expression. As such, - * this is typically useful only when user-data is used in rendering a template from the server, or - * when otherwise untrusted data is used by a directive. - * - * <example> - * <file name="index.html"> - * <div ng-init="username='A user'"> - * <p ng-init="apptitle='Escaping demo'">{{apptitle}}: \{\{ username = "defaced value"; \}\} - * </p> - * <p><strong>{{username}}</strong> attempts to inject code which will deface the - * application, but fails to accomplish their task, because the server has correctly - * escaped the interpolation start/end markers with REVERSE SOLIDUS U+005C (backslash) - * characters.</p> - * <p>Instead, the result of the attempted script injection is visible, and can be removed - * from the database by an administrator.</p> - * </div> - * </file> - * </example> - * - * @param {string} text The text with markup to interpolate. - * @param {boolean=} mustHaveExpression if set to true then the interpolation string must have - * embedded expression in order to return an interpolation function. Strings with no - * embedded expression will return null for the interpolation function. - * @param {string=} trustedContext when provided, the returned function passes the interpolated - * result through {@link ng.$sce#getTrusted $sce.getTrusted(interpolatedResult, - * trustedContext)} before returning it. Refer to the {@link ng.$sce $sce} service that - * provides Strict Contextual Escaping for details. - * @param {boolean=} allOrNothing if `true`, then the returned function returns undefined - * unless all embedded expressions evaluate to a value other than `undefined`. - * @returns {function(context)} an interpolation function which is used to compute the - * interpolated string. The function has these parameters: - * - * - `context`: evaluation context for all expressions embedded in the interpolated text - */ - function $interpolate(text, mustHaveExpression, trustedContext, allOrNothing) { - allOrNothing = !!allOrNothing; - var startIndex, - endIndex, - index = 0, - expressions = [], - parseFns = [], - textLength = text.length, - exp, - concat = [], - expressionPositions = []; - - while (index < textLength) { - if (((startIndex = text.indexOf(startSymbol, index)) != -1) && - ((endIndex = text.indexOf(endSymbol, startIndex + startSymbolLength)) != -1)) { - if (index !== startIndex) { - concat.push(unescapeText(text.substring(index, startIndex))); - } - exp = text.substring(startIndex + startSymbolLength, endIndex); - expressions.push(exp); - parseFns.push($parse(exp, parseStringifyInterceptor)); - index = endIndex + endSymbolLength; - expressionPositions.push(concat.length); - concat.push(''); - } else { - // we did not find an interpolation, so we have to add the remainder to the separators array - if (index !== textLength) { - concat.push(unescapeText(text.substring(index))); - } - break; - } - } - - // Concatenating expressions makes it hard to reason about whether some combination of - // concatenated values are unsafe to use and could easily lead to XSS. By requiring that a - // single expression be used for iframe[src], object[src], etc., we ensure that the value - // that's used is assigned or constructed by some JS code somewhere that is more testable or - // make it obvious that you bound the value to some user controlled value. This helps reduce - // the load when auditing for XSS issues. - if (trustedContext && concat.length > 1) { - throw $interpolateMinErr('noconcat', - "Error while interpolating: {0}\nStrict Contextual Escaping disallows " + - "interpolations that concatenate multiple expressions when a trusted value is " + - "required. See http://docs.angularjs.org/api/ng.$sce", text); - } - - if (!mustHaveExpression || expressions.length) { - var compute = function(values) { - for (var i = 0, ii = expressions.length; i < ii; i++) { - if (allOrNothing && isUndefined(values[i])) return; - concat[expressionPositions[i]] = values[i]; - } - return concat.join(''); - }; - - var getValue = function(value) { - return trustedContext ? - $sce.getTrusted(trustedContext, value) : - $sce.valueOf(value); - }; - - var stringify = function(value) { - if (value == null) { // null || undefined - return ''; - } - switch (typeof value) { - case 'string': - break; - case 'number': - value = '' + value; - break; - default: - value = toJson(value); - } - - return value; - }; - - return extend(function interpolationFn(context) { - var i = 0; - var ii = expressions.length; - var values = new Array(ii); - - try { - for (; i < ii; i++) { - values[i] = parseFns[i](context); - } - - return compute(values); - } catch (err) { - var newErr = $interpolateMinErr('interr', "Can't interpolate: {0}\n{1}", text, - err.toString()); - $exceptionHandler(newErr); - } - - }, { - // all of these properties are undocumented for now - exp: text, //just for compatibility with regular watchers created via $watch - expressions: expressions, - $$watchDelegate: function(scope, listener, objectEquality) { - var lastValue; - return scope.$watchGroup(parseFns, function interpolateFnWatcher(values, oldValues) { - var currValue = compute(values); - if (isFunction(listener)) { - listener.call(this, currValue, values !== oldValues ? lastValue : currValue, scope); - } - lastValue = currValue; - }, objectEquality); - } - }); - } - - function unescapeText(text) { - return text.replace(escapedStartRegexp, startSymbol). - replace(escapedEndRegexp, endSymbol); - } - - function parseStringifyInterceptor(value) { - try { - value = getValue(value); - return allOrNothing && !isDefined(value) ? value : stringify(value); - } catch (err) { - var newErr = $interpolateMinErr('interr', "Can't interpolate: {0}\n{1}", text, - err.toString()); - $exceptionHandler(newErr); - } - } - } - - - /** - * @ngdoc method - * @name $interpolate#startSymbol - * @description - * Symbol to denote the start of expression in the interpolated string. Defaults to `{{`. - * - * Use {@link ng.$interpolateProvider#startSymbol `$interpolateProvider.startSymbol`} to change - * the symbol. - * - * @returns {string} start symbol. - */ - $interpolate.startSymbol = function() { - return startSymbol; - }; - - - /** - * @ngdoc method - * @name $interpolate#endSymbol - * @description - * Symbol to denote the end of expression in the interpolated string. Defaults to `}}`. - * - * Use {@link ng.$interpolateProvider#endSymbol `$interpolateProvider.endSymbol`} to change - * the symbol. - * - * @returns {string} end symbol. - */ - $interpolate.endSymbol = function() { - return endSymbol; - }; - - return $interpolate; - }]; -} - -function $IntervalProvider() { - this.$get = ['$rootScope', '$window', '$q', '$$q', - function($rootScope, $window, $q, $$q) { - var intervals = {}; - - - /** - * @ngdoc service - * @name $interval - * - * @description - * Angular's wrapper for `window.setInterval`. The `fn` function is executed every `delay` - * milliseconds. - * - * The return value of registering an interval function is a promise. This promise will be - * notified upon each tick of the interval, and will be resolved after `count` iterations, or - * run indefinitely if `count` is not defined. The value of the notification will be the - * number of iterations that have run. - * To cancel an interval, call `$interval.cancel(promise)`. - * - * In tests you can use {@link ngMock.$interval#flush `$interval.flush(millis)`} to - * move forward by `millis` milliseconds and trigger any functions scheduled to run in that - * time. - * - * <div class="alert alert-warning"> - * **Note**: Intervals created by this service must be explicitly destroyed when you are finished - * with them. In particular they are not automatically destroyed when a controller's scope or a - * directive's element are destroyed. - * You should take this into consideration and make sure to always cancel the interval at the - * appropriate moment. See the example below for more details on how and when to do this. - * </div> - * - * @param {function()} fn A function that should be called repeatedly. - * @param {number} delay Number of milliseconds between each function call. - * @param {number=} [count=0] Number of times to repeat. If not set, or 0, will repeat - * indefinitely. - * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise - * will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block. - * @returns {promise} A promise which will be notified on each iteration. - * - * @example - * <example module="intervalExample"> - * <file name="index.html"> - * <script> - * angular.module('intervalExample', []) - * .controller('ExampleController', ['$scope', '$interval', - * function($scope, $interval) { - * $scope.format = 'M/d/yy h:mm:ss a'; - * $scope.blood_1 = 100; - * $scope.blood_2 = 120; - * - * var stop; - * $scope.fight = function() { - * // Don't start a new fight if we are already fighting - * if ( angular.isDefined(stop) ) return; - * - * stop = $interval(function() { - * if ($scope.blood_1 > 0 && $scope.blood_2 > 0) { - * $scope.blood_1 = $scope.blood_1 - 3; - * $scope.blood_2 = $scope.blood_2 - 4; - * } else { - * $scope.stopFight(); - * } - * }, 100); - * }; - * - * $scope.stopFight = function() { - * if (angular.isDefined(stop)) { - * $interval.cancel(stop); - * stop = undefined; - * } - * }; - * - * $scope.resetFight = function() { - * $scope.blood_1 = 100; - * $scope.blood_2 = 120; - * }; - * - * $scope.$on('$destroy', function() { - * // Make sure that the interval is destroyed too - * $scope.stopFight(); - * }); - * }]) - * // Register the 'myCurrentTime' directive factory method. - * // We inject $interval and dateFilter service since the factory method is DI. - * .directive('myCurrentTime', ['$interval', 'dateFilter', - * function($interval, dateFilter) { - * // return the directive link function. (compile function not needed) - * return function(scope, element, attrs) { - * var format, // date format - * stopTime; // so that we can cancel the time updates - * - * // used to update the UI - * function updateTime() { - * element.text(dateFilter(new Date(), format)); - * } - * - * // watch the expression, and update the UI on change. - * scope.$watch(attrs.myCurrentTime, function(value) { - * format = value; - * updateTime(); - * }); - * - * stopTime = $interval(updateTime, 1000); - * - * // listen on DOM destroy (removal) event, and cancel the next UI update - * // to prevent updating time after the DOM element was removed. - * element.on('$destroy', function() { - * $interval.cancel(stopTime); - * }); - * } - * }]); - * </script> - * - * <div> - * <div ng-controller="ExampleController"> - * Date format: <input ng-model="format"> <hr/> - * Current time is: <span my-current-time="format"></span> - * <hr/> - * Blood 1 : <font color='red'>{{blood_1}}</font> - * Blood 2 : <font color='red'>{{blood_2}}</font> - * <button type="button" data-ng-click="fight()">Fight</button> - * <button type="button" data-ng-click="stopFight()">StopFight</button> - * <button type="button" data-ng-click="resetFight()">resetFight</button> - * </div> - * </div> - * - * </file> - * </example> - */ - function interval(fn, delay, count, invokeApply) { - var setInterval = $window.setInterval, - clearInterval = $window.clearInterval, - iteration = 0, - skipApply = (isDefined(invokeApply) && !invokeApply), - deferred = (skipApply ? $$q : $q).defer(), - promise = deferred.promise; - - count = isDefined(count) ? count : 0; - - promise.then(null, null, fn); - - promise.$$intervalId = setInterval(function tick() { - deferred.notify(iteration++); - - if (count > 0 && iteration >= count) { - deferred.resolve(iteration); - clearInterval(promise.$$intervalId); - delete intervals[promise.$$intervalId]; - } - - if (!skipApply) $rootScope.$apply(); - - }, delay); - - intervals[promise.$$intervalId] = deferred; - - return promise; - } - - - /** - * @ngdoc method - * @name $interval#cancel - * - * @description - * Cancels a task associated with the `promise`. - * - * @param {promise} promise returned by the `$interval` function. - * @returns {boolean} Returns `true` if the task was successfully canceled. - */ - interval.cancel = function(promise) { - if (promise && promise.$$intervalId in intervals) { - intervals[promise.$$intervalId].reject('canceled'); - $window.clearInterval(promise.$$intervalId); - delete intervals[promise.$$intervalId]; - return true; - } - return false; - }; - - return interval; - }]; -} - -/** - * @ngdoc service - * @name $locale - * - * @description - * $locale service provides localization rules for various Angular components. As of right now the - * only public api is: - * - * * `id` – `{string}` – locale id formatted as `languageId-countryId` (e.g. `en-us`) - */ -function $LocaleProvider() { - this.$get = function() { - return { - id: 'en-us', - - NUMBER_FORMATS: { - DECIMAL_SEP: '.', - GROUP_SEP: ',', - PATTERNS: [ - { // Decimal Pattern - minInt: 1, - minFrac: 0, - maxFrac: 3, - posPre: '', - posSuf: '', - negPre: '-', - negSuf: '', - gSize: 3, - lgSize: 3 - },{ //Currency Pattern - minInt: 1, - minFrac: 2, - maxFrac: 2, - posPre: '\u00A4', - posSuf: '', - negPre: '(\u00A4', - negSuf: ')', - gSize: 3, - lgSize: 3 - } - ], - CURRENCY_SYM: '$' - }, - - DATETIME_FORMATS: { - MONTH: - 'January,February,March,April,May,June,July,August,September,October,November,December' - .split(','), - SHORTMONTH: 'Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'.split(','), - DAY: 'Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday'.split(','), - SHORTDAY: 'Sun,Mon,Tue,Wed,Thu,Fri,Sat'.split(','), - AMPMS: ['AM','PM'], - medium: 'MMM d, y h:mm:ss a', - 'short': 'M/d/yy h:mm a', - fullDate: 'EEEE, MMMM d, y', - longDate: 'MMMM d, y', - mediumDate: 'MMM d, y', - shortDate: 'M/d/yy', - mediumTime: 'h:mm:ss a', - shortTime: 'h:mm a' - }, - - pluralCat: function(num) { - if (num === 1) { - return 'one'; - } - return 'other'; - } - }; - }; -} - -var PATH_MATCH = /^([^\?#]*)(\?([^#]*))?(#(.*))?$/, - DEFAULT_PORTS = {'http': 80, 'https': 443, 'ftp': 21}; -var $locationMinErr = minErr('$location'); - - -/** - * Encode path using encodeUriSegment, ignoring forward slashes - * - * @param {string} path Path to encode - * @returns {string} - */ -function encodePath(path) { - var segments = path.split('/'), - i = segments.length; - - while (i--) { - segments[i] = encodeUriSegment(segments[i]); - } - - return segments.join('/'); -} - -function parseAbsoluteUrl(absoluteUrl, locationObj) { - var parsedUrl = urlResolve(absoluteUrl); - - locationObj.$$protocol = parsedUrl.protocol; - locationObj.$$host = parsedUrl.hostname; - locationObj.$$port = int(parsedUrl.port) || DEFAULT_PORTS[parsedUrl.protocol] || null; -} - - -function parseAppUrl(relativeUrl, locationObj) { - var prefixed = (relativeUrl.charAt(0) !== '/'); - if (prefixed) { - relativeUrl = '/' + relativeUrl; - } - var match = urlResolve(relativeUrl); - locationObj.$$path = decodeURIComponent(prefixed && match.pathname.charAt(0) === '/' ? - match.pathname.substring(1) : match.pathname); - locationObj.$$search = parseKeyValue(match.search); - locationObj.$$hash = decodeURIComponent(match.hash); - - // make sure path starts with '/'; - if (locationObj.$$path && locationObj.$$path.charAt(0) != '/') { - locationObj.$$path = '/' + locationObj.$$path; - } -} - - -/** - * - * @param {string} begin - * @param {string} whole - * @returns {string} returns text from whole after begin or undefined if it does not begin with - * expected string. - */ -function beginsWith(begin, whole) { - if (whole.indexOf(begin) === 0) { - return whole.substr(begin.length); - } -} - - -function stripHash(url) { - var index = url.indexOf('#'); - return index == -1 ? url : url.substr(0, index); -} - -function trimEmptyHash(url) { - return url.replace(/(#.+)|#$/, '$1'); -} - - -function stripFile(url) { - return url.substr(0, stripHash(url).lastIndexOf('/') + 1); -} - -/* return the server only (scheme://host:port) */ -function serverBase(url) { - return url.substring(0, url.indexOf('/', url.indexOf('//') + 2)); -} - - -/** - * LocationHtml5Url represents an url - * This object is exposed as $location service when HTML5 mode is enabled and supported - * - * @constructor - * @param {string} appBase application base URL - * @param {string} basePrefix url path prefix - */ -function LocationHtml5Url(appBase, basePrefix) { - this.$$html5 = true; - basePrefix = basePrefix || ''; - var appBaseNoFile = stripFile(appBase); - parseAbsoluteUrl(appBase, this); - - - /** - * Parse given html5 (regular) url string into properties - * @param {string} url HTML5 url - * @private - */ - this.$$parse = function(url) { - var pathUrl = beginsWith(appBaseNoFile, url); - if (!isString(pathUrl)) { - throw $locationMinErr('ipthprfx', 'Invalid url "{0}", missing path prefix "{1}".', url, - appBaseNoFile); - } - - parseAppUrl(pathUrl, this); - - if (!this.$$path) { - this.$$path = '/'; - } - - this.$$compose(); - }; - - /** - * Compose url and update `absUrl` property - * @private - */ - this.$$compose = function() { - var search = toKeyValue(this.$$search), - hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : ''; - - this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash; - this.$$absUrl = appBaseNoFile + this.$$url.substr(1); // first char is always '/' - }; - - this.$$parseLinkUrl = function(url, relHref) { - if (relHref && relHref[0] === '#') { - // special case for links to hash fragments: - // keep the old url and only replace the hash fragment - this.hash(relHref.slice(1)); - return true; - } - var appUrl, prevAppUrl; - var rewrittenUrl; - - if ((appUrl = beginsWith(appBase, url)) !== undefined) { - prevAppUrl = appUrl; - if ((appUrl = beginsWith(basePrefix, appUrl)) !== undefined) { - rewrittenUrl = appBaseNoFile + (beginsWith('/', appUrl) || appUrl); - } else { - rewrittenUrl = appBase + prevAppUrl; - } - } else if ((appUrl = beginsWith(appBaseNoFile, url)) !== undefined) { - rewrittenUrl = appBaseNoFile + appUrl; - } else if (appBaseNoFile == url + '/') { - rewrittenUrl = appBaseNoFile; - } - if (rewrittenUrl) { - this.$$parse(rewrittenUrl); - } - return !!rewrittenUrl; - }; -} - - -/** - * LocationHashbangUrl represents url - * This object is exposed as $location service when developer doesn't opt into html5 mode. - * It also serves as the base class for html5 mode fallback on legacy browsers. - * - * @constructor - * @param {string} appBase application base URL - * @param {string} hashPrefix hashbang prefix - */ -function LocationHashbangUrl(appBase, hashPrefix) { - var appBaseNoFile = stripFile(appBase); - - parseAbsoluteUrl(appBase, this); - - - /** - * Parse given hashbang url into properties - * @param {string} url Hashbang url - * @private - */ - this.$$parse = function(url) { - var withoutBaseUrl = beginsWith(appBase, url) || beginsWith(appBaseNoFile, url); - var withoutHashUrl; - - if (withoutBaseUrl.charAt(0) === '#') { - - // The rest of the url starts with a hash so we have - // got either a hashbang path or a plain hash fragment - withoutHashUrl = beginsWith(hashPrefix, withoutBaseUrl); - if (isUndefined(withoutHashUrl)) { - // There was no hashbang prefix so we just have a hash fragment - withoutHashUrl = withoutBaseUrl; - } - - } else { - // There was no hashbang path nor hash fragment: - // If we are in HTML5 mode we use what is left as the path; - // Otherwise we ignore what is left - withoutHashUrl = this.$$html5 ? withoutBaseUrl : ''; - } - - parseAppUrl(withoutHashUrl, this); - - this.$$path = removeWindowsDriveName(this.$$path, withoutHashUrl, appBase); - - this.$$compose(); - - /* - * In Windows, on an anchor node on documents loaded from - * the filesystem, the browser will return a pathname - * prefixed with the drive name ('/C:/path') when a - * pathname without a drive is set: - * * a.setAttribute('href', '/foo') - * * a.pathname === '/C:/foo' //true - * - * Inside of Angular, we're always using pathnames that - * do not include drive names for routing. - */ - function removeWindowsDriveName(path, url, base) { - /* - Matches paths for file protocol on windows, - such as /C:/foo/bar, and captures only /foo/bar. - */ - var windowsFilePathExp = /^\/[A-Z]:(\/.*)/; - - var firstPathSegmentMatch; - - //Get the relative path from the input URL. - if (url.indexOf(base) === 0) { - url = url.replace(base, ''); - } - - // The input URL intentionally contains a first path segment that ends with a colon. - if (windowsFilePathExp.exec(url)) { - return path; - } - - firstPathSegmentMatch = windowsFilePathExp.exec(path); - return firstPathSegmentMatch ? firstPathSegmentMatch[1] : path; - } - }; - - /** - * Compose hashbang url and update `absUrl` property - * @private - */ - this.$$compose = function() { - var search = toKeyValue(this.$$search), - hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : ''; - - this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash; - this.$$absUrl = appBase + (this.$$url ? hashPrefix + this.$$url : ''); - }; - - this.$$parseLinkUrl = function(url, relHref) { - if (stripHash(appBase) == stripHash(url)) { - this.$$parse(url); - return true; - } - return false; - }; -} - - -/** - * LocationHashbangUrl represents url - * This object is exposed as $location service when html5 history api is enabled but the browser - * does not support it. - * - * @constructor - * @param {string} appBase application base URL - * @param {string} hashPrefix hashbang prefix - */ -function LocationHashbangInHtml5Url(appBase, hashPrefix) { - this.$$html5 = true; - LocationHashbangUrl.apply(this, arguments); - - var appBaseNoFile = stripFile(appBase); - - this.$$parseLinkUrl = function(url, relHref) { - if (relHref && relHref[0] === '#') { - // special case for links to hash fragments: - // keep the old url and only replace the hash fragment - this.hash(relHref.slice(1)); - return true; - } - - var rewrittenUrl; - var appUrl; - - if (appBase == stripHash(url)) { - rewrittenUrl = url; - } else if ((appUrl = beginsWith(appBaseNoFile, url))) { - rewrittenUrl = appBase + hashPrefix + appUrl; - } else if (appBaseNoFile === url + '/') { - rewrittenUrl = appBaseNoFile; - } - if (rewrittenUrl) { - this.$$parse(rewrittenUrl); - } - return !!rewrittenUrl; - }; - - this.$$compose = function() { - var search = toKeyValue(this.$$search), - hash = this.$$hash ? '#' + encodeUriSegment(this.$$hash) : ''; - - this.$$url = encodePath(this.$$path) + (search ? '?' + search : '') + hash; - // include hashPrefix in $$absUrl when $$url is empty so IE8 & 9 do not reload page because of removal of '#' - this.$$absUrl = appBase + hashPrefix + this.$$url; - }; - -} - - -var locationPrototype = { - - /** - * Are we in html5 mode? - * @private - */ - $$html5: false, - - /** - * Has any change been replacing? - * @private - */ - $$replace: false, - - /** - * @ngdoc method - * @name $location#absUrl - * - * @description - * This method is getter only. - * - * Return full url representation with all segments encoded according to rules specified in - * [RFC 3986](http://www.ietf.org/rfc/rfc3986.txt). - * - * - * ```js - * // given url http://example.com/#/some/path?foo=bar&baz=xoxo - * var absUrl = $location.absUrl(); - * // => "http://example.com/#/some/path?foo=bar&baz=xoxo" - * ``` - * - * @return {string} full url - */ - absUrl: locationGetter('$$absUrl'), - - /** - * @ngdoc method - * @name $location#url - * - * @description - * This method is getter / setter. - * - * Return url (e.g. `/path?a=b#hash`) when called without any parameter. - * - * Change path, search and hash, when called with parameter and return `$location`. - * - * - * ```js - * // given url http://example.com/#/some/path?foo=bar&baz=xoxo - * var url = $location.url(); - * // => "/some/path?foo=bar&baz=xoxo" - * ``` - * - * @param {string=} url New url without base prefix (e.g. `/path?a=b#hash`) - * @return {string} url - */ - url: function(url) { - if (isUndefined(url)) - return this.$$url; - - var match = PATH_MATCH.exec(url); - if (match[1] || url === '') this.path(decodeURIComponent(match[1])); - if (match[2] || match[1] || url === '') this.search(match[3] || ''); - this.hash(match[5] || ''); - - return this; - }, - - /** - * @ngdoc method - * @name $location#protocol - * - * @description - * This method is getter only. - * - * Return protocol of current url. - * - * - * ```js - * // given url http://example.com/#/some/path?foo=bar&baz=xoxo - * var protocol = $location.protocol(); - * // => "http" - * ``` - * - * @return {string} protocol of current url - */ - protocol: locationGetter('$$protocol'), - - /** - * @ngdoc method - * @name $location#host - * - * @description - * This method is getter only. - * - * Return host of current url. - * - * - * ```js - * // given url http://example.com/#/some/path?foo=bar&baz=xoxo - * var host = $location.host(); - * // => "example.com" - * ``` - * - * @return {string} host of current url. - */ - host: locationGetter('$$host'), - - /** - * @ngdoc method - * @name $location#port - * - * @description - * This method is getter only. - * - * Return port of current url. - * - * - * ```js - * // given url http://example.com/#/some/path?foo=bar&baz=xoxo - * var port = $location.port(); - * // => 80 - * ``` - * - * @return {Number} port - */ - port: locationGetter('$$port'), - - /** - * @ngdoc method - * @name $location#path - * - * @description - * This method is getter / setter. - * - * Return path of current url when called without any parameter. - * - * Change path when called with parameter and return `$location`. - * - * Note: Path should always begin with forward slash (/), this method will add the forward slash - * if it is missing. - * - * - * ```js - * // given url http://example.com/#/some/path?foo=bar&baz=xoxo - * var path = $location.path(); - * // => "/some/path" - * ``` - * - * @param {(string|number)=} path New path - * @return {string} path - */ - path: locationGetterSetter('$$path', function(path) { - path = path !== null ? path.toString() : ''; - return path.charAt(0) == '/' ? path : '/' + path; - }), - - /** - * @ngdoc method - * @name $location#search - * - * @description - * This method is getter / setter. - * - * Return search part (as object) of current url when called without any parameter. - * - * Change search part when called with parameter and return `$location`. - * - * - * ```js - * // given url http://example.com/#/some/path?foo=bar&baz=xoxo - * var searchObject = $location.search(); - * // => {foo: 'bar', baz: 'xoxo'} - * - * // set foo to 'yipee' - * $location.search('foo', 'yipee'); - * // $location.search() => {foo: 'yipee', baz: 'xoxo'} - * ``` - * - * @param {string|Object.<string>|Object.<Array.<string>>} search New search params - string or - * hash object. - * - * When called with a single argument the method acts as a setter, setting the `search` component - * of `$location` to the specified value. - * - * If the argument is a hash object containing an array of values, these values will be encoded - * as duplicate search parameters in the url. - * - * @param {(string|Number|Array<string>|boolean)=} paramValue If `search` is a string or number, then `paramValue` - * will override only a single search property. - * - * If `paramValue` is an array, it will override the property of the `search` component of - * `$location` specified via the first argument. - * - * If `paramValue` is `null`, the property specified via the first argument will be deleted. - * - * If `paramValue` is `true`, the property specified via the first argument will be added with no - * value nor trailing equal sign. - * - * @return {Object} If called with no arguments returns the parsed `search` object. If called with - * one or more arguments returns `$location` object itself. - */ - search: function(search, paramValue) { - switch (arguments.length) { - case 0: - return this.$$search; - case 1: - if (isString(search) || isNumber(search)) { - search = search.toString(); - this.$$search = parseKeyValue(search); - } else if (isObject(search)) { - search = copy(search, {}); - // remove object undefined or null properties - forEach(search, function(value, key) { - if (value == null) delete search[key]; - }); - - this.$$search = search; - } else { - throw $locationMinErr('isrcharg', - 'The first argument of the `$location#search()` call must be a string or an object.'); - } - break; - default: - if (isUndefined(paramValue) || paramValue === null) { - delete this.$$search[search]; - } else { - this.$$search[search] = paramValue; - } - } - - this.$$compose(); - return this; - }, - - /** - * @ngdoc method - * @name $location#hash - * - * @description - * This method is getter / setter. - * - * Return hash fragment when called without any parameter. - * - * Change hash fragment when called with parameter and return `$location`. - * - * - * ```js - * // given url http://example.com/#/some/path?foo=bar&baz=xoxo#hashValue - * var hash = $location.hash(); - * // => "hashValue" - * ``` - * - * @param {(string|number)=} hash New hash fragment - * @return {string} hash - */ - hash: locationGetterSetter('$$hash', function(hash) { - return hash !== null ? hash.toString() : ''; - }), - - /** - * @ngdoc method - * @name $location#replace - * - * @description - * If called, all changes to $location during current `$digest` will be replacing current history - * record, instead of adding new one. - */ - replace: function() { - this.$$replace = true; - return this; - } -}; - -forEach([LocationHashbangInHtml5Url, LocationHashbangUrl, LocationHtml5Url], function(Location) { - Location.prototype = Object.create(locationPrototype); - - /** - * @ngdoc method - * @name $location#state - * - * @description - * This method is getter / setter. - * - * Return the history state object when called without any parameter. - * - * Change the history state object when called with one parameter and return `$location`. - * The state object is later passed to `pushState` or `replaceState`. - * - * NOTE: This method is supported only in HTML5 mode and only in browsers supporting - * the HTML5 History API (i.e. methods `pushState` and `replaceState`). If you need to support - * older browsers (like IE9 or Android < 4.0), don't use this method. - * - * @param {object=} state State object for pushState or replaceState - * @return {object} state - */ - Location.prototype.state = function(state) { - if (!arguments.length) - return this.$$state; - - if (Location !== LocationHtml5Url || !this.$$html5) { - throw $locationMinErr('nostate', 'History API state support is available only ' + - 'in HTML5 mode and only in browsers supporting HTML5 History API'); - } - // The user might modify `stateObject` after invoking `$location.state(stateObject)` - // but we're changing the $$state reference to $browser.state() during the $digest - // so the modification window is narrow. - this.$$state = isUndefined(state) ? null : state; - - return this; - }; -}); - - -function locationGetter(property) { - return function() { - return this[property]; - }; -} - - -function locationGetterSetter(property, preprocess) { - return function(value) { - if (isUndefined(value)) - return this[property]; - - this[property] = preprocess(value); - this.$$compose(); - - return this; - }; -} - - -/** - * @ngdoc service - * @name $location - * - * @requires $rootElement - * - * @description - * The $location service parses the URL in the browser address bar (based on the - * [window.location](https://developer.mozilla.org/en/window.location)) and makes the URL - * available to your application. Changes to the URL in the address bar are reflected into - * $location service and changes to $location are reflected into the browser address bar. - * - * **The $location service:** - * - * - Exposes the current URL in the browser address bar, so you can - * - Watch and observe the URL. - * - Change the URL. - * - Synchronizes the URL with the browser when the user - * - Changes the address bar. - * - Clicks the back or forward button (or clicks a History link). - * - Clicks on a link. - * - Represents the URL object as a set of methods (protocol, host, port, path, search, hash). - * - * For more information see {@link guide/$location Developer Guide: Using $location} - */ - -/** - * @ngdoc provider - * @name $locationProvider - * @description - * Use the `$locationProvider` to configure how the application deep linking paths are stored. - */ -function $LocationProvider() { - var hashPrefix = '', - html5Mode = { - enabled: false, - requireBase: true, - rewriteLinks: true - }; - - /** - * @ngdoc method - * @name $locationProvider#hashPrefix - * @description - * @param {string=} prefix Prefix for hash part (containing path and search) - * @returns {*} current value if used as getter or itself (chaining) if used as setter - */ - this.hashPrefix = function(prefix) { - if (isDefined(prefix)) { - hashPrefix = prefix; - return this; - } else { - return hashPrefix; - } - }; - - /** - * @ngdoc method - * @name $locationProvider#html5Mode - * @description - * @param {(boolean|Object)=} mode If boolean, sets `html5Mode.enabled` to value. - * If object, sets `enabled`, `requireBase` and `rewriteLinks` to respective values. Supported - * properties: - * - **enabled** – `{boolean}` – (default: false) If true, will rely on `history.pushState` to - * change urls where supported. Will fall back to hash-prefixed paths in browsers that do not - * support `pushState`. - * - **requireBase** - `{boolean}` - (default: `true`) When html5Mode is enabled, specifies - * whether or not a <base> tag is required to be present. If `enabled` and `requireBase` are - * true, and a base tag is not present, an error will be thrown when `$location` is injected. - * See the {@link guide/$location $location guide for more information} - * - **rewriteLinks** - `{boolean}` - (default: `true`) When html5Mode is enabled, - * enables/disables url rewriting for relative links. - * - * @returns {Object} html5Mode object if used as getter or itself (chaining) if used as setter - */ - this.html5Mode = function(mode) { - if (isBoolean(mode)) { - html5Mode.enabled = mode; - return this; - } else if (isObject(mode)) { - - if (isBoolean(mode.enabled)) { - html5Mode.enabled = mode.enabled; - } - - if (isBoolean(mode.requireBase)) { - html5Mode.requireBase = mode.requireBase; - } - - if (isBoolean(mode.rewriteLinks)) { - html5Mode.rewriteLinks = mode.rewriteLinks; - } - - return this; - } else { - return html5Mode; - } - }; - - /** - * @ngdoc event - * @name $location#$locationChangeStart - * @eventType broadcast on root scope - * @description - * Broadcasted before a URL will change. - * - * This change can be prevented by calling - * `preventDefault` method of the event. See {@link ng.$rootScope.Scope#$on} for more - * details about event object. Upon successful change - * {@link ng.$location#$locationChangeSuccess $locationChangeSuccess} is fired. - * - * The `newState` and `oldState` parameters may be defined only in HTML5 mode and when - * the browser supports the HTML5 History API. - * - * @param {Object} angularEvent Synthetic event object. - * @param {string} newUrl New URL - * @param {string=} oldUrl URL that was before it was changed. - * @param {string=} newState New history state object - * @param {string=} oldState History state object that was before it was changed. - */ - - /** - * @ngdoc event - * @name $location#$locationChangeSuccess - * @eventType broadcast on root scope - * @description - * Broadcasted after a URL was changed. - * - * The `newState` and `oldState` parameters may be defined only in HTML5 mode and when - * the browser supports the HTML5 History API. - * - * @param {Object} angularEvent Synthetic event object. - * @param {string} newUrl New URL - * @param {string=} oldUrl URL that was before it was changed. - * @param {string=} newState New history state object - * @param {string=} oldState History state object that was before it was changed. - */ - - this.$get = ['$rootScope', '$browser', '$sniffer', '$rootElement', '$window', - function($rootScope, $browser, $sniffer, $rootElement, $window) { - var $location, - LocationMode, - baseHref = $browser.baseHref(), // if base[href] is undefined, it defaults to '' - initialUrl = $browser.url(), - appBase; - - if (html5Mode.enabled) { - if (!baseHref && html5Mode.requireBase) { - throw $locationMinErr('nobase', - "$location in HTML5 mode requires a <base> tag to be present!"); - } - appBase = serverBase(initialUrl) + (baseHref || '/'); - LocationMode = $sniffer.history ? LocationHtml5Url : LocationHashbangInHtml5Url; - } else { - appBase = stripHash(initialUrl); - LocationMode = LocationHashbangUrl; - } - $location = new LocationMode(appBase, '#' + hashPrefix); - $location.$$parseLinkUrl(initialUrl, initialUrl); - - $location.$$state = $browser.state(); - - var IGNORE_URI_REGEXP = /^\s*(javascript|mailto):/i; - - function setBrowserUrlWithFallback(url, replace, state) { - var oldUrl = $location.url(); - var oldState = $location.$$state; - try { - $browser.url(url, replace, state); - - // Make sure $location.state() returns referentially identical (not just deeply equal) - // state object; this makes possible quick checking if the state changed in the digest - // loop. Checking deep equality would be too expensive. - $location.$$state = $browser.state(); - } catch (e) { - // Restore old values if pushState fails - $location.url(oldUrl); - $location.$$state = oldState; - - throw e; - } - } - - $rootElement.on('click', function(event) { - // TODO(vojta): rewrite link when opening in new tab/window (in legacy browser) - // currently we open nice url link and redirect then - - if (!html5Mode.rewriteLinks || event.ctrlKey || event.metaKey || event.shiftKey || event.which == 2 || event.button == 2) return; - - var elm = jqLite(event.target); - - // traverse the DOM up to find first A tag - while (nodeName_(elm[0]) !== 'a') { - // ignore rewriting if no A tag (reached root element, or no parent - removed from document) - if (elm[0] === $rootElement[0] || !(elm = elm.parent())[0]) return; - } - - var absHref = elm.prop('href'); - // get the actual href attribute - see - // http://msdn.microsoft.com/en-us/library/ie/dd347148(v=vs.85).aspx - var relHref = elm.attr('href') || elm.attr('xlink:href'); - - if (isObject(absHref) && absHref.toString() === '[object SVGAnimatedString]') { - // SVGAnimatedString.animVal should be identical to SVGAnimatedString.baseVal, unless during - // an animation. - absHref = urlResolve(absHref.animVal).href; - } - - // Ignore when url is started with javascript: or mailto: - if (IGNORE_URI_REGEXP.test(absHref)) return; - - if (absHref && !elm.attr('target') && !event.isDefaultPrevented()) { - if ($location.$$parseLinkUrl(absHref, relHref)) { - // We do a preventDefault for all urls that are part of the angular application, - // in html5mode and also without, so that we are able to abort navigation without - // getting double entries in the location history. - event.preventDefault(); - // update location manually - if ($location.absUrl() != $browser.url()) { - $rootScope.$apply(); - // hack to work around FF6 bug 684208 when scenario runner clicks on links - $window.angular['ff-684208-preventDefault'] = true; - } - } - } - }); - - - // rewrite hashbang url <> html5 url - if ($location.absUrl() != initialUrl) { - $browser.url($location.absUrl(), true); - } - - var initializing = true; - - // update $location when $browser url changes - $browser.onUrlChange(function(newUrl, newState) { - $rootScope.$evalAsync(function() { - var oldUrl = $location.absUrl(); - var oldState = $location.$$state; - var defaultPrevented; - - $location.$$parse(newUrl); - $location.$$state = newState; - - defaultPrevented = $rootScope.$broadcast('$locationChangeStart', newUrl, oldUrl, - newState, oldState).defaultPrevented; - - // if the location was changed by a `$locationChangeStart` handler then stop - // processing this location change - if ($location.absUrl() !== newUrl) return; - - if (defaultPrevented) { - $location.$$parse(oldUrl); - $location.$$state = oldState; - setBrowserUrlWithFallback(oldUrl, false, oldState); - } else { - initializing = false; - afterLocationChange(oldUrl, oldState); - } - }); - if (!$rootScope.$$phase) $rootScope.$digest(); - }); - - // update browser - $rootScope.$watch(function $locationWatch() { - var oldUrl = trimEmptyHash($browser.url()); - var newUrl = trimEmptyHash($location.absUrl()); - var oldState = $browser.state(); - var currentReplace = $location.$$replace; - var urlOrStateChanged = oldUrl !== newUrl || - ($location.$$html5 && $sniffer.history && oldState !== $location.$$state); - - if (initializing || urlOrStateChanged) { - initializing = false; - - $rootScope.$evalAsync(function() { - var newUrl = $location.absUrl(); - var defaultPrevented = $rootScope.$broadcast('$locationChangeStart', newUrl, oldUrl, - $location.$$state, oldState).defaultPrevented; - - // if the location was changed by a `$locationChangeStart` handler then stop - // processing this location change - if ($location.absUrl() !== newUrl) return; - - if (defaultPrevented) { - $location.$$parse(oldUrl); - $location.$$state = oldState; - } else { - if (urlOrStateChanged) { - setBrowserUrlWithFallback(newUrl, currentReplace, - oldState === $location.$$state ? null : $location.$$state); - } - afterLocationChange(oldUrl, oldState); - } - }); - } - - $location.$$replace = false; - - // we don't need to return anything because $evalAsync will make the digest loop dirty when - // there is a change - }); - - return $location; - - function afterLocationChange(oldUrl, oldState) { - $rootScope.$broadcast('$locationChangeSuccess', $location.absUrl(), oldUrl, - $location.$$state, oldState); - } -}]; -} - -/** - * @ngdoc service - * @name $log - * @requires $window - * - * @description - * Simple service for logging. Default implementation safely writes the message - * into the browser's console (if present). - * - * The main purpose of this service is to simplify debugging and troubleshooting. - * - * The default is to log `debug` messages. You can use - * {@link ng.$logProvider ng.$logProvider#debugEnabled} to change this. - * - * @example - <example module="logExample"> - <file name="script.js"> - angular.module('logExample', []) - .controller('LogController', ['$scope', '$log', function($scope, $log) { - $scope.$log = $log; - $scope.message = 'Hello World!'; - }]); - </file> - <file name="index.html"> - <div ng-controller="LogController"> - <p>Reload this page with open console, enter text and hit the log button...</p> - Message: - <input type="text" ng-model="message"/> - <button ng-click="$log.log(message)">log</button> - <button ng-click="$log.warn(message)">warn</button> - <button ng-click="$log.info(message)">info</button> - <button ng-click="$log.error(message)">error</button> - </div> - </file> - </example> - */ - -/** - * @ngdoc provider - * @name $logProvider - * @description - * Use the `$logProvider` to configure how the application logs messages - */ -function $LogProvider() { - var debug = true, - self = this; - - /** - * @ngdoc method - * @name $logProvider#debugEnabled - * @description - * @param {boolean=} flag enable or disable debug level messages - * @returns {*} current value if used as getter or itself (chaining) if used as setter - */ - this.debugEnabled = function(flag) { - if (isDefined(flag)) { - debug = flag; - return this; - } else { - return debug; - } - }; - - this.$get = ['$window', function($window) { - return { - /** - * @ngdoc method - * @name $log#log - * - * @description - * Write a log message - */ - log: consoleLog('log'), - - /** - * @ngdoc method - * @name $log#info - * - * @description - * Write an information message - */ - info: consoleLog('info'), - - /** - * @ngdoc method - * @name $log#warn - * - * @description - * Write a warning message - */ - warn: consoleLog('warn'), - - /** - * @ngdoc method - * @name $log#error - * - * @description - * Write an error message - */ - error: consoleLog('error'), - - /** - * @ngdoc method - * @name $log#debug - * - * @description - * Write a debug message - */ - debug: (function() { - var fn = consoleLog('debug'); - - return function() { - if (debug) { - fn.apply(self, arguments); - } - }; - }()) - }; - - function formatError(arg) { - if (arg instanceof Error) { - if (arg.stack) { - arg = (arg.message && arg.stack.indexOf(arg.message) === -1) - ? 'Error: ' + arg.message + '\n' + arg.stack - : arg.stack; - } else if (arg.sourceURL) { - arg = arg.message + '\n' + arg.sourceURL + ':' + arg.line; - } - } - return arg; - } - - function consoleLog(type) { - var console = $window.console || {}, - logFn = console[type] || console.log || noop, - hasApply = false; - - // Note: reading logFn.apply throws an error in IE11 in IE8 document mode. - // The reason behind this is that console.log has type "object" in IE8... - try { - hasApply = !!logFn.apply; - } catch (e) {} - - if (hasApply) { - return function() { - var args = []; - forEach(arguments, function(arg) { - args.push(formatError(arg)); - }); - return logFn.apply(console, args); - }; - } - - // we are IE which either doesn't have window.console => this is noop and we do nothing, - // or we are IE where console.log doesn't have apply so we log at least first 2 args - return function(arg1, arg2) { - logFn(arg1, arg2 == null ? '' : arg2); - }; - } - }]; -} - -var $parseMinErr = minErr('$parse'); - -// Sandboxing Angular Expressions -// ------------------------------ -// Angular expressions are generally considered safe because these expressions only have direct -// access to `$scope` and locals. However, one can obtain the ability to execute arbitrary JS code by -// obtaining a reference to native JS functions such as the Function constructor. -// -// As an example, consider the following Angular expression: -// -// {}.toString.constructor('alert("evil JS code")') -// -// This sandboxing technique is not perfect and doesn't aim to be. The goal is to prevent exploits -// against the expression language, but not to prevent exploits that were enabled by exposing -// sensitive JavaScript or browser APIs on Scope. Exposing such objects on a Scope is never a good -// practice and therefore we are not even trying to protect against interaction with an object -// explicitly exposed in this way. -// -// In general, it is not possible to access a Window object from an angular expression unless a -// window or some DOM object that has a reference to window is published onto a Scope. -// Similarly we prevent invocations of function known to be dangerous, as well as assignments to -// native objects. -// -// See https://docs.angularjs.org/guide/security - - -function ensureSafeMemberName(name, fullExpression) { - if (name === "__defineGetter__" || name === "__defineSetter__" - || name === "__lookupGetter__" || name === "__lookupSetter__" - || name === "__proto__") { - throw $parseMinErr('isecfld', - 'Attempting to access a disallowed field in Angular expressions! ' - + 'Expression: {0}', fullExpression); - } - return name; -} - -function ensureSafeObject(obj, fullExpression) { - // nifty check if obj is Function that is fast and works across iframes and other contexts - if (obj) { - if (obj.constructor === obj) { - throw $parseMinErr('isecfn', - 'Referencing Function in Angular expressions is disallowed! Expression: {0}', - fullExpression); - } else if (// isWindow(obj) - obj.window === obj) { - throw $parseMinErr('isecwindow', - 'Referencing the Window in Angular expressions is disallowed! Expression: {0}', - fullExpression); - } else if (// isElement(obj) - obj.children && (obj.nodeName || (obj.prop && obj.attr && obj.find))) { - throw $parseMinErr('isecdom', - 'Referencing DOM nodes in Angular expressions is disallowed! Expression: {0}', - fullExpression); - } else if (// block Object so that we can't get hold of dangerous Object.* methods - obj === Object) { - throw $parseMinErr('isecobj', - 'Referencing Object in Angular expressions is disallowed! Expression: {0}', - fullExpression); - } - } - return obj; -} - -var CALL = Function.prototype.call; -var APPLY = Function.prototype.apply; -var BIND = Function.prototype.bind; - -function ensureSafeFunction(obj, fullExpression) { - if (obj) { - if (obj.constructor === obj) { - throw $parseMinErr('isecfn', - 'Referencing Function in Angular expressions is disallowed! Expression: {0}', - fullExpression); - } else if (obj === CALL || obj === APPLY || obj === BIND) { - throw $parseMinErr('isecff', - 'Referencing call, apply or bind in Angular expressions is disallowed! Expression: {0}', - fullExpression); - } - } -} - -//Keyword constants -var CONSTANTS = createMap(); -forEach({ - 'null': function() { return null; }, - 'true': function() { return true; }, - 'false': function() { return false; }, - 'undefined': function() {} -}, function(constantGetter, name) { - constantGetter.constant = constantGetter.literal = constantGetter.sharedGetter = true; - CONSTANTS[name] = constantGetter; -}); - -//Not quite a constant, but can be lex/parsed the same -CONSTANTS['this'] = function(self) { return self; }; -CONSTANTS['this'].sharedGetter = true; - - -//Operators - will be wrapped by binaryFn/unaryFn/assignment/filter -var OPERATORS = extend(createMap(), { - '+':function(self, locals, a, b) { - a=a(self, locals); b=b(self, locals); - if (isDefined(a)) { - if (isDefined(b)) { - return a + b; - } - return a; - } - return isDefined(b) ? b : undefined;}, - '-':function(self, locals, a, b) { - a=a(self, locals); b=b(self, locals); - return (isDefined(a) ? a : 0) - (isDefined(b) ? b : 0); - }, - '*':function(self, locals, a, b) {return a(self, locals) * b(self, locals);}, - '/':function(self, locals, a, b) {return a(self, locals) / b(self, locals);}, - '%':function(self, locals, a, b) {return a(self, locals) % b(self, locals);}, - '===':function(self, locals, a, b) {return a(self, locals) === b(self, locals);}, - '!==':function(self, locals, a, b) {return a(self, locals) !== b(self, locals);}, - '==':function(self, locals, a, b) {return a(self, locals) == b(self, locals);}, - '!=':function(self, locals, a, b) {return a(self, locals) != b(self, locals);}, - '<':function(self, locals, a, b) {return a(self, locals) < b(self, locals);}, - '>':function(self, locals, a, b) {return a(self, locals) > b(self, locals);}, - '<=':function(self, locals, a, b) {return a(self, locals) <= b(self, locals);}, - '>=':function(self, locals, a, b) {return a(self, locals) >= b(self, locals);}, - '&&':function(self, locals, a, b) {return a(self, locals) && b(self, locals);}, - '||':function(self, locals, a, b) {return a(self, locals) || b(self, locals);}, - '!':function(self, locals, a) {return !a(self, locals);}, - - //Tokenized as operators but parsed as assignment/filters - '=':true, - '|':true -}); -var ESCAPE = {"n":"\n", "f":"\f", "r":"\r", "t":"\t", "v":"\v", "'":"'", '"':'"'}; - - -///////////////////////////////////////// - - -/** - * @constructor - */ -var Lexer = function(options) { - this.options = options; -}; - -Lexer.prototype = { - constructor: Lexer, - - lex: function(text) { - this.text = text; - this.index = 0; - this.tokens = []; - - while (this.index < this.text.length) { - var ch = this.text.charAt(this.index); - if (ch === '"' || ch === "'") { - this.readString(ch); - } else if (this.isNumber(ch) || ch === '.' && this.isNumber(this.peek())) { - this.readNumber(); - } else if (this.isIdent(ch)) { - this.readIdent(); - } else if (this.is(ch, '(){}[].,;:?')) { - this.tokens.push({index: this.index, text: ch}); - this.index++; - } else if (this.isWhitespace(ch)) { - this.index++; - } else { - var ch2 = ch + this.peek(); - var ch3 = ch2 + this.peek(2); - var op1 = OPERATORS[ch]; - var op2 = OPERATORS[ch2]; - var op3 = OPERATORS[ch3]; - if (op1 || op2 || op3) { - var token = op3 ? ch3 : (op2 ? ch2 : ch); - this.tokens.push({index: this.index, text: token, operator: true}); - this.index += token.length; - } else { - this.throwError('Unexpected next character ', this.index, this.index + 1); - } - } - } - return this.tokens; - }, - - is: function(ch, chars) { - return chars.indexOf(ch) !== -1; - }, - - peek: function(i) { - var num = i || 1; - return (this.index + num < this.text.length) ? this.text.charAt(this.index + num) : false; - }, - - isNumber: function(ch) { - return ('0' <= ch && ch <= '9') && typeof ch === "string"; - }, - - isWhitespace: function(ch) { - // IE treats non-breaking space as \u00A0 - return (ch === ' ' || ch === '\r' || ch === '\t' || - ch === '\n' || ch === '\v' || ch === '\u00A0'); - }, - - isIdent: function(ch) { - return ('a' <= ch && ch <= 'z' || - 'A' <= ch && ch <= 'Z' || - '_' === ch || ch === '$'); - }, - - isExpOperator: function(ch) { - return (ch === '-' || ch === '+' || this.isNumber(ch)); - }, - - throwError: function(error, start, end) { - end = end || this.index; - var colStr = (isDefined(start) - ? 's ' + start + '-' + this.index + ' [' + this.text.substring(start, end) + ']' - : ' ' + end); - throw $parseMinErr('lexerr', 'Lexer Error: {0} at column{1} in expression [{2}].', - error, colStr, this.text); - }, - - readNumber: function() { - var number = ''; - var start = this.index; - while (this.index < this.text.length) { - var ch = lowercase(this.text.charAt(this.index)); - if (ch == '.' || this.isNumber(ch)) { - number += ch; - } else { - var peekCh = this.peek(); - if (ch == 'e' && this.isExpOperator(peekCh)) { - number += ch; - } else if (this.isExpOperator(ch) && - peekCh && this.isNumber(peekCh) && - number.charAt(number.length - 1) == 'e') { - number += ch; - } else if (this.isExpOperator(ch) && - (!peekCh || !this.isNumber(peekCh)) && - number.charAt(number.length - 1) == 'e') { - this.throwError('Invalid exponent'); - } else { - break; - } - } - this.index++; - } - this.tokens.push({ - index: start, - text: number, - constant: true, - value: Number(number) - }); - }, - - readIdent: function() { - var start = this.index; - while (this.index < this.text.length) { - var ch = this.text.charAt(this.index); - if (!(this.isIdent(ch) || this.isNumber(ch))) { - break; - } - this.index++; - } - this.tokens.push({ - index: start, - text: this.text.slice(start, this.index), - identifier: true - }); - }, - - readString: function(quote) { - var start = this.index; - this.index++; - var string = ''; - var rawString = quote; - var escape = false; - while (this.index < this.text.length) { - var ch = this.text.charAt(this.index); - rawString += ch; - if (escape) { - if (ch === 'u') { - var hex = this.text.substring(this.index + 1, this.index + 5); - if (!hex.match(/[\da-f]{4}/i)) - this.throwError('Invalid unicode escape [\\u' + hex + ']'); - this.index += 4; - string += String.fromCharCode(parseInt(hex, 16)); - } else { - var rep = ESCAPE[ch]; - string = string + (rep || ch); - } - escape = false; - } else if (ch === '\\') { - escape = true; - } else if (ch === quote) { - this.index++; - this.tokens.push({ - index: start, - text: rawString, - constant: true, - value: string - }); - return; - } else { - string += ch; - } - this.index++; - } - this.throwError('Unterminated quote', start); - } -}; - - -function isConstant(exp) { - return exp.constant; -} - -/** - * @constructor - */ -var Parser = function(lexer, $filter, options) { - this.lexer = lexer; - this.$filter = $filter; - this.options = options; -}; - -Parser.ZERO = extend(function() { - return 0; -}, { - sharedGetter: true, - constant: true -}); - -Parser.prototype = { - constructor: Parser, - - parse: function(text) { - this.text = text; - this.tokens = this.lexer.lex(text); - - var value = this.statements(); - - if (this.tokens.length !== 0) { - this.throwError('is an unexpected token', this.tokens[0]); - } - - value.literal = !!value.literal; - value.constant = !!value.constant; - - return value; - }, - - primary: function() { - var primary; - if (this.expect('(')) { - primary = this.filterChain(); - this.consume(')'); - } else if (this.expect('[')) { - primary = this.arrayDeclaration(); - } else if (this.expect('{')) { - primary = this.object(); - } else if (this.peek().identifier && this.peek().text in CONSTANTS) { - primary = CONSTANTS[this.consume().text]; - } else if (this.peek().identifier) { - primary = this.identifier(); - } else if (this.peek().constant) { - primary = this.constant(); - } else { - this.throwError('not a primary expression', this.peek()); - } - - var next, context; - while ((next = this.expect('(', '[', '.'))) { - if (next.text === '(') { - primary = this.functionCall(primary, context); - context = null; - } else if (next.text === '[') { - context = primary; - primary = this.objectIndex(primary); - } else if (next.text === '.') { - context = primary; - primary = this.fieldAccess(primary); - } else { - this.throwError('IMPOSSIBLE'); - } - } - return primary; - }, - - throwError: function(msg, token) { - throw $parseMinErr('syntax', - 'Syntax Error: Token \'{0}\' {1} at column {2} of the expression [{3}] starting at [{4}].', - token.text, msg, (token.index + 1), this.text, this.text.substring(token.index)); - }, - - peekToken: function() { - if (this.tokens.length === 0) - throw $parseMinErr('ueoe', 'Unexpected end of expression: {0}', this.text); - return this.tokens[0]; - }, - - peek: function(e1, e2, e3, e4) { - return this.peekAhead(0, e1, e2, e3, e4); - }, - peekAhead: function(i, e1, e2, e3, e4) { - if (this.tokens.length > i) { - var token = this.tokens[i]; - var t = token.text; - if (t === e1 || t === e2 || t === e3 || t === e4 || - (!e1 && !e2 && !e3 && !e4)) { - return token; - } - } - return false; - }, - - expect: function(e1, e2, e3, e4) { - var token = this.peek(e1, e2, e3, e4); - if (token) { - this.tokens.shift(); - return token; - } - return false; - }, - - consume: function(e1) { - if (this.tokens.length === 0) { - throw $parseMinErr('ueoe', 'Unexpected end of expression: {0}', this.text); - } - - var token = this.expect(e1); - if (!token) { - this.throwError('is unexpected, expecting [' + e1 + ']', this.peek()); - } - return token; - }, - - unaryFn: function(op, right) { - var fn = OPERATORS[op]; - return extend(function $parseUnaryFn(self, locals) { - return fn(self, locals, right); - }, { - constant:right.constant, - inputs: [right] - }); - }, - - binaryFn: function(left, op, right, isBranching) { - var fn = OPERATORS[op]; - return extend(function $parseBinaryFn(self, locals) { - return fn(self, locals, left, right); - }, { - constant: left.constant && right.constant, - inputs: !isBranching && [left, right] - }); - }, - - identifier: function() { - var id = this.consume().text; - - //Continue reading each `.identifier` unless it is a method invocation - while (this.peek('.') && this.peekAhead(1).identifier && !this.peekAhead(2, '(')) { - id += this.consume().text + this.consume().text; - } - - return getterFn(id, this.options, this.text); - }, - - constant: function() { - var value = this.consume().value; - - return extend(function $parseConstant() { - return value; - }, { - constant: true, - literal: true - }); - }, - - statements: function() { - var statements = []; - while (true) { - if (this.tokens.length > 0 && !this.peek('}', ')', ';', ']')) - statements.push(this.filterChain()); - if (!this.expect(';')) { - // optimize for the common case where there is only one statement. - // TODO(size): maybe we should not support multiple statements? - return (statements.length === 1) - ? statements[0] - : function $parseStatements(self, locals) { - var value; - for (var i = 0, ii = statements.length; i < ii; i++) { - value = statements[i](self, locals); - } - return value; - }; - } - } - }, - - filterChain: function() { - var left = this.expression(); - var token; - while ((token = this.expect('|'))) { - left = this.filter(left); - } - return left; - }, - - filter: function(inputFn) { - var fn = this.$filter(this.consume().text); - var argsFn; - var args; - - if (this.peek(':')) { - argsFn = []; - args = []; // we can safely reuse the array - while (this.expect(':')) { - argsFn.push(this.expression()); - } - } - - var inputs = [inputFn].concat(argsFn || []); - - return extend(function $parseFilter(self, locals) { - var input = inputFn(self, locals); - if (args) { - args[0] = input; - - var i = argsFn.length; - while (i--) { - args[i + 1] = argsFn[i](self, locals); - } - - return fn.apply(undefined, args); - } - - return fn(input); - }, { - constant: !fn.$stateful && inputs.every(isConstant), - inputs: !fn.$stateful && inputs - }); - }, - - expression: function() { - return this.assignment(); - }, - - assignment: function() { - var left = this.ternary(); - var right; - var token; - if ((token = this.expect('='))) { - if (!left.assign) { - this.throwError('implies assignment but [' + - this.text.substring(0, token.index) + '] can not be assigned to', token); - } - right = this.ternary(); - return extend(function $parseAssignment(scope, locals) { - return left.assign(scope, right(scope, locals), locals); - }, { - inputs: [left, right] - }); - } - return left; - }, - - ternary: function() { - var left = this.logicalOR(); - var middle; - var token; - if ((token = this.expect('?'))) { - middle = this.assignment(); - if (this.consume(':')) { - var right = this.assignment(); - - return extend(function $parseTernary(self, locals) { - return left(self, locals) ? middle(self, locals) : right(self, locals); - }, { - constant: left.constant && middle.constant && right.constant - }); - } - } - - return left; - }, - - logicalOR: function() { - var left = this.logicalAND(); - var token; - while ((token = this.expect('||'))) { - left = this.binaryFn(left, token.text, this.logicalAND(), true); - } - return left; - }, - - logicalAND: function() { - var left = this.equality(); - var token; - while ((token = this.expect('&&'))) { - left = this.binaryFn(left, token.text, this.equality(), true); - } - return left; - }, - - equality: function() { - var left = this.relational(); - var token; - while ((token = this.expect('==','!=','===','!=='))) { - left = this.binaryFn(left, token.text, this.relational()); - } - return left; - }, - - relational: function() { - var left = this.additive(); - var token; - while ((token = this.expect('<', '>', '<=', '>='))) { - left = this.binaryFn(left, token.text, this.additive()); - } - return left; - }, - - additive: function() { - var left = this.multiplicative(); - var token; - while ((token = this.expect('+','-'))) { - left = this.binaryFn(left, token.text, this.multiplicative()); - } - return left; - }, - - multiplicative: function() { - var left = this.unary(); - var token; - while ((token = this.expect('*','/','%'))) { - left = this.binaryFn(left, token.text, this.unary()); - } - return left; - }, - - unary: function() { - var token; - if (this.expect('+')) { - return this.primary(); - } else if ((token = this.expect('-'))) { - return this.binaryFn(Parser.ZERO, token.text, this.unary()); - } else if ((token = this.expect('!'))) { - return this.unaryFn(token.text, this.unary()); - } else { - return this.primary(); - } - }, - - fieldAccess: function(object) { - var getter = this.identifier(); - - return extend(function $parseFieldAccess(scope, locals, self) { - var o = self || object(scope, locals); - return (o == null) ? undefined : getter(o); - }, { - assign: function(scope, value, locals) { - var o = object(scope, locals); - if (!o) object.assign(scope, o = {}, locals); - return getter.assign(o, value); - } - }); - }, - - objectIndex: function(obj) { - var expression = this.text; - - var indexFn = this.expression(); - this.consume(']'); - - return extend(function $parseObjectIndex(self, locals) { - var o = obj(self, locals), - i = indexFn(self, locals), - v; - - ensureSafeMemberName(i, expression); - if (!o) return undefined; - v = ensureSafeObject(o[i], expression); - return v; - }, { - assign: function(self, value, locals) { - var key = ensureSafeMemberName(indexFn(self, locals), expression); - // prevent overwriting of Function.constructor which would break ensureSafeObject check - var o = ensureSafeObject(obj(self, locals), expression); - if (!o) obj.assign(self, o = {}, locals); - return o[key] = value; - } - }); - }, - - functionCall: function(fnGetter, contextGetter) { - var argsFn = []; - if (this.peekToken().text !== ')') { - do { - argsFn.push(this.expression()); - } while (this.expect(',')); - } - this.consume(')'); - - var expressionText = this.text; - // we can safely reuse the array across invocations - var args = argsFn.length ? [] : null; - - return function $parseFunctionCall(scope, locals) { - var context = contextGetter ? contextGetter(scope, locals) : isDefined(contextGetter) ? undefined : scope; - var fn = fnGetter(scope, locals, context) || noop; - - if (args) { - var i = argsFn.length; - while (i--) { - args[i] = ensureSafeObject(argsFn[i](scope, locals), expressionText); - } - } - - ensureSafeObject(context, expressionText); - ensureSafeFunction(fn, expressionText); - - // IE doesn't have apply for some native functions - var v = fn.apply - ? fn.apply(context, args) - : fn(args[0], args[1], args[2], args[3], args[4]); - - return ensureSafeObject(v, expressionText); - }; - }, - - // This is used with json array declaration - arrayDeclaration: function() { - var elementFns = []; - if (this.peekToken().text !== ']') { - do { - if (this.peek(']')) { - // Support trailing commas per ES5.1. - break; - } - elementFns.push(this.expression()); - } while (this.expect(',')); - } - this.consume(']'); - - return extend(function $parseArrayLiteral(self, locals) { - var array = []; - for (var i = 0, ii = elementFns.length; i < ii; i++) { - array.push(elementFns[i](self, locals)); - } - return array; - }, { - literal: true, - constant: elementFns.every(isConstant), - inputs: elementFns - }); - }, - - object: function() { - var keys = [], valueFns = []; - if (this.peekToken().text !== '}') { - do { - if (this.peek('}')) { - // Support trailing commas per ES5.1. - break; - } - var token = this.consume(); - if (token.constant) { - keys.push(token.value); - } else if (token.identifier) { - keys.push(token.text); - } else { - this.throwError("invalid key", token); - } - this.consume(':'); - valueFns.push(this.expression()); - } while (this.expect(',')); - } - this.consume('}'); - - return extend(function $parseObjectLiteral(self, locals) { - var object = {}; - for (var i = 0, ii = valueFns.length; i < ii; i++) { - object[keys[i]] = valueFns[i](self, locals); - } - return object; - }, { - literal: true, - constant: valueFns.every(isConstant), - inputs: valueFns - }); - } -}; - - -////////////////////////////////////////////////// -// Parser helper functions -////////////////////////////////////////////////// - -function setter(obj, locals, path, setValue, fullExp) { - ensureSafeObject(obj, fullExp); - ensureSafeObject(locals, fullExp); - - var element = path.split('.'), key; - for (var i = 0; element.length > 1; i++) { - key = ensureSafeMemberName(element.shift(), fullExp); - var propertyObj = (i === 0 && locals && locals[key]) || obj[key]; - if (!propertyObj) { - propertyObj = {}; - obj[key] = propertyObj; - } - obj = ensureSafeObject(propertyObj, fullExp); - } - key = ensureSafeMemberName(element.shift(), fullExp); - ensureSafeObject(obj[key], fullExp); - obj[key] = setValue; - return setValue; -} - -var getterFnCacheDefault = createMap(); -var getterFnCacheExpensive = createMap(); - -function isPossiblyDangerousMemberName(name) { - return name == 'constructor'; -} - -/** - * Implementation of the "Black Hole" variant from: - * - http://jsperf.com/angularjs-parse-getter/4 - * - http://jsperf.com/path-evaluation-simplified/7 - */ -function cspSafeGetterFn(key0, key1, key2, key3, key4, fullExp, expensiveChecks) { - ensureSafeMemberName(key0, fullExp); - ensureSafeMemberName(key1, fullExp); - ensureSafeMemberName(key2, fullExp); - ensureSafeMemberName(key3, fullExp); - ensureSafeMemberName(key4, fullExp); - var eso = function(o) { - return ensureSafeObject(o, fullExp); - }; - var eso0 = (expensiveChecks || isPossiblyDangerousMemberName(key0)) ? eso : identity; - var eso1 = (expensiveChecks || isPossiblyDangerousMemberName(key1)) ? eso : identity; - var eso2 = (expensiveChecks || isPossiblyDangerousMemberName(key2)) ? eso : identity; - var eso3 = (expensiveChecks || isPossiblyDangerousMemberName(key3)) ? eso : identity; - var eso4 = (expensiveChecks || isPossiblyDangerousMemberName(key4)) ? eso : identity; - - return function cspSafeGetter(scope, locals) { - var pathVal = (locals && locals.hasOwnProperty(key0)) ? locals : scope; - - if (pathVal == null) return pathVal; - pathVal = eso0(pathVal[key0]); - - if (!key1) return pathVal; - if (pathVal == null) return undefined; - pathVal = eso1(pathVal[key1]); - - if (!key2) return pathVal; - if (pathVal == null) return undefined; - pathVal = eso2(pathVal[key2]); - - if (!key3) return pathVal; - if (pathVal == null) return undefined; - pathVal = eso3(pathVal[key3]); - - if (!key4) return pathVal; - if (pathVal == null) return undefined; - pathVal = eso4(pathVal[key4]); - - return pathVal; - }; -} - -function getterFnWithEnsureSafeObject(fn, fullExpression) { - return function(s, l) { - return fn(s, l, ensureSafeObject, fullExpression); - }; -} - -function getterFn(path, options, fullExp) { - var expensiveChecks = options.expensiveChecks; - var getterFnCache = (expensiveChecks ? getterFnCacheExpensive : getterFnCacheDefault); - var fn = getterFnCache[path]; - if (fn) return fn; - - - var pathKeys = path.split('.'), - pathKeysLength = pathKeys.length; - - // http://jsperf.com/angularjs-parse-getter/6 - if (options.csp) { - if (pathKeysLength < 6) { - fn = cspSafeGetterFn(pathKeys[0], pathKeys[1], pathKeys[2], pathKeys[3], pathKeys[4], fullExp, expensiveChecks); - } else { - fn = function cspSafeGetter(scope, locals) { - var i = 0, val; - do { - val = cspSafeGetterFn(pathKeys[i++], pathKeys[i++], pathKeys[i++], pathKeys[i++], - pathKeys[i++], fullExp, expensiveChecks)(scope, locals); - - locals = undefined; // clear after first iteration - scope = val; - } while (i < pathKeysLength); - return val; - }; - } - } else { - var code = ''; - if (expensiveChecks) { - code += 's = eso(s, fe);\nl = eso(l, fe);\n'; - } - var needsEnsureSafeObject = expensiveChecks; - forEach(pathKeys, function(key, index) { - ensureSafeMemberName(key, fullExp); - var lookupJs = (index - // we simply dereference 's' on any .dot notation - ? 's' - // but if we are first then we check locals first, and if so read it first - : '((l&&l.hasOwnProperty("' + key + '"))?l:s)') + '.' + key; - if (expensiveChecks || isPossiblyDangerousMemberName(key)) { - lookupJs = 'eso(' + lookupJs + ', fe)'; - needsEnsureSafeObject = true; - } - code += 'if(s == null) return undefined;\n' + - 's=' + lookupJs + ';\n'; - }); - code += 'return s;'; - - /* jshint -W054 */ - var evaledFnGetter = new Function('s', 'l', 'eso', 'fe', code); // s=scope, l=locals, eso=ensureSafeObject - /* jshint +W054 */ - evaledFnGetter.toString = valueFn(code); - if (needsEnsureSafeObject) { - evaledFnGetter = getterFnWithEnsureSafeObject(evaledFnGetter, fullExp); - } - fn = evaledFnGetter; - } - - fn.sharedGetter = true; - fn.assign = function(self, value, locals) { - return setter(self, locals, path, value, path); - }; - getterFnCache[path] = fn; - return fn; -} - -var objectValueOf = Object.prototype.valueOf; - -function getValueOf(value) { - return isFunction(value.valueOf) ? value.valueOf() : objectValueOf.call(value); -} - -/////////////////////////////////// - -/** - * @ngdoc service - * @name $parse - * @kind function - * - * @description - * - * Converts Angular {@link guide/expression expression} into a function. - * - * ```js - * var getter = $parse('user.name'); - * var setter = getter.assign; - * var context = {user:{name:'angular'}}; - * var locals = {user:{name:'local'}}; - * - * expect(getter(context)).toEqual('angular'); - * setter(context, 'newValue'); - * expect(context.user.name).toEqual('newValue'); - * expect(getter(context, locals)).toEqual('local'); - * ``` - * - * - * @param {string} expression String expression to compile. - * @returns {function(context, locals)} a function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the strings - * are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values in - * `context`. - * - * The returned function also has the following properties: - * * `literal` – `{boolean}` – whether the expression's top-level node is a JavaScript - * literal. - * * `constant` – `{boolean}` – whether the expression is made entirely of JavaScript - * constant literals. - * * `assign` – `{?function(context, value)}` – if the expression is assignable, this will be - * set to a function to change its value on the given context. - * - */ - - -/** - * @ngdoc provider - * @name $parseProvider - * - * @description - * `$parseProvider` can be used for configuring the default behavior of the {@link ng.$parse $parse} - * service. - */ -function $ParseProvider() { - var cacheDefault = createMap(); - var cacheExpensive = createMap(); - - - - this.$get = ['$filter', '$sniffer', function($filter, $sniffer) { - var $parseOptions = { - csp: $sniffer.csp, - expensiveChecks: false - }, - $parseOptionsExpensive = { - csp: $sniffer.csp, - expensiveChecks: true - }; - - function wrapSharedExpression(exp) { - var wrapped = exp; - - if (exp.sharedGetter) { - wrapped = function $parseWrapper(self, locals) { - return exp(self, locals); - }; - wrapped.literal = exp.literal; - wrapped.constant = exp.constant; - wrapped.assign = exp.assign; - } - - return wrapped; - } - - return function $parse(exp, interceptorFn, expensiveChecks) { - var parsedExpression, oneTime, cacheKey; - - switch (typeof exp) { - case 'string': - cacheKey = exp = exp.trim(); - - var cache = (expensiveChecks ? cacheExpensive : cacheDefault); - parsedExpression = cache[cacheKey]; - - if (!parsedExpression) { - if (exp.charAt(0) === ':' && exp.charAt(1) === ':') { - oneTime = true; - exp = exp.substring(2); - } - - var parseOptions = expensiveChecks ? $parseOptionsExpensive : $parseOptions; - var lexer = new Lexer(parseOptions); - var parser = new Parser(lexer, $filter, parseOptions); - parsedExpression = parser.parse(exp); - - if (parsedExpression.constant) { - parsedExpression.$$watchDelegate = constantWatchDelegate; - } else if (oneTime) { - //oneTime is not part of the exp passed to the Parser so we may have to - //wrap the parsedExpression before adding a $$watchDelegate - parsedExpression = wrapSharedExpression(parsedExpression); - parsedExpression.$$watchDelegate = parsedExpression.literal ? - oneTimeLiteralWatchDelegate : oneTimeWatchDelegate; - } else if (parsedExpression.inputs) { - parsedExpression.$$watchDelegate = inputsWatchDelegate; - } - - cache[cacheKey] = parsedExpression; - } - return addInterceptor(parsedExpression, interceptorFn); - - case 'function': - return addInterceptor(exp, interceptorFn); - - default: - return addInterceptor(noop, interceptorFn); - } - }; - - function collectExpressionInputs(inputs, list) { - for (var i = 0, ii = inputs.length; i < ii; i++) { - var input = inputs[i]; - if (!input.constant) { - if (input.inputs) { - collectExpressionInputs(input.inputs, list); - } else if (list.indexOf(input) === -1) { // TODO(perf) can we do better? - list.push(input); - } - } - } - - return list; - } - - function expressionInputDirtyCheck(newValue, oldValueOfValue) { - - if (newValue == null || oldValueOfValue == null) { // null/undefined - return newValue === oldValueOfValue; - } - - if (typeof newValue === 'object') { - - // attempt to convert the value to a primitive type - // TODO(docs): add a note to docs that by implementing valueOf even objects and arrays can - // be cheaply dirty-checked - newValue = getValueOf(newValue); - - if (typeof newValue === 'object') { - // objects/arrays are not supported - deep-watching them would be too expensive - return false; - } - - // fall-through to the primitive equality check - } - - //Primitive or NaN - return newValue === oldValueOfValue || (newValue !== newValue && oldValueOfValue !== oldValueOfValue); - } - - function inputsWatchDelegate(scope, listener, objectEquality, parsedExpression) { - var inputExpressions = parsedExpression.$$inputs || - (parsedExpression.$$inputs = collectExpressionInputs(parsedExpression.inputs, [])); - - var lastResult; - - if (inputExpressions.length === 1) { - var oldInputValue = expressionInputDirtyCheck; // init to something unique so that equals check fails - inputExpressions = inputExpressions[0]; - return scope.$watch(function expressionInputWatch(scope) { - var newInputValue = inputExpressions(scope); - if (!expressionInputDirtyCheck(newInputValue, oldInputValue)) { - lastResult = parsedExpression(scope); - oldInputValue = newInputValue && getValueOf(newInputValue); - } - return lastResult; - }, listener, objectEquality); - } - - var oldInputValueOfValues = []; - for (var i = 0, ii = inputExpressions.length; i < ii; i++) { - oldInputValueOfValues[i] = expressionInputDirtyCheck; // init to something unique so that equals check fails - } - - return scope.$watch(function expressionInputsWatch(scope) { - var changed = false; - - for (var i = 0, ii = inputExpressions.length; i < ii; i++) { - var newInputValue = inputExpressions[i](scope); - if (changed || (changed = !expressionInputDirtyCheck(newInputValue, oldInputValueOfValues[i]))) { - oldInputValueOfValues[i] = newInputValue && getValueOf(newInputValue); - } - } - - if (changed) { - lastResult = parsedExpression(scope); - } - - return lastResult; - }, listener, objectEquality); - } - - function oneTimeWatchDelegate(scope, listener, objectEquality, parsedExpression) { - var unwatch, lastValue; - return unwatch = scope.$watch(function oneTimeWatch(scope) { - return parsedExpression(scope); - }, function oneTimeListener(value, old, scope) { - lastValue = value; - if (isFunction(listener)) { - listener.apply(this, arguments); - } - if (isDefined(value)) { - scope.$$postDigest(function() { - if (isDefined(lastValue)) { - unwatch(); - } - }); - } - }, objectEquality); - } - - function oneTimeLiteralWatchDelegate(scope, listener, objectEquality, parsedExpression) { - var unwatch, lastValue; - return unwatch = scope.$watch(function oneTimeWatch(scope) { - return parsedExpression(scope); - }, function oneTimeListener(value, old, scope) { - lastValue = value; - if (isFunction(listener)) { - listener.call(this, value, old, scope); - } - if (isAllDefined(value)) { - scope.$$postDigest(function() { - if (isAllDefined(lastValue)) unwatch(); - }); - } - }, objectEquality); - - function isAllDefined(value) { - var allDefined = true; - forEach(value, function(val) { - if (!isDefined(val)) allDefined = false; - }); - return allDefined; - } - } - - function constantWatchDelegate(scope, listener, objectEquality, parsedExpression) { - var unwatch; - return unwatch = scope.$watch(function constantWatch(scope) { - return parsedExpression(scope); - }, function constantListener(value, old, scope) { - if (isFunction(listener)) { - listener.apply(this, arguments); - } - unwatch(); - }, objectEquality); - } - - function addInterceptor(parsedExpression, interceptorFn) { - if (!interceptorFn) return parsedExpression; - var watchDelegate = parsedExpression.$$watchDelegate; - - var regularWatch = - watchDelegate !== oneTimeLiteralWatchDelegate && - watchDelegate !== oneTimeWatchDelegate; - - var fn = regularWatch ? function regularInterceptedExpression(scope, locals) { - var value = parsedExpression(scope, locals); - return interceptorFn(value, scope, locals); - } : function oneTimeInterceptedExpression(scope, locals) { - var value = parsedExpression(scope, locals); - var result = interceptorFn(value, scope, locals); - // we only return the interceptor's result if the - // initial value is defined (for bind-once) - return isDefined(value) ? result : value; - }; - - // Propagate $$watchDelegates other then inputsWatchDelegate - if (parsedExpression.$$watchDelegate && - parsedExpression.$$watchDelegate !== inputsWatchDelegate) { - fn.$$watchDelegate = parsedExpression.$$watchDelegate; - } else if (!interceptorFn.$stateful) { - // If there is an interceptor, but no watchDelegate then treat the interceptor like - // we treat filters - it is assumed to be a pure function unless flagged with $stateful - fn.$$watchDelegate = inputsWatchDelegate; - fn.inputs = [parsedExpression]; - } - - return fn; - } - }]; -} - -/** - * @ngdoc service - * @name $q - * @requires $rootScope - * - * @description - * A service that helps you run functions asynchronously, and use their return values (or exceptions) - * when they are done processing. - * - * This is an implementation of promises/deferred objects inspired by - * [Kris Kowal's Q](https://github.com/kriskowal/q). - * - * $q can be used in two fashions --- one which is more similar to Kris Kowal's Q or jQuery's Deferred - * implementations, and the other which resembles ES6 promises to some degree. - * - * # $q constructor - * - * The streamlined ES6 style promise is essentially just using $q as a constructor which takes a `resolver` - * function as the first argument. This is similar to the native Promise implementation from ES6 Harmony, - * see [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise). - * - * While the constructor-style use is supported, not all of the supporting methods from ES6 Harmony promises are - * available yet. - * - * It can be used like so: - * - * ```js - * // for the purpose of this example let's assume that variables `$q` and `okToGreet` - * // are available in the current lexical scope (they could have been injected or passed in). - * - * function asyncGreet(name) { - * // perform some asynchronous operation, resolve or reject the promise when appropriate. - * return $q(function(resolve, reject) { - * setTimeout(function() { - * if (okToGreet(name)) { - * resolve('Hello, ' + name + '!'); - * } else { - * reject('Greeting ' + name + ' is not allowed.'); - * } - * }, 1000); - * }); - * } - * - * var promise = asyncGreet('Robin Hood'); - * promise.then(function(greeting) { - * alert('Success: ' + greeting); - * }, function(reason) { - * alert('Failed: ' + reason); - * }); - * ``` - * - * Note: progress/notify callbacks are not currently supported via the ES6-style interface. - * - * However, the more traditional CommonJS-style usage is still available, and documented below. - * - * [The CommonJS Promise proposal](http://wiki.commonjs.org/wiki/Promises) describes a promise as an - * interface for interacting with an object that represents the result of an action that is - * performed asynchronously, and may or may not be finished at any given point in time. - * - * From the perspective of dealing with error handling, deferred and promise APIs are to - * asynchronous programming what `try`, `catch` and `throw` keywords are to synchronous programming. - * - * ```js - * // for the purpose of this example let's assume that variables `$q` and `okToGreet` - * // are available in the current lexical scope (they could have been injected or passed in). - * - * function asyncGreet(name) { - * var deferred = $q.defer(); - * - * setTimeout(function() { - * deferred.notify('About to greet ' + name + '.'); - * - * if (okToGreet(name)) { - * deferred.resolve('Hello, ' + name + '!'); - * } else { - * deferred.reject('Greeting ' + name + ' is not allowed.'); - * } - * }, 1000); - * - * return deferred.promise; - * } - * - * var promise = asyncGreet('Robin Hood'); - * promise.then(function(greeting) { - * alert('Success: ' + greeting); - * }, function(reason) { - * alert('Failed: ' + reason); - * }, function(update) { - * alert('Got notification: ' + update); - * }); - * ``` - * - * At first it might not be obvious why this extra complexity is worth the trouble. The payoff - * comes in the way of guarantees that promise and deferred APIs make, see - * https://github.com/kriskowal/uncommonjs/blob/master/promises/specification.md. - * - * Additionally the promise api allows for composition that is very hard to do with the - * traditional callback ([CPS](http://en.wikipedia.org/wiki/Continuation-passing_style)) approach. - * For more on this please see the [Q documentation](https://github.com/kriskowal/q) especially the - * section on serial or parallel joining of promises. - * - * # The Deferred API - * - * A new instance of deferred is constructed by calling `$q.defer()`. - * - * The purpose of the deferred object is to expose the associated Promise instance as well as APIs - * that can be used for signaling the successful or unsuccessful completion, as well as the status - * of the task. - * - * **Methods** - * - * - `resolve(value)` – resolves the derived promise with the `value`. If the value is a rejection - * constructed via `$q.reject`, the promise will be rejected instead. - * - `reject(reason)` – rejects the derived promise with the `reason`. This is equivalent to - * resolving it with a rejection constructed via `$q.reject`. - * - `notify(value)` - provides updates on the status of the promise's execution. This may be called - * multiple times before the promise is either resolved or rejected. - * - * **Properties** - * - * - promise – `{Promise}` – promise object associated with this deferred. - * - * - * # The Promise API - * - * A new promise instance is created when a deferred instance is created and can be retrieved by - * calling `deferred.promise`. - * - * The purpose of the promise object is to allow for interested parties to get access to the result - * of the deferred task when it completes. - * - * **Methods** - * - * - `then(successCallback, errorCallback, notifyCallback)` – regardless of when the promise was or - * will be resolved or rejected, `then` calls one of the success or error callbacks asynchronously - * as soon as the result is available. The callbacks are called with a single argument: the result - * or rejection reason. Additionally, the notify callback may be called zero or more times to - * provide a progress indication, before the promise is resolved or rejected. - * - * This method *returns a new promise* which is resolved or rejected via the return value of the - * `successCallback`, `errorCallback`. It also notifies via the return value of the - * `notifyCallback` method. The promise cannot be resolved or rejected from the notifyCallback - * method. - * - * - `catch(errorCallback)` – shorthand for `promise.then(null, errorCallback)` - * - * - `finally(callback, notifyCallback)` – allows you to observe either the fulfillment or rejection of a promise, - * but to do so without modifying the final value. This is useful to release resources or do some - * clean-up that needs to be done whether the promise was rejected or resolved. See the [full - * specification](https://github.com/kriskowal/q/wiki/API-Reference#promisefinallycallback) for - * more information. - * - * # Chaining promises - * - * Because calling the `then` method of a promise returns a new derived promise, it is easily - * possible to create a chain of promises: - * - * ```js - * promiseB = promiseA.then(function(result) { - * return result + 1; - * }); - * - * // promiseB will be resolved immediately after promiseA is resolved and its value - * // will be the result of promiseA incremented by 1 - * ``` - * - * It is possible to create chains of any length and since a promise can be resolved with another - * promise (which will defer its resolution further), it is possible to pause/defer resolution of - * the promises at any point in the chain. This makes it possible to implement powerful APIs like - * $http's response interceptors. - * - * - * # Differences between Kris Kowal's Q and $q - * - * There are two main differences: - * - * - $q is integrated with the {@link ng.$rootScope.Scope} Scope model observation - * mechanism in angular, which means faster propagation of resolution or rejection into your - * models and avoiding unnecessary browser repaints, which would result in flickering UI. - * - Q has many more features than $q, but that comes at a cost of bytes. $q is tiny, but contains - * all the important functionality needed for common async tasks. - * - * # Testing - * - * ```js - * it('should simulate promise', inject(function($q, $rootScope) { - * var deferred = $q.defer(); - * var promise = deferred.promise; - * var resolvedValue; - * - * promise.then(function(value) { resolvedValue = value; }); - * expect(resolvedValue).toBeUndefined(); - * - * // Simulate resolving of promise - * deferred.resolve(123); - * // Note that the 'then' function does not get called synchronously. - * // This is because we want the promise API to always be async, whether or not - * // it got called synchronously or asynchronously. - * expect(resolvedValue).toBeUndefined(); - * - * // Propagate promise resolution to 'then' functions using $apply(). - * $rootScope.$apply(); - * expect(resolvedValue).toEqual(123); - * })); - * ``` - * - * @param {function(function, function)} resolver Function which is responsible for resolving or - * rejecting the newly created promise. The first parameter is a function which resolves the - * promise, the second parameter is a function which rejects the promise. - * - * @returns {Promise} The newly created promise. - */ -function $QProvider() { - - this.$get = ['$rootScope', '$exceptionHandler', function($rootScope, $exceptionHandler) { - return qFactory(function(callback) { - $rootScope.$evalAsync(callback); - }, $exceptionHandler); - }]; -} - -function $$QProvider() { - this.$get = ['$browser', '$exceptionHandler', function($browser, $exceptionHandler) { - return qFactory(function(callback) { - $browser.defer(callback); - }, $exceptionHandler); - }]; -} - -/** - * Constructs a promise manager. - * - * @param {function(function)} nextTick Function for executing functions in the next turn. - * @param {function(...*)} exceptionHandler Function into which unexpected exceptions are passed for - * debugging purposes. - * @returns {object} Promise manager. - */ -function qFactory(nextTick, exceptionHandler) { - var $qMinErr = minErr('$q', TypeError); - function callOnce(self, resolveFn, rejectFn) { - var called = false; - function wrap(fn) { - return function(value) { - if (called) return; - called = true; - fn.call(self, value); - }; - } - - return [wrap(resolveFn), wrap(rejectFn)]; - } - - /** - * @ngdoc method - * @name ng.$q#defer - * @kind function - * - * @description - * Creates a `Deferred` object which represents a task which will finish in the future. - * - * @returns {Deferred} Returns a new instance of deferred. - */ - var defer = function() { - return new Deferred(); - }; - - function Promise() { - this.$$state = { status: 0 }; - } - - Promise.prototype = { - then: function(onFulfilled, onRejected, progressBack) { - var result = new Deferred(); - - this.$$state.pending = this.$$state.pending || []; - this.$$state.pending.push([result, onFulfilled, onRejected, progressBack]); - if (this.$$state.status > 0) scheduleProcessQueue(this.$$state); - - return result.promise; - }, - - "catch": function(callback) { - return this.then(null, callback); - }, - - "finally": function(callback, progressBack) { - return this.then(function(value) { - return handleCallback(value, true, callback); - }, function(error) { - return handleCallback(error, false, callback); - }, progressBack); - } - }; - - //Faster, more basic than angular.bind http://jsperf.com/angular-bind-vs-custom-vs-native - function simpleBind(context, fn) { - return function(value) { - fn.call(context, value); - }; - } - - function processQueue(state) { - var fn, promise, pending; - - pending = state.pending; - state.processScheduled = false; - state.pending = undefined; - for (var i = 0, ii = pending.length; i < ii; ++i) { - promise = pending[i][0]; - fn = pending[i][state.status]; - try { - if (isFunction(fn)) { - promise.resolve(fn(state.value)); - } else if (state.status === 1) { - promise.resolve(state.value); - } else { - promise.reject(state.value); - } - } catch (e) { - promise.reject(e); - exceptionHandler(e); - } - } - } - - function scheduleProcessQueue(state) { - if (state.processScheduled || !state.pending) return; - state.processScheduled = true; - nextTick(function() { processQueue(state); }); - } - - function Deferred() { - this.promise = new Promise(); - //Necessary to support unbound execution :/ - this.resolve = simpleBind(this, this.resolve); - this.reject = simpleBind(this, this.reject); - this.notify = simpleBind(this, this.notify); - } - - Deferred.prototype = { - resolve: function(val) { - if (this.promise.$$state.status) return; - if (val === this.promise) { - this.$$reject($qMinErr( - 'qcycle', - "Expected promise to be resolved with value other than itself '{0}'", - val)); - } - else { - this.$$resolve(val); - } - - }, - - $$resolve: function(val) { - var then, fns; - - fns = callOnce(this, this.$$resolve, this.$$reject); - try { - if ((isObject(val) || isFunction(val))) then = val && val.then; - if (isFunction(then)) { - this.promise.$$state.status = -1; - then.call(val, fns[0], fns[1], this.notify); - } else { - this.promise.$$state.value = val; - this.promise.$$state.status = 1; - scheduleProcessQueue(this.promise.$$state); - } - } catch (e) { - fns[1](e); - exceptionHandler(e); - } - }, - - reject: function(reason) { - if (this.promise.$$state.status) return; - this.$$reject(reason); - }, - - $$reject: function(reason) { - this.promise.$$state.value = reason; - this.promise.$$state.status = 2; - scheduleProcessQueue(this.promise.$$state); - }, - - notify: function(progress) { - var callbacks = this.promise.$$state.pending; - - if ((this.promise.$$state.status <= 0) && callbacks && callbacks.length) { - nextTick(function() { - var callback, result; - for (var i = 0, ii = callbacks.length; i < ii; i++) { - result = callbacks[i][0]; - callback = callbacks[i][3]; - try { - result.notify(isFunction(callback) ? callback(progress) : progress); - } catch (e) { - exceptionHandler(e); - } - } - }); - } - } - }; - - /** - * @ngdoc method - * @name $q#reject - * @kind function - * - * @description - * Creates a promise that is resolved as rejected with the specified `reason`. This api should be - * used to forward rejection in a chain of promises. If you are dealing with the last promise in - * a promise chain, you don't need to worry about it. - * - * When comparing deferreds/promises to the familiar behavior of try/catch/throw, think of - * `reject` as the `throw` keyword in JavaScript. This also means that if you "catch" an error via - * a promise error callback and you want to forward the error to the promise derived from the - * current promise, you have to "rethrow" the error by returning a rejection constructed via - * `reject`. - * - * ```js - * promiseB = promiseA.then(function(result) { - * // success: do something and resolve promiseB - * // with the old or a new result - * return result; - * }, function(reason) { - * // error: handle the error if possible and - * // resolve promiseB with newPromiseOrValue, - * // otherwise forward the rejection to promiseB - * if (canHandle(reason)) { - * // handle the error and recover - * return newPromiseOrValue; - * } - * return $q.reject(reason); - * }); - * ``` - * - * @param {*} reason Constant, message, exception or an object representing the rejection reason. - * @returns {Promise} Returns a promise that was already resolved as rejected with the `reason`. - */ - var reject = function(reason) { - var result = new Deferred(); - result.reject(reason); - return result.promise; - }; - - var makePromise = function makePromise(value, resolved) { - var result = new Deferred(); - if (resolved) { - result.resolve(value); - } else { - result.reject(value); - } - return result.promise; - }; - - var handleCallback = function handleCallback(value, isResolved, callback) { - var callbackOutput = null; - try { - if (isFunction(callback)) callbackOutput = callback(); - } catch (e) { - return makePromise(e, false); - } - if (isPromiseLike(callbackOutput)) { - return callbackOutput.then(function() { - return makePromise(value, isResolved); - }, function(error) { - return makePromise(error, false); - }); - } else { - return makePromise(value, isResolved); - } - }; - - /** - * @ngdoc method - * @name $q#when - * @kind function - * - * @description - * Wraps an object that might be a value or a (3rd party) then-able promise into a $q promise. - * This is useful when you are dealing with an object that might or might not be a promise, or if - * the promise comes from a source that can't be trusted. - * - * @param {*} value Value or a promise - * @returns {Promise} Returns a promise of the passed value or promise - */ - - - var when = function(value, callback, errback, progressBack) { - var result = new Deferred(); - result.resolve(value); - return result.promise.then(callback, errback, progressBack); - }; - - /** - * @ngdoc method - * @name $q#all - * @kind function - * - * @description - * Combines multiple promises into a single promise that is resolved when all of the input - * promises are resolved. - * - * @param {Array.<Promise>|Object.<Promise>} promises An array or hash of promises. - * @returns {Promise} Returns a single promise that will be resolved with an array/hash of values, - * each value corresponding to the promise at the same index/key in the `promises` array/hash. - * If any of the promises is resolved with a rejection, this resulting promise will be rejected - * with the same rejection value. - */ - - function all(promises) { - var deferred = new Deferred(), - counter = 0, - results = isArray(promises) ? [] : {}; - - forEach(promises, function(promise, key) { - counter++; - when(promise).then(function(value) { - if (results.hasOwnProperty(key)) return; - results[key] = value; - if (!(--counter)) deferred.resolve(results); - }, function(reason) { - if (results.hasOwnProperty(key)) return; - deferred.reject(reason); - }); - }); - - if (counter === 0) { - deferred.resolve(results); - } - - return deferred.promise; - } - - var $Q = function Q(resolver) { - if (!isFunction(resolver)) { - throw $qMinErr('norslvr', "Expected resolverFn, got '{0}'", resolver); - } - - if (!(this instanceof Q)) { - // More useful when $Q is the Promise itself. - return new Q(resolver); - } - - var deferred = new Deferred(); - - function resolveFn(value) { - deferred.resolve(value); - } - - function rejectFn(reason) { - deferred.reject(reason); - } - - resolver(resolveFn, rejectFn); - - return deferred.promise; - }; - - $Q.defer = defer; - $Q.reject = reject; - $Q.when = when; - $Q.all = all; - - return $Q; -} - -function $$RAFProvider() { //rAF - this.$get = ['$window', '$timeout', function($window, $timeout) { - var requestAnimationFrame = $window.requestAnimationFrame || - $window.webkitRequestAnimationFrame; - - var cancelAnimationFrame = $window.cancelAnimationFrame || - $window.webkitCancelAnimationFrame || - $window.webkitCancelRequestAnimationFrame; - - var rafSupported = !!requestAnimationFrame; - var raf = rafSupported - ? function(fn) { - var id = requestAnimationFrame(fn); - return function() { - cancelAnimationFrame(id); - }; - } - : function(fn) { - var timer = $timeout(fn, 16.66, false); // 1000 / 60 = 16.666 - return function() { - $timeout.cancel(timer); - }; - }; - - raf.supported = rafSupported; - - return raf; - }]; -} - -/** - * DESIGN NOTES - * - * The design decisions behind the scope are heavily favored for speed and memory consumption. - * - * The typical use of scope is to watch the expressions, which most of the time return the same - * value as last time so we optimize the operation. - * - * Closures construction is expensive in terms of speed as well as memory: - * - No closures, instead use prototypical inheritance for API - * - Internal state needs to be stored on scope directly, which means that private state is - * exposed as $$____ properties - * - * Loop operations are optimized by using while(count--) { ... } - * - this means that in order to keep the same order of execution as addition we have to add - * items to the array at the beginning (unshift) instead of at the end (push) - * - * Child scopes are created and removed often - * - Using an array would be slow since inserts in middle are expensive so we use linked list - * - * There are few watches then a lot of observers. This is why you don't want the observer to be - * implemented in the same way as watch. Watch requires return of initialization function which - * are expensive to construct. - */ - - -/** - * @ngdoc provider - * @name $rootScopeProvider - * @description - * - * Provider for the $rootScope service. - */ - -/** - * @ngdoc method - * @name $rootScopeProvider#digestTtl - * @description - * - * Sets the number of `$digest` iterations the scope should attempt to execute before giving up and - * assuming that the model is unstable. - * - * The current default is 10 iterations. - * - * In complex applications it's possible that the dependencies between `$watch`s will result in - * several digest iterations. However if an application needs more than the default 10 digest - * iterations for its model to stabilize then you should investigate what is causing the model to - * continuously change during the digest. - * - * Increasing the TTL could have performance implications, so you should not change it without - * proper justification. - * - * @param {number} limit The number of digest iterations. - */ - - -/** - * @ngdoc service - * @name $rootScope - * @description - * - * Every application has a single root {@link ng.$rootScope.Scope scope}. - * All other scopes are descendant scopes of the root scope. Scopes provide separation - * between the model and the view, via a mechanism for watching the model for changes. - * They also provide an event emission/broadcast and subscription facility. See the - * {@link guide/scope developer guide on scopes}. - */ -function $RootScopeProvider() { - var TTL = 10; - var $rootScopeMinErr = minErr('$rootScope'); - var lastDirtyWatch = null; - var applyAsyncId = null; - - this.digestTtl = function(value) { - if (arguments.length) { - TTL = value; - } - return TTL; - }; - - this.$get = ['$injector', '$exceptionHandler', '$parse', '$browser', - function($injector, $exceptionHandler, $parse, $browser) { - - /** - * @ngdoc type - * @name $rootScope.Scope - * - * @description - * A root scope can be retrieved using the {@link ng.$rootScope $rootScope} key from the - * {@link auto.$injector $injector}. Child scopes are created using the - * {@link ng.$rootScope.Scope#$new $new()} method. (Most scopes are created automatically when - * compiled HTML template is executed.) - * - * Here is a simple scope snippet to show how you can interact with the scope. - * ```html - * <file src="./test/ng/rootScopeSpec.js" tag="docs1" /> - * ``` - * - * # Inheritance - * A scope can inherit from a parent scope, as in this example: - * ```js - var parent = $rootScope; - var child = parent.$new(); - - parent.salutation = "Hello"; - expect(child.salutation).toEqual('Hello'); - - child.salutation = "Welcome"; - expect(child.salutation).toEqual('Welcome'); - expect(parent.salutation).toEqual('Hello'); - * ``` - * - * When interacting with `Scope` in tests, additional helper methods are available on the - * instances of `Scope` type. See {@link ngMock.$rootScope.Scope ngMock Scope} for additional - * details. - * - * - * @param {Object.<string, function()>=} providers Map of service factory which need to be - * provided for the current scope. Defaults to {@link ng}. - * @param {Object.<string, *>=} instanceCache Provides pre-instantiated services which should - * append/override services provided by `providers`. This is handy - * when unit-testing and having the need to override a default - * service. - * @returns {Object} Newly created scope. - * - */ - function Scope() { - this.$id = nextUid(); - this.$$phase = this.$parent = this.$$watchers = - this.$$nextSibling = this.$$prevSibling = - this.$$childHead = this.$$childTail = null; - this.$root = this; - this.$$destroyed = false; - this.$$listeners = {}; - this.$$listenerCount = {}; - this.$$isolateBindings = null; - } - - /** - * @ngdoc property - * @name $rootScope.Scope#$id - * - * @description - * Unique scope ID (monotonically increasing) useful for debugging. - */ - - /** - * @ngdoc property - * @name $rootScope.Scope#$parent - * - * @description - * Reference to the parent scope. - */ - - /** - * @ngdoc property - * @name $rootScope.Scope#$root - * - * @description - * Reference to the root scope. - */ - - Scope.prototype = { - constructor: Scope, - /** - * @ngdoc method - * @name $rootScope.Scope#$new - * @kind function - * - * @description - * Creates a new child {@link ng.$rootScope.Scope scope}. - * - * The parent scope will propagate the {@link ng.$rootScope.Scope#$digest $digest()} event. - * The scope can be removed from the scope hierarchy using {@link ng.$rootScope.Scope#$destroy $destroy()}. - * - * {@link ng.$rootScope.Scope#$destroy $destroy()} must be called on a scope when it is - * desired for the scope and its child scopes to be permanently detached from the parent and - * thus stop participating in model change detection and listener notification by invoking. - * - * @param {boolean} isolate If true, then the scope does not prototypically inherit from the - * parent scope. The scope is isolated, as it can not see parent scope properties. - * When creating widgets, it is useful for the widget to not accidentally read parent - * state. - * - * @param {Scope} [parent=this] The {@link ng.$rootScope.Scope `Scope`} that will be the `$parent` - * of the newly created scope. Defaults to `this` scope if not provided. - * This is used when creating a transclude scope to correctly place it - * in the scope hierarchy while maintaining the correct prototypical - * inheritance. - * - * @returns {Object} The newly created child scope. - * - */ - $new: function(isolate, parent) { - var child; - - parent = parent || this; - - if (isolate) { - child = new Scope(); - child.$root = this.$root; - } else { - // Only create a child scope class if somebody asks for one, - // but cache it to allow the VM to optimize lookups. - if (!this.$$ChildScope) { - this.$$ChildScope = function ChildScope() { - this.$$watchers = this.$$nextSibling = - this.$$childHead = this.$$childTail = null; - this.$$listeners = {}; - this.$$listenerCount = {}; - this.$id = nextUid(); - this.$$ChildScope = null; - }; - this.$$ChildScope.prototype = this; - } - child = new this.$$ChildScope(); - } - child.$parent = parent; - child.$$prevSibling = parent.$$childTail; - if (parent.$$childHead) { - parent.$$childTail.$$nextSibling = child; - parent.$$childTail = child; - } else { - parent.$$childHead = parent.$$childTail = child; - } - - // When the new scope is not isolated or we inherit from `this`, and - // the parent scope is destroyed, the property `$$destroyed` is inherited - // prototypically. In all other cases, this property needs to be set - // when the parent scope is destroyed. - // The listener needs to be added after the parent is set - if (isolate || parent != this) child.$on('$destroy', destroyChild); - - return child; - - function destroyChild() { - child.$$destroyed = true; - } - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$watch - * @kind function - * - * @description - * Registers a `listener` callback to be executed whenever the `watchExpression` changes. - * - * - The `watchExpression` is called on every call to {@link ng.$rootScope.Scope#$digest - * $digest()} and should return the value that will be watched. (Since - * {@link ng.$rootScope.Scope#$digest $digest()} reruns when it detects changes the - * `watchExpression` can execute multiple times per - * {@link ng.$rootScope.Scope#$digest $digest()} and should be idempotent.) - * - The `listener` is called only when the value from the current `watchExpression` and the - * previous call to `watchExpression` are not equal (with the exception of the initial run, - * see below). Inequality is determined according to reference inequality, - * [strict comparison](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators) - * via the `!==` Javascript operator, unless `objectEquality == true` - * (see next point) - * - When `objectEquality == true`, inequality of the `watchExpression` is determined - * according to the {@link angular.equals} function. To save the value of the object for - * later comparison, the {@link angular.copy} function is used. This therefore means that - * watching complex objects will have adverse memory and performance implications. - * - The watch `listener` may change the model, which may trigger other `listener`s to fire. - * This is achieved by rerunning the watchers until no changes are detected. The rerun - * iteration limit is 10 to prevent an infinite loop deadlock. - * - * - * If you want to be notified whenever {@link ng.$rootScope.Scope#$digest $digest} is called, - * you can register a `watchExpression` function with no `listener`. (Since `watchExpression` - * can execute multiple times per {@link ng.$rootScope.Scope#$digest $digest} cycle when a - * change is detected, be prepared for multiple calls to your listener.) - * - * After a watcher is registered with the scope, the `listener` fn is called asynchronously - * (via {@link ng.$rootScope.Scope#$evalAsync $evalAsync}) to initialize the - * watcher. In rare cases, this is undesirable because the listener is called when the result - * of `watchExpression` didn't change. To detect this scenario within the `listener` fn, you - * can compare the `newVal` and `oldVal`. If these two values are identical (`===`) then the - * listener was called due to initialization. - * - * - * - * # Example - * ```js - // let's assume that scope was dependency injected as the $rootScope - var scope = $rootScope; - scope.name = 'misko'; - scope.counter = 0; - - expect(scope.counter).toEqual(0); - scope.$watch('name', function(newValue, oldValue) { - scope.counter = scope.counter + 1; - }); - expect(scope.counter).toEqual(0); - - scope.$digest(); - // the listener is always called during the first $digest loop after it was registered - expect(scope.counter).toEqual(1); - - scope.$digest(); - // but now it will not be called unless the value changes - expect(scope.counter).toEqual(1); - - scope.name = 'adam'; - scope.$digest(); - expect(scope.counter).toEqual(2); - - - - // Using a function as a watchExpression - var food; - scope.foodCounter = 0; - expect(scope.foodCounter).toEqual(0); - scope.$watch( - // This function returns the value being watched. It is called for each turn of the $digest loop - function() { return food; }, - // This is the change listener, called when the value returned from the above function changes - function(newValue, oldValue) { - if ( newValue !== oldValue ) { - // Only increment the counter if the value changed - scope.foodCounter = scope.foodCounter + 1; - } - } - ); - // No digest has been run so the counter will be zero - expect(scope.foodCounter).toEqual(0); - - // Run the digest but since food has not changed count will still be zero - scope.$digest(); - expect(scope.foodCounter).toEqual(0); - - // Update food and run digest. Now the counter will increment - food = 'cheeseburger'; - scope.$digest(); - expect(scope.foodCounter).toEqual(1); - - * ``` - * - * - * - * @param {(function()|string)} watchExpression Expression that is evaluated on each - * {@link ng.$rootScope.Scope#$digest $digest} cycle. A change in the return value triggers - * a call to the `listener`. - * - * - `string`: Evaluated as {@link guide/expression expression} - * - `function(scope)`: called with current `scope` as a parameter. - * @param {function(newVal, oldVal, scope)} listener Callback called whenever the value - * of `watchExpression` changes. - * - * - `newVal` contains the current value of the `watchExpression` - * - `oldVal` contains the previous value of the `watchExpression` - * - `scope` refers to the current scope - * @param {boolean=} objectEquality Compare for object equality using {@link angular.equals} instead of - * comparing for reference equality. - * @returns {function()} Returns a deregistration function for this listener. - */ - $watch: function(watchExp, listener, objectEquality) { - var get = $parse(watchExp); - - if (get.$$watchDelegate) { - return get.$$watchDelegate(this, listener, objectEquality, get); - } - var scope = this, - array = scope.$$watchers, - watcher = { - fn: listener, - last: initWatchVal, - get: get, - exp: watchExp, - eq: !!objectEquality - }; - - lastDirtyWatch = null; - - if (!isFunction(listener)) { - watcher.fn = noop; - } - - if (!array) { - array = scope.$$watchers = []; - } - // we use unshift since we use a while loop in $digest for speed. - // the while loop reads in reverse order. - array.unshift(watcher); - - return function deregisterWatch() { - arrayRemove(array, watcher); - lastDirtyWatch = null; - }; - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$watchGroup - * @kind function - * - * @description - * A variant of {@link ng.$rootScope.Scope#$watch $watch()} where it watches an array of `watchExpressions`. - * If any one expression in the collection changes the `listener` is executed. - * - * - The items in the `watchExpressions` array are observed via standard $watch operation and are examined on every - * call to $digest() to see if any items changes. - * - The `listener` is called whenever any expression in the `watchExpressions` array changes. - * - * @param {Array.<string|Function(scope)>} watchExpressions Array of expressions that will be individually - * watched using {@link ng.$rootScope.Scope#$watch $watch()} - * - * @param {function(newValues, oldValues, scope)} listener Callback called whenever the return value of any - * expression in `watchExpressions` changes - * The `newValues` array contains the current values of the `watchExpressions`, with the indexes matching - * those of `watchExpression` - * and the `oldValues` array contains the previous values of the `watchExpressions`, with the indexes matching - * those of `watchExpression` - * The `scope` refers to the current scope. - * @returns {function()} Returns a de-registration function for all listeners. - */ - $watchGroup: function(watchExpressions, listener) { - var oldValues = new Array(watchExpressions.length); - var newValues = new Array(watchExpressions.length); - var deregisterFns = []; - var self = this; - var changeReactionScheduled = false; - var firstRun = true; - - if (!watchExpressions.length) { - // No expressions means we call the listener ASAP - var shouldCall = true; - self.$evalAsync(function() { - if (shouldCall) listener(newValues, newValues, self); - }); - return function deregisterWatchGroup() { - shouldCall = false; - }; - } - - if (watchExpressions.length === 1) { - // Special case size of one - return this.$watch(watchExpressions[0], function watchGroupAction(value, oldValue, scope) { - newValues[0] = value; - oldValues[0] = oldValue; - listener(newValues, (value === oldValue) ? newValues : oldValues, scope); - }); - } - - forEach(watchExpressions, function(expr, i) { - var unwatchFn = self.$watch(expr, function watchGroupSubAction(value, oldValue) { - newValues[i] = value; - oldValues[i] = oldValue; - if (!changeReactionScheduled) { - changeReactionScheduled = true; - self.$evalAsync(watchGroupAction); - } - }); - deregisterFns.push(unwatchFn); - }); - - function watchGroupAction() { - changeReactionScheduled = false; - - if (firstRun) { - firstRun = false; - listener(newValues, newValues, self); - } else { - listener(newValues, oldValues, self); - } - } - - return function deregisterWatchGroup() { - while (deregisterFns.length) { - deregisterFns.shift()(); - } - }; - }, - - - /** - * @ngdoc method - * @name $rootScope.Scope#$watchCollection - * @kind function - * - * @description - * Shallow watches the properties of an object and fires whenever any of the properties change - * (for arrays, this implies watching the array items; for object maps, this implies watching - * the properties). If a change is detected, the `listener` callback is fired. - * - * - The `obj` collection is observed via standard $watch operation and is examined on every - * call to $digest() to see if any items have been added, removed, or moved. - * - The `listener` is called whenever anything within the `obj` has changed. Examples include - * adding, removing, and moving items belonging to an object or array. - * - * - * # Example - * ```js - $scope.names = ['igor', 'matias', 'misko', 'james']; - $scope.dataCount = 4; - - $scope.$watchCollection('names', function(newNames, oldNames) { - $scope.dataCount = newNames.length; - }); - - expect($scope.dataCount).toEqual(4); - $scope.$digest(); - - //still at 4 ... no changes - expect($scope.dataCount).toEqual(4); - - $scope.names.pop(); - $scope.$digest(); - - //now there's been a change - expect($scope.dataCount).toEqual(3); - * ``` - * - * - * @param {string|function(scope)} obj Evaluated as {@link guide/expression expression}. The - * expression value should evaluate to an object or an array which is observed on each - * {@link ng.$rootScope.Scope#$digest $digest} cycle. Any shallow change within the - * collection will trigger a call to the `listener`. - * - * @param {function(newCollection, oldCollection, scope)} listener a callback function called - * when a change is detected. - * - The `newCollection` object is the newly modified data obtained from the `obj` expression - * - The `oldCollection` object is a copy of the former collection data. - * Due to performance considerations, the`oldCollection` value is computed only if the - * `listener` function declares two or more arguments. - * - The `scope` argument refers to the current scope. - * - * @returns {function()} Returns a de-registration function for this listener. When the - * de-registration function is executed, the internal watch operation is terminated. - */ - $watchCollection: function(obj, listener) { - $watchCollectionInterceptor.$stateful = true; - - var self = this; - // the current value, updated on each dirty-check run - var newValue; - // a shallow copy of the newValue from the last dirty-check run, - // updated to match newValue during dirty-check run - var oldValue; - // a shallow copy of the newValue from when the last change happened - var veryOldValue; - // only track veryOldValue if the listener is asking for it - var trackVeryOldValue = (listener.length > 1); - var changeDetected = 0; - var changeDetector = $parse(obj, $watchCollectionInterceptor); - var internalArray = []; - var internalObject = {}; - var initRun = true; - var oldLength = 0; - - function $watchCollectionInterceptor(_value) { - newValue = _value; - var newLength, key, bothNaN, newItem, oldItem; - - // If the new value is undefined, then return undefined as the watch may be a one-time watch - if (isUndefined(newValue)) return; - - if (!isObject(newValue)) { // if primitive - if (oldValue !== newValue) { - oldValue = newValue; - changeDetected++; - } - } else if (isArrayLike(newValue)) { - if (oldValue !== internalArray) { - // we are transitioning from something which was not an array into array. - oldValue = internalArray; - oldLength = oldValue.length = 0; - changeDetected++; - } - - newLength = newValue.length; - - if (oldLength !== newLength) { - // if lengths do not match we need to trigger change notification - changeDetected++; - oldValue.length = oldLength = newLength; - } - // copy the items to oldValue and look for changes. - for (var i = 0; i < newLength; i++) { - oldItem = oldValue[i]; - newItem = newValue[i]; - - bothNaN = (oldItem !== oldItem) && (newItem !== newItem); - if (!bothNaN && (oldItem !== newItem)) { - changeDetected++; - oldValue[i] = newItem; - } - } - } else { - if (oldValue !== internalObject) { - // we are transitioning from something which was not an object into object. - oldValue = internalObject = {}; - oldLength = 0; - changeDetected++; - } - // copy the items to oldValue and look for changes. - newLength = 0; - for (key in newValue) { - if (newValue.hasOwnProperty(key)) { - newLength++; - newItem = newValue[key]; - oldItem = oldValue[key]; - - if (key in oldValue) { - bothNaN = (oldItem !== oldItem) && (newItem !== newItem); - if (!bothNaN && (oldItem !== newItem)) { - changeDetected++; - oldValue[key] = newItem; - } - } else { - oldLength++; - oldValue[key] = newItem; - changeDetected++; - } - } - } - if (oldLength > newLength) { - // we used to have more keys, need to find them and destroy them. - changeDetected++; - for (key in oldValue) { - if (!newValue.hasOwnProperty(key)) { - oldLength--; - delete oldValue[key]; - } - } - } - } - return changeDetected; - } - - function $watchCollectionAction() { - if (initRun) { - initRun = false; - listener(newValue, newValue, self); - } else { - listener(newValue, veryOldValue, self); - } - - // make a copy for the next time a collection is changed - if (trackVeryOldValue) { - if (!isObject(newValue)) { - //primitive - veryOldValue = newValue; - } else if (isArrayLike(newValue)) { - veryOldValue = new Array(newValue.length); - for (var i = 0; i < newValue.length; i++) { - veryOldValue[i] = newValue[i]; - } - } else { // if object - veryOldValue = {}; - for (var key in newValue) { - if (hasOwnProperty.call(newValue, key)) { - veryOldValue[key] = newValue[key]; - } - } - } - } - } - - return this.$watch(changeDetector, $watchCollectionAction); - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$digest - * @kind function - * - * @description - * Processes all of the {@link ng.$rootScope.Scope#$watch watchers} of the current scope and - * its children. Because a {@link ng.$rootScope.Scope#$watch watcher}'s listener can change - * the model, the `$digest()` keeps calling the {@link ng.$rootScope.Scope#$watch watchers} - * until no more listeners are firing. This means that it is possible to get into an infinite - * loop. This function will throw `'Maximum iteration limit exceeded.'` if the number of - * iterations exceeds 10. - * - * Usually, you don't call `$digest()` directly in - * {@link ng.directive:ngController controllers} or in - * {@link ng.$compileProvider#directive directives}. - * Instead, you should call {@link ng.$rootScope.Scope#$apply $apply()} (typically from within - * a {@link ng.$compileProvider#directive directive}), which will force a `$digest()`. - * - * If you want to be notified whenever `$digest()` is called, - * you can register a `watchExpression` function with - * {@link ng.$rootScope.Scope#$watch $watch()} with no `listener`. - * - * In unit tests, you may need to call `$digest()` to simulate the scope life cycle. - * - * # Example - * ```js - var scope = ...; - scope.name = 'misko'; - scope.counter = 0; - - expect(scope.counter).toEqual(0); - scope.$watch('name', function(newValue, oldValue) { - scope.counter = scope.counter + 1; - }); - expect(scope.counter).toEqual(0); - - scope.$digest(); - // the listener is always called during the first $digest loop after it was registered - expect(scope.counter).toEqual(1); - - scope.$digest(); - // but now it will not be called unless the value changes - expect(scope.counter).toEqual(1); - - scope.name = 'adam'; - scope.$digest(); - expect(scope.counter).toEqual(2); - * ``` - * - */ - $digest: function() { - var watch, value, last, - watchers, - length, - dirty, ttl = TTL, - next, current, target = this, - watchLog = [], - logIdx, logMsg, asyncTask; - - beginPhase('$digest'); - // Check for changes to browser url that happened in sync before the call to $digest - $browser.$$checkUrlChange(); - - if (this === $rootScope && applyAsyncId !== null) { - // If this is the root scope, and $applyAsync has scheduled a deferred $apply(), then - // cancel the scheduled $apply and flush the queue of expressions to be evaluated. - $browser.defer.cancel(applyAsyncId); - flushApplyAsync(); - } - - lastDirtyWatch = null; - - do { // "while dirty" loop - dirty = false; - current = target; - - while (asyncQueue.length) { - try { - asyncTask = asyncQueue.shift(); - asyncTask.scope.$eval(asyncTask.expression, asyncTask.locals); - } catch (e) { - $exceptionHandler(e); - } - lastDirtyWatch = null; - } - - traverseScopesLoop: - do { // "traverse the scopes" loop - if ((watchers = current.$$watchers)) { - // process our watches - length = watchers.length; - while (length--) { - try { - watch = watchers[length]; - // Most common watches are on primitives, in which case we can short - // circuit it with === operator, only when === fails do we use .equals - if (watch) { - if ((value = watch.get(current)) !== (last = watch.last) && - !(watch.eq - ? equals(value, last) - : (typeof value === 'number' && typeof last === 'number' - && isNaN(value) && isNaN(last)))) { - dirty = true; - lastDirtyWatch = watch; - watch.last = watch.eq ? copy(value, null) : value; - watch.fn(value, ((last === initWatchVal) ? value : last), current); - if (ttl < 5) { - logIdx = 4 - ttl; - if (!watchLog[logIdx]) watchLog[logIdx] = []; - watchLog[logIdx].push({ - msg: isFunction(watch.exp) ? 'fn: ' + (watch.exp.name || watch.exp.toString()) : watch.exp, - newVal: value, - oldVal: last - }); - } - } else if (watch === lastDirtyWatch) { - // If the most recently dirty watcher is now clean, short circuit since the remaining watchers - // have already been tested. - dirty = false; - break traverseScopesLoop; - } - } - } catch (e) { - $exceptionHandler(e); - } - } - } - - // Insanity Warning: scope depth-first traversal - // yes, this code is a bit crazy, but it works and we have tests to prove it! - // this piece should be kept in sync with the traversal in $broadcast - if (!(next = (current.$$childHead || - (current !== target && current.$$nextSibling)))) { - while (current !== target && !(next = current.$$nextSibling)) { - current = current.$parent; - } - } - } while ((current = next)); - - // `break traverseScopesLoop;` takes us to here - - if ((dirty || asyncQueue.length) && !(ttl--)) { - clearPhase(); - throw $rootScopeMinErr('infdig', - '{0} $digest() iterations reached. Aborting!\n' + - 'Watchers fired in the last 5 iterations: {1}', - TTL, watchLog); - } - - } while (dirty || asyncQueue.length); - - clearPhase(); - - while (postDigestQueue.length) { - try { - postDigestQueue.shift()(); - } catch (e) { - $exceptionHandler(e); - } - } - }, - - - /** - * @ngdoc event - * @name $rootScope.Scope#$destroy - * @eventType broadcast on scope being destroyed - * - * @description - * Broadcasted when a scope and its children are being destroyed. - * - * Note that, in AngularJS, there is also a `$destroy` jQuery event, which can be used to - * clean up DOM bindings before an element is removed from the DOM. - */ - - /** - * @ngdoc method - * @name $rootScope.Scope#$destroy - * @kind function - * - * @description - * Removes the current scope (and all of its children) from the parent scope. Removal implies - * that calls to {@link ng.$rootScope.Scope#$digest $digest()} will no longer - * propagate to the current scope and its children. Removal also implies that the current - * scope is eligible for garbage collection. - * - * The `$destroy()` is usually used by directives such as - * {@link ng.directive:ngRepeat ngRepeat} for managing the - * unrolling of the loop. - * - * Just before a scope is destroyed, a `$destroy` event is broadcasted on this scope. - * Application code can register a `$destroy` event handler that will give it a chance to - * perform any necessary cleanup. - * - * Note that, in AngularJS, there is also a `$destroy` jQuery event, which can be used to - * clean up DOM bindings before an element is removed from the DOM. - */ - $destroy: function() { - // we can't destroy the root scope or a scope that has been already destroyed - if (this.$$destroyed) return; - var parent = this.$parent; - - this.$broadcast('$destroy'); - this.$$destroyed = true; - if (this === $rootScope) return; - - for (var eventName in this.$$listenerCount) { - decrementListenerCount(this, this.$$listenerCount[eventName], eventName); - } - - // sever all the references to parent scopes (after this cleanup, the current scope should - // not be retained by any of our references and should be eligible for garbage collection) - if (parent.$$childHead == this) parent.$$childHead = this.$$nextSibling; - if (parent.$$childTail == this) parent.$$childTail = this.$$prevSibling; - if (this.$$prevSibling) this.$$prevSibling.$$nextSibling = this.$$nextSibling; - if (this.$$nextSibling) this.$$nextSibling.$$prevSibling = this.$$prevSibling; - - // Disable listeners, watchers and apply/digest methods - this.$destroy = this.$digest = this.$apply = this.$evalAsync = this.$applyAsync = noop; - this.$on = this.$watch = this.$watchGroup = function() { return noop; }; - this.$$listeners = {}; - - // All of the code below is bogus code that works around V8's memory leak via optimized code - // and inline caches. - // - // see: - // - https://code.google.com/p/v8/issues/detail?id=2073#c26 - // - https://github.com/angular/angular.js/issues/6794#issuecomment-38648909 - // - https://github.com/angular/angular.js/issues/1313#issuecomment-10378451 - - this.$parent = this.$$nextSibling = this.$$prevSibling = this.$$childHead = - this.$$childTail = this.$root = this.$$watchers = null; - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$eval - * @kind function - * - * @description - * Executes the `expression` on the current scope and returns the result. Any exceptions in - * the expression are propagated (uncaught). This is useful when evaluating Angular - * expressions. - * - * # Example - * ```js - var scope = ng.$rootScope.Scope(); - scope.a = 1; - scope.b = 2; - - expect(scope.$eval('a+b')).toEqual(3); - expect(scope.$eval(function(scope){ return scope.a + scope.b; })).toEqual(3); - * ``` - * - * @param {(string|function())=} expression An angular expression to be executed. - * - * - `string`: execute using the rules as defined in {@link guide/expression expression}. - * - `function(scope)`: execute the function with the current `scope` parameter. - * - * @param {(object)=} locals Local variables object, useful for overriding values in scope. - * @returns {*} The result of evaluating the expression. - */ - $eval: function(expr, locals) { - return $parse(expr)(this, locals); - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$evalAsync - * @kind function - * - * @description - * Executes the expression on the current scope at a later point in time. - * - * The `$evalAsync` makes no guarantees as to when the `expression` will be executed, only - * that: - * - * - it will execute after the function that scheduled the evaluation (preferably before DOM - * rendering). - * - at least one {@link ng.$rootScope.Scope#$digest $digest cycle} will be performed after - * `expression` execution. - * - * Any exceptions from the execution of the expression are forwarded to the - * {@link ng.$exceptionHandler $exceptionHandler} service. - * - * __Note:__ if this function is called outside of a `$digest` cycle, a new `$digest` cycle - * will be scheduled. However, it is encouraged to always call code that changes the model - * from within an `$apply` call. That includes code evaluated via `$evalAsync`. - * - * @param {(string|function())=} expression An angular expression to be executed. - * - * - `string`: execute using the rules as defined in {@link guide/expression expression}. - * - `function(scope)`: execute the function with the current `scope` parameter. - * - * @param {(object)=} locals Local variables object, useful for overriding values in scope. - */ - $evalAsync: function(expr, locals) { - // if we are outside of an $digest loop and this is the first time we are scheduling async - // task also schedule async auto-flush - if (!$rootScope.$$phase && !asyncQueue.length) { - $browser.defer(function() { - if (asyncQueue.length) { - $rootScope.$digest(); - } - }); - } - - asyncQueue.push({scope: this, expression: expr, locals: locals}); - }, - - $$postDigest: function(fn) { - postDigestQueue.push(fn); - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$apply - * @kind function - * - * @description - * `$apply()` is used to execute an expression in angular from outside of the angular - * framework. (For example from browser DOM events, setTimeout, XHR or third party libraries). - * Because we are calling into the angular framework we need to perform proper scope life - * cycle of {@link ng.$exceptionHandler exception handling}, - * {@link ng.$rootScope.Scope#$digest executing watches}. - * - * ## Life cycle - * - * # Pseudo-Code of `$apply()` - * ```js - function $apply(expr) { - try { - return $eval(expr); - } catch (e) { - $exceptionHandler(e); - } finally { - $root.$digest(); - } - } - * ``` - * - * - * Scope's `$apply()` method transitions through the following stages: - * - * 1. The {@link guide/expression expression} is executed using the - * {@link ng.$rootScope.Scope#$eval $eval()} method. - * 2. Any exceptions from the execution of the expression are forwarded to the - * {@link ng.$exceptionHandler $exceptionHandler} service. - * 3. The {@link ng.$rootScope.Scope#$watch watch} listeners are fired immediately after the - * expression was executed using the {@link ng.$rootScope.Scope#$digest $digest()} method. - * - * - * @param {(string|function())=} exp An angular expression to be executed. - * - * - `string`: execute using the rules as defined in {@link guide/expression expression}. - * - `function(scope)`: execute the function with current `scope` parameter. - * - * @returns {*} The result of evaluating the expression. - */ - $apply: function(expr) { - try { - beginPhase('$apply'); - return this.$eval(expr); - } catch (e) { - $exceptionHandler(e); - } finally { - clearPhase(); - try { - $rootScope.$digest(); - } catch (e) { - $exceptionHandler(e); - throw e; - } - } - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$applyAsync - * @kind function - * - * @description - * Schedule the invocation of $apply to occur at a later time. The actual time difference - * varies across browsers, but is typically around ~10 milliseconds. - * - * This can be used to queue up multiple expressions which need to be evaluated in the same - * digest. - * - * @param {(string|function())=} exp An angular expression to be executed. - * - * - `string`: execute using the rules as defined in {@link guide/expression expression}. - * - `function(scope)`: execute the function with current `scope` parameter. - */ - $applyAsync: function(expr) { - var scope = this; - expr && applyAsyncQueue.push($applyAsyncExpression); - scheduleApplyAsync(); - - function $applyAsyncExpression() { - scope.$eval(expr); - } - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$on - * @kind function - * - * @description - * Listens on events of a given type. See {@link ng.$rootScope.Scope#$emit $emit} for - * discussion of event life cycle. - * - * The event listener function format is: `function(event, args...)`. The `event` object - * passed into the listener has the following attributes: - * - * - `targetScope` - `{Scope}`: the scope on which the event was `$emit`-ed or - * `$broadcast`-ed. - * - `currentScope` - `{Scope}`: the scope that is currently handling the event. Once the - * event propagates through the scope hierarchy, this property is set to null. - * - `name` - `{string}`: name of the event. - * - `stopPropagation` - `{function=}`: calling `stopPropagation` function will cancel - * further event propagation (available only for events that were `$emit`-ed). - * - `preventDefault` - `{function}`: calling `preventDefault` sets `defaultPrevented` flag - * to true. - * - `defaultPrevented` - `{boolean}`: true if `preventDefault` was called. - * - * @param {string} name Event name to listen on. - * @param {function(event, ...args)} listener Function to call when the event is emitted. - * @returns {function()} Returns a deregistration function for this listener. - */ - $on: function(name, listener) { - var namedListeners = this.$$listeners[name]; - if (!namedListeners) { - this.$$listeners[name] = namedListeners = []; - } - namedListeners.push(listener); - - var current = this; - do { - if (!current.$$listenerCount[name]) { - current.$$listenerCount[name] = 0; - } - current.$$listenerCount[name]++; - } while ((current = current.$parent)); - - var self = this; - return function() { - var indexOfListener = namedListeners.indexOf(listener); - if (indexOfListener !== -1) { - namedListeners[indexOfListener] = null; - decrementListenerCount(self, 1, name); - } - }; - }, - - - /** - * @ngdoc method - * @name $rootScope.Scope#$emit - * @kind function - * - * @description - * Dispatches an event `name` upwards through the scope hierarchy notifying the - * registered {@link ng.$rootScope.Scope#$on} listeners. - * - * The event life cycle starts at the scope on which `$emit` was called. All - * {@link ng.$rootScope.Scope#$on listeners} listening for `name` event on this scope get - * notified. Afterwards, the event traverses upwards toward the root scope and calls all - * registered listeners along the way. The event will stop propagating if one of the listeners - * cancels it. - * - * Any exception emitted from the {@link ng.$rootScope.Scope#$on listeners} will be passed - * onto the {@link ng.$exceptionHandler $exceptionHandler} service. - * - * @param {string} name Event name to emit. - * @param {...*} args Optional one or more arguments which will be passed onto the event listeners. - * @return {Object} Event object (see {@link ng.$rootScope.Scope#$on}). - */ - $emit: function(name, args) { - var empty = [], - namedListeners, - scope = this, - stopPropagation = false, - event = { - name: name, - targetScope: scope, - stopPropagation: function() {stopPropagation = true;}, - preventDefault: function() { - event.defaultPrevented = true; - }, - defaultPrevented: false - }, - listenerArgs = concat([event], arguments, 1), - i, length; - - do { - namedListeners = scope.$$listeners[name] || empty; - event.currentScope = scope; - for (i = 0, length = namedListeners.length; i < length; i++) { - - // if listeners were deregistered, defragment the array - if (!namedListeners[i]) { - namedListeners.splice(i, 1); - i--; - length--; - continue; - } - try { - //allow all listeners attached to the current scope to run - namedListeners[i].apply(null, listenerArgs); - } catch (e) { - $exceptionHandler(e); - } - } - //if any listener on the current scope stops propagation, prevent bubbling - if (stopPropagation) { - event.currentScope = null; - return event; - } - //traverse upwards - scope = scope.$parent; - } while (scope); - - event.currentScope = null; - - return event; - }, - - - /** - * @ngdoc method - * @name $rootScope.Scope#$broadcast - * @kind function - * - * @description - * Dispatches an event `name` downwards to all child scopes (and their children) notifying the - * registered {@link ng.$rootScope.Scope#$on} listeners. - * - * The event life cycle starts at the scope on which `$broadcast` was called. All - * {@link ng.$rootScope.Scope#$on listeners} listening for `name` event on this scope get - * notified. Afterwards, the event propagates to all direct and indirect scopes of the current - * scope and calls all registered listeners along the way. The event cannot be canceled. - * - * Any exception emitted from the {@link ng.$rootScope.Scope#$on listeners} will be passed - * onto the {@link ng.$exceptionHandler $exceptionHandler} service. - * - * @param {string} name Event name to broadcast. - * @param {...*} args Optional one or more arguments which will be passed onto the event listeners. - * @return {Object} Event object, see {@link ng.$rootScope.Scope#$on} - */ - $broadcast: function(name, args) { - var target = this, - current = target, - next = target, - event = { - name: name, - targetScope: target, - preventDefault: function() { - event.defaultPrevented = true; - }, - defaultPrevented: false - }; - - if (!target.$$listenerCount[name]) return event; - - var listenerArgs = concat([event], arguments, 1), - listeners, i, length; - - //down while you can, then up and next sibling or up and next sibling until back at root - while ((current = next)) { - event.currentScope = current; - listeners = current.$$listeners[name] || []; - for (i = 0, length = listeners.length; i < length; i++) { - // if listeners were deregistered, defragment the array - if (!listeners[i]) { - listeners.splice(i, 1); - i--; - length--; - continue; - } - - try { - listeners[i].apply(null, listenerArgs); - } catch (e) { - $exceptionHandler(e); - } - } - - // Insanity Warning: scope depth-first traversal - // yes, this code is a bit crazy, but it works and we have tests to prove it! - // this piece should be kept in sync with the traversal in $digest - // (though it differs due to having the extra check for $$listenerCount) - if (!(next = ((current.$$listenerCount[name] && current.$$childHead) || - (current !== target && current.$$nextSibling)))) { - while (current !== target && !(next = current.$$nextSibling)) { - current = current.$parent; - } - } - } - - event.currentScope = null; - return event; - } - }; - - var $rootScope = new Scope(); - - //The internal queues. Expose them on the $rootScope for debugging/testing purposes. - var asyncQueue = $rootScope.$$asyncQueue = []; - var postDigestQueue = $rootScope.$$postDigestQueue = []; - var applyAsyncQueue = $rootScope.$$applyAsyncQueue = []; - - return $rootScope; - - - function beginPhase(phase) { - if ($rootScope.$$phase) { - throw $rootScopeMinErr('inprog', '{0} already in progress', $rootScope.$$phase); - } - - $rootScope.$$phase = phase; - } - - function clearPhase() { - $rootScope.$$phase = null; - } - - - function decrementListenerCount(current, count, name) { - do { - current.$$listenerCount[name] -= count; - - if (current.$$listenerCount[name] === 0) { - delete current.$$listenerCount[name]; - } - } while ((current = current.$parent)); - } - - /** - * function used as an initial value for watchers. - * because it's unique we can easily tell it apart from other values - */ - function initWatchVal() {} - - function flushApplyAsync() { - while (applyAsyncQueue.length) { - try { - applyAsyncQueue.shift()(); - } catch (e) { - $exceptionHandler(e); - } - } - applyAsyncId = null; - } - - function scheduleApplyAsync() { - if (applyAsyncId === null) { - applyAsyncId = $browser.defer(function() { - $rootScope.$apply(flushApplyAsync); - }); - } - } - }]; -} - -/** - * @description - * Private service to sanitize uris for links and images. Used by $compile and $sanitize. - */ -function $$SanitizeUriProvider() { - var aHrefSanitizationWhitelist = /^\s*(https?|ftp|mailto|tel|file):/, - imgSrcSanitizationWhitelist = /^\s*((https?|ftp|file|blob):|data:image\/)/; - - /** - * @description - * Retrieves or overrides the default regular expression that is used for whitelisting of safe - * urls during a[href] sanitization. - * - * The sanitization is a security measure aimed at prevent XSS attacks via html links. - * - * Any url about to be assigned to a[href] via data-binding is first normalized and turned into - * an absolute url. Afterwards, the url is matched against the `aHrefSanitizationWhitelist` - * regular expression. If a match is found, the original url is written into the dom. Otherwise, - * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM. - * - * @param {RegExp=} regexp New regexp to whitelist urls with. - * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for - * chaining otherwise. - */ - this.aHrefSanitizationWhitelist = function(regexp) { - if (isDefined(regexp)) { - aHrefSanitizationWhitelist = regexp; - return this; - } - return aHrefSanitizationWhitelist; - }; - - - /** - * @description - * Retrieves or overrides the default regular expression that is used for whitelisting of safe - * urls during img[src] sanitization. - * - * The sanitization is a security measure aimed at prevent XSS attacks via html links. - * - * Any url about to be assigned to img[src] via data-binding is first normalized and turned into - * an absolute url. Afterwards, the url is matched against the `imgSrcSanitizationWhitelist` - * regular expression. If a match is found, the original url is written into the dom. Otherwise, - * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM. - * - * @param {RegExp=} regexp New regexp to whitelist urls with. - * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for - * chaining otherwise. - */ - this.imgSrcSanitizationWhitelist = function(regexp) { - if (isDefined(regexp)) { - imgSrcSanitizationWhitelist = regexp; - return this; - } - return imgSrcSanitizationWhitelist; - }; - - this.$get = function() { - return function sanitizeUri(uri, isImage) { - var regex = isImage ? imgSrcSanitizationWhitelist : aHrefSanitizationWhitelist; - var normalizedVal; - normalizedVal = urlResolve(uri).href; - if (normalizedVal !== '' && !normalizedVal.match(regex)) { - return 'unsafe:' + normalizedVal; - } - return uri; - }; - }; -} - -var $sceMinErr = minErr('$sce'); - -var SCE_CONTEXTS = { - HTML: 'html', - CSS: 'css', - URL: 'url', - // RESOURCE_URL is a subtype of URL used in contexts where a privileged resource is sourced from a - // url. (e.g. ng-include, script src, templateUrl) - RESOURCE_URL: 'resourceUrl', - JS: 'js' -}; - -// Helper functions follow. - -function adjustMatcher(matcher) { - if (matcher === 'self') { - return matcher; - } else if (isString(matcher)) { - // Strings match exactly except for 2 wildcards - '*' and '**'. - // '*' matches any character except those from the set ':/.?&'. - // '**' matches any character (like .* in a RegExp). - // More than 2 *'s raises an error as it's ill defined. - if (matcher.indexOf('***') > -1) { - throw $sceMinErr('iwcard', - 'Illegal sequence *** in string matcher. String: {0}', matcher); - } - matcher = escapeForRegexp(matcher). - replace('\\*\\*', '.*'). - replace('\\*', '[^:/.?&;]*'); - return new RegExp('^' + matcher + '$'); - } else if (isRegExp(matcher)) { - // The only other type of matcher allowed is a Regexp. - // Match entire URL / disallow partial matches. - // Flags are reset (i.e. no global, ignoreCase or multiline) - return new RegExp('^' + matcher.source + '$'); - } else { - throw $sceMinErr('imatcher', - 'Matchers may only be "self", string patterns or RegExp objects'); - } -} - - -function adjustMatchers(matchers) { - var adjustedMatchers = []; - if (isDefined(matchers)) { - forEach(matchers, function(matcher) { - adjustedMatchers.push(adjustMatcher(matcher)); - }); - } - return adjustedMatchers; -} - - -/** - * @ngdoc service - * @name $sceDelegate - * @kind function - * - * @description - * - * `$sceDelegate` is a service that is used by the `$sce` service to provide {@link ng.$sce Strict - * Contextual Escaping (SCE)} services to AngularJS. - * - * Typically, you would configure or override the {@link ng.$sceDelegate $sceDelegate} instead of - * the `$sce` service to customize the way Strict Contextual Escaping works in AngularJS. This is - * because, while the `$sce` provides numerous shorthand methods, etc., you really only need to - * override 3 core functions (`trustAs`, `getTrusted` and `valueOf`) to replace the way things - * work because `$sce` delegates to `$sceDelegate` for these operations. - * - * Refer {@link ng.$sceDelegateProvider $sceDelegateProvider} to configure this service. - * - * The default instance of `$sceDelegate` should work out of the box with little pain. While you - * can override it completely to change the behavior of `$sce`, the common case would - * involve configuring the {@link ng.$sceDelegateProvider $sceDelegateProvider} instead by setting - * your own whitelists and blacklists for trusting URLs used for loading AngularJS resources such as - * templates. Refer {@link ng.$sceDelegateProvider#resourceUrlWhitelist - * $sceDelegateProvider.resourceUrlWhitelist} and {@link - * ng.$sceDelegateProvider#resourceUrlBlacklist $sceDelegateProvider.resourceUrlBlacklist} - */ - -/** - * @ngdoc provider - * @name $sceDelegateProvider - * @description - * - * The `$sceDelegateProvider` provider allows developers to configure the {@link ng.$sceDelegate - * $sceDelegate} service. This allows one to get/set the whitelists and blacklists used to ensure - * that the URLs used for sourcing Angular templates are safe. Refer {@link - * ng.$sceDelegateProvider#resourceUrlWhitelist $sceDelegateProvider.resourceUrlWhitelist} and - * {@link ng.$sceDelegateProvider#resourceUrlBlacklist $sceDelegateProvider.resourceUrlBlacklist} - * - * For the general details about this service in Angular, read the main page for {@link ng.$sce - * Strict Contextual Escaping (SCE)}. - * - * **Example**: Consider the following case. <a name="example"></a> - * - * - your app is hosted at url `http://myapp.example.com/` - * - but some of your templates are hosted on other domains you control such as - * `http://srv01.assets.example.com/`, `http://srv02.assets.example.com/`, etc. - * - and you have an open redirect at `http://myapp.example.com/clickThru?...`. - * - * Here is what a secure configuration for this scenario might look like: - * - * ``` - * angular.module('myApp', []).config(function($sceDelegateProvider) { - * $sceDelegateProvider.resourceUrlWhitelist([ - * // Allow same origin resource loads. - * 'self', - * // Allow loading from our assets domain. Notice the difference between * and **. - * 'http://srv*.assets.example.com/**' - * ]); - * - * // The blacklist overrides the whitelist so the open redirect here is blocked. - * $sceDelegateProvider.resourceUrlBlacklist([ - * 'http://myapp.example.com/clickThru**' - * ]); - * }); - * ``` - */ - -function $SceDelegateProvider() { - this.SCE_CONTEXTS = SCE_CONTEXTS; - - // Resource URLs can also be trusted by policy. - var resourceUrlWhitelist = ['self'], - resourceUrlBlacklist = []; - - /** - * @ngdoc method - * @name $sceDelegateProvider#resourceUrlWhitelist - * @kind function - * - * @param {Array=} whitelist When provided, replaces the resourceUrlWhitelist with the value - * provided. This must be an array or null. A snapshot of this array is used so further - * changes to the array are ignored. - * - * Follow {@link ng.$sce#resourceUrlPatternItem this link} for a description of the items - * allowed in this array. - * - * Note: **an empty whitelist array will block all URLs**! - * - * @return {Array} the currently set whitelist array. - * - * The **default value** when no whitelist has been explicitly set is `['self']` allowing only - * same origin resource requests. - * - * @description - * Sets/Gets the whitelist of trusted resource URLs. - */ - this.resourceUrlWhitelist = function(value) { - if (arguments.length) { - resourceUrlWhitelist = adjustMatchers(value); - } - return resourceUrlWhitelist; - }; - - /** - * @ngdoc method - * @name $sceDelegateProvider#resourceUrlBlacklist - * @kind function - * - * @param {Array=} blacklist When provided, replaces the resourceUrlBlacklist with the value - * provided. This must be an array or null. A snapshot of this array is used so further - * changes to the array are ignored. - * - * Follow {@link ng.$sce#resourceUrlPatternItem this link} for a description of the items - * allowed in this array. - * - * The typical usage for the blacklist is to **block - * [open redirects](http://cwe.mitre.org/data/definitions/601.html)** served by your domain as - * these would otherwise be trusted but actually return content from the redirected domain. - * - * Finally, **the blacklist overrides the whitelist** and has the final say. - * - * @return {Array} the currently set blacklist array. - * - * The **default value** when no whitelist has been explicitly set is the empty array (i.e. there - * is no blacklist.) - * - * @description - * Sets/Gets the blacklist of trusted resource URLs. - */ - - this.resourceUrlBlacklist = function(value) { - if (arguments.length) { - resourceUrlBlacklist = adjustMatchers(value); - } - return resourceUrlBlacklist; - }; - - this.$get = ['$injector', function($injector) { - - var htmlSanitizer = function htmlSanitizer(html) { - throw $sceMinErr('unsafe', 'Attempting to use an unsafe value in a safe context.'); - }; - - if ($injector.has('$sanitize')) { - htmlSanitizer = $injector.get('$sanitize'); - } - - - function matchUrl(matcher, parsedUrl) { - if (matcher === 'self') { - return urlIsSameOrigin(parsedUrl); - } else { - // definitely a regex. See adjustMatchers() - return !!matcher.exec(parsedUrl.href); - } - } - - function isResourceUrlAllowedByPolicy(url) { - var parsedUrl = urlResolve(url.toString()); - var i, n, allowed = false; - // Ensure that at least one item from the whitelist allows this url. - for (i = 0, n = resourceUrlWhitelist.length; i < n; i++) { - if (matchUrl(resourceUrlWhitelist[i], parsedUrl)) { - allowed = true; - break; - } - } - if (allowed) { - // Ensure that no item from the blacklist blocked this url. - for (i = 0, n = resourceUrlBlacklist.length; i < n; i++) { - if (matchUrl(resourceUrlBlacklist[i], parsedUrl)) { - allowed = false; - break; - } - } - } - return allowed; - } - - function generateHolderType(Base) { - var holderType = function TrustedValueHolderType(trustedValue) { - this.$$unwrapTrustedValue = function() { - return trustedValue; - }; - }; - if (Base) { - holderType.prototype = new Base(); - } - holderType.prototype.valueOf = function sceValueOf() { - return this.$$unwrapTrustedValue(); - }; - holderType.prototype.toString = function sceToString() { - return this.$$unwrapTrustedValue().toString(); - }; - return holderType; - } - - var trustedValueHolderBase = generateHolderType(), - byType = {}; - - byType[SCE_CONTEXTS.HTML] = generateHolderType(trustedValueHolderBase); - byType[SCE_CONTEXTS.CSS] = generateHolderType(trustedValueHolderBase); - byType[SCE_CONTEXTS.URL] = generateHolderType(trustedValueHolderBase); - byType[SCE_CONTEXTS.JS] = generateHolderType(trustedValueHolderBase); - byType[SCE_CONTEXTS.RESOURCE_URL] = generateHolderType(byType[SCE_CONTEXTS.URL]); - - /** - * @ngdoc method - * @name $sceDelegate#trustAs - * - * @description - * Returns an object that is trusted by angular for use in specified strict - * contextual escaping contexts (such as ng-bind-html, ng-include, any src - * attribute interpolation, any dom event binding attribute interpolation - * such as for onclick, etc.) that uses the provided value. - * See {@link ng.$sce $sce} for enabling strict contextual escaping. - * - * @param {string} type The kind of context in which this value is safe for use. e.g. url, - * resourceUrl, html, js and css. - * @param {*} value The value that that should be considered trusted/safe. - * @returns {*} A value that can be used to stand in for the provided `value` in places - * where Angular expects a $sce.trustAs() return value. - */ - function trustAs(type, trustedValue) { - var Constructor = (byType.hasOwnProperty(type) ? byType[type] : null); - if (!Constructor) { - throw $sceMinErr('icontext', - 'Attempted to trust a value in invalid context. Context: {0}; Value: {1}', - type, trustedValue); - } - if (trustedValue === null || trustedValue === undefined || trustedValue === '') { - return trustedValue; - } - // All the current contexts in SCE_CONTEXTS happen to be strings. In order to avoid trusting - // mutable objects, we ensure here that the value passed in is actually a string. - if (typeof trustedValue !== 'string') { - throw $sceMinErr('itype', - 'Attempted to trust a non-string value in a content requiring a string: Context: {0}', - type); - } - return new Constructor(trustedValue); - } - - /** - * @ngdoc method - * @name $sceDelegate#valueOf - * - * @description - * If the passed parameter had been returned by a prior call to {@link ng.$sceDelegate#trustAs - * `$sceDelegate.trustAs`}, returns the value that had been passed to {@link - * ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}. - * - * If the passed parameter is not a value that had been returned by {@link - * ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}, returns it as-is. - * - * @param {*} value The result of a prior {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`} - * call or anything else. - * @returns {*} The `value` that was originally provided to {@link ng.$sceDelegate#trustAs - * `$sceDelegate.trustAs`} if `value` is the result of such a call. Otherwise, returns - * `value` unchanged. - */ - function valueOf(maybeTrusted) { - if (maybeTrusted instanceof trustedValueHolderBase) { - return maybeTrusted.$$unwrapTrustedValue(); - } else { - return maybeTrusted; - } - } - - /** - * @ngdoc method - * @name $sceDelegate#getTrusted - * - * @description - * Takes the result of a {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`} call and - * returns the originally supplied value if the queried context type is a supertype of the - * created type. If this condition isn't satisfied, throws an exception. - * - * @param {string} type The kind of context in which this value is to be used. - * @param {*} maybeTrusted The result of a prior {@link ng.$sceDelegate#trustAs - * `$sceDelegate.trustAs`} call. - * @returns {*} The value the was originally provided to {@link ng.$sceDelegate#trustAs - * `$sceDelegate.trustAs`} if valid in this context. Otherwise, throws an exception. - */ - function getTrusted(type, maybeTrusted) { - if (maybeTrusted === null || maybeTrusted === undefined || maybeTrusted === '') { - return maybeTrusted; - } - var constructor = (byType.hasOwnProperty(type) ? byType[type] : null); - if (constructor && maybeTrusted instanceof constructor) { - return maybeTrusted.$$unwrapTrustedValue(); - } - // If we get here, then we may only take one of two actions. - // 1. sanitize the value for the requested type, or - // 2. throw an exception. - if (type === SCE_CONTEXTS.RESOURCE_URL) { - if (isResourceUrlAllowedByPolicy(maybeTrusted)) { - return maybeTrusted; - } else { - throw $sceMinErr('insecurl', - 'Blocked loading resource from url not allowed by $sceDelegate policy. URL: {0}', - maybeTrusted.toString()); - } - } else if (type === SCE_CONTEXTS.HTML) { - return htmlSanitizer(maybeTrusted); - } - throw $sceMinErr('unsafe', 'Attempting to use an unsafe value in a safe context.'); - } - - return { trustAs: trustAs, - getTrusted: getTrusted, - valueOf: valueOf }; - }]; -} - - -/** - * @ngdoc provider - * @name $sceProvider - * @description - * - * The $sceProvider provider allows developers to configure the {@link ng.$sce $sce} service. - * - enable/disable Strict Contextual Escaping (SCE) in a module - * - override the default implementation with a custom delegate - * - * Read more about {@link ng.$sce Strict Contextual Escaping (SCE)}. - */ - -/* jshint maxlen: false*/ - -/** - * @ngdoc service - * @name $sce - * @kind function - * - * @description - * - * `$sce` is a service that provides Strict Contextual Escaping services to AngularJS. - * - * # Strict Contextual Escaping - * - * Strict Contextual Escaping (SCE) is a mode in which AngularJS requires bindings in certain - * contexts to result in a value that is marked as safe to use for that context. One example of - * such a context is binding arbitrary html controlled by the user via `ng-bind-html`. We refer - * to these contexts as privileged or SCE contexts. - * - * As of version 1.2, Angular ships with SCE enabled by default. - * - * Note: When enabled (the default), IE<11 in quirks mode is not supported. In this mode, IE<11 allow - * one to execute arbitrary javascript by the use of the expression() syntax. Refer - * <http://blogs.msdn.com/b/ie/archive/2008/10/16/ending-expressions.aspx> to learn more about them. - * You can ensure your document is in standards mode and not quirks mode by adding `<!doctype html>` - * to the top of your HTML document. - * - * SCE assists in writing code in way that (a) is secure by default and (b) makes auditing for - * security vulnerabilities such as XSS, clickjacking, etc. a lot easier. - * - * Here's an example of a binding in a privileged context: - * - * ``` - * <input ng-model="userHtml"> - * <div ng-bind-html="userHtml"></div> - * ``` - * - * Notice that `ng-bind-html` is bound to `userHtml` controlled by the user. With SCE - * disabled, this application allows the user to render arbitrary HTML into the DIV. - * In a more realistic example, one may be rendering user comments, blog articles, etc. via - * bindings. (HTML is just one example of a context where rendering user controlled input creates - * security vulnerabilities.) - * - * For the case of HTML, you might use a library, either on the client side, or on the server side, - * to sanitize unsafe HTML before binding to the value and rendering it in the document. - * - * How would you ensure that every place that used these types of bindings was bound to a value that - * was sanitized by your library (or returned as safe for rendering by your server?) How can you - * ensure that you didn't accidentally delete the line that sanitized the value, or renamed some - * properties/fields and forgot to update the binding to the sanitized value? - * - * To be secure by default, you want to ensure that any such bindings are disallowed unless you can - * determine that something explicitly says it's safe to use a value for binding in that - * context. You can then audit your code (a simple grep would do) to ensure that this is only done - * for those values that you can easily tell are safe - because they were received from your server, - * sanitized by your library, etc. You can organize your codebase to help with this - perhaps - * allowing only the files in a specific directory to do this. Ensuring that the internal API - * exposed by that code doesn't markup arbitrary values as safe then becomes a more manageable task. - * - * In the case of AngularJS' SCE service, one uses {@link ng.$sce#trustAs $sce.trustAs} - * (and shorthand methods such as {@link ng.$sce#trustAsHtml $sce.trustAsHtml}, etc.) to - * obtain values that will be accepted by SCE / privileged contexts. - * - * - * ## How does it work? - * - * In privileged contexts, directives and code will bind to the result of {@link ng.$sce#getTrusted - * $sce.getTrusted(context, value)} rather than to the value directly. Directives use {@link - * ng.$sce#parseAs $sce.parseAs} rather than `$parse` to watch attribute bindings, which performs the - * {@link ng.$sce#getTrusted $sce.getTrusted} behind the scenes on non-constant literals. - * - * As an example, {@link ng.directive:ngBindHtml ngBindHtml} uses {@link - * ng.$sce#parseAsHtml $sce.parseAsHtml(binding expression)}. Here's the actual code (slightly - * simplified): - * - * ``` - * var ngBindHtmlDirective = ['$sce', function($sce) { - * return function(scope, element, attr) { - * scope.$watch($sce.parseAsHtml(attr.ngBindHtml), function(value) { - * element.html(value || ''); - * }); - * }; - * }]; - * ``` - * - * ## Impact on loading templates - * - * This applies both to the {@link ng.directive:ngInclude `ng-include`} directive as well as - * `templateUrl`'s specified by {@link guide/directive directives}. - * - * By default, Angular only loads templates from the same domain and protocol as the application - * document. This is done by calling {@link ng.$sce#getTrustedResourceUrl - * $sce.getTrustedResourceUrl} on the template URL. To load templates from other domains and/or - * protocols, you may either either {@link ng.$sceDelegateProvider#resourceUrlWhitelist whitelist - * them} or {@link ng.$sce#trustAsResourceUrl wrap it} into a trusted value. - * - * *Please note*: - * The browser's - * [Same Origin Policy](https://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest) - * and [Cross-Origin Resource Sharing (CORS)](http://www.w3.org/TR/cors/) - * policy apply in addition to this and may further restrict whether the template is successfully - * loaded. This means that without the right CORS policy, loading templates from a different domain - * won't work on all browsers. Also, loading templates from `file://` URL does not work on some - * browsers. - * - * ## This feels like too much overhead - * - * It's important to remember that SCE only applies to interpolation expressions. - * - * If your expressions are constant literals, they're automatically trusted and you don't need to - * call `$sce.trustAs` on them (remember to include the `ngSanitize` module) (e.g. - * `<div ng-bind-html="'<b>implicitly trusted</b>'"></div>`) just works. - * - * Additionally, `a[href]` and `img[src]` automatically sanitize their URLs and do not pass them - * through {@link ng.$sce#getTrusted $sce.getTrusted}. SCE doesn't play a role here. - * - * The included {@link ng.$sceDelegate $sceDelegate} comes with sane defaults to allow you to load - * templates in `ng-include` from your application's domain without having to even know about SCE. - * It blocks loading templates from other domains or loading templates over http from an https - * served document. You can change these by setting your own custom {@link - * ng.$sceDelegateProvider#resourceUrlWhitelist whitelists} and {@link - * ng.$sceDelegateProvider#resourceUrlBlacklist blacklists} for matching such URLs. - * - * This significantly reduces the overhead. It is far easier to pay the small overhead and have an - * application that's secure and can be audited to verify that with much more ease than bolting - * security onto an application later. - * - * <a name="contexts"></a> - * ## What trusted context types are supported? - * - * | Context | Notes | - * |---------------------|----------------| - * | `$sce.HTML` | For HTML that's safe to source into the application. The {@link ng.directive:ngBindHtml ngBindHtml} directive uses this context for bindings. If an unsafe value is encountered and the {@link ngSanitize $sanitize} module is present this will sanitize the value instead of throwing an error. | - * | `$sce.CSS` | For CSS that's safe to source into the application. Currently unused. Feel free to use it in your own directives. | - * | `$sce.URL` | For URLs that are safe to follow as links. Currently unused (`<a href=` and `<img src=` sanitize their urls and don't constitute an SCE context. | - * | `$sce.RESOURCE_URL` | For URLs that are not only safe to follow as links, but whose contents are also safe to include in your application. Examples include `ng-include`, `src` / `ngSrc` bindings for tags other than `IMG` (e.g. `IFRAME`, `OBJECT`, etc.) <br><br>Note that `$sce.RESOURCE_URL` makes a stronger statement about the URL than `$sce.URL` does and therefore contexts requiring values trusted for `$sce.RESOURCE_URL` can be used anywhere that values trusted for `$sce.URL` are required. | - * | `$sce.JS` | For JavaScript that is safe to execute in your application's context. Currently unused. Feel free to use it in your own directives. | - * - * ## Format of items in {@link ng.$sceDelegateProvider#resourceUrlWhitelist resourceUrlWhitelist}/{@link ng.$sceDelegateProvider#resourceUrlBlacklist Blacklist} <a name="resourceUrlPatternItem"></a> - * - * Each element in these arrays must be one of the following: - * - * - **'self'** - * - The special **string**, `'self'`, can be used to match against all URLs of the **same - * domain** as the application document using the **same protocol**. - * - **String** (except the special value `'self'`) - * - The string is matched against the full *normalized / absolute URL* of the resource - * being tested (substring matches are not good enough.) - * - There are exactly **two wildcard sequences** - `*` and `**`. All other characters - * match themselves. - * - `*`: matches zero or more occurrences of any character other than one of the following 6 - * characters: '`:`', '`/`', '`.`', '`?`', '`&`' and ';'. It's a useful wildcard for use - * in a whitelist. - * - `**`: matches zero or more occurrences of *any* character. As such, it's not - * not appropriate to use in for a scheme, domain, etc. as it would match too much. (e.g. - * http://**.example.com/ would match http://evil.com/?ignore=.example.com/ and that might - * not have been the intention.) Its usage at the very end of the path is ok. (e.g. - * http://foo.example.com/templates/**). - * - **RegExp** (*see caveat below*) - * - *Caveat*: While regular expressions are powerful and offer great flexibility, their syntax - * (and all the inevitable escaping) makes them *harder to maintain*. It's easy to - * accidentally introduce a bug when one updates a complex expression (imho, all regexes should - * have good test coverage.). For instance, the use of `.` in the regex is correct only in a - * small number of cases. A `.` character in the regex used when matching the scheme or a - * subdomain could be matched against a `:` or literal `.` that was likely not intended. It - * is highly recommended to use the string patterns and only fall back to regular expressions - * if they as a last resort. - * - The regular expression must be an instance of RegExp (i.e. not a string.) It is - * matched against the **entire** *normalized / absolute URL* of the resource being tested - * (even when the RegExp did not have the `^` and `$` codes.) In addition, any flags - * present on the RegExp (such as multiline, global, ignoreCase) are ignored. - * - If you are generating your JavaScript from some other templating engine (not - * recommended, e.g. in issue [#4006](https://github.com/angular/angular.js/issues/4006)), - * remember to escape your regular expression (and be aware that you might need more than - * one level of escaping depending on your templating engine and the way you interpolated - * the value.) Do make use of your platform's escaping mechanism as it might be good - * enough before coding your own. e.g. Ruby has - * [Regexp.escape(str)](http://www.ruby-doc.org/core-2.0.0/Regexp.html#method-c-escape) - * and Python has [re.escape](http://docs.python.org/library/re.html#re.escape). - * Javascript lacks a similar built in function for escaping. Take a look at Google - * Closure library's [goog.string.regExpEscape(s)]( - * http://docs.closure-library.googlecode.com/git/closure_goog_string_string.js.source.html#line962). - * - * Refer {@link ng.$sceDelegateProvider $sceDelegateProvider} for an example. - * - * ## Show me an example using SCE. - * - * <example module="mySceApp" deps="angular-sanitize.js"> - * <file name="index.html"> - * <div ng-controller="AppController as myCtrl"> - * <i ng-bind-html="myCtrl.explicitlyTrustedHtml" id="explicitlyTrustedHtml"></i><br><br> - * <b>User comments</b><br> - * By default, HTML that isn't explicitly trusted (e.g. Alice's comment) is sanitized when - * $sanitize is available. If $sanitize isn't available, this results in an error instead of an - * exploit. - * <div class="well"> - * <div ng-repeat="userComment in myCtrl.userComments"> - * <b>{{userComment.name}}</b>: - * <span ng-bind-html="userComment.htmlComment" class="htmlComment"></span> - * <br> - * </div> - * </div> - * </div> - * </file> - * - * <file name="script.js"> - * angular.module('mySceApp', ['ngSanitize']) - * .controller('AppController', ['$http', '$templateCache', '$sce', - * function($http, $templateCache, $sce) { - * var self = this; - * $http.get("test_data.json", {cache: $templateCache}).success(function(userComments) { - * self.userComments = userComments; - * }); - * self.explicitlyTrustedHtml = $sce.trustAsHtml( - * '<span onmouseover="this.textContent="Explicitly trusted HTML bypasses ' + - * 'sanitization."">Hover over this text.</span>'); - * }]); - * </file> - * - * <file name="test_data.json"> - * [ - * { "name": "Alice", - * "htmlComment": - * "<span onmouseover='this.textContent=\"PWN3D!\"'>Is <i>anyone</i> reading this?</span>" - * }, - * { "name": "Bob", - * "htmlComment": "<i>Yes!</i> Am I the only other one?" - * } - * ] - * </file> - * - * <file name="protractor.js" type="protractor"> - * describe('SCE doc demo', function() { - * it('should sanitize untrusted values', function() { - * expect(element.all(by.css('.htmlComment')).first().getInnerHtml()) - * .toBe('<span>Is <i>anyone</i> reading this?</span>'); - * }); - * - * it('should NOT sanitize explicitly trusted values', function() { - * expect(element(by.id('explicitlyTrustedHtml')).getInnerHtml()).toBe( - * '<span onmouseover="this.textContent="Explicitly trusted HTML bypasses ' + - * 'sanitization."">Hover over this text.</span>'); - * }); - * }); - * </file> - * </example> - * - * - * - * ## Can I disable SCE completely? - * - * Yes, you can. However, this is strongly discouraged. SCE gives you a lot of security benefits - * for little coding overhead. It will be much harder to take an SCE disabled application and - * either secure it on your own or enable SCE at a later stage. It might make sense to disable SCE - * for cases where you have a lot of existing code that was written before SCE was introduced and - * you're migrating them a module at a time. - * - * That said, here's how you can completely disable SCE: - * - * ``` - * angular.module('myAppWithSceDisabledmyApp', []).config(function($sceProvider) { - * // Completely disable SCE. For demonstration purposes only! - * // Do not use in new projects. - * $sceProvider.enabled(false); - * }); - * ``` - * - */ -/* jshint maxlen: 100 */ - -function $SceProvider() { - var enabled = true; - - /** - * @ngdoc method - * @name $sceProvider#enabled - * @kind function - * - * @param {boolean=} value If provided, then enables/disables SCE. - * @return {boolean} true if SCE is enabled, false otherwise. - * - * @description - * Enables/disables SCE and returns the current value. - */ - this.enabled = function(value) { - if (arguments.length) { - enabled = !!value; - } - return enabled; - }; - - - /* Design notes on the default implementation for SCE. - * - * The API contract for the SCE delegate - * ------------------------------------- - * The SCE delegate object must provide the following 3 methods: - * - * - trustAs(contextEnum, value) - * This method is used to tell the SCE service that the provided value is OK to use in the - * contexts specified by contextEnum. It must return an object that will be accepted by - * getTrusted() for a compatible contextEnum and return this value. - * - * - valueOf(value) - * For values that were not produced by trustAs(), return them as is. For values that were - * produced by trustAs(), return the corresponding input value to trustAs. Basically, if - * trustAs is wrapping the given values into some type, this operation unwraps it when given - * such a value. - * - * - getTrusted(contextEnum, value) - * This function should return the a value that is safe to use in the context specified by - * contextEnum or throw and exception otherwise. - * - * NOTE: This contract deliberately does NOT state that values returned by trustAs() must be - * opaque or wrapped in some holder object. That happens to be an implementation detail. For - * instance, an implementation could maintain a registry of all trusted objects by context. In - * such a case, trustAs() would return the same object that was passed in. getTrusted() would - * return the same object passed in if it was found in the registry under a compatible context or - * throw an exception otherwise. An implementation might only wrap values some of the time based - * on some criteria. getTrusted() might return a value and not throw an exception for special - * constants or objects even if not wrapped. All such implementations fulfill this contract. - * - * - * A note on the inheritance model for SCE contexts - * ------------------------------------------------ - * I've used inheritance and made RESOURCE_URL wrapped types a subtype of URL wrapped types. This - * is purely an implementation details. - * - * The contract is simply this: - * - * getTrusted($sce.RESOURCE_URL, value) succeeding implies that getTrusted($sce.URL, value) - * will also succeed. - * - * Inheritance happens to capture this in a natural way. In some future, we - * may not use inheritance anymore. That is OK because no code outside of - * sce.js and sceSpecs.js would need to be aware of this detail. - */ - - this.$get = ['$parse', '$sceDelegate', function( - $parse, $sceDelegate) { - // Prereq: Ensure that we're not running in IE<11 quirks mode. In that mode, IE < 11 allow - // the "expression(javascript expression)" syntax which is insecure. - if (enabled && msie < 8) { - throw $sceMinErr('iequirks', - 'Strict Contextual Escaping does not support Internet Explorer version < 11 in quirks ' + - 'mode. You can fix this by adding the text <!doctype html> to the top of your HTML ' + - 'document. See http://docs.angularjs.org/api/ng.$sce for more information.'); - } - - var sce = shallowCopy(SCE_CONTEXTS); - - /** - * @ngdoc method - * @name $sce#isEnabled - * @kind function - * - * @return {Boolean} true if SCE is enabled, false otherwise. If you want to set the value, you - * have to do it at module config time on {@link ng.$sceProvider $sceProvider}. - * - * @description - * Returns a boolean indicating if SCE is enabled. - */ - sce.isEnabled = function() { - return enabled; - }; - sce.trustAs = $sceDelegate.trustAs; - sce.getTrusted = $sceDelegate.getTrusted; - sce.valueOf = $sceDelegate.valueOf; - - if (!enabled) { - sce.trustAs = sce.getTrusted = function(type, value) { return value; }; - sce.valueOf = identity; - } - - /** - * @ngdoc method - * @name $sce#parseAs - * - * @description - * Converts Angular {@link guide/expression expression} into a function. This is like {@link - * ng.$parse $parse} and is identical when the expression is a literal constant. Otherwise, it - * wraps the expression in a call to {@link ng.$sce#getTrusted $sce.getTrusted(*type*, - * *result*)} - * - * @param {string} type The kind of SCE context in which this result will be used. - * @param {string} expression String expression to compile. - * @returns {function(context, locals)} a function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the strings - * are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values in - * `context`. - */ - sce.parseAs = function sceParseAs(type, expr) { - var parsed = $parse(expr); - if (parsed.literal && parsed.constant) { - return parsed; - } else { - return $parse(expr, function(value) { - return sce.getTrusted(type, value); - }); - } - }; - - /** - * @ngdoc method - * @name $sce#trustAs - * - * @description - * Delegates to {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}. As such, - * returns an object that is trusted by angular for use in specified strict contextual - * escaping contexts (such as ng-bind-html, ng-include, any src attribute - * interpolation, any dom event binding attribute interpolation such as for onclick, etc.) - * that uses the provided value. See * {@link ng.$sce $sce} for enabling strict contextual - * escaping. - * - * @param {string} type The kind of context in which this value is safe for use. e.g. url, - * resource_url, html, js and css. - * @param {*} value The value that that should be considered trusted/safe. - * @returns {*} A value that can be used to stand in for the provided `value` in places - * where Angular expects a $sce.trustAs() return value. - */ - - /** - * @ngdoc method - * @name $sce#trustAsHtml - * - * @description - * Shorthand method. `$sce.trustAsHtml(value)` → - * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.HTML, value)`} - * - * @param {*} value The value to trustAs. - * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedHtml - * $sce.getTrustedHtml(value)} to obtain the original value. (privileged directives - * only accept expressions that are either literal constants or are the - * return value of {@link ng.$sce#trustAs $sce.trustAs}.) - */ - - /** - * @ngdoc method - * @name $sce#trustAsUrl - * - * @description - * Shorthand method. `$sce.trustAsUrl(value)` → - * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.URL, value)`} - * - * @param {*} value The value to trustAs. - * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedUrl - * $sce.getTrustedUrl(value)} to obtain the original value. (privileged directives - * only accept expressions that are either literal constants or are the - * return value of {@link ng.$sce#trustAs $sce.trustAs}.) - */ - - /** - * @ngdoc method - * @name $sce#trustAsResourceUrl - * - * @description - * Shorthand method. `$sce.trustAsResourceUrl(value)` → - * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.RESOURCE_URL, value)`} - * - * @param {*} value The value to trustAs. - * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedResourceUrl - * $sce.getTrustedResourceUrl(value)} to obtain the original value. (privileged directives - * only accept expressions that are either literal constants or are the return - * value of {@link ng.$sce#trustAs $sce.trustAs}.) - */ - - /** - * @ngdoc method - * @name $sce#trustAsJs - * - * @description - * Shorthand method. `$sce.trustAsJs(value)` → - * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.JS, value)`} - * - * @param {*} value The value to trustAs. - * @returns {*} An object that can be passed to {@link ng.$sce#getTrustedJs - * $sce.getTrustedJs(value)} to obtain the original value. (privileged directives - * only accept expressions that are either literal constants or are the - * return value of {@link ng.$sce#trustAs $sce.trustAs}.) - */ - - /** - * @ngdoc method - * @name $sce#getTrusted - * - * @description - * Delegates to {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted`}. As such, - * takes the result of a {@link ng.$sce#trustAs `$sce.trustAs`}() call and returns the - * originally supplied value if the queried context type is a supertype of the created type. - * If this condition isn't satisfied, throws an exception. - * - * @param {string} type The kind of context in which this value is to be used. - * @param {*} maybeTrusted The result of a prior {@link ng.$sce#trustAs `$sce.trustAs`} - * call. - * @returns {*} The value the was originally provided to - * {@link ng.$sce#trustAs `$sce.trustAs`} if valid in this context. - * Otherwise, throws an exception. - */ - - /** - * @ngdoc method - * @name $sce#getTrustedHtml - * - * @description - * Shorthand method. `$sce.getTrustedHtml(value)` → - * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.HTML, value)`} - * - * @param {*} value The value to pass to `$sce.getTrusted`. - * @returns {*} The return value of `$sce.getTrusted($sce.HTML, value)` - */ - - /** - * @ngdoc method - * @name $sce#getTrustedCss - * - * @description - * Shorthand method. `$sce.getTrustedCss(value)` → - * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.CSS, value)`} - * - * @param {*} value The value to pass to `$sce.getTrusted`. - * @returns {*} The return value of `$sce.getTrusted($sce.CSS, value)` - */ - - /** - * @ngdoc method - * @name $sce#getTrustedUrl - * - * @description - * Shorthand method. `$sce.getTrustedUrl(value)` → - * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.URL, value)`} - * - * @param {*} value The value to pass to `$sce.getTrusted`. - * @returns {*} The return value of `$sce.getTrusted($sce.URL, value)` - */ - - /** - * @ngdoc method - * @name $sce#getTrustedResourceUrl - * - * @description - * Shorthand method. `$sce.getTrustedResourceUrl(value)` → - * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.RESOURCE_URL, value)`} - * - * @param {*} value The value to pass to `$sceDelegate.getTrusted`. - * @returns {*} The return value of `$sce.getTrusted($sce.RESOURCE_URL, value)` - */ - - /** - * @ngdoc method - * @name $sce#getTrustedJs - * - * @description - * Shorthand method. `$sce.getTrustedJs(value)` → - * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.JS, value)`} - * - * @param {*} value The value to pass to `$sce.getTrusted`. - * @returns {*} The return value of `$sce.getTrusted($sce.JS, value)` - */ - - /** - * @ngdoc method - * @name $sce#parseAsHtml - * - * @description - * Shorthand method. `$sce.parseAsHtml(expression string)` → - * {@link ng.$sce#parseAs `$sce.parseAs($sce.HTML, value)`} - * - * @param {string} expression String expression to compile. - * @returns {function(context, locals)} a function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the strings - * are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values in - * `context`. - */ - - /** - * @ngdoc method - * @name $sce#parseAsCss - * - * @description - * Shorthand method. `$sce.parseAsCss(value)` → - * {@link ng.$sce#parseAs `$sce.parseAs($sce.CSS, value)`} - * - * @param {string} expression String expression to compile. - * @returns {function(context, locals)} a function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the strings - * are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values in - * `context`. - */ - - /** - * @ngdoc method - * @name $sce#parseAsUrl - * - * @description - * Shorthand method. `$sce.parseAsUrl(value)` → - * {@link ng.$sce#parseAs `$sce.parseAs($sce.URL, value)`} - * - * @param {string} expression String expression to compile. - * @returns {function(context, locals)} a function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the strings - * are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values in - * `context`. - */ - - /** - * @ngdoc method - * @name $sce#parseAsResourceUrl - * - * @description - * Shorthand method. `$sce.parseAsResourceUrl(value)` → - * {@link ng.$sce#parseAs `$sce.parseAs($sce.RESOURCE_URL, value)`} - * - * @param {string} expression String expression to compile. - * @returns {function(context, locals)} a function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the strings - * are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values in - * `context`. - */ - - /** - * @ngdoc method - * @name $sce#parseAsJs - * - * @description - * Shorthand method. `$sce.parseAsJs(value)` → - * {@link ng.$sce#parseAs `$sce.parseAs($sce.JS, value)`} - * - * @param {string} expression String expression to compile. - * @returns {function(context, locals)} a function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the strings - * are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values in - * `context`. - */ - - // Shorthand delegations. - var parse = sce.parseAs, - getTrusted = sce.getTrusted, - trustAs = sce.trustAs; - - forEach(SCE_CONTEXTS, function(enumValue, name) { - var lName = lowercase(name); - sce[camelCase("parse_as_" + lName)] = function(expr) { - return parse(enumValue, expr); - }; - sce[camelCase("get_trusted_" + lName)] = function(value) { - return getTrusted(enumValue, value); - }; - sce[camelCase("trust_as_" + lName)] = function(value) { - return trustAs(enumValue, value); - }; - }); - - return sce; - }]; -} - -/** - * !!! This is an undocumented "private" service !!! - * - * @name $sniffer - * @requires $window - * @requires $document - * - * @property {boolean} history Does the browser support html5 history api ? - * @property {boolean} transitions Does the browser support CSS transition events ? - * @property {boolean} animations Does the browser support CSS animation events ? - * - * @description - * This is very simple implementation of testing browser's features. - */ -function $SnifferProvider() { - this.$get = ['$window', '$document', function($window, $document) { - var eventSupport = {}, - android = - int((/android (\d+)/.exec(lowercase(($window.navigator || {}).userAgent)) || [])[1]), - boxee = /Boxee/i.test(($window.navigator || {}).userAgent), - document = $document[0] || {}, - vendorPrefix, - vendorRegex = /^(Moz|webkit|ms)(?=[A-Z])/, - bodyStyle = document.body && document.body.style, - transitions = false, - animations = false, - match; - - if (bodyStyle) { - for (var prop in bodyStyle) { - if (match = vendorRegex.exec(prop)) { - vendorPrefix = match[0]; - vendorPrefix = vendorPrefix.substr(0, 1).toUpperCase() + vendorPrefix.substr(1); - break; - } - } - - if (!vendorPrefix) { - vendorPrefix = ('WebkitOpacity' in bodyStyle) && 'webkit'; - } - - transitions = !!(('transition' in bodyStyle) || (vendorPrefix + 'Transition' in bodyStyle)); - animations = !!(('animation' in bodyStyle) || (vendorPrefix + 'Animation' in bodyStyle)); - - if (android && (!transitions || !animations)) { - transitions = isString(document.body.style.webkitTransition); - animations = isString(document.body.style.webkitAnimation); - } - } - - - return { - // Android has history.pushState, but it does not update location correctly - // so let's not use the history API at all. - // http://code.google.com/p/android/issues/detail?id=17471 - // https://github.com/angular/angular.js/issues/904 - - // older webkit browser (533.9) on Boxee box has exactly the same problem as Android has - // so let's not use the history API also - // We are purposefully using `!(android < 4)` to cover the case when `android` is undefined - // jshint -W018 - history: !!($window.history && $window.history.pushState && !(android < 4) && !boxee), - // jshint +W018 - hasEvent: function(event) { - // IE9 implements 'input' event it's so fubared that we rather pretend that it doesn't have - // it. In particular the event is not fired when backspace or delete key are pressed or - // when cut operation is performed. - // IE10+ implements 'input' event but it erroneously fires under various situations, - // e.g. when placeholder changes, or a form is focused. - if (event === 'input' && msie <= 11) return false; - - if (isUndefined(eventSupport[event])) { - var divElm = document.createElement('div'); - eventSupport[event] = 'on' + event in divElm; - } - - return eventSupport[event]; - }, - csp: csp(), - vendorPrefix: vendorPrefix, - transitions: transitions, - animations: animations, - android: android - }; - }]; -} - -var $compileMinErr = minErr('$compile'); - -/** - * @ngdoc service - * @name $templateRequest - * - * @description - * The `$templateRequest` service downloads the provided template using `$http` and, upon success, - * stores the contents inside of `$templateCache`. If the HTTP request fails or the response data - * of the HTTP request is empty, a `$compile` error will be thrown (the exception can be thwarted - * by setting the 2nd parameter of the function to true). - * - * @param {string} tpl The HTTP request template URL - * @param {boolean=} ignoreRequestError Whether or not to ignore the exception when the request fails or the template is empty - * - * @return {Promise} the HTTP Promise for the given. - * - * @property {number} totalPendingRequests total amount of pending template requests being downloaded. - */ -function $TemplateRequestProvider() { - this.$get = ['$templateCache', '$http', '$q', function($templateCache, $http, $q) { - function handleRequestFn(tpl, ignoreRequestError) { - handleRequestFn.totalPendingRequests++; - - var transformResponse = $http.defaults && $http.defaults.transformResponse; - - if (isArray(transformResponse)) { - transformResponse = transformResponse.filter(function(transformer) { - return transformer !== defaultHttpResponseTransform; - }); - } else if (transformResponse === defaultHttpResponseTransform) { - transformResponse = null; - } - - var httpOptions = { - cache: $templateCache, - transformResponse: transformResponse - }; - - return $http.get(tpl, httpOptions) - .finally(function() { - handleRequestFn.totalPendingRequests--; - }) - .then(function(response) { - return response.data; - }, handleError); - - function handleError(resp) { - if (!ignoreRequestError) { - throw $compileMinErr('tpload', 'Failed to load template: {0}', tpl); - } - return $q.reject(resp); - } - } - - handleRequestFn.totalPendingRequests = 0; - - return handleRequestFn; - }]; -} - -function $$TestabilityProvider() { - this.$get = ['$rootScope', '$browser', '$location', - function($rootScope, $browser, $location) { - - /** - * @name $testability - * - * @description - * The private $$testability service provides a collection of methods for use when debugging - * or by automated test and debugging tools. - */ - var testability = {}; - - /** - * @name $$testability#findBindings - * - * @description - * Returns an array of elements that are bound (via ng-bind or {{}}) - * to expressions matching the input. - * - * @param {Element} element The element root to search from. - * @param {string} expression The binding expression to match. - * @param {boolean} opt_exactMatch If true, only returns exact matches - * for the expression. Filters and whitespace are ignored. - */ - testability.findBindings = function(element, expression, opt_exactMatch) { - var bindings = element.getElementsByClassName('ng-binding'); - var matches = []; - forEach(bindings, function(binding) { - var dataBinding = angular.element(binding).data('$binding'); - if (dataBinding) { - forEach(dataBinding, function(bindingName) { - if (opt_exactMatch) { - var matcher = new RegExp('(^|\\s)' + escapeForRegexp(expression) + '(\\s|\\||$)'); - if (matcher.test(bindingName)) { - matches.push(binding); - } - } else { - if (bindingName.indexOf(expression) != -1) { - matches.push(binding); - } - } - }); - } - }); - return matches; - }; - - /** - * @name $$testability#findModels - * - * @description - * Returns an array of elements that are two-way found via ng-model to - * expressions matching the input. - * - * @param {Element} element The element root to search from. - * @param {string} expression The model expression to match. - * @param {boolean} opt_exactMatch If true, only returns exact matches - * for the expression. - */ - testability.findModels = function(element, expression, opt_exactMatch) { - var prefixes = ['ng-', 'data-ng-', 'ng\\:']; - for (var p = 0; p < prefixes.length; ++p) { - var attributeEquals = opt_exactMatch ? '=' : '*='; - var selector = '[' + prefixes[p] + 'model' + attributeEquals + '"' + expression + '"]'; - var elements = element.querySelectorAll(selector); - if (elements.length) { - return elements; - } - } - }; - - /** - * @name $$testability#getLocation - * - * @description - * Shortcut for getting the location in a browser agnostic way. Returns - * the path, search, and hash. (e.g. /path?a=b#hash) - */ - testability.getLocation = function() { - return $location.url(); - }; - - /** - * @name $$testability#setLocation - * - * @description - * Shortcut for navigating to a location without doing a full page reload. - * - * @param {string} url The location url (path, search and hash, - * e.g. /path?a=b#hash) to go to. - */ - testability.setLocation = function(url) { - if (url !== $location.url()) { - $location.url(url); - $rootScope.$digest(); - } - }; - - /** - * @name $$testability#whenStable - * - * @description - * Calls the callback when $timeout and $http requests are completed. - * - * @param {function} callback - */ - testability.whenStable = function(callback) { - $browser.notifyWhenNoOutstandingRequests(callback); - }; - - return testability; - }]; -} - -function $TimeoutProvider() { - this.$get = ['$rootScope', '$browser', '$q', '$$q', '$exceptionHandler', - function($rootScope, $browser, $q, $$q, $exceptionHandler) { - var deferreds = {}; - - - /** - * @ngdoc service - * @name $timeout - * - * @description - * Angular's wrapper for `window.setTimeout`. The `fn` function is wrapped into a try/catch - * block and delegates any exceptions to - * {@link ng.$exceptionHandler $exceptionHandler} service. - * - * The return value of registering a timeout function is a promise, which will be resolved when - * the timeout is reached and the timeout function is executed. - * - * To cancel a timeout request, call `$timeout.cancel(promise)`. - * - * In tests you can use {@link ngMock.$timeout `$timeout.flush()`} to - * synchronously flush the queue of deferred functions. - * - * @param {function()} fn A function, whose execution should be delayed. - * @param {number=} [delay=0] Delay in milliseconds. - * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise - * will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block. - * @returns {Promise} Promise that will be resolved when the timeout is reached. The value this - * promise will be resolved with is the return value of the `fn` function. - * - */ - function timeout(fn, delay, invokeApply) { - var skipApply = (isDefined(invokeApply) && !invokeApply), - deferred = (skipApply ? $$q : $q).defer(), - promise = deferred.promise, - timeoutId; - - timeoutId = $browser.defer(function() { - try { - deferred.resolve(fn()); - } catch (e) { - deferred.reject(e); - $exceptionHandler(e); - } - finally { - delete deferreds[promise.$$timeoutId]; - } - - if (!skipApply) $rootScope.$apply(); - }, delay); - - promise.$$timeoutId = timeoutId; - deferreds[timeoutId] = deferred; - - return promise; - } - - - /** - * @ngdoc method - * @name $timeout#cancel - * - * @description - * Cancels a task associated with the `promise`. As a result of this, the promise will be - * resolved with a rejection. - * - * @param {Promise=} promise Promise returned by the `$timeout` function. - * @returns {boolean} Returns `true` if the task hasn't executed yet and was successfully - * canceled. - */ - timeout.cancel = function(promise) { - if (promise && promise.$$timeoutId in deferreds) { - deferreds[promise.$$timeoutId].reject('canceled'); - delete deferreds[promise.$$timeoutId]; - return $browser.defer.cancel(promise.$$timeoutId); - } - return false; - }; - - return timeout; - }]; -} - -// NOTE: The usage of window and document instead of $window and $document here is -// deliberate. This service depends on the specific behavior of anchor nodes created by the -// browser (resolving and parsing URLs) that is unlikely to be provided by mock objects and -// cause us to break tests. In addition, when the browser resolves a URL for XHR, it -// doesn't know about mocked locations and resolves URLs to the real document - which is -// exactly the behavior needed here. There is little value is mocking these out for this -// service. -var urlParsingNode = document.createElement("a"); -var originUrl = urlResolve(window.location.href); - - -/** - * - * Implementation Notes for non-IE browsers - * ---------------------------------------- - * Assigning a URL to the href property of an anchor DOM node, even one attached to the DOM, - * results both in the normalizing and parsing of the URL. Normalizing means that a relative - * URL will be resolved into an absolute URL in the context of the application document. - * Parsing means that the anchor node's host, hostname, protocol, port, pathname and related - * properties are all populated to reflect the normalized URL. This approach has wide - * compatibility - Safari 1+, Mozilla 1+, Opera 7+,e etc. See - * http://www.aptana.com/reference/html/api/HTMLAnchorElement.html - * - * Implementation Notes for IE - * --------------------------- - * IE >= 8 and <= 10 normalizes the URL when assigned to the anchor node similar to the other - * browsers. However, the parsed components will not be set if the URL assigned did not specify - * them. (e.g. if you assign a.href = "foo", then a.protocol, a.host, etc. will be empty.) We - * work around that by performing the parsing in a 2nd step by taking a previously normalized - * URL (e.g. by assigning to a.href) and assigning it a.href again. This correctly populates the - * properties such as protocol, hostname, port, etc. - * - * IE7 does not normalize the URL when assigned to an anchor node. (Apparently, it does, if one - * uses the inner HTML approach to assign the URL as part of an HTML snippet - - * http://stackoverflow.com/a/472729) However, setting img[src] does normalize the URL. - * Unfortunately, setting img[src] to something like "javascript:foo" on IE throws an exception. - * Since the primary usage for normalizing URLs is to sanitize such URLs, we can't use that - * method and IE < 8 is unsupported. - * - * References: - * http://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement - * http://www.aptana.com/reference/html/api/HTMLAnchorElement.html - * http://url.spec.whatwg.org/#urlutils - * https://github.com/angular/angular.js/pull/2902 - * http://james.padolsey.com/javascript/parsing-urls-with-the-dom/ - * - * @kind function - * @param {string} url The URL to be parsed. - * @description Normalizes and parses a URL. - * @returns {object} Returns the normalized URL as a dictionary. - * - * | member name | Description | - * |---------------|----------------| - * | href | A normalized version of the provided URL if it was not an absolute URL | - * | protocol | The protocol including the trailing colon | - * | host | The host and port (if the port is non-default) of the normalizedUrl | - * | search | The search params, minus the question mark | - * | hash | The hash string, minus the hash symbol - * | hostname | The hostname - * | port | The port, without ":" - * | pathname | The pathname, beginning with "/" - * - */ -function urlResolve(url) { - var href = url; - - if (msie) { - // Normalize before parse. Refer Implementation Notes on why this is - // done in two steps on IE. - urlParsingNode.setAttribute("href", href); - href = urlParsingNode.href; - } - - urlParsingNode.setAttribute('href', href); - - // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils - return { - href: urlParsingNode.href, - protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '', - host: urlParsingNode.host, - search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '', - hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '', - hostname: urlParsingNode.hostname, - port: urlParsingNode.port, - pathname: (urlParsingNode.pathname.charAt(0) === '/') - ? urlParsingNode.pathname - : '/' + urlParsingNode.pathname - }; -} - -/** - * Parse a request URL and determine whether this is a same-origin request as the application document. - * - * @param {string|object} requestUrl The url of the request as a string that will be resolved - * or a parsed URL object. - * @returns {boolean} Whether the request is for the same origin as the application document. - */ -function urlIsSameOrigin(requestUrl) { - var parsed = (isString(requestUrl)) ? urlResolve(requestUrl) : requestUrl; - return (parsed.protocol === originUrl.protocol && - parsed.host === originUrl.host); -} - -/** - * @ngdoc service - * @name $window - * - * @description - * A reference to the browser's `window` object. While `window` - * is globally available in JavaScript, it causes testability problems, because - * it is a global variable. In angular we always refer to it through the - * `$window` service, so it may be overridden, removed or mocked for testing. - * - * Expressions, like the one defined for the `ngClick` directive in the example - * below, are evaluated with respect to the current scope. Therefore, there is - * no risk of inadvertently coding in a dependency on a global value in such an - * expression. - * - * @example - <example module="windowExample"> - <file name="index.html"> - <script> - angular.module('windowExample', []) - .controller('ExampleController', ['$scope', '$window', function($scope, $window) { - $scope.greeting = 'Hello, World!'; - $scope.doGreeting = function(greeting) { - $window.alert(greeting); - }; - }]); - </script> - <div ng-controller="ExampleController"> - <input type="text" ng-model="greeting" /> - <button ng-click="doGreeting(greeting)">ALERT</button> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should display the greeting in the input box', function() { - element(by.model('greeting')).sendKeys('Hello, E2E Tests'); - // If we click the button it will block the test runner - // element(':button').click(); - }); - </file> - </example> - */ -function $WindowProvider() { - this.$get = valueFn(window); -} - -/* global currencyFilter: true, - dateFilter: true, - filterFilter: true, - jsonFilter: true, - limitToFilter: true, - lowercaseFilter: true, - numberFilter: true, - orderByFilter: true, - uppercaseFilter: true, - */ - -/** - * @ngdoc provider - * @name $filterProvider - * @description - * - * Filters are just functions which transform input to an output. However filters need to be - * Dependency Injected. To achieve this a filter definition consists of a factory function which is - * annotated with dependencies and is responsible for creating a filter function. - * - * ```js - * // Filter registration - * function MyModule($provide, $filterProvider) { - * // create a service to demonstrate injection (not always needed) - * $provide.value('greet', function(name){ - * return 'Hello ' + name + '!'; - * }); - * - * // register a filter factory which uses the - * // greet service to demonstrate DI. - * $filterProvider.register('greet', function(greet){ - * // return the filter function which uses the greet service - * // to generate salutation - * return function(text) { - * // filters need to be forgiving so check input validity - * return text && greet(text) || text; - * }; - * }); - * } - * ``` - * - * The filter function is registered with the `$injector` under the filter name suffix with - * `Filter`. - * - * ```js - * it('should be the same instance', inject( - * function($filterProvider) { - * $filterProvider.register('reverse', function(){ - * return ...; - * }); - * }, - * function($filter, reverseFilter) { - * expect($filter('reverse')).toBe(reverseFilter); - * }); - * ``` - * - * - * For more information about how angular filters work, and how to create your own filters, see - * {@link guide/filter Filters} in the Angular Developer Guide. - */ - -/** - * @ngdoc service - * @name $filter - * @kind function - * @description - * Filters are used for formatting data displayed to the user. - * - * The general syntax in templates is as follows: - * - * {{ expression [| filter_name[:parameter_value] ... ] }} - * - * @param {String} name Name of the filter function to retrieve - * @return {Function} the filter function - * @example - <example name="$filter" module="filterExample"> - <file name="index.html"> - <div ng-controller="MainCtrl"> - <h3>{{ originalText }}</h3> - <h3>{{ filteredText }}</h3> - </div> - </file> - - <file name="script.js"> - angular.module('filterExample', []) - .controller('MainCtrl', function($scope, $filter) { - $scope.originalText = 'hello'; - $scope.filteredText = $filter('uppercase')($scope.originalText); - }); - </file> - </example> - */ -$FilterProvider.$inject = ['$provide']; -function $FilterProvider($provide) { - var suffix = 'Filter'; - - /** - * @ngdoc method - * @name $filterProvider#register - * @param {string|Object} name Name of the filter function, or an object map of filters where - * the keys are the filter names and the values are the filter factories. - * @returns {Object} Registered filter instance, or if a map of filters was provided then a map - * of the registered filter instances. - */ - function register(name, factory) { - if (isObject(name)) { - var filters = {}; - forEach(name, function(filter, key) { - filters[key] = register(key, filter); - }); - return filters; - } else { - return $provide.factory(name + suffix, factory); - } - } - this.register = register; - - this.$get = ['$injector', function($injector) { - return function(name) { - return $injector.get(name + suffix); - }; - }]; - - //////////////////////////////////////// - - /* global - currencyFilter: false, - dateFilter: false, - filterFilter: false, - jsonFilter: false, - limitToFilter: false, - lowercaseFilter: false, - numberFilter: false, - orderByFilter: false, - uppercaseFilter: false, - */ - - register('currency', currencyFilter); - register('date', dateFilter); - register('filter', filterFilter); - register('json', jsonFilter); - register('limitTo', limitToFilter); - register('lowercase', lowercaseFilter); - register('number', numberFilter); - register('orderBy', orderByFilter); - register('uppercase', uppercaseFilter); -} - -/** - * @ngdoc filter - * @name filter - * @kind function - * - * @description - * Selects a subset of items from `array` and returns it as a new array. - * - * @param {Array} array The source array. - * @param {string|Object|function()} expression The predicate to be used for selecting items from - * `array`. - * - * Can be one of: - * - * - `string`: The string is used for matching against the contents of the `array`. All strings or - * objects with string properties in `array` that match this string will be returned. This also - * applies to nested object properties. - * The predicate can be negated by prefixing the string with `!`. - * - * - `Object`: A pattern object can be used to filter specific properties on objects contained - * by `array`. For example `{name:"M", phone:"1"}` predicate will return an array of items - * which have property `name` containing "M" and property `phone` containing "1". A special - * property name `$` can be used (as in `{$:"text"}`) to accept a match against any - * property of the object or its nested object properties. That's equivalent to the simple - * substring match with a `string` as described above. The predicate can be negated by prefixing - * the string with `!`. - * For example `{name: "!M"}` predicate will return an array of items which have property `name` - * not containing "M". - * - * Note that a named property will match properties on the same level only, while the special - * `$` property will match properties on the same level or deeper. E.g. an array item like - * `{name: {first: 'John', last: 'Doe'}}` will **not** be matched by `{name: 'John'}`, but - * **will** be matched by `{$: 'John'}`. - * - * - `function(value, index)`: A predicate function can be used to write arbitrary filters. The - * function is called for each element of `array`. The final result is an array of those - * elements that the predicate returned true for. - * - * @param {function(actual, expected)|true|undefined} comparator Comparator which is used in - * determining if the expected value (from the filter expression) and actual value (from - * the object in the array) should be considered a match. - * - * Can be one of: - * - * - `function(actual, expected)`: - * The function will be given the object value and the predicate value to compare and - * should return true if both values should be considered equal. - * - * - `true`: A shorthand for `function(actual, expected) { return angular.equals(actual, expected)}`. - * This is essentially strict comparison of expected and actual. - * - * - `false|undefined`: A short hand for a function which will look for a substring match in case - * insensitive way. - * - * @example - <example> - <file name="index.html"> - <div ng-init="friends = [{name:'John', phone:'555-1276'}, - {name:'Mary', phone:'800-BIG-MARY'}, - {name:'Mike', phone:'555-4321'}, - {name:'Adam', phone:'555-5678'}, - {name:'Julie', phone:'555-8765'}, - {name:'Juliette', phone:'555-5678'}]"></div> - - Search: <input ng-model="searchText"> - <table id="searchTextResults"> - <tr><th>Name</th><th>Phone</th></tr> - <tr ng-repeat="friend in friends | filter:searchText"> - <td>{{friend.name}}</td> - <td>{{friend.phone}}</td> - </tr> - </table> - <hr> - Any: <input ng-model="search.$"> <br> - Name only <input ng-model="search.name"><br> - Phone only <input ng-model="search.phone"><br> - Equality <input type="checkbox" ng-model="strict"><br> - <table id="searchObjResults"> - <tr><th>Name</th><th>Phone</th></tr> - <tr ng-repeat="friendObj in friends | filter:search:strict"> - <td>{{friendObj.name}}</td> - <td>{{friendObj.phone}}</td> - </tr> - </table> - </file> - <file name="protractor.js" type="protractor"> - var expectFriendNames = function(expectedNames, key) { - element.all(by.repeater(key + ' in friends').column(key + '.name')).then(function(arr) { - arr.forEach(function(wd, i) { - expect(wd.getText()).toMatch(expectedNames[i]); - }); - }); - }; - - it('should search across all fields when filtering with a string', function() { - var searchText = element(by.model('searchText')); - searchText.clear(); - searchText.sendKeys('m'); - expectFriendNames(['Mary', 'Mike', 'Adam'], 'friend'); - - searchText.clear(); - searchText.sendKeys('76'); - expectFriendNames(['John', 'Julie'], 'friend'); - }); - - it('should search in specific fields when filtering with a predicate object', function() { - var searchAny = element(by.model('search.$')); - searchAny.clear(); - searchAny.sendKeys('i'); - expectFriendNames(['Mary', 'Mike', 'Julie', 'Juliette'], 'friendObj'); - }); - it('should use a equal comparison when comparator is true', function() { - var searchName = element(by.model('search.name')); - var strict = element(by.model('strict')); - searchName.clear(); - searchName.sendKeys('Julie'); - strict.click(); - expectFriendNames(['Julie'], 'friendObj'); - }); - </file> - </example> - */ -function filterFilter() { - return function(array, expression, comparator) { - if (!isArray(array)) return array; - - var predicateFn; - var matchAgainstAnyProp; - - switch (typeof expression) { - case 'function': - predicateFn = expression; - break; - case 'boolean': - case 'number': - case 'string': - matchAgainstAnyProp = true; - //jshint -W086 - case 'object': - //jshint +W086 - predicateFn = createPredicateFn(expression, comparator, matchAgainstAnyProp); - break; - default: - return array; - } - - return array.filter(predicateFn); - }; -} - -// Helper functions for `filterFilter` -function createPredicateFn(expression, comparator, matchAgainstAnyProp) { - var shouldMatchPrimitives = isObject(expression) && ('$' in expression); - var predicateFn; - - if (comparator === true) { - comparator = equals; - } else if (!isFunction(comparator)) { - comparator = function(actual, expected) { - if (isObject(actual) || isObject(expected)) { - // Prevent an object to be considered equal to a string like `'[object'` - return false; - } - - actual = lowercase('' + actual); - expected = lowercase('' + expected); - return actual.indexOf(expected) !== -1; - }; - } - - predicateFn = function(item) { - if (shouldMatchPrimitives && !isObject(item)) { - return deepCompare(item, expression.$, comparator, false); - } - return deepCompare(item, expression, comparator, matchAgainstAnyProp); - }; - - return predicateFn; -} - -function deepCompare(actual, expected, comparator, matchAgainstAnyProp, dontMatchWholeObject) { - var actualType = typeof actual; - var expectedType = typeof expected; - - if ((expectedType === 'string') && (expected.charAt(0) === '!')) { - return !deepCompare(actual, expected.substring(1), comparator, matchAgainstAnyProp); - } else if (isArray(actual)) { - // In case `actual` is an array, consider it a match - // if ANY of it's items matches `expected` - return actual.some(function(item) { - return deepCompare(item, expected, comparator, matchAgainstAnyProp); - }); - } - - switch (actualType) { - case 'object': - var key; - if (matchAgainstAnyProp) { - for (key in actual) { - if ((key.charAt(0) !== '$') && deepCompare(actual[key], expected, comparator, true)) { - return true; - } - } - return dontMatchWholeObject ? false : deepCompare(actual, expected, comparator, false); - } else if (expectedType === 'object') { - for (key in expected) { - var expectedVal = expected[key]; - if (isFunction(expectedVal)) { - continue; - } - - var matchAnyProperty = key === '$'; - var actualVal = matchAnyProperty ? actual : actual[key]; - if (!deepCompare(actualVal, expectedVal, comparator, matchAnyProperty, matchAnyProperty)) { - return false; - } - } - return true; - } else { - return comparator(actual, expected); - } - break; - case 'function': - return false; - default: - return comparator(actual, expected); - } -} - -/** - * @ngdoc filter - * @name currency - * @kind function - * - * @description - * Formats a number as a currency (ie $1,234.56). When no currency symbol is provided, default - * symbol for current locale is used. - * - * @param {number} amount Input to filter. - * @param {string=} symbol Currency symbol or identifier to be displayed. - * @param {number=} fractionSize Number of decimal places to round the amount to, defaults to default max fraction size for current locale - * @returns {string} Formatted number. - * - * - * @example - <example module="currencyExample"> - <file name="index.html"> - <script> - angular.module('currencyExample', []) - .controller('ExampleController', ['$scope', function($scope) { - $scope.amount = 1234.56; - }]); - </script> - <div ng-controller="ExampleController"> - <input type="number" ng-model="amount"> <br> - default currency symbol ($): <span id="currency-default">{{amount | currency}}</span><br> - custom currency identifier (USD$): <span id="currency-custom">{{amount | currency:"USD$"}}</span> - no fractions (0): <span id="currency-no-fractions">{{amount | currency:"USD$":0}}</span> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should init with 1234.56', function() { - expect(element(by.id('currency-default')).getText()).toBe('$1,234.56'); - expect(element(by.id('currency-custom')).getText()).toBe('USD$1,234.56'); - expect(element(by.id('currency-no-fractions')).getText()).toBe('USD$1,235'); - }); - it('should update', function() { - if (browser.params.browser == 'safari') { - // Safari does not understand the minus key. See - // https://github.com/angular/protractor/issues/481 - return; - } - element(by.model('amount')).clear(); - element(by.model('amount')).sendKeys('-1234'); - expect(element(by.id('currency-default')).getText()).toBe('($1,234.00)'); - expect(element(by.id('currency-custom')).getText()).toBe('(USD$1,234.00)'); - expect(element(by.id('currency-no-fractions')).getText()).toBe('(USD$1,234)'); - }); - </file> - </example> - */ -currencyFilter.$inject = ['$locale']; -function currencyFilter($locale) { - var formats = $locale.NUMBER_FORMATS; - return function(amount, currencySymbol, fractionSize) { - if (isUndefined(currencySymbol)) { - currencySymbol = formats.CURRENCY_SYM; - } - - if (isUndefined(fractionSize)) { - fractionSize = formats.PATTERNS[1].maxFrac; - } - - // if null or undefined pass it through - return (amount == null) - ? amount - : formatNumber(amount, formats.PATTERNS[1], formats.GROUP_SEP, formats.DECIMAL_SEP, fractionSize). - replace(/\u00A4/g, currencySymbol); - }; -} - -/** - * @ngdoc filter - * @name number - * @kind function - * - * @description - * Formats a number as text. - * - * If the input is not a number an empty string is returned. - * - * @param {number|string} number Number to format. - * @param {(number|string)=} fractionSize Number of decimal places to round the number to. - * If this is not provided then the fraction size is computed from the current locale's number - * formatting pattern. In the case of the default locale, it will be 3. - * @returns {string} Number rounded to decimalPlaces and places a “,†after each third digit. - * - * @example - <example module="numberFilterExample"> - <file name="index.html"> - <script> - angular.module('numberFilterExample', []) - .controller('ExampleController', ['$scope', function($scope) { - $scope.val = 1234.56789; - }]); - </script> - <div ng-controller="ExampleController"> - Enter number: <input ng-model='val'><br> - Default formatting: <span id='number-default'>{{val | number}}</span><br> - No fractions: <span>{{val | number:0}}</span><br> - Negative number: <span>{{-val | number:4}}</span> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should format numbers', function() { - expect(element(by.id('number-default')).getText()).toBe('1,234.568'); - expect(element(by.binding('val | number:0')).getText()).toBe('1,235'); - expect(element(by.binding('-val | number:4')).getText()).toBe('-1,234.5679'); - }); - - it('should update', function() { - element(by.model('val')).clear(); - element(by.model('val')).sendKeys('3374.333'); - expect(element(by.id('number-default')).getText()).toBe('3,374.333'); - expect(element(by.binding('val | number:0')).getText()).toBe('3,374'); - expect(element(by.binding('-val | number:4')).getText()).toBe('-3,374.3330'); - }); - </file> - </example> - */ - - -numberFilter.$inject = ['$locale']; -function numberFilter($locale) { - var formats = $locale.NUMBER_FORMATS; - return function(number, fractionSize) { - - // if null or undefined pass it through - return (number == null) - ? number - : formatNumber(number, formats.PATTERNS[0], formats.GROUP_SEP, formats.DECIMAL_SEP, - fractionSize); - }; -} - -var DECIMAL_SEP = '.'; -function formatNumber(number, pattern, groupSep, decimalSep, fractionSize) { - if (!isFinite(number) || isObject(number)) return ''; - - var isNegative = number < 0; - number = Math.abs(number); - var numStr = number + '', - formatedText = '', - parts = []; - - var hasExponent = false; - if (numStr.indexOf('e') !== -1) { - var match = numStr.match(/([\d\.]+)e(-?)(\d+)/); - if (match && match[2] == '-' && match[3] > fractionSize + 1) { - number = 0; - } else { - formatedText = numStr; - hasExponent = true; - } - } - - if (!hasExponent) { - var fractionLen = (numStr.split(DECIMAL_SEP)[1] || '').length; - - // determine fractionSize if it is not specified - if (isUndefined(fractionSize)) { - fractionSize = Math.min(Math.max(pattern.minFrac, fractionLen), pattern.maxFrac); - } - - // safely round numbers in JS without hitting imprecisions of floating-point arithmetics - // inspired by: - // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/round - number = +(Math.round(+(number.toString() + 'e' + fractionSize)).toString() + 'e' + -fractionSize); - - var fraction = ('' + number).split(DECIMAL_SEP); - var whole = fraction[0]; - fraction = fraction[1] || ''; - - var i, pos = 0, - lgroup = pattern.lgSize, - group = pattern.gSize; - - if (whole.length >= (lgroup + group)) { - pos = whole.length - lgroup; - for (i = 0; i < pos; i++) { - if ((pos - i) % group === 0 && i !== 0) { - formatedText += groupSep; - } - formatedText += whole.charAt(i); - } - } - - for (i = pos; i < whole.length; i++) { - if ((whole.length - i) % lgroup === 0 && i !== 0) { - formatedText += groupSep; - } - formatedText += whole.charAt(i); - } - - // format fraction part. - while (fraction.length < fractionSize) { - fraction += '0'; - } - - if (fractionSize && fractionSize !== "0") formatedText += decimalSep + fraction.substr(0, fractionSize); - } else { - if (fractionSize > 0 && number < 1) { - formatedText = number.toFixed(fractionSize); - number = parseFloat(formatedText); - } - } - - if (number === 0) { - isNegative = false; - } - - parts.push(isNegative ? pattern.negPre : pattern.posPre, - formatedText, - isNegative ? pattern.negSuf : pattern.posSuf); - return parts.join(''); -} - -function padNumber(num, digits, trim) { - var neg = ''; - if (num < 0) { - neg = '-'; - num = -num; - } - num = '' + num; - while (num.length < digits) num = '0' + num; - if (trim) - num = num.substr(num.length - digits); - return neg + num; -} - - -function dateGetter(name, size, offset, trim) { - offset = offset || 0; - return function(date) { - var value = date['get' + name](); - if (offset > 0 || value > -offset) - value += offset; - if (value === 0 && offset == -12) value = 12; - return padNumber(value, size, trim); - }; -} - -function dateStrGetter(name, shortForm) { - return function(date, formats) { - var value = date['get' + name](); - var get = uppercase(shortForm ? ('SHORT' + name) : name); - - return formats[get][value]; - }; -} - -function timeZoneGetter(date) { - var zone = -1 * date.getTimezoneOffset(); - var paddedZone = (zone >= 0) ? "+" : ""; - - paddedZone += padNumber(Math[zone > 0 ? 'floor' : 'ceil'](zone / 60), 2) + - padNumber(Math.abs(zone % 60), 2); - - return paddedZone; -} - -function getFirstThursdayOfYear(year) { - // 0 = index of January - var dayOfWeekOnFirst = (new Date(year, 0, 1)).getDay(); - // 4 = index of Thursday (+1 to account for 1st = 5) - // 11 = index of *next* Thursday (+1 account for 1st = 12) - return new Date(year, 0, ((dayOfWeekOnFirst <= 4) ? 5 : 12) - dayOfWeekOnFirst); -} - -function getThursdayThisWeek(datetime) { - return new Date(datetime.getFullYear(), datetime.getMonth(), - // 4 = index of Thursday - datetime.getDate() + (4 - datetime.getDay())); -} - -function weekGetter(size) { - return function(date) { - var firstThurs = getFirstThursdayOfYear(date.getFullYear()), - thisThurs = getThursdayThisWeek(date); - - var diff = +thisThurs - +firstThurs, - result = 1 + Math.round(diff / 6.048e8); // 6.048e8 ms per week - - return padNumber(result, size); - }; -} - -function ampmGetter(date, formats) { - return date.getHours() < 12 ? formats.AMPMS[0] : formats.AMPMS[1]; -} - -var DATE_FORMATS = { - yyyy: dateGetter('FullYear', 4), - yy: dateGetter('FullYear', 2, 0, true), - y: dateGetter('FullYear', 1), - MMMM: dateStrGetter('Month'), - MMM: dateStrGetter('Month', true), - MM: dateGetter('Month', 2, 1), - M: dateGetter('Month', 1, 1), - dd: dateGetter('Date', 2), - d: dateGetter('Date', 1), - HH: dateGetter('Hours', 2), - H: dateGetter('Hours', 1), - hh: dateGetter('Hours', 2, -12), - h: dateGetter('Hours', 1, -12), - mm: dateGetter('Minutes', 2), - m: dateGetter('Minutes', 1), - ss: dateGetter('Seconds', 2), - s: dateGetter('Seconds', 1), - // while ISO 8601 requires fractions to be prefixed with `.` or `,` - // we can be just safely rely on using `sss` since we currently don't support single or two digit fractions - sss: dateGetter('Milliseconds', 3), - EEEE: dateStrGetter('Day'), - EEE: dateStrGetter('Day', true), - a: ampmGetter, - Z: timeZoneGetter, - ww: weekGetter(2), - w: weekGetter(1) -}; - -var DATE_FORMATS_SPLIT = /((?:[^yMdHhmsaZEw']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z|w+))(.*)/, - NUMBER_STRING = /^\-?\d+$/; - -/** - * @ngdoc filter - * @name date - * @kind function - * - * @description - * Formats `date` to a string based on the requested `format`. - * - * `format` string can be composed of the following elements: - * - * * `'yyyy'`: 4 digit representation of year (e.g. AD 1 => 0001, AD 2010 => 2010) - * * `'yy'`: 2 digit representation of year, padded (00-99). (e.g. AD 2001 => 01, AD 2010 => 10) - * * `'y'`: 1 digit representation of year, e.g. (AD 1 => 1, AD 199 => 199) - * * `'MMMM'`: Month in year (January-December) - * * `'MMM'`: Month in year (Jan-Dec) - * * `'MM'`: Month in year, padded (01-12) - * * `'M'`: Month in year (1-12) - * * `'dd'`: Day in month, padded (01-31) - * * `'d'`: Day in month (1-31) - * * `'EEEE'`: Day in Week,(Sunday-Saturday) - * * `'EEE'`: Day in Week, (Sun-Sat) - * * `'HH'`: Hour in day, padded (00-23) - * * `'H'`: Hour in day (0-23) - * * `'hh'`: Hour in AM/PM, padded (01-12) - * * `'h'`: Hour in AM/PM, (1-12) - * * `'mm'`: Minute in hour, padded (00-59) - * * `'m'`: Minute in hour (0-59) - * * `'ss'`: Second in minute, padded (00-59) - * * `'s'`: Second in minute (0-59) - * * `'sss'`: Millisecond in second, padded (000-999) - * * `'a'`: AM/PM marker - * * `'Z'`: 4 digit (+sign) representation of the timezone offset (-1200-+1200) - * * `'ww'`: Week of year, padded (00-53). Week 01 is the week with the first Thursday of the year - * * `'w'`: Week of year (0-53). Week 1 is the week with the first Thursday of the year - * - * `format` string can also be one of the following predefined - * {@link guide/i18n localizable formats}: - * - * * `'medium'`: equivalent to `'MMM d, y h:mm:ss a'` for en_US locale - * (e.g. Sep 3, 2010 12:05:08 PM) - * * `'short'`: equivalent to `'M/d/yy h:mm a'` for en_US locale (e.g. 9/3/10 12:05 PM) - * * `'fullDate'`: equivalent to `'EEEE, MMMM d, y'` for en_US locale - * (e.g. Friday, September 3, 2010) - * * `'longDate'`: equivalent to `'MMMM d, y'` for en_US locale (e.g. September 3, 2010) - * * `'mediumDate'`: equivalent to `'MMM d, y'` for en_US locale (e.g. Sep 3, 2010) - * * `'shortDate'`: equivalent to `'M/d/yy'` for en_US locale (e.g. 9/3/10) - * * `'mediumTime'`: equivalent to `'h:mm:ss a'` for en_US locale (e.g. 12:05:08 PM) - * * `'shortTime'`: equivalent to `'h:mm a'` for en_US locale (e.g. 12:05 PM) - * - * `format` string can contain literal values. These need to be escaped by surrounding with single quotes (e.g. - * `"h 'in the morning'"`). In order to output a single quote, escape it - i.e., two single quotes in a sequence - * (e.g. `"h 'o''clock'"`). - * - * @param {(Date|number|string)} date Date to format either as Date object, milliseconds (string or - * number) or various ISO 8601 datetime string formats (e.g. yyyy-MM-ddTHH:mm:ss.sssZ and its - * shorter versions like yyyy-MM-ddTHH:mmZ, yyyy-MM-dd or yyyyMMddTHHmmssZ). If no timezone is - * specified in the string input, the time is considered to be in the local timezone. - * @param {string=} format Formatting rules (see Description). If not specified, - * `mediumDate` is used. - * @param {string=} timezone Timezone to be used for formatting. Right now, only `'UTC'` is supported. - * If not specified, the timezone of the browser will be used. - * @returns {string} Formatted string or the input if input is not recognized as date/millis. - * - * @example - <example> - <file name="index.html"> - <span ng-non-bindable>{{1288323623006 | date:'medium'}}</span>: - <span>{{1288323623006 | date:'medium'}}</span><br> - <span ng-non-bindable>{{1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'}}</span>: - <span>{{1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'}}</span><br> - <span ng-non-bindable>{{1288323623006 | date:'MM/dd/yyyy @ h:mma'}}</span>: - <span>{{'1288323623006' | date:'MM/dd/yyyy @ h:mma'}}</span><br> - <span ng-non-bindable>{{1288323623006 | date:"MM/dd/yyyy 'at' h:mma"}}</span>: - <span>{{'1288323623006' | date:"MM/dd/yyyy 'at' h:mma"}}</span><br> - </file> - <file name="protractor.js" type="protractor"> - it('should format date', function() { - expect(element(by.binding("1288323623006 | date:'medium'")).getText()). - toMatch(/Oct 2\d, 2010 \d{1,2}:\d{2}:\d{2} (AM|PM)/); - expect(element(by.binding("1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'")).getText()). - toMatch(/2010\-10\-2\d \d{2}:\d{2}:\d{2} (\-|\+)?\d{4}/); - expect(element(by.binding("'1288323623006' | date:'MM/dd/yyyy @ h:mma'")).getText()). - toMatch(/10\/2\d\/2010 @ \d{1,2}:\d{2}(AM|PM)/); - expect(element(by.binding("'1288323623006' | date:\"MM/dd/yyyy 'at' h:mma\"")).getText()). - toMatch(/10\/2\d\/2010 at \d{1,2}:\d{2}(AM|PM)/); - }); - </file> - </example> - */ -dateFilter.$inject = ['$locale']; -function dateFilter($locale) { - - - var R_ISO8601_STR = /^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/; - // 1 2 3 4 5 6 7 8 9 10 11 - function jsonStringToDate(string) { - var match; - if (match = string.match(R_ISO8601_STR)) { - var date = new Date(0), - tzHour = 0, - tzMin = 0, - dateSetter = match[8] ? date.setUTCFullYear : date.setFullYear, - timeSetter = match[8] ? date.setUTCHours : date.setHours; - - if (match[9]) { - tzHour = int(match[9] + match[10]); - tzMin = int(match[9] + match[11]); - } - dateSetter.call(date, int(match[1]), int(match[2]) - 1, int(match[3])); - var h = int(match[4] || 0) - tzHour; - var m = int(match[5] || 0) - tzMin; - var s = int(match[6] || 0); - var ms = Math.round(parseFloat('0.' + (match[7] || 0)) * 1000); - timeSetter.call(date, h, m, s, ms); - return date; - } - return string; - } - - - return function(date, format, timezone) { - var text = '', - parts = [], - fn, match; - - format = format || 'mediumDate'; - format = $locale.DATETIME_FORMATS[format] || format; - if (isString(date)) { - date = NUMBER_STRING.test(date) ? int(date) : jsonStringToDate(date); - } - - if (isNumber(date)) { - date = new Date(date); - } - - if (!isDate(date)) { - return date; - } - - while (format) { - match = DATE_FORMATS_SPLIT.exec(format); - if (match) { - parts = concat(parts, match, 1); - format = parts.pop(); - } else { - parts.push(format); - format = null; - } - } - - if (timezone && timezone === 'UTC') { - date = new Date(date.getTime()); - date.setMinutes(date.getMinutes() + date.getTimezoneOffset()); - } - forEach(parts, function(value) { - fn = DATE_FORMATS[value]; - text += fn ? fn(date, $locale.DATETIME_FORMATS) - : value.replace(/(^'|'$)/g, '').replace(/''/g, "'"); - }); - - return text; - }; -} - - -/** - * @ngdoc filter - * @name json - * @kind function - * - * @description - * Allows you to convert a JavaScript object into JSON string. - * - * This filter is mostly useful for debugging. When using the double curly {{value}} notation - * the binding is automatically converted to JSON. - * - * @param {*} object Any JavaScript object (including arrays and primitive types) to filter. - * @param {number=} spacing The number of spaces to use per indentation, defaults to 2. - * @returns {string} JSON string. - * - * - * @example - <example> - <file name="index.html"> - <pre id="default-spacing">{{ {'name':'value'} | json }}</pre> - <pre id="custom-spacing">{{ {'name':'value'} | json:4 }}</pre> - </file> - <file name="protractor.js" type="protractor"> - it('should jsonify filtered objects', function() { - expect(element(by.id('default-spacing')).getText()).toMatch(/\{\n "name": ?"value"\n}/); - expect(element(by.id('custom-spacing')).getText()).toMatch(/\{\n "name": ?"value"\n}/); - }); - </file> - </example> - * - */ -function jsonFilter() { - return function(object, spacing) { - if (isUndefined(spacing)) { - spacing = 2; - } - return toJson(object, spacing); - }; -} - - -/** - * @ngdoc filter - * @name lowercase - * @kind function - * @description - * Converts string to lowercase. - * @see angular.lowercase - */ -var lowercaseFilter = valueFn(lowercase); - - -/** - * @ngdoc filter - * @name uppercase - * @kind function - * @description - * Converts string to uppercase. - * @see angular.uppercase - */ -var uppercaseFilter = valueFn(uppercase); - -/** - * @ngdoc filter - * @name limitTo - * @kind function - * - * @description - * Creates a new array or string containing only a specified number of elements. The elements - * are taken from either the beginning or the end of the source array, string or number, as specified by - * the value and sign (positive or negative) of `limit`. If a number is used as input, it is - * converted to a string. - * - * @param {Array|string|number} input Source array, string or number to be limited. - * @param {string|number} limit The length of the returned array or string. If the `limit` number - * is positive, `limit` number of items from the beginning of the source array/string are copied. - * If the number is negative, `limit` number of items from the end of the source array/string - * are copied. The `limit` will be trimmed if it exceeds `array.length` - * @returns {Array|string} A new sub-array or substring of length `limit` or less if input array - * had less than `limit` elements. - * - * @example - <example module="limitToExample"> - <file name="index.html"> - <script> - angular.module('limitToExample', []) - .controller('ExampleController', ['$scope', function($scope) { - $scope.numbers = [1,2,3,4,5,6,7,8,9]; - $scope.letters = "abcdefghi"; - $scope.longNumber = 2345432342; - $scope.numLimit = 3; - $scope.letterLimit = 3; - $scope.longNumberLimit = 3; - }]); - </script> - <div ng-controller="ExampleController"> - Limit {{numbers}} to: <input type="number" step="1" ng-model="numLimit"> - <p>Output numbers: {{ numbers | limitTo:numLimit }}</p> - Limit {{letters}} to: <input type="number" step="1" ng-model="letterLimit"> - <p>Output letters: {{ letters | limitTo:letterLimit }}</p> - Limit {{longNumber}} to: <input type="number" step="1" ng-model="longNumberLimit"> - <p>Output long number: {{ longNumber | limitTo:longNumberLimit }}</p> - </div> - </file> - <file name="protractor.js" type="protractor"> - var numLimitInput = element(by.model('numLimit')); - var letterLimitInput = element(by.model('letterLimit')); - var longNumberLimitInput = element(by.model('longNumberLimit')); - var limitedNumbers = element(by.binding('numbers | limitTo:numLimit')); - var limitedLetters = element(by.binding('letters | limitTo:letterLimit')); - var limitedLongNumber = element(by.binding('longNumber | limitTo:longNumberLimit')); - - it('should limit the number array to first three items', function() { - expect(numLimitInput.getAttribute('value')).toBe('3'); - expect(letterLimitInput.getAttribute('value')).toBe('3'); - expect(longNumberLimitInput.getAttribute('value')).toBe('3'); - expect(limitedNumbers.getText()).toEqual('Output numbers: [1,2,3]'); - expect(limitedLetters.getText()).toEqual('Output letters: abc'); - expect(limitedLongNumber.getText()).toEqual('Output long number: 234'); - }); - - // There is a bug in safari and protractor that doesn't like the minus key - // it('should update the output when -3 is entered', function() { - // numLimitInput.clear(); - // numLimitInput.sendKeys('-3'); - // letterLimitInput.clear(); - // letterLimitInput.sendKeys('-3'); - // longNumberLimitInput.clear(); - // longNumberLimitInput.sendKeys('-3'); - // expect(limitedNumbers.getText()).toEqual('Output numbers: [7,8,9]'); - // expect(limitedLetters.getText()).toEqual('Output letters: ghi'); - // expect(limitedLongNumber.getText()).toEqual('Output long number: 342'); - // }); - - it('should not exceed the maximum size of input array', function() { - numLimitInput.clear(); - numLimitInput.sendKeys('100'); - letterLimitInput.clear(); - letterLimitInput.sendKeys('100'); - longNumberLimitInput.clear(); - longNumberLimitInput.sendKeys('100'); - expect(limitedNumbers.getText()).toEqual('Output numbers: [1,2,3,4,5,6,7,8,9]'); - expect(limitedLetters.getText()).toEqual('Output letters: abcdefghi'); - expect(limitedLongNumber.getText()).toEqual('Output long number: 2345432342'); - }); - </file> - </example> -*/ -function limitToFilter() { - return function(input, limit) { - if (isNumber(input)) input = input.toString(); - if (!isArray(input) && !isString(input)) return input; - - if (Math.abs(Number(limit)) === Infinity) { - limit = Number(limit); - } else { - limit = int(limit); - } - - //NaN check on limit - if (limit) { - return limit > 0 ? input.slice(0, limit) : input.slice(limit); - } else { - return isString(input) ? "" : []; - } - }; -} - -/** - * @ngdoc filter - * @name orderBy - * @kind function - * - * @description - * Orders a specified `array` by the `expression` predicate. It is ordered alphabetically - * for strings and numerically for numbers. Note: if you notice numbers are not being sorted - * correctly, make sure they are actually being saved as numbers and not strings. - * - * @param {Array} array The array to sort. - * @param {function(*)|string|Array.<(function(*)|string)>=} expression A predicate to be - * used by the comparator to determine the order of elements. - * - * Can be one of: - * - * - `function`: Getter function. The result of this function will be sorted using the - * `<`, `=`, `>` operator. - * - `string`: An Angular expression. The result of this expression is used to compare elements - * (for example `name` to sort by a property called `name` or `name.substr(0, 3)` to sort by - * 3 first characters of a property called `name`). The result of a constant expression - * is interpreted as a property name to be used in comparisons (for example `"special name"` - * to sort object by the value of their `special name` property). An expression can be - * optionally prefixed with `+` or `-` to control ascending or descending sort order - * (for example, `+name` or `-name`). If no property is provided, (e.g. `'+'`) then the array - * element itself is used to compare where sorting. - * - `Array`: An array of function or string predicates. The first predicate in the array - * is used for sorting, but when two items are equivalent, the next predicate is used. - * - * If the predicate is missing or empty then it defaults to `'+'`. - * - * @param {boolean=} reverse Reverse the order of the array. - * @returns {Array} Sorted copy of the source array. - * - * @example - <example module="orderByExample"> - <file name="index.html"> - <script> - angular.module('orderByExample', []) - .controller('ExampleController', ['$scope', function($scope) { - $scope.friends = - [{name:'John', phone:'555-1212', age:10}, - {name:'Mary', phone:'555-9876', age:19}, - {name:'Mike', phone:'555-4321', age:21}, - {name:'Adam', phone:'555-5678', age:35}, - {name:'Julie', phone:'555-8765', age:29}]; - $scope.predicate = '-age'; - }]); - </script> - <div ng-controller="ExampleController"> - <pre>Sorting predicate = {{predicate}}; reverse = {{reverse}}</pre> - <hr/> - [ <a href="" ng-click="predicate=''">unsorted</a> ] - <table class="friend"> - <tr> - <th><a href="" ng-click="predicate = 'name'; reverse=false">Name</a> - (<a href="" ng-click="predicate = '-name'; reverse=false">^</a>)</th> - <th><a href="" ng-click="predicate = 'phone'; reverse=!reverse">Phone Number</a></th> - <th><a href="" ng-click="predicate = 'age'; reverse=!reverse">Age</a></th> - </tr> - <tr ng-repeat="friend in friends | orderBy:predicate:reverse"> - <td>{{friend.name}}</td> - <td>{{friend.phone}}</td> - <td>{{friend.age}}</td> - </tr> - </table> - </div> - </file> - </example> - * - * It's also possible to call the orderBy filter manually, by injecting `$filter`, retrieving the - * filter routine with `$filter('orderBy')`, and calling the returned filter routine with the - * desired parameters. - * - * Example: - * - * @example - <example module="orderByExample"> - <file name="index.html"> - <div ng-controller="ExampleController"> - <table class="friend"> - <tr> - <th><a href="" ng-click="reverse=false;order('name', false)">Name</a> - (<a href="" ng-click="order('-name',false)">^</a>)</th> - <th><a href="" ng-click="reverse=!reverse;order('phone', reverse)">Phone Number</a></th> - <th><a href="" ng-click="reverse=!reverse;order('age',reverse)">Age</a></th> - </tr> - <tr ng-repeat="friend in friends"> - <td>{{friend.name}}</td> - <td>{{friend.phone}}</td> - <td>{{friend.age}}</td> - </tr> - </table> - </div> - </file> - - <file name="script.js"> - angular.module('orderByExample', []) - .controller('ExampleController', ['$scope', '$filter', function($scope, $filter) { - var orderBy = $filter('orderBy'); - $scope.friends = [ - { name: 'John', phone: '555-1212', age: 10 }, - { name: 'Mary', phone: '555-9876', age: 19 }, - { name: 'Mike', phone: '555-4321', age: 21 }, - { name: 'Adam', phone: '555-5678', age: 35 }, - { name: 'Julie', phone: '555-8765', age: 29 } - ]; - $scope.order = function(predicate, reverse) { - $scope.friends = orderBy($scope.friends, predicate, reverse); - }; - $scope.order('-age',false); - }]); - </file> -</example> - */ -orderByFilter.$inject = ['$parse']; -function orderByFilter($parse) { - return function(array, sortPredicate, reverseOrder) { - if (!(isArrayLike(array))) return array; - sortPredicate = isArray(sortPredicate) ? sortPredicate : [sortPredicate]; - if (sortPredicate.length === 0) { sortPredicate = ['+']; } - sortPredicate = sortPredicate.map(function(predicate) { - var descending = false, get = predicate || identity; - if (isString(predicate)) { - if ((predicate.charAt(0) == '+' || predicate.charAt(0) == '-')) { - descending = predicate.charAt(0) == '-'; - predicate = predicate.substring(1); - } - if (predicate === '') { - // Effectively no predicate was passed so we compare identity - return reverseComparator(compare, descending); - } - get = $parse(predicate); - if (get.constant) { - var key = get(); - return reverseComparator(function(a, b) { - return compare(a[key], b[key]); - }, descending); - } - } - return reverseComparator(function(a, b) { - return compare(get(a),get(b)); - }, descending); - }); - return slice.call(array).sort(reverseComparator(comparator, reverseOrder)); - - function comparator(o1, o2) { - for (var i = 0; i < sortPredicate.length; i++) { - var comp = sortPredicate[i](o1, o2); - if (comp !== 0) return comp; - } - return 0; - } - function reverseComparator(comp, descending) { - return descending - ? function(a, b) {return comp(b,a);} - : comp; - } - - function isPrimitive(value) { - switch (typeof value) { - case 'number': /* falls through */ - case 'boolean': /* falls through */ - case 'string': - return true; - default: - return false; - } - } - - function objectToString(value) { - if (value === null) return 'null'; - if (typeof value.valueOf === 'function') { - value = value.valueOf(); - if (isPrimitive(value)) return value; - } - if (typeof value.toString === 'function') { - value = value.toString(); - if (isPrimitive(value)) return value; - } - return ''; - } - - function compare(v1, v2) { - var t1 = typeof v1; - var t2 = typeof v2; - if (t1 === t2 && t1 === "object") { - v1 = objectToString(v1); - v2 = objectToString(v2); - } - if (t1 === t2) { - if (t1 === "string") { - v1 = v1.toLowerCase(); - v2 = v2.toLowerCase(); - } - if (v1 === v2) return 0; - return v1 < v2 ? -1 : 1; - } else { - return t1 < t2 ? -1 : 1; - } - } - }; -} - -function ngDirective(directive) { - if (isFunction(directive)) { - directive = { - link: directive - }; - } - directive.restrict = directive.restrict || 'AC'; - return valueFn(directive); -} - -/** - * @ngdoc directive - * @name a - * @restrict E - * - * @description - * Modifies the default behavior of the html A tag so that the default action is prevented when - * the href attribute is empty. - * - * This change permits the easy creation of action links with the `ngClick` directive - * without changing the location or causing page reloads, e.g.: - * `<a href="" ng-click="list.addItem()">Add Item</a>` - */ -var htmlAnchorDirective = valueFn({ - restrict: 'E', - compile: function(element, attr) { - if (!attr.href && !attr.xlinkHref && !attr.name) { - return function(scope, element) { - // If the linked element is not an anchor tag anymore, do nothing - if (element[0].nodeName.toLowerCase() !== 'a') return; - - // SVGAElement does not use the href attribute, but rather the 'xlinkHref' attribute. - var href = toString.call(element.prop('href')) === '[object SVGAnimatedString]' ? - 'xlink:href' : 'href'; - element.on('click', function(event) { - // if we have no href url, then don't navigate anywhere. - if (!element.attr(href)) { - event.preventDefault(); - } - }); - }; - } - } -}); - -/** - * @ngdoc directive - * @name ngHref - * @restrict A - * @priority 99 - * - * @description - * Using Angular markup like `{{hash}}` in an href attribute will - * make the link go to the wrong URL if the user clicks it before - * Angular has a chance to replace the `{{hash}}` markup with its - * value. Until Angular replaces the markup the link will be broken - * and will most likely return a 404 error. The `ngHref` directive - * solves this problem. - * - * The wrong way to write it: - * ```html - * <a href="http://www.gravatar.com/avatar/{{hash}}">link1</a> - * ``` - * - * The correct way to write it: - * ```html - * <a ng-href="http://www.gravatar.com/avatar/{{hash}}">link1</a> - * ``` - * - * @element A - * @param {template} ngHref any string which can contain `{{}}` markup. - * - * @example - * This example shows various combinations of `href`, `ng-href` and `ng-click` attributes - * in links and their different behaviors: - <example> - <file name="index.html"> - <input ng-model="value" /><br /> - <a id="link-1" href ng-click="value = 1">link 1</a> (link, don't reload)<br /> - <a id="link-2" href="" ng-click="value = 2">link 2</a> (link, don't reload)<br /> - <a id="link-3" ng-href="/{{'123'}}">link 3</a> (link, reload!)<br /> - <a id="link-4" href="" name="xx" ng-click="value = 4">anchor</a> (link, don't reload)<br /> - <a id="link-5" name="xxx" ng-click="value = 5">anchor</a> (no link)<br /> - <a id="link-6" ng-href="{{value}}">link</a> (link, change location) - </file> - <file name="protractor.js" type="protractor"> - it('should execute ng-click but not reload when href without value', function() { - element(by.id('link-1')).click(); - expect(element(by.model('value')).getAttribute('value')).toEqual('1'); - expect(element(by.id('link-1')).getAttribute('href')).toBe(''); - }); - - it('should execute ng-click but not reload when href empty string', function() { - element(by.id('link-2')).click(); - expect(element(by.model('value')).getAttribute('value')).toEqual('2'); - expect(element(by.id('link-2')).getAttribute('href')).toBe(''); - }); - - it('should execute ng-click and change url when ng-href specified', function() { - expect(element(by.id('link-3')).getAttribute('href')).toMatch(/\/123$/); - - element(by.id('link-3')).click(); - - // At this point, we navigate away from an Angular page, so we need - // to use browser.driver to get the base webdriver. - - browser.wait(function() { - return browser.driver.getCurrentUrl().then(function(url) { - return url.match(/\/123$/); - }); - }, 5000, 'page should navigate to /123'); - }); - - xit('should execute ng-click but not reload when href empty string and name specified', function() { - element(by.id('link-4')).click(); - expect(element(by.model('value')).getAttribute('value')).toEqual('4'); - expect(element(by.id('link-4')).getAttribute('href')).toBe(''); - }); - - it('should execute ng-click but not reload when no href but name specified', function() { - element(by.id('link-5')).click(); - expect(element(by.model('value')).getAttribute('value')).toEqual('5'); - expect(element(by.id('link-5')).getAttribute('href')).toBe(null); - }); - - it('should only change url when only ng-href', function() { - element(by.model('value')).clear(); - element(by.model('value')).sendKeys('6'); - expect(element(by.id('link-6')).getAttribute('href')).toMatch(/\/6$/); - - element(by.id('link-6')).click(); - - // At this point, we navigate away from an Angular page, so we need - // to use browser.driver to get the base webdriver. - browser.wait(function() { - return browser.driver.getCurrentUrl().then(function(url) { - return url.match(/\/6$/); - }); - }, 5000, 'page should navigate to /6'); - }); - </file> - </example> - */ - -/** - * @ngdoc directive - * @name ngSrc - * @restrict A - * @priority 99 - * - * @description - * Using Angular markup like `{{hash}}` in a `src` attribute doesn't - * work right: The browser will fetch from the URL with the literal - * text `{{hash}}` until Angular replaces the expression inside - * `{{hash}}`. The `ngSrc` directive solves this problem. - * - * The buggy way to write it: - * ```html - * <img src="http://www.gravatar.com/avatar/{{hash}}"/> - * ``` - * - * The correct way to write it: - * ```html - * <img ng-src="http://www.gravatar.com/avatar/{{hash}}"/> - * ``` - * - * @element IMG - * @param {template} ngSrc any string which can contain `{{}}` markup. - */ - -/** - * @ngdoc directive - * @name ngSrcset - * @restrict A - * @priority 99 - * - * @description - * Using Angular markup like `{{hash}}` in a `srcset` attribute doesn't - * work right: The browser will fetch from the URL with the literal - * text `{{hash}}` until Angular replaces the expression inside - * `{{hash}}`. The `ngSrcset` directive solves this problem. - * - * The buggy way to write it: - * ```html - * <img srcset="http://www.gravatar.com/avatar/{{hash}} 2x"/> - * ``` - * - * The correct way to write it: - * ```html - * <img ng-srcset="http://www.gravatar.com/avatar/{{hash}} 2x"/> - * ``` - * - * @element IMG - * @param {template} ngSrcset any string which can contain `{{}}` markup. - */ - -/** - * @ngdoc directive - * @name ngDisabled - * @restrict A - * @priority 100 - * - * @description - * - * We shouldn't do this, because it will make the button enabled on Chrome/Firefox but not on IE8 and older IEs: - * ```html - * <div ng-init="scope = { isDisabled: false }"> - * <button disabled="{{scope.isDisabled}}">Disabled</button> - * </div> - * ``` - * - * The HTML specification does not require browsers to preserve the values of boolean attributes - * such as disabled. (Their presence means true and their absence means false.) - * If we put an Angular interpolation expression into such an attribute then the - * binding information would be lost when the browser removes the attribute. - * The `ngDisabled` directive solves this problem for the `disabled` attribute. - * This complementary directive is not removed by the browser and so provides - * a permanent reliable place to store the binding information. - * - * @example - <example> - <file name="index.html"> - Click me to toggle: <input type="checkbox" ng-model="checked"><br/> - <button ng-model="button" ng-disabled="checked">Button</button> - </file> - <file name="protractor.js" type="protractor"> - it('should toggle button', function() { - expect(element(by.css('button')).getAttribute('disabled')).toBeFalsy(); - element(by.model('checked')).click(); - expect(element(by.css('button')).getAttribute('disabled')).toBeTruthy(); - }); - </file> - </example> - * - * @element INPUT - * @param {expression} ngDisabled If the {@link guide/expression expression} is truthy, - * then special attribute "disabled" will be set on the element - */ - - -/** - * @ngdoc directive - * @name ngChecked - * @restrict A - * @priority 100 - * - * @description - * The HTML specification does not require browsers to preserve the values of boolean attributes - * such as checked. (Their presence means true and their absence means false.) - * If we put an Angular interpolation expression into such an attribute then the - * binding information would be lost when the browser removes the attribute. - * The `ngChecked` directive solves this problem for the `checked` attribute. - * This complementary directive is not removed by the browser and so provides - * a permanent reliable place to store the binding information. - * @example - <example> - <file name="index.html"> - Check me to check both: <input type="checkbox" ng-model="master"><br/> - <input id="checkSlave" type="checkbox" ng-checked="master"> - </file> - <file name="protractor.js" type="protractor"> - it('should check both checkBoxes', function() { - expect(element(by.id('checkSlave')).getAttribute('checked')).toBeFalsy(); - element(by.model('master')).click(); - expect(element(by.id('checkSlave')).getAttribute('checked')).toBeTruthy(); - }); - </file> - </example> - * - * @element INPUT - * @param {expression} ngChecked If the {@link guide/expression expression} is truthy, - * then special attribute "checked" will be set on the element - */ - - -/** - * @ngdoc directive - * @name ngReadonly - * @restrict A - * @priority 100 - * - * @description - * The HTML specification does not require browsers to preserve the values of boolean attributes - * such as readonly. (Their presence means true and their absence means false.) - * If we put an Angular interpolation expression into such an attribute then the - * binding information would be lost when the browser removes the attribute. - * The `ngReadonly` directive solves this problem for the `readonly` attribute. - * This complementary directive is not removed by the browser and so provides - * a permanent reliable place to store the binding information. - * @example - <example> - <file name="index.html"> - Check me to make text readonly: <input type="checkbox" ng-model="checked"><br/> - <input type="text" ng-readonly="checked" value="I'm Angular"/> - </file> - <file name="protractor.js" type="protractor"> - it('should toggle readonly attr', function() { - expect(element(by.css('[type="text"]')).getAttribute('readonly')).toBeFalsy(); - element(by.model('checked')).click(); - expect(element(by.css('[type="text"]')).getAttribute('readonly')).toBeTruthy(); - }); - </file> - </example> - * - * @element INPUT - * @param {expression} ngReadonly If the {@link guide/expression expression} is truthy, - * then special attribute "readonly" will be set on the element - */ - - -/** - * @ngdoc directive - * @name ngSelected - * @restrict A - * @priority 100 - * - * @description - * The HTML specification does not require browsers to preserve the values of boolean attributes - * such as selected. (Their presence means true and their absence means false.) - * If we put an Angular interpolation expression into such an attribute then the - * binding information would be lost when the browser removes the attribute. - * The `ngSelected` directive solves this problem for the `selected` attribute. - * This complementary directive is not removed by the browser and so provides - * a permanent reliable place to store the binding information. - * - * @example - <example> - <file name="index.html"> - Check me to select: <input type="checkbox" ng-model="selected"><br/> - <select> - <option>Hello!</option> - <option id="greet" ng-selected="selected">Greetings!</option> - </select> - </file> - <file name="protractor.js" type="protractor"> - it('should select Greetings!', function() { - expect(element(by.id('greet')).getAttribute('selected')).toBeFalsy(); - element(by.model('selected')).click(); - expect(element(by.id('greet')).getAttribute('selected')).toBeTruthy(); - }); - </file> - </example> - * - * @element OPTION - * @param {expression} ngSelected If the {@link guide/expression expression} is truthy, - * then special attribute "selected" will be set on the element - */ - -/** - * @ngdoc directive - * @name ngOpen - * @restrict A - * @priority 100 - * - * @description - * The HTML specification does not require browsers to preserve the values of boolean attributes - * such as open. (Their presence means true and their absence means false.) - * If we put an Angular interpolation expression into such an attribute then the - * binding information would be lost when the browser removes the attribute. - * The `ngOpen` directive solves this problem for the `open` attribute. - * This complementary directive is not removed by the browser and so provides - * a permanent reliable place to store the binding information. - * @example - <example> - <file name="index.html"> - Check me check multiple: <input type="checkbox" ng-model="open"><br/> - <details id="details" ng-open="open"> - <summary>Show/Hide me</summary> - </details> - </file> - <file name="protractor.js" type="protractor"> - it('should toggle open', function() { - expect(element(by.id('details')).getAttribute('open')).toBeFalsy(); - element(by.model('open')).click(); - expect(element(by.id('details')).getAttribute('open')).toBeTruthy(); - }); - </file> - </example> - * - * @element DETAILS - * @param {expression} ngOpen If the {@link guide/expression expression} is truthy, - * then special attribute "open" will be set on the element - */ - -var ngAttributeAliasDirectives = {}; - - -// boolean attrs are evaluated -forEach(BOOLEAN_ATTR, function(propName, attrName) { - // binding to multiple is not supported - if (propName == "multiple") return; - - var normalized = directiveNormalize('ng-' + attrName); - ngAttributeAliasDirectives[normalized] = function() { - return { - restrict: 'A', - priority: 100, - link: function(scope, element, attr) { - scope.$watch(attr[normalized], function ngBooleanAttrWatchAction(value) { - attr.$set(attrName, !!value); - }); - } - }; - }; -}); - -// aliased input attrs are evaluated -forEach(ALIASED_ATTR, function(htmlAttr, ngAttr) { - ngAttributeAliasDirectives[ngAttr] = function() { - return { - priority: 100, - link: function(scope, element, attr) { - //special case ngPattern when a literal regular expression value - //is used as the expression (this way we don't have to watch anything). - if (ngAttr === "ngPattern" && attr.ngPattern.charAt(0) == "/") { - var match = attr.ngPattern.match(REGEX_STRING_REGEXP); - if (match) { - attr.$set("ngPattern", new RegExp(match[1], match[2])); - return; - } - } - - scope.$watch(attr[ngAttr], function ngAttrAliasWatchAction(value) { - attr.$set(ngAttr, value); - }); - } - }; - }; -}); - -// ng-src, ng-srcset, ng-href are interpolated -forEach(['src', 'srcset', 'href'], function(attrName) { - var normalized = directiveNormalize('ng-' + attrName); - ngAttributeAliasDirectives[normalized] = function() { - return { - priority: 99, // it needs to run after the attributes are interpolated - link: function(scope, element, attr) { - var propName = attrName, - name = attrName; - - if (attrName === 'href' && - toString.call(element.prop('href')) === '[object SVGAnimatedString]') { - name = 'xlinkHref'; - attr.$attr[name] = 'xlink:href'; - propName = null; - } - - attr.$observe(normalized, function(value) { - if (!value) { - if (attrName === 'href') { - attr.$set(name, null); - } - return; - } - - attr.$set(name, value); - - // on IE, if "ng:src" directive declaration is used and "src" attribute doesn't exist - // then calling element.setAttribute('src', 'foo') doesn't do anything, so we need - // to set the property as well to achieve the desired effect. - // we use attr[attrName] value since $set can sanitize the url. - if (msie && propName) element.prop(propName, attr[name]); - }); - } - }; - }; -}); - -/* global -nullFormCtrl, -SUBMITTED_CLASS, addSetValidityMethod: true - */ -var nullFormCtrl = { - $addControl: noop, - $$renameControl: nullFormRenameControl, - $removeControl: noop, - $setValidity: noop, - $setDirty: noop, - $setPristine: noop, - $setSubmitted: noop -}, -SUBMITTED_CLASS = 'ng-submitted'; - -function nullFormRenameControl(control, name) { - control.$name = name; -} - -/** - * @ngdoc type - * @name form.FormController - * - * @property {boolean} $pristine True if user has not interacted with the form yet. - * @property {boolean} $dirty True if user has already interacted with the form. - * @property {boolean} $valid True if all of the containing forms and controls are valid. - * @property {boolean} $invalid True if at least one containing control or form is invalid. - * @property {boolean} $submitted True if user has submitted the form even if its invalid. - * - * @property {Object} $error Is an object hash, containing references to controls or - * forms with failing validators, where: - * - * - keys are validation tokens (error names), - * - values are arrays of controls or forms that have a failing validator for given error name. - * - * Built-in validation tokens: - * - * - `email` - * - `max` - * - `maxlength` - * - `min` - * - `minlength` - * - `number` - * - `pattern` - * - `required` - * - `url` - * - `date` - * - `datetimelocal` - * - `time` - * - `week` - * - `month` - * - * @description - * `FormController` keeps track of all its controls and nested forms as well as the state of them, - * such as being valid/invalid or dirty/pristine. - * - * Each {@link ng.directive:form form} directive creates an instance - * of `FormController`. - * - */ -//asks for $scope to fool the BC controller module -FormController.$inject = ['$element', '$attrs', '$scope', '$animate', '$interpolate']; -function FormController(element, attrs, $scope, $animate, $interpolate) { - var form = this, - controls = []; - - var parentForm = form.$$parentForm = element.parent().controller('form') || nullFormCtrl; - - // init state - form.$error = {}; - form.$$success = {}; - form.$pending = undefined; - form.$name = $interpolate(attrs.name || attrs.ngForm || '')($scope); - form.$dirty = false; - form.$pristine = true; - form.$valid = true; - form.$invalid = false; - form.$submitted = false; - - parentForm.$addControl(form); - - /** - * @ngdoc method - * @name form.FormController#$rollbackViewValue - * - * @description - * Rollback all form controls pending updates to the `$modelValue`. - * - * Updates may be pending by a debounced event or because the input is waiting for a some future - * event defined in `ng-model-options`. This method is typically needed by the reset button of - * a form that uses `ng-model-options` to pend updates. - */ - form.$rollbackViewValue = function() { - forEach(controls, function(control) { - control.$rollbackViewValue(); - }); - }; - - /** - * @ngdoc method - * @name form.FormController#$commitViewValue - * - * @description - * Commit all form controls pending updates to the `$modelValue`. - * - * Updates may be pending by a debounced event or because the input is waiting for a some future - * event defined in `ng-model-options`. This method is rarely needed as `NgModelController` - * usually handles calling this in response to input events. - */ - form.$commitViewValue = function() { - forEach(controls, function(control) { - control.$commitViewValue(); - }); - }; - - /** - * @ngdoc method - * @name form.FormController#$addControl - * - * @description - * Register a control with the form. - * - * Input elements using ngModelController do this automatically when they are linked. - */ - form.$addControl = function(control) { - // Breaking change - before, inputs whose name was "hasOwnProperty" were quietly ignored - // and not added to the scope. Now we throw an error. - assertNotHasOwnProperty(control.$name, 'input'); - controls.push(control); - - if (control.$name) { - form[control.$name] = control; - } - }; - - // Private API: rename a form control - form.$$renameControl = function(control, newName) { - var oldName = control.$name; - - if (form[oldName] === control) { - delete form[oldName]; - } - form[newName] = control; - control.$name = newName; - }; - - /** - * @ngdoc method - * @name form.FormController#$removeControl - * - * @description - * Deregister a control from the form. - * - * Input elements using ngModelController do this automatically when they are destroyed. - */ - form.$removeControl = function(control) { - if (control.$name && form[control.$name] === control) { - delete form[control.$name]; - } - forEach(form.$pending, function(value, name) { - form.$setValidity(name, null, control); - }); - forEach(form.$error, function(value, name) { - form.$setValidity(name, null, control); - }); - forEach(form.$$success, function(value, name) { - form.$setValidity(name, null, control); - }); - - arrayRemove(controls, control); - }; - - - /** - * @ngdoc method - * @name form.FormController#$setValidity - * - * @description - * Sets the validity of a form control. - * - * This method will also propagate to parent forms. - */ - addSetValidityMethod({ - ctrl: this, - $element: element, - set: function(object, property, controller) { - var list = object[property]; - if (!list) { - object[property] = [controller]; - } else { - var index = list.indexOf(controller); - if (index === -1) { - list.push(controller); - } - } - }, - unset: function(object, property, controller) { - var list = object[property]; - if (!list) { - return; - } - arrayRemove(list, controller); - if (list.length === 0) { - delete object[property]; - } - }, - parentForm: parentForm, - $animate: $animate - }); - - /** - * @ngdoc method - * @name form.FormController#$setDirty - * - * @description - * Sets the form to a dirty state. - * - * This method can be called to add the 'ng-dirty' class and set the form to a dirty - * state (ng-dirty class). This method will also propagate to parent forms. - */ - form.$setDirty = function() { - $animate.removeClass(element, PRISTINE_CLASS); - $animate.addClass(element, DIRTY_CLASS); - form.$dirty = true; - form.$pristine = false; - parentForm.$setDirty(); - }; - - /** - * @ngdoc method - * @name form.FormController#$setPristine - * - * @description - * Sets the form to its pristine state. - * - * This method can be called to remove the 'ng-dirty' class and set the form to its pristine - * state (ng-pristine class). This method will also propagate to all the controls contained - * in this form. - * - * Setting a form back to a pristine state is often useful when we want to 'reuse' a form after - * saving or resetting it. - */ - form.$setPristine = function() { - $animate.setClass(element, PRISTINE_CLASS, DIRTY_CLASS + ' ' + SUBMITTED_CLASS); - form.$dirty = false; - form.$pristine = true; - form.$submitted = false; - forEach(controls, function(control) { - control.$setPristine(); - }); - }; - - /** - * @ngdoc method - * @name form.FormController#$setUntouched - * - * @description - * Sets the form to its untouched state. - * - * This method can be called to remove the 'ng-touched' class and set the form controls to their - * untouched state (ng-untouched class). - * - * Setting a form controls back to their untouched state is often useful when setting the form - * back to its pristine state. - */ - form.$setUntouched = function() { - forEach(controls, function(control) { - control.$setUntouched(); - }); - }; - - /** - * @ngdoc method - * @name form.FormController#$setSubmitted - * - * @description - * Sets the form to its submitted state. - */ - form.$setSubmitted = function() { - $animate.addClass(element, SUBMITTED_CLASS); - form.$submitted = true; - parentForm.$setSubmitted(); - }; -} - -/** - * @ngdoc directive - * @name ngForm - * @restrict EAC - * - * @description - * Nestable alias of {@link ng.directive:form `form`} directive. HTML - * does not allow nesting of form elements. It is useful to nest forms, for example if the validity of a - * sub-group of controls needs to be determined. - * - * Note: the purpose of `ngForm` is to group controls, - * but not to be a replacement for the `<form>` tag with all of its capabilities - * (e.g. posting to the server, ...). - * - * @param {string=} ngForm|name Name of the form. If specified, the form controller will be published into - * related scope, under this name. - * - */ - - /** - * @ngdoc directive - * @name form - * @restrict E - * - * @description - * Directive that instantiates - * {@link form.FormController FormController}. - * - * If the `name` attribute is specified, the form controller is published onto the current scope under - * this name. - * - * # Alias: {@link ng.directive:ngForm `ngForm`} - * - * In Angular forms can be nested. This means that the outer form is valid when all of the child - * forms are valid as well. However, browsers do not allow nesting of `<form>` elements, so - * Angular provides the {@link ng.directive:ngForm `ngForm`} directive which behaves identically to - * `<form>` but can be nested. This allows you to have nested forms, which is very useful when - * using Angular validation directives in forms that are dynamically generated using the - * {@link ng.directive:ngRepeat `ngRepeat`} directive. Since you cannot dynamically generate the `name` - * attribute of input elements using interpolation, you have to wrap each set of repeated inputs in an - * `ngForm` directive and nest these in an outer `form` element. - * - * - * # CSS classes - * - `ng-valid` is set if the form is valid. - * - `ng-invalid` is set if the form is invalid. - * - `ng-pristine` is set if the form is pristine. - * - `ng-dirty` is set if the form is dirty. - * - `ng-submitted` is set if the form was submitted. - * - * Keep in mind that ngAnimate can detect each of these classes when added and removed. - * - * - * # Submitting a form and preventing the default action - * - * Since the role of forms in client-side Angular applications is different than in classical - * roundtrip apps, it is desirable for the browser not to translate the form submission into a full - * page reload that sends the data to the server. Instead some javascript logic should be triggered - * to handle the form submission in an application-specific way. - * - * For this reason, Angular prevents the default action (form submission to the server) unless the - * `<form>` element has an `action` attribute specified. - * - * You can use one of the following two ways to specify what javascript method should be called when - * a form is submitted: - * - * - {@link ng.directive:ngSubmit ngSubmit} directive on the form element - * - {@link ng.directive:ngClick ngClick} directive on the first - * button or input field of type submit (input[type=submit]) - * - * To prevent double execution of the handler, use only one of the {@link ng.directive:ngSubmit ngSubmit} - * or {@link ng.directive:ngClick ngClick} directives. - * This is because of the following form submission rules in the HTML specification: - * - * - If a form has only one input field then hitting enter in this field triggers form submit - * (`ngSubmit`) - * - if a form has 2+ input fields and no buttons or input[type=submit] then hitting enter - * doesn't trigger submit - * - if a form has one or more input fields and one or more buttons or input[type=submit] then - * hitting enter in any of the input fields will trigger the click handler on the *first* button or - * input[type=submit] (`ngClick`) *and* a submit handler on the enclosing form (`ngSubmit`) - * - * Any pending `ngModelOptions` changes will take place immediately when an enclosing form is - * submitted. Note that `ngClick` events will occur before the model is updated. Use `ngSubmit` - * to have access to the updated model. - * - * ## Animation Hooks - * - * Animations in ngForm are triggered when any of the associated CSS classes are added and removed. - * These classes are: `.ng-pristine`, `.ng-dirty`, `.ng-invalid` and `.ng-valid` as well as any - * other validations that are performed within the form. Animations in ngForm are similar to how - * they work in ngClass and animations can be hooked into using CSS transitions, keyframes as well - * as JS animations. - * - * The following example shows a simple way to utilize CSS transitions to style a form element - * that has been rendered as invalid after it has been validated: - * - * <pre> - * //be sure to include ngAnimate as a module to hook into more - * //advanced animations - * .my-form { - * transition:0.5s linear all; - * background: white; - * } - * .my-form.ng-invalid { - * background: red; - * color:white; - * } - * </pre> - * - * @example - <example deps="angular-animate.js" animations="true" fixBase="true" module="formExample"> - <file name="index.html"> - <script> - angular.module('formExample', []) - .controller('FormController', ['$scope', function($scope) { - $scope.userType = 'guest'; - }]); - </script> - <style> - .my-form { - -webkit-transition:all linear 0.5s; - transition:all linear 0.5s; - background: transparent; - } - .my-form.ng-invalid { - background: red; - } - </style> - <form name="myForm" ng-controller="FormController" class="my-form"> - userType: <input name="input" ng-model="userType" required> - <span class="error" ng-show="myForm.input.$error.required">Required!</span><br> - <tt>userType = {{userType}}</tt><br> - <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br> - <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br> - <tt>myForm.$valid = {{myForm.$valid}}</tt><br> - <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br> - </form> - </file> - <file name="protractor.js" type="protractor"> - it('should initialize to model', function() { - var userType = element(by.binding('userType')); - var valid = element(by.binding('myForm.input.$valid')); - - expect(userType.getText()).toContain('guest'); - expect(valid.getText()).toContain('true'); - }); - - it('should be invalid if empty', function() { - var userType = element(by.binding('userType')); - var valid = element(by.binding('myForm.input.$valid')); - var userInput = element(by.model('userType')); - - userInput.clear(); - userInput.sendKeys(''); - - expect(userType.getText()).toEqual('userType ='); - expect(valid.getText()).toContain('false'); - }); - </file> - </example> - * - * @param {string=} name Name of the form. If specified, the form controller will be published into - * related scope, under this name. - */ -var formDirectiveFactory = function(isNgForm) { - return ['$timeout', function($timeout) { - var formDirective = { - name: 'form', - restrict: isNgForm ? 'EAC' : 'E', - controller: FormController, - compile: function ngFormCompile(formElement) { - // Setup initial state of the control - formElement.addClass(PRISTINE_CLASS).addClass(VALID_CLASS); - - return { - pre: function ngFormPreLink(scope, formElement, attr, controller) { - // if `action` attr is not present on the form, prevent the default action (submission) - if (!('action' in attr)) { - // we can't use jq events because if a form is destroyed during submission the default - // action is not prevented. see #1238 - // - // IE 9 is not affected because it doesn't fire a submit event and try to do a full - // page reload if the form was destroyed by submission of the form via a click handler - // on a button in the form. Looks like an IE9 specific bug. - var handleFormSubmission = function(event) { - scope.$apply(function() { - controller.$commitViewValue(); - controller.$setSubmitted(); - }); - - event.preventDefault(); - }; - - addEventListenerFn(formElement[0], 'submit', handleFormSubmission); - - // unregister the preventDefault listener so that we don't not leak memory but in a - // way that will achieve the prevention of the default action. - formElement.on('$destroy', function() { - $timeout(function() { - removeEventListenerFn(formElement[0], 'submit', handleFormSubmission); - }, 0, false); - }); - } - - var parentFormCtrl = controller.$$parentForm, - alias = controller.$name; - - if (alias) { - setter(scope, null, alias, controller, alias); - attr.$observe(attr.name ? 'name' : 'ngForm', function(newValue) { - if (alias === newValue) return; - setter(scope, null, alias, undefined, alias); - alias = newValue; - setter(scope, null, alias, controller, alias); - parentFormCtrl.$$renameControl(controller, alias); - }); - } - formElement.on('$destroy', function() { - parentFormCtrl.$removeControl(controller); - if (alias) { - setter(scope, null, alias, undefined, alias); - } - extend(controller, nullFormCtrl); //stop propagating child destruction handlers upwards - }); - } - }; - } - }; - - return formDirective; - }]; -}; - -var formDirective = formDirectiveFactory(); -var ngFormDirective = formDirectiveFactory(true); - -/* global VALID_CLASS: false, - INVALID_CLASS: false, - PRISTINE_CLASS: false, - DIRTY_CLASS: false, - UNTOUCHED_CLASS: false, - TOUCHED_CLASS: false, - $ngModelMinErr: false, -*/ - -// Regex code is obtained from SO: https://stackoverflow.com/questions/3143070/javascript-regex-iso-datetime#answer-3143231 -var ISO_DATE_REGEXP = /\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)/; -var URL_REGEXP = /^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/; -var EMAIL_REGEXP = /^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i; -var NUMBER_REGEXP = /^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/; -var DATE_REGEXP = /^(\d{4})-(\d{2})-(\d{2})$/; -var DATETIMELOCAL_REGEXP = /^(\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/; -var WEEK_REGEXP = /^(\d{4})-W(\d\d)$/; -var MONTH_REGEXP = /^(\d{4})-(\d\d)$/; -var TIME_REGEXP = /^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/; - -var inputType = { - - /** - * @ngdoc input - * @name input[text] - * - * @description - * Standard HTML text input with angular data binding, inherited by most of the `input` elements. - * - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} required Adds `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than - * minlength. - * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than - * maxlength. Setting the attribute to a negative or non-numeric value, allows view values of - * any length. - * @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string - * that contains the regular expression body that will be converted to a regular expression - * as in the ngPattern directive. - * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel value does not match - * a RegExp found by evaluating the Angular expression given in the attribute value. - * If the expression evaluates to a RegExp object then this is used directly. - * If the expression is a string then it will be converted to a RegExp after wrapping it in `^` and `$` - * characters. For instance, `"abc"` will be converted to `new RegExp('^abc$')`. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * @param {boolean=} [ngTrim=true] If set to false Angular will not automatically trim the input. - * This parameter is ignored for input[type=password] controls, which will never trim the - * input. - * - * @example - <example name="text-input-directive" module="textInputExample"> - <file name="index.html"> - <script> - angular.module('textInputExample', []) - .controller('ExampleController', ['$scope', function($scope) { - $scope.example = { - text: 'guest', - word: /^\s*\w*\s*$/ - }; - }]); - </script> - <form name="myForm" ng-controller="ExampleController"> - Single word: <input type="text" name="input" ng-model="example.text" - ng-pattern="example.word" required ng-trim="false"> - <span class="error" ng-show="myForm.input.$error.required"> - Required!</span> - <span class="error" ng-show="myForm.input.$error.pattern"> - Single word only!</span> - - <tt>text = {{example.text}}</tt><br/> - <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/> - <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/> - <tt>myForm.$valid = {{myForm.$valid}}</tt><br/> - <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/> - </form> - </file> - <file name="protractor.js" type="protractor"> - var text = element(by.binding('example.text')); - var valid = element(by.binding('myForm.input.$valid')); - var input = element(by.model('example.text')); - - it('should initialize to model', function() { - expect(text.getText()).toContain('guest'); - expect(valid.getText()).toContain('true'); - }); - - it('should be invalid if empty', function() { - input.clear(); - input.sendKeys(''); - - expect(text.getText()).toEqual('text ='); - expect(valid.getText()).toContain('false'); - }); - - it('should be invalid if multi word', function() { - input.clear(); - input.sendKeys('hello world'); - - expect(valid.getText()).toContain('false'); - }); - </file> - </example> - */ - 'text': textInputType, - - /** - * @ngdoc input - * @name input[date] - * - * @description - * Input with date validation and transformation. In browsers that do not yet support - * the HTML5 date input, a text element will be used. In that case, text must be entered in a valid ISO-8601 - * date format (yyyy-MM-dd), for example: `2009-01-06`. Since many - * modern browsers do not yet support this input type, it is important to provide cues to users on the - * expected input format via a placeholder or label. - * - * The model must always be a Date object, otherwise Angular will throw an error. - * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string. - * - * The timezone to be used to read/write the `Date` instance in the model can be defined using - * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. This must be a - * valid ISO date string (yyyy-MM-dd). - * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. This must be - * a valid ISO date string (yyyy-MM-dd). - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - <example name="date-input-directive" module="dateInputExample"> - <file name="index.html"> - <script> - angular.module('dateInputExample', []) - .controller('DateController', ['$scope', function($scope) { - $scope.example = { - value: new Date(2013, 9, 22) - }; - }]); - </script> - <form name="myForm" ng-controller="DateController as dateCtrl"> - Pick a date in 2013: - <input type="date" id="exampleInput" name="input" ng-model="example.value" - placeholder="yyyy-MM-dd" min="2013-01-01" max="2013-12-31" required /> - <span class="error" ng-show="myForm.input.$error.required"> - Required!</span> - <span class="error" ng-show="myForm.input.$error.date"> - Not a valid date!</span> - <tt>value = {{example.value | date: "yyyy-MM-dd"}}</tt><br/> - <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/> - <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/> - <tt>myForm.$valid = {{myForm.$valid}}</tt><br/> - <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/> - </form> - </file> - <file name="protractor.js" type="protractor"> - var value = element(by.binding('example.value | date: "yyyy-MM-dd"')); - var valid = element(by.binding('myForm.input.$valid')); - var input = element(by.model('example.value')); - - // currently protractor/webdriver does not support - // sending keys to all known HTML5 input controls - // for various browsers (see https://github.com/angular/protractor/issues/562). - function setInput(val) { - // set the value of the element and force validation. - var scr = "var ipt = document.getElementById('exampleInput'); " + - "ipt.value = '" + val + "';" + - "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });"; - browser.executeScript(scr); - } - - it('should initialize to model', function() { - expect(value.getText()).toContain('2013-10-22'); - expect(valid.getText()).toContain('myForm.input.$valid = true'); - }); - - it('should be invalid if empty', function() { - setInput(''); - expect(value.getText()).toEqual('value ='); - expect(valid.getText()).toContain('myForm.input.$valid = false'); - }); - - it('should be invalid if over max', function() { - setInput('2015-01-01'); - expect(value.getText()).toContain(''); - expect(valid.getText()).toContain('myForm.input.$valid = false'); - }); - </file> - </example> - */ - 'date': createDateInputType('date', DATE_REGEXP, - createDateParser(DATE_REGEXP, ['yyyy', 'MM', 'dd']), - 'yyyy-MM-dd'), - - /** - * @ngdoc input - * @name input[datetime-local] - * - * @description - * Input with datetime validation and transformation. In browsers that do not yet support - * the HTML5 date input, a text element will be used. In that case, the text must be entered in a valid ISO-8601 - * local datetime format (yyyy-MM-ddTHH:mm:ss), for example: `2010-12-28T14:57:00`. - * - * The model must always be a Date object, otherwise Angular will throw an error. - * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string. - * - * The timezone to be used to read/write the `Date` instance in the model can be defined using - * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. This must be a - * valid ISO datetime format (yyyy-MM-ddTHH:mm:ss). - * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. This must be - * a valid ISO datetime format (yyyy-MM-ddTHH:mm:ss). - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - <example name="datetimelocal-input-directive" module="dateExample"> - <file name="index.html"> - <script> - angular.module('dateExample', []) - .controller('DateController', ['$scope', function($scope) { - $scope.example = { - value: new Date(2010, 11, 28, 14, 57) - }; - }]); - </script> - <form name="myForm" ng-controller="DateController as dateCtrl"> - Pick a date between in 2013: - <input type="datetime-local" id="exampleInput" name="input" ng-model="example.value" - placeholder="yyyy-MM-ddTHH:mm:ss" min="2001-01-01T00:00:00" max="2013-12-31T00:00:00" required /> - <span class="error" ng-show="myForm.input.$error.required"> - Required!</span> - <span class="error" ng-show="myForm.input.$error.datetimelocal"> - Not a valid date!</span> - <tt>value = {{example.value | date: "yyyy-MM-ddTHH:mm:ss"}}</tt><br/> - <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/> - <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/> - <tt>myForm.$valid = {{myForm.$valid}}</tt><br/> - <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/> - </form> - </file> - <file name="protractor.js" type="protractor"> - var value = element(by.binding('example.value | date: "yyyy-MM-ddTHH:mm:ss"')); - var valid = element(by.binding('myForm.input.$valid')); - var input = element(by.model('example.value')); - - // currently protractor/webdriver does not support - // sending keys to all known HTML5 input controls - // for various browsers (https://github.com/angular/protractor/issues/562). - function setInput(val) { - // set the value of the element and force validation. - var scr = "var ipt = document.getElementById('exampleInput'); " + - "ipt.value = '" + val + "';" + - "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });"; - browser.executeScript(scr); - } - - it('should initialize to model', function() { - expect(value.getText()).toContain('2010-12-28T14:57:00'); - expect(valid.getText()).toContain('myForm.input.$valid = true'); - }); - - it('should be invalid if empty', function() { - setInput(''); - expect(value.getText()).toEqual('value ='); - expect(valid.getText()).toContain('myForm.input.$valid = false'); - }); - - it('should be invalid if over max', function() { - setInput('2015-01-01T23:59:00'); - expect(value.getText()).toContain(''); - expect(valid.getText()).toContain('myForm.input.$valid = false'); - }); - </file> - </example> - */ - 'datetime-local': createDateInputType('datetimelocal', DATETIMELOCAL_REGEXP, - createDateParser(DATETIMELOCAL_REGEXP, ['yyyy', 'MM', 'dd', 'HH', 'mm', 'ss', 'sss']), - 'yyyy-MM-ddTHH:mm:ss.sss'), - - /** - * @ngdoc input - * @name input[time] - * - * @description - * Input with time validation and transformation. In browsers that do not yet support - * the HTML5 date input, a text element will be used. In that case, the text must be entered in a valid ISO-8601 - * local time format (HH:mm:ss), for example: `14:57:00`. Model must be a Date object. This binding will always output a - * Date object to the model of January 1, 1970, or local date `new Date(1970, 0, 1, HH, mm, ss)`. - * - * The model must always be a Date object, otherwise Angular will throw an error. - * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string. - * - * The timezone to be used to read/write the `Date` instance in the model can be defined using - * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. This must be a - * valid ISO time format (HH:mm:ss). - * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. This must be a - * valid ISO time format (HH:mm:ss). - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - <example name="time-input-directive" module="timeExample"> - <file name="index.html"> - <script> - angular.module('timeExample', []) - .controller('DateController', ['$scope', function($scope) { - $scope.example = { - value: new Date(1970, 0, 1, 14, 57, 0) - }; - }]); - </script> - <form name="myForm" ng-controller="DateController as dateCtrl"> - Pick a between 8am and 5pm: - <input type="time" id="exampleInput" name="input" ng-model="example.value" - placeholder="HH:mm:ss" min="08:00:00" max="17:00:00" required /> - <span class="error" ng-show="myForm.input.$error.required"> - Required!</span> - <span class="error" ng-show="myForm.input.$error.time"> - Not a valid date!</span> - <tt>value = {{example.value | date: "HH:mm:ss"}}</tt><br/> - <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/> - <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/> - <tt>myForm.$valid = {{myForm.$valid}}</tt><br/> - <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/> - </form> - </file> - <file name="protractor.js" type="protractor"> - var value = element(by.binding('example.value | date: "HH:mm:ss"')); - var valid = element(by.binding('myForm.input.$valid')); - var input = element(by.model('example.value')); - - // currently protractor/webdriver does not support - // sending keys to all known HTML5 input controls - // for various browsers (https://github.com/angular/protractor/issues/562). - function setInput(val) { - // set the value of the element and force validation. - var scr = "var ipt = document.getElementById('exampleInput'); " + - "ipt.value = '" + val + "';" + - "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });"; - browser.executeScript(scr); - } - - it('should initialize to model', function() { - expect(value.getText()).toContain('14:57:00'); - expect(valid.getText()).toContain('myForm.input.$valid = true'); - }); - - it('should be invalid if empty', function() { - setInput(''); - expect(value.getText()).toEqual('value ='); - expect(valid.getText()).toContain('myForm.input.$valid = false'); - }); - - it('should be invalid if over max', function() { - setInput('23:59:00'); - expect(value.getText()).toContain(''); - expect(valid.getText()).toContain('myForm.input.$valid = false'); - }); - </file> - </example> - */ - 'time': createDateInputType('time', TIME_REGEXP, - createDateParser(TIME_REGEXP, ['HH', 'mm', 'ss', 'sss']), - 'HH:mm:ss.sss'), - - /** - * @ngdoc input - * @name input[week] - * - * @description - * Input with week-of-the-year validation and transformation to Date. In browsers that do not yet support - * the HTML5 week input, a text element will be used. In that case, the text must be entered in a valid ISO-8601 - * week format (yyyy-W##), for example: `2013-W02`. - * - * The model must always be a Date object, otherwise Angular will throw an error. - * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string. - * - * The timezone to be used to read/write the `Date` instance in the model can be defined using - * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. This must be a - * valid ISO week format (yyyy-W##). - * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. This must be - * a valid ISO week format (yyyy-W##). - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - <example name="week-input-directive" module="weekExample"> - <file name="index.html"> - <script> - angular.module('weekExample', []) - .controller('DateController', ['$scope', function($scope) { - $scope.example = { - value: new Date(2013, 0, 3) - }; - }]); - </script> - <form name="myForm" ng-controller="DateController as dateCtrl"> - Pick a date between in 2013: - <input id="exampleInput" type="week" name="input" ng-model="example.value" - placeholder="YYYY-W##" min="2012-W32" max="2013-W52" required /> - <span class="error" ng-show="myForm.input.$error.required"> - Required!</span> - <span class="error" ng-show="myForm.input.$error.week"> - Not a valid date!</span> - <tt>value = {{example.value | date: "yyyy-Www"}}</tt><br/> - <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/> - <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/> - <tt>myForm.$valid = {{myForm.$valid}}</tt><br/> - <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/> - </form> - </file> - <file name="protractor.js" type="protractor"> - var value = element(by.binding('example.value | date: "yyyy-Www"')); - var valid = element(by.binding('myForm.input.$valid')); - var input = element(by.model('example.value')); - - // currently protractor/webdriver does not support - // sending keys to all known HTML5 input controls - // for various browsers (https://github.com/angular/protractor/issues/562). - function setInput(val) { - // set the value of the element and force validation. - var scr = "var ipt = document.getElementById('exampleInput'); " + - "ipt.value = '" + val + "';" + - "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });"; - browser.executeScript(scr); - } - - it('should initialize to model', function() { - expect(value.getText()).toContain('2013-W01'); - expect(valid.getText()).toContain('myForm.input.$valid = true'); - }); - - it('should be invalid if empty', function() { - setInput(''); - expect(value.getText()).toEqual('value ='); - expect(valid.getText()).toContain('myForm.input.$valid = false'); - }); - - it('should be invalid if over max', function() { - setInput('2015-W01'); - expect(value.getText()).toContain(''); - expect(valid.getText()).toContain('myForm.input.$valid = false'); - }); - </file> - </example> - */ - 'week': createDateInputType('week', WEEK_REGEXP, weekParser, 'yyyy-Www'), - - /** - * @ngdoc input - * @name input[month] - * - * @description - * Input with month validation and transformation. In browsers that do not yet support - * the HTML5 month input, a text element will be used. In that case, the text must be entered in a valid ISO-8601 - * month format (yyyy-MM), for example: `2009-01`. - * - * The model must always be a Date object, otherwise Angular will throw an error. - * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string. - * If the model is not set to the first of the month, the next view to model update will set it - * to the first of the month. - * - * The timezone to be used to read/write the `Date` instance in the model can be defined using - * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. This must be - * a valid ISO month format (yyyy-MM). - * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. This must - * be a valid ISO month format (yyyy-MM). - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - <example name="month-input-directive" module="monthExample"> - <file name="index.html"> - <script> - angular.module('monthExample', []) - .controller('DateController', ['$scope', function($scope) { - $scope.example = { - value: new Date(2013, 9, 1) - }; - }]); - </script> - <form name="myForm" ng-controller="DateController as dateCtrl"> - Pick a month in 2013: - <input id="exampleInput" type="month" name="input" ng-model="example.value" - placeholder="yyyy-MM" min="2013-01" max="2013-12" required /> - <span class="error" ng-show="myForm.input.$error.required"> - Required!</span> - <span class="error" ng-show="myForm.input.$error.month"> - Not a valid month!</span> - <tt>value = {{example.value | date: "yyyy-MM"}}</tt><br/> - <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/> - <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/> - <tt>myForm.$valid = {{myForm.$valid}}</tt><br/> - <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/> - </form> - </file> - <file name="protractor.js" type="protractor"> - var value = element(by.binding('example.value | date: "yyyy-MM"')); - var valid = element(by.binding('myForm.input.$valid')); - var input = element(by.model('example.value')); - - // currently protractor/webdriver does not support - // sending keys to all known HTML5 input controls - // for various browsers (https://github.com/angular/protractor/issues/562). - function setInput(val) { - // set the value of the element and force validation. - var scr = "var ipt = document.getElementById('exampleInput'); " + - "ipt.value = '" + val + "';" + - "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });"; - browser.executeScript(scr); - } - - it('should initialize to model', function() { - expect(value.getText()).toContain('2013-10'); - expect(valid.getText()).toContain('myForm.input.$valid = true'); - }); - - it('should be invalid if empty', function() { - setInput(''); - expect(value.getText()).toEqual('value ='); - expect(valid.getText()).toContain('myForm.input.$valid = false'); - }); - - it('should be invalid if over max', function() { - setInput('2015-01'); - expect(value.getText()).toContain(''); - expect(valid.getText()).toContain('myForm.input.$valid = false'); - }); - </file> - </example> - */ - 'month': createDateInputType('month', MONTH_REGEXP, - createDateParser(MONTH_REGEXP, ['yyyy', 'MM']), - 'yyyy-MM'), - - /** - * @ngdoc input - * @name input[number] - * - * @description - * Text input with number validation and transformation. Sets the `number` validation - * error if not a valid number. - * - * The model must always be a number, otherwise Angular will throw an error. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. - * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than - * minlength. - * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than - * maxlength. Setting the attribute to a negative or non-numeric value, allows view values of - * any length. - * @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string - * that contains the regular expression body that will be converted to a regular expression - * as in the ngPattern directive. - * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel value does not match - * a RegExp found by evaluating the Angular expression given in the attribute value. - * If the expression evaluates to a RegExp object then this is used directly. - * If the expression is a string then it will be converted to a RegExp after wrapping it in `^` and `$` - * characters. For instance, `"abc"` will be converted to `new RegExp('^abc$')`. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - <example name="number-input-directive" module="numberExample"> - <file name="index.html"> - <script> - angular.module('numberExample', []) - .controller('ExampleController', ['$scope', function($scope) { - $scope.example = { - value: 12 - }; - }]); - </script> - <form name="myForm" ng-controller="ExampleController"> - Number: <input type="number" name="input" ng-model="example.value" - min="0" max="99" required> - <span class="error" ng-show="myForm.input.$error.required"> - Required!</span> - <span class="error" ng-show="myForm.input.$error.number"> - Not valid number!</span> - <tt>value = {{example.value}}</tt><br/> - <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/> - <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/> - <tt>myForm.$valid = {{myForm.$valid}}</tt><br/> - <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/> - </form> - </file> - <file name="protractor.js" type="protractor"> - var value = element(by.binding('example.value')); - var valid = element(by.binding('myForm.input.$valid')); - var input = element(by.model('example.value')); - - it('should initialize to model', function() { - expect(value.getText()).toContain('12'); - expect(valid.getText()).toContain('true'); - }); - - it('should be invalid if empty', function() { - input.clear(); - input.sendKeys(''); - expect(value.getText()).toEqual('value ='); - expect(valid.getText()).toContain('false'); - }); - - it('should be invalid if over max', function() { - input.clear(); - input.sendKeys('123'); - expect(value.getText()).toEqual('value ='); - expect(valid.getText()).toContain('false'); - }); - </file> - </example> - */ - 'number': numberInputType, - - - /** - * @ngdoc input - * @name input[url] - * - * @description - * Text input with URL validation. Sets the `url` validation error key if the content is not a - * valid URL. - * - * <div class="alert alert-warning"> - * **Note:** `input[url]` uses a regex to validate urls that is derived from the regex - * used in Chromium. If you need stricter validation, you can use `ng-pattern` or modify - * the built-in validators (see the {@link guide/forms Forms guide}) - * </div> - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than - * minlength. - * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than - * maxlength. Setting the attribute to a negative or non-numeric value, allows view values of - * any length. - * @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string - * that contains the regular expression body that will be converted to a regular expression - * as in the ngPattern directive. - * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel value does not match - * a RegExp found by evaluating the Angular expression given in the attribute value. - * If the expression evaluates to a RegExp object then this is used directly. - * If the expression is a string then it will be converted to a RegExp after wrapping it in `^` and `$` - * characters. For instance, `"abc"` will be converted to `new RegExp('^abc$')`. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - <example name="url-input-directive" module="urlExample"> - <file name="index.html"> - <script> - angular.module('urlExample', []) - .controller('ExampleController', ['$scope', function($scope) { - $scope.url = { - text: 'http://google.com' - }; - }]); - </script> - <form name="myForm" ng-controller="ExampleController"> - URL: <input type="url" name="input" ng-model="url.text" required> - <span class="error" ng-show="myForm.input.$error.required"> - Required!</span> - <span class="error" ng-show="myForm.input.$error.url"> - Not valid url!</span> - <tt>text = {{url.text}}</tt><br/> - <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/> - <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/> - <tt>myForm.$valid = {{myForm.$valid}}</tt><br/> - <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/> - <tt>myForm.$error.url = {{!!myForm.$error.url}}</tt><br/> - </form> - </file> - <file name="protractor.js" type="protractor"> - var text = element(by.binding('url.text')); - var valid = element(by.binding('myForm.input.$valid')); - var input = element(by.model('url.text')); - - it('should initialize to model', function() { - expect(text.getText()).toContain('http://google.com'); - expect(valid.getText()).toContain('true'); - }); - - it('should be invalid if empty', function() { - input.clear(); - input.sendKeys(''); - - expect(text.getText()).toEqual('text ='); - expect(valid.getText()).toContain('false'); - }); - - it('should be invalid if not url', function() { - input.clear(); - input.sendKeys('box'); - - expect(valid.getText()).toContain('false'); - }); - </file> - </example> - */ - 'url': urlInputType, - - - /** - * @ngdoc input - * @name input[email] - * - * @description - * Text input with email validation. Sets the `email` validation error key if not a valid email - * address. - * - * <div class="alert alert-warning"> - * **Note:** `input[email]` uses a regex to validate email addresses that is derived from the regex - * used in Chromium. If you need stricter validation (e.g. requiring a top-level domain), you can - * use `ng-pattern` or modify the built-in validators (see the {@link guide/forms Forms guide}) - * </div> - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than - * minlength. - * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than - * maxlength. Setting the attribute to a negative or non-numeric value, allows view values of - * any length. - * @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string - * that contains the regular expression body that will be converted to a regular expression - * as in the ngPattern directive. - * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel value does not match - * a RegExp found by evaluating the Angular expression given in the attribute value. - * If the expression evaluates to a RegExp object then this is used directly. - * If the expression is a string then it will be converted to a RegExp after wrapping it in `^` and `$` - * characters. For instance, `"abc"` will be converted to `new RegExp('^abc$')`. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - <example name="email-input-directive" module="emailExample"> - <file name="index.html"> - <script> - angular.module('emailExample', []) - .controller('ExampleController', ['$scope', function($scope) { - $scope.email = { - text: 'me@example.com' - }; - }]); - </script> - <form name="myForm" ng-controller="ExampleController"> - Email: <input type="email" name="input" ng-model="email.text" required> - <span class="error" ng-show="myForm.input.$error.required"> - Required!</span> - <span class="error" ng-show="myForm.input.$error.email"> - Not valid email!</span> - <tt>text = {{email.text}}</tt><br/> - <tt>myForm.input.$valid = {{myForm.input.$valid}}</tt><br/> - <tt>myForm.input.$error = {{myForm.input.$error}}</tt><br/> - <tt>myForm.$valid = {{myForm.$valid}}</tt><br/> - <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/> - <tt>myForm.$error.email = {{!!myForm.$error.email}}</tt><br/> - </form> - </file> - <file name="protractor.js" type="protractor"> - var text = element(by.binding('email.text')); - var valid = element(by.binding('myForm.input.$valid')); - var input = element(by.model('email.text')); - - it('should initialize to model', function() { - expect(text.getText()).toContain('me@example.com'); - expect(valid.getText()).toContain('true'); - }); - - it('should be invalid if empty', function() { - input.clear(); - input.sendKeys(''); - expect(text.getText()).toEqual('text ='); - expect(valid.getText()).toContain('false'); - }); - - it('should be invalid if not email', function() { - input.clear(); - input.sendKeys('xxx'); - - expect(valid.getText()).toContain('false'); - }); - </file> - </example> - */ - 'email': emailInputType, - - - /** - * @ngdoc input - * @name input[radio] - * - * @description - * HTML radio button. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string} value The value to which the expression should be set when selected. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * @param {string} ngValue Angular expression which sets the value to which the expression should - * be set when selected. - * - * @example - <example name="radio-input-directive" module="radioExample"> - <file name="index.html"> - <script> - angular.module('radioExample', []) - .controller('ExampleController', ['$scope', function($scope) { - $scope.color = { - name: 'blue' - }; - $scope.specialValue = { - "id": "12345", - "value": "green" - }; - }]); - </script> - <form name="myForm" ng-controller="ExampleController"> - <input type="radio" ng-model="color.name" value="red"> Red <br/> - <input type="radio" ng-model="color.name" ng-value="specialValue"> Green <br/> - <input type="radio" ng-model="color.name" value="blue"> Blue <br/> - <tt>color = {{color.name | json}}</tt><br/> - </form> - Note that `ng-value="specialValue"` sets radio item's value to be the value of `$scope.specialValue`. - </file> - <file name="protractor.js" type="protractor"> - it('should change state', function() { - var color = element(by.binding('color.name')); - - expect(color.getText()).toContain('blue'); - - element.all(by.model('color.name')).get(0).click(); - - expect(color.getText()).toContain('red'); - }); - </file> - </example> - */ - 'radio': radioInputType, - - - /** - * @ngdoc input - * @name input[checkbox] - * - * @description - * HTML checkbox. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {expression=} ngTrueValue The value to which the expression should be set when selected. - * @param {expression=} ngFalseValue The value to which the expression should be set when not selected. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - <example name="checkbox-input-directive" module="checkboxExample"> - <file name="index.html"> - <script> - angular.module('checkboxExample', []) - .controller('ExampleController', ['$scope', function($scope) { - $scope.checkboxModel = { - value1 : true, - value2 : 'YES' - }; - }]); - </script> - <form name="myForm" ng-controller="ExampleController"> - Value1: <input type="checkbox" ng-model="checkboxModel.value1"> <br/> - Value2: <input type="checkbox" ng-model="checkboxModel.value2" - ng-true-value="'YES'" ng-false-value="'NO'"> <br/> - <tt>value1 = {{checkboxModel.value1}}</tt><br/> - <tt>value2 = {{checkboxModel.value2}}</tt><br/> - </form> - </file> - <file name="protractor.js" type="protractor"> - it('should change state', function() { - var value1 = element(by.binding('checkboxModel.value1')); - var value2 = element(by.binding('checkboxModel.value2')); - - expect(value1.getText()).toContain('true'); - expect(value2.getText()).toContain('YES'); - - element(by.model('checkboxModel.value1')).click(); - element(by.model('checkboxModel.value2')).click(); - - expect(value1.getText()).toContain('false'); - expect(value2.getText()).toContain('NO'); - }); - </file> - </example> - */ - 'checkbox': checkboxInputType, - - 'hidden': noop, - 'button': noop, - 'submit': noop, - 'reset': noop, - 'file': noop -}; - -function stringBasedInputType(ctrl) { - ctrl.$formatters.push(function(value) { - return ctrl.$isEmpty(value) ? value : value.toString(); - }); -} - -function textInputType(scope, element, attr, ctrl, $sniffer, $browser) { - baseInputType(scope, element, attr, ctrl, $sniffer, $browser); - stringBasedInputType(ctrl); -} - -function baseInputType(scope, element, attr, ctrl, $sniffer, $browser) { - var type = lowercase(element[0].type); - - // In composition mode, users are still inputing intermediate text buffer, - // hold the listener until composition is done. - // More about composition events: https://developer.mozilla.org/en-US/docs/Web/API/CompositionEvent - if (!$sniffer.android) { - var composing = false; - - element.on('compositionstart', function(data) { - composing = true; - }); - - element.on('compositionend', function() { - composing = false; - listener(); - }); - } - - var listener = function(ev) { - if (timeout) { - $browser.defer.cancel(timeout); - timeout = null; - } - if (composing) return; - var value = element.val(), - event = ev && ev.type; - - // By default we will trim the value - // If the attribute ng-trim exists we will avoid trimming - // If input type is 'password', the value is never trimmed - if (type !== 'password' && (!attr.ngTrim || attr.ngTrim !== 'false')) { - value = trim(value); - } - - // If a control is suffering from bad input (due to native validators), browsers discard its - // value, so it may be necessary to revalidate (by calling $setViewValue again) even if the - // control's value is the same empty value twice in a row. - if (ctrl.$viewValue !== value || (value === '' && ctrl.$$hasNativeValidators)) { - ctrl.$setViewValue(value, event); - } - }; - - // if the browser does support "input" event, we are fine - except on IE9 which doesn't fire the - // input event on backspace, delete or cut - if ($sniffer.hasEvent('input')) { - element.on('input', listener); - } else { - var timeout; - - var deferListener = function(ev, input, origValue) { - if (!timeout) { - timeout = $browser.defer(function() { - timeout = null; - if (!input || input.value !== origValue) { - listener(ev); - } - }); - } - }; - - element.on('keydown', function(event) { - var key = event.keyCode; - - // ignore - // command modifiers arrows - if (key === 91 || (15 < key && key < 19) || (37 <= key && key <= 40)) return; - - deferListener(event, this, this.value); - }); - - // if user modifies input value using context menu in IE, we need "paste" and "cut" events to catch it - if ($sniffer.hasEvent('paste')) { - element.on('paste cut', deferListener); - } - } - - // if user paste into input using mouse on older browser - // or form autocomplete on newer browser, we need "change" event to catch it - element.on('change', listener); - - ctrl.$render = function() { - element.val(ctrl.$isEmpty(ctrl.$viewValue) ? '' : ctrl.$viewValue); - }; -} - -function weekParser(isoWeek, existingDate) { - if (isDate(isoWeek)) { - return isoWeek; - } - - if (isString(isoWeek)) { - WEEK_REGEXP.lastIndex = 0; - var parts = WEEK_REGEXP.exec(isoWeek); - if (parts) { - var year = +parts[1], - week = +parts[2], - hours = 0, - minutes = 0, - seconds = 0, - milliseconds = 0, - firstThurs = getFirstThursdayOfYear(year), - addDays = (week - 1) * 7; - - if (existingDate) { - hours = existingDate.getHours(); - minutes = existingDate.getMinutes(); - seconds = existingDate.getSeconds(); - milliseconds = existingDate.getMilliseconds(); - } - - return new Date(year, 0, firstThurs.getDate() + addDays, hours, minutes, seconds, milliseconds); - } - } - - return NaN; -} - -function createDateParser(regexp, mapping) { - return function(iso, date) { - var parts, map; - - if (isDate(iso)) { - return iso; - } - - if (isString(iso)) { - // When a date is JSON'ified to wraps itself inside of an extra - // set of double quotes. This makes the date parsing code unable - // to match the date string and parse it as a date. - if (iso.charAt(0) == '"' && iso.charAt(iso.length - 1) == '"') { - iso = iso.substring(1, iso.length - 1); - } - if (ISO_DATE_REGEXP.test(iso)) { - return new Date(iso); - } - regexp.lastIndex = 0; - parts = regexp.exec(iso); - - if (parts) { - parts.shift(); - if (date) { - map = { - yyyy: date.getFullYear(), - MM: date.getMonth() + 1, - dd: date.getDate(), - HH: date.getHours(), - mm: date.getMinutes(), - ss: date.getSeconds(), - sss: date.getMilliseconds() / 1000 - }; - } else { - map = { yyyy: 1970, MM: 1, dd: 1, HH: 0, mm: 0, ss: 0, sss: 0 }; - } - - forEach(parts, function(part, index) { - if (index < mapping.length) { - map[mapping[index]] = +part; - } - }); - return new Date(map.yyyy, map.MM - 1, map.dd, map.HH, map.mm, map.ss || 0, map.sss * 1000 || 0); - } - } - - return NaN; - }; -} - -function createDateInputType(type, regexp, parseDate, format) { - return function dynamicDateInputType(scope, element, attr, ctrl, $sniffer, $browser, $filter) { - badInputChecker(scope, element, attr, ctrl); - baseInputType(scope, element, attr, ctrl, $sniffer, $browser); - var timezone = ctrl && ctrl.$options && ctrl.$options.timezone; - var previousDate; - - ctrl.$$parserName = type; - ctrl.$parsers.push(function(value) { - if (ctrl.$isEmpty(value)) return null; - if (regexp.test(value)) { - // Note: We cannot read ctrl.$modelValue, as there might be a different - // parser/formatter in the processing chain so that the model - // contains some different data format! - var parsedDate = parseDate(value, previousDate); - if (timezone === 'UTC') { - parsedDate.setMinutes(parsedDate.getMinutes() - parsedDate.getTimezoneOffset()); - } - return parsedDate; - } - return undefined; - }); - - ctrl.$formatters.push(function(value) { - if (value && !isDate(value)) { - throw $ngModelMinErr('datefmt', 'Expected `{0}` to be a date', value); - } - if (isValidDate(value)) { - previousDate = value; - if (previousDate && timezone === 'UTC') { - var timezoneOffset = 60000 * previousDate.getTimezoneOffset(); - previousDate = new Date(previousDate.getTime() + timezoneOffset); - } - return $filter('date')(value, format, timezone); - } else { - previousDate = null; - return ''; - } - }); - - if (isDefined(attr.min) || attr.ngMin) { - var minVal; - ctrl.$validators.min = function(value) { - return !isValidDate(value) || isUndefined(minVal) || parseDate(value) >= minVal; - }; - attr.$observe('min', function(val) { - minVal = parseObservedDateValue(val); - ctrl.$validate(); - }); - } - - if (isDefined(attr.max) || attr.ngMax) { - var maxVal; - ctrl.$validators.max = function(value) { - return !isValidDate(value) || isUndefined(maxVal) || parseDate(value) <= maxVal; - }; - attr.$observe('max', function(val) { - maxVal = parseObservedDateValue(val); - ctrl.$validate(); - }); - } - - function isValidDate(value) { - // Invalid Date: getTime() returns NaN - return value && !(value.getTime && value.getTime() !== value.getTime()); - } - - function parseObservedDateValue(val) { - return isDefined(val) ? (isDate(val) ? val : parseDate(val)) : undefined; - } - }; -} - -function badInputChecker(scope, element, attr, ctrl) { - var node = element[0]; - var nativeValidation = ctrl.$$hasNativeValidators = isObject(node.validity); - if (nativeValidation) { - ctrl.$parsers.push(function(value) { - var validity = element.prop(VALIDITY_STATE_PROPERTY) || {}; - // Detect bug in FF35 for input[email] (https://bugzilla.mozilla.org/show_bug.cgi?id=1064430): - // - also sets validity.badInput (should only be validity.typeMismatch). - // - see http://www.whatwg.org/specs/web-apps/current-work/multipage/forms.html#e-mail-state-(type=email) - // - can ignore this case as we can still read out the erroneous email... - return validity.badInput && !validity.typeMismatch ? undefined : value; - }); - } -} - -function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) { - badInputChecker(scope, element, attr, ctrl); - baseInputType(scope, element, attr, ctrl, $sniffer, $browser); - - ctrl.$$parserName = 'number'; - ctrl.$parsers.push(function(value) { - if (ctrl.$isEmpty(value)) return null; - if (NUMBER_REGEXP.test(value)) return parseFloat(value); - return undefined; - }); - - ctrl.$formatters.push(function(value) { - if (!ctrl.$isEmpty(value)) { - if (!isNumber(value)) { - throw $ngModelMinErr('numfmt', 'Expected `{0}` to be a number', value); - } - value = value.toString(); - } - return value; - }); - - if (attr.min || attr.ngMin) { - var minVal; - ctrl.$validators.min = function(value) { - return ctrl.$isEmpty(value) || isUndefined(minVal) || value >= minVal; - }; - - attr.$observe('min', function(val) { - if (isDefined(val) && !isNumber(val)) { - val = parseFloat(val, 10); - } - minVal = isNumber(val) && !isNaN(val) ? val : undefined; - // TODO(matsko): implement validateLater to reduce number of validations - ctrl.$validate(); - }); - } - - if (attr.max || attr.ngMax) { - var maxVal; - ctrl.$validators.max = function(value) { - return ctrl.$isEmpty(value) || isUndefined(maxVal) || value <= maxVal; - }; - - attr.$observe('max', function(val) { - if (isDefined(val) && !isNumber(val)) { - val = parseFloat(val, 10); - } - maxVal = isNumber(val) && !isNaN(val) ? val : undefined; - // TODO(matsko): implement validateLater to reduce number of validations - ctrl.$validate(); - }); - } -} - -function urlInputType(scope, element, attr, ctrl, $sniffer, $browser) { - // Note: no badInputChecker here by purpose as `url` is only a validation - // in browsers, i.e. we can always read out input.value even if it is not valid! - baseInputType(scope, element, attr, ctrl, $sniffer, $browser); - stringBasedInputType(ctrl); - - ctrl.$$parserName = 'url'; - ctrl.$validators.url = function(modelValue, viewValue) { - var value = modelValue || viewValue; - return ctrl.$isEmpty(value) || URL_REGEXP.test(value); - }; -} - -function emailInputType(scope, element, attr, ctrl, $sniffer, $browser) { - // Note: no badInputChecker here by purpose as `url` is only a validation - // in browsers, i.e. we can always read out input.value even if it is not valid! - baseInputType(scope, element, attr, ctrl, $sniffer, $browser); - stringBasedInputType(ctrl); - - ctrl.$$parserName = 'email'; - ctrl.$validators.email = function(modelValue, viewValue) { - var value = modelValue || viewValue; - return ctrl.$isEmpty(value) || EMAIL_REGEXP.test(value); - }; -} - -function radioInputType(scope, element, attr, ctrl) { - // make the name unique, if not defined - if (isUndefined(attr.name)) { - element.attr('name', nextUid()); - } - - var listener = function(ev) { - if (element[0].checked) { - ctrl.$setViewValue(attr.value, ev && ev.type); - } - }; - - element.on('click', listener); - - ctrl.$render = function() { - var value = attr.value; - element[0].checked = (value == ctrl.$viewValue); - }; - - attr.$observe('value', ctrl.$render); -} - -function parseConstantExpr($parse, context, name, expression, fallback) { - var parseFn; - if (isDefined(expression)) { - parseFn = $parse(expression); - if (!parseFn.constant) { - throw minErr('ngModel')('constexpr', 'Expected constant expression for `{0}`, but saw ' + - '`{1}`.', name, expression); - } - return parseFn(context); - } - return fallback; -} - -function checkboxInputType(scope, element, attr, ctrl, $sniffer, $browser, $filter, $parse) { - var trueValue = parseConstantExpr($parse, scope, 'ngTrueValue', attr.ngTrueValue, true); - var falseValue = parseConstantExpr($parse, scope, 'ngFalseValue', attr.ngFalseValue, false); - - var listener = function(ev) { - ctrl.$setViewValue(element[0].checked, ev && ev.type); - }; - - element.on('click', listener); - - ctrl.$render = function() { - element[0].checked = ctrl.$viewValue; - }; - - // Override the standard `$isEmpty` because the $viewValue of an empty checkbox is always set to `false` - // This is because of the parser below, which compares the `$modelValue` with `trueValue` to convert - // it to a boolean. - ctrl.$isEmpty = function(value) { - return value === false; - }; - - ctrl.$formatters.push(function(value) { - return equals(value, trueValue); - }); - - ctrl.$parsers.push(function(value) { - return value ? trueValue : falseValue; - }); -} - - -/** - * @ngdoc directive - * @name textarea - * @restrict E - * - * @description - * HTML textarea element control with angular data-binding. The data-binding and validation - * properties of this element are exactly the same as those of the - * {@link ng.directive:input input element}. - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than - * minlength. - * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than - * maxlength. Setting the attribute to a negative or non-numeric value, allows view values of any - * length. - * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the - * RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for - * patterns defined as scope expressions. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * @param {boolean=} [ngTrim=true] If set to false Angular will not automatically trim the input. - */ - - -/** - * @ngdoc directive - * @name input - * @restrict E - * - * @description - * HTML input element control. When used together with {@link ngModel `ngModel`}, it provides data-binding, - * input state control, and validation. - * Input control follows HTML5 input types and polyfills the HTML5 validation behavior for older browsers. - * - * <div class="alert alert-warning"> - * **Note:** Not every feature offered is available for all input types. - * Specifically, data binding and event handling via `ng-model` is unsupported for `input[file]`. - * </div> - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {boolean=} ngRequired Sets `required` attribute if set to true - * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than - * minlength. - * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than - * maxlength. Setting the attribute to a negative or non-numeric value, allows view values of any - * length. - * @param {string=} ngPattern Sets `pattern` validation error key if the value does not match the - * RegExp pattern expression. Expected value is `/regexp/` for inline patterns or `regexp` for - * patterns defined as scope expressions. - * @param {string=} ngChange Angular expression to be executed when input changes due to user - * interaction with the input element. - * @param {boolean=} [ngTrim=true] If set to false Angular will not automatically trim the input. - * This parameter is ignored for input[type=password] controls, which will never trim the - * input. - * - * @example - <example name="input-directive" module="inputExample"> - <file name="index.html"> - <script> - angular.module('inputExample', []) - .controller('ExampleController', ['$scope', function($scope) { - $scope.user = {name: 'guest', last: 'visitor'}; - }]); - </script> - <div ng-controller="ExampleController"> - <form name="myForm"> - User name: <input type="text" name="userName" ng-model="user.name" required> - <span class="error" ng-show="myForm.userName.$error.required"> - Required!</span><br> - Last name: <input type="text" name="lastName" ng-model="user.last" - ng-minlength="3" ng-maxlength="10"> - <span class="error" ng-show="myForm.lastName.$error.minlength"> - Too short!</span> - <span class="error" ng-show="myForm.lastName.$error.maxlength"> - Too long!</span><br> - </form> - <hr> - <tt>user = {{user}}</tt><br/> - <tt>myForm.userName.$valid = {{myForm.userName.$valid}}</tt><br> - <tt>myForm.userName.$error = {{myForm.userName.$error}}</tt><br> - <tt>myForm.lastName.$valid = {{myForm.lastName.$valid}}</tt><br> - <tt>myForm.lastName.$error = {{myForm.lastName.$error}}</tt><br> - <tt>myForm.$valid = {{myForm.$valid}}</tt><br> - <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br> - <tt>myForm.$error.minlength = {{!!myForm.$error.minlength}}</tt><br> - <tt>myForm.$error.maxlength = {{!!myForm.$error.maxlength}}</tt><br> - </div> - </file> - <file name="protractor.js" type="protractor"> - var user = element(by.exactBinding('user')); - var userNameValid = element(by.binding('myForm.userName.$valid')); - var lastNameValid = element(by.binding('myForm.lastName.$valid')); - var lastNameError = element(by.binding('myForm.lastName.$error')); - var formValid = element(by.binding('myForm.$valid')); - var userNameInput = element(by.model('user.name')); - var userLastInput = element(by.model('user.last')); - - it('should initialize to model', function() { - expect(user.getText()).toContain('{"name":"guest","last":"visitor"}'); - expect(userNameValid.getText()).toContain('true'); - expect(formValid.getText()).toContain('true'); - }); - - it('should be invalid if empty when required', function() { - userNameInput.clear(); - userNameInput.sendKeys(''); - - expect(user.getText()).toContain('{"last":"visitor"}'); - expect(userNameValid.getText()).toContain('false'); - expect(formValid.getText()).toContain('false'); - }); - - it('should be valid if empty when min length is set', function() { - userLastInput.clear(); - userLastInput.sendKeys(''); - - expect(user.getText()).toContain('{"name":"guest","last":""}'); - expect(lastNameValid.getText()).toContain('true'); - expect(formValid.getText()).toContain('true'); - }); - - it('should be invalid if less than required min length', function() { - userLastInput.clear(); - userLastInput.sendKeys('xx'); - - expect(user.getText()).toContain('{"name":"guest"}'); - expect(lastNameValid.getText()).toContain('false'); - expect(lastNameError.getText()).toContain('minlength'); - expect(formValid.getText()).toContain('false'); - }); - - it('should be invalid if longer than max length', function() { - userLastInput.clear(); - userLastInput.sendKeys('some ridiculously long name'); - - expect(user.getText()).toContain('{"name":"guest"}'); - expect(lastNameValid.getText()).toContain('false'); - expect(lastNameError.getText()).toContain('maxlength'); - expect(formValid.getText()).toContain('false'); - }); - </file> - </example> - */ -var inputDirective = ['$browser', '$sniffer', '$filter', '$parse', - function($browser, $sniffer, $filter, $parse) { - return { - restrict: 'E', - require: ['?ngModel'], - link: { - pre: function(scope, element, attr, ctrls) { - if (ctrls[0]) { - (inputType[lowercase(attr.type)] || inputType.text)(scope, element, attr, ctrls[0], $sniffer, - $browser, $filter, $parse); - } - } - } - }; -}]; - - - -var CONSTANT_VALUE_REGEXP = /^(true|false|\d+)$/; -/** - * @ngdoc directive - * @name ngValue - * - * @description - * Binds the given expression to the value of `<option>` or {@link input[radio] `input[radio]`}, - * so that when the element is selected, the {@link ngModel `ngModel`} of that element is set to - * the bound value. - * - * `ngValue` is useful when dynamically generating lists of radio buttons using - * {@link ngRepeat `ngRepeat`}, as shown below. - * - * Likewise, `ngValue` can be used to generate `<option>` elements for - * the {@link select `select`} element. In that case however, only strings are supported - * for the `value `attribute, so the resulting `ngModel` will always be a string. - * Support for `select` models with non-string values is available via `ngOptions`. - * - * @element input - * @param {string=} ngValue angular expression, whose value will be bound to the `value` attribute - * of the `input` element - * - * @example - <example name="ngValue-directive" module="valueExample"> - <file name="index.html"> - <script> - angular.module('valueExample', []) - .controller('ExampleController', ['$scope', function($scope) { - $scope.names = ['pizza', 'unicorns', 'robots']; - $scope.my = { favorite: 'unicorns' }; - }]); - </script> - <form ng-controller="ExampleController"> - <h2>Which is your favorite?</h2> - <label ng-repeat="name in names" for="{{name}}"> - {{name}} - <input type="radio" - ng-model="my.favorite" - ng-value="name" - id="{{name}}" - name="favorite"> - </label> - <div>You chose {{my.favorite}}</div> - </form> - </file> - <file name="protractor.js" type="protractor"> - var favorite = element(by.binding('my.favorite')); - - it('should initialize to model', function() { - expect(favorite.getText()).toContain('unicorns'); - }); - it('should bind the values to the inputs', function() { - element.all(by.model('my.favorite')).get(0).click(); - expect(favorite.getText()).toContain('pizza'); - }); - </file> - </example> - */ -var ngValueDirective = function() { - return { - restrict: 'A', - priority: 100, - compile: function(tpl, tplAttr) { - if (CONSTANT_VALUE_REGEXP.test(tplAttr.ngValue)) { - return function ngValueConstantLink(scope, elm, attr) { - attr.$set('value', scope.$eval(attr.ngValue)); - }; - } else { - return function ngValueLink(scope, elm, attr) { - scope.$watch(attr.ngValue, function valueWatchAction(value) { - attr.$set('value', value); - }); - }; - } - } - }; -}; - -/** - * @ngdoc directive - * @name ngBind - * @restrict AC - * - * @description - * The `ngBind` attribute tells Angular to replace the text content of the specified HTML element - * with the value of a given expression, and to update the text content when the value of that - * expression changes. - * - * Typically, you don't use `ngBind` directly, but instead you use the double curly markup like - * `{{ expression }}` which is similar but less verbose. - * - * It is preferable to use `ngBind` instead of `{{ expression }}` if a template is momentarily - * displayed by the browser in its raw state before Angular compiles it. Since `ngBind` is an - * element attribute, it makes the bindings invisible to the user while the page is loading. - * - * An alternative solution to this problem would be using the - * {@link ng.directive:ngCloak ngCloak} directive. - * - * - * @element ANY - * @param {expression} ngBind {@link guide/expression Expression} to evaluate. - * - * @example - * Enter a name in the Live Preview text box; the greeting below the text box changes instantly. - <example module="bindExample"> - <file name="index.html"> - <script> - angular.module('bindExample', []) - .controller('ExampleController', ['$scope', function($scope) { - $scope.name = 'Whirled'; - }]); - </script> - <div ng-controller="ExampleController"> - Enter name: <input type="text" ng-model="name"><br> - Hello <span ng-bind="name"></span>! - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-bind', function() { - var nameInput = element(by.model('name')); - - expect(element(by.binding('name')).getText()).toBe('Whirled'); - nameInput.clear(); - nameInput.sendKeys('world'); - expect(element(by.binding('name')).getText()).toBe('world'); - }); - </file> - </example> - */ -var ngBindDirective = ['$compile', function($compile) { - return { - restrict: 'AC', - compile: function ngBindCompile(templateElement) { - $compile.$$addBindingClass(templateElement); - return function ngBindLink(scope, element, attr) { - $compile.$$addBindingInfo(element, attr.ngBind); - element = element[0]; - scope.$watch(attr.ngBind, function ngBindWatchAction(value) { - element.textContent = value === undefined ? '' : value; - }); - }; - } - }; -}]; - - -/** - * @ngdoc directive - * @name ngBindTemplate - * - * @description - * The `ngBindTemplate` directive specifies that the element - * text content should be replaced with the interpolation of the template - * in the `ngBindTemplate` attribute. - * Unlike `ngBind`, the `ngBindTemplate` can contain multiple `{{` `}}` - * expressions. This directive is needed since some HTML elements - * (such as TITLE and OPTION) cannot contain SPAN elements. - * - * @element ANY - * @param {string} ngBindTemplate template of form - * <tt>{{</tt> <tt>expression</tt> <tt>}}</tt> to eval. - * - * @example - * Try it here: enter text in text box and watch the greeting change. - <example module="bindExample"> - <file name="index.html"> - <script> - angular.module('bindExample', []) - .controller('ExampleController', ['$scope', function($scope) { - $scope.salutation = 'Hello'; - $scope.name = 'World'; - }]); - </script> - <div ng-controller="ExampleController"> - Salutation: <input type="text" ng-model="salutation"><br> - Name: <input type="text" ng-model="name"><br> - <pre ng-bind-template="{{salutation}} {{name}}!"></pre> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-bind', function() { - var salutationElem = element(by.binding('salutation')); - var salutationInput = element(by.model('salutation')); - var nameInput = element(by.model('name')); - - expect(salutationElem.getText()).toBe('Hello World!'); - - salutationInput.clear(); - salutationInput.sendKeys('Greetings'); - nameInput.clear(); - nameInput.sendKeys('user'); - - expect(salutationElem.getText()).toBe('Greetings user!'); - }); - </file> - </example> - */ -var ngBindTemplateDirective = ['$interpolate', '$compile', function($interpolate, $compile) { - return { - compile: function ngBindTemplateCompile(templateElement) { - $compile.$$addBindingClass(templateElement); - return function ngBindTemplateLink(scope, element, attr) { - var interpolateFn = $interpolate(element.attr(attr.$attr.ngBindTemplate)); - $compile.$$addBindingInfo(element, interpolateFn.expressions); - element = element[0]; - attr.$observe('ngBindTemplate', function(value) { - element.textContent = value === undefined ? '' : value; - }); - }; - } - }; -}]; - - -/** - * @ngdoc directive - * @name ngBindHtml - * - * @description - * Evaluates the expression and inserts the resulting HTML into the element in a secure way. By default, - * the resulting HTML content will be sanitized using the {@link ngSanitize.$sanitize $sanitize} service. - * To utilize this functionality, ensure that `$sanitize` is available, for example, by including {@link - * ngSanitize} in your module's dependencies (not in core Angular). In order to use {@link ngSanitize} - * in your module's dependencies, you need to include "angular-sanitize.js" in your application. - * - * You may also bypass sanitization for values you know are safe. To do so, bind to - * an explicitly trusted value via {@link ng.$sce#trustAsHtml $sce.trustAsHtml}. See the example - * under {@link ng.$sce#show-me-an-example-using-sce- Strict Contextual Escaping (SCE)}. - * - * Note: If a `$sanitize` service is unavailable and the bound value isn't explicitly trusted, you - * will have an exception (instead of an exploit.) - * - * @element ANY - * @param {expression} ngBindHtml {@link guide/expression Expression} to evaluate. - * - * @example - - <example module="bindHtmlExample" deps="angular-sanitize.js"> - <file name="index.html"> - <div ng-controller="ExampleController"> - <p ng-bind-html="myHTML"></p> - </div> - </file> - - <file name="script.js"> - angular.module('bindHtmlExample', ['ngSanitize']) - .controller('ExampleController', ['$scope', function($scope) { - $scope.myHTML = - 'I am an <code>HTML</code>string with ' + - '<a href="#">links!</a> and other <em>stuff</em>'; - }]); - </file> - - <file name="protractor.js" type="protractor"> - it('should check ng-bind-html', function() { - expect(element(by.binding('myHTML')).getText()).toBe( - 'I am an HTMLstring with links! and other stuff'); - }); - </file> - </example> - */ -var ngBindHtmlDirective = ['$sce', '$parse', '$compile', function($sce, $parse, $compile) { - return { - restrict: 'A', - compile: function ngBindHtmlCompile(tElement, tAttrs) { - var ngBindHtmlGetter = $parse(tAttrs.ngBindHtml); - var ngBindHtmlWatch = $parse(tAttrs.ngBindHtml, function getStringValue(value) { - return (value || '').toString(); - }); - $compile.$$addBindingClass(tElement); - - return function ngBindHtmlLink(scope, element, attr) { - $compile.$$addBindingInfo(element, attr.ngBindHtml); - - scope.$watch(ngBindHtmlWatch, function ngBindHtmlWatchAction() { - // we re-evaluate the expr because we want a TrustedValueHolderType - // for $sce, not a string - element.html($sce.getTrustedHtml(ngBindHtmlGetter(scope)) || ''); - }); - }; - } - }; -}]; - -/** - * @ngdoc directive - * @name ngChange - * - * @description - * Evaluate the given expression when the user changes the input. - * The expression is evaluated immediately, unlike the JavaScript onchange event - * which only triggers at the end of a change (usually, when the user leaves the - * form element or presses the return key). - * - * The `ngChange` expression is only evaluated when a change in the input value causes - * a new value to be committed to the model. - * - * It will not be evaluated: - * * if the value returned from the `$parsers` transformation pipeline has not changed - * * if the input has continued to be invalid since the model will stay `null` - * * if the model is changed programmatically and not by a change to the input value - * - * - * Note, this directive requires `ngModel` to be present. - * - * @element input - * @param {expression} ngChange {@link guide/expression Expression} to evaluate upon change - * in input value. - * - * @example - * <example name="ngChange-directive" module="changeExample"> - * <file name="index.html"> - * <script> - * angular.module('changeExample', []) - * .controller('ExampleController', ['$scope', function($scope) { - * $scope.counter = 0; - * $scope.change = function() { - * $scope.counter++; - * }; - * }]); - * </script> - * <div ng-controller="ExampleController"> - * <input type="checkbox" ng-model="confirmed" ng-change="change()" id="ng-change-example1" /> - * <input type="checkbox" ng-model="confirmed" id="ng-change-example2" /> - * <label for="ng-change-example2">Confirmed</label><br /> - * <tt>debug = {{confirmed}}</tt><br/> - * <tt>counter = {{counter}}</tt><br/> - * </div> - * </file> - * <file name="protractor.js" type="protractor"> - * var counter = element(by.binding('counter')); - * var debug = element(by.binding('confirmed')); - * - * it('should evaluate the expression if changing from view', function() { - * expect(counter.getText()).toContain('0'); - * - * element(by.id('ng-change-example1')).click(); - * - * expect(counter.getText()).toContain('1'); - * expect(debug.getText()).toContain('true'); - * }); - * - * it('should not evaluate the expression if changing from model', function() { - * element(by.id('ng-change-example2')).click(); - - * expect(counter.getText()).toContain('0'); - * expect(debug.getText()).toContain('true'); - * }); - * </file> - * </example> - */ -var ngChangeDirective = valueFn({ - restrict: 'A', - require: 'ngModel', - link: function(scope, element, attr, ctrl) { - ctrl.$viewChangeListeners.push(function() { - scope.$eval(attr.ngChange); - }); - } -}); - -function classDirective(name, selector) { - name = 'ngClass' + name; - return ['$animate', function($animate) { - return { - restrict: 'AC', - link: function(scope, element, attr) { - var oldVal; - - scope.$watch(attr[name], ngClassWatchAction, true); - - attr.$observe('class', function(value) { - ngClassWatchAction(scope.$eval(attr[name])); - }); - - - if (name !== 'ngClass') { - scope.$watch('$index', function($index, old$index) { - // jshint bitwise: false - var mod = $index & 1; - if (mod !== (old$index & 1)) { - var classes = arrayClasses(scope.$eval(attr[name])); - mod === selector ? - addClasses(classes) : - removeClasses(classes); - } - }); - } - - function addClasses(classes) { - var newClasses = digestClassCounts(classes, 1); - attr.$addClass(newClasses); - } - - function removeClasses(classes) { - var newClasses = digestClassCounts(classes, -1); - attr.$removeClass(newClasses); - } - - function digestClassCounts(classes, count) { - var classCounts = element.data('$classCounts') || {}; - var classesToUpdate = []; - forEach(classes, function(className) { - if (count > 0 || classCounts[className]) { - classCounts[className] = (classCounts[className] || 0) + count; - if (classCounts[className] === +(count > 0)) { - classesToUpdate.push(className); - } - } - }); - element.data('$classCounts', classCounts); - return classesToUpdate.join(' '); - } - - function updateClasses(oldClasses, newClasses) { - var toAdd = arrayDifference(newClasses, oldClasses); - var toRemove = arrayDifference(oldClasses, newClasses); - toAdd = digestClassCounts(toAdd, 1); - toRemove = digestClassCounts(toRemove, -1); - if (toAdd && toAdd.length) { - $animate.addClass(element, toAdd); - } - if (toRemove && toRemove.length) { - $animate.removeClass(element, toRemove); - } - } - - function ngClassWatchAction(newVal) { - if (selector === true || scope.$index % 2 === selector) { - var newClasses = arrayClasses(newVal || []); - if (!oldVal) { - addClasses(newClasses); - } else if (!equals(newVal,oldVal)) { - var oldClasses = arrayClasses(oldVal); - updateClasses(oldClasses, newClasses); - } - } - oldVal = shallowCopy(newVal); - } - } - }; - - function arrayDifference(tokens1, tokens2) { - var values = []; - - outer: - for (var i = 0; i < tokens1.length; i++) { - var token = tokens1[i]; - for (var j = 0; j < tokens2.length; j++) { - if (token == tokens2[j]) continue outer; - } - values.push(token); - } - return values; - } - - function arrayClasses(classVal) { - if (isArray(classVal)) { - return classVal; - } else if (isString(classVal)) { - return classVal.split(' '); - } else if (isObject(classVal)) { - var classes = []; - forEach(classVal, function(v, k) { - if (v) { - classes = classes.concat(k.split(' ')); - } - }); - return classes; - } - return classVal; - } - }]; -} - -/** - * @ngdoc directive - * @name ngClass - * @restrict AC - * - * @description - * The `ngClass` directive allows you to dynamically set CSS classes on an HTML element by databinding - * an expression that represents all classes to be added. - * - * The directive operates in three different ways, depending on which of three types the expression - * evaluates to: - * - * 1. If the expression evaluates to a string, the string should be one or more space-delimited class - * names. - * - * 2. If the expression evaluates to an array, each element of the array should be a string that is - * one or more space-delimited class names. - * - * 3. If the expression evaluates to an object, then for each key-value pair of the - * object with a truthy value the corresponding key is used as a class name. - * - * The directive won't add duplicate classes if a particular class was already set. - * - * When the expression changes, the previously added classes are removed and only then the - * new classes are added. - * - * @animations - * **add** - happens just before the class is applied to the elements - * - * **remove** - happens just before the class is removed from the element - * - * @element ANY - * @param {expression} ngClass {@link guide/expression Expression} to eval. The result - * of the evaluation can be a string representing space delimited class - * names, an array, or a map of class names to boolean values. In the case of a map, the - * names of the properties whose values are truthy will be added as css classes to the - * element. - * - * @example Example that demonstrates basic bindings via ngClass directive. - <example> - <file name="index.html"> - <p ng-class="{strike: deleted, bold: important, red: error}">Map Syntax Example</p> - <input type="checkbox" ng-model="deleted"> deleted (apply "strike" class)<br> - <input type="checkbox" ng-model="important"> important (apply "bold" class)<br> - <input type="checkbox" ng-model="error"> error (apply "red" class) - <hr> - <p ng-class="style">Using String Syntax</p> - <input type="text" ng-model="style" placeholder="Type: bold strike red"> - <hr> - <p ng-class="[style1, style2, style3]">Using Array Syntax</p> - <input ng-model="style1" placeholder="Type: bold, strike or red"><br> - <input ng-model="style2" placeholder="Type: bold, strike or red"><br> - <input ng-model="style3" placeholder="Type: bold, strike or red"><br> - </file> - <file name="style.css"> - .strike { - text-decoration: line-through; - } - .bold { - font-weight: bold; - } - .red { - color: red; - } - </file> - <file name="protractor.js" type="protractor"> - var ps = element.all(by.css('p')); - - it('should let you toggle the class', function() { - - expect(ps.first().getAttribute('class')).not.toMatch(/bold/); - expect(ps.first().getAttribute('class')).not.toMatch(/red/); - - element(by.model('important')).click(); - expect(ps.first().getAttribute('class')).toMatch(/bold/); - - element(by.model('error')).click(); - expect(ps.first().getAttribute('class')).toMatch(/red/); - }); - - it('should let you toggle string example', function() { - expect(ps.get(1).getAttribute('class')).toBe(''); - element(by.model('style')).clear(); - element(by.model('style')).sendKeys('red'); - expect(ps.get(1).getAttribute('class')).toBe('red'); - }); - - it('array example should have 3 classes', function() { - expect(ps.last().getAttribute('class')).toBe(''); - element(by.model('style1')).sendKeys('bold'); - element(by.model('style2')).sendKeys('strike'); - element(by.model('style3')).sendKeys('red'); - expect(ps.last().getAttribute('class')).toBe('bold strike red'); - }); - </file> - </example> - - ## Animations - - The example below demonstrates how to perform animations using ngClass. - - <example module="ngAnimate" deps="angular-animate.js" animations="true"> - <file name="index.html"> - <input id="setbtn" type="button" value="set" ng-click="myVar='my-class'"> - <input id="clearbtn" type="button" value="clear" ng-click="myVar=''"> - <br> - <span class="base-class" ng-class="myVar">Sample Text</span> - </file> - <file name="style.css"> - .base-class { - -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; - transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; - } - - .base-class.my-class { - color: red; - font-size:3em; - } - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-class', function() { - expect(element(by.css('.base-class')).getAttribute('class')).not. - toMatch(/my-class/); - - element(by.id('setbtn')).click(); - - expect(element(by.css('.base-class')).getAttribute('class')). - toMatch(/my-class/); - - element(by.id('clearbtn')).click(); - - expect(element(by.css('.base-class')).getAttribute('class')).not. - toMatch(/my-class/); - }); - </file> - </example> - - - ## ngClass and pre-existing CSS3 Transitions/Animations - The ngClass directive still supports CSS3 Transitions/Animations even if they do not follow the ngAnimate CSS naming structure. - Upon animation ngAnimate will apply supplementary CSS classes to track the start and end of an animation, but this will not hinder - any pre-existing CSS transitions already on the element. To get an idea of what happens during a class-based animation, be sure - to view the step by step details of {@link ng.$animate#addClass $animate.addClass} and - {@link ng.$animate#removeClass $animate.removeClass}. - */ -var ngClassDirective = classDirective('', true); - -/** - * @ngdoc directive - * @name ngClassOdd - * @restrict AC - * - * @description - * The `ngClassOdd` and `ngClassEven` directives work exactly as - * {@link ng.directive:ngClass ngClass}, except they work in - * conjunction with `ngRepeat` and take effect only on odd (even) rows. - * - * This directive can be applied only within the scope of an - * {@link ng.directive:ngRepeat ngRepeat}. - * - * @element ANY - * @param {expression} ngClassOdd {@link guide/expression Expression} to eval. The result - * of the evaluation can be a string representing space delimited class names or an array. - * - * @example - <example> - <file name="index.html"> - <ol ng-init="names=['John', 'Mary', 'Cate', 'Suz']"> - <li ng-repeat="name in names"> - <span ng-class-odd="'odd'" ng-class-even="'even'"> - {{name}} - </span> - </li> - </ol> - </file> - <file name="style.css"> - .odd { - color: red; - } - .even { - color: blue; - } - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-class-odd and ng-class-even', function() { - expect(element(by.repeater('name in names').row(0).column('name')).getAttribute('class')). - toMatch(/odd/); - expect(element(by.repeater('name in names').row(1).column('name')).getAttribute('class')). - toMatch(/even/); - }); - </file> - </example> - */ -var ngClassOddDirective = classDirective('Odd', 0); - -/** - * @ngdoc directive - * @name ngClassEven - * @restrict AC - * - * @description - * The `ngClassOdd` and `ngClassEven` directives work exactly as - * {@link ng.directive:ngClass ngClass}, except they work in - * conjunction with `ngRepeat` and take effect only on odd (even) rows. - * - * This directive can be applied only within the scope of an - * {@link ng.directive:ngRepeat ngRepeat}. - * - * @element ANY - * @param {expression} ngClassEven {@link guide/expression Expression} to eval. The - * result of the evaluation can be a string representing space delimited class names or an array. - * - * @example - <example> - <file name="index.html"> - <ol ng-init="names=['John', 'Mary', 'Cate', 'Suz']"> - <li ng-repeat="name in names"> - <span ng-class-odd="'odd'" ng-class-even="'even'"> - {{name}} - </span> - </li> - </ol> - </file> - <file name="style.css"> - .odd { - color: red; - } - .even { - color: blue; - } - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-class-odd and ng-class-even', function() { - expect(element(by.repeater('name in names').row(0).column('name')).getAttribute('class')). - toMatch(/odd/); - expect(element(by.repeater('name in names').row(1).column('name')).getAttribute('class')). - toMatch(/even/); - }); - </file> - </example> - */ -var ngClassEvenDirective = classDirective('Even', 1); - -/** - * @ngdoc directive - * @name ngCloak - * @restrict AC - * - * @description - * The `ngCloak` directive is used to prevent the Angular html template from being briefly - * displayed by the browser in its raw (uncompiled) form while your application is loading. Use this - * directive to avoid the undesirable flicker effect caused by the html template display. - * - * The directive can be applied to the `<body>` element, but the preferred usage is to apply - * multiple `ngCloak` directives to small portions of the page to permit progressive rendering - * of the browser view. - * - * `ngCloak` works in cooperation with the following css rule embedded within `angular.js` and - * `angular.min.js`. - * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}). - * - * ```css - * [ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak { - * display: none !important; - * } - * ``` - * - * When this css rule is loaded by the browser, all html elements (including their children) that - * are tagged with the `ngCloak` directive are hidden. When Angular encounters this directive - * during the compilation of the template it deletes the `ngCloak` element attribute, making - * the compiled element visible. - * - * For the best result, the `angular.js` script must be loaded in the head section of the html - * document; alternatively, the css rule above must be included in the external stylesheet of the - * application. - * - * Legacy browsers, like IE7, do not provide attribute selector support (added in CSS 2.1) so they - * cannot match the `[ng\:cloak]` selector. To work around this limitation, you must add the css - * class `ng-cloak` in addition to the `ngCloak` directive as shown in the example below. - * - * @element ANY - * - * @example - <example> - <file name="index.html"> - <div id="template1" ng-cloak>{{ 'hello' }}</div> - <div id="template2" ng-cloak class="ng-cloak">{{ 'hello IE7' }}</div> - </file> - <file name="protractor.js" type="protractor"> - it('should remove the template directive and css class', function() { - expect($('#template1').getAttribute('ng-cloak')). - toBeNull(); - expect($('#template2').getAttribute('ng-cloak')). - toBeNull(); - }); - </file> - </example> - * - */ -var ngCloakDirective = ngDirective({ - compile: function(element, attr) { - attr.$set('ngCloak', undefined); - element.removeClass('ng-cloak'); - } -}); - -/** - * @ngdoc directive - * @name ngController - * - * @description - * The `ngController` directive attaches a controller class to the view. This is a key aspect of how angular - * supports the principles behind the Model-View-Controller design pattern. - * - * MVC components in angular: - * - * * Model — Models are the properties of a scope; scopes are attached to the DOM where scope properties - * are accessed through bindings. - * * View — The template (HTML with data bindings) that is rendered into the View. - * * Controller — The `ngController` directive specifies a Controller class; the class contains business - * logic behind the application to decorate the scope with functions and values - * - * Note that you can also attach controllers to the DOM by declaring it in a route definition - * via the {@link ngRoute.$route $route} service. A common mistake is to declare the controller - * again using `ng-controller` in the template itself. This will cause the controller to be attached - * and executed twice. - * - * @element ANY - * @scope - * @priority 500 - * @param {expression} ngController Name of a constructor function registered with the current - * {@link ng.$controllerProvider $controllerProvider} or an {@link guide/expression expression} - * that on the current scope evaluates to a constructor function. - * - * The controller instance can be published into a scope property by specifying - * `ng-controller="as propertyName"`. - * - * If the current `$controllerProvider` is configured to use globals (via - * {@link ng.$controllerProvider#allowGlobals `$controllerProvider.allowGlobals()` }), this may - * also be the name of a globally accessible constructor function (not recommended). - * - * @example - * Here is a simple form for editing user contact information. Adding, removing, clearing, and - * greeting are methods declared on the controller (see source tab). These methods can - * easily be called from the angular markup. Any changes to the data are automatically reflected - * in the View without the need for a manual update. - * - * Two different declaration styles are included below: - * - * * one binds methods and properties directly onto the controller using `this`: - * `ng-controller="SettingsController1 as settings"` - * * one injects `$scope` into the controller: - * `ng-controller="SettingsController2"` - * - * The second option is more common in the Angular community, and is generally used in boilerplates - * and in this guide. However, there are advantages to binding properties directly to the controller - * and avoiding scope. - * - * * Using `controller as` makes it obvious which controller you are accessing in the template when - * multiple controllers apply to an element. - * * If you are writing your controllers as classes you have easier access to the properties and - * methods, which will appear on the scope, from inside the controller code. - * * Since there is always a `.` in the bindings, you don't have to worry about prototypal - * inheritance masking primitives. - * - * This example demonstrates the `controller as` syntax. - * - * <example name="ngControllerAs" module="controllerAsExample"> - * <file name="index.html"> - * <div id="ctrl-as-exmpl" ng-controller="SettingsController1 as settings"> - * Name: <input type="text" ng-model="settings.name"/> - * [ <a href="" ng-click="settings.greet()">greet</a> ]<br/> - * Contact: - * <ul> - * <li ng-repeat="contact in settings.contacts"> - * <select ng-model="contact.type"> - * <option>phone</option> - * <option>email</option> - * </select> - * <input type="text" ng-model="contact.value"/> - * [ <a href="" ng-click="settings.clearContact(contact)">clear</a> - * | <a href="" ng-click="settings.removeContact(contact)">X</a> ] - * </li> - * <li>[ <a href="" ng-click="settings.addContact()">add</a> ]</li> - * </ul> - * </div> - * </file> - * <file name="app.js"> - * angular.module('controllerAsExample', []) - * .controller('SettingsController1', SettingsController1); - * - * function SettingsController1() { - * this.name = "John Smith"; - * this.contacts = [ - * {type: 'phone', value: '408 555 1212'}, - * {type: 'email', value: 'john.smith@example.org'} ]; - * } - * - * SettingsController1.prototype.greet = function() { - * alert(this.name); - * }; - * - * SettingsController1.prototype.addContact = function() { - * this.contacts.push({type: 'email', value: 'yourname@example.org'}); - * }; - * - * SettingsController1.prototype.removeContact = function(contactToRemove) { - * var index = this.contacts.indexOf(contactToRemove); - * this.contacts.splice(index, 1); - * }; - * - * SettingsController1.prototype.clearContact = function(contact) { - * contact.type = 'phone'; - * contact.value = ''; - * }; - * </file> - * <file name="protractor.js" type="protractor"> - * it('should check controller as', function() { - * var container = element(by.id('ctrl-as-exmpl')); - * expect(container.element(by.model('settings.name')) - * .getAttribute('value')).toBe('John Smith'); - * - * var firstRepeat = - * container.element(by.repeater('contact in settings.contacts').row(0)); - * var secondRepeat = - * container.element(by.repeater('contact in settings.contacts').row(1)); - * - * expect(firstRepeat.element(by.model('contact.value')).getAttribute('value')) - * .toBe('408 555 1212'); - * - * expect(secondRepeat.element(by.model('contact.value')).getAttribute('value')) - * .toBe('john.smith@example.org'); - * - * firstRepeat.element(by.linkText('clear')).click(); - * - * expect(firstRepeat.element(by.model('contact.value')).getAttribute('value')) - * .toBe(''); - * - * container.element(by.linkText('add')).click(); - * - * expect(container.element(by.repeater('contact in settings.contacts').row(2)) - * .element(by.model('contact.value')) - * .getAttribute('value')) - * .toBe('yourname@example.org'); - * }); - * </file> - * </example> - * - * This example demonstrates the "attach to `$scope`" style of controller. - * - * <example name="ngController" module="controllerExample"> - * <file name="index.html"> - * <div id="ctrl-exmpl" ng-controller="SettingsController2"> - * Name: <input type="text" ng-model="name"/> - * [ <a href="" ng-click="greet()">greet</a> ]<br/> - * Contact: - * <ul> - * <li ng-repeat="contact in contacts"> - * <select ng-model="contact.type"> - * <option>phone</option> - * <option>email</option> - * </select> - * <input type="text" ng-model="contact.value"/> - * [ <a href="" ng-click="clearContact(contact)">clear</a> - * | <a href="" ng-click="removeContact(contact)">X</a> ] - * </li> - * <li>[ <a href="" ng-click="addContact()">add</a> ]</li> - * </ul> - * </div> - * </file> - * <file name="app.js"> - * angular.module('controllerExample', []) - * .controller('SettingsController2', ['$scope', SettingsController2]); - * - * function SettingsController2($scope) { - * $scope.name = "John Smith"; - * $scope.contacts = [ - * {type:'phone', value:'408 555 1212'}, - * {type:'email', value:'john.smith@example.org'} ]; - * - * $scope.greet = function() { - * alert($scope.name); - * }; - * - * $scope.addContact = function() { - * $scope.contacts.push({type:'email', value:'yourname@example.org'}); - * }; - * - * $scope.removeContact = function(contactToRemove) { - * var index = $scope.contacts.indexOf(contactToRemove); - * $scope.contacts.splice(index, 1); - * }; - * - * $scope.clearContact = function(contact) { - * contact.type = 'phone'; - * contact.value = ''; - * }; - * } - * </file> - * <file name="protractor.js" type="protractor"> - * it('should check controller', function() { - * var container = element(by.id('ctrl-exmpl')); - * - * expect(container.element(by.model('name')) - * .getAttribute('value')).toBe('John Smith'); - * - * var firstRepeat = - * container.element(by.repeater('contact in contacts').row(0)); - * var secondRepeat = - * container.element(by.repeater('contact in contacts').row(1)); - * - * expect(firstRepeat.element(by.model('contact.value')).getAttribute('value')) - * .toBe('408 555 1212'); - * expect(secondRepeat.element(by.model('contact.value')).getAttribute('value')) - * .toBe('john.smith@example.org'); - * - * firstRepeat.element(by.linkText('clear')).click(); - * - * expect(firstRepeat.element(by.model('contact.value')).getAttribute('value')) - * .toBe(''); - * - * container.element(by.linkText('add')).click(); - * - * expect(container.element(by.repeater('contact in contacts').row(2)) - * .element(by.model('contact.value')) - * .getAttribute('value')) - * .toBe('yourname@example.org'); - * }); - * </file> - *</example> - - */ -var ngControllerDirective = [function() { - return { - restrict: 'A', - scope: true, - controller: '@', - priority: 500 - }; -}]; - -/** - * @ngdoc directive - * @name ngCsp - * - * @element html - * @description - * Enables [CSP (Content Security Policy)](https://developer.mozilla.org/en/Security/CSP) support. - * - * This is necessary when developing things like Google Chrome Extensions or Universal Windows Apps. - * - * CSP forbids apps to use `eval` or `Function(string)` generated functions (among other things). - * For Angular to be CSP compatible there are only two things that we need to do differently: - * - * - don't use `Function` constructor to generate optimized value getters - * - don't inject custom stylesheet into the document - * - * AngularJS uses `Function(string)` generated functions as a speed optimization. Applying the `ngCsp` - * directive will cause Angular to use CSP compatibility mode. When this mode is on AngularJS will - * evaluate all expressions up to 30% slower than in non-CSP mode, but no security violations will - * be raised. - * - * CSP forbids JavaScript to inline stylesheet rules. In non CSP mode Angular automatically - * includes some CSS rules (e.g. {@link ng.directive:ngCloak ngCloak}). - * To make those directives work in CSP mode, include the `angular-csp.css` manually. - * - * Angular tries to autodetect if CSP is active and automatically turn on the CSP-safe mode. This - * autodetection however triggers a CSP error to be logged in the console: - * - * ``` - * Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of - * script in the following Content Security Policy directive: "default-src 'self'". Note that - * 'script-src' was not explicitly set, so 'default-src' is used as a fallback. - * ``` - * - * This error is harmless but annoying. To prevent the error from showing up, put the `ngCsp` - * directive on the root element of the application or on the `angular.js` script tag, whichever - * appears first in the html document. - * - * *Note: This directive is only available in the `ng-csp` and `data-ng-csp` attribute form.* - * - * @example - * This example shows how to apply the `ngCsp` directive to the `html` tag. - ```html - <!doctype html> - <html ng-app ng-csp> - ... - ... - </html> - ``` - * @example - // Note: the suffix `.csp` in the example name triggers - // csp mode in our http server! - <example name="example.csp" module="cspExample" ng-csp="true"> - <file name="index.html"> - <div ng-controller="MainController as ctrl"> - <div> - <button ng-click="ctrl.inc()" id="inc">Increment</button> - <span id="counter"> - {{ctrl.counter}} - </span> - </div> - - <div> - <button ng-click="ctrl.evil()" id="evil">Evil</button> - <span id="evilError"> - {{ctrl.evilError}} - </span> - </div> - </div> - </file> - <file name="script.js"> - angular.module('cspExample', []) - .controller('MainController', function() { - this.counter = 0; - this.inc = function() { - this.counter++; - }; - this.evil = function() { - // jshint evil:true - try { - eval('1+2'); - } catch (e) { - this.evilError = e.message; - } - }; - }); - </file> - <file name="protractor.js" type="protractor"> - var util, webdriver; - - var incBtn = element(by.id('inc')); - var counter = element(by.id('counter')); - var evilBtn = element(by.id('evil')); - var evilError = element(by.id('evilError')); - - function getAndClearSevereErrors() { - return browser.manage().logs().get('browser').then(function(browserLog) { - return browserLog.filter(function(logEntry) { - return logEntry.level.value > webdriver.logging.Level.WARNING.value; - }); - }); - } - - function clearErrors() { - getAndClearSevereErrors(); - } - - function expectNoErrors() { - getAndClearSevereErrors().then(function(filteredLog) { - expect(filteredLog.length).toEqual(0); - if (filteredLog.length) { - console.log('browser console errors: ' + util.inspect(filteredLog)); - } - }); - } - - function expectError(regex) { - getAndClearSevereErrors().then(function(filteredLog) { - var found = false; - filteredLog.forEach(function(log) { - if (log.message.match(regex)) { - found = true; - } - }); - if (!found) { - throw new Error('expected an error that matches ' + regex); - } - }); - } - - beforeEach(function() { - util = require('util'); - webdriver = require('protractor/node_modules/selenium-webdriver'); - }); - - // For now, we only test on Chrome, - // as Safari does not load the page with Protractor's injected scripts, - // and Firefox webdriver always disables content security policy (#6358) - if (browser.params.browser !== 'chrome') { - return; - } - - it('should not report errors when the page is loaded', function() { - // clear errors so we are not dependent on previous tests - clearErrors(); - // Need to reload the page as the page is already loaded when - // we come here - browser.driver.getCurrentUrl().then(function(url) { - browser.get(url); - }); - expectNoErrors(); - }); - - it('should evaluate expressions', function() { - expect(counter.getText()).toEqual('0'); - incBtn.click(); - expect(counter.getText()).toEqual('1'); - expectNoErrors(); - }); - - it('should throw and report an error when using "eval"', function() { - evilBtn.click(); - expect(evilError.getText()).toMatch(/Content Security Policy/); - expectError(/Content Security Policy/); - }); - </file> - </example> - */ - -// ngCsp is not implemented as a proper directive any more, because we need it be processed while we -// bootstrap the system (before $parse is instantiated), for this reason we just have -// the csp.isActive() fn that looks for ng-csp attribute anywhere in the current doc - -/** - * @ngdoc directive - * @name ngClick - * - * @description - * The ngClick directive allows you to specify custom behavior when - * an element is clicked. - * - * @element ANY - * @priority 0 - * @param {expression} ngClick {@link guide/expression Expression} to evaluate upon - * click. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <button ng-click="count = count + 1" ng-init="count=0"> - Increment - </button> - <span> - count: {{count}} - </span> - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-click', function() { - expect(element(by.binding('count')).getText()).toMatch('0'); - element(by.css('button')).click(); - expect(element(by.binding('count')).getText()).toMatch('1'); - }); - </file> - </example> - */ -/* - * A collection of directives that allows creation of custom event handlers that are defined as - * angular expressions and are compiled and executed within the current scope. - */ -var ngEventDirectives = {}; - -// For events that might fire synchronously during DOM manipulation -// we need to execute their event handlers asynchronously using $evalAsync, -// so that they are not executed in an inconsistent state. -var forceAsyncEvents = { - 'blur': true, - 'focus': true -}; -forEach( - 'click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste'.split(' '), - function(eventName) { - var directiveName = directiveNormalize('ng-' + eventName); - ngEventDirectives[directiveName] = ['$parse', '$rootScope', function($parse, $rootScope) { - return { - restrict: 'A', - compile: function($element, attr) { - // We expose the powerful $event object on the scope that provides access to the Window, - // etc. that isn't protected by the fast paths in $parse. We explicitly request better - // checks at the cost of speed since event handler expressions are not executed as - // frequently as regular change detection. - var fn = $parse(attr[directiveName], /* interceptorFn */ null, /* expensiveChecks */ true); - return function ngEventHandler(scope, element) { - element.on(eventName, function(event) { - var callback = function() { - fn(scope, {$event:event}); - }; - if (forceAsyncEvents[eventName] && $rootScope.$$phase) { - scope.$evalAsync(callback); - } else { - scope.$apply(callback); - } - }); - }; - } - }; - }]; - } -); - -/** - * @ngdoc directive - * @name ngDblclick - * - * @description - * The `ngDblclick` directive allows you to specify custom behavior on a dblclick event. - * - * @element ANY - * @priority 0 - * @param {expression} ngDblclick {@link guide/expression Expression} to evaluate upon - * a dblclick. (The Event object is available as `$event`) - * - * @example - <example> - <file name="index.html"> - <button ng-dblclick="count = count + 1" ng-init="count=0"> - Increment (on double click) - </button> - count: {{count}} - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngMousedown - * - * @description - * The ngMousedown directive allows you to specify custom behavior on mousedown event. - * - * @element ANY - * @priority 0 - * @param {expression} ngMousedown {@link guide/expression Expression} to evaluate upon - * mousedown. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <button ng-mousedown="count = count + 1" ng-init="count=0"> - Increment (on mouse down) - </button> - count: {{count}} - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngMouseup - * - * @description - * Specify custom behavior on mouseup event. - * - * @element ANY - * @priority 0 - * @param {expression} ngMouseup {@link guide/expression Expression} to evaluate upon - * mouseup. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <button ng-mouseup="count = count + 1" ng-init="count=0"> - Increment (on mouse up) - </button> - count: {{count}} - </file> - </example> - */ - -/** - * @ngdoc directive - * @name ngMouseover - * - * @description - * Specify custom behavior on mouseover event. - * - * @element ANY - * @priority 0 - * @param {expression} ngMouseover {@link guide/expression Expression} to evaluate upon - * mouseover. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <button ng-mouseover="count = count + 1" ng-init="count=0"> - Increment (when mouse is over) - </button> - count: {{count}} - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngMouseenter - * - * @description - * Specify custom behavior on mouseenter event. - * - * @element ANY - * @priority 0 - * @param {expression} ngMouseenter {@link guide/expression Expression} to evaluate upon - * mouseenter. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <button ng-mouseenter="count = count + 1" ng-init="count=0"> - Increment (when mouse enters) - </button> - count: {{count}} - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngMouseleave - * - * @description - * Specify custom behavior on mouseleave event. - * - * @element ANY - * @priority 0 - * @param {expression} ngMouseleave {@link guide/expression Expression} to evaluate upon - * mouseleave. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <button ng-mouseleave="count = count + 1" ng-init="count=0"> - Increment (when mouse leaves) - </button> - count: {{count}} - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngMousemove - * - * @description - * Specify custom behavior on mousemove event. - * - * @element ANY - * @priority 0 - * @param {expression} ngMousemove {@link guide/expression Expression} to evaluate upon - * mousemove. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <button ng-mousemove="count = count + 1" ng-init="count=0"> - Increment (when mouse moves) - </button> - count: {{count}} - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngKeydown - * - * @description - * Specify custom behavior on keydown event. - * - * @element ANY - * @priority 0 - * @param {expression} ngKeydown {@link guide/expression Expression} to evaluate upon - * keydown. (Event object is available as `$event` and can be interrogated for keyCode, altKey, etc.) - * - * @example - <example> - <file name="index.html"> - <input ng-keydown="count = count + 1" ng-init="count=0"> - key down count: {{count}} - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngKeyup - * - * @description - * Specify custom behavior on keyup event. - * - * @element ANY - * @priority 0 - * @param {expression} ngKeyup {@link guide/expression Expression} to evaluate upon - * keyup. (Event object is available as `$event` and can be interrogated for keyCode, altKey, etc.) - * - * @example - <example> - <file name="index.html"> - <p>Typing in the input box below updates the key count</p> - <input ng-keyup="count = count + 1" ng-init="count=0"> key up count: {{count}} - - <p>Typing in the input box below updates the keycode</p> - <input ng-keyup="event=$event"> - <p>event keyCode: {{ event.keyCode }}</p> - <p>event altKey: {{ event.altKey }}</p> - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngKeypress - * - * @description - * Specify custom behavior on keypress event. - * - * @element ANY - * @param {expression} ngKeypress {@link guide/expression Expression} to evaluate upon - * keypress. ({@link guide/expression#-event- Event object is available as `$event`} - * and can be interrogated for keyCode, altKey, etc.) - * - * @example - <example> - <file name="index.html"> - <input ng-keypress="count = count + 1" ng-init="count=0"> - key press count: {{count}} - </file> - </example> - */ - - -/** - * @ngdoc directive - * @name ngSubmit - * - * @description - * Enables binding angular expressions to onsubmit events. - * - * Additionally it prevents the default action (which for form means sending the request to the - * server and reloading the current page), but only if the form does not contain `action`, - * `data-action`, or `x-action` attributes. - * - * <div class="alert alert-warning"> - * **Warning:** Be careful not to cause "double-submission" by using both the `ngClick` and - * `ngSubmit` handlers together. See the - * {@link form#submitting-a-form-and-preventing-the-default-action `form` directive documentation} - * for a detailed discussion of when `ngSubmit` may be triggered. - * </div> - * - * @element form - * @priority 0 - * @param {expression} ngSubmit {@link guide/expression Expression} to eval. - * ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example module="submitExample"> - <file name="index.html"> - <script> - angular.module('submitExample', []) - .controller('ExampleController', ['$scope', function($scope) { - $scope.list = []; - $scope.text = 'hello'; - $scope.submit = function() { - if ($scope.text) { - $scope.list.push(this.text); - $scope.text = ''; - } - }; - }]); - </script> - <form ng-submit="submit()" ng-controller="ExampleController"> - Enter text and hit enter: - <input type="text" ng-model="text" name="text" /> - <input type="submit" id="submit" value="Submit" /> - <pre>list={{list}}</pre> - </form> - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-submit', function() { - expect(element(by.binding('list')).getText()).toBe('list=[]'); - element(by.css('#submit')).click(); - expect(element(by.binding('list')).getText()).toContain('hello'); - expect(element(by.model('text')).getAttribute('value')).toBe(''); - }); - it('should ignore empty strings', function() { - expect(element(by.binding('list')).getText()).toBe('list=[]'); - element(by.css('#submit')).click(); - element(by.css('#submit')).click(); - expect(element(by.binding('list')).getText()).toContain('hello'); - }); - </file> - </example> - */ - -/** - * @ngdoc directive - * @name ngFocus - * - * @description - * Specify custom behavior on focus event. - * - * Note: As the `focus` event is executed synchronously when calling `input.focus()` - * AngularJS executes the expression using `scope.$evalAsync` if the event is fired - * during an `$apply` to ensure a consistent state. - * - * @element window, input, select, textarea, a - * @priority 0 - * @param {expression} ngFocus {@link guide/expression Expression} to evaluate upon - * focus. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - * See {@link ng.directive:ngClick ngClick} - */ - -/** - * @ngdoc directive - * @name ngBlur - * - * @description - * Specify custom behavior on blur event. - * - * A [blur event](https://developer.mozilla.org/en-US/docs/Web/Events/blur) fires when - * an element has lost focus. - * - * Note: As the `blur` event is executed synchronously also during DOM manipulations - * (e.g. removing a focussed input), - * AngularJS executes the expression using `scope.$evalAsync` if the event is fired - * during an `$apply` to ensure a consistent state. - * - * @element window, input, select, textarea, a - * @priority 0 - * @param {expression} ngBlur {@link guide/expression Expression} to evaluate upon - * blur. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - * See {@link ng.directive:ngClick ngClick} - */ - -/** - * @ngdoc directive - * @name ngCopy - * - * @description - * Specify custom behavior on copy event. - * - * @element window, input, select, textarea, a - * @priority 0 - * @param {expression} ngCopy {@link guide/expression Expression} to evaluate upon - * copy. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <input ng-copy="copied=true" ng-init="copied=false; value='copy me'" ng-model="value"> - copied: {{copied}} - </file> - </example> - */ - -/** - * @ngdoc directive - * @name ngCut - * - * @description - * Specify custom behavior on cut event. - * - * @element window, input, select, textarea, a - * @priority 0 - * @param {expression} ngCut {@link guide/expression Expression} to evaluate upon - * cut. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <input ng-cut="cut=true" ng-init="cut=false; value='cut me'" ng-model="value"> - cut: {{cut}} - </file> - </example> - */ - -/** - * @ngdoc directive - * @name ngPaste - * - * @description - * Specify custom behavior on paste event. - * - * @element window, input, select, textarea, a - * @priority 0 - * @param {expression} ngPaste {@link guide/expression Expression} to evaluate upon - * paste. ({@link guide/expression#-event- Event object is available as `$event`}) - * - * @example - <example> - <file name="index.html"> - <input ng-paste="paste=true" ng-init="paste=false" placeholder='paste here'> - pasted: {{paste}} - </file> - </example> - */ - -/** - * @ngdoc directive - * @name ngIf - * @restrict A - * - * @description - * The `ngIf` directive removes or recreates a portion of the DOM tree based on an - * {expression}. If the expression assigned to `ngIf` evaluates to a false - * value then the element is removed from the DOM, otherwise a clone of the - * element is reinserted into the DOM. - * - * `ngIf` differs from `ngShow` and `ngHide` in that `ngIf` completely removes and recreates the - * element in the DOM rather than changing its visibility via the `display` css property. A common - * case when this difference is significant is when using css selectors that rely on an element's - * position within the DOM, such as the `:first-child` or `:last-child` pseudo-classes. - * - * Note that when an element is removed using `ngIf` its scope is destroyed and a new scope - * is created when the element is restored. The scope created within `ngIf` inherits from - * its parent scope using - * [prototypal inheritance](https://github.com/angular/angular.js/wiki/Understanding-Scopes#javascript-prototypal-inheritance). - * An important implication of this is if `ngModel` is used within `ngIf` to bind to - * a javascript primitive defined in the parent scope. In this case any modifications made to the - * variable within the child scope will override (hide) the value in the parent scope. - * - * Also, `ngIf` recreates elements using their compiled state. An example of this behavior - * is if an element's class attribute is directly modified after it's compiled, using something like - * jQuery's `.addClass()` method, and the element is later removed. When `ngIf` recreates the element - * the added class will be lost because the original compiled state is used to regenerate the element. - * - * Additionally, you can provide animations via the `ngAnimate` module to animate the `enter` - * and `leave` effects. - * - * @animations - * enter - happens just after the `ngIf` contents change and a new DOM element is created and injected into the `ngIf` container - * leave - happens just before the `ngIf` contents are removed from the DOM - * - * @element ANY - * @scope - * @priority 600 - * @param {expression} ngIf If the {@link guide/expression expression} is falsy then - * the element is removed from the DOM tree. If it is truthy a copy of the compiled - * element is added to the DOM tree. - * - * @example - <example module="ngAnimate" deps="angular-animate.js" animations="true"> - <file name="index.html"> - Click me: <input type="checkbox" ng-model="checked" ng-init="checked=true" /><br/> - Show when checked: - <span ng-if="checked" class="animate-if"> - This is removed when the checkbox is unchecked. - </span> - </file> - <file name="animations.css"> - .animate-if { - background:white; - border:1px solid black; - padding:10px; - } - - .animate-if.ng-enter, .animate-if.ng-leave { - -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; - transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; - } - - .animate-if.ng-enter, - .animate-if.ng-leave.ng-leave-active { - opacity:0; - } - - .animate-if.ng-leave, - .animate-if.ng-enter.ng-enter-active { - opacity:1; - } - </file> - </example> - */ -var ngIfDirective = ['$animate', function($animate) { - return { - multiElement: true, - transclude: 'element', - priority: 600, - terminal: true, - restrict: 'A', - $$tlb: true, - link: function($scope, $element, $attr, ctrl, $transclude) { - var block, childScope, previousElements; - $scope.$watch($attr.ngIf, function ngIfWatchAction(value) { - - if (value) { - if (!childScope) { - $transclude(function(clone, newScope) { - childScope = newScope; - clone[clone.length++] = document.createComment(' end ngIf: ' + $attr.ngIf + ' '); - // Note: We only need the first/last node of the cloned nodes. - // However, we need to keep the reference to the jqlite wrapper as it might be changed later - // by a directive with templateUrl when its template arrives. - block = { - clone: clone - }; - $animate.enter(clone, $element.parent(), $element); - }); - } - } else { - if (previousElements) { - previousElements.remove(); - previousElements = null; - } - if (childScope) { - childScope.$destroy(); - childScope = null; - } - if (block) { - previousElements = getBlockNodes(block.clone); - $animate.leave(previousElements).then(function() { - previousElements = null; - }); - block = null; - } - } - }); - } - }; -}]; - -/** - * @ngdoc directive - * @name ngInclude - * @restrict ECA - * - * @description - * Fetches, compiles and includes an external HTML fragment. - * - * By default, the template URL is restricted to the same domain and protocol as the - * application document. This is done by calling {@link $sce#getTrustedResourceUrl - * $sce.getTrustedResourceUrl} on it. To load templates from other domains or protocols - * you may either {@link ng.$sceDelegateProvider#resourceUrlWhitelist whitelist them} or - * {@link $sce#trustAsResourceUrl wrap them} as trusted values. Refer to Angular's {@link - * ng.$sce Strict Contextual Escaping}. - * - * In addition, the browser's - * [Same Origin Policy](https://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest) - * and [Cross-Origin Resource Sharing (CORS)](http://www.w3.org/TR/cors/) - * policy may further restrict whether the template is successfully loaded. - * For example, `ngInclude` won't work for cross-domain requests on all browsers and for `file://` - * access on some browsers. - * - * @animations - * enter - animation is used to bring new content into the browser. - * leave - animation is used to animate existing content away. - * - * The enter and leave animation occur concurrently. - * - * @scope - * @priority 400 - * - * @param {string} ngInclude|src angular expression evaluating to URL. If the source is a string constant, - * make sure you wrap it in **single** quotes, e.g. `src="'myPartialTemplate.html'"`. - * @param {string=} onload Expression to evaluate when a new partial is loaded. - * - * @param {string=} autoscroll Whether `ngInclude` should call {@link ng.$anchorScroll - * $anchorScroll} to scroll the viewport after the content is loaded. - * - * - If the attribute is not set, disable scrolling. - * - If the attribute is set without value, enable scrolling. - * - Otherwise enable scrolling only if the expression evaluates to truthy value. - * - * @example - <example module="includeExample" deps="angular-animate.js" animations="true"> - <file name="index.html"> - <div ng-controller="ExampleController"> - <select ng-model="template" ng-options="t.name for t in templates"> - <option value="">(blank)</option> - </select> - url of the template: <code>{{template.url}}</code> - <hr/> - <div class="slide-animate-container"> - <div class="slide-animate" ng-include="template.url"></div> - </div> - </div> - </file> - <file name="script.js"> - angular.module('includeExample', ['ngAnimate']) - .controller('ExampleController', ['$scope', function($scope) { - $scope.templates = - [ { name: 'template1.html', url: 'template1.html'}, - { name: 'template2.html', url: 'template2.html'} ]; - $scope.template = $scope.templates[0]; - }]); - </file> - <file name="template1.html"> - Content of template1.html - </file> - <file name="template2.html"> - Content of template2.html - </file> - <file name="animations.css"> - .slide-animate-container { - position:relative; - background:white; - border:1px solid black; - height:40px; - overflow:hidden; - } - - .slide-animate { - padding:10px; - } - - .slide-animate.ng-enter, .slide-animate.ng-leave { - -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; - transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; - - position:absolute; - top:0; - left:0; - right:0; - bottom:0; - display:block; - padding:10px; - } - - .slide-animate.ng-enter { - top:-50px; - } - .slide-animate.ng-enter.ng-enter-active { - top:0; - } - - .slide-animate.ng-leave { - top:0; - } - .slide-animate.ng-leave.ng-leave-active { - top:50px; - } - </file> - <file name="protractor.js" type="protractor"> - var templateSelect = element(by.model('template')); - var includeElem = element(by.css('[ng-include]')); - - it('should load template1.html', function() { - expect(includeElem.getText()).toMatch(/Content of template1.html/); - }); - - it('should load template2.html', function() { - if (browser.params.browser == 'firefox') { - // Firefox can't handle using selects - // See https://github.com/angular/protractor/issues/480 - return; - } - templateSelect.click(); - templateSelect.all(by.css('option')).get(2).click(); - expect(includeElem.getText()).toMatch(/Content of template2.html/); - }); - - it('should change to blank', function() { - if (browser.params.browser == 'firefox') { - // Firefox can't handle using selects - return; - } - templateSelect.click(); - templateSelect.all(by.css('option')).get(0).click(); - expect(includeElem.isPresent()).toBe(false); - }); - </file> - </example> - */ - - -/** - * @ngdoc event - * @name ngInclude#$includeContentRequested - * @eventType emit on the scope ngInclude was declared in - * @description - * Emitted every time the ngInclude content is requested. - * - * @param {Object} angularEvent Synthetic event object. - * @param {String} src URL of content to load. - */ - - -/** - * @ngdoc event - * @name ngInclude#$includeContentLoaded - * @eventType emit on the current ngInclude scope - * @description - * Emitted every time the ngInclude content is reloaded. - * - * @param {Object} angularEvent Synthetic event object. - * @param {String} src URL of content to load. - */ - - -/** - * @ngdoc event - * @name ngInclude#$includeContentError - * @eventType emit on the scope ngInclude was declared in - * @description - * Emitted when a template HTTP request yields an erroneous response (status < 200 || status > 299) - * - * @param {Object} angularEvent Synthetic event object. - * @param {String} src URL of content to load. - */ -var ngIncludeDirective = ['$templateRequest', '$anchorScroll', '$animate', '$sce', - function($templateRequest, $anchorScroll, $animate, $sce) { - return { - restrict: 'ECA', - priority: 400, - terminal: true, - transclude: 'element', - controller: angular.noop, - compile: function(element, attr) { - var srcExp = attr.ngInclude || attr.src, - onloadExp = attr.onload || '', - autoScrollExp = attr.autoscroll; - - return function(scope, $element, $attr, ctrl, $transclude) { - var changeCounter = 0, - currentScope, - previousElement, - currentElement; - - var cleanupLastIncludeContent = function() { - if (previousElement) { - previousElement.remove(); - previousElement = null; - } - if (currentScope) { - currentScope.$destroy(); - currentScope = null; - } - if (currentElement) { - $animate.leave(currentElement).then(function() { - previousElement = null; - }); - previousElement = currentElement; - currentElement = null; - } - }; - - scope.$watch($sce.parseAsResourceUrl(srcExp), function ngIncludeWatchAction(src) { - var afterAnimation = function() { - if (isDefined(autoScrollExp) && (!autoScrollExp || scope.$eval(autoScrollExp))) { - $anchorScroll(); - } - }; - var thisChangeId = ++changeCounter; - - if (src) { - //set the 2nd param to true to ignore the template request error so that the inner - //contents and scope can be cleaned up. - $templateRequest(src, true).then(function(response) { - if (thisChangeId !== changeCounter) return; - var newScope = scope.$new(); - ctrl.template = response; - - // Note: This will also link all children of ng-include that were contained in the original - // html. If that content contains controllers, ... they could pollute/change the scope. - // However, using ng-include on an element with additional content does not make sense... - // Note: We can't remove them in the cloneAttchFn of $transclude as that - // function is called before linking the content, which would apply child - // directives to non existing elements. - var clone = $transclude(newScope, function(clone) { - cleanupLastIncludeContent(); - $animate.enter(clone, null, $element).then(afterAnimation); - }); - - currentScope = newScope; - currentElement = clone; - - currentScope.$emit('$includeContentLoaded', src); - scope.$eval(onloadExp); - }, function() { - if (thisChangeId === changeCounter) { - cleanupLastIncludeContent(); - scope.$emit('$includeContentError', src); - } - }); - scope.$emit('$includeContentRequested', src); - } else { - cleanupLastIncludeContent(); - ctrl.template = null; - } - }); - }; - } - }; -}]; - -// This directive is called during the $transclude call of the first `ngInclude` directive. -// It will replace and compile the content of the element with the loaded template. -// We need this directive so that the element content is already filled when -// the link function of another directive on the same element as ngInclude -// is called. -var ngIncludeFillContentDirective = ['$compile', - function($compile) { - return { - restrict: 'ECA', - priority: -400, - require: 'ngInclude', - link: function(scope, $element, $attr, ctrl) { - if (/SVG/.test($element[0].toString())) { - // WebKit: https://bugs.webkit.org/show_bug.cgi?id=135698 --- SVG elements do not - // support innerHTML, so detect this here and try to generate the contents - // specially. - $element.empty(); - $compile(jqLiteBuildFragment(ctrl.template, document).childNodes)(scope, - function namespaceAdaptedClone(clone) { - $element.append(clone); - }, {futureParentElement: $element}); - return; - } - - $element.html(ctrl.template); - $compile($element.contents())(scope); - } - }; - }]; - -/** - * @ngdoc directive - * @name ngInit - * @restrict AC - * - * @description - * The `ngInit` directive allows you to evaluate an expression in the - * current scope. - * - * <div class="alert alert-error"> - * The only appropriate use of `ngInit` is for aliasing special properties of - * {@link ng.directive:ngRepeat `ngRepeat`}, as seen in the demo below. Besides this case, you - * should use {@link guide/controller controllers} rather than `ngInit` - * to initialize values on a scope. - * </div> - * <div class="alert alert-warning"> - * **Note**: If you have assignment in `ngInit` along with {@link ng.$filter `$filter`}, make - * sure you have parenthesis for correct precedence: - * <pre class="prettyprint"> - * `<div ng-init="test1 = (data | orderBy:'name')"></div>` - * </pre> - * </div> - * - * @priority 450 - * - * @element ANY - * @param {expression} ngInit {@link guide/expression Expression} to eval. - * - * @example - <example module="initExample"> - <file name="index.html"> - <script> - angular.module('initExample', []) - .controller('ExampleController', ['$scope', function($scope) { - $scope.list = [['a', 'b'], ['c', 'd']]; - }]); - </script> - <div ng-controller="ExampleController"> - <div ng-repeat="innerList in list" ng-init="outerIndex = $index"> - <div ng-repeat="value in innerList" ng-init="innerIndex = $index"> - <span class="example-init">list[ {{outerIndex}} ][ {{innerIndex}} ] = {{value}};</span> - </div> - </div> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should alias index positions', function() { - var elements = element.all(by.css('.example-init')); - expect(elements.get(0).getText()).toBe('list[ 0 ][ 0 ] = a;'); - expect(elements.get(1).getText()).toBe('list[ 0 ][ 1 ] = b;'); - expect(elements.get(2).getText()).toBe('list[ 1 ][ 0 ] = c;'); - expect(elements.get(3).getText()).toBe('list[ 1 ][ 1 ] = d;'); - }); - </file> - </example> - */ -var ngInitDirective = ngDirective({ - priority: 450, - compile: function() { - return { - pre: function(scope, element, attrs) { - scope.$eval(attrs.ngInit); - } - }; - } -}); - -/** - * @ngdoc directive - * @name ngList - * - * @description - * Text input that converts between a delimited string and an array of strings. The default - * delimiter is a comma followed by a space - equivalent to `ng-list=", "`. You can specify a custom - * delimiter as the value of the `ngList` attribute - for example, `ng-list=" | "`. - * - * The behaviour of the directive is affected by the use of the `ngTrim` attribute. - * * If `ngTrim` is set to `"false"` then whitespace around both the separator and each - * list item is respected. This implies that the user of the directive is responsible for - * dealing with whitespace but also allows you to use whitespace as a delimiter, such as a - * tab or newline character. - * * Otherwise whitespace around the delimiter is ignored when splitting (although it is respected - * when joining the list items back together) and whitespace around each list item is stripped - * before it is added to the model. - * - * ### Example with Validation - * - * <example name="ngList-directive" module="listExample"> - * <file name="app.js"> - * angular.module('listExample', []) - * .controller('ExampleController', ['$scope', function($scope) { - * $scope.names = ['morpheus', 'neo', 'trinity']; - * }]); - * </file> - * <file name="index.html"> - * <form name="myForm" ng-controller="ExampleController"> - * List: <input name="namesInput" ng-model="names" ng-list required> - * <span class="error" ng-show="myForm.namesInput.$error.required"> - * Required!</span> - * <br> - * <tt>names = {{names}}</tt><br/> - * <tt>myForm.namesInput.$valid = {{myForm.namesInput.$valid}}</tt><br/> - * <tt>myForm.namesInput.$error = {{myForm.namesInput.$error}}</tt><br/> - * <tt>myForm.$valid = {{myForm.$valid}}</tt><br/> - * <tt>myForm.$error.required = {{!!myForm.$error.required}}</tt><br/> - * </form> - * </file> - * <file name="protractor.js" type="protractor"> - * var listInput = element(by.model('names')); - * var names = element(by.exactBinding('names')); - * var valid = element(by.binding('myForm.namesInput.$valid')); - * var error = element(by.css('span.error')); - * - * it('should initialize to model', function() { - * expect(names.getText()).toContain('["morpheus","neo","trinity"]'); - * expect(valid.getText()).toContain('true'); - * expect(error.getCssValue('display')).toBe('none'); - * }); - * - * it('should be invalid if empty', function() { - * listInput.clear(); - * listInput.sendKeys(''); - * - * expect(names.getText()).toContain(''); - * expect(valid.getText()).toContain('false'); - * expect(error.getCssValue('display')).not.toBe('none'); - * }); - * </file> - * </example> - * - * ### Example - splitting on whitespace - * <example name="ngList-directive-newlines"> - * <file name="index.html"> - * <textarea ng-model="list" ng-list=" " ng-trim="false"></textarea> - * <pre>{{ list | json }}</pre> - * </file> - * <file name="protractor.js" type="protractor"> - * it("should split the text by newlines", function() { - * var listInput = element(by.model('list')); - * var output = element(by.binding('list | json')); - * listInput.sendKeys('abc\ndef\nghi'); - * expect(output.getText()).toContain('[\n "abc",\n "def",\n "ghi"\n]'); - * }); - * </file> - * </example> - * - * @element input - * @param {string=} ngList optional delimiter that should be used to split the value. - */ -var ngListDirective = function() { - return { - restrict: 'A', - priority: 100, - require: 'ngModel', - link: function(scope, element, attr, ctrl) { - // We want to control whitespace trimming so we use this convoluted approach - // to access the ngList attribute, which doesn't pre-trim the attribute - var ngList = element.attr(attr.$attr.ngList) || ', '; - var trimValues = attr.ngTrim !== 'false'; - var separator = trimValues ? trim(ngList) : ngList; - - var parse = function(viewValue) { - // If the viewValue is invalid (say required but empty) it will be `undefined` - if (isUndefined(viewValue)) return; - - var list = []; - - if (viewValue) { - forEach(viewValue.split(separator), function(value) { - if (value) list.push(trimValues ? trim(value) : value); - }); - } - - return list; - }; - - ctrl.$parsers.push(parse); - ctrl.$formatters.push(function(value) { - if (isArray(value)) { - return value.join(ngList); - } - - return undefined; - }); - - // Override the standard $isEmpty because an empty array means the input is empty. - ctrl.$isEmpty = function(value) { - return !value || !value.length; - }; - } - }; -}; - -/* global VALID_CLASS: true, - INVALID_CLASS: true, - PRISTINE_CLASS: true, - DIRTY_CLASS: true, - UNTOUCHED_CLASS: true, - TOUCHED_CLASS: true, -*/ - -var VALID_CLASS = 'ng-valid', - INVALID_CLASS = 'ng-invalid', - PRISTINE_CLASS = 'ng-pristine', - DIRTY_CLASS = 'ng-dirty', - UNTOUCHED_CLASS = 'ng-untouched', - TOUCHED_CLASS = 'ng-touched', - PENDING_CLASS = 'ng-pending'; - - -var $ngModelMinErr = new minErr('ngModel'); - -/** - * @ngdoc type - * @name ngModel.NgModelController - * - * @property {string} $viewValue Actual string value in the view. - * @property {*} $modelValue The value in the model that the control is bound to. - * @property {Array.<Function>} $parsers Array of functions to execute, as a pipeline, whenever - the control reads value from the DOM. The functions are called in array order, each passing - its return value through to the next. The last return value is forwarded to the - {@link ngModel.NgModelController#$validators `$validators`} collection. - -Parsers are used to sanitize / convert the {@link ngModel.NgModelController#$viewValue -`$viewValue`}. - -Returning `undefined` from a parser means a parse error occurred. In that case, -no {@link ngModel.NgModelController#$validators `$validators`} will run and the `ngModel` -will be set to `undefined` unless {@link ngModelOptions `ngModelOptions.allowInvalid`} -is set to `true`. The parse error is stored in `ngModel.$error.parse`. - - * - * @property {Array.<Function>} $formatters Array of functions to execute, as a pipeline, whenever - the model value changes. The functions are called in reverse array order, each passing the value through to the - next. The last return value is used as the actual DOM value. - Used to format / convert values for display in the control. - * ```js - * function formatter(value) { - * if (value) { - * return value.toUpperCase(); - * } - * } - * ngModel.$formatters.push(formatter); - * ``` - * - * @property {Object.<string, function>} $validators A collection of validators that are applied - * whenever the model value changes. The key value within the object refers to the name of the - * validator while the function refers to the validation operation. The validation operation is - * provided with the model value as an argument and must return a true or false value depending - * on the response of that validation. - * - * ```js - * ngModel.$validators.validCharacters = function(modelValue, viewValue) { - * var value = modelValue || viewValue; - * return /[0-9]+/.test(value) && - * /[a-z]+/.test(value) && - * /[A-Z]+/.test(value) && - * /\W+/.test(value); - * }; - * ``` - * - * @property {Object.<string, function>} $asyncValidators A collection of validations that are expected to - * perform an asynchronous validation (e.g. a HTTP request). The validation function that is provided - * is expected to return a promise when it is run during the model validation process. Once the promise - * is delivered then the validation status will be set to true when fulfilled and false when rejected. - * When the asynchronous validators are triggered, each of the validators will run in parallel and the model - * value will only be updated once all validators have been fulfilled. As long as an asynchronous validator - * is unfulfilled, its key will be added to the controllers `$pending` property. Also, all asynchronous validators - * will only run once all synchronous validators have passed. - * - * Please note that if $http is used then it is important that the server returns a success HTTP response code - * in order to fulfill the validation and a status level of `4xx` in order to reject the validation. - * - * ```js - * ngModel.$asyncValidators.uniqueUsername = function(modelValue, viewValue) { - * var value = modelValue || viewValue; - * - * // Lookup user by username - * return $http.get('/api/users/' + value). - * then(function resolved() { - * //username exists, this means validation fails - * return $q.reject('exists'); - * }, function rejected() { - * //username does not exist, therefore this validation passes - * return true; - * }); - * }; - * ``` - * - * @property {Array.<Function>} $viewChangeListeners Array of functions to execute whenever the - * view value has changed. It is called with no arguments, and its return value is ignored. - * This can be used in place of additional $watches against the model value. - * - * @property {Object} $error An object hash with all failing validator ids as keys. - * @property {Object} $pending An object hash with all pending validator ids as keys. - * - * @property {boolean} $untouched True if control has not lost focus yet. - * @property {boolean} $touched True if control has lost focus. - * @property {boolean} $pristine True if user has not interacted with the control yet. - * @property {boolean} $dirty True if user has already interacted with the control. - * @property {boolean} $valid True if there is no error. - * @property {boolean} $invalid True if at least one error on the control. - * @property {string} $name The name attribute of the control. - * - * @description - * - * `NgModelController` provides API for the {@link ngModel `ngModel`} directive. - * The controller contains services for data-binding, validation, CSS updates, and value formatting - * and parsing. It purposefully does not contain any logic which deals with DOM rendering or - * listening to DOM events. - * Such DOM related logic should be provided by other directives which make use of - * `NgModelController` for data-binding to control elements. - * Angular provides this DOM logic for most {@link input `input`} elements. - * At the end of this page you can find a {@link ngModel.NgModelController#custom-control-example - * custom control example} that uses `ngModelController` to bind to `contenteditable` elements. - * - * @example - * ### Custom Control Example - * This example shows how to use `NgModelController` with a custom control to achieve - * data-binding. Notice how different directives (`contenteditable`, `ng-model`, and `required`) - * collaborate together to achieve the desired result. - * - * Note that `contenteditable` is an HTML5 attribute, which tells the browser to let the element - * contents be edited in place by the user. This will not work on older browsers. - * - * We are using the {@link ng.service:$sce $sce} service here and include the {@link ngSanitize $sanitize} - * module to automatically remove "bad" content like inline event listener (e.g. `<span onclick="...">`). - * However, as we are using `$sce` the model can still decide to provide unsafe content if it marks - * that content using the `$sce` service. - * - * <example name="NgModelController" module="customControl" deps="angular-sanitize.js"> - <file name="style.css"> - [contenteditable] { - border: 1px solid black; - background-color: white; - min-height: 20px; - } - - .ng-invalid { - border: 1px solid red; - } - - </file> - <file name="script.js"> - angular.module('customControl', ['ngSanitize']). - directive('contenteditable', ['$sce', function($sce) { - return { - restrict: 'A', // only activate on element attribute - require: '?ngModel', // get a hold of NgModelController - link: function(scope, element, attrs, ngModel) { - if (!ngModel) return; // do nothing if no ng-model - - // Specify how UI should be updated - ngModel.$render = function() { - element.html($sce.getTrustedHtml(ngModel.$viewValue || '')); - }; - - // Listen for change events to enable binding - element.on('blur keyup change', function() { - scope.$evalAsync(read); - }); - read(); // initialize - - // Write data to the model - function read() { - var html = element.html(); - // When we clear the content editable the browser leaves a <br> behind - // If strip-br attribute is provided then we strip this out - if ( attrs.stripBr && html == '<br>' ) { - html = ''; - } - ngModel.$setViewValue(html); - } - } - }; - }]); - </file> - <file name="index.html"> - <form name="myForm"> - <div contenteditable - name="myWidget" ng-model="userContent" - strip-br="true" - required>Change me!</div> - <span ng-show="myForm.myWidget.$error.required">Required!</span> - <hr> - <textarea ng-model="userContent"></textarea> - </form> - </file> - <file name="protractor.js" type="protractor"> - it('should data-bind and become invalid', function() { - if (browser.params.browser == 'safari' || browser.params.browser == 'firefox') { - // SafariDriver can't handle contenteditable - // and Firefox driver can't clear contenteditables very well - return; - } - var contentEditable = element(by.css('[contenteditable]')); - var content = 'Change me!'; - - expect(contentEditable.getText()).toEqual(content); - - contentEditable.clear(); - contentEditable.sendKeys(protractor.Key.BACK_SPACE); - expect(contentEditable.getText()).toEqual(''); - expect(contentEditable.getAttribute('class')).toMatch(/ng-invalid-required/); - }); - </file> - * </example> - * - * - */ -var NgModelController = ['$scope', '$exceptionHandler', '$attrs', '$element', '$parse', '$animate', '$timeout', '$rootScope', '$q', '$interpolate', - function($scope, $exceptionHandler, $attr, $element, $parse, $animate, $timeout, $rootScope, $q, $interpolate) { - this.$viewValue = Number.NaN; - this.$modelValue = Number.NaN; - this.$$rawModelValue = undefined; // stores the parsed modelValue / model set from scope regardless of validity. - this.$validators = {}; - this.$asyncValidators = {}; - this.$parsers = []; - this.$formatters = []; - this.$viewChangeListeners = []; - this.$untouched = true; - this.$touched = false; - this.$pristine = true; - this.$dirty = false; - this.$valid = true; - this.$invalid = false; - this.$error = {}; // keep invalid keys here - this.$$success = {}; // keep valid keys here - this.$pending = undefined; // keep pending keys here - this.$name = $interpolate($attr.name || '', false)($scope); - - - var parsedNgModel = $parse($attr.ngModel), - parsedNgModelAssign = parsedNgModel.assign, - ngModelGet = parsedNgModel, - ngModelSet = parsedNgModelAssign, - pendingDebounce = null, - ctrl = this; - - this.$$setOptions = function(options) { - ctrl.$options = options; - if (options && options.getterSetter) { - var invokeModelGetter = $parse($attr.ngModel + '()'), - invokeModelSetter = $parse($attr.ngModel + '($$$p)'); - - ngModelGet = function($scope) { - var modelValue = parsedNgModel($scope); - if (isFunction(modelValue)) { - modelValue = invokeModelGetter($scope); - } - return modelValue; - }; - ngModelSet = function($scope, newValue) { - if (isFunction(parsedNgModel($scope))) { - invokeModelSetter($scope, {$$$p: ctrl.$modelValue}); - } else { - parsedNgModelAssign($scope, ctrl.$modelValue); - } - }; - } else if (!parsedNgModel.assign) { - throw $ngModelMinErr('nonassign', "Expression '{0}' is non-assignable. Element: {1}", - $attr.ngModel, startingTag($element)); - } - }; - - /** - * @ngdoc method - * @name ngModel.NgModelController#$render - * - * @description - * Called when the view needs to be updated. It is expected that the user of the ng-model - * directive will implement this method. - * - * The `$render()` method is invoked in the following situations: - * - * * `$rollbackViewValue()` is called. If we are rolling back the view value to the last - * committed value then `$render()` is called to update the input control. - * * The value referenced by `ng-model` is changed programmatically and both the `$modelValue` and - * the `$viewValue` are different to last time. - * - * Since `ng-model` does not do a deep watch, `$render()` is only invoked if the values of - * `$modelValue` and `$viewValue` are actually different to their previous value. If `$modelValue` - * or `$viewValue` are objects (rather than a string or number) then `$render()` will not be - * invoked if you only change a property on the objects. - */ - this.$render = noop; - - /** - * @ngdoc method - * @name ngModel.NgModelController#$isEmpty - * - * @description - * This is called when we need to determine if the value of an input is empty. - * - * For instance, the required directive does this to work out if the input has data or not. - * - * The default `$isEmpty` function checks whether the value is `undefined`, `''`, `null` or `NaN`. - * - * You can override this for input directives whose concept of being empty is different to the - * default. The `checkboxInputType` directive does this because in its case a value of `false` - * implies empty. - * - * @param {*} value The value of the input to check for emptiness. - * @returns {boolean} True if `value` is "empty". - */ - this.$isEmpty = function(value) { - return isUndefined(value) || value === '' || value === null || value !== value; - }; - - var parentForm = $element.inheritedData('$formController') || nullFormCtrl, - currentValidationRunId = 0; - - /** - * @ngdoc method - * @name ngModel.NgModelController#$setValidity - * - * @description - * Change the validity state, and notify the form. - * - * This method can be called within $parsers/$formatters or a custom validation implementation. - * However, in most cases it should be sufficient to use the `ngModel.$validators` and - * `ngModel.$asyncValidators` collections which will call `$setValidity` automatically. - * - * @param {string} validationErrorKey Name of the validator. The `validationErrorKey` will be assigned - * to either `$error[validationErrorKey]` or `$pending[validationErrorKey]` - * (for unfulfilled `$asyncValidators`), so that it is available for data-binding. - * The `validationErrorKey` should be in camelCase and will get converted into dash-case - * for class name. Example: `myError` will result in `ng-valid-my-error` and `ng-invalid-my-error` - * class and can be bound to as `{{someForm.someControl.$error.myError}}` . - * @param {boolean} isValid Whether the current state is valid (true), invalid (false), pending (undefined), - * or skipped (null). Pending is used for unfulfilled `$asyncValidators`. - * Skipped is used by Angular when validators do not run because of parse errors and - * when `$asyncValidators` do not run because any of the `$validators` failed. - */ - addSetValidityMethod({ - ctrl: this, - $element: $element, - set: function(object, property) { - object[property] = true; - }, - unset: function(object, property) { - delete object[property]; - }, - parentForm: parentForm, - $animate: $animate - }); - - /** - * @ngdoc method - * @name ngModel.NgModelController#$setPristine - * - * @description - * Sets the control to its pristine state. - * - * This method can be called to remove the `ng-dirty` class and set the control to its pristine - * state (`ng-pristine` class). A model is considered to be pristine when the control - * has not been changed from when first compiled. - */ - this.$setPristine = function() { - ctrl.$dirty = false; - ctrl.$pristine = true; - $animate.removeClass($element, DIRTY_CLASS); - $animate.addClass($element, PRISTINE_CLASS); - }; - - /** - * @ngdoc method - * @name ngModel.NgModelController#$setDirty - * - * @description - * Sets the control to its dirty state. - * - * This method can be called to remove the `ng-pristine` class and set the control to its dirty - * state (`ng-dirty` class). A model is considered to be dirty when the control has been changed - * from when first compiled. - */ - this.$setDirty = function() { - ctrl.$dirty = true; - ctrl.$pristine = false; - $animate.removeClass($element, PRISTINE_CLASS); - $animate.addClass($element, DIRTY_CLASS); - parentForm.$setDirty(); - }; - - /** - * @ngdoc method - * @name ngModel.NgModelController#$setUntouched - * - * @description - * Sets the control to its untouched state. - * - * This method can be called to remove the `ng-touched` class and set the control to its - * untouched state (`ng-untouched` class). Upon compilation, a model is set as untouched - * by default, however this function can be used to restore that state if the model has - * already been touched by the user. - */ - this.$setUntouched = function() { - ctrl.$touched = false; - ctrl.$untouched = true; - $animate.setClass($element, UNTOUCHED_CLASS, TOUCHED_CLASS); - }; - - /** - * @ngdoc method - * @name ngModel.NgModelController#$setTouched - * - * @description - * Sets the control to its touched state. - * - * This method can be called to remove the `ng-untouched` class and set the control to its - * touched state (`ng-touched` class). A model is considered to be touched when the user has - * first focused the control element and then shifted focus away from the control (blur event). - */ - this.$setTouched = function() { - ctrl.$touched = true; - ctrl.$untouched = false; - $animate.setClass($element, TOUCHED_CLASS, UNTOUCHED_CLASS); - }; - - /** - * @ngdoc method - * @name ngModel.NgModelController#$rollbackViewValue - * - * @description - * Cancel an update and reset the input element's value to prevent an update to the `$modelValue`, - * which may be caused by a pending debounced event or because the input is waiting for a some - * future event. - * - * If you have an input that uses `ng-model-options` to set up debounced events or events such - * as blur you can have a situation where there is a period when the `$viewValue` - * is out of synch with the ngModel's `$modelValue`. - * - * In this case, you can run into difficulties if you try to update the ngModel's `$modelValue` - * programmatically before these debounced/future events have resolved/occurred, because Angular's - * dirty checking mechanism is not able to tell whether the model has actually changed or not. - * - * The `$rollbackViewValue()` method should be called before programmatically changing the model of an - * input which may have such events pending. This is important in order to make sure that the - * input field will be updated with the new model value and any pending operations are cancelled. - * - * <example name="ng-model-cancel-update" module="cancel-update-example"> - * <file name="app.js"> - * angular.module('cancel-update-example', []) - * - * .controller('CancelUpdateController', ['$scope', function($scope) { - * $scope.resetWithCancel = function(e) { - * if (e.keyCode == 27) { - * $scope.myForm.myInput1.$rollbackViewValue(); - * $scope.myValue = ''; - * } - * }; - * $scope.resetWithoutCancel = function(e) { - * if (e.keyCode == 27) { - * $scope.myValue = ''; - * } - * }; - * }]); - * </file> - * <file name="index.html"> - * <div ng-controller="CancelUpdateController"> - * <p>Try typing something in each input. See that the model only updates when you - * blur off the input. - * </p> - * <p>Now see what happens if you start typing then press the Escape key</p> - * - * <form name="myForm" ng-model-options="{ updateOn: 'blur' }"> - * <p>With $rollbackViewValue()</p> - * <input name="myInput1" ng-model="myValue" ng-keydown="resetWithCancel($event)"><br/> - * myValue: "{{ myValue }}" - * - * <p>Without $rollbackViewValue()</p> - * <input name="myInput2" ng-model="myValue" ng-keydown="resetWithoutCancel($event)"><br/> - * myValue: "{{ myValue }}" - * </form> - * </div> - * </file> - * </example> - */ - this.$rollbackViewValue = function() { - $timeout.cancel(pendingDebounce); - ctrl.$viewValue = ctrl.$$lastCommittedViewValue; - ctrl.$render(); - }; - - /** - * @ngdoc method - * @name ngModel.NgModelController#$validate - * - * @description - * Runs each of the registered validators (first synchronous validators and then - * asynchronous validators). - * If the validity changes to invalid, the model will be set to `undefined`, - * unless {@link ngModelOptions `ngModelOptions.allowInvalid`} is `true`. - * If the validity changes to valid, it will set the model to the last available valid - * modelValue, i.e. either the last parsed value or the last value set from the scope. - */ - this.$validate = function() { - // ignore $validate before model is initialized - if (isNumber(ctrl.$modelValue) && isNaN(ctrl.$modelValue)) { - return; - } - - var viewValue = ctrl.$$lastCommittedViewValue; - // Note: we use the $$rawModelValue as $modelValue might have been - // set to undefined during a view -> model update that found validation - // errors. We can't parse the view here, since that could change - // the model although neither viewValue nor the model on the scope changed - var modelValue = ctrl.$$rawModelValue; - - // Check if the there's a parse error, so we don't unset it accidentially - var parserName = ctrl.$$parserName || 'parse'; - var parserValid = ctrl.$error[parserName] ? false : undefined; - - var prevValid = ctrl.$valid; - var prevModelValue = ctrl.$modelValue; - - var allowInvalid = ctrl.$options && ctrl.$options.allowInvalid; - - ctrl.$$runValidators(parserValid, modelValue, viewValue, function(allValid) { - // If there was no change in validity, don't update the model - // This prevents changing an invalid modelValue to undefined - if (!allowInvalid && prevValid !== allValid) { - // Note: Don't check ctrl.$valid here, as we could have - // external validators (e.g. calculated on the server), - // that just call $setValidity and need the model value - // to calculate their validity. - ctrl.$modelValue = allValid ? modelValue : undefined; - - if (ctrl.$modelValue !== prevModelValue) { - ctrl.$$writeModelToScope(); - } - } - }); - - }; - - this.$$runValidators = function(parseValid, modelValue, viewValue, doneCallback) { - currentValidationRunId++; - var localValidationRunId = currentValidationRunId; - - // check parser error - if (!processParseErrors(parseValid)) { - validationDone(false); - return; - } - if (!processSyncValidators()) { - validationDone(false); - return; - } - processAsyncValidators(); - - function processParseErrors(parseValid) { - var errorKey = ctrl.$$parserName || 'parse'; - if (parseValid === undefined) { - setValidity(errorKey, null); - } else { - setValidity(errorKey, parseValid); - if (!parseValid) { - forEach(ctrl.$validators, function(v, name) { - setValidity(name, null); - }); - forEach(ctrl.$asyncValidators, function(v, name) { - setValidity(name, null); - }); - return false; - } - } - return true; - } - - function processSyncValidators() { - var syncValidatorsValid = true; - forEach(ctrl.$validators, function(validator, name) { - var result = validator(modelValue, viewValue); - syncValidatorsValid = syncValidatorsValid && result; - setValidity(name, result); - }); - if (!syncValidatorsValid) { - forEach(ctrl.$asyncValidators, function(v, name) { - setValidity(name, null); - }); - return false; - } - return true; - } - - function processAsyncValidators() { - var validatorPromises = []; - var allValid = true; - forEach(ctrl.$asyncValidators, function(validator, name) { - var promise = validator(modelValue, viewValue); - if (!isPromiseLike(promise)) { - throw $ngModelMinErr("$asyncValidators", - "Expected asynchronous validator to return a promise but got '{0}' instead.", promise); - } - setValidity(name, undefined); - validatorPromises.push(promise.then(function() { - setValidity(name, true); - }, function(error) { - allValid = false; - setValidity(name, false); - })); - }); - if (!validatorPromises.length) { - validationDone(true); - } else { - $q.all(validatorPromises).then(function() { - validationDone(allValid); - }, noop); - } - } - - function setValidity(name, isValid) { - if (localValidationRunId === currentValidationRunId) { - ctrl.$setValidity(name, isValid); - } - } - - function validationDone(allValid) { - if (localValidationRunId === currentValidationRunId) { - - doneCallback(allValid); - } - } - }; - - /** - * @ngdoc method - * @name ngModel.NgModelController#$commitViewValue - * - * @description - * Commit a pending update to the `$modelValue`. - * - * Updates may be pending by a debounced event or because the input is waiting for a some future - * event defined in `ng-model-options`. this method is rarely needed as `NgModelController` - * usually handles calling this in response to input events. - */ - this.$commitViewValue = function() { - var viewValue = ctrl.$viewValue; - - $timeout.cancel(pendingDebounce); - - // If the view value has not changed then we should just exit, except in the case where there is - // a native validator on the element. In this case the validation state may have changed even though - // the viewValue has stayed empty. - if (ctrl.$$lastCommittedViewValue === viewValue && (viewValue !== '' || !ctrl.$$hasNativeValidators)) { - return; - } - ctrl.$$lastCommittedViewValue = viewValue; - - // change to dirty - if (ctrl.$pristine) { - this.$setDirty(); - } - this.$$parseAndValidate(); - }; - - this.$$parseAndValidate = function() { - var viewValue = ctrl.$$lastCommittedViewValue; - var modelValue = viewValue; - var parserValid = isUndefined(modelValue) ? undefined : true; - - if (parserValid) { - for (var i = 0; i < ctrl.$parsers.length; i++) { - modelValue = ctrl.$parsers[i](modelValue); - if (isUndefined(modelValue)) { - parserValid = false; - break; - } - } - } - if (isNumber(ctrl.$modelValue) && isNaN(ctrl.$modelValue)) { - // ctrl.$modelValue has not been touched yet... - ctrl.$modelValue = ngModelGet($scope); - } - var prevModelValue = ctrl.$modelValue; - var allowInvalid = ctrl.$options && ctrl.$options.allowInvalid; - ctrl.$$rawModelValue = modelValue; - - if (allowInvalid) { - ctrl.$modelValue = modelValue; - writeToModelIfNeeded(); - } - - // Pass the $$lastCommittedViewValue here, because the cached viewValue might be out of date. - // This can happen if e.g. $setViewValue is called from inside a parser - ctrl.$$runValidators(parserValid, modelValue, ctrl.$$lastCommittedViewValue, function(allValid) { - if (!allowInvalid) { - // Note: Don't check ctrl.$valid here, as we could have - // external validators (e.g. calculated on the server), - // that just call $setValidity and need the model value - // to calculate their validity. - ctrl.$modelValue = allValid ? modelValue : undefined; - writeToModelIfNeeded(); - } - }); - - function writeToModelIfNeeded() { - if (ctrl.$modelValue !== prevModelValue) { - ctrl.$$writeModelToScope(); - } - } - }; - - this.$$writeModelToScope = function() { - ngModelSet($scope, ctrl.$modelValue); - forEach(ctrl.$viewChangeListeners, function(listener) { - try { - listener(); - } catch (e) { - $exceptionHandler(e); - } - }); - }; - - /** - * @ngdoc method - * @name ngModel.NgModelController#$setViewValue - * - * @description - * Update the view value. - * - * This method should be called when an input directive want to change the view value; typically, - * this is done from within a DOM event handler. - * - * For example {@link ng.directive:input input} calls it when the value of the input changes and - * {@link ng.directive:select select} calls it when an option is selected. - * - * If the new `value` is an object (rather than a string or a number), we should make a copy of the - * object before passing it to `$setViewValue`. This is because `ngModel` does not perform a deep - * watch of objects, it only looks for a change of identity. If you only change the property of - * the object then ngModel will not realise that the object has changed and will not invoke the - * `$parsers` and `$validators` pipelines. - * - * For this reason, you should not change properties of the copy once it has been passed to - * `$setViewValue`. Otherwise you may cause the model value on the scope to change incorrectly. - * - * When this method is called, the new `value` will be staged for committing through the `$parsers` - * and `$validators` pipelines. If there are no special {@link ngModelOptions} specified then the staged - * value sent directly for processing, finally to be applied to `$modelValue` and then the - * **expression** specified in the `ng-model` attribute. - * - * Lastly, all the registered change listeners, in the `$viewChangeListeners` list, are called. - * - * In case the {@link ng.directive:ngModelOptions ngModelOptions} directive is used with `updateOn` - * and the `default` trigger is not listed, all those actions will remain pending until one of the - * `updateOn` events is triggered on the DOM element. - * All these actions will be debounced if the {@link ng.directive:ngModelOptions ngModelOptions} - * directive is used with a custom debounce for this particular event. - * - * Note that calling this function does not trigger a `$digest`. - * - * @param {string} value Value from the view. - * @param {string} trigger Event that triggered the update. - */ - this.$setViewValue = function(value, trigger) { - ctrl.$viewValue = value; - if (!ctrl.$options || ctrl.$options.updateOnDefault) { - ctrl.$$debounceViewValueCommit(trigger); - } - }; - - this.$$debounceViewValueCommit = function(trigger) { - var debounceDelay = 0, - options = ctrl.$options, - debounce; - - if (options && isDefined(options.debounce)) { - debounce = options.debounce; - if (isNumber(debounce)) { - debounceDelay = debounce; - } else if (isNumber(debounce[trigger])) { - debounceDelay = debounce[trigger]; - } else if (isNumber(debounce['default'])) { - debounceDelay = debounce['default']; - } - } - - $timeout.cancel(pendingDebounce); - if (debounceDelay) { - pendingDebounce = $timeout(function() { - ctrl.$commitViewValue(); - }, debounceDelay); - } else if ($rootScope.$$phase) { - ctrl.$commitViewValue(); - } else { - $scope.$apply(function() { - ctrl.$commitViewValue(); - }); - } - }; - - // model -> value - // Note: we cannot use a normal scope.$watch as we want to detect the following: - // 1. scope value is 'a' - // 2. user enters 'b' - // 3. ng-change kicks in and reverts scope value to 'a' - // -> scope value did not change since the last digest as - // ng-change executes in apply phase - // 4. view should be changed back to 'a' - $scope.$watch(function ngModelWatch() { - var modelValue = ngModelGet($scope); - - // if scope model value and ngModel value are out of sync - // TODO(perf): why not move this to the action fn? - if (modelValue !== ctrl.$modelValue) { - ctrl.$modelValue = ctrl.$$rawModelValue = modelValue; - - var formatters = ctrl.$formatters, - idx = formatters.length; - - var viewValue = modelValue; - while (idx--) { - viewValue = formatters[idx](viewValue); - } - if (ctrl.$viewValue !== viewValue) { - ctrl.$viewValue = ctrl.$$lastCommittedViewValue = viewValue; - ctrl.$render(); - - ctrl.$$runValidators(undefined, modelValue, viewValue, noop); - } - } - - return modelValue; - }); -}]; - - -/** - * @ngdoc directive - * @name ngModel - * - * @element input - * @priority 1 - * - * @description - * The `ngModel` directive binds an `input`,`select`, `textarea` (or custom form control) to a - * property on the scope using {@link ngModel.NgModelController NgModelController}, - * which is created and exposed by this directive. - * - * `ngModel` is responsible for: - * - * - Binding the view into the model, which other directives such as `input`, `textarea` or `select` - * require. - * - Providing validation behavior (i.e. required, number, email, url). - * - Keeping the state of the control (valid/invalid, dirty/pristine, touched/untouched, validation errors). - * - Setting related css classes on the element (`ng-valid`, `ng-invalid`, `ng-dirty`, `ng-pristine`, `ng-touched`, `ng-untouched`) including animations. - * - Registering the control with its parent {@link ng.directive:form form}. - * - * Note: `ngModel` will try to bind to the property given by evaluating the expression on the - * current scope. If the property doesn't already exist on this scope, it will be created - * implicitly and added to the scope. - * - * For best practices on using `ngModel`, see: - * - * - [Understanding Scopes](https://github.com/angular/angular.js/wiki/Understanding-Scopes) - * - * For basic examples, how to use `ngModel`, see: - * - * - {@link ng.directive:input input} - * - {@link input[text] text} - * - {@link input[checkbox] checkbox} - * - {@link input[radio] radio} - * - {@link input[number] number} - * - {@link input[email] email} - * - {@link input[url] url} - * - {@link input[date] date} - * - {@link input[datetime-local] datetime-local} - * - {@link input[time] time} - * - {@link input[month] month} - * - {@link input[week] week} - * - {@link ng.directive:select select} - * - {@link ng.directive:textarea textarea} - * - * # CSS classes - * The following CSS classes are added and removed on the associated input/select/textarea element - * depending on the validity of the model. - * - * - `ng-valid`: the model is valid - * - `ng-invalid`: the model is invalid - * - `ng-valid-[key]`: for each valid key added by `$setValidity` - * - `ng-invalid-[key]`: for each invalid key added by `$setValidity` - * - `ng-pristine`: the control hasn't been interacted with yet - * - `ng-dirty`: the control has been interacted with - * - `ng-touched`: the control has been blurred - * - `ng-untouched`: the control hasn't been blurred - * - `ng-pending`: any `$asyncValidators` are unfulfilled - * - * Keep in mind that ngAnimate can detect each of these classes when added and removed. - * - * ## Animation Hooks - * - * Animations within models are triggered when any of the associated CSS classes are added and removed - * on the input element which is attached to the model. These classes are: `.ng-pristine`, `.ng-dirty`, - * `.ng-invalid` and `.ng-valid` as well as any other validations that are performed on the model itself. - * The animations that are triggered within ngModel are similar to how they work in ngClass and - * animations can be hooked into using CSS transitions, keyframes as well as JS animations. - * - * The following example shows a simple way to utilize CSS transitions to style an input element - * that has been rendered as invalid after it has been validated: - * - * <pre> - * //be sure to include ngAnimate as a module to hook into more - * //advanced animations - * .my-input { - * transition:0.5s linear all; - * background: white; - * } - * .my-input.ng-invalid { - * background: red; - * color:white; - * } - * </pre> - * - * @example - * <example deps="angular-animate.js" animations="true" fixBase="true" module="inputExample"> - <file name="index.html"> - <script> - angular.module('inputExample', []) - .controller('ExampleController', ['$scope', function($scope) { - $scope.val = '1'; - }]); - </script> - <style> - .my-input { - -webkit-transition:all linear 0.5s; - transition:all linear 0.5s; - background: transparent; - } - .my-input.ng-invalid { - color:white; - background: red; - } - </style> - Update input to see transitions when valid/invalid. - Integer is a valid value. - <form name="testForm" ng-controller="ExampleController"> - <input ng-model="val" ng-pattern="/^\d+$/" name="anim" class="my-input" /> - </form> - </file> - * </example> - * - * ## Binding to a getter/setter - * - * Sometimes it's helpful to bind `ngModel` to a getter/setter function. A getter/setter is a - * function that returns a representation of the model when called with zero arguments, and sets - * the internal state of a model when called with an argument. It's sometimes useful to use this - * for models that have an internal representation that's different than what the model exposes - * to the view. - * - * <div class="alert alert-success"> - * **Best Practice:** It's best to keep getters fast because Angular is likely to call them more - * frequently than other parts of your code. - * </div> - * - * You use this behavior by adding `ng-model-options="{ getterSetter: true }"` to an element that - * has `ng-model` attached to it. You can also add `ng-model-options="{ getterSetter: true }"` to - * a `<form>`, which will enable this behavior for all `<input>`s within it. See - * {@link ng.directive:ngModelOptions `ngModelOptions`} for more. - * - * The following example shows how to use `ngModel` with a getter/setter: - * - * @example - * <example name="ngModel-getter-setter" module="getterSetterExample"> - <file name="index.html"> - <div ng-controller="ExampleController"> - <form name="userForm"> - Name: - <input type="text" name="userName" - ng-model="user.name" - ng-model-options="{ getterSetter: true }" /> - </form> - <pre>user.name = <span ng-bind="user.name()"></span></pre> - </div> - </file> - <file name="app.js"> - angular.module('getterSetterExample', []) - .controller('ExampleController', ['$scope', function($scope) { - var _name = 'Brian'; - $scope.user = { - name: function(newName) { - if (angular.isDefined(newName)) { - _name = newName; - } - return _name; - } - }; - }]); - </file> - * </example> - */ -var ngModelDirective = ['$rootScope', function($rootScope) { - return { - restrict: 'A', - require: ['ngModel', '^?form', '^?ngModelOptions'], - controller: NgModelController, - // Prelink needs to run before any input directive - // so that we can set the NgModelOptions in NgModelController - // before anyone else uses it. - priority: 1, - compile: function ngModelCompile(element) { - // Setup initial state of the control - element.addClass(PRISTINE_CLASS).addClass(UNTOUCHED_CLASS).addClass(VALID_CLASS); - - return { - pre: function ngModelPreLink(scope, element, attr, ctrls) { - var modelCtrl = ctrls[0], - formCtrl = ctrls[1] || nullFormCtrl; - - modelCtrl.$$setOptions(ctrls[2] && ctrls[2].$options); - - // notify others, especially parent forms - formCtrl.$addControl(modelCtrl); - - attr.$observe('name', function(newValue) { - if (modelCtrl.$name !== newValue) { - formCtrl.$$renameControl(modelCtrl, newValue); - } - }); - - scope.$on('$destroy', function() { - formCtrl.$removeControl(modelCtrl); - }); - }, - post: function ngModelPostLink(scope, element, attr, ctrls) { - var modelCtrl = ctrls[0]; - if (modelCtrl.$options && modelCtrl.$options.updateOn) { - element.on(modelCtrl.$options.updateOn, function(ev) { - modelCtrl.$$debounceViewValueCommit(ev && ev.type); - }); - } - - element.on('blur', function(ev) { - if (modelCtrl.$touched) return; - - if ($rootScope.$$phase) { - scope.$evalAsync(modelCtrl.$setTouched); - } else { - scope.$apply(modelCtrl.$setTouched); - } - }); - } - }; - } - }; -}]; - -var DEFAULT_REGEXP = /(\s+|^)default(\s+|$)/; - -/** - * @ngdoc directive - * @name ngModelOptions - * - * @description - * Allows tuning how model updates are done. Using `ngModelOptions` you can specify a custom list of - * events that will trigger a model update and/or a debouncing delay so that the actual update only - * takes place when a timer expires; this timer will be reset after another change takes place. - * - * Given the nature of `ngModelOptions`, the value displayed inside input fields in the view might - * be different than the value in the actual model. This means that if you update the model you - * should also invoke {@link ngModel.NgModelController `$rollbackViewValue`} on the relevant input field in - * order to make sure it is synchronized with the model and that any debounced action is canceled. - * - * The easiest way to reference the control's {@link ngModel.NgModelController `$rollbackViewValue`} - * method is by making sure the input is placed inside a form that has a `name` attribute. This is - * important because `form` controllers are published to the related scope under the name in their - * `name` attribute. - * - * Any pending changes will take place immediately when an enclosing form is submitted via the - * `submit` event. Note that `ngClick` events will occur before the model is updated. Use `ngSubmit` - * to have access to the updated model. - * - * `ngModelOptions` has an effect on the element it's declared on and its descendants. - * - * @param {Object} ngModelOptions options to apply to the current model. Valid keys are: - * - `updateOn`: string specifying which event should the input be bound to. You can set several - * events using an space delimited list. There is a special event called `default` that - * matches the default events belonging of the control. - * - `debounce`: integer value which contains the debounce model update value in milliseconds. A - * value of 0 triggers an immediate update. If an object is supplied instead, you can specify a - * custom value for each event. For example: - * `ng-model-options="{ updateOn: 'default blur', debounce: {'default': 500, 'blur': 0} }"` - * - `allowInvalid`: boolean value which indicates that the model can be set with values that did - * not validate correctly instead of the default behavior of setting the model to undefined. - * - `getterSetter`: boolean value which determines whether or not to treat functions bound to - `ngModel` as getters/setters. - * - `timezone`: Defines the timezone to be used to read/write the `Date` instance in the model for - * `<input type="date">`, `<input type="time">`, ... . Right now, the only supported value is `'UTC'`, - * otherwise the default timezone of the browser will be used. - * - * @example - - The following example shows how to override immediate updates. Changes on the inputs within the - form will update the model only when the control loses focus (blur event). If `escape` key is - pressed while the input field is focused, the value is reset to the value in the current model. - - <example name="ngModelOptions-directive-blur" module="optionsExample"> - <file name="index.html"> - <div ng-controller="ExampleController"> - <form name="userForm"> - Name: - <input type="text" name="userName" - ng-model="user.name" - ng-model-options="{ updateOn: 'blur' }" - ng-keyup="cancel($event)" /><br /> - - Other data: - <input type="text" ng-model="user.data" /><br /> - </form> - <pre>user.name = <span ng-bind="user.name"></span></pre> - </div> - </file> - <file name="app.js"> - angular.module('optionsExample', []) - .controller('ExampleController', ['$scope', function($scope) { - $scope.user = { name: 'say', data: '' }; - - $scope.cancel = function(e) { - if (e.keyCode == 27) { - $scope.userForm.userName.$rollbackViewValue(); - } - }; - }]); - </file> - <file name="protractor.js" type="protractor"> - var model = element(by.binding('user.name')); - var input = element(by.model('user.name')); - var other = element(by.model('user.data')); - - it('should allow custom events', function() { - input.sendKeys(' hello'); - input.click(); - expect(model.getText()).toEqual('say'); - other.click(); - expect(model.getText()).toEqual('say hello'); - }); - - it('should $rollbackViewValue when model changes', function() { - input.sendKeys(' hello'); - expect(input.getAttribute('value')).toEqual('say hello'); - input.sendKeys(protractor.Key.ESCAPE); - expect(input.getAttribute('value')).toEqual('say'); - other.click(); - expect(model.getText()).toEqual('say'); - }); - </file> - </example> - - This one shows how to debounce model changes. Model will be updated only 1 sec after last change. - If the `Clear` button is pressed, any debounced action is canceled and the value becomes empty. - - <example name="ngModelOptions-directive-debounce" module="optionsExample"> - <file name="index.html"> - <div ng-controller="ExampleController"> - <form name="userForm"> - Name: - <input type="text" name="userName" - ng-model="user.name" - ng-model-options="{ debounce: 1000 }" /> - <button ng-click="userForm.userName.$rollbackViewValue(); user.name=''">Clear</button><br /> - </form> - <pre>user.name = <span ng-bind="user.name"></span></pre> - </div> - </file> - <file name="app.js"> - angular.module('optionsExample', []) - .controller('ExampleController', ['$scope', function($scope) { - $scope.user = { name: 'say' }; - }]); - </file> - </example> - - This one shows how to bind to getter/setters: - - <example name="ngModelOptions-directive-getter-setter" module="getterSetterExample"> - <file name="index.html"> - <div ng-controller="ExampleController"> - <form name="userForm"> - Name: - <input type="text" name="userName" - ng-model="user.name" - ng-model-options="{ getterSetter: true }" /> - </form> - <pre>user.name = <span ng-bind="user.name()"></span></pre> - </div> - </file> - <file name="app.js"> - angular.module('getterSetterExample', []) - .controller('ExampleController', ['$scope', function($scope) { - var _name = 'Brian'; - $scope.user = { - name: function(newName) { - return angular.isDefined(newName) ? (_name = newName) : _name; - } - }; - }]); - </file> - </example> - */ -var ngModelOptionsDirective = function() { - return { - restrict: 'A', - controller: ['$scope', '$attrs', function($scope, $attrs) { - var that = this; - this.$options = $scope.$eval($attrs.ngModelOptions); - // Allow adding/overriding bound events - if (this.$options.updateOn !== undefined) { - this.$options.updateOnDefault = false; - // extract "default" pseudo-event from list of events that can trigger a model update - this.$options.updateOn = trim(this.$options.updateOn.replace(DEFAULT_REGEXP, function() { - that.$options.updateOnDefault = true; - return ' '; - })); - } else { - this.$options.updateOnDefault = true; - } - }] - }; -}; - - - -// helper methods -function addSetValidityMethod(context) { - var ctrl = context.ctrl, - $element = context.$element, - classCache = {}, - set = context.set, - unset = context.unset, - parentForm = context.parentForm, - $animate = context.$animate; - - classCache[INVALID_CLASS] = !(classCache[VALID_CLASS] = $element.hasClass(VALID_CLASS)); - - ctrl.$setValidity = setValidity; - - function setValidity(validationErrorKey, state, controller) { - if (state === undefined) { - createAndSet('$pending', validationErrorKey, controller); - } else { - unsetAndCleanup('$pending', validationErrorKey, controller); - } - if (!isBoolean(state)) { - unset(ctrl.$error, validationErrorKey, controller); - unset(ctrl.$$success, validationErrorKey, controller); - } else { - if (state) { - unset(ctrl.$error, validationErrorKey, controller); - set(ctrl.$$success, validationErrorKey, controller); - } else { - set(ctrl.$error, validationErrorKey, controller); - unset(ctrl.$$success, validationErrorKey, controller); - } - } - if (ctrl.$pending) { - cachedToggleClass(PENDING_CLASS, true); - ctrl.$valid = ctrl.$invalid = undefined; - toggleValidationCss('', null); - } else { - cachedToggleClass(PENDING_CLASS, false); - ctrl.$valid = isObjectEmpty(ctrl.$error); - ctrl.$invalid = !ctrl.$valid; - toggleValidationCss('', ctrl.$valid); - } - - // re-read the state as the set/unset methods could have - // combined state in ctrl.$error[validationError] (used for forms), - // where setting/unsetting only increments/decrements the value, - // and does not replace it. - var combinedState; - if (ctrl.$pending && ctrl.$pending[validationErrorKey]) { - combinedState = undefined; - } else if (ctrl.$error[validationErrorKey]) { - combinedState = false; - } else if (ctrl.$$success[validationErrorKey]) { - combinedState = true; - } else { - combinedState = null; - } - - toggleValidationCss(validationErrorKey, combinedState); - parentForm.$setValidity(validationErrorKey, combinedState, ctrl); - } - - function createAndSet(name, value, controller) { - if (!ctrl[name]) { - ctrl[name] = {}; - } - set(ctrl[name], value, controller); - } - - function unsetAndCleanup(name, value, controller) { - if (ctrl[name]) { - unset(ctrl[name], value, controller); - } - if (isObjectEmpty(ctrl[name])) { - ctrl[name] = undefined; - } - } - - function cachedToggleClass(className, switchValue) { - if (switchValue && !classCache[className]) { - $animate.addClass($element, className); - classCache[className] = true; - } else if (!switchValue && classCache[className]) { - $animate.removeClass($element, className); - classCache[className] = false; - } - } - - function toggleValidationCss(validationErrorKey, isValid) { - validationErrorKey = validationErrorKey ? '-' + snake_case(validationErrorKey, '-') : ''; - - cachedToggleClass(VALID_CLASS + validationErrorKey, isValid === true); - cachedToggleClass(INVALID_CLASS + validationErrorKey, isValid === false); - } -} - -function isObjectEmpty(obj) { - if (obj) { - for (var prop in obj) { - return false; - } - } - return true; -} - -/** - * @ngdoc directive - * @name ngNonBindable - * @restrict AC - * @priority 1000 - * - * @description - * The `ngNonBindable` directive tells Angular not to compile or bind the contents of the current - * DOM element. This is useful if the element contains what appears to be Angular directives and - * bindings but which should be ignored by Angular. This could be the case if you have a site that - * displays snippets of code, for instance. - * - * @element ANY - * - * @example - * In this example there are two locations where a simple interpolation binding (`{{}}`) is present, - * but the one wrapped in `ngNonBindable` is left alone. - * - * @example - <example> - <file name="index.html"> - <div>Normal: {{1 + 2}}</div> - <div ng-non-bindable>Ignored: {{1 + 2}}</div> - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-non-bindable', function() { - expect(element(by.binding('1 + 2')).getText()).toContain('3'); - expect(element.all(by.css('div')).last().getText()).toMatch(/1 \+ 2/); - }); - </file> - </example> - */ -var ngNonBindableDirective = ngDirective({ terminal: true, priority: 1000 }); - -/** - * @ngdoc directive - * @name ngPluralize - * @restrict EA - * - * @description - * `ngPluralize` is a directive that displays messages according to en-US localization rules. - * These rules are bundled with angular.js, but can be overridden - * (see {@link guide/i18n Angular i18n} dev guide). You configure ngPluralize directive - * by specifying the mappings between - * [plural categories](http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html) - * and the strings to be displayed. - * - * # Plural categories and explicit number rules - * There are two - * [plural categories](http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html) - * in Angular's default en-US locale: "one" and "other". - * - * While a plural category may match many numbers (for example, in en-US locale, "other" can match - * any number that is not 1), an explicit number rule can only match one number. For example, the - * explicit number rule for "3" matches the number 3. There are examples of plural categories - * and explicit number rules throughout the rest of this documentation. - * - * # Configuring ngPluralize - * You configure ngPluralize by providing 2 attributes: `count` and `when`. - * You can also provide an optional attribute, `offset`. - * - * The value of the `count` attribute can be either a string or an {@link guide/expression - * Angular expression}; these are evaluated on the current scope for its bound value. - * - * The `when` attribute specifies the mappings between plural categories and the actual - * string to be displayed. The value of the attribute should be a JSON object. - * - * The following example shows how to configure ngPluralize: - * - * ```html - * <ng-pluralize count="personCount" - when="{'0': 'Nobody is viewing.', - * 'one': '1 person is viewing.', - * 'other': '{} people are viewing.'}"> - * </ng-pluralize> - *``` - * - * In the example, `"0: Nobody is viewing."` is an explicit number rule. If you did not - * specify this rule, 0 would be matched to the "other" category and "0 people are viewing" - * would be shown instead of "Nobody is viewing". You can specify an explicit number rule for - * other numbers, for example 12, so that instead of showing "12 people are viewing", you can - * show "a dozen people are viewing". - * - * You can use a set of closed braces (`{}`) as a placeholder for the number that you want substituted - * into pluralized strings. In the previous example, Angular will replace `{}` with - * <span ng-non-bindable>`{{personCount}}`</span>. The closed braces `{}` is a placeholder - * for <span ng-non-bindable>{{numberExpression}}</span>. - * - * # Configuring ngPluralize with offset - * The `offset` attribute allows further customization of pluralized text, which can result in - * a better user experience. For example, instead of the message "4 people are viewing this document", - * you might display "John, Kate and 2 others are viewing this document". - * The offset attribute allows you to offset a number by any desired value. - * Let's take a look at an example: - * - * ```html - * <ng-pluralize count="personCount" offset=2 - * when="{'0': 'Nobody is viewing.', - * '1': '{{person1}} is viewing.', - * '2': '{{person1}} and {{person2}} are viewing.', - * 'one': '{{person1}}, {{person2}} and one other person are viewing.', - * 'other': '{{person1}}, {{person2}} and {} other people are viewing.'}"> - * </ng-pluralize> - * ``` - * - * Notice that we are still using two plural categories(one, other), but we added - * three explicit number rules 0, 1 and 2. - * When one person, perhaps John, views the document, "John is viewing" will be shown. - * When three people view the document, no explicit number rule is found, so - * an offset of 2 is taken off 3, and Angular uses 1 to decide the plural category. - * In this case, plural category 'one' is matched and "John, Mary and one other person are viewing" - * is shown. - * - * Note that when you specify offsets, you must provide explicit number rules for - * numbers from 0 up to and including the offset. If you use an offset of 3, for example, - * you must provide explicit number rules for 0, 1, 2 and 3. You must also provide plural strings for - * plural categories "one" and "other". - * - * @param {string|expression} count The variable to be bound to. - * @param {string} when The mapping between plural category to its corresponding strings. - * @param {number=} offset Offset to deduct from the total number. - * - * @example - <example module="pluralizeExample"> - <file name="index.html"> - <script> - angular.module('pluralizeExample', []) - .controller('ExampleController', ['$scope', function($scope) { - $scope.person1 = 'Igor'; - $scope.person2 = 'Misko'; - $scope.personCount = 1; - }]); - </script> - <div ng-controller="ExampleController"> - Person 1:<input type="text" ng-model="person1" value="Igor" /><br/> - Person 2:<input type="text" ng-model="person2" value="Misko" /><br/> - Number of People:<input type="text" ng-model="personCount" value="1" /><br/> - - <!--- Example with simple pluralization rules for en locale ---> - Without Offset: - <ng-pluralize count="personCount" - when="{'0': 'Nobody is viewing.', - 'one': '1 person is viewing.', - 'other': '{} people are viewing.'}"> - </ng-pluralize><br> - - <!--- Example with offset ---> - With Offset(2): - <ng-pluralize count="personCount" offset=2 - when="{'0': 'Nobody is viewing.', - '1': '{{person1}} is viewing.', - '2': '{{person1}} and {{person2}} are viewing.', - 'one': '{{person1}}, {{person2}} and one other person are viewing.', - 'other': '{{person1}}, {{person2}} and {} other people are viewing.'}"> - </ng-pluralize> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should show correct pluralized string', function() { - var withoutOffset = element.all(by.css('ng-pluralize')).get(0); - var withOffset = element.all(by.css('ng-pluralize')).get(1); - var countInput = element(by.model('personCount')); - - expect(withoutOffset.getText()).toEqual('1 person is viewing.'); - expect(withOffset.getText()).toEqual('Igor is viewing.'); - - countInput.clear(); - countInput.sendKeys('0'); - - expect(withoutOffset.getText()).toEqual('Nobody is viewing.'); - expect(withOffset.getText()).toEqual('Nobody is viewing.'); - - countInput.clear(); - countInput.sendKeys('2'); - - expect(withoutOffset.getText()).toEqual('2 people are viewing.'); - expect(withOffset.getText()).toEqual('Igor and Misko are viewing.'); - - countInput.clear(); - countInput.sendKeys('3'); - - expect(withoutOffset.getText()).toEqual('3 people are viewing.'); - expect(withOffset.getText()).toEqual('Igor, Misko and one other person are viewing.'); - - countInput.clear(); - countInput.sendKeys('4'); - - expect(withoutOffset.getText()).toEqual('4 people are viewing.'); - expect(withOffset.getText()).toEqual('Igor, Misko and 2 other people are viewing.'); - }); - it('should show data-bound names', function() { - var withOffset = element.all(by.css('ng-pluralize')).get(1); - var personCount = element(by.model('personCount')); - var person1 = element(by.model('person1')); - var person2 = element(by.model('person2')); - personCount.clear(); - personCount.sendKeys('4'); - person1.clear(); - person1.sendKeys('Di'); - person2.clear(); - person2.sendKeys('Vojta'); - expect(withOffset.getText()).toEqual('Di, Vojta and 2 other people are viewing.'); - }); - </file> - </example> - */ -var ngPluralizeDirective = ['$locale', '$interpolate', function($locale, $interpolate) { - var BRACE = /{}/g, - IS_WHEN = /^when(Minus)?(.+)$/; - - return { - restrict: 'EA', - link: function(scope, element, attr) { - var numberExp = attr.count, - whenExp = attr.$attr.when && element.attr(attr.$attr.when), // we have {{}} in attrs - offset = attr.offset || 0, - whens = scope.$eval(whenExp) || {}, - whensExpFns = {}, - startSymbol = $interpolate.startSymbol(), - endSymbol = $interpolate.endSymbol(), - braceReplacement = startSymbol + numberExp + '-' + offset + endSymbol, - watchRemover = angular.noop, - lastCount; - - forEach(attr, function(expression, attributeName) { - var tmpMatch = IS_WHEN.exec(attributeName); - if (tmpMatch) { - var whenKey = (tmpMatch[1] ? '-' : '') + lowercase(tmpMatch[2]); - whens[whenKey] = element.attr(attr.$attr[attributeName]); - } - }); - forEach(whens, function(expression, key) { - whensExpFns[key] = $interpolate(expression.replace(BRACE, braceReplacement)); - - }); - - scope.$watch(numberExp, function ngPluralizeWatchAction(newVal) { - var count = parseFloat(newVal); - var countIsNaN = isNaN(count); - - if (!countIsNaN && !(count in whens)) { - // If an explicit number rule such as 1, 2, 3... is defined, just use it. - // Otherwise, check it against pluralization rules in $locale service. - count = $locale.pluralCat(count - offset); - } - - // If both `count` and `lastCount` are NaN, we don't need to re-register a watch. - // In JS `NaN !== NaN`, so we have to exlicitly check. - if ((count !== lastCount) && !(countIsNaN && isNaN(lastCount))) { - watchRemover(); - watchRemover = scope.$watch(whensExpFns[count], updateElementText); - lastCount = count; - } - }); - - function updateElementText(newText) { - element.text(newText || ''); - } - } - }; -}]; - -/** - * @ngdoc directive - * @name ngRepeat - * - * @description - * The `ngRepeat` directive instantiates a template once per item from a collection. Each template - * instance gets its own scope, where the given loop variable is set to the current collection item, - * and `$index` is set to the item index or key. - * - * Special properties are exposed on the local scope of each template instance, including: - * - * | Variable | Type | Details | - * |-----------|-----------------|-----------------------------------------------------------------------------| - * | `$index` | {@type number} | iterator offset of the repeated element (0..length-1) | - * | `$first` | {@type boolean} | true if the repeated element is first in the iterator. | - * | `$middle` | {@type boolean} | true if the repeated element is between the first and last in the iterator. | - * | `$last` | {@type boolean} | true if the repeated element is last in the iterator. | - * | `$even` | {@type boolean} | true if the iterator position `$index` is even (otherwise false). | - * | `$odd` | {@type boolean} | true if the iterator position `$index` is odd (otherwise false). | - * - * Creating aliases for these properties is possible with {@link ng.directive:ngInit `ngInit`}. - * This may be useful when, for instance, nesting ngRepeats. - * - * # Iterating over object properties - * - * It is possible to get `ngRepeat` to iterate over the properties of an object using the following - * syntax: - * - * ```js - * <div ng-repeat="(key, value) in myObj"> ... </div> - * ``` - * - * You need to be aware that the JavaScript specification does not define what order - * it will return the keys for an object. In order to have a guaranteed deterministic order - * for the keys, Angular versions up to and including 1.3 **sort the keys alphabetically**. - * - * If this is not desired, the recommended workaround is to convert your object into an array - * that is sorted into the order that you prefer before providing it to `ngRepeat`. You could - * do this with a filter such as [toArrayFilter](http://ngmodules.org/modules/angular-toArrayFilter) - * or implement a `$watch` on the object yourself. - * - * In version 1.4 we will remove the sorting, since it seems that browsers generally follow the - * strategy of providing keys in the order in which they were defined, although there are exceptions - * when keys are deleted and reinstated. - * - * - * # Special repeat start and end points - * To repeat a series of elements instead of just one parent element, ngRepeat (as well as other ng directives) supports extending - * the range of the repeater by defining explicit start and end points by using **ng-repeat-start** and **ng-repeat-end** respectively. - * The **ng-repeat-start** directive works the same as **ng-repeat**, but will repeat all the HTML code (including the tag it's defined on) - * up to and including the ending HTML tag where **ng-repeat-end** is placed. - * - * The example below makes use of this feature: - * ```html - * <header ng-repeat-start="item in items"> - * Header {{ item }} - * </header> - * <div class="body"> - * Body {{ item }} - * </div> - * <footer ng-repeat-end> - * Footer {{ item }} - * </footer> - * ``` - * - * And with an input of {@type ['A','B']} for the items variable in the example above, the output will evaluate to: - * ```html - * <header> - * Header A - * </header> - * <div class="body"> - * Body A - * </div> - * <footer> - * Footer A - * </footer> - * <header> - * Header B - * </header> - * <div class="body"> - * Body B - * </div> - * <footer> - * Footer B - * </footer> - * ``` - * - * The custom start and end points for ngRepeat also support all other HTML directive syntax flavors provided in AngularJS (such - * as **data-ng-repeat-start**, **x-ng-repeat-start** and **ng:repeat-start**). - * - * @animations - * **.enter** - when a new item is added to the list or when an item is revealed after a filter - * - * **.leave** - when an item is removed from the list or when an item is filtered out - * - * **.move** - when an adjacent item is filtered out causing a reorder or when the item contents are reordered - * - * @element ANY - * @scope - * @priority 1000 - * @param {repeat_expression} ngRepeat The expression indicating how to enumerate a collection. These - * formats are currently supported: - * - * * `variable in expression` – where variable is the user defined loop variable and `expression` - * is a scope expression giving the collection to enumerate. - * - * For example: `album in artist.albums`. - * - * * `(key, value) in expression` – where `key` and `value` can be any user defined identifiers, - * and `expression` is the scope expression giving the collection to enumerate. - * - * For example: `(name, age) in {'adam':10, 'amalie':12}`. - * - * * `variable in expression track by tracking_expression` – You can also provide an optional tracking function - * which can be used to associate the objects in the collection with the DOM elements. If no tracking function - * is specified the ng-repeat associates elements by identity in the collection. It is an error to have - * more than one tracking function to resolve to the same key. (This would mean that two distinct objects are - * mapped to the same DOM element, which is not possible.) Filters should be applied to the expression, - * before specifying a tracking expression. - * - * For example: `item in items` is equivalent to `item in items track by $id(item)`. This implies that the DOM elements - * will be associated by item identity in the array. - * - * For example: `item in items track by $id(item)`. A built in `$id()` function can be used to assign a unique - * `$$hashKey` property to each item in the array. This property is then used as a key to associated DOM elements - * with the corresponding item in the array by identity. Moving the same object in array would move the DOM - * element in the same way in the DOM. - * - * For example: `item in items track by item.id` is a typical pattern when the items come from the database. In this - * case the object identity does not matter. Two objects are considered equivalent as long as their `id` - * property is same. - * - * For example: `item in items | filter:searchText track by item.id` is a pattern that might be used to apply a filter - * to items in conjunction with a tracking expression. - * - * * `variable in expression as alias_expression` – You can also provide an optional alias expression which will then store the - * intermediate results of the repeater after the filters have been applied. Typically this is used to render a special message - * when a filter is active on the repeater, but the filtered result set is empty. - * - * For example: `item in items | filter:x as results` will store the fragment of the repeated items as `results`, but only after - * the items have been processed through the filter. - * - * @example - * This example initializes the scope to a list of names and - * then uses `ngRepeat` to display every person: - <example module="ngAnimate" deps="angular-animate.js" animations="true"> - <file name="index.html"> - <div ng-init="friends = [ - {name:'John', age:25, gender:'boy'}, - {name:'Jessie', age:30, gender:'girl'}, - {name:'Johanna', age:28, gender:'girl'}, - {name:'Joy', age:15, gender:'girl'}, - {name:'Mary', age:28, gender:'girl'}, - {name:'Peter', age:95, gender:'boy'}, - {name:'Sebastian', age:50, gender:'boy'}, - {name:'Erika', age:27, gender:'girl'}, - {name:'Patrick', age:40, gender:'boy'}, - {name:'Samantha', age:60, gender:'girl'} - ]"> - I have {{friends.length}} friends. They are: - <input type="search" ng-model="q" placeholder="filter friends..." /> - <ul class="example-animate-container"> - <li class="animate-repeat" ng-repeat="friend in friends | filter:q as results"> - [{{$index + 1}}] {{friend.name}} who is {{friend.age}} years old. - </li> - <li class="animate-repeat" ng-if="results.length == 0"> - <strong>No results found...</strong> - </li> - </ul> - </div> - </file> - <file name="animations.css"> - .example-animate-container { - background:white; - border:1px solid black; - list-style:none; - margin:0; - padding:0 10px; - } - - .animate-repeat { - line-height:40px; - list-style:none; - box-sizing:border-box; - } - - .animate-repeat.ng-move, - .animate-repeat.ng-enter, - .animate-repeat.ng-leave { - -webkit-transition:all linear 0.5s; - transition:all linear 0.5s; - } - - .animate-repeat.ng-leave.ng-leave-active, - .animate-repeat.ng-move, - .animate-repeat.ng-enter { - opacity:0; - max-height:0; - } - - .animate-repeat.ng-leave, - .animate-repeat.ng-move.ng-move-active, - .animate-repeat.ng-enter.ng-enter-active { - opacity:1; - max-height:40px; - } - </file> - <file name="protractor.js" type="protractor"> - var friends = element.all(by.repeater('friend in friends')); - - it('should render initial data set', function() { - expect(friends.count()).toBe(10); - expect(friends.get(0).getText()).toEqual('[1] John who is 25 years old.'); - expect(friends.get(1).getText()).toEqual('[2] Jessie who is 30 years old.'); - expect(friends.last().getText()).toEqual('[10] Samantha who is 60 years old.'); - expect(element(by.binding('friends.length')).getText()) - .toMatch("I have 10 friends. They are:"); - }); - - it('should update repeater when filter predicate changes', function() { - expect(friends.count()).toBe(10); - - element(by.model('q')).sendKeys('ma'); - - expect(friends.count()).toBe(2); - expect(friends.get(0).getText()).toEqual('[1] Mary who is 28 years old.'); - expect(friends.last().getText()).toEqual('[2] Samantha who is 60 years old.'); - }); - </file> - </example> - */ -var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) { - var NG_REMOVED = '$$NG_REMOVED'; - var ngRepeatMinErr = minErr('ngRepeat'); - - var updateScope = function(scope, index, valueIdentifier, value, keyIdentifier, key, arrayLength) { - // TODO(perf): generate setters to shave off ~40ms or 1-1.5% - scope[valueIdentifier] = value; - if (keyIdentifier) scope[keyIdentifier] = key; - scope.$index = index; - scope.$first = (index === 0); - scope.$last = (index === (arrayLength - 1)); - scope.$middle = !(scope.$first || scope.$last); - // jshint bitwise: false - scope.$odd = !(scope.$even = (index&1) === 0); - // jshint bitwise: true - }; - - var getBlockStart = function(block) { - return block.clone[0]; - }; - - var getBlockEnd = function(block) { - return block.clone[block.clone.length - 1]; - }; - - - return { - restrict: 'A', - multiElement: true, - transclude: 'element', - priority: 1000, - terminal: true, - $$tlb: true, - compile: function ngRepeatCompile($element, $attr) { - var expression = $attr.ngRepeat; - var ngRepeatEndComment = document.createComment(' end ngRepeat: ' + expression + ' '); - - var match = expression.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/); - - if (!match) { - throw ngRepeatMinErr('iexp', "Expected expression in form of '_item_ in _collection_[ track by _id_]' but got '{0}'.", - expression); - } - - var lhs = match[1]; - var rhs = match[2]; - var aliasAs = match[3]; - var trackByExp = match[4]; - - match = lhs.match(/^(?:(\s*[\$\w]+)|\(\s*([\$\w]+)\s*,\s*([\$\w]+)\s*\))$/); - - if (!match) { - throw ngRepeatMinErr('iidexp', "'_item_' in '_item_ in _collection_' should be an identifier or '(_key_, _value_)' expression, but got '{0}'.", - lhs); - } - var valueIdentifier = match[3] || match[1]; - var keyIdentifier = match[2]; - - if (aliasAs && (!/^[$a-zA-Z_][$a-zA-Z0-9_]*$/.test(aliasAs) || - /^(null|undefined|this|\$index|\$first|\$middle|\$last|\$even|\$odd|\$parent|\$root|\$id)$/.test(aliasAs))) { - throw ngRepeatMinErr('badident', "alias '{0}' is invalid --- must be a valid JS identifier which is not a reserved name.", - aliasAs); - } - - var trackByExpGetter, trackByIdExpFn, trackByIdArrayFn, trackByIdObjFn; - var hashFnLocals = {$id: hashKey}; - - if (trackByExp) { - trackByExpGetter = $parse(trackByExp); - } else { - trackByIdArrayFn = function(key, value) { - return hashKey(value); - }; - trackByIdObjFn = function(key) { - return key; - }; - } - - return function ngRepeatLink($scope, $element, $attr, ctrl, $transclude) { - - if (trackByExpGetter) { - trackByIdExpFn = function(key, value, index) { - // assign key, value, and $index to the locals so that they can be used in hash functions - if (keyIdentifier) hashFnLocals[keyIdentifier] = key; - hashFnLocals[valueIdentifier] = value; - hashFnLocals.$index = index; - return trackByExpGetter($scope, hashFnLocals); - }; - } - - // Store a list of elements from previous run. This is a hash where key is the item from the - // iterator, and the value is objects with following properties. - // - scope: bound scope - // - element: previous element. - // - index: position - // - // We are using no-proto object so that we don't need to guard against inherited props via - // hasOwnProperty. - var lastBlockMap = createMap(); - - //watch props - $scope.$watchCollection(rhs, function ngRepeatAction(collection) { - var index, length, - previousNode = $element[0], // node that cloned nodes should be inserted after - // initialized to the comment node anchor - nextNode, - // Same as lastBlockMap but it has the current state. It will become the - // lastBlockMap on the next iteration. - nextBlockMap = createMap(), - collectionLength, - key, value, // key/value of iteration - trackById, - trackByIdFn, - collectionKeys, - block, // last object information {scope, element, id} - nextBlockOrder, - elementsToRemove; - - if (aliasAs) { - $scope[aliasAs] = collection; - } - - if (isArrayLike(collection)) { - collectionKeys = collection; - trackByIdFn = trackByIdExpFn || trackByIdArrayFn; - } else { - trackByIdFn = trackByIdExpFn || trackByIdObjFn; - // if object, extract keys, sort them and use to determine order of iteration over obj props - collectionKeys = []; - for (var itemKey in collection) { - if (collection.hasOwnProperty(itemKey) && itemKey.charAt(0) != '$') { - collectionKeys.push(itemKey); - } - } - collectionKeys.sort(); - } - - collectionLength = collectionKeys.length; - nextBlockOrder = new Array(collectionLength); - - // locate existing items - for (index = 0; index < collectionLength; index++) { - key = (collection === collectionKeys) ? index : collectionKeys[index]; - value = collection[key]; - trackById = trackByIdFn(key, value, index); - if (lastBlockMap[trackById]) { - // found previously seen block - block = lastBlockMap[trackById]; - delete lastBlockMap[trackById]; - nextBlockMap[trackById] = block; - nextBlockOrder[index] = block; - } else if (nextBlockMap[trackById]) { - // if collision detected. restore lastBlockMap and throw an error - forEach(nextBlockOrder, function(block) { - if (block && block.scope) lastBlockMap[block.id] = block; - }); - throw ngRepeatMinErr('dupes', - "Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: {0}, Duplicate key: {1}, Duplicate value: {2}", - expression, trackById, value); - } else { - // new never before seen block - nextBlockOrder[index] = {id: trackById, scope: undefined, clone: undefined}; - nextBlockMap[trackById] = true; - } - } - - // remove leftover items - for (var blockKey in lastBlockMap) { - block = lastBlockMap[blockKey]; - elementsToRemove = getBlockNodes(block.clone); - $animate.leave(elementsToRemove); - if (elementsToRemove[0].parentNode) { - // if the element was not removed yet because of pending animation, mark it as deleted - // so that we can ignore it later - for (index = 0, length = elementsToRemove.length; index < length; index++) { - elementsToRemove[index][NG_REMOVED] = true; - } - } - block.scope.$destroy(); - } - - // we are not using forEach for perf reasons (trying to avoid #call) - for (index = 0; index < collectionLength; index++) { - key = (collection === collectionKeys) ? index : collectionKeys[index]; - value = collection[key]; - block = nextBlockOrder[index]; - - if (block.scope) { - // if we have already seen this object, then we need to reuse the - // associated scope/element - - nextNode = previousNode; - - // skip nodes that are already pending removal via leave animation - do { - nextNode = nextNode.nextSibling; - } while (nextNode && nextNode[NG_REMOVED]); - - if (getBlockStart(block) != nextNode) { - // existing item which got moved - $animate.move(getBlockNodes(block.clone), null, jqLite(previousNode)); - } - previousNode = getBlockEnd(block); - updateScope(block.scope, index, valueIdentifier, value, keyIdentifier, key, collectionLength); - } else { - // new item which we don't know about - $transclude(function ngRepeatTransclude(clone, scope) { - block.scope = scope; - // http://jsperf.com/clone-vs-createcomment - var endNode = ngRepeatEndComment.cloneNode(false); - clone[clone.length++] = endNode; - - // TODO(perf): support naked previousNode in `enter` to avoid creation of jqLite wrapper? - $animate.enter(clone, null, jqLite(previousNode)); - previousNode = endNode; - // Note: We only need the first/last node of the cloned nodes. - // However, we need to keep the reference to the jqlite wrapper as it might be changed later - // by a directive with templateUrl when its template arrives. - block.clone = clone; - nextBlockMap[block.id] = block; - updateScope(block.scope, index, valueIdentifier, value, keyIdentifier, key, collectionLength); - }); - } - } - lastBlockMap = nextBlockMap; - }); - }; - } - }; -}]; - -var NG_HIDE_CLASS = 'ng-hide'; -var NG_HIDE_IN_PROGRESS_CLASS = 'ng-hide-animate'; -/** - * @ngdoc directive - * @name ngShow - * - * @description - * The `ngShow` directive shows or hides the given HTML element based on the expression - * provided to the `ngShow` attribute. The element is shown or hidden by removing or adding - * the `.ng-hide` CSS class onto the element. The `.ng-hide` CSS class is predefined - * in AngularJS and sets the display style to none (using an !important flag). - * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}). - * - * ```html - * <!-- when $scope.myValue is truthy (element is visible) --> - * <div ng-show="myValue"></div> - * - * <!-- when $scope.myValue is falsy (element is hidden) --> - * <div ng-show="myValue" class="ng-hide"></div> - * ``` - * - * When the `ngShow` expression evaluates to a falsy value then the `.ng-hide` CSS class is added to the class - * attribute on the element causing it to become hidden. When truthy, the `.ng-hide` CSS class is removed - * from the element causing the element not to appear hidden. - * - * ## Why is !important used? - * - * You may be wondering why !important is used for the `.ng-hide` CSS class. This is because the `.ng-hide` selector - * can be easily overridden by heavier selectors. For example, something as simple - * as changing the display style on a HTML list item would make hidden elements appear visible. - * This also becomes a bigger issue when dealing with CSS frameworks. - * - * By using !important, the show and hide behavior will work as expected despite any clash between CSS selector - * specificity (when !important isn't used with any conflicting styles). If a developer chooses to override the - * styling to change how to hide an element then it is just a matter of using !important in their own CSS code. - * - * ### Overriding `.ng-hide` - * - * By default, the `.ng-hide` class will style the element with `display: none!important`. If you wish to change - * the hide behavior with ngShow/ngHide then this can be achieved by restating the styles for the `.ng-hide` - * class in CSS: - * - * ```css - * .ng-hide { - * /* this is just another form of hiding an element */ - * display: block!important; - * position: absolute; - * top: -9999px; - * left: -9999px; - * } - * ``` - * - * By default you don't need to override in CSS anything and the animations will work around the display style. - * - * ## A note about animations with `ngShow` - * - * Animations in ngShow/ngHide work with the show and hide events that are triggered when the directive expression - * is true and false. This system works like the animation system present with ngClass except that - * you must also include the !important flag to override the display property - * so that you can perform an animation when the element is hidden during the time of the animation. - * - * ```css - * // - * //a working example can be found at the bottom of this page - * // - * .my-element.ng-hide-add, .my-element.ng-hide-remove { - * /* this is required as of 1.3x to properly - * apply all styling in a show/hide animation */ - * transition: 0s linear all; - * } - * - * .my-element.ng-hide-add-active, - * .my-element.ng-hide-remove-active { - * /* the transition is defined in the active class */ - * transition: 1s linear all; - * } - * - * .my-element.ng-hide-add { ... } - * .my-element.ng-hide-add.ng-hide-add-active { ... } - * .my-element.ng-hide-remove { ... } - * .my-element.ng-hide-remove.ng-hide-remove-active { ... } - * ``` - * - * Keep in mind that, as of AngularJS version 1.3.0-beta.11, there is no need to change the display - * property to block during animation states--ngAnimate will handle the style toggling automatically for you. - * - * @animations - * addClass: `.ng-hide` - happens after the `ngShow` expression evaluates to a truthy value and the just before contents are set to visible - * removeClass: `.ng-hide` - happens after the `ngShow` expression evaluates to a non truthy value and just before the contents are set to hidden - * - * @element ANY - * @param {expression} ngShow If the {@link guide/expression expression} is truthy - * then the element is shown or hidden respectively. - * - * @example - <example module="ngAnimate" deps="angular-animate.js" animations="true"> - <file name="index.html"> - Click me: <input type="checkbox" ng-model="checked"><br/> - <div> - Show: - <div class="check-element animate-show" ng-show="checked"> - <span class="glyphicon glyphicon-thumbs-up"></span> I show up when your checkbox is checked. - </div> - </div> - <div> - Hide: - <div class="check-element animate-show" ng-hide="checked"> - <span class="glyphicon glyphicon-thumbs-down"></span> I hide when your checkbox is checked. - </div> - </div> - </file> - <file name="glyphicons.css"> - @import url(../../components/bootstrap-3.1.1/css/bootstrap.css); - </file> - <file name="animations.css"> - .animate-show { - line-height: 20px; - opacity: 1; - padding: 10px; - border: 1px solid black; - background: white; - } - - .animate-show.ng-hide-add.ng-hide-add-active, - .animate-show.ng-hide-remove.ng-hide-remove-active { - -webkit-transition: all linear 0.5s; - transition: all linear 0.5s; - } - - .animate-show.ng-hide { - line-height: 0; - opacity: 0; - padding: 0 10px; - } - - .check-element { - padding: 10px; - border: 1px solid black; - background: white; - } - </file> - <file name="protractor.js" type="protractor"> - var thumbsUp = element(by.css('span.glyphicon-thumbs-up')); - var thumbsDown = element(by.css('span.glyphicon-thumbs-down')); - - it('should check ng-show / ng-hide', function() { - expect(thumbsUp.isDisplayed()).toBeFalsy(); - expect(thumbsDown.isDisplayed()).toBeTruthy(); - - element(by.model('checked')).click(); - - expect(thumbsUp.isDisplayed()).toBeTruthy(); - expect(thumbsDown.isDisplayed()).toBeFalsy(); - }); - </file> - </example> - */ -var ngShowDirective = ['$animate', function($animate) { - return { - restrict: 'A', - multiElement: true, - link: function(scope, element, attr) { - scope.$watch(attr.ngShow, function ngShowWatchAction(value) { - // we're adding a temporary, animation-specific class for ng-hide since this way - // we can control when the element is actually displayed on screen without having - // to have a global/greedy CSS selector that breaks when other animations are run. - // Read: https://github.com/angular/angular.js/issues/9103#issuecomment-58335845 - $animate[value ? 'removeClass' : 'addClass'](element, NG_HIDE_CLASS, { - tempClasses: NG_HIDE_IN_PROGRESS_CLASS - }); - }); - } - }; -}]; - - -/** - * @ngdoc directive - * @name ngHide - * - * @description - * The `ngHide` directive shows or hides the given HTML element based on the expression - * provided to the `ngHide` attribute. The element is shown or hidden by removing or adding - * the `ng-hide` CSS class onto the element. The `.ng-hide` CSS class is predefined - * in AngularJS and sets the display style to none (using an !important flag). - * For CSP mode please add `angular-csp.css` to your html file (see {@link ng.directive:ngCsp ngCsp}). - * - * ```html - * <!-- when $scope.myValue is truthy (element is hidden) --> - * <div ng-hide="myValue" class="ng-hide"></div> - * - * <!-- when $scope.myValue is falsy (element is visible) --> - * <div ng-hide="myValue"></div> - * ``` - * - * When the `ngHide` expression evaluates to a truthy value then the `.ng-hide` CSS class is added to the class - * attribute on the element causing it to become hidden. When falsy, the `.ng-hide` CSS class is removed - * from the element causing the element not to appear hidden. - * - * ## Why is !important used? - * - * You may be wondering why !important is used for the `.ng-hide` CSS class. This is because the `.ng-hide` selector - * can be easily overridden by heavier selectors. For example, something as simple - * as changing the display style on a HTML list item would make hidden elements appear visible. - * This also becomes a bigger issue when dealing with CSS frameworks. - * - * By using !important, the show and hide behavior will work as expected despite any clash between CSS selector - * specificity (when !important isn't used with any conflicting styles). If a developer chooses to override the - * styling to change how to hide an element then it is just a matter of using !important in their own CSS code. - * - * ### Overriding `.ng-hide` - * - * By default, the `.ng-hide` class will style the element with `display: none!important`. If you wish to change - * the hide behavior with ngShow/ngHide then this can be achieved by restating the styles for the `.ng-hide` - * class in CSS: - * - * ```css - * .ng-hide { - * /* this is just another form of hiding an element */ - * display: block!important; - * position: absolute; - * top: -9999px; - * left: -9999px; - * } - * ``` - * - * By default you don't need to override in CSS anything and the animations will work around the display style. - * - * ## A note about animations with `ngHide` - * - * Animations in ngShow/ngHide work with the show and hide events that are triggered when the directive expression - * is true and false. This system works like the animation system present with ngClass, except that the `.ng-hide` - * CSS class is added and removed for you instead of your own CSS class. - * - * ```css - * // - * //a working example can be found at the bottom of this page - * // - * .my-element.ng-hide-add, .my-element.ng-hide-remove { - * transition: 0.5s linear all; - * } - * - * .my-element.ng-hide-add { ... } - * .my-element.ng-hide-add.ng-hide-add-active { ... } - * .my-element.ng-hide-remove { ... } - * .my-element.ng-hide-remove.ng-hide-remove-active { ... } - * ``` - * - * Keep in mind that, as of AngularJS version 1.3.0-beta.11, there is no need to change the display - * property to block during animation states--ngAnimate will handle the style toggling automatically for you. - * - * @animations - * removeClass: `.ng-hide` - happens after the `ngHide` expression evaluates to a truthy value and just before the contents are set to hidden - * addClass: `.ng-hide` - happens after the `ngHide` expression evaluates to a non truthy value and just before the contents are set to visible - * - * @element ANY - * @param {expression} ngHide If the {@link guide/expression expression} is truthy then - * the element is shown or hidden respectively. - * - * @example - <example module="ngAnimate" deps="angular-animate.js" animations="true"> - <file name="index.html"> - Click me: <input type="checkbox" ng-model="checked"><br/> - <div> - Show: - <div class="check-element animate-hide" ng-show="checked"> - <span class="glyphicon glyphicon-thumbs-up"></span> I show up when your checkbox is checked. - </div> - </div> - <div> - Hide: - <div class="check-element animate-hide" ng-hide="checked"> - <span class="glyphicon glyphicon-thumbs-down"></span> I hide when your checkbox is checked. - </div> - </div> - </file> - <file name="glyphicons.css"> - @import url(../../components/bootstrap-3.1.1/css/bootstrap.css); - </file> - <file name="animations.css"> - .animate-hide { - -webkit-transition: all linear 0.5s; - transition: all linear 0.5s; - line-height: 20px; - opacity: 1; - padding: 10px; - border: 1px solid black; - background: white; - } - - .animate-hide.ng-hide { - line-height: 0; - opacity: 0; - padding: 0 10px; - } - - .check-element { - padding: 10px; - border: 1px solid black; - background: white; - } - </file> - <file name="protractor.js" type="protractor"> - var thumbsUp = element(by.css('span.glyphicon-thumbs-up')); - var thumbsDown = element(by.css('span.glyphicon-thumbs-down')); - - it('should check ng-show / ng-hide', function() { - expect(thumbsUp.isDisplayed()).toBeFalsy(); - expect(thumbsDown.isDisplayed()).toBeTruthy(); - - element(by.model('checked')).click(); - - expect(thumbsUp.isDisplayed()).toBeTruthy(); - expect(thumbsDown.isDisplayed()).toBeFalsy(); - }); - </file> - </example> - */ -var ngHideDirective = ['$animate', function($animate) { - return { - restrict: 'A', - multiElement: true, - link: function(scope, element, attr) { - scope.$watch(attr.ngHide, function ngHideWatchAction(value) { - // The comment inside of the ngShowDirective explains why we add and - // remove a temporary class for the show/hide animation - $animate[value ? 'addClass' : 'removeClass'](element,NG_HIDE_CLASS, { - tempClasses: NG_HIDE_IN_PROGRESS_CLASS - }); - }); - } - }; -}]; - -/** - * @ngdoc directive - * @name ngStyle - * @restrict AC - * - * @description - * The `ngStyle` directive allows you to set CSS style on an HTML element conditionally. - * - * @element ANY - * @param {expression} ngStyle - * - * {@link guide/expression Expression} which evals to an - * object whose keys are CSS style names and values are corresponding values for those CSS - * keys. - * - * Since some CSS style names are not valid keys for an object, they must be quoted. - * See the 'background-color' style in the example below. - * - * @example - <example> - <file name="index.html"> - <input type="button" value="set color" ng-click="myStyle={color:'red'}"> - <input type="button" value="set background" ng-click="myStyle={'background-color':'blue'}"> - <input type="button" value="clear" ng-click="myStyle={}"> - <br/> - <span ng-style="myStyle">Sample Text</span> - <pre>myStyle={{myStyle}}</pre> - </file> - <file name="style.css"> - span { - color: black; - } - </file> - <file name="protractor.js" type="protractor"> - var colorSpan = element(by.css('span')); - - it('should check ng-style', function() { - expect(colorSpan.getCssValue('color')).toBe('rgba(0, 0, 0, 1)'); - element(by.css('input[value=\'set color\']')).click(); - expect(colorSpan.getCssValue('color')).toBe('rgba(255, 0, 0, 1)'); - element(by.css('input[value=clear]')).click(); - expect(colorSpan.getCssValue('color')).toBe('rgba(0, 0, 0, 1)'); - }); - </file> - </example> - */ -var ngStyleDirective = ngDirective(function(scope, element, attr) { - scope.$watchCollection(attr.ngStyle, function ngStyleWatchAction(newStyles, oldStyles) { - if (oldStyles && (newStyles !== oldStyles)) { - forEach(oldStyles, function(val, style) { element.css(style, '');}); - } - if (newStyles) element.css(newStyles); - }); -}); - -/** - * @ngdoc directive - * @name ngSwitch - * @restrict EA - * - * @description - * The `ngSwitch` directive is used to conditionally swap DOM structure on your template based on a scope expression. - * Elements within `ngSwitch` but without `ngSwitchWhen` or `ngSwitchDefault` directives will be preserved at the location - * as specified in the template. - * - * The directive itself works similar to ngInclude, however, instead of downloading template code (or loading it - * from the template cache), `ngSwitch` simply chooses one of the nested elements and makes it visible based on which element - * matches the value obtained from the evaluated expression. In other words, you define a container element - * (where you place the directive), place an expression on the **`on="..."` attribute** - * (or the **`ng-switch="..."` attribute**), define any inner elements inside of the directive and place - * a when attribute per element. The when attribute is used to inform ngSwitch which element to display when the on - * expression is evaluated. If a matching expression is not found via a when attribute then an element with the default - * attribute is displayed. - * - * <div class="alert alert-info"> - * Be aware that the attribute values to match against cannot be expressions. They are interpreted - * as literal string values to match against. - * For example, **`ng-switch-when="someVal"`** will match against the string `"someVal"` not against the - * value of the expression `$scope.someVal`. - * </div> - - * @animations - * enter - happens after the ngSwitch contents change and the matched child element is placed inside the container - * leave - happens just after the ngSwitch contents change and just before the former contents are removed from the DOM - * - * @usage - * - * ``` - * <ANY ng-switch="expression"> - * <ANY ng-switch-when="matchValue1">...</ANY> - * <ANY ng-switch-when="matchValue2">...</ANY> - * <ANY ng-switch-default>...</ANY> - * </ANY> - * ``` - * - * - * @scope - * @priority 1200 - * @param {*} ngSwitch|on expression to match against <tt>ng-switch-when</tt>. - * On child elements add: - * - * * `ngSwitchWhen`: the case statement to match against. If match then this - * case will be displayed. If the same match appears multiple times, all the - * elements will be displayed. - * * `ngSwitchDefault`: the default case when no other case match. If there - * are multiple default cases, all of them will be displayed when no other - * case match. - * - * - * @example - <example module="switchExample" deps="angular-animate.js" animations="true"> - <file name="index.html"> - <div ng-controller="ExampleController"> - <select ng-model="selection" ng-options="item for item in items"> - </select> - <tt>selection={{selection}}</tt> - <hr/> - <div class="animate-switch-container" - ng-switch on="selection"> - <div class="animate-switch" ng-switch-when="settings">Settings Div</div> - <div class="animate-switch" ng-switch-when="home">Home Span</div> - <div class="animate-switch" ng-switch-default>default</div> - </div> - </div> - </file> - <file name="script.js"> - angular.module('switchExample', ['ngAnimate']) - .controller('ExampleController', ['$scope', function($scope) { - $scope.items = ['settings', 'home', 'other']; - $scope.selection = $scope.items[0]; - }]); - </file> - <file name="animations.css"> - .animate-switch-container { - position:relative; - background:white; - border:1px solid black; - height:40px; - overflow:hidden; - } - - .animate-switch { - padding:10px; - } - - .animate-switch.ng-animate { - -webkit-transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; - transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s; - - position:absolute; - top:0; - left:0; - right:0; - bottom:0; - } - - .animate-switch.ng-leave.ng-leave-active, - .animate-switch.ng-enter { - top:-50px; - } - .animate-switch.ng-leave, - .animate-switch.ng-enter.ng-enter-active { - top:0; - } - </file> - <file name="protractor.js" type="protractor"> - var switchElem = element(by.css('[ng-switch]')); - var select = element(by.model('selection')); - - it('should start in settings', function() { - expect(switchElem.getText()).toMatch(/Settings Div/); - }); - it('should change to home', function() { - select.all(by.css('option')).get(1).click(); - expect(switchElem.getText()).toMatch(/Home Span/); - }); - it('should select default', function() { - select.all(by.css('option')).get(2).click(); - expect(switchElem.getText()).toMatch(/default/); - }); - </file> - </example> - */ -var ngSwitchDirective = ['$animate', function($animate) { - return { - restrict: 'EA', - require: 'ngSwitch', - - // asks for $scope to fool the BC controller module - controller: ['$scope', function ngSwitchController() { - this.cases = {}; - }], - link: function(scope, element, attr, ngSwitchController) { - var watchExpr = attr.ngSwitch || attr.on, - selectedTranscludes = [], - selectedElements = [], - previousLeaveAnimations = [], - selectedScopes = []; - - var spliceFactory = function(array, index) { - return function() { array.splice(index, 1); }; - }; - - scope.$watch(watchExpr, function ngSwitchWatchAction(value) { - var i, ii; - for (i = 0, ii = previousLeaveAnimations.length; i < ii; ++i) { - $animate.cancel(previousLeaveAnimations[i]); - } - previousLeaveAnimations.length = 0; - - for (i = 0, ii = selectedScopes.length; i < ii; ++i) { - var selected = getBlockNodes(selectedElements[i].clone); - selectedScopes[i].$destroy(); - var promise = previousLeaveAnimations[i] = $animate.leave(selected); - promise.then(spliceFactory(previousLeaveAnimations, i)); - } - - selectedElements.length = 0; - selectedScopes.length = 0; - - if ((selectedTranscludes = ngSwitchController.cases['!' + value] || ngSwitchController.cases['?'])) { - forEach(selectedTranscludes, function(selectedTransclude) { - selectedTransclude.transclude(function(caseElement, selectedScope) { - selectedScopes.push(selectedScope); - var anchor = selectedTransclude.element; - caseElement[caseElement.length++] = document.createComment(' end ngSwitchWhen: '); - var block = { clone: caseElement }; - - selectedElements.push(block); - $animate.enter(caseElement, anchor.parent(), anchor); - }); - }); - } - }); - } - }; -}]; - -var ngSwitchWhenDirective = ngDirective({ - transclude: 'element', - priority: 1200, - require: '^ngSwitch', - multiElement: true, - link: function(scope, element, attrs, ctrl, $transclude) { - ctrl.cases['!' + attrs.ngSwitchWhen] = (ctrl.cases['!' + attrs.ngSwitchWhen] || []); - ctrl.cases['!' + attrs.ngSwitchWhen].push({ transclude: $transclude, element: element }); - } -}); - -var ngSwitchDefaultDirective = ngDirective({ - transclude: 'element', - priority: 1200, - require: '^ngSwitch', - multiElement: true, - link: function(scope, element, attr, ctrl, $transclude) { - ctrl.cases['?'] = (ctrl.cases['?'] || []); - ctrl.cases['?'].push({ transclude: $transclude, element: element }); - } -}); - -/** - * @ngdoc directive - * @name ngTransclude - * @restrict EAC - * - * @description - * Directive that marks the insertion point for the transcluded DOM of the nearest parent directive that uses transclusion. - * - * Any existing content of the element that this directive is placed on will be removed before the transcluded content is inserted. - * - * @element ANY - * - * @example - <example module="transcludeExample"> - <file name="index.html"> - <script> - angular.module('transcludeExample', []) - .directive('pane', function(){ - return { - restrict: 'E', - transclude: true, - scope: { title:'@' }, - template: '<div style="border: 1px solid black;">' + - '<div style="background-color: gray">{{title}}</div>' + - '<ng-transclude></ng-transclude>' + - '</div>' - }; - }) - .controller('ExampleController', ['$scope', function($scope) { - $scope.title = 'Lorem Ipsum'; - $scope.text = 'Neque porro quisquam est qui dolorem ipsum quia dolor...'; - }]); - </script> - <div ng-controller="ExampleController"> - <input ng-model="title"> <br/> - <textarea ng-model="text"></textarea> <br/> - <pane title="{{title}}">{{text}}</pane> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should have transcluded', function() { - var titleElement = element(by.model('title')); - titleElement.clear(); - titleElement.sendKeys('TITLE'); - var textElement = element(by.model('text')); - textElement.clear(); - textElement.sendKeys('TEXT'); - expect(element(by.binding('title')).getText()).toEqual('TITLE'); - expect(element(by.binding('text')).getText()).toEqual('TEXT'); - }); - </file> - </example> - * - */ -var ngTranscludeDirective = ngDirective({ - restrict: 'EAC', - link: function($scope, $element, $attrs, controller, $transclude) { - if (!$transclude) { - throw minErr('ngTransclude')('orphan', - 'Illegal use of ngTransclude directive in the template! ' + - 'No parent directive that requires a transclusion found. ' + - 'Element: {0}', - startingTag($element)); - } - - $transclude(function(clone) { - $element.empty(); - $element.append(clone); - }); - } -}); - -/** - * @ngdoc directive - * @name script - * @restrict E - * - * @description - * Load the content of a `<script>` element into {@link ng.$templateCache `$templateCache`}, so that the - * template can be used by {@link ng.directive:ngInclude `ngInclude`}, - * {@link ngRoute.directive:ngView `ngView`}, or {@link guide/directive directives}. The type of the - * `<script>` element must be specified as `text/ng-template`, and a cache name for the template must be - * assigned through the element's `id`, which can then be used as a directive's `templateUrl`. - * - * @param {string} type Must be set to `'text/ng-template'`. - * @param {string} id Cache name of the template. - * - * @example - <example> - <file name="index.html"> - <script type="text/ng-template" id="/tpl.html"> - Content of the template. - </script> - - <a ng-click="currentTpl='/tpl.html'" id="tpl-link">Load inlined template</a> - <div id="tpl-content" ng-include src="currentTpl"></div> - </file> - <file name="protractor.js" type="protractor"> - it('should load template defined inside script tag', function() { - element(by.css('#tpl-link')).click(); - expect(element(by.css('#tpl-content')).getText()).toMatch(/Content of the template/); - }); - </file> - </example> - */ -var scriptDirective = ['$templateCache', function($templateCache) { - return { - restrict: 'E', - terminal: true, - compile: function(element, attr) { - if (attr.type == 'text/ng-template') { - var templateUrl = attr.id, - text = element[0].text; - - $templateCache.put(templateUrl, text); - } - } - }; -}]; - -var ngOptionsMinErr = minErr('ngOptions'); -/** - * @ngdoc directive - * @name select - * @restrict E - * - * @description - * HTML `SELECT` element with angular data-binding. - * - * # `ngOptions` - * - * The `ngOptions` attribute can be used to dynamically generate a list of `<option>` - * elements for the `<select>` element using the array or object obtained by evaluating the - * `ngOptions` comprehension expression. - * - * In many cases, `ngRepeat` can be used on `<option>` elements instead of `ngOptions` to achieve a - * similar result. However, `ngOptions` provides some benefits such as reducing memory and - * increasing speed by not creating a new scope for each repeated instance, as well as providing - * more flexibility in how the `<select>`'s model is assigned via the `select` **`as`** part of the - * comprehension expression. `ngOptions` should be used when the `<select>` model needs to be bound - * to a non-string value. This is because an option element can only be bound to string values at - * present. - * - * When an item in the `<select>` menu is selected, the array element or object property - * represented by the selected option will be bound to the model identified by the `ngModel` - * directive. - * - * Optionally, a single hard-coded `<option>` element, with the value set to an empty string, can - * be nested into the `<select>` element. This element will then represent the `null` or "not selected" - * option. See example below for demonstration. - * - * <div class="alert alert-warning"> - * **Note:** `ngModel` compares by reference, not value. This is important when binding to an - * array of objects. See an example [in this jsfiddle](http://jsfiddle.net/qWzTb/). - * </div> - * - * ## `select` **`as`** - * - * Using `select` **`as`** will bind the result of the `select` expression to the model, but - * the value of the `<select>` and `<option>` html elements will be either the index (for array data sources) - * or property name (for object data sources) of the value within the collection. If a **`track by`** expression - * is used, the result of that expression will be set as the value of the `option` and `select` elements. - * - * - * ### `select` **`as`** and **`track by`** - * - * <div class="alert alert-warning"> - * Do not use `select` **`as`** and **`track by`** in the same expression. They are not designed to work together. - * </div> - * - * Consider the following example: - * - * ```html - * <select ng-options="item.subItem as item.label for item in values track by item.id" ng-model="selected"> - * ``` - * - * ```js - * $scope.values = [{ - * id: 1, - * label: 'aLabel', - * subItem: { name: 'aSubItem' } - * }, { - * id: 2, - * label: 'bLabel', - * subItem: { name: 'bSubItem' } - * }]; - * - * $scope.selected = { name: 'aSubItem' }; - * ``` - * - * With the purpose of preserving the selection, the **`track by`** expression is always applied to the element - * of the data source (to `item` in this example). To calculate whether an element is selected, we do the - * following: - * - * 1. Apply **`track by`** to the elements in the array. In the example: `[1, 2]` - * 2. Apply **`track by`** to the already selected value in `ngModel`. - * In the example: this is not possible as **`track by`** refers to `item.id`, but the selected - * value from `ngModel` is `{name: 'aSubItem'}`, so the **`track by`** expression is applied to - * a wrong object, the selected element can't be found, `<select>` is always reset to the "not - * selected" option. - * - * - * @param {string} ngModel Assignable angular expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} required The control is considered valid only if value is entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {comprehension_expression=} ngOptions in one of the following forms: - * - * * for array data sources: - * * `label` **`for`** `value` **`in`** `array` - * * `select` **`as`** `label` **`for`** `value` **`in`** `array` - * * `label` **`group by`** `group` **`for`** `value` **`in`** `array` - * * `label` **`group by`** `group` **`for`** `value` **`in`** `array` **`track by`** `trackexpr` - * * `label` **`for`** `value` **`in`** `array` | orderBy:`orderexpr` **`track by`** `trackexpr` - * (for including a filter with `track by`) - * * for object data sources: - * * `label` **`for (`**`key` **`,`** `value`**`) in`** `object` - * * `select` **`as`** `label` **`for (`**`key` **`,`** `value`**`) in`** `object` - * * `label` **`group by`** `group` **`for (`**`key`**`,`** `value`**`) in`** `object` - * * `select` **`as`** `label` **`group by`** `group` - * **`for` `(`**`key`**`,`** `value`**`) in`** `object` - * - * Where: - * - * * `array` / `object`: an expression which evaluates to an array / object to iterate over. - * * `value`: local variable which will refer to each item in the `array` or each property value - * of `object` during iteration. - * * `key`: local variable which will refer to a property name in `object` during iteration. - * * `label`: The result of this expression will be the label for `<option>` element. The - * `expression` will most likely refer to the `value` variable (e.g. `value.propertyName`). - * * `select`: The result of this expression will be bound to the model of the parent `<select>` - * element. If not specified, `select` expression will default to `value`. - * * `group`: The result of this expression will be used to group options using the `<optgroup>` - * DOM element. - * * `trackexpr`: Used when working with an array of objects. The result of this expression will be - * used to identify the objects in the array. The `trackexpr` will most likely refer to the - * `value` variable (e.g. `value.propertyName`). With this the selection is preserved - * even when the options are recreated (e.g. reloaded from the server). - * - * @example - <example module="selectExample"> - <file name="index.html"> - <script> - angular.module('selectExample', []) - .controller('ExampleController', ['$scope', function($scope) { - $scope.colors = [ - {name:'black', shade:'dark'}, - {name:'white', shade:'light'}, - {name:'red', shade:'dark'}, - {name:'blue', shade:'dark'}, - {name:'yellow', shade:'light'} - ]; - $scope.myColor = $scope.colors[2]; // red - }]); - </script> - <div ng-controller="ExampleController"> - <ul> - <li ng-repeat="color in colors"> - Name: <input ng-model="color.name"> - [<a href ng-click="colors.splice($index, 1)">X</a>] - </li> - <li> - [<a href ng-click="colors.push({})">add</a>] - </li> - </ul> - <hr/> - Color (null not allowed): - <select ng-model="myColor" ng-options="color.name for color in colors"></select><br> - - Color (null allowed): - <span class="nullable"> - <select ng-model="myColor" ng-options="color.name for color in colors"> - <option value="">-- choose color --</option> - </select> - </span><br/> - - Color grouped by shade: - <select ng-model="myColor" ng-options="color.name group by color.shade for color in colors"> - </select><br/> - - - Select <a href ng-click="myColor = { name:'not in list', shade: 'other' }">bogus</a>.<br> - <hr/> - Currently selected: {{ {selected_color:myColor} }} - <div style="border:solid 1px black; height:20px" - ng-style="{'background-color':myColor.name}"> - </div> - </div> - </file> - <file name="protractor.js" type="protractor"> - it('should check ng-options', function() { - expect(element(by.binding('{selected_color:myColor}')).getText()).toMatch('red'); - element.all(by.model('myColor')).first().click(); - element.all(by.css('select[ng-model="myColor"] option')).first().click(); - expect(element(by.binding('{selected_color:myColor}')).getText()).toMatch('black'); - element(by.css('.nullable select[ng-model="myColor"]')).click(); - element.all(by.css('.nullable select[ng-model="myColor"] option')).first().click(); - expect(element(by.binding('{selected_color:myColor}')).getText()).toMatch('null'); - }); - </file> - </example> - */ - -var ngOptionsDirective = valueFn({ - restrict: 'A', - terminal: true -}); - -// jshint maxlen: false -var selectDirective = ['$compile', '$parse', function($compile, $parse) { - //000011111111110000000000022222222220000000000000000000003333333333000000000000004444444444444440000000005555555555555550000000666666666666666000000000000000777777777700000000000000000008888888888 - var NG_OPTIONS_REGEXP = /^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/, - nullModelCtrl = {$setViewValue: noop}; -// jshint maxlen: 100 - - return { - restrict: 'E', - require: ['select', '?ngModel'], - controller: ['$element', '$scope', '$attrs', function($element, $scope, $attrs) { - var self = this, - optionsMap = {}, - ngModelCtrl = nullModelCtrl, - nullOption, - unknownOption; - - - self.databound = $attrs.ngModel; - - - self.init = function(ngModelCtrl_, nullOption_, unknownOption_) { - ngModelCtrl = ngModelCtrl_; - nullOption = nullOption_; - unknownOption = unknownOption_; - }; - - - self.addOption = function(value, element) { - assertNotHasOwnProperty(value, '"option value"'); - optionsMap[value] = true; - - if (ngModelCtrl.$viewValue == value) { - $element.val(value); - if (unknownOption.parent()) unknownOption.remove(); - } - // Workaround for https://code.google.com/p/chromium/issues/detail?id=381459 - // Adding an <option selected="selected"> element to a <select required="required"> should - // automatically select the new element - if (element && element[0].hasAttribute('selected')) { - element[0].selected = true; - } - }; - - - self.removeOption = function(value) { - if (this.hasOption(value)) { - delete optionsMap[value]; - if (ngModelCtrl.$viewValue === value) { - this.renderUnknownOption(value); - } - } - }; - - - self.renderUnknownOption = function(val) { - var unknownVal = '? ' + hashKey(val) + ' ?'; - unknownOption.val(unknownVal); - $element.prepend(unknownOption); - $element.val(unknownVal); - unknownOption.prop('selected', true); // needed for IE - }; - - - self.hasOption = function(value) { - return optionsMap.hasOwnProperty(value); - }; - - $scope.$on('$destroy', function() { - // disable unknown option so that we don't do work when the whole select is being destroyed - self.renderUnknownOption = noop; - }); - }], - - link: function(scope, element, attr, ctrls) { - // if ngModel is not defined, we don't need to do anything - if (!ctrls[1]) return; - - var selectCtrl = ctrls[0], - ngModelCtrl = ctrls[1], - multiple = attr.multiple, - optionsExp = attr.ngOptions, - nullOption = false, // if false, user will not be able to select it (used by ngOptions) - emptyOption, - renderScheduled = false, - // we can't just jqLite('<option>') since jqLite is not smart enough - // to create it in <select> and IE barfs otherwise. - optionTemplate = jqLite(document.createElement('option')), - optGroupTemplate =jqLite(document.createElement('optgroup')), - unknownOption = optionTemplate.clone(); - - // find "null" option - for (var i = 0, children = element.children(), ii = children.length; i < ii; i++) { - if (children[i].value === '') { - emptyOption = nullOption = children.eq(i); - break; - } - } - - selectCtrl.init(ngModelCtrl, nullOption, unknownOption); - - // required validator - if (multiple) { - ngModelCtrl.$isEmpty = function(value) { - return !value || value.length === 0; - }; - } - - if (optionsExp) setupAsOptions(scope, element, ngModelCtrl); - else if (multiple) setupAsMultiple(scope, element, ngModelCtrl); - else setupAsSingle(scope, element, ngModelCtrl, selectCtrl); - - - //////////////////////////// - - - - function setupAsSingle(scope, selectElement, ngModelCtrl, selectCtrl) { - ngModelCtrl.$render = function() { - var viewValue = ngModelCtrl.$viewValue; - - if (selectCtrl.hasOption(viewValue)) { - if (unknownOption.parent()) unknownOption.remove(); - selectElement.val(viewValue); - if (viewValue === '') emptyOption.prop('selected', true); // to make IE9 happy - } else { - if (isUndefined(viewValue) && emptyOption) { - selectElement.val(''); - } else { - selectCtrl.renderUnknownOption(viewValue); - } - } - }; - - selectElement.on('change', function() { - scope.$apply(function() { - if (unknownOption.parent()) unknownOption.remove(); - ngModelCtrl.$setViewValue(selectElement.val()); - }); - }); - } - - function setupAsMultiple(scope, selectElement, ctrl) { - var lastView; - ctrl.$render = function() { - var items = new HashMap(ctrl.$viewValue); - forEach(selectElement.find('option'), function(option) { - option.selected = isDefined(items.get(option.value)); - }); - }; - - // we have to do it on each watch since ngModel watches reference, but - // we need to work of an array, so we need to see if anything was inserted/removed - scope.$watch(function selectMultipleWatch() { - if (!equals(lastView, ctrl.$viewValue)) { - lastView = shallowCopy(ctrl.$viewValue); - ctrl.$render(); - } - }); - - selectElement.on('change', function() { - scope.$apply(function() { - var array = []; - forEach(selectElement.find('option'), function(option) { - if (option.selected) { - array.push(option.value); - } - }); - ctrl.$setViewValue(array); - }); - }); - } - - function setupAsOptions(scope, selectElement, ctrl) { - var match; - - if (!(match = optionsExp.match(NG_OPTIONS_REGEXP))) { - throw ngOptionsMinErr('iexp', - "Expected expression in form of " + - "'_select_ (as _label_)? for (_key_,)?_value_ in _collection_'" + - " but got '{0}'. Element: {1}", - optionsExp, startingTag(selectElement)); - } - - var displayFn = $parse(match[2] || match[1]), - valueName = match[4] || match[6], - selectAs = / as /.test(match[0]) && match[1], - selectAsFn = selectAs ? $parse(selectAs) : null, - keyName = match[5], - groupByFn = $parse(match[3] || ''), - valueFn = $parse(match[2] ? match[1] : valueName), - valuesFn = $parse(match[7]), - track = match[8], - trackFn = track ? $parse(match[8]) : null, - trackKeysCache = {}, - // This is an array of array of existing option groups in DOM. - // We try to reuse these if possible - // - optionGroupsCache[0] is the options with no option group - // - optionGroupsCache[?][0] is the parent: either the SELECT or OPTGROUP element - optionGroupsCache = [[{element: selectElement, label:''}]], - //re-usable object to represent option's locals - locals = {}; - - if (nullOption) { - // compile the element since there might be bindings in it - $compile(nullOption)(scope); - - // remove the class, which is added automatically because we recompile the element and it - // becomes the compilation root - nullOption.removeClass('ng-scope'); - - // we need to remove it before calling selectElement.empty() because otherwise IE will - // remove the label from the element. wtf? - nullOption.remove(); - } - - // clear contents, we'll add what's needed based on the model - selectElement.empty(); - - selectElement.on('change', selectionChanged); - - ctrl.$render = render; - - scope.$watchCollection(valuesFn, scheduleRendering); - scope.$watchCollection(getLabels, scheduleRendering); - - if (multiple) { - scope.$watchCollection(function() { return ctrl.$modelValue; }, scheduleRendering); - } - - // ------------------------------------------------------------------ // - - function callExpression(exprFn, key, value) { - locals[valueName] = value; - if (keyName) locals[keyName] = key; - return exprFn(scope, locals); - } - - function selectionChanged() { - scope.$apply(function() { - var collection = valuesFn(scope) || []; - var viewValue; - if (multiple) { - viewValue = []; - forEach(selectElement.val(), function(selectedKey) { - selectedKey = trackFn ? trackKeysCache[selectedKey] : selectedKey; - viewValue.push(getViewValue(selectedKey, collection[selectedKey])); - }); - } else { - var selectedKey = trackFn ? trackKeysCache[selectElement.val()] : selectElement.val(); - viewValue = getViewValue(selectedKey, collection[selectedKey]); - } - ctrl.$setViewValue(viewValue); - render(); - }); - } - - function getViewValue(key, value) { - if (key === '?') { - return undefined; - } else if (key === '') { - return null; - } else { - var viewValueFn = selectAsFn ? selectAsFn : valueFn; - return callExpression(viewValueFn, key, value); - } - } - - function getLabels() { - var values = valuesFn(scope); - var toDisplay; - if (values && isArray(values)) { - toDisplay = new Array(values.length); - for (var i = 0, ii = values.length; i < ii; i++) { - toDisplay[i] = callExpression(displayFn, i, values[i]); - } - return toDisplay; - } else if (values) { - // TODO: Add a test for this case - toDisplay = {}; - for (var prop in values) { - if (values.hasOwnProperty(prop)) { - toDisplay[prop] = callExpression(displayFn, prop, values[prop]); - } - } - } - return toDisplay; - } - - function createIsSelectedFn(viewValue) { - var selectedSet; - if (multiple) { - if (trackFn && isArray(viewValue)) { - - selectedSet = new HashMap([]); - for (var trackIndex = 0; trackIndex < viewValue.length; trackIndex++) { - // tracking by key - selectedSet.put(callExpression(trackFn, null, viewValue[trackIndex]), true); - } - } else { - selectedSet = new HashMap(viewValue); - } - } else if (trackFn) { - viewValue = callExpression(trackFn, null, viewValue); - } - - return function isSelected(key, value) { - var compareValueFn; - if (trackFn) { - compareValueFn = trackFn; - } else if (selectAsFn) { - compareValueFn = selectAsFn; - } else { - compareValueFn = valueFn; - } - - if (multiple) { - return isDefined(selectedSet.remove(callExpression(compareValueFn, key, value))); - } else { - return viewValue === callExpression(compareValueFn, key, value); - } - }; - } - - function scheduleRendering() { - if (!renderScheduled) { - scope.$$postDigest(render); - renderScheduled = true; - } - } - - /** - * A new labelMap is created with each render. - * This function is called for each existing option with added=false, - * and each new option with added=true. - * - Labels that are passed to this method twice, - * (once with added=true and once with added=false) will end up with a value of 0, and - * will cause no change to happen to the corresponding option. - * - Labels that are passed to this method only once with added=false will end up with a - * value of -1 and will eventually be passed to selectCtrl.removeOption() - * - Labels that are passed to this method only once with added=true will end up with a - * value of 1 and will eventually be passed to selectCtrl.addOption() - */ - function updateLabelMap(labelMap, label, added) { - labelMap[label] = labelMap[label] || 0; - labelMap[label] += (added ? 1 : -1); - } - - function render() { - renderScheduled = false; - - // Temporary location for the option groups before we render them - var optionGroups = {'':[]}, - optionGroupNames = [''], - optionGroupName, - optionGroup, - option, - existingParent, existingOptions, existingOption, - viewValue = ctrl.$viewValue, - values = valuesFn(scope) || [], - keys = keyName ? sortedKeys(values) : values, - key, - value, - groupLength, length, - groupIndex, index, - labelMap = {}, - selected, - isSelected = createIsSelectedFn(viewValue), - anySelected = false, - lastElement, - element, - label, - optionId; - - trackKeysCache = {}; - - // We now build up the list of options we need (we merge later) - for (index = 0; length = keys.length, index < length; index++) { - key = index; - if (keyName) { - key = keys[index]; - if (key.charAt(0) === '$') continue; - } - value = values[key]; - - optionGroupName = callExpression(groupByFn, key, value) || ''; - if (!(optionGroup = optionGroups[optionGroupName])) { - optionGroup = optionGroups[optionGroupName] = []; - optionGroupNames.push(optionGroupName); - } - - selected = isSelected(key, value); - anySelected = anySelected || selected; - - label = callExpression(displayFn, key, value); // what will be seen by the user - - // doing displayFn(scope, locals) || '' overwrites zero values - label = isDefined(label) ? label : ''; - optionId = trackFn ? trackFn(scope, locals) : (keyName ? keys[index] : index); - if (trackFn) { - trackKeysCache[optionId] = key; - } - - optionGroup.push({ - // either the index into array or key from object - id: optionId, - label: label, - selected: selected // determine if we should be selected - }); - } - if (!multiple) { - if (nullOption || viewValue === null) { - // insert null option if we have a placeholder, or the model is null - optionGroups[''].unshift({id:'', label:'', selected:!anySelected}); - } else if (!anySelected) { - // option could not be found, we have to insert the undefined item - optionGroups[''].unshift({id:'?', label:'', selected:true}); - } - } - - // Now we need to update the list of DOM nodes to match the optionGroups we computed above - for (groupIndex = 0, groupLength = optionGroupNames.length; - groupIndex < groupLength; - groupIndex++) { - // current option group name or '' if no group - optionGroupName = optionGroupNames[groupIndex]; - - // list of options for that group. (first item has the parent) - optionGroup = optionGroups[optionGroupName]; - - if (optionGroupsCache.length <= groupIndex) { - // we need to grow the optionGroups - existingParent = { - element: optGroupTemplate.clone().attr('label', optionGroupName), - label: optionGroup.label - }; - existingOptions = [existingParent]; - optionGroupsCache.push(existingOptions); - selectElement.append(existingParent.element); - } else { - existingOptions = optionGroupsCache[groupIndex]; - existingParent = existingOptions[0]; // either SELECT (no group) or OPTGROUP element - - // update the OPTGROUP label if not the same. - if (existingParent.label != optionGroupName) { - existingParent.element.attr('label', existingParent.label = optionGroupName); - } - } - - lastElement = null; // start at the beginning - for (index = 0, length = optionGroup.length; index < length; index++) { - option = optionGroup[index]; - if ((existingOption = existingOptions[index + 1])) { - // reuse elements - lastElement = existingOption.element; - if (existingOption.label !== option.label) { - updateLabelMap(labelMap, existingOption.label, false); - updateLabelMap(labelMap, option.label, true); - lastElement.text(existingOption.label = option.label); - lastElement.prop('label', existingOption.label); - } - if (existingOption.id !== option.id) { - lastElement.val(existingOption.id = option.id); - } - // lastElement.prop('selected') provided by jQuery has side-effects - if (lastElement[0].selected !== option.selected) { - lastElement.prop('selected', (existingOption.selected = option.selected)); - if (msie) { - // See #7692 - // The selected item wouldn't visually update on IE without this. - // Tested on Win7: IE9, IE10 and IE11. Future IEs should be tested as well - lastElement.prop('selected', existingOption.selected); - } - } - } else { - // grow elements - - // if it's a null option - if (option.id === '' && nullOption) { - // put back the pre-compiled element - element = nullOption; - } else { - // jQuery(v1.4.2) Bug: We should be able to chain the method calls, but - // in this version of jQuery on some browser the .text() returns a string - // rather then the element. - (element = optionTemplate.clone()) - .val(option.id) - .prop('selected', option.selected) - .attr('selected', option.selected) - .prop('label', option.label) - .text(option.label); - } - - existingOptions.push(existingOption = { - element: element, - label: option.label, - id: option.id, - selected: option.selected - }); - updateLabelMap(labelMap, option.label, true); - if (lastElement) { - lastElement.after(element); - } else { - existingParent.element.append(element); - } - lastElement = element; - } - } - // remove any excessive OPTIONs in a group - index++; // increment since the existingOptions[0] is parent element not OPTION - while (existingOptions.length > index) { - option = existingOptions.pop(); - updateLabelMap(labelMap, option.label, false); - option.element.remove(); - } - } - // remove any excessive OPTGROUPs from select - while (optionGroupsCache.length > groupIndex) { - // remove all the labels in the option group - optionGroup = optionGroupsCache.pop(); - for (index = 1; index < optionGroup.length; ++index) { - updateLabelMap(labelMap, optionGroup[index].label, false); - } - optionGroup[0].element.remove(); - } - forEach(labelMap, function(count, label) { - if (count > 0) { - selectCtrl.addOption(label); - } else if (count < 0) { - selectCtrl.removeOption(label); - } - }); - } - } - } - }; -}]; - -var optionDirective = ['$interpolate', function($interpolate) { - var nullSelectCtrl = { - addOption: noop, - removeOption: noop - }; - - return { - restrict: 'E', - priority: 100, - compile: function(element, attr) { - if (isUndefined(attr.value)) { - var interpolateFn = $interpolate(element.text(), true); - if (!interpolateFn) { - attr.$set('value', element.text()); - } - } - - return function(scope, element, attr) { - var selectCtrlName = '$selectController', - parent = element.parent(), - selectCtrl = parent.data(selectCtrlName) || - parent.parent().data(selectCtrlName); // in case we are in optgroup - - if (!selectCtrl || !selectCtrl.databound) { - selectCtrl = nullSelectCtrl; - } - - if (interpolateFn) { - scope.$watch(interpolateFn, function interpolateWatchAction(newVal, oldVal) { - attr.$set('value', newVal); - if (oldVal !== newVal) { - selectCtrl.removeOption(oldVal); - } - selectCtrl.addOption(newVal, element); - }); - } else { - selectCtrl.addOption(attr.value, element); - } - - element.on('$destroy', function() { - selectCtrl.removeOption(attr.value); - }); - }; - } - }; -}]; - -var styleDirective = valueFn({ - restrict: 'E', - terminal: false -}); - -var requiredDirective = function() { - return { - restrict: 'A', - require: '?ngModel', - link: function(scope, elm, attr, ctrl) { - if (!ctrl) return; - attr.required = true; // force truthy in case we are on non input element - - ctrl.$validators.required = function(modelValue, viewValue) { - return !attr.required || !ctrl.$isEmpty(viewValue); - }; - - attr.$observe('required', function() { - ctrl.$validate(); - }); - } - }; -}; - - -var patternDirective = function() { - return { - restrict: 'A', - require: '?ngModel', - link: function(scope, elm, attr, ctrl) { - if (!ctrl) return; - - var regexp, patternExp = attr.ngPattern || attr.pattern; - attr.$observe('pattern', function(regex) { - if (isString(regex) && regex.length > 0) { - regex = new RegExp('^' + regex + '$'); - } - - if (regex && !regex.test) { - throw minErr('ngPattern')('noregexp', - 'Expected {0} to be a RegExp but was {1}. Element: {2}', patternExp, - regex, startingTag(elm)); - } - - regexp = regex || undefined; - ctrl.$validate(); - }); - - ctrl.$validators.pattern = function(value) { - return ctrl.$isEmpty(value) || isUndefined(regexp) || regexp.test(value); - }; - } - }; -}; - - -var maxlengthDirective = function() { - return { - restrict: 'A', - require: '?ngModel', - link: function(scope, elm, attr, ctrl) { - if (!ctrl) return; - - var maxlength = -1; - attr.$observe('maxlength', function(value) { - var intVal = int(value); - maxlength = isNaN(intVal) ? -1 : intVal; - ctrl.$validate(); - }); - ctrl.$validators.maxlength = function(modelValue, viewValue) { - return (maxlength < 0) || ctrl.$isEmpty(modelValue) || (viewValue.length <= maxlength); - }; - } - }; -}; - -var minlengthDirective = function() { - return { - restrict: 'A', - require: '?ngModel', - link: function(scope, elm, attr, ctrl) { - if (!ctrl) return; - - var minlength = 0; - attr.$observe('minlength', function(value) { - minlength = int(value) || 0; - ctrl.$validate(); - }); - ctrl.$validators.minlength = function(modelValue, viewValue) { - return ctrl.$isEmpty(viewValue) || viewValue.length >= minlength; - }; - } - }; -}; - - if (window.angular.bootstrap) { - //AngularJS is already loaded, so we can return here... - console.log('WARNING: Tried to load angular more than once.'); - return; - } - - //try to bind to jquery now so that one can write jqLite(document).ready() - //but we will rebind on bootstrap again. - bindJQuery(); - - publishExternalAPI(angular); - - jqLite(document).ready(function() { - angularInit(document, bootstrap); - }); - -})(window, document); - -!window.angular.$$csp() && window.angular.element(document).find('head').prepend('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\\:form{display:block;}</style>'); \ No newline at end of file diff --git a/src/main/webapp/bower_components/angular/angular.min.js b/src/main/webapp/bower_components/angular/angular.min.js deleted file mode 100644 index 2b79daab..00000000 --- a/src/main/webapp/bower_components/angular/angular.min.js +++ /dev/null @@ -1,251 +0,0 @@ -/* - AngularJS v1.3.11 - (c) 2010-2014 Google, Inc. http://angularjs.org - License: MIT -*/ -(function(M,Y,t){'use strict';function T(b){return function(){var a=arguments[0],c;c="["+(b?b+":":"")+a+"] http://errors.angularjs.org/1.3.11/"+(b?b+"/":"")+a;for(a=1;a<arguments.length;a++){c=c+(1==a?"?":"&")+"p"+(a-1)+"=";var d=encodeURIComponent,e;e=arguments[a];e="function"==typeof e?e.toString().replace(/ \{[\s\S]*$/,""):"undefined"==typeof e?"undefined":"string"!=typeof e?JSON.stringify(e):e;c+=d(e)}return Error(c)}}function Ta(b){if(null==b||Ua(b))return!1;var a=b.length;return b.nodeType=== -oa&&a?!0:F(b)||D(b)||0===a||"number"===typeof a&&0<a&&a-1 in b}function s(b,a,c){var d,e;if(b)if(G(b))for(d in b)"prototype"==d||"length"==d||"name"==d||b.hasOwnProperty&&!b.hasOwnProperty(d)||a.call(c,b[d],d,b);else if(D(b)||Ta(b)){var f="object"!==typeof b;d=0;for(e=b.length;d<e;d++)(f||d in b)&&a.call(c,b[d],d,b)}else if(b.forEach&&b.forEach!==s)b.forEach(a,c,b);else for(d in b)b.hasOwnProperty(d)&&a.call(c,b[d],d,b);return b}function Ed(b,a,c){for(var d=Object.keys(b).sort(),e=0;e<d.length;e++)a.call(c, -b[d[e]],d[e]);return d}function kc(b){return function(a,c){b(c,a)}}function Fd(){return++nb}function lc(b,a){a?b.$$hashKey=a:delete b.$$hashKey}function z(b){for(var a=b.$$hashKey,c=1,d=arguments.length;c<d;c++){var e=arguments[c];if(e)for(var f=Object.keys(e),g=0,h=f.length;g<h;g++){var l=f[g];b[l]=e[l]}}lc(b,a);return b}function ba(b){return parseInt(b,10)}function H(){}function pa(b){return b}function da(b){return function(){return b}}function A(b){return"undefined"===typeof b}function y(b){return"undefined"!== -typeof b}function I(b){return null!==b&&"object"===typeof b}function F(b){return"string"===typeof b}function V(b){return"number"===typeof b}function qa(b){return"[object Date]"===Da.call(b)}function G(b){return"function"===typeof b}function ob(b){return"[object RegExp]"===Da.call(b)}function Ua(b){return b&&b.window===b}function Va(b){return b&&b.$evalAsync&&b.$watch}function Wa(b){return"boolean"===typeof b}function mc(b){return!(!b||!(b.nodeName||b.prop&&b.attr&&b.find))}function Gd(b){var a={}; -b=b.split(",");var c;for(c=0;c<b.length;c++)a[b[c]]=!0;return a}function ua(b){return Q(b.nodeName||b[0]&&b[0].nodeName)}function Xa(b,a){var c=b.indexOf(a);0<=c&&b.splice(c,1);return a}function Ea(b,a,c,d){if(Ua(b)||Va(b))throw Ka("cpws");if(a){if(b===a)throw Ka("cpi");c=c||[];d=d||[];if(I(b)){var e=c.indexOf(b);if(-1!==e)return d[e];c.push(b);d.push(a)}if(D(b))for(var f=a.length=0;f<b.length;f++)e=Ea(b[f],null,c,d),I(b[f])&&(c.push(b[f]),d.push(e)),a.push(e);else{var g=a.$$hashKey;D(a)?a.length= -0:s(a,function(b,c){delete a[c]});for(f in b)b.hasOwnProperty(f)&&(e=Ea(b[f],null,c,d),I(b[f])&&(c.push(b[f]),d.push(e)),a[f]=e);lc(a,g)}}else if(a=b)D(b)?a=Ea(b,[],c,d):qa(b)?a=new Date(b.getTime()):ob(b)?(a=new RegExp(b.source,b.toString().match(/[^\/]*$/)[0]),a.lastIndex=b.lastIndex):I(b)&&(e=Object.create(Object.getPrototypeOf(b)),a=Ea(b,e,c,d));return a}function ra(b,a){if(D(b)){a=a||[];for(var c=0,d=b.length;c<d;c++)a[c]=b[c]}else if(I(b))for(c in a=a||{},b)if("$"!==c.charAt(0)||"$"!==c.charAt(1))a[c]= -b[c];return a||b}function fa(b,a){if(b===a)return!0;if(null===b||null===a)return!1;if(b!==b&&a!==a)return!0;var c=typeof b,d;if(c==typeof a&&"object"==c)if(D(b)){if(!D(a))return!1;if((c=b.length)==a.length){for(d=0;d<c;d++)if(!fa(b[d],a[d]))return!1;return!0}}else{if(qa(b))return qa(a)?fa(b.getTime(),a.getTime()):!1;if(ob(b)&&ob(a))return b.toString()==a.toString();if(Va(b)||Va(a)||Ua(b)||Ua(a)||D(a))return!1;c={};for(d in b)if("$"!==d.charAt(0)&&!G(b[d])){if(!fa(b[d],a[d]))return!1;c[d]=!0}for(d in a)if(!c.hasOwnProperty(d)&& -"$"!==d.charAt(0)&&a[d]!==t&&!G(a[d]))return!1;return!0}return!1}function Ya(b,a,c){return b.concat(Za.call(a,c))}function nc(b,a){var c=2<arguments.length?Za.call(arguments,2):[];return!G(a)||a instanceof RegExp?a:c.length?function(){return arguments.length?a.apply(b,Ya(c,arguments,0)):a.apply(b,c)}:function(){return arguments.length?a.apply(b,arguments):a.call(b)}}function Hd(b,a){var c=a;"string"===typeof b&&"$"===b.charAt(0)&&"$"===b.charAt(1)?c=t:Ua(a)?c="$WINDOW":a&&Y===a?c="$DOCUMENT":Va(a)&& -(c="$SCOPE");return c}function $a(b,a){if("undefined"===typeof b)return t;V(a)||(a=a?2:null);return JSON.stringify(b,Hd,a)}function oc(b){return F(b)?JSON.parse(b):b}function va(b){b=B(b).clone();try{b.empty()}catch(a){}var c=B("<div>").append(b).html();try{return b[0].nodeType===pb?Q(c):c.match(/^(<[^>]+>)/)[1].replace(/^<([\w\-]+)/,function(a,b){return"<"+Q(b)})}catch(d){return Q(c)}}function pc(b){try{return decodeURIComponent(b)}catch(a){}}function qc(b){var a={},c,d;s((b||"").split("&"),function(b){b&& -(c=b.replace(/\+/g,"%20").split("="),d=pc(c[0]),y(d)&&(b=y(c[1])?pc(c[1]):!0,rc.call(a,d)?D(a[d])?a[d].push(b):a[d]=[a[d],b]:a[d]=b))});return a}function Nb(b){var a=[];s(b,function(b,d){D(b)?s(b,function(b){a.push(Fa(d,!0)+(!0===b?"":"="+Fa(b,!0)))}):a.push(Fa(d,!0)+(!0===b?"":"="+Fa(b,!0)))});return a.length?a.join("&"):""}function qb(b){return Fa(b,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function Fa(b,a){return encodeURIComponent(b).replace(/%40/gi,"@").replace(/%3A/gi, -":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%3B/gi,";").replace(/%20/g,a?"%20":"+")}function Id(b,a){var c,d,e=rb.length;b=B(b);for(d=0;d<e;++d)if(c=rb[d]+a,F(c=b.attr(c)))return c;return null}function Jd(b,a){var c,d,e={};s(rb,function(a){a+="app";!c&&b.hasAttribute&&b.hasAttribute(a)&&(c=b,d=b.getAttribute(a))});s(rb,function(a){a+="app";var e;!c&&(e=b.querySelector("["+a.replace(":","\\:")+"]"))&&(c=e,d=e.getAttribute(a))});c&&(e.strictDi=null!==Id(c,"strict-di"),a(c,d?[d]:[],e))}function sc(b, -a,c){I(c)||(c={});c=z({strictDi:!1},c);var d=function(){b=B(b);if(b.injector()){var d=b[0]===Y?"document":va(b);throw Ka("btstrpd",d.replace(/</,"<").replace(/>/,">"));}a=a||[];a.unshift(["$provide",function(a){a.value("$rootElement",b)}]);c.debugInfoEnabled&&a.push(["$compileProvider",function(a){a.debugInfoEnabled(!0)}]);a.unshift("ng");d=Ob(a,c.strictDi);d.invoke(["$rootScope","$rootElement","$compile","$injector",function(a,b,c,d){a.$apply(function(){b.data("$injector",d);c(b)(a)})}]);return d}, -e=/^NG_ENABLE_DEBUG_INFO!/,f=/^NG_DEFER_BOOTSTRAP!/;M&&e.test(M.name)&&(c.debugInfoEnabled=!0,M.name=M.name.replace(e,""));if(M&&!f.test(M.name))return d();M.name=M.name.replace(f,"");ga.resumeBootstrap=function(b){s(b,function(b){a.push(b)});d()}}function Kd(){M.name="NG_ENABLE_DEBUG_INFO!"+M.name;M.location.reload()}function Ld(b){b=ga.element(b).injector();if(!b)throw Ka("test");return b.get("$$testability")}function tc(b,a){a=a||"_";return b.replace(Md,function(b,d){return(d?a:"")+b.toLowerCase()})} -function Nd(){var b;uc||((sa=M.jQuery)&&sa.fn.on?(B=sa,z(sa.fn,{scope:La.scope,isolateScope:La.isolateScope,controller:La.controller,injector:La.injector,inheritedData:La.inheritedData}),b=sa.cleanData,sa.cleanData=function(a){var c;if(Pb)Pb=!1;else for(var d=0,e;null!=(e=a[d]);d++)(c=sa._data(e,"events"))&&c.$destroy&&sa(e).triggerHandler("$destroy");b(a)}):B=R,ga.element=B,uc=!0)}function Qb(b,a,c){if(!b)throw Ka("areq",a||"?",c||"required");return b}function sb(b,a,c){c&&D(b)&&(b=b[b.length-1]); -Qb(G(b),a,"not a function, got "+(b&&"object"===typeof b?b.constructor.name||"Object":typeof b));return b}function Ma(b,a){if("hasOwnProperty"===b)throw Ka("badname",a);}function vc(b,a,c){if(!a)return b;a=a.split(".");for(var d,e=b,f=a.length,g=0;g<f;g++)d=a[g],b&&(b=(e=b)[d]);return!c&&G(b)?nc(e,b):b}function tb(b){var a=b[0];b=b[b.length-1];var c=[a];do{a=a.nextSibling;if(!a)break;c.push(a)}while(a!==b);return B(c)}function ha(){return Object.create(null)}function Od(b){function a(a,b,c){return a[b]|| -(a[b]=c())}var c=T("$injector"),d=T("ng");b=a(b,"angular",Object);b.$$minErr=b.$$minErr||T;return a(b,"module",function(){var b={};return function(f,g,h){if("hasOwnProperty"===f)throw d("badname","module");g&&b.hasOwnProperty(f)&&(b[f]=null);return a(b,f,function(){function a(c,d,e,f){f||(f=b);return function(){f[e||"push"]([c,d,arguments]);return u}}if(!g)throw c("nomod",f);var b=[],d=[],e=[],q=a("$injector","invoke","push",d),u={_invokeQueue:b,_configBlocks:d,_runBlocks:e,requires:g,name:f,provider:a("$provide", -"provider"),factory:a("$provide","factory"),service:a("$provide","service"),value:a("$provide","value"),constant:a("$provide","constant","unshift"),animation:a("$animateProvider","register"),filter:a("$filterProvider","register"),controller:a("$controllerProvider","register"),directive:a("$compileProvider","directive"),config:q,run:function(a){e.push(a);return this}};h&&q(h);return u})}})}function Pd(b){z(b,{bootstrap:sc,copy:Ea,extend:z,equals:fa,element:B,forEach:s,injector:Ob,noop:H,bind:nc,toJson:$a, -fromJson:oc,identity:pa,isUndefined:A,isDefined:y,isString:F,isFunction:G,isObject:I,isNumber:V,isElement:mc,isArray:D,version:Qd,isDate:qa,lowercase:Q,uppercase:ub,callbacks:{counter:0},getTestability:Ld,$$minErr:T,$$csp:ab,reloadWithDebugInfo:Kd});bb=Od(M);try{bb("ngLocale")}catch(a){bb("ngLocale",[]).provider("$locale",Rd)}bb("ng",["ngLocale"],["$provide",function(a){a.provider({$$sanitizeUri:Sd});a.provider("$compile",wc).directive({a:Td,input:xc,textarea:xc,form:Ud,script:Vd,select:Wd,style:Xd, -option:Yd,ngBind:Zd,ngBindHtml:$d,ngBindTemplate:ae,ngClass:be,ngClassEven:ce,ngClassOdd:de,ngCloak:ee,ngController:fe,ngForm:ge,ngHide:he,ngIf:ie,ngInclude:je,ngInit:ke,ngNonBindable:le,ngPluralize:me,ngRepeat:ne,ngShow:oe,ngStyle:pe,ngSwitch:qe,ngSwitchWhen:re,ngSwitchDefault:se,ngOptions:te,ngTransclude:ue,ngModel:ve,ngList:we,ngChange:xe,pattern:yc,ngPattern:yc,required:zc,ngRequired:zc,minlength:Ac,ngMinlength:Ac,maxlength:Bc,ngMaxlength:Bc,ngValue:ye,ngModelOptions:ze}).directive({ngInclude:Ae}).directive(vb).directive(Cc); -a.provider({$anchorScroll:Be,$animate:Ce,$browser:De,$cacheFactory:Ee,$controller:Fe,$document:Ge,$exceptionHandler:He,$filter:Dc,$interpolate:Ie,$interval:Je,$http:Ke,$httpBackend:Le,$location:Me,$log:Ne,$parse:Oe,$rootScope:Pe,$q:Qe,$$q:Re,$sce:Se,$sceDelegate:Te,$sniffer:Ue,$templateCache:Ve,$templateRequest:We,$$testability:Xe,$timeout:Ye,$window:Ze,$$rAF:$e,$$asyncCallback:af,$$jqLite:bf})}])}function cb(b){return b.replace(cf,function(a,b,d,e){return e?d.toUpperCase():d}).replace(df,"Moz$1")} -function Ec(b){b=b.nodeType;return b===oa||!b||9===b}function Fc(b,a){var c,d,e=a.createDocumentFragment(),f=[];if(Rb.test(b)){c=c||e.appendChild(a.createElement("div"));d=(ef.exec(b)||["",""])[1].toLowerCase();d=ia[d]||ia._default;c.innerHTML=d[1]+b.replace(ff,"<$1></$2>")+d[2];for(d=d[0];d--;)c=c.lastChild;f=Ya(f,c.childNodes);c=e.firstChild;c.textContent=""}else f.push(a.createTextNode(b));e.textContent="";e.innerHTML="";s(f,function(a){e.appendChild(a)});return e}function R(b){if(b instanceof -R)return b;var a;F(b)&&(b=U(b),a=!0);if(!(this instanceof R)){if(a&&"<"!=b.charAt(0))throw Sb("nosel");return new R(b)}if(a){a=Y;var c;b=(c=gf.exec(b))?[a.createElement(c[1])]:(c=Fc(b,a))?c.childNodes:[]}Gc(this,b)}function Tb(b){return b.cloneNode(!0)}function wb(b,a){a||xb(b);if(b.querySelectorAll)for(var c=b.querySelectorAll("*"),d=0,e=c.length;d<e;d++)xb(c[d])}function Hc(b,a,c,d){if(y(d))throw Sb("offargs");var e=(d=yb(b))&&d.events,f=d&&d.handle;if(f)if(a)s(a.split(" "),function(a){if(y(c)){var d= -e[a];Xa(d||[],c);if(d&&0<d.length)return}b.removeEventListener(a,f,!1);delete e[a]});else for(a in e)"$destroy"!==a&&b.removeEventListener(a,f,!1),delete e[a]}function xb(b,a){var c=b.ng339,d=c&&zb[c];d&&(a?delete d.data[a]:(d.handle&&(d.events.$destroy&&d.handle({},"$destroy"),Hc(b)),delete zb[c],b.ng339=t))}function yb(b,a){var c=b.ng339,c=c&&zb[c];a&&!c&&(b.ng339=c=++hf,c=zb[c]={events:{},data:{},handle:t});return c}function Ub(b,a,c){if(Ec(b)){var d=y(c),e=!d&&a&&!I(a),f=!a;b=(b=yb(b,!e))&&b.data; -if(d)b[a]=c;else{if(f)return b;if(e)return b&&b[a];z(b,a)}}}function Ab(b,a){return b.getAttribute?-1<(" "+(b.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").indexOf(" "+a+" "):!1}function Bb(b,a){a&&b.setAttribute&&s(a.split(" "),function(a){b.setAttribute("class",U((" "+(b.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").replace(" "+U(a)+" "," ")))})}function Cb(b,a){if(a&&b.setAttribute){var c=(" "+(b.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ");s(a.split(" "),function(a){a= -U(a);-1===c.indexOf(" "+a+" ")&&(c+=a+" ")});b.setAttribute("class",U(c))}}function Gc(b,a){if(a)if(a.nodeType)b[b.length++]=a;else{var c=a.length;if("number"===typeof c&&a.window!==a){if(c)for(var d=0;d<c;d++)b[b.length++]=a[d]}else b[b.length++]=a}}function Ic(b,a){return Db(b,"$"+(a||"ngController")+"Controller")}function Db(b,a,c){9==b.nodeType&&(b=b.documentElement);for(a=D(a)?a:[a];b;){for(var d=0,e=a.length;d<e;d++)if((c=B.data(b,a[d]))!==t)return c;b=b.parentNode||11===b.nodeType&&b.host}} -function Jc(b){for(wb(b,!0);b.firstChild;)b.removeChild(b.firstChild)}function Kc(b,a){a||wb(b);var c=b.parentNode;c&&c.removeChild(b)}function jf(b,a){a=a||M;if("complete"===a.document.readyState)a.setTimeout(b);else B(a).on("load",b)}function Lc(b,a){var c=Eb[a.toLowerCase()];return c&&Mc[ua(b)]&&c}function kf(b,a){var c=b.nodeName;return("INPUT"===c||"TEXTAREA"===c)&&Nc[a]}function lf(b,a){var c=function(c,e){c.isDefaultPrevented=function(){return c.defaultPrevented};var f=a[e||c.type],g=f?f.length: -0;if(g){if(A(c.immediatePropagationStopped)){var h=c.stopImmediatePropagation;c.stopImmediatePropagation=function(){c.immediatePropagationStopped=!0;c.stopPropagation&&c.stopPropagation();h&&h.call(c)}}c.isImmediatePropagationStopped=function(){return!0===c.immediatePropagationStopped};1<g&&(f=ra(f));for(var l=0;l<g;l++)c.isImmediatePropagationStopped()||f[l].call(b,c)}};c.elem=b;return c}function bf(){this.$get=function(){return z(R,{hasClass:function(b,a){b.attr&&(b=b[0]);return Ab(b,a)},addClass:function(b, -a){b.attr&&(b=b[0]);return Cb(b,a)},removeClass:function(b,a){b.attr&&(b=b[0]);return Bb(b,a)}})}}function Na(b,a){var c=b&&b.$$hashKey;if(c)return"function"===typeof c&&(c=b.$$hashKey()),c;c=typeof b;return c="function"==c||"object"==c&&null!==b?b.$$hashKey=c+":"+(a||Fd)():c+":"+b}function db(b,a){if(a){var c=0;this.nextUid=function(){return++c}}s(b,this.put,this)}function mf(b){return(b=b.toString().replace(Oc,"").match(Pc))?"function("+(b[1]||"").replace(/[\s\r\n]+/," ")+")":"fn"}function Vb(b, -a,c){var d;if("function"===typeof b){if(!(d=b.$inject)){d=[];if(b.length){if(a)throw F(c)&&c||(c=b.name||mf(b)),Ga("strictdi",c);a=b.toString().replace(Oc,"");a=a.match(Pc);s(a[1].split(nf),function(a){a.replace(of,function(a,b,c){d.push(c)})})}b.$inject=d}}else D(b)?(a=b.length-1,sb(b[a],"fn"),d=b.slice(0,a)):sb(b,"fn",!0);return d}function Ob(b,a){function c(a){return function(b,c){if(I(b))s(b,kc(a));else return a(b,c)}}function d(a,b){Ma(a,"service");if(G(b)||D(b))b=q.instantiate(b);if(!b.$get)throw Ga("pget", -a);return n[a+"Provider"]=b}function e(a,b){return function(){var c=r.invoke(b,this);if(A(c))throw Ga("undef",a);return c}}function f(a,b,c){return d(a,{$get:!1!==c?e(a,b):b})}function g(a){var b=[],c;s(a,function(a){function d(a){var b,c;b=0;for(c=a.length;b<c;b++){var e=a[b],f=q.get(e[0]);f[e[1]].apply(f,e[2])}}if(!m.get(a)){m.put(a,!0);try{F(a)?(c=bb(a),b=b.concat(g(c.requires)).concat(c._runBlocks),d(c._invokeQueue),d(c._configBlocks)):G(a)?b.push(q.invoke(a)):D(a)?b.push(q.invoke(a)):sb(a,"module")}catch(e){throw D(a)&& -(a=a[a.length-1]),e.message&&e.stack&&-1==e.stack.indexOf(e.message)&&(e=e.message+"\n"+e.stack),Ga("modulerr",a,e.stack||e.message||e);}}});return b}function h(b,c){function d(a,e){if(b.hasOwnProperty(a)){if(b[a]===l)throw Ga("cdep",a+" <- "+k.join(" <- "));return b[a]}try{return k.unshift(a),b[a]=l,b[a]=c(a,e)}catch(f){throw b[a]===l&&delete b[a],f;}finally{k.shift()}}function e(b,c,f,g){"string"===typeof f&&(g=f,f=null);var h=[],k=Vb(b,a,g),l,q,n;q=0;for(l=k.length;q<l;q++){n=k[q];if("string"!== -typeof n)throw Ga("itkn",n);h.push(f&&f.hasOwnProperty(n)?f[n]:d(n,g))}D(b)&&(b=b[l]);return b.apply(c,h)}return{invoke:e,instantiate:function(a,b,c){var d=Object.create((D(a)?a[a.length-1]:a).prototype||null);a=e(a,d,b,c);return I(a)||G(a)?a:d},get:d,annotate:Vb,has:function(a){return n.hasOwnProperty(a+"Provider")||b.hasOwnProperty(a)}}}a=!0===a;var l={},k=[],m=new db([],!0),n={$provide:{provider:c(d),factory:c(f),service:c(function(a,b){return f(a,["$injector",function(a){return a.instantiate(b)}])}), -value:c(function(a,b){return f(a,da(b),!1)}),constant:c(function(a,b){Ma(a,"constant");n[a]=b;u[a]=b}),decorator:function(a,b){var c=q.get(a+"Provider"),d=c.$get;c.$get=function(){var a=r.invoke(d,c);return r.invoke(b,null,{$delegate:a})}}}},q=n.$injector=h(n,function(a,b){ga.isString(b)&&k.push(b);throw Ga("unpr",k.join(" <- "));}),u={},r=u.$injector=h(u,function(a,b){var c=q.get(a+"Provider",b);return r.invoke(c.$get,c,t,a)});s(g(b),function(a){r.invoke(a||H)});return r}function Be(){var b=!0;this.disableAutoScrolling= -function(){b=!1};this.$get=["$window","$location","$rootScope",function(a,c,d){function e(a){var b=null;Array.prototype.some.call(a,function(a){if("a"===ua(a))return b=a,!0});return b}function f(b){if(b){b.scrollIntoView();var c;c=g.yOffset;G(c)?c=c():mc(c)?(c=c[0],c="fixed"!==a.getComputedStyle(c).position?0:c.getBoundingClientRect().bottom):V(c)||(c=0);c&&(b=b.getBoundingClientRect().top,a.scrollBy(0,b-c))}else a.scrollTo(0,0)}function g(){var a=c.hash(),b;a?(b=h.getElementById(a))?f(b):(b=e(h.getElementsByName(a)))? -f(b):"top"===a&&f(null):f(null)}var h=a.document;b&&d.$watch(function(){return c.hash()},function(a,b){a===b&&""===a||jf(function(){d.$evalAsync(g)})});return g}]}function af(){this.$get=["$$rAF","$timeout",function(b,a){return b.supported?function(a){return b(a)}:function(b){return a(b,0,!1)}}]}function pf(b,a,c,d){function e(a){try{a.apply(null,Za.call(arguments,1))}finally{if(v--,0===v)for(;w.length;)try{w.pop()()}catch(b){c.error(b)}}}function f(a,b){(function N(){s(L,function(a){a()});C=b(N, -a)})()}function g(){h();l()}function h(){x=b.history.state;x=A(x)?null:x;fa(x,J)&&(x=J);J=x}function l(){if(E!==m.url()||P!==x)E=m.url(),P=x,s(W,function(a){a(m.url(),x)})}function k(a){try{return decodeURIComponent(a)}catch(b){return a}}var m=this,n=a[0],q=b.location,u=b.history,r=b.setTimeout,O=b.clearTimeout,p={};m.isMock=!1;var v=0,w=[];m.$$completeOutstandingRequest=e;m.$$incOutstandingRequestCount=function(){v++};m.notifyWhenNoOutstandingRequests=function(a){s(L,function(a){a()});0===v?a(): -w.push(a)};var L=[],C;m.addPollFn=function(a){A(C)&&f(100,r);L.push(a);return a};var x,P,E=q.href,S=a.find("base"),X=null;h();P=x;m.url=function(a,c,e){A(e)&&(e=null);q!==b.location&&(q=b.location);u!==b.history&&(u=b.history);if(a){var f=P===e;if(E===a&&(!d.history||f))return m;var g=E&&Ha(E)===Ha(a);E=a;P=e;!d.history||g&&f?(g||(X=a),c?q.replace(a):g?(c=q,e=a.indexOf("#"),a=-1===e?"":a.substr(e+1),c.hash=a):q.href=a):(u[c?"replaceState":"pushState"](e,"",a),h(),P=x);return m}return X||q.href.replace(/%27/g, -"'")};m.state=function(){return x};var W=[],wa=!1,J=null;m.onUrlChange=function(a){if(!wa){if(d.history)B(b).on("popstate",g);B(b).on("hashchange",g);wa=!0}W.push(a);return a};m.$$checkUrlChange=l;m.baseHref=function(){var a=S.attr("href");return a?a.replace(/^(https?\:)?\/\/[^\/]*/,""):""};var ea={},y="",ca=m.baseHref();m.cookies=function(a,b){var d,e,f,g;if(a)b===t?n.cookie=encodeURIComponent(a)+"=;path="+ca+";expires=Thu, 01 Jan 1970 00:00:00 GMT":F(b)&&(d=(n.cookie=encodeURIComponent(a)+"="+encodeURIComponent(b)+ -";path="+ca).length+1,4096<d&&c.warn("Cookie '"+a+"' possibly not set or overflowed because it was too large ("+d+" > 4096 bytes)!"));else{if(n.cookie!==y)for(y=n.cookie,d=y.split("; "),ea={},f=0;f<d.length;f++)e=d[f],g=e.indexOf("="),0<g&&(a=k(e.substring(0,g)),ea[a]===t&&(ea[a]=k(e.substring(g+1))));return ea}};m.defer=function(a,b){var c;v++;c=r(function(){delete p[c];e(a)},b||0);p[c]=!0;return c};m.defer.cancel=function(a){return p[a]?(delete p[a],O(a),e(H),!0):!1}}function De(){this.$get=["$window", -"$log","$sniffer","$document",function(b,a,c,d){return new pf(b,d,a,c)}]}function Ee(){this.$get=function(){function b(b,d){function e(a){a!=n&&(q?q==a&&(q=a.n):q=a,f(a.n,a.p),f(a,n),n=a,n.n=null)}function f(a,b){a!=b&&(a&&(a.p=b),b&&(b.n=a))}if(b in a)throw T("$cacheFactory")("iid",b);var g=0,h=z({},d,{id:b}),l={},k=d&&d.capacity||Number.MAX_VALUE,m={},n=null,q=null;return a[b]={put:function(a,b){if(k<Number.MAX_VALUE){var c=m[a]||(m[a]={key:a});e(c)}if(!A(b))return a in l||g++,l[a]=b,g>k&&this.remove(q.key), -b},get:function(a){if(k<Number.MAX_VALUE){var b=m[a];if(!b)return;e(b)}return l[a]},remove:function(a){if(k<Number.MAX_VALUE){var b=m[a];if(!b)return;b==n&&(n=b.p);b==q&&(q=b.n);f(b.n,b.p);delete m[a]}delete l[a];g--},removeAll:function(){l={};g=0;m={};n=q=null},destroy:function(){m=h=l=null;delete a[b]},info:function(){return z({},h,{size:g})}}}var a={};b.info=function(){var b={};s(a,function(a,e){b[e]=a.info()});return b};b.get=function(b){return a[b]};return b}}function Ve(){this.$get=["$cacheFactory", -function(b){return b("templates")}]}function wc(b,a){function c(a,b){var c=/^\s*([@&]|=(\*?))(\??)\s*(\w*)\s*$/,d={};s(a,function(a,e){var f=a.match(c);if(!f)throw ja("iscp",b,e,a);d[e]={mode:f[1][0],collection:"*"===f[2],optional:"?"===f[3],attrName:f[4]||e}});return d}var d={},e=/^\s*directive\:\s*([\w\-]+)\s+(.*)$/,f=/(([\w\-]+)(?:\:([^;]+))?;?)/,g=Gd("ngSrc,ngSrcset,src,srcset"),h=/^(?:(\^\^?)?(\?)?(\^\^?)?)?/,l=/^(on[a-z]+|formaction)$/;this.directive=function n(a,e){Ma(a,"directive");F(a)?(Qb(e, -"directiveFactory"),d.hasOwnProperty(a)||(d[a]=[],b.factory(a+"Directive",["$injector","$exceptionHandler",function(b,e){var f=[];s(d[a],function(d,g){try{var h=b.invoke(d);G(h)?h={compile:da(h)}:!h.compile&&h.link&&(h.compile=da(h.link));h.priority=h.priority||0;h.index=g;h.name=h.name||a;h.require=h.require||h.controller&&h.name;h.restrict=h.restrict||"EA";I(h.scope)&&(h.$$isolateBindings=c(h.scope,h.name));f.push(h)}catch(l){e(l)}});return f}])),d[a].push(e)):s(a,kc(n));return this};this.aHrefSanitizationWhitelist= -function(b){return y(b)?(a.aHrefSanitizationWhitelist(b),this):a.aHrefSanitizationWhitelist()};this.imgSrcSanitizationWhitelist=function(b){return y(b)?(a.imgSrcSanitizationWhitelist(b),this):a.imgSrcSanitizationWhitelist()};var k=!0;this.debugInfoEnabled=function(a){return y(a)?(k=a,this):k};this.$get=["$injector","$interpolate","$exceptionHandler","$templateRequest","$parse","$controller","$rootScope","$document","$sce","$animate","$$sanitizeUri",function(a,b,c,r,O,p,v,w,L,C,x){function P(a,b){try{a.addClass(b)}catch(c){}} -function E(a,b,c,d,e){a instanceof B||(a=B(a));s(a,function(b,c){b.nodeType==pb&&b.nodeValue.match(/\S+/)&&(a[c]=B(b).wrap("<span></span>").parent()[0])});var f=S(a,b,a,c,d,e);E.$$addScopeClass(a);var g=null;return function(b,c,d){Qb(b,"scope");d=d||{};var e=d.parentBoundTranscludeFn,h=d.transcludeControllers;d=d.futureParentElement;e&&e.$$boundTransclude&&(e=e.$$boundTransclude);g||(g=(d=d&&d[0])?"foreignobject"!==ua(d)&&d.toString().match(/SVG/)?"svg":"html":"html");d="html"!==g?B(Wb(g,B("<div>").append(a).html())): -c?La.clone.call(a):a;if(h)for(var l in h)d.data("$"+l+"Controller",h[l].instance);E.$$addScopeInfo(d,b);c&&c(d,b);f&&f(b,d,d,e);return d}}function S(a,b,c,d,e,f){function g(a,c,d,e){var f,l,k,q,n,p,w;if(r)for(w=Array(c.length),q=0;q<h.length;q+=3)f=h[q],w[f]=c[f];else w=c;q=0;for(n=h.length;q<n;)l=w[h[q++]],c=h[q++],f=h[q++],c?(c.scope?(k=a.$new(),E.$$addScopeInfo(B(l),k)):k=a,p=c.transcludeOnThisElement?X(a,c.transclude,e,c.elementTranscludeOnThisElement):!c.templateOnThisElement&&e?e:!e&&b?X(a, -b):null,c(f,k,l,d,p)):f&&f(a,l.childNodes,t,e)}for(var h=[],l,k,q,n,r,p=0;p<a.length;p++){l=new Xb;k=W(a[p],[],l,0===p?d:t,e);(f=k.length?ea(k,a[p],l,b,c,null,[],[],f):null)&&f.scope&&E.$$addScopeClass(l.$$element);l=f&&f.terminal||!(q=a[p].childNodes)||!q.length?null:S(q,f?(f.transcludeOnThisElement||!f.templateOnThisElement)&&f.transclude:b);if(f||l)h.push(p,f,l),n=!0,r=r||f;f=null}return n?g:null}function X(a,b,c,d){return function(d,e,f,g,h){d||(d=a.$new(!1,h),d.$$transcluded=!0);return b(d,e, -{parentBoundTranscludeFn:c,transcludeControllers:f,futureParentElement:g})}}function W(a,b,c,d,g){var h=c.$attr,l;switch(a.nodeType){case oa:ca(b,ya(ua(a)),"E",d,g);for(var k,q,n,r=a.attributes,p=0,w=r&&r.length;p<w;p++){var O=!1,L=!1;k=r[p];l=k.name;q=U(k.value);k=ya(l);if(n=fb.test(k))l=l.replace(Rc,"").substr(8).replace(/_(.)/g,function(a,b){return b.toUpperCase()});var u=k.replace(/(Start|End)$/,"");A(u)&&k===u+"Start"&&(O=l,L=l.substr(0,l.length-5)+"end",l=l.substr(0,l.length-6));k=ya(l.toLowerCase()); -h[k]=l;if(n||!c.hasOwnProperty(k))c[k]=q,Lc(a,k)&&(c[k]=!0);Pa(a,b,q,k,n);ca(b,k,"A",d,g,O,L)}a=a.className;I(a)&&(a=a.animVal);if(F(a)&&""!==a)for(;l=f.exec(a);)k=ya(l[2]),ca(b,k,"C",d,g)&&(c[k]=U(l[3])),a=a.substr(l.index+l[0].length);break;case pb:M(b,a.nodeValue);break;case 8:try{if(l=e.exec(a.nodeValue))k=ya(l[1]),ca(b,k,"M",d,g)&&(c[k]=U(l[2]))}catch(v){}}b.sort(N);return b}function wa(a,b,c){var d=[],e=0;if(b&&a.hasAttribute&&a.hasAttribute(b)){do{if(!a)throw ja("uterdir",b,c);a.nodeType== -oa&&(a.hasAttribute(b)&&e++,a.hasAttribute(c)&&e--);d.push(a);a=a.nextSibling}while(0<e)}else d.push(a);return B(d)}function J(a,b,c){return function(d,e,f,g,h){e=wa(e[0],b,c);return a(d,e,f,g,h)}}function ea(a,d,e,f,g,l,k,n,r){function w(a,b,c,d){if(a){c&&(a=J(a,c,d));a.require=K.require;a.directiveName=z;if(S===K||K.$$isolateScope)a=Z(a,{isolateScope:!0});k.push(a)}if(b){c&&(b=J(b,c,d));b.require=K.require;b.directiveName=z;if(S===K||K.$$isolateScope)b=Z(b,{isolateScope:!0});n.push(b)}}function L(a, -b,c,d){var e,f="data",g=!1,l=c,k;if(F(b)){k=b.match(h);b=b.substring(k[0].length);k[3]&&(k[1]?k[3]=null:k[1]=k[3]);"^"===k[1]?f="inheritedData":"^^"===k[1]&&(f="inheritedData",l=c.parent());"?"===k[2]&&(g=!0);e=null;d&&"data"===f&&(e=d[b])&&(e=e.instance);e=e||l[f]("$"+b+"Controller");if(!e&&!g)throw ja("ctreq",b,a);return e||null}D(b)&&(e=[],s(b,function(b){e.push(L(a,b,c,d))}));return e}function v(a,c,f,g,h){function l(a,b,c){var d;Va(a)||(c=b,b=a,a=t);H&&(d=P);c||(c=H?W.parent():W);return h(a, -b,d,c,wa)}var r,w,u,x,P,eb,W,J;d===f?(J=e,W=e.$$element):(W=B(f),J=new Xb(W,e));S&&(x=c.$new(!0));h&&(eb=l,eb.$$boundTransclude=h);C&&(X={},P={},s(C,function(a){var b={$scope:a===S||a.$$isolateScope?x:c,$element:W,$attrs:J,$transclude:eb};u=a.controller;"@"==u&&(u=J[a.name]);b=p(u,b,!0,a.controllerAs);P[a.name]=b;H||W.data("$"+a.name+"Controller",b.instance);X[a.name]=b}));if(S){E.$$addScopeInfo(W,x,!0,!(ka&&(ka===S||ka===S.$$originalDirective)));E.$$addScopeClass(W,!0);g=X&&X[S.name];var xa=x;g&& -g.identifier&&!0===S.bindToController&&(xa=g.instance);s(x.$$isolateBindings=S.$$isolateBindings,function(a,d){var e=a.attrName,f=a.optional,g,h,l,k;switch(a.mode){case "@":J.$observe(e,function(a){xa[d]=a});J.$$observers[e].$$scope=c;J[e]&&(xa[d]=b(J[e])(c));break;case "=":if(f&&!J[e])break;h=O(J[e]);k=h.literal?fa:function(a,b){return a===b||a!==a&&b!==b};l=h.assign||function(){g=xa[d]=h(c);throw ja("nonassign",J[e],S.name);};g=xa[d]=h(c);f=function(a){k(a,xa[d])||(k(a,g)?l(c,a=xa[d]):xa[d]=a); -return g=a};f.$stateful=!0;f=a.collection?c.$watchCollection(J[e],f):c.$watch(O(J[e],f),null,h.literal);x.$on("$destroy",f);break;case "&":h=O(J[e]),xa[d]=function(a){return h(c,a)}}})}X&&(s(X,function(a){a()}),X=null);g=0;for(r=k.length;g<r;g++)w=k[g],$(w,w.isolateScope?x:c,W,J,w.require&&L(w.directiveName,w.require,W,P),eb);var wa=c;S&&(S.template||null===S.templateUrl)&&(wa=x);a&&a(wa,f.childNodes,t,h);for(g=n.length-1;0<=g;g--)w=n[g],$(w,w.isolateScope?x:c,W,J,w.require&&L(w.directiveName,w.require, -W,P),eb)}r=r||{};for(var x=-Number.MAX_VALUE,P,C=r.controllerDirectives,X,S=r.newIsolateScopeDirective,ka=r.templateDirective,ea=r.nonTlbTranscludeDirective,ca=!1,A=!1,H=r.hasElementTranscludeDirective,aa=e.$$element=B(d),K,z,N,Aa=f,Q,M=0,R=a.length;M<R;M++){K=a[M];var Pa=K.$$start,fb=K.$$end;Pa&&(aa=wa(d,Pa,fb));N=t;if(x>K.priority)break;if(N=K.scope)K.templateUrl||(I(N)?(Oa("new/isolated scope",S||P,K,aa),S=K):Oa("new/isolated scope",S,K,aa)),P=P||K;z=K.name;!K.templateUrl&&K.controller&&(N=K.controller, -C=C||{},Oa("'"+z+"' controller",C[z],K,aa),C[z]=K);if(N=K.transclude)ca=!0,K.$$tlb||(Oa("transclusion",ea,K,aa),ea=K),"element"==N?(H=!0,x=K.priority,N=aa,aa=e.$$element=B(Y.createComment(" "+z+": "+e[z]+" ")),d=aa[0],V(g,Za.call(N,0),d),Aa=E(N,f,x,l&&l.name,{nonTlbTranscludeDirective:ea})):(N=B(Tb(d)).contents(),aa.empty(),Aa=E(N,f));if(K.template)if(A=!0,Oa("template",ka,K,aa),ka=K,N=G(K.template)?K.template(aa,e):K.template,N=Sc(N),K.replace){l=K;N=Rb.test(N)?Tc(Wb(K.templateNamespace,U(N))):[]; -d=N[0];if(1!=N.length||d.nodeType!==oa)throw ja("tplrt",z,"");V(g,aa,d);R={$attr:{}};N=W(d,[],R);var ba=a.splice(M+1,a.length-(M+1));S&&y(N);a=a.concat(N).concat(ba);Qc(e,R);R=a.length}else aa.html(N);if(K.templateUrl)A=!0,Oa("template",ka,K,aa),ka=K,K.replace&&(l=K),v=T(a.splice(M,a.length-M),aa,e,g,ca&&Aa,k,n,{controllerDirectives:C,newIsolateScopeDirective:S,templateDirective:ka,nonTlbTranscludeDirective:ea}),R=a.length;else if(K.compile)try{Q=K.compile(aa,e,Aa),G(Q)?w(null,Q,Pa,fb):Q&&w(Q.pre, -Q.post,Pa,fb)}catch(qf){c(qf,va(aa))}K.terminal&&(v.terminal=!0,x=Math.max(x,K.priority))}v.scope=P&&!0===P.scope;v.transcludeOnThisElement=ca;v.elementTranscludeOnThisElement=H;v.templateOnThisElement=A;v.transclude=Aa;r.hasElementTranscludeDirective=H;return v}function y(a){for(var b=0,c=a.length;b<c;b++){var d=b,e;e=z(Object.create(a[b]),{$$isolateScope:!0});a[d]=e}}function ca(b,e,f,g,h,l,k){if(e===h)return null;h=null;if(d.hasOwnProperty(e)){var q;e=a.get(e+"Directive");for(var r=0,p=e.length;r< -p;r++)try{if(q=e[r],(g===t||g>q.priority)&&-1!=q.restrict.indexOf(f)){if(l){var w={$$start:l,$$end:k};q=z(Object.create(q),w)}b.push(q);h=q}}catch(O){c(O)}}return h}function A(b){if(d.hasOwnProperty(b))for(var c=a.get(b+"Directive"),e=0,f=c.length;e<f;e++)if(b=c[e],b.multiElement)return!0;return!1}function Qc(a,b){var c=b.$attr,d=a.$attr,e=a.$$element;s(a,function(d,e){"$"!=e.charAt(0)&&(b[e]&&b[e]!==d&&(d+=("style"===e?";":" ")+b[e]),a.$set(e,d,!0,c[e]))});s(b,function(b,f){"class"==f?(P(e,b),a["class"]= -(a["class"]?a["class"]+" ":"")+b):"style"==f?(e.attr("style",e.attr("style")+";"+b),a.style=(a.style?a.style+";":"")+b):"$"==f.charAt(0)||a.hasOwnProperty(f)||(a[f]=b,d[f]=c[f])})}function T(a,b,c,d,e,f,g,h){var l=[],k,q,n=b[0],p=a.shift(),w=z({},p,{templateUrl:null,transclude:null,replace:null,$$originalDirective:p}),O=G(p.templateUrl)?p.templateUrl(b,c):p.templateUrl,u=p.templateNamespace;b.empty();r(L.getTrustedResourceUrl(O)).then(function(r){var L,v;r=Sc(r);if(p.replace){r=Rb.test(r)?Tc(Wb(u, -U(r))):[];L=r[0];if(1!=r.length||L.nodeType!==oa)throw ja("tplrt",p.name,O);r={$attr:{}};V(d,b,L);var x=W(L,[],r);I(p.scope)&&y(x);a=x.concat(a);Qc(c,r)}else L=n,b.html(r);a.unshift(w);k=ea(a,L,c,e,b,p,f,g,h);s(d,function(a,c){a==L&&(d[c]=b[0])});for(q=S(b[0].childNodes,e);l.length;){r=l.shift();v=l.shift();var C=l.shift(),E=l.shift(),x=b[0];if(!r.$$destroyed){if(v!==n){var J=v.className;h.hasElementTranscludeDirective&&p.replace||(x=Tb(L));V(C,B(v),x);P(B(x),J)}v=k.transcludeOnThisElement?X(r,k.transclude, -E):E;k(q,r,x,d,v)}}l=null});return function(a,b,c,d,e){a=e;b.$$destroyed||(l?l.push(b,c,d,a):(k.transcludeOnThisElement&&(a=X(b,k.transclude,e)),k(q,b,c,d,a)))}}function N(a,b){var c=b.priority-a.priority;return 0!==c?c:a.name!==b.name?a.name<b.name?-1:1:a.index-b.index}function Oa(a,b,c,d){if(b)throw ja("multidir",b.name,c.name,a,va(d));}function M(a,c){var d=b(c,!0);d&&a.push({priority:0,compile:function(a){a=a.parent();var b=!!a.length;b&&E.$$addBindingClass(a);return function(a,c){var e=c.parent(); -b||E.$$addBindingClass(e);E.$$addBindingInfo(e,d.expressions);a.$watch(d,function(a){c[0].nodeValue=a})}}})}function Wb(a,b){a=Q(a||"html");switch(a){case "svg":case "math":var c=Y.createElement("div");c.innerHTML="<"+a+">"+b+"</"+a+">";return c.childNodes[0].childNodes;default:return b}}function R(a,b){if("srcdoc"==b)return L.HTML;var c=ua(a);if("xlinkHref"==b||"form"==c&&"action"==b||"img"!=c&&("src"==b||"ngSrc"==b))return L.RESOURCE_URL}function Pa(a,c,d,e,f){var h=R(a,e);f=g[e]||f;var k=b(d,!0, -h,f);if(k){if("multiple"===e&&"select"===ua(a))throw ja("selmulti",va(a));c.push({priority:100,compile:function(){return{pre:function(a,c,g){c=g.$$observers||(g.$$observers={});if(l.test(e))throw ja("nodomevents");var n=g[e];n!==d&&(k=n&&b(n,!0,h,f),d=n);k&&(g[e]=k(a),(c[e]||(c[e]=[])).$$inter=!0,(g.$$observers&&g.$$observers[e].$$scope||a).$watch(k,function(a,b){"class"===e&&a!=b?g.$updateClass(a,b):g.$set(e,a)}))}}}})}}function V(a,b,c){var d=b[0],e=b.length,f=d.parentNode,g,h;if(a)for(g=0,h=a.length;g< -h;g++)if(a[g]==d){a[g++]=c;h=g+e-1;for(var l=a.length;g<l;g++,h++)h<l?a[g]=a[h]:delete a[g];a.length-=e-1;a.context===d&&(a.context=c);break}f&&f.replaceChild(c,d);a=Y.createDocumentFragment();a.appendChild(d);B(c).data(B(d).data());sa?(Pb=!0,sa.cleanData([d])):delete B.cache[d[B.expando]];d=1;for(e=b.length;d<e;d++)f=b[d],B(f).remove(),a.appendChild(f),delete b[d];b[0]=c;b.length=1}function Z(a,b){return z(function(){return a.apply(null,arguments)},a,b)}function $(a,b,d,e,f,g){try{a(b,d,e,f,g)}catch(h){c(h, -va(d))}}var Xb=function(a,b){if(b){var c=Object.keys(b),d,e,f;d=0;for(e=c.length;d<e;d++)f=c[d],this[f]=b[f]}else this.$attr={};this.$$element=a};Xb.prototype={$normalize:ya,$addClass:function(a){a&&0<a.length&&C.addClass(this.$$element,a)},$removeClass:function(a){a&&0<a.length&&C.removeClass(this.$$element,a)},$updateClass:function(a,b){var c=Uc(a,b);c&&c.length&&C.addClass(this.$$element,c);(c=Uc(b,a))&&c.length&&C.removeClass(this.$$element,c)},$set:function(a,b,d,e){var f=this.$$element[0],g= -Lc(f,a),h=kf(f,a),f=a;g?(this.$$element.prop(a,b),e=g):h&&(this[h]=b,f=h);this[a]=b;e?this.$attr[a]=e:(e=this.$attr[a])||(this.$attr[a]=e=tc(a,"-"));g=ua(this.$$element);if("a"===g&&"href"===a||"img"===g&&"src"===a)this[a]=b=x(b,"src"===a);else if("img"===g&&"srcset"===a){for(var g="",h=U(b),l=/(\s+\d+x\s*,|\s+\d+w\s*,|\s+,|,\s+)/,l=/\s/.test(h)?l:/(,)/,h=h.split(l),l=Math.floor(h.length/2),k=0;k<l;k++)var q=2*k,g=g+x(U(h[q]),!0),g=g+(" "+U(h[q+1]));h=U(h[2*k]).split(/\s/);g+=x(U(h[0]),!0);2===h.length&& -(g+=" "+U(h[1]));this[a]=b=g}!1!==d&&(null===b||b===t?this.$$element.removeAttr(e):this.$$element.attr(e,b));(a=this.$$observers)&&s(a[f],function(a){try{a(b)}catch(d){c(d)}})},$observe:function(a,b){var c=this,d=c.$$observers||(c.$$observers=ha()),e=d[a]||(d[a]=[]);e.push(b);v.$evalAsync(function(){!e.$$inter&&c.hasOwnProperty(a)&&b(c[a])});return function(){Xa(e,b)}}};var Aa=b.startSymbol(),ka=b.endSymbol(),Sc="{{"==Aa||"}}"==ka?pa:function(a){return a.replace(/\{\{/g,Aa).replace(/}}/g,ka)},fb= -/^ngAttr[A-Z]/;E.$$addBindingInfo=k?function(a,b){var c=a.data("$binding")||[];D(b)?c=c.concat(b):c.push(b);a.data("$binding",c)}:H;E.$$addBindingClass=k?function(a){P(a,"ng-binding")}:H;E.$$addScopeInfo=k?function(a,b,c,d){a.data(c?d?"$isolateScopeNoTemplate":"$isolateScope":"$scope",b)}:H;E.$$addScopeClass=k?function(a,b){P(a,b?"ng-isolate-scope":"ng-scope")}:H;return E}]}function ya(b){return cb(b.replace(Rc,""))}function Uc(b,a){var c="",d=b.split(/\s+/),e=a.split(/\s+/),f=0;a:for(;f<d.length;f++){for(var g= -d[f],h=0;h<e.length;h++)if(g==e[h])continue a;c+=(0<c.length?" ":"")+g}return c}function Tc(b){b=B(b);var a=b.length;if(1>=a)return b;for(;a--;)8===b[a].nodeType&&rf.call(b,a,1);return b}function Fe(){var b={},a=!1,c=/^(\S+)(\s+as\s+(\w+))?$/;this.register=function(a,c){Ma(a,"controller");I(a)?z(b,a):b[a]=c};this.allowGlobals=function(){a=!0};this.$get=["$injector","$window",function(d,e){function f(a,b,c,d){if(!a||!I(a.$scope))throw T("$controller")("noscp",d,b);a.$scope[b]=c}return function(g,h, -l,k){var m,n,q;l=!0===l;k&&F(k)&&(q=k);F(g)&&(k=g.match(c),n=k[1],q=q||k[3],g=b.hasOwnProperty(n)?b[n]:vc(h.$scope,n,!0)||(a?vc(e,n,!0):t),sb(g,n,!0));if(l)return l=(D(g)?g[g.length-1]:g).prototype,m=Object.create(l||null),q&&f(h,q,m,n||g.name),z(function(){d.invoke(g,m,h,n);return m},{instance:m,identifier:q});m=d.instantiate(g,h,n);q&&f(h,q,m,n||g.name);return m}}]}function Ge(){this.$get=["$window",function(b){return B(b.document)}]}function He(){this.$get=["$log",function(b){return function(a, -c){b.error.apply(b,arguments)}}]}function Yb(b,a){if(F(b)){var c=b.replace(sf,"").trim();if(c){var d=a("Content-Type");(d=d&&0===d.indexOf(Vc))||(d=(d=c.match(tf))&&uf[d[0]].test(c));d&&(b=oc(c))}}return b}function Wc(b){var a=ha(),c,d,e;if(!b)return a;s(b.split("\n"),function(b){e=b.indexOf(":");c=Q(U(b.substr(0,e)));d=U(b.substr(e+1));c&&(a[c]=a[c]?a[c]+", "+d:d)});return a}function Xc(b){var a=I(b)?b:t;return function(c){a||(a=Wc(b));return c?(c=a[Q(c)],void 0===c&&(c=null),c):a}}function Yc(b, -a,c,d){if(G(d))return d(b,a,c);s(d,function(d){b=d(b,a,c)});return b}function Ke(){var b=this.defaults={transformResponse:[Yb],transformRequest:[function(a){return I(a)&&"[object File]"!==Da.call(a)&&"[object Blob]"!==Da.call(a)&&"[object FormData]"!==Da.call(a)?$a(a):a}],headers:{common:{Accept:"application/json, text/plain, */*"},post:ra(Zb),put:ra(Zb),patch:ra(Zb)},xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN"},a=!1;this.useApplyAsync=function(b){return y(b)?(a=!!b,this):a};var c=this.interceptors= -[];this.$get=["$httpBackend","$browser","$cacheFactory","$rootScope","$q","$injector",function(d,e,f,g,h,l){function k(a){function c(a){var b=z({},a);b.data=a.data?Yc(a.data,a.headers,a.status,e.transformResponse):a.data;a=a.status;return 200<=a&&300>a?b:h.reject(b)}function d(a){var b,c={};s(a,function(a,d){G(a)?(b=a(),null!=b&&(c[d]=b)):c[d]=a});return c}if(!ga.isObject(a))throw T("$http")("badreq",a);var e=z({method:"get",transformRequest:b.transformRequest,transformResponse:b.transformResponse}, -a);e.headers=function(a){var c=b.headers,e=z({},a.headers),f,g,c=z({},c.common,c[Q(a.method)]);a:for(f in c){a=Q(f);for(g in e)if(Q(g)===a)continue a;e[f]=c[f]}return d(e)}(a);e.method=ub(e.method);var f=[function(a){var d=a.headers,e=Yc(a.data,Xc(d),t,a.transformRequest);A(e)&&s(d,function(a,b){"content-type"===Q(b)&&delete d[b]});A(a.withCredentials)&&!A(b.withCredentials)&&(a.withCredentials=b.withCredentials);return m(a,e).then(c,c)},t],g=h.when(e);for(s(u,function(a){(a.request||a.requestError)&& -f.unshift(a.request,a.requestError);(a.response||a.responseError)&&f.push(a.response,a.responseError)});f.length;){a=f.shift();var l=f.shift(),g=g.then(a,l)}g.success=function(a){g.then(function(b){a(b.data,b.status,b.headers,e)});return g};g.error=function(a){g.then(null,function(b){a(b.data,b.status,b.headers,e)});return g};return g}function m(c,f){function l(b,c,d,e){function f(){m(c,b,d,e)}P&&(200<=b&&300>b?P.put(X,[b,c,Wc(d),e]):P.remove(X));a?g.$applyAsync(f):(f(),g.$$phase||g.$apply())}function m(a, -b,d,e){b=Math.max(b,0);(200<=b&&300>b?C.resolve:C.reject)({data:a,status:b,headers:Xc(d),config:c,statusText:e})}function w(a){m(a.data,a.status,ra(a.headers()),a.statusText)}function u(){var a=k.pendingRequests.indexOf(c);-1!==a&&k.pendingRequests.splice(a,1)}var C=h.defer(),x=C.promise,P,E,s=c.headers,X=n(c.url,c.params);k.pendingRequests.push(c);x.then(u,u);!c.cache&&!b.cache||!1===c.cache||"GET"!==c.method&&"JSONP"!==c.method||(P=I(c.cache)?c.cache:I(b.cache)?b.cache:q);P&&(E=P.get(X),y(E)?E&& -G(E.then)?E.then(w,w):D(E)?m(E[1],E[0],ra(E[2]),E[3]):m(E,200,{},"OK"):P.put(X,x));A(E)&&((E=Zc(c.url)?e.cookies()[c.xsrfCookieName||b.xsrfCookieName]:t)&&(s[c.xsrfHeaderName||b.xsrfHeaderName]=E),d(c.method,X,f,l,s,c.timeout,c.withCredentials,c.responseType));return x}function n(a,b){if(!b)return a;var c=[];Ed(b,function(a,b){null===a||A(a)||(D(a)||(a=[a]),s(a,function(a){I(a)&&(a=qa(a)?a.toISOString():$a(a));c.push(Fa(b)+"="+Fa(a))}))});0<c.length&&(a+=(-1==a.indexOf("?")?"?":"&")+c.join("&")); -return a}var q=f("$http"),u=[];s(c,function(a){u.unshift(F(a)?l.get(a):l.invoke(a))});k.pendingRequests=[];(function(a){s(arguments,function(a){k[a]=function(b,c){return k(z(c||{},{method:a,url:b}))}})})("get","delete","head","jsonp");(function(a){s(arguments,function(a){k[a]=function(b,c,d){return k(z(d||{},{method:a,url:b,data:c}))}})})("post","put","patch");k.defaults=b;return k}]}function vf(){return new M.XMLHttpRequest}function Le(){this.$get=["$browser","$window","$document",function(b,a,c){return wf(b, -vf,b.defer,a.angular.callbacks,c[0])}]}function wf(b,a,c,d,e){function f(a,b,c){var f=e.createElement("script"),m=null;f.type="text/javascript";f.src=a;f.async=!0;m=function(a){f.removeEventListener("load",m,!1);f.removeEventListener("error",m,!1);e.body.removeChild(f);f=null;var g=-1,u="unknown";a&&("load"!==a.type||d[b].called||(a={type:"error"}),u=a.type,g="error"===a.type?404:200);c&&c(g,u)};f.addEventListener("load",m,!1);f.addEventListener("error",m,!1);e.body.appendChild(f);return m}return function(e, -h,l,k,m,n,q,u){function r(){v&&v();w&&w.abort()}function O(a,d,e,f,g){C!==t&&c.cancel(C);v=w=null;a(d,e,f,g);b.$$completeOutstandingRequest(H)}b.$$incOutstandingRequestCount();h=h||b.url();if("jsonp"==Q(e)){var p="_"+(d.counter++).toString(36);d[p]=function(a){d[p].data=a;d[p].called=!0};var v=f(h.replace("JSON_CALLBACK","angular.callbacks."+p),p,function(a,b){O(k,a,d[p].data,"",b);d[p]=H})}else{var w=a();w.open(e,h,!0);s(m,function(a,b){y(a)&&w.setRequestHeader(b,a)});w.onload=function(){var a=w.statusText|| -"",b="response"in w?w.response:w.responseText,c=1223===w.status?204:w.status;0===c&&(c=b?200:"file"==Ba(h).protocol?404:0);O(k,c,b,w.getAllResponseHeaders(),a)};e=function(){O(k,-1,null,null,"")};w.onerror=e;w.onabort=e;q&&(w.withCredentials=!0);if(u)try{w.responseType=u}catch(L){if("json"!==u)throw L;}w.send(l||null)}if(0<n)var C=c(r,n);else n&&G(n.then)&&n.then(r)}}function Ie(){var b="{{",a="}}";this.startSymbol=function(a){return a?(b=a,this):b};this.endSymbol=function(b){return b?(a=b,this): -a};this.$get=["$parse","$exceptionHandler","$sce",function(c,d,e){function f(a){return"\\\\\\"+a}function g(f,g,u,r){function O(c){return c.replace(k,b).replace(m,a)}function p(a){try{var b=a;a=u?e.getTrusted(u,b):e.valueOf(b);var c;if(r&&!y(a))c=a;else if(null==a)c="";else{switch(typeof a){case "string":break;case "number":a=""+a;break;default:a=$a(a)}c=a}return c}catch(g){c=$b("interr",f,g.toString()),d(c)}}r=!!r;for(var v,w,L=0,C=[],x=[],P=f.length,E=[],s=[];L<P;)if(-1!=(v=f.indexOf(b,L))&&-1!= -(w=f.indexOf(a,v+h)))L!==v&&E.push(O(f.substring(L,v))),L=f.substring(v+h,w),C.push(L),x.push(c(L,p)),L=w+l,s.push(E.length),E.push("");else{L!==P&&E.push(O(f.substring(L)));break}if(u&&1<E.length)throw $b("noconcat",f);if(!g||C.length){var X=function(a){for(var b=0,c=C.length;b<c;b++){if(r&&A(a[b]))return;E[s[b]]=a[b]}return E.join("")};return z(function(a){var b=0,c=C.length,e=Array(c);try{for(;b<c;b++)e[b]=x[b](a);return X(e)}catch(g){a=$b("interr",f,g.toString()),d(a)}},{exp:f,expressions:C,$$watchDelegate:function(a, -b,c){var d;return a.$watchGroup(x,function(c,e){var f=X(c);G(b)&&b.call(this,f,c!==e?d:f,a);d=f},c)}})}}var h=b.length,l=a.length,k=new RegExp(b.replace(/./g,f),"g"),m=new RegExp(a.replace(/./g,f),"g");g.startSymbol=function(){return b};g.endSymbol=function(){return a};return g}]}function Je(){this.$get=["$rootScope","$window","$q","$$q",function(b,a,c,d){function e(e,h,l,k){var m=a.setInterval,n=a.clearInterval,q=0,u=y(k)&&!k,r=(u?d:c).defer(),O=r.promise;l=y(l)?l:0;O.then(null,null,e);O.$$intervalId= -m(function(){r.notify(q++);0<l&&q>=l&&(r.resolve(q),n(O.$$intervalId),delete f[O.$$intervalId]);u||b.$apply()},h);f[O.$$intervalId]=r;return O}var f={};e.cancel=function(b){return b&&b.$$intervalId in f?(f[b.$$intervalId].reject("canceled"),a.clearInterval(b.$$intervalId),delete f[b.$$intervalId],!0):!1};return e}]}function Rd(){this.$get=function(){return{id:"en-us",NUMBER_FORMATS:{DECIMAL_SEP:".",GROUP_SEP:",",PATTERNS:[{minInt:1,minFrac:0,maxFrac:3,posPre:"",posSuf:"",negPre:"-",negSuf:"",gSize:3, -lgSize:3},{minInt:1,minFrac:2,maxFrac:2,posPre:"\u00a4",posSuf:"",negPre:"(\u00a4",negSuf:")",gSize:3,lgSize:3}],CURRENCY_SYM:"$"},DATETIME_FORMATS:{MONTH:"January February March April May June July August September October November December".split(" "),SHORTMONTH:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),DAY:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),SHORTDAY:"Sun Mon Tue Wed Thu Fri Sat".split(" "),AMPMS:["AM","PM"],medium:"MMM d, y h:mm:ss a","short":"M/d/yy h:mm a", -fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",mediumDate:"MMM d, y",shortDate:"M/d/yy",mediumTime:"h:mm:ss a",shortTime:"h:mm a"},pluralCat:function(b){return 1===b?"one":"other"}}}}function ac(b){b=b.split("/");for(var a=b.length;a--;)b[a]=qb(b[a]);return b.join("/")}function $c(b,a){var c=Ba(b);a.$$protocol=c.protocol;a.$$host=c.hostname;a.$$port=ba(c.port)||xf[c.protocol]||null}function ad(b,a){var c="/"!==b.charAt(0);c&&(b="/"+b);var d=Ba(b);a.$$path=decodeURIComponent(c&&"/"===d.pathname.charAt(0)? -d.pathname.substring(1):d.pathname);a.$$search=qc(d.search);a.$$hash=decodeURIComponent(d.hash);a.$$path&&"/"!=a.$$path.charAt(0)&&(a.$$path="/"+a.$$path)}function za(b,a){if(0===a.indexOf(b))return a.substr(b.length)}function Ha(b){var a=b.indexOf("#");return-1==a?b:b.substr(0,a)}function bd(b){return b.replace(/(#.+)|#$/,"$1")}function bc(b){return b.substr(0,Ha(b).lastIndexOf("/")+1)}function cc(b,a){this.$$html5=!0;a=a||"";var c=bc(b);$c(b,this);this.$$parse=function(a){var b=za(c,a);if(!F(b))throw Fb("ipthprfx", -a,c);ad(b,this);this.$$path||(this.$$path="/");this.$$compose()};this.$$compose=function(){var a=Nb(this.$$search),b=this.$$hash?"#"+qb(this.$$hash):"";this.$$url=ac(this.$$path)+(a?"?"+a:"")+b;this.$$absUrl=c+this.$$url.substr(1)};this.$$parseLinkUrl=function(d,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;(f=za(b,d))!==t?(g=f,g=(f=za(a,f))!==t?c+(za("/",f)||f):b+g):(f=za(c,d))!==t?g=c+f:c==d+"/"&&(g=c);g&&this.$$parse(g);return!!g}}function dc(b,a){var c=bc(b);$c(b,this);this.$$parse= -function(d){d=za(b,d)||za(c,d);var e;"#"===d.charAt(0)?(e=za(a,d),A(e)&&(e=d)):e=this.$$html5?d:"";ad(e,this);d=this.$$path;var f=/^\/[A-Z]:(\/.*)/;0===e.indexOf(b)&&(e=e.replace(b,""));f.exec(e)||(d=(e=f.exec(d))?e[1]:d);this.$$path=d;this.$$compose()};this.$$compose=function(){var c=Nb(this.$$search),e=this.$$hash?"#"+qb(this.$$hash):"";this.$$url=ac(this.$$path)+(c?"?"+c:"")+e;this.$$absUrl=b+(this.$$url?a+this.$$url:"")};this.$$parseLinkUrl=function(a,c){return Ha(b)==Ha(a)?(this.$$parse(a),!0): -!1}}function cd(b,a){this.$$html5=!0;dc.apply(this,arguments);var c=bc(b);this.$$parseLinkUrl=function(d,e){if(e&&"#"===e[0])return this.hash(e.slice(1)),!0;var f,g;b==Ha(d)?f=d:(g=za(c,d))?f=b+a+g:c===d+"/"&&(f=c);f&&this.$$parse(f);return!!f};this.$$compose=function(){var c=Nb(this.$$search),e=this.$$hash?"#"+qb(this.$$hash):"";this.$$url=ac(this.$$path)+(c?"?"+c:"")+e;this.$$absUrl=b+a+this.$$url}}function Gb(b){return function(){return this[b]}}function dd(b,a){return function(c){if(A(c))return this[b]; -this[b]=a(c);this.$$compose();return this}}function Me(){var b="",a={enabled:!1,requireBase:!0,rewriteLinks:!0};this.hashPrefix=function(a){return y(a)?(b=a,this):b};this.html5Mode=function(b){return Wa(b)?(a.enabled=b,this):I(b)?(Wa(b.enabled)&&(a.enabled=b.enabled),Wa(b.requireBase)&&(a.requireBase=b.requireBase),Wa(b.rewriteLinks)&&(a.rewriteLinks=b.rewriteLinks),this):a};this.$get=["$rootScope","$browser","$sniffer","$rootElement","$window",function(c,d,e,f,g){function h(a,b,c){var e=k.url(), -f=k.$$state;try{d.url(a,b,c),k.$$state=d.state()}catch(g){throw k.url(e),k.$$state=f,g;}}function l(a,b){c.$broadcast("$locationChangeSuccess",k.absUrl(),a,k.$$state,b)}var k,m;m=d.baseHref();var n=d.url(),q;if(a.enabled){if(!m&&a.requireBase)throw Fb("nobase");q=n.substring(0,n.indexOf("/",n.indexOf("//")+2))+(m||"/");m=e.history?cc:cd}else q=Ha(n),m=dc;k=new m(q,"#"+b);k.$$parseLinkUrl(n,n);k.$$state=d.state();var u=/^\s*(javascript|mailto):/i;f.on("click",function(b){if(a.rewriteLinks&&!b.ctrlKey&& -!b.metaKey&&!b.shiftKey&&2!=b.which&&2!=b.button){for(var e=B(b.target);"a"!==ua(e[0]);)if(e[0]===f[0]||!(e=e.parent())[0])return;var h=e.prop("href"),l=e.attr("href")||e.attr("xlink:href");I(h)&&"[object SVGAnimatedString]"===h.toString()&&(h=Ba(h.animVal).href);u.test(h)||!h||e.attr("target")||b.isDefaultPrevented()||!k.$$parseLinkUrl(h,l)||(b.preventDefault(),k.absUrl()!=d.url()&&(c.$apply(),g.angular["ff-684208-preventDefault"]=!0))}});k.absUrl()!=n&&d.url(k.absUrl(),!0);var r=!0;d.onUrlChange(function(a, -b){c.$evalAsync(function(){var d=k.absUrl(),e=k.$$state,f;k.$$parse(a);k.$$state=b;f=c.$broadcast("$locationChangeStart",a,d,b,e).defaultPrevented;k.absUrl()===a&&(f?(k.$$parse(d),k.$$state=e,h(d,!1,e)):(r=!1,l(d,e)))});c.$$phase||c.$digest()});c.$watch(function(){var a=bd(d.url()),b=bd(k.absUrl()),f=d.state(),g=k.$$replace,q=a!==b||k.$$html5&&e.history&&f!==k.$$state;if(r||q)r=!1,c.$evalAsync(function(){var b=k.absUrl(),d=c.$broadcast("$locationChangeStart",b,a,k.$$state,f).defaultPrevented;k.absUrl()=== -b&&(d?(k.$$parse(a),k.$$state=f):(q&&h(b,g,f===k.$$state?null:k.$$state),l(a,f)))});k.$$replace=!1});return k}]}function Ne(){var b=!0,a=this;this.debugEnabled=function(a){return y(a)?(b=a,this):b};this.$get=["$window",function(c){function d(a){a instanceof Error&&(a.stack?a=a.message&&-1===a.stack.indexOf(a.message)?"Error: "+a.message+"\n"+a.stack:a.stack:a.sourceURL&&(a=a.message+"\n"+a.sourceURL+":"+a.line));return a}function e(a){var b=c.console||{},e=b[a]||b.log||H;a=!1;try{a=!!e.apply}catch(l){}return a? -function(){var a=[];s(arguments,function(b){a.push(d(b))});return e.apply(b,a)}:function(a,b){e(a,null==b?"":b)}}return{log:e("log"),info:e("info"),warn:e("warn"),error:e("error"),debug:function(){var c=e("debug");return function(){b&&c.apply(a,arguments)}}()}}]}function ta(b,a){if("__defineGetter__"===b||"__defineSetter__"===b||"__lookupGetter__"===b||"__lookupSetter__"===b||"__proto__"===b)throw la("isecfld",a);return b}function ma(b,a){if(b){if(b.constructor===b)throw la("isecfn",a);if(b.window=== -b)throw la("isecwindow",a);if(b.children&&(b.nodeName||b.prop&&b.attr&&b.find))throw la("isecdom",a);if(b===Object)throw la("isecobj",a);}return b}function ec(b){return b.constant}function gb(b,a,c,d,e){ma(b,e);ma(a,e);c=c.split(".");for(var f,g=0;1<c.length;g++){f=ta(c.shift(),e);var h=0===g&&a&&a[f]||b[f];h||(h={},b[f]=h);b=ma(h,e)}f=ta(c.shift(),e);ma(b[f],e);return b[f]=d}function Qa(b){return"constructor"==b}function ed(b,a,c,d,e,f,g){ta(b,f);ta(a,f);ta(c,f);ta(d,f);ta(e,f);var h=function(a){return ma(a, -f)},l=g||Qa(b)?h:pa,k=g||Qa(a)?h:pa,m=g||Qa(c)?h:pa,n=g||Qa(d)?h:pa,q=g||Qa(e)?h:pa;return function(f,g){var h=g&&g.hasOwnProperty(b)?g:f;if(null==h)return h;h=l(h[b]);if(!a)return h;if(null==h)return t;h=k(h[a]);if(!c)return h;if(null==h)return t;h=m(h[c]);if(!d)return h;if(null==h)return t;h=n(h[d]);return e?null==h?t:h=q(h[e]):h}}function yf(b,a){return function(c,d){return b(c,d,ma,a)}}function zf(b,a,c){var d=a.expensiveChecks,e=d?Af:Bf,f=e[b];if(f)return f;var g=b.split("."),h=g.length;if(a.csp)f= -6>h?ed(g[0],g[1],g[2],g[3],g[4],c,d):function(a,b){var e=0,f;do f=ed(g[e++],g[e++],g[e++],g[e++],g[e++],c,d)(a,b),b=t,a=f;while(e<h);return f};else{var l="";d&&(l+="s = eso(s, fe);\nl = eso(l, fe);\n");var k=d;s(g,function(a,b){ta(a,c);var e=(b?"s":'((l&&l.hasOwnProperty("'+a+'"))?l:s)')+"."+a;if(d||Qa(a))e="eso("+e+", fe)",k=!0;l+="if(s == null) return undefined;\ns="+e+";\n"});l+="return s;";a=new Function("s","l","eso","fe",l);a.toString=da(l);k&&(a=yf(a,c));f=a}f.sharedGetter=!0;f.assign=function(a, -c,d){return gb(a,d,b,c,b)};return e[b]=f}function fc(b){return G(b.valueOf)?b.valueOf():Cf.call(b)}function Oe(){var b=ha(),a=ha();this.$get=["$filter","$sniffer",function(c,d){function e(a){var b=a;a.sharedGetter&&(b=function(b,c){return a(b,c)},b.literal=a.literal,b.constant=a.constant,b.assign=a.assign);return b}function f(a,b){for(var c=0,d=a.length;c<d;c++){var e=a[c];e.constant||(e.inputs?f(e.inputs,b):-1===b.indexOf(e)&&b.push(e))}return b}function g(a,b){return null==a||null==b?a===b:"object"=== -typeof a&&(a=fc(a),"object"===typeof a)?!1:a===b||a!==a&&b!==b}function h(a,b,c,d){var e=d.$$inputs||(d.$$inputs=f(d.inputs,[])),h;if(1===e.length){var l=g,e=e[0];return a.$watch(function(a){var b=e(a);g(b,l)||(h=d(a),l=b&&fc(b));return h},b,c)}for(var k=[],q=0,n=e.length;q<n;q++)k[q]=g;return a.$watch(function(a){for(var b=!1,c=0,f=e.length;c<f;c++){var l=e[c](a);if(b||(b=!g(l,k[c])))k[c]=l&&fc(l)}b&&(h=d(a));return h},b,c)}function l(a,b,c,d){var e,f;return e=a.$watch(function(a){return d(a)},function(a, -c,d){f=a;G(b)&&b.apply(this,arguments);y(a)&&d.$$postDigest(function(){y(f)&&e()})},c)}function k(a,b,c,d){function e(a){var b=!0;s(a,function(a){y(a)||(b=!1)});return b}var f,g;return f=a.$watch(function(a){return d(a)},function(a,c,d){g=a;G(b)&&b.call(this,a,c,d);e(a)&&d.$$postDigest(function(){e(g)&&f()})},c)}function m(a,b,c,d){var e;return e=a.$watch(function(a){return d(a)},function(a,c,d){G(b)&&b.apply(this,arguments);e()},c)}function n(a,b){if(!b)return a;var c=a.$$watchDelegate,c=c!==k&& -c!==l?function(c,d){var e=a(c,d);return b(e,c,d)}:function(c,d){var e=a(c,d),f=b(e,c,d);return y(e)?f:e};a.$$watchDelegate&&a.$$watchDelegate!==h?c.$$watchDelegate=a.$$watchDelegate:b.$stateful||(c.$$watchDelegate=h,c.inputs=[a]);return c}var q={csp:d.csp,expensiveChecks:!1},u={csp:d.csp,expensiveChecks:!0};return function(d,f,g){var v,w,L;switch(typeof d){case "string":L=d=d.trim();var C=g?a:b;v=C[L];v||(":"===d.charAt(0)&&":"===d.charAt(1)&&(w=!0,d=d.substring(2)),g=g?u:q,v=new gc(g),v=(new hb(v, -c,g)).parse(d),v.constant?v.$$watchDelegate=m:w?(v=e(v),v.$$watchDelegate=v.literal?k:l):v.inputs&&(v.$$watchDelegate=h),C[L]=v);return n(v,f);case "function":return n(d,f);default:return n(H,f)}}}]}function Qe(){this.$get=["$rootScope","$exceptionHandler",function(b,a){return fd(function(a){b.$evalAsync(a)},a)}]}function Re(){this.$get=["$browser","$exceptionHandler",function(b,a){return fd(function(a){b.defer(a)},a)}]}function fd(b,a){function c(a,b,c){function d(b){return function(c){e||(e=!0, -b.call(a,c))}}var e=!1;return[d(b),d(c)]}function d(){this.$$state={status:0}}function e(a,b){return function(c){b.call(a,c)}}function f(c){!c.processScheduled&&c.pending&&(c.processScheduled=!0,b(function(){var b,d,e;e=c.pending;c.processScheduled=!1;c.pending=t;for(var f=0,g=e.length;f<g;++f){d=e[f][0];b=e[f][c.status];try{G(b)?d.resolve(b(c.value)):1===c.status?d.resolve(c.value):d.reject(c.value)}catch(h){d.reject(h),a(h)}}}))}function g(){this.promise=new d;this.resolve=e(this,this.resolve); -this.reject=e(this,this.reject);this.notify=e(this,this.notify)}var h=T("$q",TypeError);d.prototype={then:function(a,b,c){var d=new g;this.$$state.pending=this.$$state.pending||[];this.$$state.pending.push([d,a,b,c]);0<this.$$state.status&&f(this.$$state);return d.promise},"catch":function(a){return this.then(null,a)},"finally":function(a,b){return this.then(function(b){return k(b,!0,a)},function(b){return k(b,!1,a)},b)}};g.prototype={resolve:function(a){this.promise.$$state.status||(a===this.promise? -this.$$reject(h("qcycle",a)):this.$$resolve(a))},$$resolve:function(b){var d,e;e=c(this,this.$$resolve,this.$$reject);try{if(I(b)||G(b))d=b&&b.then;G(d)?(this.promise.$$state.status=-1,d.call(b,e[0],e[1],this.notify)):(this.promise.$$state.value=b,this.promise.$$state.status=1,f(this.promise.$$state))}catch(g){e[1](g),a(g)}},reject:function(a){this.promise.$$state.status||this.$$reject(a)},$$reject:function(a){this.promise.$$state.value=a;this.promise.$$state.status=2;f(this.promise.$$state)},notify:function(c){var d= -this.promise.$$state.pending;0>=this.promise.$$state.status&&d&&d.length&&b(function(){for(var b,e,f=0,g=d.length;f<g;f++){e=d[f][0];b=d[f][3];try{e.notify(G(b)?b(c):c)}catch(h){a(h)}}})}};var l=function(a,b){var c=new g;b?c.resolve(a):c.reject(a);return c.promise},k=function(a,b,c){var d=null;try{G(c)&&(d=c())}catch(e){return l(e,!1)}return d&&G(d.then)?d.then(function(){return l(a,b)},function(a){return l(a,!1)}):l(a,b)},m=function(a,b,c,d){var e=new g;e.resolve(a);return e.promise.then(b,c,d)}, -n=function u(a){if(!G(a))throw h("norslvr",a);if(!(this instanceof u))return new u(a);var b=new g;a(function(a){b.resolve(a)},function(a){b.reject(a)});return b.promise};n.defer=function(){return new g};n.reject=function(a){var b=new g;b.reject(a);return b.promise};n.when=m;n.all=function(a){var b=new g,c=0,d=D(a)?[]:{};s(a,function(a,e){c++;m(a).then(function(a){d.hasOwnProperty(e)||(d[e]=a,--c||b.resolve(d))},function(a){d.hasOwnProperty(e)||b.reject(a)})});0===c&&b.resolve(d);return b.promise}; -return n}function $e(){this.$get=["$window","$timeout",function(b,a){var c=b.requestAnimationFrame||b.webkitRequestAnimationFrame,d=b.cancelAnimationFrame||b.webkitCancelAnimationFrame||b.webkitCancelRequestAnimationFrame,e=!!c,f=e?function(a){var b=c(a);return function(){d(b)}}:function(b){var c=a(b,16.66,!1);return function(){a.cancel(c)}};f.supported=e;return f}]}function Pe(){var b=10,a=T("$rootScope"),c=null,d=null;this.digestTtl=function(a){arguments.length&&(b=a);return b};this.$get=["$injector", -"$exceptionHandler","$parse","$browser",function(e,f,g,h){function l(){this.$id=++nb;this.$$phase=this.$parent=this.$$watchers=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=null;this.$root=this;this.$$destroyed=!1;this.$$listeners={};this.$$listenerCount={};this.$$isolateBindings=null}function k(b){if(r.$$phase)throw a("inprog",r.$$phase);r.$$phase=b}function m(a,b,c){do a.$$listenerCount[c]-=b,0===a.$$listenerCount[c]&&delete a.$$listenerCount[c];while(a=a.$parent)}function n(){} -function q(){for(;v.length;)try{v.shift()()}catch(a){f(a)}d=null}function u(){null===d&&(d=h.defer(function(){r.$apply(q)}))}l.prototype={constructor:l,$new:function(a,b){function c(){d.$$destroyed=!0}var d;b=b||this;a?(d=new l,d.$root=this.$root):(this.$$ChildScope||(this.$$ChildScope=function(){this.$$watchers=this.$$nextSibling=this.$$childHead=this.$$childTail=null;this.$$listeners={};this.$$listenerCount={};this.$id=++nb;this.$$ChildScope=null},this.$$ChildScope.prototype=this),d=new this.$$ChildScope); -d.$parent=b;d.$$prevSibling=b.$$childTail;b.$$childHead?(b.$$childTail.$$nextSibling=d,b.$$childTail=d):b.$$childHead=b.$$childTail=d;(a||b!=this)&&d.$on("$destroy",c);return d},$watch:function(a,b,d){var e=g(a);if(e.$$watchDelegate)return e.$$watchDelegate(this,b,d,e);var f=this.$$watchers,h={fn:b,last:n,get:e,exp:a,eq:!!d};c=null;G(b)||(h.fn=H);f||(f=this.$$watchers=[]);f.unshift(h);return function(){Xa(f,h);c=null}},$watchGroup:function(a,b){function c(){h=!1;l?(l=!1,b(e,e,g)):b(e,d,g)}var d=Array(a.length), -e=Array(a.length),f=[],g=this,h=!1,l=!0;if(!a.length){var k=!0;g.$evalAsync(function(){k&&b(e,e,g)});return function(){k=!1}}if(1===a.length)return this.$watch(a[0],function(a,c,f){e[0]=a;d[0]=c;b(e,a===c?e:d,f)});s(a,function(a,b){var l=g.$watch(a,function(a,f){e[b]=a;d[b]=f;h||(h=!0,g.$evalAsync(c))});f.push(l)});return function(){for(;f.length;)f.shift()()}},$watchCollection:function(a,b){function c(a){e=a;var b,d,g,h;if(!A(e)){if(I(e))if(Ta(e))for(f!==q&&(f=q,u=f.length=0,k++),a=e.length,u!== -a&&(k++,f.length=u=a),b=0;b<a;b++)h=f[b],g=e[b],d=h!==h&&g!==g,d||h===g||(k++,f[b]=g);else{f!==m&&(f=m={},u=0,k++);a=0;for(b in e)e.hasOwnProperty(b)&&(a++,g=e[b],h=f[b],b in f?(d=h!==h&&g!==g,d||h===g||(k++,f[b]=g)):(u++,f[b]=g,k++));if(u>a)for(b in k++,f)e.hasOwnProperty(b)||(u--,delete f[b])}else f!==e&&(f=e,k++);return k}}c.$stateful=!0;var d=this,e,f,h,l=1<b.length,k=0,n=g(a,c),q=[],m={},p=!0,u=0;return this.$watch(n,function(){p?(p=!1,b(e,e,d)):b(e,h,d);if(l)if(I(e))if(Ta(e)){h=Array(e.length); -for(var a=0;a<e.length;a++)h[a]=e[a]}else for(a in h={},e)rc.call(e,a)&&(h[a]=e[a]);else h=e})},$digest:function(){var e,g,l,m,u,v,s=b,t,W=[],y,J;k("$digest");h.$$checkUrlChange();this===r&&null!==d&&(h.defer.cancel(d),q());c=null;do{v=!1;for(t=this;O.length;){try{J=O.shift(),J.scope.$eval(J.expression,J.locals)}catch(B){f(B)}c=null}a:do{if(m=t.$$watchers)for(u=m.length;u--;)try{if(e=m[u])if((g=e.get(t))!==(l=e.last)&&!(e.eq?fa(g,l):"number"===typeof g&&"number"===typeof l&&isNaN(g)&&isNaN(l)))v= -!0,c=e,e.last=e.eq?Ea(g,null):g,e.fn(g,l===n?g:l,t),5>s&&(y=4-s,W[y]||(W[y]=[]),W[y].push({msg:G(e.exp)?"fn: "+(e.exp.name||e.exp.toString()):e.exp,newVal:g,oldVal:l}));else if(e===c){v=!1;break a}}catch(A){f(A)}if(!(m=t.$$childHead||t!==this&&t.$$nextSibling))for(;t!==this&&!(m=t.$$nextSibling);)t=t.$parent}while(t=m);if((v||O.length)&&!s--)throw r.$$phase=null,a("infdig",b,W);}while(v||O.length);for(r.$$phase=null;p.length;)try{p.shift()()}catch(ca){f(ca)}},$destroy:function(){if(!this.$$destroyed){var a= -this.$parent;this.$broadcast("$destroy");this.$$destroyed=!0;if(this!==r){for(var b in this.$$listenerCount)m(this,this.$$listenerCount[b],b);a.$$childHead==this&&(a.$$childHead=this.$$nextSibling);a.$$childTail==this&&(a.$$childTail=this.$$prevSibling);this.$$prevSibling&&(this.$$prevSibling.$$nextSibling=this.$$nextSibling);this.$$nextSibling&&(this.$$nextSibling.$$prevSibling=this.$$prevSibling);this.$destroy=this.$digest=this.$apply=this.$evalAsync=this.$applyAsync=H;this.$on=this.$watch=this.$watchGroup= -function(){return H};this.$$listeners={};this.$parent=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=this.$root=this.$$watchers=null}}},$eval:function(a,b){return g(a)(this,b)},$evalAsync:function(a,b){r.$$phase||O.length||h.defer(function(){O.length&&r.$digest()});O.push({scope:this,expression:a,locals:b})},$$postDigest:function(a){p.push(a)},$apply:function(a){try{return k("$apply"),this.$eval(a)}catch(b){f(b)}finally{r.$$phase=null;try{r.$digest()}catch(c){throw f(c),c; -}}},$applyAsync:function(a){function b(){c.$eval(a)}var c=this;a&&v.push(b);u()},$on:function(a,b){var c=this.$$listeners[a];c||(this.$$listeners[a]=c=[]);c.push(b);var d=this;do d.$$listenerCount[a]||(d.$$listenerCount[a]=0),d.$$listenerCount[a]++;while(d=d.$parent);var e=this;return function(){var d=c.indexOf(b);-1!==d&&(c[d]=null,m(e,1,a))}},$emit:function(a,b){var c=[],d,e=this,g=!1,h={name:a,targetScope:e,stopPropagation:function(){g=!0},preventDefault:function(){h.defaultPrevented=!0},defaultPrevented:!1}, -l=Ya([h],arguments,1),k,m;do{d=e.$$listeners[a]||c;h.currentScope=e;k=0;for(m=d.length;k<m;k++)if(d[k])try{d[k].apply(null,l)}catch(n){f(n)}else d.splice(k,1),k--,m--;if(g)return h.currentScope=null,h;e=e.$parent}while(e);h.currentScope=null;return h},$broadcast:function(a,b){var c=this,d=this,e={name:a,targetScope:this,preventDefault:function(){e.defaultPrevented=!0},defaultPrevented:!1};if(!this.$$listenerCount[a])return e;for(var g=Ya([e],arguments,1),h,l;c=d;){e.currentScope=c;d=c.$$listeners[a]|| -[];h=0;for(l=d.length;h<l;h++)if(d[h])try{d[h].apply(null,g)}catch(k){f(k)}else d.splice(h,1),h--,l--;if(!(d=c.$$listenerCount[a]&&c.$$childHead||c!==this&&c.$$nextSibling))for(;c!==this&&!(d=c.$$nextSibling);)c=c.$parent}e.currentScope=null;return e}};var r=new l,O=r.$$asyncQueue=[],p=r.$$postDigestQueue=[],v=r.$$applyAsyncQueue=[];return r}]}function Sd(){var b=/^\s*(https?|ftp|mailto|tel|file):/,a=/^\s*((https?|ftp|file|blob):|data:image\/)/;this.aHrefSanitizationWhitelist=function(a){return y(a)? -(b=a,this):b};this.imgSrcSanitizationWhitelist=function(b){return y(b)?(a=b,this):a};this.$get=function(){return function(c,d){var e=d?a:b,f;f=Ba(c).href;return""===f||f.match(e)?c:"unsafe:"+f}}}function Df(b){if("self"===b)return b;if(F(b)){if(-1<b.indexOf("***"))throw Ca("iwcard",b);b=gd(b).replace("\\*\\*",".*").replace("\\*","[^:/.?&;]*");return new RegExp("^"+b+"$")}if(ob(b))return new RegExp("^"+b.source+"$");throw Ca("imatcher");}function hd(b){var a=[];y(b)&&s(b,function(b){a.push(Df(b))}); -return a}function Te(){this.SCE_CONTEXTS=na;var b=["self"],a=[];this.resourceUrlWhitelist=function(a){arguments.length&&(b=hd(a));return b};this.resourceUrlBlacklist=function(b){arguments.length&&(a=hd(b));return a};this.$get=["$injector",function(c){function d(a,b){return"self"===a?Zc(b):!!a.exec(b.href)}function e(a){var b=function(a){this.$$unwrapTrustedValue=function(){return a}};a&&(b.prototype=new a);b.prototype.valueOf=function(){return this.$$unwrapTrustedValue()};b.prototype.toString=function(){return this.$$unwrapTrustedValue().toString()}; -return b}var f=function(a){throw Ca("unsafe");};c.has("$sanitize")&&(f=c.get("$sanitize"));var g=e(),h={};h[na.HTML]=e(g);h[na.CSS]=e(g);h[na.URL]=e(g);h[na.JS]=e(g);h[na.RESOURCE_URL]=e(h[na.URL]);return{trustAs:function(a,b){var c=h.hasOwnProperty(a)?h[a]:null;if(!c)throw Ca("icontext",a,b);if(null===b||b===t||""===b)return b;if("string"!==typeof b)throw Ca("itype",a);return new c(b)},getTrusted:function(c,e){if(null===e||e===t||""===e)return e;var g=h.hasOwnProperty(c)?h[c]:null;if(g&&e instanceof -g)return e.$$unwrapTrustedValue();if(c===na.RESOURCE_URL){var g=Ba(e.toString()),n,q,u=!1;n=0;for(q=b.length;n<q;n++)if(d(b[n],g)){u=!0;break}if(u)for(n=0,q=a.length;n<q;n++)if(d(a[n],g)){u=!1;break}if(u)return e;throw Ca("insecurl",e.toString());}if(c===na.HTML)return f(e);throw Ca("unsafe");},valueOf:function(a){return a instanceof g?a.$$unwrapTrustedValue():a}}}]}function Se(){var b=!0;this.enabled=function(a){arguments.length&&(b=!!a);return b};this.$get=["$parse","$sceDelegate",function(a,c){if(b&& -8>Ra)throw Ca("iequirks");var d=ra(na);d.isEnabled=function(){return b};d.trustAs=c.trustAs;d.getTrusted=c.getTrusted;d.valueOf=c.valueOf;b||(d.trustAs=d.getTrusted=function(a,b){return b},d.valueOf=pa);d.parseAs=function(b,c){var e=a(c);return e.literal&&e.constant?e:a(c,function(a){return d.getTrusted(b,a)})};var e=d.parseAs,f=d.getTrusted,g=d.trustAs;s(na,function(a,b){var c=Q(b);d[cb("parse_as_"+c)]=function(b){return e(a,b)};d[cb("get_trusted_"+c)]=function(b){return f(a,b)};d[cb("trust_as_"+ -c)]=function(b){return g(a,b)}});return d}]}function Ue(){this.$get=["$window","$document",function(b,a){var c={},d=ba((/android (\d+)/.exec(Q((b.navigator||{}).userAgent))||[])[1]),e=/Boxee/i.test((b.navigator||{}).userAgent),f=a[0]||{},g,h=/^(Moz|webkit|ms)(?=[A-Z])/,l=f.body&&f.body.style,k=!1,m=!1;if(l){for(var n in l)if(k=h.exec(n)){g=k[0];g=g.substr(0,1).toUpperCase()+g.substr(1);break}g||(g="WebkitOpacity"in l&&"webkit");k=!!("transition"in l||g+"Transition"in l);m=!!("animation"in l||g+"Animation"in -l);!d||k&&m||(k=F(f.body.style.webkitTransition),m=F(f.body.style.webkitAnimation))}return{history:!(!b.history||!b.history.pushState||4>d||e),hasEvent:function(a){if("input"===a&&11>=Ra)return!1;if(A(c[a])){var b=f.createElement("div");c[a]="on"+a in b}return c[a]},csp:ab(),vendorPrefix:g,transitions:k,animations:m,android:d}}]}function We(){this.$get=["$templateCache","$http","$q",function(b,a,c){function d(e,f){d.totalPendingRequests++;var g=a.defaults&&a.defaults.transformResponse;D(g)?g=g.filter(function(a){return a!== -Yb}):g===Yb&&(g=null);return a.get(e,{cache:b,transformResponse:g}).finally(function(){d.totalPendingRequests--}).then(function(a){return a.data},function(a){if(!f)throw ja("tpload",e);return c.reject(a)})}d.totalPendingRequests=0;return d}]}function Xe(){this.$get=["$rootScope","$browser","$location",function(b,a,c){return{findBindings:function(a,b,c){a=a.getElementsByClassName("ng-binding");var g=[];s(a,function(a){var d=ga.element(a).data("$binding");d&&s(d,function(d){c?(new RegExp("(^|\\s)"+ -gd(b)+"(\\s|\\||$)")).test(d)&&g.push(a):-1!=d.indexOf(b)&&g.push(a)})});return g},findModels:function(a,b,c){for(var g=["ng-","data-ng-","ng\\:"],h=0;h<g.length;++h){var l=a.querySelectorAll("["+g[h]+"model"+(c?"=":"*=")+'"'+b+'"]');if(l.length)return l}},getLocation:function(){return c.url()},setLocation:function(a){a!==c.url()&&(c.url(a),b.$digest())},whenStable:function(b){a.notifyWhenNoOutstandingRequests(b)}}}]}function Ye(){this.$get=["$rootScope","$browser","$q","$$q","$exceptionHandler", -function(b,a,c,d,e){function f(f,l,k){var m=y(k)&&!k,n=(m?d:c).defer(),q=n.promise;l=a.defer(function(){try{n.resolve(f())}catch(a){n.reject(a),e(a)}finally{delete g[q.$$timeoutId]}m||b.$apply()},l);q.$$timeoutId=l;g[l]=n;return q}var g={};f.cancel=function(b){return b&&b.$$timeoutId in g?(g[b.$$timeoutId].reject("canceled"),delete g[b.$$timeoutId],a.defer.cancel(b.$$timeoutId)):!1};return f}]}function Ba(b){Ra&&(Z.setAttribute("href",b),b=Z.href);Z.setAttribute("href",b);return{href:Z.href,protocol:Z.protocol? -Z.protocol.replace(/:$/,""):"",host:Z.host,search:Z.search?Z.search.replace(/^\?/,""):"",hash:Z.hash?Z.hash.replace(/^#/,""):"",hostname:Z.hostname,port:Z.port,pathname:"/"===Z.pathname.charAt(0)?Z.pathname:"/"+Z.pathname}}function Zc(b){b=F(b)?Ba(b):b;return b.protocol===id.protocol&&b.host===id.host}function Ze(){this.$get=da(M)}function Dc(b){function a(c,d){if(I(c)){var e={};s(c,function(b,c){e[c]=a(c,b)});return e}return b.factory(c+"Filter",d)}this.register=a;this.$get=["$injector",function(a){return function(b){return a.get(b+ -"Filter")}}];a("currency",jd);a("date",kd);a("filter",Ef);a("json",Ff);a("limitTo",Gf);a("lowercase",Hf);a("number",ld);a("orderBy",md);a("uppercase",If)}function Ef(){return function(b,a,c){if(!D(b))return b;var d;switch(typeof a){case "function":break;case "boolean":case "number":case "string":d=!0;case "object":a=Jf(a,c,d);break;default:return b}return b.filter(a)}}function Jf(b,a,c){var d=I(b)&&"$"in b;!0===a?a=fa:G(a)||(a=function(a,b){if(I(a)||I(b))return!1;a=Q(""+a);b=Q(""+b);return-1!==a.indexOf(b)}); -return function(e){return d&&!I(e)?Ia(e,b.$,a,!1):Ia(e,b,a,c)}}function Ia(b,a,c,d,e){var f=typeof b,g=typeof a;if("string"===g&&"!"===a.charAt(0))return!Ia(b,a.substring(1),c,d);if(D(b))return b.some(function(b){return Ia(b,a,c,d)});switch(f){case "object":var h;if(d){for(h in b)if("$"!==h.charAt(0)&&Ia(b[h],a,c,!0))return!0;return e?!1:Ia(b,a,c,!1)}if("object"===g){for(h in a)if(e=a[h],!G(e)&&(f="$"===h,!Ia(f?b:b[h],e,c,f,f)))return!1;return!0}return c(b,a);case "function":return!1;default:return c(b, -a)}}function jd(b){var a=b.NUMBER_FORMATS;return function(b,d,e){A(d)&&(d=a.CURRENCY_SYM);A(e)&&(e=a.PATTERNS[1].maxFrac);return null==b?b:nd(b,a.PATTERNS[1],a.GROUP_SEP,a.DECIMAL_SEP,e).replace(/\u00A4/g,d)}}function ld(b){var a=b.NUMBER_FORMATS;return function(b,d){return null==b?b:nd(b,a.PATTERNS[0],a.GROUP_SEP,a.DECIMAL_SEP,d)}}function nd(b,a,c,d,e){if(!isFinite(b)||I(b))return"";var f=0>b;b=Math.abs(b);var g=b+"",h="",l=[],k=!1;if(-1!==g.indexOf("e")){var m=g.match(/([\d\.]+)e(-?)(\d+)/);m&& -"-"==m[2]&&m[3]>e+1?b=0:(h=g,k=!0)}if(k)0<e&&1>b&&(h=b.toFixed(e),b=parseFloat(h));else{g=(g.split(od)[1]||"").length;A(e)&&(e=Math.min(Math.max(a.minFrac,g),a.maxFrac));b=+(Math.round(+(b.toString()+"e"+e)).toString()+"e"+-e);var g=(""+b).split(od),k=g[0],g=g[1]||"",n=0,q=a.lgSize,u=a.gSize;if(k.length>=q+u)for(n=k.length-q,m=0;m<n;m++)0===(n-m)%u&&0!==m&&(h+=c),h+=k.charAt(m);for(m=n;m<k.length;m++)0===(k.length-m)%q&&0!==m&&(h+=c),h+=k.charAt(m);for(;g.length<e;)g+="0";e&&"0"!==e&&(h+=d+g.substr(0, -e))}0===b&&(f=!1);l.push(f?a.negPre:a.posPre,h,f?a.negSuf:a.posSuf);return l.join("")}function Hb(b,a,c){var d="";0>b&&(d="-",b=-b);for(b=""+b;b.length<a;)b="0"+b;c&&(b=b.substr(b.length-a));return d+b}function $(b,a,c,d){c=c||0;return function(e){e=e["get"+b]();if(0<c||e>-c)e+=c;0===e&&-12==c&&(e=12);return Hb(e,a,d)}}function Ib(b,a){return function(c,d){var e=c["get"+b](),f=ub(a?"SHORT"+b:b);return d[f][e]}}function pd(b){var a=(new Date(b,0,1)).getDay();return new Date(b,0,(4>=a?5:12)-a)}function qd(b){return function(a){var c= -pd(a.getFullYear());a=+new Date(a.getFullYear(),a.getMonth(),a.getDate()+(4-a.getDay()))-+c;a=1+Math.round(a/6048E5);return Hb(a,b)}}function kd(b){function a(a){var b;if(b=a.match(c)){a=new Date(0);var f=0,g=0,h=b[8]?a.setUTCFullYear:a.setFullYear,l=b[8]?a.setUTCHours:a.setHours;b[9]&&(f=ba(b[9]+b[10]),g=ba(b[9]+b[11]));h.call(a,ba(b[1]),ba(b[2])-1,ba(b[3]));f=ba(b[4]||0)-f;g=ba(b[5]||0)-g;h=ba(b[6]||0);b=Math.round(1E3*parseFloat("0."+(b[7]||0)));l.call(a,f,g,h,b)}return a}var c=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/; -return function(c,e,f){var g="",h=[],l,k;e=e||"mediumDate";e=b.DATETIME_FORMATS[e]||e;F(c)&&(c=Kf.test(c)?ba(c):a(c));V(c)&&(c=new Date(c));if(!qa(c))return c;for(;e;)(k=Lf.exec(e))?(h=Ya(h,k,1),e=h.pop()):(h.push(e),e=null);f&&"UTC"===f&&(c=new Date(c.getTime()),c.setMinutes(c.getMinutes()+c.getTimezoneOffset()));s(h,function(a){l=Mf[a];g+=l?l(c,b.DATETIME_FORMATS):a.replace(/(^'|'$)/g,"").replace(/''/g,"'")});return g}}function Ff(){return function(b,a){A(a)&&(a=2);return $a(b,a)}}function Gf(){return function(b, -a){V(b)&&(b=b.toString());return D(b)||F(b)?(a=Infinity===Math.abs(Number(a))?Number(a):ba(a))?0<a?b.slice(0,a):b.slice(a):F(b)?"":[]:b}}function md(b){return function(a,c,d){function e(a,b){return b?function(b,c){return a(c,b)}:a}function f(a){switch(typeof a){case "number":case "boolean":case "string":return!0;default:return!1}}function g(a){return null===a?"null":"function"===typeof a.valueOf&&(a=a.valueOf(),f(a))||"function"===typeof a.toString&&(a=a.toString(),f(a))?a:""}function h(a,b){var c= -typeof a,d=typeof b;c===d&&"object"===c&&(a=g(a),b=g(b));return c===d?("string"===c&&(a=a.toLowerCase(),b=b.toLowerCase()),a===b?0:a<b?-1:1):c<d?-1:1}if(!Ta(a))return a;c=D(c)?c:[c];0===c.length&&(c=["+"]);c=c.map(function(a){var c=!1,d=a||pa;if(F(a)){if("+"==a.charAt(0)||"-"==a.charAt(0))c="-"==a.charAt(0),a=a.substring(1);if(""===a)return e(h,c);d=b(a);if(d.constant){var f=d();return e(function(a,b){return h(a[f],b[f])},c)}}return e(function(a,b){return h(d(a),d(b))},c)});return Za.call(a).sort(e(function(a, -b){for(var d=0;d<c.length;d++){var e=c[d](a,b);if(0!==e)return e}return 0},d))}}function Ja(b){G(b)&&(b={link:b});b.restrict=b.restrict||"AC";return da(b)}function rd(b,a,c,d,e){var f=this,g=[],h=f.$$parentForm=b.parent().controller("form")||Jb;f.$error={};f.$$success={};f.$pending=t;f.$name=e(a.name||a.ngForm||"")(c);f.$dirty=!1;f.$pristine=!0;f.$valid=!0;f.$invalid=!1;f.$submitted=!1;h.$addControl(f);f.$rollbackViewValue=function(){s(g,function(a){a.$rollbackViewValue()})};f.$commitViewValue=function(){s(g, -function(a){a.$commitViewValue()})};f.$addControl=function(a){Ma(a.$name,"input");g.push(a);a.$name&&(f[a.$name]=a)};f.$$renameControl=function(a,b){var c=a.$name;f[c]===a&&delete f[c];f[b]=a;a.$name=b};f.$removeControl=function(a){a.$name&&f[a.$name]===a&&delete f[a.$name];s(f.$pending,function(b,c){f.$setValidity(c,null,a)});s(f.$error,function(b,c){f.$setValidity(c,null,a)});s(f.$$success,function(b,c){f.$setValidity(c,null,a)});Xa(g,a)};sd({ctrl:this,$element:b,set:function(a,b,c){var d=a[b]; -d?-1===d.indexOf(c)&&d.push(c):a[b]=[c]},unset:function(a,b,c){var d=a[b];d&&(Xa(d,c),0===d.length&&delete a[b])},parentForm:h,$animate:d});f.$setDirty=function(){d.removeClass(b,Sa);d.addClass(b,Kb);f.$dirty=!0;f.$pristine=!1;h.$setDirty()};f.$setPristine=function(){d.setClass(b,Sa,Kb+" ng-submitted");f.$dirty=!1;f.$pristine=!0;f.$submitted=!1;s(g,function(a){a.$setPristine()})};f.$setUntouched=function(){s(g,function(a){a.$setUntouched()})};f.$setSubmitted=function(){d.addClass(b,"ng-submitted"); -f.$submitted=!0;h.$setSubmitted()}}function hc(b){b.$formatters.push(function(a){return b.$isEmpty(a)?a:a.toString()})}function ib(b,a,c,d,e,f){var g=Q(a[0].type);if(!e.android){var h=!1;a.on("compositionstart",function(a){h=!0});a.on("compositionend",function(){h=!1;l()})}var l=function(b){k&&(f.defer.cancel(k),k=null);if(!h){var e=a.val();b=b&&b.type;"password"===g||c.ngTrim&&"false"===c.ngTrim||(e=U(e));(d.$viewValue!==e||""===e&&d.$$hasNativeValidators)&&d.$setViewValue(e,b)}};if(e.hasEvent("input"))a.on("input", -l);else{var k,m=function(a,b,c){k||(k=f.defer(function(){k=null;b&&b.value===c||l(a)}))};a.on("keydown",function(a){var b=a.keyCode;91===b||15<b&&19>b||37<=b&&40>=b||m(a,this,this.value)});if(e.hasEvent("paste"))a.on("paste cut",m)}a.on("change",l);d.$render=function(){a.val(d.$isEmpty(d.$viewValue)?"":d.$viewValue)}}function Lb(b,a){return function(c,d){var e,f;if(qa(c))return c;if(F(c)){'"'==c.charAt(0)&&'"'==c.charAt(c.length-1)&&(c=c.substring(1,c.length-1));if(Nf.test(c))return new Date(c);b.lastIndex= -0;if(e=b.exec(c))return e.shift(),f=d?{yyyy:d.getFullYear(),MM:d.getMonth()+1,dd:d.getDate(),HH:d.getHours(),mm:d.getMinutes(),ss:d.getSeconds(),sss:d.getMilliseconds()/1E3}:{yyyy:1970,MM:1,dd:1,HH:0,mm:0,ss:0,sss:0},s(e,function(b,c){c<a.length&&(f[a[c]]=+b)}),new Date(f.yyyy,f.MM-1,f.dd,f.HH,f.mm,f.ss||0,1E3*f.sss||0)}return NaN}}function jb(b,a,c,d){return function(e,f,g,h,l,k,m){function n(a){return a&&!(a.getTime&&a.getTime()!==a.getTime())}function q(a){return y(a)?qa(a)?a:c(a):t}td(e,f,g,h); -ib(e,f,g,h,l,k);var u=h&&h.$options&&h.$options.timezone,r;h.$$parserName=b;h.$parsers.push(function(b){return h.$isEmpty(b)?null:a.test(b)?(b=c(b,r),"UTC"===u&&b.setMinutes(b.getMinutes()-b.getTimezoneOffset()),b):t});h.$formatters.push(function(a){if(a&&!qa(a))throw Mb("datefmt",a);if(n(a)){if((r=a)&&"UTC"===u){var b=6E4*r.getTimezoneOffset();r=new Date(r.getTime()+b)}return m("date")(a,d,u)}r=null;return""});if(y(g.min)||g.ngMin){var s;h.$validators.min=function(a){return!n(a)||A(s)||c(a)>=s}; -g.$observe("min",function(a){s=q(a);h.$validate()})}if(y(g.max)||g.ngMax){var p;h.$validators.max=function(a){return!n(a)||A(p)||c(a)<=p};g.$observe("max",function(a){p=q(a);h.$validate()})}}}function td(b,a,c,d){(d.$$hasNativeValidators=I(a[0].validity))&&d.$parsers.push(function(b){var c=a.prop("validity")||{};return c.badInput&&!c.typeMismatch?t:b})}function ud(b,a,c,d,e){if(y(d)){b=b(d);if(!b.constant)throw T("ngModel")("constexpr",c,d);return b(a)}return e}function ic(b,a){b="ngClass"+b;return["$animate", -function(c){function d(a,b){var c=[],d=0;a:for(;d<a.length;d++){for(var e=a[d],m=0;m<b.length;m++)if(e==b[m])continue a;c.push(e)}return c}function e(a){if(!D(a)){if(F(a))return a.split(" ");if(I(a)){var b=[];s(a,function(a,c){a&&(b=b.concat(c.split(" ")))});return b}}return a}return{restrict:"AC",link:function(f,g,h){function l(a,b){var c=g.data("$classCounts")||{},d=[];s(a,function(a){if(0<b||c[a])c[a]=(c[a]||0)+b,c[a]===+(0<b)&&d.push(a)});g.data("$classCounts",c);return d.join(" ")}function k(b){if(!0=== -a||f.$index%2===a){var k=e(b||[]);if(!m){var u=l(k,1);h.$addClass(u)}else if(!fa(b,m)){var r=e(m),u=d(k,r),k=d(r,k),u=l(u,1),k=l(k,-1);u&&u.length&&c.addClass(g,u);k&&k.length&&c.removeClass(g,k)}}m=ra(b)}var m;f.$watch(h[b],k,!0);h.$observe("class",function(a){k(f.$eval(h[b]))});"ngClass"!==b&&f.$watch("$index",function(c,d){var g=c&1;if(g!==(d&1)){var k=e(f.$eval(h[b]));g===a?(g=l(k,1),h.$addClass(g)):(g=l(k,-1),h.$removeClass(g))}})}}}]}function sd(b){function a(a,b){b&&!f[a]?(k.addClass(e,a), -f[a]=!0):!b&&f[a]&&(k.removeClass(e,a),f[a]=!1)}function c(b,c){b=b?"-"+tc(b,"-"):"";a(kb+b,!0===c);a(vd+b,!1===c)}var d=b.ctrl,e=b.$element,f={},g=b.set,h=b.unset,l=b.parentForm,k=b.$animate;f[vd]=!(f[kb]=e.hasClass(kb));d.$setValidity=function(b,e,f){e===t?(d.$pending||(d.$pending={}),g(d.$pending,b,f)):(d.$pending&&h(d.$pending,b,f),wd(d.$pending)&&(d.$pending=t));Wa(e)?e?(h(d.$error,b,f),g(d.$$success,b,f)):(g(d.$error,b,f),h(d.$$success,b,f)):(h(d.$error,b,f),h(d.$$success,b,f));d.$pending?(a(xd, -!0),d.$valid=d.$invalid=t,c("",null)):(a(xd,!1),d.$valid=wd(d.$error),d.$invalid=!d.$valid,c("",d.$valid));e=d.$pending&&d.$pending[b]?t:d.$error[b]?!1:d.$$success[b]?!0:null;c(b,e);l.$setValidity(b,e,d)}}function wd(b){if(b)for(var a in b)return!1;return!0}var Of=/^\/(.+)\/([a-z]*)$/,Q=function(b){return F(b)?b.toLowerCase():b},rc=Object.prototype.hasOwnProperty,ub=function(b){return F(b)?b.toUpperCase():b},Ra,B,sa,Za=[].slice,rf=[].splice,Pf=[].push,Da=Object.prototype.toString,Ka=T("ng"),ga=M.angular|| -(M.angular={}),bb,nb=0;Ra=Y.documentMode;H.$inject=[];pa.$inject=[];var D=Array.isArray,U=function(b){return F(b)?b.trim():b},gd=function(b){return b.replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g,"\\$1").replace(/\x08/g,"\\x08")},ab=function(){if(y(ab.isActive_))return ab.isActive_;var b=!(!Y.querySelector("[ng-csp]")&&!Y.querySelector("[data-ng-csp]"));if(!b)try{new Function("")}catch(a){b=!0}return ab.isActive_=b},rb=["ng-","data-ng-","ng:","x-ng-"],Md=/[A-Z]/g,uc=!1,Pb,oa=1,pb=3,Qd={full:"1.3.11",major:1, -minor:3,dot:11,codeName:"spiffy-manatee"};R.expando="ng339";var zb=R.cache={},hf=1;R._data=function(b){return this.cache[b[this.expando]]||{}};var cf=/([\:\-\_]+(.))/g,df=/^moz([A-Z])/,Qf={mouseleave:"mouseout",mouseenter:"mouseover"},Sb=T("jqLite"),gf=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,Rb=/<|&#?\w+;/,ef=/<([\w:]+)/,ff=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ia={option:[1,'<select multiple="multiple">',"</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>", -"</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ia.optgroup=ia.option;ia.tbody=ia.tfoot=ia.colgroup=ia.caption=ia.thead;ia.th=ia.td;var La=R.prototype={ready:function(b){function a(){c||(c=!0,b())}var c=!1;"complete"===Y.readyState?setTimeout(a):(this.on("DOMContentLoaded",a),R(M).on("load",a))},toString:function(){var b=[];s(this,function(a){b.push(""+a)});return"["+b.join(", ")+"]"},eq:function(b){return 0<= -b?B(this[b]):B(this[this.length+b])},length:0,push:Pf,sort:[].sort,splice:[].splice},Eb={};s("multiple selected checked disabled readOnly required open".split(" "),function(b){Eb[Q(b)]=b});var Mc={};s("input select option textarea button form details".split(" "),function(b){Mc[b]=!0});var Nc={ngMinlength:"minlength",ngMaxlength:"maxlength",ngMin:"min",ngMax:"max",ngPattern:"pattern"};s({data:Ub,removeData:xb},function(b,a){R[a]=b});s({data:Ub,inheritedData:Db,scope:function(b){return B.data(b,"$scope")|| -Db(b.parentNode||b,["$isolateScope","$scope"])},isolateScope:function(b){return B.data(b,"$isolateScope")||B.data(b,"$isolateScopeNoTemplate")},controller:Ic,injector:function(b){return Db(b,"$injector")},removeAttr:function(b,a){b.removeAttribute(a)},hasClass:Ab,css:function(b,a,c){a=cb(a);if(y(c))b.style[a]=c;else return b.style[a]},attr:function(b,a,c){var d=Q(a);if(Eb[d])if(y(c))c?(b[a]=!0,b.setAttribute(a,d)):(b[a]=!1,b.removeAttribute(d));else return b[a]||(b.attributes.getNamedItem(a)||H).specified? -d:t;else if(y(c))b.setAttribute(a,c);else if(b.getAttribute)return b=b.getAttribute(a,2),null===b?t:b},prop:function(b,a,c){if(y(c))b[a]=c;else return b[a]},text:function(){function b(a,b){if(A(b)){var d=a.nodeType;return d===oa||d===pb?a.textContent:""}a.textContent=b}b.$dv="";return b}(),val:function(b,a){if(A(a)){if(b.multiple&&"select"===ua(b)){var c=[];s(b.options,function(a){a.selected&&c.push(a.value||a.text)});return 0===c.length?null:c}return b.value}b.value=a},html:function(b,a){if(A(a))return b.innerHTML; -wb(b,!0);b.innerHTML=a},empty:Jc},function(b,a){R.prototype[a]=function(a,d){var e,f,g=this.length;if(b!==Jc&&(2==b.length&&b!==Ab&&b!==Ic?a:d)===t){if(I(a)){for(e=0;e<g;e++)if(b===Ub)b(this[e],a);else for(f in a)b(this[e],f,a[f]);return this}e=b.$dv;g=e===t?Math.min(g,1):g;for(f=0;f<g;f++){var h=b(this[f],a,d);e=e?e+h:h}return e}for(e=0;e<g;e++)b(this[e],a,d);return this}});s({removeData:xb,on:function a(c,d,e,f){if(y(f))throw Sb("onargs");if(Ec(c)){var g=yb(c,!0);f=g.events;var h=g.handle;h||(h= -g.handle=lf(c,f));for(var g=0<=d.indexOf(" ")?d.split(" "):[d],l=g.length;l--;){d=g[l];var k=f[d];k||(f[d]=[],"mouseenter"===d||"mouseleave"===d?a(c,Qf[d],function(a){var c=a.relatedTarget;c&&(c===this||this.contains(c))||h(a,d)}):"$destroy"!==d&&c.addEventListener(d,h,!1),k=f[d]);k.push(e)}}},off:Hc,one:function(a,c,d){a=B(a);a.on(c,function f(){a.off(c,d);a.off(c,f)});a.on(c,d)},replaceWith:function(a,c){var d,e=a.parentNode;wb(a);s(new R(c),function(c){d?e.insertBefore(c,d.nextSibling):e.replaceChild(c, -a);d=c})},children:function(a){var c=[];s(a.childNodes,function(a){a.nodeType===oa&&c.push(a)});return c},contents:function(a){return a.contentDocument||a.childNodes||[]},append:function(a,c){var d=a.nodeType;if(d===oa||11===d){c=new R(c);for(var d=0,e=c.length;d<e;d++)a.appendChild(c[d])}},prepend:function(a,c){if(a.nodeType===oa){var d=a.firstChild;s(new R(c),function(c){a.insertBefore(c,d)})}},wrap:function(a,c){c=B(c).eq(0).clone()[0];var d=a.parentNode;d&&d.replaceChild(c,a);c.appendChild(a)}, -remove:Kc,detach:function(a){Kc(a,!0)},after:function(a,c){var d=a,e=a.parentNode;c=new R(c);for(var f=0,g=c.length;f<g;f++){var h=c[f];e.insertBefore(h,d.nextSibling);d=h}},addClass:Cb,removeClass:Bb,toggleClass:function(a,c,d){c&&s(c.split(" "),function(c){var f=d;A(f)&&(f=!Ab(a,c));(f?Cb:Bb)(a,c)})},parent:function(a){return(a=a.parentNode)&&11!==a.nodeType?a:null},next:function(a){return a.nextElementSibling},find:function(a,c){return a.getElementsByTagName?a.getElementsByTagName(c):[]},clone:Tb, -triggerHandler:function(a,c,d){var e,f,g=c.type||c,h=yb(a);if(h=(h=h&&h.events)&&h[g])e={preventDefault:function(){this.defaultPrevented=!0},isDefaultPrevented:function(){return!0===this.defaultPrevented},stopImmediatePropagation:function(){this.immediatePropagationStopped=!0},isImmediatePropagationStopped:function(){return!0===this.immediatePropagationStopped},stopPropagation:H,type:g,target:a},c.type&&(e=z(e,c)),c=ra(h),f=d?[e].concat(d):[e],s(c,function(c){e.isImmediatePropagationStopped()||c.apply(a, -f)})}},function(a,c){R.prototype[c]=function(c,e,f){for(var g,h=0,l=this.length;h<l;h++)A(g)?(g=a(this[h],c,e,f),y(g)&&(g=B(g))):Gc(g,a(this[h],c,e,f));return y(g)?g:this};R.prototype.bind=R.prototype.on;R.prototype.unbind=R.prototype.off});db.prototype={put:function(a,c){this[Na(a,this.nextUid)]=c},get:function(a){return this[Na(a,this.nextUid)]},remove:function(a){var c=this[a=Na(a,this.nextUid)];delete this[a];return c}};var Pc=/^function\s*[^\(]*\(\s*([^\)]*)\)/m,nf=/,/,of=/^\s*(_?)(\S+?)\1\s*$/, -Oc=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg,Ga=T("$injector");Ob.$$annotate=Vb;var Rf=T("$animate"),Ce=["$provide",function(a){this.$$selectors={};this.register=function(c,d){var e=c+"-animation";if(c&&"."!=c.charAt(0))throw Rf("notcsel",c);this.$$selectors[c.substr(1)]=e;a.factory(e,d)};this.classNameFilter=function(a){1===arguments.length&&(this.$$classNameFilter=a instanceof RegExp?a:null);return this.$$classNameFilter};this.$get=["$$q","$$asyncCallback","$rootScope",function(a,d,e){function f(d){var f, -g=a.defer();g.promise.$$cancelFn=function(){f&&f()};e.$$postDigest(function(){f=d(function(){g.resolve()})});return g.promise}function g(a,c){var d=[],e=[],f=ha();s((a.attr("class")||"").split(/\s+/),function(a){f[a]=!0});s(c,function(a,c){var g=f[c];!1===a&&g?e.push(c):!0!==a||g||d.push(c)});return 0<d.length+e.length&&[d.length?d:null,e.length?e:null]}function h(a,c,d){for(var e=0,f=c.length;e<f;++e)a[c[e]]=d}function l(){m||(m=a.defer(),d(function(){m.resolve();m=null}));return m.promise}function k(a, -c){if(ga.isObject(c)){var d=z(c.from||{},c.to||{});a.css(d)}}var m;return{animate:function(a,c,d){k(a,{from:c,to:d});return l()},enter:function(a,c,d,e){k(a,e);d?d.after(a):c.prepend(a);return l()},leave:function(a,c){a.remove();return l()},move:function(a,c,d,e){return this.enter(a,c,d,e)},addClass:function(a,c,d){return this.setClass(a,c,[],d)},$$addClassImmediately:function(a,c,d){a=B(a);c=F(c)?c:D(c)?c.join(" "):"";s(a,function(a){Cb(a,c)});k(a,d);return l()},removeClass:function(a,c,d){return this.setClass(a, -[],c,d)},$$removeClassImmediately:function(a,c,d){a=B(a);c=F(c)?c:D(c)?c.join(" "):"";s(a,function(a){Bb(a,c)});k(a,d);return l()},setClass:function(a,c,d,e){var k=this,l=!1;a=B(a);var m=a.data("$$animateClasses");m?e&&m.options&&(m.options=ga.extend(m.options||{},e)):(m={classes:{},options:e},l=!0);e=m.classes;c=D(c)?c:c.split(" ");d=D(d)?d:d.split(" ");h(e,c,!0);h(e,d,!1);l&&(m.promise=f(function(c){var d=a.data("$$animateClasses");a.removeData("$$animateClasses");if(d){var e=g(a,d.classes);e&& -k.$$setClassImmediately(a,e[0],e[1],d.options)}c()}),a.data("$$animateClasses",m));return m.promise},$$setClassImmediately:function(a,c,d,e){c&&this.$$addClassImmediately(a,c);d&&this.$$removeClassImmediately(a,d);k(a,e);return l()},enabled:H,cancel:H}}]}],ja=T("$compile");wc.$inject=["$provide","$$sanitizeUriProvider"];var Rc=/^((?:x|data)[\:\-_])/i,Vc="application/json",Zb={"Content-Type":Vc+";charset=utf-8"},tf=/^\[|^\{(?!\{)/,uf={"[":/]$/,"{":/}$/},sf=/^\)\]\}',?\n/,$b=T("$interpolate"),Sf=/^([^\?#]*)(\?([^#]*))?(#(.*))?$/, -xf={http:80,https:443,ftp:21},Fb=T("$location"),Tf={$$html5:!1,$$replace:!1,absUrl:Gb("$$absUrl"),url:function(a){if(A(a))return this.$$url;var c=Sf.exec(a);(c[1]||""===a)&&this.path(decodeURIComponent(c[1]));(c[2]||c[1]||""===a)&&this.search(c[3]||"");this.hash(c[5]||"");return this},protocol:Gb("$$protocol"),host:Gb("$$host"),port:Gb("$$port"),path:dd("$$path",function(a){a=null!==a?a.toString():"";return"/"==a.charAt(0)?a:"/"+a}),search:function(a,c){switch(arguments.length){case 0:return this.$$search; -case 1:if(F(a)||V(a))a=a.toString(),this.$$search=qc(a);else if(I(a))a=Ea(a,{}),s(a,function(c,e){null==c&&delete a[e]}),this.$$search=a;else throw Fb("isrcharg");break;default:A(c)||null===c?delete this.$$search[a]:this.$$search[a]=c}this.$$compose();return this},hash:dd("$$hash",function(a){return null!==a?a.toString():""}),replace:function(){this.$$replace=!0;return this}};s([cd,dc,cc],function(a){a.prototype=Object.create(Tf);a.prototype.state=function(c){if(!arguments.length)return this.$$state; -if(a!==cc||!this.$$html5)throw Fb("nostate");this.$$state=A(c)?null:c;return this}});var la=T("$parse"),Uf=Function.prototype.call,Vf=Function.prototype.apply,Wf=Function.prototype.bind,lb=ha();s({"null":function(){return null},"true":function(){return!0},"false":function(){return!1},undefined:function(){}},function(a,c){a.constant=a.literal=a.sharedGetter=!0;lb[c]=a});lb["this"]=function(a){return a};lb["this"].sharedGetter=!0;var mb=z(ha(),{"+":function(a,c,d,e){d=d(a,c);e=e(a,c);return y(d)?y(e)? -d+e:d:y(e)?e:t},"-":function(a,c,d,e){d=d(a,c);e=e(a,c);return(y(d)?d:0)-(y(e)?e:0)},"*":function(a,c,d,e){return d(a,c)*e(a,c)},"/":function(a,c,d,e){return d(a,c)/e(a,c)},"%":function(a,c,d,e){return d(a,c)%e(a,c)},"===":function(a,c,d,e){return d(a,c)===e(a,c)},"!==":function(a,c,d,e){return d(a,c)!==e(a,c)},"==":function(a,c,d,e){return d(a,c)==e(a,c)},"!=":function(a,c,d,e){return d(a,c)!=e(a,c)},"<":function(a,c,d,e){return d(a,c)<e(a,c)},">":function(a,c,d,e){return d(a,c)>e(a,c)},"<=":function(a, -c,d,e){return d(a,c)<=e(a,c)},">=":function(a,c,d,e){return d(a,c)>=e(a,c)},"&&":function(a,c,d,e){return d(a,c)&&e(a,c)},"||":function(a,c,d,e){return d(a,c)||e(a,c)},"!":function(a,c,d){return!d(a,c)},"=":!0,"|":!0}),Xf={n:"\n",f:"\f",r:"\r",t:"\t",v:"\v","'":"'",'"':'"'},gc=function(a){this.options=a};gc.prototype={constructor:gc,lex:function(a){this.text=a;this.index=0;for(this.tokens=[];this.index<this.text.length;)if(a=this.text.charAt(this.index),'"'===a||"'"===a)this.readString(a);else if(this.isNumber(a)|| -"."===a&&this.isNumber(this.peek()))this.readNumber();else if(this.isIdent(a))this.readIdent();else if(this.is(a,"(){}[].,;:?"))this.tokens.push({index:this.index,text:a}),this.index++;else if(this.isWhitespace(a))this.index++;else{var c=a+this.peek(),d=c+this.peek(2),e=mb[c],f=mb[d];mb[a]||e||f?(a=f?d:e?c:a,this.tokens.push({index:this.index,text:a,operator:!0}),this.index+=a.length):this.throwError("Unexpected next character ",this.index,this.index+1)}return this.tokens},is:function(a,c){return-1!== -c.indexOf(a)},peek:function(a){a=a||1;return this.index+a<this.text.length?this.text.charAt(this.index+a):!1},isNumber:function(a){return"0"<=a&&"9">=a&&"string"===typeof a},isWhitespace:function(a){return" "===a||"\r"===a||"\t"===a||"\n"===a||"\v"===a||"\u00a0"===a},isIdent:function(a){return"a"<=a&&"z">=a||"A"<=a&&"Z">=a||"_"===a||"$"===a},isExpOperator:function(a){return"-"===a||"+"===a||this.isNumber(a)},throwError:function(a,c,d){d=d||this.index;c=y(c)?"s "+c+"-"+this.index+" ["+this.text.substring(c, -d)+"]":" "+d;throw la("lexerr",a,c,this.text);},readNumber:function(){for(var a="",c=this.index;this.index<this.text.length;){var d=Q(this.text.charAt(this.index));if("."==d||this.isNumber(d))a+=d;else{var e=this.peek();if("e"==d&&this.isExpOperator(e))a+=d;else if(this.isExpOperator(d)&&e&&this.isNumber(e)&&"e"==a.charAt(a.length-1))a+=d;else if(!this.isExpOperator(d)||e&&this.isNumber(e)||"e"!=a.charAt(a.length-1))break;else this.throwError("Invalid exponent")}this.index++}this.tokens.push({index:c, -text:a,constant:!0,value:Number(a)})},readIdent:function(){for(var a=this.index;this.index<this.text.length;){var c=this.text.charAt(this.index);if(!this.isIdent(c)&&!this.isNumber(c))break;this.index++}this.tokens.push({index:a,text:this.text.slice(a,this.index),identifier:!0})},readString:function(a){var c=this.index;this.index++;for(var d="",e=a,f=!1;this.index<this.text.length;){var g=this.text.charAt(this.index),e=e+g;if(f)"u"===g?(f=this.text.substring(this.index+1,this.index+5),f.match(/[\da-f]{4}/i)|| -this.throwError("Invalid unicode escape [\\u"+f+"]"),this.index+=4,d+=String.fromCharCode(parseInt(f,16))):d+=Xf[g]||g,f=!1;else if("\\"===g)f=!0;else{if(g===a){this.index++;this.tokens.push({index:c,text:e,constant:!0,value:d});return}d+=g}this.index++}this.throwError("Unterminated quote",c)}};var hb=function(a,c,d){this.lexer=a;this.$filter=c;this.options=d};hb.ZERO=z(function(){return 0},{sharedGetter:!0,constant:!0});hb.prototype={constructor:hb,parse:function(a){this.text=a;this.tokens=this.lexer.lex(a); -a=this.statements();0!==this.tokens.length&&this.throwError("is an unexpected token",this.tokens[0]);a.literal=!!a.literal;a.constant=!!a.constant;return a},primary:function(){var a;this.expect("(")?(a=this.filterChain(),this.consume(")")):this.expect("[")?a=this.arrayDeclaration():this.expect("{")?a=this.object():this.peek().identifier&&this.peek().text in lb?a=lb[this.consume().text]:this.peek().identifier?a=this.identifier():this.peek().constant?a=this.constant():this.throwError("not a primary expression", -this.peek());for(var c,d;c=this.expect("(","[",".");)"("===c.text?(a=this.functionCall(a,d),d=null):"["===c.text?(d=a,a=this.objectIndex(a)):"."===c.text?(d=a,a=this.fieldAccess(a)):this.throwError("IMPOSSIBLE");return a},throwError:function(a,c){throw la("syntax",c.text,a,c.index+1,this.text,this.text.substring(c.index));},peekToken:function(){if(0===this.tokens.length)throw la("ueoe",this.text);return this.tokens[0]},peek:function(a,c,d,e){return this.peekAhead(0,a,c,d,e)},peekAhead:function(a, -c,d,e,f){if(this.tokens.length>a){a=this.tokens[a];var g=a.text;if(g===c||g===d||g===e||g===f||!(c||d||e||f))return a}return!1},expect:function(a,c,d,e){return(a=this.peek(a,c,d,e))?(this.tokens.shift(),a):!1},consume:function(a){if(0===this.tokens.length)throw la("ueoe",this.text);var c=this.expect(a);c||this.throwError("is unexpected, expecting ["+a+"]",this.peek());return c},unaryFn:function(a,c){var d=mb[a];return z(function(a,f){return d(a,f,c)},{constant:c.constant,inputs:[c]})},binaryFn:function(a, -c,d,e){var f=mb[c];return z(function(c,e){return f(c,e,a,d)},{constant:a.constant&&d.constant,inputs:!e&&[a,d]})},identifier:function(){for(var a=this.consume().text;this.peek(".")&&this.peekAhead(1).identifier&&!this.peekAhead(2,"(");)a+=this.consume().text+this.consume().text;return zf(a,this.options,this.text)},constant:function(){var a=this.consume().value;return z(function(){return a},{constant:!0,literal:!0})},statements:function(){for(var a=[];;)if(0<this.tokens.length&&!this.peek("}",")", -";","]")&&a.push(this.filterChain()),!this.expect(";"))return 1===a.length?a[0]:function(c,d){for(var e,f=0,g=a.length;f<g;f++)e=a[f](c,d);return e}},filterChain:function(){for(var a=this.expression();this.expect("|");)a=this.filter(a);return a},filter:function(a){var c=this.$filter(this.consume().text),d,e;if(this.peek(":"))for(d=[],e=[];this.expect(":");)d.push(this.expression());var f=[a].concat(d||[]);return z(function(f,h){var l=a(f,h);if(e){e[0]=l;for(l=d.length;l--;)e[l+1]=d[l](f,h);return c.apply(t, -e)}return c(l)},{constant:!c.$stateful&&f.every(ec),inputs:!c.$stateful&&f})},expression:function(){return this.assignment()},assignment:function(){var a=this.ternary(),c,d;return(d=this.expect("="))?(a.assign||this.throwError("implies assignment but ["+this.text.substring(0,d.index)+"] can not be assigned to",d),c=this.ternary(),z(function(d,f){return a.assign(d,c(d,f),f)},{inputs:[a,c]})):a},ternary:function(){var a=this.logicalOR(),c;if(this.expect("?")&&(c=this.assignment(),this.consume(":"))){var d= -this.assignment();return z(function(e,f){return a(e,f)?c(e,f):d(e,f)},{constant:a.constant&&c.constant&&d.constant})}return a},logicalOR:function(){for(var a=this.logicalAND(),c;c=this.expect("||");)a=this.binaryFn(a,c.text,this.logicalAND(),!0);return a},logicalAND:function(){for(var a=this.equality(),c;c=this.expect("&&");)a=this.binaryFn(a,c.text,this.equality(),!0);return a},equality:function(){for(var a=this.relational(),c;c=this.expect("==","!=","===","!==");)a=this.binaryFn(a,c.text,this.relational()); -return a},relational:function(){for(var a=this.additive(),c;c=this.expect("<",">","<=",">=");)a=this.binaryFn(a,c.text,this.additive());return a},additive:function(){for(var a=this.multiplicative(),c;c=this.expect("+","-");)a=this.binaryFn(a,c.text,this.multiplicative());return a},multiplicative:function(){for(var a=this.unary(),c;c=this.expect("*","/","%");)a=this.binaryFn(a,c.text,this.unary());return a},unary:function(){var a;return this.expect("+")?this.primary():(a=this.expect("-"))?this.binaryFn(hb.ZERO, -a.text,this.unary()):(a=this.expect("!"))?this.unaryFn(a.text,this.unary()):this.primary()},fieldAccess:function(a){var c=this.identifier();return z(function(d,e,f){d=f||a(d,e);return null==d?t:c(d)},{assign:function(d,e,f){var g=a(d,f);g||a.assign(d,g={},f);return c.assign(g,e)}})},objectIndex:function(a){var c=this.text,d=this.expression();this.consume("]");return z(function(e,f){var g=a(e,f),h=d(e,f);ta(h,c);return g?ma(g[h],c):t},{assign:function(e,f,g){var h=ta(d(e,g),c),l=ma(a(e,g),c);l||a.assign(e, -l={},g);return l[h]=f}})},functionCall:function(a,c){var d=[];if(")"!==this.peekToken().text){do d.push(this.expression());while(this.expect(","))}this.consume(")");var e=this.text,f=d.length?[]:null;return function(g,h){var l=c?c(g,h):y(c)?t:g,k=a(g,h,l)||H;if(f)for(var m=d.length;m--;)f[m]=ma(d[m](g,h),e);ma(l,e);if(k){if(k.constructor===k)throw la("isecfn",e);if(k===Uf||k===Vf||k===Wf)throw la("isecff",e);}l=k.apply?k.apply(l,f):k(f[0],f[1],f[2],f[3],f[4]);return ma(l,e)}},arrayDeclaration:function(){var a= -[];if("]"!==this.peekToken().text){do{if(this.peek("]"))break;a.push(this.expression())}while(this.expect(","))}this.consume("]");return z(function(c,d){for(var e=[],f=0,g=a.length;f<g;f++)e.push(a[f](c,d));return e},{literal:!0,constant:a.every(ec),inputs:a})},object:function(){var a=[],c=[];if("}"!==this.peekToken().text){do{if(this.peek("}"))break;var d=this.consume();d.constant?a.push(d.value):d.identifier?a.push(d.text):this.throwError("invalid key",d);this.consume(":");c.push(this.expression())}while(this.expect(",")) -}this.consume("}");return z(function(d,f){for(var g={},h=0,l=c.length;h<l;h++)g[a[h]]=c[h](d,f);return g},{literal:!0,constant:c.every(ec),inputs:c})}};var Bf=ha(),Af=ha(),Cf=Object.prototype.valueOf,Ca=T("$sce"),na={HTML:"html",CSS:"css",URL:"url",RESOURCE_URL:"resourceUrl",JS:"js"},ja=T("$compile"),Z=Y.createElement("a"),id=Ba(M.location.href);Dc.$inject=["$provide"];jd.$inject=["$locale"];ld.$inject=["$locale"];var od=".",Mf={yyyy:$("FullYear",4),yy:$("FullYear",2,0,!0),y:$("FullYear",1),MMMM:Ib("Month"), -MMM:Ib("Month",!0),MM:$("Month",2,1),M:$("Month",1,1),dd:$("Date",2),d:$("Date",1),HH:$("Hours",2),H:$("Hours",1),hh:$("Hours",2,-12),h:$("Hours",1,-12),mm:$("Minutes",2),m:$("Minutes",1),ss:$("Seconds",2),s:$("Seconds",1),sss:$("Milliseconds",3),EEEE:Ib("Day"),EEE:Ib("Day",!0),a:function(a,c){return 12>a.getHours()?c.AMPMS[0]:c.AMPMS[1]},Z:function(a){a=-1*a.getTimezoneOffset();return a=(0<=a?"+":"")+(Hb(Math[0<a?"floor":"ceil"](a/60),2)+Hb(Math.abs(a%60),2))},ww:qd(2),w:qd(1)},Lf=/((?:[^yMdHhmsaZEw']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z|w+))(.*)/, -Kf=/^\-?\d+$/;kd.$inject=["$locale"];var Hf=da(Q),If=da(ub);md.$inject=["$parse"];var Td=da({restrict:"E",compile:function(a,c){if(!c.href&&!c.xlinkHref&&!c.name)return function(a,c){if("a"===c[0].nodeName.toLowerCase()){var f="[object SVGAnimatedString]"===Da.call(c.prop("href"))?"xlink:href":"href";c.on("click",function(a){c.attr(f)||a.preventDefault()})}}}}),vb={};s(Eb,function(a,c){if("multiple"!=a){var d=ya("ng-"+c);vb[d]=function(){return{restrict:"A",priority:100,link:function(a,f,g){a.$watch(g[d], -function(a){g.$set(c,!!a)})}}}}});s(Nc,function(a,c){vb[c]=function(){return{priority:100,link:function(a,e,f){if("ngPattern"===c&&"/"==f.ngPattern.charAt(0)&&(e=f.ngPattern.match(Of))){f.$set("ngPattern",new RegExp(e[1],e[2]));return}a.$watch(f[c],function(a){f.$set(c,a)})}}}});s(["src","srcset","href"],function(a){var c=ya("ng-"+a);vb[c]=function(){return{priority:99,link:function(d,e,f){var g=a,h=a;"href"===a&&"[object SVGAnimatedString]"===Da.call(e.prop("href"))&&(h="xlinkHref",f.$attr[h]="xlink:href", -g=null);f.$observe(c,function(c){c?(f.$set(h,c),Ra&&g&&e.prop(g,f[h])):"href"===a&&f.$set(h,null)})}}}});var Jb={$addControl:H,$$renameControl:function(a,c){a.$name=c},$removeControl:H,$setValidity:H,$setDirty:H,$setPristine:H,$setSubmitted:H};rd.$inject=["$element","$attrs","$scope","$animate","$interpolate"];var yd=function(a){return["$timeout",function(c){return{name:"form",restrict:a?"EAC":"E",controller:rd,compile:function(a){a.addClass(Sa).addClass(kb);return{pre:function(a,d,g,h){if(!("action"in -g)){var l=function(c){a.$apply(function(){h.$commitViewValue();h.$setSubmitted()});c.preventDefault()};d[0].addEventListener("submit",l,!1);d.on("$destroy",function(){c(function(){d[0].removeEventListener("submit",l,!1)},0,!1)})}var k=h.$$parentForm,m=h.$name;m&&(gb(a,null,m,h,m),g.$observe(g.name?"name":"ngForm",function(c){m!==c&&(gb(a,null,m,t,m),m=c,gb(a,null,m,h,m),k.$$renameControl(h,m))}));d.on("$destroy",function(){k.$removeControl(h);m&&gb(a,null,m,t,m);z(h,Jb)})}}}}}]},Ud=yd(),ge=yd(!0), -Nf=/\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)/,Yf=/^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/,Zf=/^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i,$f=/^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/,zd=/^(\d{4})-(\d{2})-(\d{2})$/,Ad=/^(\d{4})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,jc=/^(\d{4})-W(\d\d)$/,Bd=/^(\d{4})-(\d\d)$/,Cd=/^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,Dd= -{text:function(a,c,d,e,f,g){ib(a,c,d,e,f,g);hc(e)},date:jb("date",zd,Lb(zd,["yyyy","MM","dd"]),"yyyy-MM-dd"),"datetime-local":jb("datetimelocal",Ad,Lb(Ad,"yyyy MM dd HH mm ss sss".split(" ")),"yyyy-MM-ddTHH:mm:ss.sss"),time:jb("time",Cd,Lb(Cd,["HH","mm","ss","sss"]),"HH:mm:ss.sss"),week:jb("week",jc,function(a,c){if(qa(a))return a;if(F(a)){jc.lastIndex=0;var d=jc.exec(a);if(d){var e=+d[1],f=+d[2],g=d=0,h=0,l=0,k=pd(e),f=7*(f-1);c&&(d=c.getHours(),g=c.getMinutes(),h=c.getSeconds(),l=c.getMilliseconds()); -return new Date(e,0,k.getDate()+f,d,g,h,l)}}return NaN},"yyyy-Www"),month:jb("month",Bd,Lb(Bd,["yyyy","MM"]),"yyyy-MM"),number:function(a,c,d,e,f,g){td(a,c,d,e);ib(a,c,d,e,f,g);e.$$parserName="number";e.$parsers.push(function(a){return e.$isEmpty(a)?null:$f.test(a)?parseFloat(a):t});e.$formatters.push(function(a){if(!e.$isEmpty(a)){if(!V(a))throw Mb("numfmt",a);a=a.toString()}return a});if(d.min||d.ngMin){var h;e.$validators.min=function(a){return e.$isEmpty(a)||A(h)||a>=h};d.$observe("min",function(a){y(a)&& -!V(a)&&(a=parseFloat(a,10));h=V(a)&&!isNaN(a)?a:t;e.$validate()})}if(d.max||d.ngMax){var l;e.$validators.max=function(a){return e.$isEmpty(a)||A(l)||a<=l};d.$observe("max",function(a){y(a)&&!V(a)&&(a=parseFloat(a,10));l=V(a)&&!isNaN(a)?a:t;e.$validate()})}},url:function(a,c,d,e,f,g){ib(a,c,d,e,f,g);hc(e);e.$$parserName="url";e.$validators.url=function(a,c){var d=a||c;return e.$isEmpty(d)||Yf.test(d)}},email:function(a,c,d,e,f,g){ib(a,c,d,e,f,g);hc(e);e.$$parserName="email";e.$validators.email=function(a, -c){var d=a||c;return e.$isEmpty(d)||Zf.test(d)}},radio:function(a,c,d,e){A(d.name)&&c.attr("name",++nb);c.on("click",function(a){c[0].checked&&e.$setViewValue(d.value,a&&a.type)});e.$render=function(){c[0].checked=d.value==e.$viewValue};d.$observe("value",e.$render)},checkbox:function(a,c,d,e,f,g,h,l){var k=ud(l,a,"ngTrueValue",d.ngTrueValue,!0),m=ud(l,a,"ngFalseValue",d.ngFalseValue,!1);c.on("click",function(a){e.$setViewValue(c[0].checked,a&&a.type)});e.$render=function(){c[0].checked=e.$viewValue}; -e.$isEmpty=function(a){return!1===a};e.$formatters.push(function(a){return fa(a,k)});e.$parsers.push(function(a){return a?k:m})},hidden:H,button:H,submit:H,reset:H,file:H},xc=["$browser","$sniffer","$filter","$parse",function(a,c,d,e){return{restrict:"E",require:["?ngModel"],link:{pre:function(f,g,h,l){l[0]&&(Dd[Q(h.type)]||Dd.text)(f,g,h,l[0],c,a,d,e)}}}}],ag=/^(true|false|\d+)$/,ye=function(){return{restrict:"A",priority:100,compile:function(a,c){return ag.test(c.ngValue)?function(a,c,f){f.$set("value", -a.$eval(f.ngValue))}:function(a,c,f){a.$watch(f.ngValue,function(a){f.$set("value",a)})}}}},Zd=["$compile",function(a){return{restrict:"AC",compile:function(c){a.$$addBindingClass(c);return function(c,e,f){a.$$addBindingInfo(e,f.ngBind);e=e[0];c.$watch(f.ngBind,function(a){e.textContent=a===t?"":a})}}}}],ae=["$interpolate","$compile",function(a,c){return{compile:function(d){c.$$addBindingClass(d);return function(d,f,g){d=a(f.attr(g.$attr.ngBindTemplate));c.$$addBindingInfo(f,d.expressions);f=f[0]; -g.$observe("ngBindTemplate",function(a){f.textContent=a===t?"":a})}}}}],$d=["$sce","$parse","$compile",function(a,c,d){return{restrict:"A",compile:function(e,f){var g=c(f.ngBindHtml),h=c(f.ngBindHtml,function(a){return(a||"").toString()});d.$$addBindingClass(e);return function(c,e,f){d.$$addBindingInfo(e,f.ngBindHtml);c.$watch(h,function(){e.html(a.getTrustedHtml(g(c))||"")})}}}}],xe=da({restrict:"A",require:"ngModel",link:function(a,c,d,e){e.$viewChangeListeners.push(function(){a.$eval(d.ngChange)})}}), -be=ic("",!0),de=ic("Odd",0),ce=ic("Even",1),ee=Ja({compile:function(a,c){c.$set("ngCloak",t);a.removeClass("ng-cloak")}}),fe=[function(){return{restrict:"A",scope:!0,controller:"@",priority:500}}],Cc={},bg={blur:!0,focus:!0};s("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "),function(a){var c=ya("ng-"+a);Cc[c]=["$parse","$rootScope",function(d,e){return{restrict:"A",compile:function(f,g){var h= -d(g[c],null,!0);return function(c,d){d.on(a,function(d){var f=function(){h(c,{$event:d})};bg[a]&&e.$$phase?c.$evalAsync(f):c.$apply(f)})}}}}]});var ie=["$animate",function(a){return{multiElement:!0,transclude:"element",priority:600,terminal:!0,restrict:"A",$$tlb:!0,link:function(c,d,e,f,g){var h,l,k;c.$watch(e.ngIf,function(c){c?l||g(function(c,f){l=f;c[c.length++]=Y.createComment(" end ngIf: "+e.ngIf+" ");h={clone:c};a.enter(c,d.parent(),d)}):(k&&(k.remove(),k=null),l&&(l.$destroy(),l=null),h&&(k= -tb(h.clone),a.leave(k).then(function(){k=null}),h=null))})}}}],je=["$templateRequest","$anchorScroll","$animate","$sce",function(a,c,d,e){return{restrict:"ECA",priority:400,terminal:!0,transclude:"element",controller:ga.noop,compile:function(f,g){var h=g.ngInclude||g.src,l=g.onload||"",k=g.autoscroll;return function(f,g,q,s,r){var t=0,p,v,w,L=function(){v&&(v.remove(),v=null);p&&(p.$destroy(),p=null);w&&(d.leave(w).then(function(){v=null}),v=w,w=null)};f.$watch(e.parseAsResourceUrl(h),function(e){var h= -function(){!y(k)||k&&!f.$eval(k)||c()},q=++t;e?(a(e,!0).then(function(a){if(q===t){var c=f.$new();s.template=a;a=r(c,function(a){L();d.enter(a,null,g).then(h)});p=c;w=a;p.$emit("$includeContentLoaded",e);f.$eval(l)}},function(){q===t&&(L(),f.$emit("$includeContentError",e))}),f.$emit("$includeContentRequested",e)):(L(),s.template=null)})}}}}],Ae=["$compile",function(a){return{restrict:"ECA",priority:-400,require:"ngInclude",link:function(c,d,e,f){/SVG/.test(d[0].toString())?(d.empty(),a(Fc(f.template, -Y).childNodes)(c,function(a){d.append(a)},{futureParentElement:d})):(d.html(f.template),a(d.contents())(c))}}}],ke=Ja({priority:450,compile:function(){return{pre:function(a,c,d){a.$eval(d.ngInit)}}}}),we=function(){return{restrict:"A",priority:100,require:"ngModel",link:function(a,c,d,e){var f=c.attr(d.$attr.ngList)||", ",g="false"!==d.ngTrim,h=g?U(f):f;e.$parsers.push(function(a){if(!A(a)){var c=[];a&&s(a.split(h),function(a){a&&c.push(g?U(a):a)});return c}});e.$formatters.push(function(a){return D(a)? -a.join(f):t});e.$isEmpty=function(a){return!a||!a.length}}}},kb="ng-valid",vd="ng-invalid",Sa="ng-pristine",Kb="ng-dirty",xd="ng-pending",Mb=new T("ngModel"),cg=["$scope","$exceptionHandler","$attrs","$element","$parse","$animate","$timeout","$rootScope","$q","$interpolate",function(a,c,d,e,f,g,h,l,k,m){this.$modelValue=this.$viewValue=Number.NaN;this.$$rawModelValue=t;this.$validators={};this.$asyncValidators={};this.$parsers=[];this.$formatters=[];this.$viewChangeListeners=[];this.$untouched=!0; -this.$touched=!1;this.$pristine=!0;this.$dirty=!1;this.$valid=!0;this.$invalid=!1;this.$error={};this.$$success={};this.$pending=t;this.$name=m(d.name||"",!1)(a);var n=f(d.ngModel),q=n.assign,u=n,r=q,O=null,p=this;this.$$setOptions=function(a){if((p.$options=a)&&a.getterSetter){var c=f(d.ngModel+"()"),g=f(d.ngModel+"($$$p)");u=function(a){var d=n(a);G(d)&&(d=c(a));return d};r=function(a,c){G(n(a))?g(a,{$$$p:p.$modelValue}):q(a,p.$modelValue)}}else if(!n.assign)throw Mb("nonassign",d.ngModel,va(e)); -};this.$render=H;this.$isEmpty=function(a){return A(a)||""===a||null===a||a!==a};var v=e.inheritedData("$formController")||Jb,w=0;sd({ctrl:this,$element:e,set:function(a,c){a[c]=!0},unset:function(a,c){delete a[c]},parentForm:v,$animate:g});this.$setPristine=function(){p.$dirty=!1;p.$pristine=!0;g.removeClass(e,Kb);g.addClass(e,Sa)};this.$setDirty=function(){p.$dirty=!0;p.$pristine=!1;g.removeClass(e,Sa);g.addClass(e,Kb);v.$setDirty()};this.$setUntouched=function(){p.$touched=!1;p.$untouched=!0;g.setClass(e, -"ng-untouched","ng-touched")};this.$setTouched=function(){p.$touched=!0;p.$untouched=!1;g.setClass(e,"ng-touched","ng-untouched")};this.$rollbackViewValue=function(){h.cancel(O);p.$viewValue=p.$$lastCommittedViewValue;p.$render()};this.$validate=function(){if(!V(p.$modelValue)||!isNaN(p.$modelValue)){var a=p.$$rawModelValue,c=p.$valid,d=p.$modelValue,e=p.$options&&p.$options.allowInvalid;p.$$runValidators(p.$error[p.$$parserName||"parse"]?!1:t,a,p.$$lastCommittedViewValue,function(f){e||c===f||(p.$modelValue= -f?a:t,p.$modelValue!==d&&p.$$writeModelToScope())})}};this.$$runValidators=function(a,c,d,e){function f(){var a=!0;s(p.$validators,function(e,f){var g=e(c,d);a=a&&g;h(f,g)});return a?!0:(s(p.$asyncValidators,function(a,c){h(c,null)}),!1)}function g(){var a=[],e=!0;s(p.$asyncValidators,function(f,g){var l=f(c,d);if(!l||!G(l.then))throw Mb("$asyncValidators",l);h(g,t);a.push(l.then(function(){h(g,!0)},function(a){e=!1;h(g,!1)}))});a.length?k.all(a).then(function(){l(e)},H):l(!0)}function h(a,c){m=== -w&&p.$setValidity(a,c)}function l(a){m===w&&e(a)}w++;var m=w;(function(a){var c=p.$$parserName||"parse";if(a===t)h(c,null);else if(h(c,a),!a)return s(p.$validators,function(a,c){h(c,null)}),s(p.$asyncValidators,function(a,c){h(c,null)}),!1;return!0})(a)?f()?g():l(!1):l(!1)};this.$commitViewValue=function(){var a=p.$viewValue;h.cancel(O);if(p.$$lastCommittedViewValue!==a||""===a&&p.$$hasNativeValidators)p.$$lastCommittedViewValue=a,p.$pristine&&this.$setDirty(),this.$$parseAndValidate()};this.$$parseAndValidate= -function(){var c=p.$$lastCommittedViewValue,d=A(c)?t:!0;if(d)for(var e=0;e<p.$parsers.length;e++)if(c=p.$parsers[e](c),A(c)){d=!1;break}V(p.$modelValue)&&isNaN(p.$modelValue)&&(p.$modelValue=u(a));var f=p.$modelValue,g=p.$options&&p.$options.allowInvalid;p.$$rawModelValue=c;g&&(p.$modelValue=c,p.$modelValue!==f&&p.$$writeModelToScope());p.$$runValidators(d,c,p.$$lastCommittedViewValue,function(a){g||(p.$modelValue=a?c:t,p.$modelValue!==f&&p.$$writeModelToScope())})};this.$$writeModelToScope=function(){r(a, -p.$modelValue);s(p.$viewChangeListeners,function(a){try{a()}catch(d){c(d)}})};this.$setViewValue=function(a,c){p.$viewValue=a;p.$options&&!p.$options.updateOnDefault||p.$$debounceViewValueCommit(c)};this.$$debounceViewValueCommit=function(c){var d=0,e=p.$options;e&&y(e.debounce)&&(e=e.debounce,V(e)?d=e:V(e[c])?d=e[c]:V(e["default"])&&(d=e["default"]));h.cancel(O);d?O=h(function(){p.$commitViewValue()},d):l.$$phase?p.$commitViewValue():a.$apply(function(){p.$commitViewValue()})};a.$watch(function(){var c= -u(a);if(c!==p.$modelValue){p.$modelValue=p.$$rawModelValue=c;for(var d=p.$formatters,e=d.length,f=c;e--;)f=d[e](f);p.$viewValue!==f&&(p.$viewValue=p.$$lastCommittedViewValue=f,p.$render(),p.$$runValidators(t,c,f,H))}return c})}],ve=["$rootScope",function(a){return{restrict:"A",require:["ngModel","^?form","^?ngModelOptions"],controller:cg,priority:1,compile:function(c){c.addClass(Sa).addClass("ng-untouched").addClass(kb);return{pre:function(a,c,f,g){var h=g[0],l=g[1]||Jb;h.$$setOptions(g[2]&&g[2].$options); -l.$addControl(h);f.$observe("name",function(a){h.$name!==a&&l.$$renameControl(h,a)});a.$on("$destroy",function(){l.$removeControl(h)})},post:function(c,e,f,g){var h=g[0];if(h.$options&&h.$options.updateOn)e.on(h.$options.updateOn,function(a){h.$$debounceViewValueCommit(a&&a.type)});e.on("blur",function(e){h.$touched||(a.$$phase?c.$evalAsync(h.$setTouched):c.$apply(h.$setTouched))})}}}}}],dg=/(\s+|^)default(\s+|$)/,ze=function(){return{restrict:"A",controller:["$scope","$attrs",function(a,c){var d= -this;this.$options=a.$eval(c.ngModelOptions);this.$options.updateOn!==t?(this.$options.updateOnDefault=!1,this.$options.updateOn=U(this.$options.updateOn.replace(dg,function(){d.$options.updateOnDefault=!0;return" "}))):this.$options.updateOnDefault=!0}]}},le=Ja({terminal:!0,priority:1E3}),me=["$locale","$interpolate",function(a,c){var d=/{}/g,e=/^when(Minus)?(.+)$/;return{restrict:"EA",link:function(f,g,h){function l(a){g.text(a||"")}var k=h.count,m=h.$attr.when&&g.attr(h.$attr.when),n=h.offset|| -0,q=f.$eval(m)||{},u={},m=c.startSymbol(),r=c.endSymbol(),t=m+k+"-"+n+r,p=ga.noop,v;s(h,function(a,c){var d=e.exec(c);d&&(d=(d[1]?"-":"")+Q(d[2]),q[d]=g.attr(h.$attr[c]))});s(q,function(a,e){u[e]=c(a.replace(d,t))});f.$watch(k,function(c){c=parseFloat(c);var d=isNaN(c);d||c in q||(c=a.pluralCat(c-n));c===v||d&&isNaN(v)||(p(),p=f.$watch(u[c],l),v=c)})}}}],ne=["$parse","$animate",function(a,c){var d=T("ngRepeat"),e=function(a,c,d,e,k,m,n){a[d]=e;k&&(a[k]=m);a.$index=c;a.$first=0===c;a.$last=c===n-1; -a.$middle=!(a.$first||a.$last);a.$odd=!(a.$even=0===(c&1))};return{restrict:"A",multiElement:!0,transclude:"element",priority:1E3,terminal:!0,$$tlb:!0,compile:function(f,g){var h=g.ngRepeat,l=Y.createComment(" end ngRepeat: "+h+" "),k=h.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/);if(!k)throw d("iexp",h);var m=k[1],n=k[2],q=k[3],u=k[4],k=m.match(/^(?:(\s*[\$\w]+)|\(\s*([\$\w]+)\s*,\s*([\$\w]+)\s*\))$/);if(!k)throw d("iidexp",m);var r=k[3]||k[1], -y=k[2];if(q&&(!/^[$a-zA-Z_][$a-zA-Z0-9_]*$/.test(q)||/^(null|undefined|this|\$index|\$first|\$middle|\$last|\$even|\$odd|\$parent|\$root|\$id)$/.test(q)))throw d("badident",q);var p,v,w,A,z={$id:Na};u?p=a(u):(w=function(a,c){return Na(c)},A=function(a){return a});return function(a,f,g,k,m){p&&(v=function(c,d,e){y&&(z[y]=c);z[r]=d;z.$index=e;return p(a,z)});var u=ha();a.$watchCollection(n,function(g){var k,p,n=f[0],E,z=ha(),H,S,N,D,G,C,I;q&&(a[q]=g);if(Ta(g))G=g,p=v||w;else{p=v||A;G=[];for(I in g)g.hasOwnProperty(I)&& -"$"!=I.charAt(0)&&G.push(I);G.sort()}H=G.length;I=Array(H);for(k=0;k<H;k++)if(S=g===G?k:G[k],N=g[S],D=p(S,N,k),u[D])C=u[D],delete u[D],z[D]=C,I[k]=C;else{if(z[D])throw s(I,function(a){a&&a.scope&&(u[a.id]=a)}),d("dupes",h,D,N);I[k]={id:D,scope:t,clone:t};z[D]=!0}for(E in u){C=u[E];D=tb(C.clone);c.leave(D);if(D[0].parentNode)for(k=0,p=D.length;k<p;k++)D[k].$$NG_REMOVED=!0;C.scope.$destroy()}for(k=0;k<H;k++)if(S=g===G?k:G[k],N=g[S],C=I[k],C.scope){E=n;do E=E.nextSibling;while(E&&E.$$NG_REMOVED);C.clone[0]!= -E&&c.move(tb(C.clone),null,B(n));n=C.clone[C.clone.length-1];e(C.scope,k,r,N,y,S,H)}else m(function(a,d){C.scope=d;var f=l.cloneNode(!1);a[a.length++]=f;c.enter(a,null,B(n));n=f;C.clone=a;z[C.id]=C;e(C.scope,k,r,N,y,S,H)});u=z})}}}}],oe=["$animate",function(a){return{restrict:"A",multiElement:!0,link:function(c,d,e){c.$watch(e.ngShow,function(c){a[c?"removeClass":"addClass"](d,"ng-hide",{tempClasses:"ng-hide-animate"})})}}}],he=["$animate",function(a){return{restrict:"A",multiElement:!0,link:function(c, -d,e){c.$watch(e.ngHide,function(c){a[c?"addClass":"removeClass"](d,"ng-hide",{tempClasses:"ng-hide-animate"})})}}}],pe=Ja(function(a,c,d){a.$watchCollection(d.ngStyle,function(a,d){d&&a!==d&&s(d,function(a,d){c.css(d,"")});a&&c.css(a)})}),qe=["$animate",function(a){return{restrict:"EA",require:"ngSwitch",controller:["$scope",function(){this.cases={}}],link:function(c,d,e,f){var g=[],h=[],l=[],k=[],m=function(a,c){return function(){a.splice(c,1)}};c.$watch(e.ngSwitch||e.on,function(c){var d,e;d=0; -for(e=l.length;d<e;++d)a.cancel(l[d]);d=l.length=0;for(e=k.length;d<e;++d){var r=tb(h[d].clone);k[d].$destroy();(l[d]=a.leave(r)).then(m(l,d))}h.length=0;k.length=0;(g=f.cases["!"+c]||f.cases["?"])&&s(g,function(c){c.transclude(function(d,e){k.push(e);var f=c.element;d[d.length++]=Y.createComment(" end ngSwitchWhen: ");h.push({clone:d});a.enter(d,f.parent(),f)})})})}}}],re=Ja({transclude:"element",priority:1200,require:"^ngSwitch",multiElement:!0,link:function(a,c,d,e,f){e.cases["!"+d.ngSwitchWhen]= -e.cases["!"+d.ngSwitchWhen]||[];e.cases["!"+d.ngSwitchWhen].push({transclude:f,element:c})}}),se=Ja({transclude:"element",priority:1200,require:"^ngSwitch",multiElement:!0,link:function(a,c,d,e,f){e.cases["?"]=e.cases["?"]||[];e.cases["?"].push({transclude:f,element:c})}}),ue=Ja({restrict:"EAC",link:function(a,c,d,e,f){if(!f)throw T("ngTransclude")("orphan",va(c));f(function(a){c.empty();c.append(a)})}}),Vd=["$templateCache",function(a){return{restrict:"E",terminal:!0,compile:function(c,d){"text/ng-template"== -d.type&&a.put(d.id,c[0].text)}}}],eg=T("ngOptions"),te=da({restrict:"A",terminal:!0}),Wd=["$compile","$parse",function(a,c){var d=/^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/,e={$setViewValue:H};return{restrict:"E",require:["select","?ngModel"],controller:["$element","$scope","$attrs",function(a,c,d){var l=this,k={},m=e,n;l.databound=d.ngModel; -l.init=function(a,c,d){m=a;n=d};l.addOption=function(c,d){Ma(c,'"option value"');k[c]=!0;m.$viewValue==c&&(a.val(c),n.parent()&&n.remove());d&&d[0].hasAttribute("selected")&&(d[0].selected=!0)};l.removeOption=function(a){this.hasOption(a)&&(delete k[a],m.$viewValue===a&&this.renderUnknownOption(a))};l.renderUnknownOption=function(c){c="? "+Na(c)+" ?";n.val(c);a.prepend(n);a.val(c);n.prop("selected",!0)};l.hasOption=function(a){return k.hasOwnProperty(a)};c.$on("$destroy",function(){l.renderUnknownOption= -H})}],link:function(e,g,h,l){function k(a,c,d,e){d.$render=function(){var a=d.$viewValue;e.hasOption(a)?(C.parent()&&C.remove(),c.val(a),""===a&&p.prop("selected",!0)):A(a)&&p?c.val(""):e.renderUnknownOption(a)};c.on("change",function(){a.$apply(function(){C.parent()&&C.remove();d.$setViewValue(c.val())})})}function m(a,c,d){var e;d.$render=function(){var a=new db(d.$viewValue);s(c.find("option"),function(c){c.selected=y(a.get(c.value))})};a.$watch(function(){fa(e,d.$viewValue)||(e=ra(d.$viewValue), -d.$render())});c.on("change",function(){a.$apply(function(){var a=[];s(c.find("option"),function(c){c.selected&&a.push(c.value)});d.$setViewValue(a)})})}function n(e,f,g){function h(a,c,d){T[x]=d;G&&(T[G]=c);return a(e,T)}function k(a){var c;if(u)if(M&&D(a)){c=new db([]);for(var d=0;d<a.length;d++)c.put(h(M,null,a[d]),!0)}else c=new db(a);else M&&(a=h(M,null,a));return function(d,e){var f;f=M?M:B?B:F;return u?y(c.remove(h(f,d,e))):a===h(f,d,e)}}function l(){v||(e.$$postDigest(p),v=!0)}function m(a, -c,d){a[c]=a[c]||0;a[c]+=d?1:-1}function p(){v=!1;var a={"":[]},c=[""],d,l,n,r,t;n=g.$viewValue;r=P(e)||[];var B=G?Object.keys(r).sort():r,x,A,D,F,N={};t=k(n);var J=!1,U,V;Q={};for(F=0;D=B.length,F<D;F++){x=F;if(G&&(x=B[F],"$"===x.charAt(0)))continue;A=r[x];d=h(I,x,A)||"";(l=a[d])||(l=a[d]=[],c.push(d));d=t(x,A);J=J||d;A=h(C,x,A);A=y(A)?A:"";V=M?M(e,T):G?B[F]:F;M&&(Q[V]=x);l.push({id:V,label:A,selected:d})}u||(z||null===n?a[""].unshift({id:"",label:"",selected:!J}):J||a[""].unshift({id:"?",label:"", -selected:!0}));x=0;for(B=c.length;x<B;x++){d=c[x];l=a[d];R.length<=x?(n={element:H.clone().attr("label",d),label:l.label},r=[n],R.push(r),f.append(n.element)):(r=R[x],n=r[0],n.label!=d&&n.element.attr("label",n.label=d));J=null;F=0;for(D=l.length;F<D;F++)d=l[F],(t=r[F+1])?(J=t.element,t.label!==d.label&&(m(N,t.label,!1),m(N,d.label,!0),J.text(t.label=d.label),J.prop("label",t.label)),t.id!==d.id&&J.val(t.id=d.id),J[0].selected!==d.selected&&(J.prop("selected",t.selected=d.selected),Ra&&J.prop("selected", -t.selected))):(""===d.id&&z?U=z:(U=w.clone()).val(d.id).prop("selected",d.selected).attr("selected",d.selected).prop("label",d.label).text(d.label),r.push(t={element:U,label:d.label,id:d.id,selected:d.selected}),m(N,d.label,!0),J?J.after(U):n.element.append(U),J=U);for(F++;r.length>F;)d=r.pop(),m(N,d.label,!1),d.element.remove()}for(;R.length>x;){l=R.pop();for(F=1;F<l.length;++F)m(N,l[F].label,!1);l[0].element.remove()}s(N,function(a,c){0<a?q.addOption(c):0>a&&q.removeOption(c)})}var n;if(!(n=r.match(d)))throw eg("iexp", -r,va(f));var C=c(n[2]||n[1]),x=n[4]||n[6],A=/ as /.test(n[0])&&n[1],B=A?c(A):null,G=n[5],I=c(n[3]||""),F=c(n[2]?n[1]:x),P=c(n[7]),M=n[8]?c(n[8]):null,Q={},R=[[{element:f,label:""}]],T={};z&&(a(z)(e),z.removeClass("ng-scope"),z.remove());f.empty();f.on("change",function(){e.$apply(function(){var a=P(e)||[],c;if(u)c=[],s(f.val(),function(d){d=M?Q[d]:d;c.push("?"===d?t:""===d?null:h(B?B:F,d,a[d]))});else{var d=M?Q[f.val()]:f.val();c="?"===d?t:""===d?null:h(B?B:F,d,a[d])}g.$setViewValue(c);p()})});g.$render= -p;e.$watchCollection(P,l);e.$watchCollection(function(){var a=P(e),c;if(a&&D(a)){c=Array(a.length);for(var d=0,f=a.length;d<f;d++)c[d]=h(C,d,a[d])}else if(a)for(d in c={},a)a.hasOwnProperty(d)&&(c[d]=h(C,d,a[d]));return c},l);u&&e.$watchCollection(function(){return g.$modelValue},l)}if(l[1]){var q=l[0];l=l[1];var u=h.multiple,r=h.ngOptions,z=!1,p,v=!1,w=B(Y.createElement("option")),H=B(Y.createElement("optgroup")),C=w.clone();h=0;for(var x=g.children(),G=x.length;h<G;h++)if(""===x[h].value){p=z=x.eq(h); -break}q.init(l,z,C);u&&(l.$isEmpty=function(a){return!a||0===a.length});r?n(e,g,l):u?m(e,g,l):k(e,g,l,q)}}}}],Yd=["$interpolate",function(a){var c={addOption:H,removeOption:H};return{restrict:"E",priority:100,compile:function(d,e){if(A(e.value)){var f=a(d.text(),!0);f||e.$set("value",d.text())}return function(a,d,e){var k=d.parent(),m=k.data("$selectController")||k.parent().data("$selectController");m&&m.databound||(m=c);f?a.$watch(f,function(a,c){e.$set("value",a);c!==a&&m.removeOption(c);m.addOption(a, -d)}):m.addOption(e.value,d);d.on("$destroy",function(){m.removeOption(e.value)})}}}}],Xd=da({restrict:"E",terminal:!1}),zc=function(){return{restrict:"A",require:"?ngModel",link:function(a,c,d,e){e&&(d.required=!0,e.$validators.required=function(a,c){return!d.required||!e.$isEmpty(c)},d.$observe("required",function(){e.$validate()}))}}},yc=function(){return{restrict:"A",require:"?ngModel",link:function(a,c,d,e){if(e){var f,g=d.ngPattern||d.pattern;d.$observe("pattern",function(a){F(a)&&0<a.length&& -(a=new RegExp("^"+a+"$"));if(a&&!a.test)throw T("ngPattern")("noregexp",g,a,va(c));f=a||t;e.$validate()});e.$validators.pattern=function(a){return e.$isEmpty(a)||A(f)||f.test(a)}}}}},Bc=function(){return{restrict:"A",require:"?ngModel",link:function(a,c,d,e){if(e){var f=-1;d.$observe("maxlength",function(a){a=ba(a);f=isNaN(a)?-1:a;e.$validate()});e.$validators.maxlength=function(a,c){return 0>f||e.$isEmpty(a)||c.length<=f}}}}},Ac=function(){return{restrict:"A",require:"?ngModel",link:function(a,c, -d,e){if(e){var f=0;d.$observe("minlength",function(a){f=ba(a)||0;e.$validate()});e.$validators.minlength=function(a,c){return e.$isEmpty(c)||c.length>=f}}}}};M.angular.bootstrap?console.log("WARNING: Tried to load angular more than once."):(Nd(),Pd(ga),B(Y).ready(function(){Jd(Y,sc)}))})(window,document);!window.angular.$$csp()&&window.angular.element(document).find("head").prepend('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\\:form{display:block;}</style>'); -//# sourceMappingURL=angular.min.js.map diff --git a/src/main/webapp/bower_components/angular/angular.min.js.gzip b/src/main/webapp/bower_components/angular/angular.min.js.gzip deleted file mode 100644 index 573d85539bc5ee10e3c0008d2419c0a4f6b89627..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45987 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 diff --git a/src/main/webapp/bower_components/angular/angular.min.js.map b/src/main/webapp/bower_components/angular/angular.min.js.map deleted file mode 100644 index e54ef355..00000000 --- a/src/main/webapp/bower_components/angular/angular.min.js.map +++ /dev/null @@ -1,8 +0,0 @@ -{ -"version":3, -"file":"angular.min.js", -"lineCount":250, -"mappings":"A;;;;;aAKC,SAAQ,CAACA,CAAD,CAASC,CAAT,CAAmBC,CAAnB,CAA8B,CAgCvCC,QAAAA,EAAAA,CAAAA,CAAAA,CAAAA,CAAAA,MAAAA,SAAAA,EAAAA,CAAAA,IAAAA,EAAAA,SAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,GAAAA,EAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,CAAAA,EAAAA,EAAAA,CAAAA,CAAAA,uCAAAA,EAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAAAA,CAAAA,EAAAA,EAAAA,CAAAA,KAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,SAAAA,OAAAA,CAAAA,CAAAA,EAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,EAAAA,CAAAA,CAAAA,GAAAA,CAAAA,GAAAA,EAAAA,GAAAA,EAAAA,CAAAA,CAAAA,CAAAA,EAAAA,GAAAA,KAAAA,EAAAA,kBAAAA,CAAAA,CAAAA,EAAAA,CAAAA,SAAAA,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,UAAAA,EAAAA,MAAAA,EAAAA,CAAAA,CAAAA,SAAAA,EAAAA,QAAAA,CAAAA,aAAAA,CAAAA,EAAAA,CAAAA,CAAAA,WAAAA,EAAAA,MAAAA,EAAAA,CAAAA,WAAAA,CAAAA,QAAAA,EAAAA,MAAAA,EAAAA,CAAAA,IAAAA,UAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,EAAAA,EAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,MAAAA,MAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CA4NAC,QAASA,GAAW,CAACC,CAAD,CAAM,CACxB,GAAW,IAAX,EAAIA,CAAJ,EAAmBC,EAAA,CAASD,CAAT,CAAnB,CACE,MAAO,CAAA,CAGT,KAAIE,EAASF,CAAAE,OAEb,OAAIF,EAAAG,SAAJ;AAAqBC,EAArB,EAA0CF,CAA1C,CACS,CAAA,CADT,CAIOG,CAAA,CAASL,CAAT,CAJP,EAIwBM,CAAA,CAAQN,CAAR,CAJxB,EAImD,CAJnD,GAIwCE,CAJxC,EAKyB,QALzB,GAKO,MAAOA,EALd,EAK8C,CAL9C,CAKqCA,CALrC,EAKoDA,CALpD,CAK6D,CAL7D,GAKmEF,EAZ3C,CAkD1BO,QAASA,EAAO,CAACP,CAAD,CAAMQ,CAAN,CAAgBC,CAAhB,CAAyB,CAAA,IACnCC,CADmC,CAC9BR,CACT,IAAIF,CAAJ,CACE,GAAIW,CAAA,CAAWX,CAAX,CAAJ,CACE,IAAKU,CAAL,GAAYV,EAAZ,CAGa,WAAX,EAAIU,CAAJ,EAAiC,QAAjC,EAA0BA,CAA1B,EAAoD,MAApD,EAA6CA,CAA7C,EAAgEV,CAAAY,eAAhE,EAAsF,CAAAZ,CAAAY,eAAA,CAAmBF,CAAnB,CAAtF,EACEF,CAAAK,KAAA,CAAcJ,CAAd,CAAuBT,CAAA,CAAIU,CAAJ,CAAvB,CAAiCA,CAAjC,CAAsCV,CAAtC,CALN,KAQO,IAAIM,CAAA,CAAQN,CAAR,CAAJ,EAAoBD,EAAA,CAAYC,CAAZ,CAApB,CAAsC,CAC3C,IAAIc,EAA6B,QAA7BA,GAAc,MAAOd,EACpBU,EAAA,CAAM,CAAX,KAAcR,CAAd,CAAuBF,CAAAE,OAAvB,CAAmCQ,CAAnC,CAAyCR,CAAzC,CAAiDQ,CAAA,EAAjD,CACE,CAAII,CAAJ,EAAmBJ,CAAnB,GAA0BV,EAA1B,GACEQ,CAAAK,KAAA,CAAcJ,CAAd,CAAuBT,CAAA,CAAIU,CAAJ,CAAvB,CAAiCA,CAAjC,CAAsCV,CAAtC,CAJuC,CAAtC,IAOA,IAAIA,CAAAO,QAAJ,EAAmBP,CAAAO,QAAnB,GAAmCA,CAAnC,CACHP,CAAAO,QAAA,CAAYC,CAAZ,CAAsBC,CAAtB,CAA+BT,CAA/B,CADG,KAGL,KAAKU,CAAL,GAAYV,EAAZ,CACMA,CAAAY,eAAA,CAAmBF,CAAnB,CAAJ,EACEF,CAAAK,KAAA,CAAcJ,CAAd,CAAuBT,CAAA,CAAIU,CAAJ,CAAvB,CAAiCA,CAAjC,CAAsCV,CAAtC,CAKR,OAAOA,EA5BgC,CAmCzCe,QAASA,GAAa,CAACf,CAAD,CAAMQ,CAAN,CAAgBC,CAAhB,CAAyB,CAE7C,IADA,IAAIO,EAJGC,MAAAD,KAAA,CAIehB,CAJf,CAAAkB,KAAA,EAIP,CACSC,EAAI,CAAb,CAAgBA,CAAhB,CAAoBH,CAAAd,OAApB,CAAiCiB,CAAA,EAAjC,CACEX,CAAAK,KAAA,CAAcJ,CAAd;AAAuBT,CAAA,CAAIgB,CAAA,CAAKG,CAAL,CAAJ,CAAvB,CAAqCH,CAAA,CAAKG,CAAL,CAArC,CAEF,OAAOH,EALsC,CAc/CI,QAASA,GAAa,CAACC,CAAD,CAAa,CACjC,MAAO,SAAQ,CAACC,CAAD,CAAQZ,CAAR,CAAa,CAAEW,CAAA,CAAWX,CAAX,CAAgBY,CAAhB,CAAF,CADK,CAcnCC,QAASA,GAAO,EAAG,CACjB,MAAO,EAAEC,EADQ,CAUnBC,QAASA,GAAU,CAACzB,CAAD,CAAM0B,CAAN,CAAS,CACtBA,CAAJ,CACE1B,CAAA2B,UADF,CACkBD,CADlB,CAIE,OAAO1B,CAAA2B,UALiB,CAyB5BC,QAASA,EAAM,CAACC,CAAD,CAAM,CAGnB,IAFA,IAAIH,EAAIG,CAAAF,UAAR,CAESR,EAAI,CAFb,CAEgBW,EAAKC,SAAA7B,OAArB,CAAuCiB,CAAvC,CAA2CW,CAA3C,CAA+CX,CAAA,EAA/C,CAAoD,CAClD,IAAInB,EAAM+B,SAAA,CAAUZ,CAAV,CACV,IAAInB,CAAJ,CAEE,IADA,IAAIgB,EAAOC,MAAAD,KAAA,CAAYhB,CAAZ,CAAX,CACSgC,EAAI,CADb,CACgBC,EAAKjB,CAAAd,OAArB,CAAkC8B,CAAlC,CAAsCC,CAAtC,CAA0CD,CAAA,EAA1C,CAA+C,CAC7C,IAAItB,EAAMM,CAAA,CAAKgB,CAAL,CACVH,EAAA,CAAInB,CAAJ,CAAA,CAAWV,CAAA,CAAIU,CAAJ,CAFkC,CAJC,CAWpDe,EAAA,CAAWI,CAAX,CAAgBH,CAAhB,CACA,OAAOG,EAfY,CAkBrBK,QAASA,GAAG,CAACC,CAAD,CAAM,CAChB,MAAOC,SAAA,CAASD,CAAT,CAAc,EAAd,CADS,CAyBlBE,QAASA,EAAI,EAAG,EAsBhBC,QAASA,GAAQ,CAACC,CAAD,CAAI,CAAC,MAAOA,EAAR,CAIrBC,QAASA,GAAO,CAAClB,CAAD,CAAQ,CAAC,MAAO,SAAQ,EAAG,CAAC,MAAOA,EAAR,CAAnB,CAcxBmB,QAASA,EAAW,CAACnB,CAAD,CAAQ,CAAC,MAAwB,WAAxB,GAAO,MAAOA,EAAf,CAe5BoB,QAASA,EAAS,CAACpB,CAAD,CAAQ,CAAC,MAAwB,WAAxB;AAAO,MAAOA,EAAf,CAgB1BqB,QAASA,EAAQ,CAACrB,CAAD,CAAQ,CAEvB,MAAiB,KAAjB,GAAOA,CAAP,EAA0C,QAA1C,GAAyB,MAAOA,EAFT,CAkBzBjB,QAASA,EAAQ,CAACiB,CAAD,CAAQ,CAAC,MAAwB,QAAxB,GAAO,MAAOA,EAAf,CAezBsB,QAASA,EAAQ,CAACtB,CAAD,CAAQ,CAAC,MAAwB,QAAxB,GAAO,MAAOA,EAAf,CAezBuB,QAASA,GAAM,CAACvB,CAAD,CAAQ,CACrB,MAAgC,eAAhC,GAAOwB,EAAAjC,KAAA,CAAcS,CAAd,CADc,CA+BvBX,QAASA,EAAU,CAACW,CAAD,CAAQ,CAAC,MAAwB,UAAxB,GAAO,MAAOA,EAAf,CAU3ByB,QAASA,GAAQ,CAACzB,CAAD,CAAQ,CACvB,MAAgC,iBAAhC,GAAOwB,EAAAjC,KAAA,CAAcS,CAAd,CADgB,CAYzBrB,QAASA,GAAQ,CAACD,CAAD,CAAM,CACrB,MAAOA,EAAP,EAAcA,CAAAL,OAAd,GAA6BK,CADR,CAKvBgD,QAASA,GAAO,CAAChD,CAAD,CAAM,CACpB,MAAOA,EAAP,EAAcA,CAAAiD,WAAd,EAAgCjD,CAAAkD,OADZ,CAoBtBC,QAASA,GAAS,CAAC7B,CAAD,CAAQ,CACxB,MAAwB,SAAxB,GAAO,MAAOA,EADU,CAmC1B8B,QAASA,GAAS,CAACC,CAAD,CAAO,CACvB,MAAO,EAAGA,CAAAA,CAAH,EACJ,EAAAA,CAAAC,SAAA,EACGD,CAAAE,KADH,EACgBF,CAAAG,KADhB,EAC6BH,CAAAI,KAD7B,CADI,CADgB,CAUzBC,QAASA,GAAO,CAACvB,CAAD,CAAM,CAAA,IAChBnC,EAAM,EAAI2D;CAAAA,CAAQxB,CAAAyB,MAAA,CAAU,GAAV,CAAtB,KAAsCzC,CACtC,KAAKA,CAAL,CAAS,CAAT,CAAYA,CAAZ,CAAgBwC,CAAAzD,OAAhB,CAA8BiB,CAAA,EAA9B,CACEnB,CAAA,CAAK2D,CAAA,CAAMxC,CAAN,CAAL,CAAA,CAAkB,CAAA,CACpB,OAAOnB,EAJa,CAQtB6D,QAASA,GAAS,CAACC,CAAD,CAAU,CAC1B,MAAOC,EAAA,CAAUD,CAAAR,SAAV,EAA+BQ,CAAA,CAAQ,CAAR,CAA/B,EAA6CA,CAAA,CAAQ,CAAR,CAAAR,SAA7C,CADmB,CAQ5BU,QAASA,GAAW,CAACC,CAAD,CAAQ3C,CAAR,CAAe,CACjC,IAAI4C,EAAQD,CAAAE,QAAA,CAAc7C,CAAd,CACC,EAAb,EAAI4C,CAAJ,EACED,CAAAG,OAAA,CAAaF,CAAb,CAAoB,CAApB,CACF,OAAO5C,EAJ0B,CAiEnC+C,QAASA,GAAI,CAACC,CAAD,CAASC,CAAT,CAAsBC,CAAtB,CAAmCC,CAAnC,CAA8C,CACzD,GAAIxE,EAAA,CAASqE,CAAT,CAAJ,EAAwBtB,EAAA,CAAQsB,CAAR,CAAxB,CACE,KAAMI,GAAA,CAAS,MAAT,CAAN,CAIF,GAAKH,CAAL,CAeO,CACL,GAAID,CAAJ,GAAeC,CAAf,CAA4B,KAAMG,GAAA,CAAS,KAAT,CAAN,CAG5BF,CAAA,CAAcA,CAAd,EAA6B,EAC7BC,EAAA,CAAYA,CAAZ,EAAyB,EAEzB,IAAI9B,CAAA,CAAS2B,CAAT,CAAJ,CAAsB,CACpB,IAAIJ,EAAQM,CAAAL,QAAA,CAAoBG,CAApB,CACZ,IAAe,EAAf,GAAIJ,CAAJ,CAAkB,MAAOO,EAAA,CAAUP,CAAV,CAEzBM,EAAAG,KAAA,CAAiBL,CAAjB,CACAG,EAAAE,KAAA,CAAeJ,CAAf,CALoB,CAStB,GAAIjE,CAAA,CAAQgE,CAAR,CAAJ,CAEE,IAAS,IAAAnD,EADToD,CAAArE,OACSiB,CADY,CACrB,CAAgBA,CAAhB,CAAoBmD,CAAApE,OAApB,CAAmCiB,CAAA,EAAnC,CACEyD,CAKA,CALSP,EAAA,CAAKC,CAAA,CAAOnD,CAAP,CAAL,CAAgB,IAAhB,CAAsBqD,CAAtB,CAAmCC,CAAnC,CAKT,CAJI9B,CAAA,CAAS2B,CAAA,CAAOnD,CAAP,CAAT,CAIJ,GAHEqD,CAAAG,KAAA,CAAiBL,CAAA,CAAOnD,CAAP,CAAjB,CACA,CAAAsD,CAAAE,KAAA,CAAeC,CAAf,CAEF,EAAAL,CAAAI,KAAA,CAAiBC,CAAjB,CARJ,KAUO,CACL,IAAIlD,EAAI6C,CAAA5C,UACJrB,EAAA,CAAQiE,CAAR,CAAJ,CACEA,CAAArE,OADF;AACuB,CADvB,CAGEK,CAAA,CAAQgE,CAAR,CAAqB,QAAQ,CAACjD,CAAD,CAAQZ,CAAR,CAAa,CACxC,OAAO6D,CAAA,CAAY7D,CAAZ,CADiC,CAA1C,CAIF,KAASA,CAAT,GAAgB4D,EAAhB,CACMA,CAAA1D,eAAA,CAAsBF,CAAtB,CAAJ,GACEkE,CAKA,CALSP,EAAA,CAAKC,CAAA,CAAO5D,CAAP,CAAL,CAAkB,IAAlB,CAAwB8D,CAAxB,CAAqCC,CAArC,CAKT,CAJI9B,CAAA,CAAS2B,CAAA,CAAO5D,CAAP,CAAT,CAIJ,GAHE8D,CAAAG,KAAA,CAAiBL,CAAA,CAAO5D,CAAP,CAAjB,CACA,CAAA+D,CAAAE,KAAA,CAAeC,CAAf,CAEF,EAAAL,CAAA,CAAY7D,CAAZ,CAAA,CAAmBkE,CANrB,CASFnD,GAAA,CAAW8C,CAAX,CAAuB7C,CAAvB,CAnBK,CA1BF,CAfP,IAEE,IADA6C,CACA,CADcD,CACd,CACMhE,CAAA,CAAQgE,CAAR,CAAJ,CACEC,CADF,CACgBF,EAAA,CAAKC,CAAL,CAAa,EAAb,CAAiBE,CAAjB,CAA8BC,CAA9B,CADhB,CAEW5B,EAAA,CAAOyB,CAAP,CAAJ,CACLC,CADK,CACS,IAAIM,IAAJ,CAASP,CAAAQ,QAAA,EAAT,CADT,CAEI/B,EAAA,CAASuB,CAAT,CAAJ,EACLC,CACA,CADc,IAAIQ,MAAJ,CAAWT,CAAAA,OAAX,CAA0BA,CAAAxB,SAAA,EAAAkC,MAAA,CAAwB,SAAxB,CAAA,CAAmC,CAAnC,CAA1B,CACd,CAAAT,CAAAU,UAAA,CAAwBX,CAAAW,UAFnB,EAGItC,CAAA,CAAS2B,CAAT,CAHJ,GAIDY,CACJ,CADkBjE,MAAAkE,OAAA,CAAclE,MAAAmE,eAAA,CAAsBd,CAAtB,CAAd,CAClB,CAAAC,CAAA,CAAcF,EAAA,CAAKC,CAAL,CAAaY,CAAb,CAA0BV,CAA1B,CAAuCC,CAAvC,CALT,CAyDX,OAAOF,EAtEkD,CA8E3Dc,QAASA,GAAW,CAACC,CAAD,CAAMzD,CAAN,CAAW,CAC7B,GAAIvB,CAAA,CAAQgF,CAAR,CAAJ,CAAkB,CAChBzD,CAAA,CAAMA,CAAN,EAAa,EAEb,KAHgB,IAGPV,EAAI,CAHG,CAGAW,EAAKwD,CAAApF,OAArB,CAAiCiB,CAAjC,CAAqCW,CAArC,CAAyCX,CAAA,EAAzC,CACEU,CAAA,CAAIV,CAAJ,CAAA,CAASmE,CAAA,CAAInE,CAAJ,CAJK,CAAlB,IAMO,IAAIwB,CAAA,CAAS2C,CAAT,CAAJ,CAGL,IAAS5E,CAAT,GAFAmB,EAEgByD,CAFVzD,CAEUyD,EAFH,EAEGA,CAAAA,CAAhB,CACE,GAAwB,GAAxB,GAAM5E,CAAA6E,OAAA,CAAW,CAAX,CAAN,EAAiD,GAAjD,GAA+B7E,CAAA6E,OAAA,CAAW,CAAX,CAA/B,CACE1D,CAAA,CAAInB,CAAJ,CAAA;AAAW4E,CAAA,CAAI5E,CAAJ,CAKjB,OAAOmB,EAAP,EAAcyD,CAjBe,CAkD/BE,QAASA,GAAM,CAACC,CAAD,CAAKC,CAAL,CAAS,CACtB,GAAID,CAAJ,GAAWC,CAAX,CAAe,MAAO,CAAA,CACtB,IAAW,IAAX,GAAID,CAAJ,EAA0B,IAA1B,GAAmBC,CAAnB,CAAgC,MAAO,CAAA,CACvC,IAAID,CAAJ,GAAWA,CAAX,EAAiBC,CAAjB,GAAwBA,CAAxB,CAA4B,MAAO,CAAA,CAHb,KAIlBC,EAAK,MAAOF,EAJM,CAIsB/E,CAC5C,IAAIiF,CAAJ,EADyBC,MAAOF,EAChC,EACY,QADZ,EACMC,CADN,CAEI,GAAIrF,CAAA,CAAQmF,CAAR,CAAJ,CAAiB,CACf,GAAK,CAAAnF,CAAA,CAAQoF,CAAR,CAAL,CAAkB,MAAO,CAAA,CACzB,KAAKxF,CAAL,CAAcuF,CAAAvF,OAAd,GAA4BwF,CAAAxF,OAA5B,CAAuC,CACrC,IAAKQ,CAAL,CAAW,CAAX,CAAcA,CAAd,CAAoBR,CAApB,CAA4BQ,CAAA,EAA5B,CACE,GAAK,CAAA8E,EAAA,CAAOC,CAAA,CAAG/E,CAAH,CAAP,CAAgBgF,CAAA,CAAGhF,CAAH,CAAhB,CAAL,CAA+B,MAAO,CAAA,CAExC,OAAO,CAAA,CAJ8B,CAFxB,CAAjB,IAQO,CAAA,GAAImC,EAAA,CAAO4C,CAAP,CAAJ,CACL,MAAK5C,GAAA,CAAO6C,CAAP,CAAL,CACOF,EAAA,CAAOC,CAAAX,QAAA,EAAP,CAAqBY,CAAAZ,QAAA,EAArB,CADP,CAAwB,CAAA,CAEnB,IAAI/B,EAAA,CAAS0C,CAAT,CAAJ,EAAoB1C,EAAA,CAAS2C,CAAT,CAApB,CACL,MAAOD,EAAA3C,SAAA,EAAP,EAAwB4C,CAAA5C,SAAA,EAExB,IAAIE,EAAA,CAAQyC,CAAR,CAAJ,EAAmBzC,EAAA,CAAQ0C,CAAR,CAAnB,EAAkCzF,EAAA,CAASwF,CAAT,CAAlC,EAAkDxF,EAAA,CAASyF,CAAT,CAAlD,EAAkEpF,CAAA,CAAQoF,CAAR,CAAlE,CAA+E,MAAO,CAAA,CACtFG,EAAA,CAAS,EACT,KAAKnF,CAAL,GAAY+E,EAAZ,CACE,GAAsB,GAAtB,GAAI/E,CAAA6E,OAAA,CAAW,CAAX,CAAJ,EAA6B,CAAA5E,CAAA,CAAW8E,CAAA,CAAG/E,CAAH,CAAX,CAA7B,CAAA,CACA,GAAK,CAAA8E,EAAA,CAAOC,CAAA,CAAG/E,CAAH,CAAP,CAAgBgF,CAAA,CAAGhF,CAAH,CAAhB,CAAL,CAA+B,MAAO,CAAA,CACtCmF,EAAA,CAAOnF,CAAP,CAAA,CAAc,CAAA,CAFd,CAIF,IAAKA,CAAL,GAAYgF,EAAZ,CACE,GAAK,CAAAG,CAAAjF,eAAA,CAAsBF,CAAtB,CAAL;AACsB,GADtB,GACIA,CAAA6E,OAAA,CAAW,CAAX,CADJ,EAEIG,CAAA,CAAGhF,CAAH,CAFJ,GAEgBb,CAFhB,EAGK,CAAAc,CAAA,CAAW+E,CAAA,CAAGhF,CAAH,CAAX,CAHL,CAG0B,MAAO,CAAA,CAEnC,OAAO,CAAA,CAnBF,CAuBX,MAAO,CAAA,CAtCe,CA8DxBoF,QAASA,GAAM,CAACC,CAAD,CAASC,CAAT,CAAiB9B,CAAjB,CAAwB,CACrC,MAAO6B,EAAAD,OAAA,CAAcG,EAAApF,KAAA,CAAWmF,CAAX,CAAmB9B,CAAnB,CAAd,CAD8B,CA4BvCgC,QAASA,GAAI,CAACC,CAAD,CAAOC,CAAP,CAAW,CACtB,IAAIC,EAA+B,CAAnB,CAAAtE,SAAA7B,OAAA,CAxBT+F,EAAApF,KAAA,CAwB0CkB,SAxB1C,CAwBqDuE,CAxBrD,CAwBS,CAAiD,EACjE,OAAI,CAAA3F,CAAA,CAAWyF,CAAX,CAAJ,EAAwBA,CAAxB,WAAsCrB,OAAtC,CAcSqB,CAdT,CACSC,CAAAnG,OAAA,CACH,QAAQ,EAAG,CACT,MAAO6B,UAAA7B,OAAA,CACHkG,CAAAG,MAAA,CAASJ,CAAT,CAAeL,EAAA,CAAOO,CAAP,CAAkBtE,SAAlB,CAA6B,CAA7B,CAAf,CADG,CAEHqE,CAAAG,MAAA,CAASJ,CAAT,CAAeE,CAAf,CAHK,CADR,CAMH,QAAQ,EAAG,CACT,MAAOtE,UAAA7B,OAAA,CACHkG,CAAAG,MAAA,CAASJ,CAAT,CAAepE,SAAf,CADG,CAEHqE,CAAAvF,KAAA,CAAQsF,CAAR,CAHK,CATK,CAqBxBK,QAASA,GAAc,CAAC9F,CAAD,CAAMY,CAAN,CAAa,CAClC,IAAImF,EAAMnF,CAES,SAAnB,GAAI,MAAOZ,EAAX,EAAiD,GAAjD,GAA+BA,CAAA6E,OAAA,CAAW,CAAX,CAA/B,EAA0E,GAA1E,GAAwD7E,CAAA6E,OAAA,CAAW,CAAX,CAAxD,CACEkB,CADF,CACQ5G,CADR,CAEWI,EAAA,CAASqB,CAAT,CAAJ,CACLmF,CADK,CACC,SADD,CAEInF,CAAJ,EAAc1B,CAAd,GAA2B0B,CAA3B,CACLmF,CADK,CACC,WADD,CAEIzD,EAAA,CAAQ1B,CAAR,CAFJ;CAGLmF,CAHK,CAGC,QAHD,CAMP,OAAOA,EAb2B,CAgCpCC,QAASA,GAAM,CAAC1G,CAAD,CAAM2G,CAAN,CAAc,CAC3B,GAAmB,WAAnB,GAAI,MAAO3G,EAAX,CAAgC,MAAOH,EAClC+C,EAAA,CAAS+D,CAAT,CAAL,GACEA,CADF,CACWA,CAAA,CAAS,CAAT,CAAa,IADxB,CAGA,OAAOC,KAAAC,UAAA,CAAe7G,CAAf,CAAoBwG,EAApB,CAAoCG,CAApC,CALoB,CAqB7BG,QAASA,GAAQ,CAACC,CAAD,CAAO,CACtB,MAAO1G,EAAA,CAAS0G,CAAT,CAAA,CACDH,IAAAI,MAAA,CAAWD,CAAX,CADC,CAEDA,CAHgB,CAUxBE,QAASA,GAAW,CAACnD,CAAD,CAAU,CAC5BA,CAAA,CAAUoD,CAAA,CAAOpD,CAAP,CAAAqD,MAAA,EACV,IAAI,CAGFrD,CAAAsD,MAAA,EAHE,CAIF,MAAOC,CAAP,CAAU,EACZ,IAAIC,EAAWJ,CAAA,CAAO,OAAP,CAAAK,OAAA,CAAuBzD,CAAvB,CAAA0D,KAAA,EACf,IAAI,CACF,MAAO1D,EAAA,CAAQ,CAAR,CAAA3D,SAAA,GAAwBsH,EAAxB,CAAyC1D,CAAA,CAAUuD,CAAV,CAAzC,CACHA,CAAAtC,MAAA,CACQ,YADR,CAAA,CACsB,CADtB,CAAA0C,QAAA,CAEU,aAFV,CAEyB,QAAQ,CAAC1C,CAAD,CAAQ1B,CAAR,CAAkB,CAAE,MAAO,GAAP,CAAaS,CAAA,CAAUT,CAAV,CAAf,CAFnD,CAFF,CAKF,MAAO+D,CAAP,CAAU,CACV,MAAOtD,EAAA,CAAUuD,CAAV,CADG,CAbgB,CA8B9BK,QAASA,GAAqB,CAACrG,CAAD,CAAQ,CACpC,GAAI,CACF,MAAOsG,mBAAA,CAAmBtG,CAAnB,CADL,CAEF,MAAO+F,CAAP,CAAU,EAHwB,CAatCQ,QAASA,GAAa,CAAYC,CAAZ,CAAsB,CAAA,IACtC9H,EAAM,EADgC,CAC5B+H,CAD4B,CACjBrH,CACzBH,EAAA,CAAQqD,CAACkE,CAADlE,EAAa,EAAbA,OAAA,CAAuB,GAAvB,CAAR,CAAqC,QAAQ,CAACkE,CAAD,CAAW,CAClDA,CAAJ;CACEC,CAEA,CAFYD,CAAAJ,QAAA,CAAiB,KAAjB,CAAuB,KAAvB,CAAA9D,MAAA,CAAoC,GAApC,CAEZ,CADAlD,CACA,CADMiH,EAAA,CAAsBI,CAAA,CAAU,CAAV,CAAtB,CACN,CAAIrF,CAAA,CAAUhC,CAAV,CAAJ,GACM+F,CACJ,CADU/D,CAAA,CAAUqF,CAAA,CAAU,CAAV,CAAV,CAAA,CAA0BJ,EAAA,CAAsBI,CAAA,CAAU,CAAV,CAAtB,CAA1B,CAAgE,CAAA,CAC1E,CAAKnH,EAAAC,KAAA,CAAoBb,CAApB,CAAyBU,CAAzB,CAAL,CAEWJ,CAAA,CAAQN,CAAA,CAAIU,CAAJ,CAAR,CAAJ,CACLV,CAAA,CAAIU,CAAJ,CAAAiE,KAAA,CAAc8B,CAAd,CADK,CAGLzG,CAAA,CAAIU,CAAJ,CAHK,CAGM,CAACV,CAAA,CAAIU,CAAJ,CAAD,CAAU+F,CAAV,CALb,CACEzG,CAAA,CAAIU,CAAJ,CADF,CACa+F,CAHf,CAHF,CADsD,CAAxD,CAgBA,OAAOzG,EAlBmC,CAqB5CgI,QAASA,GAAU,CAAChI,CAAD,CAAM,CACvB,IAAIiI,EAAQ,EACZ1H,EAAA,CAAQP,CAAR,CAAa,QAAQ,CAACsB,CAAD,CAAQZ,CAAR,CAAa,CAC5BJ,CAAA,CAAQgB,CAAR,CAAJ,CACEf,CAAA,CAAQe,CAAR,CAAe,QAAQ,CAAC4G,CAAD,CAAa,CAClCD,CAAAtD,KAAA,CAAWwD,EAAA,CAAezH,CAAf,CAAoB,CAAA,CAApB,CAAX,EAC2B,CAAA,CAAf,GAAAwH,CAAA,CAAsB,EAAtB,CAA2B,GAA3B,CAAiCC,EAAA,CAAeD,CAAf,CAA2B,CAAA,CAA3B,CAD7C,EADkC,CAApC,CADF,CAMAD,CAAAtD,KAAA,CAAWwD,EAAA,CAAezH,CAAf,CAAoB,CAAA,CAApB,CAAX,EACsB,CAAA,CAAV,GAAAY,CAAA,CAAiB,EAAjB,CAAsB,GAAtB,CAA4B6G,EAAA,CAAe7G,CAAf,CAAsB,CAAA,CAAtB,CADxC,EAPgC,CAAlC,CAWA,OAAO2G,EAAA/H,OAAA,CAAe+H,CAAAG,KAAA,CAAW,GAAX,CAAf,CAAiC,EAbjB,CA4BzBC,QAASA,GAAgB,CAAC5B,CAAD,CAAM,CAC7B,MAAO0B,GAAA,CAAe1B,CAAf,CAAoB,CAAA,CAApB,CAAAiB,QAAA,CACY,OADZ,CACqB,GADrB,CAAAA,QAAA,CAEY,OAFZ,CAEqB,GAFrB,CAAAA,QAAA,CAGY,OAHZ,CAGqB,GAHrB,CADsB,CAmB/BS,QAASA,GAAc,CAAC1B,CAAD,CAAM6B,CAAN,CAAuB,CAC5C,MAAOC,mBAAA,CAAmB9B,CAAnB,CAAAiB,QAAA,CACY,OADZ,CACqB,GADrB,CAAAA,QAAA,CAEY,OAFZ;AAEqB,GAFrB,CAAAA,QAAA,CAGY,MAHZ,CAGoB,GAHpB,CAAAA,QAAA,CAIY,OAJZ,CAIqB,GAJrB,CAAAA,QAAA,CAKY,OALZ,CAKqB,GALrB,CAAAA,QAAA,CAMY,MANZ,CAMqBY,CAAA,CAAkB,KAAlB,CAA0B,GAN/C,CADqC,CAY9CE,QAASA,GAAc,CAAC1E,CAAD,CAAU2E,CAAV,CAAkB,CAAA,IACnCjF,CADmC,CAC7BrC,CAD6B,CAC1BW,EAAK4G,EAAAxI,OAClB4D,EAAA,CAAUoD,CAAA,CAAOpD,CAAP,CACV,KAAK3C,CAAL,CAAS,CAAT,CAAYA,CAAZ,CAAgBW,CAAhB,CAAoB,EAAEX,CAAtB,CAEE,GADAqC,CACI,CADGkF,EAAA,CAAevH,CAAf,CACH,CADuBsH,CACvB,CAAApI,CAAA,CAASmD,CAAT,CAAgBM,CAAAN,KAAA,CAAaA,CAAb,CAAhB,CAAJ,CACE,MAAOA,EAGX,OAAO,KATgC,CA2IzCmF,QAASA,GAAW,CAAC7E,CAAD,CAAU8E,CAAV,CAAqB,CAAA,IACnCC,CADmC,CAEnCC,CAFmC,CAGnCC,EAAS,EAGbxI,EAAA,CAAQmI,EAAR,CAAwB,QAAQ,CAACM,CAAD,CAAS,CACnCC,CAAAA,EAAgB,KAEfJ,EAAAA,CAAL,EAAmB/E,CAAAoF,aAAnB,EAA2CpF,CAAAoF,aAAA,CAAqBD,CAArB,CAA3C,GACEJ,CACA,CADa/E,CACb,CAAAgF,CAAA,CAAShF,CAAAqF,aAAA,CAAqBF,CAArB,CAFX,CAHuC,CAAzC,CAQA1I,EAAA,CAAQmI,EAAR,CAAwB,QAAQ,CAACM,CAAD,CAAS,CACnCC,CAAAA,EAAgB,KACpB,KAAIG,CAECP,EAAAA,CAAL,GAAoBO,CAApB,CAAgCtF,CAAAuF,cAAA,CAAsB,GAAtB,CAA4BJ,CAAAvB,QAAA,CAAa,GAAb,CAAkB,KAAlB,CAA5B,CAAuD,GAAvD,CAAhC,IACEmB,CACA,CADaO,CACb,CAAAN,CAAA,CAASM,CAAAD,aAAA,CAAuBF,CAAvB,CAFX,CAJuC,CAAzC,CASIJ,EAAJ,GACEE,CAAAO,SACA,CAD8D,IAC9D,GADkBd,EAAA,CAAeK,CAAf,CAA2B,WAA3B,CAClB,CAAAD,CAAA,CAAUC,CAAV,CAAsBC,CAAA,CAAS,CAACA,CAAD,CAAT,CAAoB,EAA1C,CAA8CC,CAA9C,CAFF,CAvBuC,CA+EzCH,QAASA,GAAS,CAAC9E,CAAD;AAAUyF,CAAV,CAAmBR,CAAnB,CAA2B,CACtCpG,CAAA,CAASoG,CAAT,CAAL,GAAuBA,CAAvB,CAAgC,EAAhC,CAIAA,EAAA,CAASnH,CAAA,CAHW4H,CAClBF,SAAU,CAAA,CADQE,CAGX,CAAsBT,CAAtB,CACT,KAAIU,EAAcA,QAAQ,EAAG,CAC3B3F,CAAA,CAAUoD,CAAA,CAAOpD,CAAP,CAEV,IAAIA,CAAA4F,SAAA,EAAJ,CAAwB,CACtB,IAAIC,EAAO7F,CAAA,CAAQ,CAAR,CAAD,GAAgBlE,CAAhB,CAA4B,UAA5B,CAAyCqH,EAAA,CAAYnD,CAAZ,CAEnD,MAAMY,GAAA,CACF,SADE,CAGFiF,CAAAjC,QAAA,CAAY,GAAZ,CAAgB,MAAhB,CAAAA,QAAA,CAAgC,GAAhC,CAAoC,MAApC,CAHE,CAAN,CAHsB,CASxB6B,CAAA,CAAUA,CAAV,EAAqB,EACrBA,EAAAK,QAAA,CAAgB,CAAC,UAAD,CAAa,QAAQ,CAACC,CAAD,CAAW,CAC9CA,CAAAvI,MAAA,CAAe,cAAf,CAA+BwC,CAA/B,CAD8C,CAAhC,CAAhB,CAIIiF,EAAAe,iBAAJ,EAEEP,CAAA5E,KAAA,CAAa,CAAC,kBAAD,CAAqB,QAAQ,CAACoF,CAAD,CAAmB,CAC3DA,CAAAD,iBAAA,CAAkC,CAAA,CAAlC,CAD2D,CAAhD,CAAb,CAKFP,EAAAK,QAAA,CAAgB,IAAhB,CACIF,EAAAA,CAAWM,EAAA,CAAeT,CAAf,CAAwBR,CAAAO,SAAxB,CACfI,EAAAO,OAAA,CAAgB,CAAC,YAAD,CAAe,cAAf,CAA+B,UAA/B,CAA2C,WAA3C,CACbC,QAAuB,CAACC,CAAD,CAAQrG,CAAR,CAAiBsG,CAAjB,CAA0BV,CAA1B,CAAoC,CAC1DS,CAAAE,OAAA,CAAa,QAAQ,EAAG,CACtBvG,CAAAwG,KAAA,CAAa,WAAb,CAA0BZ,CAA1B,CACAU,EAAA,CAAQtG,CAAR,CAAA,CAAiBqG,CAAjB,CAFsB,CAAxB,CAD0D,CAD9C,CAAhB,CAQA,OAAOT,EAlCoB,CAA7B;AAqCIa,EAAuB,wBArC3B,CAsCIC,EAAqB,sBAErB7K,EAAJ,EAAc4K,CAAAE,KAAA,CAA0B9K,CAAAsJ,KAA1B,CAAd,GACEF,CAAAe,iBACA,CAD0B,CAAA,CAC1B,CAAAnK,CAAAsJ,KAAA,CAActJ,CAAAsJ,KAAAvB,QAAA,CAAoB6C,CAApB,CAA0C,EAA1C,CAFhB,CAKA,IAAI5K,CAAJ,EAAe,CAAA6K,CAAAC,KAAA,CAAwB9K,CAAAsJ,KAAxB,CAAf,CACE,MAAOQ,EAAA,EAGT9J,EAAAsJ,KAAA,CAActJ,CAAAsJ,KAAAvB,QAAA,CAAoB8C,CAApB,CAAwC,EAAxC,CACdE,GAAAC,gBAAA,CAA0BC,QAAQ,CAACC,CAAD,CAAe,CAC/CtK,CAAA,CAAQsK,CAAR,CAAsB,QAAQ,CAAC/B,CAAD,CAAS,CACrCS,CAAA5E,KAAA,CAAamE,CAAb,CADqC,CAAvC,CAGAW,EAAA,EAJ+C,CAxDN,CA0E7CqB,QAASA,GAAmB,EAAG,CAC7BnL,CAAAsJ,KAAA,CAAc,uBAAd,CAAwCtJ,CAAAsJ,KACxCtJ,EAAAoL,SAAAC,OAAA,EAF6B,CAa/BC,QAASA,GAAc,CAACC,CAAD,CAAc,CAC/BxB,CAAAA,CAAWgB,EAAA5G,QAAA,CAAgBoH,CAAhB,CAAAxB,SAAA,EACf,IAAKA,CAAAA,CAAL,CACE,KAAMhF,GAAA,CAAS,MAAT,CAAN,CAGF,MAAOgF,EAAAyB,IAAA,CAAa,eAAb,CAN4B,CAUrCC,QAASA,GAAU,CAACnC,CAAD,CAAOoC,CAAP,CAAkB,CACnCA,CAAA,CAAYA,CAAZ,EAAyB,GACzB,OAAOpC,EAAAvB,QAAA,CAAa4D,EAAb,CAAgC,QAAQ,CAACC,CAAD,CAASC,CAAT,CAAc,CAC3D,OAAQA,CAAA,CAAMH,CAAN,CAAkB,EAA1B,EAAgCE,CAAAE,YAAA,EAD2B,CAAtD,CAF4B,CAl+CE;AA2+CvCC,QAASA,GAAU,EAAG,CACpB,IAAIC,CAEAC,GAAJ,GAUA,CALAC,EAKA,CALSlM,CAAAkM,OAKT,GAAcA,EAAAzF,GAAA0F,GAAd,EACE5E,CAaA,CAbS2E,EAaT,CAZAjK,CAAA,CAAOiK,EAAAzF,GAAP,CAAkB,CAChB+D,MAAO4B,EAAA5B,MADS,CAEhB6B,aAAcD,EAAAC,aAFE,CAGhBC,WAAYF,EAAAE,WAHI,CAIhBvC,SAAUqC,EAAArC,SAJM,CAKhBwC,cAAeH,EAAAG,cALC,CAAlB,CAYA,CADAP,CACA,CADoBE,EAAAM,UACpB,CAAAN,EAAAM,UAAA,CAAmBC,QAAQ,CAACC,CAAD,CAAQ,CACjC,IAAIC,CACJ,IAAKC,EAAL,CAQEA,EAAA,CAAmC,CAAA,CARrC,KACE,KADqC,IAC5BpL,EAAI,CADwB,CACrBqL,CAAhB,CAA2C,IAA3C,GAAuBA,CAAvB,CAA8BH,CAAA,CAAMlL,CAAN,CAA9B,EAAiDA,CAAA,EAAjD,CAEE,CADAmL,CACA,CADST,EAAAY,MAAA,CAAaD,CAAb,CAAmB,QAAnB,CACT,GAAcF,CAAAI,SAAd,EACEb,EAAA,CAAOW,CAAP,CAAAG,eAAA,CAA4B,UAA5B,CAMNhB,EAAA,CAAkBU,CAAlB,CAZiC,CAdrC,EA6BEnF,CA7BF,CA6BW0F,CAMX,CAHAlC,EAAA5G,QAGA,CAHkBoD,CAGlB,CAAA0E,EAAA,CAAkB,CAAA,CA7ClB,CAHoB,CAsDtBiB,QAASA,GAAS,CAACC,CAAD,CAAM7D,CAAN,CAAY8D,CAAZ,CAAoB,CACpC,GAAKD,CAAAA,CAAL,CACE,KAAMpI,GAAA,CAAS,MAAT,CAA2CuE,CAA3C,EAAmD,GAAnD,CAA0D8D,CAA1D,EAAoE,UAApE,CAAN,CAEF,MAAOD,EAJ6B,CAOtCE,QAASA,GAAW,CAACF,CAAD,CAAM7D,CAAN,CAAYgE,CAAZ,CAAmC,CACjDA,CAAJ,EAA6B3M,CAAA,CAAQwM,CAAR,CAA7B,GACIA,CADJ,CACUA,CAAA,CAAIA,CAAA5M,OAAJ,CAAiB,CAAjB,CADV,CAIA2M;EAAA,CAAUlM,CAAA,CAAWmM,CAAX,CAAV,CAA2B7D,CAA3B,CAAiC,sBAAjC,EACK6D,CAAA,EAAsB,QAAtB,GAAO,MAAOA,EAAd,CAAiCA,CAAAI,YAAAjE,KAAjC,EAAyD,QAAzD,CAAoE,MAAO6D,EADhF,EAEA,OAAOA,EAP8C,CAevDK,QAASA,GAAuB,CAAClE,CAAD,CAAOxI,CAAP,CAAgB,CAC9C,GAAa,gBAAb,GAAIwI,CAAJ,CACE,KAAMvE,GAAA,CAAS,SAAT,CAA8DjE,CAA9D,CAAN,CAF4C,CAchD2M,QAASA,GAAM,CAACpN,CAAD,CAAMqN,CAAN,CAAYC,CAAZ,CAA2B,CACxC,GAAKD,CAAAA,CAAL,CAAW,MAAOrN,EACdgB,EAAAA,CAAOqM,CAAAzJ,MAAA,CAAW,GAAX,CAKX,KAJA,IAAIlD,CAAJ,CACI6M,EAAevN,CADnB,CAEIwN,EAAMxM,CAAAd,OAFV,CAISiB,EAAI,CAAb,CAAgBA,CAAhB,CAAoBqM,CAApB,CAAyBrM,CAAA,EAAzB,CACET,CACA,CADMM,CAAA,CAAKG,CAAL,CACN,CAAInB,CAAJ,GACEA,CADF,CACQ,CAACuN,CAAD,CAAgBvN,CAAhB,EAAqBU,CAArB,CADR,CAIF,OAAK4M,CAAAA,CAAL,EAAsB3M,CAAA,CAAWX,CAAX,CAAtB,CACSkG,EAAA,CAAKqH,CAAL,CAAmBvN,CAAnB,CADT,CAGOA,CAhBiC,CAwB1CyN,QAASA,GAAa,CAACC,CAAD,CAAQ,CAG5B,IAAIrK,EAAOqK,CAAA,CAAM,CAAN,CACPC,EAAAA,CAAUD,CAAA,CAAMA,CAAAxN,OAAN,CAAqB,CAArB,CACd,KAAI0N,EAAa,CAACvK,CAAD,CAEjB,GAAG,CACDA,CAAA,CAAOA,CAAAwK,YACP,IAAKxK,CAAAA,CAAL,CAAW,KACXuK,EAAAjJ,KAAA,CAAgBtB,CAAhB,CAHC,CAAH,MAISA,CAJT,GAIkBsK,CAJlB,CAMA,OAAOzG,EAAA,CAAO0G,CAAP,CAbqB,CA4B9BE,QAASA,GAAS,EAAG,CACnB,MAAO7M,OAAAkE,OAAA,CAAc,IAAd,CADY,CAmBrB4I,QAASA,GAAiB,CAACpO,CAAD,CAAS,CAKjCqO,QAASA,EAAM,CAAChO,CAAD,CAAMiJ,CAAN,CAAYgF,CAAZ,CAAqB,CAClC,MAAOjO,EAAA,CAAIiJ,CAAJ,CAAP;CAAqBjJ,CAAA,CAAIiJ,CAAJ,CAArB,CAAiCgF,CAAA,EAAjC,CADkC,CAHpC,IAAIC,EAAkBpO,CAAA,CAAO,WAAP,CAAtB,CACI4E,EAAW5E,CAAA,CAAO,IAAP,CAMX4K,EAAAA,CAAUsD,CAAA,CAAOrO,CAAP,CAAe,SAAf,CAA0BsB,MAA1B,CAGdyJ,EAAAyD,SAAA,CAAmBzD,CAAAyD,SAAnB,EAAuCrO,CAEvC,OAAOkO,EAAA,CAAOtD,CAAP,CAAgB,QAAhB,CAA0B,QAAQ,EAAG,CAE1C,IAAInB,EAAU,EAqDd,OAAOT,SAAe,CAACG,CAAD,CAAOmF,CAAP,CAAiBC,CAAjB,CAA2B,CAE7C,GAAa,gBAAb,GAKsBpF,CALtB,CACE,KAAMvE,EAAA,CAAS,SAAT,CAIoBjE,QAJpB,CAAN,CAKA2N,CAAJ,EAAgB7E,CAAA3I,eAAA,CAAuBqI,CAAvB,CAAhB,GACEM,CAAA,CAAQN,CAAR,CADF,CACkB,IADlB,CAGA,OAAO+E,EAAA,CAAOzE,CAAP,CAAgBN,CAAhB,CAAsB,QAAQ,EAAG,CAuNtCqF,QAASA,EAAW,CAACC,CAAD,CAAWC,CAAX,CAAmBC,CAAnB,CAAiCC,CAAjC,CAAwC,CACrDA,CAAL,GAAYA,CAAZ,CAAoBC,CAApB,CACA,OAAO,SAAQ,EAAG,CAChBD,CAAA,CAAMD,CAAN,EAAsB,MAAtB,CAAA,CAA8B,CAACF,CAAD,CAAWC,CAAX,CAAmBzM,SAAnB,CAA9B,CACA,OAAO6M,EAFS,CAFwC,CAtN5D,GAAKR,CAAAA,CAAL,CACE,KAAMF,EAAA,CAAgB,OAAhB,CAEiDjF,CAFjD,CAAN,CAMF,IAAI0F,EAAc,EAAlB,CAGIE,EAAe,EAHnB,CAMIC,EAAY,EANhB,CAQI/F,EAASuF,CAAA,CAAY,WAAZ,CAAyB,QAAzB,CAAmC,MAAnC,CAA2CO,CAA3C,CARb,CAWID,EAAiB,CAEnBG,aAAcJ,CAFK,CAGnBK,cAAeH,CAHI,CAInBI,WAAYH,CAJO,CAenBV,SAAUA,CAfS,CAyBnBnF,KAAMA,CAzBa,CAsCnBsF,SAAUD,CAAA,CAAY,UAAZ;AAAwB,UAAxB,CAtCS,CAiDnBL,QAASK,CAAA,CAAY,UAAZ,CAAwB,SAAxB,CAjDU,CA4DnBY,QAASZ,CAAA,CAAY,UAAZ,CAAwB,SAAxB,CA5DU,CAuEnBhN,MAAOgN,CAAA,CAAY,UAAZ,CAAwB,OAAxB,CAvEY,CAmFnBa,SAAUb,CAAA,CAAY,UAAZ,CAAwB,UAAxB,CAAoC,SAApC,CAnFS,CAqHnBc,UAAWd,CAAA,CAAY,kBAAZ,CAAgC,UAAhC,CArHQ,CAgInBe,OAAQf,CAAA,CAAY,iBAAZ,CAA+B,UAA/B,CAhIW,CA4InBrC,WAAYqC,CAAA,CAAY,qBAAZ,CAAmC,UAAnC,CA5IO,CAyJnBgB,UAAWhB,CAAA,CAAY,kBAAZ,CAAgC,WAAhC,CAzJQ,CAsKnBvF,OAAQA,CAtKW,CAkLnBwG,IAAKA,QAAQ,CAACC,CAAD,CAAQ,CACnBV,CAAAnK,KAAA,CAAe6K,CAAf,CACA,OAAO,KAFY,CAlLF,CAwLjBnB,EAAJ,EACEtF,CAAA,CAAOsF,CAAP,CAGF,OAAOO,EA/M+B,CAAjC,CAXwC,CAvDP,CAArC,CAd0B,CA+bnCa,QAASA,GAAkB,CAAC/E,CAAD,CAAU,CACnC9I,CAAA,CAAO8I,CAAP,CAAgB,CACd,UAAa9B,EADC,CAEd,KAAQvE,EAFM,CAGd,OAAUzC,CAHI,CAId,OAAU4D,EAJI,CAKd,QAAW0B,CALG,CAMd,QAAW3G,CANG,CAOd,SAAYyJ,EAPE,CAQd,KAAQ3H,CARM,CASd,KAAQ6D,EATM,CAUd,OAAUQ,EAVI;AAWd,SAAYI,EAXE,CAYd,SAAYxE,EAZE,CAad,YAAeG,CAbD,CAcd,UAAaC,CAdC,CAed,SAAYrC,CAfE,CAgBd,WAAcM,CAhBA,CAiBd,SAAYgC,CAjBE,CAkBd,SAAYC,CAlBE,CAmBd,UAAaQ,EAnBC,CAoBd,QAAW9C,CApBG,CAqBd,QAAWoP,EArBG,CAsBd,OAAU7M,EAtBI,CAuBd,UAAakB,CAvBC,CAwBd,UAAa4L,EAxBC,CAyBd,UAAa,CAACC,QAAS,CAAV,CAzBC,CA0Bd,eAAkB3E,EA1BJ,CA2Bd,SAAYnL,CA3BE,CA4Bd,MAAS+P,EA5BK,CA6Bd,oBAAuB/E,EA7BT,CAAhB,CAgCAgF,GAAA,CAAgB/B,EAAA,CAAkBpO,CAAlB,CAChB,IAAI,CACFmQ,EAAA,CAAc,UAAd,CADE,CAEF,MAAOzI,CAAP,CAAU,CACVyI,EAAA,CAAc,UAAd,CAA0B,EAA1B,CAAAvB,SAAA,CAAuC,SAAvC,CAAkDwB,EAAlD,CADU,CAIZD,EAAA,CAAc,IAAd,CAAoB,CAAC,UAAD,CAApB,CAAkC,CAAC,UAAD,CAChCE,QAAiB,CAACnG,CAAD,CAAW,CAE1BA,CAAA0E,SAAA,CAAkB,CAChB0B,cAAeC,EADC,CAAlB,CAGArG,EAAA0E,SAAA,CAAkB,UAAlB,CAA8B4B,EAA9B,CAAAb,UAAA,CACY,CACNc,EAAGC,EADG,CAENC,MAAOC,EAFD,CAGNC,SAAUD,EAHJ,CAINE,KAAMC,EAJA,CAKNC,OAAQC,EALF,CAMNC,OAAQC,EANF,CAONC,MAAOC,EAPD;AAQNC,OAAQC,EARF,CASNC,OAAQC,EATF,CAUNC,WAAYC,EAVN,CAWNC,eAAgBC,EAXV,CAYNC,QAASC,EAZH,CAaNC,YAAaC,EAbP,CAcNC,WAAYC,EAdN,CAeNC,QAASC,EAfH,CAgBNC,aAAcC,EAhBR,CAiBNC,OAAQC,EAjBF,CAkBNC,OAAQC,EAlBF,CAmBNC,KAAMC,EAnBA,CAoBNC,UAAWC,EApBL,CAqBNC,OAAQC,EArBF,CAsBNC,cAAeC,EAtBT,CAuBNC,YAAaC,EAvBP,CAwBNC,SAAUC,EAxBJ,CAyBNC,OAAQC,EAzBF,CA0BNC,QAASC,EA1BH,CA2BNC,SAAUC,EA3BJ,CA4BNC,aAAcC,EA5BR,CA6BNC,gBAAiBC,EA7BX,CA8BNC,UAAWC,EA9BL,CA+BNC,aAAcC,EA/BR,CAgCNC,QAASC,EAhCH,CAiCNC,OAAQC,EAjCF,CAkCNC,SAAUC,EAlCJ,CAmCNC,QAASC,EAnCH,CAoCNC,UAAWD,EApCL,CAqCNE,SAAUC,EArCJ,CAsCNC,WAAYD,EAtCN,CAuCNE,UAAWC,EAvCL,CAwCNC,YAAaD,EAxCP,CAyCNE,UAAWC,EAzCL,CA0CNC,YAAaD,EA1CP,CA2CNE,QAASC,EA3CH,CA4CNC,eAAgBC,EA5CV,CADZ,CAAAhG,UAAA,CA+CY,CACRmD,UAAW8C,EADH,CA/CZ,CAAAjG,UAAA,CAkDYkG,EAlDZ,CAAAlG,UAAA,CAmDYmG,EAnDZ,CAoDA5L;CAAA0E,SAAA,CAAkB,CAChBmH,cAAeC,EADC,CAEhBC,SAAUC,EAFM,CAGhBC,SAAUC,EAHM,CAIhBC,cAAeC,EAJC,CAKhBC,YAAaC,EALG,CAMhBC,UAAWC,EANK,CAOhBC,kBAAmBC,EAPH,CAQhBC,QAASC,EARO,CAShBC,aAAcC,EATE,CAUhBC,UAAWC,EAVK,CAWhBC,MAAOC,EAXS,CAYhBC,aAAcC,EAZE,CAahBC,UAAWC,EAbK,CAchBC,KAAMC,EAdU,CAehBC,OAAQC,EAfQ,CAgBhBC,WAAYC,EAhBI,CAiBhBC,GAAIC,EAjBY,CAkBhBC,IAAKC,EAlBW,CAmBhBC,KAAMC,EAnBU,CAoBhBC,aAAcC,EApBE,CAqBhBC,SAAUC,EArBM,CAsBhBC,eAAgBC,EAtBA,CAuBhBC,iBAAkBC,EAvBF,CAwBhBC,cAAeC,EAxBC,CAyBhBC,SAAUC,EAzBM,CA0BhBC,QAASC,EA1BO,CA2BhBC,MAAOC,EA3BS,CA4BhBC,gBAAiBC,EA5BD,CA6BhBC,SAAUC,EA7BM,CAAlB,CAzD0B,CADI,CAAlC,CAxCmC,CAyQrCC,QAASA,GAAS,CAACnQ,CAAD,CAAO,CACvB,MAAOA,EAAAvB,QAAA,CACG2R,EADH,CACyB,QAAQ,CAACC,CAAD,CAAIjO,CAAJ,CAAeE,CAAf,CAAuBgO,CAAvB,CAA+B,CACnE,MAAOA,EAAA,CAAShO,CAAAiO,YAAA,EAAT,CAAgCjO,CAD4B,CADhE,CAAA7D,QAAA,CAIG+R,EAJH,CAIoB,OAJpB,CADgB,CAp1Ec;AAo3EvCC,QAASA,GAAiB,CAACrW,CAAD,CAAO,CAG3BlD,CAAAA,CAAWkD,CAAAlD,SACf,OAAOA,EAAP,GAAoBC,EAApB,EAAyC,CAACD,CAA1C,EAxvBuBwZ,CAwvBvB,GAAsDxZ,CAJvB,CAOjCyZ,QAASA,GAAmB,CAACpS,CAAD,CAAO/G,CAAP,CAAgB,CAAA,IACtCoZ,CADsC,CACjClQ,CADiC,CAEtCmQ,EAAWrZ,CAAAsZ,uBAAA,EAF2B,CAGtCrM,EAAQ,EAEZ,IAfQsM,EAAAvP,KAAA,CAeajD,CAfb,CAeR,CAGO,CAELqS,CAAA,CAAMA,CAAN,EAAaC,CAAAG,YAAA,CAAqBxZ,CAAAyZ,cAAA,CAAsB,KAAtB,CAArB,CACbvQ,EAAA,CAAM,CAACwQ,EAAAC,KAAA,CAAqB5S,CAArB,CAAD,EAA+B,CAAC,EAAD,CAAK,EAAL,CAA/B,EAAyC,CAAzC,CAAAiE,YAAA,EACN4O,EAAA,CAAOC,EAAA,CAAQ3Q,CAAR,CAAP,EAAuB2Q,EAAAC,SACvBV,EAAAW,UAAA,CAAgBH,CAAA,CAAK,CAAL,CAAhB,CAA0B7S,CAAAE,QAAA,CAAa+S,EAAb,CAA+B,WAA/B,CAA1B,CAAwEJ,CAAA,CAAK,CAAL,CAIxE,KADAlZ,CACA,CADIkZ,CAAA,CAAK,CAAL,CACJ,CAAOlZ,CAAA,EAAP,CAAA,CACE0Y,CAAA,CAAMA,CAAAa,UAGRhN,EAAA,CAAQ5H,EAAA,CAAO4H,CAAP,CAAcmM,CAAAc,WAAd,CAERd,EAAA,CAAMC,CAAAc,WACNf,EAAAgB,YAAA,CAAkB,EAhBb,CAHP,IAEEnN,EAAA/I,KAAA,CAAWlE,CAAAqa,eAAA,CAAuBtT,CAAvB,CAAX,CAqBFsS,EAAAe,YAAA,CAAuB,EACvBf,EAAAU,UAAA,CAAqB,EACrBja,EAAA,CAAQmN,CAAR,CAAe,QAAQ,CAACrK,CAAD,CAAO,CAC5ByW,CAAAG,YAAA,CAAqB5W,CAArB,CAD4B,CAA9B,CAIA,OAAOyW,EAlCmC,CAqD5ClN,QAASA,EAAM,CAAC9I,CAAD,CAAU,CACvB,GAAIA,CAAJ;AAAuB8I,CAAvB,CACE,MAAO9I,EAGT,KAAIiX,CAEA1a,EAAA,CAASyD,CAAT,CAAJ,GACEA,CACA,CADUkX,CAAA,CAAKlX,CAAL,CACV,CAAAiX,CAAA,CAAc,CAAA,CAFhB,CAIA,IAAM,EAAA,IAAA,WAAgBnO,EAAhB,CAAN,CAA+B,CAC7B,GAAImO,CAAJ,EAAwC,GAAxC,EAAmBjX,CAAAyB,OAAA,CAAe,CAAf,CAAnB,CACE,KAAM0V,GAAA,CAAa,OAAb,CAAN,CAEF,MAAO,KAAIrO,CAAJ,CAAW9I,CAAX,CAJsB,CAO/B,GAAIiX,CAAJ,CAAiB,CAjCjBta,CAAA,CAAqBb,CACrB,KAAIsb,CAGF,EAAA,CADF,CAAKA,CAAL,CAAcC,EAAAf,KAAA,CAAuB5S,CAAvB,CAAd,EACS,CAAC/G,CAAAyZ,cAAA,CAAsBgB,CAAA,CAAO,CAAP,CAAtB,CAAD,CADT,CAIA,CAAKA,CAAL,CAActB,EAAA,CAAoBpS,CAApB,CAA0B/G,CAA1B,CAAd,EACSya,CAAAP,WADT,CAIO,EAsBU,CACfS,EAAA,CAAe,IAAf,CAAqB,CAArB,CAnBqB,CAyBzBC,QAASA,GAAW,CAACvX,CAAD,CAAU,CAC5B,MAAOA,EAAAwX,UAAA,CAAkB,CAAA,CAAlB,CADqB,CAI9BC,QAASA,GAAY,CAACzX,CAAD,CAAU0X,CAAV,CAA2B,CACzCA,CAAL,EAAsBC,EAAA,CAAiB3X,CAAjB,CAEtB,IAAIA,CAAA4X,iBAAJ,CAEE,IADA,IAAIC,EAAc7X,CAAA4X,iBAAA,CAAyB,GAAzB,CAAlB,CACSva,EAAI,CADb,CACgBya,EAAID,CAAAzb,OAApB,CAAwCiB,CAAxC,CAA4Cya,CAA5C,CAA+Cza,CAAA,EAA/C,CACEsa,EAAA,CAAiBE,CAAA,CAAYxa,CAAZ,CAAjB,CAN0C,CAWhD0a,QAASA,GAAS,CAAC/X,CAAD,CAAUgY,CAAV,CAAgB1V,CAAhB,CAAoB2V,CAApB,CAAiC,CACjD,GAAIrZ,CAAA,CAAUqZ,CAAV,CAAJ,CAA4B,KAAMd,GAAA,CAAa,SAAb,CAAN,CAG5B,IAAI3O,GADA0P,CACA1P,CADe2P,EAAA,CAAmBnY,CAAnB,CACfwI,GAAyB0P,CAAA1P,OAA7B,CACI4P,EAASF,CAATE,EAAyBF,CAAAE,OAE7B,IAAKA,CAAL,CAEA,GAAKJ,CAAL,CAQEvb,CAAA,CAAQub,CAAAlY,MAAA,CAAW,GAAX,CAAR,CAAyB,QAAQ,CAACkY,CAAD,CAAO,CACtC,GAAIpZ,CAAA,CAAU0D,CAAV,CAAJ,CAAmB,CACjB,IAAI+V;AAAc7P,CAAA,CAAOwP,CAAP,CAClB9X,GAAA,CAAYmY,CAAZ,EAA2B,EAA3B,CAA+B/V,CAA/B,CACA,IAAI+V,CAAJ,EAAwC,CAAxC,CAAmBA,CAAAjc,OAAnB,CACE,MAJe,CAQG4D,CAtLtBsY,oBAAA,CAsL+BN,CAtL/B,CAsLqCI,CAtLrC,CAAsC,CAAA,CAAtC,CAuLA,QAAO5P,CAAA,CAAOwP,CAAP,CAV+B,CAAxC,CARF,KACE,KAAKA,CAAL,GAAaxP,EAAb,CACe,UAGb,GAHIwP,CAGJ,EAFwBhY,CAxKxBsY,oBAAA,CAwKiCN,CAxKjC,CAwKuCI,CAxKvC,CAAsC,CAAA,CAAtC,CA0KA,CAAA,OAAO5P,CAAA,CAAOwP,CAAP,CAdsC,CAgCnDL,QAASA,GAAgB,CAAC3X,CAAD,CAAUmF,CAAV,CAAgB,CACvC,IAAIoT,EAAYvY,CAAAwY,MAAhB,CACIN,EAAeK,CAAfL,EAA4BO,EAAA,CAAQF,CAAR,CAE5BL,EAAJ,GACM/S,CAAJ,CACE,OAAO+S,CAAA1R,KAAA,CAAkBrB,CAAlB,CADT,EAKI+S,CAAAE,OAOJ,GANMF,CAAA1P,OAAAI,SAGJ,EAFEsP,CAAAE,OAAA,CAAoB,EAApB,CAAwB,UAAxB,CAEF,CAAAL,EAAA,CAAU/X,CAAV,CAGF,EADA,OAAOyY,EAAA,CAAQF,CAAR,CACP,CAAAvY,CAAAwY,MAAA,CAAgBzc,CAZhB,CADF,CAJuC,CAsBzCoc,QAASA,GAAkB,CAACnY,CAAD,CAAU0Y,CAAV,CAA6B,CAAA,IAClDH,EAAYvY,CAAAwY,MADsC,CAElDN,EAAeK,CAAfL,EAA4BO,EAAA,CAAQF,CAAR,CAE5BG,EAAJ,EAA0BR,CAAAA,CAA1B,GACElY,CAAAwY,MACA,CADgBD,CAChB,CA7MyB,EAAEI,EA6M3B,CAAAT,CAAA,CAAeO,EAAA,CAAQF,CAAR,CAAf,CAAoC,CAAC/P,OAAQ,EAAT,CAAahC,KAAM,EAAnB,CAAuB4R,OAAQrc,CAA/B,CAFtC,CAKA,OAAOmc,EAT+C,CAaxDU,QAASA,GAAU,CAAC5Y,CAAD,CAAUpD,CAAV,CAAeY,CAAf,CAAsB,CACvC,GAAIoY,EAAA,CAAkB5V,CAAlB,CAAJ,CAAgC,CAE9B,IAAI6Y,EAAiBja,CAAA,CAAUpB,CAAV,CAArB,CACIsb,EAAiB,CAACD,CAAlBC,EAAoClc,CAApCkc,EAA2C,CAACja,CAAA,CAASjC,CAAT,CADhD,CAEImc,EAAa,CAACnc,CAEd4J,EAAAA,EADA0R,CACA1R,CADe2R,EAAA,CAAmBnY,CAAnB,CAA4B,CAAC8Y,CAA7B,CACftS,GAAuB0R,CAAA1R,KAE3B;GAAIqS,CAAJ,CACErS,CAAA,CAAK5J,CAAL,CAAA,CAAYY,CADd,KAEO,CACL,GAAIub,CAAJ,CACE,MAAOvS,EAEP,IAAIsS,CAAJ,CAEE,MAAOtS,EAAP,EAAeA,CAAA,CAAK5J,CAAL,CAEfkB,EAAA,CAAO0I,CAAP,CAAa5J,CAAb,CARC,CAVuB,CADO,CA0BzCoc,QAASA,GAAc,CAAChZ,CAAD,CAAUiZ,CAAV,CAAoB,CACzC,MAAKjZ,EAAAqF,aAAL,CAEqC,EAFrC,CACQzB,CAAC,GAADA,EAAQ5D,CAAAqF,aAAA,CAAqB,OAArB,CAARzB,EAAyC,EAAzCA,EAA+C,GAA/CA,SAAA,CAA4D,SAA5D,CAAuE,GAAvE,CAAAvD,QAAA,CACI,GADJ,CACU4Y,CADV,CACqB,GADrB,CADR,CAAkC,CAAA,CADO,CAM3CC,QAASA,GAAiB,CAAClZ,CAAD,CAAUmZ,CAAV,CAAsB,CAC1CA,CAAJ,EAAkBnZ,CAAAoZ,aAAlB,EACE3c,CAAA,CAAQ0c,CAAArZ,MAAA,CAAiB,GAAjB,CAAR,CAA+B,QAAQ,CAACuZ,CAAD,CAAW,CAChDrZ,CAAAoZ,aAAA,CAAqB,OAArB,CAA8BlC,CAAA,CAC1BtT,CAAC,GAADA,EAAQ5D,CAAAqF,aAAA,CAAqB,OAArB,CAARzB,EAAyC,EAAzCA,EAA+C,GAA/CA,SAAA,CACS,SADT,CACoB,GADpB,CAAAA,QAAA,CAES,GAFT,CAEesT,CAAA,CAAKmC,CAAL,CAFf,CAEgC,GAFhC,CAEqC,GAFrC,CAD0B,CAA9B,CADgD,CAAlD,CAF4C,CAYhDC,QAASA,GAAc,CAACtZ,CAAD,CAAUmZ,CAAV,CAAsB,CAC3C,GAAIA,CAAJ,EAAkBnZ,CAAAoZ,aAAlB,CAAwC,CACtC,IAAIG,EAAkB3V,CAAC,GAADA,EAAQ5D,CAAAqF,aAAA,CAAqB,OAArB,CAARzB,EAAyC,EAAzCA,EAA+C,GAA/CA,SAAA,CACW,SADX,CACsB,GADtB,CAGtBnH,EAAA,CAAQ0c,CAAArZ,MAAA,CAAiB,GAAjB,CAAR,CAA+B,QAAQ,CAACuZ,CAAD,CAAW,CAChDA,CAAA;AAAWnC,CAAA,CAAKmC,CAAL,CAC4C,GAAvD,GAAIE,CAAAlZ,QAAA,CAAwB,GAAxB,CAA8BgZ,CAA9B,CAAyC,GAAzC,CAAJ,GACEE,CADF,EACqBF,CADrB,CACgC,GADhC,CAFgD,CAAlD,CAOArZ,EAAAoZ,aAAA,CAAqB,OAArB,CAA8BlC,CAAA,CAAKqC,CAAL,CAA9B,CAXsC,CADG,CAiB7CjC,QAASA,GAAc,CAACkC,CAAD,CAAOC,CAAP,CAAiB,CAGtC,GAAIA,CAAJ,CAGE,GAAIA,CAAApd,SAAJ,CACEmd,CAAA,CAAKA,CAAApd,OAAA,EAAL,CAAA,CAAsBqd,CADxB,KAEO,CACL,IAAIrd,EAASqd,CAAArd,OAGb,IAAsB,QAAtB,GAAI,MAAOA,EAAX,EAAkCqd,CAAA5d,OAAlC,GAAsD4d,CAAtD,CACE,IAAIrd,CAAJ,CACE,IAAS,IAAAiB,EAAI,CAAb,CAAgBA,CAAhB,CAAoBjB,CAApB,CAA4BiB,CAAA,EAA5B,CACEmc,CAAA,CAAKA,CAAApd,OAAA,EAAL,CAAA,CAAsBqd,CAAA,CAASpc,CAAT,CAF1B,CADF,IAOEmc,EAAA,CAAKA,CAAApd,OAAA,EAAL,CAAA,CAAsBqd,CAXnB,CAR6B,CA0BxCC,QAASA,GAAgB,CAAC1Z,CAAD,CAAUmF,CAAV,CAAgB,CACvC,MAAOwU,GAAA,CAAoB3Z,CAApB,CAA6B,GAA7B,EAAoCmF,CAApC,EAA4C,cAA5C,EAA8D,YAA9D,CADgC,CAIzCwU,QAASA,GAAmB,CAAC3Z,CAAD,CAAUmF,CAAV,CAAgB3H,CAAhB,CAAuB,CAt/B1BqY,CAy/BvB,EAAI7V,CAAA3D,SAAJ,GACE2D,CADF,CACYA,CAAA4Z,gBADZ,CAKA,KAFIC,CAEJ,CAFYrd,CAAA,CAAQ2I,CAAR,CAAA,CAAgBA,CAAhB,CAAuB,CAACA,CAAD,CAEnC,CAAOnF,CAAP,CAAA,CAAgB,CACd,IADc,IACL3C,EAAI,CADC,CACEW,EAAK6b,CAAAzd,OAArB,CAAmCiB,CAAnC,CAAuCW,CAAvC,CAA2CX,CAAA,EAA3C,CACE,IAAKG,CAAL,CAAa4F,CAAAoD,KAAA,CAAYxG,CAAZ,CAAqB6Z,CAAA,CAAMxc,CAAN,CAArB,CAAb,IAAiDtB,CAAjD,CAA4D,MAAOyB,EAMrEwC,EAAA,CAAUA,CAAA8Z,WAAV,EArgC8BC,EAqgC9B,GAAiC/Z,CAAA3D,SAAjC,EAAqF2D,CAAAga,KARvE,CARiC,CAtnFZ;AA0oFvCC,QAASA,GAAW,CAACja,CAAD,CAAU,CAE5B,IADAyX,EAAA,CAAazX,CAAb,CAAsB,CAAA,CAAtB,CACA,CAAOA,CAAA8W,WAAP,CAAA,CACE9W,CAAAka,YAAA,CAAoBla,CAAA8W,WAApB,CAH0B,CAO9BqD,QAASA,GAAY,CAACna,CAAD,CAAUoa,CAAV,CAAoB,CAClCA,CAAL,EAAe3C,EAAA,CAAazX,CAAb,CACf,KAAIqa,EAASra,CAAA8Z,WACTO,EAAJ,EAAYA,CAAAH,YAAA,CAAmBla,CAAnB,CAH2B,CAOzCsa,QAASA,GAAoB,CAACC,CAAD,CAASC,CAAT,CAAc,CACzCA,CAAA,CAAMA,CAAN,EAAa3e,CACb,IAAgC,UAAhC,GAAI2e,CAAA1e,SAAA2e,WAAJ,CAIED,CAAAE,WAAA,CAAeH,CAAf,CAJF,KAOEnX,EAAA,CAAOoX,CAAP,CAAAxS,GAAA,CAAe,MAAf,CAAuBuS,CAAvB,CATuC,CA0E3CI,QAASA,GAAkB,CAAC3a,CAAD,CAAUmF,CAAV,CAAgB,CAEzC,IAAIyV,EAAcC,EAAA,CAAa1V,CAAAwC,YAAA,EAAb,CAGlB,OAAOiT,EAAP,EAAsBE,EAAA,CAAiB/a,EAAA,CAAUC,CAAV,CAAjB,CAAtB,EAA8D4a,CALrB,CAQ3CG,QAASA,GAAkB,CAAC/a,CAAD,CAAUmF,CAAV,CAAgB,CACzC,IAAI3F,EAAWQ,CAAAR,SACf,QAAqB,OAArB,GAAQA,CAAR,EAA6C,UAA7C,GAAgCA,CAAhC,GAA4Dwb,EAAA,CAAa7V,CAAb,CAFnB,CA6K3C8V,QAASA,GAAkB,CAACjb,CAAD,CAAUwI,CAAV,CAAkB,CAC3C,IAAI0S,EAAeA,QAAQ,CAACC,CAAD,CAAQnD,CAAR,CAAc,CAEvCmD,CAAAC,mBAAA,CAA2BC,QAAQ,EAAG,CACpC,MAAOF,EAAAG,iBAD6B,CAItC,KAAIC,EAAW/S,CAAA,CAAOwP,CAAP,EAAemD,CAAAnD,KAAf,CAAf,CACIwD,EAAiBD,CAAA,CAAWA,CAAAnf,OAAX;AAA6B,CAElD,IAAKof,CAAL,CAAA,CAEA,GAAI7c,CAAA,CAAYwc,CAAAM,4BAAZ,CAAJ,CAAoD,CAClD,IAAIC,EAAmCP,CAAAQ,yBACvCR,EAAAQ,yBAAA,CAAiCC,QAAQ,EAAG,CAC1CT,CAAAM,4BAAA,CAAoC,CAAA,CAEhCN,EAAAU,gBAAJ,EACEV,CAAAU,gBAAA,EAGEH,EAAJ,EACEA,CAAA3e,KAAA,CAAsCoe,CAAtC,CARwC,CAFM,CAepDA,CAAAW,8BAAA,CAAsCC,QAAQ,EAAG,CAC/C,MAA6C,CAAA,CAA7C,GAAOZ,CAAAM,4BADwC,CAK3B,EAAtB,CAAKD,CAAL,GACED,CADF,CACaha,EAAA,CAAYga,CAAZ,CADb,CAIA,KAAS,IAAAle,EAAI,CAAb,CAAgBA,CAAhB,CAAoBme,CAApB,CAAoCne,CAAA,EAApC,CACO8d,CAAAW,8BAAA,EAAL,EACEP,CAAA,CAASle,CAAT,CAAAN,KAAA,CAAiBiD,CAAjB,CAA0Bmb,CAA1B,CA5BJ,CATuC,CA4CzCD,EAAAxS,KAAA,CAAoB1I,CACpB,OAAOkb,EA9CoC,CAuS7C7F,QAASA,GAAgB,EAAG,CAC1B,IAAA2G,KAAA,CAAYC,QAAiB,EAAG,CAC9B,MAAOne,EAAA,CAAOgL,CAAP,CAAe,CACpBoT,SAAUA,QAAQ,CAAC3c,CAAD,CAAO4c,CAAP,CAAgB,CAC5B5c,CAAAG,KAAJ,GAAeH,CAAf,CAAsBA,CAAA,CAAK,CAAL,CAAtB,CACA,OAAOyZ,GAAA,CAAezZ,CAAf,CAAqB4c,CAArB,CAFyB,CADd,CAKpBC,SAAUA,QAAQ,CAAC7c,CAAD;AAAO4c,CAAP,CAAgB,CAC5B5c,CAAAG,KAAJ,GAAeH,CAAf,CAAsBA,CAAA,CAAK,CAAL,CAAtB,CACA,OAAO+Z,GAAA,CAAe/Z,CAAf,CAAqB4c,CAArB,CAFyB,CALd,CASpBE,YAAaA,QAAQ,CAAC9c,CAAD,CAAO4c,CAAP,CAAgB,CAC/B5c,CAAAG,KAAJ,GAAeH,CAAf,CAAsBA,CAAA,CAAK,CAAL,CAAtB,CACA,OAAO2Z,GAAA,CAAkB3Z,CAAlB,CAAwB4c,CAAxB,CAF4B,CATjB,CAAf,CADuB,CADN,CA+B5BG,QAASA,GAAO,CAACpgB,CAAD,CAAMqgB,CAAN,CAAiB,CAC/B,IAAI3f,EAAMV,CAANU,EAAaV,CAAA2B,UAEjB,IAAIjB,CAAJ,CAIE,MAHmB,UAGZA,GAHH,MAAOA,EAGJA,GAFLA,CAEKA,CAFCV,CAAA2B,UAAA,EAEDjB,EAAAA,CAGL4f,EAAAA,CAAU,MAAOtgB,EAOrB,OALEU,EAKF,CANe,UAAf,EAAI4f,CAAJ,EAAyC,QAAzC,EAA8BA,CAA9B,EAA6D,IAA7D,GAAqDtgB,CAArD,CACQA,CAAA2B,UADR,CACwB2e,CADxB,CACkC,GADlC,CACwC,CAACD,CAAD,EAAc9e,EAAd,GADxC,CAGQ+e,CAHR,CAGkB,GAHlB,CAGwBtgB,CAdO,CAuBjCugB,QAASA,GAAO,CAACtc,CAAD,CAAQuc,CAAR,CAAqB,CACnC,GAAIA,CAAJ,CAAiB,CACf,IAAIhf,EAAM,CACV,KAAAD,QAAA,CAAekf,QAAQ,EAAG,CACxB,MAAO,EAAEjf,CADe,CAFX,CAMjBjB,CAAA,CAAQ0D,CAAR,CAAe,IAAAyc,IAAf,CAAyB,IAAzB,CAPmC,CA0GrCC,QAASA,GAAM,CAACva,CAAD,CAAK,CAKlB,MAAA,CADIwa,CACJ,CAFaxa,CAAAtD,SAAA,EAAA4E,QAAAmZ,CAAsBC,EAAtBD,CAAsC,EAAtCA,CACF7b,MAAA,CAAa+b,EAAb,CACX,EACS,WADT,CACuBrZ,CAACkZ,CAAA,CAAK,CAAL,CAADlZ,EAAY,EAAZA,SAAA,CAAwB,WAAxB,CAAqC,GAArC,CADvB,CACmE,GADnE,CAGO,IARW,CAWpBsZ,QAASA,GAAQ,CAAC5a,CAAD;AAAKkD,CAAL,CAAeL,CAAf,CAAqB,CAAA,IAChCgY,CAKJ,IAAkB,UAAlB,GAAI,MAAO7a,EAAX,CACE,IAAM,EAAA6a,CAAA,CAAU7a,CAAA6a,QAAV,CAAN,CAA6B,CAC3BA,CAAA,CAAU,EACV,IAAI7a,CAAAlG,OAAJ,CAAe,CACb,GAAIoJ,CAAJ,CAIE,KAHKjJ,EAAA,CAAS4I,CAAT,CAGC,EAHkBA,CAGlB,GAFJA,CAEI,CAFG7C,CAAA6C,KAEH,EAFc0X,EAAA,CAAOva,CAAP,CAEd,EAAA8H,EAAA,CAAgB,UAAhB,CACyEjF,CADzE,CAAN,CAGF4X,CAAA,CAASza,CAAAtD,SAAA,EAAA4E,QAAA,CAAsBoZ,EAAtB,CAAsC,EAAtC,CACTI,EAAA,CAAUL,CAAA7b,MAAA,CAAa+b,EAAb,CACVxgB,EAAA,CAAQ2gB,CAAA,CAAQ,CAAR,CAAAtd,MAAA,CAAiBud,EAAjB,CAAR,CAAwC,QAAQ,CAACrU,CAAD,CAAM,CACpDA,CAAApF,QAAA,CAAY0Z,EAAZ,CAAoB,QAAQ,CAACC,CAAD,CAAMC,CAAN,CAAkBrY,CAAlB,CAAwB,CAClDgY,CAAAtc,KAAA,CAAasE,CAAb,CADkD,CAApD,CADoD,CAAtD,CAVa,CAgBf7C,CAAA6a,QAAA,CAAaA,CAlBc,CAA7B,CADF,IAqBW3gB,EAAA,CAAQ8F,CAAR,CAAJ,EACLmb,CAEA,CAFOnb,CAAAlG,OAEP,CAFmB,CAEnB,CADA8M,EAAA,CAAY5G,CAAA,CAAGmb,CAAH,CAAZ,CAAsB,IAAtB,CACA,CAAAN,CAAA,CAAU7a,CAAAH,MAAA,CAAS,CAAT,CAAYsb,CAAZ,CAHL,EAKLvU,EAAA,CAAY5G,CAAZ,CAAgB,IAAhB,CAAsB,CAAA,CAAtB,CAEF,OAAO6a,EAlC6B,CAshBtCjX,QAASA,GAAc,CAACwX,CAAD,CAAgBlY,CAAhB,CAA0B,CAuC/CmY,QAASA,EAAa,CAACC,CAAD,CAAW,CAC/B,MAAO,SAAQ,CAAChhB,CAAD,CAAMY,CAAN,CAAa,CAC1B,GAAIqB,CAAA,CAASjC,CAAT,CAAJ,CACEH,CAAA,CAAQG,CAAR,CAAaU,EAAA,CAAcsgB,CAAd,CAAb,CADF,KAGE,OAAOA,EAAA,CAAShhB,CAAT,CAAcY,CAAd,CAJiB,CADG,CAUjCiN,QAASA,EAAQ,CAACtF,CAAD,CAAO0Y,CAAP,CAAkB,CACjCxU,EAAA,CAAwBlE,CAAxB,CAA8B,SAA9B,CACA,IAAItI,CAAA,CAAWghB,CAAX,CAAJ,EAA6BrhB,CAAA,CAAQqhB,CAAR,CAA7B,CACEA,CAAA,CAAYC,CAAAC,YAAA,CAA6BF,CAA7B,CAEd,IAAK7B,CAAA6B,CAAA7B,KAAL,CACE,KAAM5R,GAAA,CAAgB,MAAhB;AAA2EjF,CAA3E,CAAN,CAEF,MAAO6Y,EAAA,CAAc7Y,CAAd,CAtDY8Y,UAsDZ,CAAP,CAA8CJ,CARb,CAWnCK,QAASA,EAAkB,CAAC/Y,CAAD,CAAOgF,CAAP,CAAgB,CACzC,MAAOgU,SAA4B,EAAG,CACpC,IAAIrd,EAASsd,CAAAjY,OAAA,CAAwBgE,CAAxB,CAAiC,IAAjC,CACb,IAAIxL,CAAA,CAAYmC,CAAZ,CAAJ,CACE,KAAMsJ,GAAA,CAAgB,OAAhB,CAAyFjF,CAAzF,CAAN,CAEF,MAAOrE,EAL6B,CADG,CAU3CqJ,QAASA,EAAO,CAAChF,CAAD,CAAOkZ,CAAP,CAAkBC,CAAlB,CAA2B,CACzC,MAAO7T,EAAA,CAAStF,CAAT,CAAe,CACpB6W,KAAkB,CAAA,CAAZ,GAAAsC,CAAA,CAAoBJ,CAAA,CAAmB/Y,CAAnB,CAAyBkZ,CAAzB,CAApB,CAA0DA,CAD5C,CAAf,CADkC,CAiC3CE,QAASA,EAAW,CAACb,CAAD,CAAgB,CAAA,IAC9B1S,EAAY,EADkB,CACdwT,CACpB/hB,EAAA,CAAQihB,CAAR,CAAuB,QAAQ,CAAC1Y,CAAD,CAAS,CAItCyZ,QAASA,EAAc,CAAC7T,CAAD,CAAQ,CAAA,IACzBvN,CADyB,CACtBW,CACFX,EAAA,CAAI,CAAT,KAAYW,CAAZ,CAAiB4M,CAAAxO,OAAjB,CAA+BiB,CAA/B,CAAmCW,CAAnC,CAAuCX,CAAA,EAAvC,CAA4C,CAAA,IACtCqhB,EAAa9T,CAAA,CAAMvN,CAAN,CADyB,CAEtCoN,EAAWqT,CAAAzW,IAAA,CAAqBqX,CAAA,CAAW,CAAX,CAArB,CAEfjU,EAAA,CAASiU,CAAA,CAAW,CAAX,CAAT,CAAAjc,MAAA,CAA8BgI,CAA9B,CAAwCiU,CAAA,CAAW,CAAX,CAAxC,CAJ0C,CAFf,CAH/B,GAAI,CAAAC,CAAAtX,IAAA,CAAkBrC,CAAlB,CAAJ,CAAA,CACA2Z,CAAA/B,IAAA,CAAkB5X,CAAlB,CAA0B,CAAA,CAA1B,CAYA,IAAI,CACEzI,CAAA,CAASyI,CAAT,CAAJ,EACEwZ,CAGA,CAHWxS,EAAA,CAAchH,CAAd,CAGX,CAFAgG,CAEA,CAFYA,CAAAhJ,OAAA,CAAiBuc,CAAA,CAAYC,CAAAlU,SAAZ,CAAjB,CAAAtI,OAAA,CAAwDwc,CAAArT,WAAxD,CAEZ,CADAsT,CAAA,CAAeD,CAAAvT,aAAf,CACA,CAAAwT,CAAA,CAAeD,CAAAtT,cAAf,CAJF,EAKWrO,CAAA,CAAWmI,CAAX,CAAJ,CACHgG,CAAAnK,KAAA,CAAeid,CAAA3X,OAAA,CAAwBnB,CAAxB,CAAf,CADG,CAEIxI,CAAA,CAAQwI,CAAR,CAAJ,CACHgG,CAAAnK,KAAA,CAAeid,CAAA3X,OAAA,CAAwBnB,CAAxB,CAAf,CADG,CAGLkE,EAAA,CAAYlE,CAAZ,CAAoB,QAApB,CAXA,CAaF,MAAOzB,CAAP,CAAU,CAYV,KAXI/G,EAAA,CAAQwI,CAAR,CAWE;CAVJA,CAUI,CAVKA,CAAA,CAAOA,CAAA5I,OAAP,CAAuB,CAAvB,CAUL,EARFmH,CAAAqb,QAQE,EARWrb,CAAAsb,MAQX,EARqD,EAQrD,EARsBtb,CAAAsb,MAAAxe,QAAA,CAAgBkD,CAAAqb,QAAhB,CAQtB,GAFJrb,CAEI,CAFAA,CAAAqb,QAEA,CAFY,IAEZ,CAFmBrb,CAAAsb,MAEnB,EAAAzU,EAAA,CAAgB,UAAhB,CACIpF,CADJ,CACYzB,CAAAsb,MADZ,EACuBtb,CAAAqb,QADvB,EACoCrb,CADpC,CAAN,CAZU,CA1BZ,CADsC,CAAxC,CA2CA,OAAOyH,EA7C2B,CAoDpC8T,QAASA,EAAsB,CAACC,CAAD,CAAQ5U,CAAR,CAAiB,CAE9C6U,QAASA,EAAU,CAACC,CAAD,CAAcC,CAAd,CAAsB,CACvC,GAAIH,CAAAjiB,eAAA,CAAqBmiB,CAArB,CAAJ,CAAuC,CACrC,GAAIF,CAAA,CAAME,CAAN,CAAJ,GAA2BE,CAA3B,CACE,KAAM/U,GAAA,CAAgB,MAAhB,CACI6U,CADJ,CACkB,MADlB,CAC2B1V,CAAAjF,KAAA,CAAU,MAAV,CAD3B,CAAN,CAGF,MAAOya,EAAA,CAAME,CAAN,CAL8B,CAOrC,GAAI,CAGF,MAFA1V,EAAAzD,QAAA,CAAamZ,CAAb,CAEO,CADPF,CAAA,CAAME,CAAN,CACO,CADcE,CACd,CAAAJ,CAAA,CAAME,CAAN,CAAA,CAAqB9U,CAAA,CAAQ8U,CAAR,CAAqBC,CAArB,CAH1B,CAIF,MAAOE,CAAP,CAAY,CAIZ,KAHIL,EAAA,CAAME,CAAN,CAGEG,GAHqBD,CAGrBC,EAFJ,OAAOL,CAAA,CAAME,CAAN,CAEHG,CAAAA,CAAN,CAJY,CAJd,OASU,CACR7V,CAAA8V,MAAA,EADQ,CAjB2B,CAuBzClZ,QAASA,EAAM,CAAC7D,CAAD,CAAKD,CAAL,CAAWid,CAAX,CAAmBL,CAAnB,CAAgC,CACvB,QAAtB,GAAI,MAAOK,EAAX,GACEL,CACA,CADcK,CACd,CAAAA,CAAA,CAAS,IAFX,CAD6C,KAMzCxC,EAAO,EANkC,CAOzCK,EAAUD,EAAA,CAAS5a,CAAT,CAAakD,CAAb,CAAuByZ,CAAvB,CAP+B,CAQzC7iB,CARyC,CAQjCiB,CARiC,CASzCT,CAECS,EAAA,CAAI,CAAT,KAAYjB,CAAZ,CAAqB+gB,CAAA/gB,OAArB,CAAqCiB,CAArC,CAAyCjB,CAAzC,CAAiDiB,CAAA,EAAjD,CAAsD,CACpDT,CAAA,CAAMugB,CAAA,CAAQ9f,CAAR,CACN,IAAmB,QAAnB;AAAI,MAAOT,EAAX,CACE,KAAMwN,GAAA,CAAgB,MAAhB,CACyExN,CADzE,CAAN,CAGFkgB,CAAAjc,KAAA,CACEye,CAAA,EAAUA,CAAAxiB,eAAA,CAAsBF,CAAtB,CAAV,CACE0iB,CAAA,CAAO1iB,CAAP,CADF,CAEEoiB,CAAA,CAAWpiB,CAAX,CAAgBqiB,CAAhB,CAHJ,CANoD,CAYlDziB,CAAA,CAAQ8F,CAAR,CAAJ,GACEA,CADF,CACOA,CAAA,CAAGlG,CAAH,CADP,CAMA,OAAOkG,EAAAG,MAAA,CAASJ,CAAT,CAAeya,CAAf,CA7BsC,CA0C/C,MAAO,CACL3W,OAAQA,CADH,CAEL4X,YAZFA,QAAoB,CAACwB,CAAD,CAAOD,CAAP,CAAeL,CAAf,CAA4B,CAI9C,IAAIO,EAAWriB,MAAAkE,OAAA,CAAcoe,CAACjjB,CAAA,CAAQ+iB,CAAR,CAAA,CAAgBA,CAAA,CAAKA,CAAAnjB,OAAL,CAAmB,CAAnB,CAAhB,CAAwCmjB,CAAzCE,WAAd,EAA0E,IAA1E,CACXC,EAAAA,CAAgBvZ,CAAA,CAAOoZ,CAAP,CAAaC,CAAb,CAAuBF,CAAvB,CAA+BL,CAA/B,CAEpB,OAAOpgB,EAAA,CAAS6gB,CAAT,CAAA,EAA2B7iB,CAAA,CAAW6iB,CAAX,CAA3B,CAAuDA,CAAvD,CAAuEF,CAPhC,CAUzC,CAGLnY,IAAK2X,CAHA,CAIL9B,SAAUA,EAJL,CAKLyC,IAAKA,QAAQ,CAACxa,CAAD,CAAO,CAClB,MAAO6Y,EAAAlhB,eAAA,CAA6BqI,CAA7B,CAjOQ8Y,UAiOR,CAAP,EAA8Dc,CAAAjiB,eAAA,CAAqBqI,CAArB,CAD5C,CALf,CAnEuC,CA1JhDK,CAAA,CAAyB,CAAA,CAAzB,GAAYA,CADmC,KAE3C2Z,EAAgB,EAF2B,CAI3C5V,EAAO,EAJoC,CAK3CoV,EAAgB,IAAIlC,EAAJ,CAAY,EAAZ,CAAgB,CAAA,CAAhB,CAL2B,CAM3CuB,EAAgB,CACdjY,SAAU,CACN0E,SAAUkT,CAAA,CAAclT,CAAd,CADJ,CAENN,QAASwT,CAAA,CAAcxT,CAAd,CAFH,CAGNiB,QAASuS,CAAA,CAkEnBvS,QAAgB,CAACjG,CAAD,CAAOiE,CAAP,CAAoB,CAClC,MAAOe,EAAA,CAAQhF,CAAR,CAAc,CAAC,WAAD,CAAc,QAAQ,CAACya,CAAD,CAAY,CACrD,MAAOA,EAAA7B,YAAA,CAAsB3U,CAAtB,CAD8C,CAAlC,CAAd,CAD2B,CAlEjB,CAHH;AAIN5L,MAAOmgB,CAAA,CAuEjBngB,QAAc,CAAC2H,CAAD,CAAOxC,CAAP,CAAY,CAAE,MAAOwH,EAAA,CAAQhF,CAAR,CAAczG,EAAA,CAAQiE,CAAR,CAAd,CAA4B,CAAA,CAA5B,CAAT,CAvET,CAJD,CAKN0I,SAAUsS,CAAA,CAwEpBtS,QAAiB,CAAClG,CAAD,CAAO3H,CAAP,CAAc,CAC7B6L,EAAA,CAAwBlE,CAAxB,CAA8B,UAA9B,CACA6Y,EAAA,CAAc7Y,CAAd,CAAA,CAAsB3H,CACtBqiB,EAAA,CAAc1a,CAAd,CAAA,CAAsB3H,CAHO,CAxEX,CALJ,CAMNsiB,UA6EVA,QAAkB,CAACb,CAAD,CAAcc,CAAd,CAAuB,CAAA,IACnCC,EAAelC,CAAAzW,IAAA,CAAqB4X,CAArB,CAxFAhB,UAwFA,CADoB,CAEnCgC,EAAWD,CAAAhE,KAEfgE,EAAAhE,KAAA,CAAoBkE,QAAQ,EAAG,CAC7B,IAAIC,EAAe/B,CAAAjY,OAAA,CAAwB8Z,CAAxB,CAAkCD,CAAlC,CACnB,OAAO5B,EAAAjY,OAAA,CAAwB4Z,CAAxB,CAAiC,IAAjC,CAAuC,CAACK,UAAWD,CAAZ,CAAvC,CAFsB,CAJQ,CAnFzB,CADI,CAN2B,CAgB3CrC,EAAoBE,CAAA4B,UAApB9B,CACIgB,CAAA,CAAuBd,CAAvB,CAAsC,QAAQ,CAACiB,CAAD,CAAcC,CAAd,CAAsB,CAC9DtY,EAAArK,SAAA,CAAiB2iB,CAAjB,CAAJ,EACE3V,CAAA1I,KAAA,CAAUqe,CAAV,CAEF,MAAM9U,GAAA,CAAgB,MAAhB,CAAiDb,CAAAjF,KAAA,CAAU,MAAV,CAAjD,CAAN,CAJkE,CAApE,CAjBuC,CAuB3Cub,EAAgB,EAvB2B,CAwB3CzB,EAAoByB,CAAAD,UAApBxB,CACIU,CAAA,CAAuBe,CAAvB,CAAsC,QAAQ,CAACZ,CAAD,CAAcC,CAAd,CAAsB,CAClE,IAAIzU,EAAWqT,CAAAzW,IAAA,CAAqB4X,CAArB,CAvBJhB,UAuBI,CAAmDiB,CAAnD,CACf,OAAOd,EAAAjY,OAAA,CAAwBsE,CAAAuR,KAAxB,CAAuCvR,CAAvC,CAAiD1O,CAAjD,CAA4DkjB,CAA5D,CAF2D,CAApE,CAMRxiB,EAAA,CAAQ8hB,CAAA,CAAYb,CAAZ,CAAR,CAAoC,QAAQ,CAACpb,CAAD,CAAK,CAAE8b,CAAAjY,OAAA,CAAwB7D,CAAxB,EAA8B/D,CAA9B,CAAF,CAAjD,CAEA,OAAO6f,EAjCwC,CAoPjDvM,QAASA,GAAqB,EAAG,CAE/B,IAAIwO,EAAuB,CAAA,CAe3B,KAAAC,qBAAA;AAA4BC,QAAQ,EAAG,CACrCF,CAAA,CAAuB,CAAA,CADc,CA6IvC,KAAArE,KAAA,CAAY,CAAC,SAAD,CAAY,WAAZ,CAAyB,YAAzB,CAAuC,QAAQ,CAAClH,CAAD,CAAU1B,CAAV,CAAqBM,CAArB,CAAiC,CAM1F8M,QAASA,EAAc,CAACC,CAAD,CAAO,CAC5B,IAAI3f,EAAS,IACb4f,MAAAjB,UAAAkB,KAAA5jB,KAAA,CAA0B0jB,CAA1B,CAAgC,QAAQ,CAACzgB,CAAD,CAAU,CAChD,GAA2B,GAA3B,GAAID,EAAA,CAAUC,CAAV,CAAJ,CAEE,MADAc,EACO,CADEd,CACF,CAAA,CAAA,CAHuC,CAAlD,CAMA,OAAOc,EARqB,CAgC9B8f,QAASA,EAAQ,CAAClY,CAAD,CAAO,CACtB,GAAIA,CAAJ,CAAU,CACRA,CAAAmY,eAAA,EAEA,KAAIpL,CAvBFA,EAAAA,CAASqL,CAAAC,QAETlkB,EAAA,CAAW4Y,CAAX,CAAJ,CACEA,CADF,CACWA,CAAA,EADX,CAEWnW,EAAA,CAAUmW,CAAV,CAAJ,EACD/M,CAGF,CAHS+M,CAAA,CAAO,CAAP,CAGT,CAAAA,CAAA,CADqB,OAAvB,GADYX,CAAAkM,iBAAA/T,CAAyBvE,CAAzBuE,CACRgU,SAAJ,CACW,CADX,CAGWvY,CAAAwY,sBAAA,EAAAC,OANN,EAQKriB,CAAA,CAAS2W,CAAT,CARL,GASLA,CATK,CASI,CATJ,CAqBDA,EAAJ,GAcM2L,CACJ,CADc1Y,CAAAwY,sBAAA,EAAAG,IACd,CAAAvM,CAAAwM,SAAA,CAAiB,CAAjB,CAAoBF,CAApB,CAA8B3L,CAA9B,CAfF,CALQ,CAAV,IAuBEX,EAAA8L,SAAA,CAAiB,CAAjB,CAAoB,CAApB,CAxBoB,CA4BxBE,QAASA,EAAM,EAAG,CAAA,IACZS,EAAOnO,CAAAmO,KAAA,EADK,CACaC,CAGxBD,EAAL,CAGK,CAAKC,CAAL,CAAW1lB,CAAA2lB,eAAA,CAAwBF,CAAxB,CAAX,EAA2CX,CAAA,CAASY,CAAT,CAA3C,CAGA,CAAKA,CAAL,CAAWhB,CAAA,CAAe1kB,CAAA4lB,kBAAA,CAA2BH,CAA3B,CAAf,CAAX;AAA8DX,CAAA,CAASY,CAAT,CAA9D,CAGa,KAHb,GAGID,CAHJ,EAGoBX,CAAA,CAAS,IAAT,CATzB,CAAWA,CAAA,CAAS,IAAT,CAJK,CAjElB,IAAI9kB,EAAWgZ,CAAAhZ,SAmFXukB,EAAJ,EACE3M,CAAAtU,OAAA,CAAkBuiB,QAAwB,EAAG,CAAC,MAAOvO,EAAAmO,KAAA,EAAR,CAA7C,CACEK,QAA8B,CAACC,CAAD,CAASC,CAAT,CAAiB,CAEzCD,CAAJ,GAAeC,CAAf,EAAoC,EAApC,GAAyBD,CAAzB,EAEAvH,EAAA,CAAqB,QAAQ,EAAG,CAC9B5G,CAAAvU,WAAA,CAAsB2hB,CAAtB,CAD8B,CAAhC,CAJ6C,CADjD,CAWF,OAAOA,EAhGmF,CAAhF,CA9JmB,CAonBjC3L,QAASA,GAAuB,EAAG,CACjC,IAAA6G,KAAA,CAAY,CAAC,OAAD,CAAU,UAAV,CAAsB,QAAQ,CAAChH,CAAD,CAAQJ,CAAR,CAAkB,CAC1D,MAAOI,EAAA+M,UAAA,CACH,QAAQ,CAACzf,CAAD,CAAK,CAAE,MAAO0S,EAAA,CAAM1S,CAAN,CAAT,CADV,CAEH,QAAQ,CAACA,CAAD,CAAK,CACb,MAAOsS,EAAA,CAAStS,CAAT,CAAa,CAAb,CAAgB,CAAA,CAAhB,CADM,CAHyC,CAAhD,CADqB,CAiCnC0f,QAASA,GAAO,CAACnmB,CAAD,CAASC,CAAT,CAAmBwX,CAAnB,CAAyBc,CAAzB,CAAmC,CAsBjD6N,QAASA,EAA0B,CAAC3f,CAAD,CAAK,CACtC,GAAI,CACFA,CAAAG,MAAA,CAAS,IAAT,CA/1HGN,EAAApF,KAAA,CA+1HsBkB,SA/1HtB,CA+1HiCuE,CA/1HjC,CA+1HH,CADE,CAAJ,OAEU,CAER,GADA0f,CAAA,EACI,CAA4B,CAA5B,GAAAA,CAAJ,CACE,IAAA,CAAOC,CAAA/lB,OAAP,CAAA,CACE,GAAI,CACF+lB,CAAAC,IAAA,EAAA,EADE,CAEF,MAAO7e,CAAP,CAAU,CACV+P,CAAA+O,MAAA,CAAW9e,CAAX,CADU,CANR,CAH4B,CAwExC+e,QAASA,EAAW,CAACC,CAAD,CAAW7H,CAAX,CAAuB,CACxC8H,SAASA,EAAK,EAAG,CAChB/lB,CAAA,CAAQgmB,CAAR,CAAiB,QAAQ,CAACC,CAAD,CAAS,CAAEA,CAAA,EAAF,CAAlC,CACAC,EAAA,CAAcjI,CAAA,CAAW8H,CAAX;AAAkBD,CAAlB,CAFE,CAAjBC,CAAD,EADyC,CAgH3CI,QAASA,EAA0B,EAAG,CACpCC,CAAA,EACAC,EAAA,EAFoC,CAOtCD,QAASA,EAAU,EAAG,CAEpBE,CAAA,CAAclnB,CAAAmnB,QAAAC,MACdF,EAAA,CAAcpkB,CAAA,CAAYokB,CAAZ,CAAA,CAA2B,IAA3B,CAAkCA,CAG5CrhB,GAAA,CAAOqhB,CAAP,CAAoBG,CAApB,CAAJ,GACEH,CADF,CACgBG,CADhB,CAGAA,EAAA,CAAkBH,CATE,CAYtBD,QAASA,EAAa,EAAG,CACvB,GAAIK,CAAJ,GAAuB9gB,CAAA+gB,IAAA,EAAvB,EAAqCC,CAArC,GAA0DN,CAA1D,CAIAI,CAEA,CAFiB9gB,CAAA+gB,IAAA,EAEjB,CADAC,CACA,CADmBN,CACnB,CAAAtmB,CAAA,CAAQ6mB,CAAR,CAA4B,QAAQ,CAACC,CAAD,CAAW,CAC7CA,CAAA,CAASlhB,CAAA+gB,IAAA,EAAT,CAAqBL,CAArB,CAD6C,CAA/C,CAPuB,CAoFzBS,QAASA,EAAsB,CAACnlB,CAAD,CAAM,CACnC,GAAI,CACF,MAAOyF,mBAAA,CAAmBzF,CAAnB,CADL,CAEF,MAAOkF,CAAP,CAAU,CACV,MAAOlF,EADG,CAHuB,CArTY,IAC7CgE,EAAO,IADsC,CAE7CohB,EAAc3nB,CAAA,CAAS,CAAT,CAF+B,CAG7CmL,EAAWpL,CAAAoL,SAHkC,CAI7C+b,EAAUnnB,CAAAmnB,QAJmC,CAK7CtI,EAAa7e,CAAA6e,WALgC,CAM7CgJ,EAAe7nB,CAAA6nB,aAN8B,CAO7CC,EAAkB,EAEtBthB,EAAAuhB,OAAA,CAAc,CAAA,CAEd,KAAI1B,EAA0B,CAA9B,CACIC,EAA8B,EAGlC9f,EAAAwhB,6BAAA,CAAoC5B,CACpC5f,EAAAyhB,6BAAA,CAAoCC,QAAQ,EAAG,CAAE7B,CAAA,EAAF,CAkC/C7f,EAAA2hB,gCAAA,CAAuCC,QAAQ,CAACC,CAAD,CAAW,CAIxDznB,CAAA,CAAQgmB,CAAR,CAAiB,QAAQ,CAACC,CAAD,CAAS,CAAEA,CAAA,EAAF,CAAlC,CAEgC,EAAhC,GAAIR,CAAJ,CACEgC,CAAA,EADF;AAGE/B,CAAAthB,KAAA,CAAiCqjB,CAAjC,CATsD,CAlDT,KAkE7CzB,EAAU,EAlEmC,CAmE7CE,CAaJtgB,EAAA8hB,UAAA,CAAiBC,QAAQ,CAAC9hB,CAAD,CAAK,CACxB3D,CAAA,CAAYgkB,CAAZ,CAAJ,EAA8BL,CAAA,CAAY,GAAZ,CAAiB5H,CAAjB,CAC9B+H,EAAA5hB,KAAA,CAAayB,CAAb,CACA,OAAOA,EAHqB,CAhFmB,KAyG7CygB,CAzG6C,CAyGhCM,CAzGgC,CA0G7CF,EAAiBlc,CAAAod,KA1G4B,CA2G7CC,EAAcxoB,CAAA6D,KAAA,CAAc,MAAd,CA3G+B,CA4G7C4kB,EAAiB,IAErB1B,EAAA,EACAQ,EAAA,CAAmBN,CAsBnB1gB,EAAA+gB,IAAA,CAAWoB,QAAQ,CAACpB,CAAD,CAAMxf,CAAN,CAAeqf,CAAf,CAAsB,CAInCtkB,CAAA,CAAYskB,CAAZ,CAAJ,GACEA,CADF,CACU,IADV,CAKIhc,EAAJ,GAAiBpL,CAAAoL,SAAjB,GAAkCA,CAAlC,CAA6CpL,CAAAoL,SAA7C,CACI+b,EAAJ,GAAgBnnB,CAAAmnB,QAAhB,GAAgCA,CAAhC,CAA0CnnB,CAAAmnB,QAA1C,CAGA,IAAII,CAAJ,CAAS,CACP,IAAIqB,EAAYpB,CAAZoB,GAAiCxB,CAKrC,IAAIE,CAAJ,GAAuBC,CAAvB,GAAgCJ,CAAA5O,CAAA4O,QAAhC,EAAoDyB,CAApD,EACE,MAAOpiB,EAET,KAAIqiB,EAAWvB,CAAXuB,EAA6BC,EAAA,CAAUxB,CAAV,CAA7BuB,GAA2DC,EAAA,CAAUvB,CAAV,CAC/DD,EAAA,CAAiBC,CACjBC,EAAA,CAAmBJ,CAKfD,EAAA5O,CAAA4O,QAAJ,EAA0B0B,CAA1B,EAAuCD,CAAvC,EAMOC,CAGL,GAFEH,CAEF,CAFmBnB,CAEnB,EAAIxf,CAAJ,CACEqD,CAAArD,QAAA,CAAiBwf,CAAjB,CADF,CAEYsB,CAAL,EAGLzd,CAAA,CAAAA,CAAA,CAxIF7G,CAwIE,CAAwBgjB,CAxIlB/iB,QAAA,CAAY,GAAZ,CAwIN,CAvIN,CAuIM,CAvIY,EAAX,GAAAD,CAAA,CAAe,EAAf,CAuIuBgjB,CAvIHwB,OAAA,CAAWxkB,CAAX,CAAmB,CAAnB,CAuIrB,CAAA6G,CAAAsa,KAAA,CAAgB,CAHX,EACLta,CAAAod,KADK,CACWjB,CAZpB,GACEJ,CAAA,CAAQpf,CAAA,CAAU,cAAV,CAA2B,WAAnC,CAAA,CAAgDqf,CAAhD,CAAuD,EAAvD,CAA2DG,CAA3D,CAGA,CAFAP,CAAA,EAEA,CAAAQ,CAAA,CAAmBN,CAJrB,CAiBA,OAAO1gB,EAjCA,CAuCP,MAAOkiB,EAAP,EAAyBtd,CAAAod,KAAAzgB,QAAA,CAAsB,MAAtB;AAA6B,GAA7B,CApDY,CAkEzCvB,EAAA4gB,MAAA,CAAa4B,QAAQ,EAAG,CACtB,MAAO9B,EADe,CAvMyB,KA2M7CO,EAAqB,EA3MwB,CA4M7CwB,GAAgB,CAAA,CA5M6B,CAoN7C5B,EAAkB,IA8CtB7gB,EAAA0iB,YAAA,CAAmBC,QAAQ,CAACd,CAAD,CAAW,CAEpC,GAAKY,CAAAA,EAAL,CAAoB,CAMlB,GAAI1Q,CAAA4O,QAAJ,CAAsB5f,CAAA,CAAOvH,CAAP,CAAAmM,GAAA,CAAkB,UAAlB,CAA8B4a,CAA9B,CAEtBxf,EAAA,CAAOvH,CAAP,CAAAmM,GAAA,CAAkB,YAAlB,CAAgC4a,CAAhC,CAEAkC,GAAA,CAAgB,CAAA,CAVE,CAapBxB,CAAAziB,KAAA,CAAwBqjB,CAAxB,CACA,OAAOA,EAhB6B,CAwBtC7hB,EAAA4iB,iBAAA,CAAwBnC,CAexBzgB,EAAA6iB,SAAA,CAAgBC,QAAQ,EAAG,CACzB,IAAId,EAAOC,CAAA5kB,KAAA,CAAiB,MAAjB,CACX,OAAO2kB,EAAA,CAAOA,CAAAzgB,QAAA,CAAa,wBAAb,CAAuC,EAAvC,CAAP,CAAoD,EAFlC,CAQ3B,KAAIwhB,GAAc,EAAlB,CACIC,EAAmB,EADvB,CAEIC,GAAajjB,CAAA6iB,SAAA,EA8BjB7iB,EAAAkjB,QAAA,CAAeC,QAAQ,CAACrgB,CAAD,CAAO3H,CAAP,CAAc,CAAA,IAC/BioB,CAD+B,CACJC,CADI,CACIroB,CADJ,CACO+C,CAE1C,IAAI+E,CAAJ,CACM3H,CAAJ,GAAczB,CAAd,CACE0nB,CAAAiC,OADF,CACuBjhB,kBAAA,CAAmBU,CAAnB,CADvB,CACkD,SADlD,CAC8DmgB,EAD9D,CAE0B,wCAF1B,CAIM/oB,CAAA,CAASiB,CAAT,CAJN,GAKIioB,CAOA,CAPerpB,CAACqnB,CAAAiC,OAADtpB,CAAsBqI,kBAAA,CAAmBU,CAAnB,CAAtB/I,CAAiD,GAAjDA,CAAuDqI,kBAAA,CAAmBjH,CAAnB,CAAvDpB;AACO,QADPA,CACkBkpB,EADlBlpB,QAOf,CANsD,CAMtD,CAAmB,IAAnB,CAAIqpB,CAAJ,EACEnS,CAAAqS,KAAA,CAAU,UAAV,CAAuBxgB,CAAvB,CACE,6DADF,CAEEsgB,CAFF,CAEiB,iBAFjB,CAbN,CADF,KAoBO,CACL,GAAIhC,CAAAiC,OAAJ,GAA2BL,CAA3B,CAKE,IAJAA,CAIK,CAJc5B,CAAAiC,OAId,CAHLE,CAGK,CAHSP,CAAAvlB,MAAA,CAAuB,IAAvB,CAGT,CAFLslB,EAEK,CAFS,EAET,CAAA/nB,CAAA,CAAI,CAAT,CAAYA,CAAZ,CAAgBuoB,CAAAxpB,OAAhB,CAAoCiB,CAAA,EAApC,CACEqoB,CAEA,CAFSE,CAAA,CAAYvoB,CAAZ,CAET,CADA+C,CACA,CADQslB,CAAArlB,QAAA,CAAe,GAAf,CACR,CAAY,CAAZ,CAAID,CAAJ,GACE+E,CAIA,CAJOqe,CAAA,CAAuBkC,CAAAG,UAAA,CAAiB,CAAjB,CAAoBzlB,CAApB,CAAvB,CAIP,CAAIglB,EAAA,CAAYjgB,CAAZ,CAAJ,GAA0BpJ,CAA1B,GACEqpB,EAAA,CAAYjgB,CAAZ,CADF,CACsBqe,CAAA,CAAuBkC,CAAAG,UAAA,CAAiBzlB,CAAjB,CAAyB,CAAzB,CAAvB,CADtB,CALF,CAWJ,OAAOglB,GApBF,CAvB4B,CA8DrC/iB,EAAAyjB,MAAA,CAAaC,QAAQ,CAACzjB,CAAD,CAAK0jB,CAAL,CAAY,CAC/B,IAAIC,CACJ/D,EAAA,EACA+D,EAAA,CAAYvL,CAAA,CAAW,QAAQ,EAAG,CAChC,OAAOiJ,CAAA,CAAgBsC,CAAhB,CACPhE,EAAA,CAA2B3f,CAA3B,CAFgC,CAAtB,CAGT0jB,CAHS,EAGA,CAHA,CAIZrC,EAAA,CAAgBsC,CAAhB,CAAA,CAA6B,CAAA,CAC7B,OAAOA,EARwB,CAsBjC5jB,EAAAyjB,MAAAI,OAAA,CAAoBC,QAAQ,CAACC,CAAD,CAAU,CACpC,MAAIzC,EAAA,CAAgByC,CAAhB,CAAJ,EACE,OAAOzC,CAAA,CAAgByC,CAAhB,CAGA,CAFP1C,CAAA,CAAa0C,CAAb,CAEO,CADPnE,CAAA,CAA2B1jB,CAA3B,CACO,CAAA,CAAA,CAJT,EAMO,CAAA,CAP6B,CAraW,CAibnD0T,QAASA,GAAgB,EAAG,CAC1B,IAAA+J,KAAA,CAAY,CAAC,SAAD;AAAY,MAAZ,CAAoB,UAApB,CAAgC,WAAhC,CACR,QAAQ,CAAClH,CAAD,CAAUxB,CAAV,CAAgBc,CAAhB,CAA0B9B,CAA1B,CAAqC,CAC3C,MAAO,KAAI0P,EAAJ,CAAYlN,CAAZ,CAAqBxC,CAArB,CAAgCgB,CAAhC,CAAsCc,CAAtC,CADoC,CADrC,CADc,CAwF5BjC,QAASA,GAAqB,EAAG,CAE/B,IAAA6J,KAAA,CAAYC,QAAQ,EAAG,CAGrBoK,QAASA,EAAY,CAACC,CAAD,CAAUC,CAAV,CAAmB,CAwMtCC,QAASA,EAAO,CAACC,CAAD,CAAQ,CAClBA,CAAJ,EAAaC,CAAb,GACOC,CAAL,CAEWA,CAFX,EAEuBF,CAFvB,GAGEE,CAHF,CAGaF,CAAAG,EAHb,EACED,CADF,CACaF,CAQb,CAHAI,CAAA,CAAKJ,CAAAG,EAAL,CAAcH,CAAAK,EAAd,CAGA,CAFAD,CAAA,CAAKJ,CAAL,CAAYC,CAAZ,CAEA,CADAA,CACA,CADWD,CACX,CAAAC,CAAAE,EAAA,CAAa,IAVf,CADsB,CAmBxBC,QAASA,EAAI,CAACE,CAAD,CAAYC,CAAZ,CAAuB,CAC9BD,CAAJ,EAAiBC,CAAjB,GACMD,CACJ,GADeA,CAAAD,EACf,CAD6BE,CAC7B,EAAIA,CAAJ,GAAeA,CAAAJ,EAAf,CAA6BG,CAA7B,CAFF,CADkC,CA1NpC,GAAIT,CAAJ,GAAeW,EAAf,CACE,KAAMjrB,EAAA,CAAO,eAAP,CAAA,CAAwB,KAAxB,CAAkEsqB,CAAlE,CAAN,CAFoC,IAKlCY,EAAO,CAL2B,CAMlCC,EAAQrpB,CAAA,CAAO,EAAP,CAAWyoB,CAAX,CAAoB,CAACa,GAAId,CAAL,CAApB,CAN0B,CAOlC9f,EAAO,EAP2B,CAQlC6gB,EAAYd,CAAZc,EAAuBd,CAAAc,SAAvBA,EAA4CC,MAAAC,UARV,CASlCC,EAAU,EATwB,CAUlCd,EAAW,IAVuB,CAWlCC,EAAW,IAyCf,OAAOM,EAAA,CAAOX,CAAP,CAAP,CAAyB,CAoBvB1J,IAAKA,QAAQ,CAAChgB,CAAD,CAAMY,CAAN,CAAa,CACxB,GAAI6pB,CAAJ,CAAeC,MAAAC,UAAf,CAAiC,CAC/B,IAAIE,EAAWD,CAAA,CAAQ5qB,CAAR,CAAX6qB,GAA4BD,CAAA,CAAQ5qB,CAAR,CAA5B6qB,CAA2C,CAAC7qB,IAAKA,CAAN,CAA3C6qB,CAEJjB,EAAA,CAAQiB,CAAR,CAH+B,CAMjC,GAAI,CAAA9oB,CAAA,CAAYnB,CAAZ,CAAJ,CAQA,MAPMZ,EAOCY,GAPMgJ,EAONhJ,EAPa0pB,CAAA,EAOb1pB,CANPgJ,CAAA,CAAK5J,CAAL,CAMOY,CANKA,CAMLA,CAJH0pB,CAIG1pB,CAJI6pB,CAIJ7pB,EAHL,IAAAkqB,OAAA,CAAYf,CAAA/pB,IAAZ,CAGKY;AAAAA,CAfiB,CApBH,CAiDvB6J,IAAKA,QAAQ,CAACzK,CAAD,CAAM,CACjB,GAAIyqB,CAAJ,CAAeC,MAAAC,UAAf,CAAiC,CAC/B,IAAIE,EAAWD,CAAA,CAAQ5qB,CAAR,CAEf,IAAK6qB,CAAAA,CAAL,CAAe,MAEfjB,EAAA,CAAQiB,CAAR,CAL+B,CAQjC,MAAOjhB,EAAA,CAAK5J,CAAL,CATU,CAjDI,CAwEvB8qB,OAAQA,QAAQ,CAAC9qB,CAAD,CAAM,CACpB,GAAIyqB,CAAJ,CAAeC,MAAAC,UAAf,CAAiC,CAC/B,IAAIE,EAAWD,CAAA,CAAQ5qB,CAAR,CAEf,IAAK6qB,CAAAA,CAAL,CAAe,MAEXA,EAAJ,EAAgBf,CAAhB,GAA0BA,CAA1B,CAAqCe,CAAAX,EAArC,CACIW,EAAJ,EAAgBd,CAAhB,GAA0BA,CAA1B,CAAqCc,CAAAb,EAArC,CACAC,EAAA,CAAKY,CAAAb,EAAL,CAAgBa,CAAAX,EAAhB,CAEA,QAAOU,CAAA,CAAQ5qB,CAAR,CATwB,CAYjC,OAAO4J,CAAA,CAAK5J,CAAL,CACPsqB,EAAA,EAdoB,CAxEC,CAkGvBS,UAAWA,QAAQ,EAAG,CACpBnhB,CAAA,CAAO,EACP0gB,EAAA,CAAO,CACPM,EAAA,CAAU,EACVd,EAAA,CAAWC,CAAX,CAAsB,IAJF,CAlGC,CAmHvBiB,QAASA,QAAQ,EAAG,CAGlBJ,CAAA,CADAL,CACA,CAFA3gB,CAEA,CAFO,IAGP,QAAOygB,CAAA,CAAOX,CAAP,CAJW,CAnHG,CA2IvBuB,KAAMA,QAAQ,EAAG,CACf,MAAO/pB,EAAA,CAAO,EAAP,CAAWqpB,CAAX,CAAkB,CAACD,KAAMA,CAAP,CAAlB,CADQ,CA3IM,CApDa,CAFxC,IAAID,EAAS,EA+ObZ,EAAAwB,KAAA,CAAoBC,QAAQ,EAAG,CAC7B,IAAID,EAAO,EACXprB,EAAA,CAAQwqB,CAAR,CAAgB,QAAQ,CAAClI,CAAD,CAAQuH,CAAR,CAAiB,CACvCuB,CAAA,CAAKvB,CAAL,CAAA,CAAgBvH,CAAA8I,KAAA,EADuB,CAAzC,CAGA,OAAOA,EALsB,CAmB/BxB,EAAAhf,IAAA,CAAmB0gB,QAAQ,CAACzB,CAAD,CAAU,CACnC,MAAOW,EAAA,CAAOX,CAAP,CAD4B,CAKrC,OAAOD,EAxQc,CAFQ,CAyTjC9R,QAASA,GAAsB,EAAG,CAChC,IAAAyH,KAAA,CAAY,CAAC,eAAD;AAAkB,QAAQ,CAAC9J,CAAD,CAAgB,CACpD,MAAOA,EAAA,CAAc,WAAd,CAD6C,CAA1C,CADoB,CAisBlC7F,QAASA,GAAgB,CAACtG,CAAD,CAAWiiB,CAAX,CAAkC,CAazDC,QAASA,EAAoB,CAAC5hB,CAAD,CAAQ6hB,CAAR,CAAuB,CAClD,IAAIC,EAAe,oCAAnB,CAEIC,EAAW,EAEf3rB,EAAA,CAAQ4J,CAAR,CAAe,QAAQ,CAACgiB,CAAD,CAAaC,CAAb,CAAwB,CAC7C,IAAIpnB,EAAQmnB,CAAAnnB,MAAA,CAAiBinB,CAAjB,CAEZ,IAAKjnB,CAAAA,CAAL,CACE,KAAMqnB,GAAA,CAAe,MAAf,CAGFL,CAHE,CAGaI,CAHb,CAGwBD,CAHxB,CAAN,CAMFD,CAAA,CAASE,CAAT,CAAA,CAAsB,CACpBE,KAAMtnB,CAAA,CAAM,CAAN,CAAA,CAAS,CAAT,CADc,CAEpBunB,WAAyB,GAAzBA,GAAYvnB,CAAA,CAAM,CAAN,CAFQ,CAGpBwnB,SAAuB,GAAvBA,GAAUxnB,CAAA,CAAM,CAAN,CAHU,CAIpBynB,SAAUznB,CAAA,CAAM,CAAN,CAAVynB,EAAsBL,CAJF,CAVuB,CAA/C,CAkBA,OAAOF,EAvB2C,CAbK,IACrDQ,EAAgB,EADqC,CAGrDC,EAA2B,qCAH0B,CAIrDC,EAAyB,6BAJ4B,CAKrDC,EAAuBnpB,EAAA,CAAQ,2BAAR,CAL8B,CAMrDopB,EAAwB,6BAN6B,CAWrDC,EAA4B,yBA2C/B,KAAAzd,UAAA,CAAiB0d,QAASC,EAAiB,CAAChkB,CAAD,CAAOikB,CAAP,CAAyB,CACnE/f,EAAA,CAAwBlE,CAAxB,CAA8B,WAA9B,CACI5I,EAAA,CAAS4I,CAAT,CAAJ,EACE4D,EAAA,CAAUqgB,CAAV;AAA4B,kBAA5B,CA8BA,CA7BKR,CAAA9rB,eAAA,CAA6BqI,CAA7B,CA6BL,GA5BEyjB,CAAA,CAAczjB,CAAd,CACA,CADsB,EACtB,CAAAY,CAAAoE,QAAA,CAAiBhF,CAAjB,CA1DOkkB,WA0DP,CAAgC,CAAC,WAAD,CAAc,mBAAd,CAC9B,QAAQ,CAACzJ,CAAD,CAAYpN,CAAZ,CAA+B,CACrC,IAAI8W,EAAa,EACjB7sB,EAAA,CAAQmsB,CAAA,CAAczjB,CAAd,CAAR,CAA6B,QAAQ,CAACikB,CAAD,CAAmBhpB,CAAnB,CAA0B,CAC7D,GAAI,CACF,IAAIoL,EAAYoU,CAAAzZ,OAAA,CAAiBijB,CAAjB,CACZvsB,EAAA,CAAW2O,CAAX,CAAJ,CACEA,CADF,CACc,CAAElF,QAAS5H,EAAA,CAAQ8M,CAAR,CAAX,CADd,CAEYlF,CAAAkF,CAAAlF,QAFZ,EAEiCkF,CAAAqb,KAFjC,GAGErb,CAAAlF,QAHF,CAGsB5H,EAAA,CAAQ8M,CAAAqb,KAAR,CAHtB,CAKArb,EAAA+d,SAAA,CAAqB/d,CAAA+d,SAArB,EAA2C,CAC3C/d,EAAApL,MAAA,CAAkBA,CAClBoL,EAAArG,KAAA,CAAiBqG,CAAArG,KAAjB,EAAmCA,CACnCqG,EAAAge,QAAA,CAAoBhe,CAAAge,QAApB,EAA0Che,CAAArD,WAA1C,EAAkEqD,CAAArG,KAClEqG,EAAAie,SAAA,CAAqBje,CAAAie,SAArB,EAA2C,IACvC5qB,EAAA,CAAS2M,CAAAnF,MAAT,CAAJ,GACEmF,CAAAke,kBADF,CACgCzB,CAAA,CAAqBzc,CAAAnF,MAArB,CAAsCmF,CAAArG,KAAtC,CADhC,CAGAmkB,EAAAzoB,KAAA,CAAgB2K,CAAhB,CAfE,CAgBF,MAAOjI,CAAP,CAAU,CACViP,CAAA,CAAkBjP,CAAlB,CADU,CAjBiD,CAA/D,CAqBA,OAAO+lB,EAvB8B,CADT,CAAhC,CA2BF,EAAAV,CAAA,CAAczjB,CAAd,CAAAtE,KAAA,CAAyBuoB,CAAzB,CA/BF,EAiCE3sB,CAAA,CAAQ0I,CAAR,CAAc7H,EAAA,CAAc6rB,CAAd,CAAd,CAEF,OAAO,KArC4D,CA6DrE,KAAAQ,2BAAA;AAAkCC,QAAQ,CAACC,CAAD,CAAS,CACjD,MAAIjrB,EAAA,CAAUirB,CAAV,CAAJ,EACE7B,CAAA2B,2BAAA,CAAiDE,CAAjD,CACO,CAAA,IAFT,EAIS7B,CAAA2B,2BAAA,EALwC,CA8BnD,KAAAG,4BAAA,CAAmCC,QAAQ,CAACF,CAAD,CAAS,CAClD,MAAIjrB,EAAA,CAAUirB,CAAV,CAAJ,EACE7B,CAAA8B,4BAAA,CAAkDD,CAAlD,CACO,CAAA,IAFT,EAIS7B,CAAA8B,4BAAA,EALyC,CA+BpD,KAAI9jB,EAAmB,CAAA,CACvB,KAAAA,iBAAA,CAAwBgkB,QAAQ,CAACC,CAAD,CAAU,CACxC,MAAIrrB,EAAA,CAAUqrB,CAAV,CAAJ,EACEjkB,CACO,CADYikB,CACZ,CAAA,IAFT,EAIOjkB,CALiC,CAQ1C,KAAAgW,KAAA,CAAY,CACF,WADE,CACW,cADX,CAC2B,mBAD3B,CACgD,kBADhD,CACoE,QADpE,CAEF,aAFE,CAEa,YAFb,CAE2B,WAF3B,CAEwC,MAFxC,CAEgD,UAFhD,CAE4D,eAF5D,CAGV,QAAQ,CAAC4D,CAAD,CAAchN,CAAd,CAA8BJ,CAA9B,CAAmDgC,CAAnD,CAAuEhB,CAAvE,CACCpB,CADD,CACgBsB,CADhB,CAC8BpB,CAD9B,CAC2C0B,CAD3C,CACmDlC,CADnD,CAC+D3F,CAD/D,CAC8E,CA2OtF+d,QAASA,EAAY,CAACC,CAAD,CAAWC,CAAX,CAAsB,CACzC,GAAI,CACFD,CAAA/N,SAAA,CAAkBgO,CAAlB,CADE,CAEF,MAAO7mB,CAAP,CAAU,EAH6B,CA3O2C;AA2RtF+C,QAASA,EAAO,CAAC+jB,CAAD,CAAgBC,CAAhB,CAA8BC,CAA9B,CAA2CC,CAA3C,CACIC,CADJ,CAC4B,CACpCJ,CAAN,WAA+BjnB,EAA/B,GAGEinB,CAHF,CAGkBjnB,CAAA,CAAOinB,CAAP,CAHlB,CAOA5tB,EAAA,CAAQ4tB,CAAR,CAAuB,QAAQ,CAAC9qB,CAAD,CAAOa,CAAP,CAAc,CACvCb,CAAAlD,SAAJ,EAAqBsH,EAArB,EAAuCpE,CAAAmrB,UAAAxpB,MAAA,CAAqB,KAArB,CAAvC,GACEmpB,CAAA,CAAcjqB,CAAd,CADF,CACyBgD,CAAA,CAAO7D,CAAP,CAAAgX,KAAA,CAAkB,eAAlB,CAAA8D,OAAA,EAAA,CAA4C,CAA5C,CADzB,CAD2C,CAA7C,CAKA,KAAIsQ,EACIC,CAAA,CAAaP,CAAb,CAA4BC,CAA5B,CAA0CD,CAA1C,CACaE,CADb,CAC0BC,CAD1B,CAC2CC,CAD3C,CAERnkB,EAAAukB,gBAAA,CAAwBR,CAAxB,CACA,KAAIS,EAAY,IAChB,OAAOC,SAAqB,CAAC1kB,CAAD,CAAQ2kB,CAAR,CAAwBzE,CAAxB,CAAiC,CAC3Dxd,EAAA,CAAU1C,CAAV,CAAiB,OAAjB,CAEAkgB,EAAA,CAAUA,CAAV,EAAqB,EAHsC,KAIvD0E,EAA0B1E,CAAA0E,wBAJ6B,CAKzDC,EAAwB3E,CAAA2E,sBACxBC,EAAAA,CAAsB5E,CAAA4E,oBAMpBF,EAAJ,EAA+BA,CAAAG,kBAA/B,GACEH,CADF,CAC4BA,CAAAG,kBAD5B,CAIKN,EAAL,GAyCA,CAzCA,CAsCF,CADIvrB,CACJ,CArCgD4rB,CAqChD,EArCgDA,CAoCpB,CAAc,CAAd,CAC5B,EAG6B,eAApB,GAAAprB,EAAA,CAAUR,CAAV,CAAA,EAAuCA,CAAAP,SAAA,EAAAkC,MAAA,CAAsB,KAAtB,CAAvC,CAAsE,KAAtE,CAA8E,MAHvF,CACS,MAvCP,CAUEmqB,EAAA,CANgB,MAAlB,GAAIP,CAAJ,CAMc1nB,CAAA,CACVkoB,EAAA,CAAaR,CAAb,CAAwB1nB,CAAA,CAAO,OAAP,CAAAK,OAAA,CAAuB4mB,CAAvB,CAAA3mB,KAAA,EAAxB,CADU,CANd;AASWsnB,CAAJ,CAGO/iB,EAAA5E,MAAAtG,KAAA,CAA2BstB,CAA3B,CAHP,CAKOA,CAGd,IAAIa,CAAJ,CACE,IAASK,IAAAA,CAAT,GAA2BL,EAA3B,CACEG,CAAA7kB,KAAA,CAAe,GAAf,CAAqB+kB,CAArB,CAAsC,YAAtC,CAAoDL,CAAA,CAAsBK,CAAtB,CAAA/L,SAApD,CAIJlZ,EAAAklB,eAAA,CAAuBH,CAAvB,CAAkChlB,CAAlC,CAEI2kB,EAAJ,EAAoBA,CAAA,CAAeK,CAAf,CAA0BhlB,CAA1B,CAChBskB,EAAJ,EAAqBA,CAAA,CAAgBtkB,CAAhB,CAAuBglB,CAAvB,CAAkCA,CAAlC,CAA6CJ,CAA7C,CACrB,OAAOI,EA/CoD,CAlBnB,CA8F5CT,QAASA,EAAY,CAACa,CAAD,CAAWnB,CAAX,CAAyBoB,CAAzB,CAAuCnB,CAAvC,CAAoDC,CAApD,CACGC,CADH,CAC2B,CA0C9CE,QAASA,EAAe,CAACtkB,CAAD,CAAQolB,CAAR,CAAkBC,CAAlB,CAAgCT,CAAhC,CAAyD,CAAA,IAC/DU,CAD+D,CAClDpsB,CADkD,CAC5CqsB,CAD4C,CAChCvuB,CADgC,CAC7BW,CAD6B,CACpB6tB,CADoB,CAE3EC,CAGJ,IAAIC,CAAJ,CAOE,IAHAD,CAGK,CAHgBpL,KAAJ,CADI+K,CAAArvB,OACJ,CAGZ,CAAAiB,CAAA,CAAI,CAAT,CAAYA,CAAZ,CAAgB2uB,CAAA5vB,OAAhB,CAAgCiB,CAAhC,EAAmC,CAAnC,CACE4uB,CACA,CADMD,CAAA,CAAQ3uB,CAAR,CACN,CAAAyuB,CAAA,CAAeG,CAAf,CAAA,CAAsBR,CAAA,CAASQ,CAAT,CAT1B,KAYEH,EAAA,CAAiBL,CAGdpuB,EAAA,CAAI,CAAT,KAAYW,CAAZ,CAAiBguB,CAAA5vB,OAAjB,CAAiCiB,CAAjC,CAAqCW,CAArC,CAAA,CACEuB,CAIA,CAJOusB,CAAA,CAAeE,CAAA,CAAQ3uB,CAAA,EAAR,CAAf,CAIP,CAHA6uB,CAGA,CAHaF,CAAA,CAAQ3uB,CAAA,EAAR,CAGb,CAFAsuB,CAEA,CAFcK,CAAA,CAAQ3uB,CAAA,EAAR,CAEd,CAAI6uB,CAAJ,EACMA,CAAA7lB,MAAJ,EACEulB,CACA,CADavlB,CAAA8lB,KAAA,EACb,CAAA7lB,CAAAklB,eAAA,CAAuBpoB,CAAA,CAAO7D,CAAP,CAAvB,CAAqCqsB,CAArC,CAFF,EAIEA,CAJF,CAIevlB,CAkBf,CAdEwlB,CAcF,CAfIK,CAAAE,wBAAJ,CAC2BC,CAAA,CACrBhmB,CADqB,CACd6lB,CAAAI,WADc,CACSrB,CADT,CAErBiB,CAAAK,+BAFqB,CAD3B,CAKYC,CAAAN,CAAAM,sBAAL,EAAyCvB,CAAzC,CACoBA,CADpB,CAGKA,CAAAA,CAAL,EAAgCX,CAAhC,CACoB+B,CAAA,CAAwBhmB,CAAxB;AAA+BikB,CAA/B,CADpB,CAIoB,IAG3B,CAAA4B,CAAA,CAAWP,CAAX,CAAwBC,CAAxB,CAAoCrsB,CAApC,CAA0CmsB,CAA1C,CAAwDG,CAAxD,CAvBF,EAyBWF,CAzBX,EA0BEA,CAAA,CAAYtlB,CAAZ,CAAmB9G,CAAAsX,WAAnB,CAAoC9a,CAApC,CAA+CkvB,CAA/C,CAnD2E,CAtCjF,IAJ8C,IAC1Ce,EAAU,EADgC,CAE1CS,CAF0C,CAEnCnD,CAFmC,CAEXzS,CAFW,CAEc6V,CAFd,CAE2BX,CAF3B,CAIrC1uB,EAAI,CAAb,CAAgBA,CAAhB,CAAoBouB,CAAArvB,OAApB,CAAqCiB,CAAA,EAArC,CAA0C,CACxCovB,CAAA,CAAQ,IAAIE,EAGZrD,EAAA,CAAasD,CAAA,CAAkBnB,CAAA,CAASpuB,CAAT,CAAlB,CAA+B,EAA/B,CAAmCovB,CAAnC,CAAgD,CAAN,GAAApvB,CAAA,CAAUktB,CAAV,CAAwBxuB,CAAlE,CACmByuB,CADnB,CAQb,EALA0B,CAKA,CALc5C,CAAAltB,OAAD,CACPywB,EAAA,CAAsBvD,CAAtB,CAAkCmC,CAAA,CAASpuB,CAAT,CAAlC,CAA+CovB,CAA/C,CAAsDnC,CAAtD,CAAoEoB,CAApE,CACwB,IADxB,CAC8B,EAD9B,CACkC,EADlC,CACsCjB,CADtC,CADO,CAGP,IAEN,GAAkByB,CAAA7lB,MAAlB,EACEC,CAAAukB,gBAAA,CAAwB4B,CAAAK,UAAxB,CAGFnB,EAAA,CAAeO,CAAD,EAAeA,CAAAa,SAAf,EACE,EAAAlW,CAAA,CAAa4U,CAAA,CAASpuB,CAAT,CAAAwZ,WAAb,CADF,EAECza,CAAAya,CAAAza,OAFD,CAGR,IAHQ,CAIRwuB,CAAA,CAAa/T,CAAb,CACGqV,CAAA,EACEA,CAAAE,wBADF,EACwC,CAACF,CAAAM,sBADzC,GAEON,CAAAI,WAFP,CAEgChC,CAHnC,CAKN,IAAI4B,CAAJ,EAAkBP,CAAlB,CACEK,CAAAnrB,KAAA,CAAaxD,CAAb,CAAgB6uB,CAAhB,CAA4BP,CAA5B,CAEA,CADAe,CACA,CADc,CAAA,CACd,CAAAX,CAAA,CAAkBA,CAAlB,EAAqCG,CAIvCzB,EAAA,CAAyB,IAhCe,CAoC1C,MAAOiC,EAAA,CAAc/B,CAAd,CAAgC,IAxCO,CAmGhD0B,QAASA,EAAuB,CAAChmB,CAAD,CAAQikB,CAAR,CAAsB0C,CAAtB,CAAiDC,CAAjD,CAAsE,CAgBpG,MAdwBC,SAAQ,CAACC,CAAD,CAAmBC,CAAnB,CAA4BC,CAA5B,CAAyClC,CAAzC,CAA8DmC,CAA9D,CAA+E,CAExGH,CAAL,GACEA,CACA,CADmB9mB,CAAA8lB,KAAA,CAAW,CAAA,CAAX,CAAkBmB,CAAlB,CACnB,CAAAH,CAAAI,cAAA,CAAiC,CAAA,CAFnC,CAKA,OAAOjD,EAAA,CAAa6C,CAAb,CAA+BC,CAA/B;AAAwC,CAC7CnC,wBAAyB+B,CADoB,CAE7C9B,sBAAuBmC,CAFsB,CAG7ClC,oBAAqBA,CAHwB,CAAxC,CAPsG,CAFX,CA6BtGyB,QAASA,EAAiB,CAACrtB,CAAD,CAAO+pB,CAAP,CAAmBmD,CAAnB,CAA0BlC,CAA1B,CAAuCC,CAAvC,CAAwD,CAAA,IAE5EgD,EAAWf,CAAAgB,MAFiE,CAG5EvsB,CAGJ,QALe3B,CAAAlD,SAKf,EACE,KAAKC,EAAL,CAEEoxB,EAAA,CAAapE,CAAb,CACIqE,EAAA,CAAmB5tB,EAAA,CAAUR,CAAV,CAAnB,CADJ,CACyC,GADzC,CAC8CgrB,CAD9C,CAC2DC,CAD3D,CAIA,KANF,IAMW9qB,CANX,CAM0ClC,CAN1C,CAMiDowB,CANjD,CAM2DC,EAAStuB,CAAAuuB,WANpE,CAOW5vB,EAAI,CAPf,CAOkBC,EAAK0vB,CAAL1vB,EAAe0vB,CAAAzxB,OAD/B,CAC8C8B,CAD9C,CACkDC,CADlD,CACsDD,CAAA,EADtD,CAC2D,CACzD,IAAI6vB,EAAgB,CAAA,CAApB,CACIC,EAAc,CAAA,CAElBtuB,EAAA,CAAOmuB,CAAA,CAAO3vB,CAAP,CACPiH,EAAA,CAAOzF,CAAAyF,KACP3H,EAAA,CAAQ0Z,CAAA,CAAKxX,CAAAlC,MAAL,CAGRywB,EAAA,CAAaN,EAAA,CAAmBxoB,CAAnB,CACb,IAAIyoB,CAAJ,CAAeM,EAAAvnB,KAAA,CAAqBsnB,CAArB,CAAf,CACE9oB,CAAA,CAAOA,CAAAvB,QAAA,CAAauqB,EAAb,CAA4B,EAA5B,CAAAvJ,OAAA,CACG,CADH,CAAAhhB,QAAA,CACc,OADd,CACuB,QAAQ,CAAC1C,CAAD,CAAQuG,CAAR,CAAgB,CAClD,MAAOA,EAAAiO,YAAA,EAD2C,CAD/C,CAMT,KAAI0Y,EAAiBH,CAAArqB,QAAA,CAAmB,cAAnB,CAAmC,EAAnC,CACjByqB,EAAA,CAAwBD,CAAxB,CAAJ,EACMH,CADN,GACqBG,CADrB,CACsC,OADtC,GAEIL,CAEA,CAFgB5oB,CAEhB,CADA6oB,CACA,CADc7oB,CAAAyf,OAAA,CAAY,CAAZ,CAAezf,CAAA/I,OAAf,CAA6B,CAA7B,CACd,CADgD,KAChD,CAAA+I,CAAA,CAAOA,CAAAyf,OAAA,CAAY,CAAZ,CAAezf,CAAA/I,OAAf,CAA6B,CAA7B,CAJX,CAQAkyB,EAAA,CAAQX,EAAA,CAAmBxoB,CAAAwC,YAAA,EAAnB,CACR6lB;CAAA,CAASc,CAAT,CAAA,CAAkBnpB,CAClB,IAAIyoB,CAAJ,EAAiB,CAAAnB,CAAA3vB,eAAA,CAAqBwxB,CAArB,CAAjB,CACI7B,CAAA,CAAM6B,CAAN,CACA,CADe9wB,CACf,CAAImd,EAAA,CAAmBpb,CAAnB,CAAyB+uB,CAAzB,CAAJ,GACE7B,CAAA,CAAM6B,CAAN,CADF,CACiB,CAAA,CADjB,CAIJC,GAAA,CAA4BhvB,CAA5B,CAAkC+pB,CAAlC,CAA8C9rB,CAA9C,CAAqD8wB,CAArD,CAA4DV,CAA5D,CACAF,GAAA,CAAapE,CAAb,CAAyBgF,CAAzB,CAAgC,GAAhC,CAAqC/D,CAArC,CAAkDC,CAAlD,CAAmEuD,CAAnE,CACcC,CADd,CAnCyD,CAwC3D5D,CAAA,CAAY7qB,CAAA6qB,UACRvrB,EAAA,CAASurB,CAAT,CAAJ,GAEIA,CAFJ,CAEgBA,CAAAoE,QAFhB,CAIA,IAAIjyB,CAAA,CAAS6tB,CAAT,CAAJ,EAAyC,EAAzC,GAA2BA,CAA3B,CACE,IAAA,CAAOlpB,CAAP,CAAe4nB,CAAAxS,KAAA,CAA4B8T,CAA5B,CAAf,CAAA,CACEkE,CAIA,CAJQX,EAAA,CAAmBzsB,CAAA,CAAM,CAAN,CAAnB,CAIR,CAHIwsB,EAAA,CAAapE,CAAb,CAAyBgF,CAAzB,CAAgC,GAAhC,CAAqC/D,CAArC,CAAkDC,CAAlD,CAGJ,GAFEiC,CAAA,CAAM6B,CAAN,CAEF,CAFiBpX,CAAA,CAAKhW,CAAA,CAAM,CAAN,CAAL,CAEjB,EAAAkpB,CAAA,CAAYA,CAAAxF,OAAA,CAAiB1jB,CAAAd,MAAjB,CAA+Bc,CAAA,CAAM,CAAN,CAAA9E,OAA/B,CAGhB,MACF,MAAKuH,EAAL,CACE8qB,CAAA,CAA4BnF,CAA5B,CAAwC/pB,CAAAmrB,UAAxC,CACA,MACF,MA54KgBgE,CA44KhB,CACE,GAAI,CAEF,GADAxtB,CACA,CADQ2nB,CAAAvS,KAAA,CAA8B/W,CAAAmrB,UAA9B,CACR,CACE4D,CACA,CADQX,EAAA,CAAmBzsB,CAAA,CAAM,CAAN,CAAnB,CACR,CAAIwsB,EAAA,CAAapE,CAAb,CAAyBgF,CAAzB,CAAgC,GAAhC,CAAqC/D,CAArC,CAAkDC,CAAlD,CAAJ,GACEiC,CAAA,CAAM6B,CAAN,CADF,CACiBpX,CAAA,CAAKhW,CAAA,CAAM,CAAN,CAAL,CADjB,CAJA,CAQF,MAAOqC,CAAP,CAAU,EA3EhB,CAmFA+lB,CAAAlsB,KAAA,CAAgBuxB,CAAhB,CACA,OAAOrF,EA1FyE,CAqGlFsF,QAASA,GAAS,CAACrvB,CAAD,CAAOsvB,CAAP,CAAkBC,CAAlB,CAA2B,CAC3C,IAAIllB,EAAQ,EAAZ,CACImlB,EAAQ,CACZ,IAAIF,CAAJ,EAAiBtvB,CAAA6F,aAAjB,EAAsC7F,CAAA6F,aAAA,CAAkBypB,CAAlB,CAAtC,EACE,EAAG,CACD,GAAKtvB,CAAAA,CAAL,CACE,KAAMgpB,GAAA,CAAe,SAAf,CAEIsG,CAFJ,CAEeC,CAFf,CAAN,CAIEvvB,CAAAlD,SAAJ;AAAqBC,EAArB,GACMiD,CAAA6F,aAAA,CAAkBypB,CAAlB,CACJ,EADkCE,CAAA,EAClC,CAAIxvB,CAAA6F,aAAA,CAAkB0pB,CAAlB,CAAJ,EAAgCC,CAAA,EAFlC,CAIAnlB,EAAA/I,KAAA,CAAWtB,CAAX,CACAA,EAAA,CAAOA,CAAAwK,YAXN,CAAH,MAYiB,CAZjB,CAYSglB,CAZT,CADF,KAeEnlB,EAAA/I,KAAA,CAAWtB,CAAX,CAGF,OAAO6D,EAAA,CAAOwG,CAAP,CArBoC,CAgC7ColB,QAASA,EAA0B,CAACC,CAAD,CAASJ,CAAT,CAAoBC,CAApB,CAA6B,CAC9D,MAAO,SAAQ,CAACzoB,CAAD,CAAQrG,CAAR,CAAiBysB,CAAjB,CAAwBY,CAAxB,CAAqC/C,CAArC,CAAmD,CAChEtqB,CAAA,CAAU4uB,EAAA,CAAU5uB,CAAA,CAAQ,CAAR,CAAV,CAAsB6uB,CAAtB,CAAiCC,CAAjC,CACV,OAAOG,EAAA,CAAO5oB,CAAP,CAAcrG,CAAd,CAAuBysB,CAAvB,CAA8BY,CAA9B,CAA2C/C,CAA3C,CAFyD,CADJ,CA8BhEuC,QAASA,GAAqB,CAACvD,CAAD,CAAa4F,CAAb,CAA0BC,CAA1B,CAAyC7E,CAAzC,CACC8E,CADD,CACeC,CADf,CACyCC,CADzC,CACqDC,CADrD,CAEC9E,CAFD,CAEyB,CAiNrD+E,QAASA,EAAU,CAACC,CAAD,CAAMC,CAAN,CAAYb,CAAZ,CAAuBC,CAAvB,CAAgC,CACjD,GAAIW,CAAJ,CAAS,CACHZ,CAAJ,GAAeY,CAAf,CAAqBT,CAAA,CAA2BS,CAA3B,CAAgCZ,CAAhC,CAA2CC,CAA3C,CAArB,CACAW,EAAAjG,QAAA,CAAche,CAAAge,QACdiG,EAAAvH,cAAA,CAAoBA,CACpB,IAAIyH,CAAJ,GAAiCnkB,CAAjC,EAA8CA,CAAAokB,eAA9C,CACEH,CAAA,CAAMI,CAAA,CAAmBJ,CAAnB,CAAwB,CAACvnB,aAAc,CAAA,CAAf,CAAxB,CAERonB,EAAAzuB,KAAA,CAAgB4uB,CAAhB,CAPO,CAST,GAAIC,CAAJ,CAAU,CACJb,CAAJ,GAAea,CAAf,CAAsBV,CAAA,CAA2BU,CAA3B,CAAiCb,CAAjC,CAA4CC,CAA5C,CAAtB,CACAY,EAAAlG,QAAA,CAAehe,CAAAge,QACfkG,EAAAxH,cAAA,CAAqBA,CACrB,IAAIyH,CAAJ,GAAiCnkB,CAAjC,EAA8CA,CAAAokB,eAA9C,CACEF,CAAA,CAAOG,CAAA,CAAmBH,CAAnB,CAAyB,CAACxnB,aAAc,CAAA,CAAf,CAAzB,CAETqnB,EAAA1uB,KAAA,CAAiB6uB,CAAjB,CAPQ,CAVuC,CAsBnDI,QAASA,EAAc,CAAC5H,CAAD;AAAgBsB,CAAhB,CAAyBW,CAAzB,CAAmC4F,CAAnC,CAAuD,CAAA,IACxEvyB,CADwE,CACjEwyB,EAAkB,MAD+C,CACvCtH,EAAW,CAAA,CAD4B,CAExEuH,EAAiB9F,CAFuD,CAGxEjpB,CACJ,IAAI3E,CAAA,CAASitB,CAAT,CAAJ,CAAuB,CACrBtoB,CAAA,CAAQsoB,CAAAtoB,MAAA,CAAc8nB,CAAd,CACRQ,EAAA,CAAUA,CAAA3D,UAAA,CAAkB3kB,CAAA,CAAM,CAAN,CAAA9E,OAAlB,CAEN8E,EAAA,CAAM,CAAN,CAAJ,GACMA,CAAA,CAAM,CAAN,CAAJ,CAAcA,CAAA,CAAM,CAAN,CAAd,CAAyB,IAAzB,CACKA,CAAA,CAAM,CAAN,CADL,CACgBA,CAAA,CAAM,CAAN,CAFlB,CAIiB,IAAjB,GAAIA,CAAA,CAAM,CAAN,CAAJ,CACE8uB,CADF,CACoB,eADpB,CAEwB,IAFxB,GAEW9uB,CAAA,CAAM,CAAN,CAFX,GAGE8uB,CACA,CADkB,eAClB,CAAAC,CAAA,CAAiB9F,CAAA9P,OAAA,EAJnB,CAMiB,IAAjB,GAAInZ,CAAA,CAAM,CAAN,CAAJ,GACEwnB,CADF,CACa,CAAA,CADb,CAIAlrB,EAAA,CAAQ,IAEJuyB,EAAJ,EAA8C,MAA9C,GAA0BC,CAA1B,GACMxyB,CADN,CACcuyB,CAAA,CAAmBvG,CAAnB,CADd,IAEIhsB,CAFJ,CAEYA,CAAAgiB,SAFZ,CAKAhiB,EAAA,CAAQA,CAAR,EAAiByyB,CAAA,CAAeD,CAAf,CAAA,CAAgC,GAAhC,CAAsCxG,CAAtC,CAAgD,YAAhD,CAEjB,IAAKhsB,CAAAA,CAAL,EAAekrB,CAAAA,CAAf,CACE,KAAMH,GAAA,CAAe,OAAf,CAEFiB,CAFE,CAEOtB,CAFP,CAAN,CAIF,MAAO1qB,EAAP,EAAgB,IAhCK,CAiCZhB,CAAA,CAAQgtB,CAAR,CAAJ,GACLhsB,CACA,CADQ,EACR,CAAAf,CAAA,CAAQ+sB,CAAR,CAAiB,QAAQ,CAACA,CAAD,CAAU,CACjChsB,CAAAqD,KAAA,CAAWivB,CAAA,CAAe5H,CAAf,CAA8BsB,CAA9B,CAAuCW,CAAvC,CAAiD4F,CAAjD,CAAX,CADiC,CAAnC,CAFK,CAMP,OAAOvyB,EA3CqE,CA+C9E0uB,QAASA,EAAU,CAACP,CAAD,CAActlB,CAAd,CAAqB6pB,CAArB,CAA+BxE,CAA/B,CAA6CwB,CAA7C,CAAgE,CAqLjFiD,QAASA,EAA0B,CAAC9pB,CAAD,CAAQ+pB,CAAR,CAAuBjF,CAAvB,CAA4C,CAC7E,IAAID,CAGChsB,GAAA,CAAQmH,CAAR,CAAL,GACE8kB,CAEA,CAFsBiF,CAEtB,CADAA,CACA,CADgB/pB,CAChB,CAAAA,CAAA,CAAQtK,CAHV,CAMIs0B,EAAJ,GACEnF,CADF,CAC0B6E,CAD1B,CAGK5E,EAAL,GACEA,CADF,CACwBkF,CAAA,CAAgClG,CAAA9P,OAAA,EAAhC,CAAoD8P,CAD5E,CAGA,OAAO+C,EAAA,CAAkB7mB,CAAlB;AAAyB+pB,CAAzB,CAAwClF,CAAxC,CAA+DC,CAA/D,CAAoFmF,EAApF,CAhBsE,CArLE,IAC1EtyB,CAD0E,CACtEixB,CADsE,CAC9D9mB,CAD8D,CAClDD,CADkD,CACpC6nB,CADoC,CAChBzF,EADgB,CACFH,CADE,CAE7EsC,CAEAyC,EAAJ,GAAoBgB,CAApB,EACEzD,CACA,CADQ0C,CACR,CAAAhF,CAAA,CAAWgF,CAAArC,UAFb,GAIE3C,CACA,CADW/mB,CAAA,CAAO8sB,CAAP,CACX,CAAAzD,CAAA,CAAQ,IAAIE,EAAJ,CAAexC,CAAf,CAAyBgF,CAAzB,CALV,CAQIQ,EAAJ,GACEznB,CADF,CACiB7B,CAAA8lB,KAAA,CAAW,CAAA,CAAX,CADjB,CAIIe,EAAJ,GAGE5C,EACA,CADe6F,CACf,CAAA7F,EAAAc,kBAAA,CAAiC8B,CAJnC,CAOIqD,EAAJ,GAEElD,CAEA,CAFc,EAEd,CADA0C,CACA,CADqB,EACrB,CAAAtzB,CAAA,CAAQ8zB,CAAR,CAA8B,QAAQ,CAAC/kB,CAAD,CAAY,CAAA,IAC5C8T,EAAS,CACXkR,OAAQhlB,CAAA,GAAcmkB,CAAd,EAA0CnkB,CAAAokB,eAA1C,CAAqE1nB,CAArE,CAAoF7B,CADjF,CAEX8jB,SAAUA,CAFC,CAGXsG,OAAQhE,CAHG,CAIXiE,YAAapG,EAJF,CAObniB,EAAA,CAAaqD,CAAArD,WACK,IAAlB,EAAIA,CAAJ,GACEA,CADF,CACeskB,CAAA,CAAMjhB,CAAArG,KAAN,CADf,CAIAwrB,EAAA,CAAqBve,CAAA,CAAYjK,CAAZ,CAAwBmX,CAAxB,CAAgC,CAAA,CAAhC,CAAsC9T,CAAAolB,aAAtC,CAOrBb,EAAA,CAAmBvkB,CAAArG,KAAnB,CAAA,CAAqCwrB,CAChCN,EAAL,EACElG,CAAA3jB,KAAA,CAAc,GAAd,CAAoBgF,CAAArG,KAApB,CAAqC,YAArC,CAAmDwrB,CAAAnR,SAAnD,CAGF6N,EAAA,CAAY7hB,CAAArG,KAAZ,CAAA,CAA8BwrB,CAzBkB,CAAlD,CAJF,CAiCA,IAAIhB,CAAJ,CAA8B,CAC5BrpB,CAAAklB,eAAA,CAAuBrB,CAAvB,CAAiCjiB,CAAjC,CAA+C,CAAA,CAA/C,CAAqD,EAAE2oB,EAAF,GAAwBA,EAAxB,GAA8ClB,CAA9C,EACjDkB,EADiD,GAC3BlB,CAAAmB,oBAD2B,EAArD,CAEAxqB,EAAAukB,gBAAA,CAAwBV,CAAxB,CAAkC,CAAA,CAAlC,CAEI4G,EAAAA,CAAyB1D,CAAzB0D,EAAwC1D,CAAA,CAAYsC,CAAAxqB,KAAZ,CAC5C,KAAI6rB,GAAwB9oB,CACxB6oB,EAAJ;AAA8BA,CAAAE,WAA9B,EACkD,CAAA,CADlD,GACItB,CAAAuB,iBADJ,GAEEF,EAFF,CAE0BD,CAAAvR,SAF1B,CAKA/iB,EAAA,CAAQyL,CAAAwhB,kBAAR,CAAyCiG,CAAAjG,kBAAzC,CAAqF,QAAQ,CAACrB,CAAD,CAAaC,CAAb,CAAwB,CAAA,IAC/GK,EAAWN,CAAAM,SADoG,CAE/GD,EAAWL,CAAAK,SAFoG,CAI/GyI,CAJ+G,CAK/GC,CAL+G,CAKpGC,CALoG,CAKzFC,CAE1B,QAJWjJ,CAAAG,KAIX,EAEE,KAAK,GAAL,CACEiE,CAAA8E,SAAA,CAAe5I,CAAf,CAAyB,QAAQ,CAACnrB,CAAD,CAAQ,CACvCwzB,EAAA,CAAsB1I,CAAtB,CAAA,CAAmC9qB,CADI,CAAzC,CAGAivB,EAAA+E,YAAA,CAAkB7I,CAAlB,CAAA8I,QAAA,CAAsCprB,CAClComB,EAAA,CAAM9D,CAAN,CAAJ,GAGEqI,EAAA,CAAsB1I,CAAtB,CAHF,CAGqC1V,CAAA,CAAa6Z,CAAA,CAAM9D,CAAN,CAAb,CAAA,CAA8BtiB,CAA9B,CAHrC,CAKA,MAEF,MAAK,GAAL,CACE,GAAIqiB,CAAJ,EAAiB,CAAA+D,CAAA,CAAM9D,CAAN,CAAjB,CACE,KAEFyI,EAAA,CAAY5d,CAAA,CAAOiZ,CAAA,CAAM9D,CAAN,CAAP,CAEV2I,EAAA,CADEF,CAAAM,QAAJ,CACYhwB,EADZ,CAGY4vB,QAAQ,CAAChlB,CAAD,CAAIqlB,CAAJ,CAAO,CAAE,MAAOrlB,EAAP,GAAaqlB,CAAb,EAAmBrlB,CAAnB,GAAyBA,CAAzB,EAA8BqlB,CAA9B,GAAoCA,CAAtC,CAE3BN,EAAA,CAAYD,CAAAQ,OAAZ,EAAgC,QAAQ,EAAG,CAEzCT,CAAA,CAAYH,EAAA,CAAsB1I,CAAtB,CAAZ,CAA+C8I,CAAA,CAAU/qB,CAAV,CAC/C,MAAMkiB,GAAA,CAAe,WAAf,CAEFkE,CAAA,CAAM9D,CAAN,CAFE,CAEegH,CAAAxqB,KAFf,CAAN,CAHyC,CAO3CgsB,EAAA,CAAYH,EAAA,CAAsB1I,CAAtB,CAAZ,CAA+C8I,CAAA,CAAU/qB,CAAV,CAC3CwrB,EAAAA,CAAmBA,QAAyB,CAACC,CAAD,CAAc,CACvDR,CAAA,CAAQQ,CAAR,CAAqBd,EAAA,CAAsB1I,CAAtB,CAArB,CAAL,GAEOgJ,CAAA,CAAQQ,CAAR,CAAqBX,CAArB,CAAL,CAKEE,CAAA,CAAUhrB,CAAV,CAAiByrB,CAAjB,CAA+Bd,EAAA,CAAsB1I,CAAtB,CAA/B,CALF,CAEE0I,EAAA,CAAsB1I,CAAtB,CAFF,CAEqCwJ,CAJvC,CAUA;MAAOX,EAAP,CAAmBW,CAXyC,CAa9DD,EAAAE,UAAA,CAA6B,CAAA,CAG3BC,EAAA,CADE3J,CAAAI,WAAJ,CACYpiB,CAAA4rB,iBAAA,CAAuBxF,CAAA,CAAM9D,CAAN,CAAvB,CAAwCkJ,CAAxC,CADZ,CAGYxrB,CAAAjH,OAAA,CAAaoU,CAAA,CAAOiZ,CAAA,CAAM9D,CAAN,CAAP,CAAwBkJ,CAAxB,CAAb,CAAwD,IAAxD,CAA8DT,CAAAM,QAA9D,CAEZxpB,EAAAgqB,IAAA,CAAiB,UAAjB,CAA6BF,CAA7B,CACA,MAEF,MAAK,GAAL,CACEZ,CACA,CADY5d,CAAA,CAAOiZ,CAAA,CAAM9D,CAAN,CAAP,CACZ,CAAAqI,EAAA,CAAsB1I,CAAtB,CAAA,CAAmC,QAAQ,CAAChJ,CAAD,CAAS,CAClD,MAAO8R,EAAA,CAAU/qB,CAAV,CAAiBiZ,CAAjB,CAD2C,CAzDxD,CAPmH,CAArH,CAZ4B,CAmF1B+N,CAAJ,GACE5wB,CAAA,CAAQ4wB,CAAR,CAAqB,QAAQ,CAACllB,CAAD,CAAa,CACxCA,CAAA,EADwC,CAA1C,CAGA,CAAAklB,CAAA,CAAc,IAJhB,CAQKhwB,EAAA,CAAI,CAAT,KAAYW,CAAZ,CAAiBsxB,CAAAlzB,OAAjB,CAAoCiB,CAApC,CAAwCW,CAAxC,CAA4CX,CAAA,EAA5C,CACE4xB,CACA,CADSK,CAAA,CAAWjyB,CAAX,CACT,CAAA80B,CAAA,CAAalD,CAAb,CACIA,CAAA/mB,aAAA,CAAsBA,CAAtB,CAAqC7B,CADzC,CAEI8jB,CAFJ,CAGIsC,CAHJ,CAIIwC,CAAAzF,QAJJ,EAIsBsG,CAAA,CAAeb,CAAA/G,cAAf,CAAqC+G,CAAAzF,QAArC,CAAqDW,CAArD,CAA+D4F,CAA/D,CAJtB,CAKIzF,EALJ,CAYF,KAAIgG,GAAejqB,CACfspB,EAAJ,GAAiCA,CAAAyC,SAAjC,EAA+G,IAA/G,GAAsEzC,CAAA0C,YAAtE,IACE/B,EADF,CACiBpoB,CADjB,CAGAyjB,EAAA,EAAeA,CAAA,CAAY2E,EAAZ,CAA0BJ,CAAArZ,WAA1B,CAA+C9a,CAA/C,CAA0DmxB,CAA1D,CAGf,KAAK7vB,CAAL,CAASkyB,CAAAnzB,OAAT,CAA8B,CAA9B,CAAsC,CAAtC,EAAiCiB,CAAjC,CAAyCA,CAAA,EAAzC,CACE4xB,CACA,CADSM,CAAA,CAAYlyB,CAAZ,CACT,CAAA80B,CAAA,CAAalD,CAAb,CACIA,CAAA/mB,aAAA,CAAsBA,CAAtB,CAAqC7B,CADzC,CAEI8jB,CAFJ,CAGIsC,CAHJ,CAIIwC,CAAAzF,QAJJ,EAIsBsG,CAAA,CAAeb,CAAA/G,cAAf,CAAqC+G,CAAAzF,QAArC;AAAqDW,CAArD,CAA+D4F,CAA/D,CAJtB,CAKIzF,EALJ,CA1K+E,CArRnFG,CAAA,CAAyBA,CAAzB,EAAmD,EAsBnD,KAvBqD,IAGjD6H,EAAmB,CAAChL,MAAAC,UAH6B,CAIjDgL,CAJiD,CAKjDhC,EAAuB9F,CAAA8F,qBAL0B,CAMjDlD,CANiD,CAOjDsC,EAA2BlF,CAAAkF,yBAPsB,CAQjDkB,GAAoBpG,CAAAoG,kBAR6B,CASjD2B,GAA4B/H,CAAA+H,0BATqB,CAUjDC,GAAyB,CAAA,CAVwB,CAWjDC,EAAc,CAAA,CAXmC,CAYjDrC,EAAgC5F,CAAA4F,8BAZiB,CAajDsC,GAAexD,CAAArC,UAAf6F,CAAyCvvB,CAAA,CAAO8rB,CAAP,CAbQ,CAcjD1jB,CAdiD,CAejD0c,CAfiD,CAgBjD0K,CAhBiD,CAkBjDC,GAAoBvI,CAlB6B,CAmBjD2E,CAnBiD,CAuB5C5xB,EAAI,CAvBwC,CAuBrCW,EAAKsrB,CAAAltB,OAArB,CAAwCiB,CAAxC,CAA4CW,CAA5C,CAAgDX,CAAA,EAAhD,CAAqD,CACnDmO,CAAA,CAAY8d,CAAA,CAAWjsB,CAAX,CACZ,KAAIwxB,GAAYrjB,CAAAsnB,QAAhB,CACIhE,GAAUtjB,CAAAunB,MAGVlE,GAAJ,GACE8D,EADF,CACiB/D,EAAA,CAAUM,CAAV,CAAuBL,EAAvB,CAAkCC,EAAlC,CADjB,CAGA8D,EAAA,CAAY72B,CAEZ,IAAIu2B,CAAJ,CAAuB9mB,CAAA+d,SAAvB,CACE,KAGF,IAAIyJ,CAAJ,CAAqBxnB,CAAAnF,MAArB,CAIOmF,CAAA6mB,YAeL,GAdMxzB,CAAA,CAASm0B,CAAT,CAAJ,EAGEC,EAAA,CAAkB,oBAAlB,CAAwCtD,CAAxC,EAAoE4C,CAApE,CACkB/mB,CADlB,CAC6BmnB,EAD7B,CAEA,CAAAhD,CAAA,CAA2BnkB,CAL7B,EASEynB,EAAA,CAAkB,oBAAlB,CAAwCtD,CAAxC,CAAkEnkB,CAAlE,CACkBmnB,EADlB,CAKJ,EAAAJ,CAAA,CAAoBA,CAApB,EAAyC/mB,CAG3C0c,EAAA,CAAgB1c,CAAArG,KAEXktB,EAAA7mB,CAAA6mB,YAAL,EAA8B7mB,CAAArD,WAA9B,GACE6qB,CAIA,CAJiBxnB,CAAArD,WAIjB;AAHAooB,CAGA,CAHuBA,CAGvB,EAH+C,EAG/C,CAFA0C,EAAA,CAAkB,GAAlB,CAAwB/K,CAAxB,CAAwC,cAAxC,CACIqI,CAAA,CAAqBrI,CAArB,CADJ,CACyC1c,CADzC,CACoDmnB,EADpD,CAEA,CAAApC,CAAA,CAAqBrI,CAArB,CAAA,CAAsC1c,CALxC,CAQA,IAAIwnB,CAAJ,CAAqBxnB,CAAA8gB,WAArB,CACEmG,EAUA,CAVyB,CAAA,CAUzB,CALKjnB,CAAA0nB,MAKL,GAJED,EAAA,CAAkB,cAAlB,CAAkCT,EAAlC,CAA6DhnB,CAA7D,CAAwEmnB,EAAxE,CACA,CAAAH,EAAA,CAA4BhnB,CAG9B,EAAsB,SAAtB,EAAIwnB,CAAJ,EACE3C,CASA,CATgC,CAAA,CAShC,CARAiC,CAQA,CARmB9mB,CAAA+d,SAQnB,CAPAqJ,CAOA,CAPYD,EAOZ,CANAA,EAMA,CANexD,CAAArC,UAMf,CALI1pB,CAAA,CAAOtH,CAAAq3B,cAAA,CAAuB,GAAvB,CAA6BjL,CAA7B,CAA6C,IAA7C,CACuBiH,CAAA,CAAcjH,CAAd,CADvB,CACsD,GADtD,CAAP,CAKJ,CAHAgH,CAGA,CAHcyD,EAAA,CAAa,CAAb,CAGd,CAFAS,CAAA,CAAYhE,CAAZ,CAhwMHjtB,EAAApF,KAAA,CAgwMuC61B,CAhwMvC,CAA+B,CAA/B,CAgwMG,CAAgD1D,CAAhD,CAEA,CAAA2D,EAAA,CAAoBvsB,CAAA,CAAQssB,CAAR,CAAmBtI,CAAnB,CAAiCgI,CAAjC,CACQe,CADR,EAC4BA,CAAAluB,KAD5B,CACmD,CAQzCqtB,0BAA2BA,EARc,CADnD,CAVtB,GAsBEI,CAEA,CAFYxvB,CAAA,CAAOmU,EAAA,CAAY2X,CAAZ,CAAP,CAAAoE,SAAA,EAEZ,CADAX,EAAArvB,MAAA,EACA,CAAAuvB,EAAA,CAAoBvsB,CAAA,CAAQssB,CAAR,CAAmBtI,CAAnB,CAxBtB,CA4BF,IAAI9e,CAAA4mB,SAAJ,CAWE,GAVAM,CAUI9uB,CAVU,CAAA,CAUVA,CATJqvB,EAAA,CAAkB,UAAlB,CAA8BpC,EAA9B,CAAiDrlB,CAAjD,CAA4DmnB,EAA5D,CASI/uB,CARJitB,EAQIjtB,CARgB4H,CAQhB5H,CANJovB,CAMIpvB,CANc/G,CAAA,CAAW2O,CAAA4mB,SAAX,CAAD,CACX5mB,CAAA4mB,SAAA,CAAmBO,EAAnB,CAAiCxD,CAAjC,CADW,CAEX3jB,CAAA4mB,SAIFxuB,CAFJovB,CAEIpvB,CAFa2vB,EAAA,CAAoBP,CAApB,CAEbpvB,CAAA4H,CAAA5H,QAAJ,CAAuB,CACrByvB,CAAA,CAAmB7nB,CAIjBonB,EAAA,CAp3JJ1c,EAAAvP,KAAA,CAi3JuBqsB,CAj3JvB,CAi3JE,CAGcQ,EAAA,CAAelI,EAAA,CAAa9f,CAAAioB,kBAAb,CAA0Cvc,CAAA,CAAK8b,CAAL,CAA1C,CAAf,CAHd,CACc,EAId9D;CAAA,CAAc0D,CAAA,CAAU,CAAV,CAEd,IAAwB,CAAxB,EAAIA,CAAAx2B,OAAJ,EAA6B8yB,CAAA7yB,SAA7B,GAAsDC,EAAtD,CACE,KAAMisB,GAAA,CAAe,OAAf,CAEFL,CAFE,CAEa,EAFb,CAAN,CAKFkL,CAAA,CAAYhE,CAAZ,CAA0BuD,EAA1B,CAAwCzD,CAAxC,CAEIwE,EAAAA,CAAmB,CAACjG,MAAO,EAAR,CAOnBkG,EAAAA,CAAqB/G,CAAA,CAAkBsC,CAAlB,CAA+B,EAA/B,CAAmCwE,CAAnC,CACzB,KAAIE,GAAwBtK,CAAAhpB,OAAA,CAAkBjD,CAAlB,CAAsB,CAAtB,CAAyBisB,CAAAltB,OAAzB,EAA8CiB,CAA9C,CAAkD,CAAlD,EAExBsyB,EAAJ,EACEkE,CAAA,CAAwBF,CAAxB,CAEFrK,EAAA,CAAaA,CAAAtnB,OAAA,CAAkB2xB,CAAlB,CAAA3xB,OAAA,CAA6C4xB,EAA7C,CACbE,GAAA,CAAwB3E,CAAxB,CAAuCuE,CAAvC,CAEA11B,EAAA,CAAKsrB,CAAAltB,OAjCgB,CAAvB,IAmCEu2B,GAAAjvB,KAAA,CAAkBsvB,CAAlB,CAIJ,IAAIxnB,CAAA6mB,YAAJ,CACEK,CAeA,CAfc,CAAA,CAed,CAdAO,EAAA,CAAkB,UAAlB,CAA8BpC,EAA9B,CAAiDrlB,CAAjD,CAA4DmnB,EAA5D,CAcA,CAbA9B,EAaA,CAboBrlB,CAapB,CAXIA,CAAA5H,QAWJ,GAVEyvB,CAUF,CAVqB7nB,CAUrB,EAPA0gB,CAOA,CAPa6H,CAAA,CAAmBzK,CAAAhpB,OAAA,CAAkBjD,CAAlB,CAAqBisB,CAAAltB,OAArB,CAAyCiB,CAAzC,CAAnB,CAAgEs1B,EAAhE,CACTxD,CADS,CACMC,CADN,CACoBqD,EADpB,EAC8CI,EAD9C,CACiEvD,CADjE,CAC6EC,CAD7E,CAC0F,CACjGgB,qBAAsBA,CAD2E,CAEjGZ,yBAA0BA,CAFuE,CAGjGkB,kBAAmBA,EAH8E,CAIjG2B,0BAA2BA,EAJsE,CAD1F,CAOb,CAAAx0B,CAAA,CAAKsrB,CAAAltB,OAhBP,KAiBO,IAAIoP,CAAAlF,QAAJ,CACL,GAAI,CACF2oB,CACA,CADSzjB,CAAAlF,QAAA,CAAkBqsB,EAAlB,CAAgCxD,CAAhC,CAA+C0D,EAA/C,CACT,CAAIh2B,CAAA,CAAWoyB,CAAX,CAAJ,CACEO,CAAA,CAAW,IAAX,CAAiBP,CAAjB,CAAyBJ,EAAzB,CAAoCC,EAApC,CADF,CAEWG,CAFX,EAGEO,CAAA,CAAWP,CAAAQ,IAAX;AAAuBR,CAAAS,KAAvB,CAAoCb,EAApC,CAA+CC,EAA/C,CALA,CAOF,MAAOvrB,EAAP,CAAU,CACViP,CAAA,CAAkBjP,EAAlB,CAAqBJ,EAAA,CAAYwvB,EAAZ,CAArB,CADU,CAKVnnB,CAAAuhB,SAAJ,GACEb,CAAAa,SACA,CADsB,CAAA,CACtB,CAAAuF,CAAA,CAAmB0B,IAAAC,IAAA,CAAS3B,CAAT,CAA2B9mB,CAAA+d,SAA3B,CAFrB,CAtKmD,CA6KrD2C,CAAA7lB,MAAA,CAAmBksB,CAAnB,EAAoE,CAAA,CAApE,GAAwCA,CAAAlsB,MACxC6lB,EAAAE,wBAAA,CAAqCqG,EACrCvG,EAAAK,+BAAA,CAA4C8D,CAC5CnE,EAAAM,sBAAA,CAAmCkG,CACnCxG,EAAAI,WAAA,CAAwBuG,EAExBpI,EAAA4F,8BAAA,CAAuDA,CAGvD,OAAOnE,EA7M8C,CAgevD2H,QAASA,EAAuB,CAACvK,CAAD,CAAa,CAE3C,IAF2C,IAElCprB,EAAI,CAF8B,CAE3BC,EAAKmrB,CAAAltB,OAArB,CAAwC8B,CAAxC,CAA4CC,CAA5C,CAAgDD,CAAA,EAAhD,CAAqD,CACxCA,IAAAA,EAAAA,CAAAA,CAAK,CAnqOtB,EAAA,CAAOJ,CAAA,CAAOX,MAAAkE,OAAA,CAmqOgBioB,CAAAjP,CAAWnc,CAAXmc,CAnqOhB,CAAP,CAmqOsC6Z,CAACtE,eAAgB,CAAA,CAAjBsE,CAnqOtC,CAmqOD5K,EAAA,CAAWprB,CAAX,CAAA,CAAgB,CADmC,CAFV,CAqB7CwvB,QAASA,GAAY,CAACyG,CAAD,CAAchvB,CAAd,CAAoB8B,CAApB,CAA8BsjB,CAA9B,CAA2CC,CAA3C,CAA4D4J,CAA5D,CACCC,CADD,CACc,CACjC,GAAIlvB,CAAJ,GAAaqlB,CAAb,CAA8B,MAAO,KACjCtpB,EAAAA,CAAQ,IACZ,IAAI0nB,CAAA9rB,eAAA,CAA6BqI,CAA7B,CAAJ,CAAwC,CAAA,IAC7BqG,CAAW8d,EAAAA,CAAa1J,CAAAvY,IAAA,CAAclC,CAAd,CAr1C1BkkB,WAq1C0B,CAAjC,KADsC,IAElChsB,EAAI,CAF8B,CAE3BW,EAAKsrB,CAAAltB,OADhB,CACmCiB,CADnC;AACuCW,CADvC,CAC2CX,CAAA,EAD3C,CAEE,GAAI,CAEF,GADAmO,CACI,CADQ8d,CAAA,CAAWjsB,CAAX,CACR,EAACktB,CAAD,GAAiBxuB,CAAjB,EAA8BwuB,CAA9B,CAA4C/e,CAAA+d,SAA5C,GAC0C,EAD1C,EACC/d,CAAAie,SAAAppB,QAAA,CAA2B4G,CAA3B,CADL,CACiD,CAC/C,GAAImtB,CAAJ,CAAmB,CACc,IAAA,EAAA,CAACtB,QAASsB,CAAV,CAAyBrB,MAAOsB,CAAhC,CAjsO7C,EAAA,CAAOv2B,CAAA,CAAOX,MAAAkE,OAAA,CAisOoBmK,CAjsOpB,CAAP,CAA8B0oB,CAA9B,CAgsOwB,CAGnBC,CAAAtzB,KAAA,CAAiB2K,CAAjB,CACAtK,EAAA,CAAQsK,CALuC,CAH/C,CAUF,MAAOjI,CAAP,CAAU,CAAEiP,CAAA,CAAkBjP,CAAlB,CAAF,CAbwB,CAgBxC,MAAOrC,EAnB0B,CA+BnCmtB,QAASA,EAAuB,CAAClpB,CAAD,CAAO,CACrC,GAAIyjB,CAAA9rB,eAAA,CAA6BqI,CAA7B,CAAJ,CACE,IADsC,IAClBmkB,EAAa1J,CAAAvY,IAAA,CAAclC,CAAd,CAl3C1BkkB,WAk3C0B,CADK,CAElChsB,EAAI,CAF8B,CAE3BW,EAAKsrB,CAAAltB,OADhB,CACmCiB,CADnC,CACuCW,CADvC,CAC2CX,CAAA,EAD3C,CAGE,GADAmO,CACI8oB,CADQhL,CAAA,CAAWjsB,CAAX,CACRi3B,CAAA9oB,CAAA8oB,aAAJ,CACE,MAAO,CAAA,CAIb,OAAO,CAAA,CAV8B,CAqBvCR,QAASA,GAAuB,CAAC/1B,CAAD,CAAMyD,CAAN,CAAW,CAAA,IACrC+yB,EAAU/yB,CAAAisB,MAD2B,CAErC+G,EAAUz2B,CAAA0vB,MAF2B,CAGrCtD,EAAWpsB,CAAA+uB,UAGfrwB,EAAA,CAAQsB,CAAR,CAAa,QAAQ,CAACP,CAAD,CAAQZ,CAAR,CAAa,CACX,GAArB,EAAIA,CAAA6E,OAAA,CAAW,CAAX,CAAJ,GACMD,CAAA,CAAI5E,CAAJ,CAGJ,EAHgB4E,CAAA,CAAI5E,CAAJ,CAGhB,GAH6BY,CAG7B,GAFEA,CAEF,GAFoB,OAAR,GAAAZ,CAAA,CAAkB,GAAlB,CAAwB,GAEpC,EAF2C4E,CAAA,CAAI5E,CAAJ,CAE3C,EAAAmB,CAAA02B,KAAA,CAAS73B,CAAT,CAAcY,CAAd,CAAqB,CAAA,CAArB,CAA2B+2B,CAAA,CAAQ33B,CAAR,CAA3B,CAJF,CADgC,CAAlC,CAUAH,EAAA,CAAQ+E,CAAR,CAAa,QAAQ,CAAChE,CAAD,CAAQZ,CAAR,CAAa,CACrB,OAAX,EAAIA,CAAJ,EACEstB,CAAA,CAAaC,CAAb,CAAuB3sB,CAAvB,CACA,CAAAO,CAAA,CAAI,OAAJ,CAAA;CAAgBA,CAAA,CAAI,OAAJ,CAAA,CAAeA,CAAA,CAAI,OAAJ,CAAf,CAA8B,GAA9B,CAAoC,EAApD,EAA0DP,CAF5D,EAGkB,OAAX,EAAIZ,CAAJ,EACLutB,CAAAzqB,KAAA,CAAc,OAAd,CAAuByqB,CAAAzqB,KAAA,CAAc,OAAd,CAAvB,CAAgD,GAAhD,CAAsDlC,CAAtD,CACA,CAAAO,CAAA,MAAA,EAAgBA,CAAA,MAAA,CAAeA,CAAA,MAAf,CAA8B,GAA9B,CAAoC,EAApD,EAA0DP,CAFrD,EAMqB,GANrB,EAMIZ,CAAA6E,OAAA,CAAW,CAAX,CANJ,EAM6B1D,CAAAjB,eAAA,CAAmBF,CAAnB,CAN7B,GAOLmB,CAAA,CAAInB,CAAJ,CACA,CADWY,CACX,CAAAg3B,CAAA,CAAQ53B,CAAR,CAAA,CAAe23B,CAAA,CAAQ33B,CAAR,CARV,CAJyB,CAAlC,CAhByC,CAkC3Cm3B,QAASA,EAAkB,CAACzK,CAAD,CAAaqJ,CAAb,CAA2B+B,CAA3B,CACvBhJ,CADuB,CACTmH,CADS,CACUvD,CADV,CACsBC,CADtB,CACmC9E,CADnC,CAC2D,CAAA,IAChFkK,EAAY,EADoE,CAEhFC,CAFgF,CAGhFC,CAHgF,CAIhFC,EAA4BnC,CAAA,CAAa,CAAb,CAJoD,CAKhFoC,EAAqBzL,CAAAjK,MAAA,EAL2D,CAOhF2V,EAAuBl3B,CAAA,CAAO,EAAP,CAAWi3B,CAAX,CAA+B,CACpD1C,YAAa,IADuC,CACjC/F,WAAY,IADqB,CACf1oB,QAAS,IADM,CACAktB,oBAAqBiE,CADrB,CAA/B,CAPyD,CAUhF1C,EAAex1B,CAAA,CAAWk4B,CAAA1C,YAAX,CAAD,CACR0C,CAAA1C,YAAA,CAA+BM,CAA/B,CAA6C+B,CAA7C,CADQ,CAERK,CAAA1C,YAZ0E,CAahFoB,EAAoBsB,CAAAtB,kBAExBd,EAAArvB,MAAA,EAEAkR,EAAA,CAAiBR,CAAAihB,sBAAA,CAA2B5C,CAA3B,CAAjB,CAAA6C,KAAA,CACQ,QAAQ,CAACC,CAAD,CAAU,CAAA,IAClBjG,CADkB,CACyBrD,CAE/CsJ,EAAA,CAAU5B,EAAA,CAAoB4B,CAApB,CAEV,IAAIJ,CAAAnxB,QAAJ,CAAgC,CAI5BgvB,CAAA,CA/1KJ1c,EAAAvP,KAAA,CA41KuBwuB,CA51KvB,CA41KE,CAGc3B,EAAA,CAAelI,EAAA,CAAamI,CAAb;AAAgCvc,CAAA,CAAKie,CAAL,CAAhC,CAAf,CAHd,CACc,EAIdjG,EAAA,CAAc0D,CAAA,CAAU,CAAV,CAEd,IAAwB,CAAxB,EAAIA,CAAAx2B,OAAJ,EAA6B8yB,CAAA7yB,SAA7B,GAAsDC,EAAtD,CACE,KAAMisB,GAAA,CAAe,OAAf,CAEFwM,CAAA5vB,KAFE,CAEuBktB,CAFvB,CAAN,CAKF+C,CAAA,CAAoB,CAAC3H,MAAO,EAAR,CACpB2F,EAAA,CAAY1H,CAAZ,CAA0BiH,CAA1B,CAAwCzD,CAAxC,CACA,KAAIyE,EAAqB/G,CAAA,CAAkBsC,CAAlB,CAA+B,EAA/B,CAAmCkG,CAAnC,CAErBv2B,EAAA,CAASk2B,CAAA1uB,MAAT,CAAJ,EACEwtB,CAAA,CAAwBF,CAAxB,CAEFrK,EAAA,CAAaqK,CAAA3xB,OAAA,CAA0BsnB,CAA1B,CACbwK,GAAA,CAAwBY,CAAxB,CAAgCU,CAAhC,CAtB8B,CAAhC,IAwBElG,EACA,CADc4F,CACd,CAAAnC,CAAAjvB,KAAA,CAAkByxB,CAAlB,CAGF7L,EAAAxjB,QAAA,CAAmBkvB,CAAnB,CAEAJ,EAAA,CAA0B/H,EAAA,CAAsBvD,CAAtB,CAAkC4F,CAAlC,CAA+CwF,CAA/C,CACtB7B,CADsB,CACHF,CADG,CACWoC,CADX,CAC+BzF,CAD/B,CAC2CC,CAD3C,CAEtB9E,CAFsB,CAG1BhuB,EAAA,CAAQivB,CAAR,CAAsB,QAAQ,CAACnsB,CAAD,CAAOlC,CAAP,CAAU,CAClCkC,CAAJ,EAAY2vB,CAAZ,GACExD,CAAA,CAAaruB,CAAb,CADF,CACoBs1B,CAAA,CAAa,CAAb,CADpB,CADsC,CAAxC,CAOA,KAFAkC,CAEA,CAF2BjK,CAAA,CAAa+H,CAAA,CAAa,CAAb,CAAA9b,WAAb,CAAyCgc,CAAzC,CAE3B,CAAO8B,CAAAv4B,OAAP,CAAA,CAAyB,CACnBiK,CAAAA,CAAQsuB,CAAAtV,MAAA,EACRgW,EAAAA,CAAyBV,CAAAtV,MAAA,EAFN,KAGnBiW,EAAkBX,CAAAtV,MAAA,EAHC,CAInB6N,EAAoByH,CAAAtV,MAAA,EAJD,CAKnB6Q,EAAWyC,CAAA,CAAa,CAAb,CAEf,IAAI4C,CAAAlvB,CAAAkvB,YAAJ,CAAA,CAEA,GAAIF,CAAJ,GAA+BP,CAA/B,CAA0D,CACxD,IAAIU,EAAaH,CAAAjL,UAEXK,EAAA4F,8BAAN,EACI0E,CAAAnxB,QADJ,GAGEssB,CAHF,CAGa3Y,EAAA,CAAY2X,CAAZ,CAHb,CAKAkE,EAAA,CAAYkC,CAAZ,CAA6BlyB,CAAA,CAAOiyB,CAAP,CAA7B,CAA6DnF,CAA7D,CAGAhG,EAAA,CAAa9mB,CAAA,CAAO8sB,CAAP,CAAb,CAA+BsF,CAA/B,CAXwD,CAcxD3J,CAAA,CADE+I,CAAAxI,wBAAJ,CAC2BC,CAAA,CAAwBhmB,CAAxB,CAA+BuuB,CAAAtI,WAA/B;AAAmEY,CAAnE,CAD3B,CAG2BA,CAE3B0H,EAAA,CAAwBC,CAAxB,CAAkDxuB,CAAlD,CAAyD6pB,CAAzD,CAAmExE,CAAnE,CACEG,CADF,CApBA,CAPuB,CA8BzB8I,CAAA,CAAY,IA3EU,CAD1B,CA+EA,OAAOc,SAA0B,CAACC,CAAD,CAAoBrvB,CAApB,CAA2B9G,CAA3B,CAAiC6H,CAAjC,CAA8C8lB,CAA9C,CAAiE,CAC5FrB,CAAAA,CAAyBqB,CACzB7mB,EAAAkvB,YAAJ,GACIZ,CAAJ,CACEA,CAAA9zB,KAAA,CAAewF,CAAf,CACe9G,CADf,CAEe6H,CAFf,CAGeykB,CAHf,CADF,EAMM+I,CAAAxI,wBAGJ,GAFEP,CAEF,CAF2BQ,CAAA,CAAwBhmB,CAAxB,CAA+BuuB,CAAAtI,WAA/B,CAAmEY,CAAnE,CAE3B,EAAA0H,CAAA,CAAwBC,CAAxB,CAAkDxuB,CAAlD,CAAyD9G,CAAzD,CAA+D6H,CAA/D,CAA4EykB,CAA5E,CATF,CADA,CAFgG,CAhGd,CAqHtF8C,QAASA,EAAU,CAACriB,CAAD,CAAIqlB,CAAJ,CAAO,CACxB,IAAIgE,EAAOhE,CAAApI,SAAPoM,CAAoBrpB,CAAAid,SACxB,OAAa,EAAb,GAAIoM,CAAJ,CAAuBA,CAAvB,CACIrpB,CAAAnH,KAAJ,GAAewsB,CAAAxsB,KAAf,CAA+BmH,CAAAnH,KAAD,CAAUwsB,CAAAxsB,KAAV,CAAqB,EAArB,CAAyB,CAAvD,CACOmH,CAAAlM,MADP,CACiBuxB,CAAAvxB,MAJO,CAQ1B6yB,QAASA,GAAiB,CAAC2C,CAAD,CAAOC,CAAP,CAA0BrqB,CAA1B,CAAqCxL,CAArC,CAA8C,CACtE,GAAI61B,CAAJ,CACE,KAAMtN,GAAA,CAAe,UAAf,CACFsN,CAAA1wB,KADE,CACsBqG,CAAArG,KADtB,CACsCywB,CADtC,CAC4CzyB,EAAA,CAAYnD,CAAZ,CAD5C,CAAN,CAFoE,CAQxEyuB,QAASA,EAA2B,CAACnF,CAAD,CAAawM,CAAb,CAAmB,CACrD,IAAIC,EAAgBnjB,CAAA,CAAakjB,CAAb,CAAmB,CAAA,CAAnB,CAChBC,EAAJ,EACEzM,CAAAzoB,KAAA,CAAgB,CACd0oB,SAAU,CADI,CAEdjjB,QAAS0vB,QAAiC,CAACC,CAAD,CAAe,CACnDC,CAAAA,CAAqBD,CAAA5b,OAAA,EAAzB,KACI8b,EAAmB,CAAE/5B,CAAA85B,CAAA95B,OAIrB+5B,EAAJ,EAAsB7vB,CAAA8vB,kBAAA,CAA0BF,CAA1B,CAEtB,OAAOG,SAA8B,CAAChwB,CAAD,CAAQ9G,CAAR,CAAc,CACjD,IAAI8a,EAAS9a,CAAA8a,OAAA,EACR8b;CAAL,EAAuB7vB,CAAA8vB,kBAAA,CAA0B/b,CAA1B,CACvB/T,EAAAgwB,iBAAA,CAAyBjc,CAAzB,CAAiC0b,CAAAQ,YAAjC,CACAlwB,EAAAjH,OAAA,CAAa22B,CAAb,CAA4BS,QAAiC,CAACh5B,CAAD,CAAQ,CACnE+B,CAAA,CAAK,CAAL,CAAAmrB,UAAA,CAAoBltB,CAD+C,CAArE,CAJiD,CARI,CAF3C,CAAhB,CAHmD,CA2BvD8tB,QAASA,GAAY,CAACtT,CAAD,CAAOoa,CAAP,CAAiB,CACpCpa,CAAA,CAAO/X,CAAA,CAAU+X,CAAV,EAAkB,MAAlB,CACP,QAAQA,CAAR,EACA,KAAK,KAAL,CACA,KAAK,MAAL,CACE,IAAIye,EAAU36B,CAAAsa,cAAA,CAAuB,KAAvB,CACdqgB,EAAA/f,UAAA,CAAoB,GAApB,CAA0BsB,CAA1B,CAAiC,GAAjC,CAAuCoa,CAAvC,CAAkD,IAAlD,CAAyDpa,CAAzD,CAAgE,GAChE,OAAOye,EAAA5f,WAAA,CAAmB,CAAnB,CAAAA,WACT,SACE,MAAOub,EAPT,CAFoC,CActCsE,QAASA,EAAiB,CAACn3B,CAAD,CAAOo3B,CAAP,CAA2B,CACnD,GAA0B,QAA1B,EAAIA,CAAJ,CACE,MAAO3iB,EAAA4iB,KAET,KAAI/wB,EAAM9F,EAAA,CAAUR,CAAV,CAEV,IAA0B,WAA1B,EAAIo3B,CAAJ,EACY,MADZ,EACK9wB,CADL,EAC4C,QAD5C,EACsB8wB,CADtB,EAEY,KAFZ,EAEK9wB,CAFL,GAE4C,KAF5C,EAEsB8wB,CAFtB,EAG4C,OAH5C,EAGsBA,CAHtB,EAIE,MAAO3iB,EAAA6iB,aAV0C,CAerDtI,QAASA,GAA2B,CAAChvB,CAAD,CAAO+pB,CAAP,CAAmB9rB,CAAnB,CAA0B2H,CAA1B,CAAgC2xB,CAAhC,CAA8C,CAChF,IAAIC,EAAiBL,CAAA,CAAkBn3B,CAAlB,CAAwB4F,CAAxB,CACrB2xB,EAAA,CAAe/N,CAAA,CAAqB5jB,CAArB,CAAf,EAA6C2xB,CAE7C,KAAIf,EAAgBnjB,CAAA,CAAapV,CAAb,CAAoB,CAAA,CAApB;AAA0Bu5B,CAA1B,CAA0CD,CAA1C,CAGpB,IAAKf,CAAL,CAAA,CAGA,GAAa,UAAb,GAAI5wB,CAAJ,EAA+C,QAA/C,GAA2BpF,EAAA,CAAUR,CAAV,CAA3B,CACE,KAAMgpB,GAAA,CAAe,UAAf,CAEFplB,EAAA,CAAY5D,CAAZ,CAFE,CAAN,CAKF+pB,CAAAzoB,KAAA,CAAgB,CACd0oB,SAAU,GADI,CAEdjjB,QAASA,QAAQ,EAAG,CAChB,MAAO,CACLmpB,IAAKuH,QAAiC,CAAC3wB,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB,CACvD8xB,CAAAA,CAAe9xB,CAAA8xB,YAAfA,GAAoC9xB,CAAA8xB,YAApCA,CAAuD,EAAvDA,CAEJ,IAAIvI,CAAAtiB,KAAA,CAA+BxB,CAA/B,CAAJ,CACE,KAAMojB,GAAA,CAAe,aAAf,CAAN,CAMF,IAAI0O,EAAWv3B,CAAA,CAAKyF,CAAL,CACX8xB,EAAJ,GAAiBz5B,CAAjB,GAIEu4B,CACA,CADgBkB,CAChB,EAD4BrkB,CAAA,CAAaqkB,CAAb,CAAuB,CAAA,CAAvB,CAA6BF,CAA7B,CAA6CD,CAA7C,CAC5B,CAAAt5B,CAAA,CAAQy5B,CALV,CAUKlB,EAAL,GAKAr2B,CAAA,CAAKyF,CAAL,CAGA,CAHa4wB,CAAA,CAAc1vB,CAAd,CAGb,CADA6wB,CAAC1F,CAAA,CAAYrsB,CAAZ,CAAD+xB,GAAuB1F,CAAA,CAAYrsB,CAAZ,CAAvB+xB,CAA2C,EAA3CA,UACA,CAD0D,CAAA,CAC1D,CAAA93B,CAACM,CAAA8xB,YAADpyB,EAAqBM,CAAA8xB,YAAA,CAAiBrsB,CAAjB,CAAAssB,QAArBryB,EAAuDiH,CAAvDjH,QAAA,CACS22B,CADT,CACwBS,QAAiC,CAACS,CAAD,CAAWE,CAAX,CAAqB,CAO7D,OAAb,GAAIhyB,CAAJ,EAAwB8xB,CAAxB,EAAoCE,CAApC,CACEz3B,CAAA03B,aAAA,CAAkBH,CAAlB,CAA4BE,CAA5B,CADF,CAGEz3B,CAAA+0B,KAAA,CAAUtvB,CAAV,CAAgB8xB,CAAhB,CAVwE,CAD9E,CARA,CArB2D,CADxD,CADS,CAFN,CAAhB,CATA,CAPgF,CAgFlF7D,QAASA,EAAW,CAAC1H,CAAD,CAAe2L,CAAf,CAAiCC,CAAjC,CAA0C,CAAA,IACxDC,EAAuBF,CAAA,CAAiB,CAAjB,CADiC,CAExDG,EAAcH,CAAAj7B,OAF0C,CAGxDie,EAASkd,CAAAzd,WAH+C,CAIxDzc,CAJwD,CAIrDW,CAEP,IAAI0tB,CAAJ,CACE,IAAKruB,CAAO,CAAH,CAAG,CAAAW,CAAA,CAAK0tB,CAAAtvB,OAAjB,CAAsCiB,CAAtC;AAA0CW,CAA1C,CAA8CX,CAAA,EAA9C,CACE,GAAIquB,CAAA,CAAaruB,CAAb,CAAJ,EAAuBk6B,CAAvB,CAA6C,CAC3C7L,CAAA,CAAaruB,CAAA,EAAb,CAAA,CAAoBi6B,CACJG,EAAAA,CAAKv5B,CAALu5B,CAASD,CAATC,CAAuB,CAAvC,KAAS,IACAt5B,EAAKutB,CAAAtvB,OADd,CAEK8B,CAFL,CAESC,CAFT,CAEaD,CAAA,EAAA,CAAKu5B,CAAA,EAFlB,CAGMA,CAAJ,CAASt5B,CAAT,CACEutB,CAAA,CAAaxtB,CAAb,CADF,CACoBwtB,CAAA,CAAa+L,CAAb,CADpB,CAGE,OAAO/L,CAAA,CAAaxtB,CAAb,CAGXwtB,EAAAtvB,OAAA,EAAuBo7B,CAAvB,CAAqC,CAKjC9L,EAAA/uB,QAAJ,GAA6B46B,CAA7B,GACE7L,CAAA/uB,QADF,CACyB26B,CADzB,CAGA,MAnB2C,CAwB7Cjd,CAAJ,EACEA,CAAAqd,aAAA,CAAoBJ,CAApB,CAA6BC,CAA7B,CAIEvhB,EAAAA,CAAWla,CAAAma,uBAAA,EACfD,EAAAG,YAAA,CAAqBohB,CAArB,CAKAn0B,EAAA,CAAOk0B,CAAP,CAAA9wB,KAAA,CAAqBpD,CAAA,CAAOm0B,CAAP,CAAA/wB,KAAA,EAArB,CAKKuB,GAAL,EAUEU,EACA,CADmC,CAAA,CACnC,CAAAV,EAAAM,UAAA,CAAiB,CAACkvB,CAAD,CAAjB,CAXF,EACE,OAAOn0B,CAAA2b,MAAA,CAAawY,CAAA,CAAqBn0B,CAAAu0B,QAArB,CAAb,CAaAC,EAAAA,CAAI,CAAb,KAAgBC,CAAhB,CAAqBR,CAAAj7B,OAArB,CAA8Cw7B,CAA9C,CAAkDC,CAAlD,CAAsDD,CAAA,EAAtD,CACM53B,CAGJ,CAHcq3B,CAAA,CAAiBO,CAAjB,CAGd,CAFAx0B,CAAA,CAAOpD,CAAP,CAAA0nB,OAAA,EAEA,CADA1R,CAAAG,YAAA,CAAqBnW,CAArB,CACA,CAAA,OAAOq3B,CAAA,CAAiBO,CAAjB,CAGTP,EAAA,CAAiB,CAAjB,CAAA,CAAsBC,CACtBD,EAAAj7B,OAAA,CAA0B,CAtEkC,CA0E9DyzB,QAASA,EAAkB,CAACvtB,CAAD,CAAKw1B,CAAL,CAAiB,CAC1C,MAAOh6B,EAAA,CAAO,QAAQ,EAAG,CAAE,MAAOwE,EAAAG,MAAA,CAAS,IAAT,CAAexE,SAAf,CAAT,CAAlB,CAAyDqE,CAAzD,CAA6Dw1B,CAA7D,CADmC,CAK5C3F,QAASA,EAAY,CAAClD,CAAD,CAAS5oB,CAAT,CAAgB8jB,CAAhB,CAA0BsC,CAA1B,CAAiCY,CAAjC,CAA8C/C,CAA9C,CAA4D,CAC/E,GAAI,CACF2E,CAAA,CAAO5oB,CAAP,CAAc8jB,CAAd,CAAwBsC,CAAxB,CAA+BY,CAA/B,CAA4C/C,CAA5C,CADE,CAEF,MAAO/mB,CAAP,CAAU,CACViP,CAAA,CAAkBjP,CAAlB;AAAqBJ,EAAA,CAAYgnB,CAAZ,CAArB,CADU,CAHmE,CAvkDjF,IAAIwC,GAAaA,QAAQ,CAAC3sB,CAAD,CAAU+3B,CAAV,CAA4B,CACnD,GAAIA,CAAJ,CAAsB,CACpB,IAAI76B,EAAOC,MAAAD,KAAA,CAAY66B,CAAZ,CAAX,CACI16B,CADJ,CACOya,CADP,CACUlb,CAELS,EAAA,CAAI,CAAT,KAAYya,CAAZ,CAAgB5a,CAAAd,OAAhB,CAA6BiB,CAA7B,CAAiCya,CAAjC,CAAoCza,CAAA,EAApC,CACET,CACA,CADMM,CAAA,CAAKG,CAAL,CACN,CAAA,IAAA,CAAKT,CAAL,CAAA,CAAYm7B,CAAA,CAAiBn7B,CAAjB,CANM,CAAtB,IASE,KAAA6wB,MAAA,CAAa,EAGf,KAAAX,UAAA,CAAiB9sB,CAbkC,CAgBrD2sB,GAAAlN,UAAA,CAAuB,CAgBrBuY,WAAYrK,EAhBS,CA8BrBsK,UAAWA,QAAQ,CAACC,CAAD,CAAW,CACxBA,CAAJ,EAAkC,CAAlC,CAAgBA,CAAA97B,OAAhB,EACE0V,CAAAsK,SAAA,CAAkB,IAAA0Q,UAAlB,CAAkCoL,CAAlC,CAF0B,CA9BT,CA+CrBC,aAAcA,QAAQ,CAACD,CAAD,CAAW,CAC3BA,CAAJ,EAAkC,CAAlC,CAAgBA,CAAA97B,OAAhB,EACE0V,CAAAuK,YAAA,CAAqB,IAAAyQ,UAArB,CAAqCoL,CAArC,CAF6B,CA/CZ,CAiErBd,aAAcA,QAAQ,CAACgB,CAAD,CAAa5C,CAAb,CAAyB,CAC7C,IAAI6C,EAAQC,EAAA,CAAgBF,CAAhB,CAA4B5C,CAA5B,CACR6C,EAAJ,EAAaA,CAAAj8B,OAAb,EACE0V,CAAAsK,SAAA,CAAkB,IAAA0Q,UAAlB,CAAkCuL,CAAlC,CAIF,EADIE,CACJ,CADeD,EAAA,CAAgB9C,CAAhB,CAA4B4C,CAA5B,CACf,GAAgBG,CAAAn8B,OAAhB,EACE0V,CAAAuK,YAAA,CAAqB,IAAAyQ,UAArB,CAAqCyL,CAArC,CAR2C,CAjE1B,CAsFrB9D,KAAMA,QAAQ,CAAC73B,CAAD,CAAMY,CAAN,CAAag7B,CAAb,CAAwB7P,CAAxB,CAAkC,CAAA,IAK1CppB,EAAO,IAAAutB,UAAA,CAAe,CAAf,CALmC,CAM1C2L;AAAa9d,EAAA,CAAmBpb,CAAnB,CAAyB3C,CAAzB,CAN6B,CAO1C87B,EAAa3d,EAAA,CAAmBxb,CAAnB,CAAyB3C,CAAzB,CAP6B,CAQ1C+7B,EAAW/7B,CAGX67B,EAAJ,EACE,IAAA3L,UAAArtB,KAAA,CAAoB7C,CAApB,CAAyBY,CAAzB,CACA,CAAAmrB,CAAA,CAAW8P,CAFb,EAGWC,CAHX,GAIE,IAAA,CAAKA,CAAL,CACA,CADmBl7B,CACnB,CAAAm7B,CAAA,CAAWD,CALb,CAQA,KAAA,CAAK97B,CAAL,CAAA,CAAYY,CAGRmrB,EAAJ,CACE,IAAA8E,MAAA,CAAW7wB,CAAX,CADF,CACoB+rB,CADpB,EAGEA,CAHF,CAGa,IAAA8E,MAAA,CAAW7wB,CAAX,CAHb,IAKI,IAAA6wB,MAAA,CAAW7wB,CAAX,CALJ,CAKsB+rB,CALtB,CAKiCrhB,EAAA,CAAW1K,CAAX,CAAgB,GAAhB,CALjC,CASA4C,EAAA,CAAWO,EAAA,CAAU,IAAA+sB,UAAV,CAEX,IAAkB,GAAlB,GAAKttB,CAAL,EAAiC,MAAjC,GAAyB5C,CAAzB,EACkB,KADlB,GACK4C,CADL,EACmC,KADnC,GAC2B5C,CAD3B,CAGE,IAAA,CAAKA,CAAL,CAAA,CAAYY,CAAZ,CAAoB2O,CAAA,CAAc3O,CAAd,CAA6B,KAA7B,GAAqBZ,CAArB,CAHtB,KAIO,IAAiB,KAAjB,GAAI4C,CAAJ,EAAkC,QAAlC,GAA0B5C,CAA1B,CAA4C,CAejD,IAbIkE,IAAAA,EAAS,EAATA,CAGA83B,EAAgB1hB,CAAA,CAAK1Z,CAAL,CAHhBsD,CAKA+3B,EAAa,qCALb/3B,CAMA2P,EAAU,IAAA9J,KAAA,CAAUiyB,CAAV,CAAA,CAA2BC,CAA3B,CAAwC,KANlD/3B,CASAg4B,EAAUF,CAAA94B,MAAA,CAAoB2Q,CAApB,CATV3P,CAYAi4B,EAAoB/E,IAAAgF,MAAA,CAAWF,CAAA18B,OAAX,CAA4B,CAA5B,CAZpB0E,CAaKzD,EAAI,CAAb,CAAgBA,CAAhB,CAAoB07B,CAApB,CAAuC17B,CAAA,EAAvC,CACE,IAAI47B,EAAe,CAAfA,CAAW57B,CAAf,CAEAyD,EAAAA,CAAAA,CAAUqL,CAAA,CAAc+K,CAAA,CAAK4hB,CAAA,CAAQG,CAAR,CAAL,CAAd,CAAuC,CAAA,CAAvC,CAFV,CAIAn4B,EAAAA,CAAAA,EAAW,GAAXA,CAAiBoW,CAAA,CAAK4hB,CAAA,CAAQG,CAAR,CAAmB,CAAnB,CAAL,CAAjBn4B,CAIEo4B,EAAAA,CAAYhiB,CAAA,CAAK4hB,CAAA,CAAY,CAAZ,CAAQz7B,CAAR,CAAL,CAAAyC,MAAA,CAA2B,IAA3B,CAGhBgB,EAAA,EAAUqL,CAAA,CAAc+K,CAAA,CAAKgiB,CAAA,CAAU,CAAV,CAAL,CAAd,CAAkC,CAAA,CAAlC,CAGe,EAAzB,GAAIA,CAAA98B,OAAJ;CACE0E,CADF,EACa,GADb,CACmBoW,CAAA,CAAKgiB,CAAA,CAAU,CAAV,CAAL,CADnB,CAGA,KAAA,CAAKt8B,CAAL,CAAA,CAAYY,CAAZ,CAAoBsD,CAjC6B,CAoCjC,CAAA,CAAlB,GAAI03B,CAAJ,GACgB,IAAd,GAAIh7B,CAAJ,EAAsBA,CAAtB,GAAgCzB,CAAhC,CACE,IAAA+wB,UAAAqM,WAAA,CAA0BxQ,CAA1B,CADF,CAGE,IAAAmE,UAAAptB,KAAA,CAAoBipB,CAApB,CAA8BnrB,CAA9B,CAJJ,CAUA,EADIg0B,CACJ,CADkB,IAAAA,YAClB,GAAe/0B,CAAA,CAAQ+0B,CAAA,CAAYmH,CAAZ,CAAR,CAA+B,QAAQ,CAACr2B,CAAD,CAAK,CACzD,GAAI,CACFA,CAAA,CAAG9E,CAAH,CADE,CAEF,MAAO+F,CAAP,CAAU,CACViP,CAAA,CAAkBjP,CAAlB,CADU,CAH6C,CAA5C,CAnF+B,CAtF3B,CAqMrBguB,SAAUA,QAAQ,CAAC30B,CAAD,CAAM0F,CAAN,CAAU,CAAA,IACtBmqB,EAAQ,IADc,CAEtB+E,EAAe/E,CAAA+E,YAAfA,GAAqC/E,CAAA+E,YAArCA,CAAyDxnB,EAAA,EAAzDwnB,CAFsB,CAGtB4H,EAAa5H,CAAA,CAAY50B,CAAZ,CAAbw8B,GAAkC5H,CAAA,CAAY50B,CAAZ,CAAlCw8B,CAAqD,EAArDA,CAEJA,EAAAv4B,KAAA,CAAeyB,CAAf,CACAoR,EAAAvU,WAAA,CAAsB,QAAQ,EAAG,CAC1B+3B,CAAAkC,CAAAlC,QAAL,EAA0BzK,CAAA3vB,eAAA,CAAqBF,CAArB,CAA1B,EAEE0F,CAAA,CAAGmqB,CAAA,CAAM7vB,CAAN,CAAH,CAH6B,CAAjC,CAOA,OAAO,SAAQ,EAAG,CAChBsD,EAAA,CAAYk5B,CAAZ,CAAuB92B,CAAvB,CADgB,CAbQ,CArMP,CAlB+D,KAqPlF+2B,GAAczmB,CAAAymB,YAAA,EArPoE,CAsPlFC,GAAY1mB,CAAA0mB,UAAA,EAtPsE,CAuPlF/F,GAAsC,IAAhB,EAAC8F,EAAD,EAAsC,IAAtC,EAAwBC,EAAxB,CAChB96B,EADgB,CAEhB+0B,QAA4B,CAACnB,CAAD,CAAW,CACvC,MAAOA,EAAAxuB,QAAA,CAAiB,OAAjB,CAA0By1B,EAA1B,CAAAz1B,QAAA,CAA+C,KAA/C,CAAsD01B,EAAtD,CADgC,CAzPqC,CA4PlFpL;AAAkB,cAEtB5nB,EAAAgwB,iBAAA,CAA2BtwB,CAAA,CAAmBswB,QAAyB,CAACnM,CAAD,CAAWoP,CAAX,CAAoB,CACzF,IAAInR,EAAW+B,CAAA3jB,KAAA,CAAc,UAAd,CAAX4hB,EAAwC,EAExC5rB,EAAA,CAAQ+8B,CAAR,CAAJ,CACEnR,CADF,CACaA,CAAApmB,OAAA,CAAgBu3B,CAAhB,CADb,CAGEnR,CAAAvnB,KAAA,CAAc04B,CAAd,CAGFpP,EAAA3jB,KAAA,CAAc,UAAd,CAA0B4hB,CAA1B,CATyF,CAAhE,CAUvB7pB,CAEJ+H,EAAA8vB,kBAAA,CAA4BpwB,CAAA,CAAmBowB,QAA0B,CAACjM,CAAD,CAAW,CAClFD,CAAA,CAAaC,CAAb,CAAuB,YAAvB,CADkF,CAAxD,CAExB5rB,CAEJ+H,EAAAklB,eAAA,CAAyBxlB,CAAA,CAAmBwlB,QAAuB,CAACrB,CAAD,CAAW9jB,CAAX,CAAkBmzB,CAAlB,CAA4BC,CAA5B,CAAwC,CAEzGtP,CAAA3jB,KAAA,CADegzB,CAAAE,CAAYD,CAAA,CAAa,yBAAb,CAAyC,eAArDC,CAAwE,QACvF,CAAwBrzB,CAAxB,CAFyG,CAAlF,CAGrB9H,CAEJ+H,EAAAukB,gBAAA,CAA0B7kB,CAAA,CAAmB6kB,QAAwB,CAACV,CAAD,CAAWqP,CAAX,CAAqB,CACxFtP,CAAA,CAAaC,CAAb,CAAuBqP,CAAA,CAAW,kBAAX,CAAgC,UAAvD,CADwF,CAAhE,CAEtBj7B,CAEJ,OAAO+H,EAvR+E,CAJ5E,CAzL6C,CAqxD3DqnB,QAASA,GAAkB,CAACxoB,CAAD,CAAO,CAChC,MAAOmQ,GAAA,CAAUnQ,CAAAvB,QAAA,CAAauqB,EAAb,CAA4B,EAA5B,CAAV,CADyB,CAgElCmK,QAASA,GAAe,CAACqB,CAAD,CAAOC,CAAP,CAAa,CAAA,IAC/BC,EAAS,EADsB,CAE/BC,EAAUH,CAAA75B,MAAA,CAAW,KAAX,CAFqB,CAG/Bi6B,EAAUH,CAAA95B,MAAA,CAAW,KAAX,CAHqB,CAM1BzC,EAAI,CADb,EAAA,CACA,IAAA,CAAgBA,CAAhB,CAAoBy8B,CAAA19B,OAApB,CAAoCiB,CAAA,EAApC,CAAyC,CAEvC,IADA,IAAI28B;AAAQF,CAAA,CAAQz8B,CAAR,CAAZ,CACSa,EAAI,CAAb,CAAgBA,CAAhB,CAAoB67B,CAAA39B,OAApB,CAAoC8B,CAAA,EAApC,CACE,GAAI87B,CAAJ,EAAaD,CAAA,CAAQ77B,CAAR,CAAb,CAAyB,SAAS,CAEpC27B,EAAA,GAA2B,CAAhB,CAAAA,CAAAz9B,OAAA,CAAoB,GAApB,CAA0B,EAArC,EAA2C49B,CALJ,CAOzC,MAAOH,EAb4B,CAgBrCrG,QAASA,GAAc,CAACyG,CAAD,CAAU,CAC/BA,CAAA,CAAU72B,CAAA,CAAO62B,CAAP,CACV,KAAI58B,EAAI48B,CAAA79B,OAER,IAAS,CAAT,EAAIiB,CAAJ,CACE,MAAO48B,EAGT,KAAA,CAAO58B,CAAA,EAAP,CAAA,CAz/MsBqxB,CA2/MpB,GADWuL,CAAA16B,CAAQlC,CAARkC,CACPlD,SAAJ,EACEiE,EAAAvD,KAAA,CAAYk9B,CAAZ,CAAqB58B,CAArB,CAAwB,CAAxB,CAGJ,OAAO48B,EAdwB,CA2BjC5nB,QAASA,GAAmB,EAAG,CAAA,IACzBgb,EAAc,EADW,CAEzB6M,EAAU,CAAA,CAFe,CAGzBC,EAAY,yBAWhB,KAAAC,SAAA,CAAgBC,QAAQ,CAACl1B,CAAD,CAAOiE,CAAP,CAAoB,CAC1CC,EAAA,CAAwBlE,CAAxB,CAA8B,YAA9B,CACItG,EAAA,CAASsG,CAAT,CAAJ,CACErH,CAAA,CAAOuvB,CAAP,CAAoBloB,CAApB,CADF,CAGEkoB,CAAA,CAAYloB,CAAZ,CAHF,CAGsBiE,CALoB,CAc5C,KAAAkxB,aAAA,CAAoBC,QAAQ,EAAG,CAC7BL,CAAA,CAAU,CAAA,CADmB,CAK/B,KAAAle,KAAA,CAAY,CAAC,WAAD,CAAc,SAAd,CAAyB,QAAQ,CAAC4D,CAAD,CAAY9K,CAAZ,CAAqB,CA4FhE0lB,QAASA,EAAa,CAAClb,CAAD,CAAS2R,CAAT,CAAqBzR,CAArB,CAA+Bra,CAA/B,CAAqC,CACzD,GAAMma,CAAAA,CAAN,EAAgB,CAAAzgB,CAAA,CAASygB,CAAAkR,OAAT,CAAhB,CACE,KAAMx0B,EAAA,CAAO,aAAP,CAAA,CAAsB,OAAtB,CAEJmJ,CAFI,CAEE8rB,CAFF,CAAN,CAKF3R,CAAAkR,OAAA,CAAcS,CAAd,CAAA,CAA4BzR,CAP6B,CA/D3D,MAAO,SAAQ,CAACib,CAAD,CAAanb,CAAb;AAAqBob,CAArB,CAA4BC,CAA5B,CAAmC,CAAA,IAQ5Cnb,CAR4C,CAQ3BpW,CAR2B,CAQd6nB,CAClCyJ,EAAA,CAAkB,CAAA,CAAlB,GAAQA,CACJC,EAAJ,EAAap+B,CAAA,CAASo+B,CAAT,CAAb,GACE1J,CADF,CACe0J,CADf,CAIIp+B,EAAA,CAASk+B,CAAT,CAAJ,GACEv5B,CAQA,CARQu5B,CAAAv5B,MAAA,CAAiBi5B,CAAjB,CAQR,CAPA/wB,CAOA,CAPclI,CAAA,CAAM,CAAN,CAOd,CANA+vB,CAMA,CANaA,CAMb,EAN2B/vB,CAAA,CAAM,CAAN,CAM3B,CALAu5B,CAKA,CALapN,CAAAvwB,eAAA,CAA2BsM,CAA3B,CAAA,CACPikB,CAAA,CAAYjkB,CAAZ,CADO,CAEPE,EAAA,CAAOgW,CAAAkR,OAAP,CAAsBpnB,CAAtB,CAAmC,CAAA,CAAnC,CAFO,GAGJ8wB,CAAA,CAAU5wB,EAAA,CAAOwL,CAAP,CAAgB1L,CAAhB,CAA6B,CAAA,CAA7B,CAAV,CAA+CrN,CAH3C,CAKb,CAAAmN,EAAA,CAAYuxB,CAAZ,CAAwBrxB,CAAxB,CAAqC,CAAA,CAArC,CATF,CAYA,IAAIsxB,CAAJ,CAmBE,MARIE,EAQG,CARmBnb,CAACjjB,CAAA,CAAQi+B,CAAR,CAAA,CACzBA,CAAA,CAAWA,CAAAr+B,OAAX,CAA+B,CAA/B,CADyB,CACWq+B,CADZhb,WAQnB,CANPD,CAMO,CANIriB,MAAAkE,OAAA,CAAcu5B,CAAd,EAAqC,IAArC,CAMJ,CAJH3J,CAIG,EAHLuJ,CAAA,CAAclb,CAAd,CAAsB2R,CAAtB,CAAkCzR,CAAlC,CAA4CpW,CAA5C,EAA2DqxB,CAAAt1B,KAA3D,CAGK,CAAArH,CAAA,CAAO,QAAQ,EAAG,CACvB8hB,CAAAzZ,OAAA,CAAiBs0B,CAAjB,CAA6Bjb,CAA7B,CAAuCF,CAAvC,CAA+ClW,CAA/C,CACA,OAAOoW,EAFgB,CAAlB,CAGJ,CACDA,SAAUA,CADT,CAEDyR,WAAYA,CAFX,CAHI,CASTzR,EAAA,CAAWI,CAAA7B,YAAA,CAAsB0c,CAAtB,CAAkCnb,CAAlC,CAA0ClW,CAA1C,CAEP6nB,EAAJ,EACEuJ,CAAA,CAAclb,CAAd,CAAsB2R,CAAtB,CAAkCzR,CAAlC,CAA4CpW,CAA5C,EAA2DqxB,CAAAt1B,KAA3D,CAGF,OAAOqa,EA5DyC,CA7Bc,CAAtD,CAjCiB,CAkK/BjN,QAASA,GAAiB,EAAG,CAC3B,IAAAyJ,KAAA,CAAY,CAAC,SAAD,CAAY,QAAQ,CAACngB,CAAD,CAAS,CACvC,MAAOuH,EAAA,CAAOvH,CAAAC,SAAP,CADgC,CAA7B,CADe,CA8C7B2W,QAASA,GAAyB,EAAG,CACnC,IAAAuJ,KAAA,CAAY,CAAC,MAAD,CAAS,QAAQ,CAAC1I,CAAD,CAAO,CAClC,MAAO,SAAQ,CAACunB,CAAD;AAAYC,CAAZ,CAAmB,CAChCxnB,CAAA+O,MAAA5f,MAAA,CAAiB6Q,CAAjB,CAAuBrV,SAAvB,CADgC,CADA,CAAxB,CADuB,CAiBrC88B,QAASA,GAA4B,CAACv0B,CAAD,CAAOw0B,CAAP,CAAgB,CACnD,GAAIz+B,CAAA,CAASiK,CAAT,CAAJ,CAAoB,CAElB,IAAIy0B,EAAWz0B,CAAA5C,QAAA,CAAas3B,EAAb,CAAqC,EAArC,CAAAhkB,KAAA,EAEf,IAAI+jB,CAAJ,CAAc,CACZ,IAAIE,EAAcH,CAAA,CAAQ,cAAR,CACd,EAAC,CAAD,CAAC,CAAD,EAAC,CAAD,GAAC,CAAA,QAAA,CAAA,EAAA,CAAD,IAWN,CAXM,EAUFI,CAVE,CAAkE/8B,CAUxD6C,MAAA,CAAUm6B,EAAV,CAVV,GAWcC,EAAA,CAAUF,CAAA,CAAU,CAAV,CAAV,CAAAz0B,KAAA,CAXoDtI,CAWpD,CAXd,CAAA,EAAJ,GACEmI,CADF,CACSxD,EAAA,CAASi4B,CAAT,CADT,CAFY,CAJI,CAYpB,MAAOz0B,EAb4C,CA2BrD+0B,QAASA,GAAY,CAACP,CAAD,CAAU,CAAA,IACzB5jB,EAASpN,EAAA,EADgB,CACHpN,CADG,CACE+F,CADF,CACOtF,CAEpC,IAAK29B,CAAAA,CAAL,CAAc,MAAO5jB,EAErB3a,EAAA,CAAQu+B,CAAAl7B,MAAA,CAAc,IAAd,CAAR,CAA6B,QAAQ,CAAC07B,CAAD,CAAO,CAC1Cn+B,CAAA,CAAIm+B,CAAAn7B,QAAA,CAAa,GAAb,CACJzD,EAAA,CAAMqD,CAAA,CAAUiX,CAAA,CAAKskB,CAAA5W,OAAA,CAAY,CAAZ,CAAevnB,CAAf,CAAL,CAAV,CACNsF,EAAA,CAAMuU,CAAA,CAAKskB,CAAA5W,OAAA,CAAYvnB,CAAZ,CAAgB,CAAhB,CAAL,CAEFT,EAAJ,GACEwa,CAAA,CAAOxa,CAAP,CADF,CACgBwa,CAAA,CAAOxa,CAAP,CAAA,CAAcwa,CAAA,CAAOxa,CAAP,CAAd,CAA4B,IAA5B,CAAmC+F,CAAnC,CAAyCA,CADzD,CAL0C,CAA5C,CAUA,OAAOyU,EAfsB,CA+B/BqkB,QAASA,GAAa,CAACT,CAAD,CAAU,CAC9B,IAAIU,EAAa78B,CAAA,CAASm8B,CAAT,CAAA,CAAoBA,CAApB,CAA8Bj/B,CAE/C,OAAO,SAAQ,CAACoJ,CAAD,CAAO,CACfu2B,CAAL,GAAiBA,CAAjB,CAA+BH,EAAA,CAAaP,CAAb,CAA/B,CAEA,OAAI71B,EAAJ,EACM3H,CAIGA,CAJKk+B,CAAA,CAAWz7B,CAAA,CAAUkF,CAAV,CAAX,CAIL3H,CAHO,IAAK,EAGZA,GAHHA,CAGGA,GAFLA,CAEKA,CAFG,IAEHA,EAAAA,CALT,EAQOk+B,CAXa,CAHQ,CA8BhCC,QAASA,GAAa,CAACn1B,CAAD;AAAOw0B,CAAP,CAAgBY,CAAhB,CAAwBC,CAAxB,CAA6B,CACjD,GAAIh/B,CAAA,CAAWg/B,CAAX,CAAJ,CACE,MAAOA,EAAA,CAAIr1B,CAAJ,CAAUw0B,CAAV,CAAmBY,CAAnB,CAETn/B,EAAA,CAAQo/B,CAAR,CAAa,QAAQ,CAACv5B,CAAD,CAAK,CACxBkE,CAAA,CAAOlE,CAAA,CAAGkE,CAAH,CAASw0B,CAAT,CAAkBY,CAAlB,CADiB,CAA1B,CAIA,OAAOp1B,EAR0C,CAuBnDyM,QAASA,GAAa,EAAG,CA4BvB,IAAI6oB,EAAW,IAAAA,SAAXA,CAA2B,CAE7BC,kBAAmB,CAAChB,EAAD,CAFU,CAK7BiB,iBAAkB,CAAC,QAAQ,CAACC,CAAD,CAAI,CAC7B,MAAOp9B,EAAA,CAASo9B,CAAT,CAAA,EA34PmB,eA24PnB,GA34PJj9B,EAAAjC,KAAA,CA24P2Bk/B,CA34P3B,CA24PI,EAj4PmB,eAi4PnB,GAj4PJj9B,EAAAjC,KAAA,CAi4PyCk/B,CAj4PzC,CAi4PI,EAt4PmB,mBAs4PnB,GAt4PJj9B,EAAAjC,KAAA,CAs4P2Dk/B,CAt4P3D,CAs4PI,CAA4Dr5B,EAAA,CAAOq5B,CAAP,CAA5D,CAAwEA,CADlD,CAAb,CALW,CAU7BjB,QAAS,CACPkB,OAAQ,CACN,OAAU,mCADJ,CADD,CAIPxM,KAAQnuB,EAAA,CAAY46B,EAAZ,CAJD,CAKPvf,IAAQrb,EAAA,CAAY46B,EAAZ,CALD,CAMPC,MAAQ76B,EAAA,CAAY46B,EAAZ,CAND,CAVoB,CAmB7BE,eAAgB,YAnBa,CAoB7BC,eAAgB,cApBa,CAA/B,CAuBIC,EAAgB,CAAA,CAoBpB,KAAAA,cAAA,CAAqBC,QAAQ,CAACh/B,CAAD,CAAQ,CACnC,MAAIoB,EAAA,CAAUpB,CAAV,CAAJ,EACE++B,CACO,CADS,CAAE/+B,CAAAA,CACX,CAAA,IAFT,EAIO++B,CAL4B,CAqBrC,KAAIE,EAAuB,IAAAC,aAAvBD;AAA2C,EAE/C,KAAAzgB,KAAA,CAAY,CAAC,cAAD,CAAiB,UAAjB,CAA6B,eAA7B,CAA8C,YAA9C,CAA4D,IAA5D,CAAkE,WAAlE,CACR,QAAQ,CAAC9I,CAAD,CAAelB,CAAf,CAAyBE,CAAzB,CAAwCwB,CAAxC,CAAoDE,CAApD,CAAwDgM,CAAxD,CAAmE,CAshB7E5M,QAASA,EAAK,CAAC2pB,CAAD,CAAgB,CAwE5BZ,QAASA,EAAiB,CAACa,CAAD,CAAW,CAEnC,IAAIC,EAAO/+B,CAAA,CAAO,EAAP,CAAW8+B,CAAX,CAITC,EAAAr2B,KAAA,CAHGo2B,CAAAp2B,KAAL,CAGcm1B,EAAA,CAAciB,CAAAp2B,KAAd,CAA6Bo2B,CAAA5B,QAA7B,CAA+C4B,CAAAhB,OAA/C,CAAgE32B,CAAA82B,kBAAhE,CAHd,CACca,CAAAp2B,KAIIo1B,EAAAA,CAAAgB,CAAAhB,OAAlB,OA/sBC,IA+sBM,EA/sBCA,CA+sBD,EA/sBoB,GA+sBpB,CA/sBWA,CA+sBX,CACHiB,CADG,CAEHjpB,CAAAkpB,OAAA,CAAUD,CAAV,CAV+B,CAarCE,QAASA,EAAgB,CAAC/B,CAAD,CAAU,CAAA,IAC7BgC,CAD6B,CACdC,EAAmB,EAEtCxgC,EAAA,CAAQu+B,CAAR,CAAiB,QAAQ,CAACkC,CAAD,CAAWC,CAAX,CAAmB,CACtCtgC,CAAA,CAAWqgC,CAAX,CAAJ,EACEF,CACA,CADgBE,CAAA,EAChB,CAAqB,IAArB,EAAIF,CAAJ,GACEC,CAAA,CAAiBE,CAAjB,CADF,CAC6BH,CAD7B,CAFF,EAMEC,CAAA,CAAiBE,CAAjB,CANF,CAM6BD,CAPa,CAA5C,CAWA,OAAOD,EAd0B,CAnFnC,GAAK,CAAAr2B,EAAA/H,SAAA,CAAiB89B,CAAjB,CAAL,CACE,KAAM3gC,EAAA,CAAO,OAAP,CAAA,CAAgB,QAAhB,CAA0F2gC,CAA1F,CAAN,CAGF,IAAI13B,EAASnH,CAAA,CAAO,CAClB4M,OAAQ,KADU,CAElBsxB,iBAAkBF,CAAAE,iBAFA,CAGlBD,kBAAmBD,CAAAC,kBAHD,CAAP;AAIVY,CAJU,CAMb13B,EAAA+1B,QAAA,CA0FAoC,QAAqB,CAACn4B,CAAD,CAAS,CAAA,IACxBo4B,EAAavB,CAAAd,QADW,CAExBsC,EAAax/B,CAAA,CAAO,EAAP,CAAWmH,CAAA+1B,QAAX,CAFW,CAGxBuC,CAHwB,CAGeC,CAHf,CAK5BH,EAAav/B,CAAA,CAAO,EAAP,CAAWu/B,CAAAnB,OAAX,CAA8BmB,CAAA,CAAWp9B,CAAA,CAAUgF,CAAAyF,OAAV,CAAX,CAA9B,CAGb,EAAA,CACA,IAAK6yB,CAAL,GAAsBF,EAAtB,CAAkC,CAChCI,CAAA,CAAyBx9B,CAAA,CAAUs9B,CAAV,CAEzB,KAAKC,CAAL,GAAsBF,EAAtB,CACE,GAAIr9B,CAAA,CAAUu9B,CAAV,CAAJ,GAAiCC,CAAjC,CACE,SAAS,CAIbH,EAAA,CAAWC,CAAX,CAAA,CAA4BF,CAAA,CAAWE,CAAX,CATI,CAalC,MAAOR,EAAA,CAAiBO,CAAjB,CAtBqB,CA1Fb,CAAaX,CAAb,CACjB13B,EAAAyF,OAAA,CAAgBmB,EAAA,CAAU5G,CAAAyF,OAAV,CAuBhB,KAAIgzB,EAAQ,CArBQC,QAAQ,CAAC14B,CAAD,CAAS,CACnC,IAAI+1B,EAAU/1B,CAAA+1B,QAAd,CACI4C,EAAUjC,EAAA,CAAc12B,CAAAuB,KAAd,CAA2Bi1B,EAAA,CAAcT,CAAd,CAA3B,CAAmDj/B,CAAnD,CAA8DkJ,CAAA+2B,iBAA9D,CAGVr9B,EAAA,CAAYi/B,CAAZ,CAAJ,EACEnhC,CAAA,CAAQu+B,CAAR,CAAiB,QAAQ,CAACx9B,CAAD,CAAQ2/B,CAAR,CAAgB,CACb,cAA1B,GAAIl9B,CAAA,CAAUk9B,CAAV,CAAJ,EACI,OAAOnC,CAAA,CAAQmC,CAAR,CAF4B,CAAzC,CAOEx+B,EAAA,CAAYsG,CAAA44B,gBAAZ,CAAJ,EAA4C,CAAAl/B,CAAA,CAAYm9B,CAAA+B,gBAAZ,CAA5C,GACE54B,CAAA44B,gBADF,CAC2B/B,CAAA+B,gBAD3B,CAKA,OAAOC,EAAA,CAAQ74B,CAAR,CAAgB24B,CAAhB,CAAA1I,KAAA,CAA8B6G,CAA9B,CAAiDA,CAAjD,CAlB4B,CAqBzB,CAAgBhgC,CAAhB,CAAZ,CACIgiC,EAAUnqB,CAAAoqB,KAAA,CAAQ/4B,CAAR,CAYd,KATAxI,CAAA,CAAQwhC,CAAR,CAA8B,QAAQ,CAACC,CAAD,CAAc,CAClD,CAAIA,CAAAC,QAAJ,EAA2BD,CAAAE,aAA3B;AACEV,CAAA53B,QAAA,CAAco4B,CAAAC,QAAd,CAAmCD,CAAAE,aAAnC,CAEF,EAAIF,CAAAtB,SAAJ,EAA4BsB,CAAAG,cAA5B,GACEX,CAAA78B,KAAA,CAAWq9B,CAAAtB,SAAX,CAAiCsB,CAAAG,cAAjC,CALgD,CAApD,CASA,CAAOX,CAAAthC,OAAP,CAAA,CAAqB,CACfkiC,CAAAA,CAASZ,CAAAre,MAAA,EACb,KAAIkf,EAAWb,CAAAre,MAAA,EAAf,CAEA0e,EAAUA,CAAA7I,KAAA,CAAaoJ,CAAb,CAAqBC,CAArB,CAJS,CAOrBR,CAAAS,QAAA,CAAkBC,QAAQ,CAACn8B,CAAD,CAAK,CAC7By7B,CAAA7I,KAAA,CAAa,QAAQ,CAAC0H,CAAD,CAAW,CAC9Bt6B,CAAA,CAAGs6B,CAAAp2B,KAAH,CAAkBo2B,CAAAhB,OAAlB,CAAmCgB,CAAA5B,QAAnC,CAAqD/1B,CAArD,CAD8B,CAAhC,CAGA,OAAO84B,EAJsB,CAO/BA,EAAA1b,MAAA,CAAgBqc,QAAQ,CAACp8B,CAAD,CAAK,CAC3By7B,CAAA7I,KAAA,CAAa,IAAb,CAAmB,QAAQ,CAAC0H,CAAD,CAAW,CACpCt6B,CAAA,CAAGs6B,CAAAp2B,KAAH,CAAkBo2B,CAAAhB,OAAlB,CAAmCgB,CAAA5B,QAAnC,CAAqD/1B,CAArD,CADoC,CAAtC,CAGA,OAAO84B,EAJoB,CAO7B,OAAOA,EAtEqB,CA2Q9BD,QAASA,EAAO,CAAC74B,CAAD,CAAS24B,CAAT,CAAkB,CA+DhCe,QAASA,EAAI,CAAC/C,CAAD,CAASgB,CAAT,CAAmBgC,CAAnB,CAAkCC,CAAlC,CAA8C,CAUzDC,QAASA,EAAkB,EAAG,CAC5BC,CAAA,CAAenC,CAAf,CAAyBhB,CAAzB,CAAiCgD,CAAjC,CAAgDC,CAAhD,CAD4B,CAT1B9f,CAAJ,GA18BC,GA28BC,EAAc6c,CAAd,EA38ByB,GA28BzB,CAAcA,CAAd,CACE7c,CAAAnC,IAAA,CAAUwG,CAAV,CAAe,CAACwY,CAAD,CAASgB,CAAT,CAAmBrB,EAAA,CAAaqD,CAAb,CAAnB,CAAgDC,CAAhD,CAAf,CADF,CAIE9f,CAAA2I,OAAA,CAAatE,CAAb,CALJ,CAaImZ,EAAJ,CACE7oB,CAAAsrB,YAAA,CAAuBF,CAAvB,CADF,EAGEA,CAAA,EACA,CAAKprB,CAAAurB,QAAL,EAAyBvrB,CAAAnN,OAAA,EAJ3B,CAdyD,CA0B3Dw4B,QAASA,EAAc,CAACnC,CAAD;AAAWhB,CAAX,CAAmBZ,CAAnB,CAA4B6D,CAA5B,CAAwC,CAE7DjD,CAAA,CAAS5H,IAAAC,IAAA,CAAS2H,CAAT,CAAiB,CAAjB,CAET,EAv+BC,GAu+BA,EAAUA,CAAV,EAv+B0B,GAu+B1B,CAAUA,CAAV,CAAoBsD,CAAAC,QAApB,CAAuCD,CAAApC,OAAxC,EAAyD,CACvDt2B,KAAMo2B,CADiD,CAEvDhB,OAAQA,CAF+C,CAGvDZ,QAASS,EAAA,CAAcT,CAAd,CAH8C,CAIvD/1B,OAAQA,CAJ+C,CAKvD45B,WAAYA,CAL2C,CAAzD,CAJ6D,CAa/DO,QAASA,EAAwB,CAACt+B,CAAD,CAAS,CACxCi+B,CAAA,CAAej+B,CAAA0F,KAAf,CAA4B1F,CAAA86B,OAA5B,CAA2Cr6B,EAAA,CAAYT,CAAAk6B,QAAA,EAAZ,CAA3C,CAA0El6B,CAAA+9B,WAA1E,CADwC,CAI1CQ,QAASA,EAAgB,EAAG,CAC1B,IAAIpT,EAAMjZ,CAAAssB,gBAAAj/B,QAAA,CAA8B4E,CAA9B,CACG,GAAb,GAAIgnB,CAAJ,EAAgBjZ,CAAAssB,gBAAAh/B,OAAA,CAA6B2rB,CAA7B,CAAkC,CAAlC,CAFU,CA1GI,IAC5BiT,EAAWtrB,CAAAkS,MAAA,EADiB,CAE5BiY,EAAUmB,CAAAnB,QAFkB,CAG5Bhf,CAH4B,CAI5BwgB,CAJ4B,CAK5BjC,EAAar4B,CAAA+1B,QALe,CAM5B5X,EAAMoc,CAAA,CAASv6B,CAAAme,IAAT,CAAqBne,CAAAw6B,OAArB,CAEVzsB,EAAAssB,gBAAAz+B,KAAA,CAA2BoE,CAA3B,CACA84B,EAAA7I,KAAA,CAAamK,CAAb,CAA+BA,CAA/B,CAGKtgB,EAAA9Z,CAAA8Z,MAAL,EAAqBA,CAAA+c,CAAA/c,MAArB,EAAyD,CAAA,CAAzD,GAAwC9Z,CAAA8Z,MAAxC,EACuB,KADvB,GACK9Z,CAAAyF,OADL,EACkD,OADlD,GACgCzF,CAAAyF,OADhC,GAEEqU,CAFF,CAEUlgB,CAAA,CAASoG,CAAA8Z,MAAT,CAAA,CAAyB9Z,CAAA8Z,MAAzB,CACAlgB,CAAA,CAASi9B,CAAA/c,MAAT,CAAA,CAA2B+c,CAAA/c,MAA3B,CACA2gB,CAJV,CAOI3gB,EAAJ,GACEwgB,CACA,CADaxgB,CAAA1X,IAAA,CAAU+b,CAAV,CACb,CAAIxkB,CAAA,CAAU2gC,CAAV,CAAJ,CACoBA,CAAlB;AA3uRM1iC,CAAA,CA2uRY0iC,CA3uRDrK,KAAX,CA2uRN,CAEEqK,CAAArK,KAAA,CAAgBkK,CAAhB,CAA0CA,CAA1C,CAFF,CAKM5iC,CAAA,CAAQ+iC,CAAR,CAAJ,CACER,CAAA,CAAeQ,CAAA,CAAW,CAAX,CAAf,CAA8BA,CAAA,CAAW,CAAX,CAA9B,CAA6Ch+B,EAAA,CAAYg+B,CAAA,CAAW,CAAX,CAAZ,CAA7C,CAAyEA,CAAA,CAAW,CAAX,CAAzE,CADF,CAGER,CAAA,CAAeQ,CAAf,CAA2B,GAA3B,CAAgC,EAAhC,CAAoC,IAApC,CATN,CAcExgB,CAAAnC,IAAA,CAAUwG,CAAV,CAAe2a,CAAf,CAhBJ,CAuBIp/B,EAAA,CAAY4gC,CAAZ,CAAJ,GAQE,CAPII,CAOJ,CAPgBC,EAAA,CAAgB36B,CAAAme,IAAhB,CAAA,CACVpR,CAAAuT,QAAA,EAAA,CAAmBtgB,CAAAo3B,eAAnB,EAA4CP,CAAAO,eAA5C,CADU,CAEVtgC,CAKN,IAHEuhC,CAAA,CAAYr4B,CAAAq3B,eAAZ,EAAqCR,CAAAQ,eAArC,CAGF,CAHmEqD,CAGnE,EAAAzsB,CAAA,CAAajO,CAAAyF,OAAb,CAA4B0Y,CAA5B,CAAiCwa,CAAjC,CAA0Ce,CAA1C,CAAgDrB,CAAhD,CAA4Dr4B,CAAA46B,QAA5D,CACI56B,CAAA44B,gBADJ,CAC4B54B,CAAA66B,aAD5B,CARF,CAYA,OAAO/B,EAtDyB,CAiHlCyB,QAASA,EAAQ,CAACpc,CAAD,CAAMqc,CAAN,CAAc,CAC7B,GAAKA,CAAAA,CAAL,CAAa,MAAOrc,EACpB,KAAIjf,EAAQ,EACZlH,GAAA,CAAcwiC,CAAd,CAAsB,QAAQ,CAACjiC,CAAD,CAAQZ,CAAR,CAAa,CAC3B,IAAd,GAAIY,CAAJ,EAAsBmB,CAAA,CAAYnB,CAAZ,CAAtB,GACKhB,CAAA,CAAQgB,CAAR,CAEL,GAFqBA,CAErB,CAF6B,CAACA,CAAD,CAE7B,EAAAf,CAAA,CAAQe,CAAR,CAAe,QAAQ,CAACuiC,CAAD,CAAI,CACrBlhC,CAAA,CAASkhC,CAAT,CAAJ,GAEIA,CAFJ,CACMhhC,EAAA,CAAOghC,CAAP,CAAJ,CACMA,CAAAC,YAAA,EADN,CAGMp9B,EAAA,CAAOm9B,CAAP,CAJR,CAOA57B,EAAAtD,KAAA,CAAWwD,EAAA,CAAezH,CAAf,CAAX,CAAiC,GAAjC,CACWyH,EAAA,CAAe07B,CAAf,CADX,CARyB,CAA3B,CAHA,CADyC,CAA3C,CAgBmB,EAAnB,CAAI57B,CAAA/H,OAAJ,GACEgnB,CADF,GACgC,EAAtB,EAACA,CAAA/iB,QAAA,CAAY,GAAZ,CAAD,CAA2B,GAA3B,CAAiC,GAD3C,EACkD8D,CAAAG,KAAA,CAAW,GAAX,CADlD,CAGA;MAAO8e,EAtBsB,CAh5B/B,IAAIsc,EAAextB,CAAA,CAAc,OAAd,CAAnB,CAOI+rB,EAAuB,EAE3BxhC,EAAA,CAAQggC,CAAR,CAA8B,QAAQ,CAACwD,CAAD,CAAqB,CACzDhC,CAAAn4B,QAAA,CAA6BvJ,CAAA,CAAS0jC,CAAT,CAAA,CACvBrgB,CAAAvY,IAAA,CAAc44B,CAAd,CADuB,CACargB,CAAAzZ,OAAA,CAAiB85B,CAAjB,CAD1C,CADyD,CAA3D,CA2oBAjtB,EAAAssB,gBAAA,CAAwB,EA4GxBY,UAA2B,CAACrmB,CAAD,CAAQ,CACjCpd,CAAA,CAAQwB,SAAR,CAAmB,QAAQ,CAACkH,CAAD,CAAO,CAChC6N,CAAA,CAAM7N,CAAN,CAAA,CAAc,QAAQ,CAACie,CAAD,CAAMne,CAAN,CAAc,CAClC,MAAO+N,EAAA,CAAMlV,CAAA,CAAOmH,CAAP,EAAiB,EAAjB,CAAqB,CAChCyF,OAAQvF,CADwB,CAEhCie,IAAKA,CAF2B,CAArB,CAAN,CAD2B,CADJ,CAAlC,CADiC,CAAnC8c,CA1DA,CAAmB,KAAnB,CAA0B,QAA1B,CAAoC,MAApC,CAA4C,OAA5C,CAsEAC,UAAmC,CAACh7B,CAAD,CAAO,CACxC1I,CAAA,CAAQwB,SAAR,CAAmB,QAAQ,CAACkH,CAAD,CAAO,CAChC6N,CAAA,CAAM7N,CAAN,CAAA,CAAc,QAAQ,CAACie,CAAD,CAAM5c,CAAN,CAAYvB,CAAZ,CAAoB,CACxC,MAAO+N,EAAA,CAAMlV,CAAA,CAAOmH,CAAP,EAAiB,EAAjB,CAAqB,CAChCyF,OAAQvF,CADwB,CAEhCie,IAAKA,CAF2B,CAGhC5c,KAAMA,CAH0B,CAArB,CAAN,CADiC,CADV,CAAlC,CADwC,CAA1C25B,CA9BA,CAA2B,MAA3B,CAAmC,KAAnC,CAA0C,OAA1C,CAYAntB,EAAA8oB,SAAA,CAAiBA,CAGjB,OAAO9oB,EA/vBsE,CADnE,CA9FW,CA4gCzBotB,QAASA,GAAS,EAAG,CACjB,MAAO,KAAIvkC,CAAAwkC,eADM,CAoBrBltB,QAASA,GAAoB,EAAG,CAC9B,IAAA6I,KAAA,CAAY,CAAC,UAAD,CAAa,SAAb,CAAwB,WAAxB,CAAqC,QAAQ,CAAChK,CAAD,CAAW8C,CAAX,CAAoBxC,CAApB,CAA+B,CACtF,MAAOguB,GAAA,CAAkBtuB,CAAlB;AAA4BouB,EAA5B,CAAuCpuB,CAAA8T,MAAvC,CAAuDhR,CAAAlO,QAAA25B,UAAvD,CAAkFjuB,CAAA,CAAU,CAAV,CAAlF,CAD+E,CAA5E,CADkB,CAMhCguB,QAASA,GAAiB,CAACtuB,CAAD,CAAWouB,CAAX,CAAsBI,CAAtB,CAAqCD,CAArC,CAAgD9c,CAAhD,CAA6D,CA8GrFgd,QAASA,EAAQ,CAACrd,CAAD,CAAMsd,CAAN,CAAkB/B,CAAlB,CAAwB,CAAA,IAInC9xB,EAAS4W,CAAArN,cAAA,CAA0B,QAA1B,CAJ0B,CAIW8N,EAAW,IAC7DrX,EAAAmL,KAAA,CAAc,iBACdnL,EAAArL,IAAA,CAAa4hB,CACbvW,EAAA8zB,MAAA,CAAe,CAAA,CAEfzc,EAAA,CAAWA,QAAQ,CAAC/I,CAAD,CAAQ,CACHtO,CA7zOtByL,oBAAA,CA6zO8BN,MA7zO9B,CA6zOsCkM,CA7zOtC,CAAsC,CAAA,CAAtC,CA8zOsBrX,EA9zOtByL,oBAAA,CA8zO8BN,OA9zO9B,CA8zOuCkM,CA9zOvC,CAAsC,CAAA,CAAtC,CA+zOAT,EAAAmd,KAAA1mB,YAAA,CAA6BrN,CAA7B,CACAA,EAAA,CAAS,IACT,KAAI+uB,EAAU,EAAd,CACI9F,EAAO,SAEP3a,EAAJ,GACqB,MAInB,GAJIA,CAAAnD,KAIJ,EAJ8BuoB,CAAA,CAAUG,CAAV,CAAAG,OAI9B,GAHE1lB,CAGF,CAHU,CAAEnD,KAAM,OAAR,CAGV,EADA8d,CACA,CADO3a,CAAAnD,KACP,CAAA4jB,CAAA,CAAwB,OAAf,GAAAzgB,CAAAnD,KAAA,CAAyB,GAAzB,CAA+B,GAL1C,CAQI2mB,EAAJ,EACEA,CAAA,CAAK/C,CAAL,CAAa9F,CAAb,CAjBuB,CAqBRjpB,EAp1OjBi0B,iBAAA,CAo1OyB9oB,MAp1OzB,CAo1OiCkM,CAp1OjC,CAAmC,CAAA,CAAnC,CAq1OiBrX,EAr1OjBi0B,iBAAA,CAq1OyB9oB,OAr1OzB,CAq1OkCkM,CAr1OlC,CAAmC,CAAA,CAAnC,CAs1OFT,EAAAmd,KAAAzqB,YAAA,CAA6BtJ,CAA7B,CACA,OAAOqX,EAjCgC,CA5GzC,MAAO,SAAQ,CAACxZ,CAAD;AAAS0Y,CAAT,CAAcsM,CAAd,CAAoBxL,CAApB,CAA8B8W,CAA9B,CAAuC6E,CAAvC,CAAgDhC,CAAhD,CAAiEiC,CAAjE,CAA+E,CA2F5FiB,QAASA,EAAc,EAAG,CACxBC,CAAA,EAAaA,CAAA,EACbC,EAAA,EAAOA,CAAAC,MAAA,EAFiB,CAK1BC,QAASA,EAAe,CAACjd,CAAD,CAAW0X,CAAX,CAAmBgB,CAAnB,CAA6BgC,CAA7B,CAA4CC,CAA5C,CAAwD,CAE1E5Y,CAAJ,GAAkBlqB,CAAlB,EACEykC,CAAAta,OAAA,CAAqBD,CAArB,CAEF+a,EAAA,CAAYC,CAAZ,CAAkB,IAElB/c,EAAA,CAAS0X,CAAT,CAAiBgB,CAAjB,CAA2BgC,CAA3B,CAA0CC,CAA1C,CACA7sB,EAAA6R,6BAAA,CAAsCtlB,CAAtC,CAR8E,CA/FhFyT,CAAA8R,6BAAA,EACAV,EAAA,CAAMA,CAAN,EAAapR,CAAAoR,IAAA,EAEb,IAAyB,OAAzB,EAAInjB,CAAA,CAAUyK,CAAV,CAAJ,CAAkC,CAChC,IAAIg2B,EAAa,GAAbA,CAAmB1hC,CAACuhC,CAAAz0B,QAAA,EAAD9M,UAAA,CAA+B,EAA/B,CACvBuhC,EAAA,CAAUG,CAAV,CAAA,CAAwB,QAAQ,CAACl6B,CAAD,CAAO,CACrC+5B,CAAA,CAAUG,CAAV,CAAAl6B,KAAA,CAA6BA,CAC7B+5B,EAAA,CAAUG,CAAV,CAAAG,OAAA,CAA+B,CAAA,CAFM,CAKvC,KAAIG,EAAYP,CAAA,CAASrd,CAAAxf,QAAA,CAAY,eAAZ,CAA6B,oBAA7B,CAAoD88B,CAApD,CAAT,CACZA,CADY,CACA,QAAQ,CAAC9E,CAAD,CAAS9F,CAAT,CAAe,CACrCqL,CAAA,CAAgBjd,CAAhB,CAA0B0X,CAA1B,CAAkC2E,CAAA,CAAUG,CAAV,CAAAl6B,KAAlC,CAA8D,EAA9D,CAAkEsvB,CAAlE,CACAyK,EAAA,CAAUG,CAAV,CAAA,CAAwBniC,CAFa,CADvB,CAPgB,CAAlC,IAYO,CAEL,IAAI0iC,EAAMb,CAAA,EAEVa,EAAAG,KAAA,CAAS12B,CAAT,CAAiB0Y,CAAjB,CAAsB,CAAA,CAAtB,CACA3mB,EAAA,CAAQu+B,CAAR,CAAiB,QAAQ,CAACx9B,CAAD,CAAQZ,CAAR,CAAa,CAChCgC,CAAA,CAAUpB,CAAV,CAAJ,EACIyjC,CAAAI,iBAAA,CAAqBzkC,CAArB,CAA0BY,CAA1B,CAFgC,CAAtC,CAMAyjC,EAAAK,OAAA,CAAaC,QAAsB,EAAG,CACpC,IAAI1C,EAAaoC,CAAApC,WAAbA;AAA+B,EAAnC,CAIIjC,EAAY,UAAD,EAAeqE,EAAf,CAAsBA,CAAArE,SAAtB,CAAqCqE,CAAAO,aAJpD,CAOI5F,EAAwB,IAAf,GAAAqF,CAAArF,OAAA,CAAsB,GAAtB,CAA4BqF,CAAArF,OAK1B,EAAf,GAAIA,CAAJ,GACEA,CADF,CACWgB,CAAA,CAAW,GAAX,CAA6C,MAA5B,EAAA6E,EAAA,CAAWre,CAAX,CAAAse,SAAA,CAAqC,GAArC,CAA2C,CADvE,CAIAP,EAAA,CAAgBjd,CAAhB,CACI0X,CADJ,CAEIgB,CAFJ,CAGIqE,CAAAU,sBAAA,EAHJ,CAII9C,CAJJ,CAjBoC,CAwBlCT,EAAAA,CAAeA,QAAQ,EAAG,CAG5B+C,CAAA,CAAgBjd,CAAhB,CAA2B,EAA3B,CAA8B,IAA9B,CAAoC,IAApC,CAA0C,EAA1C,CAH4B,CAM9B+c,EAAAW,QAAA,CAAcxD,CACd6C,EAAAY,QAAA,CAAczD,CAEVP,EAAJ,GACEoD,CAAApD,gBADF,CACwB,CAAA,CADxB,CAIA,IAAIiC,CAAJ,CACE,GAAI,CACFmB,CAAAnB,aAAA,CAAmBA,CADjB,CAEF,MAAOv8B,CAAP,CAAU,CAQV,GAAqB,MAArB,GAAIu8B,CAAJ,CACE,KAAMv8B,EAAN,CATQ,CAcd09B,CAAAa,KAAA,CAASpS,CAAT,EAAiB,IAAjB,CAjEK,CAoEP,GAAc,CAAd,CAAImQ,CAAJ,CACE,IAAI5Z,EAAYua,CAAA,CAAcO,CAAd,CAA8BlB,CAA9B,CADlB,KAEyBA,EAAlB,EAn9RKhjC,CAAA,CAm9RagjC,CAn9RF3K,KAAX,CAm9RL,EACL2K,CAAA3K,KAAA,CAAa6L,CAAb,CAvF0F,CAFT,CAwLvFluB,QAASA,GAAoB,EAAG,CAC9B,IAAIwmB,EAAc,IAAlB,CACIC,EAAY,IAWhB,KAAAD,YAAA,CAAmB0I,QAAQ,CAACvkC,CAAD,CAAQ,CACjC,MAAIA,EAAJ,EACE67B,CACO,CADO77B,CACP,CAAA,IAFT,EAIS67B,CALwB,CAkBnC,KAAAC,UAAA,CAAiB0I,QAAQ,CAACxkC,CAAD,CAAQ,CAC/B,MAAIA,EAAJ,EACE87B,CACO,CADK97B,CACL,CAAA,IAFT;AAIS87B,CALsB,CAUjC,KAAAtd,KAAA,CAAY,CAAC,QAAD,CAAW,mBAAX,CAAgC,MAAhC,CAAwC,QAAQ,CAACxI,CAAD,CAAShB,CAAT,CAA4BwB,CAA5B,CAAkC,CAM5FiuB,QAASA,EAAM,CAACC,CAAD,CAAK,CAClB,MAAO,QAAP,CAAkBA,CADA,CAkGpBtvB,QAASA,EAAY,CAACkjB,CAAD,CAAOqM,CAAP,CAA2BpL,CAA3B,CAA2CD,CAA3C,CAAyD,CAgH5EsL,QAASA,EAAY,CAACtM,CAAD,CAAO,CAC1B,MAAOA,EAAAlyB,QAAA,CAAay+B,CAAb,CAAiChJ,CAAjC,CAAAz1B,QAAA,CACG0+B,CADH,CACqBhJ,CADrB,CADmB,CAK5BiJ,QAASA,EAAyB,CAAC/kC,CAAD,CAAQ,CACxC,GAAI,CACeA,IAAAA,EAAAA,CA/DjB,EAAA,CAAOu5B,CAAA,CACL/iB,CAAAwuB,WAAA,CAAgBzL,CAAhB,CAAgCv5B,CAAhC,CADK,CAELwW,CAAAyuB,QAAA,CAAajlC,CAAb,CA8DK,KAAA,CAAA,IAAAs5B,CAAA,EAAiB,CAAAl4B,CAAA,CAAUpB,CAAV,CAAjB,CAAoCA,CAAAA,CAAAA,CAApC,KA1DP,IAAa,IAAb,EAAIA,CAAJ,CACE,CAAA,CAAO,EADT,KAAA,CAGA,OAAQ,MAAOA,EAAf,EACE,KAAK,QAAL,CACE,KACF,MAAK,QAAL,CACEA,CAAA,CAAQ,EAAR,CAAaA,CACb,MACF,SACEA,CAAA,CAAQoF,EAAA,CAAOpF,CAAP,CAPZ,CAUA,CAAA,CAAOA,CAbP,CA0DA,MAAO,EAFL,CAGF,MAAO4hB,CAAP,CAAY,CACRsjB,CAEJ,CAFaC,EAAA,CAAmB,QAAnB,CAA4D7M,CAA5D,CACX1W,CAAApgB,SAAA,EADW,CAEb,CAAAwT,CAAA,CAAkBkwB,CAAlB,CAHY,CAJ0B,CApH1C5L,CAAA,CAAe,CAAEA,CAAAA,CAWjB,KAZ4E,IAExEt0B,CAFwE,CAGxEogC,CAHwE,CAIxExiC,EAAQ,CAJgE,CAKxEm2B,EAAc,EAL0D,CAMxEsM,EAAW,EAN6D,CAOxEC,EAAahN,CAAA15B,OAP2D,CASxE4F,EAAS,EAT+D,CAUxE+gC,EAAsB,EAE1B,CAAO3iC,CAAP,CAAe0iC,CAAf,CAAA,CACE,GAAyD,EAAzD,GAAMtgC,CAAN,CAAmBszB,CAAAz1B,QAAA,CAAag5B,CAAb,CAA0Bj5B,CAA1B,CAAnB,GAC+E,EAD/E;CACOwiC,CADP,CACkB9M,CAAAz1B,QAAA,CAAai5B,CAAb,CAAwB92B,CAAxB,CAAqCwgC,CAArC,CADlB,EAEM5iC,CAQJ,GARcoC,CAQd,EAPER,CAAAnB,KAAA,CAAYuhC,CAAA,CAAatM,CAAAjQ,UAAA,CAAezlB,CAAf,CAAsBoC,CAAtB,CAAb,CAAZ,CAOF,CALAygC,CAKA,CALMnN,CAAAjQ,UAAA,CAAerjB,CAAf,CAA4BwgC,CAA5B,CAA+CJ,CAA/C,CAKN,CAJArM,CAAA11B,KAAA,CAAiBoiC,CAAjB,CAIA,CAHAJ,CAAAhiC,KAAA,CAAc2S,CAAA,CAAOyvB,CAAP,CAAYV,CAAZ,CAAd,CAGA,CAFAniC,CAEA,CAFQwiC,CAER,CAFmBM,CAEnB,CADAH,CAAAliC,KAAA,CAAyBmB,CAAA5F,OAAzB,CACA,CAAA4F,CAAAnB,KAAA,CAAY,EAAZ,CAVF,KAWO,CAEDT,CAAJ,GAAc0iC,CAAd,EACE9gC,CAAAnB,KAAA,CAAYuhC,CAAA,CAAatM,CAAAjQ,UAAA,CAAezlB,CAAf,CAAb,CAAZ,CAEF,MALK,CAeT,GAAI22B,CAAJ,EAAsC,CAAtC,CAAsB/0B,CAAA5F,OAAtB,CACI,KAAMumC,GAAA,CAAmB,UAAnB,CAGsD7M,CAHtD,CAAN,CAMJ,GAAKqM,CAAAA,CAAL,EAA2B5L,CAAAn6B,OAA3B,CAA+C,CAC7C,IAAI+mC,EAAUA,QAAQ,CAACtJ,CAAD,CAAS,CAC7B,IAD6B,IACpBx8B,EAAI,CADgB,CACbW,EAAKu4B,CAAAn6B,OAArB,CAAyCiB,CAAzC,CAA6CW,CAA7C,CAAiDX,CAAA,EAAjD,CAAsD,CACpD,GAAIy5B,CAAJ,EAAoBn4B,CAAA,CAAYk7B,CAAA,CAAOx8B,CAAP,CAAZ,CAApB,CAA4C,MAC5C2E,EAAA,CAAO+gC,CAAA,CAAoB1lC,CAApB,CAAP,CAAA,CAAiCw8B,CAAA,CAAOx8B,CAAP,CAFmB,CAItD,MAAO2E,EAAAsC,KAAA,CAAY,EAAZ,CALsB,CA+B/B,OAAOxG,EAAA,CAAOslC,QAAwB,CAACzmC,CAAD,CAAU,CAC5C,IAAIU,EAAI,CAAR,CACIW,EAAKu4B,CAAAn6B,OADT,CAEIy9B,EAAanZ,KAAJ,CAAU1iB,CAAV,CAEb,IAAI,CACF,IAAA,CAAOX,CAAP,CAAWW,CAAX,CAAeX,CAAA,EAAf,CACEw8B,CAAA,CAAOx8B,CAAP,CAAA,CAAYwlC,CAAA,CAASxlC,CAAT,CAAA,CAAYV,CAAZ,CAGd,OAAOwmC,EAAA,CAAQtJ,CAAR,CALL,CAMF,MAAOza,CAAP,CAAY,CACRsjB,CAEJ,CAFaC,EAAA,CAAmB,QAAnB,CAA4D7M,CAA5D,CACT1W,CAAApgB,SAAA,EADS,CAEb,CAAAwT,CAAA,CAAkBkwB,CAAlB,CAHY,CAX8B,CAAzC,CAiBF,CAEHO,IAAKnN,CAFF,CAGHS,YAAaA,CAHV,CAIH8M,gBAAiBA,QAAQ,CAACh9B,CAAD;AAAQkd,CAAR,CAAkB+f,CAAlB,CAAkC,CACzD,IAAInS,CACJ,OAAO9qB,EAAAk9B,YAAA,CAAkBV,CAAlB,CAA4BW,QAA6B,CAAC3J,CAAD,CAAS4J,CAAT,CAAoB,CAClF,IAAIC,EAAYP,CAAA,CAAQtJ,CAAR,CACZh9B,EAAA,CAAW0mB,CAAX,CAAJ,EACEA,CAAAxmB,KAAA,CAAc,IAAd,CAAoB2mC,CAApB,CAA+B7J,CAAA,GAAW4J,CAAX,CAAuBtS,CAAvB,CAAmCuS,CAAlE,CAA6Er9B,CAA7E,CAEF8qB,EAAA,CAAYuS,CALsE,CAA7E,CAMJJ,CANI,CAFkD,CAJxD,CAjBE,CAhCsC,CA9C6B,CAxGc,IACxFN,EAAoB3J,CAAAj9B,OADoE,CAExF8mC,EAAkB5J,CAAAl9B,OAFsE,CAGxFimC,EAAqB,IAAIphC,MAAJ,CAAWo4B,CAAAz1B,QAAA,CAAoB,IAApB,CAA0Bq+B,CAA1B,CAAX,CAA8C,GAA9C,CAHmE,CAIxFK,EAAmB,IAAIrhC,MAAJ,CAAWq4B,CAAA11B,QAAA,CAAkB,IAAlB,CAAwBq+B,CAAxB,CAAX,CAA4C,GAA5C,CAiPvBrvB,EAAAymB,YAAA,CAA2BsK,QAAQ,EAAG,CACpC,MAAOtK,EAD6B,CAgBtCzmB,EAAA0mB,UAAA,CAAyBsK,QAAQ,EAAG,CAClC,MAAOtK,EAD2B,CAIpC,OAAO1mB,EAzQqF,CAAlF,CAzCkB,CAsThCG,QAASA,GAAiB,EAAG,CAC3B,IAAAiJ,KAAA,CAAY,CAAC,YAAD,CAAe,SAAf,CAA0B,IAA1B,CAAgC,KAAhC,CACP,QAAQ,CAACtI,CAAD,CAAeoB,CAAf,CAA0BlB,CAA1B,CAAgCE,CAAhC,CAAqC,CAgIhDyO,QAASA,EAAQ,CAACjgB,CAAD,CAAK0jB,CAAL,CAAY6d,CAAZ,CAAmBC,CAAnB,CAAgC,CAAA,IAC3CC,EAAcjvB,CAAAivB,YAD6B,CAE3CC,EAAgBlvB,CAAAkvB,cAF2B,CAG3CC,EAAY,CAH+B,CAI3CC,EAAatlC,CAAA,CAAUklC,CAAV,CAAbI,EAAuC,CAACJ,CAJG,CAK3C5E,EAAWpZ,CAACoe,CAAA,CAAYpwB,CAAZ,CAAkBF,CAAnBkS,OAAA,EALgC,CAM3CiY,EAAUmB,CAAAnB,QAEd8F,EAAA,CAAQjlC,CAAA,CAAUilC,CAAV,CAAA,CAAmBA,CAAnB,CAA2B,CAEnC9F,EAAA7I,KAAA,CAAa,IAAb,CAAmB,IAAnB,CAAyB5yB,CAAzB,CAEAy7B,EAAAoG,aAAA;AAAuBJ,CAAA,CAAYK,QAAa,EAAG,CACjDlF,CAAAmF,OAAA,CAAgBJ,CAAA,EAAhB,CAEY,EAAZ,CAAIJ,CAAJ,EAAiBI,CAAjB,EAA8BJ,CAA9B,GACE3E,CAAAC,QAAA,CAAiB8E,CAAjB,CAEA,CADAD,CAAA,CAAcjG,CAAAoG,aAAd,CACA,CAAA,OAAOG,CAAA,CAAUvG,CAAAoG,aAAV,CAHT,CAMKD,EAAL,EAAgBxwB,CAAAnN,OAAA,EATiC,CAA5B,CAWpByf,CAXoB,CAavBse,EAAA,CAAUvG,CAAAoG,aAAV,CAAA,CAAkCjF,CAElC,OAAOnB,EA3BwC,CA/HjD,IAAIuG,EAAY,EAwKhB/hB,EAAA2D,OAAA,CAAkBqe,QAAQ,CAACxG,CAAD,CAAU,CAClC,MAAIA,EAAJ,EAAeA,CAAAoG,aAAf,GAAuCG,EAAvC,EACEA,CAAA,CAAUvG,CAAAoG,aAAV,CAAArH,OAAA,CAAuC,UAAvC,CAGO,CAFPhoB,CAAAkvB,cAAA,CAAsBjG,CAAAoG,aAAtB,CAEO,CADP,OAAOG,CAAA,CAAUvG,CAAAoG,aAAV,CACA,CAAA,CAAA,CAJT,EAMO,CAAA,CAP2B,CAUpC,OAAO5hB,EAnLyC,CADtC,CADe,CAmM7BtW,QAASA,GAAe,EAAG,CACzB,IAAA+P,KAAA,CAAYC,QAAQ,EAAG,CACrB,MAAO,CACLmL,GAAI,OADC,CAGLod,eAAgB,CACdC,YAAa,GADC,CAEdC,UAAW,GAFG,CAGdC,SAAU,CACR,CACEC,OAAQ,CADV,CAEEC,QAAS,CAFX,CAGEC,QAAS,CAHX,CAIEC,OAAQ,EAJV,CAKEC,OAAQ,EALV,CAMEC,OAAQ,GANV,CAOEC,OAAQ,EAPV,CAQEC,MAAO,CART;AASEC,OAAQ,CATV,CADQ,CAWN,CACAR,OAAQ,CADR,CAEAC,QAAS,CAFT,CAGAC,QAAS,CAHT,CAIAC,OAAQ,QAJR,CAKAC,OAAQ,EALR,CAMAC,OAAQ,SANR,CAOAC,OAAQ,GAPR,CAQAC,MAAO,CARP,CASAC,OAAQ,CATR,CAXM,CAHI,CA0BdC,aAAc,GA1BA,CAHX,CAgCLC,iBAAkB,CAChBC,MACI,uFAAA,MAAA,CAAA,GAAA,CAFY,CAIhBC,WAAa,iDAAA,MAAA,CAAA,GAAA,CAJG,CAKhBC,IAAK,0DAAA,MAAA,CAAA,GAAA,CALW,CAMhBC,SAAU,6BAAA,MAAA,CAAA,GAAA,CANM,CAOhBC,MAAO,CAAC,IAAD,CAAM,IAAN,CAPS,CAQhBC,OAAQ,oBARQ,CAShB,QAAS,eATO;AAUhBC,SAAU,iBAVM,CAWhBC,SAAU,WAXM,CAYhBC,WAAY,UAZI,CAahBC,UAAW,QAbK,CAchBC,WAAY,WAdI,CAehBC,UAAW,QAfK,CAhCb,CAkDLC,UAAWA,QAAQ,CAACC,CAAD,CAAM,CACvB,MAAY,EAAZ,GAAIA,CAAJ,CACS,KADT,CAGO,OAJgB,CAlDpB,CADc,CADE,CAyE3BC,QAASA,GAAU,CAAC98B,CAAD,CAAO,CACpB+8B,CAAAA,CAAW/8B,CAAAzJ,MAAA,CAAW,GAAX,CAGf,KAHA,IACIzC,EAAIipC,CAAAlqC,OAER,CAAOiB,CAAA,EAAP,CAAA,CACEipC,CAAA,CAASjpC,CAAT,CAAA,CAAckH,EAAA,CAAiB+hC,CAAA,CAASjpC,CAAT,CAAjB,CAGhB,OAAOipC,EAAAhiC,KAAA,CAAc,GAAd,CARiB,CAW1BiiC,QAASA,GAAgB,CAACC,CAAD,CAAcC,CAAd,CAA2B,CAClD,IAAIC,EAAYjF,EAAA,CAAW+E,CAAX,CAEhBC,EAAAE,WAAA,CAAyBD,CAAAhF,SACzB+E,EAAAG,OAAA,CAAqBF,CAAAG,SACrBJ,EAAAK,OAAA,CAAqB1oC,EAAA,CAAIsoC,CAAAK,KAAJ,CAArB,EAA4CC,EAAA,CAAcN,CAAAhF,SAAd,CAA5C,EAAiF,IAL/B,CASpDuF,QAASA,GAAW,CAACC,CAAD,CAAcT,CAAd,CAA2B,CAC7C,IAAIU,EAAsC,GAAtCA,GAAYD,CAAAzlC,OAAA,CAAmB,CAAnB,CACZ0lC,EAAJ,GACED,CADF,CACgB,GADhB,CACsBA,CADtB,CAGA,KAAIhmC,EAAQugC,EAAA,CAAWyF,CAAX,CACZT,EAAAW,OAAA,CAAqBtjC,kBAAA,CAAmBqjC,CAAA,EAAyC,GAAzC,GAAYjmC,CAAAmmC,SAAA5lC,OAAA,CAAsB,CAAtB,CAAZ;AACpCP,CAAAmmC,SAAAxhB,UAAA,CAAyB,CAAzB,CADoC,CACN3kB,CAAAmmC,SADb,CAErBZ,EAAAa,SAAA,CAAuBvjC,EAAA,CAAc7C,CAAAqmC,OAAd,CACvBd,EAAAe,OAAA,CAAqB1jC,kBAAA,CAAmB5C,CAAAqgB,KAAnB,CAGjBklB,EAAAW,OAAJ,EAA0D,GAA1D,EAA0BX,CAAAW,OAAA3lC,OAAA,CAA0B,CAA1B,CAA1B,GACEglC,CAAAW,OADF,CACuB,GADvB,CAC6BX,CAAAW,OAD7B,CAZ6C,CAyB/CK,QAASA,GAAU,CAACC,CAAD,CAAQC,CAAR,CAAe,CAChC,GAA6B,CAA7B,GAAIA,CAAAtnC,QAAA,CAAcqnC,CAAd,CAAJ,CACE,MAAOC,EAAA/iB,OAAA,CAAa8iB,CAAAtrC,OAAb,CAFuB,CAOlCuoB,QAASA,GAAS,CAACvB,CAAD,CAAM,CACtB,IAAIhjB,EAAQgjB,CAAA/iB,QAAA,CAAY,GAAZ,CACZ,OAAiB,EAAV,EAAAD,CAAA,CAAcgjB,CAAd,CAAoBA,CAAAwB,OAAA,CAAW,CAAX,CAAcxkB,CAAd,CAFL,CAKxBwnC,QAASA,GAAa,CAACxkB,CAAD,CAAM,CAC1B,MAAOA,EAAAxf,QAAA,CAAY,UAAZ,CAAwB,IAAxB,CADmB,CAK5BikC,QAASA,GAAS,CAACzkB,CAAD,CAAM,CACtB,MAAOA,EAAAwB,OAAA,CAAW,CAAX,CAAcD,EAAA,CAAUvB,CAAV,CAAA0kB,YAAA,CAA2B,GAA3B,CAAd,CAAgD,CAAhD,CADe,CAkBxBC,QAASA,GAAgB,CAACC,CAAD,CAAUC,CAAV,CAAsB,CAC7C,IAAAC,QAAA,CAAe,CAAA,CACfD,EAAA,CAAaA,CAAb,EAA2B,EAC3B,KAAIE,EAAgBN,EAAA,CAAUG,CAAV,CACpBzB,GAAA,CAAiByB,CAAjB,CAA0B,IAA1B,CAQA,KAAAI,QAAA,CAAeC,QAAQ,CAACjlB,CAAD,CAAM,CAC3B,IAAIklB,EAAUb,EAAA,CAAWU,CAAX,CAA0B/kB,CAA1B,CACd,IAAK,CAAA7mB,CAAA,CAAS+rC,CAAT,CAAL,CACE,KAAMC,GAAA,CAAgB,UAAhB;AAA6EnlB,CAA7E,CACF+kB,CADE,CAAN,CAIFlB,EAAA,CAAYqB,CAAZ,CAAqB,IAArB,CAEK,KAAAlB,OAAL,GACE,IAAAA,OADF,CACgB,GADhB,CAIA,KAAAoB,UAAA,EAb2B,CAoB7B,KAAAA,UAAA,CAAiBC,QAAQ,EAAG,CAAA,IACtBlB,EAASrjC,EAAA,CAAW,IAAAojC,SAAX,CADa,CAEtB/lB,EAAO,IAAAimB,OAAA,CAAc,GAAd,CAAoBjjC,EAAA,CAAiB,IAAAijC,OAAjB,CAApB,CAAoD,EAE/D,KAAAkB,MAAA,CAAarC,EAAA,CAAW,IAAAe,OAAX,CAAb,EAAwCG,CAAA,CAAS,GAAT,CAAeA,CAAf,CAAwB,EAAhE,EAAsEhmB,CACtE,KAAAonB,SAAA,CAAgBR,CAAhB,CAAgC,IAAAO,MAAA9jB,OAAA,CAAkB,CAAlB,CALN,CAQ5B,KAAAgkB,eAAA,CAAsBC,QAAQ,CAACzlB,CAAD,CAAM0lB,CAAN,CAAe,CAC3C,GAAIA,CAAJ,EAA8B,GAA9B,GAAeA,CAAA,CAAQ,CAAR,CAAf,CAIE,MADA,KAAAvnB,KAAA,CAAUunB,CAAA3mC,MAAA,CAAc,CAAd,CAAV,CACO,CAAA,CAAA,CALkC,KAOvC4mC,CAPuC,CAO/BC,CAGZ,EAAKD,CAAL,CAActB,EAAA,CAAWO,CAAX,CAAoB5kB,CAApB,CAAd,IAA4CrnB,CAA5C,EACEitC,CAEE,CAFWD,CAEX,CAAAE,CAAA,CADF,CAAKF,CAAL,CAActB,EAAA,CAAWQ,CAAX,CAAuBc,CAAvB,CAAd,IAAkDhtC,CAAlD,CACiBosC,CADjB,EACkCV,EAAA,CAAW,GAAX,CAAgBsB,CAAhB,CADlC,EAC6DA,CAD7D,EAGiBf,CAHjB,CAG2BgB,CAL7B,EAOO,CAAKD,CAAL,CAActB,EAAA,CAAWU,CAAX,CAA0B/kB,CAA1B,CAAd,IAAkDrnB,CAAlD,CACLktC,CADK,CACUd,CADV,CAC0BY,CAD1B,CAEIZ,CAFJ,EAEqB/kB,CAFrB,CAE2B,GAF3B,GAGL6lB,CAHK,CAGUd,CAHV,CAKHc,EAAJ,EACE,IAAAb,QAAA,CAAaa,CAAb,CAEF,OAAO,CAAEA,CAAAA,CAzBkC,CAxCA,CA+E/CC,QAASA,GAAmB,CAAClB,CAAD,CAAUmB,CAAV,CAAsB,CAChD,IAAIhB,EAAgBN,EAAA,CAAUG,CAAV,CAEpBzB,GAAA,CAAiByB,CAAjB,CAA0B,IAA1B,CAQA,KAAAI,QAAA;AAAeC,QAAQ,CAACjlB,CAAD,CAAM,CACvBgmB,CAAAA,CAAiB3B,EAAA,CAAWO,CAAX,CAAoB5kB,CAApB,CAAjBgmB,EAA6C3B,EAAA,CAAWU,CAAX,CAA0B/kB,CAA1B,CACjD,KAAIimB,CAE6B,IAAjC,GAAID,CAAA3nC,OAAA,CAAsB,CAAtB,CAAJ,EAIE4nC,CACA,CADiB5B,EAAA,CAAW0B,CAAX,CAAuBC,CAAvB,CACjB,CAAIzqC,CAAA,CAAY0qC,CAAZ,CAAJ,GAEEA,CAFF,CAEmBD,CAFnB,CALF,EAcEC,CAdF,CAcmB,IAAAnB,QAAA,CAAekB,CAAf,CAAgC,EAGnDnC,GAAA,CAAYoC,CAAZ,CAA4B,IAA5B,CAEqCjC,EAAAA,CAAAA,IAAAA,OAoBnC,KAAIkC,EAAqB,iBAKC,EAA1B,GAAIlmB,CAAA/iB,QAAA,CAzB4D2nC,CAyB5D,CAAJ,GACE5kB,CADF,CACQA,CAAAxf,QAAA,CA1BwDokC,CA0BxD,CAAkB,EAAlB,CADR,CAKIsB,EAAAhzB,KAAA,CAAwB8M,CAAxB,CAAJ,GAKA,CALA,CAKO,CADPmmB,CACO,CADiBD,CAAAhzB,KAAA,CAAwB/M,CAAxB,CACjB,EAAwBggC,CAAA,CAAsB,CAAtB,CAAxB,CAAmDhgC,CAL1D,CA9BF,KAAA69B,OAAA,CAAc,CAEd,KAAAoB,UAAA,EAzB2B,CAkE7B,KAAAA,UAAA,CAAiBC,QAAQ,EAAG,CAAA,IACtBlB,EAASrjC,EAAA,CAAW,IAAAojC,SAAX,CADa,CAEtB/lB,EAAO,IAAAimB,OAAA,CAAc,GAAd,CAAoBjjC,EAAA,CAAiB,IAAAijC,OAAjB,CAApB,CAAoD,EAE/D,KAAAkB,MAAA,CAAarC,EAAA,CAAW,IAAAe,OAAX,CAAb,EAAwCG,CAAA,CAAS,GAAT,CAAeA,CAAf,CAAwB,EAAhE,EAAsEhmB,CACtE,KAAAonB,SAAA,CAAgBX,CAAhB,EAA2B,IAAAU,MAAA,CAAaS,CAAb,CAA0B,IAAAT,MAA1B,CAAuC,EAAlE,CAL0B,CAQ5B,KAAAE,eAAA,CAAsBC,QAAQ,CAACzlB,CAAD,CAAM0lB,CAAN,CAAe,CAC3C,MAAInkB,GAAA,CAAUqjB,CAAV,CAAJ,EAA0BrjB,EAAA,CAAUvB,CAAV,CAA1B,EACE,IAAAglB,QAAA,CAAahlB,CAAb,CACO,CAAA,CAAA,CAFT;AAIO,CAAA,CALoC,CArFG,CAwGlDomB,QAASA,GAA0B,CAACxB,CAAD,CAAUmB,CAAV,CAAsB,CACvD,IAAAjB,QAAA,CAAe,CAAA,CACfgB,GAAAzmC,MAAA,CAA0B,IAA1B,CAAgCxE,SAAhC,CAEA,KAAIkqC,EAAgBN,EAAA,CAAUG,CAAV,CAEpB,KAAAY,eAAA,CAAsBC,QAAQ,CAACzlB,CAAD,CAAM0lB,CAAN,CAAe,CAC3C,GAAIA,CAAJ,EAA8B,GAA9B,GAAeA,CAAA,CAAQ,CAAR,CAAf,CAIE,MADA,KAAAvnB,KAAA,CAAUunB,CAAA3mC,MAAA,CAAc,CAAd,CAAV,CACO,CAAA,CAAA,CAGT,KAAI8mC,CAAJ,CACIF,CAEAf,EAAJ,EAAerjB,EAAA,CAAUvB,CAAV,CAAf,CACE6lB,CADF,CACiB7lB,CADjB,CAEO,CAAK2lB,CAAL,CAActB,EAAA,CAAWU,CAAX,CAA0B/kB,CAA1B,CAAd,EACL6lB,CADK,CACUjB,CADV,CACoBmB,CADpB,CACiCJ,CADjC,CAEIZ,CAFJ,GAEsB/kB,CAFtB,CAE4B,GAF5B,GAGL6lB,CAHK,CAGUd,CAHV,CAKHc,EAAJ,EACE,IAAAb,QAAA,CAAaa,CAAb,CAEF,OAAO,CAAEA,CAAAA,CArBkC,CAwB7C,KAAAT,UAAA,CAAiBC,QAAQ,EAAG,CAAA,IACtBlB,EAASrjC,EAAA,CAAW,IAAAojC,SAAX,CADa,CAEtB/lB,EAAO,IAAAimB,OAAA,CAAc,GAAd,CAAoBjjC,EAAA,CAAiB,IAAAijC,OAAjB,CAApB,CAAoD,EAE/D,KAAAkB,MAAA,CAAarC,EAAA,CAAW,IAAAe,OAAX,CAAb,EAAwCG,CAAA,CAAS,GAAT,CAAeA,CAAf,CAAwB,EAAhE,EAAsEhmB,CAEtE,KAAAonB,SAAA,CAAgBX,CAAhB,CAA0BmB,CAA1B,CAAuC,IAAAT,MANb,CA9B2B,CAoWzDe,QAASA,GAAc,CAACC,CAAD,CAAW,CAChC,MAAO,SAAQ,EAAG,CAChB,MAAO,KAAA,CAAKA,CAAL,CADS,CADc,CAOlCC,QAASA,GAAoB,CAACD,CAAD,CAAWE,CAAX,CAAuB,CAClD,MAAO,SAAQ,CAACpsC,CAAD,CAAQ,CACrB,GAAImB,CAAA,CAAYnB,CAAZ,CAAJ,CACE,MAAO,KAAA,CAAKksC,CAAL,CAET;IAAA,CAAKA,CAAL,CAAA,CAAiBE,CAAA,CAAWpsC,CAAX,CACjB,KAAAgrC,UAAA,EAEA,OAAO,KAPc,CAD2B,CA6CpDn1B,QAASA,GAAiB,EAAG,CAAA,IACvB81B,EAAa,EADU,CAEvBU,EAAY,CACV5f,QAAS,CAAA,CADC,CAEV6f,YAAa,CAAA,CAFH,CAGVC,aAAc,CAAA,CAHJ,CAahB,KAAAZ,WAAA,CAAkBa,QAAQ,CAAC9kC,CAAD,CAAS,CACjC,MAAItG,EAAA,CAAUsG,CAAV,CAAJ,EACEikC,CACO,CADMjkC,CACN,CAAA,IAFT,EAISikC,CALwB,CA4BnC,KAAAU,UAAA,CAAiBI,QAAQ,CAACzhB,CAAD,CAAO,CAC9B,MAAInpB,GAAA,CAAUmpB,CAAV,CAAJ,EACEqhB,CAAA5f,QACO,CADazB,CACb,CAAA,IAFT,EAGW3pB,CAAA,CAAS2pB,CAAT,CAAJ,EAEDnpB,EAAA,CAAUmpB,CAAAyB,QAAV,CAYG,GAXL4f,CAAA5f,QAWK,CAXezB,CAAAyB,QAWf,EARH5qB,EAAA,CAAUmpB,CAAAshB,YAAV,CAQG,GAPLD,CAAAC,YAOK,CAPmBthB,CAAAshB,YAOnB,EAJHzqC,EAAA,CAAUmpB,CAAAuhB,aAAV,CAIG,GAHLF,CAAAE,aAGK,CAHoBvhB,CAAAuhB,aAGpB,EAAA,IAdF,EAgBEF,CApBqB,CA+DhC,KAAA7tB,KAAA,CAAY,CAAC,YAAD,CAAe,UAAf,CAA2B,UAA3B,CAAuC,cAAvC,CAAuD,SAAvD,CACR,QAAQ,CAACtI,CAAD,CAAa1B,CAAb,CAAuBoC,CAAvB,CAAiCsX,CAAjC,CAA+C5W,CAA/C,CAAwD,CAyBlEo1B,QAASA,EAAyB,CAAC9mB,CAAD,CAAMxf,CAAN,CAAeqf,CAAf,CAAsB,CACtD,IAAIknB,EAAS/2B,CAAAgQ,IAAA,EAAb;AACIgnB,EAAWh3B,CAAAi3B,QACf,IAAI,CACFr4B,CAAAoR,IAAA,CAAaA,CAAb,CAAkBxf,CAAlB,CAA2Bqf,CAA3B,CAKA,CAAA7P,CAAAi3B,QAAA,CAAoBr4B,CAAAiR,MAAA,EANlB,CAOF,MAAO1f,CAAP,CAAU,CAKV,KAHA6P,EAAAgQ,IAAA,CAAc+mB,CAAd,CAGM5mC,CAFN6P,CAAAi3B,QAEM9mC,CAFc6mC,CAEd7mC,CAAAA,CAAN,CALU,CAV0C,CA8IxD+mC,QAASA,EAAmB,CAACH,CAAD,CAASC,CAAT,CAAmB,CAC7C12B,CAAA62B,WAAA,CAAsB,wBAAtB,CAAgDn3B,CAAAo3B,OAAA,EAAhD,CAAoEL,CAApE,CACE/2B,CAAAi3B,QADF,CACqBD,CADrB,CAD6C,CAvKmB,IAC9Dh3B,CAD8D,CAE9Dq3B,CACAvlB,EAAAA,CAAWlT,CAAAkT,SAAA,EAHmD,KAI9DwlB,EAAa14B,CAAAoR,IAAA,EAJiD,CAK9D4kB,CAEJ,IAAI6B,CAAA5f,QAAJ,CAAuB,CACrB,GAAK/E,CAAAA,CAAL,EAAiB2kB,CAAAC,YAAjB,CACE,KAAMvB,GAAA,CAAgB,QAAhB,CAAN,CAGFP,CAAA,CAAqB0C,CAltBlB7kB,UAAA,CAAc,CAAd,CAktBkB6kB,CAltBDrqC,QAAA,CAAY,GAAZ,CAktBCqqC,CAltBgBrqC,QAAA,CAAY,IAAZ,CAAjB,CAAqC,CAArC,CAAjB,CAktBH,EAAoC6kB,CAApC,EAAgD,GAAhD,CACAulB,EAAA,CAAer2B,CAAA4O,QAAA,CAAmB+kB,EAAnB,CAAsCyB,EANhC,CAAvB,IAQExB,EACA,CADUrjB,EAAA,CAAU+lB,CAAV,CACV,CAAAD,CAAA,CAAevB,EAEjB91B,EAAA,CAAY,IAAIq3B,CAAJ,CAAiBzC,CAAjB,CAA0B,GAA1B,CAAgCmB,CAAhC,CACZ/1B,EAAAw1B,eAAA,CAAyB8B,CAAzB,CAAqCA,CAArC,CAEAt3B,EAAAi3B,QAAA,CAAoBr4B,CAAAiR,MAAA,EAEpB,KAAI0nB,EAAoB,2BAqBxBjf,EAAA1jB,GAAA,CAAgB,OAAhB,CAAyB,QAAQ,CAACmT,CAAD,CAAQ,CAIvC,GAAK0uB,CAAAE,aAAL,EAA+Ba,CAAAzvB,CAAAyvB,QAA/B;AAAgDC,CAAA1vB,CAAA0vB,QAAhD,EAAiEC,CAAA3vB,CAAA2vB,SAAjE,EAAkG,CAAlG,EAAmF3vB,CAAA4vB,MAAnF,EAAuH,CAAvH,EAAuG5vB,CAAA6vB,OAAvG,CAAA,CAKA,IAHA,IAAIxpB,EAAMpe,CAAA,CAAO+X,CAAA8vB,OAAP,CAGV,CAA6B,GAA7B,GAAOlrC,EAAA,CAAUyhB,CAAA,CAAI,CAAJ,CAAV,CAAP,CAAA,CAEE,GAAIA,CAAA,CAAI,CAAJ,CAAJ,GAAekK,CAAA,CAAa,CAAb,CAAf,EAAmC,CAAA,CAAClK,CAAD,CAAOA,CAAAnH,OAAA,EAAP,EAAqB,CAArB,CAAnC,CAA4D,MAG9D,KAAI6wB,EAAU1pB,CAAA/hB,KAAA,CAAS,MAAT,CAAd,CAGIqpC,EAAUtnB,CAAA9hB,KAAA,CAAS,MAAT,CAAVopC,EAA8BtnB,CAAA9hB,KAAA,CAAS,YAAT,CAE9Bb,EAAA,CAASqsC,CAAT,CAAJ,EAAgD,4BAAhD,GAAyBA,CAAAlsC,SAAA,EAAzB,GAGEksC,CAHF,CAGYzJ,EAAA,CAAWyJ,CAAA1c,QAAX,CAAAnK,KAHZ,CAOIsmB,EAAAhkC,KAAA,CAAuBukC,CAAvB,CAAJ,EAEIA,CAAAA,CAFJ,EAEgB1pB,CAAA9hB,KAAA,CAAS,QAAT,CAFhB,EAEuCyb,CAAAC,mBAAA,EAFvC,EAGM,CAAAhI,CAAAw1B,eAAA,CAAyBsC,CAAzB,CAAkCpC,CAAlC,CAHN,GAOI3tB,CAAAgwB,eAAA,EAEA,CAAI/3B,CAAAo3B,OAAA,EAAJ,EAA0Bx4B,CAAAoR,IAAA,EAA1B,GACE1P,CAAAnN,OAAA,EAEA,CAAAuO,CAAAlO,QAAA,CAAgB,0BAAhB,CAAA,CAA8C,CAAA,CAHhD,CATJ,CAtBA,CAJuC,CAAzC,CA8CIwM,EAAAo3B,OAAA,EAAJ,EAA0BE,CAA1B,EACE14B,CAAAoR,IAAA,CAAahQ,CAAAo3B,OAAA,EAAb,CAAiC,CAAA,CAAjC,CAGF,KAAIY,EAAe,CAAA,CAGnBp5B,EAAA+S,YAAA,CAAqB,QAAQ,CAACsmB,CAAD;AAASC,CAAT,CAAmB,CAC9C53B,CAAAvU,WAAA,CAAsB,QAAQ,EAAG,CAC/B,IAAIgrC,EAAS/2B,CAAAo3B,OAAA,EAAb,CACIJ,EAAWh3B,CAAAi3B,QADf,CAEI/uB,CAEJlI,EAAAg1B,QAAA,CAAkBiD,CAAlB,CACAj4B,EAAAi3B,QAAA,CAAoBiB,CAEpBhwB,EAAA,CAAmB5H,CAAA62B,WAAA,CAAsB,sBAAtB,CAA8Cc,CAA9C,CAAsDlB,CAAtD,CACfmB,CADe,CACLlB,CADK,CAAA9uB,iBAKflI,EAAAo3B,OAAA,EAAJ,GAA2Ba,CAA3B,GAEI/vB,CAAJ,EACElI,CAAAg1B,QAAA,CAAkB+B,CAAlB,CAEA,CADA/2B,CAAAi3B,QACA,CADoBD,CACpB,CAAAF,CAAA,CAA0BC,CAA1B,CAAkC,CAAA,CAAlC,CAAyCC,CAAzC,CAHF,GAKEgB,CACA,CADe,CAAA,CACf,CAAAd,CAAA,CAAoBH,CAApB,CAA4BC,CAA5B,CANF,CAFA,CAb+B,CAAjC,CAwBK12B,EAAAurB,QAAL,EAAyBvrB,CAAA63B,QAAA,EAzBqB,CAAhD,CA6BA73B,EAAAtU,OAAA,CAAkBosC,QAAuB,EAAG,CAC1C,IAAIrB,EAASvC,EAAA,CAAc51B,CAAAoR,IAAA,EAAd,CAAb,CACIioB,EAASzD,EAAA,CAAcx0B,CAAAo3B,OAAA,EAAd,CADb,CAEIJ,EAAWp4B,CAAAiR,MAAA,EAFf,CAGIwoB,EAAiBr4B,CAAAs4B,UAHrB,CAIIC,EAAoBxB,CAApBwB,GAA+BN,CAA/BM,EACDv4B,CAAA80B,QADCyD,EACoBv3B,CAAA4O,QADpB2oB,EACwCvB,CADxCuB,GACqDv4B,CAAAi3B,QAEzD,IAAIe,CAAJ,EAAoBO,CAApB,CACEP,CAEA,CAFe,CAAA,CAEf,CAAA13B,CAAAvU,WAAA,CAAsB,QAAQ,EAAG,CAC/B,IAAIksC,EAASj4B,CAAAo3B,OAAA,EAAb,CACIlvB,EAAmB5H,CAAA62B,WAAA,CAAsB,sBAAtB,CAA8Cc,CAA9C,CAAsDlB,CAAtD,CACnB/2B,CAAAi3B,QADmB,CACAD,CADA,CAAA9uB,iBAKnBlI,EAAAo3B,OAAA,EAAJ;AAA2Ba,CAA3B,GAEI/vB,CAAJ,EACElI,CAAAg1B,QAAA,CAAkB+B,CAAlB,CACA,CAAA/2B,CAAAi3B,QAAA,CAAoBD,CAFtB,GAIMuB,CAIJ,EAHEzB,CAAA,CAA0BmB,CAA1B,CAAkCI,CAAlC,CAC0BrB,CAAA,GAAah3B,CAAAi3B,QAAb,CAAiC,IAAjC,CAAwCj3B,CAAAi3B,QADlE,CAGF,CAAAC,CAAA,CAAoBH,CAApB,CAA4BC,CAA5B,CARF,CAFA,CAP+B,CAAjC,CAsBFh3B,EAAAs4B,UAAA,CAAsB,CAAA,CAjCoB,CAA5C,CAuCA,OAAOt4B,EArK2D,CADxD,CA1Ge,CAoU7BG,QAASA,GAAY,EAAG,CAAA,IAClBq4B,EAAQ,CAAA,CADU,CAElBvpC,EAAO,IASX,KAAAwpC,aAAA,CAAoBC,QAAQ,CAACC,CAAD,CAAO,CACjC,MAAIntC,EAAA,CAAUmtC,CAAV,CAAJ,EACEH,CACK,CADGG,CACH,CAAA,IAFP,EAISH,CALwB,CASnC,KAAA5vB,KAAA,CAAY,CAAC,SAAD,CAAY,QAAQ,CAAClH,CAAD,CAAU,CAwDxCk3B,QAASA,EAAW,CAAChjC,CAAD,CAAM,CACpBA,CAAJ,WAAmBijC,MAAnB,GACMjjC,CAAA6V,MAAJ,CACE7V,CADF,CACSA,CAAA4V,QAAD,EAAoD,EAApD,GAAgB5V,CAAA6V,MAAAxe,QAAA,CAAkB2I,CAAA4V,QAAlB,CAAhB,CACA,SADA,CACY5V,CAAA4V,QADZ,CAC0B,IAD1B,CACiC5V,CAAA6V,MADjC,CAEA7V,CAAA6V,MAHR,CAIW7V,CAAAkjC,UAJX,GAKEljC,CALF,CAKQA,CAAA4V,QALR,CAKsB,IALtB,CAK6B5V,CAAAkjC,UAL7B,CAK6C,GAL7C,CAKmDljC,CAAAwyB,KALnD,CADF,CASA,OAAOxyB,EAViB,CAa1BmjC,QAASA,EAAU,CAACn0B,CAAD,CAAO,CAAA,IACpBo0B,EAAUt3B,CAAAs3B,QAAVA,EAA6B,EADT,CAEpBC,EAAQD,CAAA,CAAQp0B,CAAR,CAARq0B,EAAyBD,CAAAE,IAAzBD,EAAwC9tC,CACxCguC,EAAAA,CAAW,CAAA,CAIf,IAAI,CACFA,CAAA,CAAW,CAAE9pC,CAAA4pC,CAAA5pC,MADX,CAEF,MAAOc,CAAP,CAAU,EAEZ,MAAIgpC,EAAJ;AACS,QAAQ,EAAG,CAChB,IAAIzvB,EAAO,EACXrgB,EAAA,CAAQwB,SAAR,CAAmB,QAAQ,CAAC+K,CAAD,CAAM,CAC/B8T,CAAAjc,KAAA,CAAUmrC,CAAA,CAAYhjC,CAAZ,CAAV,CAD+B,CAAjC,CAGA,OAAOqjC,EAAA5pC,MAAA,CAAY2pC,CAAZ,CAAqBtvB,CAArB,CALS,CADpB,CAYO,QAAQ,CAAC0vB,CAAD,CAAOC,CAAP,CAAa,CAC1BJ,CAAA,CAAMG,CAAN,CAAoB,IAAR,EAAAC,CAAA,CAAe,EAAf,CAAoBA,CAAhC,CAD0B,CAvBJ,CApE1B,MAAO,CAQLH,IAAKH,CAAA,CAAW,KAAX,CARA,CAiBLtkB,KAAMskB,CAAA,CAAW,MAAX,CAjBD,CA0BLxmB,KAAMwmB,CAAA,CAAW,MAAX,CA1BD,CAmCL9pB,MAAO8pB,CAAA,CAAW,OAAX,CAnCF,CA4CLP,MAAQ,QAAQ,EAAG,CACjB,IAAItpC,EAAK6pC,CAAA,CAAW,OAAX,CAET,OAAO,SAAQ,EAAG,CACZP,CAAJ,EACEtpC,CAAAG,MAAA,CAASJ,CAAT,CAAepE,SAAf,CAFc,CAHD,CAAX,EA5CH,CADiC,CAA9B,CApBU,CAiJxByuC,QAASA,GAAoB,CAACvnC,CAAD,CAAOwnC,CAAP,CAAuB,CAClD,GAAa,kBAAb,GAAIxnC,CAAJ,EAA4C,kBAA5C,GAAmCA,CAAnC,EACgB,kBADhB,GACOA,CADP,EAC+C,kBAD/C,GACsCA,CADtC,EAEgB,WAFhB,GAEOA,CAFP,CAGE,KAAMynC,GAAA,CAAa,SAAb,CAEmBD,CAFnB,CAAN,CAIF,MAAOxnC,EAR2C,CAWpD0nC,QAASA,GAAgB,CAAC3wC,CAAD,CAAMywC,CAAN,CAAsB,CAE7C,GAAIzwC,CAAJ,CAAS,CACP,GAAIA,CAAAkN,YAAJ,GAAwBlN,CAAxB,CACE,KAAM0wC,GAAA,CAAa,QAAb,CAEFD,CAFE,CAAN,CAGK,GACHzwC,CAAAL,OADG;AACYK,CADZ,CAEL,KAAM0wC,GAAA,CAAa,YAAb,CAEFD,CAFE,CAAN,CAGK,GACHzwC,CAAA4wC,SADG,GACc5wC,CAAAsD,SADd,EAC+BtD,CAAAuD,KAD/B,EAC2CvD,CAAAwD,KAD3C,EACuDxD,CAAAyD,KADvD,EAEL,KAAMitC,GAAA,CAAa,SAAb,CAEFD,CAFE,CAAN,CAGK,GACHzwC,CADG,GACKiB,MADL,CAEL,KAAMyvC,GAAA,CAAa,SAAb,CAEFD,CAFE,CAAN,CAjBK,CAsBT,MAAOzwC,EAxBsC,CAqR/C6wC,QAASA,GAAU,CAAC9J,CAAD,CAAM,CACvB,MAAOA,EAAA53B,SADgB,CAsezB2hC,QAASA,GAAM,CAAC9wC,CAAD,CAAMojB,CAAN,CAAc/V,CAAd,CAAoB0jC,CAApB,CAA8BC,CAA9B,CAAuC,CACpDL,EAAA,CAAiB3wC,CAAjB,CAAsBgxC,CAAtB,CACAL,GAAA,CAAiBvtB,CAAjB,CAAyB4tB,CAAzB,CAEIltC,EAAAA,CAAUuJ,CAAAzJ,MAAA,CAAW,GAAX,CACd,KADA,IAA+BlD,CAA/B,CACSS,EAAI,CAAb,CAAiC,CAAjC,CAAgB2C,CAAA5D,OAAhB,CAAoCiB,CAAA,EAApC,CAAyC,CACvCT,CAAA,CAAM8vC,EAAA,CAAqB1sC,CAAAqf,MAAA,EAArB,CAAsC6tB,CAAtC,CACN,KAAIC,EAAqB,CAArBA,GAAe9vC,CAAf8vC,EAA0B7tB,CAA1B6tB,EAAoC7tB,CAAA,CAAO1iB,CAAP,CAApCuwC,EAAoDjxC,CAAA,CAAIU,CAAJ,CACnDuwC,EAAL,GACEA,CACA,CADc,EACd,CAAAjxC,CAAA,CAAIU,CAAJ,CAAA,CAAWuwC,CAFb,CAIAjxC,EAAA,CAAM2wC,EAAA,CAAiBM,CAAjB,CAA8BD,CAA9B,CAPiC,CASzCtwC,CAAA,CAAM8vC,EAAA,CAAqB1sC,CAAAqf,MAAA,EAArB,CAAsC6tB,CAAtC,CACNL,GAAA,CAAiB3wC,CAAA,CAAIU,CAAJ,CAAjB,CAA2BswC,CAA3B,CAEA,OADAhxC,EAAA,CAAIU,CAAJ,CACA,CADWqwC,CAhByC,CAuBtDG,QAASA,GAA6B,CAACjoC,CAAD,CAAO,CAC3C,MAAe,aAAf,EAAOA,CADoC,CAS7CkoC,QAASA,GAAe,CAACC,CAAD,CAAOC,CAAP,CAAaC,CAAb,CAAmBC,CAAnB,CAAyBC,CAAzB,CAA+BR,CAA/B,CAAwCS,CAAxC,CAAyD,CAC/EjB,EAAA,CAAqBY,CAArB,CAA2BJ,CAA3B,CACAR,GAAA,CAAqBa,CAArB,CAA2BL,CAA3B,CACAR,GAAA,CAAqBc,CAArB,CAA2BN,CAA3B,CACAR,GAAA,CAAqBe,CAArB,CAA2BP,CAA3B,CACAR,GAAA,CAAqBgB,CAArB,CAA2BR,CAA3B,CACA,KAAIU,EAAMA,QAAQ,CAACC,CAAD,CAAI,CACpB,MAAOhB,GAAA,CAAiBgB,CAAjB;AAAoBX,CAApB,CADa,CAAtB,CAGIY,EAAQH,CAAD,EAAoBP,EAAA,CAA8BE,CAA9B,CAApB,CAA2DM,CAA3D,CAAiEpvC,EAH5E,CAIIuvC,EAAQJ,CAAD,EAAoBP,EAAA,CAA8BG,CAA9B,CAApB,CAA2DK,CAA3D,CAAiEpvC,EAJ5E,CAKIwvC,EAAQL,CAAD,EAAoBP,EAAA,CAA8BI,CAA9B,CAApB,CAA2DI,CAA3D,CAAiEpvC,EAL5E,CAMIyvC,EAAQN,CAAD,EAAoBP,EAAA,CAA8BK,CAA9B,CAApB,CAA2DG,CAA3D,CAAiEpvC,EAN5E,CAOI0vC,EAAQP,CAAD,EAAoBP,EAAA,CAA8BM,CAA9B,CAApB,CAA2DE,CAA3D,CAAiEpvC,EAE5E,OAAO2vC,SAAsB,CAAC9nC,CAAD,CAAQiZ,CAAR,CAAgB,CAC3C,IAAI8uB,EAAW9uB,CAAD,EAAWA,CAAAxiB,eAAA,CAAsBwwC,CAAtB,CAAX,CAA0ChuB,CAA1C,CAAmDjZ,CAEjE,IAAe,IAAf,EAAI+nC,CAAJ,CAAqB,MAAOA,EAC5BA,EAAA,CAAUN,CAAA,CAAKM,CAAA,CAAQd,CAAR,CAAL,CAEV,IAAKC,CAAAA,CAAL,CAAW,MAAOa,EAClB,IAAe,IAAf,EAAIA,CAAJ,CAAqB,MAAOryC,EAC5BqyC,EAAA,CAAUL,CAAA,CAAKK,CAAA,CAAQb,CAAR,CAAL,CAEV,IAAKC,CAAAA,CAAL,CAAW,MAAOY,EAClB,IAAe,IAAf,EAAIA,CAAJ,CAAqB,MAAOryC,EAC5BqyC,EAAA,CAAUJ,CAAA,CAAKI,CAAA,CAAQZ,CAAR,CAAL,CAEV,IAAKC,CAAAA,CAAL,CAAW,MAAOW,EAClB,IAAe,IAAf,EAAIA,CAAJ,CAAqB,MAAOryC,EAC5BqyC,EAAA,CAAUH,CAAA,CAAKG,CAAA,CAAQX,CAAR,CAAL,CAEV,OAAKC,EAAL,CACe,IAAf,EAAIU,CAAJ,CAA4BryC,CAA5B,CACAqyC,CADA,CACUF,CAAA,CAAKE,CAAA,CAAQV,CAAR,CAAL,CAFV,CAAkBU,CAlByB,CAfkC,CAyCjFC,QAASA,GAA4B,CAAC/rC,CAAD,CAAKqqC,CAAL,CAAqB,CACxD,MAAO,SAAQ,CAAC2B,CAAD,CAAIx2B,CAAJ,CAAO,CACpB,MAAOxV,EAAA,CAAGgsC,CAAH,CAAMx2B,CAAN,CAAS+0B,EAAT,CAA2BF,CAA3B,CADa,CADkC,CAM1D4B,QAASA,GAAQ,CAAChlC,CAAD,CAAOgd,CAAP,CAAgB2mB,CAAhB,CAAyB,CACxC,IAAIS,EAAkBpnB,CAAAonB,gBAAtB,CACIa,EAAiBb,CAAA,CAAkBc,EAAlB,CAA2CC,EADhE,CAEIpsC,EAAKksC,CAAA,CAAcjlC,CAAd,CACT,IAAIjH,CAAJ,CAAQ,MAAOA,EAJyB,KAOpCqsC,EAAWplC,CAAAzJ,MAAA,CAAW,GAAX,CAPyB,CAQpC8uC,EAAiBD,CAAAvyC,OAGrB,IAAImqB,CAAAxa,IAAJ,CAEIzJ,CAAA;AADmB,CAArB,CAAIssC,CAAJ,CACOvB,EAAA,CAAgBsB,CAAA,CAAS,CAAT,CAAhB,CAA6BA,CAAA,CAAS,CAAT,CAA7B,CAA0CA,CAAA,CAAS,CAAT,CAA1C,CAAuDA,CAAA,CAAS,CAAT,CAAvD,CAAoEA,CAAA,CAAS,CAAT,CAApE,CAAiFzB,CAAjF,CAA0FS,CAA1F,CADP,CAGOrrC,QAAsB,CAAC+D,CAAD,CAAQiZ,CAAR,CAAgB,CAAA,IACrCjiB,EAAI,CADiC,CAC9BsF,CACX,GACEA,EAIA,CAJM0qC,EAAA,CAAgBsB,CAAA,CAAStxC,CAAA,EAAT,CAAhB,CAA+BsxC,CAAA,CAAStxC,CAAA,EAAT,CAA/B,CAA8CsxC,CAAA,CAAStxC,CAAA,EAAT,CAA9C,CAA6DsxC,CAAA,CAAStxC,CAAA,EAAT,CAA7D,CACgBsxC,CAAA,CAAStxC,CAAA,EAAT,CADhB,CAC+B6vC,CAD/B,CACwCS,CADxC,CAAA,CACyDtnC,CADzD,CACgEiZ,CADhE,CAIN,CADAA,CACA,CADSvjB,CACT,CAAAsK,CAAA,CAAQ1D,CALV,OAMStF,CANT,CAMauxC,CANb,CAOA,OAAOjsC,EATkC,CAJ/C,KAgBO,CACL,IAAIksC,EAAO,EACPlB,EAAJ,GACEkB,CADF,EACU,oCADV,CAGA,KAAIC,EAAwBnB,CAC5BlxC,EAAA,CAAQkyC,CAAR,CAAkB,QAAQ,CAAC/xC,CAAD,CAAMwD,CAAN,CAAa,CACrCssC,EAAA,CAAqB9vC,CAArB,CAA0BswC,CAA1B,CACA,KAAI6B,GAAY3uC,CAAA,CAEE,GAFF,CAIE,yBAJF,CAI8BxD,CAJ9B,CAIoC,UAJhDmyC,EAI8D,GAJ9DA,CAIoEnyC,CACxE,IAAI+wC,CAAJ,EAAuBP,EAAA,CAA8BxwC,CAA9B,CAAvB,CACEmyC,CACA,CADW,MACX,CADoBA,CACpB,CAD+B,OAC/B,CAAAD,CAAA,CAAwB,CAAA,CAE1BD,EAAA,EAAQ,qCAAR,CACeE,CADf,CAC0B,KAZW,CAAvC,CAcAF,EAAA,EAAQ,WAGJG,EAAAA,CAAiB,IAAIC,QAAJ,CAAa,GAAb,CAAkB,GAAlB,CAAuB,KAAvB,CAA8B,IAA9B,CAAoCJ,CAApC,CAErBG,EAAAhwC,SAAA,CAA0BN,EAAA,CAAQmwC,CAAR,CACtBC,EAAJ,GACEE,CADF,CACmBX,EAAA,CAA6BW,CAA7B,CAA6C9B,CAA7C,CADnB,CAGA5qC,EAAA,CAAK0sC,CA7BA,CAgCP1sC,CAAA4sC,aAAA,CAAkB,CAAA,CAClB5sC,EAAAsvB,OAAA,CAAYud,QAAQ,CAAC9sC,CAAD;AAAO7E,CAAP,CAAc8hB,CAAd,CAAsB,CACxC,MAAO0tB,GAAA,CAAO3qC,CAAP,CAAaid,CAAb,CAAqB/V,CAArB,CAA2B/L,CAA3B,CAAkC+L,CAAlC,CADiC,CAI1C,OADAilC,EAAA,CAAcjlC,CAAd,CACA,CADsBjH,CA/DkB,CAqE1C8sC,QAASA,GAAU,CAAC5xC,CAAD,CAAQ,CACzB,MAAOX,EAAA,CAAWW,CAAAilC,QAAX,CAAA,CAA4BjlC,CAAAilC,QAAA,EAA5B,CAA8C4M,EAAAtyC,KAAA,CAAmBS,CAAnB,CAD5B,CAuD3BiW,QAASA,GAAc,EAAG,CACxB,IAAI67B,EAAetlC,EAAA,EAAnB,CACIulC,EAAiBvlC,EAAA,EAIrB,KAAAgS,KAAA,CAAY,CAAC,SAAD,CAAY,UAAZ,CAAwB,QAAQ,CAACtJ,CAAD,CAAU0B,CAAV,CAAoB,CAU9Do7B,QAASA,EAAoB,CAACvM,CAAD,CAAM,CACjC,IAAIwM,EAAUxM,CAEVA,EAAAiM,aAAJ,GACEO,CAKA,CALUA,QAAsB,CAACptC,CAAD,CAAOid,CAAP,CAAe,CAC7C,MAAO2jB,EAAA,CAAI5gC,CAAJ,CAAUid,CAAV,CADsC,CAK/C,CAFAmwB,CAAA/d,QAEA,CAFkBuR,CAAAvR,QAElB,CADA+d,CAAApkC,SACA,CADmB43B,CAAA53B,SACnB,CAAAokC,CAAA7d,OAAA,CAAiBqR,CAAArR,OANnB,CASA,OAAO6d,EAZ0B,CA4DnCC,QAASA,EAAuB,CAACC,CAAD,CAASlvB,CAAT,CAAe,CAC7C,IAD6C,IACpCpjB,EAAI,CADgC,CAC7BW,EAAK2xC,CAAAvzC,OAArB,CAAoCiB,CAApC,CAAwCW,CAAxC,CAA4CX,CAAA,EAA5C,CAAiD,CAC/C,IAAImP,EAAQmjC,CAAA,CAAOtyC,CAAP,CACPmP,EAAAnB,SAAL,GACMmB,CAAAmjC,OAAJ,CACED,CAAA,CAAwBljC,CAAAmjC,OAAxB,CAAsClvB,CAAtC,CADF,CAEoC,EAFpC,GAEWA,CAAApgB,QAAA,CAAamM,CAAb,CAFX,EAGEiU,CAAA5f,KAAA,CAAU2L,CAAV,CAJJ,CAF+C,CAWjD,MAAOiU,EAZsC,CAe/CmvB,QAASA,EAAyB,CAAC3Y,CAAD,CAAW4Y,CAAX,CAA4B,CAE5D,MAAgB,KAAhB,EAAI5Y,CAAJ,EAA2C,IAA3C,EAAwB4Y,CAAxB,CACS5Y,CADT,GACsB4Y,CADtB,CAIwB,QAAxB;AAAI,MAAO5Y,EAAX,GAKEA,CAEI,CAFOmY,EAAA,CAAWnY,CAAX,CAEP,CAAoB,QAApB,GAAA,MAAOA,EAPb,EASW,CAAA,CATX,CAgBOA,CAhBP,GAgBoB4Y,CAhBpB,EAgBwC5Y,CAhBxC,GAgBqDA,CAhBrD,EAgBiE4Y,CAhBjE,GAgBqFA,CAtBzB,CAyB9DC,QAASA,EAAmB,CAACzpC,CAAD,CAAQkd,CAAR,CAAkB+f,CAAlB,CAAkCyM,CAAlC,CAAoD,CAC9E,IAAIC,EAAmBD,CAAAE,SAAnBD,GACWD,CAAAE,SADXD,CACuCN,CAAA,CAAwBK,CAAAJ,OAAxB,CAAiD,EAAjD,CADvCK,CAAJ,CAGIE,CAEJ,IAAgC,CAAhC,GAAIF,CAAA5zC,OAAJ,CAAmC,CACjC,IAAI+zC,EAAgBP,CAApB,CACAI,EAAmBA,CAAA,CAAiB,CAAjB,CACnB,OAAO3pC,EAAAjH,OAAA,CAAagxC,QAA6B,CAAC/pC,CAAD,CAAQ,CACvD,IAAIgqC,EAAgBL,CAAA,CAAiB3pC,CAAjB,CACfupC,EAAA,CAA0BS,CAA1B,CAAyCF,CAAzC,CAAL,GACED,CACA,CADaH,CAAA,CAAiB1pC,CAAjB,CACb,CAAA8pC,CAAA,CAAgBE,CAAhB,EAAiCjB,EAAA,CAAWiB,CAAX,CAFnC,CAIA,OAAOH,EANgD,CAAlD,CAOJ3sB,CAPI,CAOM+f,CAPN,CAH0B,CAcnC,IADA,IAAIgN,EAAwB,EAA5B,CACSjzC,EAAI,CADb,CACgBW,EAAKgyC,CAAA5zC,OAArB,CAA8CiB,CAA9C,CAAkDW,CAAlD,CAAsDX,CAAA,EAAtD,CACEizC,CAAA,CAAsBjzC,CAAtB,CAAA,CAA2BuyC,CAG7B,OAAOvpC,EAAAjH,OAAA,CAAamxC,QAA8B,CAAClqC,CAAD,CAAQ,CAGxD,IAFA,IAAImqC,EAAU,CAAA,CAAd,CAESnzC,EAAI,CAFb,CAEgBW,EAAKgyC,CAAA5zC,OAArB,CAA8CiB,CAA9C,CAAkDW,CAAlD,CAAsDX,CAAA,EAAtD,CAA2D,CACzD,IAAIgzC,EAAgBL,CAAA,CAAiB3yC,CAAjB,CAAA,CAAoBgJ,CAApB,CACpB,IAAImqC,CAAJ,GAAgBA,CAAhB,CAA0B,CAACZ,CAAA,CAA0BS,CAA1B,CAAyCC,CAAA,CAAsBjzC,CAAtB,CAAzC,CAA3B,EACEizC,CAAA,CAAsBjzC,CAAtB,CAAA,CAA2BgzC,CAA3B,EAA4CjB,EAAA,CAAWiB,CAAX,CAHW,CAOvDG,CAAJ,GACEN,CADF,CACeH,CAAA,CAAiB1pC,CAAjB,CADf,CAIA,OAAO6pC,EAdiD,CAAnD,CAeJ3sB,CAfI,CAeM+f,CAfN,CAxBuE,CA0ChFmN,QAASA,EAAoB,CAACpqC,CAAD,CAAQkd,CAAR,CAAkB+f,CAAlB,CAAkCyM,CAAlC,CAAoD,CAAA,IAC3E/d,CAD2E,CAClEb,CACb,OAAOa,EAAP,CAAiB3rB,CAAAjH,OAAA,CAAasxC,QAAqB,CAACrqC,CAAD,CAAQ,CACzD,MAAO0pC,EAAA,CAAiB1pC,CAAjB,CADkD,CAA1C,CAEdsqC,QAAwB,CAACnzC,CAAD;AAAQozC,CAAR,CAAavqC,CAAb,CAAoB,CAC7C8qB,CAAA,CAAY3zB,CACRX,EAAA,CAAW0mB,CAAX,CAAJ,EACEA,CAAA9gB,MAAA,CAAe,IAAf,CAAqBxE,SAArB,CAEEW,EAAA,CAAUpB,CAAV,CAAJ,EACE6I,CAAAwqC,aAAA,CAAmB,QAAQ,EAAG,CACxBjyC,CAAA,CAAUuyB,CAAV,CAAJ,EACEa,CAAA,EAF0B,CAA9B,CAN2C,CAF9B,CAcdsR,CAdc,CAF8D,CAmBjFwN,QAASA,EAA2B,CAACzqC,CAAD,CAAQkd,CAAR,CAAkB+f,CAAlB,CAAkCyM,CAAlC,CAAoD,CAgBtFgB,QAASA,EAAY,CAACvzC,CAAD,CAAQ,CAC3B,IAAIwzC,EAAa,CAAA,CACjBv0C,EAAA,CAAQe,CAAR,CAAe,QAAQ,CAACmF,CAAD,CAAM,CACtB/D,CAAA,CAAU+D,CAAV,CAAL,GAAqBquC,CAArB,CAAkC,CAAA,CAAlC,CAD2B,CAA7B,CAGA,OAAOA,EALoB,CAhByD,IAClFhf,CADkF,CACzEb,CACb,OAAOa,EAAP,CAAiB3rB,CAAAjH,OAAA,CAAasxC,QAAqB,CAACrqC,CAAD,CAAQ,CACzD,MAAO0pC,EAAA,CAAiB1pC,CAAjB,CADkD,CAA1C,CAEdsqC,QAAwB,CAACnzC,CAAD,CAAQozC,CAAR,CAAavqC,CAAb,CAAoB,CAC7C8qB,CAAA,CAAY3zB,CACRX,EAAA,CAAW0mB,CAAX,CAAJ,EACEA,CAAAxmB,KAAA,CAAc,IAAd,CAAoBS,CAApB,CAA2BozC,CAA3B,CAAgCvqC,CAAhC,CAEE0qC,EAAA,CAAavzC,CAAb,CAAJ,EACE6I,CAAAwqC,aAAA,CAAmB,QAAQ,EAAG,CACxBE,CAAA,CAAa5f,CAAb,CAAJ,EAA6Ba,CAAA,EADD,CAA9B,CAN2C,CAF9B,CAYdsR,CAZc,CAFqE,CAyBxF2N,QAASA,EAAqB,CAAC5qC,CAAD,CAAQkd,CAAR,CAAkB+f,CAAlB,CAAkCyM,CAAlC,CAAoD,CAChF,IAAI/d,CACJ,OAAOA,EAAP,CAAiB3rB,CAAAjH,OAAA,CAAa8xC,QAAsB,CAAC7qC,CAAD,CAAQ,CAC1D,MAAO0pC,EAAA,CAAiB1pC,CAAjB,CADmD,CAA3C,CAEd8qC,QAAyB,CAAC3zC,CAAD,CAAQozC,CAAR,CAAavqC,CAAb,CAAoB,CAC1CxJ,CAAA,CAAW0mB,CAAX,CAAJ,EACEA,CAAA9gB,MAAA,CAAe,IAAf,CAAqBxE,SAArB,CAEF+zB,EAAA,EAJ8C,CAF/B,CAOdsR,CAPc,CAF+D,CAYlF8N,QAASA,EAAc,CAACrB,CAAD,CAAmBsB,CAAnB,CAAkC,CACvD,GAAKA,CAAAA,CAAL,CAAoB,MAAOtB,EAC3B,KAAIuB,EAAgBvB,CAAA1M,gBAApB,CAMI/gC,EAHAgvC,CAGK,GAHaR,CAGb;AAFLQ,CAEK,GAFab,CAEb,CAAec,QAAqC,CAAClrC,CAAD,CAAQiZ,CAAR,CAAgB,CAC3E,IAAI9hB,EAAQuyC,CAAA,CAAiB1pC,CAAjB,CAAwBiZ,CAAxB,CACZ,OAAO+xB,EAAA,CAAc7zC,CAAd,CAAqB6I,CAArB,CAA4BiZ,CAA5B,CAFoE,CAApE,CAGLkyB,QAAqC,CAACnrC,CAAD,CAAQiZ,CAAR,CAAgB,CACvD,IAAI9hB,EAAQuyC,CAAA,CAAiB1pC,CAAjB,CAAwBiZ,CAAxB,CAAZ,CACIxe,EAASuwC,CAAA,CAAc7zC,CAAd,CAAqB6I,CAArB,CAA4BiZ,CAA5B,CAGb,OAAO1gB,EAAA,CAAUpB,CAAV,CAAA,CAAmBsD,CAAnB,CAA4BtD,CALoB,CASrDuyC,EAAA1M,gBAAJ,EACI0M,CAAA1M,gBADJ,GACyCyM,CADzC,CAEExtC,CAAA+gC,gBAFF,CAEuB0M,CAAA1M,gBAFvB,CAGYgO,CAAAtf,UAHZ,GAMEzvB,CAAA+gC,gBACA,CADqByM,CACrB,CAAAxtC,CAAAqtC,OAAA,CAAY,CAACI,CAAD,CAPd,CAUA,OAAOztC,EA9BgD,CAhNK,IAC1DmvC,EAAgB,CACd1lC,IAAKqI,CAAArI,IADS,CAEd4hC,gBAAiB,CAAA,CAFH,CAD0C,CAK1D+D,EAAyB,CACvB3lC,IAAKqI,CAAArI,IADkB,CAEvB4hC,gBAAiB,CAAA,CAFM,CAoB7B,OAAOn6B,SAAe,CAACyvB,CAAD,CAAMoO,CAAN,CAAqB1D,CAArB,CAAsC,CAAA,IACtDoC,CADsD,CACpC4B,CADoC,CAC3BC,CAE/B,QAAQ,MAAO3O,EAAf,EACE,KAAK,QAAL,CACE2O,CAAA,CAAW3O,CAAX,CAAiBA,CAAA/rB,KAAA,EAEjB,KAAI6H,EAAS4uB,CAAA,CAAkB4B,CAAlB,CAAmCD,CAChDS,EAAA,CAAmBhxB,CAAA,CAAM6yB,CAAN,CAEd7B,EAAL,GACwB,GAsBtB,GAtBI9M,CAAAxhC,OAAA,CAAW,CAAX,CAsBJ,EAtB+C,GAsB/C,GAtB6BwhC,CAAAxhC,OAAA,CAAW,CAAX,CAsB7B,GArBEkwC,CACA,CADU,CAAA,CACV,CAAA1O,CAAA,CAAMA,CAAApd,UAAA,CAAc,CAAd,CAoBR,EAjBIgsB,CAiBJ,CAjBmBlE,CAAA,CAAkB+D,CAAlB,CAA2CD,CAiB9D,CAhBIK,CAgBJ,CAhBY,IAAIC,EAAJ,CAAUF,CAAV,CAgBZ,CAdA9B,CAcA,CAdmB7sC,CADN8uC,IAAIC,EAAJD,CAAWF,CAAXE;AAAkBt/B,CAAlBs/B,CAA2BH,CAA3BG,CACM9uC,OAAA,CAAa+/B,CAAb,CAcnB,CAZI8M,CAAA1kC,SAAJ,CACE0kC,CAAA1M,gBADF,CACqC4N,CADrC,CAEWU,CAAJ,EAGL5B,CACA,CADmBP,CAAA,CAAqBO,CAArB,CACnB,CAAAA,CAAA1M,gBAAA,CAAmC0M,CAAAre,QAAA,CACjCof,CADiC,CACHL,CAL3B,EAMIV,CAAAJ,OANJ,GAOLI,CAAA1M,gBAPK,CAO8ByM,CAP9B,CAUP,CAAA/wB,CAAA,CAAM6yB,CAAN,CAAA,CAAkB7B,CAvBpB,CAyBA,OAAOqB,EAAA,CAAerB,CAAf,CAAiCsB,CAAjC,CAET,MAAK,UAAL,CACE,MAAOD,EAAA,CAAenO,CAAf,CAAoBoO,CAApB,CAET,SACE,MAAOD,EAAA,CAAe7yC,CAAf,CAAqB8yC,CAArB,CAtCX,CAH0D,CAzBE,CAApD,CANY,CA6c1Bx9B,QAASA,GAAU,EAAG,CAEpB,IAAAmI,KAAA,CAAY,CAAC,YAAD,CAAe,mBAAf,CAAoC,QAAQ,CAACtI,CAAD,CAAalB,CAAb,CAAgC,CACtF,MAAO0/B,GAAA,CAAS,QAAQ,CAAChuB,CAAD,CAAW,CACjCxQ,CAAAvU,WAAA,CAAsB+kB,CAAtB,CADiC,CAA5B,CAEJ1R,CAFI,CAD+E,CAA5E,CAFQ,CAStBuB,QAASA,GAAW,EAAG,CACrB,IAAAiI,KAAA,CAAY,CAAC,UAAD,CAAa,mBAAb,CAAkC,QAAQ,CAAChK,CAAD,CAAWQ,CAAX,CAA8B,CAClF,MAAO0/B,GAAA,CAAS,QAAQ,CAAChuB,CAAD,CAAW,CACjClS,CAAA8T,MAAA,CAAe5B,CAAf,CADiC,CAA5B,CAEJ1R,CAFI,CAD2E,CAAxE,CADS,CAgBvB0/B,QAASA,GAAQ,CAACC,CAAD,CAAWC,CAAX,CAA6B,CAE5CC,QAASA,EAAQ,CAAChwC,CAAD,CAAOiwC,CAAP,CAAkB/T,CAAlB,CAA4B,CAE3ChoB,QAASA,EAAI,CAACjU,CAAD,CAAK,CAChB,MAAO,SAAQ,CAAC9E,CAAD,CAAQ,CACjBqjC,CAAJ,GACAA,CACA,CADS,CAAA,CACT;AAAAv+B,CAAAvF,KAAA,CAAQsF,CAAR,CAAc7E,CAAd,CAFA,CADqB,CADP,CADlB,IAAIqjC,EAAS,CAAA,CASb,OAAO,CAACtqB,CAAA,CAAK+7B,CAAL,CAAD,CAAkB/7B,CAAA,CAAKgoB,CAAL,CAAlB,CAVoC,CA2B7CgU,QAASA,EAAO,EAAG,CACjB,IAAAlI,QAAA,CAAe,CAAEzO,OAAQ,CAAV,CADE,CA6BnB4W,QAASA,EAAU,CAAC71C,CAAD,CAAU2F,CAAV,CAAc,CAC/B,MAAO,SAAQ,CAAC9E,CAAD,CAAQ,CACrB8E,CAAAvF,KAAA,CAAQJ,CAAR,CAAiBa,CAAjB,CADqB,CADQ,CA8BjCi1C,QAASA,EAAoB,CAACxvB,CAAD,CAAQ,CAC/ByvB,CAAAzvB,CAAAyvB,iBAAJ,EAA+BzvB,CAAA0vB,QAA/B,GACA1vB,CAAAyvB,iBACA,CADyB,CAAA,CACzB,CAAAP,CAAA,CAAS,QAAQ,EAAG,CA3BO,IACvB7vC,CADuB,CACnBy7B,CADmB,CACV4U,CAEjBA,EAAA,CAwBmC1vB,CAxBzB0vB,QAwByB1vB,EAvBnCyvB,iBAAA,CAAyB,CAAA,CAuBUzvB,EAtBnC0vB,QAAA,CAAgB52C,CAChB,KAN2B,IAMlBsB,EAAI,CANc,CAMXW,EAAK20C,CAAAv2C,OAArB,CAAqCiB,CAArC,CAAyCW,CAAzC,CAA6C,EAAEX,CAA/C,CAAkD,CAChD0gC,CAAA,CAAU4U,CAAA,CAAQt1C,CAAR,CAAA,CAAW,CAAX,CACViF,EAAA,CAAKqwC,CAAA,CAAQt1C,CAAR,CAAA,CAmB4B4lB,CAnBjB2Y,OAAX,CACL,IAAI,CACE/+B,CAAA,CAAWyF,CAAX,CAAJ,CACEy7B,CAAAoB,QAAA,CAAgB78B,CAAA,CAgBa2gB,CAhBVzlB,MAAH,CAAhB,CADF,CAE4B,CAArB,GAewBylB,CAfpB2Y,OAAJ,CACLmC,CAAAoB,QAAA,CAc6Blc,CAdbzlB,MAAhB,CADK,CAGLugC,CAAAjB,OAAA,CAY6B7Z,CAZdzlB,MAAf,CANA,CAQF,MAAO+F,CAAP,CAAU,CACVw6B,CAAAjB,OAAA,CAAev5B,CAAf,CACA,CAAA6uC,CAAA,CAAiB7uC,CAAjB,CAFU,CAXoC,CAqB9B,CAApB,CAFA,CADmC,CAMrCqvC,QAASA,EAAQ,EAAG,CAClB,IAAA7U,QAAA,CAAe,IAAIwU,CAEnB,KAAApT,QAAA,CAAeqT,CAAA,CAAW,IAAX,CAAiB,IAAArT,QAAjB,CACf;IAAArC,OAAA,CAAc0V,CAAA,CAAW,IAAX,CAAiB,IAAA1V,OAAjB,CACd,KAAAuH,OAAA,CAAcmO,CAAA,CAAW,IAAX,CAAiB,IAAAnO,OAAjB,CALI,CA7FpB,IAAIwO,EAAW72C,CAAA,CAAO,IAAP,CAAa82C,SAAb,CAgCfP,EAAA9yB,UAAA,CAAoB,CAClByV,KAAMA,QAAQ,CAAC6d,CAAD,CAAcC,CAAd,CAA0BC,CAA1B,CAAwC,CACpD,IAAInyC,EAAS,IAAI8xC,CAEjB,KAAAvI,QAAAsI,QAAA,CAAuB,IAAAtI,QAAAsI,QAAvB,EAA+C,EAC/C,KAAAtI,QAAAsI,QAAA9xC,KAAA,CAA0B,CAACC,CAAD,CAASiyC,CAAT,CAAsBC,CAAtB,CAAkCC,CAAlC,CAA1B,CAC0B,EAA1B,CAAI,IAAA5I,QAAAzO,OAAJ,EAA6B6W,CAAA,CAAqB,IAAApI,QAArB,CAE7B,OAAOvpC,EAAAi9B,QAP6C,CADpC,CAWlB,QAASmV,QAAQ,CAAChvB,CAAD,CAAW,CAC1B,MAAO,KAAAgR,KAAA,CAAU,IAAV,CAAgBhR,CAAhB,CADmB,CAXV,CAelB,UAAWivB,QAAQ,CAACjvB,CAAD,CAAW+uB,CAAX,CAAyB,CAC1C,MAAO,KAAA/d,KAAA,CAAU,QAAQ,CAAC13B,CAAD,CAAQ,CAC/B,MAAO41C,EAAA,CAAe51C,CAAf,CAAsB,CAAA,CAAtB,CAA4B0mB,CAA5B,CADwB,CAA1B,CAEJ,QAAQ,CAAC7B,CAAD,CAAQ,CACjB,MAAO+wB,EAAA,CAAe/wB,CAAf,CAAsB,CAAA,CAAtB,CAA6B6B,CAA7B,CADU,CAFZ,CAIJ+uB,CAJI,CADmC,CAf1B,CAqEpBL,EAAAnzB,UAAA,CAAqB,CACnB0f,QAASA,QAAQ,CAACx8B,CAAD,CAAM,CACjB,IAAAo7B,QAAAsM,QAAAzO,OAAJ,GACIj5B,CAAJ,GAAY,IAAAo7B,QAAZ;AACE,IAAAsV,SAAA,CAAcR,CAAA,CACZ,QADY,CAGZlwC,CAHY,CAAd,CADF,CAOE,IAAA2wC,UAAA,CAAe3wC,CAAf,CARF,CADqB,CADJ,CAenB2wC,UAAWA,QAAQ,CAAC3wC,CAAD,CAAM,CAAA,IACnBuyB,CADmB,CACb2G,CAEVA,EAAA,CAAMwW,CAAA,CAAS,IAAT,CAAe,IAAAiB,UAAf,CAA+B,IAAAD,SAA/B,CACN,IAAI,CACF,GAAKx0C,CAAA,CAAS8D,CAAT,CAAL,EAAsB9F,CAAA,CAAW8F,CAAX,CAAtB,CAAwCuyB,CAAA,CAAOvyB,CAAP,EAAcA,CAAAuyB,KAClDr4B,EAAA,CAAWq4B,CAAX,CAAJ,EACE,IAAA6I,QAAAsM,QAAAzO,OACA,CAD+B,EAC/B,CAAA1G,CAAAn4B,KAAA,CAAU4F,CAAV,CAAek5B,CAAA,CAAI,CAAJ,CAAf,CAAuBA,CAAA,CAAI,CAAJ,CAAvB,CAA+B,IAAAwI,OAA/B,CAFF,GAIE,IAAAtG,QAAAsM,QAAA7sC,MAEA,CAF6BmF,CAE7B,CADA,IAAAo7B,QAAAsM,QAAAzO,OACA,CAD8B,CAC9B,CAAA6W,CAAA,CAAqB,IAAA1U,QAAAsM,QAArB,CANF,CAFE,CAUF,MAAO9mC,CAAP,CAAU,CACVs4B,CAAA,CAAI,CAAJ,CAAA,CAAOt4B,CAAP,CACA,CAAA6uC,CAAA,CAAiB7uC,CAAjB,CAFU,CAdW,CAfN,CAmCnBu5B,OAAQA,QAAQ,CAAC7zB,CAAD,CAAS,CACnB,IAAA80B,QAAAsM,QAAAzO,OAAJ,EACA,IAAAyX,SAAA,CAAcpqC,CAAd,CAFuB,CAnCN,CAwCnBoqC,SAAUA,QAAQ,CAACpqC,CAAD,CAAS,CACzB,IAAA80B,QAAAsM,QAAA7sC,MAAA,CAA6ByL,CAC7B,KAAA80B,QAAAsM,QAAAzO,OAAA,CAA8B,CAC9B6W,EAAA,CAAqB,IAAA1U,QAAAsM,QAArB,CAHyB,CAxCR,CA8CnBhG,OAAQA,QAAQ,CAACkP,CAAD,CAAW,CACzB,IAAIhT;AAAY,IAAAxC,QAAAsM,QAAAsI,QAEoB,EAApC,EAAK,IAAA5U,QAAAsM,QAAAzO,OAAL,EAA0C2E,CAA1C,EAAuDA,CAAAnkC,OAAvD,EACE+1C,CAAA,CAAS,QAAQ,EAAG,CAElB,IAFkB,IACdjuB,CADc,CACJpjB,CADI,CAETzD,EAAI,CAFK,CAEFW,EAAKuiC,CAAAnkC,OAArB,CAAuCiB,CAAvC,CAA2CW,CAA3C,CAA+CX,CAAA,EAA/C,CAAoD,CAClDyD,CAAA,CAASy/B,CAAA,CAAUljC,CAAV,CAAA,CAAa,CAAb,CACT6mB,EAAA,CAAWqc,CAAA,CAAUljC,CAAV,CAAA,CAAa,CAAb,CACX,IAAI,CACFyD,CAAAujC,OAAA,CAAcxnC,CAAA,CAAWqnB,CAAX,CAAA,CAAuBA,CAAA,CAASqvB,CAAT,CAAvB,CAA4CA,CAA1D,CADE,CAEF,MAAOhwC,CAAP,CAAU,CACV6uC,CAAA,CAAiB7uC,CAAjB,CADU,CALsC,CAFlC,CAApB,CAJuB,CA9CR,CA4GrB,KAAIiwC,EAAcA,QAAoB,CAACh2C,CAAD,CAAQi2C,CAAR,CAAkB,CACtD,IAAI3yC,EAAS,IAAI8xC,CACba,EAAJ,CACE3yC,CAAAq+B,QAAA,CAAe3hC,CAAf,CADF,CAGEsD,CAAAg8B,OAAA,CAAct/B,CAAd,CAEF,OAAOsD,EAAAi9B,QAP+C,CAAxD,CAUIqV,EAAiBA,QAAuB,CAAC51C,CAAD,CAAQk2C,CAAR,CAAoBxvB,CAApB,CAA8B,CACxE,IAAIyvB,EAAiB,IACrB,IAAI,CACE92C,CAAA,CAAWqnB,CAAX,CAAJ,GAA0ByvB,CAA1B,CAA2CzvB,CAAA,EAA3C,CADE,CAEF,MAAO3gB,CAAP,CAAU,CACV,MAAOiwC,EAAA,CAAYjwC,CAAZ,CAAe,CAAA,CAAf,CADG,CAGZ,MAAkBowC,EAAlB,EAn4YY92C,CAAA,CAm4YM82C,CAn4YKze,KAAX,CAm4YZ,CACSye,CAAAze,KAAA,CAAoB,QAAQ,EAAG,CACpC,MAAOse,EAAA,CAAYh2C,CAAZ,CAAmBk2C,CAAnB,CAD6B,CAA/B,CAEJ,QAAQ,CAACrxB,CAAD,CAAQ,CACjB,MAAOmxB,EAAA,CAAYnxB,CAAZ,CAAmB,CAAA,CAAnB,CADU,CAFZ,CADT,CAOSmxB,CAAA,CAAYh2C,CAAZ,CAAmBk2C,CAAnB,CAd+D,CAV1E,CA2CI1V,EAAOA,QAAQ,CAACxgC,CAAD,CAAQ0mB,CAAR,CAAkB0vB,CAAlB,CAA2BX,CAA3B,CAAyC,CAC1D,IAAInyC,EAAS,IAAI8xC,CACjB9xC,EAAAq+B,QAAA,CAAe3hC,CAAf,CACA,OAAOsD,EAAAi9B,QAAA7I,KAAA,CAAoBhR,CAApB,CAA8B0vB,CAA9B,CAAuCX,CAAvC,CAHmD,CA3C5D;AAyFIY,EAAKA,QAASC,EAAC,CAACC,CAAD,CAAW,CAC5B,GAAK,CAAAl3C,CAAA,CAAWk3C,CAAX,CAAL,CACE,KAAMlB,EAAA,CAAS,SAAT,CAAsDkB,CAAtD,CAAN,CAGF,GAAM,EAAA,IAAA,WAAgBD,EAAhB,CAAN,CAEE,MAAO,KAAIA,CAAJ,CAAMC,CAAN,CAGT,KAAI7U,EAAW,IAAI0T,CAUnBmB,EAAA,CARAzB,QAAkB,CAAC90C,CAAD,CAAQ,CACxB0hC,CAAAC,QAAA,CAAiB3hC,CAAjB,CADwB,CAQ1B,CAJA+gC,QAAiB,CAACt1B,CAAD,CAAS,CACxBi2B,CAAApC,OAAA,CAAgB7zB,CAAhB,CADwB,CAI1B,CAEA,OAAOi2B,EAAAnB,QAtBqB,CAyB9B8V,EAAA/tB,MAAA,CA3SYA,QAAQ,EAAG,CACrB,MAAO,KAAI8sB,CADU,CA4SvBiB,EAAA/W,OAAA,CAzHaA,QAAQ,CAAC7zB,CAAD,CAAS,CAC5B,IAAInI,EAAS,IAAI8xC,CACjB9xC,EAAAg8B,OAAA,CAAc7zB,CAAd,CACA,OAAOnI,EAAAi9B,QAHqB,CA0H9B8V,EAAA7V,KAAA,CAAUA,CACV6V,EAAAt2B,IAAA,CApDAA,QAAY,CAACy2B,CAAD,CAAW,CAAA,IACjB9U,EAAW,IAAI0T,CADE,CAEjB9mC,EAAU,CAFO,CAGjBmoC,EAAUz3C,CAAA,CAAQw3C,CAAR,CAAA,CAAoB,EAApB,CAAyB,EAEvCv3C,EAAA,CAAQu3C,CAAR,CAAkB,QAAQ,CAACjW,CAAD,CAAUnhC,CAAV,CAAe,CACvCkP,CAAA,EACAkyB,EAAA,CAAKD,CAAL,CAAA7I,KAAA,CAAmB,QAAQ,CAAC13B,CAAD,CAAQ,CAC7By2C,CAAAn3C,eAAA,CAAuBF,CAAvB,CAAJ,GACAq3C,CAAA,CAAQr3C,CAAR,CACA,CADeY,CACf,CAAM,EAAEsO,CAAR,EAAkBozB,CAAAC,QAAA,CAAiB8U,CAAjB,CAFlB,CADiC,CAAnC,CAIG,QAAQ,CAAChrC,CAAD,CAAS,CACdgrC,CAAAn3C,eAAA,CAAuBF,CAAvB,CAAJ,EACAsiC,CAAApC,OAAA,CAAgB7zB,CAAhB,CAFkB,CAJpB,CAFuC,CAAzC,CAYgB,EAAhB,GAAI6C,CAAJ,EACEozB,CAAAC,QAAA,CAAiB8U,CAAjB,CAGF,OAAO/U,EAAAnB,QArBc,CAsDvB;MAAO8V,EAzUqC,CA4U9C5+B,QAASA,GAAa,EAAG,CACvB,IAAA+G,KAAA,CAAY,CAAC,SAAD,CAAY,UAAZ,CAAwB,QAAQ,CAAClH,CAAD,CAAUF,CAAV,CAAoB,CAC9D,IAAIs/B,EAAwBp/B,CAAAo/B,sBAAxBA,EACwBp/B,CAAAq/B,4BAD5B,CAGIC,EAAuBt/B,CAAAs/B,qBAAvBA,EACuBt/B,CAAAu/B,2BADvBD,EAEuBt/B,CAAAw/B,kCAL3B,CAOIC,EAAe,CAAEL,CAAAA,CAPrB,CAQIM,EAAMD,CAAA,CACN,QAAQ,CAACjyC,CAAD,CAAK,CACX,IAAI8kB,EAAK8sB,CAAA,CAAsB5xC,CAAtB,CACT,OAAO,SAAQ,EAAG,CAChB8xC,CAAA,CAAqBhtB,CAArB,CADgB,CAFP,CADP,CAON,QAAQ,CAAC9kB,CAAD,CAAK,CACX,IAAImyC,EAAQ7/B,CAAA,CAAStS,CAAT,CAAa,KAAb,CAAoB,CAAA,CAApB,CACZ,OAAO,SAAQ,EAAG,CAChBsS,CAAAsR,OAAA,CAAgBuuB,CAAhB,CADgB,CAFP,CAOjBD,EAAAzyB,UAAA,CAAgBwyB,CAEhB,OAAOC,EAzBuD,CAApD,CADW,CAiGzB7gC,QAASA,GAAkB,EAAG,CAC5B,IAAI+gC,EAAM,EAAV,CACIC,EAAmB34C,CAAA,CAAO,YAAP,CADvB,CAEI44C,EAAiB,IAFrB,CAGIC,EAAe,IAEnB,KAAAC,UAAA,CAAiBC,QAAQ,CAACv3C,CAAD,CAAQ,CAC3BS,SAAA7B,OAAJ,GACEs4C,CADF,CACQl3C,CADR,CAGA,OAAOk3C,EAJwB,CAOjC,KAAA14B,KAAA,CAAY,CAAC,WAAD;AAAc,mBAAd,CAAmC,QAAnC,CAA6C,UAA7C,CACR,QAAQ,CAAC4D,CAAD,CAAYpN,CAAZ,CAA+BgB,CAA/B,CAAuCxB,CAAvC,CAAiD,CA6C3DgjC,QAASA,EAAK,EAAG,CACf,IAAAC,IAAA,CAj6ZG,EAAEv3C,EAk6ZL,KAAAuhC,QAAA,CAAe,IAAAiW,QAAf,CAA8B,IAAAC,WAA9B,CACe,IAAAC,cADf,CACoC,IAAAC,cADpC,CAEe,IAAAC,YAFf,CAEkC,IAAAC,YAFlC,CAEqD,IACrD,KAAAC,MAAA,CAAa,IACb,KAAAjgB,YAAA,CAAmB,CAAA,CACnB,KAAAkgB,YAAA,CAAmB,EACnB,KAAAC,gBAAA,CAAuB,EACvB,KAAAhsB,kBAAA,CAAyB,IATV,CAgoCjBisB,QAASA,EAAU,CAACC,CAAD,CAAQ,CACzB,GAAIliC,CAAAurB,QAAJ,CACE,KAAM0V,EAAA,CAAiB,QAAjB,CAAsDjhC,CAAAurB,QAAtD,CAAN,CAGFvrB,CAAAurB,QAAA,CAAqB2W,CALI,CAa3BC,QAASA,EAAsB,CAACC,CAAD,CAAUjS,CAAV,CAAiB1+B,CAAjB,CAAuB,CACpD,EACE2wC,EAAAJ,gBAAA,CAAwBvwC,CAAxB,CAEA,EAFiC0+B,CAEjC,CAAsC,CAAtC,GAAIiS,CAAAJ,gBAAA,CAAwBvwC,CAAxB,CAAJ,EACE,OAAO2wC,CAAAJ,gBAAA,CAAwBvwC,CAAxB,CAJX,OAMU2wC,CANV,CAMoBA,CAAAZ,QANpB,CADoD,CActDa,QAASA,EAAY,EAAG,EAxsCmC;AA0sC3DC,QAASA,EAAe,EAAG,CACzB,IAAA,CAAOC,CAAA75C,OAAP,CAAA,CACE,GAAI,CACF65C,CAAA52B,MAAA,EAAA,EADE,CAEF,MAAO9b,CAAP,CAAU,CACViP,CAAA,CAAkBjP,CAAlB,CADU,CAIdsxC,CAAA,CAAe,IARU,CAW3BqB,QAASA,EAAkB,EAAG,CACP,IAArB,GAAIrB,CAAJ,GACEA,CADF,CACiB7iC,CAAA8T,MAAA,CAAe,QAAQ,EAAG,CACvCpS,CAAAnN,OAAA,CAAkByvC,CAAlB,CADuC,CAA1B,CADjB,CAD4B,CApoC9BhB,CAAAv1B,UAAA,CAAkB,CAChBrW,YAAa4rC,CADG,CA+BhB7oB,KAAMA,QAAQ,CAACgqB,CAAD,CAAU97B,CAAV,CAAkB,CA0C9B+7B,QAASA,EAAY,EAAG,CACtBC,CAAA9gB,YAAA,CAAoB,CAAA,CADE,CAzCxB,IAAI8gB,CAEJh8B,EAAA,CAASA,CAAT,EAAmB,IAEf87B,EAAJ,EACEE,CACA,CADQ,IAAIrB,CACZ,CAAAqB,CAAAb,MAAA,CAAc,IAAAA,MAFhB,GAMO,IAAAc,aAWL,GAVE,IAAAA,aAQA,CARoBC,QAAmB,EAAG,CACxC,IAAApB,WAAA,CAAkB,IAAAC,cAAlB,CACI,IAAAE,YADJ,CACuB,IAAAC,YADvB,CAC0C,IAC1C,KAAAE,YAAA,CAAmB,EACnB,KAAAC,gBAAA,CAAuB,EACvB,KAAAT,IAAA,CAp/ZL,EAAEv3C,EAq/ZG,KAAA44C,aAAA,CAAoB,IANoB,CAQ1C,CAAA,IAAAA,aAAA72B,UAAA,CAA8B,IAEhC,EAAA42B,CAAA,CAAQ,IAAI,IAAAC,aAjBd,CAmBAD;CAAAnB,QAAA,CAAgB76B,CAChBg8B,EAAAhB,cAAA,CAAsBh7B,CAAAk7B,YAClBl7B,EAAAi7B,YAAJ,EACEj7B,CAAAk7B,YAAAH,cACA,CADmCiB,CACnC,CAAAh8B,CAAAk7B,YAAA,CAAqBc,CAFvB,EAIEh8B,CAAAi7B,YAJF,CAIuBj7B,CAAAk7B,YAJvB,CAI4Cc,CAQ5C,EAAIF,CAAJ,EAAe97B,CAAf,EAAyB,IAAzB,GAA+Bg8B,CAAAnkB,IAAA,CAAU,UAAV,CAAsBkkB,CAAtB,CAE/B,OAAOC,EAxCuB,CA/BhB,CAkMhBj3C,OAAQA,QAAQ,CAACo3C,CAAD,CAAWjzB,CAAX,CAAqB+f,CAArB,CAAqC,CACnD,IAAIj8B,EAAMmM,CAAA,CAAOgjC,CAAP,CAEV,IAAInvC,CAAAg8B,gBAAJ,CACE,MAAOh8B,EAAAg8B,gBAAA,CAAoB,IAApB,CAA0B9f,CAA1B,CAAoC+f,CAApC,CAAoDj8B,CAApD,CAJ0C,KAO/ClH,EADQkG,IACA8uC,WAPuC,CAQ/CsB,EAAU,CACRn0C,GAAIihB,CADI,CAER9F,KAAMs4B,CAFE,CAGR1uC,IAAKA,CAHG,CAIR47B,IAAKuT,CAJG,CAKRE,GAAI,CAAEpT,CAAAA,CALE,CAQdsR,EAAA,CAAiB,IAEZ/3C,EAAA,CAAW0mB,CAAX,CAAL,GACEkzB,CAAAn0C,GADF,CACe/D,CADf,CAIK4B,EAAL,GACEA,CADF,CAhBYkG,IAiBF8uC,WADV,CAC6B,EAD7B,CAKAh1C,EAAA2F,QAAA,CAAc2wC,CAAd,CAEA,OAAOE,SAAwB,EAAG,CAChCz2C,EAAA,CAAYC,CAAZ,CAAmBs2C,CAAnB,CACA7B,EAAA,CAAiB,IAFe,CA7BiB,CAlMrC,CA8PhBrR,YAAaA,QAAQ,CAACqT,CAAD,CAAmBrzB,CAAnB,CAA6B,CAwChDszB,QAASA,EAAgB,EAAG,CAC1BC,CAAA,CAA0B,CAAA,CAEtBC,EAAJ,EACEA,CACA,CADW,CAAA,CACX,CAAAxzB,CAAA,CAASyzB,CAAT,CAAoBA,CAApB,CAA+B30C,CAA/B,CAFF,EAIEkhB,CAAA,CAASyzB,CAAT,CAAoBvT,CAApB,CAA+BphC,CAA/B,CAPwB,CAvC5B,IAAIohC,EAAgB/iB,KAAJ,CAAUk2B,CAAAx6C,OAAV,CAAhB;AACI46C,EAAgBt2B,KAAJ,CAAUk2B,CAAAx6C,OAAV,CADhB,CAEI66C,EAAgB,EAFpB,CAGI50C,EAAO,IAHX,CAIIy0C,EAA0B,CAAA,CAJ9B,CAKIC,EAAW,CAAA,CAEf,IAAK36C,CAAAw6C,CAAAx6C,OAAL,CAA8B,CAE5B,IAAI86C,EAAa,CAAA,CACjB70C,EAAAlD,WAAA,CAAgB,QAAQ,EAAG,CACrB+3C,CAAJ,EAAgB3zB,CAAA,CAASyzB,CAAT,CAAoBA,CAApB,CAA+B30C,CAA/B,CADS,CAA3B,CAGA,OAAO80C,SAA6B,EAAG,CACrCD,CAAA,CAAa,CAAA,CADwB,CANX,CAW9B,GAAgC,CAAhC,GAAIN,CAAAx6C,OAAJ,CAEE,MAAO,KAAAgD,OAAA,CAAYw3C,CAAA,CAAiB,CAAjB,CAAZ,CAAiCC,QAAyB,CAACr5C,CAAD,CAAQ25B,CAAR,CAAkB9wB,CAAlB,CAAyB,CACxF2wC,CAAA,CAAU,CAAV,CAAA,CAAex5C,CACfimC,EAAA,CAAU,CAAV,CAAA,CAAetM,CACf5T,EAAA,CAASyzB,CAAT,CAAqBx5C,CAAD,GAAW25B,CAAX,CAAuB6f,CAAvB,CAAmCvT,CAAvD,CAAkEp9B,CAAlE,CAHwF,CAAnF,CAOT5J,EAAA,CAAQm6C,CAAR,CAA0B,QAAQ,CAACQ,CAAD,CAAO/5C,CAAP,CAAU,CAC1C,IAAIg6C,EAAYh1C,CAAAjD,OAAA,CAAYg4C,CAAZ,CAAkBE,QAA4B,CAAC95C,CAAD,CAAQ25B,CAAR,CAAkB,CAC9E6f,CAAA,CAAU35C,CAAV,CAAA,CAAeG,CACfimC,EAAA,CAAUpmC,CAAV,CAAA,CAAe85B,CACV2f,EAAL,GACEA,CACA,CAD0B,CAAA,CAC1B,CAAAz0C,CAAAlD,WAAA,CAAgB03C,CAAhB,CAFF,CAH8E,CAAhE,CAQhBI,EAAAp2C,KAAA,CAAmBw2C,CAAnB,CAT0C,CAA5C,CAuBA,OAAOF,SAA6B,EAAG,CACrC,IAAA,CAAOF,CAAA76C,OAAP,CAAA,CACE66C,CAAA53B,MAAA,EAAA,EAFmC,CAnDS,CA9PlC,CAgXhB4S,iBAAkBA,QAAQ,CAAC/1B,CAAD,CAAMqnB,CAAN,CAAgB,CAoBxCg0B,QAASA,EAA2B,CAACC,CAAD,CAAS,CAC3CvgB,CAAA,CAAWugB,CADgC,KAE5B56C,CAF4B,CAEvB66C,CAFuB,CAEdC,CAFc,CAELC,CAGtC,IAAI,CAAAh5C,CAAA,CAAYs4B,CAAZ,CAAJ,CAAA,CAEA,GAAKp4B,CAAA,CAASo4B,CAAT,CAAL,CAKO,GAAIh7B,EAAA,CAAYg7B,CAAZ,CAAJ,CAgBL,IAfIE,CAeK95B,GAfQu6C,CAeRv6C,GAbP85B,CAEA,CAFWygB,CAEX,CADAC,CACA,CADY1gB,CAAA/6B,OACZ,CAD8B,CAC9B,CAAA07C,CAAA,EAWOz6C,EART06C,CAQS16C,CARG45B,CAAA76B,OAQHiB,CANLw6C,CAMKx6C;AANS06C,CAMT16C,GAJPy6C,CAAA,EACA,CAAA3gB,CAAA/6B,OAAA,CAAkBy7C,CAAlB,CAA8BE,CAGvB16C,EAAAA,CAAAA,CAAI,CAAb,CAAgBA,CAAhB,CAAoB06C,CAApB,CAA+B16C,CAAA,EAA/B,CACEs6C,CAIA,CAJUxgB,CAAA,CAAS95B,CAAT,CAIV,CAHAq6C,CAGA,CAHUzgB,CAAA,CAAS55B,CAAT,CAGV,CADAo6C,CACA,CADWE,CACX,GADuBA,CACvB,EADoCD,CACpC,GADgDA,CAChD,CAAKD,CAAL,EAAiBE,CAAjB,GAA6BD,CAA7B,GACEI,CAAA,EACA,CAAA3gB,CAAA,CAAS95B,CAAT,CAAA,CAAcq6C,CAFhB,CArBG,KA0BA,CACDvgB,CAAJ,GAAiB6gB,CAAjB,GAEE7gB,CAEA,CAFW6gB,CAEX,CAF4B,EAE5B,CADAH,CACA,CADY,CACZ,CAAAC,CAAA,EAJF,CAOAC,EAAA,CAAY,CACZ,KAAKn7C,CAAL,GAAYq6B,EAAZ,CACMA,CAAAn6B,eAAA,CAAwBF,CAAxB,CAAJ,GACEm7C,CAAA,EAIA,CAHAL,CAGA,CAHUzgB,CAAA,CAASr6B,CAAT,CAGV,CAFA+6C,CAEA,CAFUxgB,CAAA,CAASv6B,CAAT,CAEV,CAAIA,CAAJ,GAAWu6B,EAAX,EACEsgB,CACA,CADWE,CACX,GADuBA,CACvB,EADoCD,CACpC,GADgDA,CAChD,CAAKD,CAAL,EAAiBE,CAAjB,GAA6BD,CAA7B,GACEI,CAAA,EACA,CAAA3gB,CAAA,CAASv6B,CAAT,CAAA,CAAgB86C,CAFlB,CAFF,GAOEG,CAAA,EAEA,CADA1gB,CAAA,CAASv6B,CAAT,CACA,CADgB86C,CAChB,CAAAI,CAAA,EATF,CALF,CAkBF,IAAID,CAAJ,CAAgBE,CAAhB,CAGE,IAAKn7C,CAAL,GADAk7C,EAAA,EACY3gB,CAAAA,CAAZ,CACOF,CAAAn6B,eAAA,CAAwBF,CAAxB,CAAL,GACEi7C,CAAA,EACA,CAAA,OAAO1gB,CAAA,CAASv6B,CAAT,CAFT,CAhCC,CA/BP,IACMu6B,EAAJ,GAAiBF,CAAjB,GACEE,CACA,CADWF,CACX,CAAA6gB,CAAA,EAFF,CAqEF,OAAOA,EAxEP,CAL2C,CAnB7CP,CAAAxlB,UAAA,CAAwC,CAAA,CAExC,KAAI1vB,EAAO,IAAX,CAEI40B,CAFJ,CAKIE,CALJ,CAOI8gB,CAPJ,CASIC,EAAuC,CAAvCA,CAAqB30B,CAAAnnB,OATzB,CAUI07C,EAAiB,CAVrB,CAWIK,EAAiB3kC,CAAA,CAAOtX,CAAP,CAAYq7C,CAAZ,CAXrB,CAYIK,EAAgB,EAZpB,CAaII,EAAiB,EAbrB,CAcII,EAAU,CAAA,CAdd,CAeIP,EAAY,CA+GhB,OAAO,KAAAz4C,OAAA,CAAY+4C,CAAZ,CA7BPE,QAA+B,EAAG,CAC5BD,CAAJ,EACEA,CACA,CADU,CAAA,CACV,CAAA70B,CAAA,CAAS0T,CAAT,CAAmBA,CAAnB,CAA6B50B,CAA7B,CAFF,EAIEkhB,CAAA,CAAS0T,CAAT,CAAmBghB,CAAnB,CAAiC51C,CAAjC,CAIF,IAAI61C,CAAJ,CACE,GAAKr5C,CAAA,CAASo4B,CAAT,CAAL,CAGO,GAAIh7B,EAAA,CAAYg7B,CAAZ,CAAJ,CAA2B,CAChCghB,CAAA,CAAmBv3B,KAAJ,CAAUuW,CAAA76B,OAAV,CACf;IAAS,IAAAiB,EAAI,CAAb,CAAgBA,CAAhB,CAAoB45B,CAAA76B,OAApB,CAAqCiB,CAAA,EAArC,CACE46C,CAAA,CAAa56C,CAAb,CAAA,CAAkB45B,CAAA,CAAS55B,CAAT,CAHY,CAA3B,IAOL,KAAST,CAAT,GADAq7C,EACgBhhB,CADD,EACCA,CAAAA,CAAhB,CACMn6B,EAAAC,KAAA,CAAoBk6B,CAApB,CAA8Br6B,CAA9B,CAAJ,GACEq7C,CAAA,CAAar7C,CAAb,CADF,CACsBq6B,CAAA,CAASr6B,CAAT,CADtB,CAXJ,KAEEq7C,EAAA,CAAehhB,CAZa,CA6B3B,CAjIiC,CAhX1B,CAuiBhBsU,QAASA,QAAQ,EAAG,CAAA,IACd+M,CADc,CACP96C,CADO,CACAigB,CADA,CAEd86B,CAFc,CAGdn8C,CAHc,CAIdo8C,CAJc,CAIPC,EAAM/D,CAJC,CAKRoB,CALQ,CAMd4C,EAAW,EANG,CAOdC,CAPc,CAOEC,CAEpBjD,EAAA,CAAW,SAAX,CAEA3jC,EAAAiT,iBAAA,EAEI,KAAJ,GAAavR,CAAb,EAA4C,IAA5C,GAA2BmhC,CAA3B,GAGE7iC,CAAA8T,MAAAI,OAAA,CAAsB2uB,CAAtB,CACA,CAAAmB,CAAA,EAJF,CAOApB,EAAA,CAAiB,IAEjB,GAAG,CACD4D,CAAA,CAAQ,CAAA,CAGR,KAFA1C,CAEA,CArB0B7K,IAqB1B,CAAO4N,CAAAz8C,OAAP,CAAA,CAA0B,CACxB,GAAI,CACFw8C,CACA,CADYC,CAAAx5B,MAAA,EACZ,CAAAu5B,CAAAvyC,MAAAyyC,MAAA,CAAsBF,CAAAne,WAAtB,CAA4Cme,CAAAt5B,OAA5C,CAFE,CAGF,MAAO/b,CAAP,CAAU,CACViP,CAAA,CAAkBjP,CAAlB,CADU,CAGZqxC,CAAA,CAAiB,IAPO,CAU1B,CAAA,CACA,EAAG,CACD,GAAK2D,CAAL,CAAgBzC,CAAAX,WAAhB,CAGE,IADA/4C,CACA,CADSm8C,CAAAn8C,OACT,CAAOA,CAAA,EAAP,CAAA,CACE,GAAI,CAIF,GAHAk8C,CAGA,CAHQC,CAAA,CAASn8C,CAAT,CAGR,CACE,IAAKoB,CAAL,CAAa86C,CAAAjxC,IAAA,CAAUyuC,CAAV,CAAb,KAAsCr4B,CAAtC,CAA6C66B,CAAA76B,KAA7C,GACM,EAAA66B,CAAA5B,GAAA,CACIh1C,EAAA,CAAOlE,CAAP,CAAcigB,CAAd,CADJ,CAEsB,QAFtB,GAEK,MAAOjgB,EAFZ,EAEkD,QAFlD,GAEkC,MAAOigB,EAFzC,EAGQs7B,KAAA,CAAMv7C,CAAN,CAHR,EAGwBu7C,KAAA,CAAMt7B,CAAN,CAHxB,CADN,CAKE+6B,CAIA;AAJQ,CAAA,CAIR,CAHA5D,CAGA,CAHiB0D,CAGjB,CAFAA,CAAA76B,KAEA,CAFa66B,CAAA5B,GAAA,CAAWn2C,EAAA,CAAK/C,CAAL,CAAY,IAAZ,CAAX,CAA+BA,CAE5C,CADA86C,CAAAh2C,GAAA,CAAS9E,CAAT,CAAkBigB,CAAD,GAAUs4B,CAAV,CAA0Bv4C,CAA1B,CAAkCigB,CAAnD,CAA0Dq4B,CAA1D,CACA,CAAU,CAAV,CAAI2C,CAAJ,GACEE,CAEA,CAFS,CAET,CAFaF,CAEb,CADKC,CAAA,CAASC,CAAT,CACL,GADuBD,CAAA,CAASC,CAAT,CACvB,CAD0C,EAC1C,EAAAD,CAAA,CAASC,CAAT,CAAA93C,KAAA,CAAsB,CACpBm4C,IAAKn8C,CAAA,CAAWy7C,CAAArV,IAAX,CAAA,CAAwB,MAAxB,EAAkCqV,CAAArV,IAAA99B,KAAlC,EAAoDmzC,CAAArV,IAAAjkC,SAAA,EAApD,EAA4Es5C,CAAArV,IAD7D,CAEpBphB,OAAQrkB,CAFY,CAGpBskB,OAAQrE,CAHY,CAAtB,CAHF,CATF,KAkBO,IAAI66B,CAAJ,GAAc1D,CAAd,CAA8B,CAGnC4D,CAAA,CAAQ,CAAA,CACR,OAAM,CAJ6B,CAvBrC,CA8BF,MAAOj1C,CAAP,CAAU,CACViP,CAAA,CAAkBjP,CAAlB,CADU,CAShB,GAAM,EAAA01C,CAAA,CAAQnD,CAAAR,YAAR,EACDQ,CADC,GA5EkB7K,IA4ElB,EACqB6K,CAAAV,cADrB,CAAN,CAEE,IAAA,CAAOU,CAAP,GA9EsB7K,IA8EtB,EAA+B,EAAAgO,CAAA,CAAOnD,CAAAV,cAAP,CAA/B,CAAA,CACEU,CAAA,CAAUA,CAAAZ,QA/Cb,CAAH,MAkDUY,CAlDV,CAkDoBmD,CAlDpB,CAsDA,KAAKT,CAAL,EAAcK,CAAAz8C,OAAd,GAAsC,CAAAq8C,CAAA,EAAtC,CAEE,KAieN/kC,EAAAurB,QAjeY,CAieS,IAjeT,CAAA0V,CAAA,CAAiB,QAAjB,CAGFD,CAHE,CAGGgE,CAHH,CAAN,CAvED,CAAH,MA6ESF,CA7ET,EA6EkBK,CAAAz8C,OA7ElB,CAiFA,KAudFsX,CAAAurB,QAvdE,CAudmB,IAvdnB,CAAOia,CAAA98C,OAAP,CAAA,CACE,GAAI,CACF88C,CAAA75B,MAAA,EAAA,EADE,CAEF,MAAO9b,EAAP,CAAU,CACViP,CAAA,CAAkBjP,EAAlB,CADU,CA1GI,CAviBJ,CA0rBhBqF,SAAUA,QAAQ,EAAG,CAEnB,GAAI2sB,CAAA,IAAAA,YAAJ,CAAA,CACA,IAAIlb;AAAS,IAAA66B,QAEb,KAAA3K,WAAA,CAAgB,UAAhB,CACA,KAAAhV,YAAA,CAAmB,CAAA,CACnB,IAAI,IAAJ,GAAa7hB,CAAb,CAAA,CAEA,IAASylC,IAAAA,CAAT,GAAsB,KAAAzD,gBAAtB,CACEG,CAAA,CAAuB,IAAvB,CAA6B,IAAAH,gBAAA,CAAqByD,CAArB,CAA7B,CAA8DA,CAA9D,CAKE9+B,EAAAi7B,YAAJ,EAA0B,IAA1B,GAAgCj7B,CAAAi7B,YAAhC,CAAqD,IAAAF,cAArD,CACI/6B,EAAAk7B,YAAJ,EAA0B,IAA1B,GAAgCl7B,CAAAk7B,YAAhC,CAAqD,IAAAF,cAArD,CACI,KAAAA,cAAJ,GAAwB,IAAAA,cAAAD,cAAxB,CAA2D,IAAAA,cAA3D,CACI,KAAAA,cAAJ,GAAwB,IAAAA,cAAAC,cAAxB,CAA2D,IAAAA,cAA3D,CAGA,KAAAzsC,SAAA,CAAgB,IAAA2iC,QAAhB,CAA+B,IAAAhlC,OAA/B,CAA6C,IAAApH,WAA7C,CAA+D,IAAA6/B,YAA/D,CAAkFzgC,CAClF,KAAA2zB,IAAA,CAAW,IAAA9yB,OAAX,CAAyB,IAAAmkC,YAAzB;AAA4C6V,QAAQ,EAAG,CAAE,MAAO76C,EAAT,CACvD,KAAAk3C,YAAA,CAAmB,EAUnB,KAAAP,QAAA,CAAe,IAAAE,cAAf,CAAoC,IAAAC,cAApC,CAAyD,IAAAC,YAAzD,CACI,IAAAC,YADJ,CACuB,IAAAC,MADvB,CACoC,IAAAL,WADpC,CACsD,IA3BtD,CALA,CAFmB,CA1rBL,CA2vBhB2D,MAAOA,QAAQ,CAAC1B,CAAD,CAAO93B,CAAP,CAAe,CAC5B,MAAO9L,EAAA,CAAO4jC,CAAP,CAAA,CAAa,IAAb,CAAmB93B,CAAnB,CADqB,CA3vBd,CA6xBhBngB,WAAYA,QAAQ,CAACi4C,CAAD,CAAO93B,CAAP,CAAe,CAG5B5L,CAAAurB,QAAL,EAA4B4Z,CAAAz8C,OAA5B,EACE4V,CAAA8T,MAAA,CAAe,QAAQ,EAAG,CACpB+yB,CAAAz8C,OAAJ,EACEsX,CAAA63B,QAAA,EAFsB,CAA1B,CAOFsN,EAAAh4C,KAAA,CAAgB,CAACwF,MAAO,IAAR,CAAco0B,WAAY2c,CAA1B,CAAgC93B,OAAQA,CAAxC,CAAhB,CAXiC,CA7xBnB,CA2yBhBuxB,aAAcA,QAAQ,CAACvuC,CAAD,CAAK,CACzB42C,CAAAr4C,KAAA,CAAqByB,CAArB,CADyB,CA3yBX,CA41BhBiE,OAAQA,QAAQ,CAAC6wC,CAAD,CAAO,CACrB,GAAI,CAEF,MADAzB,EAAA,CAAW,QAAX,CACO,CAAA,IAAAmD,MAAA,CAAW1B,CAAX,CAFL,CAGF,MAAO7zC,CAAP,CAAU,CACViP,CAAA,CAAkBjP,CAAlB,CADU,CAHZ,OAKU,CAmQZmQ,CAAAurB,QAAA,CAAqB,IAjQjB,IAAI,CACFvrB,CAAA63B,QAAA,EADE,CAEF,MAAOhoC,CAAP,CAAU,CAEV,KADAiP,EAAA,CAAkBjP,CAAlB,CACMA,CAAAA,CAAN;AAFU,CAJJ,CANW,CA51BP,CA83BhBy7B,YAAaA,QAAQ,CAACoY,CAAD,CAAO,CAK1BiC,QAASA,EAAqB,EAAG,CAC/BhzC,CAAAyyC,MAAA,CAAY1B,CAAZ,CAD+B,CAJjC,IAAI/wC,EAAQ,IACZ+wC,EAAA,EAAQnB,CAAAp1C,KAAA,CAAqBw4C,CAArB,CACRnD,EAAA,EAH0B,CA93BZ,CAm6BhBhkB,IAAKA,QAAQ,CAAC/sB,CAAD,CAAOoe,CAAP,CAAiB,CAC5B,IAAI+1B,EAAiB,IAAA7D,YAAA,CAAiBtwC,CAAjB,CAChBm0C,EAAL,GACE,IAAA7D,YAAA,CAAiBtwC,CAAjB,CADF,CAC2Bm0C,CAD3B,CAC4C,EAD5C,CAGAA,EAAAz4C,KAAA,CAAoB0iB,CAApB,CAEA,KAAIuyB,EAAU,IACd,GACOA,EAAAJ,gBAAA,CAAwBvwC,CAAxB,CAGL,GAFE2wC,CAAAJ,gBAAA,CAAwBvwC,CAAxB,CAEF,CAFkC,CAElC,EAAA2wC,CAAAJ,gBAAA,CAAwBvwC,CAAxB,CAAA,EAJF,OAKU2wC,CALV,CAKoBA,CAAAZ,QALpB,CAOA,KAAI7yC,EAAO,IACX,OAAO,SAAQ,EAAG,CAChB,IAAIk3C,EAAkBD,CAAAj5C,QAAA,CAAuBkjB,CAAvB,CACG,GAAzB,GAAIg2B,CAAJ,GACED,CAAA,CAAeC,CAAf,CACA,CADkC,IAClC,CAAA1D,CAAA,CAAuBxzC,CAAvB,CAA6B,CAA7B,CAAgC8C,CAAhC,CAFF,CAFgB,CAhBU,CAn6Bd,CAm9BhBq0C,MAAOA,QAAQ,CAACr0C,CAAD,CAAO2X,CAAP,CAAa,CAAA,IACtBxZ,EAAQ,EADc,CAEtBg2C,CAFsB,CAGtBjzC,EAAQ,IAHc,CAItBwV,EAAkB,CAAA,CAJI,CAKtBV,EAAQ,CACNhW,KAAMA,CADA,CAENs0C,YAAapzC,CAFP,CAGNwV,gBAAiBA,QAAQ,EAAG,CAACA,CAAA,CAAkB,CAAA,CAAnB,CAHtB,CAINsvB,eAAgBA,QAAQ,EAAG,CACzBhwB,CAAAG,iBAAA,CAAyB,CAAA,CADA,CAJrB,CAONA,iBAAkB,CAAA,CAPZ,CALc;AActBo+B,EAAe13C,EAAA,CAAO,CAACmZ,CAAD,CAAP,CAAgBld,SAAhB,CAA2B,CAA3B,CAdO,CAetBZ,CAfsB,CAenBjB,CAEP,GAAG,CACDk9C,CAAA,CAAiBjzC,CAAAovC,YAAA,CAAkBtwC,CAAlB,CAAjB,EAA4C7B,CAC5C6X,EAAAw+B,aAAA,CAAqBtzC,CAChBhJ,EAAA,CAAI,CAAT,KAAYjB,CAAZ,CAAqBk9C,CAAAl9C,OAArB,CAA4CiB,CAA5C,CAAgDjB,CAAhD,CAAwDiB,CAAA,EAAxD,CAGE,GAAKi8C,CAAA,CAAej8C,CAAf,CAAL,CAMA,GAAI,CAEFi8C,CAAA,CAAej8C,CAAf,CAAAoF,MAAA,CAAwB,IAAxB,CAA8Bi3C,CAA9B,CAFE,CAGF,MAAOn2C,CAAP,CAAU,CACViP,CAAA,CAAkBjP,CAAlB,CADU,CATZ,IACE+1C,EAAAh5C,OAAA,CAAsBjD,CAAtB,CAAyB,CAAzB,CAEA,CADAA,CAAA,EACA,CAAAjB,CAAA,EAWJ,IAAIyf,CAAJ,CAEE,MADAV,EAAAw+B,aACOx+B,CADc,IACdA,CAAAA,CAGT9U,EAAA,CAAQA,CAAA6uC,QAzBP,CAAH,MA0BS7uC,CA1BT,CA4BA8U,EAAAw+B,aAAA,CAAqB,IAErB,OAAOx+B,EA/CmB,CAn9BZ,CA2hChBovB,WAAYA,QAAQ,CAACplC,CAAD,CAAO2X,CAAP,CAAa,CAAA,IAE3Bg5B,EADS7K,IADkB,CAG3BgO,EAFShO,IADkB,CAI3B9vB,EAAQ,CACNhW,KAAMA,CADA,CAENs0C,YALOxO,IAGD,CAGNE,eAAgBA,QAAQ,EAAG,CACzBhwB,CAAAG,iBAAA,CAAyB,CAAA,CADA,CAHrB,CAMNA,iBAAkB,CAAA,CANZ,CASZ,IAAK,CAZQ2vB,IAYRyK,gBAAA,CAAuBvwC,CAAvB,CAAL,CAAmC,MAAOgW,EAM1C,KAnB+B,IAe3Bu+B,EAAe13C,EAAA,CAAO,CAACmZ,CAAD,CAAP,CAAgBld,SAAhB,CAA2B,CAA3B,CAfY,CAgBhBZ,CAhBgB,CAgBbjB,CAGlB,CAAQ05C,CAAR,CAAkBmD,CAAlB,CAAA,CAAyB,CACvB99B,CAAAw+B,aAAA,CAAqB7D,CACrB1c,EAAA,CAAY0c,CAAAL,YAAA,CAAoBtwC,CAApB,CAAZ;AAAyC,EACpC9H,EAAA,CAAI,CAAT,KAAYjB,CAAZ,CAAqBg9B,CAAAh9B,OAArB,CAAuCiB,CAAvC,CAA2CjB,CAA3C,CAAmDiB,CAAA,EAAnD,CAEE,GAAK+7B,CAAA,CAAU/7B,CAAV,CAAL,CAOA,GAAI,CACF+7B,CAAA,CAAU/7B,CAAV,CAAAoF,MAAA,CAAmB,IAAnB,CAAyBi3C,CAAzB,CADE,CAEF,MAAOn2C,CAAP,CAAU,CACViP,CAAA,CAAkBjP,CAAlB,CADU,CATZ,IACE61B,EAAA94B,OAAA,CAAiBjD,CAAjB,CAAoB,CAApB,CAEA,CADAA,CAAA,EACA,CAAAjB,CAAA,EAeJ,IAAM,EAAA68C,CAAA,CAASnD,CAAAJ,gBAAA,CAAwBvwC,CAAxB,CAAT,EAA0C2wC,CAAAR,YAA1C,EACDQ,CADC,GAzCK7K,IAyCL,EACqB6K,CAAAV,cADrB,CAAN,CAEE,IAAA,CAAOU,CAAP,GA3CS7K,IA2CT,EAA+B,EAAAgO,CAAA,CAAOnD,CAAAV,cAAP,CAA/B,CAAA,CACEU,CAAA,CAAUA,CAAAZ,QA1BS,CA+BzB/5B,CAAAw+B,aAAA,CAAqB,IACrB,OAAOx+B,EAnDwB,CA3hCjB,CAklClB,KAAIzH,EAAa,IAAIshC,CAArB,CAGI6D,EAAanlC,CAAAkmC,aAAbf,CAAuC,EAH3C,CAIIK,EAAkBxlC,CAAAmmC,kBAAlBX,CAAiD,EAJrD,CAKIjD,EAAkBviC,CAAAomC,kBAAlB7D,CAAiD,EAErD,OAAOviC,EA1qCoD,CADjD,CAbgB,CAivC9BtH,QAASA,GAAqB,EAAG,CAAA,IAC3Bud,EAA6B,mCADF,CAE7BG,EAA8B,4CAkBhC,KAAAH,2BAAA,CAAkCC,QAAQ,CAACC,CAAD,CAAS,CACjD,MAAIjrB,EAAA,CAAUirB,CAAV,CAAJ;CACEF,CACO,CADsBE,CACtB,CAAA,IAFT,EAIOF,CAL0C,CAyBnD,KAAAG,4BAAA,CAAmCC,QAAQ,CAACF,CAAD,CAAS,CAClD,MAAIjrB,EAAA,CAAUirB,CAAV,CAAJ,EACEC,CACO,CADuBD,CACvB,CAAA,IAFT,EAIOC,CAL2C,CAQpD,KAAA9N,KAAA,CAAYC,QAAQ,EAAG,CACrB,MAAO89B,SAAoB,CAACC,CAAD,CAAMC,CAAN,CAAe,CACxC,IAAIC,EAAQD,CAAA,CAAUnwB,CAAV,CAAwCH,CAApD,CACIwwB,CACJA,EAAA,CAAgB1Y,EAAA,CAAWuY,CAAX,CAAA31B,KAChB,OAAsB,EAAtB,GAAI81B,CAAJ,EAA6BA,CAAAj5C,MAAA,CAAoBg5C,CAApB,CAA7B,CAGOF,CAHP,CACS,SADT,CACqBG,CALmB,CADrB,CArDQ,CAgFjCC,QAASA,GAAa,CAACC,CAAD,CAAU,CAC9B,GAAgB,MAAhB,GAAIA,CAAJ,CACE,MAAOA,EACF,IAAI99C,CAAA,CAAS89C,CAAT,CAAJ,CAAuB,CAK5B,GAA8B,EAA9B,CAAIA,CAAAh6C,QAAA,CAAgB,KAAhB,CAAJ,CACE,KAAMi6C,GAAA,CAAW,QAAX,CACsDD,CADtD,CAAN,CAGFA,CAAA,CAAUE,EAAA,CAAgBF,CAAhB,CAAAz2C,QAAA,CACY,QADZ,CACsB,IADtB,CAAAA,QAAA,CAEY,KAFZ,CAEmB,YAFnB,CAGV,OAAO,KAAI3C,MAAJ,CAAW,GAAX,CAAiBo5C,CAAjB,CAA2B,GAA3B,CAZqB,CAavB,GAAIp7C,EAAA,CAASo7C,CAAT,CAAJ,CAIL,MAAO,KAAIp5C,MAAJ,CAAW,GAAX,CAAiBo5C,CAAA75C,OAAjB,CAAkC,GAAlC,CAEP,MAAM85C,GAAA,CAAW,UAAX,CAAN,CAtB4B,CA4BhCE,QAASA,GAAc,CAACC,CAAD,CAAW,CAChC,IAAIC,EAAmB,EACnB97C,EAAA,CAAU67C,CAAV,CAAJ,EACEh+C,CAAA,CAAQg+C,CAAR,CAAkB,QAAQ,CAACJ,CAAD,CAAU,CAClCK,CAAA75C,KAAA,CAAsBu5C,EAAA,CAAcC,CAAd,CAAtB,CADkC,CAApC,CAIF;MAAOK,EAPyB,CA8ElCvmC,QAASA,GAAoB,EAAG,CAC9B,IAAAwmC,aAAA,CAAoBA,EADU,KAI1BC,EAAuB,CAAC,MAAD,CAJG,CAK1BC,EAAuB,EAwB3B,KAAAD,qBAAA,CAA4BE,QAAQ,CAACt9C,CAAD,CAAQ,CACtCS,SAAA7B,OAAJ,GACEw+C,CADF,CACyBJ,EAAA,CAAeh9C,CAAf,CADzB,CAGA,OAAOo9C,EAJmC,CAkC5C,KAAAC,qBAAA,CAA4BE,QAAQ,CAACv9C,CAAD,CAAQ,CACtCS,SAAA7B,OAAJ,GACEy+C,CADF,CACyBL,EAAA,CAAeh9C,CAAf,CADzB,CAGA,OAAOq9C,EAJmC,CAO5C,KAAA7+B,KAAA,CAAY,CAAC,WAAD,CAAc,QAAQ,CAAC4D,CAAD,CAAY,CAW5Co7B,QAASA,EAAQ,CAACX,CAAD,CAAU3T,CAAV,CAAqB,CACpC,MAAgB,MAAhB,GAAI2T,CAAJ,CACSza,EAAA,CAAgB8G,CAAhB,CADT,CAIS,CAAE,CAAA2T,CAAA/jC,KAAA,CAAaowB,CAAAriB,KAAb,CALyB,CA+BtC42B,QAASA,EAAkB,CAACC,CAAD,CAAO,CAChC,IAAIC,EAAaA,QAA+B,CAACC,CAAD,CAAe,CAC7D,IAAAC,qBAAA,CAA4BC,QAAQ,EAAG,CACrC,MAAOF,EAD8B,CADsB,CAK3DF,EAAJ,GACEC,CAAA17B,UADF,CACyB,IAAIy7B,CAD7B,CAGAC,EAAA17B,UAAAgjB,QAAA,CAA+B8Y,QAAmB,EAAG,CACnD,MAAO,KAAAF,qBAAA,EAD4C,CAGrDF,EAAA17B,UAAAzgB,SAAA,CAAgCw8C,QAAoB,EAAG,CACrD,MAAO,KAAAH,qBAAA,EAAAr8C,SAAA,EAD8C,CAGvD;MAAOm8C,EAfyB,CAxClC,IAAIM,EAAgBA,QAAsB,CAAC/3C,CAAD,CAAO,CAC/C,KAAM42C,GAAA,CAAW,QAAX,CAAN,CAD+C,CAI7C16B,EAAAD,IAAA,CAAc,WAAd,CAAJ,GACE87B,CADF,CACkB77B,CAAAvY,IAAA,CAAc,WAAd,CADlB,CAN4C,KA4DxCq0C,EAAyBT,CAAA,EA5De,CA6DxCU,EAAS,EAEbA,EAAA,CAAOhB,EAAA/jB,KAAP,CAAA,CAA4BqkB,CAAA,CAAmBS,CAAnB,CAC5BC,EAAA,CAAOhB,EAAAiB,IAAP,CAAA,CAA2BX,CAAA,CAAmBS,CAAnB,CAC3BC,EAAA,CAAOhB,EAAAkB,IAAP,CAAA,CAA2BZ,CAAA,CAAmBS,CAAnB,CAC3BC,EAAA,CAAOhB,EAAAmB,GAAP,CAAA,CAA0Bb,CAAA,CAAmBS,CAAnB,CAC1BC,EAAA,CAAOhB,EAAA9jB,aAAP,CAAA,CAAoCokB,CAAA,CAAmBU,CAAA,CAAOhB,EAAAkB,IAAP,CAAnB,CAyGpC,OAAO,CAAEE,QAtFTA,QAAgB,CAAC/jC,CAAD,CAAOojC,CAAP,CAAqB,CACnC,IAAIY,EAAeL,CAAA7+C,eAAA,CAAsBkb,CAAtB,CAAA,CAA8B2jC,CAAA,CAAO3jC,CAAP,CAA9B,CAA6C,IAChE,IAAKgkC,CAAAA,CAAL,CACE,KAAM1B,GAAA,CAAW,UAAX,CAEFtiC,CAFE,CAEIojC,CAFJ,CAAN,CAIF,GAAqB,IAArB,GAAIA,CAAJ,EAA6BA,CAA7B,GAA8Cr/C,CAA9C,EAA4E,EAA5E,GAA2Dq/C,CAA3D,CACE,MAAOA,EAIT,IAA4B,QAA5B,GAAI,MAAOA,EAAX,CACE,KAAMd,GAAA,CAAW,OAAX,CAEFtiC,CAFE,CAAN,CAIF,MAAO,KAAIgkC,CAAJ,CAAgBZ,CAAhB,CAjB4B,CAsF9B,CACE5Y,WA1BTA,QAAmB,CAACxqB,CAAD,CAAOikC,CAAP,CAAqB,CACtC,GAAqB,IAArB,GAAIA,CAAJ,EAA6BA,CAA7B,GAA8ClgD,CAA9C,EAA4E,EAA5E,GAA2DkgD,CAA3D,CACE,MAAOA,EAET,KAAI7yC,EAAeuyC,CAAA7+C,eAAA,CAAsBkb,CAAtB,CAAA,CAA8B2jC,CAAA,CAAO3jC,CAAP,CAA9B,CAA6C,IAChE,IAAI5O,CAAJ,EAAmB6yC,CAAnB;AAA2C7yC,CAA3C,CACE,MAAO6yC,EAAAZ,qBAAA,EAKT,IAAIrjC,CAAJ,GAAa2iC,EAAA9jB,aAAb,CAAwC,CAzIpC6P,IAAAA,EAAYjF,EAAA,CA0ImBwa,CA1IRj9C,SAAA,EAAX,CAAZ0nC,CACArpC,CADAqpC,CACG9f,CADH8f,CACMwV,EAAU,CAAA,CAEf7+C,EAAA,CAAI,CAAT,KAAYupB,CAAZ,CAAgBg0B,CAAAx+C,OAAhB,CAA6CiB,CAA7C,CAAiDupB,CAAjD,CAAoDvpB,CAAA,EAApD,CACE,GAAI29C,CAAA,CAASJ,CAAA,CAAqBv9C,CAArB,CAAT,CAAkCqpC,CAAlC,CAAJ,CAAkD,CAChDwV,CAAA,CAAU,CAAA,CACV,MAFgD,CAKpD,GAAIA,CAAJ,CAEE,IAAK7+C,CAAO,CAAH,CAAG,CAAAupB,CAAA,CAAIi0B,CAAAz+C,OAAhB,CAA6CiB,CAA7C,CAAiDupB,CAAjD,CAAoDvpB,CAAA,EAApD,CACE,GAAI29C,CAAA,CAASH,CAAA,CAAqBx9C,CAArB,CAAT,CAAkCqpC,CAAlC,CAAJ,CAAkD,CAChDwV,CAAA,CAAU,CAAA,CACV,MAFgD,CA8HpD,GAxHKA,CAwHL,CACE,MAAOD,EAEP,MAAM3B,GAAA,CAAW,UAAX,CAEF2B,CAAAj9C,SAAA,EAFE,CAAN,CAJoC,CAQjC,GAAIgZ,CAAJ,GAAa2iC,EAAA/jB,KAAb,CACL,MAAO6kB,EAAA,CAAcQ,CAAd,CAET,MAAM3B,GAAA,CAAW,QAAX,CAAN,CAtBsC,CAyBjC,CAEE7X,QAlDTA,QAAgB,CAACwZ,CAAD,CAAe,CAC7B,MAAIA,EAAJ,WAA4BP,EAA5B,CACSO,CAAAZ,qBAAA,EADT,CAGSY,CAJoB,CAgDxB,CA5KqC,CAAlC,CAtEkB,CAkhBhChoC,QAASA,GAAY,EAAG,CACtB,IAAIgW,EAAU,CAAA,CAad,KAAAA,QAAA,CAAekyB,QAAQ,CAAC3+C,CAAD,CAAQ,CACzBS,SAAA7B,OAAJ,GACE6tB,CADF,CACY,CAAEzsB,CAAAA,CADd,CAGA,OAAOysB,EAJsB,CAsD/B,KAAAjO,KAAA,CAAY,CAAC,QAAD,CAAW,cAAX,CAA2B,QAAQ,CACjCxI,CADiC,CACvBU,CADuB,CACT,CAGpC,GAAI+V,CAAJ;AAAsB,CAAtB,CAAemyB,EAAf,CACE,KAAM9B,GAAA,CAAW,UAAX,CAAN,CAMF,IAAI+B,EAAM96C,EAAA,CAAYo5C,EAAZ,CAaV0B,EAAAC,UAAA,CAAgBC,QAAQ,EAAG,CACzB,MAAOtyB,EADkB,CAG3BoyB,EAAAN,QAAA,CAAc7nC,CAAA6nC,QACdM,EAAA7Z,WAAA,CAAiBtuB,CAAAsuB,WACjB6Z,EAAA5Z,QAAA,CAAcvuB,CAAAuuB,QAETxY,EAAL,GACEoyB,CAAAN,QACA,CADcM,CAAA7Z,WACd,CAD+Bga,QAAQ,CAACxkC,CAAD,CAAOxa,CAAP,CAAc,CAAE,MAAOA,EAAT,CACrD,CAAA6+C,CAAA5Z,QAAA,CAAcjkC,EAFhB,CAwBA69C,EAAAI,QAAA,CAAcC,QAAmB,CAAC1kC,CAAD,CAAOo/B,CAAP,CAAa,CAC5C,IAAIhgC,EAAS5D,CAAA,CAAO4jC,CAAP,CACb,OAAIhgC,EAAAsa,QAAJ,EAAsBta,CAAA/L,SAAtB,CACS+L,CADT,CAGS5D,CAAA,CAAO4jC,CAAP,CAAa,QAAQ,CAAC55C,CAAD,CAAQ,CAClC,MAAO6+C,EAAA7Z,WAAA,CAAexqB,CAAf,CAAqBxa,CAArB,CAD2B,CAA7B,CALmC,CAtDV,KAoThC0F,EAAQm5C,CAAAI,QApTwB,CAqThCja,EAAa6Z,CAAA7Z,WArTmB,CAsThCuZ,EAAUM,CAAAN,QAEdt/C,EAAA,CAAQk+C,EAAR,CAAsB,QAAQ,CAACgC,CAAD,CAAYx3C,CAAZ,CAAkB,CAC9C,IAAIy3C,EAAQ38C,CAAA,CAAUkF,CAAV,CACZk3C,EAAA,CAAI/mC,EAAA,CAAU,WAAV,CAAwBsnC,CAAxB,CAAJ,CAAA,CAAsC,QAAQ,CAACxF,CAAD,CAAO,CACnD,MAAOl0C,EAAA,CAAMy5C,CAAN,CAAiBvF,CAAjB,CAD4C,CAGrDiF,EAAA,CAAI/mC,EAAA,CAAU,cAAV,CAA2BsnC,CAA3B,CAAJ,CAAA,CAAyC,QAAQ,CAACp/C,CAAD,CAAQ,CACvD,MAAOglC,EAAA,CAAWma,CAAX,CAAsBn/C,CAAtB,CADgD,CAGzD6+C,EAAA,CAAI/mC,EAAA,CAAU,WAAV;AAAwBsnC,CAAxB,CAAJ,CAAA,CAAsC,QAAQ,CAACp/C,CAAD,CAAQ,CACpD,MAAOu+C,EAAA,CAAQY,CAAR,CAAmBn/C,CAAnB,CAD6C,CARR,CAAhD,CAaA,OAAO6+C,EArU6B,CAD1B,CApEU,CA4ZxBhoC,QAASA,GAAgB,EAAG,CAC1B,IAAA2H,KAAA,CAAY,CAAC,SAAD,CAAY,WAAZ,CAAyB,QAAQ,CAAClH,CAAD,CAAUxC,CAAV,CAAqB,CAAA,IAC5DuqC,EAAe,EAD6C,CAE5DC,EACE1+C,EAAA,CAAI,CAAC,eAAAkY,KAAA,CAAqBrW,CAAA,CAAU88C,CAACjoC,CAAAkoC,UAADD,EAAsB,EAAtBA,WAAV,CAArB,CAAD,EAAyE,EAAzE,EAA6E,CAA7E,CAAJ,CAH0D,CAI5DE,EAAQ,QAAAt2C,KAAA,CAAco2C,CAACjoC,CAAAkoC,UAADD,EAAsB,EAAtBA,WAAd,CAJoD,CAK5DjhD,EAAWwW,CAAA,CAAU,CAAV,CAAXxW,EAA2B,EALiC,CAM5DohD,CAN4D,CAO5DC,EAAc,2BAP8C,CAQ5DC,EAAYthD,CAAA8kC,KAAZwc,EAA6BthD,CAAA8kC,KAAA3zB,MAR+B,CAS5DowC,EAAc,CAAA,CAT8C,CAU5DC,EAAa,CAAA,CAGjB,IAAIF,CAAJ,CAAe,CACb,IAAS39C,IAAAA,CAAT,GAAiB29C,EAAjB,CACE,GAAIl8C,CAAJ,CAAYi8C,CAAA7mC,KAAA,CAAiB7W,CAAjB,CAAZ,CAAoC,CAClCy9C,CAAA,CAAeh8C,CAAA,CAAM,CAAN,CACfg8C,EAAA,CAAeA,CAAAt4B,OAAA,CAAoB,CAApB,CAAuB,CAAvB,CAAAlP,YAAA,EAAf,CAAyDwnC,CAAAt4B,OAAA,CAAoB,CAApB,CACzD,MAHkC,CAOjCs4B,CAAL,GACEA,CADF,CACkB,eADlB,EACqCE,EADrC,EACmD,QADnD,CAIAC,EAAA,CAAc,CAAG,EAAC,YAAD,EAAiBD,EAAjB,EAAgCF,CAAhC,CAA+C,YAA/C,EAA+DE,EAA/D,CACjBE,EAAA,CAAc,CAAG,EAAC,WAAD,EAAgBF,EAAhB,EAA+BF,CAA/B,CAA8C,WAA9C;AAA6DE,CAA7D,CAEbN,EAAAA,CAAJ,EAAiBO,CAAjB,EAAkCC,CAAlC,GACED,CACA,CADc9gD,CAAA,CAAST,CAAA8kC,KAAA3zB,MAAAswC,iBAAT,CACd,CAAAD,CAAA,CAAa/gD,CAAA,CAAST,CAAA8kC,KAAA3zB,MAAAuwC,gBAAT,CAFf,CAhBa,CAuBf,MAAO,CAULx6B,QAAS,EAAGA,CAAAlO,CAAAkO,QAAH,EAAsBy6B,CAAA3oC,CAAAkO,QAAAy6B,UAAtB,EAA+D,CAA/D,CAAqDX,CAArD,EAAsEG,CAAtE,CAVJ,CAYLS,SAAUA,QAAQ,CAACviC,CAAD,CAAQ,CAMxB,GAAc,OAAd,GAAIA,CAAJ,EAAiC,EAAjC,EAAyBihC,EAAzB,CAAqC,MAAO,CAAA,CAE5C,IAAIz9C,CAAA,CAAYk+C,CAAA,CAAa1hC,CAAb,CAAZ,CAAJ,CAAsC,CACpC,IAAIwiC,EAAS7hD,CAAAsa,cAAA,CAAuB,KAAvB,CACbymC,EAAA,CAAa1hC,CAAb,CAAA,CAAsB,IAAtB,CAA6BA,CAA7B,GAAsCwiC,EAFF,CAKtC,MAAOd,EAAA,CAAa1hC,CAAb,CAbiB,CAZrB,CA2BLpP,IAAKA,EAAA,EA3BA,CA4BLmxC,aAAcA,CA5BT,CA6BLG,YAAaA,CA7BR,CA8BLC,WAAYA,CA9BP,CA+BLR,QAASA,CA/BJ,CApCyD,CAAtD,CADc,CA4F5BroC,QAASA,GAAwB,EAAG,CAClC,IAAAuH,KAAA,CAAY,CAAC,gBAAD,CAAmB,OAAnB,CAA4B,IAA5B,CAAkC,QAAQ,CAAC1H,CAAD,CAAiBtB,CAAjB,CAAwBY,CAAxB,CAA4B,CAChFgqC,QAASA,EAAe,CAACC,CAAD,CAAMC,CAAN,CAA0B,CAChDF,CAAAG,qBAAA,EAEA,KAAIhiB,EAAoB/oB,CAAA8oB,SAApBC,EAAsC/oB,CAAA8oB,SAAAC,kBAEtCv/B,EAAA,CAAQu/B,CAAR,CAAJ,CACEA,CADF,CACsBA,CAAAxwB,OAAA,CAAyB,QAAQ,CAACyyC,CAAD,CAAc,CACjE,MAAOA,EAAP;AAAuBjjB,EAD0C,CAA/C,CADtB,CAIWgB,CAJX,GAIiChB,EAJjC,GAKEgB,CALF,CAKsB,IALtB,CAaA,OAAO/oB,EAAA3L,IAAA,CAAUw2C,CAAV,CALWI,CAChBl/B,MAAOzK,CADS2pC,CAEhBliB,kBAAmBA,CAFHkiB,CAKX,CAAA9K,QAAA,CACI,QAAQ,EAAG,CAClByK,CAAAG,qBAAA,EADkB,CADf,CAAA7oB,KAAA,CAIC,QAAQ,CAAC0H,CAAD,CAAW,CACvB,MAAOA,EAAAp2B,KADgB,CAJpB,CAQP03C,QAAoB,CAACrhB,CAAD,CAAO,CACzB,GAAKihB,CAAAA,CAAL,CACE,KAAMv1B,GAAA,CAAe,QAAf,CAAyDs1B,CAAzD,CAAN,CAEF,MAAOjqC,EAAAkpB,OAAA,CAAUD,CAAV,CAJkB,CARpB,CAlByC,CAkClD+gB,CAAAG,qBAAA,CAAuC,CAEvC,OAAOH,EArCyE,CAAtE,CADsB,CA0CpCjpC,QAASA,GAAqB,EAAG,CAC/B,IAAAqH,KAAA,CAAY,CAAC,YAAD,CAAe,UAAf,CAA2B,WAA3B,CACP,QAAQ,CAACtI,CAAD,CAAe1B,CAAf,CAA2BoB,CAA3B,CAAsC,CA6GjD,MApGkB+qC,CAcN,aAAeC,QAAQ,CAACp+C,CAAD,CAAUy6B,CAAV,CAAsB4jB,CAAtB,CAAsC,CACnEj2B,CAAAA,CAAWpoB,CAAAs+C,uBAAA,CAA+B,YAA/B,CACf,KAAIC,EAAU,EACd9hD,EAAA,CAAQ2rB,CAAR,CAAkB,QAAQ,CAACmR,CAAD,CAAU,CAClC,IAAIilB,EAAc53C,EAAA5G,QAAA,CAAgBu5B,CAAhB,CAAA/yB,KAAA,CAA8B,UAA9B,CACdg4C,EAAJ,EACE/hD,CAAA,CAAQ+hD,CAAR,CAAqB,QAAQ,CAACC,CAAD,CAAc,CACrCJ,CAAJ,CAEM13C,CADU0zC,IAAIp5C,MAAJo5C,CAAW,SAAXA;AAAuBE,EAAA,CAAgB9f,CAAhB,CAAvB4f,CAAqD,aAArDA,CACV1zC,MAAA,CAAa83C,CAAb,CAFN,EAGIF,CAAA19C,KAAA,CAAa04B,CAAb,CAHJ,CAM0C,EAN1C,EAMMklB,CAAAp+C,QAAA,CAAoBo6B,CAApB,CANN,EAOI8jB,CAAA19C,KAAA,CAAa04B,CAAb,CARqC,CAA3C,CAHgC,CAApC,CAiBA,OAAOglB,EApBgE,CAdvDJ,CAiDN,WAAaO,QAAQ,CAAC1+C,CAAD,CAAUy6B,CAAV,CAAsB4jB,CAAtB,CAAsC,CAErE,IADA,IAAIM,EAAW,CAAC,KAAD,CAAQ,UAAR,CAAoB,OAApB,CAAf,CACS73B,EAAI,CAAb,CAAgBA,CAAhB,CAAoB63B,CAAAviD,OAApB,CAAqC,EAAE0qB,CAAvC,CAA0C,CAGxC,IAAIrN,EAAWzZ,CAAA4X,iBAAA,CADA,GACA,CADM+mC,CAAA,CAAS73B,CAAT,CACN,CADoB,OACpB,EAFOu3B,CAAAO,CAAiB,GAAjBA,CAAuB,IAE9B,EADgD,GAChD,CADsDnkB,CACtD,CADmE,IACnE,CACf,IAAIhhB,CAAArd,OAAJ,CACE,MAAOqd,EAL+B,CAF2B,CAjDrD0kC,CAoEN,YAAcU,QAAQ,EAAG,CACnC,MAAOzrC,EAAAgQ,IAAA,EAD4B,CApEnB+6B,CAiFN,YAAcW,QAAQ,CAAC17B,CAAD,CAAM,CAClCA,CAAJ,GAAYhQ,CAAAgQ,IAAA,EAAZ,GACEhQ,CAAAgQ,IAAA,CAAcA,CAAd,CACA,CAAA1P,CAAA63B,QAAA,EAFF,CADsC,CAjFtB4S,CAgGN,WAAaY,QAAQ,CAAC76B,CAAD,CAAW,CAC1ClS,CAAAgS,gCAAA,CAAyCE,CAAzC,CAD0C,CAhG1Bi6B,CAT+B,CADvC,CADmB,CAmHjCtpC,QAASA,GAAgB,EAAG,CAC1B,IAAAmH,KAAA,CAAY,CAAC,YAAD,CAAe,UAAf,CAA2B,IAA3B,CAAiC,KAAjC,CAAwC,mBAAxC;AACP,QAAQ,CAACtI,CAAD,CAAe1B,CAAf,CAA2B4B,CAA3B,CAAiCE,CAAjC,CAAwCtB,CAAxC,CAA2D,CA6BtEqtB,QAASA,EAAO,CAACv9B,CAAD,CAAK0jB,CAAL,CAAY8d,CAAZ,CAAyB,CAAA,IACnCI,EAAatlC,CAAA,CAAUklC,CAAV,CAAbI,EAAuC,CAACJ,CADL,CAEnC5E,EAAWpZ,CAACoe,CAAA,CAAYpwB,CAAZ,CAAkBF,CAAnBkS,OAAA,EAFwB,CAGnCiY,EAAUmB,CAAAnB,QAGd9X,EAAA,CAAYjU,CAAA8T,MAAA,CAAe,QAAQ,EAAG,CACpC,GAAI,CACFoZ,CAAAC,QAAA,CAAiB78B,CAAA,EAAjB,CADE,CAEF,MAAOiB,CAAP,CAAU,CACV27B,CAAApC,OAAA,CAAgBv5B,CAAhB,CACA,CAAAiP,CAAA,CAAkBjP,CAAlB,CAFU,CAFZ,OAMQ,CACN,OAAOy7C,CAAA,CAAUjhB,CAAAkhB,YAAV,CADD,CAIH/a,CAAL,EAAgBxwB,CAAAnN,OAAA,EAXoB,CAA1B,CAYTyf,CAZS,CAcZ+X,EAAAkhB,YAAA,CAAsBh5B,CACtB+4B,EAAA,CAAU/4B,CAAV,CAAA,CAAuBiZ,CAEvB,OAAOnB,EAvBgC,CA5BzC,IAAIihB,EAAY,EAmEhBnf,EAAA3Z,OAAA,CAAiBg5B,QAAQ,CAACnhB,CAAD,CAAU,CACjC,MAAIA,EAAJ,EAAeA,CAAAkhB,YAAf,GAAsCD,EAAtC,EACEA,CAAA,CAAUjhB,CAAAkhB,YAAV,CAAAniB,OAAA,CAAsC,UAAtC,CAEO,CADP,OAAOkiB,CAAA,CAAUjhB,CAAAkhB,YAAV,CACA,CAAAjtC,CAAA8T,MAAAI,OAAA,CAAsB6X,CAAAkhB,YAAtB,CAHT,EAKO,CAAA,CAN0B,CASnC,OAAOpf,EA7E+D,CAD5D,CADc,CAkJ5B4B,QAASA,GAAU,CAACre,CAAD,CAAM,CAGnBg5B,EAAJ,GAGE+C,CAAA/lC,aAAA,CAA4B,MAA5B,CAAoCiL,CAApC,CACA,CAAAA,CAAA,CAAO86B,CAAA96B,KAJT,CAOA86B,EAAA/lC,aAAA,CAA4B,MAA5B,CAAoCiL,CAApC,CAGA,OAAO,CACLA,KAAM86B,CAAA96B,KADD,CAELqd,SAAUyd,CAAAzd,SAAA;AAA0Byd,CAAAzd,SAAA99B,QAAA,CAAgC,IAAhC,CAAsC,EAAtC,CAA1B,CAAsE,EAF3E,CAGLoW,KAAMmlC,CAAAnlC,KAHD,CAILutB,OAAQ4X,CAAA5X,OAAA,CAAwB4X,CAAA5X,OAAA3jC,QAAA,CAA8B,KAA9B,CAAqC,EAArC,CAAxB,CAAmE,EAJtE,CAKL2d,KAAM49B,CAAA59B,KAAA,CAAsB49B,CAAA59B,KAAA3d,QAAA,CAA4B,IAA5B,CAAkC,EAAlC,CAAtB,CAA8D,EAL/D,CAMLijC,SAAUsY,CAAAtY,SANL,CAOLE,KAAMoY,CAAApY,KAPD,CAQLM,SAAiD,GAAvC,GAAC8X,CAAA9X,SAAA5lC,OAAA,CAA+B,CAA/B,CAAD,CACN09C,CAAA9X,SADM,CAEN,GAFM,CAEA8X,CAAA9X,SAVL,CAbgB,CAkCzBzH,QAASA,GAAe,CAACwf,CAAD,CAAa,CAC/BhoC,CAAAA,CAAU7a,CAAA,CAAS6iD,CAAT,CAAD,CAAyB3d,EAAA,CAAW2d,CAAX,CAAzB,CAAkDA,CAC/D,OAAQhoC,EAAAsqB,SAAR,GAA4B2d,EAAA3d,SAA5B,EACQtqB,CAAA4C,KADR,GACwBqlC,EAAArlC,KAHW,CA+CrCjF,QAASA,GAAe,EAAG,CACzB,IAAAiH,KAAA,CAAYtd,EAAA,CAAQ7C,CAAR,CADa,CAiG3B8W,QAASA,GAAe,CAAC5M,CAAD,CAAW,CAWjCq0B,QAASA,EAAQ,CAACj1B,CAAD,CAAOgF,CAAP,CAAgB,CAC/B,GAAItL,CAAA,CAASsG,CAAT,CAAJ,CAAoB,CAClB,IAAIm6C,EAAU,EACd7iD,EAAA,CAAQ0I,CAAR,CAAc,QAAQ,CAACoG,CAAD,CAAS3O,CAAT,CAAc,CAClC0iD,CAAA,CAAQ1iD,CAAR,CAAA,CAAew9B,CAAA,CAASx9B,CAAT,CAAc2O,CAAd,CADmB,CAApC,CAGA,OAAO+zC,EALW,CAOlB,MAAOv5C,EAAAoE,QAAA,CAAiBhF,CAAjB,CAlBEo6C,QAkBF,CAAgCp1C,CAAhC,CARsB,CAWjC,IAAAiwB,SAAA,CAAgBA,CAEhB,KAAApe,KAAA,CAAY,CAAC,WAAD,CAAc,QAAQ,CAAC4D,CAAD,CAAY,CAC5C,MAAO,SAAQ,CAACza,CAAD,CAAO,CACpB,MAAOya,EAAAvY,IAAA,CAAclC,CAAd;AAzBEo6C,QAyBF,CADa,CADsB,CAAlC,CAoBZnlB,EAAA,CAAS,UAAT,CAAqBolB,EAArB,CACAplB,EAAA,CAAS,MAAT,CAAiBqlB,EAAjB,CACArlB,EAAA,CAAS,QAAT,CAAmBslB,EAAnB,CACAtlB,EAAA,CAAS,MAAT,CAAiBulB,EAAjB,CACAvlB,EAAA,CAAS,SAAT,CAAoBwlB,EAApB,CACAxlB,EAAA,CAAS,WAAT,CAAsBylB,EAAtB,CACAzlB,EAAA,CAAS,QAAT,CAAmB0lB,EAAnB,CACA1lB,EAAA,CAAS,SAAT,CAAoB2lB,EAApB,CACA3lB,EAAA,CAAS,WAAT,CAAsB4lB,EAAtB,CApDiC,CAiLnCN,QAASA,GAAY,EAAG,CACtB,MAAO,SAAQ,CAACv/C,CAAD,CAAQs6B,CAAR,CAAoBwlB,CAApB,CAAgC,CAC7C,GAAK,CAAAzjD,CAAA,CAAQ2D,CAAR,CAAL,CAAqB,MAAOA,EAG5B,KAAI+/C,CAEJ,QAAQ,MAAOzlB,EAAf,EACE,KAAK,UAAL,CAEE,KACF,MAAK,SAAL,CACA,KAAK,QAAL,CACA,KAAK,QAAL,CACEylB,CAAA,CAAsB,CAAA,CAExB,MAAK,QAAL,CAEEC,CAAA,CAAcC,EAAA,CAAkB3lB,CAAlB,CAA8BwlB,CAA9B,CAA0CC,CAA1C,CACd,MACF,SACE,MAAO//C,EAdX,CAiBA,MAAOA,EAAAoL,OAAA,CAAa40C,CAAb,CAvBsC,CADzB,CA6BxBC,QAASA,GAAiB,CAAC3lB,CAAD,CAAawlB,CAAb,CAAyBC,CAAzB,CAA8C,CACtE,IAAIG,EAAwBxhD,CAAA,CAAS47B,CAAT,CAAxB4lB,EAAiD,GAAjDA,EAAwD5lB,EAGzC,EAAA,CAAnB,GAAIwlB,CAAJ,CACEA,CADF,CACev+C,EADf,CAEY7E,CAAA,CAAWojD,CAAX,CAFZ,GAGEA,CAHF,CAGeA,QAAQ,CAACK,CAAD,CAASC,CAAT,CAAmB,CACtC,GAAI1hD,CAAA,CAASyhD,CAAT,CAAJ,EAAwBzhD,CAAA,CAAS0hD,CAAT,CAAxB,CAEE,MAAO,CAAA,CAGTD,EAAA,CAASrgD,CAAA,CAAU,EAAV,CAAeqgD,CAAf,CACTC,EAAA,CAAWtgD,CAAA,CAAU,EAAV,CAAesgD,CAAf,CACX,OAAqC,EAArC,GAAOD,CAAAjgD,QAAA,CAAekgD,CAAf,CAR+B,CAH1C,CAsBA;MAPcJ,SAAQ,CAACK,CAAD,CAAO,CAC3B,MAAIH,EAAJ,EAA8B,CAAAxhD,CAAA,CAAS2hD,CAAT,CAA9B,CACSC,EAAA,CAAYD,CAAZ,CAAkB/lB,CAAAh8B,EAAlB,CAAgCwhD,CAAhC,CAA4C,CAAA,CAA5C,CADT,CAGOQ,EAAA,CAAYD,CAAZ,CAAkB/lB,CAAlB,CAA8BwlB,CAA9B,CAA0CC,CAA1C,CAJoB,CAnByC,CA6BxEO,QAASA,GAAW,CAACH,CAAD,CAASC,CAAT,CAAmBN,CAAnB,CAA+BC,CAA/B,CAAoDQ,CAApD,CAA0E,CAC5F,IAAIC,EAAa,MAAOL,EAAxB,CACIM,EAAe,MAAOL,EAE1B,IAAsB,QAAtB,GAAKK,CAAL,EAA2D,GAA3D,GAAoCL,CAAA9+C,OAAA,CAAgB,CAAhB,CAApC,CACE,MAAO,CAACg/C,EAAA,CAAYH,CAAZ,CAAoBC,CAAA16B,UAAA,CAAmB,CAAnB,CAApB,CAA2Co6B,CAA3C,CAAuDC,CAAvD,CACH,IAAI1jD,CAAA,CAAQ8jD,CAAR,CAAJ,CAGL,MAAOA,EAAA3/B,KAAA,CAAY,QAAQ,CAAC6/B,CAAD,CAAO,CAChC,MAAOC,GAAA,CAAYD,CAAZ,CAAkBD,CAAlB,CAA4BN,CAA5B,CAAwCC,CAAxC,CADyB,CAA3B,CAKT,QAAQS,CAAR,EACE,KAAK,QAAL,CACE,IAAI/jD,CACJ,IAAIsjD,CAAJ,CAAyB,CACvB,IAAKtjD,CAAL,GAAY0jD,EAAZ,CACE,GAAuB,GAAvB,GAAK1jD,CAAA6E,OAAA,CAAW,CAAX,CAAL,EAA+Bg/C,EAAA,CAAYH,CAAA,CAAO1jD,CAAP,CAAZ,CAAyB2jD,CAAzB,CAAmCN,CAAnC,CAA+C,CAAA,CAA/C,CAA/B,CACE,MAAO,CAAA,CAGX,OAAOS,EAAA,CAAuB,CAAA,CAAvB,CAA+BD,EAAA,CAAYH,CAAZ,CAAoBC,CAApB,CAA8BN,CAA9B,CAA0C,CAAA,CAA1C,CANf,CAOlB,GAAqB,QAArB,GAAIW,CAAJ,CAA+B,CACpC,IAAKhkD,CAAL,GAAY2jD,EAAZ,CAEE,GADIM,CACA,CADcN,CAAA,CAAS3jD,CAAT,CACd,CAAA,CAAAC,CAAA,CAAWgkD,CAAX,CAAA,GAIAC,CAEC,CAF0B,GAE1B,GAFkBlkD,CAElB,CAAA,CAAA6jD,EAAA,CADWK,CAAAC,CAAmBT,CAAnBS,CAA4BT,CAAA,CAAO1jD,CAAP,CACvC,CAAuBikD,CAAvB,CAAoCZ,CAApC,CAAgDa,CAAhD,CAAkEA,CAAlE,CAND,CAAJ,CAOE,MAAO,CAAA,CAGX,OAAO,CAAA,CAb6B,CAepC,MAAOb,EAAA,CAAWK,CAAX,CAAmBC,CAAnB,CAGX,MAAK,UAAL,CACE,MAAO,CAAA,CACT,SACE,MAAON,EAAA,CAAWK,CAAX;AAAmBC,CAAnB,CA/BX,CAd4F,CAsG9Ff,QAASA,GAAc,CAACwB,CAAD,CAAU,CAC/B,IAAIC,EAAUD,CAAAxc,eACd,OAAO,SAAQ,CAAC0c,CAAD,CAASC,CAAT,CAAyBC,CAAzB,CAAuC,CAChDziD,CAAA,CAAYwiD,CAAZ,CAAJ,GACEA,CADF,CACmBF,CAAA5b,aADnB,CAII1mC,EAAA,CAAYyiD,CAAZ,CAAJ,GACEA,CADF,CACiBH,CAAAtc,SAAA,CAAiB,CAAjB,CAAAG,QADjB,CAKA,OAAkB,KAAX,EAACoc,CAAD,CACDA,CADC,CAEDG,EAAA,CAAaH,CAAb,CAAqBD,CAAAtc,SAAA,CAAiB,CAAjB,CAArB,CAA0Csc,CAAAvc,UAA1C,CAA6Duc,CAAAxc,YAA7D,CAAkF2c,CAAlF,CAAAx9C,QAAA,CACU,SADV,CACqBu9C,CADrB,CAZ8C,CAFvB,CAuEjCrB,QAASA,GAAY,CAACkB,CAAD,CAAU,CAC7B,IAAIC,EAAUD,CAAAxc,eACd,OAAO,SAAQ,CAAC8c,CAAD,CAASF,CAAT,CAAuB,CAGpC,MAAkB,KAAX,EAACE,CAAD,CACDA,CADC,CAEDD,EAAA,CAAaC,CAAb,CAAqBL,CAAAtc,SAAA,CAAiB,CAAjB,CAArB,CAA0Csc,CAAAvc,UAA1C,CAA6Duc,CAAAxc,YAA7D,CACa2c,CADb,CAL8B,CAFT,CAa/BC,QAASA,GAAY,CAACC,CAAD,CAAS7wC,CAAT,CAAkB8wC,CAAlB,CAA4BC,CAA5B,CAAwCJ,CAAxC,CAAsD,CACzE,GAAK,CAAAK,QAAA,CAASH,CAAT,CAAL,EAAyBziD,CAAA,CAASyiD,CAAT,CAAzB,CAA2C,MAAO,EAElD,KAAII,EAAsB,CAAtBA,CAAaJ,CACjBA,EAAA,CAASttB,IAAA2tB,IAAA,CAASL,CAAT,CAJgE,KAKrEM,EAASN,CAATM,CAAkB,EALmD,CAMrEC,EAAe,EANsD,CAOrE19C,EAAQ,EAP6D,CASrE29C,EAAc,CAAA,CAClB,IAA6B,EAA7B,GAAIF,CAAAvhD,QAAA,CAAe,GAAf,CAAJ,CAAgC,CAC9B,IAAIa,EAAQ0gD,CAAA1gD,MAAA,CAAa,qBAAb,CACRA,EAAJ;AAAyB,GAAzB,EAAaA,CAAA,CAAM,CAAN,CAAb,EAAgCA,CAAA,CAAM,CAAN,CAAhC,CAA2CkgD,CAA3C,CAA0D,CAA1D,CACEE,CADF,CACW,CADX,EAGEO,CACA,CADeD,CACf,CAAAE,CAAA,CAAc,CAAA,CAJhB,CAF8B,CAUhC,GAAKA,CAAL,CA6CqB,CAAnB,CAAIV,CAAJ,EAAiC,CAAjC,CAAwBE,CAAxB,GACEO,CACA,CADeP,CAAAS,QAAA,CAAeX,CAAf,CACf,CAAAE,CAAA,CAASU,UAAA,CAAWH,CAAX,CAFX,CA7CF,KAAkB,CACZI,CAAAA,CAAc7lD,CAACwlD,CAAA9hD,MAAA,CAAa2kC,EAAb,CAAA,CAA0B,CAA1B,CAADroC,EAAiC,EAAjCA,QAGduC,EAAA,CAAYyiD,CAAZ,CAAJ,GACEA,CADF,CACiBptB,IAAAkuB,IAAA,CAASluB,IAAAC,IAAA,CAASxjB,CAAAo0B,QAAT,CAA0Bod,CAA1B,CAAT,CAAiDxxC,CAAAq0B,QAAjD,CADjB,CAOAwc,EAAA,CAAS,EAAEttB,IAAAmuB,MAAA,CAAW,EAAEb,CAAAtiD,SAAA,EAAF,CAAsB,GAAtB,CAA4BoiD,CAA5B,CAAX,CAAApiD,SAAA,EAAF,CAAqE,GAArE,CAA2E,CAACoiD,CAA5E,CAELgB,KAAAA,EAAWtiD,CAAC,EAADA,CAAMwhD,CAANxhD,OAAA,CAAoB2kC,EAApB,CAAX2d,CACAza,EAAQya,CAAA,CAAS,CAAT,CADRA,CAEJA,EAAWA,CAAA,CAAS,CAAT,CAAXA,EAA0B,EAFtBA,CAIG16C,EAAM,CAJT06C,CAKAC,EAAS5xC,CAAA20B,OALTgd,CAMAE,EAAQ7xC,CAAA00B,MAEZ,IAAIwC,CAAAvrC,OAAJ,EAAqBimD,CAArB,CAA8BC,CAA9B,CAEE,IADA56C,CACK,CADCigC,CAAAvrC,OACD,CADgBimD,CAChB,CAAAhlD,CAAA,CAAI,CAAT,CAAYA,CAAZ,CAAgBqK,CAAhB,CAAqBrK,CAAA,EAArB,CAC4B,CAG1B,IAHKqK,CAGL,CAHWrK,CAGX,EAHgBilD,CAGhB,EAHqC,CAGrC,GAH+BjlD,CAG/B,GAFEwkD,CAEF,EAFkBN,CAElB,EAAAM,CAAA,EAAgBla,CAAAlmC,OAAA,CAAapE,CAAb,CAIpB,KAAKA,CAAL,CAASqK,CAAT,CAAcrK,CAAd,CAAkBsqC,CAAAvrC,OAAlB,CAAgCiB,CAAA,EAAhC,CACsC,CAGpC,IAHKsqC,CAAAvrC,OAGL,CAHoBiB,CAGpB,EAHyBglD,CAGzB,EAH+C,CAG/C,GAHyChlD,CAGzC,GAFEwkD,CAEF,EAFkBN,CAElB,EAAAM,CAAA,EAAgBla,CAAAlmC,OAAA,CAAapE,CAAb,CAIlB,KAAA,CAAO+kD,CAAAhmD,OAAP,CAAyBglD,CAAzB,CAAA,CACEgB,CAAA,EAAY,GAGVhB,EAAJ,EAAqC,GAArC,GAAoBA,CAApB,GAA0CS,CAA1C,EAA0DL,CAA1D,CAAuEY,CAAAx9B,OAAA,CAAgB,CAAhB;AAAmBw8B,CAAnB,CAAvE,CA3CgB,CAmDH,CAAf,GAAIE,CAAJ,GACEI,CADF,CACe,CAAA,CADf,CAIAv9C,EAAAtD,KAAA,CAAW6gD,CAAA,CAAajxC,CAAAw0B,OAAb,CAA8Bx0B,CAAAs0B,OAAzC,CACW8c,CADX,CAEWH,CAAA,CAAajxC,CAAAy0B,OAAb,CAA8Bz0B,CAAAu0B,OAFzC,CAGA,OAAO7gC,EAAAG,KAAA,CAAW,EAAX,CA9EkE,CAiF3Ei+C,QAASA,GAAS,CAACnc,CAAD,CAAMoc,CAAN,CAActrC,CAAd,CAAoB,CACpC,IAAIurC,EAAM,EACA,EAAV,CAAIrc,CAAJ,GACEqc,CACA,CADO,GACP,CAAArc,CAAA,CAAM,CAACA,CAFT,CAKA,KADAA,CACA,CADM,EACN,CADWA,CACX,CAAOA,CAAAhqC,OAAP,CAAoBomD,CAApB,CAAA,CAA4Bpc,CAAA,CAAM,GAAN,CAAYA,CACpClvB,EAAJ,GACEkvB,CADF,CACQA,CAAAxhB,OAAA,CAAWwhB,CAAAhqC,OAAX,CAAwBomD,CAAxB,CADR,CAEA,OAAOC,EAAP,CAAarc,CAVuB,CActCsc,QAASA,EAAU,CAACv9C,CAAD,CAAO+hB,CAAP,CAAazR,CAAb,CAAqByB,CAArB,CAA2B,CAC5CzB,CAAA,CAASA,CAAT,EAAmB,CACnB,OAAO,SAAQ,CAACktC,CAAD,CAAO,CAChBnlD,CAAAA,CAAQmlD,CAAA,CAAK,KAAL,CAAax9C,CAAb,CAAA,EACZ,IAAa,CAAb,CAAIsQ,CAAJ,EAAkBjY,CAAlB,CAA0B,CAACiY,CAA3B,CACEjY,CAAA,EAASiY,CACG,EAAd,GAAIjY,CAAJ,EAA8B,GAA9B,EAAmBiY,CAAnB,GAAkCjY,CAAlC,CAA0C,EAA1C,CACA,OAAO+kD,GAAA,CAAU/kD,CAAV,CAAiB0pB,CAAjB,CAAuBhQ,CAAvB,CALa,CAFsB,CAW9C0rC,QAASA,GAAa,CAACz9C,CAAD,CAAO09C,CAAP,CAAkB,CACtC,MAAO,SAAQ,CAACF,CAAD,CAAO1B,CAAP,CAAgB,CAC7B,IAAIzjD,EAAQmlD,CAAA,CAAK,KAAL,CAAax9C,CAAb,CAAA,EAAZ,CACIkC,EAAMwE,EAAA,CAAUg3C,CAAA,CAAa,OAAb,CAAuB19C,CAAvB,CAA+BA,CAAzC,CAEV,OAAO87C,EAAA,CAAQ55C,CAAR,CAAA,CAAa7J,CAAb,CAJsB,CADO,CAmBxCslD,QAASA,GAAsB,CAACC,CAAD,CAAO,CAElC,IAAIC,EAAmBC,CAAC,IAAIliD,IAAJ,CAASgiD,CAAT,CAAe,CAAf,CAAkB,CAAlB,CAADE,QAAA,EAGvB,OAAO,KAAIliD,IAAJ,CAASgiD,CAAT,CAAe,CAAf,EAAwC,CAArB,EAACC,CAAD,CAA0B,CAA1B,CAA8B,EAAjD,EAAuDA,CAAvD,CAL2B,CActCE,QAASA,GAAU,CAACh8B,CAAD,CAAO,CACvB,MAAO,SAAQ,CAACy7B,CAAD,CAAO,CAAA,IACfQ;AAAaL,EAAA,CAAuBH,CAAAS,YAAA,EAAvB,CAGbztB,EAAAA,CAAO,CAVN0tB,IAAItiD,IAAJsiD,CAQ8BV,CARrBS,YAAA,EAATC,CAQ8BV,CARGW,SAAA,EAAjCD,CAQ8BV,CANnCY,QAAA,EAFKF,EAEiB,CAFjBA,CAQ8BV,CANTM,OAAA,EAFrBI,EAUD1tB,CAAoB,CAACwtB,CACtBriD,EAAAA,CAAS,CAATA,CAAakzB,IAAAmuB,MAAA,CAAWxsB,CAAX,CAAkB,MAAlB,CAEhB,OAAO4sB,GAAA,CAAUzhD,CAAV,CAAkBomB,CAAlB,CAPY,CADC,CA0I1Bu4B,QAASA,GAAU,CAACuB,CAAD,CAAU,CAK3BwC,QAASA,EAAgB,CAACC,CAAD,CAAS,CAChC,IAAIviD,CACJ,IAAIA,CAAJ,CAAYuiD,CAAAviD,MAAA,CAAawiD,CAAb,CAAZ,CAAyC,CACnCf,CAAAA,CAAO,IAAI5hD,IAAJ,CAAS,CAAT,CAD4B,KAEnC4iD,EAAS,CAF0B,CAGnCC,EAAS,CAH0B,CAInCC,EAAa3iD,CAAA,CAAM,CAAN,CAAA,CAAWyhD,CAAAmB,eAAX,CAAiCnB,CAAAoB,YAJX,CAKnCC,EAAa9iD,CAAA,CAAM,CAAN,CAAA,CAAWyhD,CAAAsB,YAAX,CAA8BtB,CAAAuB,SAE3ChjD,EAAA,CAAM,CAAN,CAAJ,GACEyiD,CACA,CADSvlD,EAAA,CAAI8C,CAAA,CAAM,CAAN,CAAJ,CAAeA,CAAA,CAAM,EAAN,CAAf,CACT,CAAA0iD,CAAA,CAAQxlD,EAAA,CAAI8C,CAAA,CAAM,CAAN,CAAJ,CAAeA,CAAA,CAAM,EAAN,CAAf,CAFV,CAIA2iD,EAAA9mD,KAAA,CAAgB4lD,CAAhB,CAAsBvkD,EAAA,CAAI8C,CAAA,CAAM,CAAN,CAAJ,CAAtB,CAAqC9C,EAAA,CAAI8C,CAAA,CAAM,CAAN,CAAJ,CAArC,CAAqD,CAArD,CAAwD9C,EAAA,CAAI8C,CAAA,CAAM,CAAN,CAAJ,CAAxD,CACItD,EAAAA,CAAIQ,EAAA,CAAI8C,CAAA,CAAM,CAAN,CAAJ,EAAgB,CAAhB,CAAJtD,CAAyB+lD,CACzBQ,EAAAA,CAAI/lD,EAAA,CAAI8C,CAAA,CAAM,CAAN,CAAJ,EAAgB,CAAhB,CAAJijD,CAAyBP,CACzBtV,EAAAA,CAAIlwC,EAAA,CAAI8C,CAAA,CAAM,CAAN,CAAJ,EAAgB,CAAhB,CACJkjD,EAAAA,CAAKpwB,IAAAmuB,MAAA,CAAgD,GAAhD,CAAWH,UAAA,CAAW,IAAX,EAAmB9gD,CAAA,CAAM,CAAN,CAAnB,EAA+B,CAA/B,EAAX,CACT8iD,EAAAjnD,KAAA,CAAgB4lD,CAAhB,CAAsB/kD,CAAtB,CAAyBumD,CAAzB,CAA4B7V,CAA5B,CAA+B8V,CAA/B,CAhBuC,CAmBzC,MAAOX,EArByB,CAFlC,IAAIC,EAAgB,sGA2BpB;MAAO,SAAQ,CAACf,CAAD,CAAO0B,CAAP,CAAeC,CAAf,CAAyB,CAAA,IAClCxuB,EAAO,EAD2B,CAElC3xB,EAAQ,EAF0B,CAGlC7B,CAHkC,CAG9BpB,CAERmjD,EAAA,CAASA,CAAT,EAAmB,YACnBA,EAAA,CAASrD,CAAA1b,iBAAA,CAAyB+e,CAAzB,CAAT,EAA6CA,CACzC9nD,EAAA,CAASomD,CAAT,CAAJ,GACEA,CADF,CACS4B,EAAA59C,KAAA,CAAmBg8C,CAAnB,CAAA,CAA2BvkD,EAAA,CAAIukD,CAAJ,CAA3B,CAAuCa,CAAA,CAAiBb,CAAjB,CADhD,CAII7jD,EAAA,CAAS6jD,CAAT,CAAJ,GACEA,CADF,CACS,IAAI5hD,IAAJ,CAAS4hD,CAAT,CADT,CAIA,IAAK,CAAA5jD,EAAA,CAAO4jD,CAAP,CAAL,CACE,MAAOA,EAGT,KAAA,CAAO0B,CAAP,CAAA,CAEE,CADAnjD,CACA,CADQsjD,EAAAluC,KAAA,CAAwB+tC,CAAxB,CACR,GACElgD,CACA,CADQnC,EAAA,CAAOmC,CAAP,CAAcjD,CAAd,CAAqB,CAArB,CACR,CAAAmjD,CAAA,CAASlgD,CAAAie,IAAA,EAFX,GAIEje,CAAAtD,KAAA,CAAWwjD,CAAX,CACA,CAAAA,CAAA,CAAS,IALX,CASEC,EAAJ,EAA6B,KAA7B,GAAgBA,CAAhB,GACE3B,CACA,CADO,IAAI5hD,IAAJ,CAAS4hD,CAAA3hD,QAAA,EAAT,CACP,CAAA2hD,CAAA8B,WAAA,CAAgB9B,CAAA+B,WAAA,EAAhB,CAAoC/B,CAAAgC,kBAAA,EAApC,CAFF,CAIAloD,EAAA,CAAQ0H,CAAR,CAAe,QAAQ,CAAC3G,CAAD,CAAQ,CAC7B8E,CAAA,CAAKsiD,EAAA,CAAapnD,CAAb,CACLs4B,EAAA,EAAQxzB,CAAA,CAAKA,CAAA,CAAGqgD,CAAH,CAAS3B,CAAA1b,iBAAT,CAAL,CACK9nC,CAAAoG,QAAA,CAAc,UAAd,CAA0B,EAA1B,CAAAA,QAAA,CAAsC,KAAtC,CAA6C,GAA7C,CAHgB,CAA/B,CAMA,OAAOkyB,EAxC+B,CA9Bb,CA0G7B6pB,QAASA,GAAU,EAAG,CACpB,MAAO,SAAQ,CAACkF,CAAD,CAASC,CAAT,CAAkB,CAC3BnmD,CAAA,CAAYmmD,CAAZ,CAAJ,GACIA,CADJ,CACc,CADd,CAGA,OAAOliD,GAAA,CAAOiiD,CAAP,CAAeC,CAAf,CAJwB,CADb,CAqHtBlF,QAASA,GAAa,EAAG,CACvB,MAAO,SAAQ,CAACpzC,CAAD;AAAQu4C,CAAR,CAAe,CACxBjmD,CAAA,CAAS0N,CAAT,CAAJ,GAAqBA,CAArB,CAA6BA,CAAAxN,SAAA,EAA7B,CACA,OAAKxC,EAAA,CAAQgQ,CAAR,CAAL,EAAwBjQ,CAAA,CAASiQ,CAAT,CAAxB,CASA,CANEu4C,CAMF,CAPgCC,QAAhC,GAAIhxB,IAAA2tB,IAAA,CAASr6B,MAAA,CAAOy9B,CAAP,CAAT,CAAJ,CACUz9B,MAAA,CAAOy9B,CAAP,CADV,CAGU3mD,EAAA,CAAI2mD,CAAJ,CAIV,EACiB,CAAR,CAAAA,CAAA,CAAYv4C,CAAArK,MAAA,CAAY,CAAZ,CAAe4iD,CAAf,CAAZ,CAAoCv4C,CAAArK,MAAA,CAAY4iD,CAAZ,CAD7C,CAGSxoD,CAAA,CAASiQ,CAAT,CAAA,CAAkB,EAAlB,CAAuB,EAZhC,CAAgDA,CAFpB,CADP,CAwIzBuzC,QAASA,GAAa,CAACvsC,CAAD,CAAS,CAC7B,MAAO,SAAQ,CAACrT,CAAD,CAAQ8kD,CAAR,CAAuBC,CAAvB,CAAqC,CAoClDC,QAASA,EAAiB,CAACC,CAAD,CAAOC,CAAP,CAAmB,CAC3C,MAAOA,EAAA,CACD,QAAQ,CAAC/4C,CAAD,CAAIqlB,CAAJ,CAAO,CAAC,MAAOyzB,EAAA,CAAKzzB,CAAL,CAAOrlB,CAAP,CAAR,CADd,CAED84C,CAHqC,CAM7CpoD,QAASA,EAAW,CAACQ,CAAD,CAAQ,CAC1B,OAAQ,MAAOA,EAAf,EACE,KAAK,QAAL,CACA,KAAK,SAAL,CACA,KAAK,QAAL,CACE,MAAO,CAAA,CACT,SACE,MAAO,CAAA,CANX,CAD0B,CAW5B8nD,QAASA,EAAc,CAAC9nD,CAAD,CAAQ,CAC7B,MAAc,KAAd,GAAIA,CAAJ,CAA2B,MAA3B,CAC6B,UAI7B,GAJI,MAAOA,EAAAilC,QAIX,GAHEjlC,CACI,CADIA,CAAAilC,QAAA,EACJ,CAAAzlC,CAAA,CAAYQ,CAAZ,CAEN,GAA8B,UAA9B,GAAI,MAAOA,EAAAwB,SAAX,GACExB,CACI,CADIA,CAAAwB,SAAA,EACJ,CAAAhC,CAAA,CAAYQ,CAAZ,CAFN,EAEiCA,CAFjC,CAIO,EAVsB,CAa/B8zB,QAASA,EAAO,CAACi0B,CAAD,CAAKC,CAAL,CAAS,CACvB,IAAI3jD;AAAK,MAAO0jD,EAAhB,CACIzjD,EAAK,MAAO0jD,EACZ3jD,EAAJ,GAAWC,CAAX,EAAwB,QAAxB,GAAiBD,CAAjB,GACE0jD,CACA,CADKD,CAAA,CAAeC,CAAf,CACL,CAAAC,CAAA,CAAKF,CAAA,CAAeE,CAAf,CAFP,CAIA,OAAI3jD,EAAJ,GAAWC,CAAX,EACa,QAIX,GAJID,CAIJ,GAHG0jD,CACA,CADKA,CAAA59C,YAAA,EACL,CAAA69C,CAAA,CAAKA,CAAA79C,YAAA,EAER,EAAI49C,CAAJ,GAAWC,CAAX,CAAsB,CAAtB,CACOD,CAAA,CAAKC,CAAL,CAAW,EAAX,CAAe,CANxB,EAQS3jD,CAAA,CAAKC,CAAL,CAAW,EAAX,CAAe,CAfD,CAjEzB,GAAM,CAAA7F,EAAA,CAAYkE,CAAZ,CAAN,CAA2B,MAAOA,EAClC8kD,EAAA,CAAgBzoD,CAAA,CAAQyoD,CAAR,CAAA,CAAyBA,CAAzB,CAAyC,CAACA,CAAD,CAC5B,EAA7B,GAAIA,CAAA7oD,OAAJ,GAAkC6oD,CAAlC,CAAkD,CAAC,GAAD,CAAlD,CACAA,EAAA,CAAgBA,CAAAQ,IAAA,CAAkB,QAAQ,CAACC,CAAD,CAAY,CAAA,IAChDL,EAAa,CAAA,CADmC,CAC5Bh+C,EAAMq+C,CAANr+C,EAAmB7I,EAC3C,IAAIjC,CAAA,CAASmpD,CAAT,CAAJ,CAAyB,CACvB,GAA4B,GAA5B,EAAKA,CAAAjkD,OAAA,CAAiB,CAAjB,CAAL,EAA0D,GAA1D,EAAmCikD,CAAAjkD,OAAA,CAAiB,CAAjB,CAAnC,CACE4jD,CACA,CADoC,GACpC,EADaK,CAAAjkD,OAAA,CAAiB,CAAjB,CACb,CAAAikD,CAAA,CAAYA,CAAA7/B,UAAA,CAAoB,CAApB,CAEd,IAAkB,EAAlB,GAAI6/B,CAAJ,CAEE,MAAOP,EAAA,CAAkB7zB,CAAlB,CAA2B+zB,CAA3B,CAETh+C,EAAA,CAAMmM,CAAA,CAAOkyC,CAAP,CACN,IAAIr+C,CAAAgE,SAAJ,CAAkB,CAChB,IAAIzO,EAAMyK,CAAA,EACV,OAAO89C,EAAA,CAAkB,QAAQ,CAAC74C,CAAD,CAAIqlB,CAAJ,CAAO,CACtC,MAAOL,EAAA,CAAQhlB,CAAA,CAAE1P,CAAF,CAAR,CAAgB+0B,CAAA,CAAE/0B,CAAF,CAAhB,CAD+B,CAAjC,CAEJyoD,CAFI,CAFS,CAVK,CAiBzB,MAAOF,EAAA,CAAkB,QAAQ,CAAC74C,CAAD,CAAIqlB,CAAJ,CAAO,CACtC,MAAOL,EAAA,CAAQjqB,CAAA,CAAIiF,CAAJ,CAAR,CAAejF,CAAA,CAAIsqB,CAAJ,CAAf,CAD+B,CAAjC,CAEJ0zB,CAFI,CAnB6C,CAAtC,CAuBhB,OAAOljD,GAAApF,KAAA,CAAWoD,CAAX,CAAA/C,KAAA,CAAuB+nD,CAAA,CAE9BlF,QAAmB,CAACt+C,CAAD;AAAKC,CAAL,CAAS,CAC1B,IAAS,IAAAvE,EAAI,CAAb,CAAgBA,CAAhB,CAAoB4nD,CAAA7oD,OAApB,CAA0CiB,CAAA,EAA1C,CAA+C,CAC7C,IAAI+nD,EAAOH,CAAA,CAAc5nD,CAAd,CAAA,CAAiBsE,CAAjB,CAAqBC,CAArB,CACX,IAAa,CAAb,GAAIwjD,CAAJ,CAAgB,MAAOA,EAFsB,CAI/C,MAAO,EALmB,CAFE,CAA8BF,CAA9B,CAAvB,CA3B2C,CADvB,CAwF/BS,QAASA,GAAW,CAACn6C,CAAD,CAAY,CAC1B3O,CAAA,CAAW2O,CAAX,CAAJ,GACEA,CADF,CACc,CACVqb,KAAMrb,CADI,CADd,CAKAA,EAAAie,SAAA,CAAqBje,CAAAie,SAArB,EAA2C,IAC3C,OAAO/qB,GAAA,CAAQ8M,CAAR,CAPuB,CAghBhCo6C,QAASA,GAAc,CAAC5lD,CAAD,CAAUysB,CAAV,CAAiB+D,CAAjB,CAAyB1e,CAAzB,CAAmCc,CAAnC,CAAiD,CAAA,IAClEjG,EAAO,IAD2D,CAElEk5C,EAAW,EAFuD,CAIlEC,EAAan5C,CAAAo5C,aAAbD,CAAiC9lD,CAAAqa,OAAA,EAAAlS,WAAA,CAA4B,MAA5B,CAAjC29C,EAAwEE,EAG5Er5C,EAAAs5C,OAAA,CAAc,EACdt5C,EAAAu5C,UAAA,CAAiB,EACjBv5C,EAAAw5C,SAAA,CAAgBpqD,CAChB4Q,EAAAy5C,MAAA,CAAaxzC,CAAA,CAAa6Z,CAAAtnB,KAAb,EAA2BsnB,CAAApe,OAA3B,EAA2C,EAA3C,CAAA,CAA+CmiB,CAA/C,CACb7jB,EAAA05C,OAAA,CAAc,CAAA,CACd15C,EAAA25C,UAAA,CAAiB,CAAA,CACjB35C,EAAA45C,OAAA,CAAc,CAAA,CACd55C,EAAA65C,SAAA,CAAgB,CAAA,CAChB75C,EAAA85C,WAAA,CAAkB,CAAA,CAElBX,EAAAY,YAAA,CAAuB/5C,CAAvB,CAaAA,EAAAg6C,mBAAA,CAA0BC,QAAQ,EAAG,CACnCnqD,CAAA,CAAQopD,CAAR,CAAkB,QAAQ,CAACgB,CAAD,CAAU,CAClCA,CAAAF,mBAAA,EADkC,CAApC,CADmC,CAiBrCh6C,EAAAm6C,iBAAA,CAAwBC,QAAQ,EAAG,CACjCtqD,CAAA,CAAQopD,CAAR;AAAkB,QAAQ,CAACgB,CAAD,CAAU,CAClCA,CAAAC,iBAAA,EADkC,CAApC,CADiC,CAenCn6C,EAAA+5C,YAAA,CAAmBM,QAAQ,CAACH,CAAD,CAAU,CAGnCx9C,EAAA,CAAwBw9C,CAAAT,MAAxB,CAAuC,OAAvC,CACAP,EAAAhlD,KAAA,CAAcgmD,CAAd,CAEIA,EAAAT,MAAJ,GACEz5C,CAAA,CAAKk6C,CAAAT,MAAL,CADF,CACwBS,CADxB,CANmC,CAYrCl6C,EAAAs6C,gBAAA,CAAuBC,QAAQ,CAACL,CAAD,CAAUM,CAAV,CAAmB,CAChD,IAAIC,EAAUP,CAAAT,MAEVz5C,EAAA,CAAKy6C,CAAL,CAAJ,GAAsBP,CAAtB,EACE,OAAOl6C,CAAA,CAAKy6C,CAAL,CAETz6C,EAAA,CAAKw6C,CAAL,CAAA,CAAgBN,CAChBA,EAAAT,MAAA,CAAgBe,CAPgC,CAmBlDx6C,EAAA06C,eAAA,CAAsBC,QAAQ,CAACT,CAAD,CAAU,CAClCA,CAAAT,MAAJ,EAAqBz5C,CAAA,CAAKk6C,CAAAT,MAAL,CAArB,GAA6CS,CAA7C,EACE,OAAOl6C,CAAA,CAAKk6C,CAAAT,MAAL,CAET3pD,EAAA,CAAQkQ,CAAAw5C,SAAR,CAAuB,QAAQ,CAAC3oD,CAAD,CAAQ2H,CAAR,CAAc,CAC3CwH,CAAA46C,aAAA,CAAkBpiD,CAAlB,CAAwB,IAAxB,CAA8B0hD,CAA9B,CAD2C,CAA7C,CAGApqD,EAAA,CAAQkQ,CAAAs5C,OAAR,CAAqB,QAAQ,CAACzoD,CAAD,CAAQ2H,CAAR,CAAc,CACzCwH,CAAA46C,aAAA,CAAkBpiD,CAAlB,CAAwB,IAAxB,CAA8B0hD,CAA9B,CADyC,CAA3C,CAGApqD,EAAA,CAAQkQ,CAAAu5C,UAAR,CAAwB,QAAQ,CAAC1oD,CAAD,CAAQ2H,CAAR,CAAc,CAC5CwH,CAAA46C,aAAA,CAAkBpiD,CAAlB,CAAwB,IAAxB,CAA8B0hD,CAA9B,CAD4C,CAA9C,CAIA3mD,GAAA,CAAY2lD,CAAZ,CAAsBgB,CAAtB,CAdsC,CA2BxCW,GAAA,CAAqB,CACnBC,KAAM,IADa,CAEnBt9B,SAAUnqB,CAFS,CAGnB0nD,IAAKA,QAAQ,CAAC7C,CAAD,CAASnb,CAAT,CAAmBvhC,CAAnB,CAA+B,CAC1C,IAAIsY,EAAOokC,CAAA,CAAOnb,CAAP,CACNjpB;CAAL,CAIiB,EAJjB,GAGcA,CAAApgB,QAAAD,CAAa+H,CAAb/H,CAHd,EAKIqgB,CAAA5f,KAAA,CAAUsH,CAAV,CALJ,CACE08C,CAAA,CAAOnb,CAAP,CADF,CACqB,CAACvhC,CAAD,CAHqB,CAHzB,CAcnBw/C,MAAOA,QAAQ,CAAC9C,CAAD,CAASnb,CAAT,CAAmBvhC,CAAnB,CAA+B,CAC5C,IAAIsY,EAAOokC,CAAA,CAAOnb,CAAP,CACNjpB,EAAL,GAGAvgB,EAAA,CAAYugB,CAAZ,CAAkBtY,CAAlB,CACA,CAAoB,CAApB,GAAIsY,CAAArkB,OAAJ,EACE,OAAOyoD,CAAA,CAAOnb,CAAP,CALT,CAF4C,CAd3B,CAwBnBoc,WAAYA,CAxBO,CAyBnBh0C,SAAUA,CAzBS,CAArB,CAsCAnF,EAAAi7C,UAAA,CAAiBC,QAAQ,EAAG,CAC1B/1C,CAAAuK,YAAA,CAAqBrc,CAArB,CAA8B8nD,EAA9B,CACAh2C,EAAAsK,SAAA,CAAkBpc,CAAlB,CAA2B+nD,EAA3B,CACAp7C,EAAA05C,OAAA,CAAc,CAAA,CACd15C,EAAA25C,UAAA,CAAiB,CAAA,CACjBR,EAAA8B,UAAA,EAL0B,CAsB5Bj7C,EAAAq7C,aAAA,CAAoBC,QAAQ,EAAG,CAC7Bn2C,CAAAo2C,SAAA,CAAkBloD,CAAlB,CAA2B8nD,EAA3B,CAA2CC,EAA3C,CAtOcI,eAsOd,CACAx7C,EAAA05C,OAAA,CAAc,CAAA,CACd15C,EAAA25C,UAAA,CAAiB,CAAA,CACjB35C,EAAA85C,WAAA,CAAkB,CAAA,CAClBhqD,EAAA,CAAQopD,CAAR,CAAkB,QAAQ,CAACgB,CAAD,CAAU,CAClCA,CAAAmB,aAAA,EADkC,CAApC,CAL6B,CAuB/Br7C,EAAAy7C,cAAA,CAAqBC,QAAQ,EAAG,CAC9B5rD,CAAA,CAAQopD,CAAR,CAAkB,QAAQ,CAACgB,CAAD,CAAU,CAClCA,CAAAuB,cAAA,EADkC,CAApC,CAD8B,CAahCz7C,EAAA27C,cAAA,CAAqBC,QAAQ,EAAG,CAC9Bz2C,CAAAsK,SAAA,CAAkBpc,CAAlB,CA1QcmoD,cA0Qd,CACAx7C;CAAA85C,WAAA,CAAkB,CAAA,CAClBX,EAAAwC,cAAA,EAH8B,CAxNsC,CA84CxEE,QAASA,GAAoB,CAACf,CAAD,CAAO,CAClCA,CAAAgB,YAAA5nD,KAAA,CAAsB,QAAQ,CAACrD,CAAD,CAAQ,CACpC,MAAOiqD,EAAAiB,SAAA,CAAclrD,CAAd,CAAA,CAAuBA,CAAvB,CAA+BA,CAAAwB,SAAA,EADF,CAAtC,CADkC,CAWpC2pD,QAASA,GAAa,CAACtiD,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB+nD,CAAvB,CAA6BrzC,CAA7B,CAAuCpC,CAAvC,CAAiD,CACrE,IAAIgG,EAAO/X,CAAA,CAAUD,CAAA,CAAQ,CAAR,CAAAgY,KAAV,CAKX,IAAK8kC,CAAA1oC,CAAA0oC,QAAL,CAAuB,CACrB,IAAI8L,EAAY,CAAA,CAEhB5oD,EAAAgI,GAAA,CAAW,kBAAX,CAA+B,QAAQ,CAACxB,CAAD,CAAO,CAC5CoiD,CAAA,CAAY,CAAA,CADgC,CAA9C,CAIA5oD,EAAAgI,GAAA,CAAW,gBAAX,CAA6B,QAAQ,EAAG,CACtC4gD,CAAA,CAAY,CAAA,CACZrlC,EAAA,EAFsC,CAAxC,CAPqB,CAavB,IAAIA,EAAWA,QAAQ,CAACslC,CAAD,CAAK,CACtBhpB,CAAJ,GACE7tB,CAAA8T,MAAAI,OAAA,CAAsB2Z,CAAtB,CACA,CAAAA,CAAA,CAAU,IAFZ,CAIA,IAAI+oB,CAAAA,CAAJ,CAAA,CAL0B,IAMtBprD,EAAQwC,CAAA2C,IAAA,EACRwY,EAAAA,CAAQ0tC,CAAR1tC,EAAc0tC,CAAA7wC,KAKL,WAAb,GAAIA,CAAJ,EAA6BtY,CAAAopD,OAA7B,EAA4D,OAA5D,GAA4CppD,CAAAopD,OAA5C,GACEtrD,CADF,CACU0Z,CAAA,CAAK1Z,CAAL,CADV,CAOA,EAAIiqD,CAAAsB,WAAJ,GAAwBvrD,CAAxB,EAA4C,EAA5C,GAAkCA,CAAlC,EAAkDiqD,CAAAuB,sBAAlD,GACEvB,CAAAwB,cAAA,CAAmBzrD,CAAnB,CAA0B2d,CAA1B,CAfF,CAL0B,CA0B5B,IAAI/G,CAAAspC,SAAA,CAAkB,OAAlB,CAAJ,CACE19C,CAAAgI,GAAA,CAAW,OAAX;AAAoBub,CAApB,CADF,KAEO,CACL,IAAIsc,CAAJ,CAEIqpB,EAAgBA,QAAQ,CAACL,CAAD,CAAKr8C,CAAL,CAAY28C,CAAZ,CAAuB,CAC5CtpB,CAAL,GACEA,CADF,CACY7tB,CAAA8T,MAAA,CAAe,QAAQ,EAAG,CAClC+Z,CAAA,CAAU,IACLrzB,EAAL,EAAcA,CAAAhP,MAAd,GAA8B2rD,CAA9B,EACE5lC,CAAA,CAASslC,CAAT,CAHgC,CAA1B,CADZ,CADiD,CAWnD7oD,EAAAgI,GAAA,CAAW,SAAX,CAAsB,QAAQ,CAACmT,CAAD,CAAQ,CACpC,IAAIve,EAAMue,CAAAiuC,QAIE,GAAZ,GAAIxsD,CAAJ,EAAmB,EAAnB,CAAwBA,CAAxB,EAAqC,EAArC,CAA+BA,CAA/B,EAA6C,EAA7C,EAAmDA,CAAnD,EAAiE,EAAjE,EAA0DA,CAA1D,EAEAssD,CAAA,CAAc/tC,CAAd,CAAqB,IAArB,CAA2B,IAAA3d,MAA3B,CAPoC,CAAtC,CAWA,IAAI4W,CAAAspC,SAAA,CAAkB,OAAlB,CAAJ,CACE19C,CAAAgI,GAAA,CAAW,WAAX,CAAwBkhD,CAAxB,CA1BG,CAgCPlpD,CAAAgI,GAAA,CAAW,QAAX,CAAqBub,CAArB,CAEAkkC,EAAA4B,QAAA,CAAeC,QAAQ,EAAG,CACxBtpD,CAAA2C,IAAA,CAAY8kD,CAAAiB,SAAA,CAAcjB,CAAAsB,WAAd,CAAA,CAAiC,EAAjC,CAAsCtB,CAAAsB,WAAlD,CADwB,CAjF2C,CAsHvEQ,QAASA,GAAgB,CAAC1/B,CAAD,CAAS2/B,CAAT,CAAkB,CACzC,MAAO,SAAQ,CAACC,CAAD,CAAM9G,CAAN,CAAY,CAAA,IACrBx+C,CADqB,CACdshD,CAEX,IAAI1mD,EAAA,CAAO0qD,CAAP,CAAJ,CACE,MAAOA,EAGT,IAAIltD,CAAA,CAASktD,CAAT,CAAJ,CAAmB,CAII,GAArB,EAAIA,CAAAhoD,OAAA,CAAW,CAAX,CAAJ,EAA0D,GAA1D,EAA4BgoD,CAAAhoD,OAAA,CAAWgoD,CAAArtD,OAAX,CAAwB,CAAxB,CAA5B,GACEqtD,CADF,CACQA,CAAA5jC,UAAA,CAAc,CAAd,CAAiB4jC,CAAArtD,OAAjB,CAA8B,CAA9B,CADR,CAGA,IAAIstD,EAAA/iD,KAAA,CAAqB8iD,CAArB,CAAJ,CACE,MAAO,KAAI1oD,IAAJ,CAAS0oD,CAAT,CAET5/B,EAAA1oB,UAAA;AAAmB,CAGnB,IAFAgD,CAEA,CAFQ0lB,CAAAvT,KAAA,CAAYmzC,CAAZ,CAER,CAqBE,MApBAtlD,EAAAkb,MAAA,EAoBO,CAlBLomC,CAkBK,CAnBH9C,CAAJ,CACQ,CACJgH,KAAMhH,CAAAS,YAAA,EADF,CAEJwG,GAAIjH,CAAAW,SAAA,EAAJsG,CAAsB,CAFlB,CAGJC,GAAIlH,CAAAY,QAAA,EAHA,CAIJuG,GAAInH,CAAAoH,SAAA,EAJA,CAKJC,GAAIrH,CAAA+B,WAAA,EALA,CAMJuF,GAAItH,CAAAuH,WAAA,EANA,CAOJC,IAAKxH,CAAAyH,gBAAA,EAALD,CAA8B,GAP1B,CADR,CAWQ,CAAER,KAAM,IAAR,CAAcC,GAAI,CAAlB,CAAqBC,GAAI,CAAzB,CAA4BC,GAAI,CAAhC,CAAmCE,GAAI,CAAvC,CAA0CC,GAAI,CAA9C,CAAiDE,IAAK,CAAtD,CAQD,CALP1tD,CAAA,CAAQ0H,CAAR,CAAe,QAAQ,CAACkmD,CAAD,CAAOjqD,CAAP,CAAc,CAC/BA,CAAJ,CAAYopD,CAAAptD,OAAZ,GACEqpD,CAAA,CAAI+D,CAAA,CAAQppD,CAAR,CAAJ,CADF,CACwB,CAACiqD,CADzB,CADmC,CAArC,CAKO,CAAA,IAAItpD,IAAJ,CAAS0kD,CAAAkE,KAAT,CAAmBlE,CAAAmE,GAAnB,CAA4B,CAA5B,CAA+BnE,CAAAoE,GAA/B,CAAuCpE,CAAAqE,GAAvC,CAA+CrE,CAAAuE,GAA/C,CAAuDvE,CAAAwE,GAAvD,EAAiE,CAAjE,CAA8E,GAA9E,CAAoExE,CAAA0E,IAApE,EAAsF,CAAtF,CAlCQ,CAsCnB,MAAOG,IA7CkB,CADc,CAkD3CC,QAASA,GAAmB,CAACvyC,CAAD,CAAO6R,CAAP,CAAe2gC,CAAf,CAA0BnG,CAA1B,CAAkC,CAC5D,MAAOoG,SAA6B,CAACpkD,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB+nD,CAAvB,CAA6BrzC,CAA7B,CAAuCpC,CAAvC,CAAiDU,CAAjD,CAA0D,CA6D5Fg4C,QAASA,EAAW,CAACltD,CAAD,CAAQ,CAE1B,MAAOA,EAAP,EAAgB,EAAEA,CAAAwD,QAAF,EAAmBxD,CAAAwD,QAAA,EAAnB,GAAuCxD,CAAAwD,QAAA,EAAvC,CAFU,CAK5B2pD,QAASA,EAAsB,CAAChoD,CAAD,CAAM,CACnC,MAAO/D,EAAA,CAAU+D,CAAV,CAAA,CAAkB5D,EAAA,CAAO4D,CAAP,CAAA,CAAcA,CAAd,CAAoB6nD,CAAA,CAAU7nD,CAAV,CAAtC,CAAwD5G,CAD5B,CAjErC6uD,EAAA,CAAgBvkD,CAAhB,CAAuBrG,CAAvB,CAAgCN,CAAhC,CAAsC+nD,CAAtC,CACAkB;EAAA,CAActiD,CAAd,CAAqBrG,CAArB,CAA8BN,CAA9B,CAAoC+nD,CAApC,CAA0CrzC,CAA1C,CAAoDpC,CAApD,CACA,KAAIsyC,EAAWmD,CAAXnD,EAAmBmD,CAAAoD,SAAnBvG,EAAoCmD,CAAAoD,SAAAvG,SAAxC,CACIwG,CAEJrD,EAAAsD,aAAA,CAAoB/yC,CACpByvC,EAAAuD,SAAAnqD,KAAA,CAAmB,QAAQ,CAACrD,CAAD,CAAQ,CACjC,MAAIiqD,EAAAiB,SAAA,CAAclrD,CAAd,CAAJ,CAAiC,IAAjC,CACIqsB,CAAAljB,KAAA,CAAYnJ,CAAZ,CAAJ,EAIMytD,CAIGA,CAJUT,CAAA,CAAUhtD,CAAV,CAAiBstD,CAAjB,CAIVG,CAHU,KAGVA,GAHH3G,CAGG2G,EAFLA,CAAAxG,WAAA,CAAsBwG,CAAAvG,WAAA,EAAtB,CAAgDuG,CAAAtG,kBAAA,EAAhD,CAEKsG,CAAAA,CART,EAUOlvD,CAZ0B,CAAnC,CAeA0rD,EAAAgB,YAAA5nD,KAAA,CAAsB,QAAQ,CAACrD,CAAD,CAAQ,CACpC,GAAIA,CAAJ,EAAc,CAAAuB,EAAA,CAAOvB,CAAP,CAAd,CACE,KAAM0tD,GAAA,CAAe,SAAf,CAAyD1tD,CAAzD,CAAN,CAEF,GAAIktD,CAAA,CAAYltD,CAAZ,CAAJ,CAAwB,CAEtB,IADAstD,CACA,CADettD,CACf,GAAiC,KAAjC,GAAoB8mD,CAApB,CAAwC,CACtC,IAAI6G,EAAiB,GAAjBA,CAAyBL,CAAAnG,kBAAA,EAC7BmG,EAAA,CAAe,IAAI/pD,IAAJ,CAAS+pD,CAAA9pD,QAAA,EAAT,CAAkCmqD,CAAlC,CAFuB,CAIxC,MAAOz4C,EAAA,CAAQ,MAAR,CAAA,CAAgBlV,CAAhB,CAAuB6mD,CAAvB,CAA+BC,CAA/B,CANe,CAQtBwG,CAAA,CAAe,IACf,OAAO,EAb2B,CAAtC,CAiBA,IAAIlsD,CAAA,CAAUc,CAAAwiD,IAAV,CAAJ,EAA2BxiD,CAAA0rD,MAA3B,CAAuC,CACrC,IAAIC,CACJ5D,EAAA6D,YAAApJ,IAAA,CAAuBqJ,QAAQ,CAAC/tD,CAAD,CAAQ,CACrC,MAAO,CAACktD,CAAA,CAAYltD,CAAZ,CAAR,EAA8BmB,CAAA,CAAY0sD,CAAZ,CAA9B,EAAqDb,CAAA,CAAUhtD,CAAV,CAArD,EAAyE6tD,CADpC,CAGvC3rD;CAAA6xB,SAAA,CAAc,KAAd,CAAqB,QAAQ,CAAC5uB,CAAD,CAAM,CACjC0oD,CAAA,CAASV,CAAA,CAAuBhoD,CAAvB,CACT8kD,EAAA+D,UAAA,EAFiC,CAAnC,CALqC,CAWvC,GAAI5sD,CAAA,CAAUc,CAAAu0B,IAAV,CAAJ,EAA2Bv0B,CAAA+rD,MAA3B,CAAuC,CACrC,IAAIC,CACJjE,EAAA6D,YAAAr3B,IAAA,CAAuB03B,QAAQ,CAACnuD,CAAD,CAAQ,CACrC,MAAO,CAACktD,CAAA,CAAYltD,CAAZ,CAAR,EAA8BmB,CAAA,CAAY+sD,CAAZ,CAA9B,EAAqDlB,CAAA,CAAUhtD,CAAV,CAArD,EAAyEkuD,CADpC,CAGvChsD,EAAA6xB,SAAA,CAAc,KAAd,CAAqB,QAAQ,CAAC5uB,CAAD,CAAM,CACjC+oD,CAAA,CAASf,CAAA,CAAuBhoD,CAAvB,CACT8kD,EAAA+D,UAAA,EAFiC,CAAnC,CALqC,CAlDqD,CADlC,CAyE9DZ,QAASA,GAAe,CAACvkD,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB+nD,CAAvB,CAA6B,CAGnD,CADuBA,CAAAuB,sBACvB,CADoDnqD,CAAA,CADzCmB,CAAAT,CAAQ,CAARA,CACkDqsD,SAAT,CACpD,GACEnE,CAAAuD,SAAAnqD,KAAA,CAAmB,QAAQ,CAACrD,CAAD,CAAQ,CACjC,IAAIouD,EAAW5rD,CAAAP,KAAA,CAptmBSosD,UAotmBT,CAAXD,EAAoD,EAKxD,OAAOA,EAAAE,SAAA,EAAsBC,CAAAH,CAAAG,aAAtB,CAA8ChwD,CAA9C,CAA0DyB,CANhC,CAAnC,CAJiD,CAqHrDwuD,QAASA,GAAiB,CAACx4C,CAAD,CAAS7W,CAAT,CAAkBwI,CAAlB,CAAwBs1B,CAAxB,CAAoCwxB,CAApC,CAA8C,CAEtE,GAAIrtD,CAAA,CAAU67B,CAAV,CAAJ,CAA2B,CACzByxB,CAAA,CAAU14C,CAAA,CAAOinB,CAAP,CACV,IAAKpvB,CAAA6gD,CAAA7gD,SAAL,CACE,KAAMrP,EAAA,CAAO,SAAP,CAAA,CAAkB,WAAlB,CACiCmJ,CADjC,CACuCs1B,CADvC,CAAN,CAGF,MAAOyxB,EAAA,CAAQvvD,CAAR,CANkB,CAQ3B,MAAOsvD,EAV+D,CA8jBxEE,QAASA,GAAc,CAAChnD,CAAD,CAAO8T,CAAP,CAAiB,CACtC9T,CAAA,CAAO,SAAP,CAAmBA,CACnB,OAAO,CAAC,UAAD;AAAa,QAAQ,CAAC2M,CAAD,CAAW,CA+ErCs6C,QAASA,EAAe,CAACtyB,CAAD,CAAUC,CAAV,CAAmB,CACzC,IAAIF,EAAS,EAAb,CAGSx8B,EAAI,CADb,EAAA,CACA,IAAA,CAAgBA,CAAhB,CAAoBy8B,CAAA19B,OAApB,CAAoCiB,CAAA,EAApC,CAAyC,CAEvC,IADA,IAAI28B,EAAQF,CAAA,CAAQz8B,CAAR,CAAZ,CACSa,EAAI,CAAb,CAAgBA,CAAhB,CAAoB67B,CAAA39B,OAApB,CAAoC8B,CAAA,EAApC,CACE,GAAI87B,CAAJ,EAAaD,CAAA,CAAQ77B,CAAR,CAAb,CAAyB,SAAS,CAEpC27B,EAAAh5B,KAAA,CAAYm5B,CAAZ,CALuC,CAOzC,MAAOH,EAXkC,CAc3CwyB,QAASA,EAAY,CAACn0B,CAAD,CAAW,CAC9B,GAAI,CAAA17B,CAAA,CAAQ07B,CAAR,CAAJ,CAEO,CAAA,GAAI37B,CAAA,CAAS27B,CAAT,CAAJ,CACL,MAAOA,EAAAp4B,MAAA,CAAe,GAAf,CACF,IAAIjB,CAAA,CAASq5B,CAAT,CAAJ,CAAwB,CAC7B,IAAI/b,EAAU,EACd1f,EAAA,CAAQy7B,CAAR,CAAkB,QAAQ,CAAC6H,CAAD,CAAInI,CAAJ,CAAO,CAC3BmI,CAAJ,GACE5jB,CADF,CACYA,CAAAna,OAAA,CAAe41B,CAAA93B,MAAA,CAAQ,GAAR,CAAf,CADZ,CAD+B,CAAjC,CAKA,OAAOqc,EAPsB,CAFxB,CAWP,MAAO+b,EAduB,CA5FhC,MAAO,CACLzO,SAAU,IADL,CAEL5C,KAAMA,QAAQ,CAACxgB,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB,CAiCnC4sD,QAASA,EAAiB,CAACnwC,CAAD,CAAU0nB,CAAV,CAAiB,CACzC,IAAI0oB,EAAcvsD,CAAAwG,KAAA,CAAa,cAAb,CAAd+lD,EAA8C,EAAlD,CACIC,EAAkB,EACtB/vD,EAAA,CAAQ0f,CAAR,CAAiB,QAAQ,CAACiO,CAAD,CAAY,CACnC,GAAY,CAAZ,CAAIyZ,CAAJ,EAAiB0oB,CAAA,CAAYniC,CAAZ,CAAjB,CACEmiC,CAAA,CAAYniC,CAAZ,CACA,EAD0BmiC,CAAA,CAAYniC,CAAZ,CAC1B,EADoD,CACpD,EADyDyZ,CACzD,CAAI0oB,CAAA,CAAYniC,CAAZ,CAAJ,GAA+B,EAAU,CAAV,CAAEyZ,CAAF,CAA/B,EACE2oB,CAAA3rD,KAAA,CAAqBupB,CAArB,CAJ+B,CAArC,CAQApqB,EAAAwG,KAAA,CAAa,cAAb,CAA6B+lD,CAA7B,CACA,OAAOC,EAAAloD,KAAA,CAAqB,GAArB,CAZkC,CA4B3CmoD,QAASA,EAAkB,CAAC5qC,CAAD,CAAS,CAClC,GAAiB,CAAA,CAAjB;AAAI5I,CAAJ,EAAyB5S,CAAAqmD,OAAzB,CAAwC,CAAxC,GAA8CzzC,CAA9C,CAAwD,CACtD,IAAImf,EAAai0B,CAAA,CAAaxqC,CAAb,EAAuB,EAAvB,CACjB,IAAKC,CAAAA,CAAL,CAAa,CAxCf,IAAIsW,EAAak0B,CAAA,CAyCFl0B,CAzCE,CAA2B,CAA3B,CACjB14B,EAAAu4B,UAAA,CAAeG,CAAf,CAuCe,CAAb,IAEO,IAAK,CAAA12B,EAAA,CAAOmgB,CAAP,CAAcC,CAAd,CAAL,CAA4B,CAEnB0T,IAAAA,EADG62B,CAAA72B,CAAa1T,CAAb0T,CACHA,CAnBd6C,EAAQ+zB,CAAA,CAmBkBh0B,CAnBlB,CAA4B5C,CAA5B,CAmBMA,CAlBd+C,EAAW6zB,CAAA,CAAgB52B,CAAhB,CAkBe4C,CAlBf,CAkBG5C,CAjBlB6C,EAAQi0B,CAAA,CAAkBj0B,CAAlB,CAAyB,CAAzB,CAiBU7C,CAhBlB+C,EAAW+zB,CAAA,CAAkB/zB,CAAlB,CAA6B,EAA7B,CACPF,EAAJ,EAAaA,CAAAj8B,OAAb,EACE0V,CAAAsK,SAAA,CAAkBpc,CAAlB,CAA2Bq4B,CAA3B,CAEEE,EAAJ,EAAgBA,CAAAn8B,OAAhB,EACE0V,CAAAuK,YAAA,CAAqBrc,CAArB,CAA8Bu4B,CAA9B,CASmC,CAJmB,CASxDzW,CAAA,CAASvgB,EAAA,CAAYsgB,CAAZ,CAVyB,CA5DpC,IAAIC,CAEJzb,EAAAjH,OAAA,CAAaM,CAAA,CAAKyF,CAAL,CAAb,CAAyBsnD,CAAzB,CAA6C,CAAA,CAA7C,CAEA/sD,EAAA6xB,SAAA,CAAc,OAAd,CAAuB,QAAQ,CAAC/zB,CAAD,CAAQ,CACrCivD,CAAA,CAAmBpmD,CAAAyyC,MAAA,CAAYp5C,CAAA,CAAKyF,CAAL,CAAZ,CAAnB,CADqC,CAAvC,CAKa,UAAb,GAAIA,CAAJ,EACEkB,CAAAjH,OAAA,CAAa,QAAb,CAAuB,QAAQ,CAACstD,CAAD,CAASC,CAAT,CAAoB,CAEjD,IAAIC,EAAMF,CAANE,CAAe,CACnB,IAAIA,CAAJ,IAAaD,CAAb,CAAyB,CAAzB,EAA6B,CAC3B,IAAIxwC,EAAUkwC,CAAA,CAAahmD,CAAAyyC,MAAA,CAAYp5C,CAAA,CAAKyF,CAAL,CAAZ,CAAb,CACdynD,EAAA,GAAQ3zC,CAAR,EAQAmf,CACJ,CADiBk0B,CAAA,CAPAnwC,CAOA,CAA2B,CAA3B,CACjB,CAAAzc,CAAAu4B,UAAA,CAAeG,CAAf,CATI,GAaAA,CACJ,CADiBk0B,CAAA,CAXGnwC,CAWH,CAA4B,EAA5B,CACjB,CAAAzc,CAAAy4B,aAAA,CAAkBC,CAAlB,CAdI,CAF2B,CAHoB,CAAnD,CAXiC,CAFhC,CAD8B,CAAhC,CAF+B,CAilGxCovB,QAASA,GAAoB,CAAC7qD,CAAD,CAAU,CA6ErCkwD,QAASA,EAAiB,CAACziC,CAAD,CAAY0iC,CAAZ,CAAyB,CAC7CA,CAAJ,EAAoB,CAAAC,CAAA,CAAW3iC,CAAX,CAApB,EACEtY,CAAAsK,SAAA,CAAkB+N,CAAlB,CAA4BC,CAA5B,CACA;AAAA2iC,CAAA,CAAW3iC,CAAX,CAAA,CAAwB,CAAA,CAF1B,EAGY0iC,CAAAA,CAHZ,EAG2BC,CAAA,CAAW3iC,CAAX,CAH3B,GAIEtY,CAAAuK,YAAA,CAAqB8N,CAArB,CAA+BC,CAA/B,CACA,CAAA2iC,CAAA,CAAW3iC,CAAX,CAAA,CAAwB,CAAA,CAL1B,CADiD,CAUnD4iC,QAASA,EAAmB,CAACC,CAAD,CAAqBC,CAArB,CAA8B,CACxDD,CAAA,CAAqBA,CAAA,CAAqB,GAArB,CAA2B3lD,EAAA,CAAW2lD,CAAX,CAA+B,GAA/B,CAA3B,CAAiE,EAEtFJ,EAAA,CAAkBM,EAAlB,CAAgCF,CAAhC,CAAgE,CAAA,CAAhE,GAAoDC,CAApD,CACAL,EAAA,CAAkBO,EAAlB,CAAkCH,CAAlC,CAAkE,CAAA,CAAlE,GAAsDC,CAAtD,CAJwD,CAvFrB,IACjCzF,EAAO9qD,CAAA8qD,KAD0B,CAEjCt9B,EAAWxtB,CAAAwtB,SAFsB,CAGjC4iC,EAAa,EAHoB,CAIjCrF,EAAM/qD,CAAA+qD,IAJ2B,CAKjCC,EAAQhrD,CAAAgrD,MALyB,CAMjC7B,EAAanpD,CAAAmpD,WANoB,CAOjCh0C,EAAWnV,CAAAmV,SAEfi7C,EAAA,CAAWK,EAAX,CAAA,CAA4B,EAAEL,CAAA,CAAWI,EAAX,CAAF,CAA4BhjC,CAAAjO,SAAA,CAAkBixC,EAAlB,CAA5B,CAE5B1F,EAAAF,aAAA,CAEA8F,QAAoB,CAACJ,CAAD,CAAqBhqC,CAArB,CAA4B9a,CAA5B,CAAwC,CACtD8a,CAAJ,GAAclnB,CAAd,EAgDK0rD,CAAA,SAGL,GAFEA,CAAA,SAEF,CAFe,EAEf,EAAAC,CAAA,CAAID,CAAA,SAAJ,CAlD2BwF,CAkD3B,CAlD+C9kD,CAkD/C,CAnDA,GAuDIs/C,CAAA,SAGJ,EAFEE,CAAA,CAAMF,CAAA,SAAN,CArD4BwF,CAqD5B,CArDgD9kD,CAqDhD,CAEF,CAAImlD,EAAA,CAAc7F,CAAA,SAAd,CAAJ,GACEA,CAAA,SADF,CACe1rD,CADf,CA1DA,CAKKsD,GAAA,CAAU4jB,CAAV,CAAL,CAIMA,CAAJ,EACE0kC,CAAA,CAAMF,CAAAxB,OAAN,CAAmBgH,CAAnB,CAAuC9kD,CAAvC,CACA,CAAAu/C,CAAA,CAAID,CAAAvB,UAAJ,CAAoB+G,CAApB,CAAwC9kD,CAAxC,CAFF,GAIEu/C,CAAA,CAAID,CAAAxB,OAAJ,CAAiBgH,CAAjB,CAAqC9kD,CAArC,CACA,CAAAw/C,CAAA,CAAMF,CAAAvB,UAAN,CAAsB+G,CAAtB,CAA0C9kD,CAA1C,CALF,CAJF,EACEw/C,CAAA,CAAMF,CAAAxB,OAAN,CAAmBgH,CAAnB,CAAuC9kD,CAAvC,CACA,CAAAw/C,CAAA,CAAMF,CAAAvB,UAAN,CAAsB+G,CAAtB,CAA0C9kD,CAA1C,CAFF,CAYIs/C,EAAAtB,SAAJ,EACE0G,CAAA,CAAkBU,EAAlB;AAAiC,CAAA,CAAjC,CAEA,CADA9F,CAAAlB,OACA,CADckB,CAAAjB,SACd,CAD8BzqD,CAC9B,CAAAixD,CAAA,CAAoB,EAApB,CAAwB,IAAxB,CAHF,GAKEH,CAAA,CAAkBU,EAAlB,CAAiC,CAAA,CAAjC,CAGA,CAFA9F,CAAAlB,OAEA,CAFc+G,EAAA,CAAc7F,CAAAxB,OAAd,CAEd,CADAwB,CAAAjB,SACA,CADgB,CAACiB,CAAAlB,OACjB,CAAAyG,CAAA,CAAoB,EAApB,CAAwBvF,CAAAlB,OAAxB,CARF,CAiBEiH,EAAA,CADE/F,CAAAtB,SAAJ,EAAqBsB,CAAAtB,SAAA,CAAc8G,CAAd,CAArB,CACkBlxD,CADlB,CAEW0rD,CAAAxB,OAAA,CAAYgH,CAAZ,CAAJ,CACW,CAAA,CADX,CAEIxF,CAAAvB,UAAA,CAAe+G,CAAf,CAAJ,CACW,CAAA,CADX,CAGW,IAGlBD,EAAA,CAAoBC,CAApB,CAAwCO,CAAxC,CACA1H,EAAAyB,aAAA,CAAwB0F,CAAxB,CAA4CO,CAA5C,CAA2D/F,CAA3D,CA7C0D,CAbvB,CA+FvC6F,QAASA,GAAa,CAACpxD,CAAD,CAAM,CAC1B,GAAIA,CAAJ,CACE,IAASuD,IAAAA,CAAT,GAAiBvD,EAAjB,CACE,MAAO,CAAA,CAGX,OAAO,CAAA,CANmB,CAtjuB5B,IAAIuxD,GAAsB,oBAA1B,CAgBIxtD,EAAYA,QAAQ,CAACwjD,CAAD,CAAS,CAAC,MAAOlnD,EAAA,CAASknD,CAAT,CAAA,CAAmBA,CAAA97C,YAAA,EAAnB,CAA0C87C,CAAlD,CAhBjC,CAiBI3mD,GAAiBK,MAAAsiB,UAAA3iB,eAjBrB,CA6BI+O,GAAYA,QAAQ,CAAC43C,CAAD,CAAS,CAAC,MAAOlnD,EAAA,CAASknD,CAAT,CAAA,CAAmBA,CAAA/tC,YAAA,EAAnB,CAA0C+tC,CAAlD,CA7BjC,CAwDIrH,EAxDJ,CAyDIh5C,CAzDJ,CA0DI2E,EA1DJ,CA2DI5F,GAAoB,EAAAA,MA3DxB,CA4DI7B,GAAoB,EAAAA,OA5DxB,CA6DIO,GAAoB,EAAAA,KA7DxB,CA8DI7B,GAAoB7B,MAAAsiB,UAAAzgB,SA9DxB,CA+DI4B,GAAoB5E,CAAA,CAAO,IAAP,CA/DxB,CAkEI4K,GAAoB/K,CAAA+K,QAApBA;CAAuC/K,CAAA+K,QAAvCA,CAAwD,EAAxDA,CAlEJ,CAmEIoF,EAnEJ,CAoEItO,GAAoB,CAMxB0+C,GAAA,CAAOtgD,CAAA4xD,aAyMPnvD,EAAA4e,QAAA,CAAe,EAsBf3e,GAAA2e,QAAA,CAAmB,EAiHnB,KAAI3gB,EAAUkkB,KAAAlkB,QAAd,CAuEI0a,EAAOA,QAAQ,CAAC1Z,CAAD,CAAQ,CACzB,MAAOjB,EAAA,CAASiB,CAAT,CAAA,CAAkBA,CAAA0Z,KAAA,EAAlB,CAAiC1Z,CADf,CAvE3B,CA8EI+8C,GAAkBA,QAAQ,CAACjM,CAAD,CAAI,CAChC,MAAOA,EAAA1qC,QAAA,CAAU,+BAAV,CAA2C,MAA3C,CAAAA,QAAA,CACU,OADV,CACmB,OADnB,CADyB,CA9ElC,CAoWImI,GAAMA,QAAQ,EAAG,CACnB,GAAInN,CAAA,CAAUmN,EAAA4hD,UAAV,CAAJ,CAA8B,MAAO5hD,GAAA4hD,UAErC,KAAIC,EAAS,EAAG,CAAA9xD,CAAAyJ,cAAA,CAAuB,UAAvB,CAAH,EACG,CAAAzJ,CAAAyJ,cAAA,CAAuB,eAAvB,CADH,CAGb,IAAKqoD,CAAAA,CAAL,CACE,GAAI,CAEF,IAAI3e,QAAJ,CAAa,EAAb,CAFE,CAIF,MAAO1rC,CAAP,CAAU,CACVqqD,CAAA,CAAS,CAAA,CADC,CAKd,MAAQ7hD,GAAA4hD,UAAR,CAAwBC,CAhBL,CApWrB,CAkmBIhpD,GAAiB,CAAC,KAAD,CAAQ,UAAR,CAAoB,KAApB,CAA2B,OAA3B,CAlmBrB,CA85BI4C,GAAoB,QA95BxB,CAs6BIM,GAAkB,CAAA,CAt6BtB,CAu6BIW,EAv6BJ,CA0jCInM,GAAoB,CA1jCxB,CA2jCIqH,GAAiB,CA3jCrB,CA+/CIiI,GAAU,CACZiiD,KAAM,QADM,CAEZC,MAAO,CAFK;AAGZC,MAAO,CAHK,CAIZC,IAAK,EAJO,CAKZC,SAAU,gBALE,CAkPdnlD,EAAA6uB,QAAA,CAAiB,OApzEsB,KAszEnClf,GAAU3P,CAAAiW,MAAVtG,CAAyB,EAtzEU,CAuzEnCE,GAAO,CAWX7P,EAAAH,MAAA,CAAeulD,QAAQ,CAAC3uD,CAAD,CAAO,CAE5B,MAAO,KAAAwf,MAAA,CAAWxf,CAAA,CAAK,IAAAo4B,QAAL,CAAX,CAAP,EAAyC,EAFb,CAQ9B,KAAIpiB,GAAuB,iBAA3B,CACII,GAAkB,aADtB,CAEIw4C,GAAiB,CAAEC,WAAY,UAAd,CAA0BC,WAAY,WAAtC,CAFrB,CAGIl3C,GAAenb,CAAA,CAAO,QAAP,CAHnB,CAkBIqb,GAAoB,4BAlBxB,CAmBInB,GAAc,WAnBlB,CAoBIG,GAAkB,WApBtB,CAqBIM,GAAmB,yEArBvB,CAuBIH,GAAU,CACZ,OAAU,CAAC,CAAD,CAAI,8BAAJ,CAAoC,WAApC,CADE,CAGZ,MAAS,CAAC,CAAD,CAAI,SAAJ,CAAe,UAAf,CAHG,CAIZ,IAAO,CAAC,CAAD,CAAI,mBAAJ;AAAyB,qBAAzB,CAJK,CAKZ,GAAM,CAAC,CAAD,CAAI,gBAAJ,CAAsB,kBAAtB,CALM,CAMZ,GAAM,CAAC,CAAD,CAAI,oBAAJ,CAA0B,uBAA1B,CANM,CAOZ,SAAY,CAAC,CAAD,CAAI,EAAJ,CAAQ,EAAR,CAPA,CAUdA,GAAA83C,SAAA,CAAmB93C,EAAArJ,OACnBqJ,GAAA+3C,MAAA,CAAgB/3C,EAAAg4C,MAAhB,CAAgCh4C,EAAAi4C,SAAhC,CAAmDj4C,EAAAk4C,QAAnD,CAAqEl4C,EAAAm4C,MACrEn4C,GAAAo4C,GAAA,CAAap4C,EAAAq4C,GA2Tb,KAAI5mD,GAAkBa,CAAA2W,UAAlBxX,CAAqC,CACvC6mD,MAAOA,QAAQ,CAACxsD,CAAD,CAAK,CAGlBysD,QAASA,EAAO,EAAG,CACbC,CAAJ,GACAA,CACA,CADQ,CAAA,CACR,CAAA1sD,CAAA,EAFA,CADiB,CAFnB,IAAI0sD,EAAQ,CAAA,CASgB,WAA5B,GAAIlzD,CAAA2e,WAAJ,CACEC,UAAA,CAAWq0C,CAAX,CADF,EAGE,IAAA/mD,GAAA,CAAQ,kBAAR,CAA4B+mD,CAA5B,CAGA,CAAAjmD,CAAA,CAAOjN,CAAP,CAAAmM,GAAA,CAAkB,MAAlB,CAA0B+mD,CAA1B,CANF,CAVkB,CADmB,CAqBvC/vD,SAAUA,QAAQ,EAAG,CACnB,IAAIxB,EAAQ,EACZf,EAAA,CAAQ,IAAR,CAAc,QAAQ,CAAC8G,CAAD,CAAI,CAAE/F,CAAAqD,KAAA,CAAW,EAAX,CAAgB0C,CAAhB,CAAF,CAA1B,CACA,OAAO,GAAP,CAAa/F,CAAA8G,KAAA,CAAW,IAAX,CAAb,CAAgC,GAHb,CArBkB,CA2BvCoyC,GAAIA,QAAQ,CAACt2C,CAAD,CAAQ,CAChB,MAAiB,EAAV;AAACA,CAAD,CAAegD,CAAA,CAAO,IAAA,CAAKhD,CAAL,CAAP,CAAf,CAAqCgD,CAAA,CAAO,IAAA,CAAK,IAAAhH,OAAL,CAAmBgE,CAAnB,CAAP,CAD5B,CA3BmB,CA+BvChE,OAAQ,CA/B+B,CAgCvCyE,KAAMA,EAhCiC,CAiCvCzD,KAAM,EAAAA,KAjCiC,CAkCvCkD,OAAQ,EAAAA,OAlC+B,CAAzC,CA0CIua,GAAe,EACnBpe,EAAA,CAAQ,2DAAA,MAAA,CAAA,GAAA,CAAR,CAAgF,QAAQ,CAACe,CAAD,CAAQ,CAC9Fqd,EAAA,CAAa5a,CAAA,CAAUzC,CAAV,CAAb,CAAA,CAAiCA,CAD6D,CAAhG,CAGA,KAAIsd,GAAmB,EACvBre,EAAA,CAAQ,kDAAA,MAAA,CAAA,GAAA,CAAR,CAAuE,QAAQ,CAACe,CAAD,CAAQ,CACrFsd,EAAA,CAAiBtd,CAAjB,CAAA,CAA0B,CAAA,CAD2D,CAAvF,CAGA,KAAIwd,GAAe,CACjB,YAAe,WADE,CAEjB,YAAe,WAFE,CAGjB,MAAS,KAHQ,CAIjB,MAAS,KAJQ,CAKjB,UAAa,SALI,CAqBnBve,EAAA,CAAQ,CACN+J,KAAMoS,EADA,CAENq2C,WAAYt3C,EAFN,CAAR,CAGG,QAAQ,CAACrV,CAAD,CAAK6C,CAAL,CAAW,CACpB2D,CAAA,CAAO3D,CAAP,CAAA,CAAe7C,CADK,CAHtB,CAOA7F,EAAA,CAAQ,CACN+J,KAAMoS,EADA,CAENxQ,cAAeuR,EAFT,CAINtT,MAAOA,QAAQ,CAACrG,CAAD,CAAU,CAEvB,MAAOoD,EAAAoD,KAAA,CAAYxG,CAAZ,CAAqB,QAArB,CAAP;AAAyC2Z,EAAA,CAAoB3Z,CAAA8Z,WAApB,EAA0C9Z,CAA1C,CAAmD,CAAC,eAAD,CAAkB,QAAlB,CAAnD,CAFlB,CAJnB,CASNkI,aAAcA,QAAQ,CAAClI,CAAD,CAAU,CAE9B,MAAOoD,EAAAoD,KAAA,CAAYxG,CAAZ,CAAqB,eAArB,CAAP,EAAgDoD,CAAAoD,KAAA,CAAYxG,CAAZ,CAAqB,yBAArB,CAFlB,CAT1B,CAcNmI,WAAYuR,EAdN,CAgBN9T,SAAUA,QAAQ,CAAC5F,CAAD,CAAU,CAC1B,MAAO2Z,GAAA,CAAoB3Z,CAApB,CAA6B,WAA7B,CADmB,CAhBtB,CAoBNm5B,WAAYA,QAAQ,CAACn5B,CAAD,CAAUmF,CAAV,CAAgB,CAClCnF,CAAAkvD,gBAAA,CAAwB/pD,CAAxB,CADkC,CApB9B,CAwBN+W,SAAUlD,EAxBJ,CA0BNm2C,IAAKA,QAAQ,CAACnvD,CAAD,CAAUmF,CAAV,CAAgB3H,CAAhB,CAAuB,CAClC2H,CAAA,CAAOmQ,EAAA,CAAUnQ,CAAV,CAEP,IAAIvG,CAAA,CAAUpB,CAAV,CAAJ,CACEwC,CAAAiN,MAAA,CAAc9H,CAAd,CAAA,CAAsB3H,CADxB,KAGE,OAAOwC,EAAAiN,MAAA,CAAc9H,CAAd,CANyB,CA1B9B,CAoCNzF,KAAMA,QAAQ,CAACM,CAAD,CAAUmF,CAAV,CAAgB3H,CAAhB,CAAuB,CACnC,IAAI4xD,EAAiBnvD,CAAA,CAAUkF,CAAV,CACrB,IAAI0V,EAAA,CAAau0C,CAAb,CAAJ,CACE,GAAIxwD,CAAA,CAAUpB,CAAV,CAAJ,CACQA,CAAN,EACEwC,CAAA,CAAQmF,CAAR,CACA,CADgB,CAAA,CAChB,CAAAnF,CAAAoZ,aAAA,CAAqBjU,CAArB,CAA2BiqD,CAA3B,CAFF,GAIEpvD,CAAA,CAAQmF,CAAR,CACA,CADgB,CAAA,CAChB,CAAAnF,CAAAkvD,gBAAA,CAAwBE,CAAxB,CALF,CADF,KASE,OAAQpvD,EAAA,CAAQmF,CAAR,CAAD,EACEkqD,CAACrvD,CAAA8tB,WAAAwhC,aAAA,CAAgCnqD,CAAhC,CAADkqD,EAA0C9wD,CAA1C8wD,WADF;AAEED,CAFF,CAGErzD,CAbb,KAeO,IAAI6C,CAAA,CAAUpB,CAAV,CAAJ,CACLwC,CAAAoZ,aAAA,CAAqBjU,CAArB,CAA2B3H,CAA3B,CADK,KAEA,IAAIwC,CAAAqF,aAAJ,CAKL,MAFIkqD,EAEG,CAFGvvD,CAAAqF,aAAA,CAAqBF,CAArB,CAA2B,CAA3B,CAEH,CAAQ,IAAR,GAAAoqD,CAAA,CAAexzD,CAAf,CAA2BwzD,CAxBD,CApC/B,CAgEN9vD,KAAMA,QAAQ,CAACO,CAAD,CAAUmF,CAAV,CAAgB3H,CAAhB,CAAuB,CACnC,GAAIoB,CAAA,CAAUpB,CAAV,CAAJ,CACEwC,CAAA,CAAQmF,CAAR,CAAA,CAAgB3H,CADlB,KAGE,OAAOwC,EAAA,CAAQmF,CAAR,CAJ0B,CAhE/B,CAwEN2wB,KAAO,QAAQ,EAAG,CAIhB05B,QAASA,EAAO,CAACxvD,CAAD,CAAUxC,CAAV,CAAiB,CAC/B,GAAImB,CAAA,CAAYnB,CAAZ,CAAJ,CAAwB,CACtB,IAAInB,EAAW2D,CAAA3D,SACf,OAAQA,EAAD,GAAcC,EAAd,EAAmCD,CAAnC,GAAgDsH,EAAhD,CAAkE3D,CAAA+W,YAAlE,CAAwF,EAFzE,CAIxB/W,CAAA+W,YAAA,CAAsBvZ,CALS,CAHjCgyD,CAAAC,IAAA,CAAc,EACd,OAAOD,EAFS,CAAZ,EAxEA,CAqFN7sD,IAAKA,QAAQ,CAAC3C,CAAD,CAAUxC,CAAV,CAAiB,CAC5B,GAAImB,CAAA,CAAYnB,CAAZ,CAAJ,CAAwB,CACtB,GAAIwC,CAAA0vD,SAAJ,EAA+C,QAA/C,GAAwB3vD,EAAA,CAAUC,CAAV,CAAxB,CAAyD,CACvD,IAAIc,EAAS,EACbrE,EAAA,CAAQuD,CAAAumB,QAAR,CAAyB,QAAQ,CAACpZ,CAAD,CAAS,CACpCA,CAAAwiD,SAAJ,EACE7uD,CAAAD,KAAA,CAAYsM,CAAA3P,MAAZ,EAA4B2P,CAAA2oB,KAA5B,CAFsC,CAA1C,CAKA,OAAyB,EAAlB,GAAAh1B,CAAA1E,OAAA,CAAsB,IAAtB,CAA6B0E,CAPmB,CASzD,MAAOd,EAAAxC,MAVe,CAYxBwC,CAAAxC,MAAA,CAAgBA,CAbY,CArFxB,CAqGNkG,KAAMA,QAAQ,CAAC1D,CAAD,CAAUxC,CAAV,CAAiB,CAC7B,GAAImB,CAAA,CAAYnB,CAAZ,CAAJ,CACE,MAAOwC,EAAA0W,UAETe;EAAA,CAAazX,CAAb,CAAsB,CAAA,CAAtB,CACAA,EAAA0W,UAAA,CAAoBlZ,CALS,CArGzB,CA6GN8F,MAAO2W,EA7GD,CAAR,CA8GG,QAAQ,CAAC3X,CAAD,CAAK6C,CAAL,CAAW,CAIpB2D,CAAA2W,UAAA,CAAiBta,CAAjB,CAAA,CAAyB,QAAQ,CAACqnC,CAAD,CAAOC,CAAP,CAAa,CAAA,IACxCpvC,CADwC,CACrCT,CADqC,CAExCgzD,EAAY,IAAAxzD,OAKhB,IAAIkG,CAAJ,GAAW2X,EAAX,GACoB,CAAd,EAAC3X,CAAAlG,OAAD,EAAoBkG,CAApB,GAA2B0W,EAA3B,EAA6C1W,CAA7C,GAAoDoX,EAApD,CAAyE8yB,CAAzE,CAAgFC,CADtF,IACgG1wC,CADhG,CAC4G,CAC1G,GAAI8C,CAAA,CAAS2tC,CAAT,CAAJ,CAAoB,CAGlB,IAAKnvC,CAAL,CAAS,CAAT,CAAYA,CAAZ,CAAgBuyD,CAAhB,CAA2BvyD,CAAA,EAA3B,CACE,GAAIiF,CAAJ,GAAWsW,EAAX,CAEEtW,CAAA,CAAG,IAAA,CAAKjF,CAAL,CAAH,CAAYmvC,CAAZ,CAFF,KAIE,KAAK5vC,CAAL,GAAY4vC,EAAZ,CACElqC,CAAA,CAAG,IAAA,CAAKjF,CAAL,CAAH,CAAYT,CAAZ,CAAiB4vC,CAAA,CAAK5vC,CAAL,CAAjB,CAKN,OAAO,KAdW,CAkBdY,CAAAA,CAAQ8E,CAAAmtD,IAERtxD,EAAAA,CAAMX,CAAD,GAAWzB,CAAX,CAAwBi4B,IAAAkuB,IAAA,CAAS0N,CAAT,CAAoB,CAApB,CAAxB,CAAiDA,CAC1D,KAAS1xD,CAAT,CAAa,CAAb,CAAgBA,CAAhB,CAAoBC,CAApB,CAAwBD,CAAA,EAAxB,CAA6B,CAC3B,IAAIwsB,EAAYpoB,CAAA,CAAG,IAAA,CAAKpE,CAAL,CAAH,CAAYsuC,CAAZ,CAAkBC,CAAlB,CAChBjvC,EAAA,CAAQA,CAAA,CAAQA,CAAR,CAAgBktB,CAAhB,CAA4BA,CAFT,CAI7B,MAAOltB,EA1BiG,CA8B1G,IAAKH,CAAL,CAAS,CAAT,CAAYA,CAAZ,CAAgBuyD,CAAhB,CAA2BvyD,CAAA,EAA3B,CACEiF,CAAA,CAAG,IAAA,CAAKjF,CAAL,CAAH,CAAYmvC,CAAZ,CAAkBC,CAAlB,CAGF,OAAO,KA1CmC,CAJ1B,CA9GtB,CAuNAhwC,EAAA,CAAQ,CACNwyD,WAAYt3C,EADN,CAGN3P,GAAI6nD,QAASA,EAAQ,CAAC7vD,CAAD,CAAUgY,CAAV,CAAgB1V,CAAhB,CAAoB2V,CAApB,CAAiC,CACpD,GAAIrZ,CAAA,CAAUqZ,CAAV,CAAJ,CAA4B,KAAMd,GAAA,CAAa,QAAb,CAAN,CAG5B,GAAKvB,EAAA,CAAkB5V,CAAlB,CAAL,CAAA,CAIA,IAAIkY,EAAeC,EAAA,CAAmBnY,CAAnB,CAA4B,CAAA,CAA5B,CACfwI,EAAAA,CAAS0P,CAAA1P,OACb,KAAI4P,EAASF,CAAAE,OAERA,EAAL,GACEA,CADF;AACWF,CAAAE,OADX,CACiC6C,EAAA,CAAmBjb,CAAnB,CAA4BwI,CAA5B,CADjC,CAQA,KAHIsnD,IAAAA,EAA6B,CAArB,EAAA93C,CAAA3X,QAAA,CAAa,GAAb,CAAA,CAAyB2X,CAAAlY,MAAA,CAAW,GAAX,CAAzB,CAA2C,CAACkY,CAAD,CAAnD83C,CACAzyD,EAAIyyD,CAAA1zD,OAER,CAAOiB,CAAA,EAAP,CAAA,CAAY,CACV2a,CAAA,CAAO83C,CAAA,CAAMzyD,CAAN,CACP,KAAIke,EAAW/S,CAAA,CAAOwP,CAAP,CAEVuD,EAAL,GACE/S,CAAA,CAAOwP,CAAP,CAqBA,CArBe,EAqBf,CAnBa,YAAb,GAAIA,CAAJ,EAAsC,YAAtC,GAA6BA,CAA7B,CAKE63C,CAAA,CAAS7vD,CAAT,CAAkBmuD,EAAA,CAAgBn2C,CAAhB,CAAlB,CAAyC,QAAQ,CAACmD,CAAD,CAAQ,CACvD,IAAmB40C,EAAU50C,CAAA60C,cAGxBD,EAAL,GAAiBA,CAAjB,GAHa9kB,IAGb,EAHaA,IAG2BglB,SAAA,CAAgBF,CAAhB,CAAxC,GACE33C,CAAA,CAAO+C,CAAP,CAAcnD,CAAd,CALqD,CAAzD,CALF,CAee,UAff,GAeMA,CAfN,EAgBuBhY,CAlsBzB8gC,iBAAA,CAksBkC9oB,CAlsBlC,CAksBwCI,CAlsBxC,CAAmC,CAAA,CAAnC,CAqsBE,CAAAmD,CAAA,CAAW/S,CAAA,CAAOwP,CAAP,CAtBb,CAwBAuD,EAAA1a,KAAA,CAAcyB,CAAd,CA5BU,CAhBZ,CAJoD,CAHhD,CAuDN4tD,IAAKn4C,EAvDC,CAyDNo4C,IAAKA,QAAQ,CAACnwD,CAAD,CAAUgY,CAAV,CAAgB1V,CAAhB,CAAoB,CAC/BtC,CAAA,CAAUoD,CAAA,CAAOpD,CAAP,CAKVA,EAAAgI,GAAA,CAAWgQ,CAAX,CAAiBo4C,QAASA,EAAI,EAAG,CAC/BpwD,CAAAkwD,IAAA,CAAYl4C,CAAZ,CAAkB1V,CAAlB,CACAtC,EAAAkwD,IAAA,CAAYl4C,CAAZ,CAAkBo4C,CAAlB,CAF+B,CAAjC,CAIApwD,EAAAgI,GAAA,CAAWgQ,CAAX,CAAiB1V,CAAjB,CAV+B,CAzD3B,CAsEN8wB,YAAaA,QAAQ,CAACpzB,CAAD,CAAUqwD,CAAV,CAAuB,CAAA,IACtCjwD,CADsC,CAC/Bia,EAASra,CAAA8Z,WACpBrC,GAAA,CAAazX,CAAb,CACAvD,EAAA,CAAQ,IAAIqM,CAAJ,CAAWunD,CAAX,CAAR,CAAiC,QAAQ,CAAC9wD,CAAD,CAAO,CAC1Ca,CAAJ,CACEia,CAAAi2C,aAAA,CAAoB/wD,CAApB,CAA0Ba,CAAA2J,YAA1B,CADF,CAGEsQ,CAAAqd,aAAA,CAAoBn4B,CAApB;AAA0BS,CAA1B,CAEFI,EAAA,CAAQb,CANsC,CAAhD,CAH0C,CAtEtC,CAmFNutC,SAAUA,QAAQ,CAAC9sC,CAAD,CAAU,CAC1B,IAAI8sC,EAAW,EACfrwC,EAAA,CAAQuD,CAAA6W,WAAR,CAA4B,QAAQ,CAAC7W,CAAD,CAAU,CACxCA,CAAA3D,SAAJ,GAAyBC,EAAzB,EACEwwC,CAAAjsC,KAAA,CAAcb,CAAd,CAF0C,CAA9C,CAIA,OAAO8sC,EANmB,CAnFtB,CA4FNxZ,SAAUA,QAAQ,CAACtzB,CAAD,CAAU,CAC1B,MAAOA,EAAAuwD,gBAAP,EAAkCvwD,CAAA6W,WAAlC,EAAwD,EAD9B,CA5FtB,CAgGNpT,OAAQA,QAAQ,CAACzD,CAAD,CAAUT,CAAV,CAAgB,CAC9B,IAAIlD,EAAW2D,CAAA3D,SACf,IAAIA,CAAJ,GAAiBC,EAAjB,EA96C8Byd,EA86C9B,GAAsC1d,CAAtC,CAAA,CAEAkD,CAAA,CAAO,IAAIuJ,CAAJ,CAAWvJ,CAAX,CAEP,KAASlC,IAAAA,EAAI,CAAJA,CAAOW,EAAKuB,CAAAnD,OAArB,CAAkCiB,CAAlC,CAAsCW,CAAtC,CAA0CX,CAAA,EAA1C,CAEE2C,CAAAmW,YAAA,CADY5W,CAAA82C,CAAKh5C,CAALg5C,CACZ,CANF,CAF8B,CAhG1B,CA4GNma,QAASA,QAAQ,CAACxwD,CAAD,CAAUT,CAAV,CAAgB,CAC/B,GAAIS,CAAA3D,SAAJ,GAAyBC,EAAzB,CAA4C,CAC1C,IAAI8D,EAAQJ,CAAA8W,WACZra,EAAA,CAAQ,IAAIqM,CAAJ,CAAWvJ,CAAX,CAAR,CAA0B,QAAQ,CAAC82C,CAAD,CAAQ,CACxCr2C,CAAAswD,aAAA,CAAqBja,CAArB,CAA4Bj2C,CAA5B,CADwC,CAA1C,CAF0C,CADb,CA5G3B,CAqHNmW,KAAMA,QAAQ,CAACvW,CAAD,CAAUywD,CAAV,CAAoB,CAChCA,CAAA,CAAWrtD,CAAA,CAAOqtD,CAAP,CAAA/Z,GAAA,CAAoB,CAApB,CAAArzC,MAAA,EAAA,CAA+B,CAA/B,CACX,KAAIgX,EAASra,CAAA8Z,WACTO,EAAJ,EACEA,CAAAqd,aAAA,CAAoB+4B,CAApB,CAA8BzwD,CAA9B,CAEFywD,EAAAt6C,YAAA,CAAqBnW,CAArB,CANgC,CArH5B;AA8HN0nB,OAAQvN,EA9HF,CAgINu2C,OAAQA,QAAQ,CAAC1wD,CAAD,CAAU,CACxBma,EAAA,CAAana,CAAb,CAAsB,CAAA,CAAtB,CADwB,CAhIpB,CAoIN2wD,MAAOA,QAAQ,CAAC3wD,CAAD,CAAU4wD,CAAV,CAAsB,CAAA,IAC/BxwD,EAAQJ,CADuB,CACdqa,EAASra,CAAA8Z,WAC9B82C,EAAA,CAAa,IAAI9nD,CAAJ,CAAW8nD,CAAX,CAEb,KAJmC,IAI1BvzD,EAAI,CAJsB,CAInBW,EAAK4yD,CAAAx0D,OAArB,CAAwCiB,CAAxC,CAA4CW,CAA5C,CAAgDX,CAAA,EAAhD,CAAqD,CACnD,IAAIkC,EAAOqxD,CAAA,CAAWvzD,CAAX,CACXgd,EAAAi2C,aAAA,CAAoB/wD,CAApB,CAA0Ba,CAAA2J,YAA1B,CACA3J,EAAA,CAAQb,CAH2C,CAJlB,CApI/B,CA+IN6c,SAAU9C,EA/IJ,CAgJN+C,YAAanD,EAhJP,CAkJN23C,YAAaA,QAAQ,CAAC7wD,CAAD,CAAUiZ,CAAV,CAAoB63C,CAApB,CAA+B,CAC9C73C,CAAJ,EACExc,CAAA,CAAQwc,CAAAnZ,MAAA,CAAe,GAAf,CAAR,CAA6B,QAAQ,CAACsqB,CAAD,CAAY,CAC/C,IAAI2mC,EAAiBD,CACjBnyD,EAAA,CAAYoyD,CAAZ,CAAJ,GACEA,CADF,CACmB,CAAC/3C,EAAA,CAAehZ,CAAf,CAAwBoqB,CAAxB,CADpB,CAGA,EAAC2mC,CAAA,CAAiBz3C,EAAjB,CAAkCJ,EAAnC,EAAsDlZ,CAAtD,CAA+DoqB,CAA/D,CAL+C,CAAjD,CAFgD,CAlJ9C,CA8JN/P,OAAQA,QAAQ,CAACra,CAAD,CAAU,CAExB,MAAO,CADHqa,CACG,CADMra,CAAA8Z,WACN,GA5+CuBC,EA4+CvB,GAAUM,CAAAhe,SAAV,CAA4Dge,CAA5D,CAAqE,IAFpD,CA9JpB,CAmKN4+B,KAAMA,QAAQ,CAACj5C,CAAD,CAAU,CACtB,MAAOA,EAAAgxD,mBADe,CAnKlB,CAuKNrxD,KAAMA,QAAQ,CAACK,CAAD,CAAUiZ,CAAV,CAAoB,CAChC,MAAIjZ,EAAAixD,qBAAJ,CACSjxD,CAAAixD,qBAAA,CAA6Bh4C,CAA7B,CADT,CAGS,EAJuB,CAvK5B,CA+KN5V,MAAOkU,EA/KD;AAiLN1O,eAAgBA,QAAQ,CAAC7I,CAAD,CAAUmb,CAAV,CAAiB+1C,CAAjB,CAAkC,CAAA,IAEpDC,CAFoD,CAE1BC,CAF0B,CAGpDjY,EAAYh+B,CAAAnD,KAAZmhC,EAA0Bh+B,CAH0B,CAIpDjD,EAAeC,EAAA,CAAmBnY,CAAnB,CAInB,IAFIub,CAEJ,EAHI/S,CAGJ,CAHa0P,CAGb,EAH6BA,CAAA1P,OAG7B,GAFyBA,CAAA,CAAO2wC,CAAP,CAEzB,CAEEgY,CAmBA,CAnBa,CACXhmB,eAAgBA,QAAQ,EAAG,CAAE,IAAA7vB,iBAAA,CAAwB,CAAA,CAA1B,CADhB,CAEXF,mBAAoBA,QAAQ,EAAG,CAAE,MAAiC,CAAA,CAAjC,GAAO,IAAAE,iBAAT,CAFpB,CAGXK,yBAA0BA,QAAQ,EAAG,CAAE,IAAAF,4BAAA,CAAmC,CAAA,CAArC,CAH1B,CAIXK,8BAA+BA,QAAQ,EAAG,CAAE,MAA4C,CAAA,CAA5C,GAAO,IAAAL,4BAAT,CAJ/B,CAKXI,gBAAiBtd,CALN,CAMXyZ,KAAMmhC,CANK,CAOXlO,OAAQjrC,CAPG,CAmBb,CARImb,CAAAnD,KAQJ,GAPEm5C,CAOF,CAPerzD,CAAA,CAAOqzD,CAAP,CAAmBh2C,CAAnB,CAOf,EAHAk2C,CAGA,CAHe9vD,EAAA,CAAYga,CAAZ,CAGf,CAFA61C,CAEA,CAFcF,CAAA,CAAkB,CAACC,CAAD,CAAAnvD,OAAA,CAAoBkvD,CAApB,CAAlB,CAAyD,CAACC,CAAD,CAEvE,CAAA10D,CAAA,CAAQ40D,CAAR,CAAsB,QAAQ,CAAC/uD,CAAD,CAAK,CAC5B6uD,CAAAr1C,8BAAA,EAAL,EACExZ,CAAAG,MAAA,CAASzC,CAAT;AAAkBoxD,CAAlB,CAF+B,CAAnC,CA7BsD,CAjLpD,CAAR,CAqNG,QAAQ,CAAC9uD,CAAD,CAAK6C,CAAL,CAAW,CAIpB2D,CAAA2W,UAAA,CAAiBta,CAAjB,CAAA,CAAyB,QAAQ,CAACqnC,CAAD,CAAOC,CAAP,CAAa6kB,CAAb,CAAmB,CAGlD,IAFA,IAAI9zD,CAAJ,CAESH,EAAI,CAFb,CAEgBW,EAAK,IAAA5B,OAArB,CAAkCiB,CAAlC,CAAsCW,CAAtC,CAA0CX,CAAA,EAA1C,CACMsB,CAAA,CAAYnB,CAAZ,CAAJ,EACEA,CACA,CADQ8E,CAAA,CAAG,IAAA,CAAKjF,CAAL,CAAH,CAAYmvC,CAAZ,CAAkBC,CAAlB,CAAwB6kB,CAAxB,CACR,CAAI1yD,CAAA,CAAUpB,CAAV,CAAJ,GAEEA,CAFF,CAEU4F,CAAA,CAAO5F,CAAP,CAFV,CAFF,EAOE8Z,EAAA,CAAe9Z,CAAf,CAAsB8E,CAAA,CAAG,IAAA,CAAKjF,CAAL,CAAH,CAAYmvC,CAAZ,CAAkBC,CAAlB,CAAwB6kB,CAAxB,CAAtB,CAGJ,OAAO1yD,EAAA,CAAUpB,CAAV,CAAA,CAAmBA,CAAnB,CAA2B,IAdgB,CAkBpDsL,EAAA2W,UAAArd,KAAA,CAAwB0G,CAAA2W,UAAAzX,GACxBc,EAAA2W,UAAA8xC,OAAA,CAA0BzoD,CAAA2W,UAAAywC,IAvBN,CArNtB,CAgTAzzC,GAAAgD,UAAA,CAAoB,CAMlB7C,IAAKA,QAAQ,CAAChgB,CAAD,CAAMY,CAAN,CAAa,CACxB,IAAA,CAAK8e,EAAA,CAAQ1f,CAAR,CAAa,IAAAa,QAAb,CAAL,CAAA,CAAmCD,CADX,CANR,CAclB6J,IAAKA,QAAQ,CAACzK,CAAD,CAAM,CACjB,MAAO,KAAA,CAAK0f,EAAA,CAAQ1f,CAAR,CAAa,IAAAa,QAAb,CAAL,CADU,CAdD,CAsBlBiqB,OAAQA,QAAQ,CAAC9qB,CAAD,CAAM,CACpB,IAAIY,EAAQ,IAAA,CAAKZ,CAAL,CAAW0f,EAAA,CAAQ1f,CAAR,CAAa,IAAAa,QAAb,CAAX,CACZ,QAAO,IAAA,CAAKb,CAAL,CACP,OAAOY,EAHa,CAtBJ,CA2FpB,KAAIyf,GAAU,oCAAd,CACII,GAAe,GADnB,CAEIC,GAAS,sBAFb;AAGIN,GAAiB,kCAHrB,CAII5S,GAAkBpO,CAAA,CAAO,WAAP,CA6wBtBkK,GAAAsrD,WAAA,CAA4Bt0C,EA4Q5B,KAAIu0C,GAAiBz1D,CAAA,CAAO,UAAP,CAArB,CAeI+V,GAAmB,CAAC,UAAD,CAAa,QAAQ,CAAChM,CAAD,CAAW,CAGrD,IAAA2rD,YAAA,CAAmB,EAkCnB,KAAAt3B,SAAA,CAAgBC,QAAQ,CAACl1B,CAAD,CAAOgF,CAAP,CAAgB,CACtC,IAAIvN,EAAMuI,CAANvI,CAAa,YACjB,IAAIuI,CAAJ,EAA8B,GAA9B,EAAYA,CAAA1D,OAAA,CAAY,CAAZ,CAAZ,CAAmC,KAAMgwD,GAAA,CAAe,SAAf,CACoBtsD,CADpB,CAAN,CAEnC,IAAAusD,YAAA,CAAiBvsD,CAAAyf,OAAA,CAAY,CAAZ,CAAjB,CAAA,CAAmChoB,CACnCmJ,EAAAoE,QAAA,CAAiBvN,CAAjB,CAAsBuN,CAAtB,CALsC,CAsBxC,KAAAwnD,gBAAA,CAAuBC,QAAQ,CAACn3B,CAAD,CAAa,CACjB,CAAzB,GAAIx8B,SAAA7B,OAAJ,GACE,IAAAy1D,kBADF,CAC4Bp3B,CAAD,WAAuBx5B,OAAvB,CAAiCw5B,CAAjC,CAA8C,IADzE,CAGA,OAAO,KAAAo3B,kBAJmC,CAO5C,KAAA71C,KAAA,CAAY,CAAC,KAAD,CAAQ,iBAAR,CAA2B,YAA3B,CAAyC,QAAQ,CAAClI,CAAD,CAAMoB,CAAN,CAAuBxB,CAAvB,CAAmC,CAI9Fo+C,QAASA,EAAsB,CAACxvD,CAAD,CAAK,CAAA,IAC9ByvD,CAD8B;AACpBjsC,EAAQhS,CAAAgS,MAAA,EACtBA,EAAAiY,QAAAi0B,WAAA,CAA2BC,QAA6B,EAAG,CACzDF,CAAA,EAAYA,CAAA,EAD6C,CAI3Dr+C,EAAAm9B,aAAA,CAAwBqhB,QAA4B,EAAG,CACrDH,CAAA,CAAWzvD,CAAA,CAAG6vD,QAAgC,EAAG,CAC/CrsC,CAAAqZ,QAAA,EAD+C,CAAtC,CAD0C,CAAvD,CAMA,OAAOrZ,EAAAiY,QAZ2B,CAepCq0B,QAASA,EAAqB,CAACpyD,CAAD,CAAUmc,CAAV,CAAmB,CAAA,IAC3Ckc,EAAQ,EADmC,CAC/BE,EAAW,EADoB,CAG3C85B,EAAaroD,EAAA,EACjBvN,EAAA,CAAQqD,CAACE,CAAAN,KAAA,CAAa,OAAb,CAADI,EAA0B,EAA1BA,OAAA,CAAoC,KAApC,CAAR,CAAoD,QAAQ,CAACsqB,CAAD,CAAY,CACtEioC,CAAA,CAAWjoC,CAAX,CAAA,CAAwB,CAAA,CAD8C,CAAxE,CAIA3tB,EAAA,CAAQ0f,CAAR,CAAiB,QAAQ,CAACyf,CAAD,CAASxR,CAAT,CAAoB,CAC3C,IAAIlO,EAAWm2C,CAAA,CAAWjoC,CAAX,CAMA,EAAA,CAAf,GAAIwR,CAAJ,EAAwB1f,CAAxB,CACEqc,CAAA13B,KAAA,CAAcupB,CAAd,CADF,CAEsB,CAAA,CAFtB,GAEWwR,CAFX,EAE+B1f,CAF/B,EAGEmc,CAAAx3B,KAAA,CAAWupB,CAAX,CAVyC,CAA7C,CAcA,OAA0C,EAA1C,CAAQiO,CAAAj8B,OAAR,CAAuBm8B,CAAAn8B,OAAvB,EACE,CAACi8B,CAAAj8B,OAAA,CAAei8B,CAAf,CAAuB,IAAxB,CAA8BE,CAAAn8B,OAAA,CAAkBm8B,CAAlB,CAA6B,IAA3D,CAvB6C,CA0BjD+5B,QAASA,EAAuB,CAACvzC,CAAD,CAAQ5C,CAAR,CAAiBo2C,CAAjB,CAAqB,CACnD,IADmD,IAC1Cl1D,EAAE,CADwC,CACrCW,EAAKme,CAAA/f,OAAnB,CAAmCiB,CAAnC,CAAuCW,CAAvC,CAA2C,EAAEX,CAA7C,CAEE0hB,CAAA,CADgB5C,CAAAiO,CAAQ/sB,CAAR+sB,CAChB,CAAA,CAAmBmoC,CAH8B,CAOrDC,QAASA,EAAY,EAAG,CAEjBC,CAAL,GACEA,CACA,CADe3+C,CAAAgS,MAAA,EACf,CAAA5Q,CAAA,CAAgB,QAAQ,EAAG,CACzBu9C,CAAAtzB,QAAA,EACAszB,EAAA,CAAe,IAFU,CAA3B,CAFF,CAOA,OAAOA,EAAA10B,QATe,CAYxB20B,QAASA,EAAW,CAAC1yD,CAAD;AAAUumB,CAAV,CAAmB,CACrC,GAAI3f,EAAA/H,SAAA,CAAiB0nB,CAAjB,CAAJ,CAA+B,CAC7B,IAAIosC,EAAS70D,CAAA,CAAOyoB,CAAAqsC,KAAP,EAAuB,EAAvB,CAA2BrsC,CAAAssC,GAA3B,EAAyC,EAAzC,CACb7yD,EAAAmvD,IAAA,CAAYwD,CAAZ,CAF6B,CADM,CA9DvC,IAAIF,CAsFJ,OAAO,CACLK,QAASA,QAAQ,CAAC9yD,CAAD,CAAU4yD,CAAV,CAAgBC,CAAhB,CAAoB,CACnCH,CAAA,CAAY1yD,CAAZ,CAAqB,CAAE4yD,KAAMA,CAAR,CAAcC,GAAIA,CAAlB,CAArB,CACA,OAAOL,EAAA,EAF4B,CADhC,CAsBLO,MAAOA,QAAQ,CAAC/yD,CAAD,CAAUqa,CAAV,CAAkBs2C,CAAlB,CAAyBpqC,CAAzB,CAAkC,CAC/CmsC,CAAA,CAAY1yD,CAAZ,CAAqBumB,CAArB,CACAoqC,EAAA,CAAQA,CAAAA,MAAA,CAAY3wD,CAAZ,CAAR,CACQqa,CAAAm2C,QAAA,CAAexwD,CAAf,CACR,OAAOwyD,EAAA,EAJwC,CAtB5C,CAwCLQ,MAAOA,QAAQ,CAAChzD,CAAD,CAAUumB,CAAV,CAAmB,CAChCvmB,CAAA0nB,OAAA,EACA,OAAO8qC,EAAA,EAFyB,CAxC7B,CA+DLS,KAAMA,QAAQ,CAACjzD,CAAD,CAAUqa,CAAV,CAAkBs2C,CAAlB,CAAyBpqC,CAAzB,CAAkC,CAG9C,MAAO,KAAAwsC,MAAA,CAAW/yD,CAAX,CAAoBqa,CAApB,CAA4Bs2C,CAA5B,CAAmCpqC,CAAnC,CAHuC,CA/D3C,CAkFLnK,SAAUA,QAAQ,CAACpc,CAAD,CAAUoqB,CAAV,CAAqB7D,CAArB,CAA8B,CAC9C,MAAO,KAAA2hC,SAAA,CAAcloD,CAAd,CAAuBoqB,CAAvB,CAAkC,EAAlC,CAAsC7D,CAAtC,CADuC,CAlF3C,CAsFL2sC,sBAAuBA,QAAQ,CAAClzD,CAAD,CAAUoqB,CAAV,CAAqB7D,CAArB,CAA8B,CAC3DvmB,CAAA,CAAUoD,CAAA,CAAOpD,CAAP,CACVoqB,EAAA,CAAa7tB,CAAA,CAAS6tB,CAAT,CAAD,CAEMA,CAFN,CACO5tB,CAAA,CAAQ4tB,CAAR,CAAA,CAAqBA,CAAA9lB,KAAA,CAAe,GAAf,CAArB,CAA2C,EAE9D7H,EAAA,CAAQuD,CAAR,CAAiB,QAAQ,CAACA,CAAD,CAAU,CACjCsZ,EAAA,CAAetZ,CAAf,CAAwBoqB,CAAxB,CADiC,CAAnC,CAGAsoC,EAAA,CAAY1yD,CAAZ,CAAqBumB,CAArB,CACA,OAAOisC,EAAA,EAToD,CAtFxD,CA+GLn2C,YAAaA,QAAQ,CAACrc,CAAD,CAAUoqB,CAAV,CAAqB7D,CAArB,CAA8B,CACjD,MAAO,KAAA2hC,SAAA,CAAcloD,CAAd;AAAuB,EAAvB,CAA2BoqB,CAA3B,CAAsC7D,CAAtC,CAD0C,CA/G9C,CAmHL4sC,yBAA0BA,QAAQ,CAACnzD,CAAD,CAAUoqB,CAAV,CAAqB7D,CAArB,CAA8B,CAC9DvmB,CAAA,CAAUoD,CAAA,CAAOpD,CAAP,CACVoqB,EAAA,CAAa7tB,CAAA,CAAS6tB,CAAT,CAAD,CAEMA,CAFN,CACO5tB,CAAA,CAAQ4tB,CAAR,CAAA,CAAqBA,CAAA9lB,KAAA,CAAe,GAAf,CAArB,CAA2C,EAE9D7H,EAAA,CAAQuD,CAAR,CAAiB,QAAQ,CAACA,CAAD,CAAU,CACjCkZ,EAAA,CAAkBlZ,CAAlB,CAA2BoqB,CAA3B,CADiC,CAAnC,CAGAsoC,EAAA,CAAY1yD,CAAZ,CAAqBumB,CAArB,CACA,OAAOisC,EAAA,EATuD,CAnH3D,CA6ILtK,SAAUA,QAAQ,CAACloD,CAAD,CAAUozD,CAAV,CAAe1rC,CAAf,CAAuBnB,CAAvB,CAAgC,CAChD,IAAIlkB,EAAO,IAAX,CAEIgxD,EAAe,CAAA,CACnBrzD,EAAA,CAAUoD,CAAA,CAAOpD,CAAP,CAEV,KAAI+e,EAAQ/e,CAAAwG,KAAA,CAJM8sD,kBAIN,CACPv0C,EAAL,CAMWwH,CANX,EAMsBxH,CAAAwH,QANtB,GAOExH,CAAAwH,QAPF,CAOkB3f,EAAA9I,OAAA,CAAeihB,CAAAwH,QAAf,EAAgC,EAAhC,CAAoCA,CAApC,CAPlB,GACExH,CAIA,CAJQ,CACN5C,QAAS,EADH,CAENoK,QAASA,CAFH,CAIR,CAAA8sC,CAAA,CAAe,CAAA,CALjB,CAUIl3C,EAAAA,CAAU4C,CAAA5C,QAEdi3C,EAAA,CAAM52D,CAAA,CAAQ42D,CAAR,CAAA,CAAeA,CAAf,CAAqBA,CAAAtzD,MAAA,CAAU,GAAV,CAC3B4nB,EAAA,CAASlrB,CAAA,CAAQkrB,CAAR,CAAA,CAAkBA,CAAlB,CAA2BA,CAAA5nB,MAAA,CAAa,GAAb,CACpCwyD,EAAA,CAAwBn2C,CAAxB,CAAiCi3C,CAAjC,CAAsC,CAAA,CAAtC,CACAd,EAAA,CAAwBn2C,CAAxB,CAAiCuL,CAAjC,CAAyC,CAAA,CAAzC,CAEI2rC,EAAJ,GACEt0C,CAAAgf,QAgBA,CAhBgB+zB,CAAA,CAAuB,QAAQ,CAACnzB,CAAD,CAAO,CACpD,IAAI5f,EAAQ/e,CAAAwG,KAAA,CAxBE8sD,kBAwBF,CACZtzD,EAAAivD,WAAA,CAzBcqE,kBAyBd,CAKA,IAAIv0C,CAAJ,CAAW,CACT,IAAI5C,EAAUi2C,CAAA,CAAsBpyD,CAAtB,CAA+B+e,CAAA5C,QAA/B,CACVA,EAAJ;AACE9Z,CAAAkxD,sBAAA,CAA2BvzD,CAA3B,CAAoCmc,CAAA,CAAQ,CAAR,CAApC,CAAgDA,CAAA,CAAQ,CAAR,CAAhD,CAA4D4C,CAAAwH,QAA5D,CAHO,CAOXoY,CAAA,EAdoD,CAAtC,CAgBhB,CAAA3+B,CAAAwG,KAAA,CAvCgB8sD,kBAuChB,CAA0Bv0C,CAA1B,CAjBF,CAoBA,OAAOA,EAAAgf,QA5CyC,CA7I7C,CA4LLw1B,sBAAuBA,QAAQ,CAACvzD,CAAD,CAAUozD,CAAV,CAAe1rC,CAAf,CAAuBnB,CAAvB,CAAgC,CAC7D6sC,CAAA,EAAO,IAAAF,sBAAA,CAA2BlzD,CAA3B,CAAoCozD,CAApC,CACP1rC,EAAA,EAAU,IAAAyrC,yBAAA,CAA8BnzD,CAA9B,CAAuC0nB,CAAvC,CACVgrC,EAAA,CAAY1yD,CAAZ,CAAqBumB,CAArB,CACA,OAAOisC,EAAA,EAJsD,CA5L1D,CAmMLvoC,QAAS1rB,CAnMJ,CAoML2nB,OAAQ3nB,CApMH,CAxFuF,CAApF,CAlEyC,CAAhC,CAfvB,CA64DIgqB,GAAiBvsB,CAAA,CAAO,UAAP,CAQrBqQ,GAAA8Q,QAAA,CAA2B,CAAC,UAAD,CAAa,uBAAb,CAixD3B,KAAIgR,GAAgB,uBAApB,CAwUIqlC,GAAmB,kBAxUvB,CAyUIr3B,GAAgC,CAAC,eAAgBq3B,EAAhB,CAAmC,gBAApC,CAzUpC,CA0UIn4B,GAAa,eA1UjB,CA2UIC,GAAY,CACd,IAAK,IADS,CAEd,IAAK,IAFS,CA3UhB,CA+UIJ,GAAyB,cA/U7B,CAynDIyH,GAAqB3mC,CAAA,CAAO,cAAP,CAznDzB,CAqtEIy3D,GAAa,iCArtEjB;AAstEIzsB,GAAgB,CAAC,KAAQ,EAAT,CAAa,MAAS,GAAtB,CAA2B,IAAO,EAAlC,CAttEpB,CAutEIuB,GAAkBvsC,CAAA,CAAO,WAAP,CAvtEtB,CAihFI03D,GAAoB,CAMtBxrB,QAAS,CAAA,CANa,CAYtBwD,UAAW,CAAA,CAZW,CAiCtBlB,OAAQf,EAAA,CAAe,UAAf,CAjCc,CAwDtBrmB,IAAKA,QAAQ,CAACA,CAAD,CAAM,CACjB,GAAIzkB,CAAA,CAAYykB,CAAZ,CAAJ,CACE,MAAO,KAAAslB,MAET,KAAIxnC,EAAQuyD,EAAAn9C,KAAA,CAAgB8M,CAAhB,CACZ,EAAIliB,CAAA,CAAM,CAAN,CAAJ,EAAwB,EAAxB,GAAgBkiB,CAAhB,GAA4B,IAAA7Z,KAAA,CAAUzF,kBAAA,CAAmB5C,CAAA,CAAM,CAAN,CAAnB,CAAV,CAC5B,EAAIA,CAAA,CAAM,CAAN,CAAJ,EAAgBA,CAAA,CAAM,CAAN,CAAhB,EAAoC,EAApC,GAA4BkiB,CAA5B,GAAwC,IAAAmkB,OAAA,CAAYrmC,CAAA,CAAM,CAAN,CAAZ,EAAwB,EAAxB,CACxC,KAAAqgB,KAAA,CAAUrgB,CAAA,CAAM,CAAN,CAAV,EAAsB,EAAtB,CAEA,OAAO,KATU,CAxDG,CAsFtBwgC,SAAU+H,EAAA,CAAe,YAAf,CAtFY,CA0GtBzvB,KAAMyvB,EAAA,CAAe,QAAf,CA1GgB,CA8HtB1C,KAAM0C,EAAA,CAAe,QAAf,CA9HgB,CAwJtBlgC,KAAMogC,EAAA,CAAqB,QAArB,CAA+B,QAAQ,CAACpgC,CAAD,CAAO,CAClDA,CAAA,CAAgB,IAAT,GAAAA,CAAA,CAAgBA,CAAAvK,SAAA,EAAhB,CAAkC,EACzC,OAAyB,GAAlB,EAAAuK,CAAA9H,OAAA,CAAY,CAAZ,CAAA,CAAwB8H,CAAxB,CAA+B,GAA/B,CAAqCA,CAFM,CAA9C,CAxJgB,CA0MtBg+B,OAAQA,QAAQ,CAACA,CAAD,CAASosB,CAAT,CAAqB,CACnC,OAAQ11D,SAAA7B,OAAR,EACE,KAAK,CAAL,CACE,MAAO,KAAAkrC,SACT;KAAK,CAAL,CACE,GAAI/qC,CAAA,CAASgrC,CAAT,CAAJ,EAAwBzoC,CAAA,CAASyoC,CAAT,CAAxB,CACEA,CACA,CADSA,CAAAvoC,SAAA,EACT,CAAA,IAAAsoC,SAAA,CAAgBvjC,EAAA,CAAcwjC,CAAd,CAFlB,KAGO,IAAI1oC,CAAA,CAAS0oC,CAAT,CAAJ,CACLA,CAMA,CANShnC,EAAA,CAAKgnC,CAAL,CAAa,EAAb,CAMT,CAJA9qC,CAAA,CAAQ8qC,CAAR,CAAgB,QAAQ,CAAC/pC,CAAD,CAAQZ,CAAR,CAAa,CACtB,IAAb,EAAIY,CAAJ,EAAmB,OAAO+pC,CAAA,CAAO3qC,CAAP,CADS,CAArC,CAIA,CAAA,IAAA0qC,SAAA,CAAgBC,CAPX,KASL,MAAMgB,GAAA,CAAgB,UAAhB,CAAN,CAGF,KACF,SACM5pC,CAAA,CAAYg1D,CAAZ,CAAJ,EAA8C,IAA9C,GAA+BA,CAA/B,CACE,OAAO,IAAArsB,SAAA,CAAcC,CAAd,CADT,CAGE,IAAAD,SAAA,CAAcC,CAAd,CAHF,CAG0BosB,CAxB9B,CA4BA,IAAAnrB,UAAA,EACA,OAAO,KA9B4B,CA1Mf,CAgQtBjnB,KAAMooB,EAAA,CAAqB,QAArB,CAA+B,QAAQ,CAACpoB,CAAD,CAAO,CAClD,MAAgB,KAAT,GAAAA,CAAA,CAAgBA,CAAAviB,SAAA,EAAhB,CAAkC,EADS,CAA9C,CAhQgB,CA4QtB4E,QAASA,QAAQ,EAAG,CAClB,IAAA8nC,UAAA,CAAiB,CAAA,CACjB,OAAO,KAFW,CA5QE,CAkRxBjvC,EAAA,CAAQ,CAAC+sC,EAAD,CAA6BN,EAA7B,CAAkDnB,EAAlD,CAAR,CAA6E,QAAQ,CAAC6rB,CAAD,CAAW,CAC9FA,CAAAn0C,UAAA,CAAqBtiB,MAAAkE,OAAA,CAAcqyD,EAAd,CAqBrBE,EAAAn0C,UAAAwD,MAAA,CAA2B4wC,QAAQ,CAAC5wC,CAAD,CAAQ,CACzC,GAAK7mB,CAAA6B,SAAA7B,OAAL,CACE,MAAO,KAAAiuC,QAET;GAAIupB,CAAJ,GAAiB7rB,EAAjB,EAAsCG,CAAA,IAAAA,QAAtC,CACE,KAAMK,GAAA,CAAgB,SAAhB,CAAN,CAMF,IAAA8B,QAAA,CAAe1rC,CAAA,CAAYskB,CAAZ,CAAA,CAAqB,IAArB,CAA4BA,CAE3C,OAAO,KAbkC,CAtBmD,CAAhG,CAuhBA,KAAI2pB,GAAe5wC,CAAA,CAAO,QAAP,CAAnB,CAgEI83D,GAAO7kB,QAAAxvB,UAAA1iB,KAhEX,CAiEIg3D,GAAQ9kB,QAAAxvB,UAAAhd,MAjEZ,CAkEIuxD,GAAO/kB,QAAAxvB,UAAArd,KAlEX,CAmFI6xD,GAAYjqD,EAAA,EAChBvN,EAAA,CAAQ,CACN,OAAQy3D,QAAQ,EAAG,CAAE,MAAO,KAAT,CADb,CAEN,OAAQC,QAAQ,EAAG,CAAE,MAAO,CAAA,CAAT,CAFb,CAGN,QAASC,QAAQ,EAAG,CAAE,MAAO,CAAA,CAAT,CAHd,CAIN,UAAar4D,QAAQ,EAAG,EAJlB,CAAR,CAKG,QAAQ,CAACs4D,CAAD,CAAiBlvD,CAAjB,CAAuB,CAChCkvD,CAAAhpD,SAAA,CAA0BgpD,CAAA3iC,QAA1B,CAAmD2iC,CAAAnlB,aAAnD,CAAiF,CAAA,CACjF+kB,GAAA,CAAU9uD,CAAV,CAAA,CAAkBkvD,CAFc,CALlC,CAWAJ,GAAA,CAAU,MAAV,CAAA,CAAoB,QAAQ,CAAC5xD,CAAD,CAAO,CAAE,MAAOA,EAAT,CACnC4xD,GAAA,CAAU,MAAV,CAAA/kB,aAAA,CAAiC,CAAA,CAIjC,KAAIolB,GAAYx2D,CAAA,CAAOkM,EAAA,EAAP,CAAoB,CAChC,IAAIuqD,QAAQ,CAAClyD,CAAD,CAAOid,CAAP,CAAehT,CAAf,CAAkBqlB,CAAlB,CAAqB,CAC/BrlB,CAAA,CAAEA,CAAA,CAAEjK,CAAF,CAAQid,CAAR,CAAiBqS,EAAA,CAAEA,CAAA,CAAEtvB,CAAF,CAAQid,CAAR,CACrB,OAAI1gB,EAAA,CAAU0N,CAAV,CAAJ,CACM1N,CAAA,CAAU+yB,CAAV,CAAJ;AACSrlB,CADT,CACaqlB,CADb,CAGOrlB,CAJT,CAMO1N,CAAA,CAAU+yB,CAAV,CAAA,CAAeA,CAAf,CAAmB51B,CARK,CADD,CAUhC,IAAIy4D,QAAQ,CAACnyD,CAAD,CAAOid,CAAP,CAAehT,CAAf,CAAkBqlB,CAAlB,CAAqB,CAC3BrlB,CAAA,CAAEA,CAAA,CAAEjK,CAAF,CAAQid,CAAR,CAAiBqS,EAAA,CAAEA,CAAA,CAAEtvB,CAAF,CAAQid,CAAR,CACrB,QAAQ1gB,CAAA,CAAU0N,CAAV,CAAA,CAAeA,CAAf,CAAmB,CAA3B,GAAiC1N,CAAA,CAAU+yB,CAAV,CAAA,CAAeA,CAAf,CAAmB,CAApD,CAF2B,CAVD,CAchC,IAAI8iC,QAAQ,CAACpyD,CAAD,CAAOid,CAAP,CAAehT,CAAf,CAAkBqlB,CAAlB,CAAqB,CAAC,MAAOrlB,EAAA,CAAEjK,CAAF,CAAQid,CAAR,CAAP,CAAyBqS,CAAA,CAAEtvB,CAAF,CAAQid,CAAR,CAA1B,CAdD,CAehC,IAAIo1C,QAAQ,CAACryD,CAAD,CAAOid,CAAP,CAAehT,CAAf,CAAkBqlB,CAAlB,CAAqB,CAAC,MAAOrlB,EAAA,CAAEjK,CAAF,CAAQid,CAAR,CAAP,CAAyBqS,CAAA,CAAEtvB,CAAF,CAAQid,CAAR,CAA1B,CAfD,CAgBhC,IAAIq1C,QAAQ,CAACtyD,CAAD,CAAOid,CAAP,CAAehT,CAAf,CAAkBqlB,CAAlB,CAAqB,CAAC,MAAOrlB,EAAA,CAAEjK,CAAF,CAAQid,CAAR,CAAP,CAAyBqS,CAAA,CAAEtvB,CAAF,CAAQid,CAAR,CAA1B,CAhBD,CAiBhC,MAAMs1C,QAAQ,CAACvyD,CAAD,CAAOid,CAAP,CAAehT,CAAf,CAAkBqlB,CAAlB,CAAqB,CAAC,MAAOrlB,EAAA,CAAEjK,CAAF,CAAQid,CAAR,CAAP,GAA2BqS,CAAA,CAAEtvB,CAAF,CAAQid,CAAR,CAA5B,CAjBH,CAkBhC,MAAMu1C,QAAQ,CAACxyD,CAAD,CAAOid,CAAP,CAAehT,CAAf,CAAkBqlB,CAAlB,CAAqB,CAAC,MAAOrlB,EAAA,CAAEjK,CAAF,CAAQid,CAAR,CAAP,GAA2BqS,CAAA,CAAEtvB,CAAF,CAAQid,CAAR,CAA5B,CAlBH,CAmBhC,KAAKw1C,QAAQ,CAACzyD,CAAD,CAAOid,CAAP,CAAehT,CAAf,CAAkBqlB,CAAlB,CAAqB,CAAC,MAAOrlB,EAAA,CAAEjK,CAAF,CAAQid,CAAR,CAAP,EAA0BqS,CAAA,CAAEtvB,CAAF,CAAQid,CAAR,CAA3B,CAnBF,CAoBhC,KAAKy1C,QAAQ,CAAC1yD,CAAD,CAAOid,CAAP,CAAehT,CAAf,CAAkBqlB,CAAlB,CAAqB,CAAC,MAAOrlB,EAAA,CAAEjK,CAAF,CAAQid,CAAR,CAAP,EAA0BqS,CAAA,CAAEtvB,CAAF,CAAQid,CAAR,CAA3B,CApBF,CAqBhC,IAAI01C,QAAQ,CAAC3yD,CAAD,CAAOid,CAAP,CAAehT,CAAf,CAAkBqlB,CAAlB,CAAqB,CAAC,MAAOrlB,EAAA,CAAEjK,CAAF,CAAQid,CAAR,CAAP,CAAyBqS,CAAA,CAAEtvB,CAAF,CAAQid,CAAR,CAA1B,CArBD,CAsBhC,IAAI21C,QAAQ,CAAC5yD,CAAD,CAAOid,CAAP,CAAehT,CAAf,CAAkBqlB,CAAlB,CAAqB,CAAC,MAAOrlB,EAAA,CAAEjK,CAAF,CAAQid,CAAR,CAAP,CAAyBqS,CAAA,CAAEtvB,CAAF,CAAQid,CAAR,CAA1B,CAtBD,CAuBhC,KAAK41C,QAAQ,CAAC7yD,CAAD;AAAOid,CAAP,CAAehT,CAAf,CAAkBqlB,CAAlB,CAAqB,CAAC,MAAOrlB,EAAA,CAAEjK,CAAF,CAAQid,CAAR,CAAP,EAA0BqS,CAAA,CAAEtvB,CAAF,CAAQid,CAAR,CAA3B,CAvBF,CAwBhC,KAAK61C,QAAQ,CAAC9yD,CAAD,CAAOid,CAAP,CAAehT,CAAf,CAAkBqlB,CAAlB,CAAqB,CAAC,MAAOrlB,EAAA,CAAEjK,CAAF,CAAQid,CAAR,CAAP,EAA0BqS,CAAA,CAAEtvB,CAAF,CAAQid,CAAR,CAA3B,CAxBF,CAyBhC,KAAK81C,QAAQ,CAAC/yD,CAAD,CAAOid,CAAP,CAAehT,CAAf,CAAkBqlB,CAAlB,CAAqB,CAAC,MAAOrlB,EAAA,CAAEjK,CAAF,CAAQid,CAAR,CAAP,EAA0BqS,CAAA,CAAEtvB,CAAF,CAAQid,CAAR,CAA3B,CAzBF,CA0BhC,KAAK+1C,QAAQ,CAAChzD,CAAD,CAAOid,CAAP,CAAehT,CAAf,CAAkBqlB,CAAlB,CAAqB,CAAC,MAAOrlB,EAAA,CAAEjK,CAAF,CAAQid,CAAR,CAAP,EAA0BqS,CAAA,CAAEtvB,CAAF,CAAQid,CAAR,CAA3B,CA1BF,CA2BhC,IAAIg2C,QAAQ,CAACjzD,CAAD,CAAOid,CAAP,CAAehT,CAAf,CAAkB,CAAC,MAAO,CAACA,CAAA,CAAEjK,CAAF,CAAQid,CAAR,CAAT,CA3BE,CA8BhC,IAAI,CAAA,CA9B4B,CA+BhC,IAAI,CAAA,CA/B4B,CAApB,CAAhB,CAiCIi2C,GAAS,CAAC,EAAI,IAAL,CAAW,EAAI,IAAf,CAAqB,EAAI,IAAzB,CAA+B,EAAI,IAAnC,CAAyC,EAAI,IAA7C,CAAmD,IAAI,GAAvD,CAA4D,IAAI,GAAhE,CAjCb,CA0CIxjB,GAAQA,QAAQ,CAACxrB,CAAD,CAAU,CAC5B,IAAAA,QAAA,CAAeA,CADa,CAI9BwrB,GAAAtyB,UAAA,CAAkB,CAChBrW,YAAa2oC,EADG,CAGhByjB,IAAKA,QAAQ,CAAC1/B,CAAD,CAAO,CAClB,IAAAA,KAAA,CAAYA,CACZ,KAAA11B,MAAA,CAAa,CAGb,KAFA,IAAAq1D,OAEA,CAFc,EAEd,CAAO,IAAAr1D,MAAP,CAAoB,IAAA01B,KAAA15B,OAApB,CAAA,CAEE,GADI8lC,CACA,CADK,IAAApM,KAAAr0B,OAAA,CAAiB,IAAArB,MAAjB,CACL,CAAO,GAAP,GAAA8hC,CAAA,EAAqB,GAArB,GAAcA,CAAlB,CACE,IAAAwzB,WAAA,CAAgBxzB,CAAhB,CADF,KAEO,IAAI,IAAApjC,SAAA,CAAcojC,CAAd,CAAJ;AAAgC,GAAhC,GAAyBA,CAAzB,EAAuC,IAAApjC,SAAA,CAAc,IAAA62D,KAAA,EAAd,CAAvC,CACL,IAAAC,WAAA,EADK,KAEA,IAAI,IAAAC,QAAA,CAAa3zB,CAAb,CAAJ,CACL,IAAA4zB,UAAA,EADK,KAEA,IAAI,IAAAC,GAAA,CAAQ7zB,CAAR,CAAY,aAAZ,CAAJ,CACL,IAAAuzB,OAAA50D,KAAA,CAAiB,CAACT,MAAO,IAAAA,MAAR,CAAoB01B,KAAMoM,CAA1B,CAAjB,CACA,CAAA,IAAA9hC,MAAA,EAFK,KAGA,IAAI,IAAA41D,aAAA,CAAkB9zB,CAAlB,CAAJ,CACL,IAAA9hC,MAAA,EADK,KAEA,CACL,IAAI61D,EAAM/zB,CAAN+zB,CAAW,IAAAN,KAAA,EAAf,CACIO,EAAMD,CAANC,CAAY,IAAAP,KAAA,CAAU,CAAV,CADhB,CAGIQ,EAAM7B,EAAA,CAAU2B,CAAV,CAHV,CAIIG,EAAM9B,EAAA,CAAU4B,CAAV,CAFA5B,GAAA+B,CAAUn0B,CAAVm0B,CAGV,EAAWF,CAAX,EAAkBC,CAAlB,EACMp8B,CAEJ,CAFYo8B,CAAA,CAAMF,CAAN,CAAaC,CAAA,CAAMF,CAAN,CAAY/zB,CAErC,CADA,IAAAuzB,OAAA50D,KAAA,CAAiB,CAACT,MAAO,IAAAA,MAAR,CAAoB01B,KAAMkE,CAA1B,CAAiCs8B,SAAU,CAAA,CAA3C,CAAjB,CACA,CAAA,IAAAl2D,MAAA,EAAc45B,CAAA59B,OAHhB,EAKE,IAAAm6D,WAAA,CAAgB,4BAAhB,CAA8C,IAAAn2D,MAA9C,CAA0D,IAAAA,MAA1D,CAAuE,CAAvE,CAXG,CAeT,MAAO,KAAAq1D,OAjCW,CAHJ,CAuChBM,GAAIA,QAAQ,CAAC7zB,CAAD,CAAKs0B,CAAL,CAAY,CACtB,MAA8B,EAA9B;AAAOA,CAAAn2D,QAAA,CAAc6hC,CAAd,CADe,CAvCR,CA2ChByzB,KAAMA,QAAQ,CAACt4D,CAAD,CAAI,CACZ+oC,CAAAA,CAAM/oC,CAAN+oC,EAAW,CACf,OAAQ,KAAAhmC,MAAD,CAAcgmC,CAAd,CAAoB,IAAAtQ,KAAA15B,OAApB,CAAwC,IAAA05B,KAAAr0B,OAAA,CAAiB,IAAArB,MAAjB,CAA8BgmC,CAA9B,CAAxC,CAA6E,CAAA,CAFpE,CA3CF,CAgDhBtnC,SAAUA,QAAQ,CAACojC,CAAD,CAAK,CACrB,MAAQ,GAAR,EAAeA,CAAf,EAA2B,GAA3B,EAAqBA,CAArB,EAAiD,QAAjD,GAAmC,MAAOA,EADrB,CAhDP,CAoDhB8zB,aAAcA,QAAQ,CAAC9zB,CAAD,CAAK,CAEzB,MAAe,GAAf,GAAQA,CAAR,EAA6B,IAA7B,GAAsBA,CAAtB,EAA4C,IAA5C,GAAqCA,CAArC,EACe,IADf,GACQA,CADR,EAC8B,IAD9B,GACuBA,CADvB,EAC6C,QAD7C,GACsCA,CAHb,CApDX,CA0DhB2zB,QAASA,QAAQ,CAAC3zB,CAAD,CAAK,CACpB,MAAQ,GAAR,EAAeA,CAAf,EAA2B,GAA3B,EAAqBA,CAArB,EACQ,GADR,EACeA,CADf,EAC2B,GAD3B,EACqBA,CADrB,EAEQ,GAFR,GAEgBA,CAFhB,EAE6B,GAF7B,GAEsBA,CAHF,CA1DN,CAgEhBu0B,cAAeA,QAAQ,CAACv0B,CAAD,CAAK,CAC1B,MAAe,GAAf,GAAQA,CAAR,EAA6B,GAA7B,GAAsBA,CAAtB,EAAoC,IAAApjC,SAAA,CAAcojC,CAAd,CADV,CAhEZ,CAoEhBq0B,WAAYA,QAAQ,CAACl0C,CAAD,CAAQq0C,CAAR,CAAeC,CAAf,CAAoB,CACtCA,CAAA,CAAMA,CAAN,EAAa,IAAAv2D,MACTw2D,EAAAA,CAAUh4D,CAAA,CAAU83D,CAAV,CAAA,CACJ,IADI,CACGA,CADH,CACY,GADZ,CACkB,IAAAt2D,MADlB,CAC+B,IAD/B,CACsC,IAAA01B,KAAAjQ,UAAA,CAAoB6wC,CAApB;AAA2BC,CAA3B,CADtC,CACwE,GADxE,CAEJ,GAFI,CAEEA,CAChB,MAAM/pB,GAAA,CAAa,QAAb,CACFvqB,CADE,CACKu0C,CADL,CACa,IAAA9gC,KADb,CAAN,CALsC,CApExB,CA6EhB8/B,WAAYA,QAAQ,EAAG,CAGrB,IAFA,IAAItU,EAAS,EAAb,CACIoV,EAAQ,IAAAt2D,MACZ,CAAO,IAAAA,MAAP,CAAoB,IAAA01B,KAAA15B,OAApB,CAAA,CAAsC,CACpC,IAAI8lC,EAAKjiC,CAAA,CAAU,IAAA61B,KAAAr0B,OAAA,CAAiB,IAAArB,MAAjB,CAAV,CACT,IAAU,GAAV,EAAI8hC,CAAJ,EAAiB,IAAApjC,SAAA,CAAcojC,CAAd,CAAjB,CACEof,CAAA,EAAUpf,CADZ,KAEO,CACL,IAAI20B,EAAS,IAAAlB,KAAA,EACb,IAAU,GAAV,EAAIzzB,CAAJ,EAAiB,IAAAu0B,cAAA,CAAmBI,CAAnB,CAAjB,CACEvV,CAAA,EAAUpf,CADZ,KAEO,IAAI,IAAAu0B,cAAA,CAAmBv0B,CAAnB,CAAJ,EACH20B,CADG,EACO,IAAA/3D,SAAA,CAAc+3D,CAAd,CADP,EAEiC,GAFjC,EAEHvV,CAAA7/C,OAAA,CAAc6/C,CAAAllD,OAAd,CAA8B,CAA9B,CAFG,CAGLklD,CAAA,EAAUpf,CAHL,KAIA,IAAI,CAAA,IAAAu0B,cAAA,CAAmBv0B,CAAnB,CAAJ,EACD20B,CADC,EACU,IAAA/3D,SAAA,CAAc+3D,CAAd,CADV,EAEiC,GAFjC,EAEHvV,CAAA7/C,OAAA,CAAc6/C,CAAAllD,OAAd,CAA8B,CAA9B,CAFG,CAKL,KALK,KAGL,KAAAm6D,WAAA,CAAgB,kBAAhB,CAXG,CAgBP,IAAAn2D,MAAA,EApBoC,CAsBtC,IAAAq1D,OAAA50D,KAAA,CAAiB,CACfT,MAAOs2D,CADQ;AAEf5gC,KAAMwrB,CAFS,CAGfj2C,SAAU,CAAA,CAHK,CAIf7N,MAAO8pB,MAAA,CAAOg6B,CAAP,CAJQ,CAAjB,CAzBqB,CA7EP,CA8GhBwU,UAAWA,QAAQ,EAAG,CAEpB,IADA,IAAIY,EAAQ,IAAAt2D,MACZ,CAAO,IAAAA,MAAP,CAAoB,IAAA01B,KAAA15B,OAApB,CAAA,CAAsC,CACpC,IAAI8lC,EAAK,IAAApM,KAAAr0B,OAAA,CAAiB,IAAArB,MAAjB,CACT,IAAM,CAAA,IAAAy1D,QAAA,CAAa3zB,CAAb,CAAN,EAA0B,CAAA,IAAApjC,SAAA,CAAcojC,CAAd,CAA1B,CACE,KAEF,KAAA9hC,MAAA,EALoC,CAOtC,IAAAq1D,OAAA50D,KAAA,CAAiB,CACfT,MAAOs2D,CADQ,CAEf5gC,KAAM,IAAAA,KAAA3zB,MAAA,CAAgBu0D,CAAhB,CAAuB,IAAAt2D,MAAvB,CAFS,CAGf6wB,WAAY,CAAA,CAHG,CAAjB,CAToB,CA9GN,CA8HhBykC,WAAYA,QAAQ,CAACoB,CAAD,CAAQ,CAC1B,IAAIJ,EAAQ,IAAAt2D,MACZ,KAAAA,MAAA,EAIA,KAHA,IAAIqjD,EAAS,EAAb,CACIsT,EAAYD,CADhB,CAEI70B,EAAS,CAAA,CACb,CAAO,IAAA7hC,MAAP,CAAoB,IAAA01B,KAAA15B,OAApB,CAAA,CAAsC,CACpC,IAAI8lC,EAAK,IAAApM,KAAAr0B,OAAA,CAAiB,IAAArB,MAAjB,CAAT,CACA22D,EAAAA,CAAAA,CAAa70B,CACb,IAAID,CAAJ,CACa,GAAX,GAAIC,CAAJ,EACM80B,CAIJ,CAJU,IAAAlhC,KAAAjQ,UAAA,CAAoB,IAAAzlB,MAApB,CAAiC,CAAjC,CAAoC,IAAAA,MAApC,CAAiD,CAAjD,CAIV,CAHK42D,CAAA91D,MAAA,CAAU,aAAV,CAGL;AAFE,IAAAq1D,WAAA,CAAgB,6BAAhB,CAAgDS,CAAhD,CAAsD,GAAtD,CAEF,CADA,IAAA52D,MACA,EADc,CACd,CAAAqjD,CAAA,EAAUwT,MAAAC,aAAA,CAAoB54D,QAAA,CAAS04D,CAAT,CAAc,EAAd,CAApB,CALZ,EAQEvT,CARF,EAOY8R,EAAA4B,CAAOj1B,CAAPi1B,CAPZ,EAQ4Bj1B,CAE5B,CAAAD,CAAA,CAAS,CAAA,CAXX,KAYO,IAAW,IAAX,GAAIC,CAAJ,CACLD,CAAA,CAAS,CAAA,CADJ,KAEA,CAAA,GAAIC,CAAJ,GAAW40B,CAAX,CAAkB,CACvB,IAAA12D,MAAA,EACA,KAAAq1D,OAAA50D,KAAA,CAAiB,CACfT,MAAOs2D,CADQ,CAEf5gC,KAAMihC,CAFS,CAGf1rD,SAAU,CAAA,CAHK,CAIf7N,MAAOimD,CAJQ,CAAjB,CAMA,OARuB,CAUvBA,CAAA,EAAUvhB,CAVL,CAYP,IAAA9hC,MAAA,EA7BoC,CA+BtC,IAAAm2D,WAAA,CAAgB,oBAAhB,CAAsCG,CAAtC,CArC0B,CA9HZ,CA+KlB,KAAIzkB,GAASA,QAAQ,CAACH,CAAD,CAAQp/B,CAAR,CAAiB6T,CAAjB,CAA0B,CAC7C,IAAAurB,MAAA,CAAaA,CACb,KAAAp/B,QAAA,CAAeA,CACf,KAAA6T,QAAA,CAAeA,CAH8B,CAM/C0rB,GAAAmlB,KAAA,CAAct5D,CAAA,CAAO,QAAQ,EAAG,CAC9B,MAAO,EADuB,CAAlB,CAEX,CACDoxC,aAAc,CAAA,CADb,CAED7jC,SAAU,CAAA,CAFT,CAFW,CAOd4mC,GAAAxyB,UAAA,CAAmB,CACjBrW,YAAa6oC,EADI,CAGjB/uC,MAAOA,QAAQ,CAAC4yB,CAAD,CAAO,CACpB,IAAAA,KAAA,CAAYA,CACZ,KAAA2/B,OAAA,CAAc,IAAA3jB,MAAA0jB,IAAA,CAAe1/B,CAAf,CAEVt4B;CAAAA,CAAQ,IAAA65D,WAAA,EAEe,EAA3B,GAAI,IAAA5B,OAAAr5D,OAAJ,EACE,IAAAm6D,WAAA,CAAgB,wBAAhB,CAA0C,IAAAd,OAAA,CAAY,CAAZ,CAA1C,CAGFj4D,EAAAk0B,QAAA,CAAgB,CAAEA,CAAAl0B,CAAAk0B,QAClBl0B,EAAA6N,SAAA,CAAiB,CAAEA,CAAA7N,CAAA6N,SAEnB,OAAO7N,EAba,CAHL,CAmBjB85D,QAASA,QAAQ,EAAG,CAClB,IAAIA,CACA,KAAAC,OAAA,CAAY,GAAZ,CAAJ,EACED,CACA,CADU,IAAAE,YAAA,EACV,CAAA,IAAAC,QAAA,CAAa,GAAb,CAFF,EAGW,IAAAF,OAAA,CAAY,GAAZ,CAAJ,CACLD,CADK,CACK,IAAAI,iBAAA,EADL,CAEI,IAAAH,OAAA,CAAY,GAAZ,CAAJ,CACLD,CADK,CACK,IAAAzS,OAAA,EADL,CAEI,IAAA8Q,KAAA,EAAA1kC,WAAJ,EAA8B,IAAA0kC,KAAA,EAAA7/B,KAA9B,GAAkDm+B,GAAlD,CACLqD,CADK,CACKrD,EAAA,CAAU,IAAAwD,QAAA,EAAA3hC,KAAV,CADL,CAEI,IAAA6/B,KAAA,EAAA1kC,WAAJ,CACLqmC,CADK,CACK,IAAArmC,WAAA,EADL,CAEI,IAAA0kC,KAAA,EAAAtqD,SAAJ,CACLisD,CADK,CACK,IAAAjsD,SAAA,EADL,CAGL,IAAAkrD,WAAA,CAAgB,0BAAhB;AAA4C,IAAAZ,KAAA,EAA5C,CAIF,KApBkB,IAmBd1c,CAnBc,CAmBRt8C,CACV,CAAQs8C,CAAR,CAAe,IAAAse,OAAA,CAAY,GAAZ,CAAiB,GAAjB,CAAsB,GAAtB,CAAf,CAAA,CACoB,GAAlB,GAAIte,CAAAnjB,KAAJ,EACEwhC,CACA,CADU,IAAAK,aAAA,CAAkBL,CAAlB,CAA2B36D,CAA3B,CACV,CAAAA,CAAA,CAAU,IAFZ,EAGyB,GAAlB,GAAIs8C,CAAAnjB,KAAJ,EACLn5B,CACA,CADU26D,CACV,CAAAA,CAAA,CAAU,IAAAM,YAAA,CAAiBN,CAAjB,CAFL,EAGkB,GAAlB,GAAIre,CAAAnjB,KAAJ,EACLn5B,CACA,CADU26D,CACV,CAAAA,CAAA,CAAU,IAAAO,YAAA,CAAiBP,CAAjB,CAFL,EAIL,IAAAf,WAAA,CAAgB,YAAhB,CAGJ,OAAOe,EAlCW,CAnBH,CAwDjBf,WAAYA,QAAQ,CAACvd,CAAD,CAAMhf,CAAN,CAAa,CAC/B,KAAM4S,GAAA,CAAa,QAAb,CAEA5S,CAAAlE,KAFA,CAEYkjB,CAFZ,CAEkBhf,CAAA55B,MAFlB,CAEgC,CAFhC,CAEoC,IAAA01B,KAFpC,CAE+C,IAAAA,KAAAjQ,UAAA,CAAoBmU,CAAA55B,MAApB,CAF/C,CAAN,CAD+B,CAxDhB,CA8DjB03D,UAAWA,QAAQ,EAAG,CACpB,GAA2B,CAA3B,GAAI,IAAArC,OAAAr5D,OAAJ,CACE,KAAMwwC,GAAA,CAAa,MAAb,CAA0D,IAAA9W,KAA1D,CAAN,CACF,MAAO,KAAA2/B,OAAA,CAAY,CAAZ,CAHa,CA9DL,CAoEjBE,KAAMA,QAAQ,CAACoC,CAAD,CAAKC,CAAL,CAASC,CAAT,CAAaC,CAAb,CAAiB,CAC7B,MAAO,KAAAC,UAAA,CAAe,CAAf,CAAkBJ,CAAlB,CAAsBC,CAAtB,CAA0BC,CAA1B,CAA8BC,CAA9B,CADsB,CApEd,CAuEjBC,UAAWA,QAAQ,CAAC96D,CAAD;AAAI06D,CAAJ,CAAQC,CAAR,CAAYC,CAAZ,CAAgBC,CAAhB,CAAoB,CACrC,GAAI,IAAAzC,OAAAr5D,OAAJ,CAAyBiB,CAAzB,CAA4B,CACtB28B,CAAAA,CAAQ,IAAAy7B,OAAA,CAAYp4D,CAAZ,CACZ,KAAI+6D,EAAIp+B,CAAAlE,KACR,IAAIsiC,CAAJ,GAAUL,CAAV,EAAgBK,CAAhB,GAAsBJ,CAAtB,EAA4BI,CAA5B,GAAkCH,CAAlC,EAAwCG,CAAxC,GAA8CF,CAA9C,EACK,EAACH,CAAD,EAAQC,CAAR,EAAeC,CAAf,EAAsBC,CAAtB,CADL,CAEE,MAAOl+B,EALiB,CAQ5B,MAAO,CAAA,CAT8B,CAvEtB,CAmFjBu9B,OAAQA,QAAQ,CAACQ,CAAD,CAAKC,CAAL,CAASC,CAAT,CAAaC,CAAb,CAAiB,CAE/B,MAAA,CADIl+B,CACJ,CADY,IAAA27B,KAAA,CAAUoC,CAAV,CAAcC,CAAd,CAAkBC,CAAlB,CAAsBC,CAAtB,CACZ,GACE,IAAAzC,OAAAp2C,MAAA,EACO2a,CAAAA,CAFT,EAIO,CAAA,CANwB,CAnFhB,CA4FjBy9B,QAASA,QAAQ,CAACM,CAAD,CAAK,CACpB,GAA2B,CAA3B,GAAI,IAAAtC,OAAAr5D,OAAJ,CACE,KAAMwwC,GAAA,CAAa,MAAb,CAA0D,IAAA9W,KAA1D,CAAN,CAGF,IAAIkE,EAAQ,IAAAu9B,OAAA,CAAYQ,CAAZ,CACP/9B,EAAL,EACE,IAAAu8B,WAAA,CAAgB,4BAAhB,CAA+CwB,CAA/C,CAAoD,GAApD,CAAyD,IAAApC,KAAA,EAAzD,CAEF,OAAO37B,EATa,CA5FL,CAwGjBq+B,QAASA,QAAQ,CAAC9F,CAAD,CAAK+F,CAAL,CAAY,CAC3B,IAAIh2D,EAAKgyD,EAAA,CAAU/B,CAAV,CACT,OAAOz0D,EAAA,CAAOy6D,QAAsB,CAACl2D,CAAD,CAAOid,CAAP,CAAe,CACjD,MAAOhd,EAAA,CAAGD,CAAH,CAASid,CAAT,CAAiBg5C,CAAjB,CAD0C,CAA5C,CAEJ,CACDjtD,SAASitD,CAAAjtD,SADR,CAEDskC,OAAQ,CAAC2oB,CAAD,CAFP,CAFI,CAFoB,CAxGZ,CAkHjBE,SAAUA,QAAQ,CAACC,CAAD;AAAOlG,CAAP,CAAW+F,CAAX,CAAkBI,CAAlB,CAA+B,CAC/C,IAAIp2D,EAAKgyD,EAAA,CAAU/B,CAAV,CACT,OAAOz0D,EAAA,CAAO66D,QAAuB,CAACt2D,CAAD,CAAOid,CAAP,CAAe,CAClD,MAAOhd,EAAA,CAAGD,CAAH,CAASid,CAAT,CAAiBm5C,CAAjB,CAAuBH,CAAvB,CAD2C,CAA7C,CAEJ,CACDjtD,SAAUotD,CAAAptD,SAAVA,EAA2BitD,CAAAjtD,SAD1B,CAEDskC,OAAQ,CAAC+oB,CAAT/oB,EAAwB,CAAC8oB,CAAD,CAAOH,CAAP,CAFvB,CAFI,CAFwC,CAlHhC,CA4HjBrnC,WAAYA,QAAQ,EAAG,CAIrB,IAHA,IAAI7J,EAAK,IAAAqwC,QAAA,EAAA3hC,KAGT,CAAO,IAAA6/B,KAAA,CAAU,GAAV,CAAP,EAAyB,IAAAwC,UAAA,CAAe,CAAf,CAAAlnC,WAAzB,EAA0D,CAAA,IAAAknC,UAAA,CAAe,CAAf,CAAkB,GAAlB,CAA1D,CAAA,CACE/wC,CAAA,EAAM,IAAAqwC,QAAA,EAAA3hC,KAAN,CAA4B,IAAA2hC,QAAA,EAAA3hC,KAG9B,OAAOyY,GAAA,CAASnnB,CAAT,CAAa,IAAAb,QAAb,CAA2B,IAAAuP,KAA3B,CARc,CA5HN,CAuIjBzqB,SAAUA,QAAQ,EAAG,CACnB,IAAI7N,EAAQ,IAAAi6D,QAAA,EAAAj6D,MAEZ,OAAOM,EAAA,CAAO86D,QAAuB,EAAG,CACtC,MAAOp7D,EAD+B,CAAjC,CAEJ,CACD6N,SAAU,CAAA,CADT,CAEDqmB,QAAS,CAAA,CAFR,CAFI,CAHY,CAvIJ,CAkJjB2lC,WAAYA,QAAQ,EAAG,CAErB,IADA,IAAIA,EAAa,EACjB,CAAA,CAAA,CAGE,GAFyB,CAEpB,CAFD,IAAA5B,OAAAr5D,OAEC,EAF0B,CAAA,IAAAu5D,KAAA,CAAU,GAAV,CAAe,GAAf;AAAoB,GAApB,CAAyB,GAAzB,CAE1B,EADH0B,CAAAx2D,KAAA,CAAgB,IAAA22D,YAAA,EAAhB,CACG,CAAA,CAAA,IAAAD,OAAA,CAAY,GAAZ,CAAL,CAGE,MAA8B,EAAvB,GAACF,CAAAj7D,OAAD,CACDi7D,CAAA,CAAW,CAAX,CADC,CAEDwB,QAAyB,CAACx2D,CAAD,CAAOid,CAAP,CAAe,CAEtC,IADA,IAAI9hB,CAAJ,CACSH,EAAI,CADb,CACgBW,EAAKq5D,CAAAj7D,OAArB,CAAwCiB,CAAxC,CAA4CW,CAA5C,CAAgDX,CAAA,EAAhD,CACEG,CAAA,CAAQ65D,CAAA,CAAWh6D,CAAX,CAAA,CAAcgF,CAAd,CAAoBid,CAApB,CAEV,OAAO9hB,EAL+B,CAV7B,CAlJN,CAuKjBg6D,YAAaA,QAAQ,EAAG,CAGtB,IAFA,IAAIiB,EAAO,IAAAh+B,WAAA,EAEX,CAAgB,IAAA88B,OAAA,CAAY,GAAZ,CAAhB,CAAA,CACEkB,CAAA,CAAO,IAAAltD,OAAA,CAAYktD,CAAZ,CAET,OAAOA,EANe,CAvKP,CAgLjBltD,OAAQA,QAAQ,CAACutD,CAAD,CAAU,CACxB,IAAIx2D,EAAK,IAAAoQ,QAAA,CAAa,IAAA+kD,QAAA,EAAA3hC,KAAb,CAAT,CACIijC,CADJ,CAEIj8C,CAEJ,IAAI,IAAA64C,KAAA,CAAU,GAAV,CAAJ,CAGE,IAFAoD,CACA,CADS,EACT,CAAAj8C,CAAA,CAAO,EACP,CAAO,IAAAy6C,OAAA,CAAY,GAAZ,CAAP,CAAA,CACEwB,CAAAl4D,KAAA,CAAY,IAAA45B,WAAA,EAAZ,CAIJ,KAAIkV,EAAS,CAACmpB,CAAD,CAAA92D,OAAA,CAAiB+2D,CAAjB,EAA2B,EAA3B,CAEb,OAAOj7D,EAAA,CAAOk7D,QAAqB,CAAC32D,CAAD,CAAOid,CAAP,CAAe,CAChD,IAAI9S,EAAQssD,CAAA,CAAQz2D,CAAR,CAAcid,CAAd,CACZ,IAAIxC,CAAJ,CAAU,CACRA,CAAA,CAAK,CAAL,CAAA,CAAUtQ,CAGV,KADInP,CACJ,CADQ07D,CAAA38D,OACR,CAAOiB,CAAA,EAAP,CAAA,CACEyf,CAAA,CAAKzf,CAAL,CAAS,CAAT,CAAA,CAAc07D,CAAA,CAAO17D,CAAP,CAAA,CAAUgF,CAAV,CAAgBid,CAAhB,CAGhB,OAAOhd,EAAAG,MAAA,CAAS1G,CAAT;AAAoB+gB,CAApB,CARC,CAWV,MAAOxa,EAAA,CAAGkK,CAAH,CAbyC,CAA3C,CAcJ,CACDnB,SAAU,CAAC/I,CAAAyvB,UAAX1mB,EAA2BskC,CAAAspB,MAAA,CAAalsB,EAAb,CAD1B,CAED4C,OAAQ,CAACrtC,CAAAyvB,UAAT4d,EAAyBA,CAFxB,CAdI,CAfiB,CAhLT,CAmNjBlV,WAAYA,QAAQ,EAAG,CACrB,MAAO,KAAAy+B,WAAA,EADc,CAnNN,CAuNjBA,WAAYA,QAAQ,EAAG,CACrB,IAAIT,EAAO,IAAAU,QAAA,EAAX,CACIb,CADJ,CAEIt+B,CACJ,OAAA,CAAKA,CAAL,CAAa,IAAAu9B,OAAA,CAAY,GAAZ,CAAb,GACOkB,CAAA7mC,OAKE,EAJL,IAAA2kC,WAAA,CAAgB,0BAAhB,CACI,IAAAzgC,KAAAjQ,UAAA,CAAoB,CAApB,CAAuBmU,CAAA55B,MAAvB,CADJ,CAC0C,0BAD1C,CACsE45B,CADtE,CAIK,CADPs+B,CACO,CADC,IAAAa,QAAA,EACD,CAAAr7D,CAAA,CAAOs7D,QAAyB,CAAC/yD,CAAD,CAAQiZ,CAAR,CAAgB,CACrD,MAAOm5C,EAAA7mC,OAAA,CAAYvrB,CAAZ,CAAmBiyD,CAAA,CAAMjyD,CAAN,CAAaiZ,CAAb,CAAnB,CAAyCA,CAAzC,CAD8C,CAAhD,CAEJ,CACDqwB,OAAQ,CAAC8oB,CAAD,CAAOH,CAAP,CADP,CAFI,CANT,EAYOG,CAhBc,CAvNN,CA0OjBU,QAASA,QAAQ,EAAG,CAClB,IAAIV,EAAO,IAAAY,UAAA,EAAX,CACIC,CAEJ,IAAa,IAAA/B,OAAA,CAAY,GAAZ,CAAb,GACE+B,CACI,CADK,IAAAJ,WAAA,EACL,CAAA,IAAAzB,QAAA,CAAa,GAAb,CAFN,EAEyB,CACrB,IAAIa;AAAQ,IAAAY,WAAA,EAEZ,OAAOp7D,EAAA,CAAOy7D,QAAsB,CAACl3D,CAAD,CAAOid,CAAP,CAAe,CACjD,MAAOm5C,EAAA,CAAKp2D,CAAL,CAAWid,CAAX,CAAA,CAAqBg6C,CAAA,CAAOj3D,CAAP,CAAaid,CAAb,CAArB,CAA4Cg5C,CAAA,CAAMj2D,CAAN,CAAYid,CAAZ,CADF,CAA5C,CAEJ,CACDjU,SAAUotD,CAAAptD,SAAVA,EAA2BiuD,CAAAjuD,SAA3BA,EAA8CitD,CAAAjtD,SAD7C,CAFI,CAHc,CAWzB,MAAOotD,EAjBW,CA1OH,CA8PjBY,UAAWA,QAAQ,EAAG,CAGpB,IAFA,IAAIZ,EAAO,IAAAe,WAAA,EAAX,CACIx/B,CACJ,CAAQA,CAAR,CAAgB,IAAAu9B,OAAA,CAAY,IAAZ,CAAhB,CAAA,CACEkB,CAAA,CAAO,IAAAD,SAAA,CAAcC,CAAd,CAAoBz+B,CAAAlE,KAApB,CAAgC,IAAA0jC,WAAA,EAAhC,CAAmD,CAAA,CAAnD,CAET,OAAOf,EANa,CA9PL,CAuQjBe,WAAYA,QAAQ,EAAG,CAGrB,IAFA,IAAIf,EAAO,IAAAgB,SAAA,EAAX,CACIz/B,CACJ,CAAQA,CAAR,CAAgB,IAAAu9B,OAAA,CAAY,IAAZ,CAAhB,CAAA,CACEkB,CAAA,CAAO,IAAAD,SAAA,CAAcC,CAAd,CAAoBz+B,CAAAlE,KAApB,CAAgC,IAAA2jC,SAAA,EAAhC,CAAiD,CAAA,CAAjD,CAET,OAAOhB,EANc,CAvQN,CAgRjBgB,SAAUA,QAAQ,EAAG,CAGnB,IAFA,IAAIhB,EAAO,IAAAiB,WAAA,EAAX,CACI1/B,CACJ,CAAQA,CAAR,CAAgB,IAAAu9B,OAAA,CAAY,IAAZ,CAAiB,IAAjB,CAAsB,KAAtB,CAA4B,KAA5B,CAAhB,CAAA,CACEkB,CAAA,CAAO,IAAAD,SAAA,CAAcC,CAAd,CAAoBz+B,CAAAlE,KAApB,CAAgC,IAAA4jC,WAAA,EAAhC,CAET;MAAOjB,EANY,CAhRJ,CAyRjBiB,WAAYA,QAAQ,EAAG,CAGrB,IAFA,IAAIjB,EAAO,IAAAkB,SAAA,EAAX,CACI3/B,CACJ,CAAQA,CAAR,CAAgB,IAAAu9B,OAAA,CAAY,GAAZ,CAAiB,GAAjB,CAAsB,IAAtB,CAA4B,IAA5B,CAAhB,CAAA,CACEkB,CAAA,CAAO,IAAAD,SAAA,CAAcC,CAAd,CAAoBz+B,CAAAlE,KAApB,CAAgC,IAAA6jC,SAAA,EAAhC,CAET,OAAOlB,EANc,CAzRN,CAkSjBkB,SAAUA,QAAQ,EAAG,CAGnB,IAFA,IAAIlB,EAAO,IAAAmB,eAAA,EAAX,CACI5/B,CACJ,CAAQA,CAAR,CAAgB,IAAAu9B,OAAA,CAAY,GAAZ,CAAgB,GAAhB,CAAhB,CAAA,CACEkB,CAAA,CAAO,IAAAD,SAAA,CAAcC,CAAd,CAAoBz+B,CAAAlE,KAApB,CAAgC,IAAA8jC,eAAA,EAAhC,CAET,OAAOnB,EANY,CAlSJ,CA2SjBmB,eAAgBA,QAAQ,EAAG,CAGzB,IAFA,IAAInB,EAAO,IAAAoB,MAAA,EAAX,CACI7/B,CACJ,CAAQA,CAAR,CAAgB,IAAAu9B,OAAA,CAAY,GAAZ,CAAgB,GAAhB,CAAoB,GAApB,CAAhB,CAAA,CACEkB,CAAA,CAAO,IAAAD,SAAA,CAAcC,CAAd,CAAoBz+B,CAAAlE,KAApB,CAAgC,IAAA+jC,MAAA,EAAhC,CAET,OAAOpB,EANkB,CA3SV,CAoTjBoB,MAAOA,QAAQ,EAAG,CAChB,IAAI7/B,CACJ,OAAI,KAAAu9B,OAAA,CAAY,GAAZ,CAAJ,CACS,IAAAD,QAAA,EADT,CAEO,CAAKt9B,CAAL,CAAa,IAAAu9B,OAAA,CAAY,GAAZ,CAAb,EACE,IAAAiB,SAAA,CAAcvmB,EAAAmlB,KAAd;AAA2Bp9B,CAAAlE,KAA3B,CAAuC,IAAA+jC,MAAA,EAAvC,CADF,CAEA,CAAK7/B,CAAL,CAAa,IAAAu9B,OAAA,CAAY,GAAZ,CAAb,EACE,IAAAc,QAAA,CAAar+B,CAAAlE,KAAb,CAAyB,IAAA+jC,MAAA,EAAzB,CADF,CAGE,IAAAvC,QAAA,EATO,CApTD,CAiUjBO,YAAaA,QAAQ,CAAChT,CAAD,CAAS,CAC5B,IAAIv7C,EAAS,IAAA2nB,WAAA,EAEb,OAAOnzB,EAAA,CAAOg8D,QAA0B,CAACzzD,CAAD,CAAQiZ,CAAR,CAAgBjd,CAAhB,CAAsB,CACxDwrC,CAAAA,CAAIxrC,CAAJwrC,EAAYgX,CAAA,CAAOx+C,CAAP,CAAciZ,CAAd,CAChB,OAAa,KAAN,EAACuuB,CAAD,CAAc9xC,CAAd,CAA0BuN,CAAA,CAAOukC,CAAP,CAF2B,CAAvD,CAGJ,CACDjc,OAAQA,QAAQ,CAACvrB,CAAD,CAAQ7I,CAAR,CAAe8hB,CAAf,CAAuB,CACrC,IAAIuuB,EAAIgX,CAAA,CAAOx+C,CAAP,CAAciZ,CAAd,CACHuuB,EAAL,EAAQgX,CAAAjzB,OAAA,CAAcvrB,CAAd,CAAqBwnC,CAArB,CAAyB,EAAzB,CAA6BvuB,CAA7B,CACR,OAAOhW,EAAAsoB,OAAA,CAAcic,CAAd,CAAiBrwC,CAAjB,CAH8B,CADtC,CAHI,CAHqB,CAjUb,CAgVjBo6D,YAAaA,QAAQ,CAAC17D,CAAD,CAAM,CACzB,IAAIu+B,EAAa,IAAA3E,KAAjB,CAEIikC,EAAU,IAAAt/B,WAAA,EACd,KAAAg9B,QAAA,CAAa,GAAb,CAEA,OAAO35D,EAAA,CAAOk8D,QAA0B,CAAC33D,CAAD,CAAOid,CAAP,CAAe,CAAA,IACjDuuB,EAAI3xC,CAAA,CAAImG,CAAJ,CAAUid,CAAV,CAD6C,CAEjDjiB,EAAI08D,CAAA,CAAQ13D,CAAR,CAAcid,CAAd,CAGRotB,GAAA,CAAqBrvC,CAArB,CAAwBo9B,CAAxB,CACA,OAAKoT,EAAL,CACIhB,EAAA9M,CAAiB8N,CAAA,CAAExwC,CAAF,CAAjB0iC,CAAuBtF,CAAvBsF,CADJ,CAAehkC,CANsC,CAAhD,CASJ,CACD61B,OAAQA,QAAQ,CAACvvB,CAAD,CAAO7E,CAAP,CAAc8hB,CAAd,CAAsB,CACpC,IAAI1iB,EAAM8vC,EAAA,CAAqBqtB,CAAA,CAAQ13D,CAAR,CAAcid,CAAd,CAArB,CAA4Cmb,CAA5C,CAAV,CAEIoT,EAAIhB,EAAA,CAAiB3wC,CAAA,CAAImG,CAAJ,CAAUid,CAAV,CAAjB,CAAoCmb,CAApC,CACHoT,EAAL,EAAQ3xC,CAAA01B,OAAA,CAAWvvB,CAAX;AAAiBwrC,CAAjB,CAAqB,EAArB,CAAyBvuB,CAAzB,CACR,OAAOuuB,EAAA,CAAEjxC,CAAF,CAAP,CAAgBY,CALoB,CADrC,CATI,CANkB,CAhVV,CA0WjBm6D,aAAcA,QAAQ,CAACsC,CAAD,CAAWC,CAAX,CAA0B,CAC9C,IAAInB,EAAS,EACb,IAA8B,GAA9B,GAAI,IAAAjB,UAAA,EAAAhiC,KAAJ,EACE,EACEijC,EAAAl4D,KAAA,CAAY,IAAA45B,WAAA,EAAZ,CADF,OAES,IAAA88B,OAAA,CAAY,GAAZ,CAFT,CADF,CAKA,IAAAE,QAAA,CAAa,GAAb,CAEA,KAAI0C,EAAiB,IAAArkC,KAArB,CAEIhZ,EAAOi8C,CAAA38D,OAAA,CAAgB,EAAhB,CAAqB,IAEhC,OAAOg+D,SAA2B,CAAC/zD,CAAD,CAAQiZ,CAAR,CAAgB,CAChD,IAAI3iB,EAAUu9D,CAAA,CAAgBA,CAAA,CAAc7zD,CAAd,CAAqBiZ,CAArB,CAAhB,CAA+C1gB,CAAA,CAAUs7D,CAAV,CAAA,CAA2Bn+D,CAA3B,CAAuCsK,CAApG,CACI/D,EAAK23D,CAAA,CAAS5zD,CAAT,CAAgBiZ,CAAhB,CAAwB3iB,CAAxB,CAAL2F,EAAyC/D,CAE7C,IAAIue,CAAJ,CAEE,IADA,IAAIzf,EAAI07D,CAAA38D,OACR,CAAOiB,CAAA,EAAP,CAAA,CACEyf,CAAA,CAAKzf,CAAL,CAAA,CAAUwvC,EAAA,CAAiBksB,CAAA,CAAO17D,CAAP,CAAA,CAAUgJ,CAAV,CAAiBiZ,CAAjB,CAAjB,CAA2C66C,CAA3C,CAIdttB,GAAA,CAAiBlwC,CAAjB,CAA0Bw9D,CAA1B,CA3oBJ,IA4oBuB73D,CA5oBvB,CAAS,CACP,GA2oBqBA,CA3oBjB8G,YAAJ,GA2oBqB9G,CA3oBrB,CACE,KAAMsqC,GAAA,CAAa,QAAb,CA0oBiButB,CA1oBjB,CAAN,CAGK,GAuoBc73D,CAvoBd,GAAYwxD,EAAZ,EAuoBcxxD,CAvoBd,GAA4ByxD,EAA5B,EAuoBczxD,CAvoBd,GAA6C0xD,EAA7C,CACL,KAAMpnB,GAAA,CAAa,QAAb,CAsoBiButB,CAtoBjB,CAAN,CANK,CA+oBDp6B,CAAAA,CAAIz9B,CAAAG,MAAA,CACAH,CAAAG,MAAA,CAAS9F,CAAT,CAAkBmgB,CAAlB,CADA,CAEAxa,CAAA,CAAGwa,CAAA,CAAK,CAAL,CAAH,CAAYA,CAAA,CAAK,CAAL,CAAZ,CAAqBA,CAAA,CAAK,CAAL,CAArB,CAA8BA,CAAA,CAAK,CAAL,CAA9B,CAAuCA,CAAA,CAAK,CAAL,CAAvC,CAER,OAAO+vB,GAAA,CAAiB9M,CAAjB,CAAoBo6B,CAApB,CAnByC,CAbJ,CA1W/B,CA+YjBzC,iBAAkBA,QAAQ,EAAG,CAC3B,IAAI2C;AAAa,EACjB,IAA8B,GAA9B,GAAI,IAAAvC,UAAA,EAAAhiC,KAAJ,EACE,EAAG,CACD,GAAI,IAAA6/B,KAAA,CAAU,GAAV,CAAJ,CAEE,KAEF0E,EAAAx5D,KAAA,CAAgB,IAAA45B,WAAA,EAAhB,CALC,CAAH,MAMS,IAAA88B,OAAA,CAAY,GAAZ,CANT,CADF,CASA,IAAAE,QAAA,CAAa,GAAb,CAEA,OAAO35D,EAAA,CAAOw8D,QAA2B,CAACj4D,CAAD,CAAOid,CAAP,CAAe,CAEtD,IADA,IAAInf,EAAQ,EAAZ,CACS9C,EAAI,CADb,CACgBW,EAAKq8D,CAAAj+D,OAArB,CAAwCiB,CAAxC,CAA4CW,CAA5C,CAAgDX,CAAA,EAAhD,CACE8C,CAAAU,KAAA,CAAWw5D,CAAA,CAAWh9D,CAAX,CAAA,CAAcgF,CAAd,CAAoBid,CAApB,CAAX,CAEF,OAAOnf,EAL+C,CAAjD,CAMJ,CACDuxB,QAAS,CAAA,CADR,CAEDrmB,SAAUgvD,CAAApB,MAAA,CAAiBlsB,EAAjB,CAFT,CAGD4C,OAAQ0qB,CAHP,CANI,CAboB,CA/YZ,CAyajBxV,OAAQA,QAAQ,EAAG,CAAA,IACb3nD,EAAO,EADM,CACFq9D,EAAW,EAC1B,IAA8B,GAA9B,GAAI,IAAAzC,UAAA,EAAAhiC,KAAJ,EACE,EAAG,CACD,GAAI,IAAA6/B,KAAA,CAAU,GAAV,CAAJ,CAEE,KAEF,KAAI37B,EAAQ,IAAAy9B,QAAA,EACRz9B,EAAA3uB,SAAJ,CACEnO,CAAA2D,KAAA,CAAUm5B,CAAAx8B,MAAV,CADF,CAEWw8B,CAAA/I,WAAJ,CACL/zB,CAAA2D,KAAA,CAAUm5B,CAAAlE,KAAV,CADK,CAGL,IAAAygC,WAAA,CAAgB,aAAhB,CAA+Bv8B,CAA/B,CAEF,KAAAy9B,QAAA,CAAa,GAAb,CACA8C,EAAA15D,KAAA,CAAc,IAAA45B,WAAA,EAAd,CAdC,CAAH,MAeS,IAAA88B,OAAA,CAAY,GAAZ,CAfT,CADF;CAkBA,IAAAE,QAAA,CAAa,GAAb,CAEA,OAAO35D,EAAA,CAAO08D,QAA4B,CAACn4D,CAAD,CAAOid,CAAP,CAAe,CAEvD,IADA,IAAIulC,EAAS,EAAb,CACSxnD,EAAI,CADb,CACgBW,EAAKu8D,CAAAn+D,OAArB,CAAsCiB,CAAtC,CAA0CW,CAA1C,CAA8CX,CAAA,EAA9C,CACEwnD,CAAA,CAAO3nD,CAAA,CAAKG,CAAL,CAAP,CAAA,CAAkBk9D,CAAA,CAASl9D,CAAT,CAAA,CAAYgF,CAAZ,CAAkBid,CAAlB,CAEpB,OAAOulC,EALgD,CAAlD,CAMJ,CACDnzB,QAAS,CAAA,CADR,CAEDrmB,SAAUkvD,CAAAtB,MAAA,CAAelsB,EAAf,CAFT,CAGD4C,OAAQ4qB,CAHP,CANI,CAtBU,CAzaF,CAsenB,KAAI7rB,GAAuB1kC,EAAA,EAA3B,CACIykC,GAAyBzkC,EAAA,EAD7B,CA8HIqlC,GAAgBlyC,MAAAsiB,UAAAgjB,QA9HpB,CA63EI6X,GAAat+C,CAAA,CAAO,MAAP,CA73EjB,CA+3EI2+C,GAAe,CACjB/jB,KAAM,MADW,CAEjBglB,IAAK,KAFY,CAGjBC,IAAK,KAHY,CAMjBhlB,aAAc,aANG,CAOjBilB,GAAI,IAPa,CA/3EnB,CA4+GIvzB,GAAiBvsB,CAAA,CAAO,UAAP,CA5+GrB,CAsvHImjD,EAAiBrjD,CAAAsa,cAAA,CAAuB,GAAvB,CAtvHrB,CAuvHIipC,GAAY5d,EAAA,CAAW5lC,CAAAoL,SAAAod,KAAX,CAwOhB1R,GAAAwK,QAAA,CAA0B,CAAC,UAAD,CAiV1BqiC,GAAAriC,QAAA,CAAyB,CAAC,SAAD,CAuEzB2iC,GAAA3iC,QAAA,CAAuB,CAAC,SAAD,CAavB,KAAIsnB,GAAc,GAAlB,CA4JImgB,GAAe,CACjB+E,KAAMjH,CAAA,CAAW,UAAX,CAAuB,CAAvB,CADW,CAEf+X,GAAI/X,CAAA,CAAW,UAAX,CAAuB,CAAvB,CAA0B,CAA1B,CAA6B,CAAA,CAA7B,CAFW,CAGdgY,EAAGhY,CAAA,CAAW,UAAX,CAAuB,CAAvB,CAHW,CAIjBiY,KAAM/X,EAAA,CAAc,OAAd,CAJW;AAKhBgY,IAAKhY,EAAA,CAAc,OAAd,CAAuB,CAAA,CAAvB,CALW,CAMfgH,GAAIlH,CAAA,CAAW,OAAX,CAAoB,CAApB,CAAuB,CAAvB,CANW,CAOdmY,EAAGnY,CAAA,CAAW,OAAX,CAAoB,CAApB,CAAuB,CAAvB,CAPW,CAQfmH,GAAInH,CAAA,CAAW,MAAX,CAAmB,CAAnB,CARW,CASdzmB,EAAGymB,CAAA,CAAW,MAAX,CAAmB,CAAnB,CATW,CAUfoH,GAAIpH,CAAA,CAAW,OAAX,CAAoB,CAApB,CAVW,CAWdoY,EAAGpY,CAAA,CAAW,OAAX,CAAoB,CAApB,CAXW,CAYfqY,GAAIrY,CAAA,CAAW,OAAX,CAAoB,CAApB,CAAwB,GAAxB,CAZW,CAad9kD,EAAG8kD,CAAA,CAAW,OAAX,CAAoB,CAApB,CAAwB,GAAxB,CAbW,CAcfsH,GAAItH,CAAA,CAAW,SAAX,CAAsB,CAAtB,CAdW,CAedyB,EAAGzB,CAAA,CAAW,SAAX,CAAsB,CAAtB,CAfW,CAgBfuH,GAAIvH,CAAA,CAAW,SAAX,CAAsB,CAAtB,CAhBW,CAiBdpU,EAAGoU,CAAA,CAAW,SAAX,CAAsB,CAAtB,CAjBW,CAoBhByH,IAAKzH,CAAA,CAAW,cAAX,CAA2B,CAA3B,CApBW,CAqBjBsY,KAAMpY,EAAA,CAAc,KAAd,CArBW,CAsBhBqY,IAAKrY,EAAA,CAAc,KAAd,CAAqB,CAAA,CAArB,CAtBW,CAuBdt2C,EA3BL4uD,QAAmB,CAACvY,CAAD,CAAO1B,CAAP,CAAgB,CACjC,MAAyB,GAAlB,CAAA0B,CAAAoH,SAAA,EAAA,CAAuB9I,CAAAtb,MAAA,CAAc,CAAd,CAAvB,CAA0Csb,CAAAtb,MAAA,CAAc,CAAd,CADhB,CAIhB,CAwBdw1B,EAhELC,QAAuB,CAACzY,CAAD,CAAO,CACxB0Y,CAAAA,CAAQ,EAARA,CAAY1Y,CAAAgC,kBAAA,EAMhB,OAHA2W,EAGA,EAL0B,CAATA,EAACD,CAADC,CAAc,GAAdA,CAAoB,EAKrC,GAHc/Y,EAAA,CAAUvuB,IAAA,CAAY,CAAP,CAAAqnC,CAAA,CAAW,OAAX,CAAqB,MAA1B,CAAA,CAAkCA,CAAlC,CAAyC,EAAzC,CAAV,CAAwD,CAAxD,CAGd,CAFc9Y,EAAA,CAAUvuB,IAAA2tB,IAAA,CAAS0Z,CAAT,CAAgB,EAAhB,CAAV,CAA+B,CAA/B,CAEd,CAP4B,CAwCX,CAyBfE,GAAIrY,EAAA,CAAW,CAAX,CAzBW,CA0BdsY,EAAGtY,EAAA,CAAW,CAAX,CA1BW,CA5JnB,CAyLIsB,GAAqB,kFAzLzB;AA0LID,GAAgB,UA2FpB9E,GAAAtiC,QAAA,CAAqB,CAAC,SAAD,CA6HrB,KAAI0iC,GAAkBnhD,EAAA,CAAQuB,CAAR,CAAtB,CAWI+/C,GAAkBthD,EAAA,CAAQmN,EAAR,CA+NtBk0C,GAAA5iC,QAAA,CAAwB,CAAC,QAAD,CAgHxB,KAAI5Q,GAAsB7N,EAAA,CAAQ,CAChC+qB,SAAU,GADsB,CAEhCnjB,QAASA,QAAQ,CAACtG,CAAD,CAAUN,CAAV,CAAgB,CAC/B,GAAK2kB,CAAA3kB,CAAA2kB,KAAL,EAAmBo3C,CAAA/7D,CAAA+7D,UAAnB,EAAsCt2D,CAAAzF,CAAAyF,KAAtC,CACE,MAAO,SAAQ,CAACkB,CAAD,CAAQrG,CAAR,CAAiB,CAE9B,GAA0C,GAA1C,GAAIA,CAAA,CAAQ,CAAR,CAAAR,SAAAmI,YAAA,EAAJ,CAAA,CAGA,IAAI0c,EAA+C,4BAAxC,GAAArlB,EAAAjC,KAAA,CAAciD,CAAAP,KAAA,CAAa,MAAb,CAAd,CAAA,CACA,YADA,CACe,MAC1BO,EAAAgI,GAAA,CAAW,OAAX,CAAoB,QAAQ,CAACmT,CAAD,CAAQ,CAE7Bnb,CAAAN,KAAA,CAAa2kB,CAAb,CAAL,EACElJ,CAAAgwB,eAAA,EAHgC,CAApC,CALA,CAF8B,CAFH,CAFD,CAAR,CAA1B,CAyWIz5B,GAA6B,EAIjCjV,EAAA,CAAQoe,EAAR,CAAsB,QAAQ,CAAC6gD,CAAD,CAAW/yC,CAAX,CAAqB,CAEjD,GAAgB,UAAhB,EAAI+yC,CAAJ,CAAA,CAEA,IAAIC,EAAahuC,EAAA,CAAmB,KAAnB,CAA2BhF,CAA3B,CACjBjX,GAAA,CAA2BiqD,CAA3B,CAAA,CAAyC,QAAQ,EAAG,CAClD,MAAO,CACLlyC,SAAU,GADL,CAELF,SAAU,GAFL,CAGL1C,KAAMA,QAAQ,CAACxgB,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB,CACnC2G,CAAAjH,OAAA,CAAaM,CAAA,CAAKi8D,CAAL,CAAb;AAA+BC,QAAiC,CAACp+D,CAAD,CAAQ,CACtEkC,CAAA+0B,KAAA,CAAU9L,CAAV,CAAoB,CAAEnrB,CAAAA,CAAtB,CADsE,CAAxE,CADmC,CAHhC,CAD2C,CAHpD,CAFiD,CAAnD,CAmBAf,EAAA,CAAQue,EAAR,CAAsB,QAAQ,CAAC6gD,CAAD,CAAWl3D,CAAX,CAAmB,CAC/C+M,EAAA,CAA2B/M,CAA3B,CAAA,CAAqC,QAAQ,EAAG,CAC9C,MAAO,CACL4kB,SAAU,GADL,CAEL1C,KAAMA,QAAQ,CAACxgB,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB,CAGnC,GAAe,WAAf,GAAIiF,CAAJ,EAA0D,GAA1D,EAA8BjF,CAAAiR,UAAAlP,OAAA,CAAsB,CAAtB,CAA9B,GACMP,CADN,CACcxB,CAAAiR,UAAAzP,MAAA,CAAqBusD,EAArB,CADd,EAEa,CACT/tD,CAAA+0B,KAAA,CAAU,WAAV,CAAuB,IAAIxzB,MAAJ,CAAWC,CAAA,CAAM,CAAN,CAAX,CAAqBA,CAAA,CAAM,CAAN,CAArB,CAAvB,CACA,OAFS,CAMbmF,CAAAjH,OAAA,CAAaM,CAAA,CAAKiF,CAAL,CAAb,CAA2Bm3D,QAA+B,CAACt+D,CAAD,CAAQ,CAChEkC,CAAA+0B,KAAA,CAAU9vB,CAAV,CAAkBnH,CAAlB,CADgE,CAAlE,CAXmC,CAFhC,CADuC,CADD,CAAjD,CAwBAf,EAAA,CAAQ,CAAC,KAAD,CAAQ,QAAR,CAAkB,MAAlB,CAAR,CAAmC,QAAQ,CAACksB,CAAD,CAAW,CACpD,IAAIgzC,EAAahuC,EAAA,CAAmB,KAAnB,CAA2BhF,CAA3B,CACjBjX,GAAA,CAA2BiqD,CAA3B,CAAA,CAAyC,QAAQ,EAAG,CAClD,MAAO,CACLpyC,SAAU,EADL,CAEL1C,KAAMA,QAAQ,CAACxgB,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB,CAAA,IAC/Bg8D,EAAW/yC,CADoB,CAE/BxjB,EAAOwjB,CAEM,OAAjB,GAAIA,CAAJ,EAC4C,4BAD5C,GACI3pB,EAAAjC,KAAA,CAAciD,CAAAP,KAAA,CAAa,MAAb,CAAd,CADJ,GAEE0F,CAEA,CAFO,WAEP,CADAzF,CAAA+tB,MAAA,CAAWtoB,CAAX,CACA,CADmB,YACnB;AAAAu2D,CAAA,CAAW,IAJb,CAOAh8D,EAAA6xB,SAAA,CAAcoqC,CAAd,CAA0B,QAAQ,CAACn+D,CAAD,CAAQ,CACnCA,CAAL,EAOAkC,CAAA+0B,KAAA,CAAUtvB,CAAV,CAAgB3H,CAAhB,CAMA,CAAI4+C,EAAJ,EAAYsf,CAAZ,EAAsB17D,CAAAP,KAAA,CAAai8D,CAAb,CAAuBh8D,CAAA,CAAKyF,CAAL,CAAvB,CAbtB,EACmB,MADnB,GACMwjB,CADN,EAEIjpB,CAAA+0B,KAAA,CAAUtvB,CAAV,CAAgB,IAAhB,CAHoC,CAA1C,CAXmC,CAFhC,CAD2C,CAFA,CAAtD,CAjpjBuC,KAwrjBnC6gD,GAAe,CACjBU,YAAanoD,CADI,CAEjB0oD,gBASF8U,QAA8B,CAAClV,CAAD,CAAU1hD,CAAV,CAAgB,CAC5C0hD,CAAAT,MAAA,CAAgBjhD,CAD4B,CAX3B,CAGjBkiD,eAAgB9oD,CAHC,CAIjBgpD,aAAchpD,CAJG,CAKjBqpD,UAAWrpD,CALM,CAMjBypD,aAAczpD,CANG,CAOjB+pD,cAAe/pD,CAPE,CAyDnBqnD,GAAAzoC,QAAA,CAAyB,CAAC,UAAD,CAAa,QAAb,CAAuB,QAAvB,CAAiC,UAAjC,CAA6C,cAA7C,CAqYzB,KAAI6+C,GAAuBA,QAAQ,CAACC,CAAD,CAAW,CAC5C,MAAO,CAAC,UAAD,CAAa,QAAQ,CAACrnD,CAAD,CAAW,CAgErC,MA/DoBhI,CAClBzH,KAAM,MADYyH,CAElB6c,SAAUwyC,CAAA,CAAW,KAAX,CAAmB,GAFXrvD,CAGlBzE,WAAYy9C,EAHMh5C,CAIlBtG,QAAS41D,QAAsB,CAACC,CAAD,CAAc,CAE3CA,CAAA//C,SAAA,CAAqB0rC,EAArB,CAAA1rC,SAAA,CAA8C+wC,EAA9C,CAEA,OAAO,CACL19B,IAAK2sC,QAAsB,CAAC/1D,CAAD,CAAQ81D,CAAR,CAAqBz8D,CAArB,CAA2ByI,CAA3B,CAAuC,CAEhE,GAAM,EAAA,QAAA;AAAYzI,CAAZ,CAAN,CAAyB,CAOvB,IAAI28D,EAAuBA,QAAQ,CAAClhD,CAAD,CAAQ,CACzC9U,CAAAE,OAAA,CAAa,QAAQ,EAAG,CACtB4B,CAAA2+C,iBAAA,EACA3+C,EAAAmgD,cAAA,EAFsB,CAAxB,CAKAntC,EAAAgwB,eAAA,EANyC,CASxBgxB,EAAAn8D,CAAY,CAAZA,CA11f3B8gC,iBAAA,CA01f2C9oB,QA11f3C,CA01fqDqkD,CA11frD,CAAmC,CAAA,CAAnC,CA81fQF,EAAAn0D,GAAA,CAAe,UAAf,CAA2B,QAAQ,EAAG,CACpC4M,CAAA,CAAS,QAAQ,EAAG,CACIunD,CAAAn8D,CAAY,CAAZA,CA71flCsY,oBAAA,CA61fkDN,QA71flD,CA61f4DqkD,CA71f5D,CAAsC,CAAA,CAAtC,CA41f8B,CAApB,CAEG,CAFH,CAEM,CAAA,CAFN,CADoC,CAAtC,CApBuB,CAFuC,IA6B5DC,EAAiBn0D,CAAA49C,aA7B2C,CA8B5DwW,EAAQp0D,CAAAi+C,MAERmW,EAAJ,GACEvvB,EAAA,CAAO3mC,CAAP,CAAc,IAAd,CAAoBk2D,CAApB,CAA2Bp0D,CAA3B,CAAuCo0D,CAAvC,CACA,CAAA78D,CAAA6xB,SAAA,CAAc7xB,CAAAyF,KAAA,CAAY,MAAZ,CAAqB,QAAnC,CAA6C,QAAQ,CAAC8xB,CAAD,CAAW,CAC1DslC,CAAJ,GAActlC,CAAd,GACA+V,EAAA,CAAO3mC,CAAP,CAAc,IAAd,CAAoBk2D,CAApB,CAA2BxgE,CAA3B,CAAsCwgE,CAAtC,CAGA,CAFAA,CAEA,CAFQtlC,CAER,CADA+V,EAAA,CAAO3mC,CAAP,CAAc,IAAd,CAAoBk2D,CAApB,CAA2Bp0D,CAA3B,CAAuCo0D,CAAvC,CACA,CAAAD,CAAArV,gBAAA,CAA+B9+C,CAA/B,CAA2Co0D,CAA3C,CAJA,CAD8D,CAAhE,CAFF,CAUAJ,EAAAn0D,GAAA,CAAe,UAAf,CAA2B,QAAQ,EAAG,CACpCs0D,CAAAjV,eAAA,CAA8Bl/C,CAA9B,CACIo0D,EAAJ,EACEvvB,EAAA,CAAO3mC,CAAP,CAAc,IAAd,CAAoBk2D,CAApB,CAA2BxgE,CAA3B,CAAsCwgE,CAAtC,CAEFz+D,EAAA,CAAOqK,CAAP,CAAmB69C,EAAnB,CALoC,CAAtC,CA1CgE,CAD7D,CAJoC,CAJ3Bp5C,CADiB,CAAhC,CADqC,CAA9C,CAqEIA,GAAgBovD,EAAA,EArEpB,CAsEI1tD,GAAkB0tD,EAAA,CAAqB,CAAA,CAArB,CAtEtB;AAkFItS,GAAkB,0EAlFtB,CAmFI8S,GAAa,qFAnFjB,CAoFIC,GAAe,mGApFnB,CAqFIC,GAAgB,oCArFpB,CAsFIC,GAAc,2BAtFlB,CAuFIC,GAAuB,+DAvF3B,CAwFIC,GAAc,mBAxFlB,CAyFIC,GAAe,kBAzFnB,CA0FIC,GAAc,yCA1FlB,CA4FIC;AAAY,CAyFd,KA21BFC,QAAsB,CAAC52D,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB+nD,CAAvB,CAA6BrzC,CAA7B,CAAuCpC,CAAvC,CAAiD,CACrE22C,EAAA,CAActiD,CAAd,CAAqBrG,CAArB,CAA8BN,CAA9B,CAAoC+nD,CAApC,CAA0CrzC,CAA1C,CAAoDpC,CAApD,CACAw2C,GAAA,CAAqBf,CAArB,CAFqE,CAp7BvD,CAsLd,KAAQ8C,EAAA,CAAoB,MAApB,CAA4BoS,EAA5B,CACDpT,EAAA,CAAiBoT,EAAjB,CAA8B,CAAC,MAAD,CAAS,IAAT,CAAe,IAAf,CAA9B,CADC,CAED,YAFC,CAtLM,CAmRd,iBAAkBpS,EAAA,CAAoB,eAApB,CAAqCqS,EAArC,CACdrT,EAAA,CAAiBqT,EAAjB,CAAuC,yBAAA,MAAA,CAAA,GAAA,CAAvC,CADc,CAEd,yBAFc,CAnRJ,CAiXd,KAAQrS,EAAA,CAAoB,MAApB,CAA4BwS,EAA5B,CACJxT,EAAA,CAAiBwT,EAAjB,CAA8B,CAAC,IAAD,CAAO,IAAP,CAAa,IAAb,CAAmB,KAAnB,CAA9B,CADI,CAEL,cAFK,CAjXM,CA8cd,KAAQxS,EAAA,CAAoB,MAApB,CAA4BsS,EAA5B,CAikBVK,QAAmB,CAACC,CAAD,CAAUC,CAAV,CAAwB,CACzC,GAAIr+D,EAAA,CAAOo+D,CAAP,CAAJ,CACE,MAAOA,EAGT,IAAI5gE,CAAA,CAAS4gE,CAAT,CAAJ,CAAuB,CACrBN,EAAA17D,UAAA,CAAwB,CACxB,KAAIgD,EAAQ04D,EAAAvmD,KAAA,CAAiB6mD,CAAjB,CACZ,IAAIh5D,CAAJ,CAAW,CAAA,IACL4+C,EAAO,CAAC5+C,CAAA,CAAM,CAAN,CADH,CAELk5D,EAAO,CAACl5D,CAAA,CAAM,CAAN,CAFH,CAILm5D,EADAC,CACAD,CADQ,CAHH,CAKLE,EAAU,CALL,CAMLC,EAAe,CANV,CAOLta,EAAaL,EAAA,CAAuBC,CAAvB,CAPR,CAQL2a,EAAuB,CAAvBA,EAAWL,CAAXK,CAAkB,CAAlBA,CAEAN,EAAJ,GACEG,CAGA,CAHQH,CAAArT,SAAA,EAGR,CAFAuT,CAEA,CAFUF,CAAA1Y,WAAA,EAEV,CADA8Y,CACA,CADUJ,CAAAlT,WAAA,EACV,CAAAuT,CAAA,CAAeL,CAAAhT,gBAAA,EAJjB,CAOA;MAAO,KAAIrpD,IAAJ,CAASgiD,CAAT,CAAe,CAAf,CAAkBI,CAAAI,QAAA,EAAlB,CAAyCma,CAAzC,CAAkDH,CAAlD,CAAyDD,CAAzD,CAAkEE,CAAlE,CAA2EC,CAA3E,CAjBE,CAHU,CAwBvB,MAAOnT,IA7BkC,CAjkBjC,CAAqD,UAArD,CA9cM,CA2iBd,MAASC,EAAA,CAAoB,OAApB,CAA6BuS,EAA7B,CACNvT,EAAA,CAAiBuT,EAAjB,CAA+B,CAAC,MAAD,CAAS,IAAT,CAA/B,CADM,CAEN,SAFM,CA3iBK,CAooBd,OAqjBFa,QAAwB,CAACt3D,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB+nD,CAAvB,CAA6BrzC,CAA7B,CAAuCpC,CAAvC,CAAiD,CACvE44C,EAAA,CAAgBvkD,CAAhB,CAAuBrG,CAAvB,CAAgCN,CAAhC,CAAsC+nD,CAAtC,CACAkB,GAAA,CAActiD,CAAd,CAAqBrG,CAArB,CAA8BN,CAA9B,CAAoC+nD,CAApC,CAA0CrzC,CAA1C,CAAoDpC,CAApD,CAEAy1C,EAAAsD,aAAA,CAAoB,QACpBtD,EAAAuD,SAAAnqD,KAAA,CAAmB,QAAQ,CAACrD,CAAD,CAAQ,CACjC,MAAIiqD,EAAAiB,SAAA,CAAclrD,CAAd,CAAJ,CAAsC,IAAtC,CACIk/D,EAAA/1D,KAAA,CAAmBnJ,CAAnB,CAAJ,CAAsCwkD,UAAA,CAAWxkD,CAAX,CAAtC,CACOzB,CAH0B,CAAnC,CAMA0rD,EAAAgB,YAAA5nD,KAAA,CAAsB,QAAQ,CAACrD,CAAD,CAAQ,CACpC,GAAK,CAAAiqD,CAAAiB,SAAA,CAAclrD,CAAd,CAAL,CAA2B,CACzB,GAAK,CAAAsB,CAAA,CAAStB,CAAT,CAAL,CACE,KAAM0tD,GAAA,CAAe,QAAf,CAA0D1tD,CAA1D,CAAN,CAEFA,CAAA,CAAQA,CAAAwB,SAAA,EAJiB,CAM3B,MAAOxB,EAP6B,CAAtC,CAUA,IAAIkC,CAAAwiD,IAAJ,EAAgBxiD,CAAA0rD,MAAhB,CAA4B,CAC1B,IAAIC,CACJ5D,EAAA6D,YAAApJ,IAAA,CAAuBqJ,QAAQ,CAAC/tD,CAAD,CAAQ,CACrC,MAAOiqD,EAAAiB,SAAA,CAAclrD,CAAd,CAAP,EAA+BmB,CAAA,CAAY0sD,CAAZ,CAA/B,EAAsD7tD,CAAtD,EAA+D6tD,CAD1B,CAIvC3rD,EAAA6xB,SAAA,CAAc,KAAd,CAAqB,QAAQ,CAAC5uB,CAAD,CAAM,CAC7B/D,CAAA,CAAU+D,CAAV,CAAJ;AAAuB,CAAA7D,CAAA,CAAS6D,CAAT,CAAvB,GACEA,CADF,CACQq/C,UAAA,CAAWr/C,CAAX,CAAgB,EAAhB,CADR,CAGA0oD,EAAA,CAASvsD,CAAA,CAAS6D,CAAT,CAAA,EAAkB,CAAAo2C,KAAA,CAAMp2C,CAAN,CAAlB,CAA+BA,CAA/B,CAAqC5G,CAE9C0rD,EAAA+D,UAAA,EANiC,CAAnC,CAN0B,CAgB5B,GAAI9rD,CAAAu0B,IAAJ,EAAgBv0B,CAAA+rD,MAAhB,CAA4B,CAC1B,IAAIC,CACJjE,EAAA6D,YAAAr3B,IAAA,CAAuB03B,QAAQ,CAACnuD,CAAD,CAAQ,CACrC,MAAOiqD,EAAAiB,SAAA,CAAclrD,CAAd,CAAP,EAA+BmB,CAAA,CAAY+sD,CAAZ,CAA/B,EAAsDluD,CAAtD,EAA+DkuD,CAD1B,CAIvChsD,EAAA6xB,SAAA,CAAc,KAAd,CAAqB,QAAQ,CAAC5uB,CAAD,CAAM,CAC7B/D,CAAA,CAAU+D,CAAV,CAAJ,EAAuB,CAAA7D,CAAA,CAAS6D,CAAT,CAAvB,GACEA,CADF,CACQq/C,UAAA,CAAWr/C,CAAX,CAAgB,EAAhB,CADR,CAGA+oD,EAAA,CAAS5sD,CAAA,CAAS6D,CAAT,CAAA,EAAkB,CAAAo2C,KAAA,CAAMp2C,CAAN,CAAlB,CAA+BA,CAA/B,CAAqC5G,CAE9C0rD,EAAA+D,UAAA,EANiC,CAAnC,CAN0B,CArC2C,CAzrCzD,CA+tBd,IAghBFoS,QAAqB,CAACv3D,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB+nD,CAAvB,CAA6BrzC,CAA7B,CAAuCpC,CAAvC,CAAiD,CAGpE22C,EAAA,CAActiD,CAAd,CAAqBrG,CAArB,CAA8BN,CAA9B,CAAoC+nD,CAApC,CAA0CrzC,CAA1C,CAAoDpC,CAApD,CACAw2C,GAAA,CAAqBf,CAArB,CAEAA,EAAAsD,aAAA,CAAoB,KACpBtD,EAAA6D,YAAAloC,IAAA,CAAuBy6C,QAAQ,CAACC,CAAD,CAAaC,CAAb,CAAwB,CACrD,IAAIvgE,EAAQsgE,CAARtgE,EAAsBugE,CAC1B,OAAOtW,EAAAiB,SAAA,CAAclrD,CAAd,CAAP,EAA+Bg/D,EAAA71D,KAAA,CAAgBnJ,CAAhB,CAFsB,CAPa,CA/uCtD,CAyzBd,MAmcFwgE,QAAuB,CAAC33D,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB+nD,CAAvB,CAA6BrzC,CAA7B,CAAuCpC,CAAvC,CAAiD,CAGtE22C,EAAA,CAActiD,CAAd,CAAqBrG,CAArB,CAA8BN,CAA9B,CAAoC+nD,CAApC,CAA0CrzC,CAA1C,CAAoDpC,CAApD,CACAw2C,GAAA,CAAqBf,CAArB,CAEAA,EAAAsD,aAAA,CAAoB,OACpBtD,EAAA6D,YAAA2S,MAAA,CAAyBC,QAAQ,CAACJ,CAAD;AAAaC,CAAb,CAAwB,CACvD,IAAIvgE,EAAQsgE,CAARtgE,EAAsBugE,CAC1B,OAAOtW,EAAAiB,SAAA,CAAclrD,CAAd,CAAP,EAA+Bi/D,EAAA91D,KAAA,CAAkBnJ,CAAlB,CAFwB,CAPa,CA5vCxD,CA+2Bd,MA0ZF2gE,QAAuB,CAAC93D,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB+nD,CAAvB,CAA6B,CAE9C9oD,CAAA,CAAYe,CAAAyF,KAAZ,CAAJ,EACEnF,CAAAN,KAAA,CAAa,MAAb,CAhnmBK,EAAEhC,EAgnmBP,CASFsC,EAAAgI,GAAA,CAAW,OAAX,CANeub,QAAQ,CAACslC,CAAD,CAAK,CACtB7oD,CAAA,CAAQ,CAAR,CAAAo+D,QAAJ,EACE3W,CAAAwB,cAAA,CAAmBvpD,CAAAlC,MAAnB,CAA+BqrD,CAA/B,EAAqCA,CAAA7wC,KAArC,CAFwB,CAM5B,CAEAyvC,EAAA4B,QAAA,CAAeC,QAAQ,EAAG,CAExBtpD,CAAA,CAAQ,CAAR,CAAAo+D,QAAA,CADY1+D,CAAAlC,MACZ,EAA+BiqD,CAAAsB,WAFP,CAK1BrpD,EAAA6xB,SAAA,CAAc,OAAd,CAAuBk2B,CAAA4B,QAAvB,CAnBkD,CAzwCpC,CAq6Bd,SAuYFgV,QAA0B,CAACh4D,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB+nD,CAAvB,CAA6BrzC,CAA7B,CAAuCpC,CAAvC,CAAiDU,CAAjD,CAA0Dc,CAA1D,CAAkE,CAC1F,IAAI8qD,EAAYtS,EAAA,CAAkBx4C,CAAlB,CAA0BnN,CAA1B,CAAiC,aAAjC,CAAgD3G,CAAA6+D,YAAhD,CAAkE,CAAA,CAAlE,CAAhB,CACIC,EAAaxS,EAAA,CAAkBx4C,CAAlB,CAA0BnN,CAA1B,CAAiC,cAAjC,CAAiD3G,CAAA++D,aAAjD,CAAoE,CAAA,CAApE,CAMjBz+D,EAAAgI,GAAA,CAAW,OAAX,CAJeub,QAAQ,CAACslC,CAAD,CAAK,CAC1BpB,CAAAwB,cAAA,CAAmBjpD,CAAA,CAAQ,CAAR,CAAAo+D,QAAnB,CAAuCvV,CAAvC,EAA6CA,CAAA7wC,KAA7C,CAD0B,CAI5B,CAEAyvC,EAAA4B,QAAA,CAAeC,QAAQ,EAAG,CACxBtpD,CAAA,CAAQ,CAAR,CAAAo+D,QAAA,CAAqB3W,CAAAsB,WADG,CAO1BtB;CAAAiB,SAAA,CAAgBgW,QAAQ,CAAClhE,CAAD,CAAQ,CAC9B,MAAiB,CAAA,CAAjB,GAAOA,CADuB,CAIhCiqD,EAAAgB,YAAA5nD,KAAA,CAAsB,QAAQ,CAACrD,CAAD,CAAQ,CACpC,MAAOkE,GAAA,CAAOlE,CAAP,CAAc8gE,CAAd,CAD6B,CAAtC,CAIA7W,EAAAuD,SAAAnqD,KAAA,CAAmB,QAAQ,CAACrD,CAAD,CAAQ,CACjC,MAAOA,EAAA,CAAQ8gE,CAAR,CAAoBE,CADM,CAAnC,CAzB0F,CA5yC5E,CAu6Bd,OAAUjgE,CAv6BI,CAw6Bd,OAAUA,CAx6BI,CAy6Bd,OAAUA,CAz6BI,CA06Bd,MAASA,CA16BK,CA26Bd,KAAQA,CA36BM,CA5FhB,CA8jDIkO,GAAiB,CAAC,UAAD,CAAa,UAAb,CAAyB,SAAzB,CAAoC,QAApC,CACjB,QAAQ,CAACuF,CAAD,CAAWoC,CAAX,CAAqB1B,CAArB,CAA8Bc,CAA9B,CAAsC,CAChD,MAAO,CACLiW,SAAU,GADL,CAELD,QAAS,CAAC,UAAD,CAFJ,CAGL3C,KAAM,CACJ4I,IAAKA,QAAQ,CAACppB,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuBi/D,CAAvB,CAA8B,CACrCA,CAAA,CAAM,CAAN,CAAJ,EACE,CAAC3B,EAAA,CAAU/8D,CAAA,CAAUP,CAAAsY,KAAV,CAAV,CAAD,EAAoCglD,EAAAlnC,KAApC,EAAoDzvB,CAApD,CAA2DrG,CAA3D,CAAoEN,CAApE,CAA0Ei/D,CAAA,CAAM,CAAN,CAA1E,CAAoFvqD,CAApF,CACoDpC,CADpD,CAC8DU,CAD9D,CACuEc,CADvE,CAFuC,CADvC,CAHD,CADyC,CAD7B,CA9jDrB,CAglDIorD,GAAwB,oBAhlD5B,CA0oDIttD,GAAmBA,QAAQ,EAAG,CAChC,MAAO,CACLmY,SAAU,GADL,CAELF,SAAU,GAFL,CAGLjjB,QAASA,QAAQ,CAACu3C,CAAD,CAAMghB,CAAN,CAAe,CAC9B,MAAID,GAAAj4D,KAAA,CAA2Bk4D,CAAAxtD,QAA3B,CAAJ,CACSytD,QAA4B,CAACz4D,CAAD,CAAQmb,CAAR,CAAa9hB,CAAb,CAAmB,CACpDA,CAAA+0B,KAAA,CAAU,OAAV;AAAmBpuB,CAAAyyC,MAAA,CAAYp5C,CAAA2R,QAAZ,CAAnB,CADoD,CADxD,CAKS0tD,QAAoB,CAAC14D,CAAD,CAAQmb,CAAR,CAAa9hB,CAAb,CAAmB,CAC5C2G,CAAAjH,OAAA,CAAaM,CAAA2R,QAAb,CAA2B2tD,QAAyB,CAACxhE,CAAD,CAAQ,CAC1DkC,CAAA+0B,KAAA,CAAU,OAAV,CAAmBj3B,CAAnB,CAD0D,CAA5D,CAD4C,CANlB,CAH3B,CADyB,CA1oDlC,CAitDI8P,GAAkB,CAAC,UAAD,CAAa,QAAQ,CAAC2xD,CAAD,CAAW,CACpD,MAAO,CACLx1C,SAAU,IADL,CAELnjB,QAAS44D,QAAsB,CAACC,CAAD,CAAkB,CAC/CF,CAAA7oC,kBAAA,CAA2B+oC,CAA3B,CACA,OAAOC,SAAmB,CAAC/4D,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB,CAC/Cu/D,CAAA3oC,iBAAA,CAA0Bt2B,CAA1B,CAAmCN,CAAA2N,OAAnC,CACArN,EAAA,CAAUA,CAAA,CAAQ,CAAR,CACVqG,EAAAjH,OAAA,CAAaM,CAAA2N,OAAb,CAA0BgyD,QAA0B,CAAC7hE,CAAD,CAAQ,CAC1DwC,CAAA+W,YAAA,CAAsBvZ,CAAA,GAAUzB,CAAV,CAAsB,EAAtB,CAA2ByB,CADS,CAA5D,CAH+C,CAFF,CAF5C,CAD6C,CAAhC,CAjtDtB,CAqxDIkQ,GAA0B,CAAC,cAAD,CAAiB,UAAjB,CAA6B,QAAQ,CAACkF,CAAD,CAAeqsD,CAAf,CAAyB,CAC1F,MAAO,CACL34D,QAASg5D,QAA8B,CAACH,CAAD,CAAkB,CACvDF,CAAA7oC,kBAAA,CAA2B+oC,CAA3B,CACA,OAAOI,SAA2B,CAACl5D,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB,CACnDq2B,CAAAA,CAAgBnjB,CAAA,CAAa5S,CAAAN,KAAA,CAAaA,CAAA+tB,MAAAhgB,eAAb,CAAb,CACpBwxD,EAAA3oC,iBAAA,CAA0Bt2B,CAA1B,CAAmC+1B,CAAAQ,YAAnC,CACAv2B,EAAA,CAAUA,CAAA,CAAQ,CAAR,CACVN;CAAA6xB,SAAA,CAAc,gBAAd,CAAgC,QAAQ,CAAC/zB,CAAD,CAAQ,CAC9CwC,CAAA+W,YAAA,CAAsBvZ,CAAA,GAAUzB,CAAV,CAAsB,EAAtB,CAA2ByB,CADH,CAAhD,CAJuD,CAFF,CADpD,CADmF,CAA9D,CArxD9B,CAq1DIgQ,GAAsB,CAAC,MAAD,CAAS,QAAT,CAAmB,UAAnB,CAA+B,QAAQ,CAACwG,CAAD,CAAOR,CAAP,CAAeyrD,CAAf,CAAyB,CACxF,MAAO,CACLx1C,SAAU,GADL,CAELnjB,QAASk5D,QAA0B,CAACC,CAAD,CAAW/qC,CAAX,CAAmB,CACpD,IAAIgrC,EAAmBlsD,CAAA,CAAOkhB,CAAAnnB,WAAP,CAAvB,CACIoyD,EAAkBnsD,CAAA,CAAOkhB,CAAAnnB,WAAP,CAA0BqyD,QAAuB,CAACpiE,CAAD,CAAQ,CAC7E,MAAOwB,CAACxB,CAADwB,EAAU,EAAVA,UAAA,EADsE,CAAzD,CAGtBigE,EAAA7oC,kBAAA,CAA2BqpC,CAA3B,CAEA,OAAOI,SAAuB,CAACx5D,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB,CACnDu/D,CAAA3oC,iBAAA,CAA0Bt2B,CAA1B,CAAmCN,CAAA6N,WAAnC,CAEAlH,EAAAjH,OAAA,CAAaugE,CAAb,CAA8BG,QAA8B,EAAG,CAG7D9/D,CAAA0D,KAAA,CAAasQ,CAAA+rD,eAAA,CAAoBL,CAAA,CAAiBr5D,CAAjB,CAApB,CAAb,EAA6D,EAA7D,CAH6D,CAA/D,CAHmD,CAPD,CAFjD,CADiF,CAAhE,CAr1D1B,CA+6DImK,GAAoB9R,EAAA,CAAQ,CAC9B+qB,SAAU,GADoB,CAE9BD,QAAS,SAFqB,CAG9B3C,KAAMA,QAAQ,CAACxgB,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB+nD,CAAvB,CAA6B,CACzCA,CAAAuY,qBAAAn/D,KAAA,CAA+B,QAAQ,EAAG,CACxCwF,CAAAyyC,MAAA,CAAYp5C,CAAA6Q,SAAZ,CADwC,CAA1C,CADyC,CAHb,CAAR,CA/6DxB;AA4rEI3C,GAAmBu+C,EAAA,CAAe,EAAf,CAAmB,CAAA,CAAnB,CA5rEvB,CA4uEIn+C,GAAsBm+C,EAAA,CAAe,KAAf,CAAsB,CAAtB,CA5uE1B,CA4xEIr+C,GAAuBq+C,EAAA,CAAe,MAAf,CAAuB,CAAvB,CA5xE3B,CAs1EIj+C,GAAmBy3C,EAAA,CAAY,CACjCr/C,QAASA,QAAQ,CAACtG,CAAD,CAAUN,CAAV,CAAgB,CAC/BA,CAAA+0B,KAAA,CAAU,SAAV,CAAqB14B,CAArB,CACAiE,EAAAqc,YAAA,CAAoB,UAApB,CAF+B,CADA,CAAZ,CAt1EvB,CA+jFIjO,GAAwB,CAAC,QAAQ,EAAG,CACtC,MAAO,CACLqb,SAAU,GADL,CAELpjB,MAAO,CAAA,CAFF,CAGL8B,WAAY,GAHP,CAILohB,SAAU,GAJL,CAD+B,CAAZ,CA/jF5B,CAyxFI5X,GAAoB,EAzxFxB,CA8xFIsuD,GAAmB,CACrB,KAAQ,CAAA,CADa,CAErB,MAAS,CAAA,CAFY,CAIvBxjE,EAAA,CACE,6IAAA,MAAA,CAAA,GAAA,CADF,CAEE,QAAQ,CAAC08C,CAAD,CAAY,CAClB,IAAIjxB,EAAgByF,EAAA,CAAmB,KAAnB,CAA2BwrB,CAA3B,CACpBxnC,GAAA,CAAkBuW,CAAlB,CAAA,CAAmC,CAAC,QAAD,CAAW,YAAX,CAAyB,QAAQ,CAAC1U,CAAD,CAASE,CAAT,CAAqB,CACvF,MAAO,CACL+V,SAAU,GADL,CAELnjB,QAASA,QAAQ,CAAC6jB,CAAD,CAAWzqB,CAAX,CAAiB,CAKhC,IAAI4C;AAAKkR,CAAA,CAAO9T,CAAA,CAAKwoB,CAAL,CAAP,CAAgD,IAAhD,CAA4E,CAAA,CAA5E,CACT,OAAOg4C,SAAuB,CAAC75D,CAAD,CAAQrG,CAAR,CAAiB,CAC7CA,CAAAgI,GAAA,CAAWmxC,CAAX,CAAsB,QAAQ,CAACh+B,CAAD,CAAQ,CACpC,IAAI+I,EAAWA,QAAQ,EAAG,CACxB5hB,CAAA,CAAG+D,CAAH,CAAU,CAAC85D,OAAOhlD,CAAR,CAAV,CADwB,CAGtB8kD,GAAA,CAAiB9mB,CAAjB,CAAJ,EAAmCzlC,CAAAurB,QAAnC,CACE54B,CAAAlH,WAAA,CAAiB+kB,CAAjB,CADF,CAGE7d,CAAAE,OAAA,CAAa2d,CAAb,CAPkC,CAAtC,CAD6C,CANf,CAF7B,CADgF,CAAtD,CAFjB,CAFtB,CAmgBA,KAAIxV,GAAgB,CAAC,UAAD,CAAa,QAAQ,CAACoD,CAAD,CAAW,CAClD,MAAO,CACLwiB,aAAc,CAAA,CADT,CAELhI,WAAY,SAFP,CAGL/C,SAAU,GAHL,CAILwD,SAAU,CAAA,CAJL,CAKLtD,SAAU,GALL,CAMLyJ,MAAO,CAAA,CANF,CAOLrM,KAAMA,QAAQ,CAAC2J,CAAD,CAASrG,CAAT,CAAmBsD,CAAnB,CAA0Bg6B,CAA1B,CAAgC/2B,CAAhC,CAA6C,CAAA,IACnDhlB,CADmD,CAC5CkgB,CAD4C,CAChCw0C,CACvB5vC,EAAApxB,OAAA,CAAcquB,CAAAhf,KAAd,CAA0B4xD,QAAwB,CAAC7iE,CAAD,CAAQ,CAEpDA,CAAJ,CACOouB,CADP,EAEI8E,CAAA,CAAY,QAAQ,CAACrtB,CAAD,CAAQi9D,CAAR,CAAkB,CACpC10C,CAAA,CAAa00C,CACbj9D,EAAA,CAAMA,CAAAjH,OAAA,EAAN,CAAA,CAAwBN,CAAAq3B,cAAA,CAAuB,aAAvB,CAAuC1F,CAAAhf,KAAvC,CAAoD,GAApD,CAIxB/C,EAAA,CAAQ,CACNrI,MAAOA,CADD,CAGRyO,EAAAihD,MAAA,CAAe1vD,CAAf,CAAsB8mB,CAAA9P,OAAA,EAAtB,CAAyC8P,CAAzC,CAToC,CAAtC,CAFJ,EAeMi2C,CAQJ,GAPEA,CAAA14C,OAAA,EACA,CAAA04C,CAAA,CAAmB,IAMrB,EAJIx0C,CAIJ,GAHEA,CAAAhjB,SAAA,EACA,CAAAgjB,CAAA,CAAa,IAEf,EAAIlgB,CAAJ,GACE00D,CAIA;AAJmBz2D,EAAA,CAAc+B,CAAArI,MAAd,CAInB,CAHAyO,CAAAkhD,MAAA,CAAeoN,CAAf,CAAAlrC,KAAA,CAAsC,QAAQ,EAAG,CAC/CkrC,CAAA,CAAmB,IAD4B,CAAjD,CAGA,CAAA10D,CAAA,CAAQ,IALV,CAvBF,CAFwD,CAA1D,CAFuD,CAPtD,CAD2C,CAAhC,CAApB,CAkOIkD,GAAqB,CAAC,kBAAD,CAAqB,eAArB,CAAsC,UAAtC,CAAkD,MAAlD,CACP,QAAQ,CAAC4F,CAAD,CAAqB5C,CAArB,CAAsCE,CAAtC,CAAkDkC,CAAlD,CAAwD,CAChF,MAAO,CACLyV,SAAU,KADL,CAELF,SAAU,GAFL,CAGLwD,SAAU,CAAA,CAHL,CAILT,WAAY,SAJP,CAKLnkB,WAAYvB,EAAArI,KALP,CAML+H,QAASA,QAAQ,CAACtG,CAAD,CAAUN,CAAV,CAAgB,CAAA,IAC3B6gE,EAAS7gE,CAAAiP,UAAT4xD,EAA2B7gE,CAAA8B,IADA,CAE3Bg/D,EAAY9gE,CAAA4hC,OAAZk/B,EAA2B,EAFA,CAG3BC,EAAgB/gE,CAAAghE,WAEpB,OAAO,SAAQ,CAACr6D,CAAD,CAAQ8jB,CAAR,CAAkBsD,CAAlB,CAAyBg6B,CAAzB,CAA+B/2B,CAA/B,CAA4C,CAAA,IACrDiwC,EAAgB,CADqC,CAErDhnB,CAFqD,CAGrDinB,CAHqD,CAIrDC,CAJqD,CAMrDC,EAA4BA,QAAQ,EAAG,CACrCF,CAAJ,GACEA,CAAAl5C,OAAA,EACA,CAAAk5C,CAAA,CAAkB,IAFpB,CAIIjnB,EAAJ,GACEA,CAAA/wC,SAAA,EACA,CAAA+wC,CAAA,CAAe,IAFjB,CAIIknB,EAAJ,GACE/uD,CAAAkhD,MAAA,CAAe6N,CAAf,CAAA3rC,KAAA,CAAoC,QAAQ,EAAG,CAC7C0rC,CAAA,CAAkB,IAD2B,CAA/C,CAIA,CADAA,CACA,CADkBC,CAClB,CAAAA,CAAA,CAAiB,IALnB,CATyC,CAkB3Cx6D,EAAAjH,OAAA,CAAa4U,CAAA+sD,mBAAA,CAAwBR,CAAxB,CAAb,CAA8CS,QAA6B,CAACx/D,CAAD,CAAM,CAC/E,IAAIy/D;AAAiBA,QAAQ,EAAG,CAC1B,CAAAriE,CAAA,CAAU6hE,CAAV,CAAJ,EAAkCA,CAAlC,EAAmD,CAAAp6D,CAAAyyC,MAAA,CAAY2nB,CAAZ,CAAnD,EACE7uD,CAAA,EAF4B,CAAhC,CAKIsvD,EAAe,EAAEP,CAEjBn/D,EAAJ,EAGEgT,CAAA,CAAiBhT,CAAjB,CAAsB,CAAA,CAAtB,CAAA0zB,KAAA,CAAiC,QAAQ,CAAC0H,CAAD,CAAW,CAClD,GAAIskC,CAAJ,GAAqBP,CAArB,CAAA,CACA,IAAIL,EAAWj6D,CAAA8lB,KAAA,EACfs7B,EAAAr1B,SAAA,CAAgBwK,CAQZv5B,EAAAA,CAAQqtB,CAAA,CAAY4vC,CAAZ,CAAsB,QAAQ,CAACj9D,CAAD,CAAQ,CAChDy9D,CAAA,EACAhvD,EAAAihD,MAAA,CAAe1vD,CAAf,CAAsB,IAAtB,CAA4B8mB,CAA5B,CAAA+K,KAAA,CAA2C+rC,CAA3C,CAFgD,CAAtC,CAKZtnB,EAAA,CAAe2mB,CACfO,EAAA,CAAiBx9D,CAEjBs2C,EAAAH,MAAA,CAAmB,uBAAnB,CAA4Ch4C,CAA5C,CACA6E,EAAAyyC,MAAA,CAAY0nB,CAAZ,CAnBA,CADkD,CAApD,CAqBG,QAAQ,EAAG,CACRU,CAAJ,GAAqBP,CAArB,GACEG,CAAA,EACA,CAAAz6D,CAAAmzC,MAAA,CAAY,sBAAZ,CAAoCh4C,CAApC,CAFF,CADY,CArBd,CA2BA,CAAA6E,CAAAmzC,MAAA,CAAY,0BAAZ,CAAwCh4C,CAAxC,CA9BF,GAgCEs/D,CAAA,EACA,CAAArZ,CAAAr1B,SAAA,CAAgB,IAjClB,CAR+E,CAAjF,CAxByD,CAL5B,CAN5B,CADyE,CADzD,CAlOzB,CA6TI3gB,GAAgC,CAAC,UAAD,CAClC,QAAQ,CAACwtD,CAAD,CAAW,CACjB,MAAO,CACLx1C,SAAU,KADL,CAELF,SAAW,IAFN,CAGLC,QAAS,WAHJ,CAIL3C,KAAMA,QAAQ,CAACxgB,CAAD,CAAQ8jB,CAAR,CAAkBsD,CAAlB,CAAyBg6B,CAAzB,CAA+B,CACvC,KAAA9gD,KAAA,CAAWwjB,CAAA,CAAS,CAAT,CAAAnrB,SAAA,EAAX,CAAJ,EAIEmrB,CAAA7mB,MAAA,EACA,CAAA27D,CAAA,CAASnpD,EAAA,CAAoB2xC,CAAAr1B,SAApB;AAAmCt2B,CAAnC,CAAA+a,WAAT,CAAA,CAAkExQ,CAAlE,CACI86D,QAA8B,CAAC99D,CAAD,CAAQ,CACxC8mB,CAAA1mB,OAAA,CAAgBJ,CAAhB,CADwC,CAD1C,CAGG,CAAC8nB,oBAAqBhB,CAAtB,CAHH,CALF,GAYAA,CAAAzmB,KAAA,CAAc+jD,CAAAr1B,SAAd,CACA,CAAA6sC,CAAA,CAAS90C,CAAAmJ,SAAA,EAAT,CAAA,CAA8BjtB,CAA9B,CAbA,CAD2C,CAJxC,CADU,CADe,CA7TpC,CA8YIyI,GAAkB62C,EAAA,CAAY,CAChCp8B,SAAU,GADsB,CAEhCjjB,QAASA,QAAQ,EAAG,CAClB,MAAO,CACLmpB,IAAKA,QAAQ,CAACppB,CAAD,CAAQrG,CAAR,CAAiBysB,CAAjB,CAAwB,CACnCpmB,CAAAyyC,MAAA,CAAYrsB,CAAA5d,OAAZ,CADmC,CADhC,CADW,CAFY,CAAZ,CA9YtB,CA2eIyB,GAAkBA,QAAQ,EAAG,CAC/B,MAAO,CACLmZ,SAAU,GADL,CAELF,SAAU,GAFL,CAGLC,QAAS,SAHJ,CAIL3C,KAAMA,QAAQ,CAACxgB,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB+nD,CAAvB,CAA6B,CAGzC,IAAIp3C,EAASrQ,CAAAN,KAAA,CAAaA,CAAA+tB,MAAApd,OAAb,CAATA,EAA4C,IAAhD,CACI+wD,EAA6B,OAA7BA,GAAa1hE,CAAAopD,OADjB,CAEIvhD,EAAY65D,CAAA,CAAalqD,CAAA,CAAK7G,CAAL,CAAb,CAA4BA,CAiB5Co3C,EAAAuD,SAAAnqD,KAAA,CAfYqC,QAAQ,CAAC66D,CAAD,CAAY,CAE9B,GAAI,CAAAp/D,CAAA,CAAYo/D,CAAZ,CAAJ,CAAA,CAEA,IAAIt9C,EAAO,EAEPs9C,EAAJ,EACEthE,CAAA,CAAQshE,CAAAj+D,MAAA,CAAgByH,CAAhB,CAAR,CAAoC,QAAQ,CAAC/J,CAAD,CAAQ,CAC9CA,CAAJ,EAAWijB,CAAA5f,KAAA,CAAUugE,CAAA,CAAalqD,CAAA,CAAK1Z,CAAL,CAAb,CAA2BA,CAArC,CADuC,CAApD,CAKF,OAAOijB,EAVP,CAF8B,CAehC,CACAgnC,EAAAgB,YAAA5nD,KAAA,CAAsB,QAAQ,CAACrD,CAAD,CAAQ,CACpC,MAAIhB,EAAA,CAAQgB,CAAR,CAAJ;AACSA,CAAA8G,KAAA,CAAW+L,CAAX,CADT,CAIOtU,CAL6B,CAAtC,CASA0rD,EAAAiB,SAAA,CAAgBgW,QAAQ,CAAClhE,CAAD,CAAQ,CAC9B,MAAO,CAACA,CAAR,EAAiB,CAACA,CAAApB,OADY,CAhCS,CAJtC,CADwB,CA3ejC,CA+hBI+wD,GAAc,UA/hBlB,CAgiBIC,GAAgB,YAhiBpB,CAiiBItF,GAAiB,aAjiBrB,CAkiBIC,GAAc,UAliBlB,CAqiBIwF,GAAgB,YAriBpB,CAwiBIrC,GAAiB,IAAIlvD,CAAJ,CAAW,SAAX,CAxiBrB,CAgvBIqlE,GAAoB,CAAC,QAAD,CAAW,mBAAX,CAAgC,QAAhC,CAA0C,UAA1C,CAAsD,QAAtD,CAAgE,UAAhE,CAA4E,UAA5E,CAAwF,YAAxF,CAAsG,IAAtG,CAA4G,cAA5G,CACpB,QAAQ,CAAC7wC,CAAD,CAAShe,CAAT,CAA4Bib,CAA5B,CAAmCtD,CAAnC,CAA6C3W,CAA7C,CAAqD1B,CAArD,CAA+D8C,CAA/D,CAAyElB,CAAzE,CAAqFE,CAArF,CAAyFhB,CAAzF,CAAuG,CAEjH,IAAA0uD,YAAA,CADA,IAAAvY,WACA,CADkBzhC,MAAAgjC,IAElB,KAAAiX,gBAAA,CAAuBxlE,CACvB,KAAAuvD,YAAA,CAAmB,EACnB,KAAAkW,iBAAA,CAAwB,EACxB,KAAAxW,SAAA,CAAgB,EAChB,KAAAvC,YAAA,CAAmB,EACnB,KAAAuX,qBAAA,CAA4B,EAC5B,KAAAyB,WAAA,CAAkB,CAAA,CAClB;IAAAC,SAAA,CAAgB,CAAA,CAChB,KAAApb,UAAA,CAAiB,CAAA,CACjB,KAAAD,OAAA,CAAc,CAAA,CACd,KAAAE,OAAA,CAAc,CAAA,CACd,KAAAC,SAAA,CAAgB,CAAA,CAChB,KAAAP,OAAA,CAAc,EACd,KAAAC,UAAA,CAAiB,EACjB,KAAAC,SAAA,CAAgBpqD,CAChB,KAAAqqD,MAAA,CAAaxzC,CAAA,CAAa6a,CAAAtoB,KAAb,EAA2B,EAA3B,CAA+B,CAAA,CAA/B,CAAA,CAAsCqrB,CAAtC,CAlBoG,KAqB7GmxC,EAAgBnuD,CAAA,CAAOia,CAAAtd,QAAP,CArB6F,CAsB7GyxD,EAAsBD,CAAA/vC,OAtBuF,CAuB7GiwC,EAAaF,CAvBgG,CAwB7GG,EAAaF,CAxBgG,CAyB7GG,EAAkB,IAzB2F,CA0B7Gta,EAAO,IAEX,KAAAua,aAAA,CAAoBC,QAAQ,CAAC17C,CAAD,CAAU,CAEpC,IADAkhC,CAAAoD,SACA,CADgBtkC,CAChB,GAAeA,CAAA27C,aAAf,CAAqC,CAAA,IAC/BC,EAAoB3uD,CAAA,CAAOia,CAAAtd,QAAP,CAAuB,IAAvB,CADW,CAE/BiyD,EAAoB5uD,CAAA,CAAOia,CAAAtd,QAAP,CAAuB,QAAvB,CAExB0xD,EAAA,CAAaA,QAAQ,CAACrxC,CAAD,CAAS,CAC5B,IAAIstC,EAAa6D,CAAA,CAAcnxC,CAAd,CACb3zB,EAAA,CAAWihE,CAAX,CAAJ,GACEA,CADF,CACeqE,CAAA,CAAkB3xC,CAAlB,CADf,CAGA,OAAOstC,EALqB,CAO9BgE,EAAA,CAAaA,QAAQ,CAACtxC,CAAD,CAASyG,CAAT,CAAmB,CAClCp6B,CAAA,CAAW8kE,CAAA,CAAcnxC,CAAd,CAAX,CAAJ,CACE4xC,CAAA,CAAkB5xC,CAAlB,CAA0B,CAAC6xC,KAAM5a,CAAA6Z,YAAP,CAA1B,CADF,CAGEM,CAAA,CAAoBpxC,CAApB,CAA4Bi3B,CAAA6Z,YAA5B,CAJoC,CAXL,CAArC,IAkBO,IAAK1vC,CAAA+vC,CAAA/vC,OAAL,CACL,KAAMs5B,GAAA,CAAe,WAAf,CACFz9B,CAAAtd,QADE,CACahN,EAAA,CAAYgnB,CAAZ,CADb,CAAN;AArBkC,CA8CtC,KAAAk/B,QAAA,CAAe9qD,CAoBf,KAAAmqD,SAAA,CAAgB4Z,QAAQ,CAAC9kE,CAAD,CAAQ,CAC9B,MAAOmB,EAAA,CAAYnB,CAAZ,CAAP,EAAuC,EAAvC,GAA6BA,CAA7B,EAAuD,IAAvD,GAA6CA,CAA7C,EAA+DA,CAA/D,GAAyEA,CAD3C,CA9FiF,KAkG7GsoD,EAAa37B,CAAA/hB,cAAA,CAAuB,iBAAvB,CAAb09C,EAA0DE,EAlGmD,CAmG7Guc,EAAyB,CAwB7B/a,GAAA,CAAqB,CACnBC,KAAM,IADa,CAEnBt9B,SAAUA,CAFS,CAGnBu9B,IAAKA,QAAQ,CAAC7C,CAAD,CAASnb,CAAT,CAAmB,CAC9Bmb,CAAA,CAAOnb,CAAP,CAAA,CAAmB,CAAA,CADW,CAHb,CAMnBie,MAAOA,QAAQ,CAAC9C,CAAD,CAASnb,CAAT,CAAmB,CAChC,OAAOmb,CAAA,CAAOnb,CAAP,CADyB,CANf,CASnBoc,WAAYA,CATO,CAUnBh0C,SAAUA,CAVS,CAArB,CAwBA,KAAAk2C,aAAA,CAAoBwa,QAAQ,EAAG,CAC7B/a,CAAApB,OAAA,CAAc,CAAA,CACdoB,EAAAnB,UAAA,CAAiB,CAAA,CACjBx0C,EAAAuK,YAAA,CAAqB8N,CAArB,CAA+B49B,EAA/B,CACAj2C,EAAAsK,SAAA,CAAkB+N,CAAlB,CAA4B29B,EAA5B,CAJ6B,CAkB/B,KAAAF,UAAA,CAAiB6a,QAAQ,EAAG,CAC1Bhb,CAAApB,OAAA,CAAc,CAAA,CACdoB,EAAAnB,UAAA,CAAiB,CAAA,CACjBx0C,EAAAuK,YAAA,CAAqB8N,CAArB,CAA+B29B,EAA/B,CACAh2C,EAAAsK,SAAA,CAAkB+N,CAAlB,CAA4B49B,EAA5B,CACAjC,EAAA8B,UAAA,EAL0B,CAoB5B,KAAAQ,cAAA,CAAqBsa,QAAQ,EAAG,CAC9Bjb,CAAAia,SAAA,CAAgB,CAAA,CAChBja,EAAAga,WAAA,CAAkB,CAAA,CAClB3vD,EAAAo2C,SAAA,CAAkB/9B,CAAlB;AA1YkBw4C,cA0YlB,CAzYgBC,YAyYhB,CAH8B,CAiBhC,KAAAC,YAAA,CAAmBC,QAAQ,EAAG,CAC5Brb,CAAAia,SAAA,CAAgB,CAAA,CAChBja,EAAAga,WAAA,CAAkB,CAAA,CAClB3vD,EAAAo2C,SAAA,CAAkB/9B,CAAlB,CA1ZgBy4C,YA0ZhB,CA3ZkBD,cA2ZlB,CAH4B,CAiE9B,KAAAhc,mBAAA,CAA0Boc,QAAQ,EAAG,CACnCnuD,CAAAsR,OAAA,CAAgB67C,CAAhB,CACAta,EAAAsB,WAAA,CAAkBtB,CAAAub,yBAClBvb,EAAA4B,QAAA,EAHmC,CAkBrC,KAAAmC,UAAA,CAAiByX,QAAQ,EAAG,CAE1B,GAAI,CAAAnkE,CAAA,CAAS2oD,CAAA6Z,YAAT,CAAJ,EAAkC,CAAAvoB,KAAA,CAAM0O,CAAA6Z,YAAN,CAAlC,CAAA,CASA,IAAIxD,EAAarW,CAAA8Z,gBAAjB,CAMI2B,EAAYzb,CAAAlB,OANhB,CAOI4c,EAAiB1b,CAAA6Z,YAPrB,CASI8B,EAAe3b,CAAAoD,SAAfuY,EAAgC3b,CAAAoD,SAAAuY,aAEpC3b,EAAA4b,gBAAA,CAPkB5b,CAAAxB,OAAA,CADDwB,CAAAsD,aACC,EADoB,OACpB,CAAAuY,CAA0B,CAAA,CAA1BA,CAAkCvnE,CAOpD,CAAkC+hE,CAAlC,CAhBgBrW,CAAAub,yBAgBhB,CAAyD,QAAQ,CAACO,CAAD,CAAW,CAGrEH,CAAL,EAAqBF,CAArB,GAAmCK,CAAnC,GAKE9b,CAAA6Z,YAEA;AAFmBiC,CAAA,CAAWzF,CAAX,CAAwB/hE,CAE3C,CAAI0rD,CAAA6Z,YAAJ,GAAyB6B,CAAzB,EACE1b,CAAA+b,oBAAA,EARJ,CAH0E,CAA5E,CApBA,CAF0B,CAwC5B,KAAAH,gBAAA,CAAuBI,QAAQ,CAACC,CAAD,CAAa5F,CAAb,CAAyBC,CAAzB,CAAoC4F,CAApC,CAAkD,CAkC/EC,QAASA,EAAqB,EAAG,CAC/B,IAAIC,EAAsB,CAAA,CAC1BpnE,EAAA,CAAQgrD,CAAA6D,YAAR,CAA0B,QAAQ,CAACwY,CAAD,CAAY3+D,CAAZ,CAAkB,CAClD,IAAIrE,EAASgjE,CAAA,CAAUhG,CAAV,CAAsBC,CAAtB,CACb8F,EAAA,CAAsBA,CAAtB,EAA6C/iE,CAC7CusD,EAAA,CAAYloD,CAAZ,CAAkBrE,CAAlB,CAHkD,CAApD,CAKA,OAAK+iE,EAAL,CAMO,CAAA,CANP,EACEpnE,CAAA,CAAQgrD,CAAA+Z,iBAAR,CAA+B,QAAQ,CAACzhC,CAAD,CAAI56B,CAAJ,CAAU,CAC/CkoD,CAAA,CAAYloD,CAAZ,CAAkB,IAAlB,CAD+C,CAAjD,CAGO,CAAA,CAAA,CAJT,CAP+B,CAgBjC4+D,QAASA,EAAsB,EAAG,CAChC,IAAIC,EAAoB,EAAxB,CACIT,EAAW,CAAA,CACf9mE,EAAA,CAAQgrD,CAAA+Z,iBAAR,CAA+B,QAAQ,CAACsC,CAAD,CAAY3+D,CAAZ,CAAkB,CACvD,IAAI44B,EAAU+lC,CAAA,CAAUhG,CAAV,CAAsBC,CAAtB,CACd,IAAmBhgC,CAAAA,CAAnB,EAl4rBQ,CAAAlhC,CAAA,CAk4rBWkhC,CAl4rBA7I,KAAX,CAk4rBR,CACE,KAAMg2B,GAAA,CAAe,kBAAf,CAC0EntB,CAD1E,CAAN,CAGFsvB,CAAA,CAAYloD,CAAZ,CAAkBpJ,CAAlB,CACAioE,EAAAnjE,KAAA,CAAuBk9B,CAAA7I,KAAA,CAAa,QAAQ,EAAG,CAC7Cm4B,CAAA,CAAYloD,CAAZ,CAAkB,CAAA,CAAlB,CAD6C,CAAxB,CAEpB,QAAQ,CAACkd,CAAD,CAAQ,CACjBkhD,CAAA,CAAW,CAAA,CACXlW,EAAA,CAAYloD,CAAZ,CAAkB,CAAA,CAAlB,CAFiB,CAFI,CAAvB,CAPuD,CAAzD,CAcK6+D,EAAA5nE,OAAL,CAGEwX,CAAA2J,IAAA,CAAOymD,CAAP,CAAA9uC,KAAA,CAA+B,QAAQ,EAAG,CACxC+uC,CAAA,CAAeV,CAAf,CADwC,CAA1C,CAEGhlE,CAFH,CAHF,CACE0lE,CAAA,CAAe,CAAA,CAAf,CAlB8B,CA0BlC5W,QAASA,EAAW,CAACloD,CAAD,CAAO+nD,CAAP,CAAgB,CAC9BgX,CAAJ;AAA6B3B,CAA7B,EACE9a,CAAAF,aAAA,CAAkBpiD,CAAlB,CAAwB+nD,CAAxB,CAFgC,CAMpC+W,QAASA,EAAc,CAACV,CAAD,CAAW,CAC5BW,CAAJ,GAA6B3B,CAA7B,EAEEoB,CAAA,CAAaJ,CAAb,CAH8B,CAjFlChB,CAAA,EACA,KAAI2B,EAAuB3B,CAa3B4B,UAA2B,CAACT,CAAD,CAAa,CACtC,IAAIU,EAAW3c,CAAAsD,aAAXqZ,EAAgC,OACpC,IAAIV,CAAJ,GAAmB3nE,CAAnB,CACEsxD,CAAA,CAAY+W,CAAZ,CAAsB,IAAtB,CADF,KAIE,IADA/W,CAAA,CAAY+W,CAAZ,CAAsBV,CAAtB,CACKA,CAAAA,CAAAA,CAAL,CAOE,MANAjnE,EAAA,CAAQgrD,CAAA6D,YAAR,CAA0B,QAAQ,CAACvrB,CAAD,CAAI56B,CAAJ,CAAU,CAC1CkoD,CAAA,CAAYloD,CAAZ,CAAkB,IAAlB,CAD0C,CAA5C,CAMO,CAHP1I,CAAA,CAAQgrD,CAAA+Z,iBAAR,CAA+B,QAAQ,CAACzhC,CAAD,CAAI56B,CAAJ,CAAU,CAC/CkoD,CAAA,CAAYloD,CAAZ,CAAkB,IAAlB,CAD+C,CAAjD,CAGO,CAAA,CAAA,CAGX,OAAO,CAAA,CAhB+B,CAAxCg/D,CAVK,CAAmBT,CAAnB,CAAL,CAIKE,CAAA,EAAL,CAIAG,CAAA,EAJA,CACEE,CAAA,CAAe,CAAA,CAAf,CALF,CACEA,CAAA,CAAe,CAAA,CAAf,CAN6E,CAqGjF,KAAAnd,iBAAA,CAAwBud,QAAQ,EAAG,CACjC,IAAItG,EAAYtW,CAAAsB,WAEhBn0C,EAAAsR,OAAA,CAAgB67C,CAAhB,CAKA,IAAIta,CAAAub,yBAAJ,GAAsCjF,CAAtC,EAAkE,EAAlE,GAAoDA,CAApD,EAAyEtW,CAAAuB,sBAAzE,CAGAvB,CAAAub,yBAMA,CANgCjF,CAMhC,CAHItW,CAAAnB,UAGJ,EAFE,IAAAsB,UAAA,EAEF,CAAA,IAAA0c,mBAAA,EAjBiC,CAoBnC,KAAAA,mBAAA;AAA0BC,QAAQ,EAAG,CAEnC,IAAIzG,EADYrW,CAAAub,yBAChB,CACIM,EAAc3kE,CAAA,CAAYm/D,CAAZ,CAAA,CAA0B/hE,CAA1B,CAAsC,CAAA,CAExD,IAAIunE,CAAJ,CACE,IAAS,IAAAjmE,EAAI,CAAb,CAAgBA,CAAhB,CAAoBoqD,CAAAuD,SAAA5uD,OAApB,CAA0CiB,CAAA,EAA1C,CAEE,GADAygE,CACI,CADSrW,CAAAuD,SAAA,CAAc3tD,CAAd,CAAA,CAAiBygE,CAAjB,CACT,CAAAn/D,CAAA,CAAYm/D,CAAZ,CAAJ,CAA6B,CAC3BwF,CAAA,CAAc,CAAA,CACd,MAF2B,CAM7BxkE,CAAA,CAAS2oD,CAAA6Z,YAAT,CAAJ,EAAkCvoB,KAAA,CAAM0O,CAAA6Z,YAAN,CAAlC,GAEE7Z,CAAA6Z,YAFF,CAEqBO,CAAA,CAAWrxC,CAAX,CAFrB,CAIA,KAAI2yC,EAAiB1b,CAAA6Z,YAArB,CACI8B,EAAe3b,CAAAoD,SAAfuY,EAAgC3b,CAAAoD,SAAAuY,aACpC3b,EAAA8Z,gBAAA,CAAuBzD,CAEnBsF,EAAJ,GACE3b,CAAA6Z,YAkBA,CAlBmBxD,CAkBnB,CAAIrW,CAAA6Z,YAAJ,GAAyB6B,CAAzB,EACE1b,CAAA+b,oBAAA,EApBJ,CAOA/b,EAAA4b,gBAAA,CAAqBC,CAArB,CAAkCxF,CAAlC,CAA8CrW,CAAAub,yBAA9C,CAA6E,QAAQ,CAACO,CAAD,CAAW,CACzFH,CAAL,GAKE3b,CAAA6Z,YAMF,CANqBiC,CAAA,CAAWzF,CAAX,CAAwB/hE,CAM7C,CAAI0rD,CAAA6Z,YAAJ,GAAyB6B,CAAzB,EACE1b,CAAA+b,oBAAA,EAZF,CAD8F,CAAhG,CA7BmC,CA+CrC,KAAAA,oBAAA,CAA2BgB,QAAQ,EAAG,CACpC1C,CAAA,CAAWtxC,CAAX;AAAmBi3B,CAAA6Z,YAAnB,CACA7kE,EAAA,CAAQgrD,CAAAuY,qBAAR,CAAmC,QAAQ,CAACz8C,CAAD,CAAW,CACpD,GAAI,CACFA,CAAA,EADE,CAEF,MAAOhgB,CAAP,CAAU,CACViP,CAAA,CAAkBjP,CAAlB,CADU,CAHwC,CAAtD,CAFoC,CAmDtC,KAAA0lD,cAAA,CAAqBwb,QAAQ,CAACjnE,CAAD,CAAQuxD,CAAR,CAAiB,CAC5CtH,CAAAsB,WAAA,CAAkBvrD,CACbiqD,EAAAoD,SAAL,EAAsB6Z,CAAAjd,CAAAoD,SAAA6Z,gBAAtB,EACEjd,CAAAkd,0BAAA,CAA+B5V,CAA/B,CAH0C,CAO9C,KAAA4V,0BAAA,CAAiCC,QAAQ,CAAC7V,CAAD,CAAU,CAAA,IAC7C8V,EAAgB,CAD6B,CAE7Ct+C,EAAUkhC,CAAAoD,SAGVtkC,EAAJ,EAAe3nB,CAAA,CAAU2nB,CAAAu+C,SAAV,CAAf,GACEA,CACA,CADWv+C,CAAAu+C,SACX,CAAIhmE,CAAA,CAASgmE,CAAT,CAAJ,CACED,CADF,CACkBC,CADlB,CAEWhmE,CAAA,CAASgmE,CAAA,CAAS/V,CAAT,CAAT,CAAJ,CACL8V,CADK,CACWC,CAAA,CAAS/V,CAAT,CADX,CAEIjwD,CAAA,CAASgmE,CAAA,CAAS,SAAT,CAAT,CAFJ,GAGLD,CAHK,CAGWC,CAAA,CAAS,SAAT,CAHX,CAJT,CAWAlwD,EAAAsR,OAAA,CAAgB67C,CAAhB,CACI8C,EAAJ,CACE9C,CADF,CACoBntD,CAAA,CAAS,QAAQ,EAAG,CACpC6yC,CAAAX,iBAAA,EADoC,CAApB,CAEf+d,CAFe,CADpB,CAIWnxD,CAAAurB,QAAJ,CACLwoB,CAAAX,iBAAA,EADK,CAGLt2B,CAAAjqB,OAAA,CAAc,QAAQ,EAAG,CACvBkhD,CAAAX,iBAAA,EADuB,CAAzB,CAxB+C,CAsCnDt2B,EAAApxB,OAAA,CAAc2lE,QAAqB,EAAG,CACpC,IAAIjH;AAAa+D,CAAA,CAAWrxC,CAAX,CAIjB,IAAIstC,CAAJ,GAAmBrW,CAAA6Z,YAAnB,CAAqC,CACnC7Z,CAAA6Z,YAAA,CAAmB7Z,CAAA8Z,gBAAnB,CAA0CzD,CAM1C,KAPmC,IAG/BkH,EAAavd,CAAAgB,YAHkB,CAI/Bx8B,EAAM+4C,CAAA5oE,OAJyB,CAM/B2hE,EAAYD,CAChB,CAAO7xC,CAAA,EAAP,CAAA,CACE8xC,CAAA,CAAYiH,CAAA,CAAW/4C,CAAX,CAAA,CAAgB8xC,CAAhB,CAEVtW,EAAAsB,WAAJ,GAAwBgV,CAAxB,GACEtW,CAAAsB,WAGA,CAHkBtB,CAAAub,yBAGlB,CAHkDjF,CAGlD,CAFAtW,CAAA4B,QAAA,EAEA,CAAA5B,CAAA4b,gBAAA,CAAqBtnE,CAArB,CAAgC+hE,CAAhC,CAA4CC,CAA5C,CAAuDx/D,CAAvD,CAJF,CAVmC,CAkBrC,MAAOu/D,EAvB6B,CAAtC,CA7kBiH,CAD3F,CAhvBxB,CA6/CI1tD,GAAmB,CAAC,YAAD,CAAe,QAAQ,CAACsD,CAAD,CAAa,CACzD,MAAO,CACL+V,SAAU,GADL,CAELD,QAAS,CAAC,SAAD,CAAY,QAAZ,CAAsB,kBAAtB,CAFJ,CAGLrhB,WAAYk5D,EAHP,CAOL93C,SAAU,CAPL,CAQLjjB,QAAS2+D,QAAuB,CAACjlE,CAAD,CAAU,CAExCA,CAAAoc,SAAA,CAAiB0rC,EAAjB,CAAA1rC,SAAA,CAr+BgBumD,cAq+BhB,CAAAvmD,SAAA,CAAoE+wC,EAApE,CAEA,OAAO,CACL19B,IAAKy1C,QAAuB,CAAC7+D,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuBi/D,CAAvB,CAA8B,CAAA,IACpDwG,EAAYxG,CAAA,CAAM,CAAN,CADwC,CAEpDyG,EAAWzG,CAAA,CAAM,CAAN,CAAXyG,EAAuBpf,EAE3Bmf,EAAAnD,aAAA,CAAuBrD,CAAA,CAAM,CAAN,CAAvB,EAAmCA,CAAA,CAAM,CAAN,CAAA9T,SAAnC,CAGAua;CAAA1e,YAAA,CAAqBye,CAArB,CAEAzlE,EAAA6xB,SAAA,CAAc,MAAd,CAAsB,QAAQ,CAAC0F,CAAD,CAAW,CACnCkuC,CAAA/e,MAAJ,GAAwBnvB,CAAxB,EACEmuC,CAAAne,gBAAA,CAAyBke,CAAzB,CAAoCluC,CAApC,CAFqC,CAAzC,CAMA5wB,EAAA6rB,IAAA,CAAU,UAAV,CAAsB,QAAQ,EAAG,CAC/BkzC,CAAA/d,eAAA,CAAwB8d,CAAxB,CAD+B,CAAjC,CAfwD,CADrD,CAoBLz1C,KAAM21C,QAAwB,CAACh/D,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuBi/D,CAAvB,CAA8B,CAC1D,IAAIwG,EAAYxG,CAAA,CAAM,CAAN,CAChB,IAAIwG,CAAAta,SAAJ,EAA0Bsa,CAAAta,SAAAya,SAA1B,CACEtlE,CAAAgI,GAAA,CAAWm9D,CAAAta,SAAAya,SAAX,CAAwC,QAAQ,CAACzc,CAAD,CAAK,CACnDsc,CAAAR,0BAAA,CAAoC9b,CAApC,EAA0CA,CAAA7wC,KAA1C,CADmD,CAArD,CAKFhY,EAAAgI,GAAA,CAAW,MAAX,CAAmB,QAAQ,CAAC6gD,CAAD,CAAK,CAC1Bsc,CAAAzD,SAAJ,GAEIhuD,CAAAurB,QAAJ,CACE54B,CAAAlH,WAAA,CAAiBgmE,CAAAtC,YAAjB,CADF,CAGEx8D,CAAAE,OAAA,CAAa4+D,CAAAtC,YAAb,CALF,CAD8B,CAAhC,CAR0D,CApBvD,CAJiC,CARrC,CADkD,CAApC,CA7/CvB,CAqjDI0C,GAAiB,uBArjDrB,CA6sDI/zD,GAA0BA,QAAQ,EAAG,CACvC,MAAO,CACLiY,SAAU,GADL,CAELthB,WAAY,CAAC,QAAD,CAAW,QAAX,CAAqB,QAAQ,CAACqoB,CAAD,CAASC,CAAT,CAAiB,CACxD,IAAI+0C;AAAO,IACX,KAAA3a,SAAA,CAAgBr6B,CAAAsoB,MAAA,CAAaroB,CAAAlf,eAAb,CAEZ,KAAAs5C,SAAAya,SAAJ,GAA+BvpE,CAA/B,EACE,IAAA8uD,SAAA6Z,gBAEA,CAFgC,CAAA,CAEhC,CAAA,IAAA7Z,SAAAya,SAAA,CAAyBpuD,CAAA,CAAK,IAAA2zC,SAAAya,SAAA1hE,QAAA,CAA+B2hE,EAA/B,CAA+C,QAAQ,EAAG,CACtFC,CAAA3a,SAAA6Z,gBAAA,CAAgC,CAAA,CAChC,OAAO,GAF+E,CAA1D,CAAL,CAH3B,EAQE,IAAA7Z,SAAA6Z,gBARF,CAQkC,CAAA,CAZsB,CAA9C,CAFP,CADgC,CA7sDzC,CA62DI11D,GAAyB22C,EAAA,CAAY,CAAE54B,SAAU,CAAA,CAAZ,CAAkBxD,SAAU,GAA5B,CAAZ,CA72D7B,CA2hEIra,GAAuB,CAAC,SAAD,CAAY,cAAZ,CAA4B,QAAQ,CAAC8xC,CAAD,CAAUpuC,CAAV,CAAwB,CAAA,IACjF6yD,EAAQ,KADyE,CAEjFC,EAAU,oBAEd,OAAO,CACLj8C,SAAU,IADL,CAEL5C,KAAMA,QAAQ,CAACxgB,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB,CA2CnCimE,QAASA,EAAiB,CAACC,CAAD,CAAU,CAClC5lE,CAAA81B,KAAA,CAAa8vC,CAAb,EAAwB,EAAxB,CADkC,CA3CD,IAC/BC,EAAYnmE,CAAAmkC,MADmB,CAE/BiiC,EAAUpmE,CAAA+tB,MAAAuQ,KAAV8nC,EAA6B9lE,CAAAN,KAAA,CAAaA,CAAA+tB,MAAAuQ,KAAb,CAFE,CAG/BvoB,EAAS/V,CAAA+V,OAATA;AAAwB,CAHO,CAI/BswD,EAAQ1/D,CAAAyyC,MAAA,CAAYgtB,CAAZ,CAARC,EAAgC,EAJD,CAK/BC,EAAc,EALiB,CAM/B3sC,EAAczmB,CAAAymB,YAAA,EANiB,CAO/BC,EAAY1mB,CAAA0mB,UAAA,EAPmB,CAQ/B2sC,EAAmB5sC,CAAnB4sC,CAAiCJ,CAAjCI,CAA6C,GAA7CA,CAAmDxwD,CAAnDwwD,CAA4D3sC,CAR7B,CAS/B4sC,EAAet/D,EAAArI,KATgB,CAU/B4nE,CAEJ1pE,EAAA,CAAQiD,CAAR,CAAc,QAAQ,CAAC+6B,CAAD,CAAa2rC,CAAb,CAA4B,CAChD,IAAIC,EAAWX,CAAApvD,KAAA,CAAa8vD,CAAb,CACXC,EAAJ,GACMC,CACJ,EADeD,CAAA,CAAS,CAAT,CAAA,CAAc,GAAd,CAAoB,EACnC,EADyCpmE,CAAA,CAAUomE,CAAA,CAAS,CAAT,CAAV,CACzC,CAAAN,CAAA,CAAMO,CAAN,CAAA,CAAiBtmE,CAAAN,KAAA,CAAaA,CAAA+tB,MAAA,CAAW24C,CAAX,CAAb,CAFnB,CAFgD,CAAlD,CAOA3pE,EAAA,CAAQspE,CAAR,CAAe,QAAQ,CAACtrC,CAAD,CAAa79B,CAAb,CAAkB,CACvCopE,CAAA,CAAYppE,CAAZ,CAAA,CAAmBgW,CAAA,CAAa6nB,CAAA72B,QAAA,CAAmB6hE,CAAnB,CAA0BQ,CAA1B,CAAb,CADoB,CAAzC,CAKA5/D,EAAAjH,OAAA,CAAaymE,CAAb,CAAwBU,QAA+B,CAAC1kD,CAAD,CAAS,CAC1DgiB,CAAAA,CAAQme,UAAA,CAAWngC,CAAX,CACZ,KAAI2kD,EAAaztB,KAAA,CAAMlV,CAAN,CAEZ2iC,EAAL,EAAqB3iC,CAArB,GAA8BkiC,EAA9B,GAGEliC,CAHF,CAGUmd,CAAA7a,UAAA,CAAkBtC,CAAlB,CAA0BpuB,CAA1B,CAHV,CAQKouB,EAAL,GAAesiC,CAAf,EAA+BK,CAA/B,EAA6CztB,KAAA,CAAMotB,CAAN,CAA7C,GACED,CAAA,EAEA,CADAA,CACA,CADe7/D,CAAAjH,OAAA,CAAa4mE,CAAA,CAAYniC,CAAZ,CAAb,CAAiC8hC,CAAjC,CACf,CAAAQ,CAAA,CAAYtiC,CAHd,CAZ8D,CAAhE,CAxBmC,CAFhC,CAJ8E,CAA5D,CA3hE3B,CA0zEIz0B,GAAoB,CAAC,QAAD,CAAW,UAAX,CAAuB,QAAQ,CAACoE,CAAD,CAAS1B,CAAT,CAAmB,CAExE,IAAI20D,EAAiBzqE,CAAA,CAAO,UAAP,CAArB,CAEI0qE,EAAcA,QAAQ,CAACrgE,CAAD,CAAQjG,CAAR,CAAeumE,CAAf,CAAgCnpE,CAAhC,CAAuCopE,CAAvC,CAAsDhqE,CAAtD,CAA2DiqE,CAA3D,CAAwE,CAEhGxgE,CAAA,CAAMsgE,CAAN,CAAA,CAAyBnpE,CACrBopE,EAAJ,GAAmBvgE,CAAA,CAAMugE,CAAN,CAAnB,CAA0ChqE,CAA1C,CACAyJ,EAAAqmD,OAAA,CAAetsD,CACfiG,EAAAygE,OAAA,CAA0B,CAA1B,GAAgB1mE,CAChBiG,EAAA0gE,MAAA,CAAe3mE,CAAf,GAA0BymE,CAA1B,CAAwC,CACxCxgE;CAAA2gE,QAAA,CAAgB,EAAE3gE,CAAAygE,OAAF,EAAkBzgE,CAAA0gE,MAAlB,CAEhB1gE,EAAA4gE,KAAA,CAAa,EAAE5gE,CAAA6gE,MAAF,CAA8B,CAA9B,IAAiB9mE,CAAjB,CAAuB,CAAvB,EATmF,CAsBlG,OAAO,CACLqpB,SAAU,GADL,CAEL6K,aAAc,CAAA,CAFT,CAGLhI,WAAY,SAHP,CAIL/C,SAAU,GAJL,CAKLwD,SAAU,CAAA,CALL,CAMLmG,MAAO,CAAA,CANF,CAOL5sB,QAAS6gE,QAAwB,CAACh9C,CAAD,CAAWsD,CAAX,CAAkB,CACjD,IAAIgN,EAAahN,CAAAte,SAAjB,CACIi4D,EAAqBtrE,CAAAq3B,cAAA,CAAuB,iBAAvB,CAA2CsH,CAA3C,CAAwD,GAAxD,CADzB,CAGIv5B,EAAQu5B,CAAAv5B,MAAA,CAAiB,4FAAjB,CAEZ,IAAKA,CAAAA,CAAL,CACE,KAAMulE,EAAA,CAAe,MAAf,CACFhsC,CADE,CAAN,CAIF,IAAI4sC,EAAMnmE,CAAA,CAAM,CAAN,CAAV,CACIomE,EAAMpmE,CAAA,CAAM,CAAN,CADV,CAEIqmE,EAAUrmE,CAAA,CAAM,CAAN,CAFd,CAGIsmE,EAAatmE,CAAA,CAAM,CAAN,CAHjB,CAKAA,EAAQmmE,CAAAnmE,MAAA,CAAU,wDAAV,CAER,IAAKA,CAAAA,CAAL,CACE,KAAMulE,EAAA,CAAe,QAAf,CACFY,CADE,CAAN,CAGF,IAAIV,EAAkBzlE,CAAA,CAAM,CAAN,CAAlBylE,EAA8BzlE,CAAA,CAAM,CAAN,CAAlC;AACI0lE,EAAgB1lE,CAAA,CAAM,CAAN,CAEpB,IAAIqmE,CAAJ,GAAiB,CAAA,4BAAA5gE,KAAA,CAAkC4gE,CAAlC,CAAjB,EACI,2FAAA5gE,KAAA,CAAiG4gE,CAAjG,CADJ,EAEE,KAAMd,EAAA,CAAe,UAAf,CACJc,CADI,CAAN,CA3B+C,IA+B7CE,CA/B6C,CA+B3BC,CA/B2B,CA+BXC,CA/BW,CA+BOC,CA/BP,CAgC7CC,EAAe,CAAC5yB,IAAK34B,EAAN,CAEfkrD,EAAJ,CACEC,CADF,CACqBj0D,CAAA,CAAOg0D,CAAP,CADrB,EAGEG,CAGA,CAHmBA,QAAQ,CAAC/qE,CAAD,CAAMY,CAAN,CAAa,CACtC,MAAO8e,GAAA,CAAQ9e,CAAR,CAD+B,CAGxC,CAAAoqE,CAAA,CAAiBA,QAAQ,CAAChrE,CAAD,CAAM,CAC7B,MAAOA,EADsB,CANjC,CAWA,OAAOkrE,SAAqB,CAACt3C,CAAD,CAASrG,CAAT,CAAmBsD,CAAnB,CAA0Bg6B,CAA1B,CAAgC/2B,CAAhC,CAA6C,CAEnE+2C,CAAJ,GACEC,CADF,CACmBA,QAAQ,CAAC9qE,CAAD,CAAMY,CAAN,CAAa4C,CAAb,CAAoB,CAEvCwmE,CAAJ,GAAmBiB,CAAA,CAAajB,CAAb,CAAnB,CAAiDhqE,CAAjD,CACAirE,EAAA,CAAalB,CAAb,CAAA,CAAgCnpE,CAChCqqE,EAAAnb,OAAA,CAAsBtsD,CACtB,OAAOqnE,EAAA,CAAiBj3C,CAAjB,CAAyBq3C,CAAzB,CALoC,CAD/C,CAkBA,KAAIE,EAAe/9D,EAAA,EAGnBwmB,EAAAyB,iBAAA,CAAwBq1C,CAAxB,CAA6BU,QAAuB,CAACv/C,CAAD,CAAa,CAAA,IAC3DroB,CAD2D,CACpDhE,CADoD,CAE3D6rE,EAAe99C,CAAA,CAAS,CAAT,CAF4C,CAI3D+9C,CAJ2D,CAO3DC,EAAen+D,EAAA,EAP4C,CAQ3Do+D,CAR2D,CAS3DxrE,CAT2D,CAStDY,CATsD,CAU3D6qE,CAV2D,CAY3DC,CAZ2D,CAa3D58D,CAb2D,CAc3D68D,CAGAhB,EAAJ,GACE/2C,CAAA,CAAO+2C,CAAP,CADF,CACoB9+C,CADpB,CAIA,IAAIxsB,EAAA,CAAYwsB,CAAZ,CAAJ,CACE6/C,CACA,CADiB7/C,CACjB,CAAA+/C,CAAA,CAAcd,CAAd,EAAgCC,CAFlC,KAGO,CACLa,CAAA,CAAcd,CAAd,EAAgCE,CAEhCU,EAAA,CAAiB,EACjB,KAASG,CAAT,GAAoBhgD,EAApB,CACMA,CAAA3rB,eAAA,CAA0B2rE,CAA1B,CAAJ;AAA+D,GAA/D,EAA0CA,CAAAhnE,OAAA,CAAe,CAAf,CAA1C,EACE6mE,CAAAznE,KAAA,CAAoB4nE,CAApB,CAGJH,EAAAlrE,KAAA,EATK,CAYPgrE,CAAA,CAAmBE,CAAAlsE,OACnBmsE,EAAA,CAAqB7nD,KAAJ,CAAU0nD,CAAV,CAGjB,KAAKhoE,CAAL,CAAa,CAAb,CAAgBA,CAAhB,CAAwBgoE,CAAxB,CAA0ChoE,CAAA,EAA1C,CAIE,GAHAxD,CAGI,CAHG6rB,CAAD,GAAgB6/C,CAAhB,CAAkCloE,CAAlC,CAA0CkoE,CAAA,CAAeloE,CAAf,CAG5C,CAFJ5C,CAEI,CAFIirB,CAAA,CAAW7rB,CAAX,CAEJ,CADJyrE,CACI,CADQG,CAAA,CAAY5rE,CAAZ,CAAiBY,CAAjB,CAAwB4C,CAAxB,CACR,CAAA2nE,CAAA,CAAaM,CAAb,CAAJ,CAEE38D,CAGA,CAHQq8D,CAAA,CAAaM,CAAb,CAGR,CAFA,OAAON,CAAA,CAAaM,CAAb,CAEP,CADAF,CAAA,CAAaE,CAAb,CACA,CAD0B38D,CAC1B,CAAA68D,CAAA,CAAenoE,CAAf,CAAA,CAAwBsL,CAL1B,KAMO,CAAA,GAAIy8D,CAAA,CAAaE,CAAb,CAAJ,CAKL,KAHA5rE,EAAA,CAAQ8rE,CAAR,CAAwB,QAAQ,CAAC78D,CAAD,CAAQ,CAClCA,CAAJ,EAAaA,CAAArF,MAAb,GAA0B0hE,CAAA,CAAar8D,CAAA0b,GAAb,CAA1B,CAAmD1b,CAAnD,CADsC,CAAxC,CAGM,CAAA+6D,CAAA,CAAe,OAAf,CAEFhsC,CAFE,CAEU4tC,CAFV,CAEqB7qE,CAFrB,CAAN,CAKA+qE,CAAA,CAAenoE,CAAf,CAAA,CAAwB,CAACgnB,GAAIihD,CAAL,CAAgBhiE,MAAOtK,CAAvB,CAAkCsH,MAAOtH,CAAzC,CACxBosE,EAAA,CAAaE,CAAb,CAAA,CAA0B,CAAA,CAXrB,CAgBT,IAASK,CAAT,GAAqBX,EAArB,CAAmC,CACjCr8D,CAAA,CAAQq8D,CAAA,CAAaW,CAAb,CACRrxC,EAAA,CAAmB1tB,EAAA,CAAc+B,CAAArI,MAAd,CACnByO,EAAAkhD,MAAA,CAAe37B,CAAf,CACA,IAAIA,CAAA,CAAiB,CAAjB,CAAAvd,WAAJ,CAGE,IAAK1Z,CAAW,CAAH,CAAG,CAAAhE,CAAA,CAASi7B,CAAAj7B,OAAzB,CAAkDgE,CAAlD,CAA0DhE,CAA1D,CAAkEgE,CAAA,EAAlE,CACEi3B,CAAA,CAAiBj3B,CAAjB,CAAA,aAAA,CAAsC,CAAA,CAG1CsL,EAAArF,MAAAuC,SAAA,EAXiC,CAenC,IAAKxI,CAAL,CAAa,CAAb,CAAgBA,CAAhB,CAAwBgoE,CAAxB,CAA0ChoE,CAAA,EAA1C,CAKE,GAJAxD,CAIIyJ,CAJGoiB,CAAD,GAAgB6/C,CAAhB,CAAkCloE,CAAlC,CAA0CkoE,CAAA,CAAeloE,CAAf,CAI5CiG,CAHJ7I,CAGI6I,CAHIoiB,CAAA,CAAW7rB,CAAX,CAGJyJ,CAFJqF,CAEIrF,CAFIkiE,CAAA,CAAenoE,CAAf,CAEJiG,CAAAqF,CAAArF,MAAJ,CAAiB,CAIf6hE,CAAA,CAAWD,CAGX,GACEC,EAAA,CAAWA,CAAAn+D,YADb,OAESm+D,CAFT,EAEqBA,CAAA,aAFrB,CAIkBx8D,EApLrBrI,MAAA,CAAY,CAAZ,CAoLG;AAA4B6kE,CAA5B,EAEEp2D,CAAAmhD,KAAA,CAActpD,EAAA,CAAc+B,CAAArI,MAAd,CAAd,CAA0C,IAA1C,CAAgDD,CAAA,CAAO6kE,CAAP,CAAhD,CAEFA,EAAA,CAA2Bv8D,CApL9BrI,MAAA,CAoL8BqI,CApLlBrI,MAAAjH,OAAZ,CAAiC,CAAjC,CAqLGsqE,EAAA,CAAYh7D,CAAArF,MAAZ,CAAyBjG,CAAzB,CAAgCumE,CAAhC,CAAiDnpE,CAAjD,CAAwDopE,CAAxD,CAAuEhqE,CAAvE,CAA4EwrE,CAA5E,CAhBe,CAAjB,IAmBE13C,EAAA,CAAYi4C,QAA2B,CAACtlE,CAAD,CAAQgD,CAAR,CAAe,CACpDqF,CAAArF,MAAA,CAAcA,CAEd,KAAIwD,EAAUu9D,CAAA5vD,UAAA,CAA6B,CAAA,CAA7B,CACdnU,EAAA,CAAMA,CAAAjH,OAAA,EAAN,CAAA,CAAwByN,CAGxBiI,EAAAihD,MAAA,CAAe1vD,CAAf,CAAsB,IAAtB,CAA4BD,CAAA,CAAO6kE,CAAP,CAA5B,CACAA,EAAA,CAAep+D,CAIf6B,EAAArI,MAAA,CAAcA,CACd8kE,EAAA,CAAaz8D,CAAA0b,GAAb,CAAA,CAAyB1b,CACzBg7D,EAAA,CAAYh7D,CAAArF,MAAZ,CAAyBjG,CAAzB,CAAgCumE,CAAhC,CAAiDnpE,CAAjD,CAAwDopE,CAAxD,CAAuEhqE,CAAvE,CAA4EwrE,CAA5E,CAdoD,CAAtD,CAkBJL,EAAA,CAAeI,CA3HgD,CAAjE,CAvBuE,CA7CxB,CAP9C,CA1BiE,CAAlD,CA1zExB,CA8rFI74D,GAAkB,CAAC,UAAD,CAAa,QAAQ,CAACwC,CAAD,CAAW,CACpD,MAAO,CACL2X,SAAU,GADL,CAEL6K,aAAc,CAAA,CAFT,CAGLzN,KAAMA,QAAQ,CAACxgB,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB,CACnC2G,CAAAjH,OAAA,CAAaM,CAAA2P,OAAb,CAA0Bu5D,QAA0B,CAACprE,CAAD,CAAQ,CAK1DsU,CAAA,CAAStU,CAAA,CAAQ,aAAR,CAAwB,UAAjC,CAAA,CAA6CwC,CAA7C,CAvKY6oE,SAuKZ,CAAqE,CACnEC,YAvKsBC,iBAsK6C,CAArE,CAL0D,CAA5D,CADmC,CAHhC,CAD6C,CAAhC,CA9rFtB,CA+1FIv6D,GAAkB,CAAC,UAAD,CAAa,QAAQ,CAACsD,CAAD,CAAW,CACpD,MAAO,CACL2X,SAAU,GADL,CAEL6K,aAAc,CAAA,CAFT,CAGLzN,KAAMA,QAAQ,CAACxgB,CAAD;AAAQrG,CAAR,CAAiBN,CAAjB,CAAuB,CACnC2G,CAAAjH,OAAA,CAAaM,CAAA6O,OAAb,CAA0By6D,QAA0B,CAACxrE,CAAD,CAAQ,CAG1DsU,CAAA,CAAStU,CAAA,CAAQ,UAAR,CAAqB,aAA9B,CAAA,CAA6CwC,CAA7C,CAtUY6oE,SAsUZ,CAAoE,CAClEC,YAtUsBC,iBAqU4C,CAApE,CAH0D,CAA5D,CADmC,CAHhC,CAD6C,CAAhC,CA/1FtB,CA65FIv5D,GAAmBm2C,EAAA,CAAY,QAAQ,CAACt/C,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB,CAChE2G,CAAA4rB,iBAAA,CAAuBvyB,CAAA6P,QAAvB,CAAqC05D,QAA2B,CAACC,CAAD,CAAYC,CAAZ,CAAuB,CACjFA,CAAJ,EAAkBD,CAAlB,GAAgCC,CAAhC,EACE1sE,CAAA,CAAQ0sE,CAAR,CAAmB,QAAQ,CAACxmE,CAAD,CAAMsK,CAAN,CAAa,CAAEjN,CAAAmvD,IAAA,CAAYliD,CAAZ,CAAmB,EAAnB,CAAF,CAAxC,CAEEi8D,EAAJ,EAAelpE,CAAAmvD,IAAA,CAAY+Z,CAAZ,CAJsE,CAAvF,CADgE,CAA3C,CA75FvB,CAsiGIx5D,GAAoB,CAAC,UAAD,CAAa,QAAQ,CAACoC,CAAD,CAAW,CACtD,MAAO,CACL2X,SAAU,IADL,CAELD,QAAS,UAFJ,CAKLrhB,WAAY,CAAC,QAAD,CAAWihE,QAA2B,EAAG,CACpD,IAAAC,MAAA,CAAa,EADuC,CAAzC,CALP,CAQLxiD,KAAMA,QAAQ,CAACxgB,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB0pE,CAAvB,CAA2C,CAAA,IAEnDE,EAAsB,EAF6B,CAGnDC,EAAmB,EAHgC,CAInDC,EAA0B,EAJyB,CAKnDC,EAAiB,EALkC,CAOnDC,EAAgBA,QAAQ,CAACvpE,CAAD,CAAQC,CAAR,CAAe,CACvC,MAAO,SAAQ,EAAG,CAAED,CAAAG,OAAA,CAAaF,CAAb,CAAoB,CAApB,CAAF,CADqB,CAI3CiG,EAAAjH,OAAA,CAVgBM,CAAA+P,SAUhB,EAViC/P,CAAAsI,GAUjC,CAAwB2hE,QAA4B,CAACnsE,CAAD,CAAQ,CAAA,IACtDH,CADsD,CACnDW,CACFX,EAAA,CAAI,CAAT;IAAYW,CAAZ,CAAiBwrE,CAAAptE,OAAjB,CAAiDiB,CAAjD,CAAqDW,CAArD,CAAyD,EAAEX,CAA3D,CACEyU,CAAAoU,OAAA,CAAgBsjD,CAAA,CAAwBnsE,CAAxB,CAAhB,CAIGA,EAAA,CAFLmsE,CAAAptE,OAEK,CAF4B,CAEjC,KAAY4B,CAAZ,CAAiByrE,CAAArtE,OAAjB,CAAwCiB,CAAxC,CAA4CW,CAA5C,CAAgD,EAAEX,CAAlD,CAAqD,CACnD,IAAIsyD,EAAWhmD,EAAA,CAAc4/D,CAAA,CAAiBlsE,CAAjB,CAAAgG,MAAd,CACfomE,EAAA,CAAepsE,CAAf,CAAAuL,SAAA,EAEAssB,EADcs0C,CAAA,CAAwBnsE,CAAxB,CACd63B,CAD2CpjB,CAAAkhD,MAAA,CAAerD,CAAf,CAC3Cz6B,MAAA,CAAaw0C,CAAA,CAAcF,CAAd,CAAuCnsE,CAAvC,CAAb,CAJmD,CAOrDksE,CAAAntE,OAAA,CAA0B,CAC1BqtE,EAAArtE,OAAA,CAAwB,CAExB,EAAKktE,CAAL,CAA2BF,CAAAC,MAAA,CAAyB,GAAzB,CAA+B7rE,CAA/B,CAA3B,EAAoE4rE,CAAAC,MAAA,CAAyB,GAAzB,CAApE,GACE5sE,CAAA,CAAQ6sE,CAAR,CAA6B,QAAQ,CAACM,CAAD,CAAqB,CACxDA,CAAAt9C,WAAA,CAA8B,QAAQ,CAACu9C,CAAD,CAAcC,CAAd,CAA6B,CACjEL,CAAA5oE,KAAA,CAAoBipE,CAApB,CACA,KAAIC,EAASH,CAAA5pE,QACb6pE,EAAA,CAAYA,CAAAztE,OAAA,EAAZ,CAAA,CAAoCN,CAAAq3B,cAAA,CAAuB,qBAAvB,CAGpCo2C,EAAA1oE,KAAA,CAFY6K,CAAErI,MAAOwmE,CAATn+D,CAEZ,CACAoG,EAAAihD,MAAA,CAAe8W,CAAf,CAA4BE,CAAA1vD,OAAA,EAA5B,CAA6C0vD,CAA7C,CAPiE,CAAnE,CADwD,CAA1D,CAlBwD,CAA5D,CAXuD,CARpD,CAD+C,CAAhC,CAtiGxB,CA6lGIn6D,GAAwB+1C,EAAA,CAAY,CACtCr5B,WAAY,SAD0B,CAEtC/C,SAAU,IAF4B,CAGtCC,QAAS,WAH6B,CAItC8K,aAAc,CAAA,CAJwB,CAKtCzN,KAAMA,QAAQ,CAACxgB,CAAD,CAAQrG,CAAR,CAAiBysB,CAAjB,CAAwBg7B,CAAxB,CAA8B/2B,CAA9B,CAA2C,CACvD+2B,CAAA4hB,MAAA,CAAW,GAAX,CAAiB58C,CAAA9c,aAAjB,CAAA;AAAwC83C,CAAA4hB,MAAA,CAAW,GAAX,CAAiB58C,CAAA9c,aAAjB,CAAxC,EAAgF,EAChF83C,EAAA4hB,MAAA,CAAW,GAAX,CAAiB58C,CAAA9c,aAAjB,CAAA9O,KAAA,CAA0C,CAAEyrB,WAAYoE,CAAd,CAA2B1wB,QAASA,CAApC,CAA1C,CAFuD,CALnB,CAAZ,CA7lG5B,CAwmGI8P,GAA2B61C,EAAA,CAAY,CACzCr5B,WAAY,SAD6B,CAEzC/C,SAAU,IAF+B,CAGzCC,QAAS,WAHgC,CAIzC8K,aAAc,CAAA,CAJ2B,CAKzCzN,KAAMA,QAAQ,CAACxgB,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB+nD,CAAvB,CAA6B/2B,CAA7B,CAA0C,CACtD+2B,CAAA4hB,MAAA,CAAW,GAAX,CAAA,CAAmB5hB,CAAA4hB,MAAA,CAAW,GAAX,CAAnB,EAAsC,EACtC5hB,EAAA4hB,MAAA,CAAW,GAAX,CAAAxoE,KAAA,CAAqB,CAAEyrB,WAAYoE,CAAd,CAA2B1wB,QAASA,CAApC,CAArB,CAFsD,CALf,CAAZ,CAxmG/B,CAyqGIkQ,GAAwBy1C,EAAA,CAAY,CACtCl8B,SAAU,KAD4B,CAEtC5C,KAAMA,QAAQ,CAAC2J,CAAD,CAASrG,CAAT,CAAmBsG,CAAnB,CAA2BtoB,CAA3B,CAAuCuoB,CAAvC,CAAoD,CAChE,GAAKA,CAAAA,CAAL,CACE,KAAM10B,EAAA,CAAO,cAAP,CAAA,CAAuB,QAAvB,CAILmH,EAAA,CAAYgnB,CAAZ,CAJK,CAAN,CAOFuG,CAAA,CAAY,QAAQ,CAACrtB,CAAD,CAAQ,CAC1B8mB,CAAA7mB,MAAA,EACA6mB,EAAA1mB,OAAA,CAAgBJ,CAAhB,CAF0B,CAA5B,CATgE,CAF5B,CAAZ,CAzqG5B,CA4tGIyJ,GAAkB,CAAC,gBAAD,CAAmB,QAAQ,CAACwH,CAAD,CAAiB,CAChE,MAAO,CACLmV,SAAU,GADL,CAELsD,SAAU,CAAA,CAFL,CAGLzmB,QAASA,QAAQ,CAACtG,CAAD,CAAUN,CAAV,CAAgB,CACd,kBAAjB;AAAIA,CAAAsY,KAAJ,EAIE1D,CAAAsI,IAAA,CAHkBld,CAAA0nB,GAGlB,CAFWpnB,CAAA,CAAQ,CAAR,CAAA81B,KAEX,CAL6B,CAH5B,CADyD,CAA5C,CA5tGtB,CA2uGIk0C,GAAkBhuE,CAAA,CAAO,WAAP,CA3uGtB,CAo6GIgU,GAAqBtR,EAAA,CAAQ,CAC/B+qB,SAAU,GADqB,CAE/BsD,SAAU,CAAA,CAFqB,CAAR,CAp6GzB,CA06GI/f,GAAkB,CAAC,UAAD,CAAa,QAAb,CAAuB,QAAQ,CAACiyD,CAAD,CAAazrD,CAAb,CAAqB,CAAA,IAEpEy2D,EAAoB,wMAFgD,CAGpEC,EAAgB,CAACjhB,cAAe1qD,CAAhB,CAGpB,OAAO,CACLkrB,SAAU,GADL,CAELD,QAAS,CAAC,QAAD,CAAW,UAAX,CAFJ,CAGLrhB,WAAY,CAAC,UAAD,CAAa,QAAb,CAAuB,QAAvB,CAAiC,QAAQ,CAACgiB,CAAD,CAAWqG,CAAX,CAAmBC,CAAnB,CAA2B,CAAA,IAC1EpuB,EAAO,IADmE,CAE1E8nE,EAAa,EAF6D,CAG1EC,EAAcF,CAH4D,CAK1EG,CAGJhoE,EAAAioE,UAAA,CAAiB75C,CAAAtgB,QAGjB9N;CAAAkoE,KAAA,CAAYC,QAAQ,CAACC,CAAD,CAAeC,CAAf,CAA4BC,CAA5B,CAA4C,CAC9DP,CAAA,CAAcK,CAEdJ,EAAA,CAAgBM,CAH8C,CAOhEtoE,EAAAuoE,UAAA,CAAiBC,QAAQ,CAACrtE,CAAD,CAAQwC,CAAR,CAAiB,CACxCqJ,EAAA,CAAwB7L,CAAxB,CAA+B,gBAA/B,CACA2sE,EAAA,CAAW3sE,CAAX,CAAA,CAAoB,CAAA,CAEhB4sE,EAAArhB,WAAJ,EAA8BvrD,CAA9B,GACE2sB,CAAAxnB,IAAA,CAAanF,CAAb,CACA,CAAI6sE,CAAAhwD,OAAA,EAAJ,EAA4BgwD,CAAA3iD,OAAA,EAF9B,CAOI1nB,EAAJ,EAAeA,CAAA,CAAQ,CAAR,CAAAoF,aAAA,CAAwB,UAAxB,CAAf,GACEpF,CAAA,CAAQ,CAAR,CAAA2vD,SADF,CACwB,CAAA,CADxB,CAXwC,CAiB1CttD,EAAAyoE,aAAA,CAAoBC,QAAQ,CAACvtE,CAAD,CAAQ,CAC9B,IAAAwtE,UAAA,CAAextE,CAAf,CAAJ,GACE,OAAO2sE,CAAA,CAAW3sE,CAAX,CACP,CAAI4sE,CAAArhB,WAAJ,GAA+BvrD,CAA/B,EACE,IAAAytE,oBAAA,CAAyBztE,CAAzB,CAHJ,CADkC,CAUpC6E,EAAA4oE,oBAAA,CAA2BC,QAAQ,CAACvoE,CAAD,CAAM,CACnCwoE,CAAAA,CAAa,IAAbA,CAAoB7uD,EAAA,CAAQ3Z,CAAR,CAApBwoE,CAAmC,IACvCd,EAAA1nE,IAAA,CAAkBwoE,CAAlB,CACAhhD,EAAAqmC,QAAA,CAAiB6Z,CAAjB,CACAlgD,EAAAxnB,IAAA,CAAawoE,CAAb,CACAd,EAAA5qE,KAAA,CAAmB,UAAnB,CAA+B,CAAA,CAA/B,CALuC,CASzC4C,EAAA2oE,UAAA,CAAiBI,QAAQ,CAAC5tE,CAAD,CAAQ,CAC/B,MAAO2sE,EAAArtE,eAAA,CAA0BU,CAA1B,CADwB,CAIjCgzB,EAAA0B,IAAA,CAAW,UAAX,CAAuB,QAAQ,EAAG,CAEhC7vB,CAAA4oE,oBAAA;AAA2B1sE,CAFK,CAAlC,CA1D8E,CAApE,CAHP,CAmELsoB,KAAMA,QAAQ,CAACxgB,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuBi/D,CAAvB,CAA8B,CA2C1C0M,QAASA,EAAa,CAAChlE,CAAD,CAAQilE,CAAR,CAAuBlB,CAAvB,CAAoCmB,CAApC,CAAgD,CACpEnB,CAAA/gB,QAAA,CAAsBmiB,QAAQ,EAAG,CAC/B,IAAIzN,EAAYqM,CAAArhB,WAEZwiB,EAAAP,UAAA,CAAqBjN,CAArB,CAAJ,EACMsM,CAAAhwD,OAAA,EAEJ,EAF4BgwD,CAAA3iD,OAAA,EAE5B,CADA4jD,CAAA3oE,IAAA,CAAkBo7D,CAAlB,CACA,CAAkB,EAAlB,GAAIA,CAAJ,EAAsB0N,CAAAhsE,KAAA,CAAiB,UAAjB,CAA6B,CAAA,CAA7B,CAHxB,EAKMd,CAAA,CAAYo/D,CAAZ,CAAJ,EAA8B0N,CAA9B,CACEH,CAAA3oE,IAAA,CAAkB,EAAlB,CADF,CAGE4oE,CAAAN,oBAAA,CAA+BlN,CAA/B,CAX2B,CAgBjCuN,EAAAtjE,GAAA,CAAiB,QAAjB,CAA2B,QAAQ,EAAG,CACpC3B,CAAAE,OAAA,CAAa,QAAQ,EAAG,CAClB8jE,CAAAhwD,OAAA,EAAJ,EAA4BgwD,CAAA3iD,OAAA,EAC5B0iD,EAAAnhB,cAAA,CAA0BqiB,CAAA3oE,IAAA,EAA1B,CAFsB,CAAxB,CADoC,CAAtC,CAjBoE,CAyBtE+oE,QAASA,EAAe,CAACrlE,CAAD,CAAQilE,CAAR,CAAuB7jB,CAAvB,CAA6B,CACnD,IAAIkkB,CACJlkB,EAAA4B,QAAA,CAAeC,QAAQ,EAAG,CACxB,IAAIzpD,EAAQ,IAAI4c,EAAJ,CAAYgrC,CAAAsB,WAAZ,CACZtsD,EAAA,CAAQ6uE,CAAA3rE,KAAA,CAAmB,QAAnB,CAAR,CAAsC,QAAQ,CAACwN,CAAD,CAAS,CACrDA,CAAAwiD,SAAA,CAAkB/wD,CAAA,CAAUiB,CAAAwH,IAAA,CAAU8F,CAAA3P,MAAV,CAAV,CADmC,CAAvD,CAFwB,CAS1B6I,EAAAjH,OAAA,CAAawsE,QAA4B,EAAG,CACrClqE,EAAA,CAAOiqE,CAAP,CAAiBlkB,CAAAsB,WAAjB,CAAL,GACE4iB,CACA,CADWpqE,EAAA,CAAYkmD,CAAAsB,WAAZ,CACX;AAAAtB,CAAA4B,QAAA,EAFF,CAD0C,CAA5C,CAOAiiB,EAAAtjE,GAAA,CAAiB,QAAjB,CAA2B,QAAQ,EAAG,CACpC3B,CAAAE,OAAA,CAAa,QAAQ,EAAG,CACtB,IAAIpG,EAAQ,EACZ1D,EAAA,CAAQ6uE,CAAA3rE,KAAA,CAAmB,QAAnB,CAAR,CAAsC,QAAQ,CAACwN,CAAD,CAAS,CACjDA,CAAAwiD,SAAJ,EACExvD,CAAAU,KAAA,CAAWsM,CAAA3P,MAAX,CAFmD,CAAvD,CAKAiqD,EAAAwB,cAAA,CAAmB9oD,CAAnB,CAPsB,CAAxB,CADoC,CAAtC,CAlBmD,CA+BrD0rE,QAASA,EAAc,CAACxlE,CAAD,CAAQilE,CAAR,CAAuB7jB,CAAvB,CAA6B,CA2DlDqkB,QAASA,EAAc,CAACC,CAAD,CAASnvE,CAAT,CAAcY,CAAd,CAAqB,CAC1C8hB,CAAA,CAAO0sD,CAAP,CAAA,CAAoBxuE,CAChByuE,EAAJ,GAAa3sD,CAAA,CAAO2sD,CAAP,CAAb,CAA+BrvE,CAA/B,CACA,OAAOmvE,EAAA,CAAO1lE,CAAP,CAAciZ,CAAd,CAHmC,CAyD5C4sD,QAASA,EAAkB,CAACnO,CAAD,CAAY,CACrC,IAAIoO,CACJ,IAAIzc,CAAJ,CACE,GAAI0c,CAAJ,EAAe5vE,CAAA,CAAQuhE,CAAR,CAAf,CAAmC,CAEjCoO,CAAA,CAAc,IAAI1vD,EAAJ,CAAY,EAAZ,CACd,KAAS,IAAA4vD,EAAa,CAAtB,CAAyBA,CAAzB,CAAsCtO,CAAA3hE,OAAtC,CAAwDiwE,CAAA,EAAxD,CAEEF,CAAAvvD,IAAA,CAAgBkvD,CAAA,CAAeM,CAAf,CAAwB,IAAxB,CAA8BrO,CAAA,CAAUsO,CAAV,CAA9B,CAAhB,CAAsE,CAAA,CAAtE,CAL+B,CAAnC,IAQEF,EAAA,CAAc,IAAI1vD,EAAJ,CAAYshD,CAAZ,CATlB,KAWWqO,EAAJ,GACLrO,CADK,CACO+N,CAAA,CAAeM,CAAf,CAAwB,IAAxB,CAA8BrO,CAA9B,CADP,CAIP,OAAOuO,SAAmB,CAAC1vE,CAAD,CAAMY,CAAN,CAAa,CACrC,IAAI+uE,CAEFA,EAAA,CADEH,CAAJ,CACmBA,CADnB,CAEWI,CAAJ,CACYA,CADZ,CAGY9tE,CAGnB,OAAIgxD,EAAJ,CACS9wD,CAAA,CAAUutE,CAAAzkD,OAAA,CAAmBokD,CAAA,CAAeS,CAAf,CAA+B3vE,CAA/B,CAAoCY,CAApC,CAAnB,CAAV,CADT,CAGSugE,CAHT,GAGuB+N,CAAA,CAAeS,CAAf,CAA+B3vE,CAA/B,CAAoCY,CAApC,CAbc,CAjBF,CAmCvCivE,QAASA,EAAiB,EAAG,CACtBC,CAAL,GACErmE,CAAAwqC,aAAA,CAAmB87B,CAAnB,CACA,CAAAD,CAAA,CAAkB,CAAA,CAFpB,CAD2B,CAmB7BE,QAASA,EAAc,CAACC,CAAD;AAAWC,CAAX,CAAkBC,CAAlB,CAAyB,CAC9CF,CAAA,CAASC,CAAT,CAAA,CAAkBD,CAAA,CAASC,CAAT,CAAlB,EAAqC,CACrCD,EAAA,CAASC,CAAT,CAAA,EAAoBC,CAAA,CAAQ,CAAR,CAAa,EAFa,CAKhDJ,QAASA,EAAM,EAAG,CAChBD,CAAA,CAAkB,CAAA,CADF,KAIZM,EAAe,CAAC,GAAG,EAAJ,CAJH,CAKZC,EAAmB,CAAC,EAAD,CALP,CAMZC,CANY,CAOZC,CAPY,CASZC,CATY,CASIC,CATJ,CASqBC,CACjCvP,EAAAA,CAAYtW,CAAAsB,WACZlvB,EAAAA,CAAS0zC,CAAA,CAASlnE,CAAT,CAATwzB,EAA4B,EAXhB,KAYZ38B,EAAO+uE,CAAA,CA91xBZ9uE,MAAAD,KAAA,CA81xBiC28B,CA91xBjC,CAAAz8B,KAAA,EA81xBY,CAA+By8B,CAZ1B,CAaZj9B,CAbY,CAcZY,CAdY,CAeCpB,CAfD,CAgBAgE,CAhBA,CAiBZysE,EAAW,EAEXP,EAAAA,CAAaJ,CAAA,CAAmBnO,CAAnB,CAnBD,KAoBZyP,EAAc,CAAA,CApBF,CAsBZxtE,CAtBY,CAwBZytE,CAEJC,EAAA,CAAiB,EAGjB,KAAKttE,CAAL,CAAa,CAAb,CAAgBhE,CAAA,CAASc,CAAAd,OAAT,CAAsBgE,CAAtB,CAA8BhE,CAA9C,CAAsDgE,CAAA,EAAtD,CAA+D,CAC7DxD,CAAA,CAAMwD,CACN,IAAI6rE,CAAJ,GACErvE,CACI,CADEM,CAAA,CAAKkD,CAAL,CACF,CAAkB,GAAlB,GAAAxD,CAAA6E,OAAA,CAAW,CAAX,CAFN,EAE6B,QAE7BjE,EAAA,CAAQq8B,CAAA,CAAOj9B,CAAP,CAERswE,EAAA,CAAkBpB,CAAA,CAAe6B,CAAf,CAA0B/wE,CAA1B,CAA+BY,CAA/B,CAAlB,EAA2D,EAC3D,EAAM2vE,CAAN,CAAoBH,CAAA,CAAaE,CAAb,CAApB,IACEC,CACA,CADcH,CAAA,CAAaE,CAAb,CACd,CAD8C,EAC9C,CAAAD,CAAApsE,KAAA,CAAsBqsE,CAAtB,CAFF,CAKAvd,EAAA,CAAW2c,CAAA,CAAW1vE,CAAX,CAAgBY,CAAhB,CACXgwE,EAAA,CAAcA,CAAd,EAA6B7d,CAE7Bmd,EAAA,CAAQhB,CAAA,CAAe8B,CAAf,CAA0BhxE,CAA1B,CAA+BY,CAA/B,CAGRsvE,EAAA,CAAQluE,CAAA,CAAUkuE,CAAV,CAAA,CAAmBA,CAAnB,CAA2B,EACnCW,EAAA,CAAWrB,CAAA,CAAUA,CAAA,CAAQ/lE,CAAR,CAAeiZ,CAAf,CAAV,CAAoC2sD,CAAA,CAAU/uE,CAAA,CAAKkD,CAAL,CAAV,CAAwBA,CACnEgsE,EAAJ,GACEsB,CAAA,CAAeD,CAAf,CADF,CAC6B7wE,CAD7B,CAIAuwE,EAAAtsE,KAAA,CAAiB,CAEfumB,GAAIqmD,CAFW,CAGfX,MAAOA,CAHQ,CAIfnd,SAAUA,CAJK,CAAjB,CA1B6D,CAiC1DD,CAAL,GACMme,CAAJ,EAAgC,IAAhC,GAAkB9P,CAAlB,CAEEiP,CAAA,CAAa,EAAb,CAAAlnE,QAAA,CAAyB,CAACshB,GAAG,EAAJ,CAAQ0lD,MAAM,EAAd,CAAkBnd,SAAS,CAAC6d,CAA5B,CAAzB,CAFF,CAGYA,CAHZ,EAKER,CAAA,CAAa,EAAb,CAAAlnE,QAAA,CAAyB,CAACshB,GAAG,GAAJ,CAAS0lD,MAAM,EAAf;AAAmBnd,SAAS,CAAA,CAA5B,CAAzB,CANJ,CAWKme,EAAA,CAAa,CAAlB,KAAqBC,CAArB,CAAmCd,CAAA7wE,OAAnC,CACK0xE,CADL,CACkBC,CADlB,CAEKD,CAAA,EAFL,CAEmB,CAEjBZ,CAAA,CAAkBD,CAAA,CAAiBa,CAAjB,CAGlBX,EAAA,CAAcH,CAAA,CAAaE,CAAb,CAEVc,EAAA5xE,OAAJ,EAAgC0xE,CAAhC,EAEEV,CAMA,CANiB,CACfptE,QAASiuE,CAAA5qE,MAAA,EAAA3D,KAAA,CAA8B,OAA9B,CAAuCwtE,CAAvC,CADM,CAEfJ,MAAOK,CAAAL,MAFQ,CAMjB,CAFAO,CAEA,CAFkB,CAACD,CAAD,CAElB,CADAY,CAAAntE,KAAA,CAAuBwsE,CAAvB,CACA,CAAA/B,CAAA7nE,OAAA,CAAqB2pE,CAAAptE,QAArB,CARF,GAUEqtE,CAIA,CAJkBW,CAAA,CAAkBF,CAAlB,CAIlB,CAHAV,CAGA,CAHiBC,CAAA,CAAgB,CAAhB,CAGjB,CAAID,CAAAN,MAAJ,EAA4BI,CAA5B,EACEE,CAAAptE,QAAAN,KAAA,CAA4B,OAA5B,CAAqC0tE,CAAAN,MAArC,CAA4DI,CAA5D,CAfJ,CAmBAgB,EAAA,CAAc,IACT9tE,EAAA,CAAQ,CAAb,KAAgBhE,CAAhB,CAAyB+wE,CAAA/wE,OAAzB,CAA6CgE,CAA7C,CAAqDhE,CAArD,CAA6DgE,CAAA,EAA7D,CACE+M,CACA,CADSggE,CAAA,CAAY/sE,CAAZ,CACT,CAAA,CAAKktE,CAAL,CAAsBD,CAAA,CAAgBjtE,CAAhB,CAAwB,CAAxB,CAAtB,GAEE8tE,CAWA,CAXcZ,CAAAttE,QAWd,CAVIstE,CAAAR,MAUJ,GAV6B3/D,CAAA2/D,MAU7B,GATEF,CAAA,CAAeC,CAAf,CAAyBS,CAAAR,MAAzB,CAA+C,CAAA,CAA/C,CAGA,CAFAF,CAAA,CAAeC,CAAf,CAAyB1/D,CAAA2/D,MAAzB,CAAuC,CAAA,CAAvC,CAEA,CADAoB,CAAAp4C,KAAA,CAAiBw3C,CAAAR,MAAjB,CAAwC3/D,CAAA2/D,MAAxC,CACA,CAAAoB,CAAAzuE,KAAA,CAAiB,OAAjB,CAA0B6tE,CAAAR,MAA1B,CAMF,EAJIQ,CAAAlmD,GAIJ,GAJ0Bja,CAAAia,GAI1B,EAHE8mD,CAAAvrE,IAAA,CAAgB2qE,CAAAlmD,GAAhB,CAAoCja,CAAAia,GAApC,CAGF,CAAI8mD,CAAA,CAAY,CAAZ,CAAAve,SAAJ,GAAgCxiD,CAAAwiD,SAAhC,GACEue,CAAAzuE,KAAA,CAAiB,UAAjB,CAA8B6tE,CAAA3d,SAA9B,CAAwDxiD,CAAAwiD,SAAxD,CACA,CAAIvT,EAAJ,EAIE8xB,CAAAzuE,KAAA,CAAiB,UAAjB;AAA6B6tE,CAAA3d,SAA7B,CANJ,CAbF,GA0BoB,EAAlB,GAAIxiD,CAAAia,GAAJ,EAAwBymD,CAAxB,CAEE7tE,CAFF,CAEY6tE,CAFZ,CAOElrE,CAAC3C,CAAD2C,CAAWwrE,CAAA9qE,MAAA,EAAXV,KAAA,CACSwK,CAAAia,GADT,CAAA3nB,KAAA,CAEU,UAFV,CAEsB0N,CAAAwiD,SAFtB,CAAAjwD,KAAA,CAGU,UAHV,CAGsByN,CAAAwiD,SAHtB,CAAAlwD,KAAA,CAIU,OAJV,CAImB0N,CAAA2/D,MAJnB,CAAAh3C,KAAA,CAKU3oB,CAAA2/D,MALV,CAoBF,CAZAO,CAAAxsE,KAAA,CAAqBysE,CAArB,CAAsC,CAClCttE,QAASA,CADyB,CAElC8sE,MAAO3/D,CAAA2/D,MAF2B,CAGlC1lD,GAAIja,CAAAia,GAH8B,CAIlCuoC,SAAUxiD,CAAAwiD,SAJwB,CAAtC,CAYA,CANAid,CAAA,CAAeC,CAAf,CAAyB1/D,CAAA2/D,MAAzB,CAAuC,CAAA,CAAvC,CAMA,CALIoB,CAAJ,CACEA,CAAAvd,MAAA,CAAkB3wD,CAAlB,CADF,CAGEotE,CAAAptE,QAAAyD,OAAA,CAA8BzD,CAA9B,CAEF,CAAAkuE,CAAA,CAAcluE,CArDhB,CA0DF,KADAI,CAAA,EACA,CAAOitE,CAAAjxE,OAAP,CAAgCgE,CAAhC,CAAA,CACE+M,CAEA,CAFSkgE,CAAAjrD,IAAA,EAET,CADAwqD,CAAA,CAAeC,CAAf,CAAyB1/D,CAAA2/D,MAAzB,CAAuC,CAAA,CAAvC,CACA,CAAA3/D,CAAAnN,QAAA0nB,OAAA,EA1Fe,CA8FnB,IAAA,CAAOsmD,CAAA5xE,OAAP,CAAkC0xE,CAAlC,CAAA,CAA8C,CAE5CX,CAAA,CAAca,CAAA5rD,IAAA,EACd,KAAKhiB,CAAL,CAAa,CAAb,CAAgBA,CAAhB,CAAwB+sE,CAAA/wE,OAAxB,CAA4C,EAAEgE,CAA9C,CACEwsE,CAAA,CAAeC,CAAf,CAAyBM,CAAA,CAAY/sE,CAAZ,CAAA0sE,MAAzB,CAAmD,CAAA,CAAnD,CAEFK,EAAA,CAAY,CAAZ,CAAAntE,QAAA0nB,OAAA,EAN4C,CAQ9CjrB,CAAA,CAAQowE,CAAR,CAAkB,QAAQ,CAAChpC,CAAD,CAAQipC,CAAR,CAAe,CAC3B,CAAZ,CAAIjpC,CAAJ,CACE0nC,CAAAX,UAAA,CAAqBkC,CAArB,CADF,CAEmB,CAFnB,CAEWjpC,CAFX,EAGE0nC,CAAAT,aAAA,CAAwBgC,CAAxB,CAJqC,CAAzC,CAjLgB,CA9KlB,IAAI5rE,CAEJ,IAAM,EAAAA,CAAA,CAAQktE,CAAAltE,MAAA,CAAiB+oE,CAAjB,CAAR,CAAN,CACE,KAAMD,GAAA,CAAgB,MAAhB;AAIJoE,CAJI,CAIQjrE,EAAA,CAAYmoE,CAAZ,CAJR,CAAN,CAJgD,IAW9CsC,EAAYp6D,CAAA,CAAOtS,CAAA,CAAM,CAAN,CAAP,EAAmBA,CAAA,CAAM,CAAN,CAAnB,CAXkC,CAY9C8qE,EAAY9qE,CAAA,CAAM,CAAN,CAAZ8qE,EAAwB9qE,CAAA,CAAM,CAAN,CAZsB,CAa9CmtE,EAAW,MAAA1nE,KAAA,CAAYzF,CAAA,CAAM,CAAN,CAAZ,CAAXmtE,EAAoCntE,CAAA,CAAM,CAAN,CAbU,CAc9CsrE,EAAa6B,CAAA,CAAW76D,CAAA,CAAO66D,CAAP,CAAX,CAA8B,IAdG,CAe9CpC,EAAU/qE,CAAA,CAAM,CAAN,CAfoC,CAgB9CysE,EAAYn6D,CAAA,CAAOtS,CAAA,CAAM,CAAN,CAAP,EAAmB,EAAnB,CAhBkC,CAiB9CxC,EAAU8U,CAAA,CAAOtS,CAAA,CAAM,CAAN,CAAA,CAAWA,CAAA,CAAM,CAAN,CAAX,CAAsB8qE,CAA7B,CAjBoC,CAkB9CuB,EAAW/5D,CAAA,CAAOtS,CAAA,CAAM,CAAN,CAAP,CAlBmC,CAoB9CkrE,EADQlrE,CAAAotE,CAAM,CAANA,CACE,CAAQ96D,CAAA,CAAOtS,CAAA,CAAM,CAAN,CAAP,CAAR,CAA2B,IApBS,CAqB9CwsE,EAAiB,EArB6B,CA0B9CM,EAAoB,CAAC,CAAC,CAAChuE,QAASsrE,CAAV,CAAyBwB,MAAM,EAA/B,CAAD,CAAD,CA1B0B,CA4B9CxtD,EAAS,EAETuuD,EAAJ,GAEE5O,CAAA,CAAS4O,CAAT,CAAA,CAAqBxnE,CAArB,CAQA,CAJAwnE,CAAAxxD,YAAA,CAAuB,UAAvB,CAIA,CAAAwxD,CAAAnmD,OAAA,EAVF,CAcA4jD,EAAAhoE,MAAA,EAEAgoE,EAAAtjE,GAAA,CAAiB,QAAjB,CAmBAumE,QAAyB,EAAG,CAC1BloE,CAAAE,OAAA,CAAa,QAAQ,EAAG,CACtB,IAAIkiB,EAAa8kD,CAAA,CAASlnE,CAAT,CAAboiB,EAAgC,EAApC,CACIs1C,CACJ,IAAIrO,CAAJ,CACEqO,CACA,CADY,EACZ,CAAAthE,CAAA,CAAQ6uE,CAAA3oE,IAAA,EAAR,CAA6B,QAAQ,CAAC6rE,CAAD,CAAc,CAC/CA,CAAA,CAAcpC,CAAA,CAAUsB,CAAA,CAAec,CAAf,CAAV,CAAwCA,CACxDzQ,EAAAl9D,KAAA,CAYM,GAAZ,GAZkC2tE,CAYlC,CACSzyE,CADT,CAEmB,EAAZ,GAd2ByyE,CAc3B,CACE,IADF,CAIE1C,CAAA,CADWU,CAAAiC,CAAajC,CAAbiC,CAA0B/vE,CACrC,CAlByB8vE,CAkBzB,CAlBsC/lD,CAAAjrB,CAAWgxE,CAAXhxE,CAkBtC,CAlBH,CAFiD,CAAnD,CAFF,KAMO,CACL,IAAIgxE,EAAcpC,CAAA,CAAUsB,CAAA,CAAepC,CAAA3oE,IAAA,EAAf,CAAV,CAAgD2oE,CAAA3oE,IAAA,EAClEo7D,EAAA,CAQQ,GAAZ,GAR6ByQ,CAQ7B,CACSzyE,CADT,CAEmB,EAAZ,GAVsByyE,CAUtB,CACE,IADF,CAIE1C,CAAA,CADWU,CAAAiC,CAAajC,CAAbiC,CAA0B/vE,CACrC,CAdoB8vE,CAcpB,CAdiC/lD,CAAAjrB,CAAWgxE,CAAXhxE,CAcjC,CAhBA,CAIPiqD,CAAAwB,cAAA,CAAmB8U,CAAnB,CACA4O,EAAA,EAdsB,CAAxB,CAD0B,CAnB5B,CAEAllB,EAAA4B,QAAA;AAAesjB,CAEftmE,EAAA4rB,iBAAA,CAAuBs7C,CAAvB,CAAiCd,CAAjC,CACApmE,EAAA4rB,iBAAA,CA4CAy8C,QAAkB,EAAG,CACnB,IAAI70C,EAAS0zC,CAAA,CAASlnE,CAAT,CAAb,CACIsoE,CACJ,IAAI90C,CAAJ,EAAcr9B,CAAA,CAAQq9B,CAAR,CAAd,CAA+B,CAC7B80C,CAAA,CAAgBjuD,KAAJ,CAAUmZ,CAAAz9B,OAAV,CACZ,KAF6B,IAEpBiB,EAAI,CAFgB,CAEbW,EAAK67B,CAAAz9B,OAArB,CAAoCiB,CAApC,CAAwCW,CAAxC,CAA4CX,CAAA,EAA5C,CACEsxE,CAAA,CAAUtxE,CAAV,CAAA,CAAeyuE,CAAA,CAAe8B,CAAf,CAA0BvwE,CAA1B,CAA6Bw8B,CAAA,CAAOx8B,CAAP,CAA7B,CAHY,CAA/B,IAMO,IAAIw8B,CAAJ,CAGL,IAASp6B,CAAT,GADAkvE,EACiB90C,CADL,EACKA,CAAAA,CAAjB,CACMA,CAAA/8B,eAAA,CAAsB2C,CAAtB,CAAJ,GACEkvE,CAAA,CAAUlvE,CAAV,CADF,CACoBqsE,CAAA,CAAe8B,CAAf,CAA0BnuE,CAA1B,CAAgCo6B,CAAA,CAAOp6B,CAAP,CAAhC,CADpB,CAKJ,OAAOkvE,EAlBY,CA5CrB,CAAkClC,CAAlC,CAEI/c,EAAJ,EACErpD,CAAA4rB,iBAAA,CAAuB,QAAQ,EAAG,CAAE,MAAOw1B,EAAA6Z,YAAT,CAAlC,CAAgEmL,CAAhE,CAtDgD,CAjGpD,GAAK9N,CAAA,CAAM,CAAN,CAAL,CAAA,CAF0C,IAItC4M,EAAa5M,CAAA,CAAM,CAAN,CACbyL,EAAAA,CAAczL,CAAA,CAAM,CAAN,CALwB,KAMtCjP,EAAWhwD,CAAAgwD,SAN2B,CAOtC0e,EAAa1uE,CAAAqQ,UAPyB,CAQtC89D,EAAa,CAAA,CARyB,CAStCpC,CATsC,CAUtCiB,EAAkB,CAAA,CAVoB,CAatCyB,EAAiB/qE,CAAA,CAAOtH,CAAAsa,cAAA,CAAuB,QAAvB,CAAP,CAbqB,CActC63D,EAAkB7qE,CAAA,CAAOtH,CAAAsa,cAAA,CAAuB,UAAvB,CAAP,CAdoB,CAetCi0D,EAAgB8D,CAAA9qE,MAAA,EAGXhG,EAAAA,CAAI,CAAb,KAlB0C,IAkB1ByvC,EAAW9sC,CAAA8sC,SAAA,EAlBe,CAkBK9uC,EAAK8uC,CAAA1wC,OAApD,CAAqEiB,CAArE,CAAyEW,CAAzE,CAA6EX,CAAA,EAA7E,CACE,GAA0B,EAA1B,GAAIyvC,CAAA,CAASzvC,CAAT,CAAAG,MAAJ,CAA8B,CAC5BiuE,CAAA,CAAcoC,CAAd,CAA2B/gC,CAAA4J,GAAA,CAAYr5C,CAAZ,CAC3B;KAF4B,CAMhCkuE,CAAAhB,KAAA,CAAgBH,CAAhB,CAA6ByD,CAA7B,CAAyCxD,CAAzC,CAGI3a,EAAJ,GACE0a,CAAA1hB,SADF,CACyBkmB,QAAQ,CAACpxE,CAAD,CAAQ,CACrC,MAAO,CAACA,CAAR,EAAkC,CAAlC,GAAiBA,CAAApB,OADoB,CADzC,CAMIgyE,EAAJ,CAAgBvC,CAAA,CAAexlE,CAAf,CAAsBrG,CAAtB,CAA+BoqE,CAA/B,CAAhB,CACS1a,CAAJ,CAAcgc,CAAA,CAAgBrlE,CAAhB,CAAuBrG,CAAvB,CAAgCoqE,CAAhC,CAAd,CACAiB,CAAA,CAAchlE,CAAd,CAAqBrG,CAArB,CAA8BoqE,CAA9B,CAA2CmB,CAA3C,CAlCL,CAF0C,CAnEvC,CANiE,CAApD,CA16GtB,CAm8HIn+D,GAAkB,CAAC,cAAD,CAAiB,QAAQ,CAACwF,CAAD,CAAe,CAC5D,IAAIi8D,EAAiB,CACnBjE,UAAWrsE,CADQ,CAEnBusE,aAAcvsE,CAFK,CAKrB,OAAO,CACLkrB,SAAU,GADL,CAELF,SAAU,GAFL,CAGLjjB,QAASA,QAAQ,CAACtG,CAAD,CAAUN,CAAV,CAAgB,CAC/B,GAAIf,CAAA,CAAYe,CAAAlC,MAAZ,CAAJ,CAA6B,CAC3B,IAAIu4B,EAAgBnjB,CAAA,CAAa5S,CAAA81B,KAAA,EAAb,CAA6B,CAAA,CAA7B,CACfC,EAAL,EACEr2B,CAAA+0B,KAAA,CAAU,OAAV,CAAmBz0B,CAAA81B,KAAA,EAAnB,CAHyB,CAO7B,MAAO,SAAQ,CAACzvB,CAAD,CAAQrG,CAAR,CAAiBN,CAAjB,CAAuB,CAAA,IAEhC2a,EAASra,CAAAqa,OAAA,EAFuB,CAGhCkxD,EAAalxD,CAAA7T,KAAA,CAFIsoE,mBAEJ,CAAbvD,EACElxD,CAAAA,OAAA,EAAA7T,KAAA,CAHesoE,mBAGf,CAEDvD,EAAL,EAAoBA,CAAAjB,UAApB,GACEiB,CADF,CACesD,CADf,CAII94C,EAAJ,CACE1vB,CAAAjH,OAAA,CAAa22B,CAAb,CAA4Bg5C,QAA+B,CAACltD,CAAD,CAASC,CAAT,CAAiB,CAC1EpiB,CAAA+0B,KAAA,CAAU,OAAV,CAAmB5S,CAAnB,CACIC,EAAJ,GAAeD,CAAf,EACE0pD,CAAAT,aAAA,CAAwBhpD,CAAxB,CAEFypD,EAAAX,UAAA,CAAqB/oD,CAArB;AAA6B7hB,CAA7B,CAL0E,CAA5E,CADF,CASEurE,CAAAX,UAAA,CAAqBlrE,CAAAlC,MAArB,CAAiCwC,CAAjC,CAGFA,EAAAgI,GAAA,CAAW,UAAX,CAAuB,QAAQ,EAAG,CAChCujE,CAAAT,aAAA,CAAwBprE,CAAAlC,MAAxB,CADgC,CAAlC,CAtBoC,CARP,CAH5B,CANqD,CAAxC,CAn8HtB,CAk/HI0P,GAAiBxO,EAAA,CAAQ,CAC3B+qB,SAAU,GADiB,CAE3BsD,SAAU,CAAA,CAFiB,CAAR,CAl/HrB,CAu/HIlc,GAAoBA,QAAQ,EAAG,CACjC,MAAO,CACL4Y,SAAU,GADL,CAELD,QAAS,UAFJ,CAGL3C,KAAMA,QAAQ,CAACxgB,CAAD,CAAQmb,CAAR,CAAa9hB,CAAb,CAAmB+nD,CAAnB,CAAyB,CAChCA,CAAL,GACA/nD,CAAAkR,SAMA,CANgB,CAAA,CAMhB,CAJA62C,CAAA6D,YAAA16C,SAIA,CAJ4Bo+D,QAAQ,CAAClR,CAAD,CAAaC,CAAb,CAAwB,CAC1D,MAAO,CAACr+D,CAAAkR,SAAR,EAAyB,CAAC62C,CAAAiB,SAAA,CAAcqV,CAAd,CADgC,CAI5D,CAAAr+D,CAAA6xB,SAAA,CAAc,UAAd,CAA0B,QAAQ,EAAG,CACnCk2B,CAAA+D,UAAA,EADmC,CAArC,CAPA,CADqC,CAHlC,CAD0B,CAv/HnC,CA2gII96C,GAAmBA,QAAQ,EAAG,CAChC,MAAO,CACL+Y,SAAU,GADL,CAELD,QAAS,UAFJ,CAGL3C,KAAMA,QAAQ,CAACxgB,CAAD,CAAQmb,CAAR,CAAa9hB,CAAb,CAAmB+nD,CAAnB,CAAyB,CACrC,GAAKA,CAAL,CAAA,CADqC,IAGjC59B,CAHiC,CAGzBolD,EAAavvE,CAAAiR,UAAbs+D,EAA+BvvE,CAAA+Q,QAC3C/Q,EAAA6xB,SAAA,CAAc,SAAd,CAAyB,QAAQ,CAAC2oB,CAAD,CAAQ,CACnC39C,CAAA,CAAS29C,CAAT,CAAJ,EAAsC,CAAtC,CAAuBA,CAAA99C,OAAvB;CACE89C,CADF,CACU,IAAIj5C,MAAJ,CAAW,GAAX,CAAiBi5C,CAAjB,CAAyB,GAAzB,CADV,CAIA,IAAIA,CAAJ,EAAcvzC,CAAAuzC,CAAAvzC,KAAd,CACE,KAAM3K,EAAA,CAAO,WAAP,CAAA,CAAoB,UAApB,CACqDizE,CADrD,CAEJ/0B,CAFI,CAEG/2C,EAAA,CAAYqe,CAAZ,CAFH,CAAN,CAKFqI,CAAA,CAASqwB,CAAT,EAAkBn+C,CAClB0rD,EAAA+D,UAAA,EAZuC,CAAzC,CAeA/D,EAAA6D,YAAA76C,QAAA,CAA2By+D,QAAQ,CAAC1xE,CAAD,CAAQ,CACzC,MAAOiqD,EAAAiB,SAAA,CAAclrD,CAAd,CAAP,EAA+BmB,CAAA,CAAYkrB,CAAZ,CAA/B,EAAsDA,CAAAljB,KAAA,CAAYnJ,CAAZ,CADb,CAlB3C,CADqC,CAHlC,CADyB,CA3gIlC,CA0iII2T,GAAqBA,QAAQ,EAAG,CAClC,MAAO,CACLsY,SAAU,GADL,CAELD,QAAS,UAFJ,CAGL3C,KAAMA,QAAQ,CAACxgB,CAAD,CAAQmb,CAAR,CAAa9hB,CAAb,CAAmB+nD,CAAnB,CAAyB,CACrC,GAAKA,CAAL,CAAA,CAEA,IAAIv2C,EAAa,EACjBxR,EAAA6xB,SAAA,CAAc,WAAd,CAA2B,QAAQ,CAAC/zB,CAAD,CAAQ,CACrC2xE,CAAAA,CAAS/wE,EAAA,CAAIZ,CAAJ,CACb0T,EAAA,CAAY6nC,KAAA,CAAMo2B,CAAN,CAAA,CAAiB,EAAjB,CAAqBA,CACjC1nB,EAAA+D,UAAA,EAHyC,CAA3C,CAKA/D,EAAA6D,YAAAp6C,UAAA,CAA6Bk+D,QAAQ,CAACtR,CAAD,CAAaC,CAAb,CAAwB,CAC3D,MAAoB,EAApB,CAAQ7sD,CAAR,EAA0Bu2C,CAAAiB,SAAA,CAAcoV,CAAd,CAA1B,EAAwDC,CAAA3hE,OAAxD,EAA4E8U,CADjB,CAR7D,CADqC,CAHlC,CAD2B,CA1iIpC,CA8jIIF,GAAqBA,QAAQ,EAAG,CAClC,MAAO,CACLyY,SAAU,GADL,CAELD,QAAS,UAFJ,CAGL3C,KAAMA,QAAQ,CAACxgB,CAAD,CAAQmb,CAAR;AAAa9hB,CAAb,CAAmB+nD,CAAnB,CAAyB,CACrC,GAAKA,CAAL,CAAA,CAEA,IAAI12C,EAAY,CAChBrR,EAAA6xB,SAAA,CAAc,WAAd,CAA2B,QAAQ,CAAC/zB,CAAD,CAAQ,CACzCuT,CAAA,CAAY3S,EAAA,CAAIZ,CAAJ,CAAZ,EAA0B,CAC1BiqD,EAAA+D,UAAA,EAFyC,CAA3C,CAIA/D,EAAA6D,YAAAv6C,UAAA,CAA6Bs+D,QAAQ,CAACvR,CAAD,CAAaC,CAAb,CAAwB,CAC3D,MAAOtW,EAAAiB,SAAA,CAAcqV,CAAd,CAAP,EAAmCA,CAAA3hE,OAAnC,EAAuD2U,CADI,CAP7D,CADqC,CAHlC,CAD2B,CAmB9BlV,EAAA+K,QAAA9B,UAAJ,CAEEsnC,OAAAE,IAAA,CAAY,gDAAZ,CAFF,EAQA1kC,EAAA,EAIA,CAFA+D,EAAA,CAAmB/E,EAAnB,CAEA,CAAAxD,CAAA,CAAOtH,CAAP,CAAAgzD,MAAA,CAAuB,QAAQ,EAAG,CAChCjqD,EAAA,CAAY/I,CAAZ,CAAsBgJ,EAAtB,CADgC,CAAlC,CAZA,CA5+yBqC,CAAtC,CAAD,CA4/yBGjJ,MA5/yBH,CA4/yBWC,QA5/yBX,CA8/yBC,EAAAD,MAAA+K,QAAA0oE,MAAA,EAAD,EAA2BzzE,MAAA+K,QAAA5G,QAAA,CAAuBlE,QAAvB,CAAA6D,KAAA,CAAsC,MAAtC,CAAA6wD,QAAA,CAAsD,8MAAtD;", -"sources":["angular.js"], -"names":["window","document","undefined","minErr","isArrayLike","obj","isWindow","length","nodeType","NODE_TYPE_ELEMENT","isString","isArray","forEach","iterator","context","key","isFunction","hasOwnProperty","call","isPrimitive","forEachSorted","keys","Object","sort","i","reverseParams","iteratorFn","value","nextUid","uid","setHashKey","h","$$hashKey","extend","dst","ii","arguments","j","jj","int","str","parseInt","noop","identity","$","valueFn","isUndefined","isDefined","isObject","isNumber","isDate","toString","isRegExp","isScope","$evalAsync","$watch","isBoolean","isElement","node","nodeName","prop","attr","find","makeMap","items","split","nodeName_","element","lowercase","arrayRemove","array","index","indexOf","splice","copy","source","destination","stackSource","stackDest","ngMinErr","push","result","Date","getTime","RegExp","match","lastIndex","emptyObject","create","getPrototypeOf","shallowCopy","src","charAt","equals","o1","o2","t1","t2","keySet","concat","array1","array2","slice","bind","self","fn","curryArgs","startIndex","apply","toJsonReplacer","val","toJson","pretty","JSON","stringify","fromJson","json","parse","startingTag","jqLite","clone","empty","e","elemHtml","append","html","NODE_TYPE_TEXT","replace","tryDecodeURIComponent","decodeURIComponent","parseKeyValue","keyValue","key_value","toKeyValue","parts","arrayValue","encodeUriQuery","join","encodeUriSegment","pctEncodeSpaces","encodeURIComponent","getNgAttribute","ngAttr","ngAttrPrefixes","angularInit","bootstrap","appElement","module","config","prefix","name","hasAttribute","getAttribute","candidate","querySelector","strictDi","modules","defaultConfig","doBootstrap","injector","tag","unshift","$provide","debugInfoEnabled","$compileProvider","createInjector","invoke","bootstrapApply","scope","compile","$apply","data","NG_ENABLE_DEBUG_INFO","NG_DEFER_BOOTSTRAP","test","angular","resumeBootstrap","angular.resumeBootstrap","extraModules","reloadWithDebugInfo","location","reload","getTestability","rootElement","get","snake_case","separator","SNAKE_CASE_REGEXP","letter","pos","toLowerCase","bindJQuery","originalCleanData","bindJQueryFired","jQuery","on","JQLitePrototype","isolateScope","controller","inheritedData","cleanData","jQuery.cleanData","elems","events","skipDestroyOnNextJQueryCleanData","elem","_data","$destroy","triggerHandler","JQLite","assertArg","arg","reason","assertArgFn","acceptArrayAnnotation","constructor","assertNotHasOwnProperty","getter","path","bindFnToScope","lastInstance","len","getBlockNodes","nodes","endNode","blockNodes","nextSibling","createMap","setupModuleLoader","ensure","factory","$injectorMinErr","$$minErr","requires","configFn","invokeLater","provider","method","insertMethod","queue","invokeQueue","moduleInstance","configBlocks","runBlocks","_invokeQueue","_configBlocks","_runBlocks","service","constant","animation","filter","directive","run","block","publishExternalAPI","version","uppercase","counter","csp","angularModule","$LocaleProvider","ngModule","$$sanitizeUri","$$SanitizeUriProvider","$CompileProvider","a","htmlAnchorDirective","input","inputDirective","textarea","form","formDirective","script","scriptDirective","select","selectDirective","style","styleDirective","option","optionDirective","ngBind","ngBindDirective","ngBindHtml","ngBindHtmlDirective","ngBindTemplate","ngBindTemplateDirective","ngClass","ngClassDirective","ngClassEven","ngClassEvenDirective","ngClassOdd","ngClassOddDirective","ngCloak","ngCloakDirective","ngController","ngControllerDirective","ngForm","ngFormDirective","ngHide","ngHideDirective","ngIf","ngIfDirective","ngInclude","ngIncludeDirective","ngInit","ngInitDirective","ngNonBindable","ngNonBindableDirective","ngPluralize","ngPluralizeDirective","ngRepeat","ngRepeatDirective","ngShow","ngShowDirective","ngStyle","ngStyleDirective","ngSwitch","ngSwitchDirective","ngSwitchWhen","ngSwitchWhenDirective","ngSwitchDefault","ngSwitchDefaultDirective","ngOptions","ngOptionsDirective","ngTransclude","ngTranscludeDirective","ngModel","ngModelDirective","ngList","ngListDirective","ngChange","ngChangeDirective","pattern","patternDirective","ngPattern","required","requiredDirective","ngRequired","minlength","minlengthDirective","ngMinlength","maxlength","maxlengthDirective","ngMaxlength","ngValue","ngValueDirective","ngModelOptions","ngModelOptionsDirective","ngIncludeFillContentDirective","ngAttributeAliasDirectives","ngEventDirectives","$anchorScroll","$AnchorScrollProvider","$animate","$AnimateProvider","$browser","$BrowserProvider","$cacheFactory","$CacheFactoryProvider","$controller","$ControllerProvider","$document","$DocumentProvider","$exceptionHandler","$ExceptionHandlerProvider","$filter","$FilterProvider","$interpolate","$InterpolateProvider","$interval","$IntervalProvider","$http","$HttpProvider","$httpBackend","$HttpBackendProvider","$location","$LocationProvider","$log","$LogProvider","$parse","$ParseProvider","$rootScope","$RootScopeProvider","$q","$QProvider","$$q","$$QProvider","$sce","$SceProvider","$sceDelegate","$SceDelegateProvider","$sniffer","$SnifferProvider","$templateCache","$TemplateCacheProvider","$templateRequest","$TemplateRequestProvider","$$testability","$$TestabilityProvider","$timeout","$TimeoutProvider","$window","$WindowProvider","$$rAF","$$RAFProvider","$$asyncCallback","$$AsyncCallbackProvider","$$jqLite","$$jqLiteProvider","camelCase","SPECIAL_CHARS_REGEXP","_","offset","toUpperCase","MOZ_HACK_REGEXP","jqLiteAcceptsData","NODE_TYPE_DOCUMENT","jqLiteBuildFragment","tmp","fragment","createDocumentFragment","HTML_REGEXP","appendChild","createElement","TAG_NAME_REGEXP","exec","wrap","wrapMap","_default","innerHTML","XHTML_TAG_REGEXP","lastChild","childNodes","firstChild","textContent","createTextNode","argIsString","trim","jqLiteMinErr","parsed","SINGLE_TAG_REGEXP","jqLiteAddNodes","jqLiteClone","cloneNode","jqLiteDealoc","onlyDescendants","jqLiteRemoveData","querySelectorAll","descendants","l","jqLiteOff","type","unsupported","expandoStore","jqLiteExpandoStore","handle","listenerFns","removeEventListener","expandoId","ng339","jqCache","createIfNecessary","jqId","jqLiteData","isSimpleSetter","isSimpleGetter","massGetter","jqLiteHasClass","selector","jqLiteRemoveClass","cssClasses","setAttribute","cssClass","jqLiteAddClass","existingClasses","root","elements","jqLiteController","jqLiteInheritedData","documentElement","names","parentNode","NODE_TYPE_DOCUMENT_FRAGMENT","host","jqLiteEmpty","removeChild","jqLiteRemove","keepData","parent","jqLiteDocumentLoaded","action","win","readyState","setTimeout","getBooleanAttrName","booleanAttr","BOOLEAN_ATTR","BOOLEAN_ELEMENTS","getAliasedAttrName","ALIASED_ATTR","createEventHandler","eventHandler","event","isDefaultPrevented","event.isDefaultPrevented","defaultPrevented","eventFns","eventFnsLength","immediatePropagationStopped","originalStopImmediatePropagation","stopImmediatePropagation","event.stopImmediatePropagation","stopPropagation","isImmediatePropagationStopped","event.isImmediatePropagationStopped","$get","this.$get","hasClass","classes","addClass","removeClass","hashKey","nextUidFn","objType","HashMap","isolatedUid","this.nextUid","put","anonFn","args","fnText","STRIP_COMMENTS","FN_ARGS","annotate","$inject","argDecl","FN_ARG_SPLIT","FN_ARG","all","underscore","last","modulesToLoad","supportObject","delegate","provider_","providerInjector","instantiate","providerCache","providerSuffix","enforceReturnValue","enforcedReturnValue","instanceInjector","factoryFn","enforce","loadModules","moduleFn","runInvokeQueue","invokeArgs","loadedModules","message","stack","createInternalInjector","cache","getService","serviceName","caller","INSTANTIATING","err","shift","locals","Type","instance","prototype","returnedValue","has","$injector","instanceCache","decorator","decorFn","origProvider","orig$get","origProvider.$get","origInstance","$delegate","autoScrollingEnabled","disableAutoScrolling","this.disableAutoScrolling","getFirstAnchor","list","Array","some","scrollTo","scrollIntoView","scroll","yOffset","getComputedStyle","position","getBoundingClientRect","bottom","elemTop","top","scrollBy","hash","elm","getElementById","getElementsByName","autoScrollWatch","autoScrollWatchAction","newVal","oldVal","supported","Browser","completeOutstandingRequest","outstandingRequestCount","outstandingRequestCallbacks","pop","error","startPoller","interval","check","pollFns","pollFn","pollTimeout","cacheStateAndFireUrlChange","cacheState","fireUrlChange","cachedState","history","state","lastCachedState","lastBrowserUrl","url","lastHistoryState","urlChangeListeners","listener","safeDecodeURIComponent","rawDocument","clearTimeout","pendingDeferIds","isMock","$$completeOutstandingRequest","$$incOutstandingRequestCount","self.$$incOutstandingRequestCount","notifyWhenNoOutstandingRequests","self.notifyWhenNoOutstandingRequests","callback","addPollFn","self.addPollFn","href","baseElement","reloadLocation","self.url","sameState","sameBase","stripHash","substr","self.state","urlChangeInit","onUrlChange","self.onUrlChange","$$checkUrlChange","baseHref","self.baseHref","lastCookies","lastCookieString","cookiePath","cookies","self.cookies","cookieLength","cookie","warn","cookieArray","substring","defer","self.defer","delay","timeoutId","cancel","self.defer.cancel","deferId","cacheFactory","cacheId","options","refresh","entry","freshEnd","staleEnd","n","link","p","nextEntry","prevEntry","caches","size","stats","id","capacity","Number","MAX_VALUE","lruHash","lruEntry","remove","removeAll","destroy","info","cacheFactory.info","cacheFactory.get","$$sanitizeUriProvider","parseIsolateBindings","directiveName","LOCAL_REGEXP","bindings","definition","scopeName","$compileMinErr","mode","collection","optional","attrName","hasDirectives","COMMENT_DIRECTIVE_REGEXP","CLASS_DIRECTIVE_REGEXP","ALL_OR_NOTHING_ATTRS","REQUIRE_PREFIX_REGEXP","EVENT_HANDLER_ATTR_REGEXP","this.directive","registerDirective","directiveFactory","Suffix","directives","priority","require","restrict","$$isolateBindings","aHrefSanitizationWhitelist","this.aHrefSanitizationWhitelist","regexp","imgSrcSanitizationWhitelist","this.imgSrcSanitizationWhitelist","this.debugInfoEnabled","enabled","safeAddClass","$element","className","$compileNodes","transcludeFn","maxPriority","ignoreDirective","previousCompileContext","nodeValue","compositeLinkFn","compileNodes","$$addScopeClass","namespace","publicLinkFn","cloneConnectFn","parentBoundTranscludeFn","transcludeControllers","futureParentElement","$$boundTransclude","$linkNode","wrapTemplate","controllerName","$$addScopeInfo","nodeList","$rootElement","childLinkFn","childScope","childBoundTranscludeFn","stableNodeList","nodeLinkFnFound","linkFns","idx","nodeLinkFn","$new","transcludeOnThisElement","createBoundTranscludeFn","transclude","elementTranscludeOnThisElement","templateOnThisElement","attrs","linkFnFound","Attributes","collectDirectives","applyDirectivesToNode","$$element","terminal","previousBoundTranscludeFn","elementTransclusion","boundTranscludeFn","transcludedScope","cloneFn","controllers","containingScope","$$transcluded","attrsMap","$attr","addDirective","directiveNormalize","isNgAttr","nAttrs","attributes","attrStartName","attrEndName","ngAttrName","NG_ATTR_BINDING","PREFIX_REGEXP","directiveNName","directiveIsMultiElement","nName","addAttrInterpolateDirective","animVal","addTextInterpolateDirective","NODE_TYPE_COMMENT","byPriority","groupScan","attrStart","attrEnd","depth","groupElementsLinkFnWrapper","linkFn","compileNode","templateAttrs","jqCollection","originalReplaceDirective","preLinkFns","postLinkFns","addLinkFns","pre","post","newIsolateScopeDirective","$$isolateScope","cloneAndAnnotateFn","getControllers","elementControllers","retrievalMethod","$searchElement","linkNode","controllersBoundTransclude","cloneAttachFn","hasElementTranscludeDirective","scopeToChild","controllerDirectives","$scope","$attrs","$transclude","controllerInstance","controllerAs","templateDirective","$$originalDirective","isolateScopeController","isolateBindingContext","identifier","bindToController","lastValue","parentGet","parentSet","compare","$observe","$$observers","$$scope","literal","b","assign","parentValueWatch","parentValue","$stateful","unwatch","$watchCollection","$on","invokeLinkFn","template","templateUrl","terminalPriority","newScopeDirective","nonTlbTranscludeDirective","hasTranscludeDirective","hasTemplate","$compileNode","$template","childTranscludeFn","$$start","$$end","directiveValue","assertNoDuplicate","$$tlb","createComment","replaceWith","replaceDirective","contents","denormalizeTemplate","removeComments","templateNamespace","newTemplateAttrs","templateDirectives","unprocessedDirectives","markDirectivesAsIsolate","mergeTemplateAttributes","compileTemplateUrl","Math","max","extra","tDirectives","startAttrName","endAttrName","multiElement","srcAttr","dstAttr","$set","tAttrs","linkQueue","afterTemplateNodeLinkFn","afterTemplateChildLinkFn","beforeTemplateCompileNode","origAsyncDirective","derivedSyncDirective","getTrustedResourceUrl","then","content","tempTemplateAttrs","beforeTemplateLinkNode","linkRootElement","$$destroyed","oldClasses","delayedNodeLinkFn","ignoreChildLinkFn","diff","what","previousDirective","text","interpolateFn","textInterpolateCompileFn","templateNode","templateNodeParent","hasCompileParent","$$addBindingClass","textInterpolateLinkFn","$$addBindingInfo","expressions","interpolateFnWatchAction","wrapper","getTrustedContext","attrNormalizedName","HTML","RESOURCE_URL","allOrNothing","trustedContext","attrInterpolatePreLinkFn","newValue","$$inter","oldValue","$updateClass","elementsToRemove","newNode","firstElementToRemove","removeCount","j2","replaceChild","expando","k","kk","annotation","attributesToCopy","$normalize","$addClass","classVal","$removeClass","newClasses","toAdd","tokenDifference","toRemove","writeAttr","booleanKey","aliasedKey","observer","trimmedSrcset","srcPattern","rawUris","nbrUrisWith2parts","floor","innerIdx","lastTuple","removeAttr","listeners","startSymbol","endSymbol","binding","isolated","noTemplate","dataName","str1","str2","values","tokens1","tokens2","token","jqNodes","globals","CNTRL_REG","register","this.register","allowGlobals","this.allowGlobals","addIdentifier","expression","later","ident","controllerPrototype","exception","cause","defaultHttpResponseTransform","headers","tempData","JSON_PROTECTION_PREFIX","contentType","jsonStart","JSON_START","JSON_ENDS","parseHeaders","line","headersGetter","headersObj","transformData","status","fns","defaults","transformResponse","transformRequest","d","common","CONTENT_TYPE_APPLICATION_JSON","patch","xsrfCookieName","xsrfHeaderName","useApplyAsync","this.useApplyAsync","interceptorFactories","interceptors","requestConfig","response","resp","reject","executeHeaderFns","headerContent","processedHeaders","headerFn","header","mergeHeaders","defHeaders","reqHeaders","defHeaderName","reqHeaderName","lowercaseDefHeaderName","chain","serverRequest","reqData","withCredentials","sendReq","promise","when","reversedInterceptors","interceptor","request","requestError","responseError","thenFn","rejectFn","success","promise.success","promise.error","done","headersString","statusText","resolveHttpPromise","resolvePromise","$applyAsync","$$phase","deferred","resolve","resolvePromiseWithResult","removePendingReq","pendingRequests","cachedResp","buildUrl","params","defaultCache","xsrfValue","urlIsSameOrigin","timeout","responseType","v","toISOString","interceptorFactory","createShortMethods","createShortMethodsWithData","createXhr","XMLHttpRequest","createHttpBackend","callbacks","$browserDefer","jsonpReq","callbackId","async","body","called","addEventListener","timeoutRequest","jsonpDone","xhr","abort","completeRequest","open","setRequestHeader","onload","xhr.onload","responseText","urlResolve","protocol","getAllResponseHeaders","onerror","onabort","send","this.startSymbol","this.endSymbol","escape","ch","mustHaveExpression","unescapeText","escapedStartRegexp","escapedEndRegexp","parseStringifyInterceptor","getTrusted","valueOf","newErr","$interpolateMinErr","endIndex","parseFns","textLength","expressionPositions","startSymbolLength","exp","endSymbolLength","compute","interpolationFn","$$watchDelegate","objectEquality","$watchGroup","interpolateFnWatcher","oldValues","currValue","$interpolate.startSymbol","$interpolate.endSymbol","count","invokeApply","setInterval","clearInterval","iteration","skipApply","$$intervalId","tick","notify","intervals","interval.cancel","NUMBER_FORMATS","DECIMAL_SEP","GROUP_SEP","PATTERNS","minInt","minFrac","maxFrac","posPre","posSuf","negPre","negSuf","gSize","lgSize","CURRENCY_SYM","DATETIME_FORMATS","MONTH","SHORTMONTH","DAY","SHORTDAY","AMPMS","medium","fullDate","longDate","mediumDate","shortDate","mediumTime","shortTime","pluralCat","num","encodePath","segments","parseAbsoluteUrl","absoluteUrl","locationObj","parsedUrl","$$protocol","$$host","hostname","$$port","port","DEFAULT_PORTS","parseAppUrl","relativeUrl","prefixed","$$path","pathname","$$search","search","$$hash","beginsWith","begin","whole","trimEmptyHash","stripFile","lastIndexOf","LocationHtml5Url","appBase","basePrefix","$$html5","appBaseNoFile","$$parse","this.$$parse","pathUrl","$locationMinErr","$$compose","this.$$compose","$$url","$$absUrl","$$parseLinkUrl","this.$$parseLinkUrl","relHref","appUrl","prevAppUrl","rewrittenUrl","LocationHashbangUrl","hashPrefix","withoutBaseUrl","withoutHashUrl","windowsFilePathExp","firstPathSegmentMatch","LocationHashbangInHtml5Url","locationGetter","property","locationGetterSetter","preprocess","html5Mode","requireBase","rewriteLinks","this.hashPrefix","this.html5Mode","setBrowserUrlWithFallback","oldUrl","oldState","$$state","afterLocationChange","$broadcast","absUrl","LocationMode","initialUrl","IGNORE_URI_REGEXP","ctrlKey","metaKey","shiftKey","which","button","target","absHref","preventDefault","initializing","newUrl","newState","$digest","$locationWatch","currentReplace","$$replace","urlOrStateChanged","debug","debugEnabled","this.debugEnabled","flag","formatError","Error","sourceURL","consoleLog","console","logFn","log","hasApply","arg1","arg2","ensureSafeMemberName","fullExpression","$parseMinErr","ensureSafeObject","children","isConstant","setter","setValue","fullExp","propertyObj","isPossiblyDangerousMemberName","cspSafeGetterFn","key0","key1","key2","key3","key4","expensiveChecks","eso","o","eso0","eso1","eso2","eso3","eso4","cspSafeGetter","pathVal","getterFnWithEnsureSafeObject","s","getterFn","getterFnCache","getterFnCacheExpensive","getterFnCacheDefault","pathKeys","pathKeysLength","code","needsEnsureSafeObject","lookupJs","evaledFnGetter","Function","sharedGetter","fn.assign","getValueOf","objectValueOf","cacheDefault","cacheExpensive","wrapSharedExpression","wrapped","collectExpressionInputs","inputs","expressionInputDirtyCheck","oldValueOfValue","inputsWatchDelegate","parsedExpression","inputExpressions","$$inputs","lastResult","oldInputValue","expressionInputWatch","newInputValue","oldInputValueOfValues","expressionInputsWatch","changed","oneTimeWatchDelegate","oneTimeWatch","oneTimeListener","old","$$postDigest","oneTimeLiteralWatchDelegate","isAllDefined","allDefined","constantWatchDelegate","constantWatch","constantListener","addInterceptor","interceptorFn","watchDelegate","regularInterceptedExpression","oneTimeInterceptedExpression","$parseOptions","$parseOptionsExpensive","oneTime","cacheKey","parseOptions","lexer","Lexer","parser","Parser","qFactory","nextTick","exceptionHandler","callOnce","resolveFn","Promise","simpleBind","scheduleProcessQueue","processScheduled","pending","Deferred","$qMinErr","TypeError","onFulfilled","onRejected","progressBack","catch","finally","handleCallback","$$reject","$$resolve","progress","makePromise","resolved","isResolved","callbackOutput","errback","$Q","Q","resolver","promises","results","requestAnimationFrame","webkitRequestAnimationFrame","cancelAnimationFrame","webkitCancelAnimationFrame","webkitCancelRequestAnimationFrame","rafSupported","raf","timer","TTL","$rootScopeMinErr","lastDirtyWatch","applyAsyncId","digestTtl","this.digestTtl","Scope","$id","$parent","$$watchers","$$nextSibling","$$prevSibling","$$childHead","$$childTail","$root","$$listeners","$$listenerCount","beginPhase","phase","decrementListenerCount","current","initWatchVal","flushApplyAsync","applyAsyncQueue","scheduleApplyAsync","isolate","destroyChild","child","$$ChildScope","this.$$ChildScope","watchExp","watcher","eq","deregisterWatch","watchExpressions","watchGroupAction","changeReactionScheduled","firstRun","newValues","deregisterFns","shouldCall","deregisterWatchGroup","expr","unwatchFn","watchGroupSubAction","$watchCollectionInterceptor","_value","bothNaN","newItem","oldItem","internalArray","oldLength","changeDetected","newLength","internalObject","veryOldValue","trackVeryOldValue","changeDetector","initRun","$watchCollectionAction","watch","watchers","dirty","ttl","watchLog","logIdx","asyncTask","asyncQueue","$eval","isNaN","msg","next","postDigestQueue","eventName","this.$watchGroup","$applyAsyncExpression","namedListeners","indexOfListener","$emit","targetScope","listenerArgs","currentScope","$$asyncQueue","$$postDigestQueue","$$applyAsyncQueue","sanitizeUri","uri","isImage","regex","normalizedVal","adjustMatcher","matcher","$sceMinErr","escapeForRegexp","adjustMatchers","matchers","adjustedMatchers","SCE_CONTEXTS","resourceUrlWhitelist","resourceUrlBlacklist","this.resourceUrlWhitelist","this.resourceUrlBlacklist","matchUrl","generateHolderType","Base","holderType","trustedValue","$$unwrapTrustedValue","this.$$unwrapTrustedValue","holderType.prototype.valueOf","holderType.prototype.toString","htmlSanitizer","trustedValueHolderBase","byType","CSS","URL","JS","trustAs","Constructor","maybeTrusted","allowed","this.enabled","msie","sce","isEnabled","sce.isEnabled","sce.getTrusted","parseAs","sce.parseAs","enumValue","lName","eventSupport","android","userAgent","navigator","boxee","vendorPrefix","vendorRegex","bodyStyle","transitions","animations","webkitTransition","webkitAnimation","pushState","hasEvent","divElm","handleRequestFn","tpl","ignoreRequestError","totalPendingRequests","transformer","httpOptions","handleError","testability","testability.findBindings","opt_exactMatch","getElementsByClassName","matches","dataBinding","bindingName","testability.findModels","prefixes","attributeEquals","testability.getLocation","testability.setLocation","testability.whenStable","deferreds","$$timeoutId","timeout.cancel","urlParsingNode","requestUrl","originUrl","filters","suffix","currencyFilter","dateFilter","filterFilter","jsonFilter","limitToFilter","lowercaseFilter","numberFilter","orderByFilter","uppercaseFilter","comparator","matchAgainstAnyProp","predicateFn","createPredicateFn","shouldMatchPrimitives","actual","expected","item","deepCompare","dontMatchWholeObject","actualType","expectedType","expectedVal","matchAnyProperty","actualVal","$locale","formats","amount","currencySymbol","fractionSize","formatNumber","number","groupSep","decimalSep","isFinite","isNegative","abs","numStr","formatedText","hasExponent","toFixed","parseFloat","fractionLen","min","round","fraction","lgroup","group","padNumber","digits","neg","dateGetter","date","dateStrGetter","shortForm","getFirstThursdayOfYear","year","dayOfWeekOnFirst","getDay","weekGetter","firstThurs","getFullYear","thisThurs","getMonth","getDate","jsonStringToDate","string","R_ISO8601_STR","tzHour","tzMin","dateSetter","setUTCFullYear","setFullYear","timeSetter","setUTCHours","setHours","m","ms","format","timezone","NUMBER_STRING","DATE_FORMATS_SPLIT","setMinutes","getMinutes","getTimezoneOffset","DATE_FORMATS","object","spacing","limit","Infinity","sortPredicate","reverseOrder","reverseComparator","comp","descending","objectToString","v1","v2","map","predicate","ngDirective","FormController","controls","parentForm","$$parentForm","nullFormCtrl","$error","$$success","$pending","$name","$dirty","$pristine","$valid","$invalid","$submitted","$addControl","$rollbackViewValue","form.$rollbackViewValue","control","$commitViewValue","form.$commitViewValue","form.$addControl","$$renameControl","form.$$renameControl","newName","oldName","$removeControl","form.$removeControl","$setValidity","addSetValidityMethod","ctrl","set","unset","$setDirty","form.$setDirty","PRISTINE_CLASS","DIRTY_CLASS","$setPristine","form.$setPristine","setClass","SUBMITTED_CLASS","$setUntouched","form.$setUntouched","$setSubmitted","form.$setSubmitted","stringBasedInputType","$formatters","$isEmpty","baseInputType","composing","ev","ngTrim","$viewValue","$$hasNativeValidators","$setViewValue","deferListener","origValue","keyCode","$render","ctrl.$render","createDateParser","mapping","iso","ISO_DATE_REGEXP","yyyy","MM","dd","HH","getHours","mm","ss","getSeconds","sss","getMilliseconds","part","NaN","createDateInputType","parseDate","dynamicDateInputType","isValidDate","parseObservedDateValue","badInputChecker","$options","previousDate","$$parserName","$parsers","parsedDate","$ngModelMinErr","timezoneOffset","ngMin","minVal","$validators","ctrl.$validators.min","$validate","ngMax","maxVal","ctrl.$validators.max","validity","VALIDITY_STATE_PROPERTY","badInput","typeMismatch","parseConstantExpr","fallback","parseFn","classDirective","arrayDifference","arrayClasses","digestClassCounts","classCounts","classesToUpdate","ngClassWatchAction","$index","old$index","mod","cachedToggleClass","switchValue","classCache","toggleValidationCss","validationErrorKey","isValid","VALID_CLASS","INVALID_CLASS","setValidity","isObjectEmpty","PENDING_CLASS","combinedState","REGEX_STRING_REGEXP","documentMode","isActive_","active","full","major","minor","dot","codeName","JQLite._data","MOUSE_EVENT_MAP","mouseleave","mouseenter","optgroup","tbody","tfoot","colgroup","caption","thead","th","td","ready","trigger","fired","removeData","removeAttribute","css","lowercasedName","specified","getNamedItem","ret","getText","$dv","multiple","selected","nodeCount","jqLiteOn","types","related","relatedTarget","contains","off","one","onFn","replaceNode","insertBefore","contentDocument","prepend","wrapNode","detach","after","newElement","toggleClass","condition","classCondition","nextElementSibling","getElementsByTagName","extraParameters","dummyEvent","handlerArgs","eventFnsCopy","arg3","unbind","$$annotate","$animateMinErr","$$selectors","classNameFilter","this.classNameFilter","$$classNameFilter","runAnimationPostDigest","cancelFn","$$cancelFn","defer.promise.$$cancelFn","ngAnimatePostDigest","ngAnimateNotifyComplete","resolveElementClasses","hasClasses","cachedClassManipulation","op","asyncPromise","currentDefer","applyStyles","styles","from","to","animate","enter","leave","move","$$addClassImmediately","$$removeClassImmediately","add","createdCache","STORAGE_KEY","$$setClassImmediately","APPLICATION_JSON","PATH_MATCH","locationPrototype","paramValue","Location","Location.prototype.state","CALL","APPLY","BIND","CONSTANTS","null","true","false","constantGetter","OPERATORS","+","-","*","/","%","===","!==","==","!=","<",">","<=",">=","&&","||","!","ESCAPE","lex","tokens","readString","peek","readNumber","isIdent","readIdent","is","isWhitespace","ch2","ch3","op2","op3","op1","operator","throwError","chars","isExpOperator","start","end","colStr","peekCh","quote","rawString","hex","String","fromCharCode","rep","ZERO","statements","primary","expect","filterChain","consume","arrayDeclaration","functionCall","objectIndex","fieldAccess","peekToken","e1","e2","e3","e4","peekAhead","t","unaryFn","right","$parseUnaryFn","binaryFn","left","isBranching","$parseBinaryFn","$parseConstant","$parseStatements","inputFn","argsFn","$parseFilter","every","assignment","ternary","$parseAssignment","logicalOR","middle","$parseTernary","logicalAND","equality","relational","additive","multiplicative","unary","$parseFieldAccess","indexFn","$parseObjectIndex","fnGetter","contextGetter","expressionText","$parseFunctionCall","elementFns","$parseArrayLiteral","valueFns","$parseObjectLiteral","yy","y","MMMM","MMM","M","H","hh","EEEE","EEE","ampmGetter","Z","timeZoneGetter","zone","paddedZone","ww","w","xlinkHref","propName","normalized","ngBooleanAttrWatchAction","htmlAttr","ngAttrAliasWatchAction","nullFormRenameControl","formDirectiveFactory","isNgForm","ngFormCompile","formElement","ngFormPreLink","handleFormSubmission","parentFormCtrl","alias","URL_REGEXP","EMAIL_REGEXP","NUMBER_REGEXP","DATE_REGEXP","DATETIMELOCAL_REGEXP","WEEK_REGEXP","MONTH_REGEXP","TIME_REGEXP","inputType","textInputType","weekParser","isoWeek","existingDate","week","minutes","hours","seconds","milliseconds","addDays","numberInputType","urlInputType","ctrl.$validators.url","modelValue","viewValue","emailInputType","email","ctrl.$validators.email","radioInputType","checked","checkboxInputType","trueValue","ngTrueValue","falseValue","ngFalseValue","ctrl.$isEmpty","ctrls","CONSTANT_VALUE_REGEXP","tplAttr","ngValueConstantLink","ngValueLink","valueWatchAction","$compile","ngBindCompile","templateElement","ngBindLink","ngBindWatchAction","ngBindTemplateCompile","ngBindTemplateLink","ngBindHtmlCompile","tElement","ngBindHtmlGetter","ngBindHtmlWatch","getStringValue","ngBindHtmlLink","ngBindHtmlWatchAction","getTrustedHtml","$viewChangeListeners","forceAsyncEvents","ngEventHandler","$event","previousElements","ngIfWatchAction","newScope","srcExp","onloadExp","autoScrollExp","autoscroll","changeCounter","previousElement","currentElement","cleanupLastIncludeContent","parseAsResourceUrl","ngIncludeWatchAction","afterAnimation","thisChangeId","namespaceAdaptedClone","trimValues","NgModelController","$modelValue","$$rawModelValue","$asyncValidators","$untouched","$touched","parsedNgModel","parsedNgModelAssign","ngModelGet","ngModelSet","pendingDebounce","$$setOptions","this.$$setOptions","getterSetter","invokeModelGetter","invokeModelSetter","$$$p","this.$isEmpty","currentValidationRunId","this.$setPristine","this.$setDirty","this.$setUntouched","UNTOUCHED_CLASS","TOUCHED_CLASS","$setTouched","this.$setTouched","this.$rollbackViewValue","$$lastCommittedViewValue","this.$validate","prevValid","prevModelValue","allowInvalid","$$runValidators","parserValid","allValid","$$writeModelToScope","this.$$runValidators","parseValid","doneCallback","processSyncValidators","syncValidatorsValid","validator","processAsyncValidators","validatorPromises","validationDone","localValidationRunId","processParseErrors","errorKey","this.$commitViewValue","$$parseAndValidate","this.$$parseAndValidate","this.$$writeModelToScope","this.$setViewValue","updateOnDefault","$$debounceViewValueCommit","this.$$debounceViewValueCommit","debounceDelay","debounce","ngModelWatch","formatters","ngModelCompile","ngModelPreLink","modelCtrl","formCtrl","ngModelPostLink","updateOn","DEFAULT_REGEXP","that","BRACE","IS_WHEN","updateElementText","newText","numberExp","whenExp","whens","whensExpFns","braceReplacement","watchRemover","lastCount","attributeName","tmpMatch","whenKey","ngPluralizeWatchAction","countIsNaN","ngRepeatMinErr","updateScope","valueIdentifier","keyIdentifier","arrayLength","$first","$last","$middle","$odd","$even","ngRepeatCompile","ngRepeatEndComment","lhs","rhs","aliasAs","trackByExp","trackByExpGetter","trackByIdExpFn","trackByIdArrayFn","trackByIdObjFn","hashFnLocals","ngRepeatLink","lastBlockMap","ngRepeatAction","previousNode","nextNode","nextBlockMap","collectionLength","trackById","collectionKeys","nextBlockOrder","trackByIdFn","itemKey","blockKey","ngRepeatTransclude","ngShowWatchAction","NG_HIDE_CLASS","tempClasses","NG_HIDE_IN_PROGRESS_CLASS","ngHideWatchAction","ngStyleWatchAction","newStyles","oldStyles","ngSwitchController","cases","selectedTranscludes","selectedElements","previousLeaveAnimations","selectedScopes","spliceFactory","ngSwitchWatchAction","selectedTransclude","caseElement","selectedScope","anchor","ngOptionsMinErr","NG_OPTIONS_REGEXP","nullModelCtrl","optionsMap","ngModelCtrl","unknownOption","databound","init","self.init","ngModelCtrl_","nullOption_","unknownOption_","addOption","self.addOption","removeOption","self.removeOption","hasOption","renderUnknownOption","self.renderUnknownOption","unknownVal","self.hasOption","setupAsSingle","selectElement","selectCtrl","ngModelCtrl.$render","emptyOption","setupAsMultiple","lastView","selectMultipleWatch","setupAsOptions","callExpression","exprFn","valueName","keyName","createIsSelectedFn","selectedSet","trackFn","trackIndex","isSelected","compareValueFn","selectAsFn","scheduleRendering","renderScheduled","render","updateLabelMap","labelMap","label","added","optionGroups","optionGroupNames","optionGroupName","optionGroup","existingParent","existingOptions","existingOption","valuesFn","anySelected","optionId","trackKeysCache","groupByFn","displayFn","nullOption","groupIndex","groupLength","optionGroupsCache","optGroupTemplate","lastElement","optionTemplate","optionsExp","selectAs","track","selectionChanged","selectedKey","viewValueFn","getLabels","toDisplay","ngModelCtrl.$isEmpty","nullSelectCtrl","selectCtrlName","interpolateWatchAction","ctrl.$validators.required","patternExp","ctrl.$validators.pattern","intVal","ctrl.$validators.maxlength","ctrl.$validators.minlength","$$csp"] -} diff --git a/src/main/webapp/bower_components/angular/bower.json b/src/main/webapp/bower_components/angular/bower.json deleted file mode 100644 index 3a791357..00000000 --- a/src/main/webapp/bower_components/angular/bower.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "angular", - "version": "1.3.11", - "main": "./angular.js", - "ignore": [], - "dependencies": { - } -} diff --git a/src/main/webapp/bower_components/angular/package.json b/src/main/webapp/bower_components/angular/package.json deleted file mode 100644 index 2a45a11d..00000000 --- a/src/main/webapp/bower_components/angular/package.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "angular", - "version": "1.3.11", - "description": "HTML enhanced for web apps", - "main": "angular.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "repository": { - "type": "git", - "url": "https://github.com/angular/angular.js.git" - }, - "keywords": [ - "angular", - "framework", - "browser", - "client-side" - ], - "author": "Angular Core Team <angular-core+npm@google.com>", - "license": "MIT", - "bugs": { - "url": "https://github.com/angular/angular.js/issues" - }, - "homepage": "http://angularjs.org" -} diff --git a/src/main/webapp/bower_components/bootstrap/.bower.json b/src/main/webapp/bower_components/bootstrap/.bower.json deleted file mode 100644 index daeea0bf..00000000 --- a/src/main/webapp/bower_components/bootstrap/.bower.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "bootstrap", - "version": "2.3.0", - "main": [ - "./docs/assets/js/bootstrap.js", - "./docs/assets/css/bootstrap.css" - ], - "dependencies": { - "jquery": "~1.8.0" - }, - "homepage": "https://github.com/twbs/bootstrap", - "_release": "2.3.0", - "_resolution": { - "type": "version", - "tag": "v2.3.0", - "commit": "af172e74e9e7215bd05087cfd89026afbf575e92" - }, - "_source": "git://github.com/twbs/bootstrap.git", - "_target": "2.3.0", - "_originalSource": "bootstrap" -} \ No newline at end of file diff --git a/src/main/webapp/bower_components/bootstrap/.gitignore b/src/main/webapp/bower_components/bootstrap/.gitignore deleted file mode 100644 index 3b10ffb3..00000000 --- a/src/main/webapp/bower_components/bootstrap/.gitignore +++ /dev/null @@ -1,37 +0,0 @@ -# Numerous always-ignore extensions -*.diff -*.err -*.orig -*.log -*.rej -*.swo -*.swp -*.zip -*.vi -*~ -*.sass-cache - -# OS or Editor folders -.DS_Store -._* -Thumbs.db -.cache -.project -.settings -.tmproj -*.esproj -nbproject -*.sublime-project -*.sublime-workspace - -# Komodo -*.komodoproject -.komodotools - -# Folders to ignore -.hg -.svn -.CVS -.idea -node_modules -dist diff --git a/src/main/webapp/bower_components/bootstrap/.travis.yml b/src/main/webapp/bower_components/bootstrap/.travis.yml deleted file mode 100644 index b8e1f172..00000000 --- a/src/main/webapp/bower_components/bootstrap/.travis.yml +++ /dev/null @@ -1,3 +0,0 @@ -language: node_js -node_js: - - 0.6 \ No newline at end of file diff --git a/src/main/webapp/bower_components/bootstrap/CHANGELOG.md b/src/main/webapp/bower_components/bootstrap/CHANGELOG.md deleted file mode 100644 index 68e2850b..00000000 --- a/src/main/webapp/bower_components/bootstrap/CHANGELOG.md +++ /dev/null @@ -1,350 +0,0 @@ -## 2.3.0 (February 7, 2013) - -Minor release to add carousel indicators, improve tooltips, improve dev setup, and fix hella bugs. - -- **Repository changes:** - - **Local instead of global dependencies** for our makefile and install process. Now getting started is way easier—just run `npm install`. - - Upgraded to jQuery 1.9. No changes were needed, but we did upgrade the included jQuery file to the latest release. - - Moved changelog to be within the repo instead of as a wiki page. -- **New and improved features:** - - **Added carousel indicators!** Add the HTML and it automagically works. - - **Added `container` option to tooltips.** The default option is still `insertAfter`, but now you may specify where to insert tooltips (and by extension, popovers) with the optional container parameter. - - Improved popovers now utilize `max-width` instead of `width`, have been widened from 240px to 280px, and will automatically hide the title if one has not been set via CSS `:empty` selector. - - Improved tooltip alignment on edges with [#6713](https://github.com/twitter/bootstrap/pull/6713). - - **Improved accessibility for links in all components.** After merging [#6441](https://github.com/twitter/bootstrap/pull/6441), link hover states now apply to the `:focus` state as well. This goes for basic `<a>` tags, as well as buttons, navs, dropdowns, and more. - - Added print utility classes to show and hide content between `screen` and `print` via CSS. - - Updated input groups to make them behave more like default form controls. Added `display: inline-block;`, increased `margin-bottom`, and added `vertical-align: middle;` to match `<input>` styles. - - Added `.horizontal-three-colors()` gradient mixin (with example in the CSS tests file). - - Added `.text-left`, `.text-center`, and `.text-right` utility classes for easy typographic alignment. - - Added `@ms-viewport` so IE10 can use responsive CSS when in split-screen mode. -- **Docs changes:** - - Added [new justified navigation example](https://f.cloud.github.com/assets/98681/25869/5e2f812c-4afa-11e2-9293-501cd689232d.png). - - Added sticky footer with fixed navbar example. - -See more on the [2.3.0 pull request](https://github.com/twitter/bootstrap/pull/6346). - - -## 2.2.2 (December 8, 2012) - -Bugfix release addressing docs, CSS, and some JavaScript issues. Key changes include: - -- **Docs:** - - Assets (illustrations and examples) are now retina-ready. - - Replaced [Placehold.it](http://placehold.it) with [Holder.js](http://imsky.github.com/holder/), a client-side and retina-ready placeholder image tool. -- **Dropdowns:** Temporary fix added for dropdowns on mobile to prevent them from closing early. -- **Popovers:** - - No longer inherits `font-size: 0;` when placed in button groups. - - Arrows refactored to work in IE8, and use less code. - - Plugin no longer inserts popover content into a `<p>`, but rather directly into `.popover-content`. -- **Labels and badges:** Now [automatically collapse](https://github.com/twitter/bootstrap/commit/ead5dbeba5cd7acfa560bfb353f5e7c4f4a19256) if they have no content. -- **Tables:** Nesting support with `.table-bordered` and `.table-striped` greatly improved. -- **Typeahead:** - - Now [inserts dropdown menu after the input](https://github.com/twitter/bootstrap/commit/1747caf19d59cad7fdc90ae56a00e0e2849f95f4) instead of at the close of the document. - - Hitting escape will place focus back on the `<input>`. -- Print styles, from HTML5 Boilerplate, have been added. - -See more on the [2.2.2 milestone](https://github.com/twitter/bootstrap/issues?milestone=17&state=closed). - - -## 2.2.1 (October 30, 2012) - -Hotfix release to address the carousel bug reports. - - -## 2.2.0 (October 29, 2012) - -### tl;dr - -2.1.2 is now 2.2.0: four new example templates, added media component, new typographic scale, fixed that box-shadow mixin bug, fixed z-index issues, and [more](https://github.com/twitter/bootstrap/issues?milestone=15&page=1&state=closed). - -### Highlights - -- **Added four new example templates** to the docs, including a narrow marketing page, sign in form, sticky footer, and a fancy carousel (created for an upcoming .net magazine article). -- **Added the media component**, to create larger common components like comments, Tweets, etc. -- **New variable-driven typographic scale** based on `@baseFontSize` and `@baseLineHeight`. -- Revamped mini, small, and large padding via new variables for inputs and buttons so everything is the same size. -- Reverted 2.1.1's `.box-shadow();` mixin change that caused compiler errors. -- Improved dropdown submenus to support dropups and left-aligned submenus. -- Fixed z-index issues with tooltips and popovers in modals. -- Hero unit now sets basic type styles for the entire component, rather than on `.hero-unit p { ... }`. -- Updated JavaScript plugins and docs to jQuery 1.8.1. -- Added Contributing.md file. -- Added support for installing Bootstrap via [Bower](http://twitter.github.com/bower). -- Miscellaneous variable improvements across the board. -- Miscellaneous documentation typos fixed. - -For the full list of issues included in this release, visit the [2.2.0 milestone on GitHub](https://github.com/twitter/bootstrap/issues?milestone=15&page=1&state=closed) - - - -## 2.1.1 (September 4, 2012) - -* New feature: alert text. We documented these new classes, like `.text-success`, at the bottom of the [Typography section](http://twitter.github.com/bootstrap/base-css.html#typography) along with the long undocumented `.muted`. -* Fixed a lot of typos in the docs. Spelling is hard. -* Made the `.box-shadow()` mixin more durable. It no longer requires escaping for multiple shadows, meaning you can easily use variables and functions in them once again. -* Widened `.dl-horizontal dt` and `.horizontal-form .control-group` to better handle the increased font-size. -* Dropdown submenus improved: now you only see the next level, not all levels, on hover of the submenu toggle. -* Clarified jQuery and Bootstrap template requirements in Getting Started section. -* `select` now utilizes `@inputBorder`. -* `.lead` now scales up from `@baseFontSize` instead of being a fixed font-size and line-height. -* Fixed the vertical three color gradient in latest Firefox. -* Reordered some variables that caused errors in certain Less compilers. - -View all closed issues on the [2.1.1 milestone](https://github.com/twitter/bootstrap/issues?milestone=14&state=closed). - - -## 2.1.0 (August 20, 2012) - -### Key changes - -* Submenu support on dropdowns -* Affix JavaScript plugin -* Block level buttons -* State classes on table rows -* Improved disabled states on navs and dropdowns -* The navbar component is now white by default, with an optional class to darken it -* Improved prepended and appended inputs -* New base font-size and line-height -* Added variable for navbar collapse trigger point -* Fluid grid offsets -* Fluid grid system variables are no longer fixed percentages -* Removed LESS docs page - -For full set of changes, see the completed milestone: https://github.com/twitter/bootstrap/issues?milestone=7&page=1&state=closed - -## 2.0.4 (June 1, 2012) - - -### Docs - -- Added `type="button"` to all dismiss buttons in alerts and modals to avoid a bug in which they prevent their parent's `form` from properly submitting. -- Added simple documentation to Base CSS for `.lead`. -- Added new CSS test to illustrate how the navbar, static and fixed, behaves. -- Clarified grid sizing copy to include mention of responsive variations. -- Reformatted the LESS docs page to prevent terrible table displays at smaller grid sizes. -- Miscellaneous typos and tweaks. - -### CSS - -- Refactored forms.less to make our selectors more specific for fewer overrides and less code. Instead of a generic `input` selector and various resets, we target each type of input like `input[type="text"]`, `input[type="password"]`, etc. -- Form field state (e.g., success or error) now applies to checkbox and radio labels. -- Removed redundant CSS on `<p>` for `font-family`, `font-size`, and `line-height`. -- Removed redundant `color` declaration from the `<label>` element. -- Added variables for dropdown dividers border colors. -- `legend` and `.form-actions` share the same `border-color`, `#e5e5e5`. -- Fixed some responsive issues with input-prepend and -append, notably with the fluid grid. -- Added special CSS to prevent `max-width: 100%;` on images from messing up Google Maps rendering. -- Scope opened dropdowns to only immediate children to avoid unintended cascade. -- Similarly, scope floated-right dropdowns to immediate children with `.pull-right > .dropdown-menu`. -- Updated `.placeholder()` mixin to use `&` operator in Less for proper output when compiling. -- Added `-ms-input-placeholder` to `.placeholder()` mixin. -- Added CSS3 hyphens mixin. -- Fixed a bug in IE7/8 where certain form controls would not show text if the parent had a filter opacity set. - - -## 2.0.3 (April 24, 2012) - -Running makefile now require JSHint and Recess. - -### HTML and CSS - -- Overhauled the responsive utility classes to simplify required CSS, add `!important` to all declarations, and use `display: inherit` in place of `display: block` to account for different types of elements. -- Removed `>` from fluid grid column selectors, meaning every element with a `.span*` class within a `.row-fluid` will use percentage widths instead of fixed-pixels. -- Fixed regression in responsive images support as of 2.0.1. We've re-added `max-width: 100%;` to images by default. We removed it in our last release since we had folks complaining about Google Maps integration and other projects, but we're taking a different stance now on these things and will require developers to make these tweaks on their end. -- Added variable `@navbarBrandColor` for the brand element in navbars, which defaults to `@navbarLinkColor`. -- Font-family mixins now use variables for their stacks. -- Fixed an unescaped `filter` on the `.reset-filter()` mixin that was causing some errors depending on your compiler. -- Fixed regression in `.form-actions` background, which was too dark, by adding a new variable `@formActionsBackground` and changing the color to `#f5f5f5` instead of `#eee`. -- Fixed an issue on button group dropdowns where the background color was not using the button's darker color when the dropdown is open. -- Generalized and simplified the open dropdown classes while adding smarter defaults. Instead of `.dropdown.open`, we now use just `.open`. On the defaults side, all dropdown menus now have rounded corners to start. -- Improved active `.dropdown-toggle` styles (for dropdown buttons) by darkening the background and sharpening the inset shadow to match the active state of buttons. -- Direction of animation on progress bars reversed. -- Fixed input-prepend/append issue with uneditable inputs: `.uneditable-input` was being floated and a missing comma meant its `border-radius` for the append option wasn't being applied properly. -- Removed `height: auto;` from `img` since it was overriding dimensions set via HTML attributes. -- Fixed an issue of double borders on the top of tables with captions or colgroups. -- Fixed issue with anchor buttons in the `.navbar-text`. Instead of a general styling on all anchors within an element with that class, we now have a new class to specifically apply appropriate link color. -- Added support for `@navbarHeight` on the brand/project name and nav links for complete navbar height customization. -- Fixed the black borders on buttons problem in IE7 by removing the border, increasing the line-height, and providing darker background colors. -- Removed excess padding on `.search-query` inputs in IE7 since it doesn't have border-radius. -- Updated alert messages in Components to use `button` elements as close icons instead of `a`. Both can be used, but an `a` will require `href="#"` for dismissal on iOS devices. -- Fixed an issue with prepended/appended inputs in Firefox where `select` elements required two clicks to toggle the dropdown. Resolved by moving the `position: relative` to the `select` by default instead of on `:focus`. -- Added a new mixin, `.backface-visibility`, to help refine CSS 3D tranforms. Examples and explanation of usage can be found on [CSS Tricks](http://css-tricks.com/almanac/properties/b/backface-visibility/). -- Changed specificity of grid classes in responsive layouts under 767px to accurately target `input`, `select`, and `textarea` elements that use `.span*` classes. -- Horizontal description lists, `.dl-horizontal`, now truncate terms that are too long to fit in their fixed-width column. In the < 767px responsive layout, they change to their default stacked layout. -- Changed tabbable tabs to prevent issues in left and right aligned tabs. `.tab-content` would not growing to its parent's full width due to `display: table`. We removed that and the `width: 100%` and instead just set `overflow: auto` to clear the left and right aligned tabs. -- Updated thumbnails to support fluid grid column sizing. -- Added `>` to most of the button group selectors -- Added new variable, `@inputBorderRadius`, to all form controls that previously made use of the static `3px` value everywhere. -- Changed the way we do `border-radius` for tables. Instead of the regular mixin that zeros out all other corners, we specify one corner only so they can be combined for use on single column table headers. -- Updated Glyphicons Halflings from 1.5 to 1.6, introducing 20 new icons. -- Added an `offset` paramater to the `.makeColumn`. -- Increased the specificity of all tabbable nav selectors to include `.nav-collapse` to appropriately scope the responsive navbar behavior. -- Fixed uneditable inputs: text now cuts off and does not wrap, making it behave just like a default `input`. -- Labels and badges are now `vertical-align: baseline;` so they line up with surrounding text. - -### Javascript - -- Add jshint support -- Add travis-ci support w/ headless phantom integration -- Replace UA sniffing in bootstrap-transitions.js -- Add MSTransitionEnd event to transition plugin -- Fix pause method in carousel (shouldn't restart when hovering over controls) -- Fix crazy opera bug #1776 -- Don't open dropdown if target element is disabled -- Always select last item in scrollspy if you've reached the bottom of the document or element -- Typeahead should escape regexp special chars -- If interval is false on carousel, do not auto-cycle -- Add preventDefault support for all initial event types (show, close, hide, etc.) -- Fix collapse bug in ie7+ for initial collapse in -- Fix nested collapse bug -- If transitioning collapse, don't start new transition -- Try to autodetect when to use html/text method in tooltip/popovers to help prevent xss -- Add bootstrap + bootstrap.min.js to gh-pages for @remy and jsbin support - -### Documentation and repo - -- Combined badges and labels into a single LESS file, labels-badges.less, to reduce repeated CSS. -- Separated responsive features into multiple files. We now have a file for each grouping of media queries (tablets and down, tablets to desktops, and large desktops). Additionally, the visible/hidden utility classes and the responsive navbar are in their own files. The output is the same in the compiled CSS, but this should give folks a bit more flexibility. -- Added a new CSS Tests page in the docs (not in the top nav) for better testing of edge cases and extending the use of standard components. -- Removed the bootstrap.zip file from the repo and the make process for faster building and a lighter repo. From now on, the zip will only be in the documentation branch. -- Fixed incorrect use of class instead of ID for tabs example and added documentation for multiple ways of toggling tabs. -- Fixed required markup listed for the specialized navbar search field. -- Removed all mention of `@siteWidth`, a variable no longer in use. -- Removed mentions of unused `@buttonPrimaryBackground` variable, which is no longer in use. -- Updated LESS docs page to include all the new variables we added in previous releases. -- Removed broken "dropup" menus from tabs and pills examples (shouldn't have been there in the first place). -- Replaced `.badge-error` with `.badge-important`. The error option is not a valid class and was a typo in the docs. -- Fixed mention of how to add plain text to the navbar. Previously the docs stated you only needed a `p` tag, but the required HTML is any element with class `.navbar-text`. -- Clarified the use of `.tabbable` for tabs. The wrapping class is only required for left and right tabs to clear their floats. Also added mention of `.fade` to fade in tabs. -- Updated forms documentation: - - Remove unnecessary duplicate help text in first example - - Added mention of required `input` class, `.search-query`, for the search form variation - - Removed incorrect mention of form fields being `display: block;` to start as fields are `inline-block` to start. -- Added mention of `data-target` attribute for the dropdowns javascript plugin to show how to keep custom URLs intact on links with `.dropdown-toggle` class. -- Updated the Kippt screenshot on the homepage to reflect their recent responsive redesign and upgrade to 2.0.2. - - -## 2.0.2 (March 12, 2012) - -Overview of docs changes, bugfixes, and new features. - -### Documentation updates - -- All docs pages now have distinct titles, such as <em>Scaffolding · Twitter Bootstrap</em>. -- Updated the Apple touch icons (now black on black instead of the blue grid) and fixed the links to them in the docs. -- Added new global styles docs section to the Scaffolding page. - - Required use of HTML5 doctype - - Overview of global typographic and links details - - Mention of our embedded CSS reset via [Normalize.css](http://necolas.github.com/normalize.css/) -- Added version number to the download button on the docs homepage. -- Updated progress bars section to simplify how the classes stack and more clearly indicate the available optional classes and styles. -- Added a new example, [SoundReady.fm](http://soundready.fm), to the homepage -- Added various sizes to the docs for button groups - -### Resolved bugs - -- Removed all IE7 hacks and floats from `.input-prepend` and `.input-append`, however, this requires you to **ensure there is no whitespace in your code** between `.add-on` and the `input`. -- In `.input-prepend` and `.input-append`, added ability to use add-ons on both sides when you chain the selectors. -- Updated lingering `.btn-dark` reference to `.btn-inverse`. -- Fixed issue with content being cut off in `.tab-content` for tabbable sections. -- Updated `.navbar .container` to use `width: auto;` to start and then reset the fixed widths via the `#gridSystem` mixin (it's a little dirty, but required to avoid adding another class). -- Modal footer buttons are now aligned by their parent via `text-align: right;` instead of `float: right` on the button level. This was changed to allow the use of `.pull-left` and `.pull-right` to align buttons easily. Double check your button order with this change! -- Fixed problem where default striped progress bar was green instead of blue. -- Fixed CSS selector used for `input` and `textarea` grid sizes to properly apply the CSS (was `input > .span*` and now is `input.span*`). - -### New features - -- Horizontal dividers support added to nav lists -- Added basic version of badges -- Added visible/hidden classes for devices -- Added support for buttons in input-prepend/append component -- Added .navbar-fixed-bottom support -- Added .dropup support for dropdown menus to pop them upward instead of downward (this is automatically done for the newly added fixed bottom navbar). -- Added mixin for [new image replacement technique](http://www.zeldman.com/2012/03/01/replacing-the-9999px-hack-new-image-replacement/) -- Added pause on hover for the carousel -- Added tons of new variables for typography, buttons, forms, dropdowns, navbar, and more for the LESS pros out there. These variables have also been reflected on the Customize page. -- Added new horizontal description list variation -- Added `.disabled` class support to the pager component (also added a mention of this to the docs) -- Added `.well-large` and `.well-small` classes for extending the well component - -For a full issue-by-issue rundown of the release, check out the now closed [2.0.2 milestone on GitHub](https://github.com/twitter/bootstrap/issues?sort=created&direction=desc&state=closed&page=1&milestone=9) - -## v2.0.1 (February 17, 2012) - -Overview of changes: - -- Previously the docs called for use of `.control-label` in the examples, but the CSS didn't make clear use of it. This class is required for horizontal forms and has been reflected in the CSS. -- We've tried our best to improve rendering of buttons and icons across all browsers. Some issues remain; Firefox throws an `!important`on `line-height` for inputs, so that's the big one. -- We refined the label component style to move away from uppercase. -- Added the black button option, `.btn-inverse`. -- Added a mini button class, `.btn-mini`. -- We had to re-add the protocol, `http:` to the HTML5 schim because IE7-8 wouldn't recognize it, dropping some HTML5 support for those browsers and introducing major performance issues. -- Resolved some issues with responsive layouts where media queries would overlap at 768px and 980px. -- Rearranged Scaffolding docs page to split fixed and fluid grid systems. -- Tons of docs updates for typos and language changes. - -For full list of changes, see the now closed [v2.0.1 milestone](https://github.com/twitter/bootstrap/issues?milestone=8&state=closed). - -## v2.0.0 (January 28, 2012) -Complete rewrite of the library. For full details, head to the upgrading doc at http://twitter.github.com/bootstrap/upgrading.html. - -## v1.4.0 -### Key bug fixes and changes -- **Updated tables** to make no border the default and add options for condensed and bordered versions -- **Updated form states** to expand on error styles and provide warning and success variations -- New javascript plugin for button states -- Switched to strict mode for Javascript plugins -- Added more data attribute controls to our plugins -- Full list of 25+ issues fixed: https://github.com/twitter/bootstrap/issues?milestone=6&state=closed - -## v1.3.0 -### New features -- **Javascript plugins** for modals, alerts, dropdowns, scrollspy, tabs, tooltips, and popovers that work with jQuery and Ender -- **Massively updated docs** for both the main page and for the new javascript plugins -- **Inline labels** for marking inline content with key visual flags -- Media thumbnails -- Breadcrumbs - -### Updated docs -- Added complete javascript page with detailed documentation for how to use plugins -- Three complete example pages of using Bootstrap, linked from main docs page with thumbnails -- Added section for compiling Less, for guidelines on how to recompile Bootstrap with Less -- Added section for customizing grid variables in Less to roll your own grid system -- Added section for code for using pre and code tags -- Added section for form field sizes that match grid column sizes - -### Key bug fixes and changes - - Updated table styles to be just a tad bit more refined - - Added new form input sizes based on the Bootstrap grid system (meaning now you can do `input.span5` for a 280px-wide input) - - Removed `:focus` states from `:active` links in Firefox - - Fixed unqualified `.clearfix` in forms.less that added bottom margin to all containers - - Updated `.container()` mixing to be `.fixed-container()` to prevent conflicts when compiling - - Added focus states (either `box-shadow` or `outline` on `:focus`) to all buttons, links, and inputs - - No longer require `h3` in topbar, but still support for backwards compatibility - -## v1.2.0 -- **Dropdowns refactored** to be extensible (now work in ul.tabs) -- **Added HTML5 form support** by generalizing the form selectors (e.g., input instead of input[type=text|password]) -- **Gradients back in IE**, but removed rounded corners in IE9 to prevent background bleed on buttons and alert messages -- **Simplified the grid CSS** by removing the static .span1-16 classes in favor of CSS-style regex for column styles in the grid -- **Added .one-third and .two-thirds columns** to the grid system -- Fixed bug in disabled buttons where they received :active styles -- Bug fixes - -## v1.1.1 -- **Redesigned alerts** to be more readable -- **Refactored buttons and alerts CSS** to be simpler -- Updated grid system to be more specific and not require .column or columns -- Improved on specificity of CSS selectors by removing unnecessary tag and parent selectors -- Miscellaneous updates to docs -- Bug fixes - -## v1.1.0 -- **Added support for IE7 and IE8** -- Added examples directory with first example usage of Bootstrap for a simple website -- Syntax fixes for gradients and color-stops -- Miscellaneous updates to docs -- Bug fixes - -## v1.0.0 -- **Initial release** \ No newline at end of file diff --git a/src/main/webapp/bower_components/bootstrap/CONTRIBUTING.md b/src/main/webapp/bower_components/bootstrap/CONTRIBUTING.md deleted file mode 100644 index c97e8b81..00000000 --- a/src/main/webapp/bower_components/bootstrap/CONTRIBUTING.md +++ /dev/null @@ -1,75 +0,0 @@ -# Contributing to Bootstrap - -Looking to contribute something to Bootstrap? **Here's how you can help.** - - - -## Reporting issues - -We only accept issues that are bug reports or feature requests. Bugs must be isolated and reproducible problems that we can fix within the Bootstrap core. Please read the following guidelines before opening any issue. - -1. **Search for existing issues.** We get a lot of duplicate issues, and you'd help us out a lot by first checking if someone else has reported the same issue. Moreover, the issue may have already been resolved with a fix available. -2. **Create an isolated and reproducible test case.** Be sure the problem exists in Bootstrap's code with a [reduced test cases](http://css-tricks.com/reduced-test-cases/) that should be included in each bug report. -3. **Include a live example.** Make use of jsFiddle or jsBin to share your isolated test cases. -4. **Share as much information as possible.** Include operating system and version, browser and version, version of Bootstrap, customized or vanilla build, etc. where appropriate. Also include steps to reproduce the bug. - - - -## Key branches - -- `master` is the latest, deployed version. -- `gh-pages` is the hosted docs (not to be used for pull requests). -- `*-wip` is the official work in progress branch for the next release. - - - -## Notes on the repo - -As of v2.0.0, Bootstrap's documentation is powered by Mustache templates and built via `make` before each commit and release. This was done to enable internationalization (translation) in a future release by uploading our strings to the [Twitter Translation Center](http://translate.twttr.com/). Any edits to the docs should be first done in the Mustache files and then recompiled into the HTML. - - - -## Pull requests - -- Try to submit pull requests against the latest `*-wip` branch for easier merging -- Any changes to the docs must be made to the Mustache templates, not just the compiled HTML pages -- CSS changes must be done in .less files first, never just the compiled files -- If modifying the .less files, always recompile and commit the compiled files bootstrap.css and bootstrap.min.css -- Try not to pollute your pull request with unintended changes--keep them simple and small -- Try to share which browsers your code has been tested in before submitting a pull request - - - -## Coding standards: HTML - -- Two spaces for indentation, never tabs -- Double quotes only, never single quotes -- Always use proper indentation -- Use tags and elements appropriate for an HTML5 doctype (e.g., self-closing tags) - - - -## Coding standards: CSS - -- Adhere to the [Recess CSS property order](http://markdotto.com/2011/11/29/css-property-order/) -- Multiple-line approach (one property and value per line) -- Always a space after a property's colon (.e.g, `display: block;` and not `display:block;`) -- End all lines with a semi-colon -- For multiple, comma-separated selectors, place each selector on it's own line -- Attribute selectors, like `input[type="text"]` should always wrap the attribute's value in double quotes, for consistency and safety (see this [blog post on unquoted attribute values](http://mathiasbynens.be/notes/unquoted-attribute-values) that can lead to XSS attacks). - - - -## Coding standards: JS - -- No semicolons -- Comma first -- 2 spaces (no tabs) -- strict mode -- "Attractive" - - - -## License - -By contributing your code, you agree to license your contribution under the terms of the APLv2: https://github.com/twitter/bootstrap/blob/master/LICENSE diff --git a/src/main/webapp/bower_components/bootstrap/LICENSE b/src/main/webapp/bower_components/bootstrap/LICENSE deleted file mode 100644 index 2bb9ad24..00000000 --- a/src/main/webapp/bower_components/bootstrap/LICENSE +++ /dev/null @@ -1,176 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/src/main/webapp/bower_components/bootstrap/Makefile b/src/main/webapp/bower_components/bootstrap/Makefile deleted file mode 100644 index 620af525..00000000 --- a/src/main/webapp/bower_components/bootstrap/Makefile +++ /dev/null @@ -1,126 +0,0 @@ -BOOTSTRAP = ./docs/assets/css/bootstrap.css -BOOTSTRAP_LESS = ./less/bootstrap.less -BOOTSTRAP_RESPONSIVE = ./docs/assets/css/bootstrap-responsive.css -BOOTSTRAP_RESPONSIVE_LESS = ./less/responsive.less -DATE=$(shell date +%I:%M%p) -CHECK=\033[32m✔\033[39m -HR=\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\# - - -# -# BUILD DOCS -# - -build: - @echo "\n${HR}" - @echo "Building Bootstrap..." - @echo "${HR}\n" - @jshint js/*.js --config js/.jshintrc - @jshint js/tests/unit/*.js --config js/.jshintrc - @echo "Running JSHint on javascript... ${CHECK} Done" - @./node_modules/.bin/recess --compile ${BOOTSTRAP_LESS} > ${BOOTSTRAP} - @./node_modules/.bin/recess --compile ${BOOTSTRAP_RESPONSIVE_LESS} > ${BOOTSTRAP_RESPONSIVE} - @echo "Compiling LESS with Recess... ${CHECK} Done" - @node docs/build - @cp img/* docs/assets/img/ - @cp js/*.js docs/assets/js/ - @cp js/tests/vendor/jquery.js docs/assets/js/ - @echo "Compiling documentation... ${CHECK} Done" - @cat js/bootstrap-transition.js js/bootstrap-alert.js js/bootstrap-button.js js/bootstrap-carousel.js js/bootstrap-collapse.js js/bootstrap-dropdown.js js/bootstrap-modal.js js/bootstrap-tooltip.js js/bootstrap-popover.js js/bootstrap-scrollspy.js js/bootstrap-tab.js js/bootstrap-typeahead.js js/bootstrap-affix.js > docs/assets/js/bootstrap.js - @./node_modules/.bin/uglifyjs -nc docs/assets/js/bootstrap.js > docs/assets/js/bootstrap.min.tmp.js - @echo "/**\n* Bootstrap.js v2.3.0 by @fat & @mdo\n* Copyright 2012 Twitter, Inc.\n* http://www.apache.org/licenses/LICENSE-2.0.txt\n*/" > docs/assets/js/copyright.js - @cat docs/assets/js/copyright.js docs/assets/js/bootstrap.min.tmp.js > docs/assets/js/bootstrap.min.js - @rm docs/assets/js/copyright.js docs/assets/js/bootstrap.min.tmp.js - @echo "Compiling and minifying javascript... ${CHECK} Done" - @echo "\n${HR}" - @echo "Bootstrap successfully built at ${DATE}." - @echo "${HR}\n" - @echo "Thanks for using Bootstrap," - @echo "<3 @mdo and @fat\n" - -# -# RUN JSHINT & QUNIT TESTS IN PHANTOMJS -# - -test: - ./node_modules/.bin/jshint js/*.js --config js/.jshintrc - ./node_modules/.bin/jshint js/tests/unit/*.js --config js/.jshintrc - node js/tests/server.js & - phantomjs js/tests/phantom.js "http://localhost:3000/js/tests" - kill -9 `cat js/tests/pid.txt` - rm js/tests/pid.txt - -# -# CLEANS THE ROOT DIRECTORY OF PRIOR BUILDS -# - -clean: - rm -r bootstrap - -# -# BUILD SIMPLE BOOTSTRAP DIRECTORY -# recess & uglifyjs are required -# - -bootstrap: bootstrap-img bootstrap-css bootstrap-js - - -# -# JS COMPILE -# -bootstrap-js: bootstrap/js/*.js - -bootstrap/js/*.js: js/*.js - mkdir -p bootstrap/js - cat js/bootstrap-transition.js js/bootstrap-alert.js js/bootstrap-button.js js/bootstrap-carousel.js js/bootstrap-collapse.js js/bootstrap-dropdown.js js/bootstrap-modal.js js/bootstrap-tooltip.js js/bootstrap-popover.js js/bootstrap-scrollspy.js js/bootstrap-tab.js js/bootstrap-typeahead.js js/bootstrap-affix.js > bootstrap/js/bootstrap.js - ./node_modules/.bin/uglifyjs -nc bootstrap/js/bootstrap.js > bootstrap/js/bootstrap.min.tmp.js - echo "/*!\n* Bootstrap.js by @fat & @mdo\n* Copyright 2012 Twitter, Inc.\n* http://www.apache.org/licenses/LICENSE-2.0.txt\n*/" > bootstrap/js/copyright.js - cat bootstrap/js/copyright.js bootstrap/js/bootstrap.min.tmp.js > bootstrap/js/bootstrap.min.js - rm bootstrap/js/copyright.js bootstrap/js/bootstrap.min.tmp.js - -# -# CSS COMPLILE -# - -bootstrap-css: bootstrap/css/*.css - -bootstrap/css/*.css: less/*.less - mkdir -p bootstrap/css - ./node_modules/.bin/recess --compile ${BOOTSTRAP_LESS} > bootstrap/css/bootstrap.css - ./node_modules/.bin/recess --compress ${BOOTSTRAP_LESS} > bootstrap/css/bootstrap.min.css - ./node_modules/.bin/recess --compile ${BOOTSTRAP_RESPONSIVE_LESS} > bootstrap/css/bootstrap-responsive.css - ./node_modules/.bin/recess --compress ${BOOTSTRAP_RESPONSIVE_LESS} > bootstrap/css/bootstrap-responsive.min.css - -# -# IMAGES -# - -bootstrap-img: bootstrap/img/* - -bootstrap/img/*: img/* - mkdir -p bootstrap/img - cp img/* bootstrap/img/ - - -# -# MAKE FOR GH-PAGES 4 FAT & MDO ONLY (O_O ) -# - -gh-pages: bootstrap docs - rm -f docs/assets/bootstrap.zip - zip -r docs/assets/bootstrap.zip bootstrap - rm -r bootstrap - rm -f ../bootstrap-gh-pages/assets/bootstrap.zip - node docs/build production - cp -r docs/* ../bootstrap-gh-pages - -# -# WATCH LESS FILES -# - -watch: - echo "Watching less files..."; \ - watchr -e "watch('less/.*\.less') { system 'make' }" - - -.PHONY: docs watch gh-pages bootstrap-img bootstrap-css bootstrap-js \ No newline at end of file diff --git a/src/main/webapp/bower_components/bootstrap/README.md b/src/main/webapp/bower_components/bootstrap/README.md deleted file mode 100644 index 4f74a15f..00000000 --- a/src/main/webapp/bower_components/bootstrap/README.md +++ /dev/null @@ -1,116 +0,0 @@ -<a href="http://getbootstrap.com"> - <img src="http://twitter.github.com/bootstrap/assets/img/bootstrap-docs-readme.png" width="100px"> -</a> - -# [Bootstrap v2.3.0](http://twitter.github.com/bootstrap) [](http://travis-ci.org/twitter/bootstrap) - -Bootstrap is a sleek, intuitive, and powerful front-end framework for faster and easier web development, created and maintained by [Mark Otto](http://twitter.com/mdo) and [Jacob Thornton](http://twitter.com/fat). - -To get started, checkout [http://getbootstrap.com](http://getbootstrap.com)! - - - -## Quick start - -Three quick start options are available: - -* [Download the latest release](https://github.com/twitter/bootstrap/zipball/master). -* Clone the repo: `git clone git://github.com/twitter/bootstrap.git`. -* Install with Twitter's [Bower](http://twitter.github.com/bower): `bower install bootstrap`. - - - -## Versioning - -For transparency and insight into our release cycle, and for striving to maintain backward compatibility, Bootstrap will be maintained under the Semantic Versioning guidelines as much as possible. - -Releases will be numbered with the following format: - -`<major>.<minor>.<patch>` - -And constructed with the following guidelines: - -* Breaking backward compatibility bumps the major (and resets the minor and patch) -* New additions without breaking backward compatibility bumps the minor (and resets the patch) -* Bug fixes and misc changes bumps the patch - -For more information on SemVer, please visit [http://semver.org/](http://semver.org/). - - - -## Bug tracker - -Have a bug or a feature request? [Please open a new issue](https://github.com/twitter/bootstrap/issues). Before opening any issue, please search for existing issues and read the [Issue Guidelines](https://github.com/necolas/issue-guidelines), written by [Nicolas Gallagher](https://github.com/necolas/). - - - -## Community - -Keep track of development and community news. - -* Follow [@twbootstrap on Twitter](http://twitter.com/twbootstrap). -* Read and subscribe to the [The Official Twitter Bootstrap Blog](http://blog.getbootstrap.com). -* Have a question that's not a feature request or bug report? [Ask on the mailing list.](http://groups.google.com/group/twitter-bootstrap) -* Chat with fellow Bootstrappers in IRC. On the `irc.freenode.net` server, in the `##twitter-bootstrap` channel. - - - -## Developers - -We have included a makefile with convenience methods for working with the Bootstrap library. - -+ **dependencies** -Our makefile depends on you having recess, connect, uglify.js, and jshint installed. To install, just run the following command in npm: - -``` -$ npm install recess connect uglify-js jshint -g -``` - -+ **build** - `make` -Runs the recess compiler to rebuild the `/less` files and compiles the docs pages. Requires recess and uglify-js. <a href="http://twitter.github.com/bootstrap/extend.html#compiling">Read more in our docs »</a> - -+ **test** - `make test` -Runs jshint and qunit tests headlessly in [phantomjs](http://code.google.com/p/phantomjs/) (used for ci). Depends on having phantomjs installed. - -+ **watch** - `make watch` -This is a convenience method for watching just Less files and automatically building them whenever you save. Requires the Watchr gem. - - - -## Contributing - -Please submit all pull requests against *-wip branches. If your pull request contains JavaScript patches or features, you must include relevant unit tests. All HTML and CSS should conform to the [Code Guide](http://github.com/mdo/code-guide), maintained by [Mark Otto](http://github.com/mdo). - -Thanks! - - - -## Authors - -**Mark Otto** - -+ [http://twitter.com/mdo](http://twitter.com/mdo) -+ [http://github.com/mdo](http://github.com/mdo) - -**Jacob Thornton** - -+ [http://twitter.com/fat](http://twitter.com/fat) -+ [http://github.com/fat](http://github.com/fat) - - - -## Copyright and license - -Copyright 2012 Twitter, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this work except in compliance with the License. -You may obtain a copy of the License in the LICENSE file, or at: - - [http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0) - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. diff --git a/src/main/webapp/bower_components/bootstrap/component.json b/src/main/webapp/bower_components/bootstrap/component.json deleted file mode 100644 index 3f1ca0eb..00000000 --- a/src/main/webapp/bower_components/bootstrap/component.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "bootstrap", - "version": "2.3.0", - "main": ["./docs/assets/js/bootstrap.js", "./docs/assets/css/bootstrap.css"], - "dependencies": { - "jquery": "~1.8.0" - } -} \ No newline at end of file diff --git a/src/main/webapp/bower_components/bootstrap/composer.json b/src/main/webapp/bower_components/bootstrap/composer.json deleted file mode 100644 index abde6312..00000000 --- a/src/main/webapp/bower_components/bootstrap/composer.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "twitter/bootstrap" - , "description": "Sleek, intuitive, and powerful front-end framework for faster and easier web development." - , "keywords": ["bootstrap", "css"] - , "homepage": "http://twitter.github.com/bootstrap/" - , "author": "Twitter Inc." - , "license": "Apache-2.0" - -} diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/css/bootstrap-responsive.css b/src/main/webapp/bower_components/bootstrap/docs/assets/css/bootstrap-responsive.css deleted file mode 100644 index 5215a5d0..00000000 --- a/src/main/webapp/bower_components/bootstrap/docs/assets/css/bootstrap-responsive.css +++ /dev/null @@ -1,1109 +0,0 @@ -/*! - * Bootstrap Responsive v2.3.0 - * - * Copyright 2012 Twitter, Inc - * Licensed under the Apache License v2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Designed and built with all the love in the world @twitter by @mdo and @fat. - */ - -.clearfix { - *zoom: 1; -} - -.clearfix:before, -.clearfix:after { - display: table; - line-height: 0; - content: ""; -} - -.clearfix:after { - clear: both; -} - -.hide-text { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; -} - -.input-block-level { - display: block; - width: 100%; - min-height: 30px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -@-ms-viewport { - width: device-width; -} - -.hidden { - display: none; - visibility: hidden; -} - -.visible-phone { - display: none !important; -} - -.visible-tablet { - display: none !important; -} - -.hidden-desktop { - display: none !important; -} - -.visible-desktop { - display: inherit !important; -} - -@media (min-width: 768px) and (max-width: 979px) { - .hidden-desktop { - display: inherit !important; - } - .visible-desktop { - display: none !important ; - } - .visible-tablet { - display: inherit !important; - } - .hidden-tablet { - display: none !important; - } -} - -@media (max-width: 767px) { - .hidden-desktop { - display: inherit !important; - } - .visible-desktop { - display: none !important; - } - .visible-phone { - display: inherit !important; - } - .hidden-phone { - display: none !important; - } -} - -.visible-print { - display: none !important; -} - -@media print { - .visible-print { - display: inherit !important; - } - .hidden-print { - display: none !important; - } -} - -@media (min-width: 1200px) { - .row { - margin-left: -30px; - *zoom: 1; - } - .row:before, - .row:after { - display: table; - line-height: 0; - content: ""; - } - .row:after { - clear: both; - } - [class*="span"] { - float: left; - min-height: 1px; - margin-left: 30px; - } - .container, - .navbar-static-top .container, - .navbar-fixed-top .container, - .navbar-fixed-bottom .container { - width: 1170px; - } - .span12 { - width: 1170px; - } - .span11 { - width: 1070px; - } - .span10 { - width: 970px; - } - .span9 { - width: 870px; - } - .span8 { - width: 770px; - } - .span7 { - width: 670px; - } - .span6 { - width: 570px; - } - .span5 { - width: 470px; - } - .span4 { - width: 370px; - } - .span3 { - width: 270px; - } - .span2 { - width: 170px; - } - .span1 { - width: 70px; - } - .offset12 { - margin-left: 1230px; - } - .offset11 { - margin-left: 1130px; - } - .offset10 { - margin-left: 1030px; - } - .offset9 { - margin-left: 930px; - } - .offset8 { - margin-left: 830px; - } - .offset7 { - margin-left: 730px; - } - .offset6 { - margin-left: 630px; - } - .offset5 { - margin-left: 530px; - } - .offset4 { - margin-left: 430px; - } - .offset3 { - margin-left: 330px; - } - .offset2 { - margin-left: 230px; - } - .offset1 { - margin-left: 130px; - } - .row-fluid { - width: 100%; - *zoom: 1; - } - .row-fluid:before, - .row-fluid:after { - display: table; - line-height: 0; - content: ""; - } - .row-fluid:after { - clear: both; - } - .row-fluid [class*="span"] { - display: block; - float: left; - width: 100%; - min-height: 30px; - margin-left: 2.564102564102564%; - *margin-left: 2.5109110747408616%; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - } - .row-fluid [class*="span"]:first-child { - margin-left: 0; - } - .row-fluid .controls-row [class*="span"] + [class*="span"] { - margin-left: 2.564102564102564%; - } - .row-fluid .span12 { - width: 100%; - *width: 99.94680851063829%; - } - .row-fluid .span11 { - width: 91.45299145299145%; - *width: 91.39979996362975%; - } - .row-fluid .span10 { - width: 82.90598290598291%; - *width: 82.8527914166212%; - } - .row-fluid .span9 { - width: 74.35897435897436%; - *width: 74.30578286961266%; - } - .row-fluid .span8 { - width: 65.81196581196582%; - *width: 65.75877432260411%; - } - .row-fluid .span7 { - width: 57.26495726495726%; - *width: 57.21176577559556%; - } - .row-fluid .span6 { - width: 48.717948717948715%; - *width: 48.664757228587014%; - } - .row-fluid .span5 { - width: 40.17094017094017%; - *width: 40.11774868157847%; - } - .row-fluid .span4 { - width: 31.623931623931625%; - *width: 31.570740134569924%; - } - .row-fluid .span3 { - width: 23.076923076923077%; - *width: 23.023731587561375%; - } - .row-fluid .span2 { - width: 14.52991452991453%; - *width: 14.476723040552828%; - } - .row-fluid .span1 { - width: 5.982905982905983%; - *width: 5.929714493544281%; - } - .row-fluid .offset12 { - margin-left: 105.12820512820512%; - *margin-left: 105.02182214948171%; - } - .row-fluid .offset12:first-child { - margin-left: 102.56410256410257%; - *margin-left: 102.45771958537915%; - } - .row-fluid .offset11 { - margin-left: 96.58119658119658%; - *margin-left: 96.47481360247316%; - } - .row-fluid .offset11:first-child { - margin-left: 94.01709401709402%; - *margin-left: 93.91071103837061%; - } - .row-fluid .offset10 { - margin-left: 88.03418803418803%; - *margin-left: 87.92780505546462%; - } - .row-fluid .offset10:first-child { - margin-left: 85.47008547008548%; - *margin-left: 85.36370249136206%; - } - .row-fluid .offset9 { - margin-left: 79.48717948717949%; - *margin-left: 79.38079650845607%; - } - .row-fluid .offset9:first-child { - margin-left: 76.92307692307693%; - *margin-left: 76.81669394435352%; - } - .row-fluid .offset8 { - margin-left: 70.94017094017094%; - *margin-left: 70.83378796144753%; - } - .row-fluid .offset8:first-child { - margin-left: 68.37606837606839%; - *margin-left: 68.26968539734497%; - } - .row-fluid .offset7 { - margin-left: 62.393162393162385%; - *margin-left: 62.28677941443899%; - } - .row-fluid .offset7:first-child { - margin-left: 59.82905982905982%; - *margin-left: 59.72267685033642%; - } - .row-fluid .offset6 { - margin-left: 53.84615384615384%; - *margin-left: 53.739770867430444%; - } - .row-fluid .offset6:first-child { - margin-left: 51.28205128205128%; - *margin-left: 51.175668303327875%; - } - .row-fluid .offset5 { - margin-left: 45.299145299145295%; - *margin-left: 45.1927623204219%; - } - .row-fluid .offset5:first-child { - margin-left: 42.73504273504273%; - *margin-left: 42.62865975631933%; - } - .row-fluid .offset4 { - margin-left: 36.75213675213675%; - *margin-left: 36.645753773413354%; - } - .row-fluid .offset4:first-child { - margin-left: 34.18803418803419%; - *margin-left: 34.081651209310785%; - } - .row-fluid .offset3 { - margin-left: 28.205128205128204%; - *margin-left: 28.0987452264048%; - } - .row-fluid .offset3:first-child { - margin-left: 25.641025641025642%; - *margin-left: 25.53464266230224%; - } - .row-fluid .offset2 { - margin-left: 19.65811965811966%; - *margin-left: 19.551736679396257%; - } - .row-fluid .offset2:first-child { - margin-left: 17.094017094017094%; - *margin-left: 16.98763411529369%; - } - .row-fluid .offset1 { - margin-left: 11.11111111111111%; - *margin-left: 11.004728132387708%; - } - .row-fluid .offset1:first-child { - margin-left: 8.547008547008547%; - *margin-left: 8.440625568285142%; - } - input, - textarea, - .uneditable-input { - margin-left: 0; - } - .controls-row [class*="span"] + [class*="span"] { - margin-left: 30px; - } - input.span12, - textarea.span12, - .uneditable-input.span12 { - width: 1156px; - } - input.span11, - textarea.span11, - .uneditable-input.span11 { - width: 1056px; - } - input.span10, - textarea.span10, - .uneditable-input.span10 { - width: 956px; - } - input.span9, - textarea.span9, - .uneditable-input.span9 { - width: 856px; - } - input.span8, - textarea.span8, - .uneditable-input.span8 { - width: 756px; - } - input.span7, - textarea.span7, - .uneditable-input.span7 { - width: 656px; - } - input.span6, - textarea.span6, - .uneditable-input.span6 { - width: 556px; - } - input.span5, - textarea.span5, - .uneditable-input.span5 { - width: 456px; - } - input.span4, - textarea.span4, - .uneditable-input.span4 { - width: 356px; - } - input.span3, - textarea.span3, - .uneditable-input.span3 { - width: 256px; - } - input.span2, - textarea.span2, - .uneditable-input.span2 { - width: 156px; - } - input.span1, - textarea.span1, - .uneditable-input.span1 { - width: 56px; - } - .thumbnails { - margin-left: -30px; - } - .thumbnails > li { - margin-left: 30px; - } - .row-fluid .thumbnails { - margin-left: 0; - } -} - -@media (min-width: 768px) and (max-width: 979px) { - .row { - margin-left: -20px; - *zoom: 1; - } - .row:before, - .row:after { - display: table; - line-height: 0; - content: ""; - } - .row:after { - clear: both; - } - [class*="span"] { - float: left; - min-height: 1px; - margin-left: 20px; - } - .container, - .navbar-static-top .container, - .navbar-fixed-top .container, - .navbar-fixed-bottom .container { - width: 724px; - } - .span12 { - width: 724px; - } - .span11 { - width: 662px; - } - .span10 { - width: 600px; - } - .span9 { - width: 538px; - } - .span8 { - width: 476px; - } - .span7 { - width: 414px; - } - .span6 { - width: 352px; - } - .span5 { - width: 290px; - } - .span4 { - width: 228px; - } - .span3 { - width: 166px; - } - .span2 { - width: 104px; - } - .span1 { - width: 42px; - } - .offset12 { - margin-left: 764px; - } - .offset11 { - margin-left: 702px; - } - .offset10 { - margin-left: 640px; - } - .offset9 { - margin-left: 578px; - } - .offset8 { - margin-left: 516px; - } - .offset7 { - margin-left: 454px; - } - .offset6 { - margin-left: 392px; - } - .offset5 { - margin-left: 330px; - } - .offset4 { - margin-left: 268px; - } - .offset3 { - margin-left: 206px; - } - .offset2 { - margin-left: 144px; - } - .offset1 { - margin-left: 82px; - } - .row-fluid { - width: 100%; - *zoom: 1; - } - .row-fluid:before, - .row-fluid:after { - display: table; - line-height: 0; - content: ""; - } - .row-fluid:after { - clear: both; - } - .row-fluid [class*="span"] { - display: block; - float: left; - width: 100%; - min-height: 30px; - margin-left: 2.7624309392265194%; - *margin-left: 2.709239449864817%; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - } - .row-fluid [class*="span"]:first-child { - margin-left: 0; - } - .row-fluid .controls-row [class*="span"] + [class*="span"] { - margin-left: 2.7624309392265194%; - } - .row-fluid .span12 { - width: 100%; - *width: 99.94680851063829%; - } - .row-fluid .span11 { - width: 91.43646408839778%; - *width: 91.38327259903608%; - } - .row-fluid .span10 { - width: 82.87292817679558%; - *width: 82.81973668743387%; - } - .row-fluid .span9 { - width: 74.30939226519337%; - *width: 74.25620077583166%; - } - .row-fluid .span8 { - width: 65.74585635359117%; - *width: 65.69266486422946%; - } - .row-fluid .span7 { - width: 57.18232044198895%; - *width: 57.12912895262725%; - } - .row-fluid .span6 { - width: 48.61878453038674%; - *width: 48.56559304102504%; - } - .row-fluid .span5 { - width: 40.05524861878453%; - *width: 40.00205712942283%; - } - .row-fluid .span4 { - width: 31.491712707182323%; - *width: 31.43852121782062%; - } - .row-fluid .span3 { - width: 22.92817679558011%; - *width: 22.87498530621841%; - } - .row-fluid .span2 { - width: 14.3646408839779%; - *width: 14.311449394616199%; - } - .row-fluid .span1 { - width: 5.801104972375691%; - *width: 5.747913483013988%; - } - .row-fluid .offset12 { - margin-left: 105.52486187845304%; - *margin-left: 105.41847889972962%; - } - .row-fluid .offset12:first-child { - margin-left: 102.76243093922652%; - *margin-left: 102.6560479605031%; - } - .row-fluid .offset11 { - margin-left: 96.96132596685082%; - *margin-left: 96.8549429881274%; - } - .row-fluid .offset11:first-child { - margin-left: 94.1988950276243%; - *margin-left: 94.09251204890089%; - } - .row-fluid .offset10 { - margin-left: 88.39779005524862%; - *margin-left: 88.2914070765252%; - } - .row-fluid .offset10:first-child { - margin-left: 85.6353591160221%; - *margin-left: 85.52897613729868%; - } - .row-fluid .offset9 { - margin-left: 79.8342541436464%; - *margin-left: 79.72787116492299%; - } - .row-fluid .offset9:first-child { - margin-left: 77.07182320441989%; - *margin-left: 76.96544022569647%; - } - .row-fluid .offset8 { - margin-left: 71.2707182320442%; - *margin-left: 71.16433525332079%; - } - .row-fluid .offset8:first-child { - margin-left: 68.50828729281768%; - *margin-left: 68.40190431409427%; - } - .row-fluid .offset7 { - margin-left: 62.70718232044199%; - *margin-left: 62.600799341718584%; - } - .row-fluid .offset7:first-child { - margin-left: 59.94475138121547%; - *margin-left: 59.838368402492065%; - } - .row-fluid .offset6 { - margin-left: 54.14364640883978%; - *margin-left: 54.037263430116376%; - } - .row-fluid .offset6:first-child { - margin-left: 51.38121546961326%; - *margin-left: 51.27483249088986%; - } - .row-fluid .offset5 { - margin-left: 45.58011049723757%; - *margin-left: 45.47372751851417%; - } - .row-fluid .offset5:first-child { - margin-left: 42.81767955801105%; - *margin-left: 42.71129657928765%; - } - .row-fluid .offset4 { - margin-left: 37.01657458563536%; - *margin-left: 36.91019160691196%; - } - .row-fluid .offset4:first-child { - margin-left: 34.25414364640884%; - *margin-left: 34.14776066768544%; - } - .row-fluid .offset3 { - margin-left: 28.45303867403315%; - *margin-left: 28.346655695309746%; - } - .row-fluid .offset3:first-child { - margin-left: 25.69060773480663%; - *margin-left: 25.584224756083227%; - } - .row-fluid .offset2 { - margin-left: 19.88950276243094%; - *margin-left: 19.783119783707537%; - } - .row-fluid .offset2:first-child { - margin-left: 17.12707182320442%; - *margin-left: 17.02068884448102%; - } - .row-fluid .offset1 { - margin-left: 11.32596685082873%; - *margin-left: 11.219583872105325%; - } - .row-fluid .offset1:first-child { - margin-left: 8.56353591160221%; - *margin-left: 8.457152932878806%; - } - input, - textarea, - .uneditable-input { - margin-left: 0; - } - .controls-row [class*="span"] + [class*="span"] { - margin-left: 20px; - } - input.span12, - textarea.span12, - .uneditable-input.span12 { - width: 710px; - } - input.span11, - textarea.span11, - .uneditable-input.span11 { - width: 648px; - } - input.span10, - textarea.span10, - .uneditable-input.span10 { - width: 586px; - } - input.span9, - textarea.span9, - .uneditable-input.span9 { - width: 524px; - } - input.span8, - textarea.span8, - .uneditable-input.span8 { - width: 462px; - } - input.span7, - textarea.span7, - .uneditable-input.span7 { - width: 400px; - } - input.span6, - textarea.span6, - .uneditable-input.span6 { - width: 338px; - } - input.span5, - textarea.span5, - .uneditable-input.span5 { - width: 276px; - } - input.span4, - textarea.span4, - .uneditable-input.span4 { - width: 214px; - } - input.span3, - textarea.span3, - .uneditable-input.span3 { - width: 152px; - } - input.span2, - textarea.span2, - .uneditable-input.span2 { - width: 90px; - } - input.span1, - textarea.span1, - .uneditable-input.span1 { - width: 28px; - } -} - -@media (max-width: 767px) { - body { - padding-right: 20px; - padding-left: 20px; - } - .navbar-fixed-top, - .navbar-fixed-bottom, - .navbar-static-top { - margin-right: -20px; - margin-left: -20px; - } - .container-fluid { - padding: 0; - } - .dl-horizontal dt { - float: none; - width: auto; - clear: none; - text-align: left; - } - .dl-horizontal dd { - margin-left: 0; - } - .container { - width: auto; - } - .row-fluid { - width: 100%; - } - .row, - .thumbnails { - margin-left: 0; - } - .thumbnails > li { - float: none; - margin-left: 0; - } - [class*="span"], - .uneditable-input[class*="span"], - .row-fluid [class*="span"] { - display: block; - float: none; - width: 100%; - margin-left: 0; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - } - .span12, - .row-fluid .span12 { - width: 100%; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - } - .row-fluid [class*="offset"]:first-child { - margin-left: 0; - } - .input-large, - .input-xlarge, - .input-xxlarge, - input[class*="span"], - select[class*="span"], - textarea[class*="span"], - .uneditable-input { - display: block; - width: 100%; - min-height: 30px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - } - .input-prepend input, - .input-append input, - .input-prepend input[class*="span"], - .input-append input[class*="span"] { - display: inline-block; - width: auto; - } - .controls-row [class*="span"] + [class*="span"] { - margin-left: 0; - } - .modal { - position: fixed; - top: 20px; - right: 20px; - left: 20px; - width: auto; - margin: 0; - } - .modal.fade { - top: -100px; - } - .modal.fade.in { - top: 20px; - } -} - -@media (max-width: 480px) { - .nav-collapse { - -webkit-transform: translate3d(0, 0, 0); - } - .page-header h1 small { - display: block; - line-height: 20px; - } - input[type="checkbox"], - input[type="radio"] { - border: 1px solid #ccc; - } - .form-horizontal .control-label { - float: none; - width: auto; - padding-top: 0; - text-align: left; - } - .form-horizontal .controls { - margin-left: 0; - } - .form-horizontal .control-list { - padding-top: 0; - } - .form-horizontal .form-actions { - padding-right: 10px; - padding-left: 10px; - } - .media .pull-left, - .media .pull-right { - display: block; - float: none; - margin-bottom: 10px; - } - .media-object { - margin-right: 0; - margin-left: 0; - } - .modal { - top: 10px; - right: 10px; - left: 10px; - } - .modal-header .close { - padding: 10px; - margin: -10px; - } - .carousel-caption { - position: static; - } -} - -@media (max-width: 979px) { - body { - padding-top: 0; - } - .navbar-fixed-top, - .navbar-fixed-bottom { - position: static; - } - .navbar-fixed-top { - margin-bottom: 20px; - } - .navbar-fixed-bottom { - margin-top: 20px; - } - .navbar-fixed-top .navbar-inner, - .navbar-fixed-bottom .navbar-inner { - padding: 5px; - } - .navbar .container { - width: auto; - padding: 0; - } - .navbar .brand { - padding-right: 10px; - padding-left: 10px; - margin: 0 0 0 -5px; - } - .nav-collapse { - clear: both; - } - .nav-collapse .nav { - float: none; - margin: 0 0 10px; - } - .nav-collapse .nav > li { - float: none; - } - .nav-collapse .nav > li > a { - margin-bottom: 2px; - } - .nav-collapse .nav > .divider-vertical { - display: none; - } - .nav-collapse .nav .nav-header { - color: #777777; - text-shadow: none; - } - .nav-collapse .nav > li > a, - .nav-collapse .dropdown-menu a { - padding: 9px 15px; - font-weight: bold; - color: #777777; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - } - .nav-collapse .btn { - padding: 4px 10px 4px; - font-weight: normal; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - } - .nav-collapse .dropdown-menu li + li a { - margin-bottom: 2px; - } - .nav-collapse .nav > li > a:hover, - .nav-collapse .nav > li > a:focus, - .nav-collapse .dropdown-menu a:hover, - .nav-collapse .dropdown-menu a:focus { - background-color: #f2f2f2; - } - .navbar-inverse .nav-collapse .nav > li > a, - .navbar-inverse .nav-collapse .dropdown-menu a { - color: #999999; - } - .navbar-inverse .nav-collapse .nav > li > a:hover, - .navbar-inverse .nav-collapse .nav > li > a:focus, - .navbar-inverse .nav-collapse .dropdown-menu a:hover, - .navbar-inverse .nav-collapse .dropdown-menu a:focus { - background-color: #111111; - } - .nav-collapse.in .btn-group { - padding: 0; - margin-top: 5px; - } - .nav-collapse .dropdown-menu { - position: static; - top: auto; - left: auto; - display: none; - float: none; - max-width: none; - padding: 0; - margin: 0 15px; - background-color: transparent; - border: none; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; - } - .nav-collapse .open > .dropdown-menu { - display: block; - } - .nav-collapse .dropdown-menu:before, - .nav-collapse .dropdown-menu:after { - display: none; - } - .nav-collapse .dropdown-menu .divider { - display: none; - } - .nav-collapse .nav > li > .dropdown-menu:before, - .nav-collapse .nav > li > .dropdown-menu:after { - display: none; - } - .nav-collapse .navbar-form, - .nav-collapse .navbar-search { - float: none; - padding: 10px 15px; - margin: 10px 0; - border-top: 1px solid #f2f2f2; - border-bottom: 1px solid #f2f2f2; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); - -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); - } - .navbar-inverse .nav-collapse .navbar-form, - .navbar-inverse .nav-collapse .navbar-search { - border-top-color: #111111; - border-bottom-color: #111111; - } - .navbar .nav-collapse .nav.pull-right { - float: none; - margin-left: 0; - } - .nav-collapse, - .nav-collapse.collapse { - height: 0; - overflow: hidden; - } - .navbar .btn-navbar { - display: block; - } - .navbar-static .navbar-inner { - padding-right: 10px; - padding-left: 10px; - } -} - -@media (min-width: 980px) { - .nav-collapse.collapse { - height: auto !important; - overflow: visible !important; - } -} diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/css/bootstrap.css b/src/main/webapp/bower_components/bootstrap/docs/assets/css/bootstrap.css deleted file mode 100644 index b2550569..00000000 --- a/src/main/webapp/bower_components/bootstrap/docs/assets/css/bootstrap.css +++ /dev/null @@ -1,6158 +0,0 @@ -/*! - * Bootstrap v2.3.0 - * - * Copyright 2012 Twitter, Inc - * Licensed under the Apache License v2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Designed and built with all the love in the world @twitter by @mdo and @fat. - */ - -.clearfix { - *zoom: 1; -} - -.clearfix:before, -.clearfix:after { - display: table; - line-height: 0; - content: ""; -} - -.clearfix:after { - clear: both; -} - -.hide-text { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; -} - -.input-block-level { - display: block; - width: 100%; - min-height: 30px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -nav, -section { - display: block; -} - -audio, -canvas, -video { - display: inline-block; - *display: inline; - *zoom: 1; -} - -audio:not([controls]) { - display: none; -} - -html { - font-size: 100%; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; -} - -a:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} - -a:hover, -a:active { - outline: 0; -} - -sub, -sup { - position: relative; - font-size: 75%; - line-height: 0; - vertical-align: baseline; -} - -sup { - top: -0.5em; -} - -sub { - bottom: -0.25em; -} - -img { - width: auto\9; - height: auto; - max-width: 100%; - vertical-align: middle; - border: 0; - -ms-interpolation-mode: bicubic; -} - -#map_canvas img, -.google-maps img { - max-width: none; -} - -button, -input, -select, -textarea { - margin: 0; - font-size: 100%; - vertical-align: middle; -} - -button, -input { - *overflow: visible; - line-height: normal; -} - -button::-moz-focus-inner, -input::-moz-focus-inner { - padding: 0; - border: 0; -} - -button, -html input[type="button"], -input[type="reset"], -input[type="submit"] { - cursor: pointer; - -webkit-appearance: button; -} - -label, -select, -button, -input[type="button"], -input[type="reset"], -input[type="submit"], -input[type="radio"], -input[type="checkbox"] { - cursor: pointer; -} - -input[type="search"] { - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; - -webkit-appearance: textfield; -} - -input[type="search"]::-webkit-search-decoration, -input[type="search"]::-webkit-search-cancel-button { - -webkit-appearance: none; -} - -textarea { - overflow: auto; - vertical-align: top; -} - -@media print { - * { - color: #000 !important; - text-shadow: none !important; - background: transparent !important; - box-shadow: none !important; - } - a, - a:visited { - text-decoration: underline; - } - a[href]:after { - content: " (" attr(href) ")"; - } - abbr[title]:after { - content: " (" attr(title) ")"; - } - .ir a:after, - a[href^="javascript:"]:after, - a[href^="#"]:after { - content: ""; - } - pre, - blockquote { - border: 1px solid #999; - page-break-inside: avoid; - } - thead { - display: table-header-group; - } - tr, - img { - page-break-inside: avoid; - } - img { - max-width: 100% !important; - } - @page { - margin: 0.5cm; - } - p, - h2, - h3 { - orphans: 3; - widows: 3; - } - h2, - h3 { - page-break-after: avoid; - } -} - -body { - margin: 0; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 14px; - line-height: 20px; - color: #333333; - background-color: #ffffff; -} - -a { - color: #0088cc; - text-decoration: none; -} - -a:hover, -a:focus { - color: #005580; - text-decoration: underline; -} - -.img-rounded { - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} - -.img-polaroid { - padding: 4px; - background-color: #fff; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.2); - -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); - -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); -} - -.img-circle { - -webkit-border-radius: 500px; - -moz-border-radius: 500px; - border-radius: 500px; -} - -.row { - margin-left: -20px; - *zoom: 1; -} - -.row:before, -.row:after { - display: table; - line-height: 0; - content: ""; -} - -.row:after { - clear: both; -} - -[class*="span"] { - float: left; - min-height: 1px; - margin-left: 20px; -} - -.container, -.navbar-static-top .container, -.navbar-fixed-top .container, -.navbar-fixed-bottom .container { - width: 940px; -} - -.span12 { - width: 940px; -} - -.span11 { - width: 860px; -} - -.span10 { - width: 780px; -} - -.span9 { - width: 700px; -} - -.span8 { - width: 620px; -} - -.span7 { - width: 540px; -} - -.span6 { - width: 460px; -} - -.span5 { - width: 380px; -} - -.span4 { - width: 300px; -} - -.span3 { - width: 220px; -} - -.span2 { - width: 140px; -} - -.span1 { - width: 60px; -} - -.offset12 { - margin-left: 980px; -} - -.offset11 { - margin-left: 900px; -} - -.offset10 { - margin-left: 820px; -} - -.offset9 { - margin-left: 740px; -} - -.offset8 { - margin-left: 660px; -} - -.offset7 { - margin-left: 580px; -} - -.offset6 { - margin-left: 500px; -} - -.offset5 { - margin-left: 420px; -} - -.offset4 { - margin-left: 340px; -} - -.offset3 { - margin-left: 260px; -} - -.offset2 { - margin-left: 180px; -} - -.offset1 { - margin-left: 100px; -} - -.row-fluid { - width: 100%; - *zoom: 1; -} - -.row-fluid:before, -.row-fluid:after { - display: table; - line-height: 0; - content: ""; -} - -.row-fluid:after { - clear: both; -} - -.row-fluid [class*="span"] { - display: block; - float: left; - width: 100%; - min-height: 30px; - margin-left: 2.127659574468085%; - *margin-left: 2.074468085106383%; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.row-fluid [class*="span"]:first-child { - margin-left: 0; -} - -.row-fluid .controls-row [class*="span"] + [class*="span"] { - margin-left: 2.127659574468085%; -} - -.row-fluid .span12 { - width: 100%; - *width: 99.94680851063829%; -} - -.row-fluid .span11 { - width: 91.48936170212765%; - *width: 91.43617021276594%; -} - -.row-fluid .span10 { - width: 82.97872340425532%; - *width: 82.92553191489361%; -} - -.row-fluid .span9 { - width: 74.46808510638297%; - *width: 74.41489361702126%; -} - -.row-fluid .span8 { - width: 65.95744680851064%; - *width: 65.90425531914893%; -} - -.row-fluid .span7 { - width: 57.44680851063829%; - *width: 57.39361702127659%; -} - -.row-fluid .span6 { - width: 48.93617021276595%; - *width: 48.88297872340425%; -} - -.row-fluid .span5 { - width: 40.42553191489362%; - *width: 40.37234042553192%; -} - -.row-fluid .span4 { - width: 31.914893617021278%; - *width: 31.861702127659576%; -} - -.row-fluid .span3 { - width: 23.404255319148934%; - *width: 23.351063829787233%; -} - -.row-fluid .span2 { - width: 14.893617021276595%; - *width: 14.840425531914894%; -} - -.row-fluid .span1 { - width: 6.382978723404255%; - *width: 6.329787234042553%; -} - -.row-fluid .offset12 { - margin-left: 104.25531914893617%; - *margin-left: 104.14893617021275%; -} - -.row-fluid .offset12:first-child { - margin-left: 102.12765957446808%; - *margin-left: 102.02127659574467%; -} - -.row-fluid .offset11 { - margin-left: 95.74468085106382%; - *margin-left: 95.6382978723404%; -} - -.row-fluid .offset11:first-child { - margin-left: 93.61702127659574%; - *margin-left: 93.51063829787232%; -} - -.row-fluid .offset10 { - margin-left: 87.23404255319149%; - *margin-left: 87.12765957446807%; -} - -.row-fluid .offset10:first-child { - margin-left: 85.1063829787234%; - *margin-left: 84.99999999999999%; -} - -.row-fluid .offset9 { - margin-left: 78.72340425531914%; - *margin-left: 78.61702127659572%; -} - -.row-fluid .offset9:first-child { - margin-left: 76.59574468085106%; - *margin-left: 76.48936170212764%; -} - -.row-fluid .offset8 { - margin-left: 70.2127659574468%; - *margin-left: 70.10638297872339%; -} - -.row-fluid .offset8:first-child { - margin-left: 68.08510638297872%; - *margin-left: 67.9787234042553%; -} - -.row-fluid .offset7 { - margin-left: 61.70212765957446%; - *margin-left: 61.59574468085106%; -} - -.row-fluid .offset7:first-child { - margin-left: 59.574468085106375%; - *margin-left: 59.46808510638297%; -} - -.row-fluid .offset6 { - margin-left: 53.191489361702125%; - *margin-left: 53.085106382978715%; -} - -.row-fluid .offset6:first-child { - margin-left: 51.063829787234035%; - *margin-left: 50.95744680851063%; -} - -.row-fluid .offset5 { - margin-left: 44.68085106382979%; - *margin-left: 44.57446808510638%; -} - -.row-fluid .offset5:first-child { - margin-left: 42.5531914893617%; - *margin-left: 42.4468085106383%; -} - -.row-fluid .offset4 { - margin-left: 36.170212765957444%; - *margin-left: 36.06382978723405%; -} - -.row-fluid .offset4:first-child { - margin-left: 34.04255319148936%; - *margin-left: 33.93617021276596%; -} - -.row-fluid .offset3 { - margin-left: 27.659574468085104%; - *margin-left: 27.5531914893617%; -} - -.row-fluid .offset3:first-child { - margin-left: 25.53191489361702%; - *margin-left: 25.425531914893618%; -} - -.row-fluid .offset2 { - margin-left: 19.148936170212764%; - *margin-left: 19.04255319148936%; -} - -.row-fluid .offset2:first-child { - margin-left: 17.02127659574468%; - *margin-left: 16.914893617021278%; -} - -.row-fluid .offset1 { - margin-left: 10.638297872340425%; - *margin-left: 10.53191489361702%; -} - -.row-fluid .offset1:first-child { - margin-left: 8.51063829787234%; - *margin-left: 8.404255319148938%; -} - -[class*="span"].hide, -.row-fluid [class*="span"].hide { - display: none; -} - -[class*="span"].pull-right, -.row-fluid [class*="span"].pull-right { - float: right; -} - -.container { - margin-right: auto; - margin-left: auto; - *zoom: 1; -} - -.container:before, -.container:after { - display: table; - line-height: 0; - content: ""; -} - -.container:after { - clear: both; -} - -.container-fluid { - padding-right: 20px; - padding-left: 20px; - *zoom: 1; -} - -.container-fluid:before, -.container-fluid:after { - display: table; - line-height: 0; - content: ""; -} - -.container-fluid:after { - clear: both; -} - -p { - margin: 0 0 10px; -} - -.lead { - margin-bottom: 20px; - font-size: 21px; - font-weight: 200; - line-height: 30px; -} - -small { - font-size: 85%; -} - -strong { - font-weight: bold; -} - -em { - font-style: italic; -} - -cite { - font-style: normal; -} - -.muted { - color: #999999; -} - -a.muted:hover, -a.muted:focus { - color: #808080; -} - -.text-warning { - color: #c09853; -} - -a.text-warning:hover, -a.text-warning:focus { - color: #a47e3c; -} - -.text-error { - color: #b94a48; -} - -a.text-error:hover, -a.text-error:focus { - color: #953b39; -} - -.text-info { - color: #3a87ad; -} - -a.text-info:hover, -a.text-info:focus { - color: #2d6987; -} - -.text-success { - color: #468847; -} - -a.text-success:hover, -a.text-success:focus { - color: #356635; -} - -.text-left { - text-align: left; -} - -.text-right { - text-align: right; -} - -.text-center { - text-align: center; -} - -h1, -h2, -h3, -h4, -h5, -h6 { - margin: 10px 0; - font-family: inherit; - font-weight: bold; - line-height: 20px; - color: inherit; - text-rendering: optimizelegibility; -} - -h1 small, -h2 small, -h3 small, -h4 small, -h5 small, -h6 small { - font-weight: normal; - line-height: 1; - color: #999999; -} - -h1, -h2, -h3 { - line-height: 40px; -} - -h1 { - font-size: 38.5px; -} - -h2 { - font-size: 31.5px; -} - -h3 { - font-size: 24.5px; -} - -h4 { - font-size: 17.5px; -} - -h5 { - font-size: 14px; -} - -h6 { - font-size: 11.9px; -} - -h1 small { - font-size: 24.5px; -} - -h2 small { - font-size: 17.5px; -} - -h3 small { - font-size: 14px; -} - -h4 small { - font-size: 14px; -} - -.page-header { - padding-bottom: 9px; - margin: 20px 0 30px; - border-bottom: 1px solid #eeeeee; -} - -ul, -ol { - padding: 0; - margin: 0 0 10px 25px; -} - -ul ul, -ul ol, -ol ol, -ol ul { - margin-bottom: 0; -} - -li { - line-height: 20px; -} - -ul.unstyled, -ol.unstyled { - margin-left: 0; - list-style: none; -} - -ul.inline, -ol.inline { - margin-left: 0; - list-style: none; -} - -ul.inline > li, -ol.inline > li { - display: inline-block; - *display: inline; - padding-right: 5px; - padding-left: 5px; - *zoom: 1; -} - -dl { - margin-bottom: 20px; -} - -dt, -dd { - line-height: 20px; -} - -dt { - font-weight: bold; -} - -dd { - margin-left: 10px; -} - -.dl-horizontal { - *zoom: 1; -} - -.dl-horizontal:before, -.dl-horizontal:after { - display: table; - line-height: 0; - content: ""; -} - -.dl-horizontal:after { - clear: both; -} - -.dl-horizontal dt { - float: left; - width: 160px; - overflow: hidden; - clear: left; - text-align: right; - text-overflow: ellipsis; - white-space: nowrap; -} - -.dl-horizontal dd { - margin-left: 180px; -} - -hr { - margin: 20px 0; - border: 0; - border-top: 1px solid #eeeeee; - border-bottom: 1px solid #ffffff; -} - -abbr[title], -abbr[data-original-title] { - cursor: help; - border-bottom: 1px dotted #999999; -} - -abbr.initialism { - font-size: 90%; - text-transform: uppercase; -} - -blockquote { - padding: 0 0 0 15px; - margin: 0 0 20px; - border-left: 5px solid #eeeeee; -} - -blockquote p { - margin-bottom: 0; - font-size: 17.5px; - font-weight: 300; - line-height: 1.25; -} - -blockquote small { - display: block; - line-height: 20px; - color: #999999; -} - -blockquote small:before { - content: '\2014 \00A0'; -} - -blockquote.pull-right { - float: right; - padding-right: 15px; - padding-left: 0; - border-right: 5px solid #eeeeee; - border-left: 0; -} - -blockquote.pull-right p, -blockquote.pull-right small { - text-align: right; -} - -blockquote.pull-right small:before { - content: ''; -} - -blockquote.pull-right small:after { - content: '\00A0 \2014'; -} - -q:before, -q:after, -blockquote:before, -blockquote:after { - content: ""; -} - -address { - display: block; - margin-bottom: 20px; - font-style: normal; - line-height: 20px; -} - -code, -pre { - padding: 0 3px 2px; - font-family: Monaco, Menlo, Consolas, "Courier New", monospace; - font-size: 12px; - color: #333333; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -code { - padding: 2px 4px; - color: #d14; - white-space: nowrap; - background-color: #f7f7f9; - border: 1px solid #e1e1e8; -} - -pre { - display: block; - padding: 9.5px; - margin: 0 0 10px; - font-size: 13px; - line-height: 20px; - word-break: break-all; - word-wrap: break-word; - white-space: pre; - white-space: pre-wrap; - background-color: #f5f5f5; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.15); - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -pre.prettyprint { - margin-bottom: 20px; -} - -pre code { - padding: 0; - color: inherit; - white-space: pre; - white-space: pre-wrap; - background-color: transparent; - border: 0; -} - -.pre-scrollable { - max-height: 340px; - overflow-y: scroll; -} - -form { - margin: 0 0 20px; -} - -fieldset { - padding: 0; - margin: 0; - border: 0; -} - -legend { - display: block; - width: 100%; - padding: 0; - margin-bottom: 20px; - font-size: 21px; - line-height: 40px; - color: #333333; - border: 0; - border-bottom: 1px solid #e5e5e5; -} - -legend small { - font-size: 15px; - color: #999999; -} - -label, -input, -button, -select, -textarea { - font-size: 14px; - font-weight: normal; - line-height: 20px; -} - -input, -button, -select, -textarea { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; -} - -label { - display: block; - margin-bottom: 5px; -} - -select, -textarea, -input[type="text"], -input[type="password"], -input[type="datetime"], -input[type="datetime-local"], -input[type="date"], -input[type="month"], -input[type="time"], -input[type="week"], -input[type="number"], -input[type="email"], -input[type="url"], -input[type="search"], -input[type="tel"], -input[type="color"], -.uneditable-input { - display: inline-block; - height: 20px; - padding: 4px 6px; - margin-bottom: 10px; - font-size: 14px; - line-height: 20px; - color: #555555; - vertical-align: middle; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -input, -textarea, -.uneditable-input { - width: 206px; -} - -textarea { - height: auto; -} - -textarea, -input[type="text"], -input[type="password"], -input[type="datetime"], -input[type="datetime-local"], -input[type="date"], -input[type="month"], -input[type="time"], -input[type="week"], -input[type="number"], -input[type="email"], -input[type="url"], -input[type="search"], -input[type="tel"], -input[type="color"], -.uneditable-input { - background-color: #ffffff; - border: 1px solid #cccccc; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -webkit-transition: border linear 0.2s, box-shadow linear 0.2s; - -moz-transition: border linear 0.2s, box-shadow linear 0.2s; - -o-transition: border linear 0.2s, box-shadow linear 0.2s; - transition: border linear 0.2s, box-shadow linear 0.2s; -} - -textarea:focus, -input[type="text"]:focus, -input[type="password"]:focus, -input[type="datetime"]:focus, -input[type="datetime-local"]:focus, -input[type="date"]:focus, -input[type="month"]:focus, -input[type="time"]:focus, -input[type="week"]:focus, -input[type="number"]:focus, -input[type="email"]:focus, -input[type="url"]:focus, -input[type="search"]:focus, -input[type="tel"]:focus, -input[type="color"]:focus, -.uneditable-input:focus { - border-color: rgba(82, 168, 236, 0.8); - outline: 0; - outline: thin dotted \9; - /* IE6-9 */ - - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); -} - -input[type="radio"], -input[type="checkbox"] { - margin: 4px 0 0; - margin-top: 1px \9; - *margin-top: 0; - line-height: normal; -} - -input[type="file"], -input[type="image"], -input[type="submit"], -input[type="reset"], -input[type="button"], -input[type="radio"], -input[type="checkbox"] { - width: auto; -} - -select, -input[type="file"] { - height: 30px; - /* In IE7, the height of the select element cannot be changed by height, only font-size */ - - *margin-top: 4px; - /* For IE7, add top margin to align select with labels */ - - line-height: 30px; -} - -select { - width: 220px; - background-color: #ffffff; - border: 1px solid #cccccc; -} - -select[multiple], -select[size] { - height: auto; -} - -select:focus, -input[type="file"]:focus, -input[type="radio"]:focus, -input[type="checkbox"]:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} - -.uneditable-input, -.uneditable-textarea { - color: #999999; - cursor: not-allowed; - background-color: #fcfcfc; - border-color: #cccccc; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); - -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); -} - -.uneditable-input { - overflow: hidden; - white-space: nowrap; -} - -.uneditable-textarea { - width: auto; - height: auto; -} - -input:-moz-placeholder, -textarea:-moz-placeholder { - color: #999999; -} - -input:-ms-input-placeholder, -textarea:-ms-input-placeholder { - color: #999999; -} - -input::-webkit-input-placeholder, -textarea::-webkit-input-placeholder { - color: #999999; -} - -.radio, -.checkbox { - min-height: 20px; - padding-left: 20px; -} - -.radio input[type="radio"], -.checkbox input[type="checkbox"] { - float: left; - margin-left: -20px; -} - -.controls > .radio:first-child, -.controls > .checkbox:first-child { - padding-top: 5px; -} - -.radio.inline, -.checkbox.inline { - display: inline-block; - padding-top: 5px; - margin-bottom: 0; - vertical-align: middle; -} - -.radio.inline + .radio.inline, -.checkbox.inline + .checkbox.inline { - margin-left: 10px; -} - -.input-mini { - width: 60px; -} - -.input-small { - width: 90px; -} - -.input-medium { - width: 150px; -} - -.input-large { - width: 210px; -} - -.input-xlarge { - width: 270px; -} - -.input-xxlarge { - width: 530px; -} - -input[class*="span"], -select[class*="span"], -textarea[class*="span"], -.uneditable-input[class*="span"], -.row-fluid input[class*="span"], -.row-fluid select[class*="span"], -.row-fluid textarea[class*="span"], -.row-fluid .uneditable-input[class*="span"] { - float: none; - margin-left: 0; -} - -.input-append input[class*="span"], -.input-append .uneditable-input[class*="span"], -.input-prepend input[class*="span"], -.input-prepend .uneditable-input[class*="span"], -.row-fluid input[class*="span"], -.row-fluid select[class*="span"], -.row-fluid textarea[class*="span"], -.row-fluid .uneditable-input[class*="span"], -.row-fluid .input-prepend [class*="span"], -.row-fluid .input-append [class*="span"] { - display: inline-block; -} - -input, -textarea, -.uneditable-input { - margin-left: 0; -} - -.controls-row [class*="span"] + [class*="span"] { - margin-left: 20px; -} - -input.span12, -textarea.span12, -.uneditable-input.span12 { - width: 926px; -} - -input.span11, -textarea.span11, -.uneditable-input.span11 { - width: 846px; -} - -input.span10, -textarea.span10, -.uneditable-input.span10 { - width: 766px; -} - -input.span9, -textarea.span9, -.uneditable-input.span9 { - width: 686px; -} - -input.span8, -textarea.span8, -.uneditable-input.span8 { - width: 606px; -} - -input.span7, -textarea.span7, -.uneditable-input.span7 { - width: 526px; -} - -input.span6, -textarea.span6, -.uneditable-input.span6 { - width: 446px; -} - -input.span5, -textarea.span5, -.uneditable-input.span5 { - width: 366px; -} - -input.span4, -textarea.span4, -.uneditable-input.span4 { - width: 286px; -} - -input.span3, -textarea.span3, -.uneditable-input.span3 { - width: 206px; -} - -input.span2, -textarea.span2, -.uneditable-input.span2 { - width: 126px; -} - -input.span1, -textarea.span1, -.uneditable-input.span1 { - width: 46px; -} - -.controls-row { - *zoom: 1; -} - -.controls-row:before, -.controls-row:after { - display: table; - line-height: 0; - content: ""; -} - -.controls-row:after { - clear: both; -} - -.controls-row [class*="span"], -.row-fluid .controls-row [class*="span"] { - float: left; -} - -.controls-row .checkbox[class*="span"], -.controls-row .radio[class*="span"] { - padding-top: 5px; -} - -input[disabled], -select[disabled], -textarea[disabled], -input[readonly], -select[readonly], -textarea[readonly] { - cursor: not-allowed; - background-color: #eeeeee; -} - -input[type="radio"][disabled], -input[type="checkbox"][disabled], -input[type="radio"][readonly], -input[type="checkbox"][readonly] { - background-color: transparent; -} - -.control-group.warning .control-label, -.control-group.warning .help-block, -.control-group.warning .help-inline { - color: #c09853; -} - -.control-group.warning .checkbox, -.control-group.warning .radio, -.control-group.warning input, -.control-group.warning select, -.control-group.warning textarea { - color: #c09853; -} - -.control-group.warning input, -.control-group.warning select, -.control-group.warning textarea { - border-color: #c09853; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} - -.control-group.warning input:focus, -.control-group.warning select:focus, -.control-group.warning textarea:focus { - border-color: #a47e3c; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; -} - -.control-group.warning .input-prepend .add-on, -.control-group.warning .input-append .add-on { - color: #c09853; - background-color: #fcf8e3; - border-color: #c09853; -} - -.control-group.error .control-label, -.control-group.error .help-block, -.control-group.error .help-inline { - color: #b94a48; -} - -.control-group.error .checkbox, -.control-group.error .radio, -.control-group.error input, -.control-group.error select, -.control-group.error textarea { - color: #b94a48; -} - -.control-group.error input, -.control-group.error select, -.control-group.error textarea { - border-color: #b94a48; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} - -.control-group.error input:focus, -.control-group.error select:focus, -.control-group.error textarea:focus { - border-color: #953b39; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; -} - -.control-group.error .input-prepend .add-on, -.control-group.error .input-append .add-on { - color: #b94a48; - background-color: #f2dede; - border-color: #b94a48; -} - -.control-group.success .control-label, -.control-group.success .help-block, -.control-group.success .help-inline { - color: #468847; -} - -.control-group.success .checkbox, -.control-group.success .radio, -.control-group.success input, -.control-group.success select, -.control-group.success textarea { - color: #468847; -} - -.control-group.success input, -.control-group.success select, -.control-group.success textarea { - border-color: #468847; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} - -.control-group.success input:focus, -.control-group.success select:focus, -.control-group.success textarea:focus { - border-color: #356635; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; -} - -.control-group.success .input-prepend .add-on, -.control-group.success .input-append .add-on { - color: #468847; - background-color: #dff0d8; - border-color: #468847; -} - -.control-group.info .control-label, -.control-group.info .help-block, -.control-group.info .help-inline { - color: #3a87ad; -} - -.control-group.info .checkbox, -.control-group.info .radio, -.control-group.info input, -.control-group.info select, -.control-group.info textarea { - color: #3a87ad; -} - -.control-group.info input, -.control-group.info select, -.control-group.info textarea { - border-color: #3a87ad; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} - -.control-group.info input:focus, -.control-group.info select:focus, -.control-group.info textarea:focus { - border-color: #2d6987; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; -} - -.control-group.info .input-prepend .add-on, -.control-group.info .input-append .add-on { - color: #3a87ad; - background-color: #d9edf7; - border-color: #3a87ad; -} - -input:focus:invalid, -textarea:focus:invalid, -select:focus:invalid { - color: #b94a48; - border-color: #ee5f5b; -} - -input:focus:invalid:focus, -textarea:focus:invalid:focus, -select:focus:invalid:focus { - border-color: #e9322d; - -webkit-box-shadow: 0 0 6px #f8b9b7; - -moz-box-shadow: 0 0 6px #f8b9b7; - box-shadow: 0 0 6px #f8b9b7; -} - -.form-actions { - padding: 19px 20px 20px; - margin-top: 20px; - margin-bottom: 20px; - background-color: #f5f5f5; - border-top: 1px solid #e5e5e5; - *zoom: 1; -} - -.form-actions:before, -.form-actions:after { - display: table; - line-height: 0; - content: ""; -} - -.form-actions:after { - clear: both; -} - -.help-block, -.help-inline { - color: #595959; -} - -.help-block { - display: block; - margin-bottom: 10px; -} - -.help-inline { - display: inline-block; - *display: inline; - padding-left: 5px; - vertical-align: middle; - *zoom: 1; -} - -.input-append, -.input-prepend { - display: inline-block; - margin-bottom: 10px; - font-size: 0; - white-space: nowrap; - vertical-align: middle; -} - -.input-append input, -.input-prepend input, -.input-append select, -.input-prepend select, -.input-append .uneditable-input, -.input-prepend .uneditable-input, -.input-append .dropdown-menu, -.input-prepend .dropdown-menu, -.input-append .popover, -.input-prepend .popover { - font-size: 14px; -} - -.input-append input, -.input-prepend input, -.input-append select, -.input-prepend select, -.input-append .uneditable-input, -.input-prepend .uneditable-input { - position: relative; - margin-bottom: 0; - *margin-left: 0; - vertical-align: top; - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} - -.input-append input:focus, -.input-prepend input:focus, -.input-append select:focus, -.input-prepend select:focus, -.input-append .uneditable-input:focus, -.input-prepend .uneditable-input:focus { - z-index: 2; -} - -.input-append .add-on, -.input-prepend .add-on { - display: inline-block; - width: auto; - height: 20px; - min-width: 16px; - padding: 4px 5px; - font-size: 14px; - font-weight: normal; - line-height: 20px; - text-align: center; - text-shadow: 0 1px 0 #ffffff; - background-color: #eeeeee; - border: 1px solid #ccc; -} - -.input-append .add-on, -.input-prepend .add-on, -.input-append .btn, -.input-prepend .btn, -.input-append .btn-group > .dropdown-toggle, -.input-prepend .btn-group > .dropdown-toggle { - vertical-align: top; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.input-append .active, -.input-prepend .active { - background-color: #a9dba9; - border-color: #46a546; -} - -.input-prepend .add-on, -.input-prepend .btn { - margin-right: -1px; -} - -.input-prepend .add-on:first-child, -.input-prepend .btn:first-child { - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} - -.input-append input, -.input-append select, -.input-append .uneditable-input { - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} - -.input-append input + .btn-group .btn:last-child, -.input-append select + .btn-group .btn:last-child, -.input-append .uneditable-input + .btn-group .btn:last-child { - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} - -.input-append .add-on, -.input-append .btn, -.input-append .btn-group { - margin-left: -1px; -} - -.input-append .add-on:last-child, -.input-append .btn:last-child, -.input-append .btn-group:last-child > .dropdown-toggle { - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} - -.input-prepend.input-append input, -.input-prepend.input-append select, -.input-prepend.input-append .uneditable-input { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.input-prepend.input-append input + .btn-group .btn, -.input-prepend.input-append select + .btn-group .btn, -.input-prepend.input-append .uneditable-input + .btn-group .btn { - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} - -.input-prepend.input-append .add-on:first-child, -.input-prepend.input-append .btn:first-child { - margin-right: -1px; - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} - -.input-prepend.input-append .add-on:last-child, -.input-prepend.input-append .btn:last-child { - margin-left: -1px; - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} - -.input-prepend.input-append .btn-group:first-child { - margin-left: 0; -} - -input.search-query { - padding-right: 14px; - padding-right: 4px \9; - padding-left: 14px; - padding-left: 4px \9; - /* IE7-8 doesn't have border-radius, so don't indent the padding */ - - margin-bottom: 0; - -webkit-border-radius: 15px; - -moz-border-radius: 15px; - border-radius: 15px; -} - -/* Allow for input prepend/append in search forms */ - -.form-search .input-append .search-query, -.form-search .input-prepend .search-query { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.form-search .input-append .search-query { - -webkit-border-radius: 14px 0 0 14px; - -moz-border-radius: 14px 0 0 14px; - border-radius: 14px 0 0 14px; -} - -.form-search .input-append .btn { - -webkit-border-radius: 0 14px 14px 0; - -moz-border-radius: 0 14px 14px 0; - border-radius: 0 14px 14px 0; -} - -.form-search .input-prepend .search-query { - -webkit-border-radius: 0 14px 14px 0; - -moz-border-radius: 0 14px 14px 0; - border-radius: 0 14px 14px 0; -} - -.form-search .input-prepend .btn { - -webkit-border-radius: 14px 0 0 14px; - -moz-border-radius: 14px 0 0 14px; - border-radius: 14px 0 0 14px; -} - -.form-search input, -.form-inline input, -.form-horizontal input, -.form-search textarea, -.form-inline textarea, -.form-horizontal textarea, -.form-search select, -.form-inline select, -.form-horizontal select, -.form-search .help-inline, -.form-inline .help-inline, -.form-horizontal .help-inline, -.form-search .uneditable-input, -.form-inline .uneditable-input, -.form-horizontal .uneditable-input, -.form-search .input-prepend, -.form-inline .input-prepend, -.form-horizontal .input-prepend, -.form-search .input-append, -.form-inline .input-append, -.form-horizontal .input-append { - display: inline-block; - *display: inline; - margin-bottom: 0; - vertical-align: middle; - *zoom: 1; -} - -.form-search .hide, -.form-inline .hide, -.form-horizontal .hide { - display: none; -} - -.form-search label, -.form-inline label, -.form-search .btn-group, -.form-inline .btn-group { - display: inline-block; -} - -.form-search .input-append, -.form-inline .input-append, -.form-search .input-prepend, -.form-inline .input-prepend { - margin-bottom: 0; -} - -.form-search .radio, -.form-search .checkbox, -.form-inline .radio, -.form-inline .checkbox { - padding-left: 0; - margin-bottom: 0; - vertical-align: middle; -} - -.form-search .radio input[type="radio"], -.form-search .checkbox input[type="checkbox"], -.form-inline .radio input[type="radio"], -.form-inline .checkbox input[type="checkbox"] { - float: left; - margin-right: 3px; - margin-left: 0; -} - -.control-group { - margin-bottom: 10px; -} - -legend + .control-group { - margin-top: 20px; - -webkit-margin-top-collapse: separate; -} - -.form-horizontal .control-group { - margin-bottom: 20px; - *zoom: 1; -} - -.form-horizontal .control-group:before, -.form-horizontal .control-group:after { - display: table; - line-height: 0; - content: ""; -} - -.form-horizontal .control-group:after { - clear: both; -} - -.form-horizontal .control-label { - float: left; - width: 160px; - padding-top: 5px; - text-align: right; -} - -.form-horizontal .controls { - *display: inline-block; - *padding-left: 20px; - margin-left: 180px; - *margin-left: 0; -} - -.form-horizontal .controls:first-child { - *padding-left: 180px; -} - -.form-horizontal .help-block { - margin-bottom: 0; -} - -.form-horizontal input + .help-block, -.form-horizontal select + .help-block, -.form-horizontal textarea + .help-block, -.form-horizontal .uneditable-input + .help-block, -.form-horizontal .input-prepend + .help-block, -.form-horizontal .input-append + .help-block { - margin-top: 10px; -} - -.form-horizontal .form-actions { - padding-left: 180px; -} - -table { - max-width: 100%; - background-color: transparent; - border-collapse: collapse; - border-spacing: 0; -} - -.table { - width: 100%; - margin-bottom: 20px; -} - -.table th, -.table td { - padding: 8px; - line-height: 20px; - text-align: left; - vertical-align: top; - border-top: 1px solid #dddddd; -} - -.table th { - font-weight: bold; -} - -.table thead th { - vertical-align: bottom; -} - -.table caption + thead tr:first-child th, -.table caption + thead tr:first-child td, -.table colgroup + thead tr:first-child th, -.table colgroup + thead tr:first-child td, -.table thead:first-child tr:first-child th, -.table thead:first-child tr:first-child td { - border-top: 0; -} - -.table tbody + tbody { - border-top: 2px solid #dddddd; -} - -.table .table { - background-color: #ffffff; -} - -.table-condensed th, -.table-condensed td { - padding: 4px 5px; -} - -.table-bordered { - border: 1px solid #dddddd; - border-collapse: separate; - *border-collapse: collapse; - border-left: 0; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -.table-bordered th, -.table-bordered td { - border-left: 1px solid #dddddd; -} - -.table-bordered caption + thead tr:first-child th, -.table-bordered caption + tbody tr:first-child th, -.table-bordered caption + tbody tr:first-child td, -.table-bordered colgroup + thead tr:first-child th, -.table-bordered colgroup + tbody tr:first-child th, -.table-bordered colgroup + tbody tr:first-child td, -.table-bordered thead:first-child tr:first-child th, -.table-bordered tbody:first-child tr:first-child th, -.table-bordered tbody:first-child tr:first-child td { - border-top: 0; -} - -.table-bordered thead:first-child tr:first-child > th:first-child, -.table-bordered tbody:first-child tr:first-child > td:first-child, -.table-bordered tbody:first-child tr:first-child > th:first-child { - -webkit-border-top-left-radius: 4px; - border-top-left-radius: 4px; - -moz-border-radius-topleft: 4px; -} - -.table-bordered thead:first-child tr:first-child > th:last-child, -.table-bordered tbody:first-child tr:first-child > td:last-child, -.table-bordered tbody:first-child tr:first-child > th:last-child { - -webkit-border-top-right-radius: 4px; - border-top-right-radius: 4px; - -moz-border-radius-topright: 4px; -} - -.table-bordered thead:last-child tr:last-child > th:first-child, -.table-bordered tbody:last-child tr:last-child > td:first-child, -.table-bordered tbody:last-child tr:last-child > th:first-child, -.table-bordered tfoot:last-child tr:last-child > td:first-child, -.table-bordered tfoot:last-child tr:last-child > th:first-child { - -webkit-border-bottom-left-radius: 4px; - border-bottom-left-radius: 4px; - -moz-border-radius-bottomleft: 4px; -} - -.table-bordered thead:last-child tr:last-child > th:last-child, -.table-bordered tbody:last-child tr:last-child > td:last-child, -.table-bordered tbody:last-child tr:last-child > th:last-child, -.table-bordered tfoot:last-child tr:last-child > td:last-child, -.table-bordered tfoot:last-child tr:last-child > th:last-child { - -webkit-border-bottom-right-radius: 4px; - border-bottom-right-radius: 4px; - -moz-border-radius-bottomright: 4px; -} - -.table-bordered tfoot + tbody:last-child tr:last-child td:first-child { - -webkit-border-bottom-left-radius: 0; - border-bottom-left-radius: 0; - -moz-border-radius-bottomleft: 0; -} - -.table-bordered tfoot + tbody:last-child tr:last-child td:last-child { - -webkit-border-bottom-right-radius: 0; - border-bottom-right-radius: 0; - -moz-border-radius-bottomright: 0; -} - -.table-bordered caption + thead tr:first-child th:first-child, -.table-bordered caption + tbody tr:first-child td:first-child, -.table-bordered colgroup + thead tr:first-child th:first-child, -.table-bordered colgroup + tbody tr:first-child td:first-child { - -webkit-border-top-left-radius: 4px; - border-top-left-radius: 4px; - -moz-border-radius-topleft: 4px; -} - -.table-bordered caption + thead tr:first-child th:last-child, -.table-bordered caption + tbody tr:first-child td:last-child, -.table-bordered colgroup + thead tr:first-child th:last-child, -.table-bordered colgroup + tbody tr:first-child td:last-child { - -webkit-border-top-right-radius: 4px; - border-top-right-radius: 4px; - -moz-border-radius-topright: 4px; -} - -.table-striped tbody > tr:nth-child(odd) > td, -.table-striped tbody > tr:nth-child(odd) > th { - background-color: #f9f9f9; -} - -.table-hover tbody tr:hover > td, -.table-hover tbody tr:hover > th { - background-color: #f5f5f5; -} - -table td[class*="span"], -table th[class*="span"], -.row-fluid table td[class*="span"], -.row-fluid table th[class*="span"] { - display: table-cell; - float: none; - margin-left: 0; -} - -.table td.span1, -.table th.span1 { - float: none; - width: 44px; - margin-left: 0; -} - -.table td.span2, -.table th.span2 { - float: none; - width: 124px; - margin-left: 0; -} - -.table td.span3, -.table th.span3 { - float: none; - width: 204px; - margin-left: 0; -} - -.table td.span4, -.table th.span4 { - float: none; - width: 284px; - margin-left: 0; -} - -.table td.span5, -.table th.span5 { - float: none; - width: 364px; - margin-left: 0; -} - -.table td.span6, -.table th.span6 { - float: none; - width: 444px; - margin-left: 0; -} - -.table td.span7, -.table th.span7 { - float: none; - width: 524px; - margin-left: 0; -} - -.table td.span8, -.table th.span8 { - float: none; - width: 604px; - margin-left: 0; -} - -.table td.span9, -.table th.span9 { - float: none; - width: 684px; - margin-left: 0; -} - -.table td.span10, -.table th.span10 { - float: none; - width: 764px; - margin-left: 0; -} - -.table td.span11, -.table th.span11 { - float: none; - width: 844px; - margin-left: 0; -} - -.table td.span12, -.table th.span12 { - float: none; - width: 924px; - margin-left: 0; -} - -.table tbody tr.success > td { - background-color: #dff0d8; -} - -.table tbody tr.error > td { - background-color: #f2dede; -} - -.table tbody tr.warning > td { - background-color: #fcf8e3; -} - -.table tbody tr.info > td { - background-color: #d9edf7; -} - -.table-hover tbody tr.success:hover > td { - background-color: #d0e9c6; -} - -.table-hover tbody tr.error:hover > td { - background-color: #ebcccc; -} - -.table-hover tbody tr.warning:hover > td { - background-color: #faf2cc; -} - -.table-hover tbody tr.info:hover > td { - background-color: #c4e3f3; -} - -[class^="icon-"], -[class*=" icon-"] { - display: inline-block; - width: 14px; - height: 14px; - margin-top: 1px; - *margin-right: .3em; - line-height: 14px; - vertical-align: text-top; - background-image: url("../img/glyphicons-halflings.png"); - background-position: 14px 14px; - background-repeat: no-repeat; -} - -/* White icons with optional class, or on hover/focus/active states of certain elements */ - -.icon-white, -.nav-pills > .active > a > [class^="icon-"], -.nav-pills > .active > a > [class*=" icon-"], -.nav-list > .active > a > [class^="icon-"], -.nav-list > .active > a > [class*=" icon-"], -.navbar-inverse .nav > .active > a > [class^="icon-"], -.navbar-inverse .nav > .active > a > [class*=" icon-"], -.dropdown-menu > li > a:hover > [class^="icon-"], -.dropdown-menu > li > a:focus > [class^="icon-"], -.dropdown-menu > li > a:hover > [class*=" icon-"], -.dropdown-menu > li > a:focus > [class*=" icon-"], -.dropdown-menu > .active > a > [class^="icon-"], -.dropdown-menu > .active > a > [class*=" icon-"], -.dropdown-submenu:hover > a > [class^="icon-"], -.dropdown-submenu:focus > a > [class^="icon-"], -.dropdown-submenu:hover > a > [class*=" icon-"], -.dropdown-submenu:focus > a > [class*=" icon-"] { - background-image: url("../img/glyphicons-halflings-white.png"); -} - -.icon-glass { - background-position: 0 0; -} - -.icon-music { - background-position: -24px 0; -} - -.icon-search { - background-position: -48px 0; -} - -.icon-envelope { - background-position: -72px 0; -} - -.icon-heart { - background-position: -96px 0; -} - -.icon-star { - background-position: -120px 0; -} - -.icon-star-empty { - background-position: -144px 0; -} - -.icon-user { - background-position: -168px 0; -} - -.icon-film { - background-position: -192px 0; -} - -.icon-th-large { - background-position: -216px 0; -} - -.icon-th { - background-position: -240px 0; -} - -.icon-th-list { - background-position: -264px 0; -} - -.icon-ok { - background-position: -288px 0; -} - -.icon-remove { - background-position: -312px 0; -} - -.icon-zoom-in { - background-position: -336px 0; -} - -.icon-zoom-out { - background-position: -360px 0; -} - -.icon-off { - background-position: -384px 0; -} - -.icon-signal { - background-position: -408px 0; -} - -.icon-cog { - background-position: -432px 0; -} - -.icon-trash { - background-position: -456px 0; -} - -.icon-home { - background-position: 0 -24px; -} - -.icon-file { - background-position: -24px -24px; -} - -.icon-time { - background-position: -48px -24px; -} - -.icon-road { - background-position: -72px -24px; -} - -.icon-download-alt { - background-position: -96px -24px; -} - -.icon-download { - background-position: -120px -24px; -} - -.icon-upload { - background-position: -144px -24px; -} - -.icon-inbox { - background-position: -168px -24px; -} - -.icon-play-circle { - background-position: -192px -24px; -} - -.icon-repeat { - background-position: -216px -24px; -} - -.icon-refresh { - background-position: -240px -24px; -} - -.icon-list-alt { - background-position: -264px -24px; -} - -.icon-lock { - background-position: -287px -24px; -} - -.icon-flag { - background-position: -312px -24px; -} - -.icon-headphones { - background-position: -336px -24px; -} - -.icon-volume-off { - background-position: -360px -24px; -} - -.icon-volume-down { - background-position: -384px -24px; -} - -.icon-volume-up { - background-position: -408px -24px; -} - -.icon-qrcode { - background-position: -432px -24px; -} - -.icon-barcode { - background-position: -456px -24px; -} - -.icon-tag { - background-position: 0 -48px; -} - -.icon-tags { - background-position: -25px -48px; -} - -.icon-book { - background-position: -48px -48px; -} - -.icon-bookmark { - background-position: -72px -48px; -} - -.icon-print { - background-position: -96px -48px; -} - -.icon-camera { - background-position: -120px -48px; -} - -.icon-font { - background-position: -144px -48px; -} - -.icon-bold { - background-position: -167px -48px; -} - -.icon-italic { - background-position: -192px -48px; -} - -.icon-text-height { - background-position: -216px -48px; -} - -.icon-text-width { - background-position: -240px -48px; -} - -.icon-align-left { - background-position: -264px -48px; -} - -.icon-align-center { - background-position: -288px -48px; -} - -.icon-align-right { - background-position: -312px -48px; -} - -.icon-align-justify { - background-position: -336px -48px; -} - -.icon-list { - background-position: -360px -48px; -} - -.icon-indent-left { - background-position: -384px -48px; -} - -.icon-indent-right { - background-position: -408px -48px; -} - -.icon-facetime-video { - background-position: -432px -48px; -} - -.icon-picture { - background-position: -456px -48px; -} - -.icon-pencil { - background-position: 0 -72px; -} - -.icon-map-marker { - background-position: -24px -72px; -} - -.icon-adjust { - background-position: -48px -72px; -} - -.icon-tint { - background-position: -72px -72px; -} - -.icon-edit { - background-position: -96px -72px; -} - -.icon-share { - background-position: -120px -72px; -} - -.icon-check { - background-position: -144px -72px; -} - -.icon-move { - background-position: -168px -72px; -} - -.icon-step-backward { - background-position: -192px -72px; -} - -.icon-fast-backward { - background-position: -216px -72px; -} - -.icon-backward { - background-position: -240px -72px; -} - -.icon-play { - background-position: -264px -72px; -} - -.icon-pause { - background-position: -288px -72px; -} - -.icon-stop { - background-position: -312px -72px; -} - -.icon-forward { - background-position: -336px -72px; -} - -.icon-fast-forward { - background-position: -360px -72px; -} - -.icon-step-forward { - background-position: -384px -72px; -} - -.icon-eject { - background-position: -408px -72px; -} - -.icon-chevron-left { - background-position: -432px -72px; -} - -.icon-chevron-right { - background-position: -456px -72px; -} - -.icon-plus-sign { - background-position: 0 -96px; -} - -.icon-minus-sign { - background-position: -24px -96px; -} - -.icon-remove-sign { - background-position: -48px -96px; -} - -.icon-ok-sign { - background-position: -72px -96px; -} - -.icon-question-sign { - background-position: -96px -96px; -} - -.icon-info-sign { - background-position: -120px -96px; -} - -.icon-screenshot { - background-position: -144px -96px; -} - -.icon-remove-circle { - background-position: -168px -96px; -} - -.icon-ok-circle { - background-position: -192px -96px; -} - -.icon-ban-circle { - background-position: -216px -96px; -} - -.icon-arrow-left { - background-position: -240px -96px; -} - -.icon-arrow-right { - background-position: -264px -96px; -} - -.icon-arrow-up { - background-position: -289px -96px; -} - -.icon-arrow-down { - background-position: -312px -96px; -} - -.icon-share-alt { - background-position: -336px -96px; -} - -.icon-resize-full { - background-position: -360px -96px; -} - -.icon-resize-small { - background-position: -384px -96px; -} - -.icon-plus { - background-position: -408px -96px; -} - -.icon-minus { - background-position: -433px -96px; -} - -.icon-asterisk { - background-position: -456px -96px; -} - -.icon-exclamation-sign { - background-position: 0 -120px; -} - -.icon-gift { - background-position: -24px -120px; -} - -.icon-leaf { - background-position: -48px -120px; -} - -.icon-fire { - background-position: -72px -120px; -} - -.icon-eye-open { - background-position: -96px -120px; -} - -.icon-eye-close { - background-position: -120px -120px; -} - -.icon-warning-sign { - background-position: -144px -120px; -} - -.icon-plane { - background-position: -168px -120px; -} - -.icon-calendar { - background-position: -192px -120px; -} - -.icon-random { - width: 16px; - background-position: -216px -120px; -} - -.icon-comment { - background-position: -240px -120px; -} - -.icon-magnet { - background-position: -264px -120px; -} - -.icon-chevron-up { - background-position: -288px -120px; -} - -.icon-chevron-down { - background-position: -313px -119px; -} - -.icon-retweet { - background-position: -336px -120px; -} - -.icon-shopping-cart { - background-position: -360px -120px; -} - -.icon-folder-close { - width: 16px; - background-position: -384px -120px; -} - -.icon-folder-open { - width: 16px; - background-position: -408px -120px; -} - -.icon-resize-vertical { - background-position: -432px -119px; -} - -.icon-resize-horizontal { - background-position: -456px -118px; -} - -.icon-hdd { - background-position: 0 -144px; -} - -.icon-bullhorn { - background-position: -24px -144px; -} - -.icon-bell { - background-position: -48px -144px; -} - -.icon-certificate { - background-position: -72px -144px; -} - -.icon-thumbs-up { - background-position: -96px -144px; -} - -.icon-thumbs-down { - background-position: -120px -144px; -} - -.icon-hand-right { - background-position: -144px -144px; -} - -.icon-hand-left { - background-position: -168px -144px; -} - -.icon-hand-up { - background-position: -192px -144px; -} - -.icon-hand-down { - background-position: -216px -144px; -} - -.icon-circle-arrow-right { - background-position: -240px -144px; -} - -.icon-circle-arrow-left { - background-position: -264px -144px; -} - -.icon-circle-arrow-up { - background-position: -288px -144px; -} - -.icon-circle-arrow-down { - background-position: -312px -144px; -} - -.icon-globe { - background-position: -336px -144px; -} - -.icon-wrench { - background-position: -360px -144px; -} - -.icon-tasks { - background-position: -384px -144px; -} - -.icon-filter { - background-position: -408px -144px; -} - -.icon-briefcase { - background-position: -432px -144px; -} - -.icon-fullscreen { - background-position: -456px -144px; -} - -.dropup, -.dropdown { - position: relative; -} - -.dropdown-toggle { - *margin-bottom: -3px; -} - -.dropdown-toggle:active, -.open .dropdown-toggle { - outline: 0; -} - -.caret { - display: inline-block; - width: 0; - height: 0; - vertical-align: top; - border-top: 4px solid #000000; - border-right: 4px solid transparent; - border-left: 4px solid transparent; - content: ""; -} - -.dropdown .caret { - margin-top: 8px; - margin-left: 2px; -} - -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: 1000; - display: none; - float: left; - min-width: 160px; - padding: 5px 0; - margin: 2px 0 0; - list-style: none; - background-color: #ffffff; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.2); - *border-right-width: 2px; - *border-bottom-width: 2px; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} - -.dropdown-menu.pull-right { - right: 0; - left: auto; -} - -.dropdown-menu .divider { - *width: 100%; - height: 1px; - margin: 9px 1px; - *margin: -5px 0 5px; - overflow: hidden; - background-color: #e5e5e5; - border-bottom: 1px solid #ffffff; -} - -.dropdown-menu > li > a { - display: block; - padding: 3px 20px; - clear: both; - font-weight: normal; - line-height: 20px; - color: #333333; - white-space: nowrap; -} - -.dropdown-menu > li > a:hover, -.dropdown-menu > li > a:focus, -.dropdown-submenu:hover > a, -.dropdown-submenu:focus > a { - color: #ffffff; - text-decoration: none; - background-color: #0081c2; - background-image: -moz-linear-gradient(top, #0088cc, #0077b3); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); - background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); - background-image: -o-linear-gradient(top, #0088cc, #0077b3); - background-image: linear-gradient(to bottom, #0088cc, #0077b3); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); -} - -.dropdown-menu > .active > a, -.dropdown-menu > .active > a:hover, -.dropdown-menu > .active > a:focus { - color: #ffffff; - text-decoration: none; - background-color: #0081c2; - background-image: -moz-linear-gradient(top, #0088cc, #0077b3); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); - background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); - background-image: -o-linear-gradient(top, #0088cc, #0077b3); - background-image: linear-gradient(to bottom, #0088cc, #0077b3); - background-repeat: repeat-x; - outline: 0; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); -} - -.dropdown-menu > .disabled > a, -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - color: #999999; -} - -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - text-decoration: none; - cursor: default; - background-color: transparent; - background-image: none; - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.open { - *z-index: 1000; -} - -.open > .dropdown-menu { - display: block; -} - -.pull-right > .dropdown-menu { - right: 0; - left: auto; -} - -.dropup .caret, -.navbar-fixed-bottom .dropdown .caret { - border-top: 0; - border-bottom: 4px solid #000000; - content: ""; -} - -.dropup .dropdown-menu, -.navbar-fixed-bottom .dropdown .dropdown-menu { - top: auto; - bottom: 100%; - margin-bottom: 1px; -} - -.dropdown-submenu { - position: relative; -} - -.dropdown-submenu > .dropdown-menu { - top: 0; - left: 100%; - margin-top: -6px; - margin-left: -1px; - -webkit-border-radius: 0 6px 6px 6px; - -moz-border-radius: 0 6px 6px 6px; - border-radius: 0 6px 6px 6px; -} - -.dropdown-submenu:hover > .dropdown-menu { - display: block; -} - -.dropup .dropdown-submenu > .dropdown-menu { - top: auto; - bottom: 0; - margin-top: 0; - margin-bottom: -2px; - -webkit-border-radius: 5px 5px 5px 0; - -moz-border-radius: 5px 5px 5px 0; - border-radius: 5px 5px 5px 0; -} - -.dropdown-submenu > a:after { - display: block; - float: right; - width: 0; - height: 0; - margin-top: 5px; - margin-right: -10px; - border-color: transparent; - border-left-color: #cccccc; - border-style: solid; - border-width: 5px 0 5px 5px; - content: " "; -} - -.dropdown-submenu:hover > a:after { - border-left-color: #ffffff; -} - -.dropdown-submenu.pull-left { - float: none; -} - -.dropdown-submenu.pull-left > .dropdown-menu { - left: -100%; - margin-left: 10px; - -webkit-border-radius: 6px 0 6px 6px; - -moz-border-radius: 6px 0 6px 6px; - border-radius: 6px 0 6px 6px; -} - -.dropdown .dropdown-menu .nav-header { - padding-right: 20px; - padding-left: 20px; -} - -.typeahead { - z-index: 1051; - margin-top: 2px; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -.well { - min-height: 20px; - padding: 19px; - margin-bottom: 20px; - background-color: #f5f5f5; - border: 1px solid #e3e3e3; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); -} - -.well blockquote { - border-color: #ddd; - border-color: rgba(0, 0, 0, 0.15); -} - -.well-large { - padding: 24px; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} - -.well-small { - padding: 9px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -.fade { - opacity: 0; - -webkit-transition: opacity 0.15s linear; - -moz-transition: opacity 0.15s linear; - -o-transition: opacity 0.15s linear; - transition: opacity 0.15s linear; -} - -.fade.in { - opacity: 1; -} - -.collapse { - position: relative; - height: 0; - overflow: hidden; - -webkit-transition: height 0.35s ease; - -moz-transition: height 0.35s ease; - -o-transition: height 0.35s ease; - transition: height 0.35s ease; -} - -.collapse.in { - height: auto; -} - -.close { - float: right; - font-size: 20px; - font-weight: bold; - line-height: 20px; - color: #000000; - text-shadow: 0 1px 0 #ffffff; - opacity: 0.2; - filter: alpha(opacity=20); -} - -.close:hover, -.close:focus { - color: #000000; - text-decoration: none; - cursor: pointer; - opacity: 0.4; - filter: alpha(opacity=40); -} - -button.close { - padding: 0; - cursor: pointer; - background: transparent; - border: 0; - -webkit-appearance: none; -} - -.btn { - display: inline-block; - *display: inline; - padding: 4px 12px; - margin-bottom: 0; - *margin-left: .3em; - font-size: 14px; - line-height: 20px; - color: #333333; - text-align: center; - text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); - vertical-align: middle; - cursor: pointer; - background-color: #f5f5f5; - *background-color: #e6e6e6; - background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); - background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); - background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); - background-image: linear-gradient(to bottom, #ffffff, #e6e6e6); - background-repeat: repeat-x; - border: 1px solid #cccccc; - *border: 0; - border-color: #e6e6e6 #e6e6e6 #bfbfbf; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - border-bottom-color: #b3b3b3; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); - *zoom: 1; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); -} - -.btn:hover, -.btn:focus, -.btn:active, -.btn.active, -.btn.disabled, -.btn[disabled] { - color: #333333; - background-color: #e6e6e6; - *background-color: #d9d9d9; -} - -.btn:active, -.btn.active { - background-color: #cccccc \9; -} - -.btn:first-child { - *margin-left: 0; -} - -.btn:hover, -.btn:focus { - color: #333333; - text-decoration: none; - background-position: 0 -15px; - -webkit-transition: background-position 0.1s linear; - -moz-transition: background-position 0.1s linear; - -o-transition: background-position 0.1s linear; - transition: background-position 0.1s linear; -} - -.btn:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} - -.btn.active, -.btn:active { - background-image: none; - outline: 0; - -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); -} - -.btn.disabled, -.btn[disabled] { - cursor: default; - background-image: none; - opacity: 0.65; - filter: alpha(opacity=65); - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; -} - -.btn-large { - padding: 11px 19px; - font-size: 17.5px; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} - -.btn-large [class^="icon-"], -.btn-large [class*=" icon-"] { - margin-top: 4px; -} - -.btn-small { - padding: 2px 10px; - font-size: 11.9px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -.btn-small [class^="icon-"], -.btn-small [class*=" icon-"] { - margin-top: 0; -} - -.btn-mini [class^="icon-"], -.btn-mini [class*=" icon-"] { - margin-top: -1px; -} - -.btn-mini { - padding: 0 6px; - font-size: 10.5px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -.btn-block { - display: block; - width: 100%; - padding-right: 0; - padding-left: 0; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -.btn-block + .btn-block { - margin-top: 5px; -} - -input[type="submit"].btn-block, -input[type="reset"].btn-block, -input[type="button"].btn-block { - width: 100%; -} - -.btn-primary.active, -.btn-warning.active, -.btn-danger.active, -.btn-success.active, -.btn-info.active, -.btn-inverse.active { - color: rgba(255, 255, 255, 0.75); -} - -.btn-primary { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #006dcc; - *background-color: #0044cc; - background-image: -moz-linear-gradient(top, #0088cc, #0044cc); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); - background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); - background-image: -o-linear-gradient(top, #0088cc, #0044cc); - background-image: linear-gradient(to bottom, #0088cc, #0044cc); - background-repeat: repeat-x; - border-color: #0044cc #0044cc #002a80; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.btn-primary:hover, -.btn-primary:focus, -.btn-primary:active, -.btn-primary.active, -.btn-primary.disabled, -.btn-primary[disabled] { - color: #ffffff; - background-color: #0044cc; - *background-color: #003bb3; -} - -.btn-primary:active, -.btn-primary.active { - background-color: #003399 \9; -} - -.btn-warning { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #faa732; - *background-color: #f89406; - background-image: -moz-linear-gradient(top, #fbb450, #f89406); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); - background-image: -webkit-linear-gradient(top, #fbb450, #f89406); - background-image: -o-linear-gradient(top, #fbb450, #f89406); - background-image: linear-gradient(to bottom, #fbb450, #f89406); - background-repeat: repeat-x; - border-color: #f89406 #f89406 #ad6704; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.btn-warning:hover, -.btn-warning:focus, -.btn-warning:active, -.btn-warning.active, -.btn-warning.disabled, -.btn-warning[disabled] { - color: #ffffff; - background-color: #f89406; - *background-color: #df8505; -} - -.btn-warning:active, -.btn-warning.active { - background-color: #c67605 \9; -} - -.btn-danger { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #da4f49; - *background-color: #bd362f; - background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f)); - background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f); - background-image: -o-linear-gradient(top, #ee5f5b, #bd362f); - background-image: linear-gradient(to bottom, #ee5f5b, #bd362f); - background-repeat: repeat-x; - border-color: #bd362f #bd362f #802420; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.btn-danger:hover, -.btn-danger:focus, -.btn-danger:active, -.btn-danger.active, -.btn-danger.disabled, -.btn-danger[disabled] { - color: #ffffff; - background-color: #bd362f; - *background-color: #a9302a; -} - -.btn-danger:active, -.btn-danger.active { - background-color: #942a25 \9; -} - -.btn-success { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #5bb75b; - *background-color: #51a351; - background-image: -moz-linear-gradient(top, #62c462, #51a351); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351)); - background-image: -webkit-linear-gradient(top, #62c462, #51a351); - background-image: -o-linear-gradient(top, #62c462, #51a351); - background-image: linear-gradient(to bottom, #62c462, #51a351); - background-repeat: repeat-x; - border-color: #51a351 #51a351 #387038; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.btn-success:hover, -.btn-success:focus, -.btn-success:active, -.btn-success.active, -.btn-success.disabled, -.btn-success[disabled] { - color: #ffffff; - background-color: #51a351; - *background-color: #499249; -} - -.btn-success:active, -.btn-success.active { - background-color: #408140 \9; -} - -.btn-info { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #49afcd; - *background-color: #2f96b4; - background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4)); - background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4); - background-image: -o-linear-gradient(top, #5bc0de, #2f96b4); - background-image: linear-gradient(to bottom, #5bc0de, #2f96b4); - background-repeat: repeat-x; - border-color: #2f96b4 #2f96b4 #1f6377; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.btn-info:hover, -.btn-info:focus, -.btn-info:active, -.btn-info.active, -.btn-info.disabled, -.btn-info[disabled] { - color: #ffffff; - background-color: #2f96b4; - *background-color: #2a85a0; -} - -.btn-info:active, -.btn-info.active { - background-color: #24748c \9; -} - -.btn-inverse { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #363636; - *background-color: #222222; - background-image: -moz-linear-gradient(top, #444444, #222222); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222)); - background-image: -webkit-linear-gradient(top, #444444, #222222); - background-image: -o-linear-gradient(top, #444444, #222222); - background-image: linear-gradient(to bottom, #444444, #222222); - background-repeat: repeat-x; - border-color: #222222 #222222 #000000; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.btn-inverse:hover, -.btn-inverse:focus, -.btn-inverse:active, -.btn-inverse.active, -.btn-inverse.disabled, -.btn-inverse[disabled] { - color: #ffffff; - background-color: #222222; - *background-color: #151515; -} - -.btn-inverse:active, -.btn-inverse.active { - background-color: #080808 \9; -} - -button.btn, -input[type="submit"].btn { - *padding-top: 3px; - *padding-bottom: 3px; -} - -button.btn::-moz-focus-inner, -input[type="submit"].btn::-moz-focus-inner { - padding: 0; - border: 0; -} - -button.btn.btn-large, -input[type="submit"].btn.btn-large { - *padding-top: 7px; - *padding-bottom: 7px; -} - -button.btn.btn-small, -input[type="submit"].btn.btn-small { - *padding-top: 3px; - *padding-bottom: 3px; -} - -button.btn.btn-mini, -input[type="submit"].btn.btn-mini { - *padding-top: 1px; - *padding-bottom: 1px; -} - -.btn-link, -.btn-link:active, -.btn-link[disabled] { - background-color: transparent; - background-image: none; - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; -} - -.btn-link { - color: #0088cc; - cursor: pointer; - border-color: transparent; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.btn-link:hover, -.btn-link:focus { - color: #005580; - text-decoration: underline; - background-color: transparent; -} - -.btn-link[disabled]:hover, -.btn-link[disabled]:focus { - color: #333333; - text-decoration: none; -} - -.btn-group { - position: relative; - display: inline-block; - *display: inline; - *margin-left: .3em; - font-size: 0; - white-space: nowrap; - vertical-align: middle; - *zoom: 1; -} - -.btn-group:first-child { - *margin-left: 0; -} - -.btn-group + .btn-group { - margin-left: 5px; -} - -.btn-toolbar { - margin-top: 10px; - margin-bottom: 10px; - font-size: 0; -} - -.btn-toolbar > .btn + .btn, -.btn-toolbar > .btn-group + .btn, -.btn-toolbar > .btn + .btn-group { - margin-left: 5px; -} - -.btn-group > .btn { - position: relative; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.btn-group > .btn + .btn { - margin-left: -1px; -} - -.btn-group > .btn, -.btn-group > .dropdown-menu, -.btn-group > .popover { - font-size: 14px; -} - -.btn-group > .btn-mini { - font-size: 10.5px; -} - -.btn-group > .btn-small { - font-size: 11.9px; -} - -.btn-group > .btn-large { - font-size: 17.5px; -} - -.btn-group > .btn:first-child { - margin-left: 0; - -webkit-border-bottom-left-radius: 4px; - border-bottom-left-radius: 4px; - -webkit-border-top-left-radius: 4px; - border-top-left-radius: 4px; - -moz-border-radius-bottomleft: 4px; - -moz-border-radius-topleft: 4px; -} - -.btn-group > .btn:last-child, -.btn-group > .dropdown-toggle { - -webkit-border-top-right-radius: 4px; - border-top-right-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - border-bottom-right-radius: 4px; - -moz-border-radius-topright: 4px; - -moz-border-radius-bottomright: 4px; -} - -.btn-group > .btn.large:first-child { - margin-left: 0; - -webkit-border-bottom-left-radius: 6px; - border-bottom-left-radius: 6px; - -webkit-border-top-left-radius: 6px; - border-top-left-radius: 6px; - -moz-border-radius-bottomleft: 6px; - -moz-border-radius-topleft: 6px; -} - -.btn-group > .btn.large:last-child, -.btn-group > .large.dropdown-toggle { - -webkit-border-top-right-radius: 6px; - border-top-right-radius: 6px; - -webkit-border-bottom-right-radius: 6px; - border-bottom-right-radius: 6px; - -moz-border-radius-topright: 6px; - -moz-border-radius-bottomright: 6px; -} - -.btn-group > .btn:hover, -.btn-group > .btn:focus, -.btn-group > .btn:active, -.btn-group > .btn.active { - z-index: 2; -} - -.btn-group .dropdown-toggle:active, -.btn-group.open .dropdown-toggle { - outline: 0; -} - -.btn-group > .btn + .dropdown-toggle { - *padding-top: 5px; - padding-right: 8px; - *padding-bottom: 5px; - padding-left: 8px; - -webkit-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); -} - -.btn-group > .btn-mini + .dropdown-toggle { - *padding-top: 2px; - padding-right: 5px; - *padding-bottom: 2px; - padding-left: 5px; -} - -.btn-group > .btn-small + .dropdown-toggle { - *padding-top: 5px; - *padding-bottom: 4px; -} - -.btn-group > .btn-large + .dropdown-toggle { - *padding-top: 7px; - padding-right: 12px; - *padding-bottom: 7px; - padding-left: 12px; -} - -.btn-group.open .dropdown-toggle { - background-image: none; - -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); -} - -.btn-group.open .btn.dropdown-toggle { - background-color: #e6e6e6; -} - -.btn-group.open .btn-primary.dropdown-toggle { - background-color: #0044cc; -} - -.btn-group.open .btn-warning.dropdown-toggle { - background-color: #f89406; -} - -.btn-group.open .btn-danger.dropdown-toggle { - background-color: #bd362f; -} - -.btn-group.open .btn-success.dropdown-toggle { - background-color: #51a351; -} - -.btn-group.open .btn-info.dropdown-toggle { - background-color: #2f96b4; -} - -.btn-group.open .btn-inverse.dropdown-toggle { - background-color: #222222; -} - -.btn .caret { - margin-top: 8px; - margin-left: 0; -} - -.btn-large .caret { - margin-top: 6px; -} - -.btn-large .caret { - border-top-width: 5px; - border-right-width: 5px; - border-left-width: 5px; -} - -.btn-mini .caret, -.btn-small .caret { - margin-top: 8px; -} - -.dropup .btn-large .caret { - border-bottom-width: 5px; -} - -.btn-primary .caret, -.btn-warning .caret, -.btn-danger .caret, -.btn-info .caret, -.btn-success .caret, -.btn-inverse .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} - -.btn-group-vertical { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; -} - -.btn-group-vertical > .btn { - display: block; - float: none; - max-width: 100%; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.btn-group-vertical > .btn + .btn { - margin-top: -1px; - margin-left: 0; -} - -.btn-group-vertical > .btn:first-child { - -webkit-border-radius: 4px 4px 0 0; - -moz-border-radius: 4px 4px 0 0; - border-radius: 4px 4px 0 0; -} - -.btn-group-vertical > .btn:last-child { - -webkit-border-radius: 0 0 4px 4px; - -moz-border-radius: 0 0 4px 4px; - border-radius: 0 0 4px 4px; -} - -.btn-group-vertical > .btn-large:first-child { - -webkit-border-radius: 6px 6px 0 0; - -moz-border-radius: 6px 6px 0 0; - border-radius: 6px 6px 0 0; -} - -.btn-group-vertical > .btn-large:last-child { - -webkit-border-radius: 0 0 6px 6px; - -moz-border-radius: 0 0 6px 6px; - border-radius: 0 0 6px 6px; -} - -.alert { - padding: 8px 35px 8px 14px; - margin-bottom: 20px; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); - background-color: #fcf8e3; - border: 1px solid #fbeed5; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -.alert, -.alert h4 { - color: #c09853; -} - -.alert h4 { - margin: 0; -} - -.alert .close { - position: relative; - top: -2px; - right: -21px; - line-height: 20px; -} - -.alert-success { - color: #468847; - background-color: #dff0d8; - border-color: #d6e9c6; -} - -.alert-success h4 { - color: #468847; -} - -.alert-danger, -.alert-error { - color: #b94a48; - background-color: #f2dede; - border-color: #eed3d7; -} - -.alert-danger h4, -.alert-error h4 { - color: #b94a48; -} - -.alert-info { - color: #3a87ad; - background-color: #d9edf7; - border-color: #bce8f1; -} - -.alert-info h4 { - color: #3a87ad; -} - -.alert-block { - padding-top: 14px; - padding-bottom: 14px; -} - -.alert-block > p, -.alert-block > ul { - margin-bottom: 0; -} - -.alert-block p + p { - margin-top: 5px; -} - -.nav { - margin-bottom: 20px; - margin-left: 0; - list-style: none; -} - -.nav > li > a { - display: block; -} - -.nav > li > a:hover, -.nav > li > a:focus { - text-decoration: none; - background-color: #eeeeee; -} - -.nav > li > a > img { - max-width: none; -} - -.nav > .pull-right { - float: right; -} - -.nav-header { - display: block; - padding: 3px 15px; - font-size: 11px; - font-weight: bold; - line-height: 20px; - color: #999999; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); - text-transform: uppercase; -} - -.nav li + .nav-header { - margin-top: 9px; -} - -.nav-list { - padding-right: 15px; - padding-left: 15px; - margin-bottom: 0; -} - -.nav-list > li > a, -.nav-list .nav-header { - margin-right: -15px; - margin-left: -15px; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); -} - -.nav-list > li > a { - padding: 3px 15px; -} - -.nav-list > .active > a, -.nav-list > .active > a:hover, -.nav-list > .active > a:focus { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); - background-color: #0088cc; -} - -.nav-list [class^="icon-"], -.nav-list [class*=" icon-"] { - margin-right: 2px; -} - -.nav-list .divider { - *width: 100%; - height: 1px; - margin: 9px 1px; - *margin: -5px 0 5px; - overflow: hidden; - background-color: #e5e5e5; - border-bottom: 1px solid #ffffff; -} - -.nav-tabs, -.nav-pills { - *zoom: 1; -} - -.nav-tabs:before, -.nav-pills:before, -.nav-tabs:after, -.nav-pills:after { - display: table; - line-height: 0; - content: ""; -} - -.nav-tabs:after, -.nav-pills:after { - clear: both; -} - -.nav-tabs > li, -.nav-pills > li { - float: left; -} - -.nav-tabs > li > a, -.nav-pills > li > a { - padding-right: 12px; - padding-left: 12px; - margin-right: 2px; - line-height: 14px; -} - -.nav-tabs { - border-bottom: 1px solid #ddd; -} - -.nav-tabs > li { - margin-bottom: -1px; -} - -.nav-tabs > li > a { - padding-top: 8px; - padding-bottom: 8px; - line-height: 20px; - border: 1px solid transparent; - -webkit-border-radius: 4px 4px 0 0; - -moz-border-radius: 4px 4px 0 0; - border-radius: 4px 4px 0 0; -} - -.nav-tabs > li > a:hover, -.nav-tabs > li > a:focus { - border-color: #eeeeee #eeeeee #dddddd; -} - -.nav-tabs > .active > a, -.nav-tabs > .active > a:hover, -.nav-tabs > .active > a:focus { - color: #555555; - cursor: default; - background-color: #ffffff; - border: 1px solid #ddd; - border-bottom-color: transparent; -} - -.nav-pills > li > a { - padding-top: 8px; - padding-bottom: 8px; - margin-top: 2px; - margin-bottom: 2px; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; - border-radius: 5px; -} - -.nav-pills > .active > a, -.nav-pills > .active > a:hover, -.nav-pills > .active > a:focus { - color: #ffffff; - background-color: #0088cc; -} - -.nav-stacked > li { - float: none; -} - -.nav-stacked > li > a { - margin-right: 0; -} - -.nav-tabs.nav-stacked { - border-bottom: 0; -} - -.nav-tabs.nav-stacked > li > a { - border: 1px solid #ddd; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.nav-tabs.nav-stacked > li:first-child > a { - -webkit-border-top-right-radius: 4px; - border-top-right-radius: 4px; - -webkit-border-top-left-radius: 4px; - border-top-left-radius: 4px; - -moz-border-radius-topright: 4px; - -moz-border-radius-topleft: 4px; -} - -.nav-tabs.nav-stacked > li:last-child > a { - -webkit-border-bottom-right-radius: 4px; - border-bottom-right-radius: 4px; - -webkit-border-bottom-left-radius: 4px; - border-bottom-left-radius: 4px; - -moz-border-radius-bottomright: 4px; - -moz-border-radius-bottomleft: 4px; -} - -.nav-tabs.nav-stacked > li > a:hover, -.nav-tabs.nav-stacked > li > a:focus { - z-index: 2; - border-color: #ddd; -} - -.nav-pills.nav-stacked > li > a { - margin-bottom: 3px; -} - -.nav-pills.nav-stacked > li:last-child > a { - margin-bottom: 1px; -} - -.nav-tabs .dropdown-menu { - -webkit-border-radius: 0 0 6px 6px; - -moz-border-radius: 0 0 6px 6px; - border-radius: 0 0 6px 6px; -} - -.nav-pills .dropdown-menu { - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} - -.nav .dropdown-toggle .caret { - margin-top: 6px; - border-top-color: #0088cc; - border-bottom-color: #0088cc; -} - -.nav .dropdown-toggle:hover .caret, -.nav .dropdown-toggle:focus .caret { - border-top-color: #005580; - border-bottom-color: #005580; -} - -/* move down carets for tabs */ - -.nav-tabs .dropdown-toggle .caret { - margin-top: 8px; -} - -.nav .active .dropdown-toggle .caret { - border-top-color: #fff; - border-bottom-color: #fff; -} - -.nav-tabs .active .dropdown-toggle .caret { - border-top-color: #555555; - border-bottom-color: #555555; -} - -.nav > .dropdown.active > a:hover, -.nav > .dropdown.active > a:focus { - cursor: pointer; -} - -.nav-tabs .open .dropdown-toggle, -.nav-pills .open .dropdown-toggle, -.nav > li.dropdown.open.active > a:hover, -.nav > li.dropdown.open.active > a:focus { - color: #ffffff; - background-color: #999999; - border-color: #999999; -} - -.nav li.dropdown.open .caret, -.nav li.dropdown.open.active .caret, -.nav li.dropdown.open a:hover .caret, -.nav li.dropdown.open a:focus .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; - opacity: 1; - filter: alpha(opacity=100); -} - -.tabs-stacked .open > a:hover, -.tabs-stacked .open > a:focus { - border-color: #999999; -} - -.tabbable { - *zoom: 1; -} - -.tabbable:before, -.tabbable:after { - display: table; - line-height: 0; - content: ""; -} - -.tabbable:after { - clear: both; -} - -.tab-content { - overflow: auto; -} - -.tabs-below > .nav-tabs, -.tabs-right > .nav-tabs, -.tabs-left > .nav-tabs { - border-bottom: 0; -} - -.tab-content > .tab-pane, -.pill-content > .pill-pane { - display: none; -} - -.tab-content > .active, -.pill-content > .active { - display: block; -} - -.tabs-below > .nav-tabs { - border-top: 1px solid #ddd; -} - -.tabs-below > .nav-tabs > li { - margin-top: -1px; - margin-bottom: 0; -} - -.tabs-below > .nav-tabs > li > a { - -webkit-border-radius: 0 0 4px 4px; - -moz-border-radius: 0 0 4px 4px; - border-radius: 0 0 4px 4px; -} - -.tabs-below > .nav-tabs > li > a:hover, -.tabs-below > .nav-tabs > li > a:focus { - border-top-color: #ddd; - border-bottom-color: transparent; -} - -.tabs-below > .nav-tabs > .active > a, -.tabs-below > .nav-tabs > .active > a:hover, -.tabs-below > .nav-tabs > .active > a:focus { - border-color: transparent #ddd #ddd #ddd; -} - -.tabs-left > .nav-tabs > li, -.tabs-right > .nav-tabs > li { - float: none; -} - -.tabs-left > .nav-tabs > li > a, -.tabs-right > .nav-tabs > li > a { - min-width: 74px; - margin-right: 0; - margin-bottom: 3px; -} - -.tabs-left > .nav-tabs { - float: left; - margin-right: 19px; - border-right: 1px solid #ddd; -} - -.tabs-left > .nav-tabs > li > a { - margin-right: -1px; - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} - -.tabs-left > .nav-tabs > li > a:hover, -.tabs-left > .nav-tabs > li > a:focus { - border-color: #eeeeee #dddddd #eeeeee #eeeeee; -} - -.tabs-left > .nav-tabs .active > a, -.tabs-left > .nav-tabs .active > a:hover, -.tabs-left > .nav-tabs .active > a:focus { - border-color: #ddd transparent #ddd #ddd; - *border-right-color: #ffffff; -} - -.tabs-right > .nav-tabs { - float: right; - margin-left: 19px; - border-left: 1px solid #ddd; -} - -.tabs-right > .nav-tabs > li > a { - margin-left: -1px; - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} - -.tabs-right > .nav-tabs > li > a:hover, -.tabs-right > .nav-tabs > li > a:focus { - border-color: #eeeeee #eeeeee #eeeeee #dddddd; -} - -.tabs-right > .nav-tabs .active > a, -.tabs-right > .nav-tabs .active > a:hover, -.tabs-right > .nav-tabs .active > a:focus { - border-color: #ddd #ddd #ddd transparent; - *border-left-color: #ffffff; -} - -.nav > .disabled > a { - color: #999999; -} - -.nav > .disabled > a:hover, -.nav > .disabled > a:focus { - text-decoration: none; - cursor: default; - background-color: transparent; -} - -.navbar { - *position: relative; - *z-index: 2; - margin-bottom: 20px; - overflow: visible; -} - -.navbar-inner { - min-height: 40px; - padding-right: 20px; - padding-left: 20px; - background-color: #fafafa; - background-image: -moz-linear-gradient(top, #ffffff, #f2f2f2); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2)); - background-image: -webkit-linear-gradient(top, #ffffff, #f2f2f2); - background-image: -o-linear-gradient(top, #ffffff, #f2f2f2); - background-image: linear-gradient(to bottom, #ffffff, #f2f2f2); - background-repeat: repeat-x; - border: 1px solid #d4d4d4; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0); - *zoom: 1; - -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); - -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); - box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); -} - -.navbar-inner:before, -.navbar-inner:after { - display: table; - line-height: 0; - content: ""; -} - -.navbar-inner:after { - clear: both; -} - -.navbar .container { - width: auto; -} - -.nav-collapse.collapse { - height: auto; - overflow: visible; -} - -.navbar .brand { - display: block; - float: left; - padding: 10px 20px 10px; - margin-left: -20px; - font-size: 20px; - font-weight: 200; - color: #777777; - text-shadow: 0 1px 0 #ffffff; -} - -.navbar .brand:hover, -.navbar .brand:focus { - text-decoration: none; -} - -.navbar-text { - margin-bottom: 0; - line-height: 40px; - color: #777777; -} - -.navbar-link { - color: #777777; -} - -.navbar-link:hover, -.navbar-link:focus { - color: #333333; -} - -.navbar .divider-vertical { - height: 40px; - margin: 0 9px; - border-right: 1px solid #ffffff; - border-left: 1px solid #f2f2f2; -} - -.navbar .btn, -.navbar .btn-group { - margin-top: 5px; -} - -.navbar .btn-group .btn, -.navbar .input-prepend .btn, -.navbar .input-append .btn, -.navbar .input-prepend .btn-group, -.navbar .input-append .btn-group { - margin-top: 0; -} - -.navbar-form { - margin-bottom: 0; - *zoom: 1; -} - -.navbar-form:before, -.navbar-form:after { - display: table; - line-height: 0; - content: ""; -} - -.navbar-form:after { - clear: both; -} - -.navbar-form input, -.navbar-form select, -.navbar-form .radio, -.navbar-form .checkbox { - margin-top: 5px; -} - -.navbar-form input, -.navbar-form select, -.navbar-form .btn { - display: inline-block; - margin-bottom: 0; -} - -.navbar-form input[type="image"], -.navbar-form input[type="checkbox"], -.navbar-form input[type="radio"] { - margin-top: 3px; -} - -.navbar-form .input-append, -.navbar-form .input-prepend { - margin-top: 5px; - white-space: nowrap; -} - -.navbar-form .input-append input, -.navbar-form .input-prepend input { - margin-top: 0; -} - -.navbar-search { - position: relative; - float: left; - margin-top: 5px; - margin-bottom: 0; -} - -.navbar-search .search-query { - padding: 4px 14px; - margin-bottom: 0; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 13px; - font-weight: normal; - line-height: 1; - -webkit-border-radius: 15px; - -moz-border-radius: 15px; - border-radius: 15px; -} - -.navbar-static-top { - position: static; - margin-bottom: 0; -} - -.navbar-static-top .navbar-inner { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.navbar-fixed-top, -.navbar-fixed-bottom { - position: fixed; - right: 0; - left: 0; - z-index: 1030; - margin-bottom: 0; -} - -.navbar-fixed-top .navbar-inner, -.navbar-static-top .navbar-inner { - border-width: 0 0 1px; -} - -.navbar-fixed-bottom .navbar-inner { - border-width: 1px 0 0; -} - -.navbar-fixed-top .navbar-inner, -.navbar-fixed-bottom .navbar-inner { - padding-right: 0; - padding-left: 0; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.navbar-static-top .container, -.navbar-fixed-top .container, -.navbar-fixed-bottom .container { - width: 940px; -} - -.navbar-fixed-top { - top: 0; -} - -.navbar-fixed-top .navbar-inner, -.navbar-static-top .navbar-inner { - -webkit-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); - -moz-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); - box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); -} - -.navbar-fixed-bottom { - bottom: 0; -} - -.navbar-fixed-bottom .navbar-inner { - -webkit-box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); - -moz-box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); - box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); -} - -.navbar .nav { - position: relative; - left: 0; - display: block; - float: left; - margin: 0 10px 0 0; -} - -.navbar .nav.pull-right { - float: right; - margin-right: 0; -} - -.navbar .nav > li { - float: left; -} - -.navbar .nav > li > a { - float: none; - padding: 10px 15px 10px; - color: #777777; - text-decoration: none; - text-shadow: 0 1px 0 #ffffff; -} - -.navbar .nav .dropdown-toggle .caret { - margin-top: 8px; -} - -.navbar .nav > li > a:focus, -.navbar .nav > li > a:hover { - color: #333333; - text-decoration: none; - background-color: transparent; -} - -.navbar .nav > .active > a, -.navbar .nav > .active > a:hover, -.navbar .nav > .active > a:focus { - color: #555555; - text-decoration: none; - background-color: #e5e5e5; - -webkit-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); - -moz-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); - box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); -} - -.navbar .btn-navbar { - display: none; - float: right; - padding: 7px 10px; - margin-right: 5px; - margin-left: 5px; - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #ededed; - *background-color: #e5e5e5; - background-image: -moz-linear-gradient(top, #f2f2f2, #e5e5e5); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#e5e5e5)); - background-image: -webkit-linear-gradient(top, #f2f2f2, #e5e5e5); - background-image: -o-linear-gradient(top, #f2f2f2, #e5e5e5); - background-image: linear-gradient(to bottom, #f2f2f2, #e5e5e5); - background-repeat: repeat-x; - border-color: #e5e5e5 #e5e5e5 #bfbfbf; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffe5e5e5', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); - -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); -} - -.navbar .btn-navbar:hover, -.navbar .btn-navbar:focus, -.navbar .btn-navbar:active, -.navbar .btn-navbar.active, -.navbar .btn-navbar.disabled, -.navbar .btn-navbar[disabled] { - color: #ffffff; - background-color: #e5e5e5; - *background-color: #d9d9d9; -} - -.navbar .btn-navbar:active, -.navbar .btn-navbar.active { - background-color: #cccccc \9; -} - -.navbar .btn-navbar .icon-bar { - display: block; - width: 18px; - height: 2px; - background-color: #f5f5f5; - -webkit-border-radius: 1px; - -moz-border-radius: 1px; - border-radius: 1px; - -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); - -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); - box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); -} - -.btn-navbar .icon-bar + .icon-bar { - margin-top: 3px; -} - -.navbar .nav > li > .dropdown-menu:before { - position: absolute; - top: -7px; - left: 9px; - display: inline-block; - border-right: 7px solid transparent; - border-bottom: 7px solid #ccc; - border-left: 7px solid transparent; - border-bottom-color: rgba(0, 0, 0, 0.2); - content: ''; -} - -.navbar .nav > li > .dropdown-menu:after { - position: absolute; - top: -6px; - left: 10px; - display: inline-block; - border-right: 6px solid transparent; - border-bottom: 6px solid #ffffff; - border-left: 6px solid transparent; - content: ''; -} - -.navbar-fixed-bottom .nav > li > .dropdown-menu:before { - top: auto; - bottom: -7px; - border-top: 7px solid #ccc; - border-bottom: 0; - border-top-color: rgba(0, 0, 0, 0.2); -} - -.navbar-fixed-bottom .nav > li > .dropdown-menu:after { - top: auto; - bottom: -6px; - border-top: 6px solid #ffffff; - border-bottom: 0; -} - -.navbar .nav li.dropdown > a:hover .caret, -.navbar .nav li.dropdown > a:focus .caret { - border-top-color: #333333; - border-bottom-color: #333333; -} - -.navbar .nav li.dropdown.open > .dropdown-toggle, -.navbar .nav li.dropdown.active > .dropdown-toggle, -.navbar .nav li.dropdown.open.active > .dropdown-toggle { - color: #555555; - background-color: #e5e5e5; -} - -.navbar .nav li.dropdown > .dropdown-toggle .caret { - border-top-color: #777777; - border-bottom-color: #777777; -} - -.navbar .nav li.dropdown.open > .dropdown-toggle .caret, -.navbar .nav li.dropdown.active > .dropdown-toggle .caret, -.navbar .nav li.dropdown.open.active > .dropdown-toggle .caret { - border-top-color: #555555; - border-bottom-color: #555555; -} - -.navbar .pull-right > li > .dropdown-menu, -.navbar .nav > li > .dropdown-menu.pull-right { - right: 0; - left: auto; -} - -.navbar .pull-right > li > .dropdown-menu:before, -.navbar .nav > li > .dropdown-menu.pull-right:before { - right: 12px; - left: auto; -} - -.navbar .pull-right > li > .dropdown-menu:after, -.navbar .nav > li > .dropdown-menu.pull-right:after { - right: 13px; - left: auto; -} - -.navbar .pull-right > li > .dropdown-menu .dropdown-menu, -.navbar .nav > li > .dropdown-menu.pull-right .dropdown-menu { - right: 100%; - left: auto; - margin-right: -1px; - margin-left: 0; - -webkit-border-radius: 6px 0 6px 6px; - -moz-border-radius: 6px 0 6px 6px; - border-radius: 6px 0 6px 6px; -} - -.navbar-inverse .navbar-inner { - background-color: #1b1b1b; - background-image: -moz-linear-gradient(top, #222222, #111111); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#222222), to(#111111)); - background-image: -webkit-linear-gradient(top, #222222, #111111); - background-image: -o-linear-gradient(top, #222222, #111111); - background-image: linear-gradient(to bottom, #222222, #111111); - background-repeat: repeat-x; - border-color: #252525; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0); -} - -.navbar-inverse .brand, -.navbar-inverse .nav > li > a { - color: #999999; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); -} - -.navbar-inverse .brand:hover, -.navbar-inverse .nav > li > a:hover, -.navbar-inverse .brand:focus, -.navbar-inverse .nav > li > a:focus { - color: #ffffff; -} - -.navbar-inverse .brand { - color: #999999; -} - -.navbar-inverse .navbar-text { - color: #999999; -} - -.navbar-inverse .nav > li > a:focus, -.navbar-inverse .nav > li > a:hover { - color: #ffffff; - background-color: transparent; -} - -.navbar-inverse .nav .active > a, -.navbar-inverse .nav .active > a:hover, -.navbar-inverse .nav .active > a:focus { - color: #ffffff; - background-color: #111111; -} - -.navbar-inverse .navbar-link { - color: #999999; -} - -.navbar-inverse .navbar-link:hover, -.navbar-inverse .navbar-link:focus { - color: #ffffff; -} - -.navbar-inverse .divider-vertical { - border-right-color: #222222; - border-left-color: #111111; -} - -.navbar-inverse .nav li.dropdown.open > .dropdown-toggle, -.navbar-inverse .nav li.dropdown.active > .dropdown-toggle, -.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle { - color: #ffffff; - background-color: #111111; -} - -.navbar-inverse .nav li.dropdown > a:hover .caret, -.navbar-inverse .nav li.dropdown > a:focus .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} - -.navbar-inverse .nav li.dropdown > .dropdown-toggle .caret { - border-top-color: #999999; - border-bottom-color: #999999; -} - -.navbar-inverse .nav li.dropdown.open > .dropdown-toggle .caret, -.navbar-inverse .nav li.dropdown.active > .dropdown-toggle .caret, -.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} - -.navbar-inverse .navbar-search .search-query { - color: #ffffff; - background-color: #515151; - border-color: #111111; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); - -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); - -webkit-transition: none; - -moz-transition: none; - -o-transition: none; - transition: none; -} - -.navbar-inverse .navbar-search .search-query:-moz-placeholder { - color: #cccccc; -} - -.navbar-inverse .navbar-search .search-query:-ms-input-placeholder { - color: #cccccc; -} - -.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder { - color: #cccccc; -} - -.navbar-inverse .navbar-search .search-query:focus, -.navbar-inverse .navbar-search .search-query.focused { - padding: 5px 15px; - color: #333333; - text-shadow: 0 1px 0 #ffffff; - background-color: #ffffff; - border: 0; - outline: 0; - -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); - -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); - box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); -} - -.navbar-inverse .btn-navbar { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #0e0e0e; - *background-color: #040404; - background-image: -moz-linear-gradient(top, #151515, #040404); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#151515), to(#040404)); - background-image: -webkit-linear-gradient(top, #151515, #040404); - background-image: -o-linear-gradient(top, #151515, #040404); - background-image: linear-gradient(to bottom, #151515, #040404); - background-repeat: repeat-x; - border-color: #040404 #040404 #000000; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515', endColorstr='#ff040404', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); -} - -.navbar-inverse .btn-navbar:hover, -.navbar-inverse .btn-navbar:focus, -.navbar-inverse .btn-navbar:active, -.navbar-inverse .btn-navbar.active, -.navbar-inverse .btn-navbar.disabled, -.navbar-inverse .btn-navbar[disabled] { - color: #ffffff; - background-color: #040404; - *background-color: #000000; -} - -.navbar-inverse .btn-navbar:active, -.navbar-inverse .btn-navbar.active { - background-color: #000000 \9; -} - -.breadcrumb { - padding: 8px 15px; - margin: 0 0 20px; - list-style: none; - background-color: #f5f5f5; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -.breadcrumb > li { - display: inline-block; - *display: inline; - text-shadow: 0 1px 0 #ffffff; - *zoom: 1; -} - -.breadcrumb > li > .divider { - padding: 0 5px; - color: #ccc; -} - -.breadcrumb > .active { - color: #999999; -} - -.pagination { - margin: 20px 0; -} - -.pagination ul { - display: inline-block; - *display: inline; - margin-bottom: 0; - margin-left: 0; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - *zoom: 1; - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); -} - -.pagination ul > li { - display: inline; -} - -.pagination ul > li > a, -.pagination ul > li > span { - float: left; - padding: 4px 12px; - line-height: 20px; - text-decoration: none; - background-color: #ffffff; - border: 1px solid #dddddd; - border-left-width: 0; -} - -.pagination ul > li > a:hover, -.pagination ul > li > a:focus, -.pagination ul > .active > a, -.pagination ul > .active > span { - background-color: #f5f5f5; -} - -.pagination ul > .active > a, -.pagination ul > .active > span { - color: #999999; - cursor: default; -} - -.pagination ul > .disabled > span, -.pagination ul > .disabled > a, -.pagination ul > .disabled > a:hover, -.pagination ul > .disabled > a:focus { - color: #999999; - cursor: default; - background-color: transparent; -} - -.pagination ul > li:first-child > a, -.pagination ul > li:first-child > span { - border-left-width: 1px; - -webkit-border-bottom-left-radius: 4px; - border-bottom-left-radius: 4px; - -webkit-border-top-left-radius: 4px; - border-top-left-radius: 4px; - -moz-border-radius-bottomleft: 4px; - -moz-border-radius-topleft: 4px; -} - -.pagination ul > li:last-child > a, -.pagination ul > li:last-child > span { - -webkit-border-top-right-radius: 4px; - border-top-right-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - border-bottom-right-radius: 4px; - -moz-border-radius-topright: 4px; - -moz-border-radius-bottomright: 4px; -} - -.pagination-centered { - text-align: center; -} - -.pagination-right { - text-align: right; -} - -.pagination-large ul > li > a, -.pagination-large ul > li > span { - padding: 11px 19px; - font-size: 17.5px; -} - -.pagination-large ul > li:first-child > a, -.pagination-large ul > li:first-child > span { - -webkit-border-bottom-left-radius: 6px; - border-bottom-left-radius: 6px; - -webkit-border-top-left-radius: 6px; - border-top-left-radius: 6px; - -moz-border-radius-bottomleft: 6px; - -moz-border-radius-topleft: 6px; -} - -.pagination-large ul > li:last-child > a, -.pagination-large ul > li:last-child > span { - -webkit-border-top-right-radius: 6px; - border-top-right-radius: 6px; - -webkit-border-bottom-right-radius: 6px; - border-bottom-right-radius: 6px; - -moz-border-radius-topright: 6px; - -moz-border-radius-bottomright: 6px; -} - -.pagination-mini ul > li:first-child > a, -.pagination-small ul > li:first-child > a, -.pagination-mini ul > li:first-child > span, -.pagination-small ul > li:first-child > span { - -webkit-border-bottom-left-radius: 3px; - border-bottom-left-radius: 3px; - -webkit-border-top-left-radius: 3px; - border-top-left-radius: 3px; - -moz-border-radius-bottomleft: 3px; - -moz-border-radius-topleft: 3px; -} - -.pagination-mini ul > li:last-child > a, -.pagination-small ul > li:last-child > a, -.pagination-mini ul > li:last-child > span, -.pagination-small ul > li:last-child > span { - -webkit-border-top-right-radius: 3px; - border-top-right-radius: 3px; - -webkit-border-bottom-right-radius: 3px; - border-bottom-right-radius: 3px; - -moz-border-radius-topright: 3px; - -moz-border-radius-bottomright: 3px; -} - -.pagination-small ul > li > a, -.pagination-small ul > li > span { - padding: 2px 10px; - font-size: 11.9px; -} - -.pagination-mini ul > li > a, -.pagination-mini ul > li > span { - padding: 0 6px; - font-size: 10.5px; -} - -.pager { - margin: 20px 0; - text-align: center; - list-style: none; - *zoom: 1; -} - -.pager:before, -.pager:after { - display: table; - line-height: 0; - content: ""; -} - -.pager:after { - clear: both; -} - -.pager li { - display: inline; -} - -.pager li > a, -.pager li > span { - display: inline-block; - padding: 5px 14px; - background-color: #fff; - border: 1px solid #ddd; - -webkit-border-radius: 15px; - -moz-border-radius: 15px; - border-radius: 15px; -} - -.pager li > a:hover, -.pager li > a:focus { - text-decoration: none; - background-color: #f5f5f5; -} - -.pager .next > a, -.pager .next > span { - float: right; -} - -.pager .previous > a, -.pager .previous > span { - float: left; -} - -.pager .disabled > a, -.pager .disabled > a:hover, -.pager .disabled > a:focus, -.pager .disabled > span { - color: #999999; - cursor: default; - background-color: #fff; -} - -.modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1040; - background-color: #000000; -} - -.modal-backdrop.fade { - opacity: 0; -} - -.modal-backdrop, -.modal-backdrop.fade.in { - opacity: 0.8; - filter: alpha(opacity=80); -} - -.modal { - position: fixed; - top: 10%; - left: 50%; - z-index: 1050; - width: 560px; - margin-left: -280px; - background-color: #ffffff; - border: 1px solid #999; - border: 1px solid rgba(0, 0, 0, 0.3); - *border: 1px solid #999; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - outline: none; - -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - -webkit-background-clip: padding-box; - -moz-background-clip: padding-box; - background-clip: padding-box; -} - -.modal.fade { - top: -25%; - -webkit-transition: opacity 0.3s linear, top 0.3s ease-out; - -moz-transition: opacity 0.3s linear, top 0.3s ease-out; - -o-transition: opacity 0.3s linear, top 0.3s ease-out; - transition: opacity 0.3s linear, top 0.3s ease-out; -} - -.modal.fade.in { - top: 10%; -} - -.modal-header { - padding: 9px 15px; - border-bottom: 1px solid #eee; -} - -.modal-header .close { - margin-top: 2px; -} - -.modal-header h3 { - margin: 0; - line-height: 30px; -} - -.modal-body { - position: relative; - max-height: 400px; - padding: 15px; - overflow-y: auto; -} - -.modal-form { - margin-bottom: 0; -} - -.modal-footer { - padding: 14px 15px 15px; - margin-bottom: 0; - text-align: right; - background-color: #f5f5f5; - border-top: 1px solid #ddd; - -webkit-border-radius: 0 0 6px 6px; - -moz-border-radius: 0 0 6px 6px; - border-radius: 0 0 6px 6px; - *zoom: 1; - -webkit-box-shadow: inset 0 1px 0 #ffffff; - -moz-box-shadow: inset 0 1px 0 #ffffff; - box-shadow: inset 0 1px 0 #ffffff; -} - -.modal-footer:before, -.modal-footer:after { - display: table; - line-height: 0; - content: ""; -} - -.modal-footer:after { - clear: both; -} - -.modal-footer .btn + .btn { - margin-bottom: 0; - margin-left: 5px; -} - -.modal-footer .btn-group .btn + .btn { - margin-left: -1px; -} - -.modal-footer .btn-block + .btn-block { - margin-left: 0; -} - -.tooltip { - position: absolute; - z-index: 1030; - display: block; - font-size: 11px; - line-height: 1.4; - opacity: 0; - filter: alpha(opacity=0); - visibility: visible; -} - -.tooltip.in { - opacity: 0.8; - filter: alpha(opacity=80); -} - -.tooltip.top { - padding: 5px 0; - margin-top: -3px; -} - -.tooltip.right { - padding: 0 5px; - margin-left: 3px; -} - -.tooltip.bottom { - padding: 5px 0; - margin-top: 3px; -} - -.tooltip.left { - padding: 0 5px; - margin-left: -3px; -} - -.tooltip-inner { - max-width: 200px; - padding: 8px; - color: #ffffff; - text-align: center; - text-decoration: none; - background-color: #000000; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} - -.tooltip.top .tooltip-arrow { - bottom: 0; - left: 50%; - margin-left: -5px; - border-top-color: #000000; - border-width: 5px 5px 0; -} - -.tooltip.right .tooltip-arrow { - top: 50%; - left: 0; - margin-top: -5px; - border-right-color: #000000; - border-width: 5px 5px 5px 0; -} - -.tooltip.left .tooltip-arrow { - top: 50%; - right: 0; - margin-top: -5px; - border-left-color: #000000; - border-width: 5px 0 5px 5px; -} - -.tooltip.bottom .tooltip-arrow { - top: 0; - left: 50%; - margin-left: -5px; - border-bottom-color: #000000; - border-width: 0 5px 5px; -} - -.popover { - position: absolute; - top: 0; - left: 0; - z-index: 1010; - display: none; - max-width: 276px; - padding: 1px; - text-align: left; - white-space: normal; - background-color: #ffffff; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.2); - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} - -.popover.top { - margin-top: -10px; -} - -.popover.right { - margin-left: 10px; -} - -.popover.bottom { - margin-top: 10px; -} - -.popover.left { - margin-left: -10px; -} - -.popover-title { - padding: 8px 14px; - margin: 0; - font-size: 14px; - font-weight: normal; - line-height: 18px; - background-color: #f7f7f7; - border-bottom: 1px solid #ebebeb; - -webkit-border-radius: 5px 5px 0 0; - -moz-border-radius: 5px 5px 0 0; - border-radius: 5px 5px 0 0; -} - -.popover-title:empty { - display: none; -} - -.popover-content { - padding: 9px 14px; -} - -.popover .arrow, -.popover .arrow:after { - position: absolute; - display: block; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} - -.popover .arrow { - border-width: 11px; -} - -.popover .arrow:after { - border-width: 10px; - content: ""; -} - -.popover.top .arrow { - bottom: -11px; - left: 50%; - margin-left: -11px; - border-top-color: #999; - border-top-color: rgba(0, 0, 0, 0.25); - border-bottom-width: 0; -} - -.popover.top .arrow:after { - bottom: 1px; - margin-left: -10px; - border-top-color: #ffffff; - border-bottom-width: 0; -} - -.popover.right .arrow { - top: 50%; - left: -11px; - margin-top: -11px; - border-right-color: #999; - border-right-color: rgba(0, 0, 0, 0.25); - border-left-width: 0; -} - -.popover.right .arrow:after { - bottom: -10px; - left: 1px; - border-right-color: #ffffff; - border-left-width: 0; -} - -.popover.bottom .arrow { - top: -11px; - left: 50%; - margin-left: -11px; - border-bottom-color: #999; - border-bottom-color: rgba(0, 0, 0, 0.25); - border-top-width: 0; -} - -.popover.bottom .arrow:after { - top: 1px; - margin-left: -10px; - border-bottom-color: #ffffff; - border-top-width: 0; -} - -.popover.left .arrow { - top: 50%; - right: -11px; - margin-top: -11px; - border-left-color: #999; - border-left-color: rgba(0, 0, 0, 0.25); - border-right-width: 0; -} - -.popover.left .arrow:after { - right: 1px; - bottom: -10px; - border-left-color: #ffffff; - border-right-width: 0; -} - -.thumbnails { - margin-left: -20px; - list-style: none; - *zoom: 1; -} - -.thumbnails:before, -.thumbnails:after { - display: table; - line-height: 0; - content: ""; -} - -.thumbnails:after { - clear: both; -} - -.row-fluid .thumbnails { - margin-left: 0; -} - -.thumbnails > li { - float: left; - margin-bottom: 20px; - margin-left: 20px; -} - -.thumbnail { - display: block; - padding: 4px; - line-height: 20px; - border: 1px solid #ddd; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); - -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); - -webkit-transition: all 0.2s ease-in-out; - -moz-transition: all 0.2s ease-in-out; - -o-transition: all 0.2s ease-in-out; - transition: all 0.2s ease-in-out; -} - -a.thumbnail:hover, -a.thumbnail:focus { - border-color: #0088cc; - -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); - -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); - box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); -} - -.thumbnail > img { - display: block; - max-width: 100%; - margin-right: auto; - margin-left: auto; -} - -.thumbnail .caption { - padding: 9px; - color: #555555; -} - -.media, -.media-body { - overflow: hidden; - *overflow: visible; - zoom: 1; -} - -.media, -.media .media { - margin-top: 15px; -} - -.media:first-child { - margin-top: 0; -} - -.media-object { - display: block; -} - -.media-heading { - margin: 0 0 5px; -} - -.media > .pull-left { - margin-right: 10px; -} - -.media > .pull-right { - margin-left: 10px; -} - -.media-list { - margin-left: 0; - list-style: none; -} - -.label, -.badge { - display: inline-block; - padding: 2px 4px; - font-size: 11.844px; - font-weight: bold; - line-height: 14px; - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - white-space: nowrap; - vertical-align: baseline; - background-color: #999999; -} - -.label { - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -.badge { - padding-right: 9px; - padding-left: 9px; - -webkit-border-radius: 9px; - -moz-border-radius: 9px; - border-radius: 9px; -} - -.label:empty, -.badge:empty { - display: none; -} - -a.label:hover, -a.label:focus, -a.badge:hover, -a.badge:focus { - color: #ffffff; - text-decoration: none; - cursor: pointer; -} - -.label-important, -.badge-important { - background-color: #b94a48; -} - -.label-important[href], -.badge-important[href] { - background-color: #953b39; -} - -.label-warning, -.badge-warning { - background-color: #f89406; -} - -.label-warning[href], -.badge-warning[href] { - background-color: #c67605; -} - -.label-success, -.badge-success { - background-color: #468847; -} - -.label-success[href], -.badge-success[href] { - background-color: #356635; -} - -.label-info, -.badge-info { - background-color: #3a87ad; -} - -.label-info[href], -.badge-info[href] { - background-color: #2d6987; -} - -.label-inverse, -.badge-inverse { - background-color: #333333; -} - -.label-inverse[href], -.badge-inverse[href] { - background-color: #1a1a1a; -} - -.btn .label, -.btn .badge { - position: relative; - top: -1px; -} - -.btn-mini .label, -.btn-mini .badge { - top: 0; -} - -@-webkit-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} - -@-moz-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} - -@-ms-keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} - -@-o-keyframes progress-bar-stripes { - from { - background-position: 0 0; - } - to { - background-position: 40px 0; - } -} - -@keyframes progress-bar-stripes { - from { - background-position: 40px 0; - } - to { - background-position: 0 0; - } -} - -.progress { - height: 20px; - margin-bottom: 20px; - overflow: hidden; - background-color: #f7f7f7; - background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9)); - background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: linear-gradient(to bottom, #f5f5f5, #f9f9f9); - background-repeat: repeat-x; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0); - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); -} - -.progress .bar { - float: left; - width: 0; - height: 100%; - font-size: 12px; - color: #ffffff; - text-align: center; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #0e90d2; - background-image: -moz-linear-gradient(top, #149bdf, #0480be); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be)); - background-image: -webkit-linear-gradient(top, #149bdf, #0480be); - background-image: -o-linear-gradient(top, #149bdf, #0480be); - background-image: linear-gradient(to bottom, #149bdf, #0480be); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0); - -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - -webkit-transition: width 0.6s ease; - -moz-transition: width 0.6s ease; - -o-transition: width 0.6s ease; - transition: width 0.6s ease; -} - -.progress .bar + .bar { - -webkit-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -moz-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); - box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); -} - -.progress-striped .bar { - background-color: #149bdf; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - -webkit-background-size: 40px 40px; - -moz-background-size: 40px 40px; - -o-background-size: 40px 40px; - background-size: 40px 40px; -} - -.progress.active .bar { - -webkit-animation: progress-bar-stripes 2s linear infinite; - -moz-animation: progress-bar-stripes 2s linear infinite; - -ms-animation: progress-bar-stripes 2s linear infinite; - -o-animation: progress-bar-stripes 2s linear infinite; - animation: progress-bar-stripes 2s linear infinite; -} - -.progress-danger .bar, -.progress .bar-danger { - background-color: #dd514c; - background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35)); - background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); - background-image: linear-gradient(to bottom, #ee5f5b, #c43c35); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0); -} - -.progress-danger.progress-striped .bar, -.progress-striped .bar-danger { - background-color: #ee5f5b; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} - -.progress-success .bar, -.progress .bar-success { - background-color: #5eb95e; - background-image: -moz-linear-gradient(top, #62c462, #57a957); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957)); - background-image: -webkit-linear-gradient(top, #62c462, #57a957); - background-image: -o-linear-gradient(top, #62c462, #57a957); - background-image: linear-gradient(to bottom, #62c462, #57a957); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0); -} - -.progress-success.progress-striped .bar, -.progress-striped .bar-success { - background-color: #62c462; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} - -.progress-info .bar, -.progress .bar-info { - background-color: #4bb1cf; - background-image: -moz-linear-gradient(top, #5bc0de, #339bb9); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9)); - background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9); - background-image: -o-linear-gradient(top, #5bc0de, #339bb9); - background-image: linear-gradient(to bottom, #5bc0de, #339bb9); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0); -} - -.progress-info.progress-striped .bar, -.progress-striped .bar-info { - background-color: #5bc0de; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} - -.progress-warning .bar, -.progress .bar-warning { - background-color: #faa732; - background-image: -moz-linear-gradient(top, #fbb450, #f89406); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); - background-image: -webkit-linear-gradient(top, #fbb450, #f89406); - background-image: -o-linear-gradient(top, #fbb450, #f89406); - background-image: linear-gradient(to bottom, #fbb450, #f89406); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); -} - -.progress-warning.progress-striped .bar, -.progress-striped .bar-warning { - background-color: #fbb450; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} - -.accordion { - margin-bottom: 20px; -} - -.accordion-group { - margin-bottom: 2px; - border: 1px solid #e5e5e5; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -.accordion-heading { - border-bottom: 0; -} - -.accordion-heading .accordion-toggle { - display: block; - padding: 8px 15px; -} - -.accordion-toggle { - cursor: pointer; -} - -.accordion-inner { - padding: 9px 15px; - border-top: 1px solid #e5e5e5; -} - -.carousel { - position: relative; - margin-bottom: 20px; - line-height: 1; -} - -.carousel-inner { - position: relative; - width: 100%; - overflow: hidden; -} - -.carousel-inner > .item { - position: relative; - display: none; - -webkit-transition: 0.6s ease-in-out left; - -moz-transition: 0.6s ease-in-out left; - -o-transition: 0.6s ease-in-out left; - transition: 0.6s ease-in-out left; -} - -.carousel-inner > .item > img, -.carousel-inner > .item > a > img { - display: block; - line-height: 1; -} - -.carousel-inner > .active, -.carousel-inner > .next, -.carousel-inner > .prev { - display: block; -} - -.carousel-inner > .active { - left: 0; -} - -.carousel-inner > .next, -.carousel-inner > .prev { - position: absolute; - top: 0; - width: 100%; -} - -.carousel-inner > .next { - left: 100%; -} - -.carousel-inner > .prev { - left: -100%; -} - -.carousel-inner > .next.left, -.carousel-inner > .prev.right { - left: 0; -} - -.carousel-inner > .active.left { - left: -100%; -} - -.carousel-inner > .active.right { - left: 100%; -} - -.carousel-control { - position: absolute; - top: 40%; - left: 15px; - width: 40px; - height: 40px; - margin-top: -20px; - font-size: 60px; - font-weight: 100; - line-height: 30px; - color: #ffffff; - text-align: center; - background: #222222; - border: 3px solid #ffffff; - -webkit-border-radius: 23px; - -moz-border-radius: 23px; - border-radius: 23px; - opacity: 0.5; - filter: alpha(opacity=50); -} - -.carousel-control.right { - right: 15px; - left: auto; -} - -.carousel-control:hover, -.carousel-control:focus { - color: #ffffff; - text-decoration: none; - opacity: 0.9; - filter: alpha(opacity=90); -} - -.carousel-indicators { - position: absolute; - top: 15px; - right: 15px; - z-index: 5; - margin: 0; - list-style: none; -} - -.carousel-indicators li { - display: block; - float: left; - width: 10px; - height: 10px; - margin-left: 5px; - text-indent: -999px; - background-color: #ccc; - background-color: rgba(255, 255, 255, 0.25); - border-radius: 5px; -} - -.carousel-indicators .active { - background-color: #fff; -} - -.carousel-caption { - position: absolute; - right: 0; - bottom: 0; - left: 0; - padding: 15px; - background: #333333; - background: rgba(0, 0, 0, 0.75); -} - -.carousel-caption h4, -.carousel-caption p { - line-height: 20px; - color: #ffffff; -} - -.carousel-caption h4 { - margin: 0 0 5px; -} - -.carousel-caption p { - margin-bottom: 0; -} - -.hero-unit { - padding: 60px; - margin-bottom: 30px; - font-size: 18px; - font-weight: 200; - line-height: 30px; - color: inherit; - background-color: #eeeeee; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} - -.hero-unit h1 { - margin-bottom: 0; - font-size: 60px; - line-height: 1; - letter-spacing: -1px; - color: inherit; -} - -.hero-unit li { - line-height: 30px; -} - -.pull-right { - float: right; -} - -.pull-left { - float: left; -} - -.hide { - display: none; -} - -.show { - display: block; -} - -.invisible { - visibility: hidden; -} - -.affix { - position: fixed; -} diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/css/docs.css b/src/main/webapp/bower_components/bootstrap/docs/assets/css/docs.css deleted file mode 100644 index af655409..00000000 --- a/src/main/webapp/bower_components/bootstrap/docs/assets/css/docs.css +++ /dev/null @@ -1,1067 +0,0 @@ -/* Add additional stylesheets below --------------------------------------------------- */ -/* - Bootstrap's documentation styles - Special styles for presenting Bootstrap's documentation and examples -*/ - - - -/* Body and structure --------------------------------------------------- */ - -body { - position: relative; - padding-top: 40px; -} - -/* Code in headings */ -h3 code { - font-size: 14px; - font-weight: normal; -} - - - -/* Tweak navbar brand link to be super sleek --------------------------------------------------- */ - -body > .navbar { - font-size: 13px; -} - -/* Change the docs' brand */ -body > .navbar .brand { - padding-right: 0; - padding-left: 0; - margin-left: 20px; - float: right; - font-weight: bold; - color: #000; - text-shadow: 0 1px 0 rgba(255,255,255,.1), 0 0 30px rgba(255,255,255,.125); - -webkit-transition: all .2s linear; - -moz-transition: all .2s linear; - transition: all .2s linear; -} -body > .navbar .brand:hover { - text-decoration: none; - text-shadow: 0 1px 0 rgba(255,255,255,.1), 0 0 30px rgba(255,255,255,.4); -} - - -/* Sections --------------------------------------------------- */ - -/* padding for in-page bookmarks and fixed navbar */ -section { - padding-top: 30px; -} -section > .page-header, -section > .lead { - color: #5a5a5a; -} -section > ul li { - margin-bottom: 5px; -} - -/* Separators (hr) */ -.bs-docs-separator { - margin: 40px 0 39px; -} - -/* Faded out hr */ -hr.soften { - height: 1px; - margin: 70px 0; - background-image: -webkit-linear-gradient(left, rgba(0,0,0,0), rgba(0,0,0,.1), rgba(0,0,0,0)); - background-image: -moz-linear-gradient(left, rgba(0,0,0,0), rgba(0,0,0,.1), rgba(0,0,0,0)); - background-image: -ms-linear-gradient(left, rgba(0,0,0,0), rgba(0,0,0,.1), rgba(0,0,0,0)); - background-image: -o-linear-gradient(left, rgba(0,0,0,0), rgba(0,0,0,.1), rgba(0,0,0,0)); - border: 0; -} - - - -/* Jumbotrons --------------------------------------------------- */ - -/* Base class -------------------------- */ -.jumbotron { - position: relative; - padding: 40px 0; - color: #fff; - text-align: center; - text-shadow: 0 1px 3px rgba(0,0,0,.4), 0 0 30px rgba(0,0,0,.075); - background: #020031; /* Old browsers */ - background: -moz-linear-gradient(45deg, #020031 0%, #6d3353 100%); /* FF3.6+ */ - background: -webkit-gradient(linear, left bottom, right top, color-stop(0%,#020031), color-stop(100%,#6d3353)); /* Chrome,Safari4+ */ - background: -webkit-linear-gradient(45deg, #020031 0%,#6d3353 100%); /* Chrome10+,Safari5.1+ */ - background: -o-linear-gradient(45deg, #020031 0%,#6d3353 100%); /* Opera 11.10+ */ - background: -ms-linear-gradient(45deg, #020031 0%,#6d3353 100%); /* IE10+ */ - background: linear-gradient(45deg, #020031 0%,#6d3353 100%); /* W3C */ - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#020031', endColorstr='#6d3353',GradientType=1 ); /* IE6-9 fallback on horizontal gradient */ - -webkit-box-shadow: inset 0 3px 7px rgba(0,0,0,.2), inset 0 -3px 7px rgba(0,0,0,.2); - -moz-box-shadow: inset 0 3px 7px rgba(0,0,0,.2), inset 0 -3px 7px rgba(0,0,0,.2); - box-shadow: inset 0 3px 7px rgba(0,0,0,.2), inset 0 -3px 7px rgba(0,0,0,.2); -} -.jumbotron h1 { - font-size: 80px; - font-weight: bold; - letter-spacing: -1px; - line-height: 1; -} -.jumbotron p { - font-size: 24px; - font-weight: 300; - line-height: 1.25; - margin-bottom: 30px; -} - -/* Link styles (used on .masthead-links as well) */ -.jumbotron a { - color: #fff; - color: rgba(255,255,255,.5); - -webkit-transition: all .2s ease-in-out; - -moz-transition: all .2s ease-in-out; - transition: all .2s ease-in-out; -} -.jumbotron a:hover { - color: #fff; - text-shadow: 0 0 10px rgba(255,255,255,.25); -} - -/* Download button */ -.masthead .btn { - padding: 19px 24px; - font-size: 24px; - font-weight: 200; - color: #fff; /* redeclare to override the `.jumbotron a` */ - border: 0; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 5px rgba(0,0,0,.25); - -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 5px rgba(0,0,0,.25); - box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 5px rgba(0,0,0,.25); - -webkit-transition: none; - -moz-transition: none; - transition: none; -} -.masthead .btn:hover { - -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 5px rgba(0,0,0,.25); - -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 5px rgba(0,0,0,.25); - box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 5px rgba(0,0,0,.25); -} -.masthead .btn:active { - -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.1); - -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.1); - box-shadow: inset 0 2px 4px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.1); -} - - -/* Pattern overlay -------------------------- */ -.jumbotron .container { - position: relative; - z-index: 2; -} -.jumbotron:after { - content: ''; - display: block; - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - background: url(../img/bs-docs-masthead-pattern.png) repeat center center; - opacity: .4; -} -@media -only screen and (-webkit-min-device-pixel-ratio: 2), -only screen and ( min--moz-device-pixel-ratio: 2), -only screen and ( -o-min-device-pixel-ratio: 2/1) { - - .jumbotron:after { - background-size: 150px 150px; - } - -} - -/* Masthead (docs home) -------------------------- */ -.masthead { - padding: 70px 0 80px; - margin-bottom: 0; - color: #fff; -} -.masthead h1 { - font-size: 120px; - line-height: 1; - letter-spacing: -2px; -} -.masthead p { - font-size: 40px; - font-weight: 200; - line-height: 1.25; -} - -/* Textual links in masthead */ -.masthead-links { - margin: 0; - list-style: none; -} -.masthead-links li { - display: inline; - padding: 0 10px; - color: rgba(255,255,255,.25); -} - -/* Social proof buttons from GitHub & Twitter */ -.bs-docs-social { - padding: 15px 0; - text-align: center; - background-color: #f5f5f5; - border-top: 1px solid #fff; - border-bottom: 1px solid #ddd; -} - -/* Quick links on Home */ -.bs-docs-social-buttons { - margin-left: 0; - margin-bottom: 0; - padding-left: 0; - list-style: none; -} -.bs-docs-social-buttons li { - display: inline-block; - padding: 5px 8px; - line-height: 1; - *display: inline; - *zoom: 1; -} - -/* Subhead (other pages) -------------------------- */ -.subhead { - text-align: left; - border-bottom: 1px solid #ddd; -} -.subhead h1 { - font-size: 60px; -} -.subhead p { - margin-bottom: 20px; -} -.subhead .navbar { - display: none; -} - - - -/* Marketing section of Overview --------------------------------------------------- */ - -.marketing { - text-align: center; - color: #5a5a5a; -} -.marketing h1 { - margin: 60px 0 10px; - font-size: 60px; - font-weight: 200; - line-height: 1; - letter-spacing: -1px; -} -.marketing h2 { - font-weight: 200; - margin-bottom: 5px; -} -.marketing p { - font-size: 16px; - line-height: 1.5; -} -.marketing .marketing-byline { - margin-bottom: 40px; - font-size: 20px; - font-weight: 300; - line-height: 1.25; - color: #999; -} -.marketing-img { - display: block; - margin: 0 auto 30px; - max-height: 145px; -} - - - -/* Footer --------------------------------------------------- */ - -.footer { - text-align: center; - padding: 30px 0; - margin-top: 70px; - border-top: 1px solid #e5e5e5; - background-color: #f5f5f5; -} -.footer p { - margin-bottom: 0; - color: #777; -} -.footer-links { - margin: 10px 0; -} -.footer-links li { - display: inline; - padding: 0 2px; -} -.footer-links li:first-child { - padding-left: 0; -} - - - -/* Special grid styles --------------------------------------------------- */ - -.show-grid { - margin-top: 10px; - margin-bottom: 20px; -} -.show-grid [class*="span"] { - background-color: #eee; - text-align: center; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - min-height: 40px; - line-height: 40px; -} -.show-grid [class*="span"]:hover { - background-color: #ddd; -} -.show-grid .show-grid { - margin-top: 0; - margin-bottom: 0; -} -.show-grid .show-grid [class*="span"] { - margin-top: 5px; -} -.show-grid [class*="span"] [class*="span"] { - background-color: #ccc; -} -.show-grid [class*="span"] [class*="span"] [class*="span"] { - background-color: #999; -} - - - -/* Mini layout previews --------------------------------------------------- */ -.mini-layout { - border: 1px solid #ddd; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-box-shadow: 0 1px 2px rgba(0,0,0,.075); - -moz-box-shadow: 0 1px 2px rgba(0,0,0,.075); - box-shadow: 0 1px 2px rgba(0,0,0,.075); -} -.mini-layout, -.mini-layout .mini-layout-body, -.mini-layout.fluid .mini-layout-sidebar { - height: 300px; -} -.mini-layout { - margin-bottom: 20px; - padding: 9px; -} -.mini-layout div { - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} -.mini-layout .mini-layout-body { - background-color: #dceaf4; - margin: 0 auto; - width: 70%; -} -.mini-layout.fluid .mini-layout-sidebar, -.mini-layout.fluid .mini-layout-header, -.mini-layout.fluid .mini-layout-body { - float: left; -} -.mini-layout.fluid .mini-layout-sidebar { - background-color: #bbd8e9; - width: 20%; -} -.mini-layout.fluid .mini-layout-body { - width: 77.5%; - margin-left: 2.5%; -} - - - -/* Download page --------------------------------------------------- */ - -.download .page-header { - margin-top: 36px; -} -.page-header .toggle-all { - margin-top: 5px; -} - -/* Space out h3s when following a section */ -.download h3 { - margin-bottom: 5px; -} -.download-builder input + h3, -.download-builder .checkbox + h3 { - margin-top: 9px; -} - -/* Fields for variables */ -.download-builder input[type=text] { - margin-bottom: 9px; - font-family: Menlo, Monaco, "Courier New", monospace; - font-size: 12px; - color: #d14; -} -.download-builder input[type=text]:focus { - background-color: #fff; -} - -/* Custom, larger checkbox labels */ -.download .checkbox { - padding: 6px 10px 6px 25px; - font-size: 13px; - line-height: 18px; - color: #555; - background-color: #f9f9f9; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - cursor: pointer; -} -.download .checkbox:hover { - color: #333; - background-color: #f5f5f5; -} -.download .checkbox small { - font-size: 12px; - color: #777; -} - -/* Variables section */ -#variables label { - margin-bottom: 0; -} - -/* Giant download button */ -.download-btn { - margin: 36px 0 108px; -} -#download p, -#download h4 { - max-width: 50%; - margin: 0 auto; - color: #999; - text-align: center; -} -#download h4 { - margin-bottom: 0; -} -#download p { - margin-bottom: 18px; -} -.download-btn .btn { - display: block; - width: auto; - padding: 19px 24px; - margin-bottom: 27px; - font-size: 30px; - line-height: 1; - text-align: center; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} - - - -/* Misc --------------------------------------------------- */ - -/* Make tables spaced out a bit more */ -h2 + table, -h3 + table, -h4 + table, -h2 + .row { - margin-top: 5px; -} - -/* Example sites showcase */ -.example-sites { - xmargin-left: 20px; -} -.example-sites img { - max-width: 100%; - margin: 0 auto; -} - -.scrollspy-example { - height: 200px; - overflow: auto; - position: relative; -} - - -/* Fake the :focus state to demo it */ -.focused { - border-color: rgba(82,168,236,.8); - -webkit-box-shadow: inset 0 1px 3px rgba(0,0,0,.1), 0 0 8px rgba(82,168,236,.6); - -moz-box-shadow: inset 0 1px 3px rgba(0,0,0,.1), 0 0 8px rgba(82,168,236,.6); - box-shadow: inset 0 1px 3px rgba(0,0,0,.1), 0 0 8px rgba(82,168,236,.6); - outline: 0; -} - -/* For input sizes, make them display block */ -.docs-input-sizes select, -.docs-input-sizes input[type=text] { - display: block; - margin-bottom: 9px; -} - -/* Icons -------------------------- */ -.the-icons { - margin-left: 0; - list-style: none; -} -.the-icons li { - float: left; - width: 25%; - line-height: 25px; -} -.the-icons i:hover { - background-color: rgba(255,0,0,.25); -} - -/* Example page -------------------------- */ -.bootstrap-examples h4 { - margin: 10px 0 5px; -} -.bootstrap-examples p { - font-size: 13px; - line-height: 18px; -} -.bootstrap-examples .thumbnail { - margin-bottom: 9px; - background-color: #fff; -} - - - -/* Bootstrap code examples --------------------------------------------------- */ - -/* Base class */ -.bs-docs-example { - position: relative; - margin: 15px 0; - padding: 39px 19px 14px; - *padding-top: 19px; - background-color: #fff; - border: 1px solid #ddd; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -/* Echo out a label for the example */ -.bs-docs-example:after { - content: "Example"; - position: absolute; - top: -1px; - left: -1px; - padding: 3px 7px; - font-size: 12px; - font-weight: bold; - background-color: #f5f5f5; - border: 1px solid #ddd; - color: #9da0a4; - -webkit-border-radius: 4px 0 4px 0; - -moz-border-radius: 4px 0 4px 0; - border-radius: 4px 0 4px 0; -} - -/* Remove spacing between an example and it's code */ -.bs-docs-example + .prettyprint { - margin-top: -20px; - padding-top: 15px; -} - -/* Tweak examples -------------------------- */ -.bs-docs-example > p:last-child { - margin-bottom: 0; -} -.bs-docs-example .table, -.bs-docs-example .progress, -.bs-docs-example .well, -.bs-docs-example .alert, -.bs-docs-example .hero-unit, -.bs-docs-example .pagination, -.bs-docs-example .navbar, -.bs-docs-example > .nav, -.bs-docs-example blockquote { - margin-bottom: 5px; -} -.bs-docs-example .pagination { - margin-top: 0; -} -.bs-navbar-top-example, -.bs-navbar-bottom-example { - z-index: 1; - padding: 0; - height: 90px; - overflow: hidden; /* cut the drop shadows off */ -} -.bs-navbar-top-example .navbar-fixed-top, -.bs-navbar-bottom-example .navbar-fixed-bottom { - margin-left: 0; - margin-right: 0; -} -.bs-navbar-top-example { - -webkit-border-radius: 0 0 4px 4px; - -moz-border-radius: 0 0 4px 4px; - border-radius: 0 0 4px 4px; -} -.bs-navbar-top-example:after { - top: auto; - bottom: -1px; - -webkit-border-radius: 0 4px 0 4px; - -moz-border-radius: 0 4px 0 4px; - border-radius: 0 4px 0 4px; -} -.bs-navbar-bottom-example { - -webkit-border-radius: 4px 4px 0 0; - -moz-border-radius: 4px 4px 0 0; - border-radius: 4px 4px 0 0; -} -.bs-navbar-bottom-example .navbar { - margin-bottom: 0; -} -form.bs-docs-example { - padding-bottom: 19px; -} - -/* Images */ -.bs-docs-example-images img { - margin: 10px; - display: inline-block; -} - -/* Tooltips */ -.bs-docs-tooltip-examples { - text-align: center; - margin: 0 0 10px; - list-style: none; -} -.bs-docs-tooltip-examples li { - display: inline; - padding: 0 10px; -} - -/* Popovers */ -.bs-docs-example-popover { - padding-bottom: 24px; - background-color: #f9f9f9; -} -.bs-docs-example-popover .popover { - position: relative; - display: block; - float: left; - width: 260px; - margin: 20px; -} - -/* Dropdowns */ -.bs-docs-example-submenus { - min-height: 180px; -} -.bs-docs-example-submenus > .pull-left + .pull-left { - margin-left: 20px; -} -.bs-docs-example-submenus .dropup > .dropdown-menu, -.bs-docs-example-submenus .dropdown > .dropdown-menu { - display: block; - position: static; - margin-bottom: 5px; - *width: 180px; -} - - - -/* Responsive docs --------------------------------------------------- */ - -/* Utility classes table -------------------------- */ -.responsive-utilities th small { - display: block; - font-weight: normal; - color: #999; -} -.responsive-utilities tbody th { - font-weight: normal; -} -.responsive-utilities td { - text-align: center; -} -.responsive-utilities td.is-visible { - color: #468847; - background-color: #dff0d8 !important; -} -.responsive-utilities td.is-hidden { - color: #ccc; - background-color: #f9f9f9 !important; -} - -/* Responsive tests -------------------------- */ -.responsive-utilities-test { - margin-top: 5px; - margin-left: 0; - list-style: none; - overflow: hidden; /* clear floats */ -} -.responsive-utilities-test li { - position: relative; - float: left; - width: 25%; - height: 43px; - font-size: 14px; - font-weight: bold; - line-height: 43px; - color: #999; - text-align: center; - border: 1px solid #ddd; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.responsive-utilities-test li + li { - margin-left: 10px; -} -.responsive-utilities-test span { - position: absolute; - top: -1px; - left: -1px; - right: -1px; - bottom: -1px; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.responsive-utilities-test span { - color: #468847; - background-color: #dff0d8; - border: 1px solid #d6e9c6; -} - - - -/* Sidenav for Docs --------------------------------------------------- */ - -.bs-docs-sidenav { - width: 228px; - margin: 30px 0 0; - padding: 0; - background-color: #fff; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-box-shadow: 0 1px 4px rgba(0,0,0,.065); - -moz-box-shadow: 0 1px 4px rgba(0,0,0,.065); - box-shadow: 0 1px 4px rgba(0,0,0,.065); -} -.bs-docs-sidenav > li > a { - display: block; - width: 190px \9; - margin: 0 0 -1px; - padding: 8px 14px; - border: 1px solid #e5e5e5; -} -.bs-docs-sidenav > li:first-child > a { - -webkit-border-radius: 6px 6px 0 0; - -moz-border-radius: 6px 6px 0 0; - border-radius: 6px 6px 0 0; -} -.bs-docs-sidenav > li:last-child > a { - -webkit-border-radius: 0 0 6px 6px; - -moz-border-radius: 0 0 6px 6px; - border-radius: 0 0 6px 6px; -} -.bs-docs-sidenav > .active > a { - position: relative; - z-index: 2; - padding: 9px 15px; - border: 0; - text-shadow: 0 1px 0 rgba(0,0,0,.15); - -webkit-box-shadow: inset 1px 0 0 rgba(0,0,0,.1), inset -1px 0 0 rgba(0,0,0,.1); - -moz-box-shadow: inset 1px 0 0 rgba(0,0,0,.1), inset -1px 0 0 rgba(0,0,0,.1); - box-shadow: inset 1px 0 0 rgba(0,0,0,.1), inset -1px 0 0 rgba(0,0,0,.1); -} -/* Chevrons */ -.bs-docs-sidenav .icon-chevron-right { - float: right; - margin-top: 2px; - margin-right: -6px; - opacity: .25; -} -.bs-docs-sidenav > li > a:hover { - background-color: #f5f5f5; -} -.bs-docs-sidenav a:hover .icon-chevron-right { - opacity: .5; -} -.bs-docs-sidenav .active .icon-chevron-right, -.bs-docs-sidenav .active a:hover .icon-chevron-right { - background-image: url(../img/glyphicons-halflings-white.png); - opacity: 1; -} -.bs-docs-sidenav.affix { - top: 40px; -} -.bs-docs-sidenav.affix-bottom { - position: absolute; - top: auto; - bottom: 270px; -} - - - - -/* Responsive --------------------------------------------------- */ - -/* Desktop large -------------------------- */ -@media (min-width: 1200px) { - .bs-docs-container { - max-width: 970px; - } - .bs-docs-sidenav { - width: 258px; - } - .bs-docs-sidenav > li > a { - width: 230px \9; /* Override the previous IE8-9 hack */ - } -} - -/* Desktop -------------------------- */ -@media (max-width: 980px) { - /* Unfloat brand */ - body > .navbar-fixed-top .brand { - float: left; - margin-left: 0; - padding-left: 10px; - padding-right: 10px; - } - - /* Inline-block quick links for more spacing */ - .quick-links li { - display: inline-block; - margin: 5px; - } - - /* When affixed, space properly */ - .bs-docs-sidenav { - top: 0; - width: 218px; - margin-top: 30px; - margin-right: 0; - } -} - -/* Tablet to desktop -------------------------- */ -@media (min-width: 768px) and (max-width: 979px) { - /* Remove any padding from the body */ - body { - padding-top: 0; - } - /* Widen masthead and social buttons to fill body padding */ - .jumbotron { - margin-top: -20px; /* Offset bottom margin on .navbar */ - } - /* Adjust sidenav width */ - .bs-docs-sidenav { - width: 166px; - margin-top: 20px; - } - .bs-docs-sidenav.affix { - top: 0; - } -} - -/* Tablet -------------------------- */ -@media (max-width: 767px) { - /* Remove any padding from the body */ - body { - padding-top: 0; - } - - /* Widen masthead and social buttons to fill body padding */ - .jumbotron { - padding: 40px 20px; - margin-top: -20px; /* Offset bottom margin on .navbar */ - margin-right: -20px; - margin-left: -20px; - } - .masthead h1 { - font-size: 90px; - } - .masthead p, - .masthead .btn { - font-size: 24px; - } - .marketing .span4 { - margin-bottom: 40px; - } - .bs-docs-social { - margin: 0 -20px; - } - - /* Space out the show-grid examples */ - .show-grid [class*="span"] { - margin-bottom: 5px; - } - - /* Sidenav */ - .bs-docs-sidenav { - width: auto; - margin-bottom: 20px; - } - .bs-docs-sidenav.affix { - position: static; - width: auto; - top: 0; - } - - /* Unfloat the back to top link in footer */ - .footer { - margin-left: -20px; - margin-right: -20px; - padding-left: 20px; - padding-right: 20px; - } - .footer p { - margin-bottom: 9px; - } -} - -/* Landscape phones -------------------------- */ -@media (max-width: 480px) { - /* Remove padding above jumbotron */ - body { - padding-top: 0; - } - - /* Change up some type stuff */ - h2 small { - display: block; - } - - /* Downsize the jumbotrons */ - .jumbotron h1 { - font-size: 45px; - } - .jumbotron p, - .jumbotron .btn { - font-size: 18px; - } - .jumbotron .btn { - display: block; - margin: 0 auto; - } - - /* center align subhead text like the masthead */ - .subhead h1, - .subhead p { - text-align: center; - } - - /* Marketing on home */ - .marketing h1 { - font-size: 30px; - } - .marketing-byline { - font-size: 18px; - } - - /* center example sites */ - .example-sites { - margin-left: 0; - } - .example-sites > li { - float: none; - display: block; - max-width: 280px; - margin: 0 auto 18px; - text-align: center; - } - .example-sites .thumbnail > img { - max-width: 270px; - } - - /* Do our best to make tables work in narrow viewports */ - table code { - white-space: normal; - word-wrap: break-word; - word-break: break-all; - } - - /* Examples: dropdowns */ - .bs-docs-example-submenus > .pull-left { - float: none; - clear: both; - } - .bs-docs-example-submenus > .pull-left, - .bs-docs-example-submenus > .pull-left + .pull-left { - margin-left: 0; - } - .bs-docs-example-submenus p { - margin-bottom: 0; - } - .bs-docs-example-submenus .dropup > .dropdown-menu, - .bs-docs-example-submenus .dropdown > .dropdown-menu { - margin-bottom: 10px; - float: none; - max-width: 180px; - } - - /* Examples: modal */ - .modal-example .modal { - position: relative; - top: auto; - right: auto; - bottom: auto; - left: auto; - } - - /* Tighten up footer */ - .footer { - padding-top: 20px; - padding-bottom: 20px; - } -} diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/ico/apple-touch-icon-114-precomposed.png b/src/main/webapp/bower_components/bootstrap/docs/assets/ico/apple-touch-icon-114-precomposed.png deleted file mode 100644 index 790a64f758bfa2c40f11d0341e7d0e3b3dbae937..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11392 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 diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/ico/apple-touch-icon-144-precomposed.png b/src/main/webapp/bower_components/bootstrap/docs/assets/ico/apple-touch-icon-144-precomposed.png deleted file mode 100644 index 6d0e463fd36dfd8c6d22807e236eeff243ef6198..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16780 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 KM{WD){~G{xw<Tc! diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/ico/apple-touch-icon-57-precomposed.png b/src/main/webapp/bower_components/bootstrap/docs/assets/ico/apple-touch-icon-57-precomposed.png deleted file mode 100644 index 4936cca83cfe51cc0a7b5b0da1174734eb2180b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4026 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 diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/ico/apple-touch-icon-72-precomposed.png b/src/main/webapp/bower_components/bootstrap/docs/assets/ico/apple-touch-icon-72-precomposed.png deleted file mode 100644 index b1165bdbddb1e9bdb533db12dff28c4ad8654e1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5681 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 diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/ico/favicon.ico b/src/main/webapp/bower_components/bootstrap/docs/assets/ico/favicon.ico deleted file mode 100644 index cb8dbdfc429d78e4c7203fb8c08e203960d31259..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1150 zcma)+-A__+7{`yBIf_*Bg+z=rLQqLdfgnHu1&_S>M%v3}wRKS!l}XLDYLRWVbzRq~ z)tabnT~ur9!p)0TYwN<LUG?JDnDs||`#p~whK`GV?EKF7o%7-QeZJ2#B&kSzG#W|l z_0ol6NzzJ^WD%D*5+|GI;wDMr+4i;k`b{`kTc7DDR>QWV6h}(RVOLe6LsgBVY8{-r z>)<Riz^yUDsWHJ@*^JKWRt&X<elNdWisiGm5)Il_70f!atfO=vvz|TX9P81x!KbsM z-`cyO=n_l1j-6T%Ygg-0i0#_j4!_QU&Kd{0YF+F(pH)1&%J#!q-T+1SSXB!=+QabH zbRZx&VtWjJ<g>P2HAr2#hC=J}hfheJyUc8Nofq8(AA<Egu!(xfGwIsZwMdO$XZ-KR zAEci=!`$?95KHUZ$|`(%H|r7`Iv{UhsouNell<=5%2&==sh1DMMxKf7ZU~~MLC*C^ zsW+A7e|`Unsfk;dO5R3#`bG9P*Weev1A>>0QS_PmxxY%z)Zf(A8;aDH`}&V{jCw|d zW{BCKF^tf`822bY=c$RCS*=yh$}j3o&!qY6(f!BlnRLUALy*NqbCusC@=S}eqMWJT zh1mr@TYUPGJ<Fy6L@dV<X&PnLRbk<*++wcoCGYUNg|-Ki4_P;CP9WNJ0<o6UxtUaQ zJ|7>${LCDCo}Zl;+KV9Fi-}9jlCEqXMxW4*S;ye1vVwGJo_#uJ&a={A%9*mFdV3oO zSXZ`;Ko<J(LuWB)4Q6Pb^JkKJM6*GxY>JDT2RG{#9C;2mpJMime?0U4)w{%STO<?E md*Bm!DY`TpN{`4h)f;I($(~7<*pEwJqN$?o{|Nv8o!Eas>I5AC diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/ico/favicon.png b/src/main/webapp/bower_components/bootstrap/docs/assets/ico/favicon.png deleted file mode 100644 index 073c13c0f6e90ce5cb374da4dd3da707b7195dc9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2711 zcmbVOdpJ~iA0Hu<NQhJ#V?<(R&M+5Kljh<wa*HvNR>sU326HhpGDu;EByG8FSt^Xe zyU}WElUt&Th%mWrOGT?vY!|o6dPimV{bQf~<2}zg=lA=4&-e5B-k;|j_4agGwZdct z1Oiz_bEWzySLouSxm@`c$Hl!@F6$&tdnCRBjwFUD0wE-}AOwWcc+61H2V}Biqgui3 z5Qu6Rm%c}`$HSe#67UerMID5cCsd*#knN6AA(IsWN}wTND3?!!P1ZKTpj<W)=8y3} zc?c<B7}qsU1p3B#(phm4EC)8saR+p}l%OQwff6QE%8TTS2~r~LGcQ58Ulb!@(9bH8 z2qNr@Q+qtTp%j4#gklhOwk#9?K(SZ^V2{CK0UIb91)z~A<&Cuk><Jhw0gZ!xy<kdf zA~uKMLv{XYOL-!~!Xy$Q0f~%>i9y8JAq1jOB;erSu*iW%+bT6|#j$(|Q)<f>n=dg? zK`~3j6-u}QK6H_h86t?55MfGBzl6XOdU*Ur%ol%6lrm*VDN~395GW*%w;0!FZL!1$ z{M(Ix)E3iYg&@)g6bqt7EM+}7=1X8@?*84-qN36pf|rP^EDAG{DquzPK)!@VCBl?n z5Ns}+;7r9i0|3q*g+rsTcmN=i06U6<9S(&j;jm5sX^G>XuoxVf?0~|dlpqWMIHB<X z8H-2RJ77o@Jef+xE@5eWv4qKIflGF|O1odMSm%Gm5-1{&DG`Y10zu?b2Y81GBm!}m zKnSJyVxd+ZOcs~FDA=-CpfB-KK@s-=$aWS9c+k%oCUF130~CN)_Rrsu<574!XEMnS z<Aig<P|-NpS1kMg$r@7W405qO{-<4*M9Lmq-2T=4%EMpd1M-zKBT^2Bbmij%5Xkad zG%ATM9nA3$Ok?;N1Vv2FcLs;2=a-njG@v<~aX2`@O|#?`M}B^4^=#IAIwQo{yX%-d z>3gd(jiY55u%;vKE3SVC#$dQpJ{f7}N|2tnXV2Ehj9=|s=*%c8Jls*x78F`_rD5vg zl|CH^D#`O&&ByO7031##SxGp^`jG<ppz4CtnUlxIWs78~x>L2*PS53IIr{Z8@TApZ zb$gAL{u~;CqGA8yOy#$J6*?-TyxNb`2{+@2g_L9GhZ{~;)<VYy;KNPX4)WILNt2m^ zu=DAgbr5M;oQfOS88JEvh5Lxs>>ac`O*?$&P6p|=`474qfeWT+{=>R*F(KaTQxwEV z^4kI3@_{zDlbgBMQsa)jbO_m8n`PV_WHH@=35TP%z!fbIbjXQ@TjFftE!0CU3&vUv z*t@Qie*_I<u8ys${veu8t^fUmh*2u)zS9)@hM}9Ir7(B4xF=mhsS7Sb%V?F3dI39% zjR#S5rb&?9vpl=eDZI&==jl_?kM!>EN~tk>^PN3ywd#Prj>iT6(f+4uyNQAk%^K<x zAv+Ovp?FTabvDW-Cy5F73;4ZkaxQ&YvA(Q-Yr|XPdoo&X_YLnKTLMkDxp-SrcCugK z*mdhFIx-`(hmY%4ppx6ziD^cUvV=LdK?nOhP*L4#m-iMem-X6NF&k(9NHl)(Vu(c{ zxB6@_JvV1@3@&dvS=v>Ty>@IF#_NuJ<WzO%5Z8TpF4AaU!fQVvaK}sIu#6};3^~&H zO1(6?doDx2Y0D9}^y{axNW4*%)PUB9?jA=4D|1(FdMBvU!SWJRIQMJG=#s3tY-sb2 zx4F$DN6ibONYD^7#V5b>40PIq5W&YN`Q$Gjh+YKnrNOC#1EX;V+bvj+C$6+HT_(q$ z61TNXCFbtxf+a+%>0{szR*XRv@-B%&kMqfOq0csOf1j46{Ma9(TgREVO16fd4)CAW z1W4#~t-aQppU{TYv~TKJM&f#1Lb%Ms^7aQ>kF2y|^<&9CM>9<7M&`aLIeCvaV0I-r zx5w^CN>4Sd?}mkMa0ufaJL^t>k4=C@>)7f3OpQpC5gf~&xarW$J~UtCRY>a!*I17z zcX<-c!5>+!KwD<qCmZ)ZF1U<8vH5YeOJ3eG%MGVcZ+xV}`}0$?U5($}JcDyA9_`KH z-LAkUH)mFJl0=EWJ#kWNa<dL^ShHQ5cC*X4?i$#0m_u^hGJI)z9X{bzjy!m@!d1pG zmx5EW4eK}R8|dVOkB#5+$Ez?@PTw+$Z-04OYn$Vc&b#kBG(4kp{MN8*daY}GQ}gwc z{Be3{_>DP&e$FOlPS$;|`bej?bffwGlJQl-8Pzs+f$!TI|FbE%XRG*NvK8I)+}N}2 zZo60P?ZF`2%Oc^UXI=K||1>`<nK_iy)mNT&Y4W#ul$5iYv18hs*YY;HjX4<@PwJzC zv01rmBcD+b)Rau^<El<-rP^XcMJj8yDEp+PK_KS<@bqqHqi**2nE~E|662<U;%Lg- z%vq=5HzC;;h<x=r2vD|9gU*+HVs$W(bko-bK>UZhvWsAftXnJ_G*(3SmY*~*Tdj6# zyW0-DK(pGWiqxAPIexd<>ybu;>3)p+M1R)^ddQ$Nfq0g_k6NQ!3ccjko}To31;#v9 zVq)qr^-%qC(L(1Tso<k&L@=h^FMRJ0p|3Z(nuNDL8|}Gr1DJ<z@UvzuOd8`IAXW80 ze^ZcNZiq;2gzmn;!j>84+Nch_eHd67^eXBUqjiYVcw?e)vbpt772C1)vPVI?yIjj! zTHYK_Ic;dCo(nIvR3P%6TWwM=*QHgg%d1>|E;T3Kts&h1c=NW1%x|w6(rbAW=cD#r z+wpx~&Ci{K8!h~x9}~mc!gm#|waU$`C;u8Vs4}o2jWJbhf63{m%e<YB`*(S4X1G+S zd+rHs;hJ+IREssa?uGB;^T!9Bu3z<21Q@l?pTAt3TAgz>Zq=qs<6P?Cw(=A2JGBbd z(UYt#%<sRe_PzHk-0@bGK}A?W_nAutp3`gh#Q54ToD*D|*!H5qvc!hOk>zRrS!NYw z0v+dw>j5rqnYQ82`Y#dJnGr|qSi3VxGpo!VB;=p*A7@u4Y-Qzz)Z<$8FdHwrKGiHW zf$_=pv6V&Ew#58zL;rJmeM0VuO}h9(>!^J&O@%WXl&6${vWp`flpl^V%u1qty7CSE z<0sN*(yrDJe<_`5nF)-|1K2IUsDvJLN$x3IBQdK&_x6-r+zU41wDoLaH~v~jZ!UbT x--WHDp|v`?KUOW2|2fo;6AITi&iW^+K;GXTmrBMbRTqC1X-=NhN^)@We*qTYd-(tW diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/img/bootstrap-docs-readme.png b/src/main/webapp/bower_components/bootstrap/docs/assets/img/bootstrap-docs-readme.png deleted file mode 100644 index 36603bd3b44e65f713884bfb74741e554c71e238..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30612 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 diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/img/bootstrap-mdo-sfmoma-01.jpg b/src/main/webapp/bower_components/bootstrap/docs/assets/img/bootstrap-mdo-sfmoma-01.jpg deleted file mode 100644 index 2d398982b04d8706f44141bed3295f2bfc05c56e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 125346 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�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 diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/img/bootstrap-mdo-sfmoma-02.jpg b/src/main/webapp/bower_components/bootstrap/docs/assets/img/bootstrap-mdo-sfmoma-02.jpg deleted file mode 100644 index 7a89371a458712815feaf39847e8e5d57de64be1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 81284 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 Pn6T3q{XdU2|C|56DiR>{ diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/img/bootstrap-mdo-sfmoma-03.jpg b/src/main/webapp/bower_components/bootstrap/docs/assets/img/bootstrap-mdo-sfmoma-03.jpg deleted file mode 100644 index 3638f156463c9406b2351eeacafe48b0286df3cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49063 zcmafaWmH>H)9wi_rNxUDDH6O$utIT3a1TL>OOO^QP+W^^uoicR;uMGC?ozC!xO<U8 zd+GbV-(Bnex|6k%bCR4{Gka#we&#v*{9X9_10aOSL*)Sw2mnA2FW~PIAOoQNUqOF3 zLdSS`N5{a#_$QcHnEw$hENpBXY-}uCTs%Bn+(-Yf{8Iu#M@PrRz{JJE!X?1R#V2_3 z_(7gL`OhE!`|;?1&i>zP|L@t~uK*Da=mOme9Yh465rNQ&K!1CHXAgE_po9L|`(FV8 z|BS=N!NSG+y9nU?&o8$Lc&cX5Vqpv%Xh9d_jf1uKlDH%Kgy;1XRCvGn(|4=R*PFh^ zX3XlnG`z(>KHwD2bnsIsA^c4U2<%8*mtj!ScueT+aWoU*TTBRHq`3u3AXlk~_%|Kp zPFo8aRAljtrlZD$XZ|(k(b(cqOGNRn`SP1jac6%41`3potqFmh3}Ue-UsEv`FX3`w ziqJ(}#Tge8ZRY8unW%Lh)o0~~gM_{k_aT>A5fE9-+j<Ox@7?nFY>F|L&hA?Iv{4pZ z%l2rg+sSC5%NS@Uh69Nantz(tT{M-I8G6IBu~Hb7W4zL9-rqPL<aQ=xY~IzhR4vjR zvYo3jGZA@>j{g*BM@IR&uQ(h_sBzuwA{8OPTw#5-U<sHw4xDXq|E`KYh!Dr01|aa7 zjzWnlj0>nGST;c_-Lp=sB7d_5Y)jv*4N$*InQ|O;&+$>^^56<>ySqvn_I;0l5daWg zNKS4Q8>zG$lf}JLUl?vaT51?We9?&VIe}K0H)}$7uglVfgw{3+{)9TNSI)&6Ye1xb zyI`$OFf?#!abDrJT)^1wo8!pqs0+W$zFb7=N5Y4ZuO!06MnlP~&7<RC@S??GUh$SA z(?xx}@-7Z-3!NCLZXWOMVs77M6%SpHaQ;?ofGtmUK6Sn~+860}v{T{T<E6NJ<!;SC z=$YmJHW$DwsjvYAtDuZ1Ii`a9H&raj)r?XyBC**$h88noUdV&-IDcv~QSsi%kA7;& z#u9@P$f3a(ck^Akzn)rZZjP3Gu78@}XI9;KpV;mtagv!TR}4&~q9f?dm<Xll3t0D^ zn+UuJnVBpHeo`emldXBg4o0F#CnyGN*4qOwbY@z!A`)yDv4_u7a19oWTtc^2!q@9V zoRf)LKkZXQc91&ZcG9Cu5-6+05KA#IqF`!s`Id|`nru(~`)Y(r#JJ;6;iYeqWoJGP zed&<7tei5|`>Ik`S+Lf$9di6TCL%AltuggPMD$Cs&Mw>NY0DUjD$oWb04W701hO$n zW2wz0Xc@*mrbk`jlvU-iw9T$6pvy<`DW;=8F9<pI{j4;yf8*v0<+98ElCa<z>qTCA zaV^1bhUZkHy(B^BZOZ@wJ|bpj<|JWKq$mcZ+leT&IE<9Gsh=XOHAva1^9t{$A3M$V zv<hD{$|ao|VDDWUzcEs)Iom;U(e?fYZ-hn+u2+AK5PZ?3bf#s9N{vGT5CKSBVmvM* zio~~;5!6NgrRjV;U*z%pB(hqdSw(GA?1+R2R)8RUWgR!-i@$%|Vr*^%t#v`Rr%koG zAM;KL(d?L;*gLhcwQC{YZOo8J0xT>IXb2c46Dr{{ZY~k_<XwWtnA+^ew%C<f23wbU za%@mYuQ`Wqk#uQl;S<d56A4u>9}gc(J4;WpkeO72xbqtF`f5QzoOPy-&7(vN|I{EY zLaB-X!XGHb?1FnUAndKnMs2P~jOew|?7}QP?&YO133gcD&t1JTCA#qWL}R<Dz47wl z(Y+=&_X1-H{as(!sKFzmz6HdbJk9HK38`EJ$OcJ(TT+D<fk7I_=UdI7s^XN4Xw50N z=ZnG4Yj&$}Hj15tmp@|<;f{t~oUXbcV5ekHT&_$^Tsa!tixJyjZB?~K7IEWw<1k66 zl>WSR`RI&WP!a~9+0*9-K$#M=$|+E)-pOKmOzW%;%D&j;SM_jB;S7(k9<$R6r<pR{ z{s)KoXGm@T1aq$m{1yzYqzW3{<%W;wL#t&M5T8h(DcgR0*z{;NxH$j@1CzQeq1InO zuR7(a%B#e!GX5|QvlH6tx>EV6WAU|Wc)HcAO2KHvMXTHAj3Fxcar18>%p!)xXWvp; zlA|~8+5+`yl*3EGU-{lXWedehobV?AVO0l{qM%Iq_lA9$H%23#sEe=cm({+09pXkd z2`L{>7e<V^KiIp9>g>O#HGi2#%jx&c7<HZ+SUIvlF-kRxKPqAe78H~pSX@ZePG=pk zi6cZ3NEL&q@feuGpwQbd;ZrIx8{@o=x(b+{AIF6*if5yQZ=UeP^qJe}7RYD7>yv9U zMnjV5%6tkoFCko^HFpiEp=!=^#@&hb;qiUc#CBOd-bfmMse)jvkmSA@O$^ciP2UOw zrd9U@@VBJuxe&bfBd@1gE#FV4M4VsWx$%AQOhjtOYT9{(Ilwxg?EyE@P^Iq<1YTvu z?~jCr7p2N$1bNHD$cOvx<Z(g4EdFRV%4QEq3dQZvjZmW-+Uri_?J{oT)HUd^nGgGN zt^7(f<Y7!_cIP7%ukrc8wz1XXJi*iOzkpMN>$8S|8&!r8eHbr|N)#VqVtT??6=r}$ z-SlBTg`)-F1Q*;Ja=DNEvhp%`^r8z9L;d|%8{VOsTT8$B>4lBXXWeuno7dEqBgMXT zu3<TOPR7$tHhx6MkSxM2E?z7?mKO?yjE*`#Bw+x?!-D#W63T><!}Zhi98R}~oebm# zg4s2@j(n?f@JV7?iehu5qv7l`A+Oxe`Kcy+Ecb&;ZImTGFSmC1neIB$k9?DqUHC>3 zL$5Ev=Y929N+5V9bp{}c)5K*$rCjWfkuz~wI7wls>*NLQ9EIhfYyCV)ES~J2Dlu+@ ze;T=lGQ62s9l6?-8UN!ocQA_X=j7r?YE^+1BEPUO_Z8j#+<j~g6^MkE6a&-`b`nWF zy}zqG%Z(5=iNUd*=)5dkE5aw)dp{&#tC^=t!QLriPQ!UmuzdDT{9?@OT;y&%ftFy< z+vroxOzwxAK;hKj<;(Lh;#3?QjH!v#o_HL>Fk;^T4q)MD1de$~8|;~1gU<^1W0u08 zX8&}Nd_JL0cxx<n{w+t<o<eQI@3iq})+Bp7OS_re>zuv$lcdn<u%EUTw{%-oOaKa? z50XS;(m%x9Pl|NJsh3n;h6a+|@6nM>3FBovc#~2Dix!1&bZNF3%Pjr{WNINCX}`A@ zxZO|InT}s~e2I<W7Ys6>G2yN5!MB>q;#=4t#6g<@q>7nPm}tRS*`-qPGNkIgq=elu zTYfdyrEwT{dKm?(|8(jVD1fkC<PfcI5|%DVZi;#>jJTJUXdnY3kqi|vFXkGAQN(*s zQVyB3{Skx&TvCK#803lh_n2DdrXk?x5#YSokFDPqTe*Z0M&VtWMe+rBuD0vo<BBZJ zR*eRz!@EMSk8kaDJvru2vYu}qd>}#e)mQfgS<d-!AU5z73AiLNKn(O!QcQn=2}>4* zM{i|lG(L<V+&z7aduD^5nx2vtPnO7k;B-{*-Q2H^MrJ5gyH%#2#8Laaj{gy(F`{Zf z5$(?>SlFP3edbZ=qAp2KBB{vuFNKKz1lsa}vtzIzH7-_>;(8aMPY^FMg8H>`V3{u| z70eEC*3HaVbk+QKRNibc>Q^@Ujjtj`zG>7)A?==<nI-h!p=@2$xfn_W0RK;wASOwe z+Jp*A?;|4FseAlU7ojg+kt7JF*TH#ebn+oQ40UH3@*kx&<G0$#hLWa!-Ans=oU>Sc zjjjmCsu2ufy%~=?WTKCI0HTs`TM#25-s=Zta*udl43~Hicdy@a%q%pI;4Z)}s;|HJ zd@hO+ULcY?t900fX+U}%+Jj!d6#2|+B2O{XSM!33?!)z;uhO^x8UbdGzAY{W3h%)( zas>>H5^ul9k$4g%URjj-*))a}x0GtC=JpP_!h`%xdgu#@KY&XA<+5$;mzxKWoPg?( z>VV?O>r2BpNl6TJ1R|*_4#yvraPb5tyk7;?3OW(ovh=H3&7#w<z$<Xu$Tz|DC%)n2 z)}Hs0DctGoqTI`fc!ji4Ze7bMx5Kc1IJ!QB4q&880`$OBVk8@ckmVkI!a^OF)9Kac zMx^5Y{g+<zH9LJKcKK{VQ&sO@PIm=c9LEHk@~sYGZl81M_yj@_787&4xq=~8Pw(9O zSRddygdSbXL4+j{A*J~zV26*Knr45v;b3e>Tw&o3lY(L{r9KCPkQ-&!E|kJ98Va>f zeIY+keg)||Thg$!1|ab)kaDDL+QySiCrNUDe}KHYAz$hN<tyD{7Y@k9l5}YzlBLME zZ=*jHkRbX4Cs20rnY}9vISxwX{FSvcCg${Q%N|&FS@Ryy1axyVJ6U^>{te|ux-<?z zY^P2@t94WbH{_-xiS9G!t;<cjcnSk=_>F&NbF|g8R=daO(TT3G>oUV>f^wA__WyJo z;V^B<ji&f%p;YBY`v&!ghm{c&4}p~1A*OkTB+w!xnI`-}kg`&t4EDO>UPLRARBXZJ zY81>7zI9XRm3e>ojarWuFxLtMiH!NAd5)*0A!W#*zh#It$@v7m9BciCcsSzYSZZF( z^!1@@{V~`(+W;g5>gs{6$$L6jhM@zT<Ds7NlwWVrQJ$YcnN!|hq$pZ})hqiT^gnQ2 zwyO=&AqD$9TtRe)w~-{8!izKaCDp!e9>d2lK}Z130tIOnFNEqXE=x#0pklVVq5~`N z_T{U8ZxYCGnLyLsb-OMy(MC4mk*c%TMe1N9nfUXjsJ7VSCb`JToWs0P^|W`|9B?_h z<<{z4j;j#_sGdjjV&BbAF?TZd1ZkQ9LT`SN!Rm|6c4s4S80hqP<IKe9q>d&rJtump zsi<a1(zlh&=A*Xh_>mrXCJ~kVMLtJ@IEz6A^>JI?v`w@$DyDX_Qqj17ftMZ^B1`~o zF-!K`LCj(aqK(FlyZnU=&Tl%@g`0m2OFxZ+ojMXUHOTbqMf&dwu5mU=NZd^Kul3@u zeSy1NueYMaOE8o{ycOo?T9!BWqjFt9kfw@MiO{@z0b*hzCoB)+h3t3}nIWP1BL@Op z0jB&~voRi7<V*5rXMmkqNK{)#aLFSZR?#_`R3|s%fdoV<RbL-YLXd}(NC^h;P^74n zZy69&b+&8OZ@V$D4-Y^9RgjDl4ENRS-Lv?avv2W(z{J3MMa;Jh{>UPH8Kvm*SctiO zJ4;C60|KpM5PIYsX*`3krKO|}jY`?sE7PqoR3$D~m;T=P7C=mq;47-gO?$LG|9tc< zX)POPaZZlFUJvGA@1PhY&9bVHYNNXKfda%QD8Rr<e8%S@lNzK6&{JSfl#e22_txLS z2Y!V4e5nN4yyc>233x23{6=K`(9n~>#+;Irw_A;5d9FH6b^_#@9t+XT7>f?Cz>TjD zV?7Oh2HDJ^2c#fa_3jEy6_3c+OkSMKfADDtVC-j<0!8BF4}CkQDjPMkDaq%uqoh&q zN5sf9S83Bn)nV-GKeMSYJ&dC0)DVzQ%^2|3jgS(+@P}r<aFhQQf`gpv{9&gX=F{jO zm%iOJ1}`_~3wSk-I`ws-jOsW4#2HW?1O8DGy&}%@p@IZmQnfmM>!Y<7d}fZN3KH;P zIje`ElODij$;PlN6<Q{g(iLOP=<mY&?TQ|mep8q-h+I+X@VO%r7&PzoIN)ZF5u%e0 zR^^JJx;&#COTB>aP|ek6mr-&fW1J`Y>PyO1%n?~5-c&S%Di|!msfjW<w^lf7pRt5S ze%f`u`YFd0o7~|)FFFql(Uzo@kSHg6WARf*<Vk<P({{T2L@h2<Q5&;2q61!>s|M^X zMA}6XWZ<3fx%y~iLi!&+Z2CX|2n2XriYn~FN_!PXf9%amxau2xy_P`#xe?b;`Mj-k zI=WE5{t`j4?1K;hYZNI^?usvcQ=2(f*3oScm_xH3bcs@PkukU7w23YWxVt)E7A7P{ z+Jf?N`bG|}(`ey#9)AIG>89JVA7c5jYHV@S6{{Z+_INsL98-C*1;)v*K2Uub_xflK zcJ#B34d9I?P;rfl6%2=&Q+=hNTIiOV=nx|b#LRveQY@iGcL7kGj2`ATZ_>&ION*wh z9b-t0T}`!4E*{+5P`hM04^hDBLnS=!<54xWdt0}z9L+26$~#s7%8QKQLq~^GfF>ng z;@ZlE0fZnHe*O!r8l5ujo|^-R>jg58qKld_0`J*zDQ{A)Ji=I&J&9er1d&7~d|=i2 zDXC5HtY6n0F)<fxZ{d;LQ%tb{AWiJ39w*;?rHKQWW&j-C<X55cWQZiERX<$)4n=l3 zYDyYjIRm;zPu8bKCD7>ehpq=v083(<>^Jv0H!u2fp9F@_`BMbc#%&q!6F!gf@1&UM z>rlU&Q^g^iNRU*KDwmLQz?v=4jX@`Xb|~(4Q!|E8WCu}qT<Hqd$SVutCUMM_Au?cz zHs<$rPTIQ>_2xEqXf~?V?w=f$Wz3N(W_F0q`MvQ^0fT@)&I8;JZ`;f=M@|*Rc9|8& z=FOOefU_eWTAmD@8mDRui!Re8-8x9AP7xv+&$p6&wZ+AJzlwzyQXtyfZq>p|5Dj!b z<R<U!(iSlj(+r7}nTj-IvHd5-zWI)Nk9qa_jt|8HN-LX-VQ<UYbvnu4zFBrb&V{rg z>usm=UW;RjZ|~TCohz({VC<8N6y6o^`U^m!6y@iy-z59z6GC5*`=dp>u8u@deK~Mt zr#N_jv<KnnrnXF$(rOu{`0CO+E3fx3(f8&GbfYL?<GY3qHl20|f86PXt>N0ZJ}m#a zYWlvH19zpEgd~apRxUNg?tMQ3?;Ti5h8CKkL>5Uh$`zjPK$pD`!5e6CR@G2plk-^@ zPlrvf#bDWCk8F`@Vj=*mCw(P8F>D>6Se$x@#pqo&@;#C{06?=Ps?BvTP_$j&?N*?J zc04eCln-RzKY8d*{#QW%7{C9JeQ1Oa->sqfXJe+wiy{DkH3h0E7i@SCNeYaB0XKhr zZGa5v=npbc6V>IdcCoU4Vu}YSMdC3A73)jZ43n~#?f~RlnjTZ*LXX?F%2M#fzU!Fv zM&P6fBqnPt0@{rN>f9eD0Cw~d{vX@Zv%`g#o9D=r+lwSNvtddYPWB;yPYNb&*a7g- zJVxH0ogVL>yX{U7Z_aLBzGKFf>`erC-~eZiWVuV9bIajQ4k`M``_ti2KfSCD$IREv z-+2m3lhr|qRoRax06Z}NaI!8r<lq1bvB%wZIc+*Q-aEfKoDM}@ZXV7?NM;Wtt7F>$ zcz7Z=N@&A8pWBF031jCctzUj!di?f;jE}!GZz$DPPqYBg>j1RgYWVrNW|yT`bGUti z-YfU4ai^Hf&k}Ex#A@dRmGFq8{2#^#z<YGI$uv`wY;+I6A+aw*GdwOXPIp)Mrm2{d zHAoc!^kM)FRp>O%&t9!7-Zp4Y)t^RlGuG;PwcQplE(zcQ|C9*-!skynXG7H|xn0FK z5uBZ$Hf2<|ZB2;ml7nH40B{I^Vt5oO5;85~az9T^3#q?J$;wik0L)PSpg7JdT1hnL zZOAS<v306)o?^m|CwwmM%MW$`$DYiI%;@xR%pHKY4?6#aVpuqypOS3vs=9))x=XeS z6cLHZ82`_L$6^P=jV8)0E+0QBJ}sKDI+AnwnFBmrpRCTwhmVh5jP;%vy1RoL?!rrK zC8f7t`|iW$;Dds3*{W=EOB28q6a$8e8({P_eH`THm&<w$uOJ&ng`1$0kz+m#6q@k_ zO_Mg1wIN6(*;<6fC5dC#tv8J$g_#g=nW+L}eky(lGYy|oqV+PCbJUjNrvW;d>9KmN zbdM4MJwxAAF?#?_eUBCAIm?^6N3zy@lwBBCx7SCDm11++07aDsJE<Zwvz%MhX#g?r z^c*%HKR<31oAuOjze8kyY8)W4OR7Zr2o*1DJS|phf@0d=MgK(kDR`Tir(<f<VQQ7; zpctUYPGrXLhcW)@2Zx)<X0!n=GMod>sLvf!W=34CA`f;vxbgu@LlJItCL<`tbm4}c zO2P;AkpAr>%Ae*?DK-p%#ufEVQX?Ntv1@a%VFWARHV2wS4HESk938r9k?vYQ)9nO! z)k`#cBe|tDz?MYxQEgrrJvA))!u5x{WkOb*b4Txg0H6pZc6LlY;sVB6LMSe4a{)h! zDS`D_=8BGW-Pe`n)2|OoOxWS@nhhB7*G&{7vGopNQ)f6oiE%T;W$LWqQ20RyiW4ZY zj8h_o4TA$&cv@xnh-HU6be_sL+3(Wu0YGnJGG>Id5+*G2)1xqRaq(ix_(!#szaq-G z-R#%m04y+(Nlh<GyC%$VAfD6wX=5ciPB^WodO_;g8yTH$df<_!zGV^_8<V~|ez1ko zIBVWiK%gaLUUP^vb@W^5e>6z<eqcsvvojkGG7qhz&#t0lS?)eeW5)`J@p}LmAk;L# zKn+UjT6`+>2(2y0e#z1dXf~<#)|Z}l0$7$rmdWg0AMt?^*`|#rZUOv|0vMi%d67mz zv&Rnrol#whefSZsqQ)njpK@8UxLkPnoSP}eA0Y3}0f0mlwSd+uk1>O`&7wsCZ`_dt z!1^LG4PRI0lOzFX2CinjWS49*yK<Cs&CvH|03?0B#hNE&Fmvt?$fgF8MqsBTCofeX zYH`zg*{t8F1DplvHP2@-+gLL-z{Fjt0A}#H6I1Za>@O=;Fz)p91c1puz<4WZBw|$n z1hC|Q8KmE?;qq0x9>iw~q#e&o0(jfOMD3U0Ri@x<=HLWLjBMeX;J$Y?-z`+JRWs@U zfLmmkUi6X_Ii_KW24_@{AhM@v&0QDN@nTWU@Ry4K(ofZ;b{6t<`p|NRnH6*Op_cHJ ztVCA6Z=YRfnQ^icNhti2N#^B}-mPOM;S=)buxo<ly>odnI}{1wHU2ETXvE(jdze(M z#LH6}91wE#L?H7eE<c%XA{w|RfOl-*L!h3Tq`uPoufrDggv<bE70H0C3C|>Pyj)_` zIynxZ_QeHSwDZsdA^>GDgGjMaIAeN3yRgJ6d}85FdQ8s>Ikxx1`TV)~Nn>Fp(p%x) zP1Ph|AF-u0Fb0R%dAtcecbhtUWUsou1v`l}n+a%pTm2*RtvWMIcH&F7NF?y|vk9AC zn08_$nk~CJP#eli!pk!iR%$JFyVvEEUK^MA=(c&FRNpWnP@9}`Az2-8+C)OrV+%;F zX*N7<&DL?oWCJ)>K=uV2#07y!++s~lP4M>i+{YAQo=N_6OX6{Lt@IEVoPn2~CR}V| zIB;?-SJ@hWY>8KOL)N@Lp9XPwO4;?paX(?Hw^sy|Xm98Pz}S?3A}8<mta71qdl)RB zLl$03L~KRO;FHajWEch{l4zJ(0!mqs=1<BN7d@PhGa|y1WydrJpBClg=?KqMfxu%^ z0eHC9$@|Jy)*L&dfnD?E1!hduFQP(=vhiU~a9ml9jDln`Hn5t&YN3^tULElA=xZ&D z44=HlXCq8~*iR6cIfa%uJ70s{BehmUd3afp_LsgsN{VTS<a0J&jv<mbfRn_cO5ZHF zb{qmvcyVEYlkiRH>7!sP#qhlaGE0tVNgVAOn|#a<%;~(YVJIG(aJ1hbco?H{&1*O~ zH(fRxqqspkmlR`tX#d40Bb26rj~!-@Vs+xc{sLB>dTn|QXALUcvZ@MKiQQ>a-HPY` zha}MdA&EmWPU0TU5>Bj|WJ!Er-n$rr|J2Z*oVh7SbC@$<5io>Pq2QnlMUV;AAzQ^y zZQG)<ZGUd$R|Avs*&vV!AsYk0Yynh3W?t(#in)%8{(7y~51?%&CJz&b6PXPI{uTfq z$UdMw$agjUZl%fkS>}!BD|x7TaW=U&z6I3Lo;jI}T=4<&$P!%C`rK1*cTabx@VxfO z{0nekWCP@+k*4t=GER6C;oN1ZbrzVbiT+Kc>)v;xv(26J)9u|0Ww#S2ILHL8Jk`IG z9geG>tn#J;NEczRgv9MOsu}LLdyCVET_5hH-+G7uAaIqwNuebgh+IQx0bbM9ofKcb zKr5=Ipl5V`e*6B0_T?&Kvo9F{X~tVdf;c6aF`9R)7&NxG@tU4`wf$B(e&&1EI`zwB zixU9I;WZD{0Z3FiHtT%)ir0?u*uBw1)I8MKn>^2Z>O*jjMM1KrzH<^AKxAo`zw*If z_=HQ*&S1Z?(ucRd=#`y|L1%I{t|Vs_h9*79=NCd{?{KQrD3LOV-9<fdGp4en-BEBA zoJ0}x13#1v<oPBLTduhzm#|$K!WmNE-g?j_$NYx4fVdzru?kc^#Hgv?wzN$yWT!h^ zEG2T2%4bkf%UOn}<$)RkKqi<>8k{Qc%7n?OrxtbQ*eOrzEE)|4!MUho;sSgSS74`p z$pf-7B3?el{O0(fSbKilCcdzdUI|9<LoSgSU`G3@Z?c-C{}aE0eKMciu1i318X*bJ z-N!XmB2Ez?$D}9RwN-Y;s^F^AF5^i_{wbe21tZmP9kqldl9ORZk`EAhf{Vl?r)H50 zIWF&Su80wH*{}xn=APneC5#+P9K!{}i>YA&W08Pnt~xf&({o3r`WiMlb|HTdduOo$ zb7HtPtlBEtLvptIU7coLR!X5JVg-eo`j8<4R|lEE)st|i0!zGSu`1XX*}HxH1lKZX ziM8vhH5<o<IjbcxlL4$9tk84<L}WpksnB@e#8_S_GkF2lDLK3<8)Q;#+MHNoa~@Ep zrMaXcW7zs(#u_?{Hk2(CZdL#T@HvZ1CeSs9X~-Xx&psIUb&olwn7NEIr`-guBj;b@ zXg||TJXA9oql90OB!G+@4wP{!ul<I$JhdPcToatzn;2LSDT+}C-X0;ZBSS82Zy0i) zo2gE~Y9dYBO>)?~9smZ_SYao5C}(Fg-Xy}Kife0`*gZ~PR~-^K%tpW*m>V&cV8UrY z>mB!0i5<~sY#3y?!pC&XXh3e0Xvb^v0O@o_0}P1l1!Df-;UkAi`<XzQUmi3hM}k#0 z$=SeY$$$|~9rkMqE&;hpO+vErM=b+jeM{;ta&=8IFekgCI=u9I907TV6A0ZPz0c^} zBu6un!3>p*){9S;1Fo7)8NvEc9reu={ryZ3_i0iYo}4a{j1)65k&T)eW1-zdfU8dy zN7MzB;=vBqWX~a2=j1HKwTwn32|N*|;>hrqt@Yf%h`A{yEzz9uuNmUhp2376H7sTy zouWf=P3Y&g=_x(=O~Lvab{zPeH4EA^XnhG9vdvmW3G^j+AL7m3wm&{<8MI8SDM&Vm zH#I9~*D&i%vM)#@n(qOU*w_iCDKJMonQ)O{s*z$gFqw<y5^8jaJg6uNj-kn!y0~pv zgU@#ivP|R@3Wisef#!3WP|^<M$bb%d0LIi(X1NA}x5>fevy;kuBk;)|XFy6}P~orj zCY9ci<UleHRH_qGNCPStu3|;5uNlC7YaGe`=!DyovsSDiu-E^&*C<PZKip1Bvw$-Z ztCmw8Gg)Z1pcFMm^lp`ZOwJ!4%{Yl&-=zmwsqqKqNRz--C6#5a0!{pb)cwL}oj`Lb zM(a%^Xo9^HZCM4zxPZ^&#j>?8DE7@ii4(0iQpg7M-m0^BR}$^(=uZu^PWa22*;!c+ zLRd0BX++utX5dW^Xrd;W9M6yqj2THA=~(ZQdRktEYl*93qp6;hsV*r>3P+3l0E1~) zi7p!C)@}vEVbYPV5PUXEnXDIq{V?(epi-_Po7)L{H;I_bRTIDfsI0vtIoW9}7)*9` z@FLlt!qL9QJx;}+G~En@bCQPCml4V4*N!omyeq?u2u$q)S5<Mon=rD81xuNfPYOBI zlY#gLiNAIi1DrMW{s8{tRLq6UcQ|E5d>W3)rP|osZp6I`8Ya2mHy<@Q^}&tV+!e6` zRS*YrK&JsYiJ3CWnLJo5iiuGIn}0!0hEMPg9ifoPRj0EK;<9zn)HHNr98RUhOe9W% zcq9W=<i`0mOR5mAu^{7jC9o;vl10uiE`BOWX)rtc&^%vum6BP%iBg-@89qMMxqm^K z1IFtY;gYUNq;mRJg*W7w$#BelGY*8RsU^eLxVmPp?C?HA|C*O*Ta~)KDTcEEK0Xf& zHMeJ`PP`qLSX$SN(OMNGfURE)uS$-rbk2rXVeaZTN4lmDp&6cG)FTMg#Wo0;U(!G2 zfZ7>Gasr@f#lppLQ8ZnVay$drRJWLHGBb%0vj)2U40jVVng&>OMrWoe5L`<$2;*wd zX`rc+!V9V<hih0S6ba)4H5${B6)Z58_<qJ-@+GqD^RQ&YNyr>f)j(GH79frkwMkAy z4XHpYDXYz**|=tv&twU4y`C%Y!L?J9x9RoGh9cg`ctA4z9uR>ZApk;017YGk{<ohA z9rNENs0VI=2osBtn1Ppso>5A})TtVq^!W=ueo1Lf=YaT}E+(@;RBjC!vy7IxivUDD z=<DPOi>$Uq-r6boy97bG+U}|UZbJe|fIQYZjII?BbCsX_Q*SCifA@WPn#%UbvH9Jt z@|?z^i<Vp-`OcBRm92PxhG~B&{njzMz#r;n7me#VFZUopewNM9S!k^^Ys>O%*eq3Q zsOWABf5y$2ivafkZvsmAQ)A$c%AfBZ;yVXtMAi3n0)GL5JMZV8mo_Xam|eZ+S67U% zU6uswr@i!tbPRgbZ5nN70<*=J^4$YcomOb4{Iyp_#ea+@9#3>R@eeA9+_7IR^`)g3 zHbSYa39~32u0ms9JT*v&cp>bdeUd_!GDD^RB=JdOL;%X?8&&KtiiJP19~Epnc;Z%! zUW-q#@9n&)EcTz~dF9xv$Gyv1mKwI`=2c7kdn^*Vp-Ib{<i+mp4sUb#F`6{ifE(qa zK75MX3T=vbsl(~1t1-3GLgpYCeaZ1QIV69pg48WZiTo2)0{GHiYkDbMQ_7t{iOc5V z><N1+R&}W2akJF%wqIEXLF~>=@G;IshQaT$-#W7sdU|@tc^;M){YOqqNrtO8C8LGb zY98e!_i0bcb!NZ%U)i*oe%zw0>HS{9yNVQw$?utgF=M5b;#`*6aF3=dk%r8x(M}ZB z`e*h~7MF-IRxMoAX}?>hji@AO9s1-?mRKFm$Itf7%hpr}@uzq8@^Q@R<fgg#?JHBL z!{lA6!e_zd`4L!$Z+pGZeVh@Px8EFh2dD3kVElB6jn}R8a;8|nS0W<cnrq@)=F(7e zcBi@NT1EkhbGrJb`t`uQ>BnQf-tWcL=YIjt(^K4H#_XseEt^=zLaQxA@qyVdPV+GZ z!`>HfNz=3h$%I0530>>J71?D}kU~P5Y83NeRCZW2ml$8M&0pZ1`oe0=oqMaVq@YCJ z7Rfk4f5hhNfzRm-=@@A7r&5%u9+VhdO9C;EOn$3Y>3n;WaN%yR1r1jeThu-A{e2-_ zau9C#JAy_K&+7D*yQsBSTK23U-0~sA?k8ssUpc&d9$C_OUE;*4o7ev{33axs#(Goa z7;};ze|O{+JL>4|c|4`9HQV_HQ~M-S7xwFt44U)_Dr?a6b82Mn&sgDf<7uET2hKrp zcOJP&=#jU4L(CB^cX;2QpSrZ+Yu9yXWd!9hHIIe*T<gw6S`eP@^{y{JPMEII7RB2+ zZF1C)CM=nGG*m(;=cdQ_X}91K_v!slIBDM?k=U9`C8ngzzXa8~FDSiOk?D_Jp+7^V z`<?`c#;~=cr66r*3Qy)J?ulm~-O-kos+7H3V;kEK`Wb(?0xqRK4j;A*WsT2h|DR!N zWqo&i6w!WPF(sPdZ?hWxsjVb$SuiQg(ibz-_QkB*!Qqk`)Ry4p`;RA{J$!!w@{*Pp z*Jj;}KjW@!+m3$3I+v7`RwlSrlqA;}vyS}y3%LIBB99<IaLDQF+vN5jitYBRhLUI3 zF8MUI8!f8SUVrK~59QToPPw=q&g-sLAL7(mrm&!)Kt6%oVY@h;I$M{NHlm4JM-Pp~ z&ruBp#tHT=X+#m3mgv+<9xQz-GIQ*ji1EnCBMpr&unek5fcKxJiXS6we~v0V-Un~M zpFI-*)%4^NNgf5SUt}Q*-JO1M8h(fR&J<p=TL`iqvPaJ`$O&c_q1K+BBv`Z&z&DE$ z4Gu^TRo$WcXF>$Nl41{2UiBnh_{inES-Y9K-nh?!GJ)mw(5Kr2;l?zwiP7XLs&YPx z?(`)^!>zhFT2nh=g7z6RUL@C#=wuZesYp4SG7b*w8U|rTa;eS1hdbc#neS>1F?5E1 zfu)c?qubLo3S+xV8aiIpX~IKxH1|?k(>T2=72i&Y97sO3X#1jzYqVCnMZf%0pIS5W z7pN6(ETi}f6wfR#@PoW`i6<Cn@oC(ho_`X%XI(7GT5dSyR9PjyFSQOV&{Ngk>g7{? zx4q2Tf(XA=R~}atdg7&hIGJj7%O~s=ekSArJXEyQxRdYuG|NMquX)8cQ<t;20)^Tg zIp^n7Z>radNbPU)e~;fM89_2t;zL#+=MAJfG-^l>-Tx@UaKv#jL~O+&w)W_wO@c;r z<u*Y>2m;(?EDk9vz1UUsAIjKs>)RUA3w;%>EhB1OR#u1V*Twf5tvxHt>okS?Tq-rz z#M{fE_mXL8ID#&^Pla5NeVZ+YnMcQm+Gp-BT{xxYrxf~FXkoH$xp^~M#&wC6>VsX+ zlk^Cv7W>ZB=<gH;R(dzkAF7e<ACk|*-@EGPRyNOHzks(lF2x7k&1!oNp#**z5gLpU zI=6dmwVS1reC_0II&*)T-)q|P33swQ^eRrGPiUpw#Xl#N>Z56KQJj*Rdfy;Mp83bM zx9%T{BHzH+O0#-;_oBDJM>~DDT>JXY4hfLuGieD56{$w}TP_ZQ;##cwNVT`FMJ>(0 zwTa)7nIFINep#3Sla2r*!6LRrX~oIhE06Sut@Cuich&<dwF6lF7v5i4HqO)M&(LCi zlL)06+dX-!gN{fFKa^z^TCEFPtV^1`DiCI^?4|hbXsScOG}e0kGN|ND-89VgN!9O| zK%tK*5pQ5%c9nN0w=E-5i#mKhMoQeHHOQiUHQ)}$TMlNJsxfz`CnJzcC1-dQCpw+6 zLhAf2qTotzt}@*%uZ^9n3{0I9V|KVvmU2$_+-;nmnr`wOPmSWY{gmL<R=eF+b91|0 z&POYd8N~<kr^?8(J!+N5eJOS><GFp&j^g-a!^k_U_E`L{-6xAwsl{eqUAMA1<G`-) zd-PB3m#iWG^sK%XqN;F9oX)D${;eJK7r>J*!jOI|OIVkTYW^qAahzeje*x)D)u-xL zHq$y1b^9U$tUm%hY0X=ETGi@}w?ARZRHkxAZyZl0D>#2CZxb9GY}%v08=}M2tg|T% zhxiL8iOo^#D9>X)eH)kDrTBZRnbmh3*V0Z%tgxSQP>;30o%ZGo>*k*BMZTC&e68YA zyMK_bNb(HacUR>@h#90}X18Iw&r>19Bc#$bY<|uR^0@4Cv5$^Sy=}`VO|;F-<OsP^ zcgv<cMt3=0gQDm2mOqLIIC-fzX?1KX`P-SA+U=Y4YPf5p(r;Dq6{CyAvALM@E5p^a zkXT2{<0RqrO>@d-dDMe<&&i%VaW&$1cZOW)zGb>o5jmA04v;JtUQNoJJRRq#Gxutu z(u%21DZ0-TyHvlMp_UF&A!mE-{E0cxyK&UT!X>@mb2P`Y`<-(wEloYs@6I#+|75=D zOM`Sb!-HdgPA$sr6Pw`rbDO61FVp-VI5W$9tu_13%82@8e!Q7@asFqQa_;m_?`8#E z^SNfc1(QLcwnobp;f&HzRGqKIhI?a`(*{P-KFyx&AAyrh!CWF)R*bceBG_!~yKASl zkfO;&pDt)rr<k@{;#nrnO%e-_?lJlE$Zz?+?1<(jo+2%VEv)Wk&P<;2eWSor)rG-3 zJshtu?{ysa@jVzz9sUCRs@`fng?nJ?@)!4HZLH#67i^Z>GvRYJcYm_2#Vw3fHL}+o zPLHMBq^&~q%>DvKBkpZM1LJW|9@cZBMNgO4kjXKAz#o2ukW(pw29eLq#NhA8;!)g7 zZD)nTlA(K6K61*Ri!-%6tm9V3b~)sP+4RiA>Z(h3{hXvF|D5SQL4or=T76o4q3S_# zl)v#u_TnUyBoJK0im@pc0?vQ`l+%{08C6;6pqdzROYkEY%Z`yG#nfJ@uBPikZZ4K0 zH<_01r_74}$>Z_x$3I+z91A}D1>}D#yyE^X-FKGcn(`Nzc^iWmc;K!QZCj?>Umgvr zH0aLXTgm!i|Dtw#aDy~7l(pPFi{?8`7f@QdYs2<k$3VEK$ZEbN>XwVf`Xi@1JMz>= z6lt=@DX_=;x)~-Brtox@s>w06H#fpL$xR^ASVZG5&=~A1l&GOM?h1EM5)wvVmG-0Z zboOKrW3^)I64Bi&ESAuCG$%*8iGutE^7uZp+I_a_3X^K4E534cycQwKRq`Qu<7O{u zobfI2Ye!zo{CJc^v;4SRn@0;h-ONm0a&<@iV0hZ}$Gr4o>4WSgOXbk1!r(0Te?H9K z1V4c8U-Mr@?^{;Ix`68P?A$KOJk}|WOdbM!)eimbQMzYxVLx>i+7#^Ph6~q9Dbh-X zmj?R&0=epDH4LPej0aBSF$AwAj`zc`Q-v2_*$!;C+e_Y4#6k~gEk(q|#YMze86()b z%n-#}+mm!*4C%S)bt4wAm1@Ehk449lEi!?N+2`<*5RuR&6Zdh5`-OWEy=(dN9*Mc} zaA=VZ+r|vPo1{dkjl$iJyBLkaV^y<QkAu=BOB#jgyx1SA=jvzZjUCbdfb^m2+l`k$ zQgIh}d?KF>?d-nWISCc?Y&fy3ILQk;;}0LZe*Es;rq^cDQL_HyL{#g_7;6+NNT-%m z>w2b)!F;*KEPU?tY@Da<*9|M<=hmJK8#9{E5<q%pW@dUiNxU5CkLnl#%I)|pzL1k5 z(tFeHM12dL*KaIBly!`^lm!7#_zL=L8li-OvpW?&hET|BxRp~CYn+klJ!@P47&GQK z{M*{c+hr1Q#nbNn-tGZz`j*wD*q+)xYOfUCu6`Z(DU7fpz3$D^=>t*l><H*~d{r0W zRI+s%Brm<(i@mT%V5e$@9Z7&vsnPGhHW;ltJ!7f0CW}Khm_;~yCRr>SgsA?A{|gN9 zZvP(c*ov_$+wO_^qCoE?CoX|_pzMM*aDsJ39h3+!3ioWK(9;utrt6upSAIM23w$i9 zpshuBwB_24Ey(B<3UjAw?u<oqx(q=!?r13=mu9+Vx6rqyii!KbeO@B^=5{P*t;1da z7kJt|l=oqZ8@}16VP38qd$xVUu=IWDp_hA+wbn5w?$t@=%b@T<i>kCyKkd1>YrBFc zCygIBB+6Xp<4pGGvaPvLQLb%^!Pqf$`On52{qiQMR>Jj6f8bGIN$#O14Cc2iMe64o zjdNU0vhq>n`CmX_W8-2&LrqRZpRguY`<=t4*Z3C<Jj%*&Rkq<OBl%qvWaerf8Zlay zs<`fJuhbiSUnGcjL?+`AFd8W#ozy)oD7&u-V~n06D$4s&JLNPp_ZwO>yyz~Ia4q67 zm8>kSp!^qrZgD^Dl}}q8dfC~+E!6U3d^1Ml^qHd9^}mi$b?)k!rrt9Xa*oI;lZ)Tw z_fxh!i!&8sY)=OBqDpV~T6ObhbtRzN+V;;d94-*T?cO#J1Ktr0IT6L2$OiUZ+y2At z2#NNS@2QC=-yKrr2ab7CzpNIjnoORku5YTUsw(iu;{?mw7rH<G(4ni~EsZT6V-|6M z$tLWp)zvf9tdG4I-hC%h*1MR$=whPKJo2j2-t{&&_5nV-m;524oFC_<`(b;PY55J3 zmZ@fOa#6<Q^s7hPwq?EjpF53BCZBJog~~c;PmkBf|Fxe4-Erw%=J3N;PoBkuWj0H_ zXM0n-KRED;SxsEdRW=FY{HZAMB-0moOfMWrpgX29qM@qkRGuE`J|sr`ihJ37T-M$1 zS}Ov)-Hy!j*pkqHiEwu7I8&7)-O!Nb;4GF<DR`5o=I0gRFk73btv;?LpnWmXo|~KV zQ<!btF=6!zNnk?_HHxZvW*_|(N#Nc5zMXq#v+_g8Y3FkcK6>w;0x|KM--@kD9Ts3& zS}W6OXcEvk=UPF5-!sX#XhXSr@?#t5Me&QIhcEHRDYqP_O6ZCBz*I_KB4g%-GaSV> z(kh1?CceHPe<E1%!;67kVCCPUWbm+thB|92iXZ-OT-8ovFJlq-G($L5RkkG+f{bfF zG8{tg-fVBYX%n9s<xEg{UYM$93w=JiygnAB(^x?IFb+v^r;bf(up{>O?96vm&(B%& z+Gt=h9?v`sJ*PX)(j%O~xe*LB-=LpK8*?zs%L})`#W|_DHYK}1y)Q{x6)=dRS=)|g zs3rtaE!4k+BAFQ-xgzRoH<@L)cKM=XmT0V_x5wP8kc$zC?n3MdE3c<2tN1TEYFzXN zn`cJcPU_iRmWV}b?cI2%JX6*r4&%#Gm&*uZ-<21=nVWhwYFCT-7f>)kTv81>N;Lng zop;A*2X)_PDO{S^$9vO$yH9`b&zd~P{X>2IMWMoc;krAhco)Z)ey!Vg5)kV!i1V6F zzY-Z|KJs8bcB_FdLZzC@V_ZJwrl)JS+EvdW;0??YM>cf|%BUx2Y6_6^?>{2gmOM06 z<!E|ou5a3Tv@Q*({cxl(V9dbHvw>Xmf@D1`ITEad^zHu!{Wq;#0wF(T@5jNKn1Xby zJr|oiw}k~a+bogQuJO#*pcTBbzK#MT6YJgb9d<n%x#vw(uu6|i)hW}4BZ0kD!3OHZ z6&^97QI{Tnv`&0bv4A~3C>G|ybiV|7m-Nm5Pi1E)mtoN#RJ70l+Ck;_8Exyy@;ALj zzaQB@6kE>RelMwWjma-Gl3$Kc4$C}$UR9LIZzQ-AJ8sijBsA<m3_Sm3yPD={W#1`+ z2AMa7!cnLa8Qi4ZoF2`KI}^BkK6$9{>1FIjdU}LNgh+XHLP4ZnCRD&@6omN>X3mr< zFZ0MT)i#~-5hs<ZS4>}>6RPGpquJnGBS}xURe$~)P@aJ;)nSF{x?ldW$@W(cnSQ(0 z{byLGe{gqn7K=QY9~_^&Ad8-@i6kigbmi8^8-0?wO$~|OcA6>4eW&75_|{eVXoWpf z&=%2Eaa%zZNUe+hESh8Ee*MzxsTIkEau(e=N!G2Y{HN8i3+|zy`;6c-o!a8O``~|_ zuvTM>vTBWmlarX$?QG+RhoJS6YRx=E_6|WodX{w+@$Jc9fSO`v!@V|hjYlqiPxaeO z#@Ih!V|*>cTGWU>yK~8AVe1<iX=!QCYj-OspzoFL(dJ-^nH@R(1&lZ2zdcn+;Eh<U z8ESRY{dOL0Uu3&PBO&B;K$Vc0UHoF?8+NLWz-T79;^WEBFB{0h{sM}g9FG#DEBOQu z@QKSPLbf%$rX>|~Xw=;LNB@w!7@mH3Cs-~jJ{FPDp}W2KKvqO$($s3xb<R@R9$R}p zwK(<u$U0dPxqTn<k2WH0=Tn34|9XH75fAf_U5<Sa=ZZ7+>*f2cLEb-SdYNUc)|7j( zZ{0<3&hjk&leMJki>pcebz2#K(m%htqFIn93R|zQ$nG{-DH3Bdc2yt|7opvXy&zZK zXrM)1j1k_m5@j@0^ki~wKamO=u@<7Ea+!3-G;v+Te(Nz4&~8@Ev&;7`H;Vz~I32yn zRRx(MsEA&ocv3)rCAb~0#1dyG7i3UUK@Cs?dg_huk_DfLcd|6fRoI-%wGG!kjU1f3 z+*4aKixz67*%ldjYEkW-T>L6(lI|aQdGrv!$NM~$hsG;w3cO<)a-^3claJj-2@Tcc z>x1PMuephE?lVZyzf(vE9L%rkTsPbf+!6f+<X#r;6tO=4m>a<}x#lT)KR~^|Iag!O zR83Qq2II*!jejX$M)I~ruAzouyW@xO99i(%0vU<Tivb~uHw7GHP0W5p&s*1Ldo8we zH(<8v1Lj`F!pYQd*67^Z^PhfG`MWy&&Gd6Ulg!H7@~Qk)@%3Z36^lMgus|Yo0raRC zrgqzmHN~s<YT^<EkxGID<cF`HFg@@%RtG)r^+mtmPyPi?3!PXFRx?gl>)qrXlVN)I z3O#<r5(_f_cuJLZ%gdGdR*|6x?4L`TJom-~f^xNoZ*e<`NXV;y`Bi>w&y(ozv8}7Q zy|M%8g&`@sq7sbLFC*6u9ms1f|3<OR{PHh=yJGWD!y?!QdqsvS9mX<qHWv6OpR92( zy?mw?*6>Jy&Ti-ACwg}G9qt}BkvomO#QSpxjRvasW<^Eei5DjVd^n6$oaPE7l5#tV zux4AmYPgE-rm({$OParji+KWHrtK!`mP@eKwQ0<$7BSfeT_7bIbXU`GTujsQpL=dH zw~*?AO}Q?5!;e;3<4Ef==7BEnIHIsiDJl`Fb(5!2cvahm9RBUMtE_qZg|l%L=LWRu ze6{uuR~4St+#c<(l4{7&^oz{86a(DQ8DNtGTocqdTwH8~B=oB5)=2&SV_%;~X{kvq zA+e$TFnlUdBsieIMD>tW_za~L&!Kzv`K!qWtxXYQgtIfai1dnu4;ikHDW;n00Z|~q z9E8iONJ;DKyw1~sLu$CHW&L_QemS!$LYdMM$`g(M(HZe#)m`i1rb&#spHhzykfOHu z>M6w^1M5_pVh4Z&2eIAuXGns)Ioei4#&7tO!)M|`Pntyr_4FjOb#ckJr6|`Ef?eE9 z-KU*>Iy#Fbq9X)Wf4S#amI<7_rl5&?y{z!x25VLDwb6>#*O=R3IZJL0w_RU4Db@*u zgNE>ZHI2;PlNiT7f&1!|_gG~S)+(BQ%^$WaB+Q(fS;c3eEtjW2gtJ)5KoKh|={EZ# z_Rpm5&eTaS1bqxbF<gYEBz8(4y-L83l}<`$z204^RJh1gH7$8s_8`a7T^x<L0yOX0 zGp&9y)T_`*IyM{pS%^k0O<s6-bIV1GUUGwz-r-rbJl0Vh9ZSXX<fLqQK{xlF+5^1x z>PGtCVl&jRYccoGuhlzUd4P|*|D~?dI@4uL2lD0Dn6qK|Uo@>s?9Q=ne5P>wjLx@q z$h6-w{nStLhTh+j)w<CXt?-qW=0(IlO8=gz*H1T6LK43^Ua8<$$)q9oGG0VnxRNHu z?zwIJ@l2n9VWxjE-+N>lacwLawd&^v1$DiLr@$rcs5s{WOt9(kp+-hVuOa6vwvUZu z^x05R@;!E6yXOA_kT(y{Np4@dO`ARJ5H;$l#%+Y+%FXNPX{)TT)5lJ|$H50gAXW$M z$Mf))9$=%>kHyn2-@RREcl4D7sveo9*P&dkpUDb7q~)K_BW$hqnbrFWA|o!}Y|6`r z#QWcUeR1=$`o~W)u5;|8R1cr$y|qa6wXCWN3AZ8SxI8=Tt&cU7;Vwr}D`|H2d~of{ zy@gi1>Oy*^4);?H1MBw@F2AjvZu6owC$-e;BHZ4_hVs|9t*~x{Kinf3^*LF9(gOmK zG1<U6v(duGHQq^6>n`&EyS-30sz|e~#iN%(w(ivm>ToU}7*t@W-5X7Op16ocMb!A< zK1Jp9fIscYe$t-6%I>kLxx;kVDetfn>!$c$K=;~x>t7%C&z+X$bDDk+3#ytju%B%2 zqV}76YxUvX*adm-WB5(`<tZx?q))csnB_9Kj3`~)tL7r~$o>#i(W{sqbM~8P>77<W zLWBk1%u8u<TTcZOT4pU%bs6h%+f8cF3H5~VeR0#juw3Qwa+$woig^_C!tjR1eqyo? zrOTQ~Y%cua8JV=vGir#k#>inzaZB&<z?kE!SF-2%+b^e>?leYSy>D2bB^lQE9%gv_ z=F0jN6YMGM@``UDPvuy_o1Bv;L@x&6A;G5LXu4sTaZRAQbMrwcI%VD+0p1ch@Q43_ zJjRr1p@!-Sp@pR1jIBG}R;*vKStS?RBH5Yv#$QHmB`q1Q_oeca>X}pd&JWnL^=p(R z7Zx24NnS(5imV<8SZC)+m*`Z1^!JHypKG1Re-1nN(z5$P<R|(Fq8)n-E5jecB+1$= zoQJZ_w^#2G*i72$s-Us7e5?-rKSaG{KwDiCHA*R^K#RK<cPQ@AlHd}oIHkqiT^}f} z4X&Yhae}+MySq~?1lQj5z4v}!{^j2}XV2cVX00`|ql9KOtfWJs3pQ9qN-_f-yW$V? z%6-i{cjl$xdpy}^iwADOYO?%ulWg>KXZ(2ZpS(9Zg2UmmjMUhD6RiKviiR&e3bAF* zT_2tp<k)XxWvNeS{_p81%PlK}QC*RNl@F;ef6NjWYMCGvQ+8lsQq`$vQj6A>H`M6j z+U!A_r;YYxr<PFv?-Ls>ejT#cn|Xy9cZh=NnjnRzEtccKPpj-vNW}VuXbw(hu*g^9 zMnv-#k!1sGb36PIMsWFA9wmvNryj$zZiueAX=wW$#XwO%{p#|25?>kE%td3Igo?&k z6>T*S#|)Wkrsh?(=rVlXcLpqcR#8!H%rWskX4RSe;N<u5o=sSew2}lC;?1r+u92@U zU7%~ypb{(D1rMVee0NDB;(r0zjtI!iO~zPtq#dSj?^vtDuGY+Vl+Nc|?ZwNVv`=^- zg_o|saM0eEYNQ)=T5d@OZP*tyVOV}EBn#nF>wXJgB!`0#MVbTO@zGeGosV$C?)iVp z)|Hj{-A9k+)yhOCk&MT_u~#~hlkbT7{#>N}*gtc<z+aw?5hHTBY)LF9*sLbvq+(O` z%pmx1btF`jt2XAU;g;cC#wtF7U0^Z$R?_s+7h3vIJKF<85CcW+iWN)`Ma5c}WF_Ds zwt;O41p%ywH3U)f{|4e$msAw8>K$f5#+Fxk0j@u>r{m-J!*s&(Pdx-G_>f<{?<4$A z{pL(O5P=AKw+W^oKiC{#8lv(O9{KXOiC1dEl^IFzZzm8j_F*o1XEv2r$(@jY_p8W9 zyF9<x#QVGqt1n4OIx&EfQU+e7Q$R$yL+<<q3RyTvmy{?JSFGcL5Ogaui66;&Kctzb zl1l_{Wp%Qop@=4Zq>}`(bJGnj>Ysg6%h{;65Lt$P&I?}<jL!v)`X<_*m;a*yG(49$ zjv#G&2~xvicBxoY7Is;Ns!E=|OfgRmbW`RVjw(L8KD$Z#@}^F%)d*Jiz=r<nSLiKt zmJ*uWNQB5&BkBQ7A!pR&ECNh~Zf-MeJLjK1;Mh;Q{V$;(u#paLj<Fh$c1<ikDJ+M< z16PizEm*h2$6bbeGF>6J<nb!g3Yc0dARQF_&^Mui-+lFqU#|Psv_PV2qTOFe>y((X z)Eh-0#8?9F`^<W7l}dWohIJ9S3G?FIyVf2$f4D=E;l*n9w5|xAC9!jVuWa~6TnRcW z9x7W!tgl8k+r;}{hdnXApVa;}A*0+TlbIOwp+@w;^(nd=^n*h)z^<sgL@BD^lI_5u zte+YV8XUkTju1TU^;c0DeAwFjqR~;L+_A;7#1`3LzIhfQIg0X>)ldF%RPd**Xg@pH zI2u-Uf9<D#&7}UNrl%mS<NL;Llz|vyQ`?6Sr{N6f!(BTfVg3*6y^?3=n;cP7`w$92 zC1pxHvC%I}irvB6NsX?nd;|7u7Q#N+eye&U3KBuHXg6-b?P@mTH&d=t`(ABxkS@df zn~-iMQn<3C{fVEyq`5in{f~M!v(;2zefM_2VE;v#1+xuzRJTObXFtstk+lhyox{cS zUgTE<dz@7O_bfpEiE{Mk_a8BT$_$1rS~?5~Q*NoXd_MKa)q3@HI8ugJF?cPlP=tHX zi%d(aMUnY}*g4r>HBWhia%%&{7q2=e10oqE`11WP66IecP8*N$0r=N2+^ET{ipR0P zNY&2HEQ7gf(s;FTEWi!>+PiOlSDP`<>}aZ!usExpeAEi0Jq!nOu8Ol-m;b6Csn+P9 zUn#sCyu$9I5ZYZHY#*PQum|F3uk#6?+j7@UD?KZP{MU4lle_obFs8Z`f6{k0rt4^< z(!EjytARPN;pgKgT?TM%6D=FPnQLQ+oe#-yT4opdYZLlF@;Bo%{Tjmz6btJ{t*C`{ z{OKoe&U>NJ#RWZAM~Ag+HW^(`EAK6iakr?xpRyJfmNa{4&W-+w*r+?(rufhHbt+?> zzOV`#W>~$Gfk?Jxa-lfqf39)riK`IT-2ixHTQ@iH)G$9xA*bBTK-p1@lRtc@X<Erk zPiolD^V;cJl35ARku=ykT|Lw+tQhqdNhmuk{zg2&wU2hs)c)=#0<0r|YHqA^;OxJ; z$8*Wg!!0kBJ-0tC@O%6`GNxvjbI*>1Yrfs#w=DvLgQf{^zdSv|wA`uLIO8rPKGc0} z!dBVJHx5Q?$?4Nf#-9}8E;78TEsY@51EgnKo)2)`w@TB+ovE9v+Iv%_1)?r8Wqj2^ zB9QFENxw6K*xS1AsbBGfcwM?bF8lI1HKQV3PCwgAT$#>$-4sb?5wjuW$a;^c4>;DP z<#|27P9v9AP`=t-Hywau$X2zulK4G;x`}^q!^EB4#CH4X=Yjbn)kj|0th{d!2h9P) zdx)gLz@7L)y^p=9a2dfOC2mKyU$J8oxMII|sbe?6TVs)XYhTKqw-7Ub)c_Cf6$=|< z<J8Yfyvr6{_B*9g{E0o)`)B8QkN@R3=pUd*Bv0;9)kOrp+b0-k9&u1!vrKZu919w5 zb+{U5zXhJMlCgCG2Bq(u{c2#<Z~r2(28FiZCw>l{0)>w~He0T-JbhSMu4?ZS);7%j z(?9bKOj%f>JZ<#C?Ap%x?)`~uLTx%%?=kB|n#^JsLDgfLM|Nw~2^V^oZqt^Kn*bTs z42Z-guIw+;`$q+y)13nuppom>TCms}d=Q1K))rkPeab`V<aJ_F<es0n_-1$d^3n}i zk!R>btHYn8FNB2rGtIdb9<wUv%aRE{G5>QxA^Q*D<+=^g0swmYSO;PH1elM&))&=$ zmH|B`uZ2|R@rXv1-@av-PK(gLNXI1`I{vEZVLqZ~3`^+g!fJ-s8Kh4Via*b%2J#%v zKO}YVA*$tF7=p$y4$J=Y)Sb094KiG_Y_d9@B3tX7Dtk=k4&LMNr{v(olmcG24P9%9 zSMe~%g&w!A?^+Wf-k)3W&0@bO1zl`5c6jTReT`+D3r3G9#jZJN?)j8aexbuD^lfuM zSC_?>TI$g@jz<5mC+Z-LWlXkPJ=(}%gJO|5F$cXtMdiBt!7Izcnhg8CNHZ+*;3MFz z``ov`NG`!q4GZr5*O%-d@?IxrT{Xr%MW6amw(yq)^0wdnNabzK40sSNIY84lyOh`p zFS8qgsRnp4MOFtIW0}XpcFO|gXMU_JwT&A^`&jisKM~Kko*`%HM~LdyUnHG2$W7v| z=cTX^Q}C_}ff`^OK?0wk@9PSB7d8aj(^+{?vsA~u?OEF5zRcbh)o!X+t7ay*q&1}j z$6)@^^DSDgo$_A8^`4d<L?Bp0BQHM~8b4|ofUpNv_$=T@iq^uS+nuyw5tUyCVufNn zGZzPFtG9ef^(hUTPl(F-&5im?Fa-hPfklLDwV%a;{sd*$R<%kb#A0|ZZ(Wyr_$oN5 zOjLT~Yw<rj7(Pw>R9?s5;L5K4VV8(YtpLul7#z1nR-Pd5-WXDyI-kulRYNPXRzXO% zh$R(3=vg6bE%}g|=K1((?E^ize@|#=)b`(hpMUdf8}kY2^BtFvqdRVX-cmUK@<Xq; zy1zP4ft^1)Z)?#)!1Z8v!lF%g!UY2VdYjR9CP)vDcmFkK4_9N^`#$^J7O{1eeL?u% zrcHls1F6t$NR-nanK=(~e->n=GjLt!af$De=(99VY^JqBmMf9;;ZEqD<Mpk`A7OFy z9m#Mer(9gLB9y%k(gbRwVu({ro$83G%zN%~&4~YT?s5s~#}|LD&@GSC;hzlK1r}Hu zH!>5}y*&NRxffegFLB`~iLm|K6Nefj5fOFqX}JS=y6bjXN+zm!w_mf!4PO6?2<e%# z#hyPLUAaX*mDdGlc6Y=~iD!Hsx5_M~L<^DH0epoyyRQY!oE|3LiPa8VT2Os*;a}#o zX~V;AT$4E!+6gF}&-O%Yjm>a%lqbZ@kIR3~upRoUxqMskmX-YuPtp0PNB$(;*vZM6 z=DaYS$>%|P<WsJ?(`G7c<%-hkO2Uek4~{*><K<}B?_<4GI@}U;{SlM_$q!YG;g!eI zTs4+Hv9i#D$sX2Yv;|$Y+?i_{qGJZR%*ggT#zJ<`!+6X6xH9~8c6H~2J=U2H^?l1t z`O!p(e9Lzo*M=rPJ_}fGBy;dCEFW#3x$vJ4px~m~`f@_A<EL}6StLY!-b)w7sP$)P zoCOyYqqv9~P{5G+g<m^V;^zj*x#N*xE>nZU=pO{4#I_sH3~-(4el#1QjH#aK!EEGs zE1mht35j6Vo0I+>n|S6?B_)~=TZrGiv>{%E3ahN%0r)##TTbxz*|4CyUsfp#0hk+j z`M}fjSA2y|?6METh(|vL3<{XPtM2is$NG!3)#~fB@F0H4P_X74fGP3goy2iCV(nG- zK@`KP2tqOp!MtPWpT!&5gOAVMM_p`IhU(m}u%_)Kl3Z4byHnrR6&=gTMf>epFS#|# zsPRrl&M4ll^Sy-@NXvupZ_R5|@?s0sO;gUBcYWB2s@)!Ew3zL01i@L>xg2H^AF}ak zGF}v2_hxImrx7J{eg)zeftGm7&X{r)$`Pgpc2^elFxsmL{fqRUy2vfl_<Z(^|JCeR zj`ne{O+e;Lt?1G@W%66+t_hlip=v5+F*M#=emrcye^e^VuxfS#w=}jWV!v_yt17>~ z3=fY;Tb5J0BOic4Y6M)kxb!o)+aFBw18N0TZ+_Mu?=BH&a_l9Z!Jh{Qzuh$E$>Lwn ziC_2nKdnIqGt7O7KV0f>2L8qh?92R6I(887(ejQ(-=_#F94H(ywq4CZXFT)aSV}s- zHfcVd!4NMh0Rq|kshLskXa8ZVGe68ZV&khx#fDk&*=<qMcx79=V_Gfi#?f{5cz_<| z)4{vyJicPsfVYUh^5To)l<~(0{JIUVj+;@JM9nVw)ZDNv#8McMb36;Wm6}&qPkk<x zwxl5yeRFSHaxqF4diuLEdT_0(XD$28tn(&GH-(+po;obWSy}VgAJyir<Rq`Z6p+E- zvK_GjEjr_P5}Bw?ipM2^`)3|M0B451&Yr1Zd2MK{HD3GI<!2y}wWEr)k4AcC@BWe% z$H&^BX+0Zx;@oROOwAjbj09}R^Vh99UaTN4?3RwC<%}}~Rg+MK;mgS6$ywr*`q2JP z;`Meu%i1CHO^EKZNX`AkvGO`X%@a>p@fC@93fU<gYN3|DidLak5RhC|VBU9TF4hc0 z9P|^{{@)cu%MirITyo@;9y8BF{UvKe@$Z!)Z4E*;FEdYz&XUZ^E~{&)Bb&9p#v18t ze?{L{Uv%xl<(;JE-;jGk9ubzcm<-q#&t$sr0Oj)ZU;d}#H4>XO{_muE5)egl6-fid zJM=h<sq~$jJ0rd;k3fC}*UVez#_ULEPZhM_{UUzh;xQF#7d3j0DN=mJJ@;TG9?2=o z<}mcMhd=Z<ai1KsUOofll|dCkcYvGNEn%S?@}guR(yj6R{`C}c4%FWM9_m1R0O{n^ zH;CH#XI{%M*)!IEkr3f37S1`eF*`dDukX?R_4a4H<qjV2ZSBMzj@tO{$po<m%Jc7i zs({i<44GS9aSOL!V?hgIkzQ8Cs7Z!Onm_I)Y$Q<DG|j%g0XYusmN{-0MT2j%a|vbi zN8Qx6%HrY`!cwxE$8ayc2m@ljtV-g<Gg2>gS?b^M=dLkXwFF<*oz0(nA&ij-Vz~fj zXfI7*OlEEAZm%jc;`)(^t`&_O*{eoaScn!Ey-SD*Wit~$9WwVhtVc}0wQqt9h!&bt zni9he?p-5EU0gb>)ip%qca_gA#>OV)wYEHdd0iHIJ_(WHhm3X@m4<dkmqzm$8xHL! zDbLcRFB}aw6AkUA!RaK=)C+jL>(jB$u@<%(Z)k=87uPlH7o-d+b;T^j`h~~DRtl%B zyKmHDO!&3&jWrIbm-;;zAM>X4vk;C<P^MebuUewWDXnphM76Uy0@%xg7Vo*x8}ZtW zX$|n0@3}yv#x<4&6B84PMnaII%D;Ch6SAD@o5=SUu88!~<wxBMYyTBXXc`=+mPzzv zpQ$E(S|XmKNj|4}Is8(~dyOErPZItj&HM*f*<c(xIP+X5Ip6uuuNl0OdElHR7s>oj zm}AjjGeu~zQ(9VD7{g1$EF;KK?gNggcP&=2;_tV76UMHK=rTW)U>5HlHVkkhBy&V) zA--r3!j2-xp{OEJ=p1E4mqB5C{xh`7rA1XKqIMFXGJ%XLAn=?e-$!xK%Fk=5PCmx{ zLf1SAml%A2+db4P^{hW!QeB32xb!j`9ZrxweHOLSyChHp7867a<{Y^Cb|-$77dM$N zEARLp_TqINI9hv5wMc<k#*OByFlTLkF`uOJc;6>Xu)8be?2Pz0M}Kht5eoLknOd(< z&m*b<<%u!8)cRc(y=!8*K3(JZnm%gc(}3%&`5^M1^vBEAchw)-l|W-`*a<*avxxPm zWxqZnx!1$5ZV#A?X!F(WK+>;^*Z!CD9tJAC5j&fK0A5Wb&JMuIxYf+bE0jkd`C%_v zZ$hgxTZ)Q5q==(B97r4Kr~*=13@xm6el?d`M3|8HnDp)s+SZr$ommSM-+xO4V=S*k zIAj5X@cU+6F8ymo(7;gB9B=KBmC+Hf=iFL2k^wK$+kf^-_5Wi&{7mK}WVwN*xnHIb z3H^`m8|tYGuV)tHaOy7w1D8w}MHWk`tUKFb@}mg-6oDr+f}9;?UzQ@LTq{l0j^nja zWrWv?1q5b#2t~!vNETOaq`}O$KQcdr1)cqv4V{?|h2^aaBlLi(>7i&)+OH=y_*dGh zu(MPxiWfb1HwTJH204wHsei~dg!`=8`|KE)yXUIFsVA3c5S5S#*#qMqe&bAdp{>yN zo18DoYs09$mBEs^&ip5EB6L1sVav5qihK(vT}e=j_SqQ)hQQHtgSEqGQ6k9C`jYw& zB!5;gtYa_AA;Gf<o<i-reXh&*JcHa5yGAksT4LfxNG7`m5ceXc+>8T+`7`Z#-bi=N zMwz&r?<)cvbG?oo92T~(J*&v9HWwdZa)j2nn(Rs1%M!q2uUPZE;&?xeYJmSi0U&K= zx@eyGcf_&;YTVRQ3^eK~)U=5H`t$A9t%$&9?lSnCkn8tZelOx_-Xw8M4?XEnuZj-A z#UFGij9)l)$uIsHFByc2D6RU0#S!=yp?S_AjyIF}7=X<5TLpfnhi?_D7B~#<GqL@T z!@P2yClxz&y}x+%dB-Y8tL_@!b76+guNKo#ts(ha?NMIsU&_y<7X1?kSq6(3u@2{4 z6$*;@>r~a_RwO3GVwQK#RH|mDa;J*RchMkE1fi44PYrI2wt&H)VVZ(K<GdH$XSsU; zpuDe0iKJBCB_C}Bu!vwg(?wjE;Gf{Ee)d?FQFydPzESY*L&(q1&iX!#J^sLB%Ldu5 zDf>9-kaqMZ%X6ue{-FT5{eKGI{~p8hJHc^T`s$;5p5lPLcu$^U7#!3re#a7!2YM>H zX4LD#JUaK)O^1&7hxVS=)aCz?^%>X|#w=(u7E4!KDeNN%fW^#IWTmc&93gfxV!aTZ zGt4;u|CHc=!+8HUoZ}TP4fnr(8AOu|v<qhnwsrC0<Ns-e!Esd&iEi=diRe}^-u~vU zx<xNY03XuIld|7VV{3dFkxC5~c!G~i%ufvMT4AH^S;V{Bd^Bd`y36!~wn{_Lje2)1 zuACPOjNis?EUuKe#BW>i6en~ZU32p_6Ajbw+=;%)+m9Y$oxXSyLFh7N;&CYPYpWW& zmKTaUcU~_7FYJBB-YO>aV~Y0o9|N#)KCX1G+*29ErI8hnAQTT7G+$hHIjRapyaU>| z3<Jeqp5izJqhn!Z@~tI;)14dCjFMYAS7Qw2P_hl!*=?=Nd|Mh-g*c}CwER7u^F75M zNMH3ThUe4*Lx9w-;#2so;9D{$pi%rrs5Sioo?Z~Q$pWL>U!+2kcDa|==Q`+NHnI{b z=&`G$hsV!=qG3NUTet<vzHB6uSe}r?z~$6)!j~IaS3mTx--nXf1~*hZb?}5#G?)x1 zBQAs>L)(w|V|_7Aj&0~2SD-xsM;LcIT-ZJT$#%YgwU+~$_jPbH_u+-gFW`<~y+Wr+ z1?OUMTde3w>@O1R06iNkWmjdWcB)~>v^L*}%j7X|ppH2c6O)ZHPtBF(FH)$*4PTBC zl;_90M?QucWgkv_<k1{7&WL;J8Yba{7@BVoP2O}SoDi7d26T0@T<n2-CmQ0?xjJ!T z-AHyA66S{?_9A;Ds_XzXZ-tl-c^<q+7{U~&EKEE;j<}`dQsfsqe>MBs$Ngld0vgJu zzqItc2Kyt)(`vAk55nVsc|&45cZtnr{oagbcKGeVm)5!;%QIl+oDZCAC}lshXrwPh zC~MdPOX*O*%s$Y!%|ZD90Y{V)q08>DCk&2#xPtM_Zro5IGv`Y3#-@7v$EA8TCKeh; zKx4(g%|R&8dFL+@BqWf1RSH<&G?+#naiS4ffP(lmBwX9Lr7xdvw+Mo~slJ$60WF#G z$Pkd<mUSd7aKHDP@%ZA}symyUL42uPXu>&)AfGPoFH>BJ2?R^y;hW!IwyI!bY+p*o zvmQSDHEeh0o@07kk1TS41K*_|1q#U4r487OG4D^N{F!sOaAKW)SZo|oWD#Pku!EZi zwTx{x8qhoRG$^O87M_Ahl&zy}Oi^p8Dy!sd-w)*agyWydTto;d+{<kJKHT3l5L-OS zV^7o&o{IEVSX|LKc)hh9yjsb?mVsZmZ(tN;*82$T=Tq3B??=6*#P?;$HBHWr*K?>> zj2;`z2ACil)~6UN_k;jJU!@r+ERFv=Wr&HM6JEv1^+%Q1rcpBLQTvP3t!5gj8^=P0 z{o36rM}9_fk?!+W>Zifwy7g)Q5!uNNY19yKl5eaPt656PqFhLsY3}3*z1|;Bs-xey z48|}eJmterV9ub-nG8L;&*pUq=H#<to#bnsQ#B5+-40%8MeC=8bf-7P1RL)?1L!1l zDO#Na%G$qE=p6G&n9J_^Q7f&qWx6?k^#ZOl<r-?|p4v90sBq=2Wm&>m2X9{DE_p8k zOMt*<{B-*dOZYNuIUMTOv^L)lk}u34HatpYcQ52N9|bm!V(#)-hNgsK_TPov==t^s zufdqv@&)1t0u8c!Pt=Enh`D6FC8ue=DU#3@cOTXQVuSsGd7odnz%MwVGzi}LJL7cH z=ERaUNdqE~(WGgU%tTBSJYS5E$?;YuE@)At5Gu8d++IVnppG}pd`WS7a&pwvAA$2l zOmH6X_Ga$iQ7%kAW2Qsv7!c-RDWV!Rj(5E8FmV+_k|;M7#<vKI=&8Mp>0f%~Zs-8{ zfUp`mwXWAaSXz}`-Hk>$EfYB|Hwr6oe`Uv!`<xgNeaZln-j%ZSm<)$Q{Rb(bz4Uz^ zpf}CJGEL5Jo8rzwlfw&x6pJ6)tyl{HooTb;EPu3$w|L{xz-q!(GA@aql~d?=!(4V< zby{FaF7`~Opnx5QKL-}^`d_UPaKt<-G35}Hp)W~=dd?|KUZEj)$4Z0YykY6m+!~b# z3%$TfxKi;?ok=l>VHt->cULkfC@|P2u)^iGxghU4!yuu4Ka`$%4tgHasE=H-Jw_L| zD!9LFB`!5lkQm_t#2c{Lsco70ekKklz!~T=_o%?X)(b>ujBtJoSShKU40r64^>nA2 zSc`;r+$#$4Uh(h6F6P!(+9fMKMQbL&Xju3rLW6g^I<_#o9TYZll|y@8PZz(S3^6X& zRcC!FR*2UI(5I>b0Lj%%{u@EFqukUt0v@IuPCD$PgHR%1sdV6}o|mYAl)GaqGTG-~ zU)2}Im9of35g8+JM`qLkbf<=#bF7kNGb46X_?|j)GruhTi8@p`^NGL?GA>5ic%>zQ zlb3uisViHk^%rSS&F92L<0SR!E9ryD-fDIpZ$*#}O<|>Jz{Fn1*0w7+-&kgcN?Ka& z!~taa)ire6)7U>EWF9Tmz5|fhWCR!<Q(f8Cs(j--AE8DC=E??s$eo1><UYfhGDC%( z&@<&3lGoc}VSe-p8eBH*q0!eLQnM92!UR3^qq=fLfWeQQS?H=i@4-8r3vtFgiMTJy zQF9S#c>R-;w-=jTN_)|(cHq#N!c6|<$}L`JJGOV7nQ{X+W0;m+!1Q3L2Jn;%hpF$C z3yiNLF+k@1h*7sN_)5Ns7OH1B{#&Jqq(ZF>Ly|O{3Y~t15E3H|m8yHj@MN#^i@@y2 zDXWnhiR4|<S&z_913XjWv^7x46JfuLdk>`S%HPa-#uiT@Iq^{2Orb){Fu9CxgqHm= zh`)9e!@bBLJ4QKvt$rbn;~qiag=qUC=64Q(=(LpZ9RJXzt1k?X-1*2}7N;-vz@3Q$ z85x}-!57QntdJk+-c7+gvaD+#Fv_)0LW{f-Fkd`5ZCa;SwqxzQsv{wa4XbVQVmd&x zJ7Y6(X^A9B<79Zm*;g5LaM2^E-CfmUcfy#UwR}p3y7q=9lrVmZA4$y5cg#~ALibh( z%h{KnMc0aZ!Yu~kb_So6aRE-*N4jPXwJ2s(GL!*{GdfnwmZ{x}xeSg4lVt#Ka=OW4 z7o+*(4I_&nt^9XP#*nGe_<G(beJ?V@iA^e$a^C<_O##_@X;;uFY8T(f^yFn~SVAZo zzJJfjs`CveYr+*{(9J-ix$Jr=>MlWLj#>SnQRg+;ryB#>w=U|k6={ztCvz$OxE&(w zZH=^y&(#9iCfY`(2ViNKKt;^H=}I;bx-a|4c9?u|8Y2h@U?8*eVTmy33V9m>W4;hW zZ`{4Lz(3qLiS+}c6rgNI7{*q)w7)H_-2BYPl$Ykopxgxfts47|C{H@8g>XD~d?+m5 zCJiCg(xPWkhs3;7gA43aI<mml1vr)12+4{ICr8IdYe3?W^v`q-fMgv_g^&wZDH4dq zdjOi_LMk$ILK2>`r>?C4O|CBvuk;WWdO@y@!~n@13nu8WmIuzoePS`BU{{4^m8+qZ zx<zt^pV(;G>sYBwVC>l1aTgh2hb83V_{~wQBgHQO9rzas_uKF~_`o4m?=O;>?C#Ed zNS}~AUr0gv03WbIEIe8BgeGIpi$^x$Ep8yZ&|21oP+(*7oH<;>k67ykMQIytA4rzX zya{Odixh1zBP~NeHzoP*jfFR3CTHlS(2^uqz<?puZkW-JXB5*0=GbEx&|3)N%-+S_ zHib@}cIDI`=EGuNEh$V#|J|2IJk$T}&S2GK6CKJiHL~tlQSv<)pD43m{=ggmv5RSb z2-NigHlgnv+9MN;kf9ym$vE_Sit~XB5)6D5UctA!;skYOkB9cm_oq>^QCZy3=X%rH zXQ2%#NnTN;EC#ntCY=En=quxZtnz23LBE6C0fAU@XX5Bq<=PlL4vq#`*vyH;crS>t z>|0Fbp;p&9r+`=)<&nQgk!}}kH-C|SxM8&32v5f$lUt+pY*~1)Cycw$QX3@mn4Th= zd7xD7zi%=2<^8Zbm=m^Z+9G7v38`pBIgPlM;ZESa`r<e*8#S59$dr-yXMpRGJ1c$D zZztC}n=T7i#V`l1HHz!V0wR(=Yvc~Jx#4)Gmeyv3?iw-K=m}1+!&-ADx8Gg%5O3;; z7w$nD4(K0c-YbjVN%;XdzI<B4+Ag!(m}XEgqOb5H>M&ib$%NcWDGyMB+3+{58Xj2o zcCABVAO}Gv^gD1CRVMIA5eM86)AkRMVisqA;TZYuVrdF}s@xMg*<eBZ3Rof_V#cKS zDT9!2v0UJSg#3NC&1=~w>=)#<UVm8!Le|N<R=8M2cJ|(8fpAeDE@3Ejz!Yt=zPc6R zi?n#yVgaMDsopFnr=18v)Nn1sa<+-g3$PfFt0MCnLcaqRT1U65%wcT$SSB#dBvdKc z`zsbMZ7xcySB@#%&*#F{m9+FC=i)X^ak2LE+2pRY1Q@mNFEeL{eaD^RLrX1tkiBCR zwBg|BTFqatbki*4L$_e^IQjH>eRRE61@z4<|7Qw`qtbE+&MGFug2Y?TM?CftPq>25 zjgYx?Sm*BJW?E7sy+6u<u@X0D!9J=~Ci<yC4V*&=^s($y0n3}19{dI+4JV>}lxg|e z_$!Hl+N$8Q<Ahz7N?PYAUH~(h>z_=t49(mp4I=HP5BB)1nQ(^QWs>0mWPJ@vTV)v2 z%eY0=9$@f?b`Tq<`s%92A(mC)OkpuXDJ~4gVZUJcG+p>Tr6*uS^oHp~!FtCp`%qpM z25j35oKy8q57Xg@UG1inq{}(HEIL#k9o(2Od0PUV2#ksqCXzi^Jf&v?ml4R_gHFbS zH(TN6rfSy97NwhY5~$f9?Ngw|i#z_oEq6c;FQ7Ta6?5FsEeTyrswdd$f&}j+wA$tN ztpPX-rxutuN?UmO<|+*Ck8LVRccmak!}w{*%XF5b*4Sc-)rUOXY695Wh94*<qrA@d zmDUoZ<BMUE!^JSIw8gk;!*81^<C1P$xI24Oq4%yElN!U&SPUI^8O0ivXPzH(1%9$O zxt#3<Y@?{|ooOs|WDzC>&ZxE6$|n)D7y%=WP7~W0k_9YI)(CormsG?v+=C}Dd1RAg zhX`;P3;i(ihhEV6W)-J_6u*DDPYcWynK-I1E2gl8A#88Fis4`^JZEmP9mXH%rS~j1 z2i>`{_BUU)$?u(bZH$dGA^}WkyNEtzZo~Q!duIVpy!$0WHZh#%oMLO39*df#Vg_-V z&?5z>9`mksT$OCRy~&cl5TGn4pbc~MDE`hLHER^S`Z@7VA~F&l!zdt$yJ_|p$q!ow zyB{IJhm@TRZ$=w+#ZC<E$0Gjcw&{syp9dbr^>*DajW;feNmcFTujDk~mf@>GA7J*` zp|M039|uEr=v$+Ns~N87i`41cW0m~T#dyD_Sci<nyX4%9aNL$h+$omQ1m!0(tA+&M zb}1?^VCL;%sCSETnfN^8bFN|#H{&l1lkF_@vrt0!lHEq1<0ObWCRu%h&Baq{7WZsb zm<QWOeSZqtbk6AbrwwnxhCUWtsr(k$NDg4m(4&_;JnU!d6&#$pQV%(Kma84IYY5=% zpNJ4TlS)xM2oQ4R<1`Moa{y+&i`)PHagM8AZrmmQN7UR$PnRH3Lol}}$y`&8=o1zm zm~k5nX{K6S4=aWDHynCpn~qKta@ExfhQ!N{CqY#cSykyBuB;9t(oE7G#J<^N+B(kg z?|PMGp797Sgd*nV%B|-{9_89s3EMkHTTI3`(e3L07JU?oTbjtqa`dEIKs`MG%2w0E zwa_X|caVSEzZywmyJzsq!o+iqFiKO>5qP4haX_`p&&2$lT7FUsYVUIh774HgU*iAa z7%zUmYNM3eqf&4go@SK`?@iZJNdDP;Z~ocyhUSG-C?MQba@WknmGkADNdG+>Xs}p6 z_^F!mJN>d6^VkxCGYH90!wyvL&yWB9&8@#zC(u%!u??Myq*0y-FM0FRa`qkT1{6bG z;q>+nFOD1_$66pI<vclJ(^EKi_FqR@R%*&sK<e5LP;h|J1cP{ooU;kn6`BUZRegt7 zX6p3O*5)OvDtr{$D-LZuoVej3>D&<|4g`1rZ33Cf6I^o?FPVW}n^}3{vFa|6*v*c^ z{Ed%ajC~lsp9h7de#se0f(cfH!BSxksk}9HaEZ+xMyry^ydUA>S$~nJ91#JQlJaCb zNBj)#oR~yq5WBAztXC*<JDd*7in%n)X>u%X!w<hA7zj)Bt6h&U=uoQ6U$*TQc-H;X z>n+FWGFNQ@4$jY!(rm>-mx>LM=QEzy9l>EVF73cS#m0XmZv-S5dwHHDc>v@MF^{nG zhd9Vgx2*}8atz1N23X2|j-t)L#ZzUx>C-#Y{iCN7xRO&&tb3!LcY_O0BPcQED1W8i zEvoMQaVo3szlq!a-nminwg)f)Fe-Q&FD(?@3qF$=<nYe`i6%&+86N%)i3NF0ZuZ@F zWzCQY{iuWB!1O#x1>=nOv41m+eJ0$SX{wxh6qShcAJ$k}06>m6_gq!RIp6Y&?)pB1 zBer8)YFNDjf)Xyw^>s4AliR+V*5pq(lA&BUl0c*E?d<_^FRr^$HK4U*bj5%08}*#9 zncQdb%%_;`fGswz&gunZwJeN{pon{^_$0&J3u}MFS}$Gv--W_4^f#*~#z{7`nx91p zy?jVF=n!zA-Qa=TgvlTKIp#4)Qz`1upz<}*Hn!2EViBpFzE#0w+!eze-e07gIA-O@ zgn&T1Zi1bgul=Q$&!{$16+=5yHRLX3Kgk=X3p9yOu?4=mJgFc4MY6S2cI@v`$~h<q zpza|Etk2lSf9Ogxm)=ac#4|347-QP?+mUL;YE8#1d(K29Z&#hyxstfztB%~iBXZbO zuy&Lx<@Cj^e3E4ExU(IN6T7l&jdOT2dYHKoIR2aw(WNF#+f41cxL<^pf+e0S@NJoF znYYs72lu@wk@pM7ON>7#@4YuEFptc$N(H9u=||esG=S`u*_ODq0~O5<4o+-R+f*UA zC!z1pHTT7D!sM%pqXl_2sgCC^y0FPC7UTdXuWqDI*5QV>p<^Vl4T<#1&3fa}8fdQ9 zzOpMberjJbX44<+#ntI8$)O<;bJE1MG=FqO1GwrV-ZC*OJEE8QZr{J(Q2gTg_4EL8 zz(J4?B4$t#-KB23DmNhO_vxaukCM?;Y6W}Xs=`5RYUdZ6zerejIs-?_3a1GJuWKVh zI6T>zYGi5i*(bUH?vgkY@VB=?2aos~;MQ0_XI^&A=lEo9D7;9N&qv*%mnsbMW*jy5 zTN8vm1?B=+eW21Riyq6VLzz%VG*&wc$sgwpka7pnv<uUTl6_T1zEpLnTr4H$m0aq7 z`(he!ez9}+6d-CO1N!8NIV!h)9^}D+Z?N`hBJQMHQp$CQUg-<g_tYb^!?f7KtH#1i z{X0)&eiSeZt6~?PtD5%E;8+E!io@W>gM`fJtZBxqP{@c->)^U!Y(D|h2ADrA8VsNF zvhoiv$npn<rBI|Lc27%0NuUjp8xYC0*+$*S54Jg{&Gz_jocOZwnL2=*ZF9eA^D*&O zE4Vn0`iH;J!b#zPF2zTt`IO^3*IB+JpPZPMA;_iiO4HCtYRcj{*!SD?rpy8$S-@yY zneKbpo{H>?Y5r=gZNS3->5_1E{C6$M2wR0Yzk`?1O~_u9OHflRS|(0WcxQ$ABgI9s zEHyp*#bHEx&M5f&k%pgLe}^7Z`-xT9<c^rDCWy!3;>nE<s6Dmod1LT%{Ox<Mmp(-P z^i{QTQC8IR2Q~#5r#+)<ufmKXy*FbaJBeaNludTs`t*WHqUKduUu;W(;dn{l5uof1 zcgaVAhM_8$nBoxrytxrFE_3B{)}xYz4Y<wH!J3Y}+a;9o=?nUf5=5Cs(k|GEC=Z&U zF|Y%TSEgUyL$u24G#x&$qm%RyrSBlS;e&VEaYliTJjbH>hyqBrA2nF8Ayc;-SUL4E zc0Dy3i5Mlj9zoTrT5$4xrgfh@_Nd-!q>_x9CzBwOP_ZI-A`t%0vOKh_F6|MDnWDoP zFSC!llNHOBbJZGqiym7o?$S9xFZnv907%1mzBp$aLiJ`ltuK0`JnKH=NJL^Vkl6#M zG%Cv!ZpuBnCxPaNX|-VLz3G`!y{b_baS3_LH9|GFA6}LvBU2+nmyuIaVqOjl&~%v^ z7;K^YQ3<uK25>F5XhZK|4tTm!l|a&}5zvS;{a)zLq=zYI4cZ<(bdmzWTf%o3hB%bt zUh+v5ATAC&$^P76u#zh5WyD)X+SJYjTAULeza20p)y0sp#ff^rZnux#hQ7Be4^t7G zlJObLRJ@T&HRGw})eXL__Au)E<|ds#suYDryZzMbAELdCpS{8)zAaB!X=z>TNoe@l z2)Nxv(eb2=rLLe!_;toVR%j_5SUJOqrWKV;^$-pIc!Riz2k8-@|J%P)djU52)#NS! zd_gz9ENnTPvlPK73CP&2ZnbrId(NEZxtP2%`YEY9?P#oXIyHdt5>LkU9xvanz(&an zXzxd*nBWpOgx(<RLz^S^Jq^Ssi#53ZNOxjnO4b-?ma`jT)IX8edFDS}6;QVJl$Kph z96QJj3#z02F3?)bnFtH%)zl}@+Q<iQMIIGQm*^QtiJ&ut=ChDo(t8s)99lcXP(|^e z`(e%YCBVc*YpSl|Y2s5ww=7NlWsWB&M9H1Ed>DMUrR#->-&<HIddm9;2NxYw*SvFL z7}Jw;$ho{>d<o8s0^9S_YiQ>hO|wXDb)X~%uV^4E;z-60M3AXY^&KU!aLdye{)$HZ zlgyYQjcz_z2&QjQT_t?aduVp?G55qsUUSvNrVvyvqxXT5zb3_rd=w*}A!L&G<5!ef zQ0MaEuC0sxW)DxY!tforN2G8D%&Z`%sBP00!l?vtO6Z|oVci$2oVx!IQp315V9v@O zv(1XNZ}iqjh8j6cEaMp>psW(HK*D<%X7G-ZSkRPA8QaG^W%m|H=NRxS;B`Ld$N2$A zHVZz-U;d6<T|c!CQldj<Wew>xJZTu%>?@bvBs0F=p{Rdy3Xz>>yQA%(_dc|B7Kr8% zM7Wor)jZUTp$fh<#WET?6jq}}Sv&(U&g1G+ZuXMd7Tys|^yw5m9IKKstT{7>8WLV# z+U|L=cUgACTu{LqpwQxEfMdWSof>NhmS%*@uDxF1<(05^vFossI-t=WJzoJsD&>|$ z;XQhNccSt0Tc*@$y6C;vZXzTpOh%C~TEGC;YspC|TlJI@OcpE32GfI_a@*>_FU$pi z3k0mkR=aU|SM3E;2=$YD5yLW`N8P$-Y1$Cs_Dx)yJ)GK2h?4*vjzCK-awarh{~icR zCcyJ@6z#lS!p8je&?3Mu)VRbS9Ww@YX~%XVr52sa0$HH6W|iY?D*MS(58UGtQ<8iI zUB``P=M=~9boN!&;+{=<X%W~*`~<V)75-U@KFsW%!#nzJ*I)-_rG*4n%sY<<xk`e^ zVh-&o{9^E*$OTa}sOg;VnF?4`cCN6*Ks|vEly<Vx<y;??_z{#JuT;o5<`WCq_tAy{ zdVNP2>~h!2Jcm1oWjck#m9IEDts2gMode8ekfPDJ7dhw>z2WjlJqu^*Bj4zJpn*0| z+X~5(f?|NGBP`ue2t#xLrV7xS$^<yaE?Spf*!x*HZ>rqi8HG_d_It9aw|o$@O0_(i z0^V05bV^O?oz8;VjBW(3i4W<D%p8Bic1d?n9T(ULUG0x(d|-T;FiAUcd&UOQjg+ZE zyr=m72y+(9hg-|jts@~ID;Z3kz{}h`;;g@F-4&EG9?SFv`B5J)j!tEw*3@b@4DvRO zij@4z5=mARv$bth+in=uM}Ro4CwL!QhjW7#<j^QNc>j~06IYX#x1n(Pt70&tg}L)0 zxw&2aO8u?{awyu@8_B1@Ix1NTHKCjhI+skE>M{>pnBd}MY8TdAv)A=aY*WnpGXky> zCJuGe4Gf!Hm-Nmw`{amj&5pX~q%RCOKX=eIhrR5B%9_J=qvgqY2Ecn!kl@TX-a!OD zL!AwKsz75-0!Wt;%b1!q7cOAfMbq=E;G;V;q+93j#OiozGhHEwBs0HAEVx+<KDpbc z$lp?_AMIwNR`Q2bg!YR*rHE)iTe)`2&KQqO;P&_H36C7+?;i2W?#08Mj{|?V#XNDJ z=QM9RZ)_S%P2?Pia>4}r6*F_I?j{ST?K&htT;yVzXPd1BfhAdq%L$!Ok=>HOD-91P zD7{iI_j3idsoyE-U@4an^-GE`X~Og2?20+m;zy7m(M0Kx>6ITf_);RYw%+6ucZ=Px z6_a|q6$g%_xF9w@r*|mM1reknT{OQ>hVjYX%2{m7{zb}%rFGD~C$WMo18x>?H!a32 zy;^=?kBu<lR~ysWho?=fPSe;}#bZ)Ya}LtaqRM}1kXMahg{U@&rEy<|OLFg8vF^~y zx6cM_^Jo9c&EXyc7&B!QKIq7^*>x-0(fo+q7j@dJ)4k%cMcmSM9SuRBlE$KjCu{}; zwtK{}+cq3F>qV}%$~uchX0IhamM~<5eb$8bP>~~uwIdIwCujfc#d%?RmhknkVi^u! z{A9uNy9|iz3XH$i)uywj%m6DJZ{VV<o9z3IinUp#BYBgF&yKOL&YJN(tyn9zx7>0~ zPe|u>ZXUhz3(8AaRQME&g%|(C>oODLb5g3mNXF~GG6_8nqpICdS^50Z=@<=vQ@0G$ zm1S|E1`vrF1(tzo0$<Q*$Jo}PxN$#pD4wv&w_*^keJ{yg-el?8Cgvz?(k_7|>?igu z2cUo46!`JeAA=jgv^#Re^v+cwU!Fae!PWf2aGY9`)t4CchlS2kRw8<z5Ek|XudkM} zKAV~rk5q;knvNE6LFk?U&pe4GZ{=*Bj!<f~kBwoN`A-dUYq&vm+Vtn$uvlmJBN56+ z)~Dp#5r#4+PrQgC-td=?CICi*f-X01KuwuPw?)r~IU^du5(c>~6q;bfwUKN<xee&+ zWY(&mke`xC*9r2Ie}WG<-!c-}fR|4YO21@OZbCQpQos@m#qOCR(CBs9-fr~oT8BN% zv(RSV>CG?MmPHH5_adr~A`!%{9C4hN5o8Tl;b~de2MJ$dC>oEzq<0keru=0maVRnd zSF#3OFF{;XXn*FY-GUke9TFv|b16B|vak%ff-sjQ>7NSS=K@=6LB#hgR&kqwyZK(W zaO%Y=<usY-yWRMddJeg;Q@W#Wd3}L(8jhrRQvL|@g{Jpa?QahcE5YXIt&z0Pe0(fo zmD8p~do{aJ5a``!#(ngj!0R@bXY><AbCodA;ME47NLkKrbpcPotL({HW%~)vei@5( z0YaIC-7@|UdLI=CgjgE3SnxswwjW+l+ndR47FYFbg`7jB1GiF_s(P-nwQ)H(H_$)D zVdbi-U@{KJ=gYIuC~QnZApIli6Y^5MdoB3ZFgF0VkXw#cSSh&?<6orLn&ysz1GJYW zNpxMj5Npi*c4^xHxgM*$8iwJ89L47d+W>vWBoiq`*>sx96Z_K?jOP^G8-aC#8{xz( zc}T`ors|fvAg&1Srpq&Sb{<zJ;{HDw|1|W^k91AW{-nOgC@SHZ&Mc6L!<{@0DqYq( zAwbrq5y~ryhvz`B7F;qfo|-#wX9#@v4V0DZvFYh^qI3>L6i>9d&L39j<r(VN=#zCa zzFYpn8qu!#Eu|IMN?%Jk0^omdb&7dlpevG%?CsfiXqGyMEsrVRy85v{37^f@_x<ee z@Q!CL?!BKH%FgOaODdtt)EA~U{e5&K9Mh`uAY1!40ydizQbRIsPOSMU`>W8g_=dp^ z3hvsKhWHWtE6zVuh)XApi9~=4HT_>vp=6P;SGxWY#xqxi)u-st38oP85Tn;$iad#M zgbQ~c>*;=jo``}wkTYJ$O%S7@Ub_I&yt62lc%#VG@3`1!0OJ(g5}WqH4`k_t)AJVb z#$*F^w9%(ne1*>6t>Jc8E_Z}~#IR`3*JUNOqDuvGR;IAh>+UFWnkKq5;wK@(h+Bll z=WAt|<;UV!h0S)dhzSFi91EN2swp^MqIcMXbE#Z8X2plNy?EcQ5Ie<3qz-w0f5J-l zKJgGIh`}?bhNe3@E?iX2VS>Qw+%*FKsV^SUS1<8asi#fZ(RIV!&^ph#)gc(7zVH<$ zAK&owM#gM;%>6Qzwchv@(ALkMx=M#T_Th-2i25xn;Gw5aX8l)9&Apf4-BQ6rx1DsH zgbw5|feCs;`ua7Fgx5!!iFS<XMhuwb&_&WDyM{EAYPeXKh+EDubeTaxAK$r@&ZB23 zsb3{jDv18jdbK8adY~K7=gr3!W=s;?{OL-wiOToH_9psE<&ZeD%M<m0nvu9so*W%o zQJje@;ylj35zJhoeh|E<4g=ccOiaMmwq-#Cl3mhFF=)OiXMro!TFfeJT@T_od8tF^ z-9nRFeR4-_a7RF<t-pXdALHd<;zhz~Cez7^%cj)>twld-#WPLWnX`ZR457?z{0F08 z28nO6cK3qj4u>`%5l8;;O;9K`8~p9^iM>WoGll4#sjyfp7B5T!H}Z;K8Ghm~8EL^< zwbv}qz|rtqs{Ff#=pOg@1&VXT>p;i{qe)K?b<R~~PS?D9zY@?fu5ic>*2k=2%AQN$ zzV|ZV6>?yj9`3YU&sD@Ot$uKQW4xp5gc!|}TF}J!O#3NRSviWiXtLNgOdBsgbh!DV z8)e%T%)hu_3h)?PO1zTG*acBVKfMe^M_=Py35Y;e8|4}78W1Y7-s{Q?o;vHwP4w*K zl@w8~ZD&DP2jlEtr1gQE6nP(<K%mg|llXXLICW0t;3EE1*~V-CXy}POUhxlzZVI@4 zqCM<Na|3o$Lsv0WkWN=A?@KDQmDhfvRth{2U{SlH7~KKG7FWOHn?BWq9&s)4ia829 zsY>9%2e9@QUia(gB!uuTVHA=eoOJ%Fv?7OIUF3H_LwQpBhuwjk67y-Edmodb*ghks z4!VkP0{uNn-IX6tMm-KToj3BsN)8ZN6PYa1Z%Tv8^{SEj4yv?rHV$%*KV(XVlht$3 zO?)vWQBn)YgW{(6if31-1^sXmP5Q&s*3lJ!r(YNhQ^nL{rs;B9<%$d5HJPj^BlzBK zJ%-xPX5&9cUeZY47s!!s5i!u9xlkv=y}a?X)#2<k@}5*SHv%cHl4da9qIm6mB_Q`O z=6?F%`bQRFhc4t46uIDdUAtBWXpb;*l0bKl+#FmjurY?*Ed(ci4zD!L-R}qUj`?!n zPy7q@kPqGTS9y0XyKXNO)Pb%Y&~J$n@vM_)-js!UFXS;K>gP4}XmN*qoy#c$7E2f( zdNVasn)<nc^BD9CU4p<unAeh@BET!J-_=j0f2$>JDyn;N^*q-NE`CH*eHkoP7i-&j zIk}<T73jLDSV>?|LeVkh?LX*Z<wf%nFzqj3kfvB3qb(jIkXJMRyYDG-bM>8>Ohc*T z=NN_-3WWatmLxs`>$i2t6#+y7tq$KJgT=m>M4MS%o>}o#Nf?~3`pnTdn~uqsF!IF4 z+vIf9j%6WXxvGy?EaJDa`oQ2AocuD+t9Xjj>G$HX&TbLg;P4~9T?gHMU-+q?!*GhJ zv{s_Sr-CVl`SE#v&&iu~$ycogS5n%@&Kaq|k{_4F_`NnJjT*1%NB4_g)%VfIC$FQd z+Xk!DKGkbTZRLH?%Z;Fq*No4PSB*dP%?Roxju|~s7KTOO2brt)aG?_)NcMt)4Vn-| z=OeWU=?l1S@N!)y;VXKq5Fn1uJKJRa+k+1yOY>A$(ZuV3UK@hw1T~x}*W##)gvtn^ zr&#eLLh;19CE<`a9b~M23l~Da54#=D0ktjQ-tIJR-y{LJUzEdUaGAy1AWg8*5*s$% zg;gr$i#Mx!c=iwekZOW;DokTKdWD2PPPFWV<P7It;-Pvs{9_bC<jDj6a<kOJl<xtv z3VfK`&C@VX?b+g$LG!)()B4pBFWXfi|8KeUXo7L9+?z_RpHqA>RiJckH&N@Dy^$*b z)%+i(E*uSTE-q4Y$rvoCVTy_nDA$+LXn7d0EH|0#el*b;PY!K440x3X8?u`q6%v)p z{4B9Dir$bUi{VcHu#A@_{6P4YgH?%!zJ9UbWOg2;7-S;Wm|?~P(TypHQWwOgP0&&+ zlFZ@XOOTwRE30~ZA!9-u3a=^#I@7Ndj28Eo$iY3&aR`H3p$NcgkIY$Ydkp)H5|y0# zVxJRRZYguPh1COx16`V+r_c(m!zq@tdHpEce3WNV6Q$(jJlwHvNdHP$vt6ZHL@_1a zhe>iWtETo>+#QEM+8vqJa6nE`Ouq$c$qv0BmOEe7Y(qCKjY*+GM;E@}<`cc<?0!`5 z(uphc9=5CE;3M5+l~H$Zk^MNoG@#x~U7wP7KSf|8znED8Jjf6(6A4U?zoUKIkTMgf zn+6v@hmMVpCe5Qaf=mw#B8i2RJ3?7ik0HR3%qv~t8$J+Jt}GEsOP%y$<r|)giS`+j ztC3DY9zSK%uJ;L=Hx5(UAG%-W6v9^yFz&{i-NW|vqWmF>OzJP%ove<GEG;YVec44~ zR}IUj{*|uQc`HJ8dy)icmq~*z#4U!-)=K?9HGO4RlkfXCA%b*_93eeMia0_-7$ZiF zl#&Jk>5>wpMoD)&V5A6)fgs%_NGYj|k`QztBK>{#`ya>i_CD_OxbHXDb=D_NMtbu8 zeEpB;dadk2>M_saapG3m#!jl_ek9%Y%V6mnI<73dqTF)07RtMCArTTYscK{=yV1Oh z3QyBQOUdRc6r6@=Hp0$tRmK8uvM9TG!3I<=WsY+pR=_uSGt&{xl{4L79K4G^GE**u z*F9cBd5qwJz85o)Kel+)Jot_O8N+cO*1KImRAou*Tk5`~K<=K~{nVE0K=J~nTCe=w z%CT^52myg<EIzh=th$?VS9oCQrUWm5CZgk5gLWDEM|;|N;h*z|ra7Ay3fI@&Z!60l z@@DyuXoaVgsr8C&t^8G2s@?>|0-^hRyTEa8gGZpZxqShh_1<SFGX*bj&Nz_fxT<rg zWj`-6An0Kv-o?r@cfKbYr{KKQI)HnJ@k%@$a_(o@&FENf$SR7B9}Cu1CgTAh(pS%K z*$GJ5>O;0*F`*Bs<fk4hT(o%EAl(m|k=veU^8RCAGn8mr3z=$g#^%T6g8BGnr-rr~ z{173Zy)%Uk;T0EKu7|zw##24|o;e5P5qkengDK)^M&qcn$BysXqXm1yl={|$Kl3GM zE*>vkHJ^Woq15MhA1hlP;4(Ax>vhs8+^4vv&=6M{V}E)|X!}U5ukR^=mDldIy++rl z>Ui!8dhR7eJn(s^w}RSScG!#hdyT+9+v3xdF7RCFF;8dnGe<b=)^oLew_ixL?lNP4 z{8>WVHVo)@Ca@a~2P%mGWLeqsnzdaCKFH-4nU-w_w#(9$WdMosPa>i0Oj3}}#%1x! z48VK!mffW+PZiWos>yWxMb-;O=Pbqx?+gsn8poqnni5^iIig07B2jBh`(M9gB_znj zvu_4cktIBW42eL-Nsoh0p3?sa>)qHm=g+z<xE+dQXIK9W@a@s0Ny}77fbj5;rg~H> z(G2`)Zo3fQ^BVbm$+3}klq{}CF}JF=xumOXHAmimFNZZtCPVf@F{gpYNVJB-+s5$D zF2G;VRP8$N{5i)qf&W&{p-1ajYF8Kv+~ipl$`q3NbXXSad-^7`J+ERoaxO=3+v_89 z%YICx<jLK(nqZGM3ZTZ3*j~Nx^kyZ;JP!F8*W-bF%m}oQe#IPs)}5rQO)hHW;lC;A z^ms9<Ior2ZtEb7YwG#qNz=9G5rKRD@$knb#7&q(O(Hr36@?%`3WQM|vjg*DPn9nWy zx`{gZXM7{ybzMZ%1v!Xxczftbm=k_5KDx6bt}|z2-Fbg6%IG~@Td_Vw8F9P%FtB+$ zSd-uDQUKjA3eGxFWrIoD4$9p=9Dul8u$qUt_+LjPKAivtDy3F&9eU_DlXs^bhVJ<^ z9X68D2HQGpkxVy(S#j_Kcn%2T@-EMsJHGJI)}2Lv*Y}dq4c=M68sTPjF*?)jg5%L+ zuiMxint`LV?d`yO3U8KhFR}4|`$~IdWW`^kZN&f#{PdA?QDx=SyUV@yX9}qLvdpD& z>+ML^=t_ZqT5cWTF>P+r1Y54DHt-U*a|YXc_u_vmq3~^Y`n~YkD`bKTAe_m0U^HVT zB7L88FaM~yH3YAd9oLO|9PVez-=A9PrPAEp=zw{Z`S=+XC;jcI4kfp4;I^f%FkL2< zXDXwWS3<4!_ZMzjUJ1A%sWzt%Ql4#Rt6&q5ScnumyggUH&fxQf)Dq@b2QZ!@Zz^Tf zAXDrWVf>W0=bzaVowk93;Iqf}-L9FrlPdsQleadCj2-Lv74a*`sAXw9C6ko0oN)7y zf8TAKFZZ$r;Q(ugsVwJbI9DI~@0G={p7>$>gKW=6$KNcSy`8WkAZztN1y=G%wboJL z9I}sQk88564S6#NmU){)UZ#hF$;AhwRZMzY8@5e(xBau>+dk>n>oI_D1^E6mPGjUN z4!x(h?bK_u+C6jPOrEXe%2_9gv<bE}#X=AQ4(o1*ZS#9B*Z7Bc?cEsSeLZxrxmAF0 zuhE6ek=E{NK%8f#57YNvr}weIfkLR*O$zp*9$GS8`*AU&>|^#d>+qD_yr?Q6g_$)$ z_5jlfCiAfV2NuGuP|wlXxY{?F9o`=5%^DTs=QHT5Agv#Ys8nt&^tv(!7~F6Xkh=l| z|0`z|VJo|518ia9oh5e{Ve@$u^l(_1_8E_hV3)l%V|eZIDKv0q{r$-P(sBz5`3&P1 zVmnG8>s16OzJ=f9Q(+Lt3fm>FzIUWVWOtv}Sn|pN2j+o@L-Thj>M4!V(pxN}2`shL zUUP0!67yu!FEX6}jLpj8Y8|wDhWS{gZD9taiPt$koAN>~3v{0`r<EPWXYj3Y6?{l} z*sQZ%7xV&X{X>`60Qy|V$L^xJVGs7+M`e0u^6LIz>V3D(lTmHH+%;+9F}<>Ex$jqE zujs>h#vmI!%>*7(m_|TNVe6yyCuP)xY13PT`H9e}s8w0HJ@h?!lX{;V!eSqwI``XC z*oe;2jY^UdP@K~Jv9BmNulf4$#h<9IR+sk1sL$nY!*#;hb4BK$pF3q%Oc7HnCzC%2 zfHz$ArEu>ad|!R9<xa+S0h>!~o&Ydg^+HKgF`Vqq06<&BRYxmr1CewlNQG(-Lb*Cu zii8LYQo#auPPb8AMHha`&n<X*iD$fIOIUfL1|#D0Q-==cv#FvtQDYx|aTr8ZNv|a{ z0fj3DAAQz5^zd6-DE}d&cM`kCt;un!9tfW8iPx(@-d#bI2`&%b*LK!EVlU&H<WW(J z63!u@!57~rX;<3F%l8UXapg~rGl`zcwK80QA(7i`$tuB|qgkJ;;u9}{q9TN9f$`?v zQpdodf#EspZdBRG$l2G?NPd6li`Fsx-?2$WZU2S=u)%mU-SZuGeo;D8Okf9hT=SY^ zqITP=AckkA@GmCv^P%R%+|Q_&2Wp1_8zJ}4qaUBjaIWfW2ji)myFwOsg4T?p2HjlF z&MsJvX@}+0dNkjD|FymSOB#Z28X2Axgx~Yrl?NJCgb5kPo#-717_TwwCdF2o*k+vS z)pJ%un&}?kz^iK2zy#m?_5lXQ=t_`I`2$`}bH=YrYkEuTFUL-MNkzP)pX%#xooz9` zT6W}MQKA7Jqgo#~V9Z>M6yLe3?>wr`WSfg!onVT_>yPN-v0aRFStK?|oMM;2MwO_J z9*m-0u_S60STcy4tmD?2d{elzi+zFVUCV;Fr5fD6=FfT9?6TIXwlT#dsZ7SvUKJ3Z zD(^U=?=X8NSgJyLwZSQH`s#G_RX6kF<{NEOuGEe4zmZEFt~rX$SJHv>LzA|A{$~PP z+fK^y$a!?Xc9BO~)C7luWBBUW;swv4mgtN!tT%0QK~;Rfn8%wN-a#QIMr$lu6Q!SP zMM`RUff3H8Uty`3`4C{M-k|8eJ6&Ca>(wj{dR3dhR@7B|Ayjl`&9;l`I>RJajd@AQ zmbz1=?fr=xTMw)_qI6bI^*O=&>;^LiqI~LttR9uaaWAhKABrSsi+UL8<PIN`RrsA& zy{~AuwnvVqu*70x^T_`u9M2@6FNKh6{-h>N568KC?mZ;#iAZAM8{V}B%9$azfF8M+ zMu!*qq0vTX&HoYY&665Kt%T_%<{!u$J}Yg^z!H=iQ~JIHV)$9vnQvoHlus0*s)q)6 z2>WsVx@h~y($_%f*L#9LY+Xe_(|GlB+30E^m!?Olv>JturuR}zf0Dc34^C_OT+fp= zmEPUAFk}gB?e|gpL!Y<z>>EA~C1`^ccZf3^<KpdjKl;gvbFvrYYI35IY7px>T1D*q zhHCY^I47l351(sh^*;H%2k)vc^qyft++L3=`8!C7v!|kRbRCC|ySd>Fzp0@Z(|AX4 z?xW!p?01dXUb5xB)iQFLdf;TSTiT-dsqTrW*XD^b@MPo*Y`iU7WLdEzR3_ZtNe(6a zq8Ig>vLi~da@<n8$SFhA6W=DaZT)!tcPX(ele%xb&`QT&t=%578Wa@B_{DJem$n6P z6>p!BF>9vJ=V2(mGZh^FVw}G=MMJ}%t<Z7W-N)}%yX|keRr^S4#R?O;ZH=Z3b@-C3 zu`bDr!Zb`}EI88fT<9BTH~yKXaKJNv4o>O~59nd*Zh*qeXX&dy`SVSY!rFRW<qQKn znK!hL4lTy2+!Kbg!U>~g;1>*+5A<y0%Xf{BBL<87`6cOdnlii4Ih|GM3M=^lC2_?P zheX}o$8Vge%e*u_8>2+Jl=U935K7`Z$ghCIu&7_U4;@u>J(hdI-n#Tnk60P+b?Qup z_eg#!L^q}R=v@h{jom`S{2#@%%q%Yx?%o#UiPpwefYyphc_+^)La|XPcRi<BK)&zW z1@J`(R>xc_pJ}ZKXYr?5FEmQzOUiotBSk;;UzL__3Fg0PL=oY&LBl^=iwq*+aJq`N z;YyTX9#wb7TCh@+nzmuP)1I|&#dEyM-S|^bWK?1VvSKnrqT!xHMGx#MN+&{*#;3bY zq591zsh8V!J}BBR@#~MFp>O-VR~h>Z;cjBB4x_r+vI$DXOf=`*{89SxBDB_RpQ}a@ zii?i{;WQ`C=e&gbbggcz*iBk;yOHAI!UOSl+!1fSw#&WLxeK_-;VO%oQcA7G4IZc6 z`3yDk=T7h%-TYAyUzREO=|X%ZZ2QyscwN@>-&d3=r$a$2nV*-iKkgXig*uDhoVi4b ztt1Mcs-~O6Z9Y{*9j5aR?Z^tJV6`>cdH5T+wH5NUT%=`x0QZh|k}?W_kBihRWR9{X z-)nrip=$V<F@NZfmzB!tNfljpsZIP&fvihZ(GAlc-gCO8v~&|$suxQt%e=Lg7?%xb z)|@x~!{(vkO^2CnJ1VGw$D)#Pf64<dgfm)$Wcee)IHa%7Ojkw57V3<IVK1vGO&WZd z0^+qd^lF#Be4m;48Z6A%%_(h)@t;_Jz#>!_NxH^wmOuYlr7{Ip-bSdvX91h^Yqo;5 z!~L?O7+dBleMeF^$SwIu2)ApX2x41bw0Uq%5b4f8$xDT|2qHS{l8uRx)WH-TxAg6q zr!?z3Ooj+^c_kT}CXCbFrZ)@fhI5DW84={HH2ZsJzL<0?<ZFAzu5YWi+s=H>uva$Z zZ(YhcoQ?W(Az1o3ldw>a8Y~TvQ25;E%+)r6!7Ao|FBaT3D6wk^+Z&8e5?&{($2j(j z$d(8Fj{0Eg>jUZCcy!5Bv+bn>)R(R?$~EZw7$m{+byUrIyHr%1VqV2e^HcXnbrW4Z zq3Tv1%Vtd(=fjiv=R4_y(H)@RjE}sKM-KRT+e>;gv2p1*qrEX>L!G6EdNWXcN}z-( zZ%K(VKelqb3M=g&Jo8<YT~P6P=8K-YE54iB&vf@n9tFe+J6ZAYI2Zm$G))cY+#48o zT&WiUw|$n!C3^W{o?G^6ymIYK!Fe^}(n@$gWMdQ_E}g%jqiOJPC^ybkrZtWz_GT*g zuF~OgY!H#sDe{99PUX>MAp(BK+IR&8O{w|C7j35a-q2Yq@?DAxQ<;lB0+x<t3?e8V zRb^fha!tXB_<M+8d%w_A<YU@he!$T;ynw9e(puu+?YJ%Ox!zW$)a)11${L1Xu%Y?m zck@CW8FJtDN<B-Mr^@|56ax4bvb+tWMk|(YQaZ+tzb`dTII8f6ho}4yz8-h~PDbm_ z?CL0!3$Pb#JMDB)n(CsRFw_xF<(jqc6kiZ>gq%#YeYf&l&1;h!%i-c)?Z2R1>;EV8 z?>d6~8BMLf3+b8IyW%uH`;)*+cE*=j&JaarVJq%G5;BmTNQ{gDP4(@}iVnv5tJ&S= zO8mIVZvUgTnPr`&sT6U)!l<3j#84Nm#Qp0eaoNL{mk+lG3RIldymPXGFL->(qZZ7+ zb&vA@#+jhQAFQNh6iZ$+KX>}-b}G*630YKKPla)h|CE#8V60YTMm1`-v&sv)+_TB( z(R9pxqaL0rL|-l*s$o7a$zY>H7!g#^a%N$Z!m)|B)RZAJx$9V8k+p>3!I#@cKQlT% zT+8MM^NxMVlL~V~U(m<a3LJjvjdm;#o*wx_+a?>sQ|UZ(UD`wLT~1pz_WN|0<>c{& z;7@O{VUc(L5$%J92b_A?cjh2^w#{YumGihBzI02s>h%53nVf$O0GSp7(V5m@mdy>4 zP_E!Xj%qJ<wP#7>7x%ZIZeHf=PE#{0=8hS?5gO(uviwmW*aep}hpQ^RH?+Cl9=_<s ze%Xuhe>jip;8hDSK2hq(P&Q_oIOkqFHSt|q$2p5`UrIkZ$yP*;+>$9+s#$S7<@Xfk z-1a%%9%UT)qCfKEHpQ9wxVe>~U~JF#V-%V(!Pf$?gE#8(3VI}ZrV_(-J^Er0bE3}v zf%)XQ&6v+uxrY+uwx{#nxZ(hw)!Ex9)L$;PcW2LhkU1u4(=zgIN@tLY_Hm=0YufDG zX_Z;BFzN0+1D6S<L@})*9C*jsZpG|w#(zYc99@T_1G@7$ADAVK&qRybr8{AZ<{9=Q zV_TvmML#n)9s3WKnZoT7&)nE>$)<an_f)d<f0vJ!`?}0od2TRmkLr@gikCrqFqKW6 zhUFzlko#f@ZI_yP_J>la$Ui}bq^`14@eba7Uzhym&5k!xZ+{*Nd0>_&qrN`qTT?sd znT#3<?EBRdZ$8g?;Nz!Q>`VgzzvTOA|J&x1q1e_?+tSxfT5_7M5pRqqn#s`<KDq7L zzU@`v>eXaRFWWIzXrn>k$~e`V^IUr*4tcx22@>ti=)D0Jgy)yOnY_s8)w*u^i^66d z#~6%DIN~~*?b}O7#}!ozwla+AXC}CdpUj_+<zh6K>4Tg9$Z?^DZ|In$7X@AxIqF<- z=#c)gZTVYHQxl>8Be7uSi&OZgtkGDTJlx`0WVEtq2Dgl6qKkhL<5L{E5yjzL`LLO+ z(>3&!=hCx03H4U{=juYw0v?~pZ0m5uC_m+ESj`Az34HTV;Z)dl&?m{t29VaLQTMLT zXIy-GHSRi#=WOPiyiumnBI&OGy?_J@{sCU$s8(8~2MQbxFEWmNd$0MkjEkMGgzQ{u zo2MvSxe*^Aekw*U@K5z#m20(UK4erqbe_C|^lq(Er&x_IlUlExSl4-jLy#L;+y22R zNIf}!ahfBMBOyrfz;<M+#^0#M@G_lqh_IiEKVh-Um+9Yoy6w=?*K5ui5uaj1PB}LX z3#)YJqC0Lrm`L1h?y60c5J&)q>$N-mTgNAMF+khUPD#GPCW{1Y!BPi-FSWzl^CyeJ zVwUwQTTVlo)adRwq%AW2n-Y&>j+yaDK=}JazjK*?GiSkw*-(eY@(5^AsdlR7(B@F? z5aP^<=|L*N{sx+X`qyzQmzMFozzKOn|I3=Ay#`}jC7EmCF?7MGR-2N%Q+-aqI+L&C z9rgYPXR$o_>vV+$$%&HgS_PRLkWFDC4U}dozhT<VGnoS~I~4#QarP*P(9ZKR$S6!k z2n7z#_eaEy`<E0LDz>*`G*w`S#-4jQ>R(O8>zOd4s5e-hL-(q^*S3$Am+F3XjGf<K zm2qon{N*GZy$`Etl*{QDF<x5xWS3hMQj+$t+`+5;R`6X)DmpRwA^V^TXF8^VeZFj* zT`fbNQ%wigc|gTbG%jDlQBW|baN+WCZ(PC$isl}5?-}{q6Q0WN=u@}!U6k*Q>`Z&+ z$67jZB&L1&fUfGr%Vu0H@0SaOD}@Ape~%o~wUR$ysr{u6{mQS|kT>kU?3R*JYPfcN zvG8eWg=H#^-y$mGWGeisA!Ta1?f#dnkM4d;eD)|>XucO_g^>AGibQT%v(5D_UpV{o zs=T^a;xar>_A?S{!Izu4-cR?Gv1X&TS4;g=WZKzyulE=rlx0<re0<UORxNs<oPQ>L z7ruhmn$Y(Dp)VZ?g>HK{L$dRtDw4$(f*)IUx3CH%_K;nIv$cK4r=sr}9zrwejJjwI z+&VK0wz6ocKl8;f*>?~4sCuxy>OB>)`j04ER%e0EUn0aowqF5mQ>9U;?uPD()#;7O z8^doRzXOA0PZVuYJpsY%!r)f~`>UcbG!nvhp%u_(d7ZR)^-lMh2+-`4rl29g{Ocrs z!e8C8W7|t8qrh9l^=GQaccyQJxfq9++n@Zeg9K}boM4|EG|(bkh`-k_gvB3d@`qwN z9!CF(IxLU?gh`ja3;v<s^SKH<+W*Q>{0ogN{`r<*0bH=^KcaS?$G{TJ3^9Hrk6_7e z)M4VTSo4{x3}QCwD3rV5EkQr#8>e|rIZUAKMwElT!-FRlh#O+kmArvyq1T&y!&Aj4 zGdF$JzprwP%1>4O&bUeZ;lIjiM5P7_Oey=xFeu`YmmA0RN<=gFH-&2lCqcyEzJBqP zQ%CO4yPUbS?AKsmj`*kb@#*V(hf}98^J2<Yc4>l!b&M{}#{@wOW}inQaPAeBBASD5 zBF=81dR+PxrJL&*J%>ob+LTuCKcdu&=X-EOtvI{Nrx(JG1DC+fU4ixy2s{+2EKJsZ z%_vfws=0*Bk@@wHL#5gA)PKb86K{Kv>=)Y6Uy#Ht($J9Y7fcxWmsrRJFl5h9j$oI? zxjaf?ah<RR*a#P5?{uzFGM)|Pxi#b*qD`sB{o6fHdDl8A`12B2vvf2t@<z8);gTn7 z=E`vCddQjKz{jQe!D)|S+ZME_WY6DsZ`29B|4wVsi>tjqXzMU%u}#31gVU?IRO^%v zeL#_!cgq&<!SKOQXDx*z<tLr^D(gI>s+gTt+&+nowB`-RUrzRju|X@&k1K(<)G0Lf zBEkBsxL=P3mR7%eRNiX$6~Xa=pHz5G7h(M8LZRSNv0vATvky3bX9<XTj4L>pV;9TG z*&nW^bUE3-jVNW%rW0P>^D8U<lJR}?>6xrRFISd$U{*-qI!BPshh^(z7t`$UwqAi~ zmA(A0ovb$iZ?P9|m}$gluXr{XLelQ&l+ym?cl^2Sx3D?-thuW&(s6IUJ=1}oZ#sTi z{^8zwrpCFsP-rHr820m5s@=y>ZJjb`JS)yy2lrL?HhsR}O0w)Z@Nm@8IPE<h<b}oG z#Vh6uI4~i&lcy{iF_L{2PaDip_;iBBg(rj2Ko7T*I`YXZ9iQ0Nq^<qN_VD563)}vF zOA%%sjHs6HIG(!<H@sf%YV_UO`_ww+y;m5=&X%(Px=gpwGyKhEEM7KN_rf5P_q%I* z@&KcckQs$gqR^YF=>Q=I>NyGb*b7cfm92R52V8jb{!K-C)gM2#vzfi49Au`!YOc1@ zne3b}>Gh$@>|u>aXCP|Q>Bp-8S+<zuUfg#JjZ@FYA1Z92OxfB7`~eE1&Fc@ENB&~G zbI&07k?PXQfa+*(yi$s3+8*JM3)K5S1?}HqA4O*J`!>s`>`hZg4zy{0_#AanUb=ZV z3w>%L!LAXCo5;(RvtcDOeM-)Z``!tYk5*aczIH0g1p4^0)F%519A;@P2ySD&D}v9t zG#vAp-7Xz=O<fK^I<CQf1#$#Zzfj~a4F(n?$fNwRulB)`igb=IL~w*H5UPkO7I7)6 zZOkb%eIbV4m(ZtqgG960XnS3ZVM^J?86?0jKHa8?{ki3oW16>MH1c(x9-7ImX~yzr z@CC(H{T*viM;~Y|P$O=~RGoZpN&8Rv5#K)LjIC*s1}^{WM+jx^Ie)_ytw*(59~JsI zE7It{`$PWf&GUD>*&2HC+Y^ToJ`k*Xeaj@zV8055H$^0TX-#CA`jEh1`<A*^5QK+E zp1t)8$rECBG9*0fD0a}enBe`P$gMe9UY7Y@NM|TzV8_ngUY}YH7eAWFATKxbMZLw6 zyKRL>2OK)KuhLwT@6*8um*n7R*dqP6?NMEN_dlY!c?K%j3S%hv3aUQMRvVZgrmC}; zz8LiQg4<7p`%`i;jZt1Z`(+qVL%r=`e1(7tUy=0{k|$n>z(cwIbgDa1Cap_A@$<b5 zk_GwcAL)$W<ZNfFGZ1*$y2)i#?vI|l|2OvG2Jk@TRCgh%NT`EVlUtDw$f3Yja?buL zsAnnEk0*#c3>d3-8;{Ot$Lj_I^An@C{jIyX6Pq7v)kB9)i!Ox>t}>2UxSJ$XM;Y?1 z922bY5MPPP&-m*wc|HOPP4fmgWoj`h2vPo_Z6f|O12nXFZg|bBldC!Y_p!{amX(^e z%3kqg#=5uT(9SRNPn(Sb3LK{s^}IOW<dT*b&GixFlIC1hyEFe0sSmbEJT=qIi^Mr$ zx{E&bl4=+hDi#!9r)EYX6szONmI5KNGD_Tg1wNAB*>O&?AsoGG@;s9*AcFJ`pIdT# ze;7s7Uu8D+3)QZ62=FtGz$c0#NR0Sd)M#!u#u^AnA6kau!or>}Evl(E`vds;Itbke zqk%VG9^14AI`QZo6TGIIzSDGef4j^}&o5>`@Msxu=r!*7{Jb;>K5>S;HNV9^uac$Y zcbvH5jwF#sZL;B~e>Vr6d_L^HZpq7dJeu)C;}>xJ+;y5^$YMCnms?lkI+8hmgzh+( z(D%q&sD$z73F##8fg8Gb+j>v;o|=LPD$ETpT=8#jQe~fCQkY)*qRzVu^HLahq`x1& z?A2HYa^U5D+<%etAXg;=QJl6ldMayMZqok!nx^~7s-DgSH!Dx(uQ8@lQK*iW&V-<7 z1;_tf6Ym}J7bln~Zfu{m@Oj-W94ov|2Wkw?OyS;cOe&#OkP2AEAC(dIQz@&psds+N zqZDt4LNT#t*JX>x@hZc+e8ykrSkD_0y&wYhD3g1o$jp3O$Dl=;=JtPCO=anq`eL@{ z{mV&0rO0iMLZ>d?4?`)9&o4DT%{Q;=i#j!OCGlw#FN?^gO>kSi>#$iCe2BM}L@AAC ztVK`;J@zyDGlTPHh2|U8kNxW(ommS8CUhlDd}8{SB`(Kgl>5oX!C;5RAd1~vqs@9J zI109pA+Vk6c=#0gBq5LR%ErsX=g?w3Uav<PB94gj!*O6*-<S52nXFQWcxP_)^i}xW zemac}M0bPk-V{E$`W@f|sN&%cwZ_ZN#dwx|;?Q{IgmF#{WAGa(F1x%Z&RaFIFG~Tm zEBgqPpDD|1%+wTzo@Gj_WT3Zm4XFAWYgxFg#^xh4y9r9vw%g%s2FvI4S$U(;ld=;m z%_Ia**~hDzQ)4X;Q7Y_=XSYaQt>4?JGI{*leRFe_!4_wL)%L^iwRZw~KC%+n$O4hR z^;^cuqVa@C&SXVuVHr>kweQBcJ6--#s<g(3@yJ?M1#Vm014WEw<ls+%6lcacZ=6S7 zeoF)%6oFJ4UAmPMRDR5eHogXP#9OJ%4VBu#UB(LXoU0wL`0N#PQYgy~<H{;hrtfru z!Jno=8LiIZsJy5np*fe_oN01Q3CL;>t4{fS(+kkt6^FI?SxA}2OZ=P5tao{&!0>nH zd^H~E1a8StO(s#}L;9oth}K>W+#gQIqHoFh_lh+SgDHO*^q2DwN&bST<+l*VhXOs) z+LB9KRuXbL-e`WV<)6rxM~R}_UJcvM1QCTNg$Xw46`{-{iDjnvOetYG8Ia<u+|m9% zt%%`IIIRenvD~wy#uUbYw%hzwMkUF;@}bnnr#Wwu$aqm|HW>kSULKPhw8!}1zodU3 zIu___>yA(qI!4akX8pRexcpB&t@V0Lpqok=`$8FZ&i#sJqH)t$$b7|;yQqiUom_&^ zhNe-_7C*AFa;kX#C{NJfVcwEfL5;B2wu!;?IO}b}Ny0yfasK;w@u!#{6u<c+U`%Hr zQY*L;KgVE9{vxfb{|(otAkSUt1NCbZA$=Kt+pflV<q2s@^LA;i1un<zWVRiC^UO+B z-=*1=pn9sbdw5_GG4*!hxH*h0ZaR*cVfp=M^3OtY@xtd@H>$<mnWeXti&lzP5IpEF zM!7Oi^jAjFE5`M5CTlvL*?ZSK{*Ty}*$qp4G$Ti;u6WIOhk~V^v(R<@s(X2^4gFL8 zGBIOH`&GX~=_TjP-!m~*Yv#kwE6&+Z8Z;5KKi<1ul##r>98erpTj!#Ex%Y89TT<{h zkY{b?iqKW2J{L|Edw!8e?!l=c;~ExqQDD1_dv>XOzy1frHg9HA#*K<6QP$$;-S5v) zqvaJf-!+xnKwlxY%Re6O8P@jgUa5Qvarn(~LJ)2GC0QdJewe*3#~KDQPQ)Ni6qghF zPaS@|BItY#DGm|@?7$2}#H4pfNJxmu{=a@55j_LReW?eeyiZgar48@!A?$sbqMH9t z!j6QPScOP-Y89_@&*s_^Ys$ADt25jOPWorpWIvZ387F(kL`E%68?W@tEM=%M|H(uy zMSRYQ2Kp%hPi4ND+?E!@E=WiJGToxB2t143_cK8o8i{U4g&xG2x)<h{f)9NDxY>Ju z;K0-JhHvGjqlpWjli6Ci^ZJ>t<fz(Y)VFG@H|k`cB_0`>!u;H5|3Ebp{0BgCh7svU zXuUYPyS)uLrW6bHPtIzL=W;Y%QRq($T&Sw;xyn;i1#wpso(?IM^Hh+RJ90qr3-h1) zlge7rZH*+(Ryy~x1v+~Y+Qtj}#)F;zea+~sMpJJjiNpF6Ktd0!jGByJ<s|P{HZ`4t zq{(h@Bz_0G%k2A}Bz@@Q^{jR4%saTwd7?h94$f;;Q}B93rRsN2{XRX~OaYu$Gf4?( z>w36-@=0cAW9K3uC=PXpt=+o!=?=K0ZWd8Psh}?LhypwygMt%3)vZ&mxNfTbXf5TZ z$b{p31diqs$pJqgrAo`%R_T28HU>c5L<rq>NI=vQ0)uMk5Vio4N^q@7pkC7q3YK;4 z<DNkgN6D*;ZFCnz=@kctyJw4?^>0M)T=w#by2epPt(+#9#DnH~Kzudxu<ARt{@3cw zFcx0uBr_NRI|mm!eD)Bh%F~4_)kRnG!+8+^kjWds!8pdZ45v-%dcqjmXZbe4@f&)l z^T~T~&m)VYsVKjF0D`fO;*Q9ExT(wl7+`mI{8iVAhx{bxUo(=r@}L@?b~`ac2XRX4 zw*YZ4_=3oGg_x=%ASq7EmigFqj1<=YWBK+@I;8Gh-sY8^Quz?y(119N82q9!^Fq9F z-c)9EV|qsEZA#b2{&$YfoP*~a^(lOjlA`g!6A%Wcrk2xI7-H9*9yYMD^JNsYJfadK z#B4gXrXcjk9>y9kq0o{rtU3|P;IsA-KQe(VD*v-V9cV)GC_H7@C!y+3Jtcwt;bACC zN;V-#l02$6*+{oMr5tEF@~$X&^r)wv3P=It0v&lBP|tBx2E~;Y<(cV6KBty)v)?Q_ zcpvEFSzddYe9+Xq59Bj+d`VnLYLZ~@Ez-VoHtRN~=wNSZC}+>f>@|?Yo1Aa@Ky7`l zjIfSsFg#-6@T+2#Y@}NSI>U>FN9t-cYTG+3O%mn6eo3GewHhl*2CCEea*l>3RphF( z-zDZ@NkzWAWA>VRtkb_Y@0AbOXhse`c(=v%kGNKMm#4gKvhL}U4$~M+QVgw&yWQE~ z!a?9j$d^tf$RauUXiFO?mc#u1T2I%*HntJal&RsnyK{i|oI7gsU)p$~c%SgF$Cyes zzQogEzfk<aw`%!MmUZQ0hQ1ETKC~Esq0g=}8GSTWeEi1pN)dPt9i{%39_Dw6KUmdE zAHjWan=qs{=XY9Oo%Ff!R=~#5TJxb^|3(iFA0Hm+kSmz%k2*(-X4%tGHf$EDN%r2^ z5QmVB{$(w?*MwaL7ZO}!Mn?$6p-29cNoM{0v)YzC$HDr=tMCVXQcU(;J*8Hauyi!M zTJ4Xo!!YA@xJ&P`p;qM+SEFcf7PYAYj5b}>ts_WLp^JWVtSJ_j-kMO`RHOdcZ1Rhf zx%ugJ_`~HVPoiA+lkOTqwWJ)@I=Q(bC}6EGTjhAKk^_<;nYBy^HgJ=;yu)ij!%?mr zIm)+}Fyn9N4%v;xYPq<PDd)#_5-i+bObzsgRDAlp#Y|-w<L<wpQ04A4R=PA<;>n8O z3hk!^$S7JH(or&C#Cek-44xXcuOoh6`@3O#zQ{!QPziF+{_oABjW3mt++4c=R_@|Q zZMO@up428HgQhn5vil>`B!BGQX5Vq<YF3-D%_5}qQZ7rVjJ2hW3ATK0X2_i8izyeV z<#eke`<~kCha8o|(S3h!x)iWTLzgAK;o(9D)c8k}2T~Fn2gTWQNcTFEUwtw0jYrwv zjMxRM?=)1nLEy25{!Swc)4#SDw7T|(MH_Xc-AqkBu>G1r*!{gpi$_4sQLM>opjZzi zFRXb*iEp*3uC7S1?e*)FVM>$dgk!~sZogTgSFN32JX2;j`6*xr%0?I+N7w&Uj?u%O zsVU3XF+6<E{XRROcE04?nZ{9^RtyZVK!ZNi3o=t$n$*=r#Uw;*WXs^{dWRPda7op= zhWP0m1#FiCNcO?~#uA;~r#q2fE9H~^BkDcv{iQ;6d)jzqgxE%N>|Zx#WqSxQs7T;_ z=)U1#l>?9T`l$iA^;*9NmB{p)raG~*Qb**xx+1X9$jm#91+a-Yi_&gekgw@e^yo1D z-=?VvpUbAHQn3Ko-89E+1|O7~17Vgw?RXcT8@B=qK%2Hv#F^SM+@M$(<GD;-dHXNG zg=7lH_hQ|PTuf?>+OOmipqRSvwkLB7=UpES-C(rYaH=a;*rob-?)UT!LXV;qQ5*&? z6sd-eJQ^ry@r3x&1w)DIR&tb?Ws%}?Ppqr!lRynMj;%*5D|JZ;ujz5h6P$pwBib&1 z1Z5pMW&Sza!Lkvq`x&!j)hh5Vai<QG$9D$nLcbk#K&TBGp3U0&ACYtqG11+3$|6!J zk#S;r7)~r|W`MM$nG&!n*-AsRnzBj5LPl!}t)Jk9gP7T<3}Wu{+ioxwW(ZwiEE`s+ zJYg~9U1Uf$ckHYi#hS0a(Gy$wIYII_jB^CQtKX=*p{m|T%}Vji;k4yx5XPfk>j+i} ziUo+kG+meU(xYQ7eK`6wTK3`jZf?)o2S@HZgQ0O%f-!7HXdO7khY!h{xZ#QVmpN!@ zY(<-78=)PA3y73RzBw{spit}>;>aK&$SuBr+aN%(YIAY)$w+akZy$|a-3D!DHRd?W ztyjOqZQQB`5lnv>ay=@wC$T2&&l+ld3{|}d4I*65S%=CwX?qU`2FSKSvc-@>fJ_v0 z(q#JqdwaY;0h6(U1Um<<ujG=k2;MPSE+1LOFbt1z^4n9e01?S|lM_=2NHh)1Q=YGV z!%3hTbt@^fj*bqqXaY<=b%BrG(#>JzNk`LzZ-1O*>{hnz+U8;yocK_%s<&yvrzuX$ z`Z0qVB$C-2*7ro=zT{`oaTM{d2lkrE1Li&WT3!3c6zsS;7+`Qn;cLw-e2P=K33gqU z(=d`g>y|&F5u_7@Cc+M)S>5LzvkYe*2g69}xul-NXTwG_!pEWXT+LnlZW`l=jq}($ z;rHB({-j@G05acLCr!~bqFPw~Ij}Xh0-3U6z0br7bY^lrA{es+f;H!hek@~KEqx+E zfG`jewB!YW`u--<aUG6JF7R9(dORkPI_o-N-s~_N&ind|VXxtBbiJ<mlAo`X4<}(L zZRl72{Q(JXl)4sQhZvqHYMT!M6JCkCEst`vZ}Z9-{Y_?;2U<O1A)O<UqV}u4gM&;< z%?$%gt?cJb3?)2-Io~VU$+{)QTDz(3GY>t+U;3ApqjmBqu&7|z&z01fCk<^GFjn4i zjA3nfb}I={U(h!!U#FuROt+ksEy-t~py`1>WjF_R2cB2tjMhQsZm&q_08>{?YSnYV zV#G9dyzGVv74t;3RR+<PKCv21l?=gs91^E%MRry5_RuTUp$RcgsooBU<RYB{FC`o+ zIfySVhM{GSHB6)bb+71UQ^j*ap)2!$g)T8EDal<DBJ%$!H530|q09R~id5B?Q0Ur6 z-C^Q;qSl<T!T-<*)jx|r{=br!pzEwc6da=7W42V=B4&23mcE;gH*PhYnnT?t0R~^H zi<pqAIIQ@HBOwE^avMBLBquuqag-`P!6F|Eog*w|(xWNqRl7y!;;7K`S+|k(r{%N# zl7en%hFmhZm}LlAp(~=_Z7UWv7A*4ZEm$OH-*oPEG|CiC46iCsi!%ioeI$87vANtP zmJ^>lmuTrQbRVr@&Sn^=(!2_fBS2C;kGT=$mqBbGcMVe#k~s50N>kO&_vydBkiqxD z_D|~Q;Sg4^ffuPSJ>L7Y;Tb3632F>sXgto_Jis94RUKrgi-M!;pso@XT<^00tm?PT zJAuB2C!Q>T;AAxjT%5}F8#qLVtS#>Qv8n<Tee!h2s2h+vW(45Z0-X*hNye&s;S*GW zwX1P3Id{ue{YB>mRpxmRz~p^FQhd(ha3EdnCNkB+D&l}8eJ5E5R>_A_%N7x&&6@zc zM#XLGe|ZHOn}0pmt+g9n(yLz}s#*&(i<%${d>XW$O)1FuG0;hJi0(Wm1avY8OK-xD z^am))+)qj+!ES>b7O0P5-TK8&AUEHB{q;%)leZ>yGb>az$wr8JN>iAjiNuGli;y;t zA`*}d1AnfirHRiAWH!|#X@I=x{646N6sT71J?~?QsRnU^C&Vbp80$bLAA7bwS()WX zf)2)8y3welZ121YVssKZE^EjwgJOwoh52zP+grbGczHF5+0acjG_Uru^cSN4PXvcV z{7Tw#u-Xhdns0pLr}6bWS`W&U4`?!Yt-eX!fpHGFd<S*MG|VyFf|AV_pf~3k_rMAC zk;4@59Av{{E*I`&YEYLcM(bJOdOtCiQcxe!U}9;uB5@Fe$M$c|;D7W<5>q$(2#ve> zjcjOxj4AARsJ)0?#xQck(I2xf-FXM$kXbBcwl2z0qg5I`3CoPmF^f-*8{UmwC);F$ zWYA#Qu#m5(aSU0xlogi-^lnXxAfp&)#C`Y1>eDT~dQw9yrO<e=rUaXuDK$9{HkXEy zo<#@Nj{=yZw3X?J+$U~&!zksO?hnkYo5isN`fJ8WY8$({Lss1E2F49t3L9NRwvPH3 zK62aN0j#irFohA8h=^)zNEc)x|H)K;ViP0!b-LzEH<+#6Jt!KI&GvTQ-n|?3W6#(A zqj{+wAAU!TU5Z&|aJa<y^-h#Kd>|X)8;)}3#?{elxvO`ym0)W%@btd+XK5d^<%A36 z?jfq?MkVf`P7!F#@W;+83pzN6FA6cxH-fW!-=2y(Ss=tTyKc~0m(3|2r}EliH+CFs z2ui3Z1Ah;zg?}s%WKJcC7|`RPFJe83=Y7Nzch06z4*QB2v&l%hUeF*bag?i@2NZCZ zgENj*pU{cWGn%?+!zRdTjnL4$EXlmkTY)fx`AczVE}drB23L)np-b6$83<s5Xybn) zCJz;b1Ig}qNC><oLiEYCrQm7A`A{?szyVM;z~VgP((S611D1T3s`}g1YbpD1-Xley z9i~AF#U_gPpKQS_r>~Ra2AQ^AyTPfnu4_LcFoxo=yDh|l1b0lB%-+k3|A=g9)WpnH zbYObjv#QP$wAMUxmR`wsR=gerEK9IORFdD}wI3EvC`aGn1PZa`mB(1T{&-{0o%Cq! zKcX+Ur6uJf10OBL#fzMwxnKqmST#B+j}@qv3mIV36tBvStJH}CQN4yisYK6Soo`xE zda*g63HQ=7uO219iw?r)&1mY{Hj)FnTR|QbpY_v_sXP*DwB*E-#E^-TJ~(S!@@47l zASf@EGMAS7X=RB-_0v{`Tf#UULT0vhSMa0FO0g6r;#F-jb|Ig9l$fV!V1+j-j)e>i zr}bJ{iK|!Wj!7notArAZvt)CUEgXy`1>SVfZx9N#1iz0q^Jj*3pIO8zdXdTKowz8S zY~JBQ8cykL?1vz_FaKbhGYB;~e#U^0CAMaF$uhuf;I{t3fSc+gpQ(8t6Y8?N=l;mN zR3bc11c7@-(@IV6uo0*<I<?^mg&y=7Isy_^2!D!x=F%cGQ^)naO6YqT_JYN0+(Y7w z6&xiTZRNVANnvNNLsZ3D%YEN09WnEb!=-u0#3}3V2E{ViW2LTH0}@%OT{He|OU{p> z>4U*ic=_gx<gc09Z%EwEKytvUD*Zf!<u0INh)3rIDybUBvrnE(N=8kuN*?#rcti6} zU3^eIi<-D*(?y#EOB~IU3BLYuNos+&-)2IrFlIuY$Q;oZUMAtSCYwp0=dW;df=zwm z5AO4u92wA0GjJEbG^N@<d$k}x5l?B-wp1Q7`%6QD20{il^soT2xgqmFxtV5*E}UV0 zj_9WgQ8y>{r1p&)I#2`hR$_1`A(AkyPYf}3YI3l&216J^Fy<%jgUH-$br~&Vrxh`h za0>$0C|9}qk~8iJ6qH_>yOJvDom)8|<Xye|&#zBL3K1P23kQLNQfHnmm~*qVC!Rkc zdyPM)CizS)t~@(c;(zJNZE$lT=*E$Vu?!Ze^f;bB<VLt6`f?N*Q6sa<8e599G|S#v z`{>xWqpu%$qLL$-qRIOxjteWau+LiQ#7GW<sR$t^4}uMINcx?yyiIkh!~F(;2aE|; z2owXAJA<n#YG=a}aED6mTD25yyLIggpVWy3>Q&7r*{6~d`yTQHNJ!1w`SjQS6BF^9 zOV}AM$!_woXN)e2fmiSBTspiUJ*a<ZsA6+ZJrlEm)+<?|N4$139r7{#z)i?RvH<|K zWVJ?TBGd*-jdugKbN3L%3<3>MyaBn2?)%sYi+S#C)}E7JHm!G(Q!vKQZanQA`C=6@ z7)?(Mr6Pr|9Plh`u+l)>pj1_)B%S6AMyO!Jh~s{Jk(wKo9*|#jJWJAZS27GL`rVJ? zR<re%o#;szPK^rA(Ouha#X?^`U3j1OiRj6|_1j*N2$PC=(Ua-Cw>28ss>T5W)x^N@ z)Dj!b+ly8Ykth1ud_Y(Fz8x;SX>ltb{P4%vvjr=fPSKTY1O{NiDWl>c(}YN-PnbAO zuATM<WL4_%KfjJV1z+~my}Ivs#$;C&&YQyb+8n{MAnp@GS!a)su9b895Z=la>=-ML za$}5syAuT^RvQqeqSiMPBr_ce0NBS6>1WSDG*>}?pUjw=xUZ1rii^4$pUj|8P%^Xj zS`ZGb&*`kU6}uOV5rfcj=$k(%xzD!*BdXLZG|_!fWmuQdqRenGiUrr#H53V-2~xrn zo;2_}bw9WEiyhABV`)@idFgA1HAk>VoNIzaCgNyL0QOE+1fQ5Rqq0QJ`llXz+UwjG zL?B}hH?On21FxknH&{$;yPuB)GEqV-Pu>zyYezajOoTx>tBH#)B>GjKp(sgK2cd(p z%o+y7u#pbE-4(G|IW!fOXOLrbR4(y=g5fuvQooU7wRmJINh&#LPR!&Pr|syk;qpHL zSUEYPp>k{#VwPfqIhisqZHX9!c>I>{PXHt*)L}H%)j}2^MxYM@QRVY}ckVmM)P|#s zI5ftRD{?s~iJs8{X()k~7V32;73uDK{)6Jz5oZ%Q8=cGSR=8@jJNCr6abov+;hxC@ zr%|m3DfXn<l*l+rF;*x`&A0=CQcj~C1x>Cv#lxy;y{ey*V3Gz+I=d`Qu#k7rO_kWL zfm~3RrQwsB3mE5JVof%-_J;NzmfS_hVaNnXc_q_}B6Ha>D~^s+Y9P~0+2rOuHJp+l zQ{Tlm3_sw!pA;L6Y@|{2k4CX%i^t0C_qvMkl7gMyS+EW@8cdwNM}2z5=5rKfgik?3 z|4LhF*)y}m`fMevg2ZG7*zRrwo!71t3A$-c5ZfmMl>|c(^fTWKd|O!IWbxFNe#6v! zJ8vKOHZBjavlsyQgJEdc>xPP)ji4qH1e(}~!qdd5Oe`2anOwf|>Fy*0#B-3Ars-pZ z?IeACfSl(25IWu{ThnNCH!qPGGCsH3J$S>tKRBZH$W;(NsTN1gX6}hBa^YZmiLLn% zPCPgX-G>vaT}ruH;mDnvM?uVDbPN-0Ps)>qi~O2~2RBeuYOxGPEIG3D11HBW^yU~b zvi^@80JWUInk!z(STriGYU0gZ<Qy2l>vG;HW#>VJZIW7evqVy~6W4@urm<jG9m(G? zpkB7PfxvlLST?H6MLq&+{OM?eQLkYv*-(0<p_P3s3&TX5RIRjmbJJEnZzb<QJc*@G zr^K2n^8z0^Q4_1+@TI1ZEwN@`Rjm0k@)y#OLb5K0)&ogVV-7QV7$g}lUPMwk!P{!b zh|(O0M$_t7d$T}ws3=q!lk##|%<LXKaFd!3=Nl$#r2tt5BcgdxB++r&pXFdxE8cSg zZ*904jPNtxy#1%5s7N(}f6BKx-;HI-3zX1dET7(MNBqGjW~=jaSQ^vluVJTV$8}=O z<>pS`Sy0l`<*T9sm4-LR)b{Oy@5Sd9!Tx}dD<qbdB$T{u0{{>uKqQv=!2!kZTuT!< z)!J9)<`Rc&Z7lRim8TW%4dv00WR2Nu);wzNZg~gfSC*$igJ-a4F~qYa6n#@_u5&WG ajVF+@q1kJi;oHs|D_wKMm+apEmj540_U+C9 diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/img/bs-docs-bootstrap-features.png b/src/main/webapp/bower_components/bootstrap/docs/assets/img/bs-docs-bootstrap-features.png deleted file mode 100644 index 7cd8501ae192e5b43eefb5a1b69857a6c9b8278d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11244 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 diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/img/bs-docs-masthead-pattern.png b/src/main/webapp/bower_components/bootstrap/docs/assets/img/bs-docs-masthead-pattern.png deleted file mode 100644 index 75c46a152dec0bd06b8fbda8b870949ca3ca11be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6450 zcmeI1c{o)6+s9{&bsCHqh8p`iw#mNBl3isRgJLks5?Ux^-_k_Z5ei>lO3Vy1_9(_0 zBatQ9NmNw!knNd%e?I>`*Y*7QJJ)?*=UnG=pL3nh=Q{WMe%<FhynNA|6D$M<005kp z7N+(908rttvx69CE|x}{Gj?{DZ5%J0{C{s@{EjymH$M|%f6)N|W9I~N!`TFwxlTcN zg_s1P9Q-^WR+iIXK8grV3jlzJTACU;hPnSN3}}2xYBV=eihmh<Z|lhLTX;dk_0Ztd zN7ln-i^|G>lnS%!y_5ej<o{lH$KL9>S;T5XpXQGc8+$8ls!V#%CAWK}rS|q#U;mu2 z`X_Nm3R|M9WP%#*7VWrlCqMKn9sXdOXO&%QXXnau_heVw#M$h|sAaQle13_0{j3}! zqS2u_U>Ypat0zugo^YMz^=kv}{qbfhEu9_JFokwRx6_l!Y2`tOcJYK5@0(v0P*7qW z&wEfU6N>=fsULSgSgPmm$baUNQyBM`meQpr3_2$h-m|9CkarTdwCdwMrR=r@vBJ!u z2%>h%oY=(DXZ6*yu+B&gPWdHBDlakQctekgxb4+`=)3k>8qlZkMB~i64V+MI))oh- zvQ@Cq4Vm}gcU3tLp%_*Y0P%X+rG+m5N!DL^&A%v%6jtTbr>iHow}TNSiXfucHQ|Uv zuM+k^9c`yWE=vW0YUv3<gl-yvuKpN^{={x8h$&Q|;iq$%6A>EUWlY84^-rd-yf3KJ zqo>~jh&oiqvKQD;IzYb0$&%e`*G^q08rf_&6Ep%J(?F+KV#ngf<Uk~ir#&w<KHp>J zfoL>FX|BT|BF(LZKxp45{TZI8H)H>Xz`b}~c|3=$F8s=f$V%%$HD@|-Qo@pXG!xDw zfk?(?zTME$Av`Kqg){b3!`zCh&6^#vEfNOBJh^cpi;Ss(O+@|6cRu+sS2_yxGZ`Sz zzkaZsZ3uG(E)L<P3ib;f-Rds0yGW01LOat6asm8<pDO+O4<s=xsWiOQWFXANFW!dz zL)xKxRSChE?Ij=URsDfOH4NvR6%0c)HEBLApKWT~J8jV!*YPG>8e4v@ERcq*zS0tM zd`X`7c)Qlr+K=Pb*=(Aqt88bCwOk1>Ths0rJBYX#r`qZ!wsl@`n#b5IjblE;DYcWE zhQh1U5}EeIQ{%=y&;(1Iyr{82bYh4)Q+oX9NT5rQLzD`^*KCI8<5(W+dw~26VXeiW z3n{4db~)(C?lKO^kvhXG4S5l#N&^?Oy>FWHuICg5<HxLeaQDT92Yp>TCRs;lg4m=% z&~>$++%(pdA6{ffU*o!eRud}9Pz`vBzlr`$R!qqjO>l}Ee=D|Efj{`qkqmb2j4;-I z*U{WIPnhRaA`eE45%3=RukWCx3w4F(N|@@$xpP)hN7_w`iMJkL#8QVUNtnc4$IMLR zRY!%@gM~}9q5B7+;){8X3i`*`)I6tN8VQeo4nuHMlp$Y10$_)Hnw3hgAP>H?c?+p1 znRHctQE}Wf0BJ0p(6(L}=8X<%>YcE)`o*9orB~U6sq~Y$;!o8r<R5Nqwk(EBH;qDn zlTDmYu%lO($sjL6`0Dz>><oSS>F`XxIbhNBmu*FzAsoFtn}b&+>hHeT-p#(ReqHfi z({8_am#l74{dE4=rR0LzT;12%i{3q-^#@&ly;~8$3f<-(F3|XzlDzV4%(MOoXY){( zj1BDp5X+L(eq=V-_VC+Exj{bAhXfhRSqMaDK4&8GvSOryKBy_`>D$a61{{FR9iv1O zRfGB&!yg#K-mIAJ;Nv*hw2DlS{Fddrb15!1dY(0+oiya{5o~A&fY=-8Ly50>u1}#f zO5YV480fhKZ(UZP82_ZL<N(nM-;<c~46GygUYPS6a(>$C5?lw-X~>Td(nUdRcZNL+ zn!*A1P*R>Mo8x)aWqmZ;<kN??u7O$C#mlP*t8SZ2Ru9c5_qK_>L{W_403&$Z7@rR_ z`f`(R>i4LXpS0npO-ta&LOABaIh!_UYMfgVgaTH!JlmOgtxvPS)$}A!Ly?adc$pRR ze2xZg9}16!r4q#908G4ihi6jCGw{_CjC?m7OQ5QGVR!O?Xw>N0B%b)}XXBC_Y}LH1 z3hi)A;W--etGXpc$1@hTZUgCgbSQ8$DLo&*?=wgP`-ElgGbv%jAQJH&D89uDeZ-lL zw`)R~iG>=<R_;Ifi{?{XU=Srm{C86q-}CH|$j2vr^IX^2?f8YD2s$N;E!bboJKOi{ z^Dy_%XG}g9L!aN`d$n+>H$j&pv7K3&Q|DIu5Mrr16;2%f$02p>9^f`Y$g^J}1Pwnt z;7XMxcCcS98*99E{IF#FBt3IK95ut;yNiHlq6I;44)kt&G-vgv#fAGG1-PV>ZyT3K zoLPgM@^ER5&FL>!FZUn0Sbj9Bl5zH=(a3mZlj#-Q5igf+!=QCd!P`ek4IJ<$r|>LT zBly8D5x`!WzG@#m=n&{TDh8rPSY^R#JJuXLZEQ0Dib!Ww#GTxY6r({>5do)P+l*jJ zUbL(ezapJOus*xyXBFCYxh4Wj(0jkk<C=7DbuX*@S7;MJQGR@S{JJ#)OUsg}D;Rn8 zb&H)8|C}p=sNT;C1<1)eOMSg5WOi27^b~|bkM-K}rGZ&73x*q!j<Em>zgMn8($Nu7 z?}nmi^L4h$FavJ&P1^QGV6ea!^XJT_06Ezw>vM)zLxCVt>$%smaxhfJMEux9tKMj{ zi7{wmX;U|H6I)L=md8RI+$+|@L*}YWYkzb!MH~GHG7_Cwa(#BZSrMv-i-n<<X-HM3 z2%HaAxWuXH8Z&cSJ$u<dSAM2-%ETY3<^D&yvz)Z{o|rS+h(c{3b2f?QOnO*m^rvfx zpu|BFnz$?lEMOdqiFkA#s*Mvm+6?ogGs%Z(6m-0__f~K4n9s(BYBfEJk!TWvvWutK zddId+DeQ}ZNb_zQlBi)-i#F0P2qgmb`Y>&slgUVO!%yva;W68(wskCQ&_bCX<K!3t z5mWD4g<3?@x2J}$T1UU1#}a53ifAlLDjT~*^hyOd?n}81@TC^1mXUg}fnFtk3~&(` zPu%%6CuwqX0WdoqKtVo6(U66i2HX@Tvy@oF&%-jtm%n@8Y)kYYWdPCNQ=c*N2lbfe z%2?u%el@1T@?+uY8rjDT`M#b5JH;q(DRAjwFtdG;N>Uol?>s}fRq>Bl&|(s%)2SmY z-BwmL{?~)xAks~<a4HRndkLj(LlSW1HYQ8aMsP+j{cmtWYPIr5t=1|GEi8)Kv)8}g z3@MG7uNK+cozsEjWd9inLeRkQaLwoAwsNi0uX1(QJS?WTuUI6&P~ZmNDn+5lt+mO+ zQ^$#I=YH=@(KVvnCR(H2Cd8-cy`V>{aoufyWNqFY*nQf`fHiiA%z31*o$Lsh+&#$^ zFj;qgT;=?j?s2WfonhHsxAXT-HEr!M1$`jSj1y<VeCNTOS8nmWL&|+qW2m8#3?;&3 zh$DT7e0#5q9f5fxX8hnmSwJH*#}J9yB*ZNN0yQG7Ys_3(EYZ!>Z0gQuK}+<9Vux>< zj3mtcPZG*s7WO9GcWe)37(46fwv&Um#J!l^FhU}6U8hNA)k3zYC1bf-?==3aQd#(R z=4F=$X%nv{iBUg2y)~5k{1>^;^lSG#eyA<er*rCemiG@DQl<}#h9^|Hut_$AGrU?~ zlscfxaBWc@!-y@Nh^?5z%j1gsm&eCN1a25?Hes_PuB@92n+|+>fH37mkMn$$1(B*c zw|H1FZ(0>i4l)A;C!aMyq&N*%@{&b%=7RR@-l`qGtQCsptIx{cK&x!c1xu+el5xxL z&?+3Z_$uiO-9M`*%`<+d{j9!7vYPaOX`)*Y%6sIdH)N`im(vi2T<0U=`F3Cf9`4X@ z&{awD@wlbhyY%ws=gk+_GE$swsajkZbDg|a_vc^XIzguuLZDe(90t}X=!A<j2D$BA zCt{oy<wiDH8{iUk$Y89lJ2}%^@V%tkOlv`qA+@l@`(2cy?(R_K>%tb46vq%nDkhvB zvYW`^kd@0xrt`jPc@TEhlPM%WsQ>oU+<$ZA%9t_EPs)ATD^Z!JCX(!)$eefHPz}~h z^-{c)zryp|`OZj9oKv*80Ezw9Yc*hHlFFe>>=~&LKYEUC$600D{^&;f#V_$NY7Gjg zqd9z2^yb<ZclgtshRh`Gv8y^K<%G<ED|x+yT#}kH5d7SK-??ij*~<^o98s|EM-ggO z(Zcvh-~Mh@Nfre*+f*)z#W(u9g6Z{6Be}bl6fmPY<@e4YYYu)ee;fJ`CnB+TzD2C% zO7vXh#R?h{8|!pee0(jD`kMKr`VqQVY=x|;p{mi>jFZp0(Vaz3L1}XgMPwO!vnzga z{F>9B^3+lZhDl;@x=dyO^Tz$#Ors5dVV0Qzv-N#Tlln8+)-3392*oSK*7rgKG7uRl z;#0cF)0{c;{(s?c5d(+ABH#(s&gH|L=ERCOQ>;(7DOVJ4K`50DPt4R=hz_h6qhK^& zsjW;o{;Q-*xO(4v(~~7<<hU#=W=Ybe{VyWmM$hGyoL-dmFDk|@)x*v0Hu5UI*{#4? z*@(|1<uRNzt*bSag2mFMZ?>BC`YH#Ob<lTiAZxSk(Add3je=K;aAUJOISW$7u&l@V zY({Ha@)kA8cgno-248qRucc{GBhXne(#2!~_oMFdH{Z(&-bG{q2F?=mbAA*=EwMSo zc>xzct+-gC-+}Q<Ve=08*Ulhz0s}LdecLIas}*M&dmQCYdgkBX!iu7w8_7(AfBQxR z{nT5nuYv>|nmsRl>MM`P1}KU&`*)iamOTy5t5|VbEgUXcW3#%K=1P!pk@!!4l|5@& zF>29bOSxN(K0^RRZBhd28*OeN5QMC%li(&sC6^4q6G9B}OV18ns@)oGTOV4*8icDw zPc~0olKK9t8(+uJ5^0xLMNRwTK3Z_;7amVa_U|)1RPbVa{=$i}N#h)&gjXJ_bdl#( za(>UVxlhMf4Ftr@4;+;{o;{(t{hh$yY4S}^kQ2gwk`sDcLZQ`fLZR0ix%`j2p4w~2 ze75zY-~Q_QYiLJ8V0cwVsf_opq!xS`FwC#rm+^SBFLOuZ1h=y6vDr{FV@_xwlbUB* zBitr_A^tX4{<RfTbZu^h<vKS0t+{aQxpI9<o~khBiy=5bE&0R1Tnyhw-_(+)Kg>P% zxn0~2Z(Tdk6seJRqvD9eZ+FvCYf+IWDRz5%$Lh+-dFheox^i0K_J8P^29Zk^-*#JX zmvMV&pKe|!ls<X=?wY}-kH*zQm8qQqoI*lN`I}hX=r5<579BijQIo`(oxvwBS1*Ov z>((J->UG7`ZYHr7!Ob&M`vxDC#yW+cm6G}v!cu529^#yMQD5wtcKoT}9vz$fR+VQQ zkgiItXBE8`1f{eiE{{7?v!5+LZhi{xJx{`Ww|U?C=d}SoXgnC4BY{qe+Z-+hhuw*k zJ>NMO;t2F|y6tGRAqIC`mjDQC2R>jd`2GVdpGdWrF!0@(bZ2cUQrmrrq3gNli2q8I zs6|WW93Pk)`yE=y7T%L|?DO<?dgtjqHfL~ygx9`7qU+rFvGev5HC?ag@e;!O9wH+J zMO)E{P&KgK&V10^Fi?(I0i&x8m70!v7vrZ!7voRfa{pUY!}V`Zx>nm`tw9~V;w41U zp!@wWgMMAc@!6vEMjt@zfL}j0Da_K1l|uLH2cW~;l1a%TdesYTF@c@jMdRxU=9-7S z{!-b+xF{d_{6oori}HfF-EaQ(+q+X94`UjSoZP+ZiPXul8s%f;>jI<C=rHAbaFgod zOx)N}Y~)-VkDpT!uA3ZRL~^IT?c8lu>jR&BSS)!_4VkV)^$7)sir9^p<Q~Y>o3Ro# z>&$uzf~KfPWiO_%JIODmoOSPYfnQzXblWtP?~C}D6{F`hq)NOl<uXVLdJwx1cACuo zgu`d)^xOLd_K0&iBw>tHdTn?jdSOPV^-INlgwpwby87<UggqOa@`Z!E9P(?Q@u2}* zkud8&Py=K>Pp3QeX+KNmc?<c#1R|;Y^GQ#L5)VZ0UD6YQi303ht8$Yc7Q2h6hKQiF z0!OTq22IlRP*IUnQ!M*-azLK*V7k=d?j`4|GypLeqHJZw0>L$4LmQO2>wjeooxl6) zkgHe^L#`PD!#i`Fk&(hPyQ|+6T2NIU&=xnS#obr@<!zDv2yQ_Jm}yh!sj<Q?f_dh? zuqr`dd$1ytoUHTx#r20+!!#+kOq_f!4#su7!~^7IXXfqH<Xy-FaKqzZ4K5GPENnq3 z>|jzy5>zyIRvc=|m2cLj=bl$X0~e*eKvj-n(tZl;Nn#LON?+&Lt5})i*}X>K^J^N` z(Y*lqy<AR?)NRPHGEo;q5{4+pNJJ)_hgwDorNuNYws$D&VY*d^888MT2%A`NZs;&) z6{{RIgp6kut7>7SQ1*{tf7!7kr8uI}Sae^`0f6LMB{9VQf@%%pDq2|Vy#Jd6%|7TA ztys-nArf8!Lb1ADHV7ic@`%r;H*G(JI{txAD=!Gh<6@n3B(4iH7Q>s_SzRn-P#*1{ z6<VICfM0}AIs|>XnTQ!Y;>i!|nBsEEZ9FAz3Nd=Qh1AbpaZbJLJerFkM%1h<(q#Ub z9)SEaJ9h;NSP*Hdpx-GvAvbdQl?U{1@aErO(Z$tA>W{1C`BCm3q;tnAua!E#iR`Vi z9UnDvftJdS>)hBF&^v4UJ=6iOe6MQh{ei&nZ;-$+<H_O`3j!Xo&K<UBoWvV01gAzF zHPqP7p&P0h-rJzEN&6gu-KaJIJFG?X-PLEj`0H<X#}^M`j=D2u+LpSZhlJ8qLh0s{ zi7JMTOH!{$A2a=md=u-o?Z3O@uPH3lWDIgX%Tj9v))}Bj+7EG%W}zV+5+TI126D!1 z=-`y01+njwii6+#n*U3c|E0?RQssZC^8ZMcM<>9zjG|FfQ&V2Xe+q!*g^Q+D#@P7( E0q_(q{r~^~ diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/img/bs-docs-responsive-illustrations.png b/src/main/webapp/bower_components/bootstrap/docs/assets/img/bs-docs-responsive-illustrations.png deleted file mode 100644 index 77c8f18f5ce7363cc4d83eced583e9981ddbe683..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10572 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 CD!P6E diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/img/bs-docs-twitter-github.png b/src/main/webapp/bower_components/bootstrap/docs/assets/img/bs-docs-twitter-github.png deleted file mode 100644 index 06100f3989fd170b0a9294ac1c70ff460dba09c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30968 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 G{{I6{1!#u= diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/img/example-sites/8020select.png b/src/main/webapp/bower_components/bootstrap/docs/assets/img/example-sites/8020select.png deleted file mode 100644 index e8eeeb226bfd6c14965be7562e1ad45c09940a20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62853 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	DQBjG3$43{KTD0c!Rl#v9Ktn-6 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 diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/img/example-sites/adoptahydrant.png b/src/main/webapp/bower_components/bootstrap/docs/assets/img/example-sites/adoptahydrant.png deleted file mode 100644 index ec9188914c2f4e8e374eeb6b48790da65359344d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 136480 zcmV(^K-IsAP)<h;3K|Lk000e1NJLTq00Arj008<30ssI2ln?Es0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBa|!bwCyRCwC#y$7HqS9vCSs!rvquIhZd z`{sNn2hC_k5k){?47LE9U@sVh!`l1oT`x9ZuVowKx5i+v;n{{I7;qwqC?kX<G(u@c z6Et~ln453+?HnqnQ}3@kLP*$Pv(JExU*FbMPv7pU>T~|@|Gw`(p{Xc}(2w*@*Y#ej zA&D#@0Y$MGQ<$M5645l}`$`lZPxXCCZ{6wz*GHrSf2A4hyIvRuf|StG1*6+))%C)F z{p6AVaqh(8fg7gIpK6Xy4qScH3@`G;7n_?q{cwtx2!%|9C<^X06`_ddcwW+;Jo=<z z7>BRDUP&b2VjRb^jjr#zB=9H{VTNT`mV!5J-J-1@v~?6hBHs@&rWpo5(?@V<&yjQe z$1k1w`+Gn4#2bF~zjDH>J-0`}39;atT~+@xPVB-H3}Xd&xXt|%Ba0aGmg6TBNf5;O zxr-T1P!u^JaIOf^3?V$V@sXr-gkrN~c}?&7lE$$Djl#%t0wYSQW2zVK@EuyAAMUBY z6N)><%5TfevDM)EHTEiBNMkl)iAzNR1qX}>K{RIBJhfPzJ9*;hiXiYm`>VGRFNh+K zWwb_BSYOu-A<asRWLZO5o#H#9L@}h%ZS1n~?F?oFk@Z|h)^gAVwe@*XRwXsZ&;dfE zTxqP<j6#wg$jTw1Y%lz7eNRy&454|UN50vxG|Qk)t9_=*RBeH!$oDn&{17Pux3joz z<GEI^SgnnRG^VL<zh->bU3dLxgD?nPj`d_Yjd6-$-Bzoj>$YxM?RMAq=uCQz;Z|&O zKcaGBXi-}o1<(K-1p$N;Z<`%~kJ<oFarFAzU)4W4&f<+@4<BEeYj)et@DwX+OUQ3J zPCtc{H0{J#A`#1A+X+`!D>FNGq>~DbeB08)AP^-5LP|~~Sx%%d<b^2kJ>PW+31jre z!E)s%4j1SzfZsC^jSozcvb^d#_dIoUt#2UL*MAF*heF?km&L(PB^c*4%ho7Lg7AwX z+M)L`qK1*(YIm1c)<uDb920~{5*RoboC1-6X1OqNy;Ca-{AD^*V2!TP^BA6?AzQH& z<J-NKC?#7Wf59btEb$IbqJ6w8aymKc;R2ZzLOXH;KcIpT`-t;t5zcEn#0oRxQ^TdS zH!`kfGlbA2aAmu>rtvGuoQeZXyL5lv<mDF2BG)y#%{`R-Q;={Rr$Zv*I<{?@S~3gZ z=`^dFNY}gW{iin1u5>qarqZJf%TjnMsqoNbei(hLk)C^_A=gq*Bap_Jp(C0&u1}ga z)?N6B-{06{FzVS+7-ojFfa6vyQ#OMnrvKxCu-$Af&%R&pouR1pTKz<TCNurplcgfh z%k4&wVUNlxw)F#uPEv@AAT>rIMH7al9WOGi0K(M|ylS(TO3wtOztJd+OdY=Jn(=0J z?$i^PS1&gU1DRC5%hH!!Ge@EVX8nlxS~63q*1z=myNiY5&~VAI^a!}mHG7>pFDMwt z1jq}Lq(F{Ov#byyD)4>ZbHl)gh@lW2#Q_w9kr0C8V2LPN2y9QwAGvt?srmCuFMr(| zc>c#6yZLk|0giDxvNl9=nwGPH?bAWiW49w^8hM>;HVH|mT&Y2NSzX%zK2Q@9g8``s zg$`U!sNU#RR|S5F&h%lu4Q$QvaTdTFVuN0{&I-jmjUar-BB2DY_oeGyGQ!h#(m&M~ zoXL^d9J!o|)>FZ9E}SirO9k&FQ#}DNON(}`eUlfJIC72=6^hFXR40|RR24;Z2a<sw zn2xoFk$;+^O-u(Y&%2HV494-IqNZKfm9Ps4{K{Fg?Q)_diyRY1Y^96JP22T6MPxN4 z&MA;wz7rJV#0rWcv>eMkyAd9*h%JZZG5G<6AB#!bhA!3gp4zfi=&Ywx!ha|bwi>Mm zzw}PWIy-;<{!=HKFS+yAMC0Q6KmN(U{+D?XYv`ZLWGAfNP8u7SS<_N^5{W@T$%@cu z8K&)|HQom$MX{DqXK9-kn9T~SThqI*8k42dwX!#}dqj{#hBtYB*0Z!Q=*#31<!bZZ zd+r&Zn%=#8x87+4VF1L&avTtmqUL}VAuHQvSMSs)8uNlI$_Y7<5+oG@KMaWv)Z%-< zoFGSIf`tDt<vD69d$!m4#@Fvz*tvhK(Ern>!EJHxmf*rP&CtFtaNbimL5D`j(7I0& z9(xtXx}hH=H5p!!P*Xg|0&{e9D<YnzDnS^b(8eqd)ED@hi-NR_wLI>&dnOhHpb>&O z%m-apr<rsp*pE8Fcq9(eQIk@4JNTeO@A8>Z25SPtDMU~BO&N$-P6%>AP`8EDp+@*h zw}Zv`kFx~RnL&nb2RQA6{0zGc=#+@zWe^T~J%0$}Zmf|>z+hHQ_N8<Ekd}O_X$AC= z1>_J$6VX-#N0<V&&v+5P(Fv+;D-1(b=2ejnNfeTAhaxmJWKv>xR+|2)O<}n!LUI!s z@`DOMus~tcq;)R|2n3an5cMApgoug;N0n)ig}Fqnj&>h>W%;p>o%_J=6|Q?T&SyXO zk$2VC$|IAO*?sKH@y}88ECtOJffaPJedDT<Gz|wR3({!2YZ{iD)HF%Pz*nuVoY1m| zZulAEkMZ0B2v?d31@T<qsvW)0vO05@F8=r{?o6mjPEaw!fn0<%%<-}yCVVeGrqQjF z(DfYCHhQjO0OY{`#r{XpWHrt40$e&oVXRkuA0b6idc1t!eRn@4Dc->w--OWBVbFM% zSOxa<C~=&a8$6JqkPUsBC70b`h)He>oDR?P3<iQBrT$?xA*)&vh|%|KRgr;uqrk!( z8_3uAn->MOiW3>S*X?;}z%+$CniCnn-K`2tQj~)S9Dg!OOe1R*GZC!}`s{X(zsljR zw%My~=>@)W+k9nksXnsaovB!Z+3<K@=MP2yOtU#o2R^TM{RonRLq(X-0zgEB3kW;5 zIm+^i>vSp1X_<b|?WPV%s;Wu!r7GORj6^-Rd=Y_KXF1*paJgmIyAI$vo!}Hc0w)Gw zrnWRa$FW>w*IT_)W%^P}F+57<2t%VEY$1dK84M)9l|lX)vi=X?34P#%8Cl(*?>{VM zc6(jDdha`fMpZ4c4Qk@dlV9W+WBXM~vsS)va&`W~r5*ddTxpF)v$7g;05^L<6<rW+ zL&IaT$UBw+W<Qk_IEIzg10>R-DDUVc%Qzz{G=)8%r0>0_Wm)YPz4RrrNcFlcpeSBU z#OO+-;Wx-e$jt!bUZ*OGA_KAr<A}f$;J#{{ATulnu;h8^X?m1ZP>+I`@x9O7clQ_C z4eOR4zdfP8($Eb$u2np{QzKAaJ}EH0V@#3+Cd<+~6SW-XP)u~bBMO4R(e-+BWv!e^ zCsi%g=~_T3KrFzdQDD-%<O_#L^%S4%F@iwpdN<l3vu%Vd3X41iSD0dwj2t}Zcw>~d z19`2;w<%&W*rg!O#H5-l%`P{Wmlrd+j3lv3Ys=iyd;2mSSH6nQtAfxCT3oBU(~k0@ zV7Hr{Q%9G<sV4Ib;LtS2Wi^q?6d<#7nj4nUX5t$(P*m=M@dRo2Pog`9B8^$m^rH2K z-OxRX=CTUrS+Kl}h>2r%&#${DH-)Mr@^mP$&&Lq`{({h1UT%HmEAp;gKg3UHI{I?` zq)01)qttt1&@L;h@7%LD(jlS}uiSsl#?3GMNymPrWBXuOCbkb2N;^Vd64kozR%)%D zmR_7+Z}MDp{PbnlHaUiB>n6z5TD$AG-Hlqqb;zghe&`dQIFZlF1A{qU&~tgI(-w+- zC7O<WS9fg#l&9xffDs5A46KS7nvSz^5QN|ZDJp_UBXK=82`&hHqu#D~j$zv-KocM; z$>1f*m(Kj}vrje$$Ay{QztHPsIL?Y9>f2+ISd={KTC`|C!lbi4I3Kj=c`{KCQ(-sS zDu||%vg>;1FV3?p({6W2ge4IO1IJc0FtC&a1&bQTxNOK$Zm64!&VdZG3i$=%TcjJ^ zR*unFIk?~UCn#-u<hS4xAuba}N@&)lXnpR~7xrIs$H>H#<5&l-zG~sb7Y7EUQ0bRb zkY?O!dooPzTj&Ukm@8j+R86r97n_*DeS-!=V_Dtd*lvAu0UC%GL=r{;L0Odnu&uTU zH2yzNG~h0Q$62;#dFu_UX;PxVX^ge9sUKUVmJB7Lu*?vOdY<yc_ZNigfAXHycfPCm zi*KQM{)aY1;dJZv<vy`LLVnkFv1LcAAI=V<%|=1o`Ll|8Qf6<roQX_+e01uzOm3&% zo3VP+p}!l8H=VxJI)5p;`@uN=45PZRzPhl!>_wdu=T|PRE{8rkJ-b>+F3nv!8=>t+ zhdXq*kHU+Igg!bRiqcZ(402);Ap($#LLW4zV}bHC1K$VckrEmxPt5Y3>-er25tJ?r z#|+u3NJ@gn42nX}GaV~nvH#TLzu#^)8P>hwML(a=USwNcKq=5fT;croh;)dwCv0El z*;$IoMp48B7j3tM)E!jV1CjyblmJZzS5LD+5F0Rt6MLO@GO2)}LcWgWf`hi>_9IMR zf)C1e&pYqkmS<)e>`+(`DZpVLljJ1ttF||av%5&ZqwYDuyjzaGhMh00%`fG5y@hzj z`Sa&SM@KI$+5M#=?X7}c152EWo~paut~MPaHj$IP=0at)8iw5H)F{Kx**zXnBY~#_ zqOMei3D~?K7|Jn*gUVgPe`g$Sm0tv)^^Rdz+s<a!pKD8c2z(r}^z(Wk?)wPB)jxP= z`Tc)^MWOb$f0w%TRyLdYp?pHiHeJ)uxFjK7qfsx8O^3}(y@gqB*In}D!Cvj5gtR}5 zi<3Y+fom&q{R+F7P0O;{?u3d^xaHuqrX<HkCMQN`CWZ$mhjYVOY5z8U_cnWKgxNN; zIW*YDRP`r*l9S@GKoQut+1RMp8;xp1?}6w`Yz<R^RAhlPA_ywavW%{6>cD=Ik_0FM zH3_oD^J1&MfoTK^YbyllcoZ>83BuzPeX(Bcm4=G_!*BLIK~1R;agL<}P~ou88ter! z3^2#}%#Nsf6bu+*@|d<5^HIkeij<uUwgcaV$j;@994F*+SxwWDsdS~<)O)?8DuFPC zWJM>&T(`)YM{vGh^Ueo;YJ>lYKI-^Z35W(9b~?jsiW7s!?Vcq0_bL8g(^SXnb~&Tm zD%aQD>Cvg_zW&j3=gML4!HJP|6nYqiEVk?H&UN81ivq`LM$+)rdtTa~55N5Bdz*D< zdiNO1o@JPwi0-%aG6#AXMV4tgZb(t=T08365&K<772v~zA_oA65!G}h=t=<-^t``) zzd+b|=%M*H|AH_y$mVj^*|Xk8Irr*U{ZKw(6ri-)&r32`hswtK__pn&JGcDBhsIy` zem39NT0N4@Tpvb|Dg#Kn6y<Lf`+Z)JSYAj8{y;$$c_x=iNP;MHd_qW2Q6i~j1)LN4 z3u<a1uyH!CZQltNE<luyD6+J`pFMq}8yrGhU!z&=b{s7^$TB{lD+mb~!npPi|HH_0 zO+X{WwVKLtyr_5EX16Yg3W;L!glmtYB=MF+`Tk^HQ`O;2{w)zn7~Kl!ST&geyXe@K z?>RW8MCzGxJOXzo6<m5Z-FS#qjEF8Utj#))d$wptIhv*t$v&17l|%wG+~tM2FeJs& zz<PO8l0+U@1Hpy%kha6=VIeq5<;GIxLoT&_!Pr?sUqxIN8cLw*-DY0M&<W`X9dwN7 zTBk<y?emPcktt5DcE@Kg%(g2JQr%A-7@4Dh^&-b7;-%o~73Df0c!7`|!`Dw}dnuHs z<wD>*u`*vZO_c3pd9lZGdu=O3kxPRDp}os({((8-_>sW=%YyQoqw<);5lx|g7q{;h z2$$dSKbogcVn6U}wI~dYb7yj|d=;0^|KLBN1EwtqL|NelS-0G5E=vWp%SxrIUgCsC zbMtI6v!6mVL$h$lTkr@1UyxJqpxvywKHMPY!+6*L#A4`!K7vH+dTEMYV!29l^T!-( zmuIIvI~9eJ-dk+<Zrr}>_VU`fhaPxf_ud;a8MD(k-e?bi!V<W6Ji+%vKthZ|h6SOj z_u8VY!M|9Jk0Jud1X#v%dKkgCiK5)cDNW*I;{7C|C!?s%axn+mmH`G5SQH=xLKloB zO*7w&L>h%UP7FKIB;9zJl?}x7V^rbIdjjG5#K6vwFs;hG(QSxIGM_J$H&&OH7J)?k z0P(<&{FcNeMwB?{H5(#(32CFr`j;*{2RGfB0q!xxBq^E*LB(+xlE^uA9yMDj@(|7N zZT=^`zMtB*%`H-&O!<#Y4s#4I(ScVBM=sDe8rl@Lnj9flP5qe6r8YVj)>`KmHXAeh z_Du|XU%UHwDwi(|0Pm$4Zrrt6EYJC#&0u;p9#D)J{I4!Y{=2Fje!oD-5A^5mxFi4C z*8l<LU-O#Wop(yxw_#cS!GA*6ak|Zo&;!P>mM&kW5KfQnDeQfThlTaIQw{x63)4+= z-S%}ip04HqNTQH}`1U+_<0c|hJa>#`w>XCSW*;*oFl6-@BD~{X%Lq9_@?kjQdt;6@ zVpzN%k4IR!Og53&hS~F@BVVH_w%r}z#0*9zy)_*MXb$MkbsaTT;6=GzFVhSI=Ou{p z9Kc}|_(>K&p2(bo6C17FUa%iC&8LTeS)9t|Pn|po8nQGv!U~FGo5c6x8p$(p7<OrO z!lm}2)(HlkLHrJS__w9()uj5#=JG7o_Oo)z>{WP9D3k_(0YR(Vu17JPZQF{>$Au$0 z2<1aT{XDNUkdzv<A3RFlT(ibU*l!>#Qw+wQ?bckCS`or|o1|@ZFF!aYMqdvq_tFtB zD`}bv^e{ai9#|0%Qwf>3I$mJz8@of`l%w-^SFCxDvKc;V>uFU}khOU6Y;9&&f#Z$9 znXqhP=?$6{2eJ~1$WoIC%)c*i{jfn8v|Ge5Xpr?7$Fs2*h94e=fBq0a=y_q_K!Rr& zh<N+hv13mjJ9_%mg{My3N8_(fj$b42J0i-_y-v%lwn=qUU-km8n4O@vz;~tc5r$hV z7zSvoT0qevd_q}0?zu(J-G;G6Q4RnKGek=bn1;D9zaUC-GFx<er?TnCwQQfFuBX&? zqpo!fHL20@umFI~b7)4?QhCelncb>m8E|-2%W#6^I5hEAk~yFk;+ZMKcp)bMZoMsq z9VN8%rP;+NpLoLef>csVXkaXpK-oZvTXL6vnh=Q|i3Ka1<dkt{@K+I=L)AaQ-G5N% zCCXX%oRDS;R>08=2ggXK64`7zoypf4?RKk~)Z*E86eoCiC*6FE&59HijyO;F#c`Et zQMO58hGr<9b3B*vlfz80pTdOJ=K{;ZG}zl9<g^uU$2@bLtqzN{i9N>+>{OySkl8+8 zKGq0URUwNhmX5QYV@BCsyR@~lXBOs+(l8>v)o7IRIRP_57)5ynRrRQCNBoZ>4w>)M zaW_Bsp{4i#xtvVLG2=La;~ZLAWHjxEF<6gCK*EUlPS{`Smqba|O%kfI^zh&~L+oja z8t2r~a_f?TTm8xLrcq(Bc;%gHGJEA1Ta!GUt!ZU$-~)RhjM|6>c1_WkN63pOBgF#% z#4=lh17IPQOPgnByQhbfG)OFj41^R$Sm`S)tuDV{ZgE#CrDs$YG-o<j3d2xuZ%T>^ z?>BpO*D<q&p-f)ztgkY>L43;W9bmXj6g9VIv4ygds<*7;N1sS%vbVnIh3)!!b!|S8 zDro7xAV^ug26(n0Ad;dumc^r9dSXw2_JAg4R)3A>W>I1XO+||HkP<vhob9HyOK*<^ z`Tc4t4Q>sD_sov%%S)A7+s<Wy$_OqE_QKzyn(t&&6H@E+_TV#il*iacw1*<-P*CTT zi;_u^u{(%k6S7$MaCX`2uX<y))-O;t4qEZ}2c|+VEas+25Z0|_iB+GjCq;;XelV?8 zYHII|d+z(pvFb+O%%06-^Ig#y%84Dv$4Qai+fUzj334IA^#9L<|I*E#pLds6>Yw~H zCWJ2*nN*5Nr?HY?vsqxm$aR0fPz1!dPEX)D03x`lOg59rWK&wEII_sHp3&PELNZ2S z%~<0=`N$J8RuwVJiBhw=)@^Nij=e>IgaLyhNP?(<e-mYi7dkXP;aK|v(nlei#1N#m zrg%mWDT<`JQin}j4wXRmwQ`i9@NB%efa9|1RmVV`?tpID#Zr-l12r~iaHW`uD8%zZ z=-J&47WhlNbPObgZS1w}Yk1L)q7dR$N@yFE`eWaCDBo9n!Ob@@lnca+84!j#m_tGU zrP#JD;Kq%$GG--SOqxd9=+qrAl(ILte%7%qhDp#`!KJp@^iYC5Cxqwh_9Z^iPjT7u z`bwv=47wZx{_F<rZm`uOz=U*r0ozRy&`7u0pj{1j+iph2WrPKmi=u8T<YjpX1&%)# z99%)W8`3sf6ojw`vigcggO&mKP4`{vMb>ib49`f<o@Ib3qWeN$nwO}xc843AX2Os@ zw>&ys1O<WuLgf;a?U8af`q2}m|CUS`bUMp#e+R%!+P=MW|NV(WS4UnfpD30ELE8BA zry>$=e(1wfAN`2DXE#Ovz!F-#ekBOPcy7KMG@32nM^Qi$Mp+a^3W=D$qBUJvR6XKa zfg$nnXbM~{j;FS`uH`vfIs3{4O@<Q~MioThB_Skf5_l0E*E~V)(va;Diy12Lh!iFR z60icF=lgVXAkvjY@*ASsMvO2zeXLjCG~Aa6Qo=F~kP5sY`+g7)i$wt^79(>t3O|dG zk5Ip$zRLED!0TX!4?_=7>Uq9l7>BMo%(JA|?Fy2t%Btf9f~Y?HwJ%pH<xH+HG&1_N zdp>{N3vO4F#*>ddm`rAD$4T~$G5CPhEAgxo5T{W$SWXxm*b%E@w}aL{xl~E-IrQR* z<X764A5~Hltcd)@S+RWqO9H_;(#1#+LnRe@ZkyXy%;>247;*!|XGGaD)+%N&#Ik;u z<n820!dZ_3I(l}A1Q<_bYWk8L4+HYgDQFUk3J6D<6|^lk-FW!3cUSl2rbepg7Z)#9 z$F~>so)ZNTy?>Y~cYWJO9P_*bQe2aclO$rl_c?L@mP`l;oO|D&7k~0jVPK&1&=F>9 z1>Mu_?|I_ngm%j<)en8R{Qvw#{<W`VGwB~p>p;jVY8r$kFxcj1gJOifLMhwVhv?n4 zTA$u)=kk4=#8s^o4QF^(@;p~c#HCRk^c&b73>3%$#I`^d$4lV*R?p_xhcS-y_D;<4 zbi6*%FMIP1zhe14i|B4>0bm)L)#y9}OvO7C9<cOr-!%nslcE`3t|io(=Wz40flCB| z^F^Ku<Kb-1vr$61Pf&ZHf?J#WL}d!pn%-%`0YS31J32V*$?5HyD#y#LB*hEqzxrSA z{lK68k*2BJ_Us=TonR@ZUa85dk}8TU2T&E%R1%yOu%)K)eT5>8#YWTBQt4DG?SZWf za8gM%n~li3JhtPd>3&sVzQPGM!v$bODLz4^^F-u{Kv4;XDGagcLQXuT2Wpf1F~wS@ zqfNx7INC8A6rWZG@P(R@@#H?1SkJCgQjo-GreUw>dW&Nv#6G=v648hbBjlmBS-P;k zBbUo2f+G(<u({`eme$x43nP<-NMI3%(PlST@5E#N&qGB@B6MX$#PTAJ`Q9ey{9C4! z{LlPM_t8h~xp_uWf_9sln!Lh<SEjZ5wVJ!UOmW=A``*PB`hIZZgi+XORWvQdu$=3Y z$<bkumzOTh?%A`)agg4t&M&N(hS5JckxyoE#3GvTf&?m*1pwlBX;b|3^k{gzT7ktp zNGD#<122ggjpZnY5)9kxI!%H@oirmi9xVtWPeAghpwb)-o)pt<F(JFwOB>}uHT5X3 zga~ag%s&+K18bH2%jQ5XZEFc2UX{h)5VaM^kB&ZMnKP`eC)9+RE_rs__oE|69xnD3 zuY18wa5aX`c}^EmoaZ{NR(*A4{nnS<Y4i+6@wFkLKl8$#RV~}IyKmef;Vhy;66<Q@ z0kxaXKz|-G5d?qW(=6koz?#_6LFT1^*+A$JQvN$Cf6gPK6@_AE!f|L(O@*}LIE-i< zV>Jh@RaRF9*Z01qZ`U>GsW)R(MO;29*V{`}dQ#dGJb0q_<G!l0elH$%d{$>L43A_K z*<0FuYbIypQY`Y?B)?vt;Ar!5W9;gyUcPYYLyz6Rc+<;@iOZ|UmPW1~)*oLcvvmk` zii<}po_928IB4$xHJ+nRuA#b4D1`p?K>W94LataSzWL{~rINgDrhVaJP%d97heq*8 zme=?5Zz|n<bMcNl)K|Uo2RVxkETO44Q0TgLZ?jU)7Y0tAIC0NC_Y4mYiz3HxqQJBB zb91$|Cdi3S*XVS6f*`|_mhC8721p9hToCviNGP5Ud@r68L+X-pJn$!ia67~JEX8%4 zdMB(g6w3fcIhF!$L?p%Z6@<|UY#J5D6GtPD<q1K<W_K_OyS&h%uqdfUA-_g^s?pAK zLO&fYYnl6jLx~SQ>lR)fbgj*JqM4Q!<<y1q=gqFO_t36|_M?=?q*Fy+P<f8tvFE^b zH@@`dTVHzO$s=FA=Q9{g8V;(fP0+cQXD>E86}_R?%2nXHcC(R6WzL*EwYIhbKKbJ5 z;~Oipz)-EW?grxQiVt*^PN$z*A3xXLGc<BTr8jnIb5f@c(TQs*<si|nadgaDkKjzc z<UQW1p>pA6eVOe{=Ux<96qDdkuhSINLX@!9H_#LqMjW|YYpoDXNAbcaiqK4Kp8<Pu ztHcxKD2j0nQ?}fcAUMr7u)BEmj!LF~gcl6J@zKi@%N>8U6En>75rM#dKGH;VXqd{V zI4hxrI*4a<Wo}QjwQz#^UO~84-k6<VDCF}rO>b;gPMta1Y&A=T!j-=sJ9+Zb{QTJP zFg!kc@xsNqSvW&d)9TIUlc!FCN?TwVWqL+!wHo(+l{mJyxrxDg(RlK`?^#SI$<&mL z(3uP81wpttH^(xJBuVg3+i~H5Pd;_3Qmqb@O7Qsd^77dW7oL6UZm)OzsZ*(BlIJ*h z+2!S>LcXuOxmj;C;8Nl2oo;t_VII?1Q`K(`);o^x+PnaOW1Fqc$msac(9q=M^w7|t zu3L-qXU4`S3dNG|`%6np)oRUk{n?A>HrCh6mFoKXM!au?BttV=wrg3QmP$DmqM~_G zTj(|?5jBn|mqr{BTs>$dB#rS>te@i;MF1zv1ih$=LrJ7nL<d{Z1MbI0SoQ1~$6{G_ z1IL3Pw3=K{WwYH7l*BPf1-BWRo!x$THOm=rYRBwy91k>p;^?uV(vUFZtTZmR%}U^T zDW!;6L6j6NohUnJDwS36k6a}8s>b5n-15q-#-~Gvot-`7dtq&}SzfDf88~CFTdUP; zZNrW_Mzp+C*{pZ!<yE`eP7WZ#Y|?>nydqX@d~l}7F~qQK8_ty!aL|zR`;nK$)CHvA zLi2$qYx~X$*O~6npz{@I2AY)_A391&7hSH`sxs3Y7t)a*SC0uzKq?Rx9<aR63LZn^ zYOK%soXD_*>l#Ur5Ip15^kOm3c&+1K`1>={Bes;=d#RF4OD_GqoPrJA>I7(C$sZXi zA&NP@)LZM&A{zq_{^W+SS7b1vzb85R?)Uxq$3OWG$L@PzYGUHA|Nig(@*^Jsz`Xud zufFT8zxl;`zw#UZ<995_zU!^O^`_Up{=eV#yGtu8&@_MZS08{k{@j20)qFNv>$E@k zu}|E};ES$ZeBEpKQmOvQPa)H!E$eOXdH;b@>8-!=U*7Pm|M^oN{^$oj_R)l*y!)=- zf8`tB@Ui#*#fj6We(mjVmnG??FMQ#9e*c{x`kRmc-Df_-aqMe;^3LD;&9^}={p^>% z_@-a}#n1fB-{1MNmwolY2mY^jyuEgD_TC2{c=YHKzy6EA{L63s4M~(Lo15?Y?caf` z{Z^uija)>+kOqqr_$N<3RV<bS9<Q#JS6AjF9(tWnBHp)u*U0DqaJH(YH!GWSvlj(H ztk-L6t1G5y-1+L)>W2U1(Z>L>)6)k8KAxo*ddb!DlIt}rQx_6gP3KyRR(+!q7g3Wr zjF7GC@&N4(obrQ-BsD;@VF2M6uP!sVgy4JEwQB>(?7f_<Bb1iar6Ih`#u|aw+lpx( zOlYAW#CyRgs>ZO)$3OJZY^qS&A+A==r}$h*k@e1{Zm*tT@>bOAcx6svQ^j;5k>q6| zjQsqx#su=r#6gJj5M95zamKX+B!w=sY6Y^Nyp<M^!gq^`;5n@z;+;U?0=!srmi3jZ zhEDA-PCmAP=9An=pB8Z{NQq8Ihg7z-x)yRTiZ;kq*$=a0oflqy+uyEy>;dt`W@O&x z-Gx9fC<5Q9HCIdhqjR;DffM9)X|57)_Cgr4g+q!a9P0?Y9T9Ip!+BNVDFvmYjk?$K zc_D@-x6~-PPtA22A>z=!k@@2n(_uvapqByu>x8K8ppxou8%iNsYSikNo0!|0*#jJJ z`{=5n*eaf_#CsTgr)hNm3_fdH!~%Q>k6Z2bPrc$NKKJoYeBmqiEUqkn^7EhjtzY}~ zPyEGSed3e<uu-kBnECLZ{rNBb+?#&)kN@v|yLNy2BOisN{#WmQ&yCYFt1Bx&gM;sQ zJKV+TDZg3+B=Ep{LOcY=v0PGB-}u_s&0W6yiBEkJSofNP2j>?T0e)ZlyMMU<$dU82 zm*5(H<>%l0w}17&KmElo0Nug6RyNiV$6dKFMS(CifH~nf?M`Rg)YNA_^4E$izyFWl zedmw8?AsbD41I_JXoXU#@ACY)Pk-ut|MQRD_WN(Ysoi{JWORpRS+-^9ow_Wt5)Xos z9-ElF?z+RfcWuApj+fm2qTBcG-NOS?BOflwGR<UG5EBgXaE}8<I$N!l9m}k*)~znH zwAe)0mE^G1UhlLGH{{!`$x3;A-8@r?PCCBNMnWvj;su00%XS!ftlhXhu;Y<NL}X6p zsd&|nr+22yjg;d#Tl-ps3@beP=o7>vSKl;N^UJOS(ho5fQf1M>X4#oFqN*e)w95ya z%@v4CcZp&<xEpZ}2Pr{GBqX^TY&u#K3(a;-obBxQ6p~0RsOfdWo)^+JIk%EY&r8yx z;Ys!Ofyd@^>)kM~;Ztkj=T15gTyj>sSP~eH6Wb>B(AmYWcW-@k{beZ8uaz3F3V$sZ zbxsO*9(8{S1)Gqbq;w?uD`tn?H~nylI==2~)Af|)D6S{^A?tZUPtR2ALzm0Ll-FO7 z`*~VXcutGg<Hi%$1-jAlcMTtW&Gwx_r3Uu;{7ipUw<YR%0Ky18=OX+7u}rkP2nryN zyw=>N({(AH*#f7F3JJ1rC@N}{AAT=|nT<*%2!fHJVGw(_-uMDSNG6rqwQYMYlLgf$ z2>jI8`1Ir?=snK^DG^+M`0&Ko*rz`KIS9}lGc%Z`r^Y8ZkX)UvJT~ra)EO<GIJm#_ zxi7@pmw_L=1ws~(b7=onG)4dRyZ-Q(-uQFyWT(?rWMy(}Y;1U>*V7%>g#%u_e?K5L zB=Lu6G@CnTwpF$O3HD5u<VTMk&1Z9X>oz?x3F3BYd|VX8=jJL(l#@)n^OC0}k}rG7 zZL@QD;c{tn@yK=8Y?Gvn>r~=$TSWVQ;5we5;4lnrqs#GJ6qvcJ+Fv@X_qv&sa{G&J z1MSz^tf<Men9fo`@~Q&`FpQS1iy|&>aJgMKgX57^F&ViH!%t{QT{o82y;O&{a~JL8 zBU!XV!~KNvLMqs*8P#ZR-0WSW@ect(A_A%f5~xrdydWy5(b~&#%<yQb*Xdq3bK$02 z5A?8j?8#D69g1RA7xWhw71j16DFQ`IM>HD;h!^+>qo5J5!qx58x%ne$ZNRjflBOyu zwwloXySMlG{e^YiH9HRBL`+8>v9Zxgblfb$n2MsdF^I9pVCesN-zrGqXE&g~nek-f z@Kj$yGLNs-j(e|8t<<-V208b_?X9=nqx{9={4b~Mm8ryMkuxr}JhWa%#l%a{A3R)( z&W_%c_Ew)M(qJ6Kofx6E<$=rg2<CYzDN#|I#Ou%*(r&p{--~DVoj(5f+VBv)qyOT3 zZGa&9-wucIj3okoJ&FfJal8ZCmRpG8dGqmhdEdeQc>!{Rcq%!+<xVZ1n#sAt!vhEf zYvuY%7nF58F5~zJwEMM_2_&gUPnAQ0<E3f;N)Upl%B0hKcI-HJ@lyO}hH<Y{IJf8v zK%^T6;0GWFh6b$QAO7ikj-PsJdSU`z04Rls2Sb4R`;l$S`*!&)v+?<_EBp3dDHQ>_ zKJ@XA|Kt7lL%IW@1<zcyckg`<ef>qZ+;RmiTl+X5=y^DJA(#8q7e4>g*>e-4qs4q5 zVBR#%|Mb&8efHwTcudmw_w3vWuw2{NNGDV9Oi$OZ_{M+wA=OmhR(&OIH3|hvB0V^Q z_U-*SS=pucs!?QbZBs~HS&P7Oyyw{P0cp&Hgjj}Y#(NneE-seFlEM!<m~IBaKq;}E zlORZa3-vB6oNUz-5$h^_Lyh${$|zH*v6Yo`Vj`W)j2L>#DIYeCd8hBRBR101HjWW} z%AvL@6k#N7T^WVw5QR<*113!69t9N>Qm?pladmP2?BPSZg<R&|Cn<qbEQiD;4ub6! zrI=n$<*R|f1|GY$Z4-(&F@fvkLk6)@TA(EJOOJiB)zWW1bX%|1HEgZgI2zh#E?t&) z?wM9q)9VJUW}$85j8KDsWN8=EK91My$6*;$@m5_SAuyLV1HI?W*ejIY8N%!m;=a~? zLsDp#hQl%Mt2dbMdLZ$R2iV^(co$XD`s?+(2$<0dG@71I&J}|~iyBd)DnZ|xg^e){ zbm92~Y&_sIDbj8{wVeTZnh^EH%@V~Qr2UUS@eTaaJD0{XmCNm{${W%D(e!LMJ^(BX zuM~xVZaqYM@JU71j{?c@B)Be2hcuv!fRSUiX7j_vgwH8~y3uqW&L-&d8v(!!_)X>g zy+bmh6TZH_p)=(U=~LrvINSgo8X)Oxq0%%rI=(97?~**eU5<kAYqdK7ylTC+HBp#- zmH~Zc_sh5yfW&x?yZg&u0ucx{EFO{bgKrI+SSCL-%nuZ3p5_Jyup*-%02Ganj^1*^ z4bY5N@V0;V?!7yAZkw8Z&h+T52VfUZpF8)zKKPd}y5&~5j7ygns`WY{QLSFzn#>sj z2nS33_df7IBB6Y@0USc=n@gQW+32=FH<HM;t(C>OvSm@cJeA62m1IGbQY@bc!+1Cz z&hFT{=h=bpftRG><qq);BHWJ`!b9j-G`7P)^9XS~6Fzl<Pf@n$xhT}Tow+0W+9|uU z(V9I*D)TZbi(Gshnj^K|_T}ZhtF3C8JlgXcOepYz;<+x%T#DynQ7-YQdii#vHHwe} z7oN%~&06o?FMqMuw)3Nt4_)XX3Usl{V4tNup0PXzywl9u@)Tu8Ja5OHd8La81#%G6 z0_|tgYN|h*(tE8Vk36`xzIOWbH&9US2H{4n-m0&0Zr|m_?JJ#W9VHpoXDR!i-3Mjs zDWXYC-Pge0FbtQ%#^FMjlexP$-mJGq(CFA+?xR<kpXjlPW9;ufS{eADU0m6B$D`v1 z-%bD2Upv{CW#1cFhE1g@^sNPc42=wrGJyv%4N<E~)QuBpJjb|xgehVeB;rT4ByH%x z^R0aoi=l@J`ksdfeZu)6C|!z2c3Q0FwWVC{;%IJdXTH5JZ|*2GM+Pnq6)vi5GYtIk zeslLIGm;Aul8z|H@o3lMgAfu26%!zXcJ(vc$M9g920;1*ZOf5lu4G$!&#<P8{NXWd z`%zVohBR;QR6Gv%$k{c9y|OF?ZSBq&BRP6*BKdYEY_?k$W-qn79cfF{0re#mc?)1Z zXhPGna@j0cIC$W=PP^Uy(?59Ejn`iLZ16nOZ(Ok?jFe~|V+nYzfLwQDbMs{{eDUjF z{p!2#`LgTA1S^2a_@;UU84OM@u4lUNM;C<gZ~W(9F%07yk3asFpZ!nudVRfIe)Q<k zdb81JwLp%71U-D<z&qdjC*OVLO1x+YkuY!q&$Mll&SYdc9R{uP>dMS^GYn}_N<6#L z1vg1af_ex7FW&jZ^S81Oppm{(X@}H~C@`7Hm>B_Hz{(agHMyhXJiv=nC>#vq4QEw` zsY;rW#hOj#U7hPX13d3pVP<{(TGu{r=N?ZBGorpr;vPw)FT*(z>2_PUMEH<tP1$BD zl{?A^j^}S`+Vl-Kk0iKGKR;NB9K$6te`Pyhily9$$91RQT2V^5B{kFbFc*4EMEQgH zp)Y^&#FxJEwYz@vt@+%GUwX?c8l9SL>ytCW%ox(`^;AM`HN?y7dqN4(ZUdZWgczO^ zEXQQO(^z;!1dKW)-Jqhek~UaO4Ho@Royvb^`7N)X{!@0;yJ`Lpb+dR*yRD?YaUU}~ zDGpEPeY@*S8x6L&aBJ@a_q6{TmSvWJvWUm$!2$MMx@SlEEDAluh&Z1_<u1KggTMoe z0Cq>n=GFPfst<mdz2)V_q4Y%AOeeU1Eg1%c4Fd+6F0F2IV2^o^fmDS9h2#=pmL?oU z1d|dhzL`pxiqNw?PLWFqF0IM+miv_F=Uh9}vqH-eZI9J$@!C-~#Y3tM!jLpgYG=XQ zHJ*zi#^_WTPJnK?Zj8yu^!c*CyPu=D)S3BmRYw^$-anR(i4<iNR8;8;m561~GwYMT z9fWs(`OB|+<*R=24R73k%S|h5Ynqw>s_E$ls6p_4DJ}UY?|)w^m6RnZscNg`@-t%f z3W_S#O>c|hA{1%YA71+1zg&LLdvCTDgyBI@t3A_PSzm*{R;tx2auhTq=t+1Zm^|Q| zZ#@3kyZ-dOo3$zk*VT=Ufl~hquDkxOcmFZG;EChM2TG;C`@jcpdil#9dgKv6!^PRz zgZuWwYZewSUtzq>S`E<qPb<iTY;6gMS%noNboSD@M{<Q7lT)Ks&(ZZ-ad_Ibbfeeg z1WA-s_zk*L(K64x9ncsCU|k#%_^uPMg1$A8Izh2lm<Jr5Co%HQy*pb@*IpKAUJaAI zfLcii1=h^+*gh~+Uu>*yv`Z-7A&jat_W9mYQ>{(N4-^XL5iKC3o9#V*cz_pc;JuoS zU4~K2<&W&z^W?5QF9uzT$hm8$ZkSt}S?DQk*Opj%i&EmPx_QpD0%ftfGjFc<^{p|I zZF!U!WLFnfo_Ojj)%9O5j3$>hzR{nbP*eLQK?tKK2C{0;NHwhdX7dTqnOSXuX4JrG zNSrNlT1U6&?@-8t^9eYdt%fuurjl+(k#8MX{p#Y#7Z+atis=vHVef@YZ~Kfs;Feyr zFMRlepL=W#?fcoW`+jBSZ+quTV-u&ZbN=R0=S^uIQkXAtbODqbhzlQ;8{tNWEH}xv zTsV@CAi0?ylG)B;dunF%_YR>yT3u~{&D}RPyL#e=h@<|cie&_{69`biW+AnbNo_K4 zMjD3^b|Wg`4k_L+cmYC%I0{{C2O$-C5*$=Y>78)awJcDkAW{`k$S8i1Ah_7J)#;i> zLM8LiaLm9=9+<=LQy50f^xE}UE>W}_MxGsw=Ws!ClKDZ~cAi{lDw49bNdmIHc>T>) z18ArZoQ;33LTLKw0sZHU6G9vxJ9*+&FMm0R#@WjYJ7%`^<#LZ7e{#LN@w;#R&25uY zJ7;D-d(W3v*Vg~+U4Jw@IC$p#xofXJ^vpOO0CKIoamx)iW|GOU+esWcWS(0L>w57` zuc8?w4h}7maH_w5$IQ%y+1Z<~zaf{&baVi?e#fo1f%&v7>*Czp!qVb9{_B4OnR@QR zg^{758?L$L{H2Rm@7uqzS(%=ky!PPLpp&ziOtDbt>b=`<x*24xBuQ{m@NbLD%hw-1 zoX=*TJ6P|4ycBpo@ThcNm^=Hv%k#C;=s^yPia1EKl$=PKdI#vtu?&_MSx&63FSvFO zoT2O55eeh%ym&Dl!Iu)UDskdk=q-5OVTMhBA$+E0mR6=t9+~^tM?QP@<f)N<ao6as zsHuj)lLSdrE}3jm!lGxWcA&6=TW*i0!r;J;BUHSFnD6R&-FT@W)1hzay3Q~VBAVWv z2^^$o_an54D47xFQes04lHDHP^<(M$&AlF|c#C*Ub?mHVXd-P&tYKTeB#a;2`=S>d z+;L&{GsiAIP>>;=tgTn(*VZpzo?D+^_gPsvcm4}0iS2Zk%d1Z?QSZdLulDDLXdw>* z;5&`UQL%o(D@~91PBy`UKo^~bE`QMNhJ{RpWg7$SN6v<Ku$h@_#rt2O{n^isACdFE zTa6r786CfD)P%KYKTq|NBBimO?o!JgX0Zt|N+33q0?8(De>zsAEh}UwwASv|GD9!C z6^Mma#df*Y-*z<~d*4O=5W-M&lvmdK(~DZJ6|zha@+8C|iI|Ab`eRgtLOSj^j2H*& zF4LubCZs}+PD*~-K@}IZ5GBw7CUKdIW-ynLvTCAI@z3}Hm*oa!kuE8AHdlgv&^wzv zFGf%Ax<$FZ&vFtcr5`@CQZ;Bri1V2j!kxOh-<=*WAy)Rx&T<>a+pS-D&$GXa;<=ly zKaXxe|5wVY{|7e!d8@i6^32wp!-T5d+tQbomab1K%3%K>VmLLGZ`Ia(-vzcS3{F6M z)HW_lAi^W!#aa{`3nm1`tKb=qWdu3##n4$YtT%9CA|lTaZzLy5fA-#wJodzsK}cSF z+f8rzg`b$8on>Ne7f<_dGRuT-P&Qwy4z9GuIqbdi@Rt(FS{w;sw6SnI;RYlrux&uT zAMg1ab1>_BGDmM_^Cy(_#@6mN4)UdT^}xB+@k+pTU0YzNco)s5C)FW05STC+OkR!{ ztL|K%Ptm31iSzRdqNt?R<muDrD8xxpiN=sIiI$lxZ_e$WzVRE!{-(aU@RFNfe_`>d zOlDlm9d7rwV&uElIZVgjU-TviGH1?ROsJZg-zQi9XJ6`ZRGnR|Uwyaov7BhU4!sdk z$B@4pVXIxE`H`%YM4!FzD>eRrMz5zi4;X~w1eS>fTM*F#<$&o@G@;cA?>+Aa1R|Sm znFBB0{?PRJLm*;TR`%R;_GV4#Qr~gtJf1Z^n43>aRgdLE@~xs|6wlD%ct6jF8jpB} z3Ms-jxn+ynU~C~^-7FbPc|#3uvCXVy{1Gu!<KhJ}yUcokalAPYamK{GDwlEs3o^5o zDRt^=RBTo7Gmgx$t-gVY%|`dLk8fxR1%nleVj;S>=pUX;At}FEUU^{F_d;6u=A}J{ z390Anrf~HChb0%j7sv@sloJdK4uR9M%RyMHRCbm6hq5`DqIrhpOuZFXtO29Roa<VS zZEP)=*s74SEW<KeX)YG_cCRkUk0R9P`+G1Gp>LHLC=xpT1KGoe_T2P>t9I`h2UQ#I zY!8T{*czHQagzx(ii;Gji9K@T)Ki)KQfvj0bNbx1tDVtoq7(V93zYVB^v6<@VcZ}} z>fKQS0mYYT>;mJ7>gsSNNT9qIC`J%(3dnr3q|VYl<cyw^F};lCLW)=y#g)Ede=4aE z)-9yv{=RKK-YY5tyaak%$mM2QHl=CBnW-BoE?el^&G1Rfj(39k=YoL>A|{@08dvrq zI=Pw|C9s`Krw!8_9_c6iuCRHY&qkViGGW$F;ycc|w~aeTMSc;XtSAL~+2K>%MC$y- z&F#K8P>>xa=AUqD68zH}e|TXevTTA!ErZnbc<MHdy;e`&URt9VKdH7GjZ)Q0i>&)k z$&f<v*iDG&d}0F&VSw1DcbthmJ>(q`vMIxtS+0tZMIu#DTvu#5E<*xO<Yd(^hLi`e zmq<zqQ-p#yQ8?mFw(TR`Cw7h*=@SPW-x3p9HJP={p3$xGf^?;=;J4>Fs+I+Oeff!H zgav*JW?ctu%acQ+0#1~At@78-8HUfv{I^Cde)Kp0b!?l2fh;F@5q=51-Y2USb-kRc zRF)u_^%Vvj+W~``PH6x<PEZ2ZQe+N1aI6vHV$9b3MnGX)mys~tmetdqHx!cX7<<n? zQ5gDteW|`;p|6lj$P9?tgep@A+rG&s_;^`kWMU-fj<Tz`R4hVVDqxD|7xz9me{F~O zhDT?mQ09pD+zm2m+M^k|+btq8rD!rDOEEmzs=!`O(n9EDnx+ec0(`ht9F40`RJ_9< zq?C{#E-5q_p>4%qZsW>auu{oynkqPFKjfSM*&v=gNa~s!@*T@F+`#bwU{}8V;<*|R z(ICuu<gpxqScbdCdEjN+we?aV*;gFUJM~PdPY-udy<==v$m?IHUEw@;!;-aUhJ20V zx`@(5-fOS>iGgsCUpm(~P<Cb4_mTogYbJ=Z8D+UXz%sA#fW5XAt#{(3^c?mZW?BWb zXV(xFrg-nt#sp@<e>$26SrS?y#n%&Z2XRzHu3#f_BOH4CfY_VJ&JX6+vsx{aUZd#h z{DprEJLd-nw;4zYiOBgf29XcIkGOyWkP{qnCT<zHK}A@k)d7Aop4J-$foFsL;dogT zRVUsa)?;v7UIE1m^w@4zFID0l!2yI_I~vK**NhM`GZwm?`%l;Fwx|lvnE?Bv55f@R z#`@(jwtPXQ{1Bn`5OP2e7+DfA<{tgVLmR8htyX7qv#M$-Sy9`qR=wWN<O;rP2fl-^ zd^HkHv0&aPnWk0+>8$JQK=c?$k8fMH=*M3n;l%eK+?p6exvpm!*5tr}zT{}TTWLB* zfkETNbrf&PWH_DTy-(d1GC@jk8y0RkOjaTqPaq<n^_2=#yfZ&#h{~8K?WX8{6fL31 zU<6vxE~i;TCPgcddtMOlyGcKt_#yJPMj%<&lLQdK*oj<RDGxS`evWnHEw>S&w_dZg z4RHYXc&kM!+Io_DR%QW1#f1pOJfrfJiGh{vf;7gs!;&||yAz^2ln}~o-3S6EP6Tu} zP|KT2hMmPJZm{`}x#Wb|e{H!lIN<&x%OS+bJneKVQF_cs`I`&YwJc9F#1t8l(ZsCi zjHbh4Mu?{xQfRIkUfJU?9;c*HyQgh0u2QToDQ&BlS?!i2&i*zs^a4rc>!rd|hy(S= zp{+4ND~NZ1+@6JGaf#)#p0ho4Coo&6E*+_?E%o;odh2sCYs*SNr2?Cw;;*(KgpU_3 za&Tgu-Spu(5~Of3D-?a?(p%r^;yOm)Ih-JiN-F-!I@fY-GnpL%5fRz7nE|<D#-*nI z6ux1^)AB<gl^%X-Ww9-&!nad6e(P`ih6i~O+|Q5V-E%-%>J$oCE{DlnqkUvz@@FE% zwZT^%JeberpFH}+)rYUySYKONUS3{WE*6X3o__zmUo~xKXmlbr+>m<%LZD;9z;!Uk z&I{6tYwe|&B6P%en;MTXkYT44@3-6S))Gp3Fu$D`)M(}yD+O`=+?9LH7ZRGS15bfA z;*sf7>jn#;$VmiTlK(AA1UxgI+v>KPnAye)2LY2PTmqlUC)$0P`berIu!Gf}?IY^h z>&|J4Siah`(x#y{+oiUb!)$=J%BtUWSwJkjeZt4ujkA+-D=F7=@`jeF2qKj?lXz>q z8vq;c=1XCP=RA&EFPAOD4BeK)PINjbn_8zilxu!vZ1@^s;<~^Rl<vLoT8bBOV3}>E zI8lqb-Z|r%Lqo>SoRv~o$P1X25XC0M=-hgEdLvZ$r>`?6Ln|XwZa%jRO`DUAh4qmj z{;t0`O@!h9%iWs?OLm?2Vdw7q?S1dJzj<%=4TAv&17I)&2#^3xQkF=|))vVsOR*HE zoB&EdwZC#wsY=BuOXd9GKU^tQqDo4V70HoeNrWtsA_!vTU<R1M3}#>7n>TOYdhfpb za_+tPPQSrMf{v<WN(mpkz@F~g-S?jREx+G)zJ(iRz_3(o<kM>-xvC!lpm0H3oIubL zbg1?~P2F{j-4y++3AOviH9z$BlxllS^Ff4@t>uOG@?2}-4(&Hkvdu_sE+^O|LK`JC z;Di=o9Z6CUY7(nPq*1`Iq;1%p*|qx-4n<jq2SwWDNrTQhJW&ODG)uD#Gn4fzr2@rj z*KR+!y2YsCXUt=x=6~TIi3}6{n2rjiIvxASBkBL<U$6$s7yf*8>+;R(&ky+_W!gQ^ zt*1_$PHB>55l6Ccf8pTa!y9XBw{BcdXEINpevbXH$sVi@CZ;N3**7`nZPWO9R+vl@ z^FQ&^;5i3<tKTzuo&*1gqqtB!kS*Lm=+B3{f<b@#%a&iyrL9eaKldPXgCr$U0l=V$ zs%p`myq^*xC!{`{y+=qX#$kkUDm_-H6d2|XivJRkRyP8P**GW8UCchP#gJ4|B_Eai z5So+#*aI&WvsC!k$t?*Z;45@mYNeF6q?vr|Q!(+IzJx?y9XD(7Pz66WH)JZ3z5#-5 zT43}5_Ve1zc=CT|^|#RSobQi^C;pTqR9^p=Df5pLaT5Hs*RzvMS}Kc|H-BdQ@K+Vo zHBBS*9Ysw6R9kAtZ_kB*BLwDS;^alV5Jg`*`7K`Q!rcHO{oc}HRR|>2V!6-{RL2Qw znU#a%g(5fGa98g;H-R%(S#NKB0r3s1bG+9*nXgv18!Mf5E0Znca#cyRmzr-Oyu|o@ zr?a(kf5kREJ)Nr0?q;)PAz!y~$qQ)D?_`<6lztFsVS)&D0KWx<UslNW17J~boxG%_ zGNm|<JB<}sa?nu;ZUplEh*xv<<<-^i-gd~`ST_0azK{Y7cG!!7Rr>>-=fe2MQwh0& zfo&I4d`fwh7H%M1;dxD#C7ukYBfIcn0HT9IC15R1oP070gOtX-@P%jNgfhAtWHunn zalFXT9LtmLzZ8W-2ZUauXiO4Qez@@>8;l|O3Ak-6$78IygI7`heMD&}8MHSaH=MF8 zn=z$K=A)Fzo?nVO79nFiidP17+mZI<gYi@VA9q92k!+Yn$N~2l3|3sXlP~VoQWFUM z1&XecR51CiBm0Wt-RTZ}xQQdvb2X72{yJbgGTG*@Rg?pkA4{TWSG845?Ibeq*-Vh6 zd4Y|66wppFuCR&dGZsod4waF-NZXPStyQW?5N>U)G3>@V{W;!VmI?tof5W={yYZo4 z3lIE;ePvDY-;I+=F)i7hfiIv(YJW25O-IH3`C@8gWgehu!&JXFAApdOd1jwjU5WME zZua)_?2&zEz%}ljT)5wwkkn2&y+t#z6~=U+%@(FKE@$FiTBsLXO4QCyRJIcA^tWFK z@Ck}-$5CI?G_YmstBXqubI+W9p&zFLX*Qz^sfu%OVuK2rz2@rm3*U1MeBkK5!t8;Z z$}{<Km3y4Q*n>Mk64{c#_d%hCt-TVOB~lTA9RM2Qdxgq`Z4Sb~wrmS@tyrt~dhNIF zm@Fs54T;FEHOY_iA_|~683Ys|=ARutNOL@xorq;W_25_#KzM>VHX1&O;raI+^VfcS z^0P7fsjvOP1OC%5{=dHU$p^SEZ+u2LaWI!U8^`LM+b2&ycWPv$Uai(9#;1z8+Va|6 zMWexT!P>}L#`CNwun7snA<I&P9DpVfxNm{+Gka}GekVyXu5*B-e8j`y$N!1Rloa8F zWSxQNG28WtcPY}E%|O)iAwKOmtK4wtkQ2mdnVK#zD_wGffE{HOE{NzgTQ;z$iF8(B zhhYFge3)HC>OzeEIt~?Cd5mJR2rVHL@=6GXek3Iq_1%3389_K~ei;8Xd*OyyzzLtz z8l(AnRtphF<=8=15^_qL!<zzbX+ofJTYOXq9F1l_6`W*g#<!e}PODbWq;*c^Jj`l_ z!70={E6G&rGReK>$Gqa#+3r~`dVrI(C{td`qZO78ZZ><<a=w(()b*|H^Q)W}#EL-u zfPJG_1{-~Cs@UWNm*M=hXgeHYc+a(iG?&?3-Y;;viycG>p2t<wXH(K(U_Z+wCp>Qk zQGFb_dZwi5sW@~+SzF&&y?gWK#K^cN@qNo|+l)=+GSVZvrao7nn#@*o*YB*~yXmwW zDTxW(+kVh4)DBV%Kj``t709we(%Xl%av){td_4^O_V%KzW+Yjq8IBdybhZc*^;hq2 zcnHWU*)0UTBe0Z>=`<fcGl>U2*Rm7lzuvc-15=soOzipa0a)AfeAgki+;fL5+etzU zXf8dROFk^<NZ_9oIgerO_%Mb@lQt<7O^P0pkKTgs3q23cluW=2!IL-%91pKB42k^H zRN}gk=Q2D`!3TFTvfzh6EL;~H55*B}AZ=WRohBIga2N*g7R?OPw~}EpJbWYi)Flib zH2l`Y_^Vx<)%H;6=-Y4K-M4@8=FMB@&Yja#9kl4;{9mE0ql6hj&_qRZ$w=KWj_I8# z=Lwm=PG(au9QZ?xO1g^tK^WGfXdlN#(N24_;ooPv6+z%7S@3->^xXRBJFMgpBWg>w z{nb=f&Sr9s)dx5O&JAu1XyB5mGTl3zwaWSJY)S@*3AT6OMxoQsq_e%gvAMoU!@)c# zFOw^j`rY+GzsC!Q2KFv0X>weXY(Gnjy4bC&qnn$71#8c6%x4Xz{KSqQtg(O*C-QDJ zy_(b3U|FkKKhN6Nzw@WP?K!`@_`&OE8cVm`?bUYo+Q>{+6L-5N@YHbUYlpT5OG-lX zcGq;nfL64uz|k!uqo75J>qoYyidV((^@LUp{!5~LjiWkIEQ?~|bR#Jra8aX=A5Epz z)oo*LJJ1#GGb;`_CftT4im8#x1B3)k@LIhL{F=<y^thtSsvmnaEe0+?oo|X+^X$1j zD~n>Owu|Ej0OO0*X}FD;^z9ndM#n)gZ{51?_puP<XZOzZ!uwGV=b70ER~UXzx&A~t zHz8}d)82gjn`c^$dxwu_FP?o_Pj$4+6b?18@DDpS0xRVuUet}=wj@io(FcC$dv<~W zyHamm-Do%hAsP|*_T=a&J6jPA%X*}qRCTIt_zj0={@LzXZaAsulYb}(fNDp_9;HUd zX-NhdaxE*C)qtj5jQuDgNs}1X*2N5qUDwAr;`ks89dOOPuBWJ>WqIJ}NO%O^;^I;n z7mNPpMkI=8Y8vyrpD)A%Bere023)HL<x0?Lham=sLrYTNxq%;0Bct$D(b}4?D83JP zD2Rd(ek&FwG%*<%0}sbB_!<xbFcV-ehTY>o^=I4R=ty*Iwv?Lkd|`g>($Qnbv)OF9 zTrQQ%p6{_pnX2qVpy`4nh_cyh#8C)R#ggrEqFfxA8MYItlu@!SDK`Qi`27r+eqx#^ z6h}W)58*9Al9NbLq&KzPIzmbkIfKr#U^i(N`(d)SvcwBwHltWBeseC28A*xzjr*6# zq!-U{TMMGSVz$>?-Cnof-&or)jlS!8wR+uk-T6Cr(m7y;l+oXaqwM0w1j8t*(m{!h z*tWng$l$s=qK5<*NFn|GTdl)V0s=l^(KMx>7dJ||W~$&LCNo_K7tZ_<=w!3&xxNub z{@8S_JeC&}w0b{S-@L6?8|A_wr<*|(!1#y|ULJEfLDUMORM>8styWJ_<QQI}OpU%3 zTV5QG1?mCS`dv<Rjo=XPE;4)^C#*pGuE{Fdj@#?X#S<~jE^PLB?)x*-V0ArA*&d#) zB;(ndBCIi-iI|X!1<QFtlgqY0ps}mzVAlkWIg=`VH*^ol%BlPJ&x#^lADdRR9IQa6 zH-M#MDD2rrwOT&%$Z<iIFTVdyf7{He)sf6ZAy=}TMvP6*gEK3S&wOce_d!702OpV8 zkazyg_tzG$ib}g$d)jq0mILb+fyAn*A|NK$?unv2EM71(`AY2dF3)Y=Y0FuKcrGtY z(lY(jE`bWIiWU`fIn#^aA8k)yetq{Y7L@SQ!W;E^^wZBMz&>wY<BuHmRW;hZSJqT& zY@C{zW%lk%wl^t;rJj90tbs;XseSu>juWz3W@;)bS5P`l&+KMqW|MRp@7;%KS|1<h zs&zj>{KSMZHN|AJ?Cc&ORZ%`qn<hIp&OCl18uaNsdzk|V(Vbh#frHNIxSY>%hYoqN zOsCTHzWp%>bRi$?+fUETYK20gYSiQuu2iT@h8Z18x*g=Y@ld!vz7Qh_Mz}|Q{s<cv zlh_Y2=0zo)&gi-xhT-Dk15M0~)F)Lv3xsdjz>^~zMLXSohb^}Wn8cVYPb_iF13_N! z-NO`98x}ecD3bi}Tmp)rLSLt%4>F}oh|&=nn4Lp7c~X*XV44@tUud;^)4OJ5k^bIY zccqu46+V;Aq)VfvsY3=9w8E&6pNzz!TAtDbcF$yKVro|=qXRFzcl++OOBX~@snkc{ zJgK-(C%z~?s%b|M)j{zlVsX0I%L$!|Iw{Dt&E6m(X>K2DU=RubeKT6Clv*pK*R`~* z&~4;4BztN3#+h4p8VT)x{>yv!9(j7S{)Mrr&zGu4D%EmnB)IbK^3BV)CJrMt&BQJn z#|jo=zQl&HByed}=D=46!@oXA5t8!ynh-a!%bC@G9k7Qb=PxC7)3#Hb-=#T@<b(xI z5Q&Pq==t?bWp;6+>tN;+r%E8rz)duXJzR|s*P^suu#8wz<`E?-!oar5ZjxuY#BqJf zOR>zkT<taNjadB?>0H?|t*y;9!>~nBiv9kB^(NfXjK(JvL;A1MaiLTKQa5++&aTlT zBO}w-Zd@53pJW-v7_?c|*HZa7Diz8{)7i(i*W0|X-S2sO4+*J!+XK<^OAMz+ktZoB z-!s4`?u1R_2%Lzc<wgV+ZG+hiXn5jb8Yh&_SUiIiJu@(Ez?zkUK5$~@*Jh`QC;YVk zh&@-V*Bw!U3sdX$SkZ*>aiv^lIvvS(r9v^-+5~5jnx2Vxj#70-mKaT!R0SM|y6-^H z+*XeqmA5t%KsJ+8qN*vf<aWEXB<j0nP!xfrhpWpdn-iy|qj%m;L_w(5!GMVS52y&) z-}yFm;2^hmzW^9@Wm!CaJn}pVu-(`=naBr*AdZ0)3-u9Zd663#BgvhDK=pf3zn2Ul z>PLT+;{?^Rf9zCf(J5UNMegj`cdlN!bnC{|tJf~OwlO+Vpb>T*i{(W!EQw)Bo1x*% zYDq~8q6)8rZi2Q29ulQ_PS~`KgA|vcQLxiEgX{z_pV@dJMpP!SS2X?GG-<Qxc}CuL zUJ@h}V^3AJ?d=ATyxBby*XBESTFgX2<g68*j$>A~+G|>6FUPTJDucy5APqq;W>j9` z2{ZC>92gxzNlCJt&Zgs-Y<BZ3VE#rJq-5oB@NL6AeOFEgne4`>nw6P)({O@>#K*yI zgdxxK;Yi_rCA-Q>?!Zr%wYYWl8*>*fZmvAoZgyY#+McnAy%hSK(RnnCr@bKUIz`{# zRVs}fdJOwsbmhXGo_k?x>{Q6?q4PFH5(E^UXURY-j<vlIEFI}pmxw8Dfe$zEU=SBi zQsu{;;1SkaP%~RNkl4UUNMbIF01$CBE%n&c^ME?<u5|>SXNEa6wx0wsJzZo^j71gI z2TB!@nwTP$Y;$54(IhV1?2UDCJEMd-{dT7Kb`)lN&7VZ<7)AA~wfe^9_SVMw7znT; zbCSl<F@wULnl&<{)w65W%Iuzf)sf1D^XKl|zDag7RoUn^E2Fb4!!<YOLm%}zOs;fz z_TWn+6J?Q~pr|!9dx@so&H%C8E>V#@3zYU@IRwM;WH%otIWViSx!9wefX*q@(UP6h zI9}EOy@8hMsWeCWV$#6)361;yEech2KDbC7JS^w3-n(a$Og5aqXShz>?-LL+KNp!M z$Y1}j{xVh+Kn~#RXi<!3_k{gk_`NsL<dpr&x03B`BnW7GE5^9r>n0<kk!22UT%+_< z;yB=Bm}AGIdv}0&a;E8i`<rpG<efd^t}MsJVzMyL8iwENV#{Jym*d)qy}SfuC^E=a z0}4YkiV)Ak`A~}w@N>`8EE~ZOk<x-sg#oD;5UWBnW1`UW{2-;Lo_^vn&vSS1CHO;4 zS78A>$I<|bd2Y9{0ss;yAgm(`OpO;fUYBJ3LwE^yE+y-`a0CpQOxgtyLRbOW#|Pp# zoVqdm=HdRn>RG@}US}mZB@*YijMJQ;Byn#z*IEK{*WX;}be+o^TtRS!*0o+^Q`>zq z@!kINbw23&3Ek{$F@$f(t@X%D7lQ6u$m+HIPf~JjHkZfI$3Yh$%b;Gp?tRBjmue>@ zc^1Y00nsanPAK_L_STOLwu=j9$`M!wF(Mz2=H@i9Gl<iGC@193m}YPDG9_n@o+y`! z<xKvRZS8d&l@;A2?tpX<=*{q*&K_N(pZQ|^otLj-SEN%n#2`+DU1k^XClB`&E?*QF zaLcA;S1L85XD~Dnya+CqoTSs^bK|!7ufq0kYsGU>OJO`47!|B^(D4y_165zyKk?#b zv$<(vCt`t;WL5e=jUGwaaKk;4&?dwY;2qtukBZ6~ETf!mO+>GB9dW$aXN8R@;Jb~l zu;Msq2(Tqp<DNM2nD2*<>s@&N*0B@MU^Wij9-Vxcr%54W&;xsC^urV|?_A!pO<q*1 z<GX>L^jaiB&T?@fA1yYlwwbBtzS3@WRdkw{?(^a|N@GjI<v-xr;0^&rTSF%ngL%b) z*=`vVd7<s0wiO?*+8Ip@DH&rt>|)E1d0`Q&b3S$BrRSB8IOZqfdVt1|X~5dUDNtcZ zfnHNI0!Bw#4TlswflpW#x%(VX!me;R=}gjWB!Wmq!$6NL!4qVfi6|xD!90)R*o5U! z0K|hKNq*%@49^`0g~UdKTqhAml1$5T((6$e0FFe0HyBev0B(qca{$1&F4=^pNoFkR z?G1*jT2CB18Vo=!f1qJb!#nv@^?&{i(X{|w60*m#B;KDqtQzr2dKwYse0kh5dY;{3 zIiA?1cz6kDs8rzeS&<ibMgGHt5)$+)JMfbfNs*0wk|h&GVT6NWr+QclSSmJ&(j5J| zn!AKh4kg`w<LQWcnq|A-D-<oWyt?`B_ul^8=bl+`a(6e~5k2CpC0&sNeZseTL3^1M z6<L;mK}HEm7iz$q7@Be{BjWT>n|6a}Iup$1i6wV}kJD>*(ig!N<O+Mh&PLuJbIPq@ zhHB^yvU7K)dg#$rS76wc-J=TwLrq~kGq$efy0D6YPukn?%puD-;QBe5^(fL(fZ8eY zO?I-vXeJEOns$d~{vyQu&C7Qk+c|dPzl)NCEMvvPEd@e9DYUfK3=&01jJ@eUqdV{S zx7hB?zs(h^NoY|*Ch$e6`P(Y{CT<2y6cBDmV*C*^qO-gIZIbL-Te^2^JJwb0iGAhJ z+8$UI%W1&RVX47=Wr|~fU6SD6rAsSdONZ0|ZV4Xd4*pc9ImPi!f?tNSCSe)DPJHis z@2o7{Kk>xVhmRiG-gvN6M7mRCM5LAMMFE)8djl(-Eq_!k(A;<sgucLW37>L8PKdey zBY?9Ms#CpoLMPV}>br~c7b?|VqIfh6kI{UQ<1I3sW7zbP#I(6#nYe9${2)dKX&FK% zxR3yhK1*yoVt#dck|W*MKNVIa@&^!$<1pX^&_G#^Y1)rsQXmiJZZM!F8P43(btFk( zNeE*armu&Zh8>&8xF~>9g`STyX)44qDE+XPL+m)1W+FgCn&z!6M}r>D<~+D<E(w{! z0i?W46a$_QFlJRH_PogVLAyfR0{VbGFBuL-8YXkn5m*6^_`}F`C{aSgNbILB#I(ZE zG40vYY#1i-&iG}}FtX|-vYEugA|%jg4j`y&50V&@q@-cuHhFNQ>-Nyy3BI)~>+gGZ zwbLwxejk<)W1qAu1WF+(0x5LTMJdG#0H~P+rKosbPrr`n3_^y}pLB!gc)^Kd&_I24 zt#Re@m3k>96(;VrD3J~@;wY^eaJio0xiQCQMzL7*DV52LM^ee9lvpUZz$(=Wm`(?% zFUAcEt@nxA6=Ya@>LZ^x9NZfZI;;8esA0^`KX8g^lLG4}2IboJNSZ4uvySH{xK&r3 z{nK-T)=eS}WQJiQX0Wxn`gt}pNhcu0Aw6{L3^N?`MCcAZJS?=#dODZ3jEk4fHZ8+t z*`?aZBO%U^c2z^u2A{~J6btL!^{X}YBICEMU~G+fE~}A>4}d44$PBm>w$as<<=7>K zBnbQ=l|+`qFgK{w=VhrfSwIsbWzQbiu0ITTB(7}&u+J7o$&Q^3vJM1enPOrT3qw26 z?KdBj^;0Y#*=7esY}hk|2J#Q`GBz^ldAK$*lFkwY5%>;R%wg33VfHl$gy%Vce|SM| zZ?6fWxVgE-2@=>oLDEDu%S0yN*n~pa!Z`f@ptB{X^Yb@fJ^R{iNnvLX0ehQs4JC@l zIU$UOV;6?thyk-ml$@78(IblDIZlyyS)fSI7}Ay*RQ3lqWugR(JaytEaaM~DsB%So z>_q&^x3DPSr=LMLu5tBI^$Rch@4Sukc?{kXg!{%d<qIzbskDFP0~*#y5Sh_2sZ{dk z=0NL!XR_ej6qT=!(zYGE_6k1o2&k*PZ$DiwJKuXduq{pyfZfHbE9`-TOtFl=^H<5( zcmSBN*QKX-`41MDLJ_o-vMtg$n&rcCnO?ZhTV_HkB*M?C1&@+Aeuz6B#%zd`5Q9YQ zI_WEeBRD$(mO|elpo>Be2ber8ogig92`GkWQ;d(pEYC|oHUMmdeq!{=jfAh+nfM8Y zjR&HpriVX%0U?p}BybhmI?c=QCH}B|jtFa=OG%GE^Z9RGZiPOUcp3!4G;Mf&r-Wi) zIn>TZknK?)-a6_-i~`57H0fS#h4hsz(Fy69tPil@qgx2Bxm=$By}7r(e(u4u4y_-Z zxFIN{{{^F;tqF~smI|XSE!P5^Y&MQ-xfS^0)|Sd`w^R8>%<j?j5_VmRbRh}A4+KGA z+74JIl9ftFisp2h2UP8;(=P>Ye|sB;T^!D_>@FM{JG-L<adB);(~Ff2j`h%>J>dVI zk5tpPv$_aA%W}<j5V*q6Gq#hHU-Nr0Q3sGlH+JV26y`U$>c2@)v9nFewK<Y169v92 zX&EhDvIlL)YJ<`A>^-(|N6X(G_SNwa^`beLiRgB&ke8K|?_03cL=%YdrhU41@WgB( zHHO15oh^l7)-gLt<de=L3>jn&Xbc<}NI`3R1q7q9z5UMHZ>KVu=U(`dz_StdJA*d4 zarqj{bJyly%SyZAu+wU+<V(D!*F*PfEdLkz@;5r$v}Ye=`QA={0<dGg?*SU886gZ^ zqSD|SBj853=b?_3w9J_70)GZ41bf!&icdbBRIBp%WH>U017EIIx}7#UbU5?VKNGkP zZZ;I(6ZaoXc;12KlcaEIk@8$^b~pFbGr-W;VllLBMp5;nM+e=WG&8G!bZl)hd-l2C zeFdC4|HMfpok92KlI<<^+2@=fRB~B#@q%&Zc42ZF#L5};h2tkU_+Y;acOpD`%)Nb6 zuGZLm9=uq1f1a7%g?Y|><24q(=QB6!Vq%csU;-P#4F!RyWEDvn?(T%c$fq9%;SOVA zISKAH4#J(f33@ovnsk|=X_6Pgc1cAV&eF_IH++6r#)QfIQ1TNXC4p=Ak-=)IX;pg- zQNR|;V7>>PCmEqgp)Po0S(aPP7SHj=jz4z(UK?&eW*EO7b`qgJk@Go>t^Uxe+J|Z> zvk9i7xek{SqN*Bt5d+c>cM1qeCSTs(TEDVFP1aXp&Az&^dqQuNN)1FQNLUhuNJKm! zI<x!Jl4K(G3_^R~Jg;qS@~0l}Y|Xu~-EwqQ!HAh0ow&QaQOO9;JThfF7U?S<p$Izw zI$itOQpGs@*gLQP<w835#;$#by6rSg_Xsj1psgwx-_5EYAajsJ1v~q!gv@5g7C6xl zyl&_NKT$blTmCw2xsq}waS~$9B+^62TRg{zzm3&@>iVoK6VvJYekxM~ztnH9MWG`p z`M?9!I3sFnC=uWXJ@@354+_<4h$7$f6kf>#3<FauFf!c9roX;uU8|>v61E#_@P(!7 zNGe<2YV`!#162fU$g%>QfD7aZU`)1r{rXMEHYca1P~>1N!Ml>G+eTkWWi~o<o6&rR zsZmk+*)Kiqdt2t<#eVNtk_g4xEBX4%t#z>62Pv8WmC$z?hR>HL%t0^4z98$%+r5Sn zIg!wFX)7d&dCV_Qj<Q2I`h9=!3hC0Ss>$XC4c;m6LC5@NL&z67RSlOO_!}F*>%dfc zS1$vv1NFnC8#f)Utwv$Mq|@QW3$dO`JTJI<CH8$jlfjD*oXZ~ozJ<?HAS<;I;C|lS z+wir-1GL-8%CdXyYJ>r?vR=C#^#=(Kg-n*(+_bM<VQ_%Kk1a2utqt1ugXKjOViMW~ zaOK#^r#B}aUWH{wW8;|@KF^XYfrubjP_ob)rgMQC<bmvoN?H;Xk|!l=;KX)<qM(-W zKKP>HY|te10!_cgasY@Pp*eZjx}9tT64*YhTwq9#Wl&UsMtKyU5!K5p^X|*P|DF2y zQCa&EqKt_6TUJuj@4x@S^^5Q5qX+M`7?F+sh83Lgup!!L3X5Fg!)lO75?>$NMaBL% z&$kku+cSPg06>K3hMf*<MHgJ+&nUPAzt=djxW4C4{`B|WeC__@kCTp29h)S-gpt49 zSe____Mkg3{H?~CDrIJ-XCovsG@Nimrg<kmj>H6ymde|mcJt!d8=#P>%rRhJ;QSMD zENb1*@&CclCcb}rtMD)4@(ViefR%FH0cL%U4v0&KyUR!h_XJ1T0=~^)GIx|?lE?+E zy3J=aUVYqXKfo~qj2&D`ueCx`5hs=dI}x}yQibyj$=tSm@93Ma=ephH-Fv4+Fv|9z z?*Z>fcq$H2xMbgI_zMY@<fXB+QUVMdMXu*qp6ezQv)*>$cB_i$IVP-&k}7$gO{2Iv zGEpp7a#<Z#vfF72pgrkAI#;rt{^gBV3TnN=9Teo={W~v55x~;tfv$7ncpS~L-1~~Q zVD-iszKnxjg4kkpij)!bwsyJ%ZW_tmwz$!cX@t{4D6`?v6H=ey2`NdkS6767&$2Cw z46G%g8d?<nxx3-~y=W-J_T@`MN)@vkYc$J|4)1HLv14;nyKt-J-nuEa+oU}y08vTC z_vbK)snGswuhNPFs51HXHxpP?KOj7HVV(xa>iYl=D3<MAcn`FL>^C&Gy>EXrFirSr zZ+Vf=<^spDJ&(Xk5bC8x&-dZ2XvjrAbGw`{&1A>Dz;&?1XMwYDyrG@h;W>;@9s`nL z4qBq9l1x#Km(
XAn6-GCFV&`W`p++jWsgV7|zd#7LJaC0$EC-_0SdL1F<%K0lK zR6ti)o(?U{0xIIw`T51=#rxB{cDH=V_d6<2{Y`Rq3A9eA{l%alW7CTTUaX8v0xE`6 zK67cI<?Bag<~ZK-d>O=%libxnH<sk1)Atj`!2weo>D|5ee|38Ke*ei!?`|G>f_naG zrIfXXgIXRZso|)F`?moj;{JVW?mSkGA!RQm)>ztOB7+4BXQpuU^uc3G)p~AX+6{v@ zJoiObDzW`@8T`MJ(Wom6aqVZr`Y$l%qQH8U9N%@EC}9&?h=`GAh{{P^U-%UPxy;}@ ze5@uc34nU7D3X3(+%=Uc9iRZUSyo^-fOW@FI<T6u@}`nq1fm`X03&m(v^G6mx9q8A zqgAgK$Sl&JKL}(l6W-~4k7h-MFPq*LHyl7ClWry?>gGF^EQKk~<2hZ`vx209!3Aa^ ziCnYQo14G%)TvWEjr)C42LoVub$y*>xNJ_TNaHzfgr<3nH{XBfb|#nl;@8^@GZF=> zJu~AOU(DD4GM)cUd;6<WDxJv{jDE{8+geKRcYBuE+EXr$WibHJ)gJ1*6o?v|3^T9d zA526BnHB`ku@S(pD0;|8!T@eN2DKfw;3Pp#()5cZ`QN@jd=Vvz8g8ryVL)ZGo^6v) z2?DsGq0uIhBKWxo4yNf~$l~Br(N3%daNuzFhOjuE4~MC0qzgQppePazlVlGp0!1T9 z8Y&Rw19$)>^1O$8x<6P<IE14g?irwmn}-Bu5_d3U^Km$Aj~oJf#$MpXp3~py49k*! z798*jmIImxhuW@D9Yz|Rhp>?FwiuC^#ZI3#83#_T@ZRd;`s#wUzI@|rzw|4`@=tb} zO)xcjro6e;xp@A)(P}PNEH1k-OUl!kzo8ps=|tyafk`Yhye^`FXmfM(%8D>G+RCOI zt}g?i0S}YVq=KrJYe$h2dK3>v&09Nsq}LrVRBX@GxR?KGmDa2EOk!KjcF&ot2B)5E zvuTWw#^&gB<3`vx7X-6Dy*J?ZQ1UKbsc?zmn3I+2*T!bo8$G$C`YhL`9KXH&mZ3jh zWk2XLk1R|7RCAjm<1-x9v;|Si@eELS)(L!YR2h}wl76;2-IV`%FK8Ftixf^VX;EPu z<eN$7_k{evr0IMx*rM4y_BkrKoXVW%RTB(g=&=3vi!^QIls}){b>i0D)ScTGbp3G= zu8nc?)e^_2RHKwIb&=+sq%jQiA}y5@ByG^yP7>Ggg0vz;UZ=Tb0#OttCGfpWzIyA< zI|+H)2~Y@_7F20|;la%t*K{p)>hyC{`cW68g$XTV6D8KJy`M)>jb?oc(TZk=-l6Ws zX14ZPrns9EU+T6t1K(0KU@>f_07$C@N{|-(Y7UK-*w^Nmxx2TRUmUG{CLDd3zxJ?< z=3z^kWM`xtMRr+|4=V^hni}@;D?=ZVBo9BhGhp-KH+-^->CU_8!xjV|9`G68{89Vy zkB@)&&z%_h4>|oLHqB&wGWGnkT<9?*J1^QXCd{xY2uZ1lfYeE3Sf|w=#;G~7gTt`H zQ;Va}_g%|(Y0tVWtJi(^K#ay|%KxaD;!cEhr@#zYvm(4LrQ0j>omc+s{7?PTPZr8w zHwOS~ZC>C39NoTqOF+T+{wEr!y4~vX?B8_C9;v2F(3ZtTh$<>zv3!uBz%$;wjTwQO z8M}*PaK8c$;^ub0*)%4Vweit*6!U;x0G|7nuWJ0hL)`9tq7o&JDIKYpue=-Eaj^oz z<ajfsj@R4*d5dV3VI)%FA+#lYjq|QD!8{c-EOWpz0gcD5-lPBG%vPhH>KmP<<)sf= zwfF9@ij<DZKl%FA{>Ikg;<okPt<Am}0yJ4(Z(h5#BJu3xNcqA8@6w_}Q|xpt%jZrr z;XMl7_q%w#SB?6PjBgIGZ_}qVQSCGrb?t3Ee}xsDBnmxa+!(w_@%tENQ&R4DR!Ni( zZEW0MT3Q;L*u@S_y`pB);#jZS&`EYBucT6{nCo}90Q#(TeNhkvj?4=J8Uc6OG`gPW z=;{2xv|szqH&2{=x?U?9gFY`v>1+;&*Y@V-kz>cJwOXgM8AY)u3Z8edv3YZ9<}@c9 z4T63$++*P3TZR3C7;(Z?lpIfxsOeeKo{}0C<OpOC7-FUVz+jRvBU7EVD{Ob}uKeR$ zPZ(_V#N8WdF$G?>-|MQ11XvVo8^*zoHUc)~#nceEh5%NFv796t_C)|yBsrI)c9Z8h zYZ%MXDf-jhj%XS<BSZR-rs(9hR-9jbFwj!c*Z=XO_3?jb86y<cgkxkSef|1vx8FSU z*fZzWxa~$GqyFca49PJlh?46Kp=mP*i@qAPFD(g8r*LHY7Q+Wgtn_+qZ!KNS9+YyT zXKu{TpPQNCu;=5zQvrWPsn7(+U{ZPM<TEZ>zxRuerj^1emd$Q=mbR9hqSQt9cGye1 zc$knN>VlNzb<DeW`^^hErGz|67V%8#srbmqdeaLdoXyCEGTqZmUOg@<yGr_XT`#q| zh9n8QCrhMrpyifw`o7WhD>tqG^GxsY>C_+nhlPLh(`f7R`Fr=IpMAXizkkELA57^X z{nANp;xtS5=XoV67XO^rJc{8FD!TTees7nWPDN1{yRedC5ccRKoSEHo<;ulwyS01o zJ`zy%97&c(wL){SJfNCob`nf|zuV$CBO?k4qowi{?DgRlxR;_N!xLT*mzUQ?QPDLi z3~W&pv!$^c*RN%>nJ<0$%f9D;wbjyvUbDdqVW+VMC{0%LqAVz>iDAV(wS!Px=SfLA z6MApE)+vwbkZotu@G0JjMI^&H4mghOts8&;=?S*-U;T5Aw3q%dRl;7Eo880uffF+w zJElcGmo4xN4N3^akQ9MACXm3G+%T6T6IRKl1!+t>%*m$73|@-N?v?u}k>e-@MBw`} z)Icq1Hbr}bRPJ4b_{-;(H&^F=^}qjbJ+~Ie-8c@5m63aQ7tfzN^SRTfR{cz)xt!Iw z|6J=$TC&k(ue4#Y7co`Ws8u5~R@_Xbo1PCSEC|}#BYU5UkoWGnbG6aqvR-a){%*b` z`7XfGM?H6Uj8PO^ma`q2>Lc(?6Bg>d5!<OO?{?beo$X!uf|lZMvs9a=6|c_)uuPzK zzD~;;@Qjd?SNq~<{mRK%fbn&*Rp2k8Rx3)sV5RrQq50yI`&n56_W~#+@Z)+V`=ma@ zF}%zLH{V>`RpkGRlVyjN|NVb_bJG04Muq?7l|4W4%fD#;;qQ%3e5H}4N0WY$`g2yo zk{m{1(r(Fm_Ge_h5a5pQY*I`nK@y4tp7%TL-t6pd*K_CZ&lO6gT)sHyZifSt5lTqg z7#M4D^2iR6_dQorX*w~%$*OvW<z=(qw#|O6R_~kcduPu)|HYTmDScyQVRUNWrT5R@ zxpgC-tGx90UUbZ+V+~X-?N}IxZQnI~7YT9^FbT*{L^cOWwnh?z;7F447!|*Z{b^Cl zGo-wO8wOAkLWU@0JMR45yPfuC!tP=p{U83PAM-{}2yNWIsi#w;1u=@<0Bo5ku`JJN z60ut8!p>p&$^?*a@P`1?$gWKcoHQi9juolIV!3V<>Pez~Duy+ruM`bXm(tX;ob29s zzqxSt{;?<bMA7LmpgAt0$+)cc{rS6x_U-bd`pv~wN@jl)7Ecvo7gN`_Q)$s2DKCc+ zA0?ic)HJEgit_CnSC*FVmnsvwKGkXURBfL*crr#cus@U-8|E{-nvL<I?_8474xcq_ zvE?y=rbJ?pYTC~Q^r_fgj=alhVMP<|gwBW(j~zD&m|Oj$6jzP94Y%zWK@i4RXNpTp zs+6njlY;rhhUt1SO-+oHVNw6=)r(IZ+nr4*?XCfyu$0km-t4cp?YY(NSNF{ndV^hZ zffbGz?d6xg{L@P-TLtvqzVR|+Y%pTV7zl|!<JgaRK~k;<01*crQb!AJFpfo<bpW^+ z{dT=pUt3#!@7$R$zVy{pw$xmIV7ehkO&zJEVodE!c8I9hbX=eauCo#PZl+Mp7OJwE zGL8QF#)cpX41*lY$`)$f-T*Z4(7{K`6Zz%s+eNW#8y!JX^5uMIb8gVxIB;yAqK!OE zApu-V6H*3R7GcpbCuI2wZ?$7!jFcA-DIZu1L6nwPR_AVA7HB*@IbJH)e*7Cf*@HoZ zJy{YE0huul9N#rvd*Ipz@IbI$f++8dosht^i;5)cvX++AG%qL|$=>ED<SP0HftRt& zJrwPcT3%`=OOzhQS~DDdMa$nXdenPw-k8~^p8nGR=vY&6+yV!i&X;fAyc2u<gC}43 zU@e9p6*%Tcbfu(4f5MK}?n|=ahrr<q5`R3hmhRtuKc?yj51&k8(X{?>yk4~JpXJ0X zpfU;t6cv)1Gt35l7Kf98GvYf10F?ua4k&GG#>=EGavFHSNjDj5n&l)OQTULH)_Fak zvxU`Wjpn8M+w#>rf)(cwC9ij<ZDx;&!&?h0QB1El`<HGm&Q6Y`RH-*`B%Xig(%nwq z1b}yJHm}R<T4(U+82{Xn3YXSL>-9$;Id*@ky}AD8uIi;{pW%4Qh&Zmj?rb=_HrxA0 zODP=pP!u@<>X?x((b$h<Wf88zwf96Q7C2TAq&v56FWjHoz4rhi5l*L4t1aAIzjN*8 z^vo<jEZ7I?K_(o8LB2dfF$@4pJyW=T?fS*@XHT7eZf5sBPLOQZd+YUA$H!-;_Ka+} z*V=epVsw?$OtYhE8CmmQeffXO<f^st7r@|xV^!3YHRu4s0@L8w0Vp#s-V0m><4KMS zK?zA7q7y7HEgIeR%QtR$Y<X(;5tip!^yB|GjIrzlf=Eo9{Se5JK1!z1LljS;$m}<O zHG?f<Se_)U@gnh-vNlBd3`$H<JDuZ7By~ItaOfwP^aTz>iHg?pBOk;ubLpMi*&_4k zQ$G_1hXQ{~5Lj8w-MDt+gY)lv=__Boz7e-OU6NJ*BSQXE68K^%yFq|xAW{fZ$q2TL zL%T0oV=dD%A}_?!b|&Sa<kwjNOm=UlXY|f2XUAAqRE?E@0IPAFN70^oCbW`U>y6b~ zL8I|4Rlce!+?rhNnbSBtEJppryp~GeeWduo-HrU=g7C!A(L&L{7%uQc=z<uwI;O|5 ztSV1Y$zdnPc7(qA`J;W)sZ~;%A_0!4W9usiX-zC8IJn!`0+`o#s8%QW;`0*-od<M6 z#x(RoPCVUm?GC=nD$BhAmraYLa|8{-&iPaZA-Ew4FJgp3hS40WS1A>a9y`YG{N*ZO zn>vkEK>=IAe{kvj$Der8bv>}gk}P2?@q*OvG{J=eBRP2JP`*$QxHt-&?!f7Hd--g6 zVt0MT|6tIt1Vvh+Zj^-yJsfq+wSMo_zz4xlaEQCjO@#bhX;ctZl7d5nb<%0Nj8Kl} z*FkA108}Dt7}m{OHwW!4O+v+qqaE?cwWjQoqShaK6(k-@BAP~p4@15mhG!Km-R?DB z|Hhv@_4KKFt>V~ySV0`x*omlNuH;Zeb0U9J%LHK37?$RR>`uUVXTQ-lS%G^U(EbN! z*Y91w{f~b2rxooh-By?9k>}$s$zT-9h0KPlEo}F|>i_7tHxBu<)~;3-1I&}22Z%L; zwSDOoPVQvnd?vR!%x`9Tn?L2FJkLGUz@4}*#vU(9497=gK!{IKKFv`Hqpl2+FdVC9 zPW5|xB&L(ln=(BY3Evu-s`|l+#XHZ;FYiy6)(aK8R0z1-1Nbb5(w4QYW@?d7jpju# zXTx-ECTI>2&G+1xWl^!H0(lBU(%Y)<_@ik#pR0+C*E0ka4Vd`%5n3ng$q%hY)Qg_1 zr4H{uq~E_Y=&{QiURw3)G)<Bg>scBJq5zaH77;QSHU_1m$eg)oYI@2KqI-94O-xOv zawP;>k<I4w#j|JL@;vwP$B!r2>vr1Z(HU@1)}Sj&3PUrhrq9gkj?r#yuh>pF7+4e2 z(-J2qO_tA+Xjbe*R?@F(kMi8jh1+k=>>oLF;yFnft&S4!H!NkMY}@c$qadg_U_y_T zbtlK=SxzvF!TS0#Pl1P2<!tSRT@$T9yKvtMy}@TF;kUp2?Zw5#pZJNN$mMcD5a`4C z@33UuZuk88^Upo^oFqw66bXWG^X5%B;J|?cZ@lrw(W6K6`TWilF*NLjL1r8JzCg%3 z`E03F`n&2p8V5~G=i-E@;&5|5p(soS4dQrneI01J>)ISgKU7$nB7+z|oJ<sWK(*I^ zN*Enb%`U^(3`vX;!EG|Emd?#1v^D4k7v8=$Ia|{+FZR0;!;+%=foZhc#%M{KI`)NI z9ga;L3b8-B@E0f*&jw_QcT7r2{79@T?Ic=oeO+P$6w*lKdX0mKJ|yykVS9P%<F2MS zBHgIi5N=sA94$_fG+D!onmMILlR2Rp#Z6KXl~p>ba6feJsrowykD*@w&_;iEuD-^x zD@JonR9u>I`kgk-r{#2|*IFHh{1U)^vaAG_4ZIBuA$Eh0?4!W(>z!>$%1l<KR@csq zRxYseurvo%+~{-HTZ_E5?lin~dxWMAI4gguPTpL%QWKf9jcv+DGS?S%aF|orSqA$V zz%30i+(CeYZ@u+BMNw3R&*e+0OkvP#YqI$G6DQw#{kwodPo6kY9i5^WuGij95NXMh z%2q<sm@AU?yk%LLv^+7hj~X^8oDLq_wC*xGHE??ayT2*kE(c4!2F{iuo-dgLPgWS2 zRHOtnMQ8J6lCFqQquCc2l}dLh%4)a#h52ii-K7$G|Dof>ay9XqNz@WzFD<*D!3lro zcYa5fWq9((fBeVSu3a+>qu=lU!5{p=+}zyt>(@aEx3;!^>$iUE&Ye5U%ga};Tme12 zckkZWvuEMIprxRhZ@&3vuh)ZDE?>U<=%bH<ivH$r{^soLZ27~{F@LK8(!dh<Ka=JA z46{MgTT}u>*(QBNLneuta=lWkk0?@xVFVIop&pK5+!+Z=GS_e-D>qpNH1#+ysWgSb z(1wBSI;`Ejr>0)<+~DPZcX4u-J^B298TyaMaR;oB=eXtilp?W<YmFr@Z`+n6us_lO zG{Z!OllB}ft+!%^784%z?naDV$fqgWKng!-m#(+-g6gN33{5if@JF?XJI#8C2!;rp zJ*jP`I0p}U;Wix8w;COH$)(x}<p8=Ax!J&-YHwwu7-e#Ii|GxHat7@u&B0Tuev@G- z+u8?iA(hF3b@M%k<2W+)l;?@V1@{D)|6@3ifJyXG*6jAm*_+w?J2V%NYKZ}l@z2Z3 zUT|$I%kNsfLPF<hHs$+SyK_S*2-q#B_#{Zkm`aRwL2RM;hGXydeO^oH48sM1-|6<U z+1$j$M7O;GI;LmxaG9BGp;WHS&)r?$*y2SslgR{j7es+#ge@bE+@9Il6lD#R7Vb6J zh<<CG<wZHAONlN8y22|a)!7;}DBsz)KgpDivFssp5c^IuaQo(<6L_X$8G;O-r3bx% zD7FN7rMZ#bT<y2F?}6!?nBF@&QVM*)=4`hO#K8#@_A@-8rm6j2@AmE6@MLmg(siBl z=iggdSpmTv9UBAvTwYpQSh&Bsy875-$HDKln$481gRh&Mn0Wn-*K4&p7?Rt!ZV95e zJ{*Jws{8WGFaPo{|MH<jhyE@+AuVbHj`exe+Nt%4Lk<`L#+2tjvAUd3XCz&99HU9m zIf{~^gvcQAgP?CD`eL$N7vppiD<}?!@Qvo!Oyb~7=>kPlm(DE5arf!xevTJkXf)b9 z4=@$8g2u8OSmGtWWQYE6qTrAEGLxOIO*EbO0b5skyl8QHo-*5rr@}y;YnBr#-00r3 zg>F@uQ22BdV;luhObS6bP66(;-Cso^Dy2sxN@>L_-~t0ud)8wR=lE8~-xjzBDM}ZE zN-vpcbZ7GRt<l;!igA2zloi3NnXWA%Borzm=AavTwyelI#VepJlBz0UukU+_AW*}; zTrtIYftEsR<?=g-Aw77&h1<QlX*>_tAxP0ge(!zniBnI$h}h`DyXQ_l^Z9q)aC>X7 z;Yvo2c5$>5VlFgHJ!R8^CJ0GjB@$^<Lh_%!@Zy)@CqmBvCu|Pdq+_K_re9X7_0K)~ z{2%@M-v_>0uT@)}e!W_5nGr)_mI`TJY;CP%izBk4f;zcYA4o?kS66cxi|f-JZ$z4L z{6&`YGetlgKZ#I1VZBb5!j6-Y6_ofm^mgz?ZLEZn1FrQp9ryR{KAfPwmMZPuJv|s0 zj^oE+H!JxAhuw7L&rrf&`_*50@ZdqIT&h;9Xt-h4YBm4<SH29cof&RN9zA^UU;oCx zs#Gd)*v!lf=|a@&|HFUqHLxJZA3aL&XApvk0)y(g-tY_m$(LSyVfXIce<xrxNtk}~ zpr)G?<+6-RvmVU>=W$px5Vg|z3&zze=GXrLmXteDP>CW9V>OQSB+}wokK;0mT!!o0 zgM$fGK$JD?NKXYGaFOrvigEAS_JcdiCto<&bar!tL0S_`+avRvgp}D`f9rbF2(!BI zx3ddN@|ZHIHpnaG(3;TGGa2MrsBfWKxwD<MND5w`4uziEuze#dlr<qO3%W=tJH_BJ z9S!1^74=QConrH5)F%_4D2AtiWg(X3Bf#dK5r?YCGprIYNzim3iPwaQ$-hYF-)O8n zfg{X{lcmv7%V^m~8{~LL10SZj(kP{CL3iMg!g4B%)ySoa(#3k|65``wA1#ciuLaQ_ znj7$()oIy<@_4;6El8AYx~t1e2t6}8^VItMTpV0pPg1+md0=0%mcDz7jpF0EoF+(g zM79FZgT>{EDM68yx%q|B@kx8&U4HG=QmHaNUei<AT%q)HzwnQNP`vlv*~a#^s%O)g zLSVJA9|JL_=%};38Wk#<o}uW8L1(?+T2<3!RZoLRn=NLP-c!!J3D>i^+@N_1ew3xr zz^Ci=I?p7Y=P(Rw^qO%Zf~1ISl2%dIVfP(*N)!d#al@El*+^G4$J1&h7WmC)D4|p= z&lJlzKn+rCMgAw|$5b9@Aqrx&y=}>IHZzs)xu~-5aMML}O3oMRg8*%{JY6rF5n_ag z+0=Xr&23wnmY&?7UhRdxZ~aI;K^Q0Xtelp<Zx4X>{Zov|;K+h2rfB%DLD449Z&G}U zVWdZokBag;2=!QDXWTapC@ID~*lrwVi1^ULuxZqC=z;N5<0Qi|*R;ZeUfX~F%>3bF z#oXv~*H(OqI$Mt?vvPi;kJO;E)gG)nYF0&mJ9!W|<|N)y<*w(miU{aSBss3lCdz9O z78(4=-i+qrMvGYo1L;T3hPS}Eg3RffqD!=@ve_VX!zd7V(T!{ig9egWED1G?B9n=v zA>%1ZvWM5QF%={cCN&3Qr|Zq88ppGx_wtotA7HlB>)<fxsG1fh=#$Nn<A{iOT9pFZ zx08y9J7bx1sltQd$hR<bq+aJqEq64NN1Y}}Fks~<a1BjYu3fzX_G5PU!P_?%xM1t} zlmF!I-QVxwcemK*N-~2I%W`sCo5|)jfHiyh!GpaA4w#0uwz{^pu?}SSmuB{>TDsM0 zfPPL+j#>R}&vi1nvhRCve(-#CZT)z)zSS~0p!ysehLlKCq22e9An6)HBSv?_>}>#Q z)lxZ{k=WJ)O?rUnlf{w4=Aan`mdsE}mi3GVB8`7kf~Xy9FzBVk2YQt;v91VZP&|y2 z5XS;#iwZSx1XjvEbyPu7^8G!e+csWq8WoL2|6d)G_QN+KkQ-nVGy7^f_le{(;Iz)5 zA<1$?3Y`TIo(O|<L>x!myMK49(K+$>k+iyq@hZ!?3~Mp0L$e{G;)l(ekceW9jCl<4 z&`G8PFE6VP40G$=_15On{E6qk+6<5RY%jvD-*+G1^JPKG%-y|qeq9tKl|lGN>EtQu z!!is%kcyf0k?MRGjpmHS1NsG28%LX4sG72RK$gBJi$0yugRl(`H#WV*_G34+FvHTU z%n6jt#H?$(;FQ2o?X+EexU7I?z^aA;ALUhbAC6u0F`rB#B*q?^E`Cc%uOI{zi|V#s zlv87I)cdSvrwQQRW+TLCZoGDhQ-(8-G5E7xw)G5RvKY5YwF#Q#TAPbJN5hf>gzFpj z#^zFM@U9o*eYxDO*%uvFn_vDNgDOqwPt=Ozok8RbR#;X7Z)uu?`pBrJs*<d1Zf+`y zoX@2VqtEiXB#EBW=Scf0948DI1<>uSMtj%nKAz`0&GjgB#huy!3=-h1oA-0+v61{9 zAh%|36XSrF(ph3`-a^qInS)=KQ%4vEd4AaKv^XljzT>)feR4kyXR>fLmyzONO;BG6 zqbGdtG%t9*YcPqaim~mof}9gcPkh7)()W8pFO0GZU(2iiKi!bHw`IZtbDtP+308&^ zC6Fr8n;`bVv+tD8N3;aU#BofZyZJ|+vDzI(Dx@rm0AoO$zcLuwVAuh}z{6sNkmi62 z+KiAef)5T;(zma?dyl4+Qkmt{LoKw|4lGGZJnT(W4=GwMbh|gVNzX2p!aoW(NE$@M z0$7D824o=s_~F?EL`zc!J|z{>Oy|tEzwy?qr+@BL?!@63X^uI?h@R#2XogWZJ;mjM z*av6m#D>k9#$e#vwoMP{gb_K7PJk*qQ9`DzZ~#R^CSekaO#sIRT*E`6nC!x&j%26v zFU5lC6ZFOA^SinK$SDs0|B(0IQIcKfo!EUjhssr5ox}9Z^dw*~2!jkFkOW0D0Fua+ zY+0*dAMde`tYaU^KF7As%Gy7CWNVMK&eBp#Su0ZH3K9s3AOVO(9AIXE$<y64-P5tU za@DJsv%gyf3_%cpC=$|HX^T9KntGw?y?1}#_xs)Z1u0VeS1qe7z*vjDcjIsv$uHVw zoYh{{a_7)6<qDy47~E+XRdC8+FyYc#^{w*wT(&UYX>4*lJLuQTWAo*5d9O=sx4&gD z-1gq-31V{J9@p)?m75$#&0W2)o11LK-ab`0DP?f+81P+!$R9d#Y|z{5bs8X%O64+$ zP_w^Bu>3H;fRSW{qR6G<#E3@aisNR#?buy`lL!`V8q2M8%V`@~x-97#B0Ju1?+m&D ziZ5hK-}dd>y3LF+SQiAAVu6neyWOCYD~}au7=31YM`8v+Ko3k|x-8Sa7ljm=M%!)A zj!+N@G?&qQnnEB%69&fHduB)NAOS&_mDzuY2m~S8wWEy0((mpvOAyUQljkLdlNg#6 zC4u7woU<0%6VnT&N|h#KhVl{N<5DWLg2)1}+Ay3Bg9XQ&;e>U9@cZ>6NhBr_PvSO2 zoMR{T-F2Eus&oJOZr^7(1E+p-`GZsUfzN#IwJUo;R^>l>A{xa^7;^*(W2iG<NRCZQ zir~j!iA@lEol1F!RrBEszt3;JVh0kqtIAymTyx5{4yVYJwIajvo@aT14FKb5Nv1Oj zrE`R&u{k<rJ;KT>r5W{*fcdOM5j2K*m=HMq1f?Nn=}}};Y(x<ZO8Mc!;}D0W9}ro` zRI<t{LGdi#_AN4w7ih-6c?X6FlpPZZ{4-kVJR(IPE_OHPxlc;!B7of))NpMBmPr%b zu2@zxB+cR#JdPjq+nk_i@|4rHY;PSY<dxTUUp<%W^s38S_W4WQ@x^OmW-D~*es3ZO zy&xtce-K46FRJFCN0KC7Q4=Ik&8}@Q46Z$cD{`ekZNk8JU{kMCPm>sD74lMOd7IYd zR<d1|rlzGOyKk!5Jjggf)&kd7<ge45*=s&di$$7p1K&?0S63K`r*utYc_|JIiT5d5 zb|OWUHBnvxrR<p#JKe$My1UgOyJ4p9k=vbMx1VhH((OL_$G=z~h2i%0F2L`?`Bzj; z&F3;Ov{Y3q<Z$wYD2l!$a)QR=@E0!(+;|xAfY%90JhR8Jpk;H8d%qhpDBLJkpCK84 z?tsRSCn)C8ynbjg+*<FL@HF>N-wP+ad}U?L5H%HdSN;f{A7Br(smPi#XGmh7qMB8$ zI$b_KQ!Su<sL>_cX5b)!40^4V<s!-HQj}SmLrC+jX-?vJ9t^+cxvr8Cqrh{lUJwp= zLG(ih7j=|N*{D>A#*+wFf!5hlhASs&vhG|k!X}#tn3^)U)LI%QrnSaPnnWG~6*|Nr z_RKWh_k)E&=eSlrh11h>XIu3NikTwNuoe{wPeJvaK$2e2it7lmk?-35V_tACpqOF} z_-%ogbL}3@h&0VPj$w2;En5hcoMUwbp6j)?3uChj^N)v@>X~ToH+zo+rNya2XxhPd zuBN$x{TLbm#bLp7hf#abD}YBI=9mFZh(bRZPCU^BiQ6tSG}s^?NMrya4R;DrGhm+B zo%Q8xX*^%5YL&5^X)+<74JWfo-s9c+?pCi|KXCN+(u4|L)*F1x^~$0$fG5I>c+Gry z^*Sz|5)*0U962<b@Jd8y#;VHj*^N2Y4co5Qx@j1anxf;ok>ELaumy37f9HP)VQVO( zYyEzAW_AWl-^B|Tdi}mED<nZ?vf7bj$1~ad^UuAI%jNbTTw*xTN0e=uU?35}kx88( z2XVB(%M@5vMZG`^z{Kd#MXLU@6gOd-J6SCkMGG`534+pTY@b>WM7c=fMXZlRRAc%a zMx4M|1-Yim9fl23f{c+=^Xk2|w^V*c7WhI&C>0jcaDPAY=09=HIQxelotrsPjUp*d zrc%OW`7)j<=+?lc0Mm=(sNcaAHNishqUeS;UN=XaABTPfl-mP0IEr$>zK$MgLwrFI z9i$%R*nL{M!4k7^`c5&#Bvu6{j!(M%x}a~<JgI6g4vf!Bx{%<ij0%cxWU}8CwDzzr z!9o;0;CLD*!~_A(X+Tkoo-5&wSDqIq1j`DzTpBNEnL-$N!vZi=x3vSmd}ih|Lb`fi zHNP=19-gEx>=Kr^Sx9R@bnzTw8pjFF?E+)M(8=5JQo~i>VF3wZSdS$fmN|@NEd!h= z9VV=U54?Ql^-kld6AwHlXR;)scP?+ex&5kMEj;q+FI;-|*}a|3Bq5#tcgqv|F1+5_ zceEv|Y7~c@$gf`CwVb$Iu7bj>*S0ol&R9kBoCb>QC<fX);AkZB#A2C0Jfp%lySUf{ z5yoIx@z3je^gn(O!rh-7FG`X`(sUTc)oKMEl;;QSW@Gv4l~$_(o3^($UB|hxejNlP zKyiG0LQ<6g_$d)0Y+Lm(R9NEMqJ9}6C5<hk^)Z6W5%DfA5$zeWl*tsw)6o3Rg<8av zL^8Y?6!zl<+~HE$KnIKJZb{!_ct1p3K;Vk6Fw$5;<=81Zi3Uce)=NZ2&{R1maqCwv zcebOGpC}_HcHJq0QVF7iEB^(qAc`=iea{6prl>j$L<*-c4_oG?2{;D5I1bl_5+4`r zP0_4;bk|;K1ls~7r&t@(*`SiJk!kl`f53_niiWiba0VU05dp)?mh~~3{VF4dQfAM0 zU$uIVla$9$uj`f9fXBj)o{{y!PwDxRh6YxDkD_>jpa<PrlC6UGAn8^d1SH5TM(DS9 znX%b?X`;Tf2AAx+1K_2qo)5fzADjQv|Lw)4|LPAivcmk@gXFD~k<s%KU@^nOd50&) z0(X=ph-U;`*MiF&w$CB}a&d|@TpiqT&7LT!G$#y&OfWIK&}r09edoEtcr|pL>f}D4 znEk!x_SPjr=QI9-*<Rk+xN&WT_iW>?M;^@-O8xd;y;kD|WomZf>Xl1ZE}k2!PAo3n zVhtKRLx7j-cber~gXSbRR`SI>OW|TNIReiVr=wzGiQh1M`UgV1Qj++GiZ|-*8u;%W z%(mkYC>bSOf+QpfhR}rR>52Kp1F=7Ft<LA4d=jkF>gw|D&i2Lg=d0DpVI_P5&z=Ki z394zdqg7rX)<-f2?fo%%i@=%*b_7HiMA_mvocZ<h*BXJYe?)5%qjnKA6HR7TGg32R z7$3J5P2VXikg!CFBw0FjKu95iiiqS=XJw&vX7|#m@0^Mb+}f5+B0#ew4VG2}Cl>k+ z0FL1$Tv!B`00X1M3=6R)!x}1{n#INZNDA??4n&RRI5MWH%t0m=OuLH{O$;<Uag<Z# zmHI0LqYyC{r7oU6rpO$enIuzWkZfttyD!WA6+wxa;#EL2U{A?j8K!*!1)Z|2PXiyb z20c)HKoni8OVI*Ifxv26vD`P3syeK3mtgAHX>66MbA|HM-qs38GDXXQOuf<Aj=A1{ zde@Z<Cmz$O&pq-ftNvm#xEM%Gk~YY6zvnsIn>&R<2Fndev8(~Za4@h31B0YF&kJiS z*URN{lBB)n4lgNiTE{dd7ZxkiGp=jHL*-aO5S6*ZM>R?7dNndb&*=S$*<kVLlRG;Z ziVh@24TB(4sPc05jZ?3UjZal7WtKe=2H}mh)qV5RrqS{3zRWrtOBoL0cm>bi`{B(s zU1C@y8JCe~&G&*(WT}?v?{x7)LjSN5eF?lo0d|i0{(i*6D$6)kcjy(<AP8}jRNs{n zO4l>prl}|rY?MU)zI*N**thiihQKAA#zvZ`ntqYxi=HKB@-I*v+(F74WF7ZDQH^o) zCX)1BM^X!*D0a85ov#tHDuVY)KN24pu_TpD<*uk=&!<J~T5pD)6A_)r44F+)Fq(cO zQzjxhikSEpE?b8GlRq(*S<Kn&1EHZO@m{ttna1HT<{a@nk5_)<kf!-}hqDtfJb7{R z`ttVr3fSnenOWa7WnIf;tL7CaRHNQzYp`pT#C=pR1@tbzbY}9_`xu3ff>5GJou&L? z`%9WOg6Oc_+mZ7Z2wKxC=Z3Yh;pWE#`nYK>Au{2?mzV}kv#MTTDCF7$L^6TzGijL5 z7DWkI-`=oZ4wr;pr@5UgP86!M94CaKZ?tQ9u22i^6}VUao6jP@mpHXI5}u9&CM9ZY zW;c_$`>i+MP&I9LuYKy&X;GAc{lP_UZLIe??O*z5zv_p^D=&T*G|1zh{w&y>2*<1= zV7y>Ov}|!`0Koi(_5cQkE~=Ucj#G+c<&RKWs@*8h?VA#1zT4ae`@u>%o@eK0ORHDj z6qN$JYFlfC!UWitM(svMrQt@~F%o4ZHOY9$htWH+3+Zqk5m#N1wfBNBizEHTt{pJ{ z0F&*30L&Bw`n^5C5ZLw5$Lf3(Uk)w+hn}%mQsWR(iu3&drM_(r7>+L$G{-g>Ru1eA zMQyv*G)u2anKhg|8hA$Ueoo4ww2PAuf&i>I-0{F{y?D7xi4_Kg=|@AM!K;vynH5Da zJX%62dbdGL(}*M_0<lTze{YR6@p4M7yLRrzE_L)!gvRzs;^Qn&x>iK9f@!qkD1_lA zsVp4+o;Bb&3OIh)ZzGM?u3jNYVsq_UePgXMF~x{-b9?Q?6L$}+Zl$_V+t|2%?u?|$ zjb^>D|0tJ{DPYXF5F&|21+|ih<pbBbi?z2|$wrBeNIwZpaF1H?Az%zf>pHFs%y5>m zM=_IKk3&Hsa1nSuDhX5}5X4*(<!z(E;tUMha|W(s38D<ou(7)?iabx#<IMh@sK2qZ zhFey3E>D$uzM2>9c8boC)Mpg63WTNK>4DAVIB<PF$1_Kc9s@(e&?%Al$By3)ZWiaa z;nGa{Nb%xs=!_4ZF!14Sh%iFTezV{4@<jmAODJU;TaUUPm8aujenJ=%Tytk7BSzJI z$J9*4@o@FZeft*k<%w2fmnRJ}$@MI1vc$wb>3cDWHR?#F4jY%?>a4ij1^D*&(S&)4 zhX4QLNo69be0hdtV6^z*Fn1pJOpFqmWx*iBzkm@8>qU_iu1Xp@VSwvuCJbJ<XOhJ7 zGNqMaEp5Bkx(!ha3~dZcHRH(3!q^N#;fv?jducB75!o#Q2OtUsZ8xjceM)!_0!Jt$ z3HDvl6m&v35g&y+*SZ@!$8OCj6GANB4v(2(5R)ll5-w+8+`~`i1j!z>!Ss+3u5N#` zV78=5zGo?#a`diyDI)b8cXt1NQB?dO%$JIq0<4f^OujfiRU9v_udV8pSye5C5g{?W z2&6d;-}UotlF1BucV)TfK@i3P)o(rScnb-!rxz-`Hs%fLAj@f*w)=a1Ah3)qBA*0E zkZiBhg#UnDOOg=yI9#Dvm;eNZ01$=+2^V-4kQ$y4a`KU#phicwFJuXKSA?O?=Y!5R zEq#4v_6zIRF3rzRmZ}fHV`}Z~a6GGKatJZ)`bHd>C-1ozixkr^`z;X3;E+Kl<MPdb zKXAy50PlfZb3(>7qsadQB&{Igf5?tiQS&;>OK^zm2EN@ZYLr@>jT4=sES9k0JQPy^ z7|T)+BwEMdSQ_rKn^1W$)rhd-D0w>uEp>v_Bk?dpA|w6dpO^tk5JWD|>7uBDBN)Xo z#xXdPVTC|W0zf8lG#csTaCHJlY2ilfJvdm@4czSjc}}kyMkhJR0Sv<c!jd3A4o+ir zd1bXHsY4I*(fIR(1_79r8!<(vh<HCy08fv4o0$?UiFiM031Z-`UAN5e@NqtS%e>Jq zxO+QNk>#`u3#t)@A;)(*o$bq)CMK%6!bB8<QSxyE#soK-g*(yjw9?pLI(9gTablir zo3dI)X>1QVrfKA-t2D`qywZ%evXUw>TIB7876;PNr#Oa@7<yRK6%VwSVO-ar3fv5@ z)FZDPCx>M{3EYO!K^{_ZrBP%h2?ri{GAl$(mI4AesDm68C27!WP(!A=a^-w3U(zLY z&~ICVcD^*7EmY0kp6A&FOQ|#`%7<*@O%C*juJLKpu!YFZhsKL+{#aI@3WBX9iEuaN z*h`|c+uY0KCvwF}NzEGFmg|_{1GQ|09u|qr<j1T**EHISs#7!tOhndl-DadJ&&t`A zLF-Q2l`4~{RGo*NJM9kGk#dd`a<hz7-rL*rtbRt5cDHT-<C>bxP=Z7-mB|tx`+LA` zNk$bF2~5B+Lv^SMP~yZUJOKDd5D)%?Sfa3uW)ckIgaGjdJaky5S_pjX7VsMGke%bo z+_=X}Ff7p>1)i<QZA6V~RfeI%4U7i_g+mB;+l;V;5DA(abar1`_XVjyrO`*l-lLe! zi#3tAaHAApp18#Jy8?hvOd^gU^TWCuFz5{;^&J{1e%IVyCRkCBnN*n%n>p0)T9$1K zJR_^Ds`9FK>Eih_r(QXJ`&|c@4&$yFf{sgS$00lH&6qDu8ofrZ)#Nzd#SN5WmJeO4 zjnYsM1lu$bhg@W~%pE&40>U0OROtkCHy}ky5lBVmRe_V(lqX0jq<1OWMTjMFmg7q7 zPqRFpK#rqc*Ci%%dg%4RF1W74p`My8GgNBy_J(wX_Fd!J>b0wvFWvu8#di$X>WG5S zYwu)>Qvs>@fk_gs!e@0h-{Z5MX-Aa6&;m~fDdp0(=Lt_m(GyX~1-{2}g6DZd9*6<p z`wqMT?FVDP9`rhm-RXTt;By{yo+yJnbL}2EY#B%pVyUu1(9fadsOvozCq`|nRhd}u ze81nkTFxm#VUFhW*H*67YJ0bxxFZT|;L9o(Qf#$WGYP`cvn4?UuB!}MZOiF!f=>-o zoN*&sf|3Xoel<lgJ?HBCfDr7Z@8i}bnx-j=G8}_o_XA0i;CevWf5-rGU6%p6{jQad z4?o1RELr}$4v`~Zkb!X>rq2Mx0BmMFY~_Xvt5Ga~5;xzW8A;8&L-!IeQY4DeXu&=8 z%>I2eKZS@6ZXZJ7W!V;-Bi?y)t?N=bje2i*8i5@eUOmPgAOn{s(-8Zvbhu_UEDA*9 z#diSns2lg&^<0OLPl%WoJ24$_NgiQC>ZZ72JoC;zSWCF+78B=KBI72z7U7V59$k6S z+5z6h6RMoD2g0rdsum$3jpC@?@*8_mp{OeAk=yR@!r+xxUvexHo|LNUJTKs0ktC7L z6^<OcB@pF7w~mvWSdkdkM26jPi9Vjka~N^RBrNWwns6zZ;E;aO9d=Oldwz>{7yz)u zDI7VW(>EC2Mybq*VV3@O=;h*glIG{UCNri_s2SQaNZ0Ogtl+x?(_j=W2cygx;HE3U zNGGRfC0X9wxGo*s58eqj;qJNZoti;PlBQE>!`j?Q)&f*e>68w(5m*4W4+EPD*d*TN zrPm4KCx&pMGP&~bLDK|Dgn{4Q+XPCfWlOozgr1K8MLV18g<@g<(lG!bjD+QjX9xXY zVzN0o|0Y7WY_8n_r^#eU&!Zj3b<NE}j#tV{e!@GQ9a&^1Ca3=0*T1s3c;L3fz|UhR zlyUH5;&oeH8ts%O@booqZj1Z`OnizPEa65EpeQJ*6Ri)Di|++tzuyNCilPW0Y&04` zOF-H#FE5`ub?O&?@fZK_5C0IL_}R~Xc5`zR_MDrW1Ay)B;$>gJZJMU=&u5=~wo<8l z@rz%)apMM@3LYmQ4TQ(|`1sb=R<T%wH!CYE)oS%?U;A3QTz=w-Cq`dXuh-$UCr_Tl zT~k^u04MAZ_<!})SNHAP_wd6H|Hy&exbISuj8gtb^%mk`qj^k2LnjFxuzzUO=@{3b zft#kV96U8(3p64<-z>z*0akF*7#9i$PsvDyEbDD-?yU8JXb?Xr1>+>;IhKtrFvfg# z(r}Xk7ZJmjYo><-HTcva(?}{5T2?Yl=f^G}2;m`7MLEuMVAxCCV2n)Y067L-3n-6D z>31#&1*jFEc92LZ5qhjPovayWp4n>C^HY>|c*Zs-$cRZ97w=3BUnxpVYetq9%jE#2 zoo+XX<Nm-Paa*ngt`qpdwd*UDu`yN4(46F1U0u$n$*^N2?s$`e=LCe&h*rZw-vR&U z%cMTVA2g$$74!#DFOkBSOx!TGz}*F%6B9K=aKoOh7R6>yzx>yZY0d6GIK6lzbn--U zyQ=3r7nH5X3zTEFDGDfP9_Sq02Q62|4MlBp<HoumN{0_GHg>jg2OboSXQ+sg5JM8a z;alRATA!KdP+pXn1S94XvPb%@)S!gQWi59XiRR#5sY6u^mjDO^s4Hr&)7oj*H$iJm zFWv$-9@uH<JJ+u*r(yib&;4|xW%;)4IhRkr-W{L1cWdp^-46&9Rj|E&z7$J>?tA4R z=0u*hdvPwSc@Yf)=EC_mj~w|KURC?OE{c5|mYtF)l@I|Y%*SQ>@Nxrz8wld+?r`HN ziKlMt@mKcd-v@+~las&k8^3Yz;K3)Kd~z@t6bc2~wt@JLB-0BoywL4-0Wk21uIqp$ zcw-nwsZ;_2^9#T53ji2^4eWg8%$aX|;~Tf#b{jwow$^GjI2CwT0PXhnHhcoO1xx~f zpL*&kfcjf+y#+9aQ^EIs`O9C%dCmPk{1XnGnVI=9GMw;4{E+C6YIb7;!h0}|xS%0! zYDT=%3k^QUy&FNLqj)b@tW$U;*9`ol1g)nrjzaWYN08w`s-1>$zD|Q1Apx52^QDMl z1){gXnmdw!OUn`+pl6)x4D{?cqvUs&FKQA?gbkf5z~G?M5XK*j4~h|z{+2zk2`evV zz)8~++JQZjU-vIyv3fHX9;hKuRl-gvN!R7hpMRshYvpq4^nQ)ZF1pJ)#RcD&#DJSa zlA-H_HaI|bjOSC5oXuqLM0uJ3P$gB{?N430bb+Cmr9%gY#XH!*w?;|#?<g4r<X9Cm zVyO0`Mp2x|vsIlfny4QYl9WwagH0>#1c=U&ks^Z$2z<L@oA=6@>z!uf>iPclW%J}C zo$?s3XWpWzV=x?yj_mtm6je65ZSYi}`Y?NP%zmd<s!UB!&-}&Lzbc9UaWR*%EQ1pS z&<PaLm9mozy(m!Ua+OsaKEY&@Zr5t^l+zPM7kC2Mw><4jH1SVaej4x=1}^Ro!?C1H z3S2H%9M9&*j6Pn?&t^0G4;_+ZrCzJs=Ahp-rluyR=Ps^ZFoIyg575MPUXb-S&zxOd zxdelG{=m_JF-W2&KQWgtPpvJVXOQ!SFMR%MU;oCRJ@xbxKlud`g_!<;ot1PoQ$grk zNo3&)G`RjH8WjkRV`3Pt<WONI494FZzzy40S62@mI+V-h00U!VW8g`Fi-Iv-TwDZy zb?n$Nz$8$VkAM8*;1!P?Ig-g_z_~s8=%W)86YvJm3&>eoS^}@=I1cza*a3Vg{Qc>l z{^{xIX~5or0|($d@N3`=90K3y<5?-7$kgq(-wwcj`st^^oj&x?LvYlcciyS0Dwu{J z4TPTOhn@|7DSf-SC>l=94Vzw!QsurkSl{+Z6s1t)o*=FQVNE0CSVu@IH|(8(gE{nE zC3d^dys_m_IgyFqR|=A#34#P@L`fm*JJ*@m?6vlM6VJu<>g!UbI_Nfej&ZDBV%EIg zj>5(;^4eRMsnAG$D_baByl`cDX4dxYSFW7Xg^ZvgCmfK(_Zv-8aOnJj?$hb@=Xd&I zV%z&aHb)m8w>HWY=f2;34oOgWmMO#$2!Zc9f#-yt7ut5v?Fh1baqW7$*_xc3puz2e zKXm$O91O#0lHnu}rV>0Om_g4@jWK?XCRsNaFuat@Pe@2BX>%G=OdYMF?TTt0#H7`~ zB~0#*<4k2zpO}?d)_LQ*m-e=Uz3py&`;9bR&6PSz)}To{iX?_FgVTktYSp(ee<YJ) zX$&;{%JTB;{6apb+d!c?&as#{^kw~3Q8|kcXqgCC4B{20eJLHZQcA$BqU{JTjfi!I zx}Bo4yueCIelX}>y8hZAZGcCY*c>m&!z@RqGFHVsCH2h0!NXC2suNcz>TGfB(=*c_ z8=opn%^fuR?e*)+K)GX3in2h)K@|B>lyJO~27OIJtXiC!IdJXjrR~l2>6sal#LZfE zdsGtiMea44n`Zc9xW69A=m_8YVYyo5f<Hyhfw3RRCxjPxDv);I*7Es0K=H@dWZ+Jp zdFB~F>4%@~`t|F8!>Oq$&>p8xp9Yi)g7D*iJD3vNXsW6-s=f;Mj-rO8wQ;j++$9EA z5dGfd|Hu+)6meF|eFu?T>{0#R;}ly#i4B$_Uzr2n@ZzcSm%55BF{8z?_n%)$kjx^D z2XD*p3<;dv4v;{G3YYeY67sqNlh`2<r7X>mioh}?vIjjMiK^gDW_xL*R7&&z=IdYj z=6An+`@y>(`^@n~>c{>&)tP`P(xOXileKTncfX2w%?o9_)5$#gV7LFpv?CLYjs7;l zt4SF0y4FsK!N8oJo}!3YRCBm4Yls{7CBvFLVBLuXBx|(XJ%bo@IDZd7)e9_1DGHLd zx3j8e%c7u~tu3YWU4%9Ri!+SRv4R5knHP0lFg^EruYEc6*SoE?YgcNvMO7wq`<C*m z#$@t`C}wV0BI!UFQk{B-rW0NuWG(xhzkXqB<HpH*@133;>ofzJ*pjqw@p2CldE6+~ z&Dgy;ZEQ6%oM>&8NbH#8If;!^HY)L~c8A;lgzKiclK9$-FRfm>JhfEyBWt>J7#HI* z43?$AspJa<V2f8SuBxh7ooG-@NmTAxTRta>wCy@`v(xL>*Lpoe%c+Ns9;H)`q}iCD zMLuR&5VEP|5}G2NKK(|c*?#n~kDL7l$;zz(r4fx{=_@q9=(?Z7$tdXUUeTCy#bA)} znxrVb-x38lqK|fB1pL?+zVL;=aku&T`L~z7X!@?Z?)s>{oqQ(@Z#aRT;LguOqckFE zID<1z->$y-PXC)x06yHYBw`Q|lLVG?p6>y>fWz0WEnjJ|io&4}U6TN|>qgYT=5*Sr zZJ*7J%}e?;ZZKzWQ>5v*0}yRWZg!Y&DtK{HTYIZq%!;`Q*RI7O1rDm;ZRuJb;L)+W zilp?CE*f@m0tAMv7AEZ6_Mc7}&&2GQ6<4+78h^ZEkw?R}#IWAqh(Nd-Jh%+vZNBbB zk=1HWEghle7H;kX^ca0#pJ33#f$Nzw^ij+2_@OP)8pCjo-Gj5`OH&jD5*l^-Uw-q= zGY5~&@Z9|*l~2<Fe2eckJsWiP;X?U1L3B#h>l1S;zPEMb+Lf>U>lXwmcjx`R6ZfyJ zUT7G7;ntInDJtce`9W`tAaY}4`^<qQ%Zi0Fq0Y(rcSx)c0fC0otGe#Tqo@)GeM;Nv z@(ZGM0ry;Ye42~tE)$TaNxGZ(pXf9wSrKo!^UhwYnL0s-?OS-|qd&8-zte64E1#ZO z(m)}w?#^}^1QAKU;(PY)jzbdh+|0zmqqiw~F2UZ98~RTaxh;QCZ<$F<hzw0O%=V$f z$8MLkH_x2%9Q(GD4>GKu*djq`k=N)oYOKV9<)?8=Om^7RSs*DcQ^1q+^!qxlR;vXg z6`1767Y(ISKo4IZl*l)1|NS?=fS`^_xqZ;&>PO=JzJFzV)Hf|1>Oksd<j@G8qqjHN zz;F{#cF+$4K%!$va;8mEzV8OCpbC;=_iC?R8!%#-Mt|d)1YU0BSt=Z~jrzJSl79Od z%kek1w<ZqW%@aXu?VQ#INt2q6lbN|Aa10u0Tc^K*QqGf<dVTBo@uQF3dq2+!`GOMB zMr5T!QJ8pK0R`5<oqtnsfsaL2`9I;E6|{Rgl#fO3Jeg3#WLe^aZpY~IS&Hi5x?mDs zv<icAF7G>b1kZ7}lU3g(;>1hhC`~1hGC-YW8AqFfUt@DhnsaQ2ATiH}y9B!0wK~2F znynOts~gwPU4FBnDB6+R7UE<SZ8xkkO!_GfO9J-5A>tNUxmC}a`Qql-<QuKp<rG+d zUs}G<YU~dBo!v)1dy6QuzLRyGN;$WG{NYbtUA}DgcOQ7TGt4K}QDO`_M?CK#J*PO1 znV^3{qdzYld^6mbCI&l}8E^~{;efa-UE0o7zd2|<HamAmnzp0KiA=r>zsRvn%V<lA zGBZ0n3~kKb^8iirwdU^8C^_W&9bE^?N|^0kTFPbf<p@_6;y2ru?SUnrK%(LxkWxyK zL@rH%N0cR5w@h<ycc<HFm8z2q3;VX4fvf|uj)3fdHX#tO2|o;-<n0#jlw)-n_6IWS zM-w3+1p#$iTU#?TGoS;nUAy-D^Us6W+qZ9@qA1;Nccl6Nco#2TY&07132c&OT-XOx z+~^G7`ObIN*4BRcmwy=`3LnBr;0-W3I5WI~Gq0?yz)^s@X0xg5`j@`+r4uJk+;h)8 za5ngGZ}__7jypblQRIi2nZYABNrx?7-b=qnQQahYbNT|;D@&r7WqU~~c$O;XYjI>m z5nTW-owzSutl4B<qkq^oR-y08lD2gBXMprNMjL2MbzVn&hM+j5FrBgz2Q*al37V_! zyThj#x!~zC(j+>Q*Evz~ee3a)4|d$z%HRw~Ve{nhC1FrIu=__!x(43MU-~Ux+RwfE zKgZ?iSUu`rQ-<mP?~lMVj+tRL39iqd$t}P3(sr*Sio7UFt$|_NrfL}suHMeouCK5Z z$xHIq_NFGQvr9{Zy<Mx<Mg#@4+7EmXRNzQ+`OMVxwC7r2T=3~bP`1r92_|Rrs#+vT z4G}*2frJu3BSOCC5~<A)#DU4#TW02)M!)acjpA4>3UB0!aHV4eW$;RaS88eWX1{;W z^=nbPY0obl9G_~Wac9uJ!}0G?b)vqv%7KYc@-I9`$4GYU;6zExiZDVA9ySnqY_g=b zkstedzxiO89E{@@fg1+k)ku~F4H}6O>)KipoT2$|#eRuM=NOj4v%*P3;EO0fEl7Io zTg{!Vlwmjfm-b~rGgCc_&M0F%PsO2Y`*gb<R&jlP_wbR!YwI_%nXGBF8AeD`mZY2@ zu!BKLkrAK?S1cHbpkYRpGibgSga80Zk~B>lsVTUULZJYE0clS>@x)iY@|AkM4ybtP zrI&vDw|~1*sr>Hm{w~fANmBp}Xu0L(<s(Oq0NzZ~+`oT6u<hUbz25^s{@l;~+_TR< z3!ek(U{6q+fBeUP3@-7~rAwVoXLEBCq#!`?`0?YtUJo|GA+R&3Q`q{s&wcL43tPkg zLvPQ@q#xuh-@z*yQa+m`_b7Ib*AJoie3ClZ5>7z5czJbwAZg0qB4L+ELI+81M8kK` zk{W^p)EL(VlB2SPA{fMwNC=Va1}<2MFp9<8EllPDuUgfy!;y<T)2UmH4!s3F91*lb z7xd1BgN;982`h|3xBMhI`9<pVf0;xcng%UBn>aireqc2%n&<nQTb!N|bGfb4XXlR` zTluTM5O|JanDdv;3$kF?CMccIclw=%p3P}Vk}H%v-#>Hq4W1LhKJ_|{C=8}%7T}I9 zU%9ZbZ*lR!0nasu1fC)(mtlfK$Cpyl6}kCdhoac<L#!h~1_*q*foG2qG0utABex$s zc*~76+C-?1QXy~^V7mluW%A1>?s#bHMpu-!5%Q9N@w}t?ihgb7_5bJh|73c4;>gm< z)8BY?ZLM3HEXkkF-(KYmvXFS|Y-2a9N`6yP@{V49#;7-f6i6~{4Z2_kI9|kE)RC4( z^=$b$6tlhNPq^e{<kkyX;usyn<*HNrU|?@<Y~`}q)x9?=l8|Nfn&Sw9%5oH3JIzR- z&#AB<I5EN%<>Ze&@(H-S+U7FP<&qd4eFWN4!0WLNZaM@+lw=}YDGN`Q;^HLlxiR4A zu3x_nI0XCv_QuC?k`DN>!-o$Si^avoMc8!ft+&Ex2H3z3;Lt$w0gVKR?(FQq;Q%o3 zbpTY@^U$F~U;gr!!G*#}jvhS<7Xw?te}WIpX0xCD>}O$5z#*IjK8Fth@Zb`MIbbf> z4B*4l)6+k8Mgk$Q1enAy!830^gaZTf3@!@<*nP5o5G8cBR3<6Zs;!^iPQhuAf1BVK za=7}30$g)?B-DV~lDJ+(9GJno`wI`>lb}*U(d@hZAX*a>J)vTU>^WqIAXSUj#~OdV zzx5QNa32gyyFXg|U-+$4)b7`kv0Ku@qPMEjO!8r=UK|Gs^V}bNDR7+P!Nt2C{n#fT zdMr(F$(q@G1=kW#HMKPE`L?yaDUz%e28yOK1T_d<MwP(Pu^i|hDhNE5R}LM$jR0lj z48SYmc-$}%B)ZeQ^!(E=AHBVL?8HN!#{;qb;U1EQL(pTw3mBTcOOzJU==VIg>=>0y zWf{jOpq<&-7iVW>gtk#ik{lA{R~h1`8qJs!Wsv%(UO)SVfAZwTbLTSoIS2hQGkG{& zTQbljm%NfsTRZ0BwO#4f!)>kn-8h2V_xPZX;}TQgJV;GkGh29?Vtf6@=X~}Mz59Qv z-r0cpIXf<v%Tw@xUikK3ZEtMf`^bHTJSW8D>y2}Hb+!yj-nMXOb@2JV52GeY8Q=5t zd}b8kEou2d+Y&{NprW1~G+ajH#9lv|&>cyU!jujogx9HE`@J9pFnFE^t_j`)Hbx3< zVfcbKk3Rb7Xt!g>j*Vtqe*M>f{oOM<z#c~$5(Zy5e0~1&pFer>Bz$<+U3cAkFD?K9 zCkKE%`Q($Ma2%kZqr)G3@Ij8ls`poZ<yYYE*|TTC)8g8vKW-FQy4CawIwgw?#}dqF zrZ~YpZgHF4^quy@-}8zTu656*R?i88R;ECZRMKh%&s{MSMi;2Rb?qiR`AWP`2*EpD zkiRbrgk@kDrWE2Wx^1PMVZ%vKU22d@Gh0v1n16*BF(4^hc^J+8M(X+0wci9IL(Ej8 zWHK~#hW9>PAL9-jrJ|UoKsz04u-j{EidK|mNfi2>jwne2ct)NLn@tACo1}qddr1^A zfbImWDiAY<WsP2k7eLsjt-U&3E_YgWhM_VUE${_ZJ3P1elB$VOsNm)4A1WOV|0sN; zC`OT0-(7p-<=+|@T|wM<;PHKF6uW~`7~Dz{1}kjRtViOoFHXt56+87q`%W7DJI5+g zrBeLPcV7j8*YEB<aQFnTZOh8592X#=y0>lni5&~t>lf4``vp1sTIg-C<UNR<O;SH} zf=u==IO#$X{tT%<NUS|I*8AtkkFN<&6c+9j1YAZSm(MpFO)_F8%f~OQyrzkjNp%|R zPMpNK{0s~iv$F+HIVDm~z>U4S%^lyfE0c?XL%VjwtC1H4-(8Oc2KWxM*(1g^XIw*t ztmGhY>fHNGw1D?3l}Zf5{1_9GSYt86*M0ZhcXQ5j^afn$&;R_-|KL$01m1iBHT`HZ z>(lh~Ml1+!M(|{T(nU&ODS=5@2B%x|45IMjAeMu876AvgkqNTQzC*-x5?DY2U32xD zZ%*5Uu5o|29gWk3q^Xdia6vwD7|VtO*(lLL>cY-f$IWL`I_Hw2llcsq{x4_=F<1Ub zbS{M1!&Gt7+tKg}e(K$9JpMic)p5jpe(9&4WJNLV8_TOJ3CS3q`|9g26KPz?mr!l1 z*Y5#~8Jn2etL-%Rb{~KIGmYKt<(12#td%MgwrM!7Q!G~p{a&}dr|Q`&moE3ajr$&c zl;hX{hm3`tW@mbSmZWkZu78L~3NlG0S?!V(n}od^D=+1WeS&Q7Y_wHvr&XJm#GkZn zl^`V?J?OPr<_5tJIL@c3Dkatn;%lFo_;?b|kqr46MP9qH!^zdzc^jd>k|&kga#Oa` zjcAT`YGcY~OBz3WSz4Op^HcSF_22cIkJ$E-uD>8<E?AvABI3br=R$t_pCiWZR{tlt ze5Z&@0f6KS_w8E%3b3+##q`F;D#r_wWO}9_dHM1*Ah5N!>A4=qf&7az1>A6j;dsaD z;!Mc$glA8Ij?s8rg&hnkjJKA@wp?_r?T<Ch$qbSIpr*|~4g&vudyxbRN!|^3EAUAJ zuQxCh?lR3%xVo*t;`<^nBp{P#Vw@G1P()Z`DT`5x0S?qmdRA(MI3)A$I>Qo&lu{9n zsU9sw41)(OIy+JO=D77-OqbHqIM3K=)QGJ&9B037JO_iAnw^N!jJ2aMq$x=<_;(QG zIAIO<bpi8CFcgK835M2@*I+=Cv13!JSY<LB>({`ZSF2Obpg%V~=LTU+(1m=yTq$;1 zjftr_PL+$qgkCK6`$iOoY9>q2T&LN{70dZT0q#g`>&E!h9Ka|DQi|!Ps1}B_ZTSRA zf4CbQ#!hIWtgu3B<--4A8b+tly>{jNC!W0T_}x#C=<M9VI|=Go7*Dc-ktW9QcBqp0 z(5vUxUcYjBa*U&>>4`D6Z=Bk#ohf8zqLdN@x_SMLt2K)!7f!F3pLuXfM4MS=&{rxo zdv8psb(P7>O=-eHlk=`tdYKn5@ycFc-{E<WTPX1No@d;RzVh?Q)Gvw1V_6P#qhVMK z>MYFSxX^2tuJE)3F3RieDVZ^b<vOih+w93o*7t2aHwNy<u}nq7ZJ0Xsbwp%xh5cX= zczOV&%L<T`raYa%nDi3va+_Ic$B!-%|M;^gXc8SMI941F0>%kBe^_7#0bdSrx1r%s z03HGVPB;=20&d%K`<RoJ#OJR`n$WCHI0Gk75Hx|@zw@jsKolJic<PlNMsp`FTPU>8 zEcE^&CDo)bLCQJT-G{@w`~NG^WclD?lv$vwWisB!<fd81tGga({Yts)83vclfe7~p zMnKWPGZWXbyB$ov0iS8=n1k}MTLn!86HX2WR=o~CpfWYSbQ}wcL3i)&`|hP_HViyP zkx(ju3jhJ14A-Js&Gz)dp(OG;&8_+QX_gm4+!>SS>GN-$`g4+!%hf^@;W_CK$Soro zP7_5X3|E?a|F+#axBS*}r_~vsDL(R<PiJzs(cBl0-uq-|d3aehZV&|ZPW+)4$L&In zIDY7sM!W5}yJydLa=Lu%AU`mT*RM8;8E>vytTo4b7AS{oIkQvB_w5TdnA+{MSU1~a z!XB-bHci#NknTG$;FX=wBir@Eh!tb+d|_h$4gOz9<;OCK!*JLS)poX$pr+>qqt`pM zbO0#&xpQZt*jqYu1YEb#Z90RVmMyz>A6TfQXtvpJ?QLX><Eox7j4d>FyF{{)Epb{_ zzGIr%?S%uMv_i`E!Jxz<o~NKrZ$$KuJ#Ny`EI-J<e^31<K^z<hnZuYKvi-1Q$MA4N zPy-R+M<`55T>2^@<CHKXDkN1Z=4Yl-L7r}(W2Xyka35V$OUb{N)JNbTR76B68cx1O zj6zzS{p~+P1nICPNp!8`uu=I1s&iFo|MyDtx);oa`yWscOH;QN7ji(Jp8MKY3*}1R zw#vogdcE#}yWD@^;+to{5$@Z!uQb14>}=6sYA6!d=5QQIRYTwJ?d{S5__-iv86l6u zoukkP`3#>Ste;bYBmzGkuDIgW{Zgew43kheK?SJU<{*wj@VLB4s(NPS;;v)*N`^uH z`;C``$>a;>;JJ<KtNqT!Z+!Kc14qVhx$`zePF5!F6~tN3mAZ|+wWg<X;Y1$X9Wx4B z9ldPF9WTgpRrqbCBwXxRn-k+_hoN}<y|)H-{{$z@lLrYe3Q2-(HO2;HXZGN=osI1o zBEKCMwqsW_jSQ0(@`I>fcLq5^Bt+$DtG^)<^W8MFmnZYgGUF}`2Aa}u5J@AeCiONF zWigGcxrJFk`>QX%T&_$NiiKW#r#gKoi6f(1FOAQ`@3hT!CYv?;%{Y!SxpJw>o1Lp^ zY!htez=D1tVXcAL=-OQvgfZVTlhBEqR{B05{GH$V9guDF^YfKT1u!OxVzb$VFPNE` z@jTqiFPF<*xNt#L)#>T!_4Rdr_<}vpo;|y;urLyY8PMsP*6a1w*48E`C*eT&3x;`j zcNhL%y?Pb4o;Y!0RG1Y^Y^T%Fb-iA%!#O`>HUCFjtan0&6=g|ERXG~Zr|GDrR+5Gh zZeJ0EsTU?eLV76QY4y|Kq97QNr%FUr)&Yd#z*T4}{(CVOKtp3hzKuwalIQE+WP-g= znq|kUNo+*6FIis}dw<G$D=977+F_|UmL$E_YMo&R5lh{6>v5K4cIu4_t1JCZyE;Be zFpTf}?RINn@qmym_)%o7u7GF>J;ycsf|hYX&<qTqUU3?a@{-~H_<m&BHaOLHq8;8T zkAkC7!YJ?yV}z_`zzMuP`xWB2cY<8X6pmEJySyw$qneND4+tHO-MIFD^*S$ZT;KEE z@c3P~-tpki7AlWAX5xEXzhiN{#j@d4E-_=pCn!GkQiA$kEgS+TKsvTh60zmd6XPc+ zN=M26jYu9BN>BD%HcQb>urUcvb%zo7=`?z|GWk}wu{BQzYepqXl3Q{Y34z`+W@{Zf zL)kO4eR=v+XV0%&g^+4V!UDxtsh}M>o4OQsO^KIEqQqL3C5g%1ci#n<_3SfG9Y1l~ z!v2FaMQ?6g$rP#-MVp-#o?I9<8?|lR&M9A-<f^l2=(KmYXrU@Aj38y_^z2;Vbh}-$ zO78T?3$^#FJKAV8o_Xe(PkriBM~)nM`st?uE#T#B+dh2wFrX3M|LU*)DqsfCwX?G` zTGP*Fvw&DQ5S$@w0+{XX?S1l-pBx(-J9X+5{Ik_+!KT4ra09nh!!e>TGXC-}|FYlj z1HBn#Di(`H7AM`3A8r38T#<#8C`yeY&+&m!B!Z|X1V9j;x5oq5fuWCE4ryuk44?bg zh}lBaiNKxD%Be25QKSM0!9o4KfDp!8Je(;?eKxD~S0?ON5R)ZJRYX!jJ(R3JVZ3uG zQ?Qi(2#JC$_gT6YIF+~$<gZDITv1Wuz&}_W>u{_%Jwt*Ttk(`rO*8ZRkZ=2rtrg0# z@8X~-aD_ac`sPGAdtixXIh<&P!@;mEh~n7uf_Dc<4Wk$c+(0x4Nt$lfx7*Dc2TW9w zIbL8nAY%#~%Fz1m_PTH1mdSD9dzW&6{HqMRcVp!lQISiP%;6J{soLYfi=&8(6T@@1 zWmO&KxDWzE%Tl`4^@+flDl1X)c9aF4bq_q;2!IspmLE0S3Oz@nTh+oPgj8O6!|P5_ zj5cf#Kv1NkX86AGaNrlU?3+fvv4|`^%k-m+vB`H6p4KyiAai3&nH)1pQ<nu(?(`oT z&)trr<dQ9tv-@sFkc+Cq;QC+$Wf(nP$=!MP{XyuTee+G46&L2G6g{hD3XVN6th%lg zz@CE%kR;I>q?TdH+9`rLqUCS1Ot0Ij(G06<c|W37Yi_luE=_P%-F+Vre*EJf2Tur2 z32*`iP?qHb2M&Nw1BA5O?Q*#c&jz$9zzn=1xIV+cMd0B*ct5yD09rt%X_|m8@Ro~< zizB9rqjZ2bBnkLf_<P%Jw_Uq-4NfQs!qU<bxTY&tt|*G~<HpCl&m<Fk`x&604CgW2 zLogJZ^%wMPUXTwCdMZI8k|yJTLG`cc@xMygsepWh2Tf!WeK!##*EDiY$YYTHJ<!pV zh$3bfx=Kf3I@|thl-QnjFtQ_d^BkWTF{PTte-`8(i3<;Lt*0gC-x5?MFeQ=_aX3vJ z+r2LKS^a*7V^hb*tv{nED+ojsT8@bWuS6*~G5dXshZH4e^0+E|9HH+mS`wom+xHp? z&~qFMSjBZLa97+=OnldJ9o&|kRn!d2#w5wW)31Ux`My}0G)Y8`vy<ps3rq8t&+XlE z=jTP~CkOpB3U@6tE{-qwffsrM3K!r4&;dsZN#F1Z#Rs)8Oag+>UB?B$%X+DAhZVg? zrM)N#((wMkth3615gpz+?R%eKcoLU#Nf1f6fI4&VfWNC2C%$QN+l~WcVR1LEGE`f1 zY5`y9(`9#?pLV<YxUDMZlR&n5xan$=W*H_U@>GO#aLF_dc|mRU1DUZ;p1kwg_44^Q zPp>XtdF+#)hRa)SzH9`o{rnv&qlLI^Xm)Ip*}ncSUwi)lyYr#{niX?eE+&v3xC5it zfZI4%5uFJ2eLhpnz7GiRz4zYx@4p}OZyUbs<fvWtC^|G6roaFi0cj6B@W5yh57;UE zMDS+T@HJ}3do!W_kw+c@0K;eiZ#fDE0056-M8Wmle*5hJNRHzi#{s?yd;Z8NOCRiB z#OI&>S9X6-%@*eNzcGJc>cZ)7k_0h6b7X%1r+f$OLMiQ?&l3M{KpkkK-=r9#f_|3< z|BP2mLeo(VPgQ9HrF@*S3^523fuRDH27CMwD@9;@j;F*C6$o0kbtdawNQI(pr_x}T zC7poLB5}-_{BOBThVqjna0tA@L<J`Qc6CY;E4>l0g5(|kM$=x1r5%nPmK6X_XKfXH zZRomUWlSqpnj6=Wfr)*l=h3=e+PCz<+0mf<1DuXZkDSsFrW7tYIt<O_D5huI8`<2L zAkksyrbvHRdJ4e{8b$uam;d*FdGy4+AAjO^5URHJnglW^nrCRDv$yW1vTG(8(FRKa zhTCz2nVC7$i2}FHa~#-tl#-&7SF~&x1WeeWNFR>HW0TZP<Gu{{G>LQOuLR8nF!coL zjmj!Sz9Q0BnewYCX=wUG4QH7^mlu?tiDtV7#fQ7BpjcA&YLlAir`6f(K6#zz#~kNw znw(M9Ac_4X#!<&nobGl*O)*j0l{4j~Lr0o>yOM$<Rc@><3sanD^E3gshEJ0&FKtKR z#@Sb&HX6j%{$)nGJfTzw4hVxLX_>(D9IG!QC-Hovr@Rjc;rijc)X)+FQ~+0_#dkm; ziwlzx;J$D{Ymx*X2;c;;!G|MP3Azp#Cj1lL!zaUv$T&A2J^`9K@{@2B_)^#np4@0{ z5H`UZ_{P!JQ7OnDWl1nez+}9~m%^~qvKbI9yr5GQfE^xuZf&_CYrBGSR*=jjq6rPG z)JejtYROp&wLF`)+Gp=Q3`2<0RCJ))bqQcyb(v~4+$D`~_H4D$E26}w$Ow?b2pX8l zBs3AGk_oUjh7Nv&BHSbu1rZm<0ucuj)&)ekeNW-2gePy9>d&}^$BN$n7+Zf9Fh7f@ zB1kSKX$pym9gB$=9uK1F4=OxN;3a>=&@4znoI1z~sqZE}o;k@*&i2=@69bDR=#dEg zfO{JO?abw8JI&g#E&+Nc1LN(eKaym_pb6tL2+~%)H9i##mpMlW1PeaFu&ZZY{*xr) zOVxvxp~P`NSI)Qh9N@k<B-Q9rjB7<4Tovitz{|76Dd5LUx(8y_^IVpfvjuGQW3VI5 zO`0NDP8iMEP^1x3`>o!tT6%+IC{cdhGRIkwNmDj(X@)$d<e#B%^T}T_%|jypMnr%P zTJr{bIsITeEXI9P<u^QSs@tNp3u|$8F;ne{*7E`GFmjm0ExugPyo``jQ^Z8=lmcm& z>33?kpExe*#cw?I^>(v$ggkm^?m;5dSb+<Sm!JFd-?B|sX4uDn?x)uLDLo1(lD=?# zW4o6gn6Av0Wj$X8>(PhN?*BmXUm%ts8Ao+r;0lLDa?mL5nHnxPjaJo1GotCRlIQ3{ zdRS~L!Bxtr;n0t6W?hVS05pye4u{;_?dGNt;|JDybJLFyo(5hTWaoQ82m<TjpSX)= zMxi9Q<NUEZO2_XhDVmP(N`Oq_HCYBBontHxy^fHyy%yBBw==r^wco!XN^g}*&ymV_ z>)I+I28%QId#%@1{(x3^Sj`9nM+sa@r=E4=ahE+Dd3~CZ0CYf$zif|e_VO(4Qv}eM zXvE`iZ37}DK6L4fB!K0yc9Jg+&Sd=6gscSQ!3=pSil@BEUn2RkzqcfLPkGM$RBjG_ zbCLpRqRjMuH^=ms-{kSvkRP-tPQxvLyYB%f=Lk>-Nkk5xj#=9!Jf8si3J&wbno<&> zkIO^ABWvz$v7B%-+IE;K4lj?Sz(#XplUlJXrHS`WW*C4(qUf!i8(+Eb#>zvVd~|Z* zp8|Wet!;!##j)vba~H%C#fotl<hXQfY+oEYoB)g<=rwPoNkmbcsOBVD^*z@fv?V3W z@%*s8MDo2USI+gF<G#7hDFZ>>_PujK@CXs@3jFhO{xyUa&ECT)I;3V$KRF(_s;-^h zwq9?yPwn5gf2%iDZ}O7Y#_LohBN`i)Q_bvSkov-)wd+_X2^vH%qv{z^u=cj?;?xrS zl74${eCA*nMl*A>ei+cGpsLw8e68E4iORLW)r)!k;N8b-$$=<|?V$eR3fFeHe!$c( zch9YN=1S7yWL6QSnjO$T=uE)-jRMO4A-=$Z+*~zzC(R1&UY}E>6p=7yLy`){#+P8Q zBchAa9!};W_%sS|{~!`KsRx^oEy|60va@9jYjBaRZs*1;=d^6L5!30FuXKBHxl$V+ zf1`Ij5tPEQTV~$)_Ok@7R~C+yDw1tDMw%&1e2f?QW|JJ4G`NE}1^&oJF*O1r`~eHk z(kV7apu}*V_1k_kfw7+QS$iD?*UjRuv2+G){+=`T-_c4LOrXPmDr5W_AG{QxIq*D$ zSw|>i)W0j2Kc&qr7%R)8s<p#n7Q}lzAq=DC&0Qr4a|{#ToQ(zHVDw1WWhD7;ih`m7 z&v9*YSR*jKIa`CPW2A)Vy0ATpDko0<9It#Ab~oAsbTfyEmZIn{&%g0p5^z**=0>Me zL{ctS<s{8E4I`u}K}`ejehf<yuGy5-f;H$`{W_2+R@C+39Bik#6S{qZ=1E2%;8`XS zBFOJuU*b?~&arOg#BU*rmz1mhc1Fp*%*mJR-a&@@&l1G<TIXnHM%Ofs-{0I3%cb!+ zxr&l=3)#BP&(_Ui-g!%=2P7e=&JA=Cp?&++!ZI`1Gy4x}xurNkdpm1twoEh3|Igl= z2ibLAcVge&_xtw!_3H(VMmNyd0d63{MWS{}lqrv_8EfnrXB@}&RGccu@n5lBuF5~o zIFp*H)J%<ID~jw)MqU&xlq^vc7l;H20>naW-DvdQ{r2VV`_1|811X4v5@#kQleSSP z^5MPv-n;MK?|07ceCM3sX>Ttpse<X#bg0emoh+9dxk64K{@J;g{;1c978fTz@|jaz za{rp8`ku`pKW2Q*x2+(pf<xw5D<ICTyVtfiC$dagc~3v#dz*beK!5JZV=-xpdEaNS z$P>l*5!&pMqn=QjxLTNM0Z8qk((8UiN?9!90y7eYHzmb8apK7!G7mohgpCfg*2}SX z;?y2dVFx`-&rQ<>6z^VZMns>Yin~2E!ed&`HAP{2y<MBgq|-02uiN)OeqU~3ZyZ~G zz}Oz|c)aZjwl5GA*X|m-UE~LxnoUz|N!JOm3SP)k+-QzxDh8}<+7l0E?C;_o4Q0`H z1JBwd#bdtrgrxteOCAf<`-AYmrqLG1ooU~gt<BFzGoFJ7O($C{uw<}CFo8Ebu}%z5 z_Q|rsS;N4>c|v$83UG@<asMIPG3?b<GWvh6GK;YuK{C7Ior2d0BM^^5;>8pmc@zeY zCGj#?0goW?JXWkN2Qh~*IQznDOP2?q{M-|<I<wKgL@H&nQ!3Fs5gG~;G%b!nzQmwZ zCIjJvIoufydkiOK@(r5hJ=aa<)-YPk_xdqGw|OdzacB0Aty_Z9TxZ_amxS~-BRGZX zUm=JX<A2`kO_V1f?8IAEz4kUxTtN^g_cV4kxyUJN!9K?QVTN57QX^gpo4tD9P;gq1 zrVCeZDidX)7zyh45EA;W0>z|K+489048mxj6KdE~S!ZZ-X{;r4_JwEv_cvbLIsL>w zp>$}QI@sw23~iNiveWkvt;Y-*nrsx~4K1GK!Q8k3d44OL$#Z`%bVq>`3Ic6g&f5A$ zh(jlL{(vXu0AM0QL%x3|>{m4U;}8YM+BI=nj{|;r=~LzEi>mPE`O6<3c=^(?PqiXf zuxv5o*6INj=_F|%dN52{BkZ5~M{_{N1(|QR^lC%B`PNResZ$igi-w$PBV1||C(@VW z<x35AG-`Cb-l!3j-09w$uD-ws70Y1_TMj8gC5*^fCzxplIMyg4Qcv*dDIyxO0_7ql z=8ll!_w(Vu)5(8H6rM!r4KZ_#kI!#kEf)9HxO|aF^6QcB14ndp%^UQ|q}MEnQ7NnV zf$3v`j~{h#dAc6zLlS%oo>D@*O<&0vm(Ec?&S`P=BT3RRt}CL@9YTmT8)dbSj6Dnq zf{!5JV1wjEJogt7j6US&_s>=99+^7WG6ji4fAYuwf%WiPKL2x{%jAk=XzZI`M1c|e z7QqOEp;f4W$;0gkp*<ROn}V#8tQ?U+L9xkDkMSUlw}TBpBLu8?12f{Kg6AF*!c90S zAj93=Q-#Vy*^*5Vwy0z?fSk_uu(zEnHQ?G-CrYCsJLpPLv^NT0lH}KjkR_<Ht<`vA znILo<$@KCqW|;A^gcV#Kbtg&_zY1RqL{u$Ixth<DdKB}iOqwKK{EI*NUDu5M>92f< zZ#>ZTriQyCSq+JZx%m28PR!IMQ^jnSi;*gEx~CAqAST$5kcuhN^Z!1G|6*+gzVAjW zI|Dg0O-sNg;+37}7V{c`<iU248|_X?|H^Zp58Rj(ZAL7F)`6ByHKY|3D%YDcT|c$b z3$Qp(gb5@|1}q(Lv?p*rPdhAaSIQJe*ds$%is69?KPE2c^Hgm%2LTsCCi+qJ7SJau z3VO?%4<0%G`Q4oj(-=MQ;HTGC{-^0ZXAx2otjdvYN4L6!A{uCUy|>6KCwteoW~u{* zrds`NFH&mxUvX_M)-Q0zg_-I0aKM}9#d6*3++IZf1Sd$8K++5wGlEh}Yq9KXY>)(l zBw4|&%5vcH1Sy6t8Hc!QbhJK1!vQ6y0>@?o=?>lkCUotDC*6@F@O^M|VHj{YUGBzV zLS+Gio)h9?S1-VWOuY_4nz-f;H|~#!@H#>3fI`oS3N@xsKe4n~&av*L^S5|^=H`t{ za$3E)v=OD^R%^Gby9CYZTAyX8_Q=hq(uGuibGJpr!Q&_Q#&~X`U62@x<b$OBg-DVs zI1;r?JY<4l0^dWZ?Kx$}D2b^KB85)3!w6wIEm)@3+*++R=D^J8!*;*5l`A)ZSEte$ zj^hR$Q&j_AmHRu4%5U!%G(w8m;i~1wLe6>XroU|8KRY)aMeSQ>z6oA+a`tgK#YkLV z8%m<W?5zK*<*RSpywLpg&plQ=`ZJd|V&wIBGLlgG%JprYlW3Ot_6x69ie}(N&WNxB zItmAlPe?)rob$*W{5_Dt4+$mRY_?ZRlRvY#f9~w7uTD-LaJ<D!Z~XqgnW-2(fvQgh z&etR3lJC%|xpEY#*KZ%I=5O-+#>U2J!xsxukGSIsl9d;eUQ9ZH*!RdV0+UN#*-6|4 z8PT{pJj@qPcXa#u8#+TdJY{o?BXX|5Iy~zLf;a4pGHRV=P^Y=Qbo1u^0|$AoiqHy{ zY``dGNC-<JJd{m~sgV_d)o2dl+nZY}8#~7jO&bn<_HxekMTi@I{R>B4dj8x0@vA!# zDW7`i>;L4RY#GhE*=~dbtQ_tG**bWPR~%Q~1%JUw2G+x7ZYd>Q%E+cU;?m%vC(3i1 zuHL74hC~5k)^Nif3K}yzxGA1Mj_&#%X01w2v4%R!uY&WLm~6wkPkK@#L`LvNh6fAc z(c}nE6K7}?siLyWi+`0wZ84Dr#PD%Q&y|;fBDT1T`G<aO|A9v|V~2<whLA&)Ufu0Q zfnx$(vuU9EtD9TR79;aK$+EiX;rZ=&;uiA5I4QBkTlcnUB&sVcioDRr<(ODwmzErJ zUQFo($rj2x?ao>{y~nn6JY@`wZYr;9L)Xy;-JL>t5>Ad6#8P#Qq+hp3ClUIPLv6?I zUyP!zkUcu=@oewrj+J@xv%jwQ43?DzVQJX^9XVC;oP&eDFNkoRFWg=_d*O%MAARP* z-0`R0T#b3cjA%ci;VdJ87A)W9L#9!g>2zC4s;Zm)-R|~Oz1|u1yZs%*)@y}2eXowQ z4{A&}-l2WBBc!78^s+<jGAxeocemCvnasZV`JJUl5cP-_n>Pl^#^BfWu5o(bODX<! zxM%}?XW!h*D9&G8J3ui3`6IC-{C|oF?+jm~-n9cs;7SfeG<!i5b73R`Tw`470ZTEW z2>2WF4Dhr^18qeRmolnw-^rtwFJIm5L~`~tO#o1BmZu|qNa21*VIgxJFivvSFMg)J zy~A0~{>f^t-43^R<7}>=q$><1Yx;=i2YB3D^v~XU^U~r`Q!c*_{t6495)naMLoDJC zMt4p=dOlU5EW<qW^76vbnk;3_k*VocOvL@$qe`PZ-0k6<z{a3lFY*!|qE@cw-#T+m z>pQi{+`hv#gtp;_DmgA0xJxE~gXA&La)HHzhiE)JCvp+RlDO8-Po4q$BIA)BR1YET z;m4=H|JPs9^u3{f>*zyjrodQQ!}a!Xf>J1n;Dy&$Z!=tjWf)oHydZ$s)x{H~?xZ^s zd5%CE4I@15Tn1N$s|Es}WjUM{6gVQPuDsRU-EPevoFT~dFx;c2@}Zm=^*d@hmn+pE zEKBrVhBT9gH<9#r0y{nIJ<O+yB$1EF8fkxXtM&3^9RiQzW}8)5bous0QA*EF&pAUC zp+61WITAh1(E9V=_&2?l|LEg$m7`Ctb_EWN{J^c38el5cwr}s9pV(=QSdyHX%J|`t z&1PjNbmoh3TFEeSFDsFq!4}QE2ZZ3(P176>ha^dU;6Uj6cvK7V;~RsCv>H*&$rmoX zXqpccDzgkDKL65rn_K+W^<cXfnl_zbn-9-l+&A}H=x0bGe&oTwhP85I>G2J%npFmW zL!*>zNhbOG_Y|6rrQP5(z=aZ2#ufK`<Lp{SO##zu4Z2+F@tq3-O;{)*bM?U-{roIt zIni-vH@7JNFGzU|mOX(4%Ob9>tb~D>&nlKX=xq&VCd$=Hu(1DVHlItSD?8hh6SeE9 zVh?MFqeM?Nc3@fJiqu4i9L0c^!i~!-#>gJD-EVy5uSq(R6;U7AuH&cE>kLl^fzxeT zit3C;gE-Ru%insMK<x6>rL|i-jhQOoBo48-EkP+UK*0l?vJ6*@5$hPbn5y^=uHVX( zraf22)+aUt-)J|_Uc30JtV%~8c#xq1HQI+h>KpnSvNC}XP~tZv>5?<b@#?3eQ0%vd zX@$X_j*30kd^;a`=bln{+_I-@I>+;hh?@+9WP6EW*tc_rjA5*AuCHWr_4ZCrs&(4^ zL8Xuh6EO?G2FnVTJ9IrA4@B_deCdY_zclK9h7l_y(ZQQZlv*hMg1|2@#J9@jSC;t2 zon3V5)Wh)MZ(QD8UE=r8tD^cA#e^)qC!fy_+gr1bKeN)$B6k#%VLn?p`@>sccTXIh z+}iDS`h&d_Q<iD9Mz>6hD&`v_t$A~Od8$$$>1&0|B*m8K_c{}B6prJ3;6RwvgwXFT z{*L3YyPf0c!+DkI?wrqMl;xFc-9X{fzH4kxtMSxq>(IUpAcXzi%(WW_4liC{_<`1+ ze|6=EB$&x&G4Y=rmL{wWAc}=MHL%v9c+ig{FGhIaR_KP29$~?Ke&otJ7-tGmKJw!t z3hn-A5^2BGYhL=RZ+{~eg@=zc9CP#1h7X@sD_w0&Uc9+PX#I30n}6U_`8c`~`nA9- zd#+DWgqSMXqb>xqaTG8@iW5@S$eL&rJ@<z}AkFSyP%}!k0Zss*<E7GBIVHLd=X=BR zXTCnUck1BrPjSLYS$*!2kM2!nILqAcnA34&gfUsD&09v-=y&DJ<dv(t1fpkZ5-&GA zAH34A-BQn=dwt)+Vxy7v9Y@zL-@0}yomb`${)$H()kn7pvL{K+(B7bgKK7gh!>8fF zmp#26x(5-lFG6}0*buheJ#LPosW^;B!;vUSvaI+x2>ekZbi8xxIiqxTU!l0qvfA^D z(@kyA9&7*zc^;Ud)oX3wog5T_vmvQGN59PQU-OLPVSHQ?-7vsAygUcgfRWS(qF|3@ ze0TrMciuYp-)&Yt9d_0Ry))&br!Fp=^*o=eZX<T*<l~Etxg*Qnl<(UdR!pWSFY`bC zyWasz^X!-Z_|*$HWJ%J^@W%3%>zS<B@!Zl*b4j;jXGrvM-8^3_HtrD<jw`DF?!<&K zk;*Zw&{E6eHq++9A$YKX;&X_QP;5dpzj3RjW)5}Q_5BNPDydt;?!IT={FqOXDs4so zzjrYu@~;H4@9a<p<1{^<Kf_TjA3GkGb?GAKUZs5+u_Z)=#&CPT`YrY&S&M#{XX0+B z{mjX3Ik#;@2bAoCU-<b;$@UL~Mmq%gX%wDpwFWe&MxhtQ3M@*`_g%+I=c=5@0n0&@ z`M~2(d2Tqh*N~K%C>W+QHYW-YRoRwPtYXrh$uIEY9zi_N>o}Fh=hbx9_aKlOAPN_D z`dBhY0vZ=nh!s+CblY-FhMz_;cpEHh^8N3ARaTW;F3^WtN-8e`@hvc?Kl+Jmai6YP zBwLPx2~7)7)T5c3lCs2!Ekvj&2Jd!*;WqUCmhV1DFlvk?YRI>1St;ALEyEBcQ4qx+ zArNor65~P<oR}m%j;{(*?FZj}e(!vtn4{VQ4UXDcU$M<mz1~1%Oydcmif?ZS#kXSg zaKHD6pb8Z2hY_7ht0Ra(9gSu5Fp|yw)7kRuhs)32-ueS!ieAX4*2s92DQx$moX~O8 zSiLEoFM78_O2FSvkyPLlhxQ$2Xm)7oGc(22+g<pmd`=eFeB0n|ZEYWzKFaVV*Xgm% zO+-rrv-kI)sh4J&yEjSFv`s>kSV3f6JJ1HYC=0+DfZp^vc5BOP?Y!{7!*6D@3)gR* zetqQx#55{zMDb6X4&X`kbiT<RoV35q+b9HkNR52=P1^s?OyyVU>LFYv3Xt`5L~SY5 zToRZ*h|mZ;m_7(XYA?+qfj43T4~IQ}>EiTcC9TR7O$1?YYcmje+OzHU4jtphC0bID zWiqBdU<?8lrtOFA&N6t;V&NlENdEP=z9owM@ssz1H_|mNj%-Bw*p1LhkQoDA@_OB! zt8cwIGcyAuk&g>_UK4~|VL(x&B(MWpgZJV=T}%`N3K#_xx9~3@5hud6&HC=?L3f{= z>By;NMBGG3fmkwKe%0!?4CBdwO|z_y$ALq5FdD%JD=7uM$K46xq)<CKA7J{p)`GxE z@%&`Dmfqgf7V-f_*q#@>cIM?;V*-&(x7`wiG#*e%E>G=kym5vq*FDa>dGY)k(|h)% zviU3LU*9vgaPa7f@c<u$9)rI#{9hpM#n7({*GH%~*gNYGOiYgSp&_LU8~Y34m0p?R zUEA^rq5T{G;^$&I?3wFXH76}(IQaE6ol-?1oVn3tdM3rvK_Oe8Z|pB-va22U?>-1U z*L&`(FR6;p@G3=<Ktpyn2HBDV@z}-JZhzuu@0;3FHamT3(xd39Ggm)*aiu6qhD!e} zAP|f`<9nR$Zt)LR-HQTi1`)^Dt1P$VQ6(#=@L}xgE#Q^}$$LRvQ6gTT`ki7N6#)Y* z6LdyfUJy<fd2mqVsFP9U>q{Gx_593aWBK-0tJy4;iqn&I!x+WU9hp^<_DMV}$B7xz z9Gaa@Kf;5EoqD}4E3%rBQREPW3`E+;3zteV6N!8<%lLjEr&Mr60Yu|M22T|TLkQ0f z96YqOxsE$&NE){$#iXv;;I0DCNj%$lur~bHVmTs4JV`$kM-L5JUsKXo8NtF++q3I5 z_tk#qQv_KfiN0xABuS()8I;Tw{;?V_oVO<uQK_+{W$b&Aq5_&EZREiTp%@rxYv015 zR8IQgOXpD#mupVD^=2lkjE0S^we`LG4+>(rF*Rq~&g!{yfn&nkNs94YD|F1jbHTQe z)HBgGnaO=;ez9(B#Bw-5=~TNX+}>2?4->ikZca-L0#;xGZ8#Eu(6S**NQ16>_TmK; z#rGdRvA)>~jO(V$1yrh%QC>Rx{A8u-)f<s7+yjKJ>wfKPUwiDa$4aHrPul+gVleKm zxU<kb&$6s^I{mIA;V_8Pzz~jmFUHS6zzJdJSOR#g<~D8>d2bXt7!2TB-djpK8jZ%v zsDGn{P1AD^e^ymVIi&=CJRI7o=_p@LjRxAO+AzvYuNc*)pDoWkaKoEf+m+JFfFh#5 z1q3F{8BsAKk4$B1!#=Xde3lZX2!B9~Zlaukf@ZI42$T&-h(a@TJ06qcg`#b)lN3SI z94tshfOwLLW0z({isq&#%Ywl5hStb*hyAWL8sa{(IK;zJ5#a{`9*G0qfnZzFdS|pg zo4J2@wXbHCYPAISNz=3pPH~4xaXFm;2XFN<G_}+2qR^)Z@Vdg$6DNAzZV-}e6j3Y- z_ZuQ2SyoAm06fj!_kzF+k_GT?;h6+AF2gus#5>-@asMDMyeMUFA(UbzBNKgn(Er&8 z2_#{pvk=POqgNlR=u+feTl%D$Ca%8u{kPuSSU99cj>d_6doVb5>{#HVM<4ALE2|XK z3cO?5U@`~`4?O%)P7o~9Jn_IO+XA{Y0<MeoxwRH>_#_2_>zT2pz4D1pE0yuTE>DS( zDeJ5Dy0_04-QFgZPI*(g&Y;x@semTf06e!xQ3~oCZREkNKtFi(m5t77y)>(jdVx2( z|H!FYKG)NX?ps#|M)Tbu1YmsSD_;RTJp1gkfRJo93n+sB!ew1sTZ33}td<Q207Br7 z!dYIqas_a^fB*h5<R&I2&YnGc;J|?sCr-cv_>jGO_m1U&#}k^Kd+s@S29Cr-MtmQR zgva0e-uK4iobJ2tJ~;BmjT_?*U^pHwAK-R8wrO*76TTE)swIE^CM!D($<6qSu`Uo= zFb?j)AFgcrunxH_y*2b5CrVXLU*7RhWGlRtOzI^5cD#0sLYj(6f<uFD{)w8k#K#@P zN`iG84|V5l24A#<ec??*5-S43YRzN~Z8&ZnRFpK$@}o|dm$1N$X<C^SFYui01l4*& zH>`w>8%dFB9Qa8eeS|E-G>MUjQk2JTZm%B5ECRZ~y$AxYYdXVCN4NqG(QgaYQbfGf z8Zs17QCZjZ;O4*`gh&yhMV1psBkR(I3-v~WNJ?XI$qY+p3u#mD7Hf{{P)Szf?#vDW zpX<98%MNL-VA-Gbo3E((*GO966e}Hl%P>CYM~Z3a$vo5WJv(05Hr%x(9@|z}u0Jrl z|E*qo6#7=VK(F2&EMI+Xq;~{<GhgNgZDD;CRjO%*^=_|RPp8z4wcES9JA3yXn3$Y) zAzT5Y;lgiWBqa@xDLh&amPOakJTx%!vilXWW_#2mMCW`l(;f1;9VT7tRJ8mSK$vr} ztX35EdL}1O51c%pNOHGr+#esS6ehq2!5L1Jsy-I%iTv2#>F?enPq?$Q^T|(s^7-eV z2Mhq$Hw*(%2R9zT11OrDob31e;3S*PCP3)B-~Dd4+kNV(rvPRExjlRKeCbPH0?-1G z0EB=*fYa92Rz9D<cJ126#s(l~Jbu(PO?dm#(h?j4FdGhs>+9=)@JgiuP`q{PR<G9s zHwgcPk6l?=0sI3&0<ZY$tFOWX_~+kzaE)u~G37HjvOwY6@x1FJ$He>JJOdohl$iMK zQs=+DJ)|U$0sjlEPO11AmiExne~V-l>utwn#MKc2<cf|k9VK`{8fnJ0>$eK|Y%Z%f zw&TSy&jJcWM^M2XiE<iz5=l|K2qc_uce)X-W{dKLN{EHn$RvM53X)9M8W~ih5Y4gz zFv%pdp8<|I_AyZa20(ecMhs7P48pLKOG7Lc1f$6J;11%<8;aY#zP>xG=Y?{$Iv5Ns z+v8Xc;=|C_yB)6GyfVEHT-*Xe!@E5p4&`t!j+gjIymjom9~yP|bnyj(lK50J41Qqr z9`R|L<M?q4&fU9Q?~%}m9ZSm<Kl#|ldtdv?mpVPaHf`h<-um7*yZxRmrDo2aF(>!z zX*ZXaZ*0p-3QW?WW5-<2&lfAVmT$g!{=6cIz-3o%Ej{?~=|Zujj|LGQ<^?~HAfsI- zGp`MQDcbs93p35wFYSy*nvmORS*c=g0{E#m<)T0cd5#jeSX2tCB#Ja49H=Q^{v$6* zIwb8rHr|aRd7hssH|~+5_`(;y@aKR2=TAKG#Lxfy&%@pNgFpBKSn)@X9<5fZQ&Us$ zUjP*V20R!*6b=B_C(AONCHN@7)uWF-3XmIHCO{ED1>Ob60FnWjjYb1rg~P@}Md#<| z_wCyUUwZoVX&|)V_u%;Pkz<z#ug=ZQ!54|52>ug%AmA1(1%UJaOYLY<*g?kc%^Td~ z@!#f7E@CL0dkCXgVIngBsJoQskV}O9i1`Fx`Y`X?zNZ>`2Y!ttE30ca;YRwn4V_Nb zBQQ)4SZS_^b<@F$BPD%TXt3ehmMEzJNS39dw}-mnEqj)s5uVUwyCyFP?N-zE!nNB= zYiqX;9X=etJzO;ifLjJh%R*Et<!r|uw7S`}<oV8E&?m`BjwPLlR`^KZshc;p9(>>- z0=IKUET`rRUUlLSLCnUnad#dUxG{l=E^;CI3Op<*L%5s}d+tM{j+ZXJf=ESBugcDJ zi1zAwTauJ<1KoJAWSposqokiA{!u0)2KK8DS<A5X5ir=$ak#?l@!T{kl9}41U#-{3 z!;{<FTau#k9B^}9R@7WBzqz$F8uVeMaja0TRC2kjW8$*~#*v6_;B-mk?{dndZTuH} z?~jW62F@ipjL1Gy9yE0^yH-&q5PiSOM{qqUtk8$R1cfLVdV@q}4yh0&h;Y4$k%mRf z1Go$CRp3U+h_c`Q?caVU{Cnn^X8=NX%hAI>-x*!DxVZQe{g3PBaydZVxI1wy+Km$N z-*=7yT#bdE0BrB@VF2M+t9$I36-60$>myttA%YbECkdbFz9&K$Hxqw=3(b>mV7z&V zC>aq0Qn0CfHS8cEhdO6Q>YGTIgd0kOO~u2Xy-KZi<>Dn?;9!Z^rUCEg1S#<S*7mJ( zeb#dwebg>g_H>(T9G-Q}<_aatwmQwtY)T3sY;o-B<USxyyPL~2!{XsfVyd~@91MD% zYYqEtxX2kSn?MX8rnGE0G1u{EhB8gt4Y#Yc`jDW(NnmB5M0G*ncwSD2-cA%a*<2wa zE#I+na&{1*e$O-X+flSako!<P8sA%%CS5NckK=)_#$=afz^Uq^t{{c3{jk;>s)eiI z#}(x@!<-2TR@a9DF9DN72^2YAxKng~_e23K><}pFlA0Dw9T)3e-zhk_S;0(EwHaaJ z+KsnrlT!-^4gm6j;(ERZA7YuKM!iZ-)|1&PQDPT>XxoW^0IrpTXec4W1QE4qbw<;F zF3bH<c`Bt}w>&{^o296Ck>zeomQVR4EMwaX-=&dBumZW-b<f?lX3PA+8b8v5M0Y2; zM@$H8GkTk31N{R$z;f?&I&bej{n(;MZ>t`@)5Ul9G2m_C-T=wG`{279rta>Xy5|A! z{UVff6@yEBSA`n91SSJe`riGa55%7c*JJrSXMtm*NminjE#GvxJo0zIKZ37|@TB%I zk+8tB&;TAFdk_cG*b4+CjmOl`cu&s>d{-a!5#Dr(Ok<D?ABL68oPXo>Oj<2gCp2RO zu_Eq4ibD82239}A!ZC35qR>~df1nN>+JEH4{Sb-Smf5vjGP2<vh!j$}A}iRhoOyA5 zb@jmF0(c|9o@3i1%?6eOWVpMf&CXQzA3oJJS1CHA5hclRF213`I!?bm)Dg@L)76}` zNU2%8$0mq^aHr5BjGQ4$`RNklnIA%^htPmiL)+Y7*gd4*q4A(|ie(wgG~J{}If~v> zq7(%TlLcaT_59}XQ+u<S-0H|CI7bTx|JR@V)wS#A%eBTY{PKULs#swx!~@{)`Z08k zNQO1zO#!S)OThIUD+j=3XBo<glGZJ-M*dF7%xi-~YUQGu-iJ*Vn=6tzPFiEcmC;~| zWrB1%1K#4DZN)^ciTaD@G$YPl?Pyuf%LpXgbV*9R8-(DL;OKYli^8HW6bkSEbqs(X z3<e*J)(+sDA)N?h-<c&Cg_Ix|9B=z!%+m@0NB8;xH-X%%D0X8ukC+V5EZ{^~2Pujf zmcM=T*4F06@#9Be;qZb83=_*EVI2y<l7qz!DApKtaX+q)>q(yc*e4ow;1q!tk()c+ zw9EkH7*4{GAAlp-PN>x<mT%sK<p>t-+O>-S>Ep+b0*DE`5UB`It#x@p!38Mbd-47b zUbU@e^U&dgKs`C!)|6XYUAy(h^VwW#VPS5d4H-K3#HaS>iytzy>7@FU;Cc4ewzk?F z6;xj6xP@GHIOw!{1A*sF$IGh9$QW?^kf*cO%DkfNv`74Oc5`}SA0o?xUO!tb?rd!_ zG^MJFWjiQFce}wvip33r)Xdzx<7kNF6vhi3-lqbGwnbU&w{~V`_eJAw3_L_WnOZpx zFtJJirrZFYvE@(tQQ^WwrX7eJgwTB8!G#J~p7zX-qu7|3Lct2<XTTy(OjM#XXaC~b z)kTUn_s>n;|KNkVHpH`OlTYx5aY14h%c^cr>8zN`%D`3w&%H-e?@yWp`axLP_}aaz zv;O^RFBn14DKa#z6aXhlzR{wf)3j&VVV1|ObZ)E(B8%)HV&FG1en^p#p2%9?(f<?# z0g&dneo7T>%NlpeM}ZfPb8`d<VH?ZwKszBEVHp8zYpc`Gr3DrDU?{vKaGZb*e$q+k zd#-7im1=G5k-#^CA%}%d(#&kRtdD4I&;jBJWH=ck+n$(c&=h6pgM2>sOTY4~MC1*6 zO-apB6ayc)zP6rH7X?nzJ@CwYwovfB9g^B2ND;*jyivD3&9K(CyCTQX^oHU1E1T^D zdnQs6yRwbT#8ZlRbA1_D@S(lsW-oZ)nPF?^h08biC!RR@>^GlXTG<4Lf8X(gryqN) z-E87Xr6iRU%wj_1y1MIR77l+Jkv~|yc{^L=6uL-9j2KIweCBhfo_H)@Ect<(2#$&4 zl|$T->OfwSQ4xUH<Em7=4GkyQHG}V-yY|S@nck>bD`w%#b~{%|GHcqW5AWL@_{90w ztVX7)#v9kJTd$ryM<By-?5XKV4(osbo@ri^SVjEeW5n58{izBCruOpER&QwZ&3oyN zesH@eJ}74%MHEf>JZqb_LJ;q;@kkQ%#3hCqv4Uu{v%akKIng>s`pa@PT_~4OASW3V z+@5V{y=raZ@Ui3VPPbUd`M#4Y;LWNaNnn_UCJ1r_J~IFh7l@)@*zQX&eos|Z@SH47 zOw>xA?|XibWEWiU9<GCDwh3}ZQW}mq0yLkz|9*%t0o6&oN{v?}1r#%|^7(wFR)-}E zQJL$xOK-dmr#(HDoInt&iuCx0KO_sh=X$A(aP8u2OBb)Hxz+m~JwcQAhoS4Z-b`7g zQJh_<C~B5r1#QrZADmAsq9XGBp-CWM=KP0G>_tf8*|%b5B@UWj`qPcIZK2)SBq;XA z^(91*xqNQ1*JA|<3vB>RNIL!Dhkz|E*GsE6x6Yk8qonf>ovtk8W`jt@-5yjtHM<8w zXaX@fyW&__*$4tN8q3Hzz!^vi&$6aDo|Pzug>z#Vc5}21AU}6~Yi)awPwxsmcjMO1 z14riIus{2bDJfM?Be!GaEk8JZ@Ntfp;&5Yb-#$O$D#bhMfq`dlwFX1OR*7J{<-T?! zh~bh_0!gudFFNbrZ?&v|H(45j5A=MFqOiFQBbsF$o->1xq7jo%)iyTP!VO=nd~7rQ zvy|WA$id`bljlV6aj;g1WLI#|@7!KqI&g3iNTVdH%geVroj2wd<|RonbqxT+Fgz?N zUXWu%@jRo*3Ir;dELN%olmd8Eispd4${Bz*FQ~Gj-n_Z|#<|xP4<0^p>?qA($*kRt z8+V_-Wtoc1J@MqndfjfnKTu`C(2dJ)UaZs_(-Val&zw_Tb9MjXF*tbT>Uz1Z(j?Pr z_NVqO%4*rv{BesgPooq2N~USbSrw5i?NN#<jSTOF^GgT!R8z9h*L2MaWl>0pBEcAa z!veTY5XE+D_tT&KJkLq4>!~W|1*lxCfamudi%fVBut(b*4SU0Mw#0Gls0W^HB&3|s z&7;_cm-W#Q56Hm+1V9vNlIFn}=|-sA=ANmB@NTs}U=l`#C;!FId~{%XH&>PvNnt7O z@uSCbDISGJtMX<#zb3_k<8P(2!iCqr-t8TNs2*Hvy<Q*nI}j;wf;8A&y1pG=?XarI z(v+A~?cssy5C{AN2!FbS87_ImsB#|yLf7Z%1cAw&rqgnl=Pc7BBql?WOtZQB#N$tG zZQlO=*S>u8_^HDuAKu=$imM}Bf20|X7fel0+a_Rb#4?<kE<z-<vDrC)?v+e7Q$2Dl zm94x>zYx6QM?U^ZSf(rso<qI+rA)qZcaBOM4p^S2XcpF}?>Xabk3{U(V_Amh7(~)% zUVOgUY#vx#lqJ0Hx_ACqI<2y_6NLkYGgx*LMc0E+FBDe<F5EL867)$~*c<v;luW3= zb|^*z-GQG&y8*+JjvoLkxU$+F819wT=JV%nHcHtjiU#@>$Dw8_dw%hA{4-C#`RWf3 zJoU`4y!hhRH#Sx&ikzJ}l23+mTE@UK`Yf&!qOmpyj=@4vY#e=HzpjOHh6vnd6xI_F zVa!?KlX)?%W~(H{fZH7Dw&m+2=>vK_+el^dwxtWAG8&k}?j|QFieM4cFsr5yPfio4 zLzAr_?iu#Fq;}^Ph6s!Lkdkh7c8kaN=W^xSe((#`>SV9I4lXy&mH~u3$EDH|Jq#cK z_d^un_GHY0G2g#uWc9&~3E%IbU_=Y7$xvQjD<ufL;~N>;&t-S9iwL}Q3PWOGZSL&W z0#d&J;g6)!h3@WVp;!i&<;S}2;IYfNM=K1mb`{IGz6%CEl}^v@ofidQI2eATUJF1( zGnDTKEHA@S8)MJZdaf7pJZ?z${K&NZq{j+R_9iK^T&;Za>1QNS=<cp5*)sTESc14x zloP>KLZms+{Y(abPP@5t|AP;SazT)(>I8h_cO!3$WMEbM)j1zU7ipSP3uNq4KyeQo zO`-Ua-3?AujB$oC$-mLKU=bGtV4Pc~J6p@)u3Zw{ztCuu^AHwpwT7*pbz}kPai`oU zeYQajb~pFWKU^)>Qz<c<&5edyuBZmSlO*Ci6#L+-fj%oLZQJ$6)aMBH4TLnq?tmF0 z@dgt{DBf;~fR4MO%v;7VF#9S4#t7JOiB85E*(NE7om7UPiL7Paymsl&Xcm=f3x#5h zB;O=Rb7f^H2@+*DXre*~+s#gOI10K>YRV^OW(?Ehf`|f^0Y5XT_`{-DMC^kJ5IIU< z5J$&66>?N4F!ve=<KZl#|3QS}xE}TW%|%H;FkDZ#J9<sz8vG!{yWtcH3u43fT_R^* zT|QHhvRPFPjLUc>SC97EYY@EU6)G<){ni>B{*V9ZKNmQ*v%BUvcA-4+$YUSscbd2W zQcC$@WEi&XhqX%S=Jo3v8|$K^96oaN;)U1YA_<a2#Nm<SCojGE>c-mYeGfi-?D)xK z%ZE&7@^>eM@})+S$CJRF^#)qs3gk3(?8JTfLQzpt6eD0zMQ0GY<a<W~i;E(GLTSUb zd)_FFIn(9yg0ZJ|&2(apCqvJ}8<Mz02I5WEOJXpr`v|cdI76O(aDNqRM$;9`aVd(K zEKZZLj>P|9^`#iGQuZ}oy6*NKZPZQ@Or+`CqKGpbf$zb=R3fdwazaW~7=a)5qh2Qu zUX9{nni(O-#uqrrk-!NA9uSE>%S$Y;4Ew_<lGChcXg|;g%PbqvT=o1*f354LBo=4p z!>x@Q>r2Bu3l~1~#itQEpmm9ypmJQvw<a}rIU`+j>|EdB83>RA+BXctYB5Y5#V*90 zG>fg6<)NyIKD;*)8Ngl)fgnv`)jMDW?*<{qae^R>CrNzZKnR3MmgV=Y`2Y$k3nN(O zhLxu8G{29x)N!D<x^W<t-mYd>Wg)XWT;>YJoWIn#`9A~$@KKa_>PrNlq9PZ2tS}-- zg5?Fz4Of<zN7`s%el{zK+glrcL<0@m+1{R<<|Q@fM2tHa0bPYFv$eHVE>~ZE@dp!) zX>gAl>l>cu!rcZe1%6nm)?C*zEt`k}cs1|?T(gGgLC_rdZ6I-3x-3y?nel}TZI5=v zLUn%sqSkLVw{C?2UoPtmTN`wqq=g)T0+tlqxVh_Jph?OjnKXs-Dz{d9vb-m!h*5+~ z*=R=K7(P=_X__)EW1Lz5Q{)F$7)0PPfc=t`Z@CfjZIy^P*^IF=KuS<;LH(xDyXor3 z1Gm6r@;Gz%whlF}FAcm)m#=2C+1kXE9e|n0A+*CwUEk4JuIjp@2$3@0lO-L;8FuY_ zSrNrJa^Irp&9l#ax!bk`QRuh3!@eg-bfLl@J@u=5=c#<LH@RnG(0)Wz9=7a0#LE#G zVTBu{q8RUdAy;MzKZwDTg45HmkTWl*g^Z}AVr*g}k#i?9JbW(@W+xee=Y<g%;CrMf zKDf%i@BiE&O?!?bB{_*77w08HFnT-fLPZh5Soh2=mtZG?exZg(3dd+)k1A7+M!Zwn znlu$cH1^h&ORxkFF78LbWP?aasj{Nz!&bk&L6WpY(_)6S1{;fq7AL1CJuk3rduC>O zIPCA8ou(+lwMR#ep70NtmOiw!jvo?(!ARoCM7Sm5Xy8<i@7fH-Mnn+CUWfuB*@v_( zlM`guvly18l8*Kupjd$*SsO(TB5a97sz>=4HjGS(1k3E*yGJu6HJc`XjJ)8H9^{W@ z#c-WQIBw9zVQrF24Z*$jP$;%n7YKq?G8=O4N*r9ajRl5z%CXXcOCweRM6ew5umA18 zzj1RFJnd&c^YJG?`pkuEQ@LC&FOLFb_6A|Spn9%zZEY8*bw-Mdnb#50)A<dAnkdSb z>Jz59mCcpa%v7#0Rjf3m)CA2wJ~g*;K!H#*H|XgU6G>|5IeId^6x=!E5~9Ec6v5K8 zZH5S}S*{>aT=tG{05455l9F<*Q8LiNAxM;$Y0C+~0134C4;wQ-y|jeDn_<W}u1LMT zA9MH0!{a4lHzQ0U<mz6ZVN;^pK@p2A+mt2{mm~bv-NnkT<A9+BdTE(hRk73Fotm6{ z;pJC6*Zt%tKi+L^GXjO1>v2LFk4ehq^9;+yfn#VRMNt!R7FSUun&U|1Yk_Y$h-Eom zR7ayh5r`v2xuGLd`J7baSlaYWAJ<_eZF`vW$4OyIQozJg8jvj%^9&WnNzOA48G_|V z0isvH5KH4+9QYoQr5#I$n9PTtXb%H-=$NC*?4uBN>Vw@RZi;w8NayRo8;n8AG%c3n zVg!LBe7+vo_1K?s{gG`PtneSF*^7ew0zusrgd&kEcy3wX_rCVZ`qZ8i{T`k(Ba8WK zH*UXlod>J{{TpgmL<!>L(dR#sZD|`XoHdTltDpbmrf1qgFdGI(U8kJQb+QiuCJ#s| z*tNhI8Zk;#CWvCMHQ)pz3JrbO_FV^pPq=bmkyt)UiqoWX0c>lGa2W1;GV9$kj6=5V z1U?oAs828Of|wJ-=Wdway8$dC{+UD6{fF}QAaGsdA3*ribAwSt1`$J$(LD>sgNP95 zXd)+>_KuA_-m|2zgTS`iMj+0hIGOp83}7LWCOSMsMIS95!WFr__O_ZSA(E-rCojGE zMzh(;<*QrmK1C9Z+QjP0?dPBS?uq;Er>NL>-9o8$`_?5%l7M#FwhLG+luDCRGw08p zTUoks_~@}?_dN)R!owbL&OaJy#(Jlhl|@xeGYkz*Dv&%*kfLOJ1B=|#WUK2($eSu+ z;qSyx#}q+xlo$uyhzK>OS3qQc`*l;>A&FrWV`*R@oDlL*bQA<GN60LP3yevC%E<is zU;cY=tVfO?J9y|QB00}!G8n}tI_)|5v~rbXG6yjUM3abq6ro#=b%qy~dF2v9uU03t zh`#Ue@z0pnP*&flR#x_#8C9Wnd%UU|^}MsXq0tmk&*e@o&K%lT)w_o4sEEuEBp;Km zsP18CM$>dj1v3}w+74WBj^CqZ6p{i`;BbP<vZ5rXas9e(jSP2TZ=IzN#`+KW*wBU! zLy5Ydmb|4P=m}z(7jjH8w}YlRG8(mX;>g^D$ix@7Tjc^;-O_X?`UepH)Ib<{xTp(H zeYxiWZV(q0R*=ctt!B*dtThnB0b*!B;`q`@K267HD#UVf%oxJsQCZ{n=8AW^x+WUY zo9AEac6-%{DKF@W;6`G+Uw`W1M;Mx2Ub;@RtQUZDwOrS&)M^{+OF-MYozCp+UR71{ zg+eNw4m}$PTa4546w3e^j&R=-Nx?D#S4oV=_9o-5z;}}feiz>H12hKFUFE)r08a=m z(T^QBP81kphd>s?v51hP(8bbk@UcK~v9HJpQU+JU^8A&HFTDKRcT=SrNwT?I^*?^) z|M>Lh4s5M=bNNTU{jDFSQvUJd2QFUu%Flk`i(mb-FJ*I6pZd&G`e?$^S`^)(nC<CV z7m-)C)~~1dpjM44l|rS$B?Eu1ft9dE^AF4&1<O-O(F>22C{FA&M>K1Zn47ps-5v@M zMaHJ7^P-&Qgp{OYfc6iEgSFf1hmIUe0#`RtB;ZKWPVuO}+aakzN}x(gMx+j;6jm&N z<Naz5?<!{@GW0!M5)g%fX*;JH#O3br_D;-^{EJumZ~<H*a}N-{^wLZ9dcD)>oH%g; z_f}^zKxW{c!GrOL!f{>Oc=+yXuf2Ba)G1k(d%Yeo@6l+)^L!Ff+&OG87(kFYehggS zvMk&sNl|CcoH>5{c%e`jA31KKhlK^7Q!Exgh=Pm%uQ~d$Kl};#Lx_(2+5}klsBbn& zUKPC+3d<aEh{;=?;0y<{D9|i#XoDyzZd5aQpmumKO3iee8^9jZ*)mNfnmWzhy?Vc@ z#1tL&o6DtAKAkPLyK5g`cp8Y=`s(tLBL}fOBt^~cnQ~m;fj>sSTF&p;GZjZ+ue}9? zF+_~%L=qp#B0rI#eBT&$H4+zh;R3f@X+o3~JXeRJ1J9qRa{#(-E5iN#WBMJ394QKv zBvUz=f@hZ~PU6shR`9}zf;f{xX6TPd3QiKMq>g$!1VwUu0hsFK?7qXtPF%fo;id0? zr&=%k)mLA&hNE)*m12?I*xc?9=ci}({`bH28w&>yZLeQFe^xqn-*L;F2!m;GOyIYs zXR=eZ%Mdc_8VgTSG&yK3XA0j1k7qbFo_1p@X6Vqd`fD3qnh0xII!pvB@AO8+5ydb> zlJLqFY8XY1xw*D>;f>d5l9@X=v)#YR*bGaF88DStg*;Z$M^W^>Y>~@Tk6PLVG87_$ z_Ka6`O+bW(`=$x30R_Qqj<!CLjlLfTLnoqe-7t;??g7H@eeZiKD=P~N3jn;ewKcd~ ztyT+Qvv==ac>KyMul(-s{%*6`{KhxFQK?kMt-1i4cDoJm17yOJ0IHW?e))HP=XU^F zfB1)gc<9if)2C0vjfN-T835SK%nZO4-r{*)x7&r4l+9*;`ImqB*=L{q@|VB-`@jGD z`}gnvy9GhqW&REn?-4NqxkN#ukc~s#_D2Mt61^@W0wAdYHybh;-x`IkDJWS}@3}Tu zZU#W84SVob0AaFI;>gMTu!%<F(#1=Qiw80((S$gUz-c#dQJT}@Je3Z3RpD?|8bW^J zO9erYC1p4m;?_jR#C;V>Mn5UW40?SX93ao(m=&0GG9izQ0yhe&<hP_C){8<b2z?Z@ z@ZvjBs~>wjCC$o588RDrn<)ArC+L<#;_oD4n&IPE0J}l3;A0C|(;nv+5@98h=yuzt zV|xH@g4UW=y`+*2`O^8@6Vr`MI^+9}G3rAg`uLL{Yj1DsTA#*qybZA13?Gn`3~s8^ zFMzA284(cJX|+b}KoF*RX^S*=<EVgQ3!9SAmpM8l#3=H{1>oZj700sRI*&P|ZR&&W zmM92QGn1?!fL&Nxxq9mK>C$9f*9Mjw?vC_amgR-CV@|lEi<={r@~+!1b#O7mb4@L@ zAux@jU@WPf3{_=r?r54Tgop(*2eh0(_sSEN%jG?L_5j`hY5jhGXJ=<>YO2v_z%%F0 zode&9OPO|e0ej%M9)0vtc>eX*Ur(pg0NsZkdI%8sgCG0=FgEs<@J0wf!0*AQfrkWl z2S<XDfyahnz*|_Bg@Xa5<2U~0U;gE9{^oD~9dm<V`_uBk!&8~YTchvEa0YQkrVANv zceoOg*i(pJ2M_)9b(fzAsVoz3+kR*b44DCDCFjeH@m6-SL5E<)05UztqGfe)asR=? z$MG~IyfcY+9)rNU1q6ts*Ed!fvQW>mo{xL;sYD$E+*%ls;}MZqih`k%otMZ91C|VB zf$9&8l){OkFqU$`wdA;*(u<=u&#aI%5mO#8y1<1mis%S0<vaao@M#2iIXLl@XBRlJ zou*V5sF~S@(*_vu;7fRu<+c&ZM{x?pt}z^d4|H8`&>Q^A-~6q1%XsyrfBo6d&z*Tu ze(IUig`(;Jw?*{w^((*r8~=@(t7Ov|Tkn{7YiexlBCPq1-3~6ormzP_vLdpK$cT?1 z>VKoC?J%qYToX_bDUqbbv}g6=z@~7r0Z2DVvz%j@w%$wSs;nR}EQ>?%$l14d+BLN| z&YgSXm2>+Rtl7Ca(zNP%ut$T|mc#NHk-6qLOEC{2C#h+qqG}Y2)ehp=9~UP;RL|kA zG|miImck;J*cL?hs+jr3U;M?f?kM05kTW+o2Xqu}5|Gc2e)OXN7~rMAKY^@1{q)m- zC;%ZmfBW|B$;nBqsY;TMKmPb|I0SYI$1E-`0v!b;1LUTsr@{5%PHvWkXW%iQ9sD7D z-FUL+@BQBI{o1en+U)G?-!Tw^OMz7xgbeYM0zyCBTNL58wDoP0lW1ood2PTJ^37P7 z#L-zqjtq!)Vo?q_ULg~wB#6?mk9##CZoxSQQ{yEC+zHtD%WqvN6^r$15%@nuV?0M2 z4z0=*&t&}&Pf%uXuLBmeN+LWWDQg=W?Bp370kRCsmsN-*1&ZMYBW<hME@m>>jKbm0 z>6cLSe`c_1Jsu1n`K+lOq!|{w!1$dsN*u-kc8#Rsxph{$7zevil%+6dRn=75($Bqi z_TMmUoGWDOlmFN>CSperW#(g_{zq^=#>g$C+h6!+_0S0q9{B{r0WY+wwHhyF4;(t8 z4_k_=x>igR%6L&Fk!mu(EeV+8WZLX_xNRyc8l#k~0-)M9@IVTyAw$69+D1BG^XTlb zyTy=+v<RO0LwWGIxQ`yItf{G-=jg8E_|Dd$WB1J+IQqx`_J0Oy*_dp+`ttWroIJ^k zl4Wwfp9dC^k+_!6bBx>UlbykKwPvC?pUeojGcXkb&a6ZTR50>50tFQEW%gd4a6Ek; zP92;TAaFc=9*@6q8~_inO`wzjp8M{*FOd>5lb%s(etzCh{=`WS^7t@ZrYH!o4oam` zwOR#!3(w%BlIKC#30Do?4pbJNv27ck1V5QdrQqA)bN-Xk0C-$B!!Yl+Xb?}&jv%0C z#-#KfXCC?!g)-0|!yS-vhV#~iP=k0OB-B{m%Q0c#M3c385P3##D<kKU+3{ez1>dtx zV<^dKSPEdj1K*c3g;!pB;mtQ*fAHZ)W@l#%UH7~=C8@krcAOpHsK#)Jm2>g5QoR2O z$cHd8jsT=UTfa#Lzz?gG<r$Wv=pS7}h!Smcs1Jw8cc{p6bmWqOnz@O{`f&FlgtZ2v zD3oKO!t!Ap-6QBt6rZvvHY|OKpgx+;v2k>DWBHX-w%zM&t={N0_DFLF0reHn-s@Tu zwoxY8Oz8Ql`Z7XWyW5|!eS@KO-}4>Y%~L$biAox`yqczg2U#;5T;yafV>FiO8S{RQ z#e>}Y?VWUfrn}P@d4c8o+GqgIE{teDj8hrBp#?t~7CT%z0yl_+z$rLEOy{bJO+kZ^ z83j%zrEGQV=I!nIM&{|yel}OET)BK<dFiGf#3$}ML1H1~bX%ibt3$BUfo}_<f(s3d zEmmGYu|A%Phg;PV$+M(HS`?3JY5?JKNsjN))Z6Rz0CnTOb->2Blwmv)8D1UFvWI&G z_!&zTjsXKlj;j_h4f4G4yWlN=sPV_X+xEXLP60miojL(<x&Jv;pzw9@Y45lGV?2_9 z3X}RI;wKc85;BWwSw%C}{n)06ir{rgWTBV|sDe)yX-5O%0<_At!ciCjp97kNrT9V! zd%y+tF$g8q)CPg)a2!7|G2!@8I+Js7V*v?wDl4Rl>C&yWO^zc1L3Uk><s?8Fyq#t^ zSpM%^aID(qIgSmB8+YjEN|TObVn-3vX^GWzJ)4$>%@>xhetmlOao?{JagC;Zl7&TY z;pw^e`i=1017Ajjlq(T~{?hKoH?N-m{>JL^XTSJ~V-G%_E40cJ2mPSI3ahN}f{X;u ztlH*5a7es*9r-8yV3s6?VHm4oT2we~u!EJT<P=~=NfofJS$mVfMJp24$xr++EK;~W zw(Glr0bwD_k;U3RMD3;N^?bFiSpg8Sd^QE^%r-SaQX$6HhXV$KHdZouHH{sEWoTF5 zx^nTth2tkrsJS}Hk*V0g*&s!B&3>)kIC(z~@^bkKwhp6mh;lSJV2H^GPce^5<xF7Q z47F)m%_iMva6PehIk1?66_irqjH<%Yhyw2(@)m$VAe`^=FqpvH%fsBgQ9geAJN0hw z2vz(vSNwa&Wxp@d6S(z=L_c9y#`U9Gngfp3?C+2?6@{?`0U?Brz8|uch%E%JMp5|U zTb3b+g6BEyo!e@rsHj<9Oqrv8(#n+8g^pzmc~Rwf`iaL+lQh4xz64**2{KAbqo(V} z;AA8<4S(OhN4QnTHuW%s1&ecrK5oK~#)Cb=FmP>C5LJy4ScZm`t(ifq?}!|+dcz#_ z&OZE+`y6W`^m_!wCbye-xBZEM*TPy?IDQI6h3(BB?5yrKcW?JQ&SRf=niHPn#r?Gg z9mNVkiruYip(iUDM@Y3<;kiT^aq{-+BKT@q;7!}=6FV$X&xl3M?rB;lDI1~~9s*Rx zHcidfAd(f7d?Ggkbd1(48(fJ@BUA5COeXNEtazD>yF?(DQl!MV*0Af?PPwt5X7T|h zaY3$F1A+lGb$4qul}?GG2-gRUlq?F4-r*=JA~`>BJufKNX3Ld&x3y+!9a+tBr71ak zf7JiR#T^suXsC^5ssvReo15(@=*E1BfNRL}VDd0e2XX;Ui^Rl(jKX`At&P3e#>U3D z4ij(%1hv&_LC6RHTv=HG0tpTWh~Jotj)l**x3}SV@QR7JKrr5R14ar5|J1~n?l~^| zeX~9K6Ngdzfj^Ol$RQk>Et(M_@{!yoPSbmOs7#Zb8tGj=X#fY-iuVxlK>Aqgw*iEy zY{|DZ%jl(ZHF)ef2DrCOt_-9rovTzPW{I~=B)H8m@TjDC#ncD5+J&M_eTXx8Ni!@~ zc}RpO@EB112hSVBQb?i<Nb-E2ifBco!iWw1FqI`5GczoEKp%}Lg8WHELcGX_!F5<f zj<<F0mA9V%*2~8qtSufpohdw;&YsYRtYhh(;|sFS(y?Q<2-N5`X|yv}YTRIzwL$O5 znICTKo$F6cOjYZXmxs^whnrPlRwPm!Eg=HSe7KelaTA?R18ug9m=`492a**rG&g7) zaUA8UvhC=BK{6!Dis7hp#&I6z_|OeJQ7IIvX_Rbk6)F?>${6PLtLJBDCo`Fp>(~>G z+LIrDYU##RMU@-%Y7n^K%K$&=LL*7TMBqG!y<HkCfuu&nG$m3Q9uZDnRcBplT?|)J zrKjK}-ySham3X_kjO7H+vEf#_j!xe*MFFl1xFXzyG1VMPXs6R@hzS98<CqOB1pE`8 z2Uzaz?q;)DKpNis;kdUmxi}dJPWAne@f*8jTqTW%&Juo7ojjJTBz`L2jyL7W;GT38 zOUK8=WIpA4eJ3;+KF>NMIqD;hiygydD{#)>o7iN>987g02puDe{lCe36Ie^m>rCvg zeXqLv_V)L>-|L;->}EH&<|>*LB}=kpd6yTBov{PNm>D|=5W|QCBgi;`0Sz*P0GSv` ztg$U=EXkBio02R_Bt?pAv-j=o>)n^y_o|$~ZnI63)Ht>&IdU!@9`3uh-d(ExbH498 z|5<P>QSZrGiNhtlx>jg}e*E&c{`#(mKUgeQIbIrzF?h=NtgN3Z@Jz=soW|^a%hZk0 z$TjrpL_^V3xZD7`*#F|Ro+#@|O0m4873-jF@S<UOKMwHB?MSRu`rB*I?`&A*8f^^B z6xPXm3|)tB#j$i%?|<dRZ~ogtxwg5yr4^J9e*BT?eUIe}565w?+iZJ&i|28hCX%WI z_FfWoSwTgS#)$^WZ-@SzZS0?zS}_gt-1#>pQJ!5oXtP~|>g1#fA96l+D?r5PtV0LJ z7g;TUQq~78I7N;dPSmP^<$hqngE-Rcm69Npv;oNgnJr=_Z&{sA-!w+mdR>+kpmi6| zzyAEUpB2Q9EiUeplswIfKuufC-S0gAyr$*uIDQA1dZk(in=^(T(3V=hCMiX@D8s&M zj@q>ecB)>PPCmpU&*w`7cb)8Sn4>vbNc`coh)|=H=0S1ts;miks-mlRjrS_*#l7nU zVZ3#YlbdLIY;SM_+Z$^+xIYfSfR(~AU~h_|IF2*kYKQyaEymjNpS)vD79T?lOL7eB zxi&))f+A+Q5up6z9|(8F(MJ%-1bTb_xHL`}$4{KVnamlg%53+WDT%v1Nx>=?>nPz8 zPKX7b#05C;`EffL_%gWvUW&V@0F>F5E-D2zR|9ql-=e*>dF}OcUKpgFQ<|I|H22_o z^Qz`JBNWAhZvXTnkHL5T(*N-vO7)uOIPI<VM}Pb$^OXv)Sx_cv*6W^OMM;yvd1nod zkYx--Sruf}_Y9V0fQA9r34*z5W2-h*<K%{bJBIfEhKOS42Iwcmo+Sv+YxxUF%w2q? zef*xIhmJo~u0L+*iem#y+y+-31G0w^d?U}>q(K476H%D5v>S0RcYCgY?$+}8d+t6m z8d*T8wl+7<zjU=+Di^DhBi>JQG)Xdmv>-&`Yybv$PEe>#WM%axN#LNvWOXKRjZUjw zsx)Xu@Th5$J<73lPE^An8uYrhZN2i{7rUMI6CeJVEJ?;-r&_C>zUS;Wzy7tCUwUcj z(2@JkKA6Vt;X^o`=-lhCJ@Z$8dFGz`Ym@wqtCwe{>w|vNbBuhkk!^(Vp)(OjDiv>T zHZP}WHHgEd!zv}MTW{Jq4V<vgaRphf7^9veX$*l}*UqaF&cXN|tClJji{n5G%IcfO zPl45q_bSHPFKdUIjzu6C8<^a9K*bn5!8qSNH}?mBlSF|@qs_IoN>MZLh!QG61VfX) z?@dn41TmSW$@kw80QHN;9lgfe*>TLqs5@WgCQH@HaseLh8qE}d2r-Jc1B3>JWFi$Q ztriD9ZbQN_;Cch!1#|;_C~Goc-54H8mJ4tw#b9~1+-T4w1-5MtM|<1rlhgYohD#8i z#?HjloFW$pnmTauE|8}?Yb*8Hg%sDMo1j-kCC>>8i`#hOn`0ZWl%o*5mQk+HNlFf| z5#(Z;f=DdQFa7+1V_v^I<mm4DCIIYkZl)dtfT4UGkZIhfs4Hsj5+`q<bm8m=9_n`2 zmJa>vlsY!-8)4Ao1>Q2eB$J&PsY6lV#5Aks4$=V#(?9Eu)~2+dPl$a<*iB<XQ<%o& z@wtV48*3|_cIV=S3%PvZz6T$A<;53rg?z160|u=R2eNic_|&JD!oVFD3Io;56&gds zTfO-vFR116nNGXa>pr!%a`VuUV-G*}_{PTC?Ccz_93n`Z%2(AUCu;eey1TP;?b3xo zw|(Nyla)&T!2a0-OG`JGSC$SQedVPWu3Wls>dd`Mi!=J56X&aO5W%IZOu_r!nK)1P zoYa9U=?Tj2#LUcwB9bd#V^YQ?=n;ojD)$~0rc~1LKy40nJxICtXoG)S9KI(+jKecy z!+ST?d^_$@+3g2uZ}9H#?)3!Bv$@yaZT46)1%I}-wF}NVugU%4sMeSy2<H3U9SR4) zLWU#~iU|Sfvc7uA^!($~^gT!R0igL_fD$xcI&ro0QsDOT?m7S;f@>reQYs&YHqVVS zrAe(gDM(tj6NXbaZDWX|f@%RJ(a!qy#`J;5fAW(AifAw<LGA3VYsD%>(jguw=n10a zyB27$qo?i$B~zcB;{*wuD$k4K4GBP6H`{Ck*@1&FaB5gK;YG(Xzz8W|q^=1^iZZ{u z^_82KUXCO8;2mYT@DppjBwq8X1&|&a9J?yYD-;LVDE0b>mbdHkleJ@W2+)$E5zEJ+ zpPITI;u_rB4LR|EI-t6qL*$gJs(PL2+@BI>D9(;Uydn)J9@-t5w&!N24;?uU<dEkX zpxHpRz=R(Cz>^>s<77Kmta^^+SR*A@VmWcVdb65c>B7b5u3WynxU_irlHO_A2M^`v z_s<_Xa@aOHhYs%NIX=qZBwwBycD4z^Jbv=@(c`CXUc3C#cb)?xdivh`%Ei2zSB@Mz zVHpEJmvXfl1fi&wL1VKlx3dmTr_6BTuvaMOg+?B2=|xttm$&mX)15Cn+~=K#j?B1l ztzTKO{zX^%xkHW_A%=`EcgdB}yBa->vqKHT_+iZ695+pUhwpIxfRp5<rF^532b#@_ zVhA3aV<q6*xETrF*&>MVV<UXLl^wB`or60`Hs>BRsYrWwA2{av!`D{-G9}|2Tfbxe zv3dHT)#X3Z!aXF2327zTBE!^$0(^X2VW4Owa2K9!0t<};5177bdzR(d?#)_#vRs|? z9KBqd(uZx=9OMesVx?vSj@4#i-5A3m5jiZ!A|AM61U6o6%#J^v2P@YY2EK#QBTdE~ z8Nk@G$(x`!Se(p_kSJ?`XM%A8kykZk(9t=8R`S!5P?~S_O#4+y=?Us4T!b{PwK@me zgWM<*5-MKa6mp!#E6)$xY8cIcD{(z%Jj&+n<U9<4p{<D8*W<8^;twP=oE48{s7_z+ zTI6&o4E#VTV1cU2INK}qf|I9C;L#ejLJ$V!EQP4w-2q2q8rg*NG@0Ia1pdt!?9I+h z%+5}WQf_{3nc?=TwTF{f3jLnzI5?l#1}>0FN`YnhQf)55bHGE#8qCf%D%DTuy7}@; zFG#X_{KUy}Ip<ov!$+3p=4ap(!I=}Yjv-pEqU6h#X}gvZ<*G$q-yY^gnXp2)yFJ(0 zjVcA|$vbmf{qR~VG);#j6mZRo2nva@!5#hX@BZ#Pj1Vv#kH7dKY;OUM1NiVeKDp&M zU6<1GMF50Wt1ZhikQs_$6;(^)P-5{`Pnyl#`@VhUG)ZXF$$<z2@(v5m_M^ko{8Tk} ze(h@}*_VWT&)yVKKA)TL)}O8f7ZJgQl+PXhuLS-u%W=R$f#BQbsJV5MV`+|KNRoE^ zkQ3C4moDA7c3D!?h5d*0{vI#ofToUmP25CHP}{rfl9GqD6~~bik-87Gvkc-V@Ei~` z8UCcrtsB0JJ5Pg|fmn)yfT5Xj77djpQ^rxia00w+;F=^wMzKJVj;!q#E2VO2E=`vU z)#nS9O@^}_{oqdX(9N#W9OZ+A6x4vFlK_#HuGLCAG`;58hdB|LZ8n7=y}f+}eo#oG zurcu$G!N3?*Mq2v(hhhmP<xC}1h&bhwpN(|*zUKt!OW5br_j}kWmo83-hHmjPw~7o z?C*h_!@J}Z4O$VP9IOuKfjA>Lv$8BC5ns%&YQ?XU<O4w<jQZO+tcs`hQki2C@cf)C z^Takr0Fof&Wk~=AB7@hF<#TVm+L)XI(Kzh21%Y#neiX&nH{nJ#*c2UW2p1|ro0`<= z409kqI5yns7am%)SGx57{X*`Q<-G^@rT_BLVj2*jiCotwV;7ftzbE1R|60<?KS~n{ zd~0VbU#fV%cVl_&z`ohx08U?m=P|L2nIr?ltX6Bhr2fOwbpB2?7{)x$IXSt<(71|x zWR@kiyT4w6XBVnxBy*)>uNT>=vNi!HeG-ij86nRn8a30S=_I0Pzq7Y7F?#@(2hhuA zyR*H$9mmO)OBX-+sb5`OS^}oDu&|(yhJFZ&&B9hE$i3F~#O%RhWfE8=&9J5Fw7uI2 zY&~`deWy*3L>PjQNeabEzSO|org2P$3-Mgcm<2F|1N<l*x7VgX!bQA*NV))cnIt+* ziihvK8zB>+OF%UOztR~_bPOR1YQD~=^hhdTY$5PumXsI5zQ^xwADEbVQ<7eA+#dyl z0g3AYMG3~Flny<%UVV;JHuT<yX}+E>A!Dcl7Kt*Dz;fUWqC^2N01B0+Nsg5*%fe0} zB0Jr^hPI?>726s`K7KI4F>u^0JSK7a4&HDhDc{GTU3kW_s2m%6-m)N{NeXq_=<)zq z1fBq%)ux~@@bEm~ToL#14jtFA1&&$TKSOg`7{_1y{O3OLQ$JlSmU`Vb%WHYOP4Dlm zU&)szwL%5>Fdm^1oQTm?O$zobAt!|~6A1$UUqAlB`c|8f%fEPMEHZ^=&%}Xfgi1MX zqRhS%3IF-s48wf=+IFSU=(O9oI}0Lq+ih_5K@{1RO<{f&gA2rsjNb1iQJDpDMWr=W zUal3lHNH=xWMG2sABo(yZAJyDQOhsXrTx>jBZy|Uw_mRezCzG(;-PeM(I)ToY$aDv zWvyr$`e-y#)WTmr{Z*hw;E!i#=VXyB<mAc8DZrJ#{OX_Eu3xQ`c|ii`gXIXz3x04T zU~>cliYL5UNdez4iqc-Qdvj%NeRX+eZUJ5mFo~u)bJX#j0q8)yRY9O}(2WxmQKDFG zmuB)PG1Bn4eBqp0I*$k^4XJ@u*lNwKwd!44!3|USAt{fTKw|t{!gvYolLVE9h!*3% zu2lI%%-?YIe1c|Z8c&<V6^S^9QOm0r3yo(H`XEU@={v*i&6`)RUaL>c%Zj$XdgG}- z`y7}eNUyc!D}!ObP^yqw*$J=Y%F1*tKkxhYu(OxVw7E4c6wfD(LLSF>3C}g&YU9Ge z=@*pin>%_G9|m~zeGi0g633ESQnaG)xugEBYYpLBgD(T3jypcaiDf&oS`Y>4)tA2$ zgz>(`12iLm@&p18+yvGRm><CUsMiu@g%fH?_;T!_p`)>Ml(0;HBpsS>{`mcSAKiDD zNSuL*a|A){<?{ua;bHmx^EX1<@tP)RF`gy~RZ((zO_Jnt8MHf}b;8ZdssbPo#mW0j zMpNWRVp-Xnsor2&zdxvL_x5+pDJN8lszITxmfmW)E0#B)NXql=>-x@U>+@62dBn;I zDD$b~32`@gONs_|Gywjyxv>RibNcRk4lXSga@xd1B~2pB&|TLCU>uHgQQ#YsGlGay zKxvM5?4ddA8N&`mfR}*>#KFjZ>ASB`44*5MFP?v0R@7Rpjz<Ur4kYl)0m+AOYB)t8 zSWG!ZDfafBS-Jj)yBpt5(~G6rj-Xtj7-U-c-A-+7x4t_l*dap+5hp|xo8Ve`hKxCb zBP5NOc6=)pT{5Am6a@@n8*;5Q<oF$1Umz$Ir5?w#jwAE*dSmwMh$u(yPcnkYi(+eU zr`6mU4f^^>-`rSXDCE1|>hkr`pm*uQdHC?t)6<>@O16hPrV?n>Z{aFo0#{ejboQGf z<0QnBo`6WWI&kwW@&t;PWQ7q)7tdYVov2NNX?d=r7V46mvu)iRwZ=5iGKYewNlMPP zOcH+qillj<@%t9{?{4p;2~nS%2JH=OUn^8AjX8LiL1))Chk+M@MyIJ&HXRP^JV65% zvq{X=3JD$R%~mC)Wu9j^8Ll06K#pzUkv{KUJiT78R4O@+1N3Y>l^W20Jl<??Z?Dm4 zymOV?_PFZe?|ZxbvhU0w0VVMM@nITwSLGZpkd+)w)9~UYITyvTBFI2j{5U2F9uYB- zChzZ<LN5{va(lA8lF~%GGqu%QL=>WkNZ>4y8KPL0R3@e3fxpxBHj#${sd|Vq5tSgv zL$zWmP53Q}pu<6y7zt$R(2--qen*oy*XqNyjS~@fwiGoGjU2B`O%K3~v|JvR0(fzA z*ah@cH2BJzZW#T3yV=|$aHyC7zh0@7??3y1Ec2i+K?9j1D@`q$mPuNL6Hn82oNn}5 z*W$3pva8FN&YOBFFr)g+kFM?9WqX_xv9NHcAmJELnV7VuQ8prw&NgEb!R1;pvh&WY zIqHR6ha_l$4F@sbY%bL67u4L>P5tAn$fqeM^SyHYTZqixynO0E{4f7HNe93FTfcMQ z=&5m{EpY4uhwo_M4jng)QBP6x)%uhu@;;unN#SjqQAZGSm~2}^bJWkKZs5Ip5RKW4 zYixTAr}$w49GDZxYgab>;6SNdJAPQ>Sv(fIRGR_8JnA<C+>4FJJp}N8y|mxiELLYL zjoEH<og^Y#Z<G0&EGsi}b8nt|RUZuwA6~3ZE{Kxq*oLL|z#+nY;Pr9Dd6uT~n>1<I z0Z9tBn}CyzI50j2T!0b>7Rq}6fc=BJ)TH-nga6yV{o9W|`sm8a%H-ta(W6Iso`2<) zSIXt`($doBKKHr%?z;~z`W<)N0fzU?GtbP=&p-eC^P(tz>|-B${q@(uMd><RbmQd7 zldrz|D*RRy<>{xN2GiZQZy#74SZu4+g5Ps<bMUfJ6n)|opIBR410n&&4=)QZ{*7;Z z<II^ew`UUm<2UQGT}@_O<niw8wiqS1wwd3zO^MX^MO7J2mu@C3i6V03lv0uq7$A&d zMd`@w$WH}u+(bgM6kZAm#nOS3b2kwy#YTwog_tPEF((KCp4kG7Xw)y1C+ZW^z2=6j zl{%gF<!hG){qFq_KB8!)I1Y=&;)V0)``uO&m;$T@R=jxWMQ}isYW=$}en*s~<0ntD z3=QfRegi|Rl=G%B3W8L`bClp505vcj`wiRJ=yz`p2WuNQRyB=$@WUTmI&>mRQm%O5 z;!1UtfZh5G@8gBTWZ9hz!sT+{#A5s>MxzLk9OsipDsIFB4UMX4rI)e+&yg#7Q4#jZ zxf^l#%^>=TC>-QVe@Ssev-=Q{HX_1l?sj)JZ_dqC7xpaywR`IdCJPI*oOlGkSrQ~! zhHIRVlA4Qr58#XC6<N*mf|^YNPop@(lgwD*jn`jo?rg(%2XDK*z4i0I{4XrWed&cO zhYs@}`siWX9)P(ja?!PP#{>&6#M!oXHbjYpZ`JQ?RqAua>U6)o>02XK(7=x`>_4z_ z^9FbTC6BW;`|VxV)^Qag!{PuOkl;uNLRpbwnU_;fW=Vl(WD4mi#p4+V*{(|xI^e8i zf##Uh1^xf-jkVwVz25`#0OJ9<KRY`+9!?nHxgt1+8%$_tXXn$O{`Az;)Mq~P8L+Ow zVBmQki0o>$dV6;s4m*GT{O|w%@55og^E<yYt|}Z3hc|ED%;kXRD6nYYPq4;u5fj*F zrBVTI3>NtDkAM6R|L_k#^{G$2FBSnj?W?ctWpwlhF)oH6QZEoh(VEX+0iG7K4CzOk z?IqJLkbt*Tx=_8uF>XXMxaaFz<{yxGxp(dO;Exc`hh9paK4zyM@vJ*J&cZ;>3V1F{ zoN|J+x^lDM>zz7%&zJw~PgPZeJ2{2dM_sK@`~07Nu2d{O`JpFl$C1>^Q(yX=p&O@8 z-_6h@$8+^s4HT1OnIR5+0}Am`C{X0J_2vI4$}+>$EPZW#`4Xt0S}hj^V!2+g%+3yi zDN>Y)lr~&33Jivi5KEw}SOQZAj{tZlgskr;T>3aGk&95u;?Ahx{SXtyEmdX8VXhl6 zBj6v%LH8ZnL#P>=k9l58DZemk9UiuT8&*~~3@;>)9XoLD#cviGhk>>Xh9e2y9ffMX zu(iGprlo4RUbkB+mw}psf|#A#4{s@mY!s$oE!11v)LG~iJ@fQaYs)w0_AM!j+V6Jm z!INj{&GmD$v(-WD?u}N75S^O;5RlSQZ!eBqn&snYoJ56yAjDxn5KOK-5rsHqR8lkm zy(DxI$wUddbm2m+TB+9xK1jz9SIRI91^SR-3naM`8~-y&{X7vLrNQ^`Dq_A6xEsUW zhggw9NtBW*!%0?1pWlwU)_XO2`shbL3it*e1%3l59jC1UxB)c<n*lR}`-_W<ySuw^ z%z*<3z<7Y<Y;0_dE1m!_!CcRsJ9iiWdvOtL_}6~z*MQ$%ym-+x%_p9CVrFIrED&Dm z+O=x{P2+TMcqu?#FitSh2OoU!?bCdJxNd-TJm=1quF+KJdpsx#l8G5Az(Janoy@P| z4&1RYo=yKZyJRt|xoe1Y5eSN$L@LvQGc6QzV5Q)uc3ZpM-q08gagMU%<nkqu^=HpM z0Az$fxCLL<f;KsD@X+eYieWoA7=qHX4?gNShNh~(gMe`X?g9OaV+mY6LFg2@Axk}m zy?OJ}xzQkDXlrtMLgK20nM!&7KuF|CL1`tD2ZY^<$v9@^0mBffgUg9;k%kyyTMmgd z02fDaj0o&H@`Bh;1VMzA8G9ryIGXZF_{`KHmumV#$Ct(DUy&w?QmOD2tsF+--JJ3< z&c4)buFg+Sk`x=;%Ystq_KY~PeAn*B37jBuw+)!n>$L8D=mW-Ruzc;(^xT5ycyIJx zK6CHAG{pcS!l!a<;EC<V)S_$kfV!W#`@S>x+z*%rEK$upjN-7{w(dFw?(Z-3=293I z_*B2L^ZcpBAI+5-Mt|G)JY3#|r><rj{VZqb1KJSPT#@C3QNQgua1z*JZQ|1Tt5+_) zX_@o2+Px`|>2eh$_gjTTNr<P62qW`qQ;*<O5VST~A2Jk=C=o~!BI(RQr634BFI5>t z{Da4d0Uq}IeIStU;|hLzVbtF@<?U^w%>QYSFphC7OcL~|;xaGVA<co(O9O)EoxS1Q zR&%Lb+?^|3jTt%#DF6vVN-=*UlaSOB-Mg#vzjB<N=tgkhV>`r;`lbL2e9-T#t*!&A za4ZW9t=6cgxNuoWqL9P;he1{`fGB(bPm5Zd5MYx@U}xcS%^2)CHW;Kx;<?rifd(|) z=7c>_Y!R%U0rAwum#%HE?93cJEtM)USBy!~^k@%2AdM(0A_3Msf&j`)#w3;C4KANT ze1?Ppz#t$1O6-J_#f=>bh}`~~5E6mqaQOlmg!c9(p((PIw+YYx;(z?^<Wb?ssoDSQ zGv9Vhrdn<NcfWb4T=_M`G&qjZJImJaIt8aN;pNh)?d=^&W;G25PO|N5T$*F*qe`ve zxvrt>rD}a|dlQWK=&_@n=AM$TX!-K6x08e(E!BbVxkjr#dl>9@*x8`S)J-HfIaG*L zb=3*})1W(PNhh757t+J&%2JLx+SB`0B}O>DI-XXDTMf`cPSpVG#$z7sG<L>0A#uu_ zd;JXnUNG|UI7inpafcD#1y7eI?UMBQelNb*EYY$U$NcF7Jyp_n*6v|R3uiD!Y0Oq+ zo&<l}(cguHu=D|!#<fVdi*(0XY`14<kL#NN7=eF+kh?uDdwlTi<H!Gk-kN<qe&qH6 zZ$IYtKaLN>+Xi@Uc>4F`fp|KklHGo=3E~8hPEZjH<5#t<s<Mr{8%8`(9mFCg^&^Wl z%n~bjb!{Ebnjk2GNpUA@hafok_MGQ)2L@l{s6L7$G7t7~XLD~><~KK1mqE|$UtFA? zolQazhh(KzCuy$NTEp{_d_PG+WH1!X^-UjK|A`}w-R;d+UVdqDai3PGXDzI2D7nHg zJ2cY~#1<=b5edtPjr`oOJFlDa$d|ZUd2yET(n`|^W8b5YM-vH~W(6i5f&1<YppYU0 zY|G&YD#6`l@K<I439%J(DM=&WKx<pWnM&;|-)f6869$&7CQqE*|IFG|-R%9uk1nk( ze+%H+*<=6Wk1l`W<3Ib{vtK=S=g+<PlJnD_Y&5r4Bqc8v_W41Q_}dg)2C25VIOAs; zM^$BTF?gB^LCB)uhkmY*E0qecLT2aZz*2w>f-y*H0hdDhjwDJeJ9{Ee6?hIegF`?t z@m%p?d+5c~(S@1KwYAnxn<G0^h31NP(oV8FSPpm~vh#i#Fp&kMH1NG3i~}TTvIJ~m z*xwVS91#AimsWY6uGNYl`tP~_0a3zX#X+wfcvgz5%qSA~qkwBXjY6%U4$6k?33Q4i zhVCa3qFI$fE-a4-;ojR6!y__XA4cy{Sr1FOTrR&mZSC#p+P81OGso#Q-)ltfKfs*+ zp<;}H4-bs@2V;crT><)HoP-?8;z;2}ia6vsJ0|HUW$^+fQx=v{%&!d(`>rroxx#Z! z$Z$lQIVr$7z)6>~#LBe(wTAh8%;pKti<cG~Q@&^Kz{+{>;fE!W3p|`!6~#2Djx?)$ zqbT0@MiNfB1}(>pOdBCz<d9>Idfj2SGsxwLnQ15VRu!$u(w8{d#4(dZHtpibm>byu z)104Bh)x->7edr6g5d|i*(g85=W#Iv*db6SC80T3+v4`#Vubs!#WWRHircbcL<Bv~ z%1fn~BGKui<x+*PJ*Jq?)k;!p&<_*q@B&;5UgJ=GrZLo;vXU$5MBuf5<ikI%_jV>H zW_)`@l62sio@+8Zyx9^BUlg#^bQ3(Mfebv4%(|4p#T|D5z&jI#qGLPYf8cS?wM97x zOL{o!WHri3K~qTZbtJAt$E2S?eh`&%Qba02lmJ*M8b3cjvD{>$AR#$K+Psmh&S^DK zs1q@*_gh-NVnm7McsX%k2ev4P97|q0|GMWVVVuZzD9Z|1plch0?jCRfj^k-zT;xCq zjNEpbhBss>+x3l<YtTS!DR2c0Nl9?h5fQTt6{D0QlaU>74&G~v0(cI5H_&Wvw<}oO zU~lj^+z|u;&PcY|idzGT85~=d#j<QRe^?mTB4&l5@edN0;FFKLY<&N6?rz&25GS6u zCDv4g5l~PXPDV<Ha7po8qm*JJCI(iPTk9UOgWSH_g}l)9LJ{jID$`Uc_;$ffK@h(( zKX@vpg?>~(JXf6FM^QH>stXaCO`_qTr*i^0_na!?O(5TQ;WEQY7L**U-8k|sV~C=l ztf*;RvPQ${$#Qzn1G#)l&Apx`tBBw@SweAfeXrKHMK@$(ppXo_TP#q~TNNE4Zpj3& z%x2xa0}Orm5gUhZ5RM~^OF#(A&BIj<16Jlon%0kQPZNqMf(tY*F%0+KGipKwQRFU^ z2-9sZP6><<8^Nwt$RB!$q#f<PL*lhdUs=9+Z@zfP+|pv?yT!Z`M*y%CHn}LP`AieA zC2V0l<C!)XgCxnSmh(Ly#C1nEhWggj<OHBal7t}1)O-c}R^;1)C<VTs&lT~^aA2*b z9jA%F&@sMXq^8NE{&4Boldrw->PydFKJvuT)n>{PDXTG_?ye@^Jt{pc2*ni9qM}t8 zM<Sgh_9&LaV}RqhQUMp{uHC#j==C1{z+=Ep2b~>J#@Rnfe5)o-V5OJWzxLg=Z)g(N zH3mV@ov%c9O&r8C2?G#+G|KW8<0v2)B=XE!Hy+yQd(S5X&}%lER8|WKH&s<(agQr~ zJDpB0mvbBkjLictmB}zL$Z?b3aoA?eX5mi|jbNF#E1|yMx9?NsRMx?s3Pa#%2#k#v z9EmYxUKe<iWqnu#5yALyelx=d@j|08w7I4}yE|F{1lwOZUsRg`!($8#5KzdNl|ou1 zV!PJ<%A);OX_9)<R3KCdxk7PK;2jx`s-kR3N~tI*8Jma<z3;o0ZH~&-8A;9Iec`~1 zL%95~x(Gz>(#&42u*!*cp*n@o9!drTT>`Tm4qBV*(`zGfVgas_k0(2%x8~m8iVWeV zpW`7c@H&8gIQWUb4IIhf=nLo{nhxe>F6KscP)QtX%ZeU^{5U{LWSfr(5xZWL`t-my zG8&vI#+WoiFZEJ_MNyj2QF&f%C-G|sk3M$r$WLEg8-4rrYcth?tVkiAt3m6QI~aM2 zER=F$5coXD?si9wqP8?!Z|?5to7?3=u2QRxbnC{-7LKvYqHP&k5qAvp@JvDwW;P&B zNfHAuHSMI^AH^t{uZeh<Dv7|(d7g4CRIbjy`Qj_Jn-@y^9`EmgQ%Zql>!W^8+MTJx zDc6iq&$oxT-72~z$6)cRikK^ud)?mhjjR3M@w_H-Sr>vRh)8@50NH3i@V<KSvzlC{ zs5yZZ7aJ2Rqt+lCAqoTppACVFsSKR6t|IpC5Yz1UHp1JjV!+bCqQ?CT;nRRA%CZb# z2)_X;$B;M}41m7o^Z5XmwRvEB@GMv<U?Uvx1GB*I-^~ZbKt=gtho^0UvU%2F86Q@1 zjF^DrZ<k7d?V%*~U2$ktdU|8%mla{Sue_|P{eb3xThW3{m88hFMPr-ZyIFFtmxCKI z5?pCA<e9RtHxgAhm=^dSo1DjKO>h;)oxgg`?ZCHq@bg&%5xmtIs-a_Yz#+M9QQBdp zJ%k%WX|_?Y^whRaiV|%(E5ng5YY)n~QciCVcDCy?W#5W0zL9SqEt8cwf*oR|ijb5h z1Kbmn$i-Q=LIi>=idX={a(Q!nbQp8^CGdPE0-INo5s$2iPF9_t$z7D0F$+$IAf?nb zxl(Ep%<G+|L?sUttISYu!%};5WtXEV-Eu5Hn5-7kh}hU0ND?yu6!Ux)IJa6@Szh_f zzx&_97>NS?Tfh0Qrl%*PC~mhq98-~$A}@e!gOei(k_u-m!5eY7(3rvnt_*JH0?H6` z(*U>MWk_q3)F;m#x$Cvv8`qD_pXv~~(C&c!9H0J?YGoGGAcH$!F)ki<Lnd!2DV%@` zWYl%<x%Ylp)lYr#3-{jtz~X_0UUL^WEGBSkQds}MN}o9LGcT__yVHH8pfq0Jc<sKt zydNoeICrYR%Yv8&nhl?=QrE1Z;n*R=$n<;S$+)O@93X+W9H*9#`xlN8Z(MzkqY4~1 z&Z-#)UEpyz48U{T=@5SZ@Y-IQk{JC6LK5|QeoNto*^F1LiUOdW8JB}EO(7iX418|n z6iurzbjofdv$QvrU#{l27(Q^>LPW`Q<m=6CfBX6ZTFd(z6~O?V9x;l~(SfXR@&Z?! z_pIIiroA)+1`&;hJ&+u5h9_nZsQJ>cpAuvdoNgQpV=c-RH$w46UK!x&)3IU=r%b(W z+ePq!cnA`m1O~ajk?ucmBuTsr=UzLwc)&%{z`UVw`NYX~_NcdZDQ_EMf>T~F3<|hy zJBCDz>{y2ag-#F^1QZ$v3L@N=BgIqF(5*(QBqrf_0J}+o;bCay((#dSkmoY_1eJ@I zdb(3re>P?+y3wqtlE~7H^1kivaI%oY1?Duu0g;5D7>Z%>q!@u^7$N`VKl{_ggGZOI zT|IKgsW;y|H$69BDi-jzPD0CC$+b;mu$Kj>c$VWOr7*6~ilb<5W)7HNx4pr0IIky( z0Sx&h=`&nI%a_-$U-!1o7wh*sR_##r6rS;dRW&foyjG~iF(}~?#|aT`_JQ-*L(ipH z2|(}8Q+Mrbt$*<gpa039{ki>1OTOLLhdS<@kH_3ZchCLUg4m3s7gzd(LhQd!y<9BO zF*)J7j31cblt5GqJb!K@`KxmdnB~42Nq?_c|F}l}-M4o%VtYsJ#cc&BWVatu^NT>x zfvGW}mg{R$Ph|%{S%4qmX+mrQY#x>@MMM-4CK2U2iecwRR>=(VKsOYASjlax!jP8( zkI#FEmh5KTej{hC+_-RQKRayqB0~^MClx1ViQ-XV@+>dh6{3B>{c5=jovnX={l*`M z<iVLz1?Z6PhrqK$Nzr><6kd>|wxDcNbQgpiCFYFooM}|R_JTkqD4u3xQ2}fU!8aRv zuTtmBRrar+`Rg~{czJeadUAGVYvr}vd>-$tyP4k0*yh_P5Vjfol!%)R;22PhaSS)| zCf|~>5q<=XD=_H{QCV!Tn8zApiAmz-ny}`xiWFd4VN51HW?^wn)LKOJq!%p$(~g3q zs`2}$iZ`}<01HFM+3V|hS#|>td^qknl`_DkScVd1PZY&kt$O_U2}2(!B7RGTW3_xK zUz)^CF8g~NN8@JyRAQT5PE^2Cf+oZy88@Mc$7NXrZYv&wac7c@vMsy4yYuF&&wu<^ z&ytl7z|;D$<J%)a6n)pUO<vJTpt@a0=Q!Z}3GM)rpi)*gVGMR3e)N&X#FVOPE6cdJ ztWwTfc&;uDa7~d$k&j5aloLwD{tQcQqnwB*f+v7g0iKSEqP?E+r7OxpW8$^t=Duo7 zzh{!y4=r~6qdq*|=!<cGUQqzPJ(Bs6Dvanj2vaU*DT0krKq4HD2+1_^Txn=mbgMXW zOEE!9oH0>YQ-y&bx~a(fgcOBQd2~q`To(t|t@a)%(@Rx;wZ#x+A-8WanLjHR??KFI z92kj_Zw`$9a)E!kI#Erj(Q2<hNlg%;ngm_XJTFRiZTb~NYy(s!L1Eb154Ptx1>YBd zU`YzgvtF87zy^UCGAu_Dq^c-8d+isV`*yKX{n=0crek{NFTd27s{$zl+rvrP4pxQ) zoBoY5MA?=gmw{w(s}TqOlfae<KeqsrzQr?fzxnaW4)Fm%O$jZ<49+45KLb?|WF&wR zcd*hHb8B(%ScL8;siEiMgmU1pfgiT|MufQ@z1i%7s@iV#;0gjNPL}dc;EgPwM9Hsw z^q%iL|J<P8%qjfY2Ooa(`DXxqPd@O(xcs#~z2y6590smsa6%4GtwM1Tca+9SEOC}e z2I2~=$a5`~D}#Qt4EgZ!e^a0Q*6T0+#dA-6_Ti7+J?cw=KjJWK;C=#e<nC@8ufO){ z+}zy4!i?{kQ4p5ubMTI%-Y!X|WEz}0bN9~H=JVhBR;5}ybN6YH=d!M7rNQ8p-R9M$ zX^~)JHwE$l=Yj&$Bk7_{$KX6knqwk#u*y%A=vIgG!sI>1WrGF<nfJpuE*s7Q!0+ET zG>XRt#y}GgCpdYj3$_PZPUI}m#io<<0$ex)OoHPbiVhNwa$RZUl>0{AjU|qCN?KDB zdZJ*H5*^WCdq}mnr>$k7f6d)nvrK0%kzZdU8&lCE4^^4s!u}(V35ACcQeY)HhUe(Z zq1%pQCyixyI8ti#^aRlx>D|HJRDMM)UlY_dgzUg=*yc%NShVe2lqz^=8JB7bFg+`Y zeel5qU^7L6vj<m=)7B}fTq;teDN2GWeT`#0+krpT1mRX1m@Z1#4)ONe7_~^eD~QpL z9n)--*kF)|aI=spnK9T~i86qV1QFqw1qQ|l=R9Mm(UP&$#8FnC0G!07xF+9V%=+w= zIGiGxkChup@56$Q;4I<Y1p*zNt6$w{m1O4dT?a;{n;vN3fx`*P=ak7>`KvEn7+D5L zyC<G}A_+s16E|;Mw=6qXsz3YG7X%3)n<!Rlu5B5^zO4^=QBey82e)YyL)Wth`oYtu z)m$Ejl=BKN;BCEfV=ja1s+>FC?_B@Z)6eG0|Luu;{s&_;nIzrpDFXDA<Mea5)(I=g zDD>1q9lYD9-voSRSOE|7Fj_oEE$m-3O#@i8z;X!jX<{b+H}e`TbM%H$0s9xE05L=y zvLM}(xQCm3$H`>5D7WmdzNQ~-2n_WuItr&Im&^SyR@RSM^#A*=9OE5l(0DBC<&>@> zVCa*D5%_(_Ra?CoGsxMl3bGK+JE%U9Gg&SOUAAY^K2<DBW?k4!Uk0V5|!k-|3H zezj^Z6aBT&>g^hdiHN?FBAL7M@uQ7>kBSQq97A}_hU+5FSoiGR$RELSrdf_=!~j)I z=RR@gS!%|=b7?n>Z!-J{Y*p{?8+4}}J0FHT!?UyyF+_lCa|kL5gEWf>3xb@r4oz8( zg9Qnkhmlp5B^nbFipA-PbBNtZx9fXGino)9aZ~op4gtX&f?yJ?0KtC1Amg{<r62&M zBr&tvJt2e3ah(a3^@+@gYZ?*+o<W#(2g!mo*bX@y%Rv_5GPK~uiwD*K;yOF`Fp>^u ztx%aU^<L~-VHmqfDvR8i0~4kVA0n=53}`@J;0)cMS-RWaz3)&>RTgc-8lyD})*DB_ zJOxSGS-mc3nroOZHg~3G7ba)+!}=cf+i=Ke(A(QstxwMi3>ycrny<a(ZO7AvV^i<q zB<heqaqn+fM(_ErzaUAUnVkEr5Y^HI&-U<LXaCZIBq?9~&tI6HnJiVOXjXP?!*>mS zJROz5b@7TM9y@xFWZ;A3v(}On8GdQ9+)UZ3t4D38o};d1+dM>MscB57;A&GsVCjxY z`B8lDf`)l>l+xd${O6zZ@K9Kyag=Sc%R1g?=kX6i2d*#nM|I23S#Hj8B|r%{h9*O7 zt|{F$CnAGTdHc>8!b8_dzDJ6RpD3h1$Xn;R=4EUBvVhvVZV=JjYM)^X^K%DJN#fzj z#iLsO1%w`t(g}Om^UTe_>!R4B7#esativP%I|stMA<P6+0anZq(PZK_oUkIwJEQKB z8ypa|VH`QI@Ht-aJWLh?-v+ybH32Io3VoUZj)<#cz$`^c!ZUz?oCjV?NV_`+C+2r5 zYJYDumBt~#qFY-O1hzVCein(bPI-%(rf4h|lOcte6kA~Ow`xRymgDSH4nKuStBaFJ zF+!%9$c%8{IHD6a%^#cFB>CoW?-4{Tp}5!H?WkHA<W{>!#K}<Raia?x_!!NEaaIUV zBT!^u$^h%lR^Jbt{qwWH-$2lTdvz?MIysM0jup6{_?N%g+1pf9$u@z7itsU5L33?8 z2;6e5-rd_Slp74kxt2cc?INsGKqb;XA;<oZqd+#}c(1K5o<95EG`Iiz%NJhUcjP4D zJ{ZR$d?EtgOCJe5KQTG^rT_eePyO0&fIaAgCh)A=nJ2glhVAeIj~i|ce6>)csI6r1 zLQItt*RbQct|!j&ZMZ^N&)Z27_y&okHi(6t5i#^g1qZlrvN-XBNoV;dyxq<n1yU77 zEJ!|Huw+SB`61XI@X0Xb!0Jp7|2U2U_6e7V#-m&DI>i>7(qN(zV@P~Q=8Suf{Fol6 zudjTrk_=S+X3n^(MJx8mIJYYkVr|<lD3$$%se306K2&ei#$}Od{O^-^)LeTcN%|C? z9+Cs|i^3#uV_ESd)Fas4Qnd%h;X9L#QH!F<I6g!Y%a!RrG5aT*t$TqCgZK447f2C~ zJA^>^h^*Umi1)zKIGY23afqNe8h8Fn#{~g2a3?pOo%;qO#y2{5G<&`%-WomsR!9w{ zLlVQFn%n}(Od{gBx+t@*F$R)vMQ$=1!(tNm9|raKR*WZo>xV#rNhk$X^3G3Jo2+<j zbNNBFzyPVkFO<d{C-3TD2253^d{4*os5w5tV}4VLhHDhlGz&^j5V@`GRvbsQN)cCG zhi;1KQVnPJ8-qO#cl(#a&<{M*F^7^`66HKtnlWhNC@3$gIb3SgYpqgLc2-CLceK)U z3o=tw=s3-?Lt{!(Dz5d7FnXik+1Oq0-}`}o8wQhUI)Ia!FBCf6;phM4kB{7OVsYs} zPGPf%1Mv?21+VYAGDWrX!e=So(Yqu|N*CKFEs8vy{<#8hCl$K8kCQRaur5P@M$A8d zGt>i?p>Ms^|1ZX6gPA2UFN=<*^+E4}?E$w0_G&p=Pp_Lk;GP=z97)Dtdo&x~5{d~6 zK1yJ0Y_8G}u6V==u1D{+UavUoM>qacF<hm>9un%Vd{<Onq-CWOOx=0sLyf71k{O@x zyCZAl7^EcEwelLvZF=6cphPsIo5lvmOL>*w8(k!*L5VFnqb0|h4T4ET<yem7c;6n$ zp<9sDU8-XxDN7RLJS31zaS#S79y5X|7Mc1o&)Pm7vFXPoiUT^$VlUXyqRe6>$JsyF z`l2=3%hk?0AxpE-EzpDY2`0%UIG4jBFzC_QOtXL(<0Oi1EfZj#<A5i|OfkKcZG&^T z(cg-);u%edVfg~Fy>{vO*S^+#^rJ^h^@={#-wtZ%{rHzRRQl#*hhq-y=nF2EOy zhp~{L!5H9>0M{hmte%;!4@b^Gw^b<wJF3*D!2xxfYp{N;QQIPVl2YP$4NL<p5Dc=r zw?1x%s}%~_-n|9q2Q(L+$AUB1;;C8%{x=PJm~i94r?F$T3za8#*LE(x`qdN(TdRM* z@6d0Uc*lY2w00|v`Cs|<fAzw*z7d6ylAkgLtt=7ccDMvAkd5LTO0JXM|4#9=-pMJN z?S=)NP_<-Trfnn^N#cmWHJsrxk<yaLZd=^I!O01?&)Rz!;nvpH7ryX?vuDq0nl?Q> zEsEmbHxcX|Q)2!L|Gu)a;`{#L!-q}NWIzw_{QIvJ6H-+MO5V+JLq*Wx;yRwv9!vx6 z1j*-lVn)9Mj&;Wn5XEeq0$K6%LRS&{vSJf58>C$1+FJYCjB#DCuBO3ug=T$eN#{Ro z3wOop9YSI8z)|vU{??>FebC2=RAE4oBqtU;cSb{R78_n<Pj`D?zk2mcdOw<9%%41a zf*$3V<Q~G`r+Y;b7O&!w$c%xUMYLL;W%#p*_%hFRop7E(7Dcn3XTiC}(2?yXgFf_9 za;>kLAq9X4UipAFKuJi@d`2AcZnKgT*KTfl)?jiX8R}Q*-05tF^DS|Rqbx!eG8Hq4 z$YAs%GF!R@fLT%-zRzSE`nS<C&Sn#eZzHSOQ;|iLr-YU7e0zIkpq2rXi;}_-WWyM? z;>f3HF6&vG2$V;7eJWqAOw13uyK(Gh{GUZxIUh|^5ny8)Ndgncf@#?^^NaBMgZ36f z<Dz;Z#z`o~a2Mosp)!?il5vfh17YC9=cQS0%&W6`gTz=25+svGIO3{G^zA{WB$?`i zLAmzm?7r_VUwf0J27zypln?|1hLcH(<JsW!-FJs!@}1|ubNr6OxSDdD{fpVRoWv}O zUr~wA2{r24@&ZUbtxj`<c_-J@FK!a^Dx4s5paBmpPA#~DmhST#Z9Anz@@*8Ke%BUR z^x4mT_Q3}q<T&n2U-}Y!(tGc{x6|oVDwT1@%y_`{i4!NDe){Rh9(xR){o_CWW81cW z<yU^?*=L_!U0pqS^5o5%H-RR>!N-mryK&<Nyi~DRbQ}lnfO~^Gk|YfV19<So7hk;V zuDiep|KJb)U~X>i7k=Rv-uHkINyU@p6@kYYvqPh7czMgqxvrGN6yP4qc(?W^5-Lh? zi(Zkj6n>y8BL+A-!v{Vs57w&2^^&_HhAp_RQLH=cV!!gMfp&<_?N=2^=CEH))5I}G zwmAZ}i09x^v>=EP5L;T}xkD(q7{+VM%l~I%#@7dSfCnkS<yp!L4<sZNA)jJQaMg~3 z{0LX^mU4NXWzA7R$s<MCvpe(f9vDn;4L7b2$U00%aJE+M^4frqn8XRmDJ@o5GKk?= zoN6C}>Q9p}2=e8I#i%<wKA&sLT&UY5MJ40C2T*<Z(}!;hnF8|_6XX+_nPmV-yoG+r z-z2+X>!s7bwatjK7i5uZ^-kS?WM-Ce+`6pZIqdiI#iA(f(+4dVPwHl~<`k4=3@ytn zRVEAN2?IB$z=QFCTC*&kw*g-^t0a#l0pzpH;ELNYjslwJ@cgzYYuKBl<Cy1Y&`M)) z{gkW~ZVy*XQhZF7^#ZSkfO_<HT30V$K632n>`X12Ih|GZ#AXmQ=9WHr=){7OCx*?} zqV#^yrKRd5mNUIwfQRqC`r7XHmZ|`FK!?A|M~)mchCR3lVW6OR=qKMq!E=RD_3G** z@D;H*)$9)H^<GKdEgeBfsz=d;xffI1dKB?maXL&z{pJdRT~|zeFC&D{R45d#UAs0r zI}4TuCIqMm<}n`9G@c1FE|7;~&YU?j8jZk^z~p}Umw$P4b8~rl8IE+b8<^ZEyG=|? zz*A2>_0&)O)K9@nojZ39%=jZ8`3S6%ot>S>AAcOq>8C&aX|U&C{Ka2<|1&>fX$N#7 zCVgXKr?r4^YJLbBFKfe_#Yhtt)+0~4Iiat}15x!-kq0T5TJ5rVy<o2t{7pppa19X| z`i5akXVBakx-^xOkMo(bunpaH48T1Ss~VbSiX0%C>ro8F2?l}Awf5c^U0J<y{;KPA zKk>^Sx$n_WSVmZzJnMPY6nRNt5G2isilXM*J$*QA*UP+PbexoqJXYXqN`AB7JCY!g z!1bv#ek0t!$d)*?;}tfBWP!(%fW0Uc=|o@>KO!<8kCT6W&tVw4RK1HNFTM8dKR@&2 zeuCyu=mFd%?s)G3-Qt{aW`|0WIwbtyKS4OLDMml`E$TGRcO!8yCL4#1#v2|eYb%be zmriL#AV)Xec<sdlr}j<Gf5NuZDBK=&T~RJcYFSn^-!rp4bV|`UID3IV^nFgv6@5<} zbhaf~Ox`wW6ks3Bl^`NOOR&{KWp>otO49%i0cEV@s-luNabm5G{bLZxxq=_qt2^iR zPu<0_LYCDD9u^PYW#W)w>H6eUv0R3gOk`cmV_f1)Mscq)@d!eXq{+X_SH9lbF6XMJ z;XggcQu0+>?;JXE2tE@ph>mTigzQ?hC|vc>U-fq`)vCuXtQU2M)T(72Q8)A%o~84} zHc~ZEB>I}l@-<fVeO<RX`)W6gQck6e2yt1Hg7=zP57+INe(9IK{N*q2+qVz6=&4hu zU{Qf-9Xxmt7$ZR9p+kqRT)EO{G{BL-F<`Wx`qZa#xg2;4u)0ScdF1%<<E>V!TrPvT z!XrRU#q9Rs4}W-mejYHeR4OejEY$0DfJFFrKu-Am+;h*3)8D=iTNha#7DJ3iW%$Y* z>%0YhG(aCkL^7i*LSL1Jj7s>d6gjEZezRa+FM8{2Iz$|Y07V@m2-8G45gzz}IQL1O zZX@)&fur?}xhQI8c#8)cgU%!fnIN`YXI+*XuG3t;`t6m==S0P)8FgZ|c=W{mN%AA5 z>WO^GANCxA^zigp4bQ|wctVK75#CIdClLT8E<q*elII<fg>Q&r+i(t&4A40`^nx)T zN)p78iNfJy87h5n+TFA0<&iik7<l&uyiXDXSVXZk?5nbLurm3qzOz-TnqCSD*TKyx zIFx$hq7FDWQHop6;VG~<_z7z;NeMm~>q=~X(cgq^a8z$RjD6g^JhQ;@{sadrhDcVg zZgWbh^nj8iHbt`VQNQ`jQ(8WM@Yr3W!3gv&$UjL|2>h+h>DdKbM&~;j`eoy+({aoL zUYo?INYO#yjP0;oU+|n^)*+5maz)oRU2DK`LK;Vf>Ks8Zo9#C?tqarPVOaoF1Yd;b z<AO%uc=6iR@3vd5<Hrx_{XU*Z!V01w1D1}9Q7t1*yfgXg<;vunBz@W(nZ|IfF?&bA ztGw5F{E5dIPBccyHLuF*C8cnVZQHhV?^<6@BO7GDl?sT$Iw51a5uO}w7%aQzq2rO` z0cYMe`PbHMcs~#kEb<u?28fMeY5o_YqoCGqr(fTed2iQyL3SH=Oaq&Q`z1VQ?|Z65 zJo7FL$HEU@93C0ZbpqHNXUSy@;UBeC2p{GhX$B)>xH9~T9~CyXj*fLu7~}8&N4g3( zRF%G@S_vh3sl<fs(%@p*x}=5M*hx_|@<t#AVqpmt@1rL^L>2HWfatIX*NgQ(LVndU zKS^?l@3|nV;)ss|R4AEO-u$1gU3g8+mtDJuv-e}+!6%-i=~K1(4$11RjVGg2<Aq3+ zWttUX6-GG3=lGr#gXqVNc(X)Y04zb0loCn8O8+12L8IAxjNyF{dQsqm9K!T0jyWpw zQ|Y-)4n)qrLa=MlM#!A587gUo2$$H1c%YISh1|?M_2M^v_sYwce(K+RsuvtFhd#w6 z809h(0t;kPfljypxe*F*vlco*R%VStmZ6s5;wGFf1GcA=cz*&g)6L>HT=rD9%^1dX zy-2mb`=w6v#-l&>n-uwkV{dapj^nkje({gsTFYty<Xad8No3=l2{>g@^2En}MwZ3) z?usCaVHjsBoqWf_#Py=S$BQb($eWw%U>|qgeShe?-R1^(_B4%2M)8rrM0yxme&p5a z2jC<QJDaQ^;9bGMS5$3vZRhf(%ct%-S)Z8V1!de`)pO0jvq8hdAF@0z<z7a_pZfNX z4Eqo8q8rCSu?q0pG)F<MR9A8<f%hj2J@WSQYn_R1LTa=dF=d@p1d*>&qxtG8$+@G> z3>j>yWgk(bzO6>o&&Y++vsc^O!&JfLG#H;5<WVS2-%Us1H1+#^?8`E3HXe5UcN7`C zHTZg*-u-vh69GcL`$2fqe>~`oE0W*g2xube_ZnSmJ`Ax#Vc0;E`YJb+g%Qg|zMQlD zqBLBc)z6oL8$!}Wf{5ok+k=p4B)Jb$^~c%T!(fo$*{spPvj#En38vr-=S=UlZu4bH zSt=Hkzzc}<imGmKQcKO5dpoYE#QP3EG%<Zx(GIiR;-ISxI?t3QU)D;e33`blu_3wk z(044bQx=!gWqU?Ic~e;aY`I)vX)+8veH6$_UDCG6Ryzpu9E*Dj!J@$|jiQ1m6!~N} zAMY6C#Wttn&BA!y5Ka_5o)!X-gFx~m*)gr=o^tfA2Ls>OJonxC<C@7$5we4~9DvrL zfJwPxJk26GAgwO77N-#zQ7GH}BjRyrG|R2QoR2^fo+*mP5mfMa?pquEaCpL!b|<iV zqEbZ3Y!KjCxp<03lH76fq$K4?6u8C?qI0>*9Bz4pXESktN4C{hG&PA61`Hl2j3=2L zrqMY0GxM-CLn}Gu(wkRadht8p!WxZ<d`{$e-uFD3lQ!E{L9lokQH;QmGQgZ=3^E;? zz>DCFHcpjfQy=ynFA_w>u|_y}h66dcW=H@M$qJob^XkpgvEz?(;?sf+eD$#?-T{T6 z7V3d}foH#nP>Uj`TI;2iF8Hamq8NHKVW47Fi7VuKV{#LOV1N6VGn`JTDPH;(%Q)H; z5l7EoTz=$wORK0lt_;W+MSuiw0xa_0BQOK#_r0>T|IXV#tO4o!cmrd8M=&;tslDc` zPpSoVpeRFy8H%ivNP@@agMp*2UzzbPRD$aiZ6jVoA&T_9h(AOu{5n1PK~k*8czUbv z+s)8-vXP9er183LUVa^<+9w3D(jP{n!HdUEtWfMOn7nK3t293H!H>^Q%{?rucUfj) z4E;16NE+h#vj|-jq*dEIX4*qw05smh%C_I4nB}EHK5zQT=3cj=5!R@aL|zQw7^*0$ z<{MWesns16DC9>VV@N8FLRR3Si1LD9zv|7a)bdE$7=aE&WzM5;hbbT$EWjY{#))EM zXjdx774_LGZ*EPTrT}Y*0Eb;tB2|;J5?9HT4hWZxC4tBpWQ$C*nh6G{r-7wqyYks4 zVTz?7ri)n&X3S=@hHJ3eQ8C8^t<6rmb>e{!@#4&&H^`SJFdymTuBW>3|8V!-L6)6Y ze%N<&zW3di`@PO_x+f0?GXMs_B9H`0fN4o_qqK6Ztdgr_yJS~6tgB@I;h>W3lI2wP zt}M%It+g_>+Ff$VWdZ|0U^s(`nAB-HcfTBN&iDF!uK|hy<t-K0RR&+7hMb4S>-+9K z=lp)Z^PMo%RUxNK_$vptR;<w@+Oo6x&~;2%)m2U91lhIm255}VaRiZO#P2ee#hvMg z2c5~8xn`@mw0wH3Uh6h?uuW5pqF1YEK*vKsYWT{6S{xO=SPaVo*s_8uDTO%1Q}m-a zQ6vGvgl!B!4YC}Ir;H@AAj#W1hu44jLxf~qe_?j^P%D3{cc^9Ab5zhI$;ai1>tJ8@ z;j$=xEFk(B`+8CGy5VG)78XjTOg`+pdqVGYYMhGWLaxrmuH4wUP&@IE!5toJ<JIBf z@cA8MQW6}F29qF0vKs|R{D8#Fhqx5xgR1SqjLRt<t+b;^Hbsygso4o57zbn4+XZ(u z7w!VHLb8OsBpM#Z$^~Niudw5v&KNF?klSrWqcQ0W$3VnQ0TT!wWy=2E&iu;LL`r`5 zyI+}}J~=)$)ogyhoPWkJrsAkZvC`6+k3}wFbj=8*S|LX>I+&<ykx4kk32(c@6Ns74 zQYXPiz{{cvEDLASL4!Hns+5SdKWZDtGr17q#o01K5A?#J?VKVgj-`%wC*V5KBnoj> z1-F-m^J>)h^kKjNtz>A@!Q+H5)Fh)s2gCZVTbo?CxWBpAc=S-6A2%(M;^IOyC8fof z2vS@R3L!cLRD5qsRr+2bDE2?Ryo?w*ADM-?hC8E<OVtokv*Tm>Fl7|Z-CVmTYJ6?t zqGjO5Zk7`~(4^f~r#paaxp8%~TA#*+W3gYTPPf{vOP4P1?`(8C-87?Eo>SmC*$#+P z#~d!6IC1X61<M@bG82mJ_RR0S{;hKt&VBTij|5&oQH)lo^;&zCu^F1Cc;qD1s0WuI zWkm;9i~^s*E8ioA<$T9-t%fY?C(oR7Y&)yyqxJDP{NWkfG(*x{rBbg{YpSM=jph5z z%Z0I~UU?%N2>ZspjoaVkD7D!X*m&d0%BjiPG=(N__x&7`zc_uE(>9KJiAp}}98U6z zF6cyTw{dk{{o_Z6wQBWsPG(A_?yJQwzq@wf#`Y7#h|>g%IKEbt{Nf+h(^OchHNi35 zsKAD;d~~&FJ<|Ohny^Pn7XlPs3@knOR5J4^vi2(CD9iGK&em~zD4uJ=vN*MtN?`Rw z)}h#IlG3M{b32c3TZWM)CPOdpZ+==4E@xy&vcn|q+5@F!+EGGPig}u0Y_p3GjuSN` z^MaZQ@}c9+E4h-S=y-+*LcVK_*b&~*Bk%&nFhLZ8nTv`7$`Bzj30GL*dkk|nA*M*u z1gkpU_dQC-XYgl~G9vBO1!v%^4KvXhkEBJ2w1OxD6j1OZB4e3Uxq4Ah|E1sCoqLMx z4rMOw1*9XS`p6!R+XGWjhUDmg`?v)N4{Gy9bW~2U`(^l05qCU|=KPL0>U-xF48sMT zb>A6GuPoEdLKH;%y+F2`3JVIY?uU50HT)k<l@}MMA&BsjK1wfzD`zf1pxD{op=cuT zJh*0pq=S4eUnu$>CcD5MA3WOFSl<8_l4LdXKpFHn*UJ^FwW$*jdHbD%(Dx~ZgP+&) z6+Do|=mLF>Bj62L62;(hAe7*lf(P=zJQ)_@b5|ygQW8RnsJ;DzALjJpbHDUL;11Hb zjp*~8!?Zm4jW+R5|H<_M%guz5JyD+8weANGe)l)>|9O7=mrv4fPLzJYN={(qd2`th z@+p^Ogc+JK$(N8&<|r4*Ck}S`T;ZKU^#JbfnG-)8FCM=A=;@u|xGdS+Xcp!#z7w(> zEr3lOu1=<#`D9%PJBVYDKqJqKE#Rdmi0R)*i!Ubf8IebRkaV~2LtLbBvR6tHG7MQN zB{^o8q>lx8M^d*5x;>uc-ul7of+9Wj+$(X24t92C=4Ktgfv2K~3Lbz>(M{81h=>Ln z*y-X!Z2~cTlqO3__>Poo%cGKxAn?rL(03gWUZcI7cwu!AC5{_Z>Qkd>qIjaT=Oj^5 zr!=8dZS3z(dWoCUb$p)2@B~GHd-J>iy2y`+9OLF_^2n0~lQ><0OXCBKmJu(AF+gi( z82$Pa&-{9AytB9dZ3UeU64hjzfYP~moB%CK;KM6EQ#mBL$e@94;)S{()KW5GP&8@; z#z`6iD?^+hO^-1UpBkogr6dFocaM%5r>}g1KqW7-!6b>;!P_X(WOjBM2=e6Qgrcag zfA8k$GbgLHvZjj3@uqHqJbUi+=(9+?sEnqM)5V@=Yg)e58LmEBonKg3SeymEZCe(@ z369mJKqYEL_-dYO2|Sl(7}NGUuE4q?6_Xs!T>)VM<{&D%R-A+=v%B-S-^EFOmSw{r z;CMk+iVq&#UtfE4>8UGO8p3l30u?1Yg0zt!#fcrfVuPW0j+0pk+SEZJ9a`>q{r=qa zRa`>1H|6vfNuiifeL4%`kk8nfAm~{N!XYc>*p@N&rK=x%X64bDr5g}7^Tos0u6+5< z+WA}C=Z7Q@kob%5g#CffT>szBjP2tb0*&iqQl}d;W2pG)toTx_UP|G9#mMPxQ~3%W zn*~7<Z`k6a0K(*uWe@yt)9}{RTvJt~D4ceC=P5LC>Ll$rF)w_LR(v9PRn|0u!fRIm zQo_LX9J8uY02W~sf_G6Ioo2MC<VGW6Uqt9%*v7i&f^O;K87(LUwu=kR2r^%)ZmmDM z`PQ44o_|RIR~ih4y)MJa#d6u-Unx}pDE6+ubL;Gd^Y!tGhY#+nvf__cP%tDRh-^+m zqQeeTsS{ES+f<l<Oaq3&Ef;C(gS?8<aZx^Z<E?)<Yz*cvt0wn!oCX%zju>A_iWEK& z1Q&}^l#qB(%;=;p;}{m8*iVT7_s5MYTJRD7s8%K$&5Md5PO*gI-sl^R<qM0Ne$Fyd zR+MW(M8sj75*da;pvP{ZT=>e@uRnOWJvKfD+zur^Ni*4qcOTDCeJ|VhUbRyu3IfB+ z8yoM)l63LX(}T{QgD0HxK@gHSqk~6UP&8eiIx+0Gh&TvRpz^@y1Gu2$b_eWip=<OS z0ES7NeDPO*9k&{i6#Pm-Qo@*c{q=7<wgmvM>ng_zJp+{bT_yh(Cq#ZHo^j~Eep&h6 zqaKkmmUD1=_QDerrSZZaBh-m)zOi-6OXdK%)9?T|L`dZcwnz~vs2IF_g325}+3g$f zo8DM|x;-dAcj`?}?!!GjxBT`*>ENwL&+HBBAJEkM;gy9S*!<CK+KtVvGs_HWfkF#W z?mQZQInF&BOLMqY%<abJIu_`Z2xO2GNSd8+jTX<h7;az9ZL?ydKd}2pg<Sa3pfw%E zV~A2HD%ABLr)hd|9#P*)B00(ONn~2X4tO9wUm!>yVlWA@Sn3-tqR6@F8W1pZXvaR6 zuO?}5H3>h?;8jsL816O<u#9R+hv)BDLof6mynB-sBy*VfUaZK&^^GG?U(Y@ll1#H+ zp9ik^=6Amhn#WRg&od7wcID*R>9O(MgTspG(1LQ%N$;i_N2UcKo>lDFGw`Y+ip`Ld zrKD+4jb>aOwsM7_IlxTKM@B%|6k>3d30{vwk{B36o~W_p1o(;Vuf=G{h+>>XL`ab= zjb|W5@2@z92$OEV^W`sRJb&(~Qw%d5CsaPCn7zX|8`Ypi$!OUj0eIYM8|6xAV`Fc! zb_&=aflZFgQ1&y&T8SizoLu<RKl-D7zx&E3J{98=BfMP{Xf5C;2to*$oue(FuW`m) zyLRLB=~G&<L{oi^Oh#L_vQga({`@F(L*HRphGFERMr&`!SYA0XG@LuPZvl|bFD#xq zbB3Yye#>CFH`UT30`Y059p7I)L@$o7#DC)o-5WmngLRqQ-u1Js+uI$-K=bvFiMd*A zY$k3@(1nDrVu=@fQG~lJqc|#P(oQ#M8L7%=h##!=XF6AlSC-zMoO}d?qfk8j^wWQO zd-dW6^b;O$hWL=K%l^@X;vc;xD~wY060?v@{CccClc?uYMgoQx_qHg!M;@4`L^C|g zIzjMemd$IqK;-^h%(W2m(y(OpPLuJ>c)k|IIf5n_+Khr$Mld9!@`4gXFL2Ziig{o( z$Niv9l3*gls7jHNWnEHomKVoHLPowhXpSa=v5~L%R!PY>;(jJ7mE*aRBpPybM5m_N zw@a0=r(XD!z-R=rXttFSdx{LAH4v3N!^gTo%hF;-gm^=Ptb?P{6ydtAo|A6edhn0` z*>@QteDUSyYg6a?ebY&Zj*GE<UTnDuh1c#zHpQG+KKG0ye{HN<XxlMGPy&+!c}Fop z7)LA)G1*8S5`H`oDJF|J3K2OiAI5e@WdbS&qMxu1cqty_5{_m%A>h2!lP^CJ#Fivq zv@O0^mGR0^Jc3EYRb!*`cW{PoyZtx*jnA*GZ|-az<nlG!9Jm%1Z@~C|{Ky&zq+To! z2If0Azu#;$E<N>hZM@b#+RpHCIIjGZmAojaj@eJ*fTq<4_wMiSY%MIDsPQbosOLsB zGs--}m5qjv!smnb()0P9-J|cl{>@5t?A*nt%HTuw&eZfIpd~}7p}U$;-&A!IfIe8e z<sKQ4_F0ObSlwM;n$PR?J^o%{eD31}CkYAJY;7KP`WH^;e4lfIGRv2V#KDOxoZO@! z%5sRd9p`Z)M3h8~!a-gd+M)QhcRzN%KXz&58o`FZ?a!b3!B6ier14~63aojw;p0R0 zf@@Y)^{2uImAU!)N;Lj&`{hr@>_q5vLaRZhF3W<15NJl%^n%%c>(;fu_xREG0{2#J zs>d)x$DFhJm#yJbL3k!3swn}C(M$1+Bu34bB_&VOTohXNFl3p|#{ECRGoW*eVFUzK z&K1U#ToIUO82GN)Q}|34K$Zk}IwYCU+!!zLG<RE&p3gGPHX5$g&nt`|a7iL0iO4ft zQ4bX9L9u#E)$eQCfES{O;F=9}d)<*0I!k2Ji7VBrkE?hREtiX<pj^rQ>6d?a_4;ZU zL?EYDE?pW7Ef)ACnGSqP5eSt9fkqQ34g3h9@iUjpaxUx*crQ}lxoJ5z%Tp?u$-Oq+ z>(IuK>Ge>S@SScvrdIAh0@F3Kl=n^Mpg|L)U|U3|jSEoqJe#j*zyK4QU086n{At(v zD9I3_B$<O&Habm#FOL0hw0WBoaEH4tQ<HVo^+H91$b!eEr3ttV^S&Eq@O1h^ckkfn zU~l)ump?K;KizL1VQ|CWH$OBTy;y^fZ6EE7_Mc^AwHmOQ^|e*kbqd9jEX#rK9hZh4 zC;eHLj^j9u0}zuznAFE7i>0FP3`(V35;MLPIrjI5(O0Enz<F_S@47Qk-0~L%ecAPb zb}SW&tRx<oL*eX&*S5FU^^!I<S?=sV9GhGw#Hl0+0cPp<YgY06e3lrmm9`u9{Win% z9Pxgs5rkTbNw#}a2dxR6a}=e65cdK6jUT;!ar&4@#a3S92si0JCTZMPM)6vf2`q<) z3Hsg-w$~mMO6`8T(QAdgV5P}#Sc9{+;W4~Q^IjYcz%odJKj``-!&Qm^6r^o-@n(XQ z(u?Aax9<=8{o2I;U7fxns<RLQ;yAK~UDq}MUcmBFM1hHt6bk}|#+#^FB3(h~jh*%X zlH)!tsb@%v3j!9fMButXv_r95g4RStfHJM$tG0%@wyhAHZ104~?gk;<X|5Z?-s197 zvvJhzw)6RXmd37o`lBCv=ETY@PbCy5wc5Q=_7u?+vV&~b;PjG@aLqS3gCB;~_TB=Y zyDKxC6^-=_-xwmJN7}v%FmAgc{He&e(H4~6SiWh--R(W|sG%OTd%7+wM@$eT49!0G zbm4Gw_0PWY)}>#1;gu&9gxXo~QWz1XqMD>>=)2%oqcPY71~1&9lIFA`*l4fY2Knu} z9r&4Ib)s0E>35Gj&j#PaY7KW73U}__Vi@+~<!8p~b+dm2cQwl>UJ#m{{>^u86pFj& z&YcqhlM*7viJb84*^{CyudhCA9vxo1^klhI3IoscoKXcFildOh6Qu|M!<RquQO`Av z?mj@4m*vT<tEq2onfD;litS#!x3y!{iSbVt<<fq?7jePm#g4>v?cHv_hubx#rl%qB zwVFqEs?$mp_1dy5#keFtrtpeVEWkB2=X>6I7eDsnvX~#ubD)W&p!B=G{%5y7d1n0n z<>l+Y_)Wd0X&Ai&O{+7U82BMgkqiS5W~X_0+jCd%-?|P&@e6<b3yza-9S*AX%a!rh zl9cW>SFycP40w(pD{+iAws#c(3z5Q;KM7pFpQdzaEdTEHf57v*cum*BZwu11*02$U z9%f&-4}fGD)^a07FG`}6;Jtco6fnN~=H2VRyL$h@b07W8`KSKdUUQdacj9!jJ6zA_ zog4_YpxW%`T9#`0B16X|*&HwSL^giB8l^}KLd|#cl}f=d%~81$nagQlzQv-((1=R? z`(5GoZX|Q>(Q+>$XY_a}X9W-nX!dxN8iQyn_!7$xGU4T|7AvxeEb@nksj5<<92u6Y zN>Ungy3V*+gNija(t1IUpkf|LVG^M%8n0IEX!r;J>z{cIg^<Jl^zSl)RJeclx$(*I zoSp-Fi@aVGC27XuloJA{r2x4lwJ_{8;?QAO0iuNOxga2NMPLV#<Cs7k@XTPGjT8u4 zynpZR<ivPwVg@|f8nhjIfOibvTYY%{?$U|nlPgO}>>u}Agh9-(RK8U4eDuz>tB3o0 z)!O*E^XD~H1a&*?^>`^~g=C}MujP4(Bf9M)LCOn4ISy_rg=-8K`9{DsHtmkRot?9! zI+H=fo{-ADrHLIB*o|GyBFB5%YZ?1Qq551L+edqM=jW%Y)oKt11fnqMF-(%=fd+Ft zRng`9yMrI>(5k>7^Z_o0S8=6`=_q4zi}*RqHUEG90yg3}4uR{o_kHiNqK*4rV`t;) z&iWmiwNXYhT;bG(3!?OtlDkaNsMm~nnN@R&(Qk2rOaiOOGT(Ot&je}*5jVt%fsCSY zW?PgsnqlK;{VV_1zX{fT<>h||5ig*ugNvc@j0wf^(P76Z<rG~NQ3^rX!tL<lSeiDk ze*5osTKiAE@Ui*DCrIic!S<qnTHlg+v1SJOfhXbFM66lW%yPcR@m-uRj4PgfSx^oT zwbMHIh#%HC){mkfNm8B{ab0d4QHkfp<n?wQF5pL7sGNvgD#r7QY5A!j$)hzX8BVFH z_XPPHUGr=&o}>i}ZWcpIQQ{%Yy&2bKJ8cR+WUM4U-gKiRUR>ckH!FzJU<g1MgeeHq z(Aq!PdKA|y=CA&GerJ2-U;N?Cr=B^XX?gG{K@fnH&do2k+pYDrM|w`5Upyhna<{R? za_n)LGY}J?3^cD6O7-`G=AdPp{X%65_<Z0Feb0=dRLND~jt8EDxAU4dE|yqW5(PF0 z!V%#d<r8t?U&?YKh^fQ<{jJBF`+M7P4dAY4&tC`=VmRp13B=!oV&Jz^)(~mA+iLk8 z67k_)i|y^SY-NWyo5*>DS4Jq4wL!J87k9~>_Cym=HF>s7aC_}PG@`&6oS&Wf<kXyM z42H)&zCbW+xH7|2@~SMd0C!)%=ky~*qLb|Z%|0{Jm+236iOgU4VpujcV@+<Y-u<87 zy>&;+>8{;}n-)j>(=UHilujtxNs5`Wjkwnyj9R~m(J2BUYb6jWw$aS82&>~HjqwQ< z#qx^u-bn)j9nkM|6-_Qy=imIs>rXt>6J-E9N|F^oU7%7iVJn=Wuwmr7Ktour5QVgF zo0?9ayL{n~e*ZDcnUt^=c*LN!*mZQ1P!D@#K@BS6k*@S>)geMQidAQ@7zDFPGLFaz z&%2r*dsF1s2mOLi_E<dm%g20-;ZO>AoNe1m7-#&b(+?N(r-UDqQ9`7ci)QKj0~#m> zxY~HJTxPgIW2=Ij82Qvo@V+#b(t@ziZ@bMSgCw}EE&K6qCr*NaQST3YS;0l*48=a& zXkNG=KmY8M$Lu__Sjdu4634#yYoFcTezdo{b98vPeCo``#$#}ye4)Iv^>`~yr{@-; zzy;7a9;-qk67OCkX;mx0g>{-cAg5KmB1k!g<+`o?G{y(_BoPccd%URU3gz|H)y<8E zpLp$a1jLazp;`XNy0_nJfg*{tSWv3fryu3jM-LuA+;QCC`>%if{Dt$9B7*n?9uOsE zj{hDfemCsWbbE_+j16z5#V*p4NTj?b(<{>lC^;JJ6!)FFNjfE3DpQq&pPyYQ^6LMA zP<PO<hkgCH(EK<Iz;g%s1EIF4XdCUM<#3vqW`9A;0ip30{b9_4{_8XovJ^cK)j!tq zcCYOhip=u47bm7qN$LvAFZnhbgGE>af+7@Pbesro76l%z2m=Re?|?EHX?xsdE6J)L z;Z_g48DiLldz~bhhfq{;YVKnD%%gtyW_{*Y@EqO@V8R6~rOC8jlERoxQ$CISEN*bz zz94OLQl}=+^UJe`TSsbTVYM+mbU2CgE6QM@I3UQwUZ+W=a_lV`!-+JW%21i+S(b6) z_%LuMl3+>Ex5>jfip`JC*l<b;uAGW3C*zwo!;r~w|1EBDBD2L}JjR;|g0Mh>OactY zO)W&|`Ks$oO8UAkIxSD8Q#=X@ky(=ZNz^QtxHzRnh5|ixa(O%mBZf^WQZ}7HWZ9CY zPE7-@#$D4tv$#m3`@QalE?z0-PmPb~0Gutu){Eu!^>u+KMV`3w?6ZIvf&grdDc2Xs zQLo5x9~3^gz@2+$mWIRLKF4dhLUmMs!}_rYQV@Vkpdn@ql1RZT99+NGY0!8^RDzSA zqt@QhP82+Cr!v0idyZ@MfQg(vvvT(AX<*>juifZ&I@hk<c<zN4DT0k`D)YXn=D*E2 zuD3fdJgSwR8>rK)$T1l=R<Ua39b|^P&AD!xi;0dxC{_I>L<=ZwJ6_$fK3=H*OIiQp zUhCH=sesTBCk;kDbE3?%K?aDpdIT|7`pMzSAN<1m5q_}+AuhRQ6UUmUjE%qg#nbhP z=LO|V;4{7#TZ0~$oF5U21_VNmlgM+-z_$a>$`$H(^O2~6d9b_+wDY(<%CU!@ZGz;( zhYG+yAf6Lx6cCg1zd7vOUVCtR`RrQYuDI4NJQSLiaQCN|WO0jO4u#yVAn%XX11i1# zm>XBmKSO=#AN>g+<lN;-==JNRBZln*nzfpFUHTY}W`~2ZIN@kEATwY<5y4Bmq{y0% z$Y&AtkG1^3bjH)v02_@xC-R0-#;zJNZiXjuDggdDQ3z{lf+80mms0{YYGd_%2L~5G z3>p~Pgru)lbhBxz*osEGcvDb(S(uQ)c$ow7Ln??Q1BxW^uuVj$c_KxTH8dvbTtLL; zAj?yp=^rw5S)fay-vEfBX-bk<*Xqnn)!-MVNjx)MOA?&(#QBvpjYqIN!Y<tQNU?Gd zffQtbn27?wM+P)R%U4)eioHRKSqKO%A&$H_!VA*iPbDXkn2X|FXel1WMU74tkJo#q zAQO@-vrGdX9Ju7{>=Yx&G|g*L$+Mb){YRR1havQ%!?A%Ydh{eJ6<M0k(+N#)M&^MR z*S4KSFM;1{B#d6xpJOS`j}2VI#~5L9e$W``W8cv9ubIOy@{*io&hhy=NiqT(t~Qg7 z$EsqAvcC`{vLNO^;ILkTH>u<Ivkw{U;oAHtc)$7O`0Nm6e4PABn%E~!bG^1}9`qQF zkY$zT^tGKMO_Aj^w1zDRpQ9p7ilQ0Mv%v}V()jV9gur*q0r)4D6EsO5_dp_&5+#)r zWtw8_Ak65TJG8gfzB)O#Omo#ZOp~BbGux81CrLYq0b(h*PO&qXZ`<m?lL2*S#eGSl z1X-=+8weesNU-}Sqi}}F>M@~YRLZd-9rf`5a6y)H3gB^un<^};Clu?9u0OEM6NqJe z*MP6i(OJ{sw+&8ZLSi(%7tBIpGcI$@m}GbX@015c3PQ{G;mZP}X4%N~swge!xg+_g z=-4zzM%ifZCmyEeQ+5y`5m6yToD}bf812?evIs&GNt45VNXi6C!EyYlY2=yJAYu_| zMIoNUKPo^+v1^TH10&nAlQiX|f@=*OvyErK93QFS!kpC0LY859hO)z~-w%L2cy>F9 zONv(7>f2mqs{)ha+E&tWT@kb(%lclB9uKa-K$wkI!2qU=Dt_<=m{DRZqX~+QvIxZe zQmyLShyL)7)M7&w-nGr#>b+_!Q^ew|q>xsiOt8^-X$_};lBq{VEy2^~Vqa9orPCTA zC&-m~&Vx{qL>%vi-m_M>rxdTnq3rvgWd#nNw<1tmt>E5X=p$Lg4W8*==s&n!nf%Fq zLL3SidT0iB_WBHUTp|47dBLM#h^MBM<9S>E3ht9k&C`K{4)=C|PwJ%-=neR4vF8?K zN)r+kTHv>%17)xcQPpe5k`Fx49CUoo9v$&fKzAq__h~yJ%H?YUkJm6JL9jM>=P2qe zFRqL|zSlfhUpiyj!=5NSkmX$xCse2~D0Z6lj-hs4IU^Wd^k(zTV$M`#XX)I`_WJ&b zGsP@^+O?MvnPUa8V>1idftUFq8>W<=%gYiEm*KnJGzlpHKCXn4&$044OFuTuGJ}UW zN{A*j%30J1l_zu|yVK&0klHswJ&#ykIKCmryO1%Y0ILfEiiJ1Tql1N9W$WV7;L&z9 zVj-}w2?}Btpgg2y!o|bm0R=@(L^KQTEzp@9ll_#610w~kl~E+e_!7h-G-ntTOS6Cm zSr%s*HJXOXjyeVzMHPnw10R5iV(77gD8V(10w>O=G&?4k<9wNS+{}m1r74yb9kUN& zA%t+oDxeCIaL5S~$FWD2$@6#uBH-yUP~aX568Fwi?}10kQ9?!vUg9;ntGw@uVUlut zvewK<v$LHDz^e7(`SU{C7B<^*nCYjc+#<IX+it)6oFkVM=`hOVfY(cLVT_-|!!^uk z=q9qj<x~crN0V$8eGbKmQd~pbw><B8MM<0>T|Knh!1p<d!(+GpVi@!zp{#d)!U=g0 z5LxoYZ#Ta6z(XR1h`$tcBGA8@Df|Da6C&ir|Ha1&zw=Dh^WNKO1rG;IA@CeQQt-e% z2Ix@W*nN11M42wL5I{#}&9S^JDY@ez0Op_#)CgE82o=1^8=qXIV4edz?hLF-sR)e6 zHrk$ROPop)q8khXG@dKg)*kJz-TCj9&d7+g(^zkJ7urLu<0xLl%A7x*8){-d@DH-M zn^TGiEf*{H!`rW~-fb+OKTGq4BsmJfswqa(D?v)FKHe+qN*39}ZZ`shrUB1*lB5p~ zoA2C`Ca0ID#$9_82(#e9*CA<v$<7q9#{h7ROGy+9D(yim$=**CW7U-Mh>#>HF->RC zwkE2bySwrIH;OM^5P+HYIzscN!3i{#kky*9dv7p5CwU(6;GQ)(rju;aXd3g?5+f;l z?Y5>7CuUW{CC2LkLTpCPDLI}Oa-naV!v^q5UdjiqN#ibE^tG>kBZ!HdzIpM&83=Wq zp;IsG6rNBF6gV2M6hNu6D410g6!z1^2N~$PUa#LP3xc1)cPq(?j9a}B(QY=@);3O^ zS_%V$Vd(_B;(N80$90Qv3;o13dz)FbqX_M4-KS{J4?@plC?oKO)&~38gAVv}v{FdU zPVK$B+H2V{RoaM>kA7`K(~vhgUMDzK;lv+2Fu#wkf98c#&0+Ay?aj$*QIWX)W;Z7* zwNl03ykPtMGiTOhNu|)GN6qb)O(-IVZ*%t3ZU968Q5<dr4ZTqtDe{4#&{0V~{0S$d zKqMI9o6QKR65@Vtufc<IVuaTY&<OKhYSb1=;C30}cqjU3ln`EZko+ZhD11^7y>a0G z4leR1j%yJ|b4uvryaoKN+uR<N=3%Y|7lD^UQv7b$DHe;ml5=efye^J?@LP&xWL1}x zJTO&JEdtcwmFw|9WG#twJ#&aCk)q3CM5u^ekq33DFU;kB_|{sdwLcNQyx$btwqpAN zM@L1;Dr;s@@6pV_wfvr6ps1I+jX9P-S)2T>V}HpU`T`%Bg8|?JFDev+#~+b_GgA?G zJcBAoag`PX2vB9AUMMwN57!>uNwQ0m;{`=_6O`u#(sOK*;t(SSfG}w?E|^u$6a+pd zgweit;E}+hS(-jd!mFOq=0s&`S}v74nxiL)a_v4HM?(TdF(SA3yOXuj(Yv@B;p8-U zWX!S1wv(F=k5pNeSYvPX2%=WKUg#O!fBHXs<LpZK*Z$gk=-3z+@g7So^nmorxeAbX zfk|%NzW1kp_Ijt)(epWu{MGW@lI6v#H#bF|&8doOnG^Ne?Tt+!aFb&ta|n8YY4wf@ zsxmV^9f!W0#WGKk6i$Q|N@e)fj^oBj8bv;YP`vsHH=vNCIX^0h&4Z(N5ZbP2W_c`Q znAmkfr<o$pr{janZ`CSi{;MCH*)z40kbGSx|K`H|fA){Q);7m$`Oe?@4~^N1u)Uug zb|VT!9U{wV95B!*j%ATYxD|%DdV2$GwzQmI-`k24KJ`xeC!Jj3+gt0od;2QOB}A5f z5KDsq!AMk)rBSTp!_l@i0kO5>p(Y1EsR?lwp3pPYaAPX{xo{AZ^$0yRmdy#oLo>bC z^&~1AMw!ZH0b+uT204y*u%Jk!vq8vG;HBx$>xhY;Xe9Gv*gNV`CWwCfK$cH{<3*td zRsqn)38JjzDVA&Zz*3{sA9fqVC=8BQ6B7g%h7qWLLDpzi!22J4$LKX_BB_^he#qmF z^rX+wk2!ItpdBI7M@W<P+Ss@za_m8;w%O&!<iSj>Q_=^V(8I08VczPUPNHd*2fd+X zBs|(cVDzV7JiGsR!*!bZ$}{kLz~;<;GYVb6Gg0JeMkGg0>H5*`?#|Zw#_4kxp1gcX z6mpZ38OglCGAB&8%CQN{^I(Xh)C4|?rznX|IX_?k1Z0H^1Cn9eAZk4Ot?l(U+KuSM zsoM1Omk=^8tR!caLOc(0z|o{tt^^}o?SV@$tTG%@0vC>HN?r{<^Smw!b&^tBjgS>Z zLe#(Z)vE$AckjXA-mTuni<;}(AenF#LxOuN9HS#BIpA^|>uayR_NjK`D3{M4HJU;N zh^u4SL8tF-9}GoN`sO=t4h-|jQ;VDXO~;Q+h+aH%dR{oSq$2qzR`f+-Sgur_{iT;6 zycS3yN<zf5G2X77rtTp2Oq3dP`P*8-17(#CdReo_26Pqxt0iM*D#?9LC|q&k!7ra> zmdE7(^JeeC#<`Q{tHSQ)iy!%ooz=hp@fZHi;lk8G&yjhSPx27VYvmkErLOCK@grwB zjy^wM7I3DT_QML8nZ#E^A87W2Lh;+w_OG~!pi-Dx|EyG!MJYPC<_~r%i%$g!$&iTf zj5IbZMWBBswSnOr`DsS{+)n5v1zH$WIG_xR3Ndhk#Udjz<lBeg?Ormev2hfAa!MKm z*^O@Upb?Y&&rN^51n(sIne+NMv~8m!Yb9AN^P+To(tuMOgEpJ^6$NM5aIq0hV<V;n zS<d6}XPC^Afp5W&Q4CMfDu7As7!<k7iF>lLN3dO7>FX6c!}`IXAj$mn{La0bcdis~ zJ-<AuNb7jIb*wqVg}|GN!a5@J6ay&irb!!Ym0`zt5o30k2sE?HanCdl8YJ>LP7<^{ zW}Y<LY_#v(x-F|pvvE|bO-#=(wOfbtbK|E@oer!w80MiQ7fdsasTgm&ruhu1ICp~E zkxPoQRT&Gqt%G6b0mJEgn|G7gy!hPm<{HRMix-77cG6fRVo~56#56eVoadHNrU;Ci zczZ^K7?ybJUAt$ck<%{cX;tAg>2cffJB@?~Oy$B)JZ}m_#8B?S%F7vD5M_!L<TMUB zUdf1*<wc+mVE>mcU%7tsuA0{^Yxvr$uW5zq{f(U`Pp_o7niC)bEsd-Be1Yd!&v&WR z4`ZTOs(H?!vHwWTkKs)caSUqSHhLU~H-R4R?^Y^hMi5y$KyQ2}Oi19Gl4Y=`P<E=z ziyf~^1dV+sqCIXrqy&Q23d+l*w#cwNtpYo1-P`xPfG}OLRC5w%`25SC2!`vmsVlcO z`;T|_b{a~(3cS)QsO<M{tu9X%UbwUrx_%HxWt|6B94Dd7k)tIOohUqQb+@(R)sLQe z^UF71>c=@vFiCWLe2D)i!Lw>HLya(cCst#XqKLr7BVR*-vUl4bbVL!R$RCl(pU(@4 z7<J7sk%*O&Ita*XhIhHH{OJzPOY=#5xk%O}PL~DB3@4@RfoY(hzr)y1QI!4EWdOC~ zMGd?N{-&44;HKEt5P%JE5AWFp&%=E=jO~Yll#@hxv|2g#ouLmVS)ZjS8SXg^6eBv| z_&rJ9p@kOiw2kuJ?o!84JGSD-ti<>=)|y(WCdusdLPT?hXH0tTL=;XWS)SoIM)Xk% zTsMR;DU9|gP&6NeD+??C$>}Gq?rwesK&d|SMbk*)AO%oc+jwxef7t7GSr$-7JaJ;V zR;x;~;yPyIaF3!nhB=2&Q`R1`-P1uVf*@j9P$PFKT1XO=rZ>&*>({??8-VL*?@%v^ z@VzFc^MG$BPoLt2DlbhAyAsL@L0G5B)zZX2w=8jJUZfQz4v~##MN^_c7ZhCV9`Zmk z61VF$d#U3GlhrbSm`J+CeC-RLd4TW$<(VjEwNXnu+|ztz;>WtGwb_MSv0T~O+F4v& z;(6AyTNmbZ)9goqTd2<^kvCiB<zfj(MlZEZJ1;A|2w#TlIPvj%UEdoG9K&6Q3C~OL z?5yFTRH&`B=-+)kEvt;cX}jHt=hPp5aegldf0I^<VYb_~({6w~W;j<ms|eF!)J5UI zHmU#YwXrugtT+w+gXi-r)z-T=-fr}j$*O$%!oU9qU;A#?7_7|Ez20zqT8IPQ4bzt2 zJF<6jX&s{%t`j8CvBn#9X;5tJxUVRPtc<<!`KO0(J$!cG7-P6VV!bR$AS?;EPlh0A zx-fM*8(+e)lHdr!EJ@oj5zn!6^v`DbGwg&!M*h6yFpIOc$=ph_e}30w*zDiC$i2Sd z{rPQ|;t9h}u5Tlar%sN=d;RcRTLC^)_S3%vC;Uky%<!QZRj$wDA({zZkkV;9hBqmi z0q09b`7}F7yQZ7ZX(}fIUv+E)E}dcFN%M|{M1>8U+u(bg)Idap60JX&#_1N2e4)Tn zQBkz2nprAzNO~BD{MpN=Hy&-e=5TiDKL&_n1rJ34RYQj2oiG#Sq9QAJqe~q4W+Mt| zO`pDf?e`wudAzt1FP!{hw<q4b@jZwf2YUw#i;I_@da6_|vJ53lV!zuObWK6hw0sTF zAVa+GF7x8svb5jdKQF6s7QKD#`~OqEJfUfYR%54e=!aoet_;pSJ*6n6LTOf#=K{Z6 z8k-0s8U7VP;jy=(kolILMtMoyal8(g4az{u8x<X=h)+%HDAlA~J$4W5{#r_^qB1Lp zqK6k-XPvgjP>9#|-C-|E`-QS<4cjSZq?wklg8u*k0qeuXI%#t5`~~>H*5L+C;bKX0 zM78>z2JXFdLkWv?ayT4-z5142QGskrqxEn8C`+Gp2L`UA4a4=-2jdfUnpIg!yxVra zo6Y`5FVznE;k6rHczE`U{42wu%nFK7oj=Rqhu*guVA8gA2zMRCBZ$e_Jeqw`Ly3|) z_et{36IVWg!sp|R9a`omo_#WlPG`g_C*D(4!*P_eOX_A<dC=aOkc=uf%Tscg`U#%5 zGn%(bkYUixl};k`Tf=UcFW&jobNd@x7v9}D)wGJ77*~isWgW_r<k_^K=?O&#f#bVY zu1v683`~kjernJYo;8#Xj06QtMrS{FVusw>3%7#N@Dhpo`&a3Mj)S5Uxdft#2b;JE z_-**pO^`q$n*3=H``51%MGhKT@lSD4tO>hED6+wP6}?)ljGM!5;0K%_$>4Xq7!QWD z)sjKM50CI9by6cTItlwcyG;>q5NIo3Jw&K%SvByzuB{AwAdy*~cP90IIo}t=4wigD z(Hvglr4zTW{*MoCy}Nj7k`o)juoMQSASzKxKW_9iRR+8E?7m~0B#Cef8v&G@k(Fv3 z#-`z=*<f;NE)33uVes@*Pt_*J;T9zj7Hr2fB1tI-iiSoznLO8sQ&*tJ5LzmXZ6RbU z`XEV%o|n6SyHTICW|qLI?1dBadifkDUP?mBF<IABfMI(;0WzDU($NDaQi#Th7WosL zw8k=)V=5@K@vhi#G=e*VSIDVp;Jc2~1wkFeUT6iQ5verCk&eG_cPWi8;PY{KH}(mT z$R0lX2iOk-hh{k395>ot3jYZn9)*uuae6FG(qOd9jig9ClbcNG5n+j4Bk&!5bi5t~ zLEyS9$L=*dMVTq;%CG$9Z$ShdwJD;D^0%(kN_W;Llhiw%_x{$)i?#ujwhOSGgae=9 za)oL!H-4<jAi%=MMxoysdV~=~F)8!w3Wxf=a+X+>Hb!JVPXkF5LU%<XcM-ZHVdcWj zC;5%;*pAg5#Dg(*qR5U@1O<<r#2)C=j4TLf=g9urwU0b8JAZNM#=`9D3o{SjUA^$A z_jKpTQ@L2?Jad1m7X=K6$tcr#Hu97khX*;WIDex26Hb`MsVs5JN^<A+5z4dZFYA~P zKBt=<tl@dl;C?^h+c93D_?PpGz^MA(x#Bd!Q&58Uoe*<Nd)S_tn==e|?a{-d!-M*G zeR66B3?hlcVZTYI;dE6AA}-5RA^|qP0g_LWwn=V)H=dv;L+_P)+dI8bNm5#6z1du+ ztPgWJ@I4D9k~5t1-I*krAn6i^l=11)YxlkfP7d@^)fXrxhX-J~E<EfU7bX56Op?)H zwKPr;D~P;UIC1t1S$0QO>h{n~vhKuq1&^5z!iVd-d4=s;VX071BoQok_pnD}mJ+j^ zL=(h+{SSVh;~)L)e|N4>w?{IZ`=yUhI#yh*FR|Ph#gsz7=2$gOEO>qt#)k~!fWeP; zed0q^e6C7z0BK|<y7mO8++w+IoX#NRj-nTqF$9U%N5g016bRlfCXQy`C!?)TEK3bq z-e!{O8ZR9m(M4e-fSl!p=y*^s&5<}U8&RRpu$<@G=)L~F<7_<1ut1*iM))WSctH}? zyk!gsJi4+w^t)vV*JR`MF9?n0bs%YBXcY>$)O%p{n+JDJ)ZY1>FO>i4fA0?Zy}$RH zr_L|P&3#WVlpyZIbBB1RXvGM3RCgpr=LKN7cu+Nt2cARtDVuGEQ8ft!MwSRX2sw^0 zlX6H->>IB#PC?DzA(=?a51$Z&?e^HNBW*;Ry{IuQoR%piKrV!+(ik{-c6Vz(<HZ{X zXSdqZrzRhrUc7l``Kv3z>e}}C2M>9NC`~-E;tmcy&!-|ZQOO+CnaEAgl@^tp@)J(z z1qsX2U;ejdu07vHER8-~rQLDHu;`;_t3eR|s68vglYi)PwRZo(Mv@|HICyv;WD+$# zF>V_zywrh~i7XEmLl8}t-IerhMr>m75$2nng@ZOdUH>b2fS)YQa}OtqNm1`o^Z=h0 zIAgB$L=;aYNeN5|^c^rJqvz%dPk-vy_Gu>K#Q8K40<UMfO|XbcUJSyJp>dN=ln|<_ z;}iDL?0455KlQ|KBjT<8VKa<tNoeGBZMQM_gRkE{bz-X9A5bJyE$UI=t?u^6N;MJ` z*tABQZ}$dW$1UHx+j{cy=``wrosUnwiqN<*P+d32a$=GKX#`j(2qNX0NG?<<#tl4( z13F0>S=#pOrX;!~HDFozQW8mak`O$6)a?I$+XyasAxYrRC<Q1ZvlN^&#PctxG|JR+ zsm3#+=V&ZVfG7p|9r(5=!8=3X_INry%>pBpmBR6t9Ti28qva4Og(noI?-vnZWbQS0 z!6$K_J44bj9j6hPArRCkj@2AbkiwwV$MrXnfBoK<rnN4S<EO&A-~OxL**QA9c=;1? zB;ZO7+`Wm9zE}Z50}c2W`gRh94%Gz^W?7sWmsMR>4U{_eQ6&gOu3ShX??<4Kr4GXj zzWYMlo|NRb1?`C7liA4~y<2$PuQnYI`09dmG7C~pPyy<94%>%ALYEVQ7`Tz}#>P_{ zM{{SU@6FHLJbB`e7iXWndapL<dpuua3lll2E2s}NraGoAa-?nzTl7y6x*&)qYWhU2 z{2?tCO>vceOunC00&?kjo?I$D-uRwnSr;x|dij-CB~gq6kD~H4nGtCh3jl2ZZ$Oa0 zTTl;hA1zYtV74>Vntf^L@@Z=4jjP3+c46Tb#ctxg2w}<UKH>Y5Nm4_U%<>7HIiWuc zQ&Nx=K^8gw3`qh@{BP|3)#312Ua&?6mUw=~3F5#CBSaMS9GHS@4L#QcG$yHB=U}c_ zdqc|YBlkH;mRP{YLiWjLPB5Hsa;gLbh9IOr|H0<vlk=j`mnDCq-ip14Mo%#YwTa0t z%7%m1m5f-lZDF*1A)s)M6krEvAQMLphmnfe-}+w$y?woqr>Kc2TC<F!TW{Sz^JMvn z=bwr^kb*MDw|vjUaF+$R%>lQ=;uF_lXFo$SBP}Eu$K%EY7LW8~(%t=dYUW8`q5XkX zWEGlb@K6|u8%@1VAZmoZgR|2>Xa%)UnMmUh@ElKk%8qx7WyhsW6kIM|d#W-FURn(A z3p86V=3LiEBa@`*C=6*DL0AbCoWJR`c56a+X^9Hkt3<ZUj=wTi9!HFtxONobjcOE$ zX*)#=qpCxfVR>E@M_p;7zBI?w^y<;x|9<TU-?{Sar}LEwJYeL#WpT%513K0R<j&Bn zVN^ZuhNj=4I9D$w=Ot&iUEQ_ZcfuQEL}6v>3Vhi++kN<6qh1O^q&-3LdZG5M2QRK2 zE}fr!r&imL2b(+V5h2yaW}j;}-*IF_B!W|;gV=308b3Q@hH%{oy|)kYL-`_qEUybN z*z5L=_V-@-#K+;=!aFnbC*aSc?G29Gw*3v7*{qgripzO^@!s8Z=oe#B8w`hYbLmRO z&Z|8|xsC@^vK8Mt>)Ml1IF3l2Vl$et)3`&Xj1wfHT!7G;Vg?i%{g!7sm3mQ>9~gs0 zkXtm9a$;WAasVj<w}E_{PRMSv2^Pq4EG_T^AVi{j)})wg;uU%^*KY2~H1Wa{Gk8&H zCetLq<>QJroSS`&Pz%Qzw-hp;c=kCtO%`(EHAH-gpq?k0B7vGC{O5pnWtl?~#aw|o z-2NwN>eZ*J-};l^x6Dw{xb|V66PU&2=}KKAscGN&La(Xi^lwV}Ta?*I(-nxu$2(|A z4sWYS@Kgv15qcDYgu}za;UBoSp8I%hRex~rRvbQ<Ut9*-DMJ_nI1~g~RlxIQSu>3; zd~q#bI<7{-6E1j(<3wEN>-!iLaX+LiDfrxo8_jgEhR$w(eR}$ANh-Gw3<^(zq#Vlx z5}qrR4cqQDzkhz2NX>Q6%(Jz>)$;@hEcibc<w|`X;2WIV$Hh8WVbUx&x@_=Ha-?Ia zD5~&6>tO3mvzu{Joe_248-fRdV8d=ig3=33%i>r@lx>QlL;r<tYf6&elJf_Ykjzf` z<)QkhNwdm1f+F{h4qIj_i^ThNVOVg<!2B8Fz^NSE`sC?OLsd2}Uf9c2zOj9i$!Nn2 z#-@ZY4iC1s%eDG1cozjcby-yz3ULfyF3lOeBgfd6v|f4aTVSt)y^!Q;2fZ0HF04PY ztMZx2iqdNxPEDSSysuBKJOW^J2StMUG%ubrh8E3`5Dt^L15X*$MMS8N8$DG~WRmt> z!?B0ts7xRw6mu}CSKr7LBbu+lQ^)bxa{>2Ca*~N`k_61Cf*G%<#07Q<#VAp@fY3v$ z`|TilmJ_HT651X3w+)uvPta;-_^?upQBpStGhr~D#5ID>1K$(`F^yIbdR~yWEOS<n zL44&{rnSBPd!0s8%`GNLzje5N<IP)t`|rNCa(-467xA%uqs{VVMw7JCM2<dV8LFsi zzBeVI>kND32Pg3<>2Yt~sKSb(j@$M^p2zj#VBaj>6vWNVwg$uA6BkyR?f&Yc`{$py ze6Y8>{di+><&-P|8BV*M){8H_?1j<V+iy+J&R1&_ap=LD@4R#O$;+1nNySalY1C{D zlB2=m^2s=*2K~-NecC+ifOZgy8X{?M2^KFW^t!!+n9Md0t}hgu6zc^|YQz03yXTH+ zhfz>xXsy@U&zI^D1n^|xk^F;~rk6nt0_y`;<OMN9Jj3oAgRk%Jx6fT%td2c1v{K;3 zpmJ@;L!;7`z;}{30-=~C_#77$Zk$Znb|vs`;$=*NE9a6Y#RO41k(Yn_5tWh>MZ{@F z{P+nS{6*!hh@tK`>qTXJCf}VKyMJ;8!l>Fcme=khFr1IP`dQo>{)_E|Q5@y8Ld2;3 z_7=tL<xAVVatPv=V$0qBQpV?x9Bt?Tljx|7bmht^+cG!TZe01LXErx3ZQKvW#$L8< zouFkwW~CfuboV)45oLXZ1FYrP5>MpCG<Lf_Uf+uA!+`ZEIZ2W~hS0l`)`=s^9JIs0 z8I>2~EC(W}Q5O{6hVrA?a6lmAU;?EDIk)3Ao{s`9%Qi%DSJEDnOtaIaMfODGp6CVB zQBq)ma`G;LY|u`v=APvMcs@Hb^)5{vgu$sax+mz@*6&|)t;{QJy#AF3pZ<-PKK1Lb z8vUiy7f<#(l|uFO?1@o<5kkHX_Xyyq1OAdEWgy$UxaYYB&QjooOz6j^pAa~aLm&tr zqrL^wcdW7cn_2<I&P(O7>H1i?K0a2jS1w+<q~&to`PMi4y&m4phG^IEZ(P6HYBoOe z%by1&-0ux<-@JZsuwSlJO~U}mpeX9W-cGev>vsEB-+t@lX?v<RNsnr_D2nkz03{CY z?0WlVFR{wVsZ@l_SRKS4BiU26e4nBvQ35UMSi_F26+r=xTDMuPFh*0fF=*%VV};7J zV+}y5;^SHGtAF@=|8R0<d1>W}Y2_%&3xX_;f{pD%(Cr{j>s5VbYAnKKILSyN0>3px zg%AAa2c2n9iL$<fSO`zwMCisu?xNW|W%!B8+bAQlpX}LX$du+R!y~`DS!j1pUYU>N za;LX%-hSheqO+f$`kNT5f6-^muu*8z^w$dI9Yi_^iGzM#)jl6blXrLD1XIp)R;^-I z^1F{7vab6Y1m;2sca-)zVY&D@k}2@gz%q6{cUF{C0!^}`C=2w=Ho9pNjO7Jvk%(gO z3@Knk>U&N1K8mwB0)4mJ7^k@$O;ZFOC3bwXv-b{UN1|vniHsr$+K=a~{<2bhAWGj6 zq#mzqfSW|#xHWi*if2@@76ZSbLyoan7H?_s1H=%VA7*d8`7M?k&+AhKO|-1X<=U4B zIybYhC`t>}iE|65*Nf$4S)2DAp>dF?d5jO1;SglR;Ziq>Qh1sz4!aPWbl;s2bN5NI zon><f55A}He$b4@wZ}A}C>|J09OWG=Mx?|r+lUEbZy9L5UXmxqmj?a)vB^m=J<lGT zIeP}=W2sa&hX%`$FMj0Xc&vfd$0-(7e)Th-w@l!bR;g6tc&=8jpSy4#*GwYBb9}qi zI&=03Ob!u}lw2HxYxsg7aiYo$opH@Y***$ueDRgC<Kcp=(ad7-F;US7l7gRSST^u{ zVpPXx8*PYo`SLg}23GZ9FD?`oE<byUqE%iw)9MmKW3N;hYj=j-PFD~`252b$)wr1f z4@5nFX5d{3sKg*+>z?;H&%Ko^t}%R%5v(gud}rop_lN73kF1I;zBk$a$4kc$e!wU% zm@{Q6AwKRJo@L&v&(tVV1Z7Q=4*iQXSnUIkM?^7I_{}huTfLd4p)~sB`Kjte9W7P+ zVf1e3^(r}n<*J2T>DIMtyvzWJy8gqr6`8J7D93Jq4k=WpK-rI0#<E8L2uy+mpJJ&f zO#L)Y2|7wiS<UO3oW!wZ^nBL}JYJE?TIGf)?#0<8Lj9i#c6hi0MUHBRxENeEJ7B0L z!}k$l^y-5wCY`~VAXtdQT1Msw(kGECh<FMfu&G9)Nl?r?*RBnR!{7X^-#*>x<?}-E z{~_<aV=TMQJHeZCcsbXrSGjW}yUA{Llif^`s6bK4mNW~=_Q-$O7-3)o;~lRtz+h*_ zz+iSTw#UXuwpR<=lx1a65=D_>Y?7UGsH*PD;pKR9-tWAksFqAo8rusDyw#1ut6Q(` zyZ7Al`@Y}roG+v|@xVxC*KjK6Y&<x=t$=85P#CEk(+5t!?U+UzCbT5;gI*iB8OTu! zEmu0J+!)Pr$k<b~Z54&s1&ZEu>;vGp!@$Jx20<WQL`1dIFMmr#S?{}2xxKzCvdSiy ziB8+#rCO_gEt4<Bk`>oQeP>MF&!lq{jrBV%fJ8o*9-rLqz})NA!Oz6wVr60)#z61Y zg{?MTq3>d%X*-D+|KLLpqLHRi*!@=e3n$2qsW*B{J-;6doNUt6QMtvB5>!HwTCNu< z@x-vag_q8iaDoYV2?#$3LK-!kKx;popunlRtqnCf9#2yBwKq%SIl~pIZAt{%jHd`Z zqDXSIQqJXyjx!Kg49qczRTNG|l7a94c-0gvXP;uhw;znKlaBr!RyqrIqfof>RJwX$ z?!cARJzJISx0=1Yy+ddF#H3=3Bv=PGF*+uQ`SK`EF@|fNrh*abXIg6h^ZOzQ`r@4( zS{Sn&PG&5?UR?QW3~S|6>)o#4659s7NxWN*#j+Drt=sLYBF}S7DwFdgT1}=RlqBj6 zx^)m6o@aXwkU-vXJfNd;ECVcPex)7-p6HqV_P|C3_ClDlBpv9+h!P|?VX5EUPYTqq z#r!aB1V;@>0w3V#VnL0fHzawL6ITej7rLn^;Cz>8RUfDMF_Oj@3dBhp*e}PYo6Y9x zT6JZ4#kOsh<CDo`xjc?z%z=XsFk}s9ff@mroo?;1klf?C0TwzKUe!=?Ic}o5qOzJu z8(JScgCxsu)#OCgtUd7Fs0K0@*?JjfGB2*W)>)RT6MU1Vf$UiXLw1|p<@p6fs;M)( z4o<8sbsRe)NhVin@7Py=^ZYAvj31wVs5JI*-C3syS|1n`CHOAwx`ZDfko3DYN%9mU zx;9!J1yj}Uwuf!2!yt^RS}&tA0vUo6!-t;47<Af=b&zw3be<C>qiNcjJthn=vhGJm zeDY{uHni3Th{|MkY-M3S@=eQdTh-0wx$6fXI!TZK70*Uhq*$8eU0VZ!>KH4w{><4^ zF9K27b>G7jGp59N0_U5phOEfNQkkZx^_4;B`8bccrql0$?c)VW1dHi={?K|7uA{{h zpi;^2zIvEp5)bXZz=&NS1qXM%K3QBlb>rUUUWw;Te%SvEEeC{zK-$}~Kq>gp4PCoa z886#LlILIK)mP2_=s*8n6pl}6u9B4c+00rh(ZQ(!=7R&<OHz-}5yf)Fkl;ehwB0sC zQ<+@e@d=Dzyh!9Y%F_F;V@6=79ZP3<aCer`r@^i!RJ5`J;?mONoJU|jj;d1=G()?? z*g^rw8oLX_H)!UE1YV7z3UEN2pu<q`ogfO@6m>%smjr1EBfD52+E&@=9<i-$qI^M$ zza~muR@@N;Es6rq9Cy6v#*JIIZd_eoThHb5Cm(w+fia4lVd+M%{Uuo~ZmeH_^@p$T zxi`6e_rD0j`)E!Bw=i59K*@!cX%Zx#%oJ=x@3(6(rG^488b&nYTg|7yKe;yUJ27KW zl9Max;<Fg({UoSA0v{|-Z7&cMYNOPsHnGTV)m!5;#i?Dq=eGfD*UmRnnQH_YB{Lv^ znZReF2n-GAD1zs=M`4D<8j%;L`AuE`!ltskLW4Q8EY$RnktLC%a3=^+9XLBAj832S zEshgh+ZYNnEY229W<!a$JrCn!54dE4W3lzyH%Nk+zjo=%fBK(i_8(rKyA?yNHN!K{ zKfkm%&yw`s`;Q)b-;<yhTvXIlh$W&oU%Yzu)uktY<v=2Hz%;~uuQNY)GoDB$k}2?d z^?Hq^L8IY@rlEp&ielSVuhXSz8pe&HD4^4DIf9&Mv^(p%=7xJZZ;sqMabaTYmTlQ; zeDR3~8aHNlU0B}Vbz+JzAo0-kv8kk&jtlzmnV?8FyB}a&uX_T>l#)LG|AW?OM3faS zli^A_5etKY-ka97EUz4lB>_DxJm}#e2G1TQgc?gUyXI<bV<Z=M%(gXfwz|Wj?jaNt zpgLt(Dp$dW2{nUW6KpwJLqqxjcU+&MNrn|vDTy*LB6v@rbyOwgGwhP%?gD)k`rwsr zar_c5+#%Tp7O|E->X?T-uM}Zfk`h@7yhJmKWSns}H>(6`X}Z>F_xt^xAo3&Sv3u`3 zkx7?inZ}8hYo4?1i$D10pMl#A1Kf3~z*nPC#?gMdw*?-6AWUfjr&IYdQmUSfcFu{n zDi7eGV=(}UB&pzXZxh(8lGhl%kD;0tLFkdbE4z+Jv)dWI>{#_}dmIwxXXyC8Pm;cz z%!Yxjb(W*h*tSRAeb7!97%Vhk!V{!JFk9PhG_S(<MJ&V<X)q}HD`#F`U0i<Xi6`Re z&t;0^o(mqbqs9}!92@JmJsjoum@eM$G%5*jOB6u>3y^#pJiE=)n!>xLsdhD+65Fy| znAv;({MGZ4qCEB4-_o@~E}K^}8A%pdhKXl$$xJ?9F8RI(hQ{?Ak`z1-6-_*RY&=z( z>~zywf5R~Q@N~f!*K749bA_S8(UD9T;lr3G3?+LDJmAnatU<R=F?1MtK$>7^FWzav z0A{3)?g&4;adKO0Z1>3P_3At+I6JqUAI+|wo;!5AH6GG_itSFN2`2*j;}OI7Fh9Tu z%n|_M=96Ka{{<ji9Da?BjZI8U+`aCv>-ttZd-(1FOS5gXS&8HD<JJSdyNDaS0R;=* z)omsi#!}zizXkQy8J6E?7zX=skNdZOySlons;Vf8TYmyS!Uc?uj{b6ufo*~DSn^P- zz7xkwK`7HasIX1&PNGB)I-!!tP!tCjW}`aT_Ea9Yhc~Q8h6?v!IL(VnLR7aRt$>ep z8tce-6R1cSxDw9`7?x8K37STw*?bS2Cd%B$2?-BI1E<1ED^~3WCv9@dEF-MJIb5@- zHy=bh4MC2iBnB<zfWPhIm=Q#%)W!TAa$){-IuqB8zQD`dw%<2WE`Z_32-CB!uP&Tj zoI7pX>pS*kGP!9bmP%&x<;p`e^Lpr?i~JEBRrvLW2y_7an3U<X2eL$qa@@80!!Z%T z1dx&82TQC_#ju*1n#ZCb@Y3cWA*dP_jJ2wJL3uhhCC7@aNZT%t$SdlKi=t613qY85 zUCcBpEXPc2BZ9#2k!k8;xJgk4LFxqI(5yw$Lyt<Jr63BcS2vp77IyKCQ#5t0Jb9=x zc|4Wfj$w7n5FJ-y7@*J?FQ_8t27!*60yFg7(wYPUHL_(MCWz^DiyqDszS*uXEAi~) zu6-->w{{<X;KvIgpe23RwMVD-A`aZCcAH?%P@*Wyru4z3o0l)|zjr#3*tt=as<nk| zHVGuTTCF?I2B^S;d#6!57TX<`zrkn{`7WOZVZs5B2Ll}k-lC?~8@)RXUzKR^ivn$h zv~#mL)-+3F>X{0E9z)H38;{)g{qn-DSLY6tBq<(``i750<*)|cRy89WGii>s&G-HS z5YErfU%Ys+TCE1d;M{H7w%xdKV`*t=W@ZKs0^}Nv##XKkfC_-2C<@#yKyJs59lc%; z?&r*zGeBhy95|54WI%DPudnkw4}WD@Ry-chX0!0;iA3USU;A1vmxC7ou;H2^0Vjd) ztyb&9AO0{Lge%#;eLFxA%)#l?rwzlnefu_i+}hgO!w)}PEEa!$;3^o|rx?1(Nil*1 zA<`H&w?&WwMTaVha(w99&H8%iduV8I@EE8!sO@8d6idWaL_1AQ>owv1fJZ>lu)sFz z`y$8+2sRu@Sm;}515E>zGOWn3S$L3vr@NNQ$7-q4w+RY3TS99eaI8ugmT(G)S;P{y z@Aaa9c#HG_a;Ov*(L7tNj6Hndo_v205K%uKUo`c#PJem!+DnFBU6`E{BrcUJ+t&EQ zAAEwOrhO0BJF1Q?VAOe@uRFmQ$`*j57}3z-PV9kqHs)n2xdRxU0i(|IP1Bn1`M1iI zCPCPao^tGaTxZk|N-T}J?iU)>8-?=Yu8T8x8zVXxmZcdx1oAYjN)9%N6_Bm8ojNN= z1QzuB;KMkYj)nMW;75Ld+TwV&p(eh|GlMAPwfZE?YLe}pc+Vrf-rB~>dcC&st-t<n zrO~g&)5TnoD2>0jP(D8BiX^QjVobZ<a$KCEd{7f%1e1ZZ^?()zo#p`Z4iIu&QNWa% zK(_B(zgk~kYE;*iSc2hrqt|sTn-j%Mp}2B;j^&wqA3E7-)@d%ma+fz(pY5~)U4!eZ zkTjD_#w(-c#ib?7vVo8$Vlt?Rf$lJ9og`vdrrt5ZNfxtUf+H(p;)ys2!}ZPP#Z_HZ zB$dN}RYtz$`d(b<X&!sA_F&JQ+J~P`=a%6N(-W6RQcGI@a9`U?GBE4(z(cj+FceRV z00|_56PaHC!Yw?M%jKIlZ#s?x&;sx*FE679VB4iq>C&Z3ANj~f=H})AEk}<YJ$LS0 zp-=#y2EV<2{d%+61mM9DKr;L`7K=Uq{PW;s0K@fq9q<gGI(hPByWIwiEi5bm-ezZK zE0qfPrOnMvK=rULLjdnTfBt-@(}7Qi-zJkuKrbNwnP;8>NNb3`ze{2x?PD@e*&Az@ z!5kDuCJ2h#a<({H6Yy@|ybd-mU#bA@f%8)&g%R}PdW$3oJ_-k&x@l@8=tMly2W?S_ z3sM4{ofJ<X8WRrV<SgBDEu3H|D&~izXLoSsvM4T!@)}0L(363uc4`lVVG$$JG)pm* z4JSrnVMA6JMj?qx*$mgRDZk%|@7Prf!_7hWHcy8X6|S#*<;|DxY%Hy33exz@=!qvj zoXqZz#drB$Uhk8hYoG{cLZ`y<&GyS8H5-pj0|YJ80lvq{^qtyk8^H>0WnnCMVF3@% zc=(d$Z+dRr)&P5BDB&27ku(8BP9L0JzOm#7-7x&p#P;7Bbho0|;r7X4!!!aWrRO*@ zDs+#z-5v#eK;&^EAn*XdIb7xo5R1X%1is3NEhNiLez0;6g-W>fNrfnGD;LKWt9PE? zdq`WFyE%8|^3t5bzWHb6iDxPk_w!=fa|B5_3>s|E0S|^3(=4!USI{@BcO;KeQzNL+ zJcd$&Ns1#;c`nv>Y~ZEfml&4kcvf<i^~HJk)%ec6G^a4E&Iz&F#{cu`bI<SIKUJPQ zFzDwpX(g2w2K}zU3w!tOQPf!E8J2BP!?kM)tzAc#=WDXaSzu26V7cDgIhq7k`R3&t zdcfwgNpoNg44=S4QBA^}5hy33-GxqSrS-(_;*EP}E)bl?s{>y7QNOk9+J`Z+z%YjA zns8yjk5NHQhK{1aF90EUFz{F400C?;_2J0$^fb)=bUF=F{~O=<#)%Ur;0Qp%NBciO z$TMI4>Q_fbM&Qkplap{95DTyYumOZ53D~;=NQM`Hha*Rh0M`X11K8gG{`bRsUVQOI z@M%vz`6S37nBU+G;RSpgoE)GIcuu8K@Z;3f6yO{_0{#}B4%moy51XOr&@!!4-}`QH z`%X>wLf4TK%9RTja;3?=`}f^Ece>l_-*fztPJOL1vp=57F(fW?Aq%t4>sp?V>YSr0 zf?zsnuwkMcqZtlpr>S>gK*3B<lnPD&3v?n_;<+VJULm<AhB3MsYi;C8xjM{aKiDIv z9B|HPYX|tp8x{CgANZkw!cm8K*0y&##+B=r{$O*B;065T2M*5PSTl8F*FE>_KYUzP zcN63c2swRVM-hBF(9U6_ThhU!GDDU~W+Cz#mP5p|CEz6MorStn&C-dya0|oFipo5E zQol7CXOA)Rq-~`!f?@<4LzOd8g?JqED3+A@oMmoAQP20`%;8q(3>kt)LfRO#GAGEW z>u0MAbQeV-Fw|C$HzY>TP2nJkIc6TGT(CjTAcIOpavInxA-e;^l*Y<9HF#e<;U*6p zz4w^5Jb(83`E%f}TD5Nsdi~>%-ESF}Hdfku4t<p4j|DzfZ&yjq;8>mTOJ10fIT95k zMSC!Qd1|KD+L+mYke6b>a~#_M7>ZKN80h+-o5+B04HKE7>#Vh#%Yu~WWsg$Ip{w8o zR$E_pT(?jxXVPiiF!}=vRlFpJC1FUSJFrW+m@09X=QdfImRM@o#0HCH3VOBKYBV^O z_FadjIEv;`X4G)CS>-i1q|dMITWOCTnmk)6&SIpkrsrK_-P8_P`W{9|;)DhtgWA;i z0fl<y{BoQ10HMUN!}HxLu2!r4eI5u0;hkI3?(g~4FmMctlYic)G;15_T=AcFVFsX! zq6f|Xvrqq}k}b?$Ki_ZFjy(Fr`tpLM8^8H){_xFbzuD<_JN;&-R!iqn1yEP-`G}!` z2`6BTU|Nwh%Lxk0i>O>#2nvvI)mH-7q*;|96xVWatd5gQZaCZ17q^XZ1eI^LQ&pYq zx@;CdI+}WuPrl^ppV7_TIKHt}hx6{B`4Ckr;=_Q9f*wh3Fw82iZk~DN^0o8p>0EIC zLl1S@xng-rP403m#WKKgYEfk4<S<iUtN$K`1h#Dos{BJ%J>6XUu$VY5h*-C0EpGlz zCFdp+Kq<SHCK-b%&z->WqNHSkNDomr`n#k2I63Al&HeEk&%gG-<4@#DpEY!tB~db4 zHU=%*91N@1c`PTX$-JZW8rQB$<x<E}1PX0IQJ}sTfPn{CdzPujzQu@esYGk;2xgT+ zzeOaI>G5gH==VD{n&8}~Nr{Q{R2IY9X73FQ+t^&YzI12p@IzCt{$Q?E>rd^Jjz0FE z2c4;2+hxe_=khPq7x$R-2QoR{b8YZ@$?PaXV`%Avek?f>MXug&BQfmxF_iJ-w`(gX zA%x4Y{QTFx^sfjk_MwkI-ZSqrtz3v%gMLR8)dV7$p}-N^pbrX*r%@#`@a3)_DIy0q zwN&kHt7Hd#EuI}&Z<#OO>{FOa5fR#oBm>t4+k$W9uD-o72rR3kv%BQ(L-&a|eGbDf zU>FOk+wA8p<B%Us^CFDZU|8&r{AE{1e+GfWcp`EOfvX*Ft>slROfiPe2GZ{5r`;0R z5P_B#-q>{Zji7dqcfaAE9D&0nB685F2`shezN0M9=L)FI3`w%vci$^1abPkt2M%@H zb?|J0lDu>4Qm&8(zvX!W%qm`tvAl#NUlh2uVH-UUDB#G9D3A1-E#J{e^0p`~i|T6R z_nIA!Ww+g~W^`X11Xw^?lj>xai~HfY@19*>{Z1wy^8*R(=Djr<WQ1`5YKAm|V2L1? zh1ep^t)o(<=G2ZolcFFLEAJ=iT{HQzt{L5ih2d?m0|ZKuKtZP{v1r)58VS@Wq&ZU4 zw=u#S=@DX>UU@mDUOpI`MTKzm5!*bf=>>w$#WITJXmgvZ`J^P#5w^vIhsGF3_45Ua zmQy(_o|uZF7=hQ|dIp*S64$dG(A7#j-l(@0md}mk^RgO4%{O=kO}k-7Tp-&~fU3-p z#5}|GFpP2y)i)CiZh91%932nBu-C4OvIxF4q63(Kwi8$y9{R_yus^x;1CzV;UgNuo z)S~O~6a{nXd0u!K56hlDZ?>_)ATL!)K;{EqM>V)`yw|Gvo&|V-D;ad_sKR#;a3Y#! z@Ii>qVz><`@vSF6a!<Wsy7r`J<uKfocrKk7Lq&s8<6js-f?+uVN7aT<!Y6op8sxIO zw9%DC_SB{MiE@c^ywlefO$&qR6ynH6Yv5EEo+Np&1$VDQSRPpxt2@gW&g`_!iqRp| z)EvcGLafdS-_-{@KnM^_hT~CA$3MXqh3Q7$yfk>~UZtk_GD~#Lz;Z*!$Fd5EZY_%L z8RfyFoLaD2hQHGGe&><om(LBZZP;m<YH2}SByMcFhbo-oM;#-8?+k^fB(k9edrKVk zkM5KKFb`ZKV#J*X4!}gAQ2ai9w|6d#PQ(&2$MG<^M@w1T3rs^-;(0;f;o=QLN7-n; zlTIfkrP8XljJ_wTAW>eC<OP!J0`0VoRI@*>MS@OnHc)-aA_#MonaQywCo+M@UOwII zv=%%!n%VQecRTP7CiL0Bvq_?g<IC0lO`2OyCP4m`jqZJ}J7F88Z0UtP_u;+Tt|$WG zw-$syP7sN(w}3Z<&Q{IhAYxsY!U<N1Q8=B)uuB+r7K?5Nw(2<h9cwxWMsO0`xt~Z4 z*O_dOBO`(mLQDr%jrJ-~=v+ji#X#9Ih-(*CcI@A%q`A;Xx!udFn<9(FMYLxC8hc}7 z<NU>Qj~+icA&Fhbp=gyrE0SI?FiBM;7{)gPmS4a~)R4v=r0_uSu$ELA1HIj8uA^NJ z+o$P>B`Mv-bi1jtPKf$C2DUTG^1uf9dygJ6wacsoYTuwai{@$$>G@_%Nv!hBS;t5O z5tGd2hiSyXjxkh{4i)}!(N+-dZ|&lORG~p_1L30y2EV|@2-VxIX;Pw?l!V-{?nXGb zxSCYNxJb4dHJoH(60;Rfhz}F2S{+ljY(*BAHroNtt)IUG$}pFT^>wg=K4_&>GM>oF z!B5jkU;||2%%mbP;_x<#rELFr*xD|L=LF>rT#Ayq#_B7Uey^qNqS)j=0SLF{n2#P- zH@e>UE@_fP0)!^h3`^oy*6p>f2l{G9o;|Z<U0Snm)STm!Xg$6dqjL)Nhd*e+o82Iq zNHfcASK*0j-v{{R6#CCz?FbB+lZj%S#{O~1#o@5bj2qyqn_XU1(jbMy0OTBaHpkM` zL_t&%hNjuZ0HpOowO=XZlDPuV?N+lzVxGw2tSI<V;koCZyMFz~Cq6QPl0mVynjQp> z(r9dJ8cNS$VXl^wWy<R}wT&={a!e&JjJc5&hCE4uAPg##(||+A-t?U^jxAF38m}zz z;*uA%*IG=R-s>APo&HFKB}j(gRaWbbE_I%d)2Cv}2T_S>6f+Go<E`HAThu245*xCC zV*^Y;K8v#V`j4J2jjNN}3+8~gjgNR<0Vi_|Pm{O~ax@%<L=SqcZuNF9kx8awhK|}R z2vUrqSqC^>w`v(!B0Vy-vr^x@nJHWj!V!veV{wHDT~vC}Hx1hyHhG^BIj}e`?)qW9 zLnP$L^`dqkgb|f064){)t`2PkZM8}?<^&?Iq;n{f$+LJ4h0*$+kJEIgZ%S;0vn0A1 zo>|>k1}BtDhy(2yODdfB9Y<F%LS`t?(iqEooVr1ZFSu6dx)0yH?#B~g7{DU>43k9F zPBD~*A9(~EaeBSs;z}6#Jc+G!+t;+3>e{J^?e}mZTA6D$YO8DOoFL&;4DCXtuuiK= z5Nw3KrO|++reXrvmUg%I<cWhJ&aSqc@yUY762nphp&A1&0doThRN}{E6m{csu}Q@& zrbI8K`kh81T}b7HemkLQ?{n-~Q9j2?9ab_~;YFi&$21Q8Y`g4#P`VJ-(gTGfXbRsu z!W|yt4~%d?H33c>jk7ck4ozZ-rXFn1viFbiae)MH+0cA}C3fW4@ig-rN8<xKRC#hH zi>e_2KEb0-WVswx=U9fKnSadX0cB67^QKQXJDMVpuGQBE&A_v0n3*{4IJPLqNSc$? z<n7JD%4W+8qF2t}n7y-nbGh}(rS<iu?MIZSzxnNFUb}VMPNiSpxm$<=FL08V7H8HS z#RXH#I$1gO<u5(o>l)KLi$V}93)=$>%u9gdo~TS=QRmbTzgHL?iGf<CZz=H?c;zBZ zX|`FmwWCS-5r#SxVnq_{HU%QhLW_-|gyBn|r$lO7MDSn~qOCHNX!nxEF$E7P-)WM> zO`d;U&CGFPYkB_V=f8C!S5%6Xl-54%V<%Vv^pOcCggFna%dss^RB0OZeURcAw64f- z!*&{|j{MMjM26-iQc<sSt+ugN9xoBZ&LFVRS`?@s#~e22AWEZ?qoboZiQ3f+w-I2< z`?&3aJQaYP$r+kIOY@t(LBi;i8FQMKB2JPhuxBJI%1PAkgTzSOm(>J_L?EPKiv^CR zS-x*#9O=;%YGWE=7ajkatG!p(PZGfb%Qqbh6{jLO@O$F=M(O!yFH@{PF|m&M*IA+L zIgHkGNm}L@vaOk><wy+L>4l5JoR<f^8@gG@Wey7QF_iKf1?SJ5t<}KJ2By{%1uhm( z;h_g?7QbtQ8qk=DgP)|;WJz<P+l`3hSkQ3+N`)aosss^?LO|SAAJlZiVw^cVfqD&~ z*4(!4x}K~gNGh`JHc3r5)}-fzG}R#Jh~Wn;cbodB5M9{*5oB6`cHVt_Z;9Mf<hCvk zK=_G+%5a+(ece0CPo$WHNNz0;!q=nQ-`aK$P}&H7&nOq7{&n2lIa>d~%OfdmFyJt! zoFwtk1RX__z-;^=#Cb6Za|Y%$sx%QgY-A>6w9IAM^k&cBQBhoH&>S>{*2<1UXZG!7 zRdq6{>~VT0{OC0?epM6-M!>Ozn~23b3&DT=(tkgB_`yd`9>&=S^)N!1kpqwHw+6{n z3Wn*<t?vFKS23*RStY%{-*rc$C<pT?h-`v1i0JLgT40GCFN~?&E?Rog*OvqT07=?g zQEy>@(_}Xc=X?5WzOc#(z=uax7xdMI^($vCAA9fp`wo8;!`|Ses;)JCR~y!|L0PeY zJ2@^5W16v8G8YD(sda{%$6>u*@Ah=Z^>*#v2YT7}+4@GGrUgabJJ2xOHsa|5hO;fB z#SnN95wE=bVzE%1p02pA8SyNxh~RL-c3+9bI&H1F{^H(~H!!U9#`&acmL9)9{>-UM zwZ8t)j?(04{^D}Cp}8QbrV24_b3?boQd&etEexBz)>yd^V<O%3SQs{AmL#RLJOY#$ z43=-Rt;Rh{LUf}B$9P(gRO87~o@4k+3}3~<78a^%ObYx$6cimljcV!OCX&2Z8;h<1 z2PKS*pcc_43J!Fj3pgJcDOr{c!fz{r+V@dQ?Vnkw9O#B1poHVsuCBQO$#~vd+!No* z2K%XwEhw5QBnqOHNRJzu8G3_wD%);s_Buo?k&UN_erKKK5{~_-*PIZfGlIH8vHu^p zM!Wm^-bUbCD?K9lGjDinz31)96!_gg{lmWk-|sfp6<I)~N`Rn8V4fsF5y62)C{7<0 zm@rJc)7luXOvNNjVD$Z!pxSRtjo*exU>GT_FGt>ENA6X&O;OX^c56C|`J-a|@<^=V z={s@8)D44I6TkNHPfnC84rX+%t{9FD*F0Bf1_;j`M$q>i+II8GM!QN2!e<RVhLZ}# zhB$6wQ8x(Crp4A0|4(v4L9loeqHxagZfn{>j7j=#hrs7~am~kO2gb4q(#M<WHy>8x zQ?B`^r+#?)Jx?7kR6bc-pBx!IO|u=s3^*~4ly*;tfu72wJl8@i_?&1PUE8ue-_!a7 zFhf!-^TP8l!3-*uE9G*z-<GF#&Rjinrn){Ss1<OVFkfL9161i6H9rFB1-=ZlR%iw| zfuTe!hT_%O)ytQ^^qucT7*jg6{Cj_J&po@;OBcnjy?S|IngmV%?d!KbVtIyUym@O? zRpM9X)+ywX!jTlJYH|AN?R+-5YkDMb9Sjq3eA5rtNPM^F<tXX`Bdj)C$0Kql!2pG( z9K5+>cOhHwS?X03T0x5#vBn53Mj$c&hU==^(g!R<Hu_wI@1U`3@vOG8Ty)$NBNYi$ zJ1QIu2BV{6h#vbvHWOFWgsJy{ZKE<)cL_Y;N+2%Kirq%1+7A*6gGE2LEH(-x^6|73 zWksh~Ux{TWR+d`&`qK7olhutCIF%aDDDh&iwT@PRh;eO@bDe8~bm5<W?C3CL7CBg& z;RRKpD74ZLc#fu_(27`Gt=HQZ&b^UHms6>(#9wj4TP<yoqA<@cx#lPqj7ju}WvhuS zl^^j2S{H@aIVIo9$}zWgv*r^1*l1eHVE^{_ezVgB8q_bT8HJi9`E?Atijl3*&zQY~ zGrM-)zV%1*H&zaxn6ywlXCI5+dfaFS9IY+>R5~b0I*v1K^>^~}qCU7n6ONR;#_(%k zRr=jD8=g!iCiNZ&RCRUvPf5D*$=`f1k@@vTz2Z9^%M^u}m&&7MYP;2fTOlHU(B346 z1Qez?-16$$O08O7Us*bI<bk8d9^8N60M9Y(&<&``X@0E|&%BW?S2$LM13?fBx(yP> zj$!%(l&8mYERZ_1j5uV-q3cm@u(DZAmCDPvSLDQ}uV4B8u04-VWW=#Bp396e6t&UQ zWh~lT$<7p$mg6(=IE@-?kOE7#n~ic#E|tm@j%lWY;c7%zw@s0Hds5R0j@#(>T<Xq` zxFi=*M`+9>sPw5<&z8ZDC9^jc8ar~^5^CfaZ?b}cQ4t7840{e(HpoTGUSNVbEKCnH z_`p0d^mvw~Tec%fYATh~^}*Jrk!AF^dPv<pbv)Nm)HuAlbi2W^+`Dh+p@_5yuP9bF zA?pr4=r)&^S85w8<5M&FQn|Xe1mg$9K9(98bT$d1PIICk+&Acs|1S+fxaCf#vlS%p zk2nb?#j=Vz?6?$ow%N4|jiOXRjLWixO3Q|JWnxD@Ushw!Qp}I+c1a))@zi9$RgQ=l zV3r_kiqISzbL=e_9T1d4;oIhJztQWfGn2bk@2neERZ;F3x@8%@Dmd93&hlJFno^jf zragw^lRSBcW%;$GOS|uRm8Opc{^0Eer?*yFfHfk=5C51j;6a{%v<U<B@u~dFIMoh3 z#q95Q%t{azXfkH|i9`+~g1`LXH@}!jCEow5|7K%7gX1kA*S4J#u+xEk!*(VZ!p|lp z&+{xdSh#b?GWCs(wLxzXOT@<~r>17Ml}ARZD|0i`W2otqghr{+Ybu3_N5&uUtT~F9 z9Dup-be3XBK}Ac=!@bjCWdKk^(XjPJgn6i{06}6?6T9v|_)&(rt!v`7t2{?LDkrUO zv{C3YMVYp}-qA{#WR5l1Vg?tK$nE2dl8V38aH3gV@j!x;F2`+RnC$r@BH!tHb@z@j z)%va`CQbZ(ilA3(t$KBRY;?rL{XRxx^!>g~b=q;x?9$8zMXj-Xh*LPt+cbX>vwN*h z&cnobW@@V)Qmt0gbyNusOkc0t9j%N3*aFX`1R=VssUF(;i9pRJ=2u${ElkMxyOiRE zM`(IPn)k+&xZ$D@c?u8q?A^7ow(@sR|J4US{Gnu~fYYqj@5*YNNR4zFYYfaQ+V=_Z ze^C&2yWLk`eYIMxe&7Qi*gEq1>#ys&K0Q4>Ha7M@yHCh4tmhcOH_+-CA@O3_vCemz z*BrZ@$_S;=T(eWWa_Qp3kBsTn_v6@Jo=KrH6|9X#`j3n8{WNE$UDp`{a!4~K>fqIE zZVVRr%}%*E+Oxvj8}(v;ht{({_mR)Ien4?<6x2y7d;iJDp84_@tE=ay_B__9(**fe zuEUSx+TmG9o&yiMLy~hocDvfU9#?%4%S92>t-d#k#v&|<dWkU}MFDZTHR!x{;q`B- z3I5RW4>oK2qEIIYA17h%#2x$ojaA)t7bQv9*jVXx;hYS72u0J`Z2s7TCpeCcsWLCA zX0PSqxEs=nlJtGg?6ma|Q2Cm*vcmAUa{IJ6{SlT3dsKsUc~Ovi{XUFMBAEh03my{1 zIS(;uO5DL?kG%Qj*G%hDB0j%+$5YQf=N87vFTXVFSk|s>V<7+TEUvnq^VtV>%Q*?- zW!JTv)is7`(To&JX5Y%A4`|=q<it(i&U;>w;^x4I<aIsZvY4`qKrN67xK4)PO|si{ z*RpIn#uBE{;-oZ=jhXuPDC#ptm1Y(=#UR5zP9|I3P-OFrkU@R9Eq!ru37{?r{Os&4 z)T5K4d+jO^?4Lp)xIxEOV<`aQ#XGHGI(77}i}2{z6A53I1<gT4@;%R%B<0~pAN$tV zzjo@CQ^y~EOr@E|`h4J7u~Z?Iue9qc09KBd-x-AZ((>$o`=j*HBcmVtC<;ZNn_u|i zU#L5_PyE_v5W{ISH@^QY7KU3t`li`<^;GxLrR>QQsl$i<k?`|<|LLcnZZ@0gbb4lH zW@Tk%b#;}ZsHLSPplx6H!Wa7e{^vjcdHB^Y?Fqw9V>K4bF-#7qI7#&>YJT?W7uT2X zG^^GVpO{fnAIfFZFTL=cLgD?pc0Zu&O&sMkgi-i&jUE8I(M(R2$K==siC;Q69W1Wz zTCdZ4Cw3%a1>Fhjot|m*Mb7UVeY8M;gZQLbZhNURvUK~Bq&}_0A8{SPo{#$PMttZ~ zf!CwRS(aNCq$QGCZ?r>!9t-uombS(UOJOih38R6xN#jxA)A3|>bNRo2|LflrMD_T4 zKFW$8>vv3=M%B&<$`3=qGBX!1Yn|5V(nuwdO6Bq;mZf1xWr+u&2=~xyu5}t4RJRE; zCZyyHFZa6*t=GXKzmVI>j2wO8{2RG!l3}sF-;9D*$JxMfvdE0Jn!T7Br)kPH4LIje z&_>`UK`h2%*^mF~C`O#ZuwB|pej+FJ2i=b!94CPnO1$P`$M=rI=d+zn%?o)Pw~YZe zTo}`OEm=*1KocYt{+n7CBbv6gI|u}iST7|lwJ~t1oGWZcON^E^==TdFC1B6CX{CjU zVPQ*PH^7fwip69^)Qg65$Xoqk4F9rAq^x!_KmJx4(DKr<WxJ}PY;0_T{WyB`7(8p& z(OH)JX+eM%4Ot;}ZL!fXu(X1`3ll}f-#sEP*keh;2^o?IaEkQ2pw(=rv*}O%i%*?B zbMDL=r*`bvmMxZh?MAb<oX%C!`LV|4vTaB20K(3t%cp<iUn<ix{hPN?wUu+{-uTR~ zrH>q){~!OOd;Quy|JQ%1z3{^PpZux1YscnuKREg~f9<q8SN`DNl|T9vLDP4ir>?on zZEIUrRQX@l-(J3a`Rv)VV1!0SMnJ&4^wLW_kJ49wKO8x7M3SUEd-mA2{o;!+Ubt}K zlb`(LFQ*Bkc(TH>cU)()*Vg8*zn~_9iJ9ce{Nj#%lLT>pWAh%MaFbJ|T6JM&dzrxO zFnq`J;HW#02V@K$NGG1Yacg;XanpM2{;^Iss-%x?ujCE0XWC!}1639$%9U<slO(o! zdf>iqiTq45TY2rd*NT<#RPG7S<H7(B9FxFTX=YVc78rgN$T4^Tt#h1@#-&)v_OoXH z6<$8i3D*oG$#CF!K-H(s!Ryz~Um<Yj$jQSaW52z=qLEY=WvLM;oTfjJCkxlMZO?no zV{za<>6D}-vC!&w+MQ;N)s19!B*I9F6|=>0ykm5ln~~ugrh$6giVDk9#gTpYotTLw zMl`Ct*}N?%J{L-sZ+f<G>K4g(!@9jN91(yJX(z`A$!*&WmTfR%!n0VtO-v?1gT{hk zYXR3X8Q)PWS)5b+l;S(?aLe96k*T4t#FHR6+l_VCHi0yXvWW$e@4*}xFnlW>27%Y` zVuu5E6!!*B7`0mM;z+5IoMtx3xHRJVb`*L9E_j~9a1zSb^Qw$kA=)cAR?{_u<3<G~ zH}u(vLj#!t9}Y@q`?eXD<4{jn9RHb)dah%|;#qjx<;Awlv+o|<>4zAJh12PX;{{{b zJ^*f+WeJ}oyREjQNc#^Symj-&>#x1Bd+(kdyJpNmyIo&SWGcDR_~uIY9pG`}KmB3( zsSoe^{eQdl<MsdahZCRu%#Ppv9T>G|@43%uHVKx?KmORh|M2f$`S3@UpZ;>?S3bd} zQ<Nyus`~ax&MyxfKg_5M@k_T@1CRH`FMjdFi4*V|peP8!Bab|C?AS5GFy`my3x&d0 zzVekuqX7p+QT+b*zYjlt;uD|vCAKI+t^4iSOD}J(FZiDC*ye%k4m{ew_nt$U^0@8f zyPa;nD2+`_Ub%SDG6pP7{v^VBORz<#tpb`%Bu#TgimWp9(=<=_mXpiX_LrX>xNbsK zPZg5!*@ZhRwWS@Cd)8_zUg-bkhdxV@q!(;0WSb0A6vYWic{P#DV*%$`8$g)^Wswt> zFwzLUjM3lk+T*@gjBu4=@DR62x?$O+&?|BLZOc4>;b4?ftT6Y&H~&kmT6^EePh<<f z)oc5T?3yO1e2{*A6nSBk9CX}WyRUfWPS;bk{st?^p5yA82Bg$5da|2VlR1P9*I|Qh zQo?~%!yJ{Av>MNVi*D663+0kM@H^dQRw<DogR!XA6G_m3Lpi3Pk`zN*h2ovT0Xe|C zK`{175@od5I^&y+NthH%`DjglIE5pkxwH~Q5vwSPQpK??)DV(p0g!4!88VE3V)*99 zGCTSTK@?oCOjD~A-LY#1W%na_J4VMuPFr6CT<MCe1d$_gaY;zp&LBc{MQzXbR8a*> ziHeDY4(4|;iSBoKOq!rc)X^KBH3(ltRSaF1MGgo80NgVB9CCxv-Rubmm%=NTZr6Gi zo>JazMFuU3dPG^aMiR6gfFJVTmKY?7xsK=hcp{meo|*vV!gBn|(uQrDqa&Hd#(XM2 zT_`8s0fcU+8{4z@Cowph9^bonEAo>~r98tRSvEvP9N^X_tj$dvIY6*bgTQ_(Dsru3 zpIh#q+?H@W;NrxchB?<Tk4?mspYIaa*4F;~&;R`7$&&y@Ae@gq_SoLNdsS5h)Pd`p zn3#aO`qZaBrD@uae)J=-PsfiRzjWzRy<X2|v%es!PIJHV=l@mUt<u=|#J26l%0V12 z=z2v;C*YAp;Q$zy3+x|0tJwt7yL<Oe&)45dKK5M{=T0+<n!-qiM%<}}VPD5kuM2uK zL#}Kl67i_r>~(vNz|kNxBth9Zxjh??uXXAa%X^NFqjYpIjghWV`H>Ta@=Ir5J9YAX zY9iYp=`}1+ZEMof#{$0`VF`kvSji21RJS|u0uVn^e2SnSCy4)>Aet<<*VLb0TYPi* z&gPzbC-UXb4LbQSs5)N2Fto%13$-;J<-%gbG=}}Pp`CGqhdGWn`z_Q*GYSF3s+3_+ z6>Y5FZfN~hfU;F6aG+`;FKl(>1Ujy*z4E<Nj%gfz^a-x;(E7$L6k{$*jF%Xjq5z-1 z=YmE69W{&?#VMM?aE7D?Bx;iuaLPV;V$9b!tLy7Pz+_1_44vl%-_Rn*iHKpLUYPiT z0PGp$7K2LEMK*X#HZKT^6kD~l1A!lB+0$6i!*neod7Bv{h=8WWYOOBGQofM0jZR2} zrqxFU4U%P4zX!#^;(D(}vpgzTOd_XbM=C8A!SBP6w%ctm9f51*GRdtrmEG0`HH_AK zn{E!>pq)tN9nZV6)R6`5-IE-=5T|i}CWBE7=eYh|NDcsh@iZ7vsaad2aR1TAA6i*j z+uW=QJU=_PJUKPmt`1VUSKk2@l~4WZ<=_8(un!=C!6jBc{;>=H`d{z+kN>gy{PRFp zq)Mgn@~c2uXaD$58mCS@`1QZDYc(6daNl7m8Q(g?nZ>@ulC^=`HoU(+y}7FZMu*g# z;OBvGFc^H}8{gQzeLK7W$o=}S|2oi7@P046@B&O4V4?o7+*K--+O=!fQ%^m0=gyrs z-+c4&#~=UQ-~HXseeQGME#IxY1s&b@;K6jRoX$R=rr@3I+zk+!dKj*uMFlh;h<?8( zO6sTnx6eqDOrUBJXww!Iy(d{X!gAum!U9ZT(9oUc_eMvTlIg70D#lplsfW7^LoO|6 z0{^j*ynvR|(B>v-r?MyFc|cxsqsyWFUp@#p+;2*%F}-VYajq^W8<C&w)^_;*D2C@z z6H?Z~aB~<3P57P@1gQL(sANQ$u#6Zl;K|GYi@I0Oe*4wut{yrzwd=rd4?0E9-3S67 z`Fj!-XCVko6b0YI>T8s!PQ<dVsWBuS?>1|2!gw-=gX>|$t)6fUN2mA#C&a)N(2PKV z(`jyi6G&!8Dl;FZne!~?O5#UpY}ypsb$wB0G7EF7f&#NSfQcIf!0w{AYm)|E#IPL< z=6!(EY(>t;Zk)T})70GBqSNb5?mIAl{i32KIi6p;bWU1bkp!M*S%9Ez8B4SC@nk|t zCJhaXDGdw{TxXOd+=!_~hDmDmNE(gQeVA|5YJ<wyc)Q&+bSn&1kX~Bfq4<zxVF0Yq z^&AV4YJwL0L7Tz{nB~)ftVnsBARWh66eX2Pqr7AkbZXbC8$5#nzYp(HATR<1L6MAf zX|AffWKw=tH8|V=gFt-08=Q){#RO*s#MbuxR+O)8Iq>*UlB%Kmj={=OuUU_&Vi*$h zvvav(o+MIOaEc&*@D5>XiT(S)kKXyhUyy>3JMmEB-~sUTOMmmXaCwLS>`!SKwb#;@ zmd(x0egEgbSEi;S&v*O%&F?)E#M6oGGnd!2hUPxJBT*l?I}0MH)CXr0_lznE_jBFg z>#x85)vtaP+#SfjkA3W8$z&45A-o3fluoC?B?AA1*S%g(*YyPWo_HK^2s9OrY$X%p zKcDpafnJ{2na=%+=cV<5Er`75wQWl$N&2VuWPLZAD{O9Vt}HGVMnDMZR=|pCN*2Xi zH?M>56$O5CW4%y%bbX@>R5b8EZP^n%b)95y#+U+2?Daz<K+Y?$9n*Df0283sbqU)5 z9ybVsi%sp@iOf}wRr8~{g<H$EaZr%okHPaMZHjiI5F8*1o5FC47vq8yQ(_s0<xRur zY_^n`R^7b1ws?ANdAV4Y9{#|8z=`{PuaDA0BRq&ebHZfe!54tO>eN@h{iUy{$sM+i zZ!C4a00RpR?=%M5xtE?>p1rPhTP|?8ZfAY*_Mq1vbb9H05hR(V^)QSH!x%4a#*)`0 z>3F-fCyd%EmFRhO*K_aR|7bjsbgdrR^1dsk7o;d~K#spobKNkIn)C9Y6V>Xgm8l)| zwbkmz>e|A5y<XKU>$&fKy}G=J`CfHpabs=u>`OnqbM;EMUdOR;YWKdtu_*3L7}=in zC_%Qk*j2n^VvA?#(s6$3(*n=ILtkB47Ug7`S&Zs`LF>;m_66Ktb#2nYvoI1Q?!uD= z#T#gwLU7Hs)<SkapM40NHV5WMl7X_e+pXorh1vNzfu&NZgzx)5wJ7S^@npseh?lNx zunhO^;UaEGFqnI&j0uA1_yPWt5D||cS=2Q(Le7?9D3psc1g)X~AC67UY=^nQ3(tY+ zduL!weePev|DS|tfBs*=|F?gP?b&_k&;Ix)<#iMBJ^$|icwNW3PSn)hbIXGd?oDMC zHm9IS_DYifMWLtR&6_um9618CWM*cjSS+rrtnAsdXREvg4A3jDyt0*BJT)~1U;u)e z&*$ODGtWE&e+2|%tE|S)Umg{E-7G`atbqY@Jef(TvDBc~`I*%%csxss3ujKB29WPL zcqAkp3W$c)?ix<J)js~viIwH0zy0#x{L!BrVVL(W%wOESpEFIn(|sbzcocinY;UKy zaV+c)Gg@($Q!N7*B#aj*Ja~@eX9wD{8zi*$dwfrS{lzbux_;=v872N`uWcj2iTZUD z4ESAMLZxD(fF1U1(zUKRXiBlM#>Vo^OV4BqxmZlO_rcHO<UL?@<wOd_Nezr{vxP@Q zzLfiMswY5Esx4#Bp8j4uRY~TGANcfdTz>P_E2m!@DVH1TE1IT%|8M_l+x|n~moB~f z7unH?WG?NwCNGTuRm1!*W7un0G>wrT%9Oxk0NcVQnR^?(jXQT{Cnu-bL<~HtKIoAI zA&4Sqga`%v=oH<?P_;D4>kzRqZfs`f&5Li8#wNDyKLAiHO-x5&2%I)w9u-At&~37! zlqnR7m8nE7ueGbT<?`G>vsVJWAkoDD|2h?Jbmngf?Pcb`?yYjk`9cZ)qrnPeoTy{= zRm{4M883PLzp=FAPW+REoX0~w^lgF>LWglZo6e1aUt<}v-)pa}t_(Dz)$Z_uoX@3m zxuoZMKeLuj5H!iimu9P)OC;rAkZ)^y(e9L=i3zBJ%w5yT^}JMWWEchR1ir<xG9v8+ z<p-f4%YrOcS2mNGD#OnY8oU320o<Dd*8;uAAW2ZyJRqN;Zqx7pz39k9EFsdfHNy)c znft}-qPK6~1|<elAGqjy-t(TVT?#ldJ3HI$b^&RpPoIV#w^Hfhh39$T7-O;6g$ozp zuK<3)S^<-HmyP-<TjjW&Y7MlK7Pi~LT3pJBf~xh}Z&#h#8aKzbWF>~u=V>|~lTtEH z;mA92TmlTI<<gmKS(NjMq&zn}S1eXoCWs;@!ZM!42<ny4V;p-DNiAHaaDgGrz`w=v zR~i1hoOIQ-6OnT)tG>^1_sj8gyMAhIaU)yEs)-$@js%q;CE)*1$+)i3(G1fGX)<!P zZjBdI&to|5HY+w4Zq;V?JeACSuvK3NcVy{3)I=$81RCS0&@u<Mp}CF$C{|<HREE!w zTg9=xB$gVTsp$P?VPtf2_rAjTj1*HVQ!|1j*Va}Z`oL2Y+qTK^B=CJa*p$_8i}CaJ zU~JHR3X~>6xS)iAG>Uv&t9iBB`pU{;6p`JY!3%=t1&wAmo=g!0$FmwM-Nvw<Ge{ea z3YU@7g;HU(Bq}nv&0M)m(X<jzPwd#8EsntH6d*L|<oLE-sa%O>NECI0Ff+f=dL<@2 zCUC-y+2?LtQ9^ppM!4-pt0GAmnQ3E`JZx<W-$aa^#>8Wo`T<P2k5u9;b~S3fVMk*j zKN9L2n7%+7FGcDEnR=4u5>e=_udk9c4**UiQWN9jsz{Q<8WwlEL7*^+M8*q|8$_i= z@pmJlwvWrSbKe+AGJ@~_WHAragdEGlxXoWZZ)*KSCdct8ycR8AdH(E`OHoLx36a81 zk$5&F9((7Bdudg>QPn?v80Bj%x2<a5xqm!%vugA$4_<u#dTXQS>@CR|iGJ>8``WsG zZ$&vVlXzjaGnM86kbirwX1amO(~oRVs5}L}alUST>TvGoanZl}tG{~Ui6_R!#ugVB z;k7KwKnoqm0X2vkn@JM92OtN0b$xvuZRv_4pzg^hpS*tkI!MP_t@bW-G>pOyzJ{?d zVy@{9n!Qz#kHP!{ySTMJ@#D8emZ|O7u^p%gDEmRbH;kE#xwbbsesN{}hq|_}Ql@TR zZ6%YrOhz#bRAq=}G{+e6?NKQ<ZyNXecABB@^z~UgxHUQ1#{j3{A+2-Va|#rd@^Fu& zs-U^H?>U}Gck`uu6s6P@iP~uTuGXvDAmAuW_vyYT=4b;92QMg&Ez`u0<kVR?HImI2 zqws-lvriH}@EnGwz~Y7hDy$X-zT=>(IiPbvNbkDuXlSpp@+Hr9>znuKz2?~T48^df zq08}jBAb+zwCmX0_aA~O(rY&yi)N@xYUVkD?&+=LmVFYOhilawbJ)a;Ab~01w4Y38 zHa6CN@a(gOrhWEvzYR3_%;_JM%9Y8fZQ8&Tg!@xj*6eixOyiYl<OeMHKm*N77s#yJ z@>i0%iXbX_zeQ1`X}O^v$uYjyst0f*p~nmB<zfmmM>O+0hKApF{P+4W0TTS|#hVMS z{BHh408gYBeHte#YP^dvSuh+x#V~dc`mcOWDlF3`;jkic=kJ*HFIbbGC&oU{M66{Q zE6cZ2={%V1VYOA#vo#!r!TxM>brjwYqc*qs3*BIZ@&>WpqpZOAwinzDPMiQip{_05 zdiLqRJoNB;br>4Gzc4#HHM1>0GWyyx-x}ZlV0i>Izt!4I;ndl824Tl==c`7?@W7|R z_b<J%3E2D5t+wfg@S<n>@JaDut8LBlADoU~S<~QqQ*!}?Z!Y%W-hS<9ahTnRZUT-k zGyuT<-`_9<rw8tiVVKFu$q#+#L%=Of(*!{X3<oWmF-*B!wuWEJ%gYN33!n^PhMhZi zuGwsU`qQ6=$p^2&ccG%x!xD_|G+2Q_by$$_5yMhq(^{%vd(?QQ-);SLp#VAn-e7b& zDdtBgdzGR^nBEZvLav(3(EY(T9phkp;$w15GEEJBjUmIS;@ARC*l>DDd7Y+1Gq`9* z1K%rX?FURfAJ08Nuoxb$<9OF|&|<yY?<A6+OczHn?5tzit_^d&8iJglI6;oX-Gw&k zc3V8|L=^8j3WdKG%l*hPCe3~^Ubr}D%v$C_P=b=IwAx)3)vAjRD|?fH=fib7;L}aB z->thgofj0Ez9lQiqKJlrxMlgiV`zh9wt}dXrSUR9T)WC({#Rnz*F#_EY<?(+?xh7E z3pIjZhSm*54Vij3l~lmM7mNAH@e1%kn!>HV0mL#u1?K4U=Wh2p?ty!E-*fN7Vzv_! z<n=3;S(cud7=>90$`cF?xFA5F>sV-MhvI+=a-s?{7%rLRl+Yfi@lBlA+tTX<cS%$a z!kwKt{qpqo17k&A>#bq(w7XdM247K<8(xpLqX)bwC#K`9Dq>^-BStW)!YUYJ*YVz0 zBdKH;e~03DyZ(mbi7cOjnZ~hfGL>3cUgjuI5QQN4sSp{oD4NW<o_}MdC-dC9ugB;v zR*K;xsz0!Nmj6jKP4rgcPTkQ5hmJosIz98|i_g23RVY{FcmizFJ;xu<jgMbD{UwIW zW1-CR?^NDmv*+BX8o3w?9uJ%$;Akw#f9p~sB{3q0787}zFhPX=zvR6KkYv|&CHTEJ z`O{~4U)9~!-7wvahG|#=1SpcA6G@1qq!DPeF)L|AZD^JwX=g?;p&gN<&@iNtAw|k- z<N%3A1mOtZ-k^O~b$OSSKEL<>?|oS`FeIgwura%{8HkEPc2;Ko_uskqocG>6w--ft zhWfA1u72jhQ35SB;v7wG>%q;#%6BU#R$J~u!^z9cH!e0GIaGernKI&*TW*=1orNJ- zUtgb^n)=0G{KY@}vp;LM+W<?*fjiH`B)Ij~TZ_eFsf6}VA^Sc0=%WA=(1(MAgS&U{ zR$sG4`Q{O$QU=+*;~p~naxm96c~S1IiNyp#zUIs{<$GSEUc*RU<=`r1%X@<4&!=%Y z#0;LkBPKsUafIiGaUxo#Pv9|$ZOGaQlJQ|QMQsTpX;hyr@RPJM>iQXi@x!1CRK(V8 zmK6j!%W@L(kVq)o91-QOxyBQ||A3d0Vanx{Y(_y9&qV=aaU&twI2I}XR7QOw^0M95 zJL8Cxz4LN*iQw*|8L7He)eW~)R_7O10?#uHOVw1P)9D)+92}WEee#tnmpAXaZ{PHk z8HY<aeG^IQf#(2rihZLn?2Rh?m6IfznvE6hMNE0pw|D97w-fX@!<fLszk8(aJJnTq zgxW~qSP~5M7l9@ihA!~L9Y<~>kat*c*IhGPTUJKBmZp7zoSVCPwcG8$M1Sd}qrf;S z<#Mr<-`uE9WcrA2n_-}S0W^(zXeV*(*ceA|;gn_8N2J^WP<^9`Ao9>d55dQudUch? zU{WzDnaL{`JmwzVJ;bLk%E@0PYnaarh14`b34E@Y%7@)6f5~;%!abiO1c$2rX=~|e zFZ1(^Jg~Wef_UxfH6nKN1I3*T@w#vgp_G*`E^PPG;163AO?s{dBdUwa3VXh>uZJjd zL(xj5^2jL13;PZnWOzZ#S5T2ZMOB7oCGAO$lf&>XR_G^imwMB?r%zo$DPlOsU)(T( zcCI$v4;(0c`Q^=z9qwCfg6xQr1RKin6_wq&Nq0?ZOLcd5MY8<3<Ak&Q(pO)t2XP8~ z8s6lk>!@qrV3xbIX#pUIU%yTRc@Lx@<h^e1F*Y^^p!&>bKJ!n}r6*3D0Gc{HJPhfy z*=*+X`5(+25(eY=SmRO|OOQYZ5Q?JGX*U>_eEm_Slt_FtA{b0Ite2bavlTXz5+M=w zca0C=Kq<Wz;3^E)7`6s)AffeiAH!s1$A+aw^M*8fh!n$=uvyZ<Py%sjPEiXJkUHWx zfQt=W6Q**ETuJk4v4!J>>+5V37)0VUTTX_TC}W*<^~eeZe32=CE5WDR^@mwy6sDx@ z+@fY*kQ6(@auL%X;*FM0T)0xxw7e`296x;lOOvKa7s}&?%M>g9u91z?GRx0d=3eBs z%$9RS5$4wB>Nc`JVupz18q0jG=K=K&y>*b4as<)o9ihbEa9Ri=Y#61Dw$5RR<G7gP zqAsEYvbn*~GD*-sbi9AaPXlRttHz0*ril<w;NLEsKUd$X9zJsC;MnAa3r}5}o1fh~ z+gHxF8dY9I=f!zJ8XVtac0B?Wb`coaG83~P_Kna_Jn<Jne)Lcnb(8JC*>|Ia=@^@F zE&D;kxwXiB84p%${=+eQQ$iF{MoU^}_}XvyTYrPqTcL7GiZ2q?UnadPaWWe-Q$~9| zNuv4d3yQ=~PYfizF5PcPgBehRQG8*!BmU4MGC&TjfT)P>paxo4qk`bgv=uc)V`&^u zZKE?bvpbF=L)TM8QwM17Y8-sEuY9;`lrX}<u=tH2gzzv~6mOqEqcc(9A=Tb6C{GlG zpS^FmtT3n(F^26Ql%Aby(-d*flr~Z1ADYddT-Kd1zGFfa8FE15-nJ`uY_VHb*`X{q zQx*@5pu{*{;DOD)aTAZCo_Xe(C!c)sLm&DONI@VBg+k%jv18xe9^CQdhTj3GVHiRt zgctPew8E=bujX<&AfliD{O5n|*M98>fiT8HG0_U)Af8fy#)uApOrnCFY!T3i6W`X} zINGs5wtf)Q%jG_Sv{v+IV4jxCsCP=EdW2*Wj(;)1Y7)E6GL7CJsh&L%di`>?h2bk0 z>O{I0M;m^~A^S5DgCW9Udb%wVkIm*1Mz93M@?_*ieu7DEt1O9^yx^k3Oi&!@x*nbq zReiI0^t5HgZr6}_XLxEafB62G9uM86$nwL4gluZHzhbSIOOl`38+?qv{pPHw1{j&{ z8lVM<^W7%X`t?II!y-cv){|IL;4>`F{#_U{in1HWvX;}p$$%wG1a?9#JO^Akj(#P< z3n^)kM3|%uhR0~X>vcsv=uS1;p!D705}))sn<9tmIE|v1q(q$9j{Pdh)*br*&4Lm! zcovt3`gl>(6b0@hFN)3jCgkevtxbyNSuv-kB*X9t@_nj`QWlh9uc1x4-0I|53p4bo zAtuxOjm?X4W}q~^PsPMOkeFdmwydEN|C^~FxB1Ve>H(SwsMJnlKdHRU>eR^9-^MXA zma-{k;7*(nT0l-xoK)nqAe$Y>&u3N8FTNkVK@9>egK&B7dd=|g+z&k>6U7)sBzp&0 zh)ZzScKWEk7SFxfDA4(_?}5;byv7#r2Z~6;AnkPP<-u>n@nB>7FqYaRZlJM!!w0Yw zv4cQ(OqaiBG7kuZpL_dJcRQ7%CW_xq!H@vq=gyyecPDWFpbY=*{Jw+0@4oU44-kI9 zH$d#o%*=r5gM^mNX21BwFZT8Ijf{){6ajCxjVv*D5@w}RfnR>?$9`<589lIz3l}cj zefQlr-gx5=OoKQU5-`1)IE{OY46N^fRJLSAf?@Yu7l491k&`w@$G|jU?6|m}l}}Gk z#c5i>VpO$SD4q7a8WuGLjli5ZFsEI&6a{(TrHpQiz@l7Vm@Ra+7w4{CS=>K+r>ctG zPRq1_o+&20r)M}uRZvO-q)x*v_Kl<UG;b)5mhtA7x$A9KB2cBjV4U0-|D}zezGal4 zO2nBBt#tXs7qb6nm<j+&%&7t6in}V0o#FL5wjEB2B4#I;N2c3R+Ux8GnUIIuAI1Vp zq0OHNk6Iam7kSzdNFu6}3G&WVcqJcG3M0VS<bpUuk}Xl{2JUv~@hO(UQUP#9(P%v# zCqVy4$bmVD6jhDU;Y$x#RnIIHnUNAey%LhZbrQ8&D{$<Dk1XUtaC#hxSP#RH803As z3z)m(&U-+x!nD-84K;%rX!o=$@MM~2E~=%ADJILAM6NacD8N&)SgI5UN*J3DoQSkM zQo!skm7%|ZV?;~-btXTB`|F__rD&NGqG;$6`?ZjaV7drO5RfniVMwR!1dv-%6h_A; zfPvG5AH05B;yY=u1ZnW%N?Sr{F#Ta^&`)<)h>-%f)eK3(<3$PRbkFa&=Zp+YG4=qe z1PWv!o+7(<f@D*YP9sH@pQW&s*490ED${fu_3Mee|M8_v2M-?n)TchRyu1w5^ytx} z)6>(x`m4Ws_Uu{sCx9QI6k@QZX?ynU+1%U&pzhtf7r+U!Fz#JBNJn^wAM*ZmoXU=# zuq!OVshpYu^NX9tR+lHoC9-8$EsEwqg<rdTDsq}6$x)0(yO#*|0@A;PixaeA8ax-p zrd?fcXdIg<9BF!@<5q)s!S}jEswX}(cOl$+*vn~*K)0;=!t%9k%Q8V>tVR)t2An3k zmM@Yuf{1E*@cws-9EZChk=hw1KEsBWaY&wMcggAxH@N7758X6dX6x%ZlQYj!^z)Qi zz$g~W0>&K7v3lE@a!-2nq)7x=qIx~J;29E$TZpZ0&%qGG8NZEL&7Bt$QH+kElQhoI zq`<|D9J4B^aw&5%7L`mP6JwCW<v5ZogE4Gg6|!L@N0ERNA_S{}v0|FW^{plDJ4*?@ zN&`HJ5}K)ExUju-hh^l3MkoT4nhlGhkYJIuLLzG*{NSTGjt4-xp$}}N=~*aaq=_JE zz)x`eycYy4Qywj>7;B|aB3R>W9ASyeViXCuh51c#ia@PUwAW_;H#$Fsd8-fyD2m*% zEQD*N?Mrmp4%uOXp%UF7@|+juNO=N_O;OA-EWf$h6eK2jW3R{rRj2jRpzh)MA6hWs zM`?!R_V?34j96&zBqN@r0OJs77DOx5qALx0j+QJz2obQy7@g`(eFjgLw8B};9i;I| zj@m%Rh{!=d`5zBL$Y#Jozx1Uq&CbpOy3U<Dck|6R1J$fntBpouU|;}fs%2S#KzIg- z&26{c23+*~`SWm7;SZmF`sp8jYz=O`kPr%{hp~HX^NbsG`=w$(ri4bq6OI)%DGb=V zkm2HEmp1dVKr#Bp;(1oYHBKU!#KX9H!_G6^3`3G^W!o88S&J3+TnO{RhwMt^Gg8XM zdMj~!VOUJY2C=Rlwk&L7c(BqpT(4I**EdR)LMaL*<XRn$kqkl6-EJdE)RZZS1eZiI z6Z=@|W4<_;Z~v>lzy8c$7vd-!rJnk^-G7F`EW}B;!I;&B%kLHJNHLHg+QkwNZCfK_ zBD~i^2ghg{Qh$OPTt;ZO0x|@MULwGJcwQhx6s=*xA;M{!Shq_=tB~wcl1f-E=0#i- z2#IGz0p?QONKnaCE+^5M*rjMxl7Fw+5g;RCI5071r{f|rfJ=OqtA#=Fr56F@*L1T} zDi#NZMlhVWP2K1=luV8jB$gAxFfjEN!*Y-v(_R|@9JPp&NPJO`*TqiCu?un6^U3`x za}h)RS4l|5bT6miJ=M*~ksaNdDu;+*3z-n@?4MA0LI|N=)f#^d5{E72?SzRFHjQl$ z8xypVBxphW*<M{mD~kyEZ&HI=35E>Ppe+2*f(c+%5i{J^<V2y{p-_`E_+!szX&8kF z6~7S_aIQ2aQH^s#q=C!O6fdApjJ>X)9<N@#vbNkmI=RUUwBrX5JSg@DY^Hy=JJM^P zfy@IS`F{e32M!##;f5Q4UIOGUUAhFc^Ugc(WLXxT`Q|sjx#NcqgcDu{@H=th#MahU zZ(lWl%z69mw?i`g;iXJTWCcF;`077wgqFZcCt8<pCWi0jeuT~r3RVb0F`@WE-_X=< zMxwF4p~W;ErU)@*+@MJY4RdPT4vF0j{9w5}kde9d%@vjzqG^s3MMwmW<3c3XhO|O% z0T<_n_wwvoh0Pt*GDJx7Qn@%RmN~u;En%>9m_XjZw>_9!APYIdU`GcR@mX<Ya~fmH zWMcI7pZLJc{DrR^KUu%!Q+MM1m7iE^h^=lN(y3PHlV!!VB3U}g3;MN%T{x$f3R<tl z6^2TIT8&PpOEF5JTo!m9Cx}M9Y3f@7ZVu&E1h(O}St1M=+Q0)FPaK#y1WyyRgv^ja zA2Xe_4KoQ(XiC7CSpX#7h%Js*1xgaQ9H@yFuVr8sq`@#v_XjBplMo{k)V!AJ1o7le zH%;?Ga`D22>(>{^qu4!fdoW)pI7Xwny-v||-|(&&J_Y;UanoL^Cdm}rZlCsPdq7RG z=DHuxk~~Sc>!}|Syb#4H86pQXlA%EtU<n>ldnlGpzth#H_f`qc<(T!~W8AZmxQo(c ze;tRx$HPvT4n<xpP~`f?dgyhFxgpPcqZ%Y|P^rq<`EA3;f6$^R-rIo<LQ0?lf|)zL z<>!NuoTNc;a=kE$QkrHVXmF^r8@fh3Z6=P6(?Vifwe>njOI>}=(VtyyWUyE)7OSE* zi((7%DtwdClkfX~_9uV3UEA)f^zFN0KO`lzU%#^Qh2Q)Ar=NQ255D~6{Wt7iUtb>_ z9DEBwI5jo(OTY9>U;p~oVL;EEIdkpWwY9Z1fF-~TpqS6+0gXUSAsH?$EnT^C1)hhr zdHVEe(33y)Q$O{O6%-N?S?q>E9TX2s=lRUMTQ#|qU}ZrmTe`JXZ%`rJ*0IsCy;|m! zRsp70!6*YGAM_Wt*vwaq_<;^~+wP38Z4#%qvDxt>JOz{wU#saX&sN5iFvL8M)c7nW z*g&GoW1eX3Ww}J}w$%KPV~+zP!AT}fATs&@L!O~|0d?y1Y{AF3rSXfT@V+P>R<tKb zvFdvd{oMV#WGP?@4^_KA;?R~sZiD6#N@ckqMmpxvnyh_`2ygB>2h=hLpAJ%up$V7h zw!<wFojtCwMFo-~!Fr8gDaAA{r;m<&h4M*s(AULRuFWW1D3Y6OyqZ{xL;$k{WK4j= zJSRD<Pk!=`)`>JM=IQ;rR7_@Y34ki4;tHvWTA^Ts*VoqMqC7%H13@%~r40;EIevL` zxNO^p?z-phmF3m1JpQ-0-Qmq$y$WBfR4h4;2h$i85E9?>v%*n<vWlf=D}$T3!(&z* zW5~$XXePj18xQ?d)X@H?AAs&;Rk^pXEF^r9NZr@0-=-LojrEmG=dlFSTvC%Ex5QPP zXKjz};{AOx>sh*~w<ks`!E34<cCsjZrCgy8Wa5S8mc$EhR)ag08DSWKzzajaRJ_V_ zRm>hx#H<^}Dmv8+>|GBXL#C|y>M9mn*+QYVwQRJT!&A2`&Ykld%L%w{=d7gST7IT! z099(|2qC3toRy>GO<kEFtO5XV0<YKWfI8q65W~Lo#V<bd^wR(U0O#Ih?-Sqn#)A(% z1UgNY<+lolV`F3QeCInq{pnAyuC6}v$Rm*b9)J9CK@fKD-VHyC#o}X+JqF+hUJ5A@ zF!_ZqeBt4TAO6P?h&&YWgi$n}{h<8QuQrbRk#q0x2X-q{4XcA&60hdzR-MLUAEKc4 zs#Ki!JTWD7uhAc1cW3e6HiNQW{MRxcLuR{ha{0*<S2vpdS|;NLajRpAtgpz?X1(*l zyLNx8HFNP*kztaO9N(ff&mFxE_fHYoJMO&0()C`WY+MAUhg_#XyT?5@2O@OGF!fZP zKN)zhs^Zgjd#`QX%_x`^nOJ>IAW2yzhcaTXHC-ds8!DwlP7%vsecE|fuOz0x(u83c z6vvkUcM)Oe9do-$hgnU_^(hL|FKxA#H?|a>ystd?9L7c-Cvc;5%1m^E+e42vlX`@2 zNW?}#)CH^#G>>Vo8|~`RGv0xl${i2XrZY0+^<~;A7V~`>tX3l;o=hl<o6ltXWqKyG z9fIMoq|<GI9+e2PH9pq=Z-4pU)wi3cPQF4j+|4)cA08dwInPCY?{p!|cRBX!QvNu@ zQ<%}lq5w6Xk9biqPy@&~M3p2wn*thpEm|<tL@q$PyRSbWm5?%B{Q?zUHHkx1wg^~f zI3i?X*VRH?3<6756fDWn6d8ocYyUJ!B8ui9XdS<}Zif^S-Rbx6iNZJBDlZ`L2sCCA zr<&vrXNbh<lgJ94CM=<+W``A3vBbqLzH#YvwYn90akty-v^$nzss&Ta_64da<Ey)F zktOLNt@yEO<7~TQcEch?rgR!Jg#E^|qd@#%u4`JhTrORozyADl&(*eT@JkQ|k3RbG z`yY7V?3ptsPn`VufAezyjNN<o{Gbz?|2%OxIy$QBdZkhUQrhiyLF_FqE?&HNvDIq9 zJj-M<fc)+4?RL8@iXtHJpArRpAF`;MvZ73Dqsp#Pb@zx0+)pw6lw>ufFdD?PVM*C+ zy?^XNN=O7326n&Y|5R+hDjL5VDIdxW9~NntAGjB!z=wuP3W>ybGCq*YDO?=+1377| zFZ*AfsV&w?(~&RLn4Iy--~RPCP8>heXtu^j`-|mb;G@33F#;3%ffo7E`T$Hzi6T0z zyu`^%o-t^2-@_>a7MrNZ1NrR%_L2a(0HUp@xVMZO1u{j{1a$=uCMZgy2#;fFre~)M zb43=Jd{&c0G4idhw;9lFj!$jA=6O*`X#%x(4I;r#c013NvKLk9x*!EyW;l^<@r1iA z`94Q`XUo>g!fGi;jSi(3&Ms^%*Vb2!>+4a+fr*#8n@uUzOOYwN7U8uSVug`yoGf6t z2n0L!y$I1UJ_?C2Le^ELp^s0_WVBp}+NXBWNu!-bYl00uN|e6I$$H%M2xr^v1PLaD zWQ8F&akGwE#?m6C$}kA1<*&kfrfqfnSiFN0i&)$%UIiJ(SE9~!b>lxJspiR3@(|%Q ztR#vB(f8xYK)gMZkqIoK@bJx>pMmG)N_~bMK6i0j<hk$o#}P?_N4?twm}f|zrvspl ziQC#+A;$AVDwWd|AjjL=3(vV`-RW$eJpNL#pxJ&}8k}}L-?C##Ee;G0$=QCTvR6>@ z6MNS(rT$L$A<GxC+E}?X61g={s#ppH;rrQJNRrg)w8zKyHJi=#we|V=`N84g!?)cE zU%S^ZkZ>I5V;}qRo!+`{At@yY;_%_a2M->6qW1t0KKkgR@agBzpGWPue1Ca)xlkw! z4-W$i1+w~2H$6m+b(6qLgWe%5+z!nYO9hq+JrgK=zBCbfXY=J#UO=*p>li}2bw8I= z#AJ&Oxk#D0v`~w^=JZHmdbm)@t2iD@JXURn9V?g|%(I~Nfx-nw+ce+4D_>Tr$FH;r zCb<9phaAt|vv<#x%U33*r+eoVduBlR_c|7%&eloBvsG4}51f8ee;37xanOS74S?+x zCqlH26|L;My_4BUyrmc++U6LiT#%$S*WX1^pznbxg*Z-%Qif&)l0yCZqR_@j;G9yH zF9&*66poSXc60OYI6A0G>nXpHMpZHIipr}P_6n9%+RdV6mU(f;EIvr(j_kj?=IYCL z?ww2Z1<zjFIDfjndgX<ul1wrG?)ObxJXakk)DPXB#Tq20Z6#zTR*QVTCCCeYlC5v^ ze2^8{p_z&4vC$ifWwfE?yH3v*a7SMWp(oSiGeTx9acI)oh<)54Zk5S-GU?($3lC$Q zV-tcRu%4kCO<{@W+n6Q(Br6SIq48}bQ+$|E!p85A_;#0i2nkn0hoNFcIt^_*9?uuE zNgTO>De+YF`Xe%NgxX8t1b1O^89t1rh%ii%Q3Vmxc)$`agIlN-3Qi@S?Yh=fpFEKd zI@`z42@}VLd#TsjD;rD2lDygQH`Y6{nztQy_Q=ClONWG89G-UUaBCw_rI+JmP2YTg zCe$dn)~P0f405s*g?ZaDfC+ye5CY!=^0~UY0-Up4E`urq?9I>3LGl^zJu<+?GMO0l zr;F;fx?viSKjEA0-Me?EDx%Zr96E#?pFp-ja?9m%@MIK*gF{1r@E?vC0QUX&-w)Im zAP1Zi;Md>ZKQ}iA>J;)Jq&}dm{}K<yorQs&=2eCh*Benj7mtj;68IL8QdS%9Ht!H5 zHjS&8b3JwdI^x-DD~-nH@hfXE)o<QC{*9v-K6Kwc!}7j){AzzOOOez-K07fU?i-Oe zyGh3jMvK~LzrJ*>Cg;XC*B9@+<FL{0^foMUjKFppcj2gkFdcX*O`TJUS5O&;-H(%H zl4^QRAgKk4;X1W-ieb_yW_g~XDc9~&B#%ywbAhXmfs_`rRnn;2E<=!%sAfrmL9I;V zz&09T;IXKO@NfiJ45LwHK+45&p!xo&n4!aTOqM1C*TRyrW6g)&X+doW@+CKVvD%V` zEBhRGXtSP8iJP;#-l3=%Px?1Le6_W5e&~h230qgzUcD#~-1*C7L~;XtoO5+;W~4?m zm#}&U%VdFnwyKekRdK1JX8T!3?6%68+(Cd)nrKnT&=kaeCndfq!-c0D(Yc-)t6lEX zcyTbTy@;eN5#j*|LJ?!Q1Rd<=7(T^9mtqU7GDYG+7{b6Hv(|_$5(|GUT3_+;*+eez znYL3)qco?`YfbA$X5hVw=x?qrFq{-n843t(FAD6mzJ&>yE%kLx@6ram9q=EI!)=zZ z0G<qi2`ofz3SLN>D;o<}GjcpMJbd-l&F$??hSx014+y!~KQ&X}85W<M<+;p=AgVC( zZm6+^@ig}4=eHpr7v#-s?j_e4a{U>aHE2d5NXB*oFVNLou{2Qh9rOEu@RJ|^IFP`> z!NIxtxp%+&;h*`rpZzyK^Rs8qof8G&FaGksHyX`Pec}`E|G@i!7Rs{n%F8c93<jVs zt*-piXa3#n-q}xl{Ns?yKl+i6y!$;5|HO~~1fcG7pZnY&e)-E!KJ)a+6DJNH`p50q z0EZv{_{VFt+PQP*4jeczG&FST)G5e^ANj~f0M8%@|K*Fc6k5vX{H=>dw2_gQl6VcL zg*3$5t#{DE2uXJnj13|t#fB+{9w^WPnKRwc4j?xryGDvY2lARSJ23zvB?^=4)h$YK zKYUoeww)6~|Nfh=_KwXSYU$M2NGY4o10_QS+dUk{kmgWq$2?cT!Yldye@J5?@=KDo z7&JCWGEWkLXPbE?#|k1aI3S>w-jXu~bfyRGkE3csQDLjA$<q82l6Ylu|F6-s5Jisb zb|c^EHASI-Sp}gVktxHe8A;i^{u}M~Wi59n#b|hHqjN-%(8+jht0B@wEd3F^X;M^^ zCDtioj-(eV*~^uF*0+nkHxTLr-Eg39@P@+d4Ory?F0!t?@>d1&@<45V{=${jYs5xP zIy0zda*RYbApzZXd+A1oZ!OZ<sDVdI6vcAc90X^nC_q9=6TGX}>|j%?xEX@PHZMf= zwn2Xc>w72Bem)5;iqp}mA?j|Cp;!VrASQx9_v+<I0SGw}+fmGO3>R|)Y4f65|8FTF zcf7u=7ABExce5OC8y4?oesZKD&CP9kwoxhwuGfiU4(<zL69kYTpQNQI^v+$r#w31` zumI95P0~a{A#c2TbKyEV{y-CbqvKmV&tbLYmBo5D7@Ih#Wc&5)O+Svt_Z?ET!30<R zz&CV|Ocu`%8=bl=>j|cuICeav7I!^-2q(sa&P^m+N^u?a7{+m#Vlh0mI#t(XCAhP1 zUJm-)uYdLz|M!3U;UE3r#S0fkM#lz+27m7hzyF6{`tpDM&EG^l4Jq>c#S4#o=)-&V z>;cAj=JaWXVHOq^Z@lq_^^J|omoB~i!3Q6F=)q5X@{|ANv!7dETl@TP|JF_WZvegL zdfsy{JkN35KMyuQM}JVA#1DUf$lTso<T$q15EnJmBuQec;nA(<O623&LpP^vo?&7@ zV6*xlBY?{7h9M+CJVv`R0mG&Q9x@b7lE`_|4{VNA!-S5LSYRZA4pusgjkbv~W|qqg z$U}5Q)8bcgekCw|oDugM-OVrxQAaUUL4(IIPvVH>=p@#BYq2o!HzXa@mOsMsO||^@ zM*U$wI)GvA(Dw>`W1t6H+iNt-0_7<7k6U`v>edBGqUa2-rYD~L#pl2N^38Wl9(nuc z9J>&BbwT7w<g|yH<FcGcvl6mtASp{f`pUDvT-);A{@#zM+DAOs0kO%_c&!^$o6hur z(9=N-PDsdUiS~k^j^kS_zrhJx7}-SUw0xChZ&|$ZYLt?LGan|&(XGuSHBVvsoV|9^ z)6dMGS@gP{kW@HH)imy*2a0;#ed(pG2i`d-6*Cyl1q?+L@<gsckm7pF3N33`=qAm; zi$(+K9xQVk+N!8OtNMRHsiknMO17(Ewx21fj-|yBrDUo=N8NC?EqsEfny7oEFbL_N zyYMLQpR|&(v@po$>DY*jE|bl!tUDj3MnCGbmt5B?<z<FS<H+3UYz4pJX#mkm$(D4} zKR3TB1HDM8H~}Cvd721-P1aXj%U~I?YlTAx-x1-$l-lJ4DNfUJWsqbQED0mvP5~#X zWf1p~XA7d}7_~4kSYCjMs+;Mx`I@PlB$Z4~mJ0a+NtSH0g^aCwJ$->_ClSi!Fp<7b zCY;%|3w{=gg^Z?UbJ?Kh>2$}PM;`mzzr8+x{eS)0UpV^8%h#@6d;IVJ?sK30?0^33 zum9x7e*DE3UtCyTtX8XieSN!k@4D-*yO2#rE(=^}-=0~}mS@ku`qQ8M)N2t4R2K9e z<g_=N`2y{Pe+AsacQj2?Q51OD8xRN#+4DSL$gj<cudmbn{<}S($QBk?XjT=psSfuG zn~QTd?rY#_F^YdOCFnHWj$?H0mckQS5;0u$93zRzBnCaHqc$%g5hoGFU<}R%p*`O@ z+i_||xm@IC6}*5aiG%ZT=Z+k|5@WA6Yl9^7?HGp+K!+ehLYk(+K#u**eBW0|+HS7D z184U$?A1mCrr{!<%*MU_XV9jioQ3b3$*7Pw(>UxI6D7KvTDm>R4o=O!YvIbdY<_^H zStpGcmPfLXphdX|cN*)h`FKu;7qVB+f3>;o4~(cByDN@)iUNL`1R*AIWPdp)W-_3= z0^bSzE}9c5;I^2gLzd~G+Ig}`kXvfb^xczJ&OLAH(dNRby|;W=B!@k1JkIYgPrR*= z``YdYx95(LjP;`1nmcv!I-YQ0N?0l91Ps=86SJ-4Da>eKYnu@(4=QBhi@I|sz>m;| z86NP3EOl@?Po_MU#+c_|B#rYt&f|ezpeP3eapnaHCbDul@^PB?O)RS}{RZ#867$pi zz$nJia0Pb5l$2IP9d2NUmBt+8z;a%aNZa)S7<r0_7z!Qy1R$!iASl85%A&qGr$=5^ zQy89ft84X+<wO`Qmqw;0-9%0krRu2rC;Mi`cSk7=JlJ;q#PCy$^t?2imC4lB+iL`> zWflwN30-elrXHuXmd)OATei{OTv@hH9A6N`m3!ZIPcC0FjV_K_O7;+#CWuu-V0&|A z{U;y&`0Dx^+>XnaFI$HB&WGRi>{Cxa_Sj>m&z||{M?bc3{kq=m0=hu7ec}_J92pz^ z@FO2aUXCLpcN{tL@(VBi(Vzaw<BvV2WwhIFyY1&c{pnpZGjD(J?XMg?n#<-s`mv9_ z7BI(-9XoU8%*MtBpcj6Dk6T?`1)zc&{H@>mEfAkTWq<c~e;2R{XuNjq8j#Y97cXvY zZ4C?z0I<LK#V-OB8;wT0-CkQ;gFi18i*L@BkU}k^v$KlJvCQ(?wwx&*Jb2UPrOxQ& zy%aXHz4@ZTKH$eQibmL`j-gUFKqK1YPZPil^5RY~2L6jvnD8P=p&qmFZVTS4EoVD} zm51a#DwPii+Xy=x3Asq3sVc{>yVe*%YiZ&Ws4Y3xE8>P9YUFjYg~w@ryS4eYD7lRj zfPnE`W4&cw&r5qk)Xf)0)K@YEz@x64+qEWq2}RX7LAGr#2@QzdJQvqCjx}qw*_-YU zqy9K*igE#P3j+&*!#119=q;s!pi>#pr}v^R!h(D!;=veNY(#7R1jZ0y(yQU3X`bOF z&`$7s9J_I(V?;nQB0=`sW>L-_A&4O@*W?B1`17Z)UwV!v7g&73sD6cG)?%zJmF}d6 ze}Wylk5u;#?z@Sf_@J|OCQGfKJ5#$l=WW*G^{t3Tr_Wq5*4?#DJfbi{A>Dbrbv$Zb zjf{;r3{r1H<dzcG2VI`hELkYy808w2te9vI9P>SIAR$LEcRh3)bo(i4^^XWb3dABM z2?;R5n!(a7maSat-k;D|S&6eM!y_x?P~-^-!ZpXDWo_T+HkL8mxqjj7{FQ6I4`MLz zU9(!V1f@)5XZZdDOnHB-&fu9zJToc~;Y=PN9CUP`NMWybBq35)5_n0<v>R21Qz$MQ z#klVWrOGhJ3sK;D4t&;g`O5P{14m?K+B9l&*REnX4Y3jgg(3^+1bMIL0XmNNW)M2I zeb=3LjgF1pbn{LB{y+SO_q_K#x7>Odrt-%hee_rU{r>@Y0C`g`S3dcPPXPP?1Cl7- zbML*wL&K0lKk~7U!VRwU^?mUVzIf=CTOjk^d*8kP`e%NoR4Bab-R~ZM&CwQ6#vt(W z`Mho0G&+95f!Kp9ER{<A{r$2mLsEr*1st-y2fP5%BiVbvlaK@9HIN2(wl3i7LBd2$ z^WKyRzX!rJX2ksZ(#q8I9#P`|^pC$(E-Jfrja|E(R{HjuW>wJ&yqNJED~<x<I}5)% zB$h<(>qu&05WO&(z=<XAV#C~2u>4qNzsSf|+*z{EZ+VLuIxA2ELD=P_3z1)plQDvT zIG^+ySrQbLbxbo`_zEYlbZd9I{#`8Z!qoJ9fxs+TyF_C-n%gUil%lF(4D2_4?px1Z zzIdTr>C0v_^{r(hvIGuP4F}&=k~iDUttj5i=7&IGX7UBd*v%?P+<;|hih{tAVc3lm z&wnBCyoufK3;bPJ+Uc#r<2^59WYC1gf#;ZkXYEwzqdx4c#Bvf1p(lZ0t1~>Ywzloq zY@vKlMjM&lH(u_q5TyO&-+g^;vAVrkV;MpejB_u1Ia@Fs_C~t+UYDIBatBg*C=K0_ z3f`ZyH`m*j=Hj&tyWUKeHj?3iSl}<RofEwGst})&;^Tb%DZF_SW5w9<F{2$Z0xl?6 z;L~Y?L=CDSd-0^VOf~<U_g_ejGj!uck)k}V!j&|V4B!TFg6T(<n)q`VDHoL_TN$-Y zGjy9Q?rg2h>&?}`T3eYr)7W0DRku23=ghe!E8?}vP^LJ@R1T!dt~9fUDej^(!xRIg zF*Ge3bG8qSart5;AsCiM=jVWvU^p4ZRHiU#yJ3>VqND;v0<M<EzHRA(m|^&Q=q_hU z{}B0XyFODamo!b~cyVoI<;s<-lheB(u)+ie#p(5mFz|oG$mai*kKQ>+;{T>5q+%+M z+dAF;&sF?LzW<S}t&LKNX}4;s!1oW7IXUmUw%9Y?G`dY7avUclulM2xJW@CVbZybP zu+?3b$?SM$zd(y2$VVb<2U|6FQDZBU(jBg|o-O?aPL$2gzw!bdXf-No!bDJ>s`~eQ z=7Q0<)v_N13K@kqBuAW-SiGV2{T+twxq9hloN%_Q8-5TRx$EAO$B#h{nHV2oX$&wa zsyT)gdc2x(?Z5r|KlyBVFn{NR|H<f%z`OCH)~>BkG#_EicFP<Yo=}C$fBE|#S2XR& zgTE4ody=F>q7%>Y&H~tLIXvQ`QPevD$1to&F&ygff{tiofBENsT*#O2f8asa2|&=& zjBD!ioz}U)t6n(y(j5;Rwk_kiub&d6^!|tM;Ur}9L5nxeuZt?RHa_|1aWh_j{@m%O z9?$pnt*>`GIyE}gS8oT8yl)6D?ZTBV!(e-7C5%omp%QrsUfYQB{d7fh8zfF(Tn3V4 zk_47Z>`vKf<jdQ9iR~Qsag7@Wz))Cs8;f<%s%&BJU^A0C9cOvkc1&b~Xm719U-!{^ zr_(h-oYR8DmIf!1gk9Hpmmef(HKF7fqzDnGaHk@d#6w6>j-QYed*iS?yK7i)L8QZ3 zR>epLnW+aB$B8U2)i<wmuPMOq`H}^`mx{`uqJ9O#U#PEtIK`&pxK<gO1l4`<+$o50 z*?jJWZ+&ZM1k&6f$Dq@2|DSA)_D@IP_sB0P#kN~$|F_H`R`qMk%bzdj$xdxrmPY#f zi&Ca!>dj7L(^GP};sE3n)Jz*F#cOcbLm-e-W==odXs*k=)~`;8l;nh_k{eKPitP^4 zk+vP2HKR=dAH~uey6tBhTYp&We^=mh$lt}pWa;aC=DgLq(KO#iu>pYxq9{SuMNNF@ z(e>rKI!1Wr<g)|;unrI1ayW4GnW+&)(YltiP&IZ<j6nDVT>)x`BsGTZ%N8``A&ScV z*f6kUl`aiT#VJ;6v=xC%gZ8B>f1RYkO}E`olG8qLJBsLC5jyY<e4C^x{Cj<#ft6A{ z7u>{mb=U4BNZ1!?Rw)$9(=#xctSGW06Hihy#byRa55{qOaO}MlTejvNpWNF8zNzJv zFh1G=Y1EMiwLLhN1@_zFAENjE#N7jTTHM5L`;}O~a`Ks%jA|QCOY;i>iN|NoSw2P% zRfJ}9eSBD8%Neqe!9*JC@bFCu8bSt%YW)cwXGKh3psiIv2%Xi4JQX+Cg|m0Jn}(ZK zxEwW5T*0UNtpIbqaA;^W_0{v&SMZb^?;nu!WHwhR4(-t@(~BF%g=Gql9WpY>aGOd4 zf&g?A5#onfuOve}ysP3?=Z?MHn4BENK{b0ijc9_%N*RKr+O>6bV!l@h^4;8kgbb4j z?WeHJ6LIv2TD;xvuG6>z2yE9^C#Oa@F>~eOMTTLvHa12^#xMdM<@=w%KjF8JkA|#f zd?_>2#hBY=#@x5BgJJhOr5l346*Cp1+w!b7$0NR;#IfFK<VwSx=EhD-&EBj<^+7bn z&Ua3kx^Zyy-I9_qJ1x`e7WyVYQgn@tC?>70%8<h?4$@%h+_8(ESBs*nG*`+NA9f5= z7N1lK=R9MN?YxWO(SZ%aLSz}ao+i<$lcxy^2>8(G7~kKQ$>p=ae$ie?X~1%P%ST@3 zMtj>xP*Yn-R!QP={Mg9Uo)^FQ{MC!UGqL9vcySU0h95Y-V+uIxzekbFdi$!RC}}bo z20Tfcz(2#@(XCzw-xOK2qYhwkugeWkZl*_5zYRy01*XtCar~Pw=d#&s9EC}Y?6XNc zij%HwfF$?(hHs2QEMI=l#Gd!LHhi3bqkXnz0$b9uRf?%&DXrkohW)e2(2uS!;Z6Cl zTJ~?Bx_Ud|EY6=yy+0itQk&~rOPBmhXIc1CgQbDhYhH3~u{@Z|6c{WcVpiB*s%OTA zmGl+Ne?HJ7CNh0KgGpJ!^p`B+)1CKCjg}<FSlY0py8X)|b5<%BvI-trz!#1jyeq<Z zAy*OAY?Oj1Q!KrGettQ&;|v=i%PbNLVmgRn02rKPaEf+)te7n}R<F!oIx{rBE0fb~ zy@l#@AvT&$n&3UZj|9@->$y^zBuWyk7b-`SaImp8Dr%;z6=;UD%}yNofkztM<;m&Y z*+M0af?_EbAp>Rn{|_Jp7O&9OT7IgDW%ptjz)v^Z2YK~gM#N~|vy7(ibkLDKR@8Ep zMs+0#9fQEKg@G<I!!&@+!?-gPzi6Cox0|<3y`PcLGH<3(4g<}#b=#=JYd98{1uLJs zWzqiDoOzmNc-O%y17m_*axIFXpHqs*Y_q@HdO*{JC~7+a+3J{zteii0T2V7$7#+HC zd}eo>B=o>PK(VNT8>kLysp}Xj9gr-Iny*j{fey$72{LvX8k>IT{K?~Mi;H`1#!SQU z>{{r1r~y6A%Bs+)o>*I2zUlV6a;2MGWDke>Mt~xWdZn01;^LU^dV-wec)_&|&$S>u z(!Iqf95u0ta=DUaIU}RPS}xmZY$1<8)R_bFHVL!vJLVuBN)v4r!)9@iXON`g$^IN= zcV1BouYi1IxQM~Og<((3j^}E%ysi(@qxXTbC(S)9?qL&$ZyC9E_1HJM+wE+gx4rb( z^BYte=kl9okY;m&z!FRIjd#4y6=ptYRo67<>4;TQIb%CFu-r-9ivrhtXjUsr)bDju zz1|>5HY?_`YQc|i7ltsKw-P<^1*2*abd*=STg&r-hh<o}7BYx9j1-VhJ4OU(_ml#G zM{~I6cBW@%RaxK!F7h2D8Bn)b0yUY15r|_Ft);)ddYoVaCz6$yFjDVszn`EAdTRyC zR)E->-3Bl4Kvo%EA!$w)kcMs5);K|d;reI#j()#$(%7r(p1=?s{l=vc<Tpd$UYJsE zvT-zAv|;t;x=HF^-X{CI_N;!~skerPmK>UIHRS|?nKc#$Z-ba7%4jh#@Ql!R5CRJW zkOSA()+I$IkXxUl75X9O2focSay6K5>RUID{0J{gt=dMrzRvQ<Eee7hfC5zk#}PR0 zvP6+AaY{BDIetU$?wh^&>Zuo2mpAs`_--Oy&6K`knfaxy!vs}yJujg_rsaJ24A&VO z9~<oN+q-XXximzv$1viBIJwRDdB><5ow{e6s1TQ=VIIW2-tH6tER)X_`$3*TrZhT7 z!_Y01_r+0pr?ow5%|ytOqQ83l%bwTWcksO!e!z3;p64e?jJ7;Us+aLlyJ%1;O12aL z_XeURC@^DU_!!R%LI=`9r)x}3?}0Rk#~#YS077(r74#%7%5tacyzs5(fI+B=6a)?o zHUJ!*cOm>BVj1QtBWz(w+^HS5jl1JeVc0N}+h+L7>l@Fc_SL?A(dG_R-F@8DgTv!9 z)1z04S)Pc3p<U%nPK=XudC{<2cBkVDGNs70yz7%#XO3|$r?L`fZU_S)+^4bwKN``a zzxhP{*-K{Nxj+A4Zn$qeAQh9c>q&jnTiIwWbXpri<ZzKEh(sD1mo}4aPs3>?A~Fdf zrUZ+VECK`CLPjOiju(s+D6g^F*FRV(=Yjw47=ra!L%PG~A%ykh^tXGw!p|tmP{b)I z_kz>8!S(Ov1P@-IY8BV&#*vFbe1e!=81x<8G26&h3bhFJA%whTApHCD=ARtbZyw?{ zI-%($7dE^o!J1b5doOiv7~syXd4Kn+sR^VTqzx<XI&sU6AA8k&Wzm_h2cvm<p%DV( z+BTvytKLd0gzEx4Q{-C!Mc0WH{-_z~TiY!~=`PJpvfSM;AW;%CH02|+P8Nn(%l9`M zHP12Hx)u4Zq~@Z~aU2t#PyEy;S~a~frX9#+kzHrIzCkmzW9q;(WOyZvrK`trBIgE@ zAf!XQ8ErD0K-ya`K6`9pnlF#6V>qPEAFq`6Lny6xO^E~D=dcj)<EXE{kLN|2<zgHn z0#7rithV3S&J%<SF9u==bTR66kKiROlk1bw+6*7~j?r;(Y&i&ypFeS}R4ElIM}RNI z2v;P>m%7bw&0qfJ_^zo^<zd(1Kp8?zfh=ViU3gCrw=5}yp~ovA+puPJ*>g=G4K&Mh zyvz$3pr@?JUAcJm!mDR@?b;oq+IG~nvFEl5HwHK>d-3Ash52iJeSMX_vSZnC?^HT+ zEhD%j><ZFJk_jV^_1s%Y4g%kRXOH{N2%hvgPAsc+Eqhtht_$P^TetA2M#sx>%Mv(D zniwhEG%?htjg6`|-!oPi6okkU24;kKQ8r)nsS;TzE^Ssc_7s;r)L=h0s<aI^ZkfSP z9g*)pG_$l>-3ZS%oGsg~3wT#a0y<8+{zgunl-1GYs(Z1W1GNvaj6?wm@2xN-JL}+B zueZcVfgfPI&ph!DyeJKg4Edh(+EsVBOcdpMi_Cz>og|6jO61kF(m$jz*J=I;CuIV^ zEy@LwX1mQzL6pM46{I{2uio5Xzq4W9+oT}gG7whvXuQBYe$G6)=$u;hATk_XasY(z zMQ6%r@A&Df*41ioe8qiv!9BX{guoFw0$!Qn$?Nst?7H{gPZ@AAMVb2D7dvb1=$>iu zEy;&TT$9zc>r2GQz|lhfh$`RXc<x56reyM48>{nkmm#oai$j;rpKUg_a1!nc-O<gB zjjb?FHHF0^+)wR>UT-Z&YpXDtyn>nuWGxG#BMuY}z$VI?=eeR%fLN+GH@BjNX0WbN zGou6jG_$_4G+!(OC;4es$j5;jI31Dl$;2~lS9jCl(Q!~*kYs$<)Z1;d<;Y5%<=d_` zhLb!+qEqrX&1Z6DHCseR&T(jVo1NxX<XagnM^VoD%7&IJOzeWl+8?L+II`1J%;b`# z%YU*se|h%Cw=3F%j#bYV1_8@7%fiP2*=R-E4S$`%c{NjU?Jhda%u4`lOK(Pjm*NS@ z&;qBlo2?W}hKKthJAz<FwFSLBD%8g;j8rWrN=l)S6$K_i&bh>nVP6u91imb*moXys zoc<u#M^PY0J(8g?JV%n_STyWdgB&##2DGeNYUVnxrk*E|)fEh`S;!*;jWiM}MQR|E z$qtIy{#-dG8rP6rWI^jtyIqIq%g(L%KN%^L0xvvtsPB>6$eEG+%2Ics`huKk%Sp(= zm6-fybF3RWmEy$E;1MSEuGN!<LkRQ^>XIFc4y5sVwvI7I+KzYMzCvyJ5-n(GZOk*j zU4e}Ej2h9oQ=CMJ5n&JYtHe^kv+q)p{4^t6@6_&3@ZBWYjpJ0wmK~#&^o%gz{ULyw zdL2tbqUR3+&;WR=+5Wdo6XqqVWBC&WMr3i8B92T5H8TQq!IzX+LScyy+@x%Fqk>E} z%~<9LO(b<Exo1*<bf@wJL*bAo3lhmu`2TWe)(H|wr>yiARB3?1Ns^7MHtbsOcA2+# zO?_p3b$o10WRlBUbx9I;?cRI*_;Ew;7IGOFDxR0NYjsT#a+<`F8N;vJeA6?SwUwn@ zIS+ENxxJ!f`^x>3^{qviitWZmwm6t84x&A^>bga?w*2KWd5;>8#i^ew%1d*LW_uJT zfw*4no!sX#*`gN`j@$M^&$haNKNlS(BS1K&T*Yh+W-2f9LM_DhCq%H-v9lVVXL+;R zavcLj<usvK9;b!1jU|rF9=PK_V%XE?j{Z)k`K!0w{i_5~p{Vxti=Wqx^_y<pujOww zb)V%S@H6$Tg<NTfV+GUJo55zoT@~{=i0GhLL@5WP6uw^IS&r4U%{I-`t4qsQuU@_T zzIy?5J_`S7ukwS4d$mQNODS5K-Mcpq^iHb@%p7f`;%NUP3UP+rLLHh=^P>_$a%tMD z#!5nX0>d3fz^iRR_NGaEuWdRMc}}Y=;%Q6*>7{eD#6}%t2rT7e%yE+rCc+ePmoPFh z!h#@ZPLm(WUp2zJ>~y?jU1G3Ww{7{%c-J<J)?8ldq(-J{Xk9zou*(Fc-!>E7Fn&Mg zcUQI>3r!Z%xE<hW4^q9tLAacxXPk>7$aoP8?4}bEQ`6HdOW8)SgP9$$?s#@1e=Ag3 zhTef;$S9O4{EVQUagABm-!Cdo<a=5UH9rLA3F*{xEHwu+B=Bq<f;RGRMV(b$P~$+R z-ZBvG>u38_D)$=LR8$IxXb`1L&xPpjDe;X&F-&<H2fP9E{H}YkAErC1GEUx_FJ?PT z9AjC9Ti>|J57xKpjj`e3G%&BNH)KVcnVec$T8;v%T+DbOSx~YYYfFm2(wsmOT$sAc z?uA@DI?y+Q9iWDXM<s#UTwMyo6#!mkaH_Vs1e_l9A^b1P^0Xw;w!K?9B$G3~H7Dnu z=pRupo>p7U`O2_MP&r;uaGXTv7oCpEhDDL_%r5ee<#?F?Kn`)-Nr?SedR8mjDXuk| zZH33luwC11!K_r&OeWI@FRwRSuN*zOvAT5Rt_LaurHdzDe)U*2Ux8G%BuZ08_nGr2 zpUai<+59BKO*?j1Qp=%lqw@wdhc=;85aXso=1b~$=()fl<!s69)_vE?<oi@k(pwv< zSU9tCd0=QTqpFVGg0CI;QE&N*PSNr#X*uC@Pk!~t-S>`;jgxd6vZ(I|X%gWCk0(0A zY{P4l0F+XhWRlnRdxyEpbCfI+Vb~N@(RB(8I_DIowHlsyDFBqRJ$%MV6p8$n*`QWx zIgS+K`aq7H%g&ZCK`pAAtmMaLV~_Y*EL_4O-D<`2?xP7e$}sF=W3L_L15Bh?mQlzd zeqsOkZBY<)YikQF0W~L7Fi6QPg#oQ*D1v7&nna|FM2Clxk)eUpr_XP0Zr^b8!8o*W zaz_n*8*)APp#+GIo+Sx#%*5q5sAr2WVu`G`Z|4LKE+3|`7eb=!0K121MFX=JM3^Tu z!|d3)qCiD3vYOXhn{VanXzu$Zt{nt^-v{3V+jkMTQ(^Sobsds;Yra(!hhKYsESFI= zVdKJLLl2S-b1n9rt%g1}K5ERZojP~rk%w-D*grHhym0-BCNq`3KBMc<G;_^9meop~ z3-PLZ=E$8#SYCv=R4DfWMd>y-LZw*hA8Tx{1`zJ*>q@4eXhl(!eJghCHKp)4L3s=_ zo5`)3<|4%<JXH+5w&z;N3A^XH8X==2GDW4kAjVjZ&x>-Vw+3(kPfzHLy<|*hxHOE2 zAO_AnP~YC(s5U(>n3|pu1%B7=SxpmNI~*LlWqJN7^j4|gGw#j4_hWZ;8vw2cfF?04 zK{ITtwj^hYc#1n-yPa$YvD+_9bF|Rut|2)Z2E3GsLc~YmWk7)~+prvGbYg-+=80%$ z0_6(SB^&tyNMddcqL?g;JPVg2Az_(?fAAdB_kiRrFnp(%2DLOP0PT9ikq{upnwBAO z;IKGNv^;DHv$}jx#aI#Nc`U(QBUYsi)AX-2-<h9$|LW@6z@fpFwXf0PR}~XpWrvO; z@VFPymut7Uc-eOu8sqyi^o5$%N;FZ7C4%&0Lh|PiP0rwyytR0dq?plcx~EJDAO=Z9 zDR-7((7|2;?=?}yIFRWHwy|FA`EfFyW#Jg{odnS%l_`?MfTO5)uz_ai&?5xl1j%f5 zYwy6R5sEV4{?(1BVXci9LHbi+=t3Iw96JhK(4q**I2J@vwlv~8wr!FB^KVhWWW8Z> zs$uw5-K3Q~t#=pKYqR46(<+eO`0VPIAgMeItEg>P*D^9UHZc|l$xvTzPCqRuayA)1 zxBSB1n`a3;+*-X_>L2g;bn4?G!|LrSD5XMqxYO9u+gntw7zBQ+ZJO;?f8Sp*0x0kY zl<aMNLuVJ}&QzDbCdluxtr`d_)M_S0_3}IiOo#iwxVw@bH;O3S`&!-Yw%u-<F(H!) zA&3wqA!5k{jTDfOxFd1Noio3OKLB^GAR)0RB4n9K07o<9v6;n7d+WWsx{6nxoIv~m zBwuW)ZS`~2xAc4UUQzK*t+{3cE=%KZfn~|9c|nywO0(M_JSVdd*8SON`h0IUO_Eo- z7hK1>dE=U47$ERg^D|!9`rxC_n(a{(NWm$`CY>r+M>|P;hZbYqsTW1U1}(IlG6^v) ziz=s>ww=oyX0y8#b}xUax{VwlB`sV|R7F{aC5U9xG&oYMi)mTe@jAOmkkdFk96Wor zd*#Yi6T!8|Y`C<nDLT?k+dyEhfFNRE!ZL4jyiIBJub$|9S(dN|M8OpKqj@>wW=k_! zV9k;cs=`XcPgPGkc<OiGy1&ul9{lj|LR-6e_w&c!e0%%akQT27;uo5^@vtBDA{kcs zb-%oI$#}582(VQ%3C2QJ%9ioy?welSe{Fnxpy_~ds3D%?GObvefzp>9XUG~C2%8zJ z>b>VLOk}>ly-muLFuBTJtfv91@?*7rWyw;C=WjWRcy8Zxe=Cx!X?n}BbNFW$QDIq* zt5-x2K)<lGgd~HwfEcaAC<4@h5QPt?r~P`v{{L@6Qqj$h@y5l5Y&4=}P-G2c8mex| z8j4o4Jne#$sny%TbS#inyS>S*HsN~n#}hj2L~rly_55zD<#}lwNuoR-55kz2R0J+p zB?N3Yttz+Kku^P7B>lr(!?Ywx=pD2iW5aRY!vy&ocb@$EbGUfYXy40nOAw0lQ}YI@ zQ9;>12^y~JDbjK_%Cop&BgYXHeOh@|{g_*A3yLO+F+k>Mbb9aOPk^lKT0M>CJSpOc zjoJbpQ}s(G`jX?mLe4MXJCJ=waP#*u#`1S{THAE}5+{b~0*OU&psQ$0x*m#iOK(Qe z6bOOYQCUu-8KAZ6bpfyiMgQr??}6xi-;0*hb#jqkFG0E<B*6`i`jhea!<`)ksDKT( zqPR@*ER2?lD4I^~4-x!rC1KnVWd0uw%;0<2vuRci&%9We9>sjvNmuNg1jv1MA+}iK zX<k*bEb4Qui(acG%i?UZ0DDDs?JWLO@4h}f?VqeLM5nEh8<#tS@npE<R83||k8&OR z&n=I3I`6F8^W?~~;U}}|KTmtZCWHGuKA8*#Lq%5VE@DCE&uNgQbC?TcV8f=VVRlNN z$`YUqHqBj7m#f*kvS#tzBF{_9^&O6sNdSfswj8pX5L<!^Q9}Txgye#xnW#RW#5_MZ eeDU?)0t^5jDIs2lp6l-b0000<MNUMnLSTX;KBXZ5 diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/img/example-sites/breakingnews.png b/src/main/webapp/bower_components/bootstrap/docs/assets/img/example-sites/breakingnews.png deleted file mode 100644 index 5a077856cc7add93c9bb10f7eedbb33c489b831f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72725 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 Hu0mjf37~ft diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/img/example-sites/fleetio.png b/src/main/webapp/bower_components/bootstrap/docs/assets/img/example-sites/fleetio.png deleted file mode 100644 index 9207b0cb805e3cf9f0edceb912fee623a1f9212d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39837 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 Z|9>`o7|aB%sKx*Q002ovPDHLkV1h4V#G3#B diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/img/example-sites/gathercontent.png b/src/main/webapp/bower_components/bootstrap/docs/assets/img/example-sites/gathercontent.png deleted file mode 100644 index 92cd0ee2ae5a03504a6f81be285a0e1fe44cbbf6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 76560 zcmV)7K*zs{P)<h;3K|Lk000e1NJLTq00Arj008<30ssI2ln?Es0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBYIvPnciRCwC#y$85lXL&BVdYL}6dr_BM zR4vPr3vrKaWE-$)2{xe|0tqD4KuE~tKu!`M_@UmL1Y$@Cp%-H?26y8sTXK^v%j#uo z@2y>@&#b=IdB5*pTb2#EH#zsoz0Y%^#b!L3S+mw(zVd!`$)lsA(y8Oraq9U0@6dkz zqc~1vncgIcq$u*KH9B>iI{rUmLPb%cD4v*@mZT8>;?E*U(ibfn1W$r9Pc7D|<J9q= z%Y<PVRjc(+eEh~&ZoMq<YO*ZPR+D@0df=PizPDH`#Bn@7Kd)(8Pft&hKvl{?5KK)? z_4W1HwjD*$2~Ni6)oRtUtWv3T;`39-spCI%2panjosZZ5&`(bKF@E{~^vQql5Den` z{%;(TX_~64iZRp4Cv3uMwY_fb=)J%A#4qmIn?&82*~TCJ!K-8|*Vp%2&kr)Tap8p* z;-dH6cOR+9DAINPs;jPg;DHBlEwE@9hTy<vvzg6iues)$>FMc5AAMBkqucG`!&a*W z9tOwaOmPJ;D%cggn$PD?vFm>=*{^A!2ha0BqaYsq6K_Byj^lt@`uqE9wHipmFbq%^ z-r$@}CgZwpE|<fH_~*%21L5Inpfu1Ys0&xabwFt#bX-lGkN3r5@nvKN28jaVH@pdb zIdo+smk>k8_(+Pw^aNRv6pj9g4|OvMTv^rmbCuW??=|BDL!D4*A*i}gC}2p8F(XV6 zuNVe6aBgl6bI1FaYr;g5ONGqd7Y=>n8$av1UVmTV`s*(&So4-`f>o}$`t{3~FQ1&8 zJm;KqCMG5-mCBkmYp%Zf>Y<^bFMs*V_zJv)`<;2_nU`I58K#YUoN>k(nD(JVhrqor zyzl}zv(aem*s){LqD5jTP^35Bc;iz~J+*7sE^NRl()_P;fXCLZT?^uY)CSq$72MKp zxA7sM){{>@`I^_f2A@Eb3#I~F9z1vuL;?zgh5=chd^P<1l1nZD)$QH87m~fx>3|@| z$H(#c#*G{CDl`G;7U!J&!zhsTOk7zMb*hTjmV4Jn)iKpB#koo}Kc;Kox2~M;kCRwx z%_(+1*6qaWD24vGHldi=#OuoV3K#LaFIRZrH^>VN18*QZ#DE26gn+;&802qYLQ<f9 zkVIawU@1y+(<fd(vUvH}vk&9yhMC1QZoc_uFx4C1_{I$zHh?Xkc;bnl{NyL^de^%! z$(1Wt;sjiD)22<wjvaf;Ti&v2)vDLN_O*~t?|=XM>-9QN>$&Hii{-xj^2;#@+-~*i z)wkYy>-zQUj~qFI&rdPof2jlF7z6+@4eA6#f;_-xAN$zHKuDW6Z~pnue~y1{*|G&1 z1AGY58Xg{g{`uz@FJAo9pZ@gm#~%lyo_sY(eEblv_z9R0dJp&x!W|@yE8||c+H=o6 z_l<9S1D86PT>@7sjmEj2xPN5`ZB`hJpT5P$*F$SU&6L1${VOBznA^g8(u7V!ZcJ(A z#nH$*4|o~>>{%M^f6zSim}wW|m#KQp3%7<^0)t>YcwM@5DW-G({rBTNPWTNrVVp>| zr6r+v@W52p4<31J&*C-93N}_r_PsU~>+4_t`fIPf7Qe?Nu_#YJ{WQc3Snj&(t^-g0 z@P|L#x^?TfzV$6Ay6dmMe%Z2RkUfxIf651zW_ETK+7iO=YhU{s78*+imfpU7`^yG& z>iDm4fQz1a<{6kapccS32x|~1NCHF!4F)=ad<WM7F5yFvGMESNp~^rl&?hgu8qUA_ z?z`vb=b-~2&B11O+;In}3xtZ#@kU(d*MA6I=hPLi5<5*bj^v45lG~CMO+Nm--kec% zi?m$hxEA_JwgQYQg|5_XsPjkFLca=J>a>*VSX`e}ah+ec32}FDhZqJJVPs_Fkw+eZ zCWjgn==8;tPuPU@rnh)F``GR8o@j?|y{$^gx{J<(u(;yVzrN>JyU#uM>~-tb9Y1~? z%YjQ^K3F&?T+A8F-Qwf)(@)0<P;?hxd@)uNUkTF@8WP_E(*rnT5uq3%(y$F<V`E@H zEb;#R`+t3bP96Vy+k~J52zY=X;Z_0J3=9l_K*24b4g3@6RGcYnD)9<B0U^E2w8K{d z-QnjkAGjbs#H&z!I3L#mxxUPFgRvL+WDSDB@E%|47HmQ(@MMLdV(8=I=~u#rgmH)y z@Duz8=MbQ^6T?p8=r_BIFfa@NcZW^}ci=q~(#znqd{VGpp0753@AYSGz4q+xTn*5) z?Rblp_uc$Y+wXbssA+`IZ1Tc^Sz#@(f><)(Y+>VJ)v!jmG0qh5S6IgQ3WLDOVrlRd zmKZ+-mtwszCalgW$IPkYe?JHB39Sh77OEKUf8CM$A`=pqE6UNMHA!;VM;mjrP#YMm z*p?oK@u_7!b(}i>GY<JTrmYEe7gOvZk(obF9jA^{$A1<$PkvKel0v1dG*4u$B`^8U zOWvLQZ~4T_f4cN|`Cb40Kl=4yODCBM{FWExB)lO1+MNI2Pcr%U4D5gHddbT#ko?*m zWd8rjCelkqt^DsANb+y2a`JCXQ2vi^PV&<K%P%D}`8Quw{`c(AuTj4Izp(zv|Ls&> zMppmE?r2^Vr-NaXD!;fN^2sy7HJ}w^x)gL{!q-gr5a5^J$cl`=lZ?)jFF|L>FW+vl z%<@a9|K;m<B9Zl_KbHCI<fR|H<d^bGzG3zL@|8|Rra>ZXd4AzJB?QIATzEP!BKQSb zkmZ-q)(MtP#Hf<rNR}^7BU$)ZEWQ}qOP1@`H|r%{1^J{Ih&y5#V=0OGBbpI^C?_(; z&#!cK<wf#bkSk)W^1_F5>gq@*949B=Hu+7Imz*pOPi*B$OK@UZzk%czh(Z<-^M$2g z0wZ#Z6OPnVs7@>yMy9CgEB!!`W%)(AO0OXC7Xr{N?EXosn!Id$;wKAx%(oXSyRZu< zot^xe>=qZ3Pa43BJ9y%V8CEh2rF$mU1q`Do+A9|4T|Ww=D2V99D3S0N!;nm(Fl9Ts ztgS0WTel5E(Tq^m0@+Y>(=ZHOQx#RitF9(e=mt*P>$Y(-MNw%1nYb0QHp#=p>nw>O z#gvysW59CJ0w+ZAimLDiMD!|?cPox!k-@}Y5JJYtVx}}jjy0k%j5$uXj871=pvlIu zp#G4j??-VMrFWJ%6;{zz-7u_7&a(5CZCY8&v@LvK=!OcJ<8_iwJ#ssN=Y>H?x7QRN ziA<xQ*(H%gWRI(cd_N7R$V?u>s(x{?C7zv%1*e%vw8V-OYnU*mAti1Q1z{YqFu>P_ zA{nZzDiZzSw>V3sR}KG_1w2Uv#jC1B-a}Q3WzCH>C$>VxRIQwqEm)?h>#C+iTI{J| zM-RJF=wOc$EJMT-NF+^DF(}$8`i%A~j4%%w<8gzSTzRId(_Jwojdp~0??tYWRasNT zKH`NFr|9>%sG+BuDbZDV&*Er-qEm?{s6XK?p{<T248sd!KazY&lT=GKGG@ML<;$6T z$<Ag#ZWySK9qG2cX4UO9BBvWUohS@q+T)N(E(xO~h+`*+{V;ap#0wMbPQ;Xt4Ky@` z$yE`da-8o6F>V^rX&7ZXF-69lC7QNM!dMmzCMPP*nKneQ5LQpuG!2*I06oSJGQ%IM z7CIA)r*V8mvomHUXV|ut&6#!%JVPT$<R}ca<rRyTK8SoD!$|yC!qCGIud)a7ig>XU zIcKZ=IjxwnRl{~A(^GB5E@VKsCMedl4LxH>iQjbUbKSZUhJmVT_-zmbSbtfSKs&0G zN@JolW^k4HE><+!RhgJsRt5fzR6125D#xyd5lx%cf}BOPLjmofAx9?pdS&cD5Ys}7 z?ZgU1tPH|PC<XikA|`VD$P4hHMD$0ZQZXz&o6F^U`U<7qQmIg^l(NNqCX=-=(x4N! zW`a2->ZqaT1z?eccL1A%fnly;=!fanhQ!{KT!o1m*g4P-s2f8gaw7>7$q7hOqfa&F zAsK70ND){7dx1;0T)!JcUPQA1rGwT?S<*;&fl-Oo5{(uM%LC~EQV^mRcK}IQmTqOT zlAa6oVrcfNnVw9slq;4XF?AX2*U-GW>CWhW6O&OQUyf-}y#QlZX!mp-nliu=^2&H1 zBR^@h{gxA8*UEV_Ya0sf2c)dZQj?aB)d%LKCQQ#5C@vTHpd6~fu}mG(j23`41)GhP zisdMfM7kM`Ai`c^B0A|aIpo9lqK+3ggV>49#K>#;-b`t*I5=GD?aycPhM^{r?=)sx zvy*OZ#+~<_x*v3-&;{wMaS#VANZcT4dr{j9=et4MOFBW~NF*XzS;@L0S-NEEGDgQv zeHkN!66*4w6Ucr<^n)!n4K-tErYf7nt}01i;0X#Mg0HX;q*d^O9kgu|CxfOu*Y|u( zLJC=IVr^~H$k-4dm0YQuEBEBey;d$~X7bQqAdSHF{jS?-*0io4>N2@OK@AXdQ2<KA z;*z`vPe>~9G%vC2g$f3$B!MR>K5a`E%;X1wru&|ud%CQKj_>*oFNQ>#R3hmfk;oT{ zmzG~57cFEa{jr8j6l|MD+CvQ!MYx0{(itF9oQ3t}jl)1RnPhXA$e1LSHIS50B1*+K zKK2K<ic<w7j2+A(#MZ~yAn>8=$5>*J0g(%7UhuqO%T`X&EvT57<|skuNm0uSy0TM? zTJvGEffWHGg#-{FQ;4m=K;RTykn}AP67EJCIFvC|xt+v%teVg<yiE})-$;<H3aY0o z(F!C17&%haP-lVclc-h!00NnA1~QVsEh#_;^J6WE^J3Cqm?p_a%34%p)6z3pyHw6X zTiC@)F4M2)im{@08jV)y#m-#Zo|oL37B)ersuV%*syr}ZKWM54G=Rm&46rwljKrUy zNGEjt5JPKriMXkvjie)pR%KC15|IWbDY5J^n8Sj^5LQ@WS<|h+bb?S8W5!NF2!cCF z_tK^(B>qVQl41cJ;Zl(j1gan4TAHuga;9LF`ZMJ|%u3H@g3zzcjr+~{W_7j=4s6Ux zZU<T&OfT$+n8*y{B(V#wt9x-9e_`UpBrauDfR9x129SuXojuwL0_^yqPk)loKsZ6u zBpr%_aDv1;ET^YR*dWjsStyW~^o0t&m8h;t!~-}JlV~(73wkeGD3prDY_5<k_1L*Q zK8y{c9VFG6S<h)ZotD$YU!&V<Qm%^1!ig3-Q9?PAQix2;&Pb5~p#YB(ud5_*ZJgqW zMEr->dm#qGoJ3@e|EV!CT8gw{x+E)h5|av@9<jy3q`}02ZAlW9;XiR6*p%=nts4U% ze9Bh>%hJ$PCh(Y1BJ&_gZQ^!Pn?Vwjl1vB>0iuNTA>9C%feHW;HSC-X-IvYaFo3V| zRp`lHL+aL4w+pI`i9kslg`|OTXNVz*bh$)8khT|_N(`uIG*OThNR{vj5F#K!LTXSV z6bWsn$V`L8nWRJ^o+3F^2@}e?Zpe)JB1rBa@WTLNhnP(Oc$y1H4GI}}1%`vqDa?ju z<P<B(6!Lbz-Lt6NKb$Z3Km`X*%WGBL_PkS{@mp0Xa=_9IL$I{i=mgT;Ah`#Igr<#D zLbQA%0ZC)pH(lc;WrWErhv~+e&SnFsg?3osxG$k$Y@!i|n(RY@<FqU(5OIPWDsdo3 zE`coqKlptVliVc)$!p+)ClihMSqG4Y;^>3!$dr0=*(|m)2|Acd)SPqXCYy7!-Bu&< z9ZljZVMSFnW`M+!iS(<g!CI0tmXh~1a2IBR`-ZW^!Z0QyM^2bP2qJj|Un2%bSYHfR zW=JLjuR>MYx(3auu>WeoAcd|X1Wy+Oe`94J<*~ssHec0j12`9`Bws4!N~L1CQYaKn zD+9v~q#XucyEfl#wVg%{vvAsN*Ks_j8+fj!5wlUkKqy=<DQA(G4^w={z7ukn3iQR0 zPl{FM7@C-tGEc-CMt~$qSe3!%N&ut?#6TxSY^TWttcV&^iAjr?kImkQjUAGU?A<xR z@RF!3j+uZK>|h!ut-C@a=UjGLKb3V1K|m}qOidxcgsw`BWLf0Q6HeDH)3Pn`VrLE0 z0=5U@k%DgGwI$z!&c_zBxR7E_zrd2yitxC|Fck7t=8KZ%Cd8Sr34#9-0fOohF>)r| z1(y|#pM)`SEv++DvaHkWiBs`^BGwrEDJu)YS|9|n#z-f}Y!Si~&t!7Na=Ev^cW6mv za3o(WL9hhfX16xinV;~Qb6&II!eoj=rX$Qv5%3tO$I{7s)iv;pq_dI3#70Ig1ehZ1 za5V`@OUJDFWP*-rB32XYuaIDlY1%4#N`TTM(*0mUQ;jS&V84J8B#{p8jR}n6d<+}Q z=!a6rOB^hA6uF5R!@4muMkWu9kuUUQb9vZMa@-A^cDFX;*QTUaHEhkt9Y=xoOM(Sm zP9tO~K#WBaB}o7>vo^Sc3`@axWM0Lw?~{obvpNwTF@S$J#Gj%9-?6(9dts1qhs9A% zjch`hNr)5%ZF@`xpiXdr?ns^wCQi-JEL($NW@qhOE?4R)l%e`EhLwdf#Ta~8u$_+6 zZnYbAr`2@Y4X@jQGz|g*>cHk2d%)-pk<c6L)qvy(*h6!Yw;mJ)PJ$4`2_cy+aq5{% z{Um}bB4SH6@i@}R`jmtyEOjOT5}``!sT0XUGVM6cRM9CXh*2wvByy%OP8R$lu^0Cw zcO>gQu)Qxh{zaD*)3?N8g?^zDH>zM)lAQ!a$+XhRkj+|In1oP+S<|wxc^c4K)J@!` z)NRYYi)}R+Qxe6;tcw!OV?JDP?Zsjc;75`<Iv5BD8dC=h5`Ku7v5d?>B4(k*Ln7KH z2~HqHA>U;j3k*PL1}uU5#<9wF42c}9mPTHtL|5d1%tYCS*0wX1-oAmMk^X_ffuUg- zftYu<Hr1+5cju<v`c&++U@b^tC^HE0Kz8JvVnjjmUeZ;GR3ghmhCy=7(hf@xJCCed zm39P+2Ewz*pOIKmZ0ZqtgJ_xwIK?1~AkYa109}w<N@7P(#IOfC)+Q4$(TxO#1w&Eb zI0AVdyD($jQniAWD`)aOKya|HECX^O(7Llhd){kSyYtgtqpEmr6u6M@tj&N4V-gb# zl66KsG<-7G>7Np9y~<R{zD8D(o*z3N(Ptt{f{nZ|_JRbjZV<a+OlDyaxdc%#Q`zF3 zR|Ll@#2#dm1G|$d)Yws?B~;l26R(sjl<YzwQz+Qk0(3dVBly7Kx-5@;NOix{aRE;{ z?ZERx^792krLj<uv>+DBBXw!u;-qFp{+)19l5Mr%P8FtsoTLE)cCfOb2wD3O&S2vm z>Mj=UTLL&z>IYRAD=I1W5#A$7THq~E7}>vyuzkpm3`s?k>SHTDPCd&q*`tO|_a(s~ z#X7sGA(kSx2gzsyIj7!W+!U&sK7=4=6a=tO?kZq(n==ui3=Na88GvZwx4?vn+f71G zWk)0%$SN2k19WZB_yKAK9$^1Yk~+jma)cPMQ1iGiDN$lLQh-V7fQMorO(fiF<Z?;) z7SKt8-$+9O`^C17Wl+3?>>P>rKoKGtqXY&8=E;}xrSibQ@Zh46Vx?kPS>JWtR<$`h z;nZe=c0+NSa^!1CgiC|w19IU?J_~y?jM<qBCJev@DKw*dK=;OkuA$AaM&wb8SxA@$ zh7_CNLp>1y5ID_H5?fbnQ!|0w3<5aB-;8MjqIO9m-z<Y|+Is<0pqFGPNLrEHm0&q$ z4GZRMPbQzwWytlSV?=%}>NLalT->axou<}qhF&*@eM?RwnC0Xbz}D#OSdAoB+9#4o z={rGBs!$F@awH2$zxyyniC0zI07e7als%n{K;p(Q$r?(>Q`&y)Mns|vM2XZ1hp}&x zwi4po)Im7p1y`{R*$m)Er3VsFC*H%J!|M0lR;}Ib*6X!qtp+uiI54dJ2<n2eRGB3R z6tZ|0PIW)#SWOz05iv6!Ka-a*@r12KxJ4tbiy&r5QUcK#8UzD5RTTDI;98+B+_=;v z19Okr1q~jhWf1&8OD4KysA(P@`50(GB*7Go8J37r)_9eLuRoMiw;;tK$e;&uAdUuV zQAu`?W5bUL{rTj?BTo*ja#>ibN}^+Yu<K&Ns2YZC+B%e<X@E{t@(qQw;z2j+wj-w# z`!3`)K^)MbvakjTc|K)g9@2{;A%|EP84GSF_CFC|RT!wS&Sy!(Unr#56V~loBoMzU z0zfKkEe%UR-f32$fN>_}E-Rrzks_M5!k838kO3ugh2DXl{-M6X{z6Yl*Nk?%)v3;Q z>N9SAKI%4<(6gW`R8B&Uh~a2O$tje0BE$lnPwJiUeLx`+!qy3E`;a6X6mG1?<e?8K zTotQs3^p^!Qz0pAZi6%-)H1NX%m_4{F(ON0Ze}%$ksCs3Kx^oXW!Z}Z^$7UqM!F;0 zai*ka`ps-Uo6niLW-1<xM>S|APE~aps@qhewxWirr9d_MP+4B+v5igIl-(F)U&icz z=J1uwZXY=jZ^MWs0!7H;H1-ma6I&*pq>M~b{^Zpos({Iq7?4w{451Y#sWcZtm;eg{ zEzmo;I*Ub^d^+gI&SmrEY@q}wC2K0oFqbfAv)ih7nypr=-E1~H?M@Q-Y8(RlC?fut zjux~j34lb)<q@jKHb=}Xd=|ZsB`K!?M_zT3HxZliK%%7f3<IDS(o1J~9!X@R5(wwb z#B4|bFsO=X-x%c*V>5t{BwkJO0V#0`GnG({NK8@Wf+2t`0%aWfBdeM5Fq@Jp69P^k zC?%6AAhFX$1J^-5kPcLddj$}QxJp{M$OzX#fZ2paVT2ICr&tCU7tlTS>T#zLx^Co0 zWM`7!n_y1D_yDp7pxPvsg&m)AHz8(O1XkooFuw@g6BA3q{E&s%BcMl!O(8M~B@slA z1F^+Av=SMl6eELdjsgrCaFNV5K>v_vm>f8=VVg!aS1Q8@Ecf-n@Brqm)n@0X#_KcF zk=v3ZPm@9eB3mO_O_njU7e=VXBCySCtE%J)A$OKWmMH-Zwr&Vy5RDRS6DXJiIsq0k zNHi_x-4g<uqMinTv7XpQl+gp7R*HQJtZfvw>s5}SQCN=DWk%LBl983njA9n-TnUKU zz_b!a>bjoal!K-cI(p<uu?KxZ7OZAS7A>#h0$TaHAqPZLLXD6-Aj*?tVe{bj0$Qk& zFw+<82317B$Zo~-G%|+bgb4|lNwAr`5YQC?`<V47$E~S~Lp4mz(6jk`sZuFcddt1N zkR4EcreT02f&i+T{G5&Xxn`}}Y1Z5Aw&VG}3!y=#3PCo7yaO^hA=xBjWJ7?7fs@8w zei4C_(;5)oamejRB*zd(3d@aZq&Rv<<AjVev52M(*ckhcgjI`AB+x{pmznfbMq&}e zb5$0Z1tRnj3xiTlaVxukRKckPyJX?+h||nDB~I0Nl%^Um;geoVt#g@03`iqji9wE; zQ1*SY&j_0^#vr=|r<)cm56je9NRzGzqaY62NvEE`_6P$~W&$ZhY4jh5sYw>0AesS) zG6+Kog3^Yv)v0ij1|b%v^fXvPSb({Z!HiBPMTE_0Vh}q?lE#KX_QG95Y)D{4GROl- zx*UXz>BZ14Rt73CTdtIQ1}X!ChGhr7SDT-oJ3c-$akSg0>r$9Cb;Z;nbv=QW<5=Se zwM530Br==WgGCBK;UR`X-l@z~9CU_3g_AjBpI3ncLZmE1j<GOF$TGW7B~20}CJfzx zQ#^Q2MP>-WZrvm=bl$e~ylq!t`{`CeGpIsIg*oPQ+)gca8;R4BlYrnTK`PlN&L_c5 zbOZbx5Q=saC16zoeHJr5B>P1rZ>J)RbD4~D_WWV`8hZjcoD&mRv!VY92`wa35K^H| zFT%A$^A<vc^EiNb4INm?vNCoyU$6l?dwUB#l^krpd=X+L0KW8`Zl}|2H{5p9?KIo9 zDi8^dZr6#}Da3Rt3CJ8U-jHIk&qO4O@ab`a2ZwzLxUpuJgylw<gmV~T_L9l$?WAyR z%+^J$uoXiT0zIlr3XBek{o4c*6lS&;k$P%&rraYwOH+bKaPbOCoT<YLPKi8nq7(ii zi4?JwB?*3r(y%L$xvcn*#H7g+5kyg0Y7qS6TL!o;tfEk+D@f1{ib3*FS6~Ig3^X-D z*SKcjJAOBIyNcVD!Hp4lpCG-32o(un#5@VXPg<x57JSeR$hXE8N+fd(g?68Utr}O0 zagsw!Van7kt0fetR~LjWx#S@og+7D@>PzIM<9?G8TOb_P;RFXvNS94h&z36vgO&b) zY@rN(?zEe=nc0bBN9JdyTD2-5bjH+dO%(}-AzKofFo)8tL)OSV&;?pkgm)Jj7ZS;! z5H@Lh+DeY8Ld>{9NGzK$mKGD^kQL{`ac`km4PvqrIiJT*^Ob^xBpK-*VA5Oy<XITV zRQj^TB8VEK6!{M4yEKDt&2QHeza#lR6Cgkd#ZVnTc0vFjiNF_ot`g3N-~lV9mKYMq zTGD08eo#exh0Otx*P*33R)o&TjYxJys4F44dSfE2h_wzA5|99+Hid)<wq2K0!?3f3 ze5p{*<VgJ$%HX|nrjR!*a%6h0+ji>RcD>uId+m-#4ltLLkn0D25Ky)mEdoOxGAc#( zp9mqSX=Yr=u@6P$%xS{Y&So3Ao!P;eL<`A&q??%PN$zmwOSs^$WTb~Vk=Iiao}L(J zL3kJhq9kQYDur`cWRWK*f@#9#m$ukpw*#xSAQm2dCLNHofUqiCta6$cDGPsY!h}I^ zg!0DZ)V5^7O`~P{O*qa)qJfN`5JE&I{SE#jF2suByfAb;2;&Bp)`)$uyhKb$GuKi_ zRLlW0LNX*dc-o{W5(#`03QL3mkxENUo)_XYVQ6E30U1>k?FcE9D+6CCLQqHKYi5xl zr+tekxd`t_1mQh}^(hT50U7JIQLL1E`}&6#<qAc};QHL$?9}ne@v-TN<KV_9aKS#N zriu(PMTjplA0c|c{KPZ?!^JfA$JRF$s*&nYbxj2aW?-06Diymy6(tBG*Cp#)Ay4Fs zrEI!bWcHX5wXi2NN_0XNgwAwH_9(mpriA5`@5z=2^5vd<r7x4s;FeH*PPgths~vJ6 zHDj+6`Yt48z=>mS5VyRr<3|oVOSq_)<h;uE8{u<>1f79Dk4CELp-PB4;jCHOWdhY2 zc?&41fHsBGe6XD{IcH(=U?OplF!~l?g&Y<EHbIAo)-zc>Yvs*+saWo>^!61<@8wO) z#>Rz_-)*%!twyU}h4}|9=y$u6XcoAz`V8LHBueu<0ghBof@6MU7$*EiEF07Xq{IxV zYD^I9CZHr1;ZuxRYKr_>_Gv}JFMo3GE+G!mlvq5mt;|=H%Mww@kC>iBi^3NZGB`<7 zC<Obb4!<~!?WYV$&I$5rr3uX<zk<k`6jLIi)=8QTAajV9Xe$=dKB6FsB+^px4eTwD zeaOG@fpBmENNZ3EwSc2!2+(@qdF@6c=r)Zc;>2JMr*TRJ!7`N!so8R%K$LKpkyWfI zCe)=4^{A(z)CJdZipNt=L7HhnlOt*1b1E&FAtJ8IP=cYjNE>Bf$dPf-6A9=<qa58# zzEtiT>>V7;QNOUbS*uNs9i19KHZwEbY}A7w0Kb_U=bI}WW+m%R;j~iOAo7hv43rfk zM=yy2d7iN*NLJ-EPo_r<IHFusXah{$;H9N75TzY06duR|AcO>3V$lqZgq}<plBO=} z)TTu@EvS)f&mh!yCY#d@EeRaA(GcDvuT^*3_1N=6AM6Jul63tL+7Im4@dBS9M#5Rg zvO$c8SMpbqPNe#J8A{T3$?AlB2qVU><kKRwL<u|KPL-I@U}y?cTH{cI&NM~&T$IqL zq~27rd<h>Jwq;qio+;!?ec5tvp;*ck3c%+iWrM&0`!(vV+I*+k=yo9WLY6(k*%OOA zc-lis$BUFS#YPsP^o6o~;zU*0Dr^s?Dd{py2J+Iyd;zjc7<9>;%D{-6B!5g=fO(qT zn5^a!4hV8MU*>!#;bh16LOB3@sT@P#v@1eg3~7baB{``If>mJJ^P7EmqKHZsjptaa zV!_DWLs~mcq-EYE*vuxim@Ox3)6YYi1*<R-h@q?ld`M=MtXUfLAZIo!l!@rKTP;}B zvfnXH)zl4e7f!=kP#lcig-XI<6`nt781~THI)OM%QrQ{9zDrJ&<S>@PiBf{i$Q~!Z zZ6dlU%N#+GL=I+5d_fu(!wkKUBDch$q}Msf2CmX|Gi%rxXp&N;0uAnV+V%PQ$%*la zv9bBtxn{c+`aW4^>`}prlOIG=IVd1PyX5306+z|&sdDx~i-a@CBw6I+K%uz-xk){c zENEE|%_KHRQ0cY}LiYmVx-d<7qU=0kKo;ZdW+$s!_Jc@=nm2M*CJTEtmoH`uMI)1e zU6n*ZXMVO*pY1f}+~&OB?nIsoQ0E04z6&BJ;CyS!|BS<hq78$RJt*@A(!d}mkeVj1 z6Eclm&I$qhd9VxO*yFsjINb_5Gzx)|q03B2NuC;~-gESja1zci$>=j7D`54N%Dupx zHq5_lUN=pA52LTuX+d>|-LCIDlxWsz`%YI1eA=a$IDpV2XKI9T2<hQ@5oZR498eO8 z`?TtbaJCB9E!h_lSG;fl0%C);AJ+kJKo1-kaMHFg8X^%cWEvuKhoBxM&4sv46p$`t z1;rqcI7BBvMtY0<AEenxuj(A`q~)Nb!$jl;ki@01ZY;npqhr!|n&{_|h&me1FpA0D z;&d8;(=GH3$85#br^ZWt!@7|L4K$~ZnVEu~%R@A<NQY$C+RcXVhjy`t@+CMlAhUQU zBx+(qDKFsQp#w0ZDbNylikZP~f$-Re&333PGW{v65if)vm<-5Mg@v=oJI66%jeRQ; zqX`nv8im{``33|Hr9*is9NQO(izIqgPRJ&nQ*=nruIfmR$GJwdy8($!P;%DJ(~-^R zz-INCiN^eVyWN?ZoS2`TZ+9HZk59PFf{X>pAVZoWcr5A^#svgVq4(R>8HoQ(-;nHk zC+Z8?)aGojaDjZ;H3pSoMM*9rSroz1Y#9`$P-#LCix334o7iiu%7Ws-|G=WQVdt~u zzH)D`VHml5k8T=)-)+|ByvAI&dc0eo_q!eZd7OOL^}=otyM6>zKRG@DO$0tjC|W>p z9Dozpm^o0^wX{Hv?M<18Tvn>h#>{-R*f;FpYLoycixfXD31Dv?D}AncQaD>FPVEbY zoZQ%R%5KT$3*}NzUms*#zSwJLU}-7=7_JKorP--hy>=I98GuOyq9C{-y&<AKKqwf1 zen9(8jt0mDfGW@TxtKtv#xAMM<KUghx#5U6TZsY-v$KM7h?qe*rA(;0g~0tn_6hqG z+3g3^3(EnV9Re-T*%V|_H~_+qN#b`(>SNi1h0{c;iIO@PSPydKidK>`5ZL!6O109Y zGg38)2&j<rjXq|n0V8<ijI&hBI`YKBkgqUJfBS78*uVW(o%tEp>74P~uj|z3#&<md zR^$Y0$!|A@m!A$h<;ZhS%b7e!egMu47%r3?13j38$Hop{eC_Lw?B8?W&we~uDJPYD zNGMFB9M4!7o@5|~EHZRfys^mG;s^urC+4nF9f8Wp=u+xbmI#iJ_csnhm-<|ZRc3!f z$nb!a6{YY)<QNI1adG^GygUYRA~|fJ(yVMQTPWr2Yz}l;o1VxQDzLcb#t*|<g7m_N zVWg(jY)M*br<0)MJOT1A1JqF9u{txp{^G5so!fT%_w8aY3&vQaP$rb!PJzIHm{24Z zLK4HKP(+cE0!vSoEnV?x&Ddl~(hLfYka7-*Y1q(woUYX~&`(a>VsGes?RK@(Za3$q zo!YF^nDaVKP_E~Zv&ZwPsKo(ehjF!5zv>Ndtxk^ZesWt+xnvVOmMy9;VI--FViXbT zBbTWgChcx3-#@zLoQt<V{3}V-x$HqUm4$j%W;TwIC~WqKu?nPMn0Cg_79iKkJ>^2N zoGTTJr4mH5Onss}x7&uv*KNW=Y5Vx|yqFy0s+F-#8$%<5s~ZHq>$_bSQl5H4=?b<L z;|n=QncWr&3u@uAWwVM5QZkcN22@<TKw%5^gaF70C@G(?w*<gT<6WE#EpZVJ$t0WQ zH#U$`52Qd1x{}YCW`UQ)9#o>q#U3#1H3DoL`6VZ?%qdX{r{1te=8;iq3+G_V3%sa` z2q~F_qI_71$eV(#3hkbujj#T_gHJxvo}E~7!PS?)_Y+6nyQjYUnaa}BHsA2UJO1H+ z1g_hxHK=n`p%A(5;?*0~^1wqs{;}5A>#EuE@DeMV$CU}ww@5kT{9U{Ej_upMa{bvG zH=lR+zkKn63omRns(!l$ky-2=QVol;juUncDpI>TO*ll?bN#~#rMQKSnd6urP-1yt zSb-n}k;N3ckc@1pe;CHjqD`0YfAFV$#bOe8?YT)8(yZ8@FAv}r5(zS*t4yf}d(=O= ze55?`;7`9@8D1v&v1LFF$k~h)x$RcB8QFI2_{6|Pr%Q_NJ$er~*sD!DUJ$Ehu2inh z*Ia0qR-CkyqBh!7T7;1RpFuKr9Y=-0&t#@&W;L^mF}sa<5DySIgi-In5cVPrqv^?G zz;#xx0FgntSpbkwe)UGX>ROfziZiSn#D8`CD9oSoz^HCmFs0kAHUvaAH`qV2s7Qg6 zN&r9^1(V07SM)8JgStL`q&7cYn?CNenue*vj_P!sF5si2%*|HkW?I<ep1w>zV>D`W zVDW<NYfc@K3uaMiaMWwH+D_ZZ7RmzywYi$>290K`-gXr`1Cm*?`Sh#b{QLLabtl+% zzB=Q3u5DU_!;7dqlIl@YvxOoSRMMw`g>u;}2AnTdiWMqr$mDV`A3>0=i&btoUEHnd zbz5$u4(th&jIyJ+Dw@(o**!s3seaJydVnD=RAE59<bzP=bRan`0T%ISc1MfKaMp92 zt4V~!$wLcn6?QR@TbW}Q6lY6P+YwMHNpYr3B2(qk6*4JxE;5Qm(u5S~L0fV-r6+;# z1VE)Y45h_z*%dog6%JXD77mlt-Je!rh;P{o!3DYr$KN?dBMIAsQ{~A9Q-GtM-FE+J zSG-}>=8Lxf_+Kwrz3INY?rC^YqtiZT^M%u6haUg=4>xRBf5mlgmo)vEJAb(IzPntQ z&&?yRxc;@Lz2b^P2M^zI`_Id=ynMyVOJ8{{hIHqTzq@Pa^R>1!apb_C{MF|!e&w~D z>coMEesSJqTUTGSHF8?pfBMaKs|FgU_(2>rC&$j&`i9<>>-^gBXYc%Bm?-Ub`@Glw zH@kPZHL?G>dw){t8_EwX?q7C#Y5BV9k-bmc{++eI{krpC{d<5rJ8$`Fe}C_#fAGmj z(w@ElmhnS-m#p0!h2Ekw&Mx(j9Nd2A!QDGw{W~8jjjTAlch~gfM7}ssC>FAXd_I?3 zefD{P&X4}`hm%M4F5C25loHjLUwrzSYu@(9iK;(%*KK#-b>E^TODseEtxGOjxoXw^ zNA4VZ;i<)EZonF@+W3n6z{uW*e|h-%r<3}0)9DT`S<&fsS1n$-WW$!DJ9j*F|1a!Z z0R;D^KmLep=b!%7JxBJx05XL(00*0;LZ&pda_ze1YtPzo*KHGr_PzDbJ_Q*3%kO`~ zZ?y&&ExGo_ciH(;r#3S?HQ6^b90u;$7hMJeXU79~?|c4Pr#}DqJ$GDq#nl&I`@8Mx z+%4by%JfVXAONaw=J?d;(#3E2;Ku;%?!WcB69<pgj_%QX=ZrP$3zf=QmtF~4`Q<-< zapM)QTE1b+w!41*_<awJoW4>v{VQK}L;vDs_uuu)AK!B4dM{|q&jMo9rzWny@og*D zo;7*+z-{08X0cM%be(E<2q%K~tZX(5Jx07&E@ukRfd%M2h<QNbR<jOEuhVKl1A5&K z<Y)rb2Qd+a8o6E#LPk1=$rH(QV95Gz2Zo{R`egcr9NVK@YD$I_W%V3<ltn5GR|~N# zh8+@Iltj(~Q7<Gy-CRH{$`wVyt->B*D#z9}dgUrqQRl)^fQusub4FP$$;qJ+c2%zt zyUnoMiYVXGl{x=Q<bbB0x)WUlxRjR*x7csbdC!VK)Fchmg)|{$q5lGftGQ<bAht0- zGuf`qj-I(G2B_>AIJWJMrK{JwiXL0JqkEslFxOrG&chA=ktd$s_=fk4t~zt($i8de z@&_a5zw(|(pStAw-+ANP{u_q#nj7Bo#8Xc^_0-Nc|M5rtSi14uAK3c(8xQQ;Tdg;a zPlJZGZvNf(-v7|{s$Bf7w|rRPx;IR{IW>Oa4SzIr@$dZN-p4W<UU~65J~ngsz-90F zsJ>$JFYbLfzy7LKTP~ZLnz-!!pHmlYy6dio2G7~L;o@tK9XT>zYaW}P&-D$Rb;C!V z*gv`BxxHt<;r+I4EMI@_H6Q%ao{8$Vr+1(An)hUSmK;8ObiP_`Itged4{J<{uDRhI z8!o>3R}Vh0=ji16%dUs)iztcN=^Y-t?)`r`QENW__+#f?bzP}c8C|mMrf>YnQLM+F zdEv6(|FdjmAlE-~?Vo-5VBL9Q_x@MB{ZI3S!r7Nxec^R)kpu6KzVMygk~NQQ-*xF* zKXA#bUROJO=xrarX=vT~J9g~ceD&+z^QkX`F?3+?PSZ3p@BiYrrONUj-~Q-@Z+!Rf zeB`FP9^F-5wc(04y%RRr^?&%$B;Wt+3wxHI{ab6#Id5k2*y=48&9}p^fBox2r=NBC z)>m)))m^7=IA`PK*Zt_$+oNpH<||(}JzH=4@qE2GFuLeHANwEs_8+J_!5iQ6k<fMD z_^uBvJ?)Gw*S!9npa1qlkMC_Lx%YqVc6HIZUp%_|?AN?CwDN;zZv5oG+*VD@ho9a5 zC!hX5uYEO^_YlaoU2VPneIL2_`WqhIvGeTTe%0^3`+fD<X#-H+GV{e^Wnf@nbae6Z z<x5XLZPCh={fkD6m0kecCSl~Mi6aM(9XfFA(4phUj?7Gs*XQS)Ry%M#s%?rQ7_MM7 zq3*&UbbzzkKvB(By8}~PO4}W98G7of7gk&%YPMrJ%{1i43krtds%);M5;17jkn{>T zN`xM;i;sK^T*52DZIoXZixP*l6G+6>keqQGY3#rRCZfcA%2|_ig`-}gDFbB#%amor zrGcU|jj$wTP6iNJ3yR3p;i##?u2(KO5Q*ComBGLaRuVUf?Tj_C@7bZz6-&2VmMGd| zw|(pPKXvoq>FZl=F#hy|SH0tXnV!LIe|w|qIq~`Dzw$kQ{`k+nJ3BY~l~4W&K--ah z&;R93U#!;~1EWi<B>3uQ{^s@{d|Omqg+Xv=|5H03y7#%;fA;=u+aLP*cm1bseR$iC z-t~`nUUI{`@45NYnL_2XO|KX{_v-Kb`P<dmLq9pXy?^EU&98e$cG>!W{o~gde(SF4 zp{w8izVWfcvlGX5{qW1qGdqr-F}mX7>!0}eJI0=UY}Zfz{>rz0;Mmy2v0J|+1zvZ< zhD+Z3k*T8x4?h3Q{$JeOZ8cY~UBB$Ci=Mvsr(P`ACy$)9`8=#~yV=l<%&zS}Kf3K_ z+i$t~hCjXO{8zqlZf?4-uVNO8-~H+rruRG<DaNH&Ze71=19Zz{4?p;KpS~$4N#|d1 z{#jREKXK^5o~O6({Qj3>r@LnThSit7X7>14Wq4_+l!w-O=6hdg9Gu>{q`Y+fxtG4K znjcyDw{N;IXQ&U3Kl9oTeQK~$aFT9Ui%a?3{Ortq-~7_^I}UGLzY5UkXMgv9CC!P~ zz4HU7Z+iOSyML*NouU3-*h<w<%9naOUh?Vpy-g3hle?e#(5JqX&E&WK?mO=P<t=+3 zxb@(U`~TweU)yr&RS(>I7Z!X;@8H=NT=>JUeC`|n@bxvT1}c3zNF0D#&zB#)>$V^N z<IM-Rj}{01{ySg#+nonzFF1GOS-*Wbl*f)o9{T*JKMVZl)~4U~M}K_t7jMGqty+7= zh6^wI`ltV5>frvb?0xEQ{^@(;`}a;9+1EEXOvUT~6!{V$Gc0T>x^*45T>}(vx9i<5 zpn3<!1Len2;!~otGU5<E#i#rL#uL?KiAE-ltWf_1@?nP@Wl{~w+7WIO?j8_|g4wib zP%MiIU6I+J`ob1KGItZE7>q2E{54?%^4()mITH)djGT4>62V7>gEnf~Fh!)Nus@L4 zB(0%HVnwJj8d_>(a+rbQ#c`b0t8uxn!~t!QqLYaCX~;npI#A}c+a%)RIhudI+;?#2 z_Dp&3oNM0HuFW0THSIXgnde^tySy=dq<qCS032Ix{F6#w|K!xn#O|khhZjA3=WV(o zui5fj`wkwOot^>1|HXUX`Sw5h&_CRA;oU#^!Ds*RUv<O4kcx$3v5;SP_To;vX_N-e z`-8u7JFRDTY;(tUl?(YGa2BmUclyvCZ~D+_8#cA)XP*1scP{waw;IO|sO|Zc8@F^j zHA^>om#%3}9PG*JnN_2f63<T`FO*8<N~LFT#0_K9wAa7oW2R}1jZaMNd1A%sYidV# zj}8wvoq?d+bYmGDGB7x_^2{~1ZBlO=OWVJD=hWV(RxV#|%917fUZLzwj4PTkcXa<N zUVHJS*WEBZGnXy(H0lk*%8Vb_Gg^|$wo380ZpU%Dvj?ABGCD$mT$h@ob2dn9TK2@A zr-q99nHMa{Yw^s)k)`W5HID9HR?$~&dd1k0!#f}N#lY}jBW&2J)Z0@&et1uRIn#IL z>iXQ2(`a6C_2wljR$@y_#oVUzwixBXBZm$)Tb<{heqwNFc;dhdjmhz|&e?Ks-wSu$ z^1U-RZdP@z&@=ev4}YrLX^o8?ou8Wrx+;`=A9>)>_q_GZ@BOn+|K0~$58d{IZ+-0t zZ;<6~n9R)1b{qAcyp-!-y!YwH0LBKg&=R^N8?&?XkKFn5MMb4&aA@bYhcAES)hkXv z6G*aHD%I=tGtRsC@;AN(*MIoF`?96diZjkA_YVSgYSimmh2nDB6o_h8Ye1fEtLgg= z7e$4VPzfsIK-LsY|5P&_kOM^`XTKl#+%qYKmQ?O3DoQyw3ZKVG5GWL?<jxNw{Ki!W z1Y<dEGfAW1FE){qMF$9xfvm*~d5&p$184t5Y3{4cd3O}@<G72=ewh=6Oq8xdxnS&( z6M5GnMJ6Oin=Cj;<PfUDo}^lyg=|`tAuef9kx!*?l@~E2KOvZkotbgTnF>Q&H>_iO zc5S@kwHq(H<|`k6Z?R8%;h85cz5d1nJGa-S#v@6Y89V&l&wjFRpuFVF4RYx8S2k_A z@RFZ>^XB6dNBerqy?wpC1A`eQzH#f;r7M<w^?N^1OdI5ayBU@VIW|2tsb?|=pL+Q4 z)7wlt1H@R?{Yp>S?{=q;>|6hu3yZz|pmo*EZ+ZQz4;|dM@xm)r-IzYOuXoWh$cU-& zqs!K83>Cu(sNIGLy9B=1tkuCJNB8Zz=byfiEtZz7*=R;xWBuk(*XvH`#Ad7*cA-!V zhoP8tCAQ?K<238XCsv)YdV1H=2Y&jkcB_TOX;$Y9L!UT!@HM~x;lXtme)xuK_m8(e z{PB+(mW>s%Ga1eepx!oA8l%XRSxViz{6r)Mh~_>~XxUjsw}5D1Etz&<>d4;B>(19r zdv<)R*f((YD=vNX)_+z_%b*f<6&J~ud$IiaVkw_5>5|hwIOIDW;LJ$R{NV3Dv+wE0 z-ua2o1ODyZ_4F&>_*Ti4#`iwkQ|Z6-%Bz3yPk)D9J^0KcyS6`qdkrjK?RT4leZAFY z`?4!9s?Aqlb=6g8uUq|z&wTda(c_a7lWmtO+$F=Rx{?!MQ?ik)u^%A;MC|PwSh`}> zx4!+O*~Y}xuio0*+kg1L{<Z5jaM&n%_>NmMcBa%jxM=0+<x)vk3yF$JSlxEJ(`mIE zO}w-LBwHOnaEN25DxcD&xHf^Ho0^tdlkT80{3NX$iqq$$QH7yl0)QHnPcNDmaUwSK zCk05NM0B<n)y-fGO`<f{wB6eYM{S(uX2uIW3`B*C#>u!zswiV_kjCAeL`R;5ls8Vp z;7EmX0-K6hww#z$E**1@l@f?zaEe%qR%zsWO^XR+5ib+HtZ3@7tcEi61tGmEYGK)b z#G?@Sm_saVDq@<Dd{pz2EADvs{*g1!c<|2K-v5cu){Y+ol)vNK|M-Rv{N*Qa`V1KL zoEzTvjnDq&?DX`NYd7Ecfsc*7@a)?@_~(yr+xG3Ref3NK^8L%Nxcx`}`u$F;IX*Re z@x`l^&>esJ=s6c%{_NRX9=_wYcmBmqkALf?C2Kcp%QijumH#6v#l>=E@3uSgYc6`r zXTNp#-~aUmZ~fr0$?2Ov^!vr7Yya>I-+$ygU%B9IAN<wNe^j41m>*p1%Q_^wo-O6d zy))C(Bg;>}<hmPP*#5{X|M1UF@3Ea`ZNux|^Y{P#0|{*IOrh!~HdJt_N7L2$`MERJ zZfG2MYWmQw#B=;s1IIbn{$6c%de!<(YGvfkzy8=8-u<DOu_Jp9jE!!PF4?^CO>aH> zP4D~2&7c3&*pVZU`k|lra+ELk#H~4%I?v=C&yRgCQ|y5P#Fl3YB`U@#_7J|(6|+$4 zTejx5FMM=h(^YT2>H9lw{n{B@-xiuhnD?NhK-DBW2lS!kD_K*|m3pZ;QZQF2P*nTz z2kzW_(G{0$T6^&Y=Us5+b+d=|{ORw$`rNIr`@7q2`{h4>b<I`R^)6o>RmXPR|BDZP z@^A0?+TWb{imlba_|E4(kt^6q9Dp}I^AG=g?=9bY^0CL}=jO&{YgY}9#Igy7_ndB% z^6S)MxtH<|L#cmoFkdPiJ-GjU|NU={kB=SQci_XH`P>)(>f=)AFJ5`t{PZMjw$Fe4 zJI~yI$CfK!JvKde*Z05n`nUZdOuoB+^i60{uwSR$CXWiNyO2~Lq(3JEiL~gn`53h! z<CGQd%O<KsIeVS-fod2AEcr~<g#3!B4-EzBDf5szv_)wN2DL?iLgI!eTp+|Lg6xAy z(*86_!q<<u(+b{`lB1Bix@Acp=aevyGIw%sB1ts1V|_?2)V!q?ZO!BgO*ze7qOga^ z)1*=Y&hJfwjUrM*m2q)eJj|Y3jcZ9bi%v9K;R<@r9@5waC9~g^SvPHDnNaMT3(_>r zE|kWOO+Ix0T|uW>>gkIE_l1K;_dW4QR+r=U+@ZsV%Ihu;OT%~H^4+oR_vQMBe)7Zb zgX|WadDgx?yKnvGSE6?P@y8xpzG2Jqb!+dw{b#@Y$&a!bdur^+?4cLz{?SFJt$y@h zzcAGajAdun0_EXve>vMao-Ox4&Sh<5=Yw}P&0c-++Oe@CkA3eSh70D-ZNHNHmurhw z@87-a*spFW_x2y1m<9tFrde%u#||F|XUCh8sSd2#_p4hE9N1r8cTrdzy8YW<pM37| zBwIRiWGs`(j4nT|-gQCu-rV?9!|^&TXM8saBP$!4rF-tUz3;S*kzKz3$NwU?rUS+B zJI&`FysInei#A<SYqfs*gYRgDy>IvP$B!O~oMulY4<uTjIo58}s`K+^66ABa*=nOT zeXL!ZnV&iyHLK&36PDl1mx}d{i$N~3qg{{OThmKY&(fzKxxYF!ZpBU#1&USZhVt0N z@tkc84i7Zi)Nr6;#&grh4<6V*`}{V1EBCMJ`0<av`uRXs_4dqDcmB9{_2%rz@_kQl zyYENeSi5Za=ri}vxl-i-ML@d0jPtsFvi;V7$;A$(LFY2l#|}NabLW=JUb$k;hDYza zbJr6)bVDCMc4TU5`r!UOZnLK9>fG#%+nmp2wE24Lxu<pv4v*}4VNarHt2du}=g)3= z=Kj0ZY}hb8KeKFPaANF`Yvkf=`OuNWJMO(rjofM{I<kM?*z?a&NkgOAbvm986OWTK z*;^r~SQZICYy?s3lq9V&i`Z8|9)7T^3P=km1GQ>{5h-xVMOvb}Cb-&xnMe;NC6^@! z8#qNKZ5+YDg(Qv3CEP)VT8eUW1LiPM$05t_zUU0-Uzeh~)C|WBB9D7tq=hW(t+6$E zpkNLct(-x_7fCc+Q7Jq)u__Wu6qVSKi;lr?5ohwS?v6!xg9{^)g{H5H=<~#hbcCQp zOOJp$^N89;hzcrGq1qo+Pjo%ejOpW3olbk%$`x1!+fWbg-CZb@28V_;Icd&LjZMzN zm@L`Gz{n`{Rkzc1gQV(G3&%xEmT6{YeC*J%$tg;w4Wm`d79Bf2St({$FCJ>lOb!n8 ztzNMNJT~76EG0T^@ldAF6Syv?wF5`{hmIbr28!f$h6YEqOfGTTW8>q#WY|f#c*XJ{ zmO%P_gTscdH|C}QL>DbtzW>1fb{L<raz$%?`shq8NR)g&*SBQl<W#j#>{-5gO}VGi zsLz6K%DVE*6OUs?Bg6ek7`7t)qPKqZhky51JD=Qv^&9CcEnc)}ZfX)+o6i+qcwukV zA*k8)!-hwkCWXQ1@K7;p$4;%Uubj>1AoyV(+lo{_ek_~KP$Vk!Gr3%|Hs3ciY-DVJ z!=PC$F5kHLf>-T-=x0zen=ZdLDULjT%gyD15!oyNWWnlQzH)_WYR&oS*l8JZGB-If zJ2lncKXCNW;cC}64JDs3CuXWEmMymv|G=RmvTpSiEHjfabLGC?!o>JkwH+j`)8F5( zWC~5kZ@a*H>eSTaRIR0Gx~1zwBcm_uJz!W?tyTvOjEoL<+ud%vF)%P-+1B`xqw_QE zkKFXP)#>Sf{M_ePtX?(L-+R{C8$p>t<gZ$JniPk7U)Vh}SBt$a%m>d4_dUN0QoL9y zyKa}0p<_X)>=C4hx2B79E=kl5a6?0t^EA0ND#zh0Rkd{$^iFAxmO;%IIN}af6^0Zo zq<TSMjgb1&#oWb*%h@?0k@!s(1@c^Ysivg>T;nG~3|zaUa<2_FWkR2G5x@YTSjP{z zELlVfh^sA4?#Y=$#DqGx7)(S0PMpTnDJ$GytV&vrYKBya@;Q>o_lciHZ$pwdWG0F( z8p(-@9$E!bk1FSYa(hDd9g$k6#t`&CQ(cR7Eg%b4F%8WyusT4}6qBTI4YYg2u^kdG zvFn8{^-ztweoP$<<D`r2iYPUlbB$?G?Bk6KrdF}kLCBW^EF?AJR;@HeLcc6u!n8}D z%0hxV>bargQIQGN3s5Ia>RO4b864CRmN)e^;%r-;8qKPn=qZ~>?MQ7#TB4h!o`Fiw zfR(eTo1546o3mk~mQkpwS)>_Yp>CqP<yHRd!KgXkY<8S(2XF&6A>^6sVS+&ihNJ5@ zyPSVXt+uFvXU;Z<ddtOf)-br}MWz-qCO4|%VghoniJro?rQ7(wBG1mu)qBoZyz!#I z?F5p3<cWI+ik4X((m{39ekzXrPT;nKF77w)HCv(UMFI7RrsOhB@mPH0W+A)5EsdI7 z1k}1u=OPx#RLErzgw%u3qr_=Qd5Td<)b>J$2KC~k0rcH*Fe5CZn)WqKxXm$D=w~bo z_R+}NO~AoHbGmPE#LnhaZvG?VYMoZ6(QrBquhXv9noxaU4~~CPb0^VWld4MCaN?p~ z3b|3BfE)UVxE^<S;2uWQ`h?;Mx~64yEpO>mwTp3*iA1n2W|vA7Nx-%q<*fyxH-yTe zG?n6WGFKYOqW!dJS*Y^Ez(w=(wC6Ebdr-1UT1BCxK?rVeA<B)oOj8k!%@XcUL1|51 zkeHM%#f=Qp)M!cgJXJ=Lq9930y+h2WT+52NCmIJNah=%rg)u3KtZspvg?Cu=mgD!b zXfqXwu!=$%|FX{MaM_FnYSXc|38^?Wh`MqRbgB7)8;SmRAQ3r^xZAaqcs}>DODn`9 zF9Z!y`KCo>@@l~{@}^Gi*%&iZ7-K|K>M4p)7_VreVSP;L#oR2EJ1?tTsmW#Us+!hC z2y8<eCPgN-|D_Zqu$rGp-2hZ5ldq#tDwIlgR#y|>Yu4Sytlw_Ro&)x@G8xMxX31z$ zZT~~LVmY)-zuTqAY?MZuWId$D!<@pNoM=EPFLby{W3uW(Pgluf3!59bQ41*$ltp#F zBrhC4&R2Szsb?Sk_Kq;uXC%>@HESxv%cxA22)rG3+Hto5v>Z6yu-l>J(a?`6A6@38 zJkifm64k@_2X#Xx_Sd)slN{k5>>uj*O-*PMQRgZed~jfzTdi~D8mHPT939iRFRBhj zMD?_Gp;+kY@9%o9CizR&tdF^Bq0@G$maj#;=d_!Y?Bcm3@T2&|a{;*RB_|?tI&m5~ zQxg#(m$=WJvQQEtQrSg6a^a{+yKr)cN}p}Gi1$F@o^Ej@>Kn<iBEs7uKTH;lVisEO zC$cES<w`(S#mp*Psldui)ZJ<kS1v?UJOWyw?xoSo9@UU=8?cxf>AK*z=tKi0!EmB) z1-U~*Y2k4KCoUkGMW>D*W?F@7>eCYcL?c6y);^I>6nrrCh=x6)95$imS}JwPP$2?2 zqnC2(IVabkS}>1F+<o3^N>F7vBQZk2E`t6wQ*XE0?4?yaYDy~sE<(HJ>}=MejuDzc z{rZSfsh~X(+00VfGd6zl@f4!vCdR8<k^lm7NMRL`m>?QguxnfN=TSwAJ<ww$;;U3U zo3r(d601%F0554)6Q?V=>>0!&L&;DsMhGb|SSogd0C<>t>ky77dqIjZ*C3A5?9D`^ zASDZrTYyTW*4+k2ov<DrSJrR{mk|+_?5K&MMXKR}mlNHA+8S87VP(O}mvk$m>ZYY* zPF?6{uicC~ZSbDoY6jx*1Dt=T5wUUQmMrQqxafv)7xftzbipYj<ZO&n5{gB?%om>q z0oD~cv)p7>;Wd<1)6#4%DavFsg#srH6{!y*&>(2OS*v$D?MA)PZg-tlJ#@RIf&)m| zC=kt3(>gch!~<{Ae&=b^Nl7G-i0u^38o8#P<bbMEA529_dns@q<dEXnA+!!>plAw} zNGUSaJ}&h3r=H2&k4Q9(5p*C@V)%gw<b~C^lLebz6zgExP=qL=$RBnsq}nBFa2POJ z6}IDxgeOO$G+5-31*CmM=SkWPu4v|-fa#)gC<SXOT8dF(0PMO*66F#R-!@|Tz)QiJ zUly&`Vr~?*(7uPmF$*1rQ?*LL6JPS>z>yswP>;|(w4?7uqVI7UHlc!BO0+j}Ia9M5 z^=iJ5Z?`+c!^8Dfdu(i6Rv_`?VxgQj62<S@Miw?G1_?8diid+X<@;$_%Gr)10#^Y= zK}G+KC<v`w5qr{UH+3^d2sQAv$kQ|!h5>+VqH1oZ4IHOZU8N%@24P^;bO^I1dd5%` z?q$?=Fd4vU1FP=0!K1#cftW&v%f|$6Q8jAz%Z@Uv9_~fYRi)fiY5@#&4FHF+d9FvE z23_Su+fa=>ONtcyhU#@SdOAbk)91Mi(NiP^GSy&uFx<0!K5@HYWFUuZGn)f@Dq$N) zK!z~rG^JJ}Y5^*SiIH&{O@Me(0#QJ{dkvG`;8MO%Du&`}*f<lTk!_2r_ay4gPPPOU z(fcgVOvX8oGTlhGiPD^|iIb^QS7=eo0|?BloiU3=a=^ll%@qnd5I8qesLj{vwQ7?d z0$+zb^#G>=Zz1k=qM0k>krT~k(^j1ePha5{Y*chDT1j#v9F3ddq)(Zls2_*T`N<Xp z{qWmBV%tik{81|6mq`1CfdmQ1?M#xi^CoATkk?V=I$F*M)gaqdPUMV5vr8d~c!L=> zB|<PJ>Y9<>Ad<wh97Gu*S4)c`UKZmrwI0b>fXJF5WIh+wa<66nH)+LC6p5$dMs5`l zC+UNW#p5Tq`-NzY#HBX`Jkm_H7qbaOliY>J_$b1dPM^WDP%waH@VSu03#jk9N2-H( zfU5TxX0Y2zHuH<uZJwPxcFq;AIk4yXRcD>oYPC%}Q?E6uwc6UVHf`K;UT1pDbeqM# z0o%~rL{;-;J@%}gk*HneCX>V%u=S|sBM8+@flP{gU*WWK{MMWlc#-cFMwVBWt*IZ` zT^U_Q4P6u|(>ofuT^Ng2sTYbx%@v(`Rm)X!<-R0vaLKG8=X?5%xZ4dS)yn3{7S$xL zmF*c&49j;qU=TK(L)EmYG`2ES7+KYxpUjl|eBXmWfQbmX+`ni!$Y9-;3+i*TzT1US z3NvPO(WoJZ`Ems#O?(&lDxb?|ie)u&vbmgI=;?M^x}Deimdm|Mu`BtEoi7xNeM5>f zF9nXNX>Rqnml>+pYF6Z6%5yVQ+LDc0w&FHxt@)YUz^IWc1g)ysGk|@y3Z+hMw)e~} zMybDbY=3Fd%Fyp}-g1)b8zCv#o-Yh70Rn*Hg3gP=puBh`pkt@o>07eGb2`B1y`xJ2 z!`Gd6kt#=n!^8bU!=^6xk1S@;2iDFV*!5g(c4l^ZYJP66S#P+V4pv??Nzzr(AVz+% zPt!>c-&%P3RJ`y6tc6GCvL{00vL2A24s0bl$w~as1oDUoxlhr$P*iPm6cLmLJ1`{G z8>h6M-jlgbRYkHG6+8f4>AK22dx))=p+Zr3n^L==cWxcCcC<%0Aw=*#<Y%=A=HZ%P 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∋4z) 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 diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/img/example-sites/jshint.png b/src/main/webapp/bower_components/bootstrap/docs/assets/img/example-sites/jshint.png deleted file mode 100644 index ac7086de1d41dda2e67698aa300963b332a0f52c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7258 zcmc(E_cI(0(EjO1lyiDNr$mj5-hvaSyC9;6=skMxqH{#=ArUn?NAwm!^nQ8?j*lKK zBKYR})B6v+Gw%=2&i=4FJG(Qx&&;!N+DH{L5=IgL06?aus-z15;0XNl{{V6S*>sAd z&j0{3yP6VQ&(G}eeLXP%0PGK{xO<T7MZb&Ko1Ofqk%=G6TeW{enUW0E|8)Cx0-b&M zeu}&w0z~ZiR!w$ZJjhqKryY;)t2c`p{n6G0N^SB$&s~u2RmmJso>bXI<Kbj>H8+|b zd4zSFUH;Y51e#4GFApY?s{2D!YiOh)n~_A}RTOT-=x)A<<UlflDKI(p3*QGHBsg}o z&a9yM4oYjXXU=`7)a}WE)_aL{-Yp-ZhVx`Hj<Ym)o=ml@=d=MAECf8#1g{T0lb}Qg z$82gHhHWfy2qn|Wqan-{%I|O9;C0&ZVdlu&C2dgjasy6A0&v%{&WaTCxwQ#`8~X+G z4pYB@1I0Hng9b<K68qylagg`_%rSy&tX$H17?_%ZJ;*<dN)dg%C1XT=f7@bGtv|7G zdu~~eIk}FuaBf-N@n|)xl`>xN_76$=Ig0iCz~y_O#k*zx>~us!4g@6`vrW?qQ|MSY z(Bh_&L*!?uewnirGKB&b6*7F<pA{gDDoUo`rz-XkB=OG?M+TF}^iSDyR>w&cNh6Gu z(jigX;<s={{^(cij9I93dQ!q46v-r%(|Sq)q!ek2KhNmhcOf;@8a%GZ)W3_)y9)+_ zZr0PWRUtg+?y!g77c>1|h!$11gXHXla{@X)XmXo}bTE?>B~=;<c;LweZXjj-%k}v3 z#!A;u3XzXD`B-q=&1xNTGi}_(YK0A$>q;HYlvZ5YvQMdmvNS{)(JnHD6AO-Ftsv7a zXYmoatdaWM1#aSc!$fO@ENe2R->qd?t88Y+Bj<$P)O~Jp%9{l*ySuX+0YW>X8TSev z$cHl3xxVgg<Pd99qVt3#wy9FU6?*YzliN~fEzE7}gwNv1z4!ZIsBx<pUN~nO<n?ov zG28{(bzk5oa~|sK=*&4oh6pbrgl#NU{>!9y5GoRp&!7g7(PhJU1uuycC-@^R(+nPs z&W4e6jn#rP_i&Y4wkqdjuQ=;ofhKt@B`+S7K8z&#<b@=*U_+iW;yP|Kzh^gj6x%O! zHDV*-0wL-5CuA+sEis!hS<>Y#(PI2@H?6&1u7yIOoO#If2<f5_0Aj;QMB9!a<5}e0 zH`Nrx0JpBhs|ia{zugC{yxsV4&fy7c+Dbfc>LPb+*Ae|`;q_e`BTD(;atTJ7X`i?* zzU#l{(W=P_Ha&gPOgsPf)t6VsJRq&Pz4BDfGX`7m9wUG_qqvffC2pyd##fppq<Q(s zxca+MrVV^ceAQZ*Hy{F*%7jk(sbKOX>-7Q)DPeADPATzZgJ2iTL6U5_ncZ5kCPCa| z^-Nn;=rZWVg7=`e-=jziAPKnLg2`}f!^^Mlgx&JLOX*-zFwWp)vTgSchsnd|#=$ki z&`CQH8TWX*sH!1sv8SZ_m1U3)4>eE~gb(DF>oiOLl@##!Plmt<C_bAfK0*bS=bd&e z%}j1o@}U^?pE~o8Sm*WYGXUWVCHufw<1vH6TL#v@(2h|fgqog$sQRshaG1pR`{ka_ z7@0&lSdQjb!8Js}fTeW7F9Fnm<<GNhrh*A9T>ec4)6V#lP_tBJ>z+bcPOb{KR9Pu$ z=~C69UwV89MjK%Uuyo->mO9s!GaSiZHVYnB&(L+wNX{^QqGGK5n)<PKA75?NUfigE zHH)nL22N=?$&Hdf-nNyERgvG8u;NfG`2H-8RcpM0so4J$s9@hqI&Ul@0$<PH%39ti zfnF_>o_H(MZ^$2yE&-vm#bPD`Cyg+QO0xyVZEQZ4$$3c;d+5{N=ib*<BFLJI$4<_p zLc?*(E6)kXo!dNkeio4Y2?SZ8qolgcIaf&|j)}0@hH3-5fz;8y5l61eq06^pAq)qi zq<9vRLJ>fad3(5_bU#3&#Rm@bxk_?i3oF}wiM(@KMZ|+>G|tK97xzQ!Px2cziqyni zT(XULqiU1dFxSt@aIR_9dFg0=DLq-N_zZft+H?H5OLt?@Bq6dxY84P|{K1y^X9#>N zzqjXkHSRToo*elqCBHs6b;g$By<Og5R8#y%ryQS7&9Ql|$E||DOKP)jMbO`$P4aPk zN_uCu`C&&Mct=B^W1vVnM?hv9le0tV&2JR}iCiZs2&Ga4sR!2l78O@sZf5p1O&j_) z2e`R<(39;e-RTODDXJ-;agl7NHxxMgjMlI$B}Tv3k6P(|=1ilr2;-}22ir3JVtO}; z2CL_xHtckP{^M}TR?V9mtDxQAqh}5w7<MZvfC7EkCfBh2L#Q@LV(Q~$wbAoT9zG@^ zKp}GmiCPqGRAKX<7Z3aLR>}fCN0WpAQ0zzh_6K8n{J<g@DS*VAILTD?J}ql@_R34n zVyolCE%9%t_QK&z$X-l{spCslz_Aq{Mc5cC^UOa+gaDQf*D-_iatZ+ii3K7Dr~~O= zey<8Vv)(qex5iWQ8YKv7L|FS%*Vd={rRLBR3#a*KGrS24ij>`M+-6_5_)FbG-qEAs z>{RcJh~H7A<@y1Z&@s)kZd~-0!s?ZrxFAGrt0o2IhakrkL@3LG%9mL1?_#4lGO(;J z2?>d)EWHv$>9-FxHFaInzFB1K(72c`-g;6*M1<KoM~TwsN0iX8*beE|fRYq@B|pP| zDOE#fj;HcOM3f3$tw7@Xlxz($CY_vL-;lzOAa8^B!cSkd|MZ6ygdP1|ow?I7p&RcZ zI@xM|#R}R5P)0U)&dnbum4s0WiKT|Va1lGrSM`0yZsJ7ALl;L&xG87-j?WUL#3qRo z&mj8Iu<Tj&qOxMHs)FgU#5kB22ZBEcf{LWLLm{~3#Kcq5S31z4X+!3e2<G88=1wEH zQUZ#x0-u0VzH7A^2MQoHsV_}PBc+B<M(Hr9a1qo^z#ozYglaP?71Qf|um53*k5Ac4 zNB52-g)G%#j}tcx3bs)E)yoxu>@oO^S$ot^I+zF$gDD1})YxNH!&bmhz<A+M-F7qR zqpBG>4X(W+#+@1lNC?jEO#~QXNyBhq0z`qGQ<GnKTbnZFUg>CAjlk<V7-HfLa>%a( z3#;<#0T^x({cFfVEZt&Yjj~8yoU*fF1usvQ#!JD#qR64cY%H0xWKe1RUd;IyvWfF( z#b*nNaWIRj8%gH>uIkr04k#J*IyvKhf;T@!!P%l#n_3ML(xLC?(#@Io@7@d~@lio* z8Oj~X@y$fgL(NYDvV;<6PrlrIW1yPrgD3~L=dkjh#fOI}Bz%jAi4L$c$U9nY77{5x zY}lhT2Uz!NXRNS%A;cr;<$dq;w4gjdBW3@U?Ock*;mbn@@2`v>Op++<W1}k7@hQJa zhHt`d5l7dp1B<JfiKLDz%j<zw6(6aQCR%kfJZ=EmeA!tqy+kp>Y)?wuy}55yQWA`l z+QSDFO>i;&nt3Xbp3&HpI2FQxAD^%WTe;EL=pU|v+~I7;Tm(RsXXyN|y^~DlPVfrZ zrD6`EE_ePo!6=L2nOhaUMqZviJKz1wba=(crM<u@%BADN(EF)y1vv<YzaV_9Fl?gw z^~H4i<>%7PsLc=3g!7oeUKf~@oib4%ZnH`d8q~g-N>^e#`N)pcvBXLJzc?0Lfg53c z{sJS%OMCkAi$v(>@~Wq#pJJ8yK9*Ie-#?MhMptg}Qj>pbGT)EN`1)VgwO-%s*@fcs zNXPi(>&tINj1}JV=|Qd?DRQsR#iMq?tmTnh+e2zvR{af`)>TWM?J1<!gvo&zm_Tfq zkAbbp?yjW<Wp7e3=;N^2HoFpVT$&#WoUcEj=8JM>iO$kD*6I%od}q^lqi?LMH&cXJ zUDPB>$Bz#P4wl$ewxpG?qQIfdvNGYyarB`0wQ8#eK58jQ`BHZLhPN}V&8C?OWo^!- zN{w{=hF4O@=~KZ#b^cAc4U;%zhx2CljvXmxQ<Kw#x<wyz=2g$4GWCj9Y%SG$w5;fU zeOg#>e$}f!vZ@uOddVX|Wwm_zHx8v#?}>Eel*qFkYa$~Tb755W(K!rC53tS>h*qz6 zV>;!Xb>u=;4+U7pElOWCb>*F!Iul!bThOSV8=oy88n+*jFjzfqXnFkk?2=RI>AV<K z|9EM1DVQ`RFLNOZE55}}mQaDf=uk`I#E?=D+R^@Z`k)<opz~+Bk&4ORU}o3Q+`&Tx zRYi}jBLlo!dFXyiLJZFj<8B%SVit#AKJAVv?=YW^&n6IIYXC+-bO$ML3(R!b4QZ1n z<KARGVok9iVkiezTS4`{zDfv}L4)8*<nsZg63~7l9a?TqC29*=N&w0l!7~EJE&pA~ z=$Ceo0)=o6S^e?^oXbr<)xcWRzZ7jGz{dfeot*P+3y|s^pHUCYJ3#Saqcr9ek!wen zLk9Ray#>hSr~HbU9eId!aY)@y9wkHe`_+o)=+qO#HqfSV`rqCDvs-ABK%{EjYLMp$ z=1K;;jM#N{+4Mob;h*05HR8z@6yba~%W$=AvYbBN6Dp~ZQR{D(63EpYj44oO?_2K< z`dmvbd2B0PnWC9mRr1S4*@u9DAd~Athr|0EYoEj&aI!mkv&f}|PoV*ahueg>Pn>qk z)-MSAa`feE^P?cAr~fWJB#b7uIxu_Rev5N}s3~k!S6h3s6X@R9%Bn&cQb6vBz4{jv z8++BEj;@uVgj&uz`VSS~Di?S@V3kU|Hf~7>y3QpD!&TJa;ku3iw&L-hJX!@-gM6ut zFdTdt>ho>2UAIpgp(RZQuHm{H%pmx2j5v!4r^)IHn7RMTV_)t|Hz~>Hl&&_2&_cu= z0Gx~heoTW1xJZ*|&ZOr&o8U;t^p(A=gGtE1WEoY+^4hw3;kL2j67Pr3y;>#Qjz3T% zdd_?3-(+Q7gi%XAQs0?I80MH)l3fse>|!hSYR2HME=bw(8ov{}#_#TGlZDAb6qiPt z-vii}b^Q|?jpknzMmA6+XGh>hh5~vezSF;~U5IO-hN>DLq)9xvzM9T5co=;$M-l<} zE-w@KXYAp1eqNW~pS$4$1G{eK!d8D5hqr%L+Fb=E#(vBFX4QO=SQvbJd6P4oz}6`t zakI0H{$jTlayfn!C*u0AzT`=u(P-c3?BGe))4&7e+x+&IEj8v{zZVxN<}-IEy04Wz ztB?Ib(QZ3^w}tonWBOKiD>9+ZWiNt4_Rr7Duw|}={s-tQsU6l+v7i`Uo;|b3`1Ho4 z92{-_uVNuK>r^WLX&f9L4q=XwSjpxSVyLrtW)}9u^x^N!zRAL%P-ugfZ(A2k0@h(d zue9-FU}k6SKUBAwq512!)6KkvC!tkM_vbk+UB5?KZx&6|@xYpE9m4XS2frS(iOy#} zcpMj;pLF}&e$S}LGdJz@v-P%t^V(BI?$}x#t+a>!K8Q*_)<ll3b*;Uuczt^qBvbm@ z{c8T=$261|BSlROrG8&W-2em7<7M2x=CDdu(eXOnyDq?^ts{@{uvt%ge8uvoY_lG3 z;_n{aEk)t)wXVmvgue1VdtU*PgoKhe)BJGE?I=a49IOFbVsL+cIwS9QcxF`=a<wk> zciSMaP%^XB2-C~)*ra+at;~#pdGYq|i;&A-LZNrF=MS=N55som_bon|Pv0}rFNbb# zOr<?G`@8T`{<aoR<wer5409&`#QkqNp}!aMSFF;kgY{P7Ctw1C*FlEKs(E>1VTYK# za&MD&4A6#o$CC7`Ji`3d+#g;L0%JSyrR?4|FTtU3Xs!ZLbtBA4gyZD8!Nz56q@;&5 z_RX|)W9yW>=xiK(l-AQH_bFs$U+_dq&AV-Il$P-5o!WT<@r7T}p6lUq?^_cDQ`n~K zZa%XNa;9k#w=z-zm)Nk*7SH5uc%bFr9fZ?I6~bPRC@%-*>QBnwrOhJ`b3Xb|gIt!r z4uC5!WFG}uCuh};Cw`}T5d3{~byRG$*xIygjCy=A;k}}xZ&9$8-Yu&{>fUu+yU<M} zlV&&0VCleIW*O)e?CK?c-of@=M4owY1lOZOQz0@82>)M&0=YsYMDhO;Aa;o2{~aa= zU!r5v+w)Cs2g|BURO{u6&~&kNJ1ZH|^3t*bC33VD3zz+{rui+X!h-kAqJZzu*z+{C z?v++LtQzk#S?T<-Qr;53m9`1RB6Kra?C|&)jZJXl65J`P(hH|Pa7543VW^Z%_|EVl zWtijX+`I-_hk(rwZovv!)0-VZ_hY@aMCge#=kq1Gkid&YqAVv=a|$rry|Al8>~3q& z-?@NBkK@;VO5fr>TxR(z`r>lxVy1<=R<oHF?E+DRAV#rbwt`Czwr5M__fIFX+Jt3l z1{3z$%B5On3qoXss%M+0c6iF`5X=j)jLGR&Q+a8%Zwpp1$7|hdmldy<_q#h^b}tJ} zRoh;PiFZ84cTD&>k4T7ZurJoFeZtzc_QI^d`5{RA?cqN;NIo`g&m*1owF^@cNL9>o z-opf8xb)&Sf#O<O;$*I!sPUaq>vea>Yu((r{Nni`8?>8NUOY&ZQf%vM>5d60rTj{M zFk6KN<q>CDQ>cV)e05N!lXHL+NfQD^gr41j>9;k)QJIz%-*l_%dBm1>q4-Gkz!TI| zyFuygL!p@;(yzn5utTJ)VP=7m?yrl>zZw3#pSsxFgq9?@YMU-IQS@t@EMw9@JYrW* zv}(+dPFhb~UTq}E5#vZ4{Lk9-!?yEPirvR=rX=sVR2@WFuY-m967Ck)(B0x51v+Cx z4OJ<EM)Un=hM6vlNk^+>{wbyH`^TwK7g#V)xWYrY0=r3@T3YH~Q$~znyGv?>+O(E2 zP>^_AXZ|2#{b1n_ug3gLroeKld4QpilX7m(2NtyD$ARjnk7`7T+`a8YJqc9STi1Q< z$QjF@WQ_!0E(pz3%$mzRh-PSp+_ebhm?F(ym1ye~SL^c;M}!H}kVFktxLt&SIU#S} zINhJ_qM}+Ca~WxHi32N@sAXcMn><?oTA0$9lMskc;r?!FP~rjNB6NCtDuW$1*H&ec zc1kAy1W2bH-~PVtZw_zG`A0nRelRij+qACr;8UiSk&1GC)@Mcd#2{TBdSJ~B%hiA$ z-_2At)AMGWGOL^2%k=<Le!RQTYyW5K!RMD-eJgD89hXyMOu=jqn+fv4smQYXpxc?{ z!pjm}-o3g8rPzj#t4mT(<^HUk3$3uR)cg39rVT50!K9uN&dnWoy_mdEw(qQ1l$8-d zMf&~!#){&NvkR+rbV9maU489bU9*0Y@YG)U`0AM4beN^T4yl!(CjBM*Pwf+BJo4cb z7PdDr&R!>0c@KvC{9#N*BJ1klbnd@mV0QDgl;;cD({G6IxN_jLorBAualQUaJJB5c zjcyb-yb{s4n7Hs$?qM2%(r@4LlD!*kEbf2q&8XE`gX0-&W%YBT^M1P*XS%@5)qe88 zp^>3-X8)2e{=dC|=@rXx;gKWP(`3Sa*y?KM!dh_m>eAVK?YdKa(?06^ksH0B8b}*b zelz?<zGU{l4{MEv3arm^@rmD0I@LZ@m0gb}V1<;fi|hC9ndCz$g>R=yMxNP?r*PuL zF_IF-SMK;HVWV<$8G*^Ad3m{ed-q+&)ymNVc&tfS7A{pV^Nta%hIJEXTqT@5K)V|E z4gRuUKj(F~rVjYCwINqDRSg=l`ccr0d5dUjKv=+0$jdK@-?-2sU72VQ-X{5Iu#xm# zIsbFY4<V}WAyT%S|7@Ig1io5ivRtKFpPFPkq@Mj@0Ns*&`B_Z&f}i@AzjG=yX*V6D z^B=Rjo6(Q^ZDta`2MV?fAp4IvGEA*%M0t~p>EQX{CRF$nuCGoR_v0F~+c^ty{!>}r z$D2}HlE@Cxcot^(d)$BsK>XD1c~!h_qbB)EUnr-Xw_aEPaVqtTEGy>xM;c(lUf%rJ zt&FG4c*OwfA(-Y=UG4<-#d7k+Z^>-}MUBG+FoQNkxfF02-pZV&!p6>oMI}}d9@jpE zigU03-7yK2SyqiFEUp)QdM5iKwn2bU*+Ef-jqO#w@5L$Xz*F$td4B$(6Wz%o;gUb1 z;n_$*OSiju*N-yDvhwGk9<`qC?OEFBY=0w2nVd|%sDIaWsqkj*gpHvgszscFeCw3Q z#pSK^p$5k5$+E%S8tSshYLOLnyi7-Tb$wOTLNn;W$!vChD=wj!_i^%cqsNEy(7oL- z^O=j$*_k`gyCU{^l9urPSM8yp-=^$YvYLZA&dgrC+lh*qRMtB^%62gsHki1x`o$bx zLpZL}m$wTfP@-$R&D8K1!YOdV07%@;rn=@2IL^<;Uqxeb-|M979QoqKM9D~&)s&(A zGkRjzV`mi*p>NkirbW(K{iay?7&ct9C#An$sbcOpBctNh>T1A0L!BT7U%JRIz(Y0- zxk&gYXNBEVl{M=eLdnLw7c;x?4(Iek>|o#4M#6a`vaI0K>`WRJMJacS`13lMVWd2A zoZTzI5d|R{#Fp+BJn?<wKHSNqMVdIe{YVxb|KQ2XS4WEZ>bDQwg;*ohwcsJhm}eQX zVJseAnCP2@pJq7h*>&6}$zz&YPsYbSx+w%yNm6<c)O2;-k9{#P@ABZf0mX@6Km6&X z5GsNV*$Q{sjoXMAeL?fHCiMO&n%UosfiY_Cd$o-@x_ruOZwq|?t?9CDNm@&mc8)1g zn~}L}vs%y(cTBJvRw^z&H53w|*%LyV;Qk&-rktk#<)>dwabx4+N(9we%HhS&ZD#R3 zoxl-b?`%;C6O*R03mTWps7wD<0YUZf=N{pKPer5{RZj4!{QSJ*<h1C&D=~px3`!_L zm!Qc6werZg(;Ac)E$a=9P2h|O9R#KRdn-bDado%aWda9w;XPYVDy^&!1*q5RC8;*_ zRk|bu<TJig3NJ4d^sMZ<!fYraBmE0NlyQ+9CMKodmCI|c4;Q6Tv`+G~^s0HUU-%r5 z5e7X%4nl^?BVzgdX}bP>BlfKx>fL$DhnsRop_je+kp%456Jp?GPd|o~R55C661{4h zUS$!|6<mtqL|okddrNl6FOCh!S9A|h2#A@;;@(pC996LT)}1->SW_k0jAk2=?vp7# z0(guCX~=cBsjJypcF&Udy&`0S5~&n@a(2Rp^JUCEZnA#}%x5W!rbS{;+&##-^xkOS a;n@V~du&xQx&2c}0cr@OQjOx9i2n!s6rPy? diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/img/example-sites/kippt.png b/src/main/webapp/bower_components/bootstrap/docs/assets/img/example-sites/kippt.png deleted file mode 100644 index 7ea1742f8092a97cc6db030bfe9fed35d59b9f71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48259 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 diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/img/example-sites/soundready.png b/src/main/webapp/bower_components/bootstrap/docs/assets/img/example-sites/soundready.png deleted file mode 100644 index 94e0e01b11080edc0e552177a9e352cca16f4f7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50225 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ŒJhA5QVRxJnMIY2tpVFl{ZZO8fu zpO!e+c#H4C79C*e51RGnzCC-PwVI74+Er=I1+P}Cl}ZhK!%a8cbnMtMxP1He?FI7@ z27$c{3K`%PM=e@a4D7xAuDe!NS6w^?G6Dy5QB7P!F$n%!ePOBH{Ff(AY)l5<d*J$K zpZ~_V2nI$swQ}L8o1y~LZbEjI=QE$wioIHUx-0W!ciU}a3D1h~Dnh)F=$^%Z!_SWC zDZ>RW<IZaBN2X_XP8~@-73cAH*2Y(d-3zH)NHd2Kp#N`{&Rk!vYMsqW|1U3}em%>- z4cvL`YK2GJD+i^qYga+4+3r>jhJ)|@z7KxnLmvi1Kpe2j;{loV0A!Y=5Nt8-DUD4Q zXL;7^tUvhZR~wz7AIN%p=pq6F3zu7g^o=JT{n*d{TD`s@d|*LPJA3AHpLswS_V<7K zCvUs)_G{0i?MuP^LLi5Na6#`1VUWaXq6U@d_lFvCncS7AHdzRD^EqF{<R%I3qC_^f z<OvFE8WImS^iRsq`GZy>DbFZNx45qES&VYq>UOhAV`2s8yXv>@pa0S$uV($8kB2Z= zXEKnLF&+gRG~h<)1zgL>5D&sYDut7~r}rK`uzT*<o|)?pOkQ_rVrHxa2?AIE@UsOu z9qpefN1uA&#ZIfM)4VA2dYpBV9PYrVJpm%un;n^sCcs<t@~uHp7m#%D8+nf-B7S74 zI>G=)fWrpcGFQrZg9I%&lZ7bDa-$Vqq4a>d{reBV!JC<xDHaPj7f4^{ObWq9=d#L* zMPYRFO*cRN)Kk}8fBnOcJPe-@$`B+9<b^eY6ex;U*Vi6+<Z*rJ%qLoFlM&j?%!wdp zNhde^g5a1Rek1RD+=MJ}f`>bbP~{ehn*_k7l4l(4^_lL_V?*g!Msns^yVr9txMyN! z_ryN1`Y&yqtINW)6eqpx=|nGNId*my-xr&!x2>G-4qJW0SCkkFqPj|j$8fdVNkz{# zgyk}?1nagj7T-K(<G^t35oOHQSFLq<tTMH8()*ScJ?Osp*i-X!Q|$b*RexmItF2!0 zdVT%Z{-6J5qtT3tA<1<^fRHvd=QE%G>bbM?fB5_Vao?`JR|TN}a{WN)NM@2tLWcDT z5w|NAL;x*pve5d3oMi`gp4q$eRHpsQi__H_8jrSG1acSS#XrmN8NSI$ZCWSBqRk<a zco=51rO2EapC;Jfq-eI+8V^5nHf}bA&sp5}>zDIAC(6^)y;f6kt*T>wd&PKx05qqs zo7{iXjy*^A?U+8eV{*?-Y0pf#NF9%9WwZ@|!m2wuQ`wDtxw!lB&pZHOQVmWpW0H(^ zVV*m^b_r`EmVz|75Y8e+FL(AH^r2Ejg99O3xd(iT?ao+r7{)=M1A!0xb~_!$SurZ0 zP4L!rbeo!^(j>((_wL;T?N=%k%jF8*0vb*PxTe{<f(3@_tFOLVt5$C~dGhr$XMjT} zT0j?<3P?#$Bx&+59{tM6a<P@EV}5xlPx~f2Ad0W4{!NAQ@j`GW?I+A%(HsjJ;SFW$ zL!BGrZ0u2bof+iDu&g9F1qHZJBt^|Ij-5SuU1hpb*|E@^7c#hEdio0&p8LM>$>WiE zWH@l>0ib3IrE$M>u~+|WW2s@pT&>z{Hw%6+NK!^XP$Ra(QKm+ZVB-F<t0$jr1tgOI z^0pA@H5Z$;>3yq9Rw;@?sP;|=Q2-g@F$&%I+FUup(@(!}=In(+=vx&d6wf^kR1gdb zBFqL}qtV^B>#8RJM{H?dCMBaobLo42b*!*w*JPr4g6qInKDL>d>;EE3m!vmy{MfVW zEuJxxn>Uc<M79-{?n&u4SS2UY@W!^fv3aUy(;>6}01150F!SXz-9P=>na=4~nP5qw z8nqX_?s+9{_B3=vKj#9DAM337oh24jYe(<6{`!+sMSr>)jFk~B4S*e-h)$t6PEXQ6 z7~!#Mk$>-ZoOt@VS6;rb0q|N4AP9r(O61Vlkj|rX;ZO%cXupvrbeU_8!x-@yj!Sf~ zbfzf?1CR>qYpYq7K%3@DM};CteD^6J?)<8Hy@C7~t<B`bBn(q%LdQ%32@V88N^XHo zTR8EVh~MBWufFoi<n$EuCuk4g--T*{B^bwDk5ZN%9Q3QqpO9H(V|*9#Sa|xD+SDzT z!cvy_v0hAv%DDS=zPKSzLVItbE0|$YRJoAKq*^%uXyZjf0-IIN4wNSqXGeA&Khl|e zX!&*DU?+Asj9eTwU`%p$ZqR!s?(Hf~wKi7kI+d+XMd^M%K%=Ap+!oeRYuiu0g-WAu zYIX8!jFEUP#^PIDc)3W~UgNc5AbiH8kmPl3<q6yEF8C#F=?&{!xm;*QX`Ir0_=o=P zk%Nb?aYiYP@Bs%AiohrGnNA^mUWmBLM3(b@KjeDDQ~$w;OP=`AJiC1uN0mwk9*43H zo@+GbYzfcVmkxEKG;{#Nz$wd>muZ5owSqK(lFU4{+{u3biM4<JsaH-v2m0}>sL%7} zlIUJ0-><vg>Gn-$mG?T#m#jSI$34zvt&B&4S05Z+;FBh{KBvwVewoey34oriA=k*c z3lAPTtS5HAcDaSEq0e0)*5FfzLzmj}MyGc=EwqcXJn`yK=O_UO-4Slxij)$n>HN8K z$W@}}AqC)PH0eOPL?Ikj9YYF=A_xPd+5mgGQaGjqd7)SgEH&c4k-_6=v(dR;gfO{y z5!;{`9Y^A%*^seidY~d;0o2!u(yQ9Mt61_GON^c?6!%W;ySX;ECyIc{ijbkl-F-U( zaFj{I>_(1`C**bID&;ME#(yKLE4K+4V}3MQD62d(QWk2v7JIEjp&zSkQiuv?!Z4`j zl3`^}|L**Yzj)#0p3xyXD)HaO*WM1v=cF{|ExbPq(PNo3SD8_FgskmYlXi_=%>%q@ z-Tk+^=t3xJm13b<7ObbN;TI9#E!@XQPJ86(rxY`iB9GkC9ZWD281jpXfu5TR%cbxd zCm_R>k>v7$S{ZO@umbs-B&yyTa8aC_HFv(FYvgU*`|*Bjt-Id!%ndV>=S^F*Go?4d z_J-rf@Rl2wnnxPnMd8qREFmeFHHTi9lZcj--DX;Y<i)kYmtSst{q*{!Q)erU3p#1V zwF89OI8o)@syLQ48|96QDyqeypYi}){A6Ut%Ef@V5J7R0AmV{<IMa-Nb2=~9T*q-C zA5*H0%W|t%Z%E<y6Y^fAEmtA6hZP(1965W+F3!!vf^{cYv|XHY=pr$rsHxisLXVMK zWo+sx&ogW5;_eBwqil`MLJhDHr%#`T8XWZda2*k(L1J39S_A&9+Mzui5u#|(*auie z_BNRMBS(&46Rc&N7i=NGsz|+fJ*LYZUsoy5<-sr-=Mvhi%jD@!=Y2cGbg4WB=E-=w z3gv#5E+<3lxjRdRDGLh6umm1Yvi!AnGvi*!M52|;B&25bRK*XAL}u$(&OCm@zMH3l z@S&c0GHss>gK6JaCM_`@Sl_F_1diupXTuUgJ88%=6XQaz<aENVK4HW>>FDEYq`quV z5p}-LHHWkqZD;>OGxZvPBP{qbf{Xz4BzNhUo^l^AEUbR*%MXPzU<5%$fqSL`E6#GA zPtEMQywdr<eegq%J@v%ZP9W?-i9rxbN()E|tN3Rw^M_u{O`yK}Lw8rE{}J;(xO)EL zBVYKpT{NlLFVcgP6W0$ZZs7#A%{VhIGgf1(at@F-#{T7``AjcUjaaSsvXySK+(}QZ z#i#4Z<wlB+2I~#hYh+_Po4fAHCJ!>D5?SgUx;Gu)#TyG=+?4gx(fso`Nix2tcJRi^ zSOxG?lIKkHwAVw+I~@z?;{_}D@r*ltq7<Z+w{+I)HJgKYWuR8OsvE08>Vfj)j1iiJ z7_s)FoJ?p!N7K7{1-2zc#*rCrH!Ro<{K5J2=K(*&K{+S>4ZL4!qlJxn-6>MbNI8?i zT$;c1r7wNyGoShFpZv*x`}C(j{kMPnw;<v#U%rIon?BGL$61;|G>oq5>1UpK`q^hd zPCWJ0Q-C542oPcg1P0m3hN5DLW+~^HC;Ch;<jKoP3_Re|FV+_pnj1-)?w4|mi&i{n zrUPx%8?K?1qz)2WN@Y_{*PD7ewX~Cq?PH~{lI8A_^jM=^|Mb(J{YriL=|M7|d!Op` zAP;Ij4;Xf{50-KIB@raJ0Rjae9c!K%<MYjPIisn}_&5`iy(u&2+T8u<m47=0!p8fy z7ZXaNzpcY2g>c<Pj?(`QAKdpdKk-vpN}0rvUZl}%U7jxtpp|%h*S-U1UY-B@ANz-A z&Y!>9l?oy(1=l#0!2c*H05K~|$sM;&|MdU*qvf%m^Su3wuRr+U-~3L!>91}Cub&EJ z>BkQp{{dkj<F)NqX2iF<sFB&+VB9)>NK-R1sa?u+rp%@KAP}q&h)zH0c6y>Vla22* zyvU%Q2JLvqO=fnF$rN4Fpy>^p!P+a~`h~1G)`Ofa6qqj)A(saElk<&FJ$?C$udcto zHfZ*fev&2N7;V%qC##dL66Ha>v!-N_X_jjs){C{5DVFA&kJ34QTZv0-aef+*Hd2Gw z=sd$1Ajz_ku?j*0-r&Il2end;W5AxHiofZp8A9)7)u;wq9E*d<jkCu-@rh6TtAF*c z{y+cj-#z~L<MZ?Lk3aR~GtWPFX%RemDy`PlT0QvS*PndyN$0h~?ghCIY7wbzkQ7QO zt8BT3@HHBTmd3Poawbm_<4NPKtL%lwa+alW7Qd%b`9N(dr00-pFIRZAGK*p<W|OzT ztM9QI3lt8eNiVyQdqoDvf@rTN*Sd|%?ZsN?zcOf^OX7(D+x^pNej$lxMX@Ra4s_e{ zxyVD$G_lFMCNDCtz}dQ&Ct8OdA7z9CrL$ZF+$M*-nPS-XYPP*H?$)*&tXI*V-|oU0 z3&~mVBjF3leM!DO)A=T<fytl$`JeoIANq;$FqkWfvJ|!~hUmK}5U;;}KFg9n|C2x7 zJA2?~fBqNFTsXJ=1XfT6_=YcWGM8K`l0kOgcOL!Ue&uJ2mG6TZxcL0vJo4o~%?$P6 zg+;dS_zxUD{{2i>iUD`NAaLgXfHoH<r5EQo*%!{4#GP<h$g(I!LHcWhEDG2}Nw$)F zsS#`6H!2fp>}P$?<Z5!SxBohD#w>%HTlM0W#|t>LoPW^YxYXHLU*BjhEH+w=&Sb%# zEXc-2`!ipD=665+^!=}{Ej9Yx0eV}Ws610xbgFc3ID|^ds^i5%5D6X%FC@>`llGdO zAv%hYzQrwcFmnqqIYKOy9`N8iNx&8MBuEIbOpbLSxyG40Aoj#TEFP)TW5t~Vs_bvS z{ADP&ef#!z`@LtMd1mk4y$25+`isB#i=X<bpZeIxK86**^696aUS3{Cm2bC$y?Thy ztgWp9bTD60WawN?ETgh>r-ig91~`Rw_JR4t#uDdxpv)dFPLwJ)kI$q^ai{%URo$k0 zYzZ6YWk%z>lC$_q2BlXq9xRX@LD(9${&?Z_m*aFG%Bk^QiwB?Xv>}{Q&0dJR=ktV= z9v8|cwRVhYX%#U(1zqi_0pXeXoR82Jf|jHN0B-&C?aYMPUJK!VuQF%-HFHP5{ZS7C z6O9|ir3`&(6bVquH;IRX(Sd-w5B|V+KK$j67r9sWJfakU1ns3seB$W!Z@c5p{rh+R z@qhil{_!vT%#Z)%NB{g!|9J1NU2g^<X;)1|MZ_tJA-EB>$>_u_fIVd3{Hu>X`QlSw zQ!<FjLSon5b#i*=J}D<y9-}J@YjSY<RpLsK40Gkhwo@A^JZa65fEt(j2jBriZMqQF zyZPmf;f0MJ3agMQs)SV_e$kuRrx85NQqf-)mmkWE;@*UpcBL9buYE@Cf7_-0Oaqox zt$6WbsX8`M72X8THZGof*i%9uI<aefyj+kJ#G;F7XQtC`>Kwq#J8`PD$`~Kzk8&|u zzrxxBBO|)PsT#a>s?Rmd$XAqh0l|QsSC&_xqd0ScR~Mlr=#j=_p0FvS`2L|Ihlc$D z3U<Lv+;RKu_uhLiPV@B#9)PolOwn<o>_Z%?-|c-q_<Xa`0M=%A%z^6<e1BtY!zeAl z-wg+&n5{+hrpPl6QpWR1KI+)h3DY$uUX0^EYOKDaSX=D(4sd=V2=6y6vz)|RiXq$& z*W6%bGxLr1DRUt#wX~$v1B2lg+I7!nTJ@C5l*u-O-n2(wc`0L)j1P@h&lO%n#w(Nq zt@G4VMrULW@R6peaXJ_H%)T)Zy8^RsI+@aT4nmsIe%n8GtLzN~x`*@a8Kq2yMd1fr zjxiPhf#kYyGaMvu<UD)lE}r}C|M;JlJIT6~dh=u^vjLO;$47q(2*jQfQ)4%uxS`W~ z<&S>vw|?oD|5>R}*<yDQgj~|U;hrn9^`lS}$2@cK`3FA!;xogTiKO43oI85r_`z~b zcl(1{708u>r>+=xQ`x<dhVHy8Ews_JBCS`zIc;`9TyC_F7E04r>b-ce)#(m`iE$;l z9(G0C;O)MNdwgy`G;(<1Z&}vifMv3-lMTN(UMLjjX66nbJlJfsFE6h2&z>5a*m3xd zyAB?W2J0Ifd1_1R%~}DFN;O+<^;i1YrDn2l{xpvprqMXF+8-XDBym85BF{B*bps<h z&K2E`=y)Nh8sD)Iu7twv>2kY)0c98Lh9sCU3bkhf>5s7LP|Y{T`%vTK6T5cr+Oc!z z&K)~G`qLk6ciLyqotvDP*tdUw82C>={fsT!*MI+`AH^&1JTp7<;KL8ydFP!+j~|7H z>C(ipjE#>&fBJ#%iv6(#$akcW(%SVl{zgysHIErZI6qr&-3ZpTQ2DR(ub)>b6Cz_~ zlPb{k2uAdhwiVA)zQ2@Y_H#PUI4N_rtkUH{2Fej&YMBITeT+$*7LdyHh~6^^-L`2c z-6!vo6&Z8b$UPl#si+)YkMehSQjxK$2>@TjE^x*42v8Q1*GQmorA*f@yD(SaxET=s zc9uZ0awHg&)EPuBg(?U(IXPxY;l^M5`G5P}Klt;@D~%uwQtI4XTgwnG_}g#2{ewUJ zff3eLmM;Cw&wW(p+5h?P{_t1-$^R<2xKakji6~-RS*^eYQ5Lz1*%J>fKKS59D>enm zZ@B4>_y6EeU0QgY@r;|?vbxwUHJfofm*7k7Mb~P%SKF3uyAaN9<;+n-y;Qa1yy)|< zytHw7sZsQ@eY<zI`?ckjHHxvX&r@2}%30oD@r|d7yYj3RLZ%mYdd$@J-g@`jZ+*uN z`{vhrk3Dr}<C1B{3CzsNES(PKl3phi47B|q$(}g1_{{0`o-w=k&FNuFCmoRv*E`vI zFQ1qUT(5QN4)Abn;ntcarwrW=4u_7KcLhySN(V~^TE`Q@Nkd}i>#x5Kt>sJqEm<Le z?0eqxp5OlM-+t}%=|A{`Klqz3{>_I!{NcOqx(n_lM!PtB_WY&Gm+OrN=zC;rf6w=P z&o{pDjazQL_1^pLLy9TLedMXdNupZy+SnL!DPWOGDG?e4Rp|UrSFMuKD%!?czxFl2 z3qZnnz|<4{_Rk!-;ZJ(a^=_XrX%(Txoc+IbDitWJMjqP(P-{xYN*-?!Xmf%{4mcU# zu-JvfIm?v;zcUV5YS@4f==etfPKTZh4GC<eb=%V=#$9J9FjEjbGkM9w(MWl^L3!R} zmzrzU8S<-<iT|_4+vYke_|&yM-wOqkmX!(%VPj+IAOF%X{N}&??d3){EEKFO;{rKe z=!-xGI?G;q<(1KK!rG2fx$^Gse*X>E-Mq3=A8psJQp0va&!)>nfsj%0;jcdZ+_SH7 z8BW#wyWV#D_kZ|f#Znmz_T=P@&2LN{H}Bfck@oasf#wPqCF4#h3fj@Ore;ccgH+A8 zljkpW|MKb8C(o_5>uWk2Ocle3Y3!{_6<wLogTB|Tn?xt&J!<?Y566LeDME^RS1UIi z*|B4+c+0-=58QLzJKy!4KlJ_I`;J}X`==`VcTe1W<Dnal@7_OKnO|-`^z@m;mpkXC zl9kJGbKY>09j$i1ndH<kP8x2i0`A;AR|erUo8uk;KY-1tM9bVHj<R=KoV_|?^Pvn8 zDS@8jd{jPSM!@!k{OZ@f_KUyxi;q3}=+FJ!&t1NJ86f=p=Rc1ffL_E!ckkLYF+T1p z`rr5d_roWIpNWdzJMXv?d2pR>2Utt9yi%#=S$5{kndhH>9#C}Jn>p&(SdPjy0_VB* zB2Sbk$DR#5&4jqWUH^?!&)q$-vm6BO;=L=TICs`ngs(cS<&@B7y*2b6W!8k2r6|Kc z<kGj?XIrbpjA}u>Dmfxv;^_|XX}5%$M6-o6OQ9h=stqV}!RcbXvLM)&xCCLcu5+<% zV2Z1cA<En@-?r=3;yLVpC^n-wO9kfvCl@)8zU0KDcYED`|C|5%(Z`-QtPqf0?uAm2 zAz`pkT)9*TUw!e^&;GrSoj(1#JMZ*fbdEW!-FVZXet)p#Mw|`F6^jhxl8Y=&o2`B) zVWnDeVyZN^BieIdiW9r4fX_e{{GhCJdjwLt%3;r`LF*hE`n4v%<V<4As3gUhL7rXi z4xgXzJ$0_xi?d`fOgk+z7_8RYE6tXRfODh5*1V}qdei%)m&*FfGHvO~&UoyQDNgL3 znGUHlrjv!>wnMY;y>0(>yDQ_7cVz#>vHcT=c8wiEzpWI=0?yOv+3`BYjClAfP=SmI zC3velsP|&NnM>y)f}3em4s{MxTXSMuY{s|CD1qBmGmZSl5z+wLx!E}ieroMDF}t`g z!a4lYkN?>}`ITS(g@5o5?z`_k)Fu7eul?Fz{^eip+O_jHe&aWO@CSbo=K>#y01Up1 zoYJ#r&LCQI;oNz+i=<>EA0HbVADaMB0ZW`3+nvVtj3r7v8{oFB0RY@ln>ZW<t9g>3 zHMma#Ru*4Pvd`C70$B<Iyp1?8EBIEOZRu|=4XcPixyZKV`Ucwcm4=R;VE&M-{XF7A z;;kRh0R(eqV`@kAi;ZepgVUy%aDpP|ZKD&b8o@?D0b2C1sxY?NgY`X;jsUc+lJF{A z1HJNV3~#aBmHhS>ohDgEp(KKb;hHmzT*NQ@_2)nLwa13q*YvD)Xd`h}D)CeqEXpYG zHEZ>afAq7zboMOa5FXSfAFY&e_;#0Mtgd2#CrC8f@?91RKMWXT<>WYpWtoXwxlf@u z#W)Js=E#6G4!?v!QgkkH)OAW{dvd23vAXGNCrY*A>~ekZ@<Qv*!;`zlOUa-wyQ^l{ zTWR%^gaS{JduC!*`31i@AD#WOXq@6{6KBq<2XtXfPM*jI`RY=u+e`CY7o@juI=uPd z)b;x&c25_^%3-D87bJ=I8;|V#(D#4G?fa(+-4(C(G6jrziRYR0B)GvrW?UdnSQKG( z1V4wUQH*r7GAfdA{2|tz3UaR_Kw=l+iy1r06ZIFnY{g*|(3o?NKK|H8Kl)J^uBaFU zIq?U7@P{}ud_Noq*6I5C8XUrhAAb1DU;Z+zP>`JU4KiMeg>t1_eeKk#mtT4b6a|K6 zgYBv;DWdb-Xl}zPF7u50%=`JHxBlq<>ke0{R;sw9Z5|O*XP|8rmx|g)xK<nW)WjHN zf!E4&%RX_eSA_HlMbKlOwCxFJuOQg|Lg~AwcM>INHiw58Si2NmZK#dwX0g#BpvcV7 zYE=A$j7E`CHkMxX@R5N294dVHP00neef=%wDAx2Ajj7#dTUNX`?_fw&eQQBgk|Uz1 zGMoQw-FqQO_sw5C(-~%dfNdlN5~ZEh9tvS?L&`t{9<p-y%IoKU_Q!tq)T^&X#mME^ zfCG*Sp({4Y?R{}!O?iS8SB42+grSeJ?kM7Zz$@ht%3#x`4NHMv;oK@tEBgRn`^)Vw zT_$%L(RM$ymKD#&jnL6ev$Ly1j2#NqeP*HYrH7u6*Vp`fs7#(<Pw6MUK|B~DOGZr{ z5WQ8CqN_v{Q;Q~9p;BIdRW#1G);Cs`TJ1(04>Fb0WdxG@f@i}#p@e4T%(BUne{^SQ zZ%yu<8;kr<dIh7iAa3LMa7UZ5N|knF+~j$Nf1`?cw*U-V%LVa~ODM%UC_%R}3YL!c zbj62bwXp*S52ShKwvQGENu?-SRS2m><8QzEmDgT-4La?g|MP$TyTALpFTD67c7Qco zESAolJNNs)_j~wg|Ni|*+Fo8=wr9*yrU+XU2nYP!kTy6DSoj-u?>JBhB;(HT$aOv& zmX2P3=R)AWYi19@L+4pOOtXHP4YCwhM^Dde`n{ua4ckBI4WR|UBOKIl&GvoMWHxHb z3ye>b#hd@->bz&47PpMPAfe118r%`NB^rgt6T{s0DJJXIQ1FSL;B~DVUY;7K(y!p? z>c4tx;8b37qHMFBr3eH6$;X}?D-=<4Jxnt2OOnh1%I%^iwL=VQZAy~KfU7)NxNxe| z*Xp$fzV1dpi}OLJm!MlIWw@r0B*`mntoxh$z@AFUKIJUd$}30hUiNc8`Sbg4Jo=H3 ze2`RPtGjF0Ty8<AEUhF+$r+A!b|nx#jwK|ILNX;JSDwin2ssa+n+a0fe$gsH&JDrR z1+=Uk=lm_pA!5zxLY-;W?j?(zI8O47ZvWh+jp6DtLMUmW#*|`^<czY&NF)sVdeHSm z1n?@T!Ek&ycdHkT=RwE^D{*_dv9ZydsZLfy&=5Y^;VMqEW@`x1GfdLl6miCq6uYa% zU1OE?)!h$;H8rRk)#G`Rd-|CR?fVW_I|+w)8MT?Ke0K<RKHf<0;jJ@7-8dAkRuE~Q z&{0lFj+{wXW`T_}b^*C3xdb*h)h6>)uAS)%vILL~{Q$@a0vcxx!yGQJtiVi#A2>5J z{qQ5NeeM4Hj~zcAMj_zQ0t;uu%g~%Sa;;iJ;1r3b&M;2m`28RL(cO=I{f|EJ*}#tg zg+UhIy6@25ox8vE>2tG%5+m8D=+-!Mxx7qpM_oGl!PrGeF0lxql}WSI8BGKg#?Vb$ zOqq=31Wp}T6QHY9BX>hY5Yq$r;VWg%6OG+mQZ~V*D0snmLj}=5AVBk!gm^7Y$c82F z(Ex|3;X|hGELLCe2$|dH!E1~LY~;7;>Cv9bh?s@B#1-hw@HDrl;l{YU1nuJ{`@mMr zJS}Ur9SilvuRL4VxmS`#FsYJZ4xui**3kG|<Thg^vl$OcxgtH*jq^e%v63Y5_k83> zlZN`#=RWcB%P)WDcf2djH7dFXp6MF0Au~#G(FQ0`g0vBB)5P9$<qKXb$|Pkene5JY zl19ar9VLSWFq6P8*V57wj_o#lvy`42<BV39U)t)WLl8mzywe>HQZH0lq6cYD@d&h- zNiJW43CiQHSFDLl1si8P;ge8SeN~vO&dg=!p72!0{Ro>>l6P9Y?nI?jpgd=s2U>A) zVWT=$%5C9W6pZ1#k#AL`W=7Kw$46NQI9Th)Pc8PRN<pSP*U6ml7}do);$dWJj<lSz znbv@rOXCJ<4!z`5sN3jp=;(^Kz3pw!KleO_Y{J1DoxYjLr!?_xN@YMeRtyDQu_age zpMCt#Hr6+O<yU_By6djPfERCj`(5X-oIelU82TYlaq@<f2>b+r4}y`fmn1Hcpj;|F z{?s#1KKnv$$9r|-5*^;X`^=>aJ*9R6y_CSR83A?L8}E%L-mteFx5RuYq~uuT5*QM> zRuTf(KnC$jRP5wg+Z!_5(<D>)7kUza%oycf3#RZ%fxhasz1&#byW*t8n2fWb^g3}4 z#2*O5MU@Y13?}lJw27t-t*3msKakH5=Kp&m7&5l?BWdjVc71rY`3bW$J9NwK_kHO5 zyF+?U)yB#ySF1^!lF5KVMZZFNbDeK2{r1O~+d^t8ckqD}(%Q0<WVW79E4pam#t$n6 zq8}@4O>$L&6)8-r^;)a(8~^%WoxObiAOFlh`srW&#Y4B;))zcUbz5;@t|~%b=s;>u zCdx2np=Gp`OoV|5LuRSIbYzcnS>Sm1-V#8{$>ny8w&A&Bi<xjdxEs$&J427F-0LQJ zs=Ui<ok1_{!Owx9EswEoog>s+9tR+0+BU;}28(y~yy#sv!-n=!DbTEeIsJ9kd`<fm zzcM#DxmyYem<)!=AOT$<gMtVm|HAy*v!8oOCGqXI-FCxG2Y1X?W^2Vf^UlvNr)kW1 zq<O_;9Vz%b4^Nz5kIzpGcb5wULHg5MQ@6EUw&u_PW7xj6h#pC5Zg^j}#pT2}gVt5t zLsh=(-QW4b^UtHMBB!>}4$RPj%;FZ{v@CxBEmy0JVGQCuyLVr>c;S<u`qamM_GjVp z{r>O%-aq}{|JnS-i|@VfK8%nLM-<cr)F6)IM*ba*rwHgg^p&q(oWEQQePyq^97MO4 zcD}NFITX|eMJ^QM2~O$hQN7ak(F)y0XPmk`8e#b>a_~GAa#Qq$PE6p5+$i7nTvxma zK<A3UQ{o)zf(%YS=&C%yr%=mAcZ@748hEP4#V*0Wk;JynjqMiU7-tR7AVcpx#ZsOR zwJaO6Ey?T}IW#VT`x==s+dm~!AyLg9N|3yE&+83P3E|bd-dfXJu6v6uZ?)ysJ6^Nz zZ4Ast#|uj1<syZJT_8F)X1$vV2J|Ytl8Cb`uu)n7jnV`@2}7Gcs=0+ir(PdwbNKor zCvLy{-~8%tzWn^Ny~Jw|4fMdJi;Yiy>5(%HwSaPl)G$EWRz8@_Xstw`xuxWZ_EDr9 z@_3;iFC=+m*gw_F)&xH0Y?F&;^k>iL;?az4iM9>X9Ll*nQ~=_j(<%D`cO`@;a}`WX z7OP{dzv{P^J*EpR(^6VV7c*nUx5~5imq251PfbsNahOE~g^)Z^*)U7d{K|0dixW2; zI&$I!FOQ#FYBf8tFL^gk7S;#PKldDk+A9aS^n9&LzISA{{I=btr{}x5+H9Y#b-fO0 zP8n|H+})=xJmV5d!JfOosk388u~WP{HRVf*44C)adoL;gaWr=rY&7<;z%rbXx4-@E z_rCi*uy5yf%w2!O$zT8VU;n`$_yOiI92`6U@4x!bZomBwDdfBE`HuVUy$`S-jmeMG zx%0X+N*{~V*kav+fXj(QPo{~d(P3KHbjSE?iAy&U_SVSL=*I1lb(U#Jj3l8%giRPQ zjxB3ROqZRK0#|0!o$hIq*=pce(cVP}a>~@D@7z(W?67*?J-EKs%UQZV^glE;ds&%8 z8{c>#VVs=LbqFTKZV3u)<#C6Us}%KqQyj{z+qXk@+ZI~uCtjoPC4DPra1mAk+Rj9g z5}lzTX=A2Y1|6iha(cy<OX7aZTwO@8jky#-G=-+lYMAE3p(#evApvkowE~9b&%a(@ zoc9Cq%m3zA|I@#n{j>l4r=Bl==z~A>#53pq?2rG;xeFI@qzhl}?I~MR#7HhFebh73 zSbI{?B}bHTYm9ExoBcSKS-H5>Xd_s%k8e8SL@kj}usJu51$Wu;bZwfYneGj<jb^;I z(JhvuYANb&w6gY)6-tK5z+%-DYXJ%-@*#DE(iDrEK(f|}?k(hgNtS2IelT6C7P(h~ zapnW4JWln}MyJsk*2W6EW@`7o>&7ETAZHO8ohcQ9dN=#}6EDtRc;1X1R^U|Pjt)dM zWJfW`zt9_le5jPm(sC%0b^)kHU~}su9J-ZJvM6u@eFZ=wk_iNiFzgK4(Qb~`H(RD= zaUmAz%T~Mn>Zw!z@Rxq+=+UEp@rh5Ixc>T=UwIkh{KD~rYK5}J&VTp&zaK{fgMaqi zSq$#toWN0u<7oUvS3gFZjj`OH=_k!r(pwmGXJsf13n=ke80F^Q@wUQmv{<&&$q?e1 zY=Fmpg9;$c9M|jA9z;I?iINE`u(_)m4Lw$d#JA&kMa(?XLDiaeC$fcz*zDaFma9^p z%ah20JJqVnOdn>IO7AR>?eWD|<BUgdE)3kZY<Cx>TN@dv|J`z4Wz3$6xnaUn)sb#A zz9mFmnIm%tqZev1nMAQ-zVL-seQnA-kG*V==8<q}hj0SK61irnt5AtdnLv7ybD#M@ z)W&-Kg$KV}3H(Xl`^bksuy5DwpZv$)zwhP~5C8QS7cN}};voJKr7yJgR6))L63ETz zNwOpsUCR=crKtD;HObV0NY@9tLKVZM#f}jGUd|mkfyEIOHtEQAx?Dl58m<j&=cTp& z#l@Cpe5_Vk*{HA0Uts+WzT<Eq^kYxU>a1QnADG<ai9d7DpwrgRX4wGfkWsljc`(TP z`=|F*rQk6HSdpuOofb#0HM$pGxil3<lhs-vL?Pt0=~C9q+f1BU>U{AFpURSsEF>lw zD!;}xPgBxDMd{cAo+NCPIO=+~L(wQOGx7{w#AT!#U9}<99nx7wpmqJ&0n!}-ufQRO zqPTQ%-oaA4sFh&39XMnD()=I)$)EhhPyWPDl!^~N_#n8AJ8r)NR4u$pRNFUOEx4VS zd;%!LD?o^^j4Wqo0MiO%DCBGU<SKM@#tnx9zT8@m!xG}f>$aOIlNE&UlFd9yXGM>2 z=q}ZnEnCOmC798tK#?KO-##heP-vDg#e@hwo_R!KSD0)VI<*fpay~@UQ~$hDD=#>E zq2GPF-zErK;U{gX^Eou5;eV%AS&#c2o8xo!`INT5vTf1P|Nayf)CScEwaG+(ZZDMD zb|{iSS<a)7XL05mR+8DJ^`YzVxz3qTz7%nm7o^B+jrAZkDPhP|A_4nIB_5aI$3Onb zy+@8C=Q9Z8FaFX`?%p%^%fI&jP6Z%}PMH{HT<=J2qAe~>1DE(F<6#uU{UP_%=A#U% zQ~Rbk3;P@WLeOFT&6{G}*z6crb>{do;(W4Hae<&{{QPTc=jJ!6Rj^z|n5OksPYzpt ze|6X>OdLMA(TkbRg8sVnnDWC+$^w(#%!v#I_4%++sq&<$2X!?*g{o1Rr>fUZq97}V zg>rG{+=S|-$+@*^V1lwt8^hK00W#XgkMI2Q*Y00B`vm8?>J~VY$@np^IJUac|J2h9 zx9qEgf{%p~S#6`mfo)V`?~-8L%o9#eI)LSNk#=!uYfwj{k)W`Qw53~VG#cO=u8i7b zw+o6=8Z3eIPn|mT+;h(!I&>H*GGF+@7ry@B*T4IH?_XPAM}-7@#dGJ*Lf=9YX2jYV zcXpV;ZoG`mXpqXisOA^Px+>$j3_OL0%)?53*iMMX5kO!o9RM4ex-1)YIL-wAnKxN_ z+Fdwa1+)B;W%Jr9kEItF&VeDT(E}h1>p-_*6(ap~k2+CKSlv>V>(;ntmZmUeVr;b~ zExeKtJ;T?s^saLCCcpHVPG?OspM6v8v8(5B8#$sSu2#FWz5c?OZ>6${js6Rv1t90~ z0@PZwkC;XPsjSGO@jao5TD7z@SAbv1S4w(`Vl9Y%j)gd`*Dfptwdst+b`ksj&<}mL z9~AzN-}wW@wKGk$$D!RO$v|hqPW6)~o{U7mnF)j3Tp1}B_+~s~fl50mqlNkt4kMT| zN^!i=^mi-_WxJm~`NG2TdbeCFMWsTg*VDLW#`4mHiW6nz;+azz@NYHg>ad)Z$BTY2 zmM3!hP!q=-^ov2MQiKM}yr{ggaj6jag_-?c%90k3i+;IQV39vQTVANQR_YsvqaCxm zr`kq$XQLNhKmXK&pW%9-H32ItX$VtguCUw`QNORLT4U$}RFz>Q5__Z?<N+Kk&} zYk)Mj02qa5Tqd_OMBP4H_Z+eO(wD=*@WHP?*r+$qWLvCRtk8MgWGwwb|H&txnw^~k z>4zK|WWyjC4MfF@FT8Nzz(FLVA}t0vrP%JU4e+~xHm)S`aM6Q-s}T-~8iwUwE`0UW z!rAF!g$XGLX8wGCFfOE}5nYdUe`Yj3_g3Z&3#|j9P9oWEyRPxdBTm#*Y}x#h-t?sd zkJSy%Pm8eMAEAd+r}5lP54A1}!HJ+Yxh4HCL!=u0cPD0yr!T^2;r_IDZFI2h{-Jd5 zubMZr_0_F>8;jdt02aWY;DIsm>9xKLD1@7k%wmZqc2L^HJc|JmH<92OM57|tUr{PW zk|?Oe;qvn0&9}VG9s0IAZu(yyKlG_bo?I7xAuLgxitCzZ5=Pb~Q@R+1Oyo@RfFkKv zTwhBu!7nQZ_<ZOIqHA4djFDV%TbJnu5cDO7*?j(Dv){|hg`f}xRuuAKr=511K4i$$ zt|H>1OJ{W;c1}(w<5RaDKgu>1&v!Gf%#8<+9C`blJ9dm0N@26z#*nJ#&R<yDILFwM zncgwZIV#xG$y%`jAJd=MJGJ1|7uT1|{q~;YyPEyMS3dLcygg6ULZ0fh@9nzo@LjiD zdf`>y41+Xot+x$<!D$1s3|(g$MMND4-C!1OyCVZfb%xmPl;>y!UM!<938_#&KrPaP z4}86j`6sp*epjLcB)b%d2g$`tFTI4X+;a2HIPtsQ^)9D}G3NwyU<<dIX6;VLWsQ%F zUgv7M({UmCad)k~qM{I|>5#%SuP43ZQ#0IXWrOd{j9LUg79xt-1?yWdY1kH%&Fw%C zvbqxM89GVmk1L*J8RK4TOyE*O$)oX<*;FzGbXH?BYYIq@MUXODIT`NbN^M`sNQZj2 zO-!Fg{$1KF3$~sPF62rC{<jGdwpm4S6?60|<IOlQUOfb~J@wRQGLkIz&7cqUpg|L% z(}bKz>P?!I5*E0W#D-<cNYY8z1o)bA!ADF|N<M$-^5;JDi5m}(Ew3kJXc_N=Z=2ZB zoc*(N>xs;cjTIszmNaGhIplL;Y+y*_j$axT18|~!rJUrsB?Dc22&>#R0(b34!U4cf zD2Ho&qP)7+SY2<R?^eo1l-!A7&kS3pxMwU9(}(v>mI~;`Gl?0$ynI>bHy_#kw*BL~ zrYe=P9rK3K)uic7E33^HUpn*R%cmFGtvFL$`t7ww5f<)5_1NLsiDP?v356B9O8@om z|L66yPY4+R9IUiYmFB`jH&O>Qs#}|ib5_#kLNk8b9`aqe;EpYH_}Q8l>fq$k+1!eA z!`u#|q&D~In<6?M1C#jBLl3U3u7z*Z0l&qJ!fr0yrj3?@VcM7b?tRb9?A+?=>f7&n zyS5kLM!XNh0AF;caHn$$dGyvg6X@6)Mx$_DN2%L)?E6}010Ucdwz^Gk#IaWS*3kpD zbT!Qhl5dJaWm>u29FbZzhO4{)gfnZa+iDr&uZ$*4TM)W>dFTemEK4#(se5SpHMuRY z$~DtAo;OymMQMJ^SfQCDjVuB0Z)0@ZLz`QzQ?tFwUgFeO;R&~yrq?d4Fy_js$P{;A zAkpE6A@frptrVw<xw#E32Q9on5YwI;AVL>};KuK#6lLLtNIFo7Q7D+F15Sm`U--%s zMb`WWAASe$((P)^dpoM7Tc^w`_3p`<VU^;A3&SGm)Qs6vXv30(dm5`w6WVk*FTj6U zJW=EuUe6dyPzrmwoV&sbSE5Z6NV7fcGzTbjcS8dTt+FJRg-BP%{Yq_We6q~)u-86! z`pMlhH{n_@^8UN-x#jx((}hTSu4@4$f`AP^?ZkDvPoCKGo_F8=*fVFJdiweE>+2ao zhKBW!GeI#7Yt=#`_~$?V#S1Sy%xedAe}QSus|SbU`vS(=?LO<&JrmBJn0xo_dxyDd z402&KEs7S0rIANBLZhpqfFg1j8;!<|6{iMA0Ct5=Kxwz#dG^_7fk106ZjoXdZ|LpT zWH(Py8}|Bx|NIAkh#5ksCMS;^It*?DAsNt*NDu`#h=FHZ97x&)X0W41MsRWp%@B4u z{(~@VwALP5pwRb-l!$dsyIR}|PQJ&8_%`(S*6uheZ*ulRh(Fsie8mTz8F+e}3xGHC zwDg2;^(y7olY)2M*t5VkqgkLDxG<Z*$Oxb8PtU#fBRlpD4STWInGz~tTeQ<w9kz94 zJNY*<N3Wi$wtYN({T4L4dD5@Q$2XnKvfskE@}RH~)k>m0$e7`1c}DQCPC29IPcu`L zJmw}<gbJm-UaG~w#>$x&_~Ba8{lr(#_J->1hmU;m<>5~s>vacaZJ6(w2ri+tU764i z0iclk+=@j?9rbZRG9R}4jn`D3Q_2J@2p@&DFXbxqtjcviK#Jv341H63BzIebm6bL= zn46m#4wHzZ0J4{IPDJLQ1p*X#9%*BJ@s(4R0-HNBy>Hj_f!XRbvR=@@N#=85gc77w zSiu)E4BS9~2M-kY@14Enh65k}+(VB&^T^KSa|b$i?mDo)Iy3GUi!Z<a`r}{y8=yzK z;tuWQM{di)iE0$|E-k2jqdc+eL-!tk_rdB~FFC!@+h4c>Hix1SW=6#QXx4|(EEFy< z<34h1gp|H5n)KS8*2VJ|F-{B&NITz_#tF8WLtEatFqZNKqttE8NqFN8H~i{9`=`J1 z%fI~o_q`ulv2SO6!nA}x_ya%q>Zw<0kc(~?UvZ`~VDHRhKy6M6#^oAWM`nmi6=Gj) zVsUMOjUqA1jAqZrn*DJ#pW1=VZ5llRW_MPGX=4f`6m^M<R2yQ43C}Fh46;YKq->`O znZesW;Ae4%SH+A&xo@Ke>q=4U*h>JaAKX~Ft5ADqsqp*|%$*n5?b~g`tLeb46veeC z%HE1y{BD(A?w)De8|!S#vv38MoDoGK;B9k0KBxV8Go*)RC<H7u-Fiki=0kGMIDVB! z7Nk1}a43Z&THHE~aMC{YwX;vX)W{08M-eMzz7b}!C>93#)LQqtnaV`uCn_Jt>9eOA zjdtrDx6JOEoJbm%7TOn+6lWRcUTK0Rf4CgW-I;AbSD9@U;AReDuJcwW+1Tg`UwUBZ zx`SdU6VBsqTkBd{Un#d1F{GME;+<JGapdS--}&~Lv2r!!WOXOG6l5XhN{P%+3ahqs zOJGf5F0INnC>k6e|G@vzS$pjMkH2*0$?07;h7&ux-TLymXY{ba{fX2s`=vc1PqTQa zxtgA=TsS|#A;;%-?4JlH0zN)jdTDjgjFk;uZB_=NTaRo!hdOL@AsGitV;4uwyGaYN zn=Pu)Yik=9E}Xw~X&&1=7o8`_0<^%VRex8HGjI-IQzxmfuj3UA{%`!te~C~HhBkyn z8rldgc#ge$-si%wt#)f+aj|O`WT>uhtfwl4k{J^+)k#CEnL_RDM{hp++#?hu80p?E ze7B{gJ*TdWc{2lGVd%yi7}b20IU9JaZ@9Lh@(5@IoNPCam`x}JCT;SHPf5-iW<%L} zl(Z9J&g2jibOht*yo~xRTh7(Vf`7CSeW};WwDI-T=0amvO@P@tA<R{14R+O1CN?ra zof_1}<d%DP`?Jxfp3MXUT7q^yK9tAzOul@nsdz3F$#5YUrTG~W*WEmi8235PZJCL5 zWfIyeL`7v3F%4WYA(vV$uhabeaO~jZBoD$~=68~8PiPibmhy>eJ81xeKzzSHdHUSh z#qN4z2xR@(cTX*@=u68z3Y13q+4(+8m*0I~EXEIY$MRgc$xNL=gGDRDRBpP1EW;_m z_HDEUmpt>Dl*ck4LnV!gAd(VdHJ>Qlb@HBC6b^esp8L3H^jKRL$%RF>my?&Hl%1(c z>);K;Pb;-=w)XQs^O5D{)ick1vcC43=hr-~h3c{LPR3cF21eF~s7P$Aj#VZX>)l?V zHa<O<v>{>0X7dFLeL0BxR(lihM(Hwd;r*QB=UyGXHX175&43LO0=a1|aN|kr(XH7C zjSJ>8&qlBLw%Mh(pwiCD%mptMi|uarxo4jH$dCQlU3b0xbD#a(Km3Qk1bYD*((Q~h zI_Ut;@Yu2AFji@p@GM=pyzt~V9=&*ZF_PK1fUPL9JpI%Qk3O(8?`A>XdPalAV($u- zVqe`y+nuC0szK>)atI5fy1<yWp&DZ0-J$51%2A7)aRoqn0Vl$l=Ppn{d%%dDl6)yQ znYBo*0%lM3T2+=_7ntW5ud{7wXWMA{?H@T1ZjXXqdyce`kvtMn+D-iG+KKu#EpBI} zJtaK}doo<Tw84Y#I6hu)c2?Tb4&J8)7e%Rct}-SvZF22~^e}-NGT-n#OZFc)+UxfH zMwg_QfXrn~^Z9ybx!Z*XIwM4XsF+Ei0~cF8#^fN)7$<7ynO8S{@ZOXdi<ELzUppOd zv@@YiV;!43Ri*4urx_dyDK~<y1(s)m<eFwT874_2vgJm5(2tXTSIWfaa%%cuG&P3~ z`?eE@Yvl-~y@I~432a<%vi>eJ%B6yPHa@9UX00b_-Og0$qkAVl@c!@qoimT+oeMgu zFj4TjmwZp^tPPa3XHSMF?=GyLDfu}Al`8zhciy_T)PCZX^<&eev5=}z%b}#9LEix0 zDDY_PvX#Cc4SeVZt9R~S-%dYx@#4JneQ<g3+`!!%&qPrn9u8tkD8-pG5-M+1gxm0F z6OB+T+V8=PU%Ba~8yg#SP>3ipga??Qag=hC2jg4-2gU#fr9tMsA6$R(dXS1p&<p8A zVw`&`Y5ZJcEfTV)({FNOGn&0XZ$fR$KbPk67F!T_Bb2d1)0hLk*HN)DT-hNRVwZuy zJm1oRsioq%;X_YJtZ9R8tt{fOXXtU|<-$rN1q3MFR^GxednHYL=E<v)6XqJV^77g# zHrsLRynwfgLh5n3J(~MKTtPX{nAQq^S$6YnH{7wK^dCO|#kmsKO15LYIX0}|QVZeb z0dX?in!Jvop|}{@3?n@s*s<sKV<*n7EVlbS(lmCbG}SAOHc%TdQI^bSJW1nX6z$tN zK3?*rFK#+ElV_ChnJF(zb(Rwq8<m1aBh9jO_i+hbIZCR?01HZvF|FqC!u&?e1QaYl zGaNwACBRjX$Hj7K*WBK8kupDy>>b-TS54xa3+_7%@U69*bXZqr>~c}b3&!ENcFu<* zpKiI~@YvM;MsJ1TLh0sJ7Ox6fVE%p+K(XdtV<9h|EaJ0z^M-q`zw5rke{}z)2VYq~ zFjv|$9!<(X*$}?dfm^YM#buC=3U)`+Gr388fd}NZEG#UXIB^|R6KIAAPJ6AEWmKUC zw-6ePxHj%@5vgp%qOmLbM>~bn>vg52@`mIG^6A;>S6@4Ys0>O9-FP;j3QMIjTyuaQ zCz4WHWZL{;>z*VO(ay`9OT#7#<zo}mUs<?tl}MnC5xE~{mW?#R7M(dt@b)d)J`dyG zn0Ls+Wu7*3-B6~;`EJSETGPPZQl5vz(XMmpNOQnUb59U8MK)=`ScG4XCl-KM6w!|w zuZHD2gcw=}lfM~FSNHg6%e80f_1-#4lrb(cmY`4en`xThg0V5r(l}4@WT<S72-+Q6 zQtDB;R#~@oxz*=Mu6Gvvn{S``oi9CdcDYq7@_>s{;19e!&NTH?-!~+1m2e7{_!#YU z2vItz>ZEGtRC)L04qq;>b=ro^1T2QgE$bBsx;h=w2+IBk-*fo*!7=TnlVcT~8|XmP zA7L-L31#5(tT+8yh5N#xoibN#)WVwknt?%J!Y@~%PMXKvE)HC*O)#U=PGh=K1H-+X z_O6?)9o{=-=ZK;3W9SG*i#{u&4gCUt!V{89!Cg)#HwM2}{&E|K&ubM7dAMVP36l@F z2vy~z9A0K7F<GnDTgYDS#WFf_{K%eK@L;PuTMc$qqkC_fdFbVh%&@x-j+sFYY;7%K za%cg}9C9229W_6S%1~`l7-D}6^n#EHMu@@i+kgt(wuOa7v@GU?0bq=_1dh>L8Nw?{ z#;(%+<D`P4iUQ~*?{1KP?Q8cZX?FKLcl$E9|7%}6c=#})H2^m9yrF5eCLh%e#OP{^ z5wUZ9FXLJ$)=(;BX4Vh)R>lRps5Z&+?N~IHV=|-or`~Fi+I1%j0U-*^aHfnBhFu2G z7+{`sw3*@J_E4Tn^MNHvGEIJjGK4EhNVJ7ju4RE_{JEC3z>roM)O8+vVS&po%M0AZ z7B$<wxos}q6)4I#lYVA9@$eQ{g2R30sb^}XLOh6boiQx{oy?X&xZBQ&0%D3-aX%hr z%H+Km>P6qRn^h{yuP(Ksu%x}L6BB9SDJD4GlD5vZ0F;ClM&_JMbBPV4r-T>!-FWci z>o4`wSQ!_!(b!q|0;lH6!$Bmc%7#j1N^p&F1!reU{XRM2WO-Te0TdY|hEhJ0K38@G zO>cC~f{Vasah%2j${CDMTXc2-(xp@k8J93h2fZGViEHc2gHGkZp<NS^B-O@4DQr?A z!)rh;A(ss62B-^!2!!+{vpB@!JT_(>X#8k5rW^CgUewu8OdKfR{=<Vu|0^4=u;H>$ zeO5U!@f|<-?wjWT-C=g{wT135H8U0e#{J`aXCkE?!^vE4-Z~)+7MGPaqUjwJk;nqn zfjoc}3PKM%Acz7eVhceC<5H}xHX6-zm@w*hZv0ZdNj7rMwoC%`#x%av?qk&|KK$PA z{oc=h_A_-v#5zb$nBVgwAG-0z8(bzgPUmK)!8#C#+G4G=l)h5=a2Nxh4m>%j6f@Ks z|1b2LMHz-%^pxV;{JqTzF6Wl<H=www5Jx*~mNfaCR~RQgkT&AayD17U^%BlmZoJG& zdSlV$rh!!!HC?8Pj7d$zRme<gOhc<67s6nRw)&U&u1>BIo|z&LY8Pj{_8e#1Hrm|L zZ_x@JB`pnxS-lPeEe3F0eAqcWT3aeydE95zJv~L42QlbT6*6{WXOZ>m#Ju~0+A-jH z!hFFC+yhc6Pnr|KF1Vj_o)|?6p7?t12LY$nR%k74i^R)OREfe`RE9(V84xhf=Oz+f zrC8XYQ<6ee#Qjn!H0UvAauLw*14c`LTt=o8Wu1h%+$Pdyc+E|>Gt3|n`$?}qL}^0^ z$yW%VMT?MfQuMo>YNm(TpvU#`ojYoUP?G*8Pv6dcF9T9{hT9mos}jZzQqp&QYm$mh zV`)T^Q{rAf&eO~=5%4q)cHKC>?^y4Nir{rS`FN~?X#b&|ckHXJwX&s3Z><q06Qw&3 zj<0rNH&sTe@Pbw5vab0X%V@$-cP7V4puPb*5HJ9Dhs-kQC1}6ro_h{Z#L#J&7Q(f$ zaL$0<H1u$5bUzl}VoQP>z-=t~F+N^HdK!*!@W6pz`PE<j7ysg47^R~ygms!EL_$!l zMi@Fl07De|)+s4s3N%e{FQjnZ9Z=#M2Eb(2^13|i#CZmMP^^wj?2$gXk|b-Pw~0Z{ zMD8gorp>6%(0b%vldIeURvDF>Y_AB$gzP9{q<kiGFSB}-Rmmr0Jx+(-OsKRDqVP8B zW@DqV?pqP%6tD8knKYk?f`~?0XUR8<s$6>_3F$QUHL+*5Zo%2R{d5J@-2kCQp*tzS z83ZCzOj)KuaHdVhJV||tc~y_KUO9cPxu{daCF7b?^#gVyzn^8wQUzT2WK+1=<Autt z{^CrMqV&T^6#Y^aGm6pt*ur<xPNhtiY9YR;3W9*E5)BNXsEE6n=2(Uc7^Yeqdd9*I zv7Z^XvZ462vPq}(o9CuKNR4Jn>*dvMnj{K-QLz98nD^t9({Rxt7hGj=HmHtI%}rG! z$pTziW=S>ypjnKu&3ZSjJvtW~4Pdp&NN%kyGIUAGMtn5075&{#zyHwZKx694b$oD! z1+`%3$$XezuE+HrxDPWo2}+;iEiSzr*!Z5s2L2ofv1}bf&FMoxvDfc?&j-E-gh9L2 zDiz7W1ZM8J=N`_es_>a-o`Fa`eE6{7tV1-6#xVVUK%NENlD0!ySkyU9Xk9Q3B?u^C zw>ivKUoPQ9>l+&%`q2-4=eyqZ+0T6rBS8Uvzy8m6gS)4SVId0E=EQ@w({U$JMCPc= zAT`?1)my*>jQGl~&M)+P$BLC>6SEiE4XxoQ%C=6i(`aHqZ9}p|YUwS0AmhrSmEJj5 zkWmOUR@4L%XCQo<q0(ba^jK~*XohsJ@Xu>ql)liKswh0KMP1T{&<wLlrG!J}<^r~( zLXE<c1!h)Mx}k$m5Oy74u2KTAjpZ5Tj$S1;vwgeU!r%*b2XL$uz+p*cZl52IQ$UnU zKLSTi-I5DnqS5KbhVMvIbN`Fyb`~Y0T#_L4xyw<cHgS-(qQ^77D>T#+muBs9E|>_y zAoBgOa%F5{TI-ZjB|TxS^1vf9SraF2&HY4s6~@BIia+alwY!7$HU-&9ZP-{Sc5L*_ z_>}SNDS?}mqNzk@U%a^P`$4<eANFG&=y))w6luCm)oJr#*9@ARXMqoBSx3_5Vd2@^ z?(b>KU2*EQiVG%fJK0Y*eF&_KOr{aFytvUH4tvzLLh`ler82|a@5m<(*Di}pvplTU zJ26t;FRXO{^gB;XOV2#F*zqO1ZEv*{h(S-=oVXMhIZE$zo}mLg0DyHA)b8H7OXq65 zHil{=Ob&q=<ijw675dJ*-Y%rLaOoljq`+6e+FiVOao4Ur0B73i&d$xYn=Kq<6kK)Q zEFfTSgZqA@ay=LhXXobdX{B7b_ul&e!tt^3C!Tup)1Us-FaE+WDXq|CX_CV11PhO& zxv9LjjDZhKD^88%Wt_mB8i0YH3`<!dyx6Jdu6Srf7F?;AbDIc+!s<ybnDU5PZ~$<* zY|yJsvU9C_!@UjYSj9rdrnrD8Syf(vkT1y%@mSAO%!)`iHc<&&1w~?V4lrxm<+)9o zvFF#eIdR6i%F70yhgYNYt{(n0@+z$2RmY}b)Q5e4a<U}InDixH$QmS%iqs^FsK7|L zNfd^Imf&$lp{HPw@<BHr3xfe=;Aymrwgw{EX~O0TX+YQ&H3(s(VbnfC$cTGV$N+-b zi^D=54@sYp3dTabBoCyH3|3?#(F$L;k1x-tp)y4U)&iKuS9mdJebWBS#4&k_PHLfZ z7`&#czR{VRuC|)JLA$GR6EF$U7zTcxr+%)=LbS3$r+>LJyHhZR?NR9aHp@h5{MeLU zLl0D1wIKxwX!@~!p!4iE%keA^j=x+PjF%CkFUm2By-gfQL@}K`%=*JD+97uy5~!Yv z_|5x}LhC*H%KC++4ixrUJHGq6@%`gLA>b5RvSj3Flqa|1Diu_&Bo{X$ubMFcsnh9B zPfr16K+*AI$6=RJFj@$#1DrqzD&H|6@2*|D@sSX+-|unGP*x91l@va=)3s}mx56+- zOVXXj7U%o-?Vp;O#Ho?MJu^L1t5q@53`XWYefl-5$Tz?S;vP7MJxuZ|2!KNx?FI#h z!j%*=ZRzrXHV3ArYvt;HJM-coOF4~fjZaL$Bip`d=zd4z%L}}*%1T*Sjw<@BWPF3* zG_<Z6{=B+k3Ck0cckM)U`)FEH0SLu9%RR#P&}`=5Bup2X1j<~g4i<u?qrtJ*Q>Bbc z<Hg1UfHQS9Vvt>ZrZgkBVr+Z-bUO~Ip0FUN%S_}M<C>Y6EKJ7op-SxlekzpA(EW0w z;j>|I&Riu%`}Mbr;p@#38)IZeYLln9Q9`Y@zCE*AM4NIU%0&P_NdT(kML@0MQvsw% zp{9z-(D%AMbScfLJv?7XP8c&DHytwSSgu94-e(gsPV+#LG|0%H5)3;r{Kp%XW^{=@ z*OKW-Qe3l99|lrngJffABNQ^@tk><hWanzBG|X}5T;(0Wt5%z+(Ey=A6iNUOcb%#{ zPE?js?p6^St=d&WX(QYWha{$LTy!MGoi<Ezjp&Gn{!rfO#dX<j={@_({SBldc%|C( zjkk+5f7|g{VfbXpA1_Dns71i<K0fi@qZ1`t0^kFNIG56Hyp~ZFk}LV?wA(N;F_>?$ zRKx;>iNd1C9(xSy=>4T~87sJeP8)--O@XPy{DgP~Zvpu2-@g~pD6HUq0nP!e=3!q7 z4%(3VHuoG^?FJg{_4^3<^uY%v@zmthyWjopFZ|74-+j+L5<&k9=TS~kER{xsS!jGE zNpMBr4`G+Op#=dmY2oCk_>i$noyLFZzzI${+vMi8jobjDz^Zg^i=%qD(+^l&iq@5` zo9Q=oWVfn~x<!W1WqFsmVZsPfFJ)?v^y)?fnE~SwgZ9$_i5q5{kh%P|j1ls%)!1ma z&=i|Vjmoehcuf1ag<Z`X+=fXex0Nhig{I%K7D)jDtDmF{xG{L~+$8$O(zU~(%J7fn z4A(t~sY*=oOlMOC47@fNUiN^lOyxvu(-Q-h9N)qs&O*U`?gv5+JVkcB6alblCk;>( z>c>OL1{ymlKNm(xZ3iUpDvx$Eeox^We7Ycp>%HDAd{^Yq^qZ|%2b}T1$@0v4O~R*0 zWk3`domAy&ZF!^BinAn<OhD+yNk%u7s4!=>LS;6pEwt-EdQ_UMRm$ZEYES@Cah45} ztT)W-&A6Y$`{u?gMS%uMjh51*Tm<ViD@|%rSVq#27N>>s%j2xQu_)tJB?~5;Qq5QS zdfAlrWwpJ*{v)-rzj&#=XRfx|i+#@SJ~4H8rr^e=4g==K77>#2<8UzOu@O(`qB6*X zL84}VIH=UBH{W#gYo}iWD}dr!=}SaqfE;k;z$*AU5EXm&><0GmMI>HhR67s}h_wKp z7cN}9;f6hD&z^-M1%#p?%+gG`4B}04HAS_d416F8MkZWMOmP2Q?|tuI{ncMJ8uh#H zz9$I7rRAkV2M)og!2UvTYyr4y)f&(XO)rFW>1VmC%mB0)!~ONLyizFEWVAl)jl8Us z@Sw5Au^0!z&Ea#gSYC@8rmsX$M=lz>Lbv6{I}q^YjBnThEPP?61smtA%tdZ;HyF3n zRBhMw)W9g4RZ8%RIIA))Jx<qPNYN^~Y@8SDe?G~nqBpzxv@TbR)=1#MzR}-I2eR$J z#afc8K|dc16W|N}A9Jj<D@WHPW|B<#!V9<;D>F>pEKB*z!;`aAK$ggacm^SSV-k~Z zj_c`jR`3HiPN*O&S2DvQ$s>|eB3C+!WU*ST$E?*S#R>HI%qY!rYaXo;*+H)NxD@-w z{ZPpHg`QswmRGY@Pu1Z5aX{H5G)kfJxv0R%vzV7?8!Ag33azKdi^JGoUu%K~El-R= zyjK!4$7R{DUeZ@tFN$iWRIQFxOA!T^($wn>@>X}a)*LJ?ZM2&8om00Ua65n=x7Ako zQ;OSPtpxtIa#*CZ`ibf{H_UL|^NW09Clf^-6~n_f#7m1z<^7fQQb7ii9~=wO;Hi<4 z>FJ^$=ag>lNJ!VQl-g8)qX9y(0D;JP0WJQFoi;FxLhSwGOD|#|L*T7atpHAF5IZMf zY8%1B2x~A7@d`xYqnVjmfDpKaJ^9?T&w}MsT9ZSpEDY#;c->?yK>A~cXP$lrrslr= z`*4tp7v}G|=R2T#+wBgL{y;)H9tG+b0s<g%6T-MepU|MKJz)`OXN(XrQ}|#aj2dx2 zcLNYw@s+bt&e|qj&*|k#^*~@4DQiw&*`y3M14<U2_TO@z_cb9T@K^=dW6IY$Q6}(A zL>@1tn3NdrQZrGRFB(8vE@{H|TWO9{Fd)&YL{6HBVx)an%xTQkvdy+tMCdoAt!*=5 zuQomu-De=ZQiLOjOqnp!q?nDcQDMs~XdNgDX=1B1R4bT!Df4(!6$)+thNzpQa+quD z=KD%&tq8$_5t9}KfDicvk~E)?K^Sl!f1y^1Z))XYk}yqKYXG}6K>z?!kcN2!<#Fp* z&J+c@l<|49k(G5`s`2T$GGN>ss89xn4xm!OkC=Y>{PM(vji3q^57R8slM|IR%T`xW zgW8l~p;RcV_F!jNJQ0=Kxn449#Qd~0#wz18leNH?Q0ARDY4nB|`f0u1+*m%hHh-#h za#wU{N59iksYyAoVREJM%e4W>ZMK?n8AsZxN0jZOEM1dzo{G*{mG!H02R`sa@B7>T z`e&_|zE&UKf7AEAkNj=H3PKhc%QZbv-!=zl%pt*%>08H!k-iUIhuks11gS7ECNYuq zfddCHdj$4={L#mk`^#=NwIogk@u1Oc_|m`e#+wF%;S*0jaqF$O!U=RU7P_&z5wjVq z*1rDWgW&Ot1@aYLFL5&&YNN3m7rfu=)z>$mT2-#5!A90Mki88I8?C`TVmpp$-WVyo zUf<Zi{{UUE){b`v<cfqt!<iTu9Wb`h?`_2WF$xQ)E>R3u7N?t-bFf{%AJsxox;8Iy z0~DD}`q05pQH41HhLBSYe7Lhmh1er_W~i#7%KiPqG`+lG!+mpH_<1fE`FmZ<0tjQe zN(mR2@w7Xo<rqCODm;yb6yH1y!>&H&1(VzK=JwF)c8e6)B1?!Ho93HSGgxCl;KR}M zcv>^cI@EY$)1-xI%UY<L<AJxBdYSE@Bv_?Kl!Npml%R)Fz(b1jkc*&P`RVVwM|fhV zNzcAE|NKVhaC!WEFM;BqM<jvl-1Gfdk^HgIuxz3f9mAwe$FKYPHy*vb-s)fCLroXM zjW<3Pee@$AoGBp8xY!?LU>^2P7pWb!<tGIL0+*J%TB~BQ%u6ND=$+g@4pv#QS2h-6 z>D5Fy;Hp@yOpcdGiNy*!aJ}BIH@a}W`pt#7eXiGSOUae;(u~Z}EC&L~D3uBe%Nd1h zT}+JvhFUkf!$H5znb0Q72diFb*GiYi-PW!fPHwC&d9tA5<iJ$1Ab8+YdL3jojvV?N z$8>qRu7=R}<;V)ftIG4m#U%<t79(Vzfg6NgLSugAD_^<i?t8#3!CQkV2;@LVojZRH z`O_GvNpQY*?;Z#t5Q!Kd6xtF&ROHP-YklZL9|9m@);|2u!)vRnj5%$~oK(gaaV|KV zK<Qm~z6}_IlL;sA;-z`8BT1TuK?u_nHO^3y_>@Tr;~9r_R=MkV!sesc@?CmE`cSiw z^O!o2+8c;hiFI~~q1FyJ)&sQGmnK9I93AH*8A}OKykbbCE6?~udKy87C(pT?w@kV8 zv`NYBxM^b2k8)4>oCs2gw#ZNt(~R{gstoJArFCjZb_IlKE!@c8bPXD9GZ#jkBy(e4 zTr(20-Apxa@d>@{VBHRDH+wXQ^4P@I;bGhmqEfmubO7DQ#hOeq(&U;<YG$8gB4_4Q zTo00A(PNE_93{>S;OEoW5dwddAfW&U7EBkRjhc(=(^XW@db+Cb@TbqT(q%xs7%Ih5 zL!H_ex%54)NjHEjz4f|%CaRsfxOQr_JHH<1bk&3h#&l3DE}ma~ZsXFkr_Qf*hjH3} zr`&zyE+#lh#YVlevDPa_A&u^?y--LmPMDxjT4T`dcbd8&m0(_`5z7cm(ICs){j82b znd+@hr=1MDac9-!DRoY=YCQOgLExuKr^@)b2?RA-CM-*3NHAl2ro0v8JoM|zFBt9X zG>&e0|1Edj{m3_77MvCK96JOkHjsvy3lLb`;C?`B4^r(5XYy>?KDKN(1QY=SSDOdo zVSRm72o4Jnc4xEE1Qh?5AN}xG@4tU?d=eNtcI+6w<yb@@4Ujl`<S1UjE8KF^O^-bG zXx|1}U`aX(0c~{r*s;xNJ;T7Iq>d&Ab}P_$nErabzVY>k9)$Wma`eb^&p!vk<K*=x zxviW)G7h4km^%#+E*490IDvNPMsTo_qzDT<H@%XQRH`T1l#peh({3pgg~#4g3R{Lf z)$bVXGRZ6iv<{6oC4y=w&J6ob?MXwVxzMK1l+h%DmHi60ASHzgapQ+gm4@8w8`D(T z(DQ4YT?Q@8ypVabj5@9+BHpQ1GtL2QJ|GWDml=@k1j1;90dEHrYlddnk4C7wiay-N zL|9E~f9asx*4dVgY;!w)gwJHe$(#=3oWtwu40U^`Tm5tpqtm0WTGgl=BgVB0gK~!K z;Nj$+RO<>UO(OwiApquxVlf5b2T}%Msp5l>FCq59E;N#bR{X-^aIK@h(du6|x>yPd z#Q=S=7)Ts5S2zd`qvoo`awxl<!Q;=r@TJEeHHN2TCOeLm+nY3JFTMWkYp2`897xDB znI|N8@z;d}%M=DOMEd{Y>IRo`JS<E^g@6eq*@bSy6D&;fP=rZX;xdRcgSzC6_Heb? zYqr6!w}#ENq_f00>U=A?O~W6iYMA9|?#xk@5sBg9FSF|zDZV_;)WTXrCz+T!DsK1z zBWJ3!d){^X{_f)Cg=e0q%*^fIJDG4f-%h5f%!Cwx(q!>l?QI{elX{c`9b(;qP-}zi zvu>v=A);(5_S^1y8)b*i&#x>kz4+n_6{sXT%;5_!ynwHOm!F-Uar7nPF<ginPo9Js z36KD*a3)umSKR1^uxT-%=pA?50s3LHHtLOhab}B#p*G=3-gMJV*!dmrc*odS4MVL} zYz!8MT>>JPmf>w0VxBl+vslLwAarw;yP`eeY2OZZCXJqze2?Vsh{}OycKY(&rNX<X zcKpPSLpB$b5u8j8{l1IwaVg$eoifU})H6Yma?LH(F09tF%q|i0%2W7YjImii=qVE` z^HQn+*i7Y2Q!$Eg2`E4y)|u@<Y*TK|Ft&%W5)R^WsI9Mv{jCD`ma-(oHmj(w0-q7G zjD5>S+pm?jb`^a})<7<T)XQz?Ay23#O&ODujyH@VD%!>YrIOf_C>J|z02g?>UZ}RC zLY{O(DYP|)rFH%6%t5|pP^W>2B#r=d-FS2|@c3krDc^7V1Ifc?FCGlZLMc)aecsDV zlIHt&&dnC_wwGy$B0VG_Kac`g!;0q!s@Iq5JEq4&KNzMRqr6JUY*r~{jRur|#?hk9 zEa~=#yLSX7rQs@N-R?`Rc`n#kSOu3AWID{_)p~uk9_K1sYxV1`Zm-|X+RfhD>q);J zRQFcKsuY*X6#y2d+_D!c(0*o&(28l!U7+1Qs6l2fFI<MWH~n_ZLRQ<|9I{V8yE2r4 z4vWiu)#wbr=hhuBUGDC$g$E`eVR@V=E^VzKGmefXX$^B!xH5T{51j%+_y~dw3I{82 z@L-O<`#tYzG@Fk<@%Z&8u7|b+T7a2vJo-qQB*-R(19_Wu1r06UjW^y1{(aZ(-9+M5 z==Nbr{_qd~FoK_F&zy~-0#4`3GMtYW6$`*NRsda;FCjvMsVorJ!7OMnJE2s=DC%}P zi;D~8atVim=7Wm}eGTn8W_?AUGhrzTZrS&YnTWH3W<$i)eZQW@zuSv<6!Q;F?TMHz zoU>tP>2q#9pASs$da%CoaxyFsXOR=2UHXI_jf!-_rrN?QF9_Ko#*@hR=|D^{c{v}9 z`$F1JmDRDiv0rAKTW6B9&0vskxG>y-h|}S)2SGB`BtF8Cg4-5Sxf-&zSJrP|wwtL$ zkw{J%X1z3q26nZuM!Ph2Vsm|AgwRqbW^|STS>z~^^Gg*)MojE11f8_gNex#_mkQCQ z*Bsc{9;q|o&P^y~ta--rkeQzJ#v-30srLE!#QN!KKmnnRB$hmzU+<(D`KCPrfHA)E znaUN>CnVRbw}5QdF=+t1Oc64zUUDDduteGU)mjj?X>|Kuy3(p=gJzk*Qt9>MuCu6x z8LVDdIW@DhJT|rtCD?7m-FnttNm`3c=RpXEu>!zn8p1#&KF^>DbB$k{S<4I#AgoJh z%f(xRWNp2{{i2DRV&kIPb>g14A3wD|)KN9(EuHIfzz)n7Q9m(A^QV{kH_w%Z$}3CK z|8&*dPU5T?MUw@01J?s`-7fj4oO#fJ@cLjP!YeBl3Jys3-+#Xwf*!6PI0Fnu`0R7f z{p64TxD*1I1Rn^WaQ^ZoeD{vqZ~xMlz653X_~Vb?|G)$H+;cami`TK7KFvHf8sk)J zBkbZvvH`RlS7C>)(T!#c`8OD!8#@4{04FdBiGX!z$VR>1YBp=tsv{ZP5gE4x1Xe6B z(8#j}-LNhiFCMmA`NWhTtYo>1hX})<WLtUGN#bAGck~~ed$q4M&|C4m0%wk&$eFMN zBSA7`JSL-;H}ljEYs62=a3M<$MB#FtrKE=iZi5Tw7J8DLU*<9(Gs3f`zDI9~ThpFk zN;_1f1ZnL%BY9gS=31(5YZb*+nEGvoERZ0K6nMoY3c5F)2`V}x_EM5tEMldY%`{9? zie<XUa}F>lPAMp1Y5$?!o=PsyugE|!sR3lDjwpcI<7txVT-#E7^TaEcf>0PbFrmO^ z;F^q>NiK7iP}+nCyY%(TD;PEYdQX{R>B&}~8OvT;;87+(M$f5S3Q{n{p<>1rY!E(E zLWj+=m&B|G(r3QUmFlNMK)MT^qI5EB4hHLCQ1X;6`=Lm?ufO!v*v>=9HA}j6GiWBQ zC6#s=XELf*%0+E>rVYMdNVzpfiSbk<i={K(Y=JL+%|<ug5EUIvFg1|tr*eO$lb9pZ zr8C29Y-UFm1`GA{<%RA&`*#X2e0goyNmVKIm6oxmxtofSu{hIM!eW#psT*kqC{kqa zF;`>=r5C3Oiu!<?PPYp{!Z8DW00MZ7unBPxq`cu<Kn@Od=<uP}&z^bm$tUq$_?Cb) zlvTM>MymJc|N5`tTVfRLiLr54vgpDCs0IfA0hr++02f|?_9vcr0-mZA9E$PoyYB|@ z=H_<bP`CytYJl9AsEwY6=7b(bm8S4)F*^k>9oNnrX~?aKDCxyyO05riH$>HibR#g_ z^~i{GnI}&*SKmLm!@A_8rF`LyaeClDnw#l$Xn1V$G84kn0CruQ{lXvEX<_z+{!r_+ zJg*2oPE?;(ww8iZTUl9W7y-_X%TC>xZIUG1XwP=d#6V-KUT#v~D_E3lgWuKk9Bq`_ zBQaN>NzJ$yI~r@8XK^Gv6UdBIgq?ZN7}A5<fT1^vZeP(=;<j!7qZ(>a_M$jUe9xcR zF}AYNp)BwrKq>>yY;h`Ml&5C#BZbcd)hZY<j1vF?$fU;LP>G~%sQi#n#FWMtWSKKl zEKGNY3<oO}P_Ln_&0r`;JUuWsE4*lsw)|2-q&ms^mLnjhn+sr%Y}V#ROK_eUQ&yY- zg*@o1L92Z^&j$rVLZCBPipKVBEWMaCFY)p;)1V!Z%GOZ1!WaGWSg{zP1(Y%|I=e5F zA{nH#OUrOilF^a0m*v?oQ-vcpb(Lbz&9h`fH!s4e+BZAv70d6q=lH@(_wrKXwu9qc z80g$!uELb!%w~`qH$*h&)D>czt&Hvt5V|pDfE+8md6p@cyq2YePiP*@np7+lH`dqS z4Z=QzY5LW#eziw4w{X~vfEm(jFvb(ej0YZg0Ea-rHxg*zVZvAiynp(q{_hC7Jo3mR z@FBruz{TTC0KibTKq)jW_JKMDGXW?f-gDdSw_#?r7his9ZG8<BkM7tp*KW6<41sOz z0PduSrBFa!|McvPBneJ;>U#KQv58ZMwy;A(8T$P4uy<Q+>Y;vJYn!G^P|+pNTuyo~ zv{r{?<NzmJGO2ADF5eu-S>?vkW}dDXL;ehBp@I5h>qdD>EGOwCmo@ClNGvO3(@%uN ze@Ttz7!eh4PZ<{wby+@46Fga;j>%hIo_VHt)u~*(tBu3WuRXlQcCsF;IY3}9C=6t= z5EOz)3W>XnQ`3)O^=W`mDM!(8;4m@SW)3qGdG1-GKabNqRVp=}l7ja3g$N~;B`6j8 zq8Q<zf$*_G5ThCdKBa!kl7u@aJ?w~6`hYzaAco=`3nFOx(r0R{95J020@^?DeTd^y zF<4k#uZ>059X)A>@eRq8Ap{yyQy$sOkofJ@Wyw^lmlQqW3zJJW7_9h$hq92QoqoLD z>aBL0XM%VmSwEFF&Sjl7*rGaVOHw<cTtbzlZ%Y~gd!6LO+2?OeRYp9M%a^eQGKum^ zt$eZ)?YiYQuRKi`<BQ&4_~f}2B*oovbY{;?1rKPYJ(zFB07;4m=LV%!DkFJpQ_l&^ z$}xs+L_=4-&MiRE-JQ`$Gu#dapigs^ODS%<;|@4`Kn`Fq=;LPq{s6oLYMR`o0=nZ9 zr0dG1@{YM3$e{sUA-Dk5@!=2s=#PKo$M)>qgXjy%K&7g+s#99fasVOV5AN~QtEb@a zO-@X{<DKus5c)5^^isDEs53wsC&g}HLE<<OoZ~I1-le4#pijE)Xl1KY<0L}0=UZ#r z&79T9hDVCE8=`VzA7=urFw4_;G@C`qPPN~+dW?=@+4Izx%z7oHy8uc;4MkJ%IwNGF z^LCz1P+-tlX9~;a^mvZ@pv5>6PV+Ys$6d97D`gtkF;SrjV|urpjbPgcE_}-z+Wczc z<6osdpW3?@BfUOL6O&{VXIGgT#=4iJy(EEtRD=s+V4V|8PPFCSgM#mef(0G`r7|-l zvQDL$mn1p`hLnBQKA;yG&ge_Na1}YZy<6_{a?#&Yl>1Af5(=W@$k5e5;^C>{LFm;y zUv6#$la(89Jh5wbXC*?AQ_zDoF8`fWaTNGGPdbCX<i1v$CH#XpY4(PcDVn4l$jS3g zfp@tddZOmZo#Th6$M)J017b8`ue+GUeF0V4x}<u`U|ft&EpICVn7qC{q0P+BGrc)I znF3(0GywT0if-9!B;jz_PZ*!tL)i|+9kKFu)e4H-*DOxe++5|AGaD~1^>fQdS$f^Z z0=6u<(e#Y?=CHr8^Z+?mXrCr&Y!^gI0Sw^l^)qK$owlv4ZNWZ-{n_nxwb96Eqsh;- z1|E#kApP*Idc6*8!OQ)w@A@vx?1_WBqC~`O#>U5Qx%IX%2ym}Zp2v?L$4A&7XTNyi z0=zzG&MeL5FI-$%Tn6Nxdg>{JMuBq(Q-;M($_-`$ej~h7a2p5+b=oaybqi<A-i~d2 zYxCuvy(4TOe_NsAc(-40!#rqBPatCaVmx@H+n<zD*>W;zj4LybjhES^tdMixqilzO z%Odk7bB|I*hLi8d=o!1Zun}>`nBgv-VVwx8Qy30HC!mXz6tBi96ur-F%W}4TlzaEe zwpH1i(WmliQ;J?~8f~mWu5{u!!>=(#DUytne`OEFjTI2gC50IL8o|Os!PaGafmD&y znH?99`NA*(^l@8S5R#2AfzsR->GMER&tgJZ?p8{VJ9bp~<$@mL#^<H9n1CMW#_`UX z-An}s=fX4@EUv9T^3+THVd5!ODf`_a8jJK)s=ddbf9;hQU#I91*Jy-<f@oBJwX)iK z{oG<Y$ZDlZAu3fe!(p*XF%|O)Mr7-(DGyqzknn=B#R^&4;<lx;xNhg5wCpZ75Ho^k zM{N;9*0qHVvkhp;9$K^^hr=86)A{+eT?b~LySS1m8FHhAFhX9pZ~Ea=>tB3fsba*t zZ`}Rb#YUEy=1{?B8fq=IjqE5x=hU9&#M-+_cG16qezF_2vI8HJ6o<M4Y_JhUeE`Fy z%a>e86CfK7D5K3W4XA~`wNim_gaZi=4GI&$z_>o$ojakapavcNfD@6MCndZ})Fnbm zf{w>ofIW=)i@}01N)1$8nkFut=JnUlpsp9k$DuA>xHva6>q4^F0xQ&AGZviGb3(+X zAJdAX25d;vN??*=+!db~ucwl#@Hyc`OC~H`DgehnY_1Rjl}A-IKn~j+mC(g!sAqDl zvOoy(Wt>q-28srdeB+2mV)-3=;0n>SajV9vKWQ}WhW_BDM^tu#C+7HiWo<UIolv;; zyh*f3^VW~`HMt79nqIpBxMWF2Pl3F7;ptQ=LFpkZV<eje$r7Q3mfH6MUkV}d)CytP z%X9Q5AWY?|PzY^$WmX7ERd9c{`c;MWFv?Nr3(2e<z=RhGrVJ}^JDN;TDSKJJoA{gu zQE^APvUhIR6EB|TK~g3gH4Gz)7>)VzZO5u#dA4<CJ(D(C?fWwHnWbutpg-BwVyO|I zz0@exCWLOb7B7@}@lbX0bbW1nXpU5N08=Xo@T<e9lw=}Lsrg9J*~%p{oylMV5+x@j z`o*Xa6*A!moH{ELQaX!R;?H-ZZwivYTqk`!sCRRCM!r{Hy99?ah+BEiR%3Q>_w?h> zpMTfQhtRAt4Dr&*SQto;BprR(rw+nW65Du{pwxAm;LuvBZo4BGx8sPKK}KbJ)&i`7 ztVb5h;=&?0LO10gHUbr;LIHXYh)U7~<YAuzq%+7kMe*TZee#nScm_b7m>9>f_K48n zi}2+DW<*_~?{2v92DpFV;yuow1_3JQK<s9$zofMSs=+HFC$6!vzPz-AfDP!%xg9&O zj*~iq(PoqKuuzP`NV_U_BKNKon)tw#?dXI$t5Ifx;;X}0Y$jjof#IR2gkcrKHmpo3 z+u6<t8=ASYCPw{|9FKsDj!LEF#~m^h!Irzk@eKIKk8wUcXZDS&M^lE`Do2&rT>RX+ zjv-?eA%&(q8~kz&ochiJy!yP?+h<-f^4fF9Y@Zee!tm_rSI5UD4<0&_z~C8n03%I; zM&)U0eL=Di?4((Avv?j!JaFlPjiMUFX&TeSSH|dJr=8i<wN#mo%7A|xcjiP?Br%tG zzd7D_B8{*rrVDO8Y1PU>IrNuSdSMX&@W1xhW3X;gWoJp^UWK&nU~WRLt{KQ(s5nJp z%14v*Q$}o^;8OBNedF0@pMUw(eB|+sdZ$}&=(txhZK&oFA5`LwPI^Pnq^gHrs<T8g zbgByF!zj&c3aCpbCMO?%%JdtHmoA>JxB9KMjb3vDT_a>I6_<MDs9caGc)8@{3PWny ztXy1Yy|uxqdN-?k$x>$gsQ&um!+(7$d^eACv37R;%y6(;+&5WlFVtTf6jq9o8E)-o z6G`g1)|=%p0kJJf$)Zo7;F5$BYgaUyVope^URqv3d=rlmgYBZ85Qv4|gT09&26%&& zYPE@+yWs%&Ys}+MJ%bs}4k9*_QYxI^Y_(9AR4P?45eQ@(i2LQ0mE1ah$OT39)6Si{ zxR7HLW9!8D4Pd6?D?&)?H3`g)cI4QR#>PgcKY01oSEr_DZ~>^n$3ZS#y1cPbhvx}~ z5c>u&j8lp%aVdZdfJ8H40mN)-g2ozgVvOo<mNNp28-`&3ql~kvWBMiIwn(%rea0Di zXu@+5v4HW6Nn1M30ZocTScYS0s~1xy6h6U5!;}^Llw4ueAkI$}0`@>ypv3!R>QnPi zk=a9~PXM+rxWcxe7!=FQ{C`<H7p69nBLHV1FCMnV8%cnKBn0A(d7HB_#zpEXKRZdC zbI+Lb`J5aNpADQ57%<qeFUe)|X@=DZ&GmIHm8DS4&d&Ds^mNaoyQe3T9&bDpH%0XH z4GKmKG3**zIy;-Me=#zV*nN}^6PI^Yacgp-D8df+zzbn)o<)bI8aPlC`Q;88(+Aii zJ|n>hxgn?am;>MYE{vYlVrpRom)#*PWT!KiO9itqsrJ#KM^GL*@b0-3Ig+G79;l3O zfw7Q=^bl|#X>bd;fjC@O->Z#A9i6veQM&pW0NArWT|h+gqeQ?(w%vgdopDs(3T{I^ zbct$8QJYV3tNfs_4I#raxJnc9fo~CWt?z;nx?2~u-Phy$IaWtt;rKKLq{$Yb360_9 zg;BzT937eFjcb<35XymZf$8f()rx4)ll}!E{Mk2MlWRNjZN7UJ#b#9nUcSE?<wy1? zaFArxusesuA#WOwf4?X2(75bq9E(NbLZ)*ol!)o%$LY|xt?tFQLgs#CIJFT$qjdej z3?V6_!XXj$Wu$_uvgbONz^iWcQG~lmi^$lru9?CJwr7!cm;+R0jHoxKjVNE+?{gOw z5Z{$TfojK@Y1?f*Y6YSXj1R*Kp^sF}ts1{A5Nqs%6)tHjqpu&5-_kR^*|}Iiu8w<M zMm6v&uE!1W%gehug@n6gAbMR~zFZx>7SSaT+`HA9RVAIkGY*3P$V#)yv;s7>BJM4X zhp}$mOvs=eEO|$UF#Q$L@+YZ+*SUJ|w{{78Bh{n%Ljkz>y2RgH!q*joYlU_4>IJU< zG}IYUXM@nAvr4N_kw*FU=VjYytW{{SJ*#!$41FQIMIzoMqZohst-qxgk_UZZxX`~C zBOGhYD>iVwn4Brk)s>uhO|Jv=5-R-zy_#GxkPlRB#R57>T|&px&iCE$V~$}{5EbUK zXy>dk+Js^ZNpt-|wRu_zHE-0Rb;Zbuyt=G)(H$pLiG^pb=(yDoASBrSLI#&D!{uWL z92=Fmy5_-zg(9&I&(H))vS}NyMHK+m@}rPZc}oW(aBUzh{dF$!0qXEwT3bHogQN)- z9!3padl`k5$1^zg+Cydn!+sG{h5nf2-=j-5r-hr3nu{Dbst#can1U4>el3{lk&m@s z1ap~;HeH)U0$qW|mdlYakXqNzxBT7J*)f>SU~pqM0lQHO`9bVR6%DmH<-@Ar?2&wM zHukZuu8vH9e|J|G6k|IQnDdNZ3KJ?1l{5NvD%6%pU~EI#o=zn>loMlaaVX!@({=Xd z9AA*u)*FMF0d(J^rD66FK@McH73)<?3)U^Gg&@=F1KIY5#SEVhGSS^*lA4>H$z}!! znR<@N*a$xu^105Ac4`66sbmso4%!2~q74}cmLRMulss~a{jNk+FH_f7#~i6*l@H=P z4X)ptL_P2P>}?|b^rcf+m5?s<!bo0dRPi_r;AoCPrK<Iz;iji1hYC4NTo`FOI@&RH zoL{^J7%%c304s`L;CjkHfXvU%WCjLK-<*w=Mqmt>WO;FcJyzxN5$#@;Kv-yYdWx?c z9lz#i4FK7}g3xt1Gh7%Jg10HgTd*r3=fW838Mjn!(AIdNpARO)tIKDzcqg{CC7PSq zKG2f5b(0Eb2Kr|vCknY78>suz>4~w@%+y3*IypT#K0H)FZZWPPiW6g_)PHPbn0$UG z$3{nohkCk^g?3EFh%}!__4XoQx$FQ&Ud&xo6`KD3cfSP=f{M%|jdQoBO8}V|&kbg# zCdLc7K^lYK(UIY7razVJnVJ|QF*iF+n*MBbq?jG(8yd>3-o3LpKMNWU*H)M2=eS*8 zyGLT}-pcCTl?V6l7KaKSZ>&#Ej{o7|+DFTa{;3?&s!!0V2JX4C<_UEX@{b(3zG#Kg z1YVlt`zt!xF)~olGrC%Y4d$7fnaT{LX}E_ER>wz6>-X<1Ezm%vTrRuuaBXgSlA)#+ z>tZ2yv$b_)d4Xms4HxHbPtmxyrzTgH7w;_1mxhNPtgSB0&6bKqS~)VD1bh&QnHV31 zk@%aPnat<1aMAYmPJcR;PN!^1d$2J;TAG`-wsr{PzkdHN_}p7r{^Q3Ru+B%z3vk`W z`f5Ix0lmrb(T(-{Y#l>N>jcatqI_St@WaqoxAhPs7x#)EjM;_x?%n$rFZXcLhf>eK ze*x`Cv?Xpab{&?>NX4^%e3wr4;>b_k829XHv7B<A?Cp8Ecd)(t9J!*{mtTF2LzB@} z+e7|<PLCL}-<NNFc>kjb5cIk<Ql!&rrYJ{w-MsO|SC8r27{Tb0c6Pr<dNHe?o^hJy z`yXB%GFEf;Iy+Mj50AiS|KJsE{I|!ObRS6glc&!{iUl4~rS9&|)6+9NTnNxYBjK;r zR3L`mJ{@geD#eRd5H)5EWuDV_msO!DJIg{(A>?kA6_f|xWlCtsRSpz)e{Ctn4~>HC z;VU;*D&h4;ldY{1<KvS;KF@yTHy1d*emHu460H&fE4-Mgad6$*-pS_%3BTXk(sXBO zVP|KTAOjuksgAa`Z@ztokJQT2;-gPLXZncaQPr-*6ccvM4`xUg3kAmBrsn2ETLPXm z^thyOgYnXa_wxBHn<Uu?f)C#=dp<fl;V$;AbrAx)x#hd9?YD2=F<Qc($O6cz`u{rG zHn!Yo6R3QZWG?@*8dl7he;ys5AYF`dcu^49uBW>jp@Is~==kIW%sBm=rwnVHO3QKR z2pG;#xbq@2XJ_X)4KtrSEFS@6YiAevVNUXEuEs{@uE=n2Zx0<3l)?#%C0%8@SP9B- z!e$7jD8OlNOCTYnk1IaJ%!eEC|6n^Qq-ikbV-Vo$+=4J4-Q0YFcNrxiXm5Ad<FCI# zoG&ikg7E8;Q~HPPo#zb5xRn5t-VqNHX2r}`0Tl$-QsL;+Ip>t%=PQbecvD#)exPYb zLZvQJjr7ZUiV~kD@uxq3@{^g`AvvFY{v|QIX&vT@IQx-6<POWnl&l7~ry(AF`UT6D zpJ?AV7x3YS_a9#F@6(hx3GE#mq>{aRFZc8LL5iV>s7_@8g0O8q`If=p(O*A9y6A!n z`7HhW)2DxDSf-$L(!jL{R!k;|O1?=)45z)=+dn-yJHI#wAAk@{4hdu+c~vfhxnZFn zqYtU;XZI-RPGyAd(`3myH%Ml47^7_3{JG2QlBO<9Un9%7@$Sc6^oq^h9Ns{9b^x&O zBM)deZ<EPF(U!5a<FX1NR4G7)3bxCN!VNW8_(-*l##c2!lO~6mFajJIlnpHNB2R(H z>-I|kWWOm(5&C9?mIcEPugY`@^oW4;W@X9*RW<r4wm8w<Nw*09zx1p6>+#{#Ri9q9 z0md*|F&96|oq5_wVcc(PDS*C&ISY+dS(TZR$PZ0yn61JLuo=r6)CGI{2e7Ckh*7uD zt1>AAvh{`HT^J03uVr|UVX(0rZi^Yz8f>6*%MA9`u<L*6KDZSEZwt-J<%CeTjsz0x z#F(qdk%g@`h1$l{`#U&3Ow~@Rg&wy$p345Z(B{c?kMG;yD6X?_eCdiWGx5vFZpz+m zY}<^$X-cuWPcsX(vY~!RAhL(QY==}UD>-A>>FBMffTCdaesxyxUzZZr9ns}n^9tfn zL03gYSaIq4OrJP@O%)ZiNyi$9Vi8~W;fN1SWC?vTro-ftAL+Kl!0ghH_(VfM=QI^n zJ;w>5PHw&PP$@2zmzYv*&X@&c-%FKU^wCLIW@u|j-BPF8jpACsMWX4ny}oOK@<^0z zf90&(+0}%SuP}rC)p=M&5+O{;CG@7!IYVYj!R6W&c9{ZQghw*MzUEjZnXb18l#)@s zs?NsB6vLyBd0kpk%5tlZFplOz?;a?%wz%oNs=uE`MojK3YLPWCeBKCLmN1!A#$?5P zDi8@M50Zkox^%<;_#&ef0AUb{Ug$CE|G(Bsf*r;glWj?QkJCME`8H0U(a-ADmfyjM zc4%lh5pFF17Cb?inOQ*_Uw9;|QXrEI3Ys~R*nz`6TM~1SP|nxLQ?9!~Ide)w#YeLe zZOyD8A;-X}ooKLAS`k|J3nQpP1Rw@hFRm%E)UPFpXsc<LT7!I?*ZtOV21$0pFc8hF zEK@Vd{Vz)vVW&cmcK>KK^#?E(mZk0%7-n^Zpx8a^<isyh*aI3oHo8VoXTqF~I5EV} z$rO6mIg)gy4U<Xpnf8m^$K@X;<T*R@Id@MHk^svJQcoiUFZ%tmNcCHVZV!M_M-_Ki z!1zaei?iQuJO^+NZhb@+$gLdMBxVSf?5n`QW{v=HPgWePdndd6Vc`Dt9&6XT72r7` zq~;leLW`H*<?n7f!#RS}f<cd_zh=VC2y&Dc20lvPd0fPUPMn}hccZS0Fz$}mtSK_| z{iFIBxkyY%y7ig7P<{L`8SBo35?Xv#vx))y0t5X;mHW*ruUi7w%aWS8h2r6nt2K-h zCwz6b*>7@c0RG5mw6)hY>Q#oN3X(QiQoZdN#4-o<Oc=F9)^ExpL$FX0qULp=Xgaj- zBA_Qx424n@8sz!eN1Ptel^{5!xB*$=4WqLe3z>8Wp#-{@WZnr8Z9+jV-Gm@-=}1rk zWs`?b$M2lQ3B`_+Fo!vJAh@7{n(jJ>cK+ZdwZoBn=iIN62?dxElvv|Lu>x7;`y8i4 z1!4Rng9^-M5hR?WlcoofxpQ>Nr72yGDXa!{)C2@J^ku}%=P3uG=RJXngncsfdQBv- zGaTQ$<@(Hu;r$!&Sme{?Tatw4GF5I!`C$9+wh5*-+tw`UxdarsRa^374ZzzwIqz?D zV8{_xq0p})Fz*A&VZB`GGxBpKyT%Zgbs;fha>Rwyj2eXB5+vf6%;On?cVx`^4G4*` zn9m^j@{$-{lFd$K_ov5+^L1{H2x@knl;jAjeWw`e{wiLU16es5%H<TaiX>Gp0MKlM zDi*<9`ub$zK#Fdg>@be**^3vGK=|K~PeHqGD8;rS!8|%<1R!N#tnf93=0QrV8-;KQ zDhM)OAmip37~^Rvy<L5I%}IZXK0Z3O&l&GJlVfZ34nn651e*rMC$IGr>}}vH<l>0c z5tsOQT>@~%h&-^G?*DnU1^89%xVb)7GHte0&|?CrOy~(#bn3lFH!)*h-gkLq``v{m zOkhCpVL@gHs&SFsn}ZjWKM?HTW(|l+J}d;7<;ZLZF%@t9^z5EJ8F<s;_(esa=|BcC zqXn4fgkB4#t%%NzQ<%qRCW5)hgW(b`u_;jV@YZqjt6>k~_P|Q95JYmC?QzL;{%h+U zO<jDnKuOzB#E-FxN;ryx=RPy+(O!Ju2gA2cx|~Gs96ImPeEP=RDiV;ny)`uD?3j?C zKd`d|&-9)m<z1UMn1%ik7-_8wxhW<owozn{5G#A`C<q8%bXlU<GFUJkpZo>ugPEkh SVOaM70000<MNUMnLSTX=DFsFV diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/img/examples/bootstrap-example-carousel.png b/src/main/webapp/bower_components/bootstrap/docs/assets/img/examples/bootstrap-example-carousel.png deleted file mode 100644 index 725fe07b9e7ba77bc9b648c2f28a218e2815bd13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 339980 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�q_YpUO_0~ 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@mM-C63 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�{7d2dxH~Oaq6(Ik3z_AZ47c7SqU*+0)=K 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%0A{S_H1Q?H)918yKmUjs=jm@s39LIkgbmR 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 diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/img/examples/bootstrap-example-fluid.png b/src/main/webapp/bower_components/bootstrap/docs/assets/img/examples/bootstrap-example-fluid.png deleted file mode 100644 index 5f49a332f332252ed8135536ccfe256d397d5fd3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 209039 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.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%0A0Bql7v=33In-Pp$kB2_b$j9wTd)zVoOqCX|Db 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 Tn+3~m00000NkvXXu0mjf$0y{D diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/img/examples/bootstrap-example-justified-nav.png b/src/main/webapp/bower_components/bootstrap/docs/assets/img/examples/bootstrap-example-justified-nav.png deleted file mode 100644 index 3d1e233891ec79b11bd4d0977c96f3cb6de20e0d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 136021 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%0D3Qf2gHk~8Dj9? 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	kdJ_{~8y3<anK<p_5;po3rQJ-MHLlT=p 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�=%C8QjE7B-_*?eWSlBhcEoF9MB6ij8@;Nmb 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 diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/img/examples/bootstrap-example-marketing-narrow.png b/src/main/webapp/bower_components/bootstrap/docs/assets/img/examples/bootstrap-example-marketing-narrow.png deleted file mode 100644 index 4bca8cdafd36545ebbbc0b6264995592f42023fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 117303 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μ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%0A?Zqw z;fds%S-0&zFiu4&*xjn#FrGzjkZW#qT))av$N}foCE_N1wG|*|5?&HN^QCjn+}ee7 zQH4Lr$sbk8mPBc+17H7Pxr-w~wQmFK1H^fbB%NZ1ciY9l8G9^!iyi?Nfk^$?-V~Ik zjHZ#rM#aQcOpJ*y9%x;?S;?p$ZkOK5I!Mg+Tk`ge7+n(_@4fy+;HbfNBE@gw!&=I7 zOp-F5*$Zjixy~JkqQdn=d-%d~Osc~fUXgB-MrAGowre}xnI8RM($NmV(ew*c^_}<_ z&t?sj@+8g+eM7;|*N`bQON4ZB9`0bJAJPzeznAdMqMt`K8#;FeQRf6LM>ApXVFV;< zN=D|EvZAOHM|%m6yK3MjL?mhNSJk0JM`layIO+OBE53Jb&d#^zm**ItoH>sy_7pxp PLPA+7MaeR8y)XX*u7m>I diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/img/examples/bootstrap-example-marketing.png b/src/main/webapp/bower_components/bootstrap/docs/assets/img/examples/bootstrap-example-marketing.png deleted file mode 100644 index 206e26e342488126aab5bdac12e6c4d01dd2a643..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 134269 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 =t*U$Iuy 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 diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/img/examples/bootstrap-example-signin.png b/src/main/webapp/bower_components/bootstrap/docs/assets/img/examples/bootstrap-example-signin.png deleted file mode 100644 index b649a985dcdc95fe1e98de0604e28461eb30067f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22037 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 L$Osn+YJ2~GKm=qG diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/img/examples/bootstrap-example-starter.png b/src/main/webapp/bower_components/bootstrap/docs/assets/img/examples/bootstrap-example-starter.png deleted file mode 100644 index 1bf4b85ecef67d3b7416aea639fd15200a97ce76..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 36099 zcmZ^~1z1!;-#5IJECSNqEm8u~DUC>p!YZ|Z0>Z9zvozA3x`ZHzgs^nO(hbr}OGtM& z@8bPD-~C?ScYS+y&pA6YXU@#OXXZCyI$ElP4{09)002UDHKkVo05$>uzzPCBK&O;K zyDtHN$X<1&=dazTx6@}_r=JolUjTqTSSi?;qA7QGt*8^0TyvV&G<`zxjZ9i>eWG8} zrZm2aL{ufTE$-{(_a8OH791%44Y__|j2ky$M;+3cMQ%vojsgF5<RF_FF>dqbW!|W{ zY$n_H2rl@53S$eW7tRF|AH~juE`z{>Bc@~@H24kt7EDa?;q;{%?@*?tn;VkK6e$~+ zS#VphB~y$Lmo{G?#III0J7URAjv=2K6Hlee8_hT3Px&xj#9jD<P^ixRl?bA@z#j*G zgV^xlzi#T0cmQuKSC67#fuCL^PL0t+Uft>4IYqZ{LLOCij(8uG_<wkFTBxYsm<T88 zKYS^76&I!`Xf)~jhCuL~Svj7lO_}|IS_WS2K(DPz3!>~vC@B#Txd1x>yp+w?QgcqG z#LUP<EzE@jH8*|lk3qpfK~!X_<|wkaY&-6jO6P{APfA<HN{>qL8Ek^<b7I3!W8D4L zgDL-iofvEsXPhG}Iy*aK>AUnAvJ@6Utmw{Jpely)8V!Qvx^fbS1SzP}Eba-Uexr>( z<kDz09)7v+ed?v$z-4plI#FT%nIrCYiPg(t@x+WU3<1mz09@8&j2866OvF;g2Hdi0 zfA+A!PxH{93ZX9h^Uf^6TgReh_35D*El75H?<{`ONv4ZAIFv<3ptZ}7s>I@G8u_Z+ z@;IuHZk!H;=xOR{`Y1~!ihj&_3rB<!5>JG#3>Bp5E2@dLC3*2D5OQ?twd-N46D{t& zHq*Y?oZL)x+f;86IuSuqn(we?vd&a*$V>SQvFic__pnK+E>6AtPy$}?9x%ax53EUa zfyvO7UuL2YCQ*s5&jXf%`TP$xnS(y(Ne^8-NLIG9v-`WYmM2Xs!v$msB31yhkk`J% zvaOy`Kf&$4zA?JVxbdt`;oYMVsaYda92NKekDO#3vABGR(RV=pFqIw4H{qqUnTTvM z`)dQ<Ih8_f$7uF>@56)#ys1U6x>a95Y-YLOX%=H3S;#Ak7S0nnNUNnZT3Wb3cc!$U z@o(0E3=tMr3A6pT-!%!K%hrx^$^y@#=kZa;`>ozs5f73Z{c|}@Wtb2WkubgGu`^B7 z3Vom^DyK91Hst=YL?1X{`sKmI*;#c?kAeDD7cs8jpAH?=Yp2f-lIzhDyG^lzCD4ug zPbbitfF|%jP2*$E@ql1Tmu_>=cQ@Y2Un^9KutB-c?hQ{TOV`@iqMw)NJ4`|fM(5T` zh<&`h33LY^On5dXt0JZZ;F`*^t$T3VHcoVZf<GkC;)~WF2RKF2MmQ0OcJ=@G2(BD< ztxtM(s(&eX%oK8qEAp{?O09Y_yyH<sbMcln;US3tyqAcO*9{9_)ReAmeHpy)zq-1z zOyqS&!=_q_ZJ!3VAY)WRX$J`maauiXd7n_;L!&eZb{uSBr-P?C4NBk<Gh+iWT7fJF z!P>wub`m8@OzAzJw!-0A$G&q{*G9J?*sF!XmuJof1_o!4n>RA>PPPr!C{@~+aB@JQ zZt1Ja)`*7iBbvJA&5TQ-*L}JMpD8zs3^K?}Ze40|C_&%EGrV?d%gx$82M5Z2chT=5 zL53d@MgH_s>H1D#jQ!ZwO!`4Ov`&9gRO$hO(#ZaKKC7J$Ca<K;r1YDVG0<RTUDed9 zi`^N^I4eej%C{O+44%>Ib0$1FgK}LDnxQH_gvQRDqN8p_@8Jwpnq57j^;b7?Q<hc` zVb~qhdDVva)N0WIeL~$0L*K>m)OEtJ!V`nnQiP5)mId_lGv9v&K9YPab+uhy?ldGb zX%#mpwb!tnsHfFaHScMwgKq@Pt8-o2cT$Rx-2C~onQS@h(T*SSwDWwXR|51l$;OU_ z;Hk(Ar2K<o$fE(3NNU{`3DMg_z-Szs>LY!>H-<x-AnUB)GKsY`ve&Njwgju`ZYDhr zTsxTi3{R_QoIuSj#}}(`0k~~(?Rwsv(0cXQpa<=~v`p8#mm6NnBg$n1@8Lb7qwYBe zYISNtIS1B-1OWXZs^bkPC2v*5xPXD_XW9?A#rzG4a5nF&oocH|6ECRiehV(v3lGV| zZnmQ#eEu3{ugi_R@-Q;4Cqzn5lb_H$`3q27kvm0MOgVHhbeU!9${cG@fxCtJcoWjm z5;0Y`RjhIQ9?q9jM*`Z#%0Hd4YligkRbw-UOUt*4Gq|G6rY^TihA1D<Au-eYBc@$R zm<h&=UB=&R<fht9gRIhB*t>S^s-ZUcsEItltZ}7g9by+?U|UrBSp@I(&}2c9feFn% z!Bb<mUplIOZ@P9oYYIweZw>kkeSfXreiixsUTt~U*EnYnbl-J$WA>SsRbL>&Q<ige z^)ifycbK4uqB)LPb=;c;FgqAc!4~bex^*(}ob#yW6k6E0F;x;3<HSQ0KNIwHMl--= zE>;qzg7C<U>>?lk$q|8uIK6ePV#{>ecA9}!4@|tX<%_mhZk%=~DRcPsQL5LvP**Ii zi^9N2(Cd6Lq@1q`g~^*gVrJ_2bH=Lt&{-#WYE5q3l%H-b$}^#0g=gz$!ja+~GBFur zVt=vC$xj4!dA!|0W%}M$d49WmC}Sq8IbScYm#zp<c>3<SHejLR<7in=0v8rj@J>(t zO1uX9(bH9(a*yG7f>oBM&LiqvAJDW;6Wp7wqxr3sGme2vA1j0A<kW{0<K%SvR=lYk z^@PKt#?$G(H2$sZ(ml<c28U?6wK=y1W2FL%$pYp@xhi$eWw$^6xRzeqrMOb+L#3y3 zU3JWgXU=g=799Ue%zM%LC@m??SpJ#67f{IR@bGpccTt#!@b$fF0Fr<D(S54%52Uu| zdjA+n{0)g$f3;g*uKQg@nf(!S%f~fv_|LGTP)TBuMcO=S0{rtgJ_1Q~mH6Oe8@&sU z)h}I*n+8-KeX)Mq^zGI&rB^wa>wav#^PXG3<iDJb<!3Z?wz*tPKX}x=Ene&ojB*rz zAY^VxmS>vT{n8+d?6Ak6#4}O1WEsV;Vn>pmqa8hG@JYZ~iIE%mYF$lcr%Dq#feBj4 z>9cFPP#H58P~%t%*Sa?L_?slCa=Bci=F~43BHEoLdp4}SLTBswn!lKvjO6KN<Y8Pz zR+B46(X^!4YH4r^zbFcf<;k<!PGgl8m+o`9QA&}pqvX@iQ}&oHtazn7;-_k+*K>o( zSyd+FI2Ms~Y!su+*W202N|#Z0{})3tXGT>UKj860mDf&r>8`yd==VcH7+k+$!NOcr zGhwuuoflM2TA47)Z>d@_a<}K(BN_rO^!5^~Ff;`~&6wLNu)_$K*NvOC=SvaFQ4-Nr zBThv(+^`b0h0=H^=Ra1J7Za#c4M2r|QS^x3HNOWSJfEb_x1Se8HkZEi#o5uGi`(qg z;ZudtJbCb|ir~)+0Iy%T)1(!X#D{DJ@yb4dX7Al@X!(FB>sLo>MDLSA`ywdO@^RSo z66&uZR!PlLxOBSj?Zs4$!?O6?^xtlWA4kA&Lb2J{?{CEer|IN;q*X^6JzfvWUTwDt z5~y|J@yaJbl~YW8Y8@|<y9UG-jHKT8e30C!7%hX_HAzTq6_uA+#K<JmPjBfhq#2S} zt&B`?!Xd0n$~U!abw`6z^#)9s+vI@V_3tr*Y)U^~eqmKmV!)9e7MNMCn)y`UaLr%8 z9iP&8xmoB`s}C{@o^3HU593g3wiejCB2lH!ikXf)t<Y3G*5>@1h|AJK9u_@q28ZH; z7JROtr+)&8HhG9yB=qeB{5Xc;K8**Rbgb)u?xiM?Nh4vY<KK$qXx)@%nyH@mj3DeA z`i^JndvhW^V%vB!;S@FKjfs#5g&hruO@#|uwskgs@XLKvrJ_2p1{Gm`cGnq6lVG=D z?75L!uBR;{B89dq8(MEOSKl@@x}nu`Kuh{Ssj9WuoPV85rkwEXN!vWWb?%*C%ul7Y z70Y_G6@^uy^}TLaR`LYz+lHyZgyypLeEn`+pY)@jua#m(LPS>g+lVHqVEsp@3%<Ti z^P-BxgD!ukB5&7Ab_$$7GDI-N6BF7H3T9SVZ3+6R`W{<ne6<LMOlZ|PlmL04?@WtA zAc?%I7wEoP6t8`tG=vD2>2H*c4hep=l<CURlI?oZI}vY&kQx0xi=0rdBtUyhDMr2x zR@j~0mHU6ptkb?s*Mo9sohZ-LkE3QlawN^mv|nn2^+}c=X~a#UNI+3qmD<tYABSG; zHD@aJNMPk4DfaP<x~o}s>-U<nO_9{Ger&*Vds2z%UIzjR)Hgp_CoPF@^vZ+WG-HKD zTN2_kUVDw>YaB-yF^S775k-f${D%(H5<ghIE7}B4xXn2Llp)pJ$Z+U8R;goL=EdKb ztec!MzY^ssP~RFv#cx;s<Y2yrL#y8MAHmM%a50r$Qvh)x`FXg5n!T>G4!9>af!_1O zI0Y!y+=Z3yE7)Q%m1C;JA~LgSW>rbG%H;{X&wVZ3P33J5s<KaXe7p)+q{;+K)O5Jb z#e8{QzgbY2wg%Wm>rKDU?Zuk6_k!1+%+xn<Ml)JCKlolBsGhdqGQCG@bIn=B-w&p+ zlkx3zxA~sp=G)8d<rulaYTn|iX`9`i#eQwMn?xAehj^r;^9q+k*YmLuk(y9g0#;-c zG!fF1`qk+m;@h7jTV$?BtG+o8gLNPO)Oq9CJbY$Ku!}xH1}(0u{<V1LrQCa{C#x)1 zB1B@-)@+iP(Nh*NzqEESdS=S1i;Lb)<HYXOt}*^e+d1hKqw3z%n}4Ojmo(?t$2Y-X z8&|7haQV8(>=N(UaD+9_(HA}%-!lXqQoWtLaS!e3k5z|cz}tWm!>jOa9Vq;40v|9= zWQwqJq!Zp6juM*(z78}zw)^zxtCgDPkG%UZr0Pqj#gFc%eSL8d;V9Mn80E_oEWdHR z;p6!v4H4}8^gYj<s%{;<Xxh#x7GrGWQjy~>Yh5rKZ&=R5RDeks=+Cj^toR68BIv+v zQ`p>oKoWM7uY-%xP_4}}ob@TIOdP2A=*kLjfEA9?p9;C7e&K8mrOujaR3|o&!LggA z<FtIMxPH(pK)hr)TKW+6E~k-o^8xtq&~}YY^|qcH@*9`Lh&i>JXR@2bCBg*br9PTV zD3fm82TBTVm%oZmyNd({m6IG&H{$wbZfHlohfK8))s5{j{;d37Hk@Jo=+UzfkXP|& zW*Mv9x}dX?zC9*3i>ee<7(fXc6+*@X*nBf#r!?|Oc>+!6tXG?bB}NZuPNeo01e&i~ zC(<-(32)Ic)8z}M#$F9{Qkh0al|kk$^5Gg2>{$1-olN_9I{thkFS9Hw^t=EI0a!?0 zE3LJrM?GVv@guqh=%OfZFp{-pPRQ$ZI3c9{<WTljpgf6k_ou(*RHxgFjseeB)d0LY z!8e!#7?%JVaA8-~;m;qBisr^Yd?uuuC#$UBvL-k5qJzfIulHPH&3{#0rKHOem{dBT zvGx2Wm6;{w6g)UiwkBU|F^O#W9r1o1K3erw68ERP&|z1y{_l775Jei%-UnD?RfyZX zH4tv*hB0*vt)uIyl>U9xz_;}TcBftSWg?tEMs>|4F2kZn6gL}M^{(@z8K7^M`vUf4 z%ER|n`PGxngaxH&TA{Jn@5KbKX5NFT4;bl(F<5Z{l!hisni$-&${v8n*%f}w^8Oa9 zlHJTUZ1lpvl@jAZ@t{g8Dh=RtGVaaiUZp1wkY#^E%6E(yzvT`BSdjrvzcC?tB|uWg zsd%hEN>ZE5-yh?b{hV~=0oX1_iAA5`h|m%3bJH6Se|R4)Erj)vUjH}qd<n-pEaKn3 zT2+p_N9rbZyln!_KRSnZY7H9k6T(LEY1;*4Y_yFpvG_wDEi%`0Dumo#jl}UeUDC!e z?v!ax+F<eCT(2Z(E2&J)E8CH-F^+BF<S1!{sW=r4$ts^-2+L-#``q2Q&9toG9FxM{ z_<>xRmo#psDN8wCZS@NeRlL!KOQ?CB&AH8e_h#@@R^|IeK?3WLZQ()&MV(V9SP*9W z3H2guB^@Dy!%+^FY}+rLnE_<YgH)%F%QS;xJpo02gO`?%zJwS;D=B2G;e42Hd)=&e zii@4j_swL$FtJnmnFu;2m6b^%C;A4QUjqrh^Pzd!!~MA6-<PDG_+Tw`%yWebuY3yj z&awjQ<V+}28DszS_nIbb?38SI)c@8t_iD^Sy2xuHB(|Q(wmLDxf=_yMtNW?F%kag0 zFg|m}P>5eO)p($`aEBiL2;^3>%5>R8s@@BQur3uV!ZR&*Lngo5p7-Q?Tut5^|K;0o zTZW`8BUNLXoX(bFKE;c7*R82;qI0e@P}VS|*UAsqz6Ac*L5X&;oN7@I(y2b3&&49O z-*2erqHneq{uBF?ea2lpZ4=**B93WA=kxN*DprS)Ij1fLw@~)QpIG#1Iy;G7JoK-- z0D)KH>0mk<c$8{4aOGpy)z4X`%Lqwj2#OV$))Dc&N1*qmguHyvgT}CP-Ar%$So(uQ zj}JWsCGyd?u_e;7^yUbheccdff-`pUu<2XX6*l21jE93xgfrU&$V;?q1K_|ml28%N z=wXzk+vDDn&`3<6Jb|w~rVbZvUsY-7Gf%Xmfr#*KevjE}zB5UDS*+??Mc;HfZ99eb z{DiI;DpetI46#4!gAqv{y$?|F5`S;Ns~H|<v;N%jC;_ZZs&h-8ueZt!E27%ZwOp~2 z+fjvvO&;8yJOE1SZOOR+Kcp5La^y#o3v_M_*Y(lsl8TWR&aZEA^qdwZ)LqRZvbwd0 zqjw{A8Yjq+Z)NwnX(P1cIi2Q2jXm`<FX#X~teP$D?%L^m9grRgKMLJ%^1kxUN5374 za5e!56t#yjTu{dOjz&o5gWAyXu5VZT$o-JIaq}OmMQ1bb$6vnh)vDf_Qf){~+#Nh- zMa&wdKSS)Z#-)jg{oLFdpbFW1&7sHx9ZSio`!y|u9lK~BR*V@ZZjx5-xb)4b0du8& zXgcsUeK|k@<Gr{uYbGE><zfz(6XPkX^_bxU5HhJDU+;%y0+(i0WnmgXWbkp`L`j85 zSB&eWkUK15o$RSPIj&zv?Tu<W0h8!#U)s?x!|%7kFPhl|0F*zG4y%Ad)0GEnnJ=pt z;>RgjnV;8ZOD{EQ9)FMiZIGq?r=?2cl6TtBUI|d-{=D{=+2%?pR`m44KkL+y6&+#H z$1|ccM$U1{ikS>I6bgH;@p)-J;>mk@*imu-GCvakzsfU*m|#t~=zs$W;aMAzoI6*d zZ58_i@`Tn^rK52eE+w<Mk>NX@NI7EM?KlqB8_coLCAj@D_F?##aHq3EraUDA_-^{L zR}1nTO9$}eVl%;x$6N_#+UMc*7r83NfcM|5P}Em$=_cL7NiGTVuy`4t4gnt*;i}D% zF9+#&rbmW!^5%aN57fD;GQL_lYlv+ome^q+Dm1L*$<(N4+@=a7(=_C%frPK>O<~^* z{PZO&2Wu>M<4IC2-Tv|g1#U@9+*s8uYi+e2`1$_GyVvIg=#Ra-K&0s3`$6H<qnVe> z!@+AP-uG}qK%q*(aB10}^w=y@N9X5Md|14L1?y2+ik~gnR3lerm6uXg+22T*1Cf{z z%o-*3<aKQM0&TyJtOp57FHqB1sYw_U)3zn)SVadjkwcxug2@RCcop#i54q+wmti8q zS{4fu(JL$1XSiU87Z|)GkLk|=AdC%6u*XNqPyo>WTVr5o!o&Wsc-HTSX%>IJ5g_El zECCVGMiHm97|B%eqj5W-^IeK!(~0ZASQfYISBCYFQJG3W^1*L0`5rH1FMy}Y^a5*j zrBuLo-h*-m7ah2DnMZsxbuQ;1CU)V!7;iaS@NEWwwufc5$3*_D4$0l+h^<w@KVmvN zn^1v=b$M)Y?6Wfg1PtZ676Ne^jHz8(4GpH)Ux4zLW1@dp3v@lI)^c~VgI5w__@N~h zWUD-2LfOKYU;d(1`qQn{dmfmuv=G7x<C1s$w)9b>8Ul^)eJDu2U9uJsxYNnlJgZga z4*$s}XWwOc+;$y#VYQo#LHXzJSJxJ<-&3`M``;h3K3-1YeXa}*2jbUbAyMUgpEt<{ zRPK&#VQe8k6~OxNX{{ka7b0Goc>aH?>RTc<Wmz`xjB#gN*)tl=(Pcrz%Ht|xl@%?X zsP@M3$-=F$*NUH~T_)nP=IT=8fV{C;hbDs%0F~A|099D|14?@oJrCVU(Dy-_zs>=? z06iLT*bfq@pk+Vx+VrBmM%wekDb{vwszrcnjfpEkC0R2&P{`rQIFAkHA6->n0Hu}0 zB{AC0AXuMtd;MC<o!;bPqCr-<n<h&$7t$af!t^nC<Cri2bS^p2osqauM$eBa&=Ffh zRz%b7rETn@9SLajEU)B{y=rmqXh`mC5oiBcfXKcw7(s>fM2F%~7G5k~L!f_4=*l4* zW<hvL=S&&Zu=EZ9bYsF3S?ajTtfSoND4UKUxI$muB0e1D2S0Q3@7PusvO0c_sfU!T zOSJ0y=3Uid(vOAgbJ6vJ;DgQjn4?|C_hjsS8e@GV%Uum7J8paUBqQgxQmhrbE>*=K z5zu$q@=)7QAMWKzZ8o9aYaUf_{-jr%Q3PKQ08yz>b`zUEoOCJg^k=ND?T2~BsA-}@ zrl|}^wfFLKSKADiHcC^A*bED-wJ*Ewzt>q|U6%r0ZYgxtB-j|JCWT1$x+JC>bLOUW zZScA4i{s~yLw=<E`1v+`setj_(zTeEO-P!8cKJ~$vsb@r>01aT+|3OZO#$y%{bf$( zf1=}F(i$!FX7#b)Z4G1B3~Nwi)J!m2P=vX~=l6Jv=7BOC2*?Dn<i!hv-ipPK%jXHy z!V;H3ISBPfG!_Zetr&u_g1HP4WIyS`{GTo{EY>8H#eTq>-&v1w7wL6`#Hj`k)YL_s z<u#_h0rL8%e#d(Lo|${eKiBRKTCi-EBi)rk|Mu{MbWrOxFso_xw4X%5gN8^@hy#%* z6~7XiU7_i9oUkf#v@;`i5HZ%sIsX}0lz2q^&_jYRP&sw+uQ@>-*XrcjQ05eIEtaCh zppD7*gxgpzAm-#Sjz?Hdl4y0<0rnmX#-fQF8@7IT>o42jixWEMy^+f=lj;y*|L!UN zW@8h#hQQ-RMxkiiQ{B(8x{OPr{v9WQ-3lY;jr;TpHLGlx$HZ<ginu0Kf5A6L<pfXq zzbqszz<@c#Me1!hb{c1^CP#D*zS}>2AObPQd8$9mbO1N)C(FZs-EtY@BQ)I=o(!eh z7ev?j40Yz{Z6d_HIDdO(TEx6!u!%4)NAZeEF;yy;PF?)ui$-+Z)Q6-TUTL)ZHLMW5 zxD4k_-pf<Hd^@>pZ&)<b-8s8T^LDw<*AU2Ss;H<mMLh%Ttsb7hHP?X9(#d2HiNZvC z0$v|Am9{9USd(Gm3z{W_8~x#6)BehilzP=W{Fpt_`$nSp`%5p_2w}@|_cy{E&rrfH zA8f-3gN980DK!`)NSd1%B%1An8L{?48Ub-8`PiM0?P!Jdp00$_)n4ELsX$p)+f)`- zrS96#V=4zH14%>a8JuD+Rpt+(&G0{-hT_7%M`F&_6G5w&%mpwb25vGt^S&m3EaYW$ zIrtez<u7u<j!gxtNXaujbxW6B+xeqtq9j>o6o{O@lp=gUs>9IqW5;pF$4NVAa2MYs zAUFS~uz<GjLH6rixw$FHX8df;2E5!DBQd?s!ChPxM^n8yqpoC@L}7tit~0p95(byu zbOs-4Mnq75Y3{=fTT15`zlBy`RF>B6-ufDKZPFTQUNUx2b)htT08Rbt+7j8W`@22R zTE}V{@?GpW+(Tg|_?VMs+$^N&QE9L!3xeLs$s2E@becaX;(I`YA7pyO6tj|RcW|=A zH0~{?_R%X+Tl@=itb*t!1u#op4#VPdkKeg2Cufv^Ul_*9mhEMpTf--M4(Eo4A2}un z1G>f4gkV!IZ34%#Vg$G@X=xbvr-?BR50+I01BpR$Q1|7FHaL&}=A4`meys|wq~r@F zx2|(~rt8}qDTN3tDsw(l)wCHs?{t*#@-S0NXi<3Hmn+h%-ck-mV{>YW!wyTx0ROg= zCZu!A3d`R`h=vRCgI#xJ+qR?f#0{opn06<jkG2D_F3B_R*p##wG#R$hLy%JRwc!Kg zRvY|Ai|yd|qH+*qar_|1RdlPVljF9(K{KF|EtGz0Sz_fe)2qkNzbxN~5ME|1e|CP= z<&dtODa-PSp2g`s&><o9HMVY`GucrX?ic1kSuZA5UgoG2q7l{KmW+lhv8&mPF?^!x zMQOE-?PQMR+!?Z+jyc`1-v&ku>=ZFicQ!(F6hlA4uZ+sAHkohwV@iLBjxd$*Td<Ci zQfC^k%LYV|f`-@-^VeTr<-dNC^dk5EQu2-%L<HZwqLEPW`E|{8p{rFz%>Q2FwvKVe z1y#`H_o#lF^*s=?(`r4z=i!&QZ;KK0k`h`!_pUQNaXxCaCtMy5rT8v1dodZVq&{+d zVR$#5o`7BaH#b`FTJ_0_iCT9`qH0XUk;B<px}(e5^51uF)v{|JT`*-2)TobY%*<Nc zc4b6AseQyR^eMn@C`M)wnh4VBJw;mL6%k@jBv)o{trnV!856AwLe7r*aWA$2kPI)` zZpI^BG$SUFmYEg;NAx_R5d%#YCk%xsZwbf?Ia1KWRUy0cBFW{QS8f$0CsoUmu`({y z)g3jrqBqhB?d_!JbHj}urnd{1-m%N87O+TCkTx4)Nn*0n902D6)vIS(bgY^k4Z9Wn zGc)MQ@8q%;?z!z<bTWXo)q=Hn>qf!U+w*EZG$-?y%i4zRh65$TgJaaJTf0hTUfi+| zCL+RtBL0uafNJT5Z5{T6r2iX;>m2>4Sv_CfCs*0k6Pt(+5Z7O*kFuAy3u~as@PBX8 z4$_24dxAG0oOCU<Y4g9&lIv_Y{F_3YQGJxXozT+8J+-EDPRhg@{pe1K=oFBSA*6iG zn;b5;mV$i8g$N&5o*c*tfjG1c2_BLjIaorT@QB)Z{bH^@jIQiLmxJB;euSLfG^5fc z?`f9e-sO3WjMvRC0+zk#=Q{Yd<Z-eJJ$#YN2+~H^w)`IvxtA1=o5Mh4SsWX;nrB9{ zQB_8B?hO*u28)Swsch=nku7ek;p@Ee!9vZF$+0VG;T7Qr%t`^_Rz^J0rea-NE^|gh z0{?il^N&$C&3ktpXx82ThPJM5)8$C%KFm)c(u_i;vyTqmL3N3WKA6GHkK7sN8yJnn z{@M9^51bw|s0tmvSobahVs4pXiJ^V$y4uL-wa3&e&tEZXkrcI`AJHA7irQ$PrDjDe z3}}*Nm_ly9GO^~B$<Jy+^dT8AbX(*W>T2ag6J&)&jj7;W7J4S7wHR>KW{Z>ihQaOx zM6c+#uI_peG(<(@ynP{ZvP%4keTMYX8-!wr$3w$rg^bIRku$9)U$;e=R-PR>_(1qq zOo`we2z_8tAi`s!a*1Pd;0{$=J{x4l4EQD?PqvFYd-q@)Jo&vBs%Cf&{3s7&lS!m_ zd-|A0<&6waL)XfW*+jSvZ*Bgq!CiBw*UL`@cX>ktmsB8S#;j`~L8;8(R!obLH&dWP zzw~F{g`Bzr?b+}C9AYwJzd}x)QcbjZrsCIfi~aq9{xg&b&)=Xl4rg+VC<aE@8c)6{ z^));*v%j&sdb4-ywM;Gd`D&S3>hpn<;Ff2Qvdr1<6KbC`?5%^5TAG=Je&v~}>p#C> zea15#-V?P6a5l#ye+&1HHA{N9IX}9c-r!FKrIw%=y5-d7&R2JZcjI^32aE~uGbg>M z+|GileD1h#0yJ<2p#4~6>qL@5qDa4xr|&Q6ebNunZ4Kp;f)|>D5+DA9R`>^5$Pj+z zB+WRwXy1KxBO5aJDW!U5CvU(K>;931jkD}*u{T$*hs(p~-!%JEP`z%W+Y-FbqTbRc zdSWDo(8|+$LRT9a$ijc0>L+J#rB`W6(O9_ZEt^*srzj&xEQW#3Kz_fOjw!e)ST`0) z>ElR>GD;%5FaH$oQ}V>qK+~JNmP-rszMN^q{Fsi-i0TUKqx%BL?N=|x4Y2U%r%JKN z0AT9RW><IXmVq*H0oXpR@$Bm8F9!|iKR542)7T#*|4WO1;)R}gyszL`5Dh0nzv$l? ziTwADe`f#|{(S}k?|;w#DfFK+zmzNUeGXvdZW>5q1Ac@4j3W!spZ~x60{{P(`TyR( z!799e_`XbVV>v;oV?-;$gn|Ogc6)bs7rBdUS0KR>eEJlDFzhmikk=ckGIU{+QIsO2 z1Uo0{`G;-~9EN5coQsB~_ORf~2Wdwz+mgmp+4A{vMKtsz){o;KFaLAG=Ka6ei=pv9 z(3JZ;JdkcG5-Cq7Y#DiRb>-{wMHKoK2OAqz=d#5sE{+<^kg;W9Vc|p<y^hAl!I@eg z{@%D(%B}aK#_?>|m<$bY2_hy%v@^+<m^AWQ_NONE8`lAojyFaPSNp&4*-jKC^BIa3 zzRr)2q84o3ovXJ(KheIYba#8RQ__5U*whx!p<(Ic<Kud~uKVBGkg+U^yqaI1>DSmV z0#g)%A9~=h@aSeM>3@^QkaFMuri|mdGyTD3Yof9WI`i)8bmy0Gz3W7dI+>K?N~rRK zOj%f&&&{P7)@jYiPhGaj&ZV<8bd!pArYk-!SDNljS3(EAik#*hUSBwEjpRmDS`W7t zlEExD$MPxPh&!*xj+dA&&~ZJMUMRH)2{Y~Lj$`9{Q}BBJ%wTu6)>y)2Gx5d-J-^(E z+U~%*$zVz_Y4(Bsql5xx@;Lz-08xov+I|<us_Y%kr4y{{9(5MP-w{sX)C{p2%9!If zssZ1*tqx_{4S!ed^6gi1iaA*7C_mYnG<?604xV@ntBN{en3%kb&@*h&Z%Rz&+V_Ss zWW0>7bF|W@ZJVu!v+vg^x3&K+wuNZ1t9^ZzZ@^{Q!hEViF;Q&X$7|s8c;6d&RO__% z_1q<rRwP_>zp3PKrN_eKXf=ue1K;dx=~M)6C!|Tvw87o%f7>1E=l7<;-Qg?*)|<%9 zeQmR&hgPB1L;Rp8XSdnP5tpGLbZe^69GtmJ|InAbNTejQIr!aBzZN=Er3Uv$H&doB zo+DzCkw)k}Vs!uxKfjT%{{uK^<5elSd6lDPCT!V{kW1={VKTfp{L5!hY-Ey7yzY6t zZl)W|XILe^m;-JJ$RKiWa^84FrmKgv884u)D7V75aE+oB+5X#?axa5G7IttL5D1cR zTtT22P?xJwXi!px&a5vp?|68ImKKF-nonp_U!0^4os-AE2`aie+tWbC`*E;?)$cDD z8kouV^#oz_9<<@`X84X16c91Vg4PDp`7AmkWiz>SEwqa)x}ufUF>KL-MT!W*F0#ii zLeu}n|ND6uCgl}~<t2=8ve?)u>}`|xMZ-{npOetye4`g%c7w-J=ck1xsMx1jdph~M zo3j`qfnA5SL56ytn>rb<({1=(OJv1wOv*5|_N^VffV8DhV|JkhcCd)`ZvaWVExu)U zDff8{D?5Apr}>7Dd-ILuB^V2`9*6B6J%PAH`#0J%y!6d1srEzNf5r<9+J8m-I@??D z?Xz5HkBRY1lJ+<h*h?b6xIH_qe<-tcxG|cipQV7)_eD6*fGe59357gEnmn%%b79@} zrHmwsRNWRhi+akIAShDdcVY}b(pyuFVH_?V?9A+#skRII*qK{$f^o1KMIuLgNwMRw zHNgjoKnv3X+17c6==l%Ns!wy%sz|i#kcH5BrwpM0jLpkT*X;kpG<D=dMdy#RHKj4u z3fZ6iT&~X@u4o6-BrM3dw48;5pBNNFKJ+G*qK!eB((sM0ob_*Jt?R2|x!$34DXRo7 z?JBexxm{y)*&Hjyz<OZ+gc?t&#>KeoeVAtI(-ukrll~1G-s)q~%C)$h(9s-9UJ&^9 z_Ll$S!$*&9A*6$(n)5M4Xj|07xjk6?<V``%)N2MwXM17$Vv|N2Gl$ddx79so+f(Jx z%j1nPT)KuTFxF1Nn?gxL%Ym;S5;!%NJheao@Y~0ee`FE`Ejs_$Wd=dpJ`)1Xj21Wy z*;FFWApx~sXP>lW+b7Q_U_X??NI!9ERoaY;`$y6EoR4q>WCpg=m}<jC3G2mcqu1D@ zGir#5iSMUSPp&&<QhR<^+nLTZ``&3&lq0Y*UAIwjRjorPd5Bq{?I>E7*j{^oa<aS* zZ+@HHCwNzp&K3F!WfiU08_G2um0J%Ng$jj2?%L++-AWfuMn`fr^k%Qt2H<N!)d$O6 zQkg45nG057LZbVZ{a=J@IZv*#Yh2OGBy_UgHCK?_7fG`&eMvka3&wOs?<yb4`EvJg zS+3)bg~<kL!#ba|TWo)vD58<I_?+*>NTOeCq@HP>2CkyPoNp#-{v%;gG$dZ?v^FR( z-Q;m(*@?e|KVxm+y(o&qByP{lh4kTGC87Dq)~T2&>-)Et0t-k$P@$DB=>W}4<y6tm zkfurgt!nxW+R)U!NRlQi;l2-+a##uq#)XQxZiAS-&?2=dEEV@5FERq%PS(NmYO(-I zzIQ>f$K}|(Oa8K5ZrBUD=hH_rOT4gfjx#jeXb}+e)MEeeZ(q9vj9Tu1rqhziF!aNc zBU;i#KlGAc!pR=BEu$$^!QncrfBv~DTl;BWgwHy*%YWSCy>Y0ekpKz+^<}g1)X!6H z&p9tR;#O0vML(~_(L83~VXx&?RN^(G4A0EW)QCUZnXw}AqoEB2vS&f~haz*H?zOz) z6a7*0rjW8{#>(nb9DRE<1D)47FWvmz8oNrnG{n-CGOs)CJSbo#@_pdwlsl8lnv<-n znJ_fa?%cQCPp5|)Pl)TQ8PTNK=_Ao|RG>T3w%=Plmf2rpiQlBb8UXY(3Ov(6)EZWQ z%D5vAMfgu5cs|Y6OjOz$;1fav@Af%@B^M3N10@ea_wuRwx@$NcT3_`efDa!o<?v4j zdoA;1B*+W*wQ=;~k#Vw{l;Z39dAaX|X%mZvwlTq`*|Kq=0h+U!lDcA>J$IwYV@&m> znKfAhivDT=&0$o<&%JK0bg<*!7jKYhhhh@r-Ey5a(tM^9`}F=J^G&#y1B}!m-l;f- zu$}g7Kc5Wt`RqVaut$ctk>pL=()GnrsCz?-Xot`AOxNTrkrXk;dh;URM|LgolPF0u zELr7e7(tXuc;1Q&%d(~B9pU@xv5{ed=Iuz6ZG0K6eR|)E3R`gt{=WEwLNSvd8v}t= zZs5Qj!i|g1jY69m=|JKT+D^1GqW#AY?)N<OVK|U~NrjkvEQ;6-1BYZbl%$<#5h29P zO0DzstrBpGqmM^U{4Trj&Z<st{`?)$vmURI(Yf(9nIWfwf)dl_rZ1Q+D)ocuQdCy~ zmv~Lz7$6%bu3Cj{Mqpc30zVyxfcUK`(-7B<>Sl{u;#f}bykxr2&hs`##mEnNh+JEq zY0I6DJYEmSr4fFAF#;thuC}_rZca)%6jHI_fmdq}EDXHLMDt+Nw7+Hd<j??`Rc136 zN5=Aqi>W);CxOt0ycn0I4_P{o$sYzQ;DI>6gsOM-VXj9EVoRTz7TlMk1_)vq+b68% zz+A(*Jl!QjtU$xR*mbTuU$<EGyL(?TNV5|I-}fZ!m)g^6PqTH6eGQ1*=e0gSgMOHe zx3A^k`EZ8u5@zMgZ5a+VvFAT9_85bnY&Yu|b)CekrsSO|`CDFxeP|e#9#^f42WDwY zr_t^+3yF3^D`wWlt$aKfdK6|qpOHf+1u~v~XB2}7x$m{Rc^K_KeX4bndK&Z_Mdlwg zK@Y%IGI5xuuX<gfd3UVm+bDJ{s2~xi?rP(g({*X6*B>=$>I=i-GV=|(sb275b7kIQ zsUu_zm9_&y4yMDiAI-}&xOWE8xqJ<Ln>N5PHD!hOij6t`%jh<#S@X7HB-_uzKG{*D z1osx%`jAjQDwo4=Ur9|+({+)qnp4QMYX0LP>ZnCDM9ZviA0YIpojN<BR+-#2J<iiy z;E*POn~2#7*>HT3zxQ*iw2Ki=UTWff(D7d2ipl?T9@p^PES$~@x^L+Cw>K#e4}@OK z^a*uTlxyX21nEr>8FDU8d38n@yj>nno)}RW7B#zQNa$(^3o9!0o$UX(++mSQ<?#RT zFL;y_%rX(7l)?2tfLg5kQ{tQ&nb@p5{ujS6gjkSz;{o}!TjS?$4`aFq0mNcUSR{_Z zgIHkhiq?Tf+n;Q4CB=_cxW@g*ekz7)uKEA{D9yS`8`__WOPNjTvd>P8Ipv-Z#1%R8 zC`V6@jXYewbq2EkOjkA3eVSvojHFF^%F6AeR)5bw80<mhp?F9vbozx9QK4Leub@ew zmh+kp$PwkoF{|Snm3f){YjgRFf7<3Gdf{Q{cK9p{wm9bx(#C(x61)DrbX>sY@#SR9 z2P390D~;yYr$Mn|q6E+FQmeyn@#>c_ER3yVD*p%%YeS)J`Jpn>E+~QRco~<GG}wAp zh$wn~djScnYHlLN;$Wg`Qhu+tlq5OMmG)}x(yrK}<Oo^Tsj%&ZUY=^yGTQ8LIFgi3 zeUSCLE=rK;R@1dgHMLrS-2e!>98wHUNvTcmL|&~DJ%`W%h40a+ZMF{WSQ?EVGpT2s z7SL!YedK|RiJe)!<$OpwESfqe=5!hdgJ;#halp3I5&^AfCb7OQBvjBFaJmUSpzoYZ ztqjl)&7VF&_gVl5T7><Si8HiEys6MkADA!J>`bSwE%8%kub%Xj3ma=HS)k%KLK!u< z3o=?iYsNA2-JvYTQ;-{QTFSN!Vot$1OP#rVF1{m;2=ch3r|U|kc3WN;z&lmD!f4S* zwfL`0=y8Bq0zZw&l)kygOFq6;`TTd{xo6z!bFc%M0PmpYnbA3g9ljVUOsU?%jiENp z{gImW4xZ>pR1E<m#`6qf>`XX-H0rv_r9HuUp1c8<_!u1ylajDrfBK14JIuKxZ&UBB z4<scjbDQ_T)zy$d#6Dv*C?4=yLE{q-+NFyZWiUe}X)*cM)R`C`XA+i0$*a^qD2=UF zTj7pZ#haqaK0O}QwpHxS3VLZ9F{>7uXk>a=_Yw#S=emxI2y4XMt7e`NXgq%9efPyG z<3N^9H4`;GOKLtXf1Y_TS-isGXGD`igTaBvq4xc3MTs@%77gk<9O}Lri~is}bn<t6 z3QKyVVs6%H2N5N)Fra)h!E`g0tp8F&p#u#V%bA-NSc@thZD!}}^=PN;9Pk!8`{OgS z;1WVFbqZXF_$_k6Hs4Mu;o*ZuqKT3OD37sX=a5ZCCRDzM;gygUqgHB!O9E53CYjII zQ>0%u1XpMWINwz8H)OUeSSbEXCqaxY9<??d3s0mrDmHIptV-FX@qL3%<Q|CZp-LGH zeESHKI+GBiOr+2EsUZUoAP`v^p3@|{UfG`Iz6{!{99a^1`b`8cxT9&PX<Ma%6L9Ft zaqB6w>di(?Gb!%=2Mu3i`_#Lr<hSQ*;2lE6>cxu|EKSPAq1Bq&<D0XEnfl;;l~mUH zXI>2wPuf2jU}!wzX-zwA|2iUf^Q^jl<=~Xb<*Q!)jnZT21G9b~v3|E;*jEwifNzb+ zlOV<Ep}pDKgi|Jo&i+1?*TSlytHndI#e0hp7nV2ed*wri*CLZ>&v7qoFOW~tC^7m7 z1%v{LJM>Pn&ZQjND$G8FVwd7QPs7s26+4BUhrr!(T(BKM`C=q2IhL$c#7nu4R-SGC zmd(M=V(^!KQ~YH*w>fn5W%ep_)BtyolSiF&t@i1uhdG>VTSeaaaK*&eoR`>U1-+V5 zEEi0Sq58<`H$Ld{(=}Ve!vm7uz}F-UL42%3^6noUBe<s{bO!z&;l;$QR>)-7Xkh9C zQ%&5`1siToXCULzzAM%V+a582fC>&0U#ACOG5|5S%M`X@XN<#EL0~fI2~WC$TF^Nf zQob4#fA#(jSbkD{;jhLvHmxczviA!w?^|U+TxEK9;~vd-8u8rN-?qQHQhC&1DnZuD zkN7hUP+CiS>KHr`VvAF)WMSX>wN~pZJ8eIy)<nCcc8*JCkdTHxo;EX@Vs7wUDTIsv z_D}7r>hbDtT8#Zn!3bK#UVIm7?b~YQ9#m#qjvl;iZYVRG%f*P^Xe|umUY!>CB`G5E z8vJ*jUw$LpR5LHaWs!OaVzlYTqxRS#-%7TZ#OOKymGzzunhBJtl)cge-aP6LK7VU9 z;VH@6aof-4){6fH@#ChHGZOcCJhlEm|DUCUslP}L1l3bu$69q7+BGVVr5=LgX2nBw z;9H76`{*AKVJ$?!-4qB%7BKR)7_o|DuKCl#yUQb)Nfs0*j6*`7VfK{382#~Ee`+=; zfP;}a#?r52qw?DiNY%(tp=u9xgFsJR8>C2s5bUjL-=-CiFXjoPcig=+{my_w{e@lm z7U6>FY-^<5<<P@k!K%wjX0S5<Gl@(~q#|#e)d|Tn_t2uwGGx0-1L>L;s)Eye+kFm* zPglxqN9)99Ece%2%HhgtiC23X6X?<a?>~A?W%dyh`zt%SO`)Kh=O2amPuc!MT>c6Q zM;sV^(!*TlctmilfPD>dvubwmK)-TUi~9N`kpdx+WGaeh8@8%Lx+ntz5hGADO@c1w zPh!MQ!(=O3t%7VUiEqZt?lfzE0Uu)*;}G%s;t#{g4BdH^YfO%0uC|LYDQDnJr9Ubr z*F4%=gHnIkZKtkYw9`5$fHwtZ3S+Fc+c&a%uJlSdS()Zvl3ubzik)g-F_(1x)1-&N zq=<)k9awz>jrLp}gm$LH%3`A=^Fk~8`yP8y9zYh;26k_L5@(iI_{7nQv1$u%w3(t0 zw@R8>`+)Bb<Db7YaDP!Vwb#t^dY>4RQhYe3af<ivE$b~yfP#wtQYt1TX4j+kpj?Dx z&_Z**HU7(3Gni;{&tSu+WNdQZBZb8*A*}50rE2YzQ$A>DwwP4wb(FUpRE^E+=*h6j z%{)mT=0wkooWf`t<3m+qg!{)$x7bh6Bq#Jpg=YWHvq6}#w1Fjd5wT2YB}-8n!mmS- zi}X8DMxyO1Kau#A2I<F8HAdooAn3Gl3busCfh774g4*4#(OVjE*%2Ji2j=4^1g;F5 z@fks<ZeH8w{GC>ru&Q5dhwcaLh5}%|5^fhw<VQqjw@<<<<K9m!Aczr^v%qOPVv@*6 z85Q#!l{bg$Awu;ZtCZ;XMw}4c;dPLcgh$Xw4PMNWvup>RZbLTlC-me}i70mkd_{J4 zZB$#%C4s4ZY@mj2i$Xha4u!A$0{cb%l}<hyP&yLjLyVV0qPx%TiJ=yuw5e33v>mDy zLW)4?Ij+eLi<^faJTx;=v<Ek69_-fp<q~$M)H(pHQ|O-_vi2lc%(9Ky8e%Bd_c!7I zd$ysA?^aJ_7loyPVHK-hw2JL0BbEx{_X94BbfK3m*hLA|a;;457iyTvWG_#oqUcEZ z&r;G}ZBJ9|9mJOV?2zP}Zhj>}6d7K<0>0ql1K*%+yh1Zd!h;{Lp1iZ5nXLnZWKkwZ zI}q8M(1#WL7DMBXq5mnyQdTXLcVu4S+gA*;$x1H_4bW1NUoH_uUfj?RONO;MODHJd zaPS=;7>b|eBW5@MY^{jyNQ!Zl{yEYyR9;f24OJRb%i%WNp2lqS@b59*+(butkrq4e z{kY+u-EaniZYjSaFhAY?)pQ6<!=@42iw|+@iqD%>>TWYX2UETqOX!ZB<<-o#S)v`G zb*X8B-yH0>{GDZQ=gm1k-I>89LBu}D*&SA88ov{Di`cW}Y2})72-<GgZ^aKKw)=U- z3eMMS4kI@VNM~P3?xtB($q1EY86gpkYs^|O#DCo28$?v>C$U}EBdplywbDXLsmwe~ zw4Br#^H|=QxrrIx>2EbxSkm;ONM7rV9HBLTyBc-@>>@=N$*o$PK74O_x)(7SWye0Z zi@h#^(RUVfKpM@6jnS9!!btZrXI1aUpy;iIvXSNjTaDx!XDwveB+wxp(9(lJGPBEf zs&_RNkNZIYOyj$RqK#3xn2dDtee5q{55&-@5hzh+jTg!O)%tLm7|XWT#eA2+2pQhs z149+cQlI6EkQ_A_@0lD`hp_#}lRo4CQ{0|lQnva#mtbeHIljH{fy=#c`~c8CryB}q zPRn>-Le5Sc>&zA%IbY|}H-nT4>5h|DA(mSjqU|;adVDNV5X7}30LGyqe-xBMQV>hk zK6-X#qzDOGXMTT4$JNK6ha9oWdJd@~JtR=a++Fu_*-R-F#f@zc=NLTq@WsX8I0PLO zfiNz9xL0zt_I6%Y;<{fETN%@Ni12s5xVn757Me4p-UMO9JD65SN_t#{{5FfC*F*|c z<9%Ah`O-0$+v+N7D@_jLA|QVG1DjXW4TR-z@thbD6w#6K8zsMhawyoF7w#HQ2$y&g zGLN1x#k(d)l~5u2`7kN^>ED$m`2Cf-kK>E{Ldam&o}sQ@K#;=co7I|6(ytL(Uqy0L zha6~^;;?y}yLzHEANAx)m@(#xm}wu*SK3aB{+Ehc&3={J48ce?{O&Ur9A2o*4?hmE zZU>yAv_J4}1p+htQw7nuFU%G<8(uNehrmO&>Yh?;UUt3Eo=tC~R$<)XAhiJcuAZ37 zWmAg}MW#L%AF}dWpW|gn;eigbe)-RSX!PqSj!)ggzpxMLzQ>+o(~62!k6WcxRC2*X zOUN)e*cMFg3DmVFd%fS5K#VwUldc>p;?ojZ!BKsdL5|pVqY^MVJ`H>Vrjc5%bh%3s zwi-m7>0<Mmtq3!}WO$1VpLOnOI>kG3R>g>@rXYEV=kJNqwum{EY(d#QDD9UPu{={p zzA7S{oU)NceMkAv{Wl!Dro!P}5evf!Z}td&hHYL#tdOM)<ByRI+DGr3nCA*2X4z5% z21jhuDb%D|8{E=PS_otbXT*~UT+hf&`7VWVrM-9K#n51?c&>#InOEz4rl6Lzm?+tr zb`UDf*G_<59q3%m&&y!7*(O(b%zgH-J9libhk5((IRo)(W>s$oSwON#JAY6BOGS6H zT8V6TdU>Fq%i-x{hPLd*3J8<ZOsCuQ-C8@|(E)lV%P1A2yDff<7?+4-2lNGUgwg5m za}op)9|p{VsnK~<klI(5`ZxHk_B5*_g>FyFL`)nMEU$<aS~*B;xX{jA%ImbKaq=tS zfer(DpIF+K<bK;8Wt?0mM2*px90R@nqH#CrDuIx_yLLMAD!kY~nKZRSPt4XG!2hq{ zr};6sr;?04o1^|y0|t=DLVdOw9W9Ee&yozKC)D_!j2mdYQQOrlQYbrBUy7dHPIsp3 zY4E-%<GSwF3}sfFr(k>raeRi+=dwHBSpOCf!x#{G8caAA#;di6-oWx(AjmF-eYask zKP&)y$OQO215Zm8+mT;@D2`K$4|3RshdUm!gM;<}&8Mj;R}VquT$>VtiTkLvx_Y<0 zc}t>xJdoBKZ!k8mL`tM~^W?$fS**J!7=7nJ3sD2AKiKlngL+b1zm&uq4_u50kc|vT zkDKdH5|6=Z>-sMjg-Jnd-VopY2O3#{6C48b{}XEboArURfNyTE_8j!)J`>mZ-=VjP zy~2bj0a~mZDkkVR2DaquW5bT;h-A;fqeyP!ZlQqWZi%5(9QXLB*T)OW^wnr1YK0xY zO1jk`!2L8!gJk|0mnboS^oz1I8uRT{p@58k=3|Hv0Y<QcKZ*&;!#3*iGsqhJ%_H^k zA77A{=kBX8x{+LtrWL8}Pw|{39SFOIj|$(J?ajX}vJQ9(@KPmwc`X(Y_l4TMrCsec zu?3;hQ{AV;FR=x6$VGlz4-hDkYhwHQeFK|kpW{cS#o&H6uaj_+u#&0wy50;nvlE^( z9v_GOnEzF9dwyUc3<xR^q*HBd;v@r|?as|SxfEmM4&7o!9RJPfWMtkZCVsBA&NK|p z{Ni|tp4OJ5*mMi4BKs($1ZEM*;j(+?|KX1MUBa9%Q0aIGTU=1*oyf(8X}GBQ`y^ly zY9Y?sLfmcFXc*V9)bz69O9HZN;Vajvq;_~d%xFdyi;@NHy7S8$SL(X!r#}~UR9046 zVrLVzF&Z_w-CQJ;d<s)yjZ<TfN4~gb%Ohs>=0xI`0(0x0K3f}&Xm*ZdZSC>>GUJ?Q z&nm8$Dd)@R5+shj<D~m-N_UY$d_RrnOoi4={7KueQkv}$Mew?5v(KC=*r6<(Z7WK> z!r=e3_8#z5xBvh6aU7X(kS&f~MppLTD`XQHImk+g>@6pIk8BayWTb?Ih$wrNjBFAi z`+v#Z=XTfU{(kPy=lAc?<9K;{pL1RB*S@an^?Dv!DQ3P_-qFv|s5XraOGu8+;?$;Q z6a0otzXn`iM;O7g=s>I=`826bbBLI-A|2IYSb!3|-Z$}3A*xOD+Cp);5?@a44hN2g zu*luj%Xc+;Lied##J!FVKNt-JVMDE;{v>?)i3LZWiS<JWXfs0KSB)sq%s!BAeuKjq zvh?_;X09exFr2TY^tXsAQST_S<*FDeH{mCo`M&l*HmF=^z33>I>qZEhoN3Hh4>-fy zuH(M5CUt&CRvo!LJ`N-8EmE7f?87pT-!!qJf_u&}>YRo~H7d_ovsbwANXQYK1#{Em zpwZY$2US#mrd2s%C6SUT(;+sr6ZcZ@^v=dy1XgUmdS=_^@(8cVi*wFy)9o7w9AWEQ zY58w7G@2fm>rO0vzLwh*ze}qrB8cn#dWR}gJXC8^kdHbj<Hl-eBiUx%w@E9Hd9)9A zu-VBB1m`A29WRaEBoF>H&B%T5RFDpR^X|O5)FypNOheRpkw+gMG)arPq^Hdj#0=M| zR}Fe#vscH%FD&PkUVj+%u^=1pHa4I6YS#vqKT+$lP)TUPcHY?S(y)29px`;#5)Pb} zo|l1`f!f@c*74KWFKC8|k0^$>-VdsEn7C!*^?gms6T@H5Cn%_j2eQ$Sy=#)zBz=2m zvnCq-8zQHqhgohwF{Kipp|CBjXrd3@WiqFUKm9vRg&AI|lBt0wpMNW}TBbNhY<b2I zLVO|pa3PeYi{pA>k^nAPk0iuvuE#loL*d?HJ&xe=<W!ZUOTqTq?`wMTstx*6L~ehQ zbY2=PIWx;x9-aRLtN3NRYHoJC`fe$9@v(mJ`nfH>>Es^{>M6aU`t%x#Uw14lyaLmp z7NnPUyIEqM&l`$qO%~=3_O?}zb)M+HERp_w5|;7+#FVJ}h>JVgrAv();beEzuF4rZ zQodkR2)!a#i70|g1oyq9kaoMT43A-~e6wI<{LOGqeM|$(@CcoA5{m}k?tO@(vs><k z7v6iiboQ-wLT<aLzA>X2`U%MvbgO5#uM}NVL9rvzdP{G25t7@RZ3VOxF1<k1cV|kd z&$W)b9kxYKy=6}mb_snrmL7E>F{;3+k}TcEGaW|iq?Uc#Sx;8c8kbIgfSt(VwRP0| z(>EF<*8IUuIS!Fk1sDg4WifA9dhb1a?7c2e+Yoxk8E015)Mq%@r<$TAd4jGs*V^Sy zU_B9^|CQSgT^P^l$HIk$M@!W+&DBw?HGXNVIZ}y*N1Md@^a{lo!WWRzHz|s$Umxab zKdX%^Rl=`)J`t>4uG_^;e?6Vs6XS#77rFOdOQBC_UBdXInuuO1&9&(cbB_$a4#p+R z`Q$^^PT;DdzVgw^zEWVr_DIU3k~b(~FPbBpQ+S9|^NcPBG)#1`Vu$el=2R;#zjb#^ z|7>!^IZx38ee=OZD2#M(jl%3a=}c^$=HA&3{XCK|8y?q#Ay}e&iY70Q8rNkOO}T|v zdbXsWKyhcAW$8B(Pr4MfG{N_xZfkxVDCLb2Tl+czwY|-hR~hhtQ}###WkV&zbb9lB zZIyCVropr=KyhKx;e4*?reJybWj|uW!f4X&Zadp!!-tPeffxJC==?NHys8LvQj5(M zx-d@BaPIGZx{B{-j$#i*5!qLnnD2|YE@w@<$-lqe9Vsq!ZZ%(J+vyP;52RPxwXD=z z-NQNEp~4bk7q!#QZM)7f;mkTO3S}>1m&7$eA79vAdP5ueEn6mpGU&X!T85|+%Wn2w z!L&|ZLIlwT<a=?$uX|gthTDVHeZu>Wji_^kM7<+}xco2q1qVyC$dUQ;$xp0$V)gpt z>v+|+TimulZ(?g1=e3Jzx3~3z2u5<b7R_Zg8wLGI7BpwGYLvEab>|K^buB%!L_J=$ zz71N6{k@yzwoAHm2!t!{nZ{wWYh=zwQS*(^BKN`4$SS?-X6XXL?%6=9SorEN*~mdL zfp3&&sF+<f7Q5$-bCoQ(6mN;$tEG&e+1d+YsXcSzp=Fme^><$*Ah##oV{w=JN>3eA z(2ksTqR@KIa?bU$_6S9mZD!o&1603TOvdsvN~-2wqxU++*hyCNE&K0cJV%?i%mfBY zx8!ay1G_vnPyYmc7pU!OnAYdk42DlkA5|nm0;h$buOn?=sdx!$a->W%jp^iGUr>-u zP>COe3C^Yww>+L4kJy^DiZM%D0T~RxR#VEz3(wlER|W+*ghgiBWc#1{9W|rTKU};1 z?WVXOBca@kQ|6wKeNNvQoQS19Ijc=K(Vmn^?W40$6=lkh_(++=8g*f8&Bv-s^no{t z^(H0b$lL{_v&d8Dan&s0O5fB5T`%FLN)0<|%JJ+o-BunEX3@+v)0){7S+5BpIT!Tk zYiK;&x*wg8s<%NfyLE$Pq>}xBGq}lPbCE>)BEDGxvNvSZjdyc>ZBk}Qqp|hLoxajZ z{ksjZ&JzvZSRyO-*ihV3qq^SZ(Q1`O?vKL38>7{>su&t~a{89zW(%UL9|qnaV2Iia zjJ_rY?c9};eBj%&XISBIxA)a6pOP}gx7X8}Vu|Lrw<61h^q%`tMuoArb%>YP?q0NU ztjp&dUFb~WY+D|o=PBdmw|^^Yu?CLY2Wu3KrkD4O*tXENvS={{kNxBy@-T3F`LV`6 zHEFVrlXJqj_XR@b;njySD~b27mM5COHkkXg8|5rGN{xXJWl=H#m5h#Qi|&ZU*~NjP z(dp=$`LzVO1PU#_bu7~TC=_KRo|EJX$4a!E$sG|kmk9G_slHmP@lGY)4019}C6TsS zhcwX`3*u1uurpJ|F(abZ6RjOGP}imTr?us16V3r?C_c1VBV{}m{SP@PQJc?ep3{=z za$lWb+O_J8hy(AvE&FiE`&hUhOt=TuV`<L>@3l?F@^sK0bY3kmxqR;{`Q7Nq8U8cV z+_fv;1s~W9gvSJE#*e>tAK?G+opM9LN;8aK@<{XBcpx>Koy?ujX}2Gw-K5~rU;0MG zL$@rrtcJ@@=xVxRs8>N+EU+Ha*JC&SJ&#UhQ+of~GUhCHigvqfzDiIZ;YblT)l#v$ z+`a9*Mdg$`4;U!K94<X~wxh)t(Z=k=P7%9WFrL=ynT@_Te3kV=`p_PX#|EO9zDr>~ z^bzj=nZ`QXEW{_|GP8-^tv!Y@`H%W>=%#zE`dh0XmSTNGoqb8oTGbZDjK@n?=9A9% zVc)=;e-S${foot(zX%Gvw(j4^9OO5M0YTT>#<EFR?%6K;2Kx(H?TSvf5;D)I7e?M9 zAwGYI_%g^`{HvR<;wqPrXsE`Ofg&RTn@&)2ldEx8k^6e&c8=tmn_7i&?X)crO*u+Z zsI+$IGaBkTjLG1MWI|W!xEun$Y(Y93n~S9NHy=c|^RA%Y)p_mk<iE`O@Dg=#R}Wp~ zEzxw$Zr*K?5upUN%Befu=yEd?_3qOKF(f#v47lDTFZ*2z`zhmW&TX(Y%lmueFTF)~ z&Lx<hO{ODmf5pwhAcBU75`X(#JTGY1z-F47P%=#&#x(cd>w(^Tff?l3taD0kko0<J zNLZ|6f!{pM^wlQ{yENW{+>XX`gmp!;QS)L!8eQj!U_upWy9(iSf%_bGGC{cMoQ0e- zg;feMnMlVNl>-|7G0csd=N}(2F~u0oXsP!+lWM=HUlK)!sG*VYVQ=O^R?2rx%ln-t zXQ@2e-CSy|FEqJKy7GPfvx+B<G=Y#T<`(ZlCjHal{c~eH`D(&==gSF#lxcmA4(%Ij zw?eJ@;ndBeqYw5%Uj!dk3xG7=va7_qu;d8YMc>d|GeD+I*4?1;h_Ia2`MkLX?)%N@ z*HPKfeKp$6o_pWB;4kK%gdRSNDgLHc+ta=HN@?*y^dQFzMCn_O)U|<Y3<7w0(@U?6 z&5hcu2-Z_9$J^#1s2}!wlI}41J!D;12*uX48}UY1*ARt=JbaU4VurwJ=PvUhQ!|sf z#hP==Sb&hec$kFB5bdDsQoCFaD*A}6i~Br6N|$sRrdwve=QS*eP?&bMW(zn^o+)<W zB$=X*f$7r6=(9c|)(0MAP5sA@f8|-S^w`B<9>=%*NWD&eRfMwraP=pbV*dOUEJ%Jj zp4g_{s23uS{Nbpa3zW)~jH+^IOc?lF{xsnTG$wtw83Dy%yLO?DB(B!+S+qvi3@e+$ z2FuS&&W1xS*KHOEzeippT-iJHo_ocWD?R8v0jhM-aKGCQxmaY(v3JJ0T-O@9*6B!% z)?hxd9X|cNVZ-`CrM;nz4go;u`%yD{@(TY^SS$IXr1s<$e9Up(?8)otn@-<Kv$ZPR zR!Wc4BnW4Jih*<PuI+o$q^Z?w<JnK2|M~9~U8BU)5w%tCy)666rk&WcA6T}#(}j3D zb_97-884Qf)cyW^#nAmp9hU{i<~Hp%u7NYi*J>gw=O(;1R98F!=!mV?!R8S6h3^2p zU<yEa5O{5kSXBV@s8(=FN})>a{q4Qua>eVmrl|njOQ<J3;v$Eg`(R0aTuIRa_MnNB zhL&l!CvJpsOzq5NM!7x(05;PA+92HjCD>UYKi-<cyD&%~(UJA}K1&9QqjtRaLE4hc z9}@#p@^xH%oZl8LgHJ*0wI&sx=Je(wcQY143z!RSV1SO^bv}HF{k0}g-Aig7&MiL< zKttZQ+@rchez3bqRj_ShnPM^3*p;8@LkSMAeMJFOM$DbJhdW@aAP4MCID*PU1(D+F z!E4;x<Ib;}J~iWVhUX<23!ga$y#;WxqLA;LmP%^d?4G=p|30@HeNrq9IC*GdbmzSs z_Xsksl_k?lbMIqSpBfdd@4h1h?7SFyf$sguqw%51%}n1zp;5D!7-ZpMTf+=%gN6>R z>`%Ig0BVD_4#oOw+Vqfq0*QUN_}C@ZvsDD3V_(Ov>b*Q#lbA2S;!51!Is|pVl;{Dj z^D2^!)ozxVcYA6|4c^39KT2U<ZP;6_+3i&)Zo58F9oDl{q<hnWYM$1+Z*lkI-4|_N zJPB5|qO1n;(={R|C8a%W_Z*(D)P(8i8sydA?W`ac*)3Xr)u$#B0e}2r8<dxf3HD50 zYXV}X0iYST?gY3#E&WpCam#yRWca10kMMJ=PRBc(nP^q^kSU^-(u<#6Mi15YmSiYW z-+s;f7h7U|Uo@@zE;s_6c@0=e4XVztC2BsQJzagabfcn`Gz=iUAqI_{-@1W4sfYN6 zi2ztBaDL>8Re@+l@K?b2(7eQJtlfgs;a9Es07OvRR2U~sl=$vV2x#R`E72NAWHPj# zePCOf3=Zw@7mQj#>~!wXCa?kQ5A`&!^$sc1$JA)I>c6(>11z8bedjL#n~DzNmQg)q zEF$_m_Xz0G0w<yN`K|R%&h70{%T#+(fX#8^6Tkz)_g<u^HuxO4?Pb+Uq8ARJ*m!k; zJlwv#*oH>mS*`56#0`uh*mXo6+Z0@jOuhB&B0v>sU!z!gwp`f>1?uefy&IGS(C%)O zzrqg_HU@}6`k-<_W@5ev;2(*8<6L{gRt7&eS{za1QFEmj=<~~WQKP&7R4#;{-w_;H zy>6p&xYD3~|LL$0cy{R31S_uyGpiwq`K-VjplstTWM*D?shIflR=)y`dv1;I@upyf zh1d8i{!z8o{<^sgs?xlpni0#?rvN{w(Dl0WTfPba#)av}R#wjgpcHB$*-ut##&jK_ z(+h{CwY|!0?qwRLA6$m6PgPe0s2FxBITl6Ca(AKi4o89Zorb-7yVTM>U2Yp=$c+^g zLnM~-%kcq$U9UC@D?INDYAxPp#r57c29sX9unGo;lmd__!P#W<DFBX#M`Fg?Bl@IH zt2KCUo*07M27q2<gZZ&w2Uoo19WYyxRZx~&Cb-swu7Xx*Q~bb?CGEDf@7U#5h-qhr zP)@qvX1CGfS03`+OSTCatCMxbR_EucIs5^$)ZIP;li`wN-YMqics8HoxR96R>Sa0Y z;8RmA{;7VW8+WOufsCc*o{Zs}@9KYel5_eUjn_;8^nx+Uv5kU7O?V;K4H)Tk!NbT< zx_jjGr474_tZ3=TSfwd|!GV`q{T7&*rBk<#Jx1T>Boi7WD);Kt0eCRj&Xh<gT}9j- zrBcPS?6u=g6>XHZFfa99%cV(xXGJ=?u+8js_szw8Jj2^qgqo(nnu}PQ7@sjjT-J={ z?WSL!0N_;Is58UzLapbtT7VwX5=m&94x5EA$+If;zVN);)0??Q3Hs2BWYg0qE#ft% z{Lt}Ha~YnO7#jg-iE%VxE^#&w0I>_ML2F5b8TrC(+LW7d-DZLR6vPKuKyK?DEP?S< zz%vKJ`W%ci&F)cP5l!XmGDq?a>Sy~hz82@*?AOxk5b^)Cmz!hz5#axDgH8U|z&D+D znNQ6Qp%Jbxqpcp<#10nD00?d5?lUpRkXuE_5nv`XLAa90XwG*8E<-G|lGnlk-r+!^ z{yb-8RS?(wutbmeo}DChH-IH-(|q2d+G+1P8)Sv>5hXBSs==ax3&7C)z|M4;N2VX4 zNDBs5C_okz=#t=;8od7&_@L(=ChU{`m^3Kx{wMLS1wnD{wnbS&%%vfeHU(URZE+BK zwCd{vgdMzHT(4mM=C|Avv6+(*USzYg0C9yzmd}96xJoMgQr%3f*?Gi_GM4T1jTc;; zEe$)eEq=)~x1LT06!cq8y-vIlfL%iw1zd7M3(V}wy#YG$mW$T*)H)ARdS<vKla~y= zv#%4YUe-Wij)NJRUC9KPZ>*)5RCeV6p>VduT`NRz(|c(Ifb-DIJ`zF}W0~t8q4>NP zcCtB32-}7!C+i|!*!tmBKbo)QAH?jP@Gw2pY3|vtl#hG&`BW5%Ee&m{$!n^70c#1~ zDAx{v#Cl@WFdlSwK@k<B?sMr6v3V3ph!we^U3?H}sWHZ{`oO2KIp$2sXo3?eM);&= z&PuGC5*30_*S+!;SP2ZpEkoCy15nWn&wH}8en?GE$z(-cre}VkwA;5E@EG^I$DyJd zLBwk0bD6$Akc<g$$->87YghbODWEU!W(PD6a`;jATMqCc3K-uMURu0*V1d_u$**2> z2W?D&sfqEdX_roBzf^O4rSib*N2#|cRozTTuo=gZF)eAP{;Y_p+z(4}&>%d?b;43U z?E{83Npd(F>n#Yq!hSR_(-i8{x)?;3eg|iTNf~l8%2lQ{X_zn*zn_^;iCWT7`!Qh| z!bKaOsP=}`cx|k0TU0SR3ZDmk_J}@=od`mBvjO5z|5g49uw6$GoAtQW#}j?`P2*Jg zu^sz@=9sJ?1OBtmUH#k`E!)rgUD3imGq$g2vl8sagi)g5qJQ^W;}^6-misQpaHeK& z=~p05W5dLuS1WRJuo)Sp6iid1xYR+D&}hM{QMo2Ue@IKs4o;6{1Y;~@yQ&-QDuqQ_ zHbKcnu1M9TKzH08hC|4<Cf$X^&P}=>=@X-prYX~P%Jm?|*s6r#XE~G#nrC&;SmoN! zHcQE2F@6{G_=aU@p~z&|r2STL`96x7F{ltDD?o|oQ7i;ut^K&bG@wO|o}gJux~NiK zCsFw^^D(#^312m)`dAxN-4JH148$i1QYh|7&@&D*(7|Cpka+~xM=WbML2{EAjd%!# zLoJs`wH2O92t8D1YGA#fO+Dg)>6CviBnak@K34aQ?Q0*-SUA8wQy5Bu+`W=xPok4f zZ?^4`9}-d2q@gk8F<SCKG59L+OccM21^$9GdtooJr!0C*@9Jj6<3+J~L+L2IqU=Rl z?lauQnJU^rgbGY;sh{XJg|F(6^JBA*eXbwWFui|wUC}5`R~3c3uF$nh*r*C8Equ^U zxBaB#y%8pgA)sdtk{~e^AH=KBivAMqt5Q~cLc&zrxE;piqpA1x47WsC{BaJ<uA^mL z3(dkXn(%<Gw~d-onVv6vQuX*;FC%HytI@5Y@pXeQpub6VQ)km%NB63=lE+THzQ)Cy zs)U(m$8Ns$HrMi;O+F;nn!RKy#x<dGan_fT++nF0N8*4$v)tMno`lS*=zD#W@W}nl z&m0)awy--~$WX_Gg~O=FS}vRsf*jM;5zA?oWQuG=$(fFj%AsO#8H4PFVA5><a-w(6 z>5H4_auF)!H3ck^CBO=^w0U9>GiR>qI-M&Ze+)~MEgP4fzDpE|S{$n_%dL$^CwgC4 zGFp}ci<TrJj`b}rZ^lW0p_@&Lz{s+CQCIy+?!}sVFP6y>(H*Kf6_i8#^F|BfIoh($ zU3Q6fE)-9^?m7}}B=TIL+TbFM&b-nmrgl~jMU-%O0*6wpbtai!tS?V4T60hp?^a=d zJJlS!yAO%P==$AKPWjdnE0))&`)b5)1FDGf76Y_NY108^3Zm?D`a!Jz7&@Y?Um$Mc z&IRZ6TktL#hEg<!-9=gD$Tf~6TJ8(W7!}S`ko4VEij9Qg-nREvxMLm0U7;G)kM@{x zRyjO`mA$GE#q)?&p!MP5dj~{$mkDI*K@&7Q#zj7X&fWUsLnYG$`d)saGAU223r>T= z`RhH6I%b4Qw`r0bhcH>oK6wuEA26@3slyWAu=FsiLAI;G-UM25oU8?1dAQZ|ZdPU2 zGkSh+0>4lWTaP;NKT=I4oZ?&+hC0VfxQ?1RyOPbgN(qHDkXS1v1Qz`Og@sGf7d|?( zgdqPWR@P)23{nlW%5VfUt!TQ7O1emPy~L@jhDMTzWk+iPeftu@D06K+{(1m8)bx46 z3@u|&D869{q-S-UMu`PQj(wZ1obh=zwDU=UM{GEhNDZn1#pCfWwjt85(M>$K7K+iF zL#;=TSyTNumO&k2IB3VhXUQZRK?@;r3AtS>9ZdCJHb7DiHDtF#k9WAbnNDaSdOZ+k zo3%(wk29s=3(xiwtSaeoP7;(gWQr-g0I9Ji)Ii(_XMps`MFK5jwa^Z&Bg=-sTW0+^ z@(?#r;?Xp+m3sm@gE7o`f}{*<8Lmy<#TYdUXp9utIlhvn2E;aPWf~VABb=DYg<#Pd z$g^nJwqdSSMEYD?Q!!VWZ&F@GW6hw%AVrhwLgS+Ckk`>!OWH%RO*o3d)!Mo@h>TT} zH`?S#*dTLbj}rs<`ZgiaF?m@1%;pf=V0{SoNR>EBrB}-(YbC?as<Hv@`j?1yDXI{G zd7((RB3QlEpD`3p@B8Trjn#x8uDtYOF-b>UE<9E!R<ZXnRNf*%CeGf)R+2~IlVYTO zha;!}q?>1@`_zQ&U|_5v;#4Ze!PsV?Q7jQ=%=yTYtSuXJ8UIOQazI)%a!<wIHy!u$ zJ8SF<C~+O*8b#$rog^1Q7|nnQTE8!mR*oP1wuIY+E3F@do~@ly@`e%$Qg{ao{eBUx zAwE-sUue9hF`UIXP#O1zYV!(WfoM7}A|vFJ76tNo)`~#`8{yVC@{tXNxh)>*iLfHx zjexA^b44@n)w>TJX*7rn6{urNc5!2!4zjK(R*y`)XmE5TuOW}C8q(N`;@&doQCk~+ zWMgM1bvaSBz=w`aH1LpHp{4Rw9i1_C3x{sKL&k!+x#3;Z^I>hrhtN04(fsFoKGQpO z&`4s$NECe9W17u#FS4J#@1ud8*NZdNzhhi#whHfUiP|Xu%?AChB$^1~2o>y#;<r;M z>Pto2cK#a_&ZA;taXWGzue`JjFeN3d*&rMJ^(%JI>0f@1-f~KPs4UY&K2~$n=i1%z z#`yjz6{A>bM5Mhzx=rEZW@mo0v<`+!r91@TmBg`+EHqi_Sn?3YOgCne2r{KhHC<W- zrB15SbrG8{x2%ai99=0d9Z@Sh+hRs>WK3*6V4|=3uOwS3>6NY^cInJO6r&=&RS^M% z1i=^{)RD-EEo2Q5ygIUNcb2um1Q%_xn0|mUmc>aS2eaT(g{lG{I-@y^SX)W)Ms?B^ zIxcOSgm_;b6DQ`EanVI~2s_AqKJG_6563^E-w2i6XxK|6u_lt8!y`mwbZit&(feeL zDoNwOd68&JXwheO(bm$sgL^HfrzT>r`1!FFb$hkhLX;$7mvy9+5}8_eHI9fv+ftJK zxi!RQ>kbMK6`SQ}>={f8$u$?G0}5T^yadcrAKC8VAtqUh4?8wnFVjh(_}&dm)Oag> z(|Lumh}F%RfX3#8;;t~$W3xMAuJpeyRiF`K=oHdgyONtF=r3e(i^5sr#{FejOX*Xn z>7`*^Jxup(`?jHaCIK}176bK}OJ?~v9mBTyyklJ#d1Q<NuaIUk1toD*HrRg5Imf%( zM?k^aCK~7~GoCc2`BtJVVOl*tMWJLZoVEImGIK&Iq(Z)b$=q3YAnou1+v9q5C$xq> z1EU?$j)E_n4_y>mA0GyCGt(a!BO<+PD0yRX%O9Z_dY?pWq77c0UgaHB>d_`U8lZK) zZL-d#6g#87waU~oD-b#Tl)WS(0ZAtkukyg?iL~M^wj?JGwu*O13(^*~*o5YQM{wMc ztGv=d>3B-3+hb4Pas~D@Zd;Nz`poSU@CrWME>g=E+Sn6ooY)X;oa^66|FRLzsC1@W zdnlPa#^NeQoIA5ANuU{$dF_y;oEE?Hg-r`ALT|v7#z3K7Px`>a!-F+lee9d(!Ns^| zhnM<OY#~T`lBK4Z3_Ym<e%3_2xP~P4L<F&SK%lpcb4J3o7``?k#CK_~unOqyMhPvN z*S(y4IfwPE2a%qS7j~<dRt)!x%Wl%X!FZaV$)0rO;%)-M;Cf`q6pcRn0{Z4*0=I!( z=HQ?%4?A|lfOg1@F%_W3Jbp}%@uR(^A0bq<I+S+}+w0Bllc(+%eHqRy%FAP7zsulU z^syp@qEosfZHW_RVZg7Nn0g$O(Dh@_aPepjo7|76?I7JV)R%7Sy;6Cz|E^tbPo?pp z^Soq}u?ahcW#HjqGmlDQTxH0Q&U^5-9}x|Vdy+*`H2q;rc%~;8Iv{_v=p!M=69oUy zl>ZR~(e)Qo!6~#A035b<a3Jsl2h_;T#eq7PCEapR<di1n$$u0I4&3hvAASGIU=c|z z6bqV@KkL<dY!=pjC<jLypskZ7Ax*+pd}FSMU^{oW0(3!B11#r*Nw6Pn@Z8lNG*~7{ zEP$P3gGL{3aD)`=KLyTu4C<ULz;S6z4mhO@a&!mn!BtgN$lhF~6afcg(1aMzXFG`O zh-I3b0|@3;pgDKv+kzHoL`?&|%roFP;Nq+AU~;Zs?tTI-(|!H@+L%4+2YcY~3iR@( zWMpJ0{&>o7V_bEq;@%!-&QiwD&dx&IKws=VP@e&g^D#jALAO6T=6abRXodvf(6J5^ z4S9HRb091HtVb>C#s%up@VKnH(?H)QYl2aOmk^t7v7&;4g0@6k6m4d@$lXU0X+qA- zpg*-8Jo}Mbmg`J=3}{~0J`)ORXY#YN>7Ki;D8GN<xy^%Yk4_W!76#jeZzIo(G`o$} z*c;x%KmP!9sD1`m?%5Nd9*Z(^ZUfXi%uTh1U8INe+YNIypnEnhfrkGF0M>o*<%ZVL zHA6#Q$0^ysFW}*L{PHH2-et=el$%Pqv6%ZeK0*ie3Y`Fb-U;;In}SY!A&+l2Lxn{| zHbCe5IYROq^f;eDLp$<n{CO2-?FFlWJ9qES9Ukm0EG{mJVYW(+1F2}WFeVAdS?e;4 z2C<)A+;23nhrJfW2Y=`pEHP9W&GH~6OF4^tr!Aw4y#iZQzDLkhcV&GclP8Ks?9I|p znbtjiP<h~*A@2PETB`6|%hfv7SqzF!KqFc}sXyr><=+1=Iap@Rf1C2Q_|Wt-QL=<l z)ULL@Z>bW35OleoH4q(uN9SZ>ozZg!KmeEd`FmN$afc?wRmKusvsWH_R?yT-N@$Tb z&3)?tDuC`c{q&Zhp`pV8`JBa58gJ#gR?nPFshuibi6paPG52*wCc%*Px{yNiR7YOW z^t%kQ=x-_K`E0boF}DGptfQI(90!#0$%8KB1fcA}-1@RL1IgUx(oH+f!MHC$1AOJ} z$>#pzt+|l74D)vV!ePv#io2X;!lk~{uW>6n9eHmnOFL0>#dOVF=8BH#3!)Ip8(x{w zMmb%H)xx`aBP*IZ^d-$Q&+RVR^)jPI<3N|~r_VB9U!!_{P}K8W*LKB9tjF8rwc*6} zp-<W7=T5TeaehoOlMP-k0fjcgHPH(3XI)_vDcge+FEh3>c2m?CFX@+O&1;>&OAzW$ zCP^8e7jnuq1xEN89G0V#>c7FUARo~5t2%C%ehKP`Iv?=a#<Su)N?^vBdC+9@;hD=@ z?@!f0Ap~CDq>7@IxK#NXmZ2O9)bASL(BzYJrf8mvUL9TV%lrXK<wd>$WuQyF+VbX( zXjbk`fTFOf;Khe_=PkfK2=&v~ZO)Mkdjq=HI|0x_*gA8ba?9X&opV??p`?U>-S9hD z2&gx@v|4dzp?69cwCP{?aQpnWC@>Iig-UUx+&(Bogx<7wJ@330aYrNP^TFs7V1m%5 zxg<`L(y}&1N%eP^mu^hAMYM`i>gDMHAHdcGRPlOWb@g>i1KuI{9nb}x^}T-kyo66Z zIc>`2CeX+p%FhYl9j@Iii543)byl?(SZxBe4WUHcxMY{k+1>_?$`$|{1H*6oc^hbk z4|TB+RSIX*E4`Dz-X=%;!sO!Es}KTD%R=%ZFj6X6CbtjIlZKcQ<xc?1Z6VAZwmbmT zoNUhqSo+(8kBz=2RRhU8#Wm>2&^;o)Q~`%ev)ZXWX+l~Ma`SE8*|zr&pa8__A$2!- zj8u_s2`i}QIFM&P`udu-m2do226HOpi_WZ-mp6dd7_=3`Nc6rYBia3cuLu;8WcBB~ zS!$zb0_9{_><0q)>CL0p`Uz~+N3yF$;QoABo6{p3U<ZbD!#w=$KwrN4Ql*9YmyIn) zEmu6KQ{N-ix8gw!9uY<Xa}#e<1v-I~40BBm0e<OushHWv<=672Q$P!LZ-tMK(JUB6 zl`a^}JCClqo4)0@ZQIZ?6x$dFRkFu84p_x&eT2hr(}bR2f2*}0V=kvDZz942*ddRN zp50lXx}UuteI-_d%X{|@TC|_y8R80tEF0Ora0=c~JQB$>A?&!Zg%OQMhlU2xL<|(N zQ1_QbWz2%a@i8}ft|BqvWXe#fnoXs1Qgsc3STq=3g6```Ix*Nxz()YVkO<VO){?xV zoIVH(YXtkFx)Fe?P==Q@t}bjueCks-hcu>&x;rrhV?}{4eIc>9XHTv-#Jq;QdUI*G z!W@^*a<!e++vJ6Z3mRywH^AaEpyAOAe^q+@`2##kCM)P|!A=#SArPLZ7Od?iH@a7O z)S`uW?#y4!ku&Ui*i=J^yiFQY$7C742i#`ZI!Bp|L`f$o@51WB=xKYjbZw0$&;3n9 zR}myr^u0n8#Z?dpxboW`()eo1W@4+@)9<xoW?FyLGB4A27<{tKLa+85`yv0wdUvg5 zV$Dggb=~^0JQBb-Z(Ei|ki?i?Ur2JETPA6uRs~V9T&J5&q|JjKt|&S6`n$CrLsq>d z2c?Wb$gJK`31QATWORdZz1w>q4e_OIRqV`l84J(B@VR>jvRpCtel<4FC#>UKtfSCJ zKk?0bX5y_T9$2Y*FbmPD?Rf!UjPNc#y+N5qSYq8}@oogeTP(>Y=T{%!v8?cNqLb;r z80rBDK`Ni1{pjU`_r96~l;7BG+lGDPT-$n{3^pK!Ox3>i>_WR94uz9_b3WYP395JR zC)l|8!R^vQKHtqAzP$m_YnY{G>epUn2(8s;2)o#D%V+eAz5sc{R7Ox<k3K`te2HOg z=mE{Kdcmb(y5ASt3!(|pu-0Ill|pCe%Mni`<<ZKW=hR->#MLoULHr=sO}~NecIXHj zRHW$z#ww?A{RR7IlFbxNP%6*4G5eM+dZZj+lkhy`jV6&4?s|qzZXtaq5Kd$&(=_*F z6oZ_TC->~STn*-@wOdeZzlyu<yy1b|e(Zu$`CHK0mgH(WDrM3$h~z|778yMFx6W{X zq02Qe>`%pr1LATV<#cRDE)0~2g_C~84LODo({Kw%Nq7Bp3Yi-C{dbt_h25fb1Xw)D zV}Q5u!kyvN)`3lTk_F7pL_6#%(gZxcOuP9#&Jq!e73UEVOC+mt)=aLL5CXAQ>3?&^ zHc+2Z!pG||Mi_dV#jBTm*vyjFoODuenlsXQER-2=Ouxi1ZSFD{ZPIRGRABoRSI(la z%nhw37i#MQ_zh_p2@!oEPa)W>MQgwXU?95d<sr>aWObP&%k}RLnqe$(@P?8n3?N_Z z@Pur!3#nOd>X}-HaNAZ+K=#_cQ?P9BT0x7pcfY35<yO_*O5LL(j`kijPmlTR#R+#^ zm7;vO!8eUzkP1+BI3No%DYtz5faI<@M8I8+cIy;uq@JgH-#ib^Kp#vj))3U|YCOAT z@@H_8yoq%Sc3C+L#sj_|N8?&Q^5Q0uz6(E@bq*s|P!K!h!g)p;8!XOP7<3_0^WrvX zGNDMxy5!b9(<)L}E=K%HG<Ie5xCs|4n}Xy;255tA{--aVP~3oP2JGSwi|=(U-pkTD zg7~vaq5JjI+X!PMBH)#;umT&LRM2h;V8JQWA^uF!d=7qHR4e}MTsLx@?GzcdwOG$g zSfFoW!){=}ljHQEhCEXDu&~kKT$L)wwE0?Y1_cB|#Fc{9Oi2#_PJ_W198NH$Qj_#$ zkOq5{>G}Pj7)M!c!qmZ%uJSLDjV{=>GBxV0cYB(i-Tji`^MC=`?EO50SC)C$8L7<? z>xEzLdR^;Ln0Tr{Ufw&2bu>TExazI4ohq7k&As<VFI}*vJbFesXImbW=H>9s?MSv0 za?Z+9P)kPdQnxcoj|#qV>cux#t2r;?THNGPZ}L1m!BMV^NcxNa-fjRMr|p{qOhkFR zyt%{m=kl3VvHqjuUubdIZL7w1V?N8>dgj34jtm@;$zYn`klGa86n%%;B+gfx%UjH; ziMu8Nsh@4|d%+xsKZ^>ga$V-5aA~2NRKkn17_|t8@QiJ=dIU7MM=clshyif=^5&jL z7Y#O&FfGVBq!Fbkyh;dC$`^wah1si6KK<fNDxy!$T_d6??2aEq(efOESWzf^qk0tH ze$n$W0r3`v;J(3awNUIX3n{FpNH4f3g0?Ddf1as)ab1!^6Xs7OkLEyCsfDbD@I)^b z)AvSeqxtJ#`ZH$m<6L?jPSIB#|2D0|2_2Rkpear8j)oql`~d~S)D`J$8z#?haFX$h z=dncggWMMtcg+uux5}h~LRweyeoN>_oKNFpq9T}$6J-!ads^e{nU&tH89T|GRja!x zmva97Rk|l_9$adwHDQhnXLdynebiw(a1NN(P?x}x!ooQr=`8&|<x950=-vTkmvpMT zQP@QOZVY-QTD_fO`}nz}?}rjw8E_+KxGXEp!!y4MfJO(7g7EyUWa1U(Ae*l;&{Q@} zMUi6cJ2<9K`MKo^=JVa(xq3c(V7szjOqVdO$E>U8pT}O;{KQ{BZb1Oy|G9yyjWL^l zk$Ab97OpQg6tz>{7#>xP-E{bsX7A$@T_pqrs-(+MRZF_smc^SITdZk=H5@qmksN)H zz#X?abZyh9zq`8{-Lvy>HGXm?(`9-GZKLFDklw%SGM_<38e+`wokrl65ity3*7PDT zA-sdeah5nMSFY(I3W|koVFP8t;!?ttG<_7V#x-!Sn7cOzpC02rysNVmfrR)cg;NpX zyeXzm94`tg*V;9D?pgwQXSp)JW#E4?%N{@GD5EK0ul*WYmRIOyD!(SD8nvP(C(fK6 zF9^PeZiB4b1$5$1M9F@d%%2?stS#)IPLf+F-ltf&DW*Iwi#2Q)gFT7zTbK~MA$W{$ z5S<0!3$M~EoA{}PSGu@z&T!G>UiE!#!k_6HqvFT6c!hrHS=$#yxqveW{B|MW=l9wL zJMN*Ip3M++Y^M9L1+!jLH7KrwVijLI(^<gV1~Cc~gh|<!3}(iCR=AbLDMRSD6U_&^ zQ5?epN`n0!A3+h=a<W8<mFdWX3&9x0ymK}&#u96KSbH4hT_h+|r#@l6hG;%LT=uCK zzTb=`TH+4b=!)lzsk(5Hwg&l-c77)^*%(i^NVGu*tH&4o<pR)PiFS{#nU0v0o1|M| zN)9H*D(Z(Fo<%%;hRwc>C`Y=#JbJqJ#7gO35(+^?fCVdK`Qn2Qj7<z&@epk7td{WP zh2UZaOq)1aKLEMT0cVj$>R`>rSKh%nlgWS!OMp?uFh8}IG5zfE<~mX<nkFcwm*4j* zK2+vq`V%i$qz@?^${3Dbfq|;ju)!ks=ZW9NlE2TCVvOI#+^Lw#4|55MlGGo>5JG4@ z>ei1tfV_OVEdyWS?7~*toN&Wxinvb27;uOVy+YsO0x=M0q(}HA@a6TtPx7&0Kp~i9 zXEnL5Xn#-X4-hAmZ%Y_Pe1(-m^_(OnkQ_ou%Czy6u7@e!&US|fYNY9PEL0X~&7<%6 zSLlLw@r4C2IogT(Oq$ySi8!G<-OjPajTzHrE6PmOTKCfV7I{G;cq`#TPy~1E4iZn1 z(ZX3aZO0~1n^N3Mu<qtTbX8?ZF@vXUV|B`M9QL%>VAWT<nbK`G!eWak7xiHZXX&2o zJz0h>mJ0K3WL+Jn!Q&F2dz%hN7uj4KDtnSC)yX|S*D4P{G_^;v_FnmXov19TO5$P) z9;anYak2FJ@T%TZ-O!+*XV~G5mTfUZUU#V$ZR`>Fo`nw9;?`_OfkRd7%7)!nSe5q> zf!zno0@0}%65YnUk+Re~D=Bj8df$vBW=ItcH|UoJp4A*K+iu`DcW$(Q{1#qOM*UQc z=4CRu`o{9c46%^Km-Z&<3Ep#DjiuR{kV(}<DN9=a!jjppBfEDFL-&@2>{rhXDyx(z z<>1QZ`mz+Oj5yA|+`k}#e*&!pW!s16hCv1<$Lz7DV0PU-F%<MDG<Sxge9Qm`e*;6w z#SJJ+ifnZ_B0b)XkO?XvrJ)r$eD(&aDq0GW%*+G3`v#n`%9$#`1RYc!K_Nu)aE|#B zIzQMuzpR+tcbHOH;iy|!H!(_A*&s}~OMZq&NK&aSl&0D=Y$);VtT8e}vWn_WG%VAv z;tq$Dkf~i4lPNW<-`kwwb_qr{-_&*kvfrBO+uOajPwE(ZV4Dzs>4InuSTf|gNjtnr zn4SyvVpPdkNCvBX7RBRV%}vI>-Q@jXEBXf1)%JZ)^uVC`zL~^)zNbyn6`GKV=Xdo8 z?asS3R>ZDYT}h7`ytl4QufYtLx>2(9aGBQcHt(&raq7hozE!K}2$<YiY{rLg$Zryu z;U)`c-VZ{ce;D%WUmBu*6H6a#VI`bK_0DonkDm<D8G{7JFVMGM23l>hduXw0%nz3g zhmg^Bg``GWjR^uZtDft9--q&ok#UVU*iB-^oFjpL+;<AZveJ<WLIKq_x3JU<92(+Z z5+y2IvF*O_5yeEhrm*l-tTu{|kZnbMseHZ2hrHF5z2&JkdelZb`)cFN+D`WiT<=<1 z2+!bC>o`s#$~6(`VINq%rP!NM*fK+p@y6%vwhkJCe@WSjP#?R}moF&Nl)?`ZAC7Zm z076ne?{^)W{<OR2PEu+tI$6`;Otk~D4kZ3QRlByMd}0?Gg*gv<yh(>E){*LB<Lm`n zHC?KO0;G=RACUnJ;7{U1qWmU}d&cX5?<PB^#SLY9FTL4whZ0x2^F=#%%$2jLdCs32 z;UqUWStP=nkA^GIk8wvKQiuJVn&ihM^ha4DjP&^GX&Rf|9|K(SJ3$5gjsD}_AJ<Q4 zKY&I0<FgS*L-Orh<^LBb=xMOf-$6l707Xx({{RSOT^{y7o*yLo$d&;K_Nk5`MfrY= zK&k&Hf~d|ZG|`{*8QtT1Pwx4hK3iN^SZ<Da41Wp<*ne!2%LRqN^^bo;{3zf&O-q^{ zKi$do-{})Rom~G(V?dt#@!67xWf9TY|384F{(KaFou88Y!R@R6;>QVRPk8e?{ZF7; zgU^e=k2wHY_q7kgJLXVf;a@p^%+a6R|C9cGw9~WrF>-U{d8{8Fz0=4qeXsCD9w#H5 zrcXvYJ@RS#-;Zqe8XtE2(SG|TRCF>w+4S!vUijaQ{8K@G3h|U;o*>u$9PJ0v?f<E3 zzmEKy5KpWA-_id@%YPgBuR=U6h|~1%>hKSY@fRWfoof68b@&Z4_@@wIJB9>KW<Z{& z9nxtUtTB&;eaid%h5p@}L2(hT%aX_MfwUi06Y^;Pgf0FD5Bwj6jQa;DGNOILBN~_C zc#spvv5b9E68^)vV*N&++;npNclw8?`8jLJ=*CS1nfyQZ#{YpIKNxu9uQqd9GfvaL zYsrah|4u)Tum7}}fc+B8I^a|xCnEWs2dA(9&Vzr;K=@xUsE^&#Y4!g*`gd1wIw+ht zn7_`N=pP4ya+cqs#mTdriWa}j`n110P5-yP@A&?o#txrx5Ni)6{M(q_lyTCJ@FS4@ z3{uBI?eEkIT=)CcMV;1+zoY+|#{7)xehA+ssY~I<W^<wq|ATe^`Q{%g_ODq>9S#N> zk<<MU&p!*={}(?_7>N2yfYdo1n@-aw%=z!!<4@m;wO&gz(+pze-+8#x*MIkR|CWK0 ze@&wPJ{kGX*8Qu=k^JFX|L{`B!uZ|N|DkpN`Q{&Q_+{4rFV=n9%#P__XMM_8|B~kY z6YKuV8;(Ed7vK7~TJk?=%wN6Kaqjv<8~zvTK4$i5Rq`kKyHIvIN}Vw3w1+!Q|88a{ z4E!0&{s_RQz3*xIgdxAmO6UJ%AkHtd{%ackr$wK>e)8O>J>TCju;P~-{_iaM^!0z3 z{QUH-Ctm7!p1<cc|IoURC3!kS`pc}%{^olc{<q}kmsy|IjMMbLjoru7Jblxz^e?{k zZ<Fc&L1Tb#O$DKj3x4M)T@Kd~qvB~GXQeclPd9$?_#egHFRYR0j;AO(`y)~|o!AEc zkIaqwM>_E7WIc@eBc(g}!|fmO^e=x9EWi0{y7{*X{NKijzb45o|3geae!{<4{qaKo zhxYum(Vvd|w0QnEt3S1z{?#S^4>J7MQuG(M`I}2TZRw}!e{A)CCPhD8;>lN@9H*P7 zE&Vk853L?7nNJd=UuJz;B>$t;|LFmKNjLxdn0~yl|2Hd5;Fy0+H~(VL|C81KTrVNY ze@WbcOFZqNPt*U#RsIJC{u`J0|CYcW>%xf({lz8zDTbfk?nIs^=5(6=2T9Q{F7foL z>)*)dbb@peL{FR9X&RW&Z|UagIDVQwF`?55(tk{fq*hM$?2fa04EYN`()-f_I!zlJ XqnK}`e)Ly9_Crc?YO<x$rUCyS0fK`G diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/img/examples/bootstrap-example-sticky-footer.png b/src/main/webapp/bower_components/bootstrap/docs/assets/img/examples/bootstrap-example-sticky-footer.png deleted file mode 100644 index fb80e7b92f9d66eb27d41f9926b632dea4f2ca12..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30820 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 diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/img/examples/browser-icon-chrome.png b/src/main/webapp/bower_components/bootstrap/docs/assets/img/examples/browser-icon-chrome.png deleted file mode 100644 index 8c846c54e0d623fab50aac814ba547b5f621c9cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 55522 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 CVw<!8 diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/img/examples/browser-icon-firefox.png b/src/main/webapp/bower_components/bootstrap/docs/assets/img/examples/browser-icon-firefox.png deleted file mode 100644 index 3dd68b11335ed2a0c5554335980a0ab4b51c8747..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 175994 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⪙jW`p2vR%4ntofU9ue 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 M^+#%zD%QdO58FXL*Z=?k diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/img/examples/browser-icon-safari.png b/src/main/webapp/bower_components/bootstrap/docs/assets/img/examples/browser-icon-safari.png deleted file mode 100644 index 7aaa29a7939374b03cdd94faf34f4bc361295d95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 209527 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	ce%JhwX?AZUn*6CzX8Iho%(<2dpIwJD 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%0D;;{cMD^0>q;L#4-sY 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�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 diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/img/examples/slide-01.jpg b/src/main/webapp/bower_components/bootstrap/docs/assets/img/examples/slide-01.jpg deleted file mode 100644 index bedab7d81cc8875f48c3fe7032228cea7ba87e10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 83303 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 WQ&l4$UrcaaT<AC&+JE%#%>M&@mrhau diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/img/examples/slide-02.jpg b/src/main/webapp/bower_components/bootstrap/docs/assets/img/examples/slide-02.jpg deleted file mode 100644 index 4ed12cc07c4ac27227727a90895abee0e7755b10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 137070 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]d)B5VgJ-Yc<aG!L=(co0#l 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 bWi=s`x5jbN;?LWld{AlRh}(+zkM{onf5e@I diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/img/examples/slide-03.jpg b/src/main/webapp/bower_components/bootstrap/docs/assets/img/examples/slide-03.jpg deleted file mode 100644 index 37415da3ebfd5c143aa07e6a932ba32bbcab777e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 137378 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%0D``!$NM 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 ay!74PtKW~CI5ZuS`M$zgE@%HY@xK5J_V;-J diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/img/glyphicons-halflings-white.png b/src/main/webapp/bower_components/bootstrap/docs/assets/img/glyphicons-halflings-white.png deleted file mode 100644 index 3bf6484a29d8da269f9bc874b25493a45fae3bae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8777 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 B7G?kd diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/img/glyphicons-halflings.png b/src/main/webapp/bower_components/bootstrap/docs/assets/img/glyphicons-halflings.png deleted file mode 100644 index a9969993201f9cee63cf9f49217646347297b643..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12799 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 diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/img/grid-baseline-20px.png b/src/main/webapp/bower_components/bootstrap/docs/assets/img/grid-baseline-20px.png deleted file mode 100644 index ce8c69ca2d7d42a7134fc1ed33699161fdcd93e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 84 zcmeAS@N?(olHy`uVBq!ia0vp^j6f{H!3HFK_`(+gDQQm^$B>F!TaOq5r8o{K6y3P9 g#kf@_!tLpL=GUf{)iNOsE<j}rp00i_>zopr0NyGUQUCw| diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/img/less-logo-large.png b/src/main/webapp/bower_components/bootstrap/docs/assets/img/less-logo-large.png deleted file mode 100644 index 8f62ffbe0899b83e3b75a0e2d6b32cec3e253a8a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12824 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 diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/img/responsive-illustrations.png b/src/main/webapp/bower_components/bootstrap/docs/assets/img/responsive-illustrations.png deleted file mode 100644 index a4bcbe302cc2605b63ab913d9adfc88f40b01383..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1008 zcmeAS@N?(olHy`uVBq!ia0y~yVAKJ!Cvq?YNxz2D2q5)5z$e7@|Ns9p2RC@|;K9$I zKNl@p1a#`DQ>X6TySHoCuD5UBZr{HB;lqb7Uc8t;fBv>@+jj2U`Rv)VjT<-4o;`cV zjvbF4J$mxw$)7)eo<DyM^q)cJo+&^to0SCl1v4<bm0rE>`I8k|AO6^Xwy99}{u!9C z@yy`^mqg|2@^8mZGuVEW`QDs|CspPz<v-TKX8dZGpW+tJsjcM<3`|X)E{-7;x8B~0 z%)jg)()O_D?Hb=(6I!O_z4^UwIzz7W=}T?z|NobB5fBnzapnlSb@KlASMNk@lZ$jO zE|k)HyG7Lht>3Gd#cSF+A8Eau);?8p+pMRFUqzyuKWz|+PjGE9?N#1zfQeg&5TV6% z`fs~d&(yM8%c_e)k4dRrt1c2fb}A)i^Pvb^N%Iv3(`>Bmr>7^pe8Z!o{vK>%7<=|C zYeMD{VKthPE;j9D2bi?O)^M*jx%PZ<xzVcHo$<MAz8mE(J{2LKa{E?Q>&AUA`t6?1 zPVHV7BJp~)Y1sN*5$v0e2}L9{vWkI-Yx_5*9Z&fA<@H784K*9T{C%6hW?oWuz`ZkB zTA<)56+RkziT9w@%(Ln0Y0USQMtXm|aw<r?p>&Hy-4>}2=N9??EITRrq`!2Bg<Mo3 z>+^q?!tB<#CH#x{e6(<1P{iz`Nk{*t=bqkPxG~~BPueuoYoR~O)<)>eJ-2LgaI^PH z#W1D&-*h){?N6VXwD#ooy|<Fzp4k0*S%lnLnQOe2<(t1nBv+QN{uUwqDX(PryNH>8 zq_4@o?)x+QicEGm<6YAuuUtE}u5WlJnPjSbWY_u$zse%+s#vXI=X$kJcAEF*u#|{? zkt-S3d0szqyB5*>Xa0_L2dok!yuI^g=Kp(otZL8N3u;Fbde4@7eNK976ZvTEWTy>x zf?wx8jfprv@BQ8jMtf_%?qblnUVnK~;M)1sAM6>{i!&8`)bFSQre_9ES3j3^P6<r_ D##;ot diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/js/README.md b/src/main/webapp/bower_components/bootstrap/docs/assets/js/README.md deleted file mode 100644 index 66903c71..00000000 --- a/src/main/webapp/bower_components/bootstrap/docs/assets/js/README.md +++ /dev/null @@ -1,106 +0,0 @@ -## 2.0 BOOTSTRAP JS PHILOSOPHY -These are the high-level design rules which guide the development of Bootstrap's plugin apis. - ---- - -### DATA-ATTRIBUTE API - -We believe you should be able to use all plugins provided by Bootstrap purely through the markup API without writing a single line of javascript. - -We acknowledge that this isn't always the most performant and sometimes it may be desirable to turn this functionality off altogether. Therefore, as of 2.0 we provide the ability to disable the data attribute API by unbinding all events on the body namespaced with `'data-api'`. This looks like this: - - $('body').off('.data-api') - -To target a specific plugin, just include the plugins name as a namespace along with the data-api namespace like this: - - $('body').off('.alert.data-api') - ---- - -### PROGRAMMATIC API - -We also believe you should be able to use all plugins provided by Bootstrap purely through the JS API. - -All public APIs should be single, chainable methods, and return the collection acted upon. - - $(".btn.danger").button("toggle").addClass("fat") - -All methods should accept an optional options object, a string which targets a particular method, or null which initiates the default behavior: - - $("#myModal").modal() // initialized with defaults - $("#myModal").modal({ keyboard: false }) // initialized with now keyboard - $("#myModal").modal('show') // initializes and invokes show immediately afterqwe2 - ---- - -### OPTIONS - -Options should be sparse and add universal value. We should pick the right defaults. - -All plugins should have a default object which can be modified to effect all instance's default options. The defaults object should be available via `$.fn.plugin.defaults`. - - $.fn.modal.defaults = { … } - -An options definition should take the following form: - - *noun*: *adjective* - describes or modifies a quality of an instance - -examples: - - backdrop: true - keyboard: false - placement: 'top' - ---- - -### EVENTS - -All events should have an infinitive and past participle form. The infinitive is fired just before an action takes place, the past participle on completion of the action. - - show | shown - hide | hidden - ---- - -### CONSTRUCTORS - -Each plugin should expose it's raw constructor on a `Constructor` property -- accessed in the following way: - - - $.fn.popover.Constructor - ---- - -### DATA ACCESSOR - -Each plugin stores a copy of the invoked class on an object. This class instance can be accessed directly through jQuery's data API like this: - - $('[rel=popover]').data('popover') instanceof $.fn.popover.Constructor - ---- - -### DATA ATTRIBUTES - -Data attributes should take the following form: - -- data-{{verb}}={{plugin}} - defines main interaction -- data-target || href^=# - defined on "control" element (if element controls an element other than self) -- data-{{noun}} - defines class instance options - -examples: - - // control other targets - data-toggle="modal" data-target="#foo" - data-toggle="collapse" data-target="#foo" data-parent="#bar" - - // defined on element they control - data-spy="scroll" - - data-dismiss="modal" - data-dismiss="alert" - - data-toggle="dropdown" - - data-toggle="button" - data-toggle="buttons-checkbox" - data-toggle="buttons-radio" \ No newline at end of file diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/js/application.js b/src/main/webapp/bower_components/bootstrap/docs/assets/js/application.js deleted file mode 100644 index f880bc05..00000000 --- a/src/main/webapp/bower_components/bootstrap/docs/assets/js/application.js +++ /dev/null @@ -1,156 +0,0 @@ -// NOTICE!! DO NOT USE ANY OF THIS JAVASCRIPT -// IT'S ALL JUST JUNK FOR OUR DOCS! -// ++++++++++++++++++++++++++++++++++++++++++ - -!function ($) { - - $(function(){ - - var $window = $(window) - - // Disable certain links in docs - $('section [href^=#]').click(function (e) { - e.preventDefault() - }) - - // side bar - setTimeout(function () { - $('.bs-docs-sidenav').affix({ - offset: { - top: function () { return $window.width() <= 980 ? 290 : 210 } - , bottom: 270 - } - }) - }, 100) - - // make code pretty - window.prettyPrint && prettyPrint() - - // add-ons - $('.add-on :checkbox').on('click', function () { - var $this = $(this) - , method = $this.attr('checked') ? 'addClass' : 'removeClass' - $(this).parents('.add-on')[method]('active') - }) - - // add tipsies to grid for scaffolding - if ($('#gridSystem').length) { - $('#gridSystem').tooltip({ - selector: '.show-grid > [class*="span"]' - , title: function () { return $(this).width() + 'px' } - }) - } - - // tooltip demo - $('.tooltip-demo').tooltip({ - selector: "a[data-toggle=tooltip]" - }) - - $('.tooltip-test').tooltip() - $('.popover-test').popover() - - // popover demo - $("a[data-toggle=popover]") - .popover() - .click(function(e) { - e.preventDefault() - }) - - // button state demo - $('#fat-btn') - .click(function () { - var btn = $(this) - btn.button('loading') - setTimeout(function () { - btn.button('reset') - }, 3000) - }) - - // carousel demo - $('#myCarousel').carousel() - - // javascript build logic - var inputsComponent = $("#components.download input") - , inputsPlugin = $("#plugins.download input") - , inputsVariables = $("#variables.download input") - - // toggle all plugin checkboxes - $('#components.download .toggle-all').on('click', function (e) { - e.preventDefault() - inputsComponent.attr('checked', !inputsComponent.is(':checked')) - }) - - $('#plugins.download .toggle-all').on('click', function (e) { - e.preventDefault() - inputsPlugin.attr('checked', !inputsPlugin.is(':checked')) - }) - - $('#variables.download .toggle-all').on('click', function (e) { - e.preventDefault() - inputsVariables.val('') - }) - - // request built javascript - $('.download-btn .btn').on('click', function () { - - var css = $("#components.download input:checked") - .map(function () { return this.value }) - .toArray() - , js = $("#plugins.download input:checked") - .map(function () { return this.value }) - .toArray() - , vars = {} - , img = ['glyphicons-halflings.png', 'glyphicons-halflings-white.png'] - - $("#variables.download input") - .each(function () { - $(this).val() && (vars[ $(this).prev().text() ] = $(this).val()) - }) - - $.ajax({ - type: 'POST' - , url: /\?dev/.test(window.location) ? 'http://localhost:3000' : 'http://bootstrap.herokuapp.com' - , dataType: 'jsonpi' - , params: { - js: js - , css: css - , vars: vars - , img: img - } - }) - }) - }) - -// Modified from the original jsonpi https://github.com/benvinegar/jquery-jsonpi -$.ajaxTransport('jsonpi', function(opts, originalOptions, jqXHR) { - var url = opts.url; - - return { - send: function(_, completeCallback) { - var name = 'jQuery_iframe_' + jQuery.now() - , iframe, form - - iframe = $('<iframe>') - .attr('name', name) - .appendTo('head') - - form = $('<form>') - .attr('method', opts.type) // GET or POST - .attr('action', url) - .attr('target', name) - - $.each(opts.params, function(k, v) { - - $('<input>') - .attr('type', 'hidden') - .attr('name', k) - .attr('value', typeof v == 'string' ? v : JSON.stringify(v)) - .appendTo(form) - }) - - form.appendTo('body').submit() - } - } -}) - -}(window.jQuery) diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap-affix.js b/src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap-affix.js deleted file mode 100644 index 7595fdb0..00000000 --- a/src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap-affix.js +++ /dev/null @@ -1,117 +0,0 @@ -/* ========================================================== - * bootstrap-affix.js v2.3.0 - * http://twitter.github.com/bootstrap/javascript.html#affix - * ========================================================== - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ========================================================== */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* AFFIX CLASS DEFINITION - * ====================== */ - - var Affix = function (element, options) { - this.options = $.extend({}, $.fn.affix.defaults, options) - this.$window = $(window) - .on('scroll.affix.data-api', $.proxy(this.checkPosition, this)) - .on('click.affix.data-api', $.proxy(function () { setTimeout($.proxy(this.checkPosition, this), 1) }, this)) - this.$element = $(element) - this.checkPosition() - } - - Affix.prototype.checkPosition = function () { - if (!this.$element.is(':visible')) return - - var scrollHeight = $(document).height() - , scrollTop = this.$window.scrollTop() - , position = this.$element.offset() - , offset = this.options.offset - , offsetBottom = offset.bottom - , offsetTop = offset.top - , reset = 'affix affix-top affix-bottom' - , affix - - if (typeof offset != 'object') offsetBottom = offsetTop = offset - if (typeof offsetTop == 'function') offsetTop = offset.top() - if (typeof offsetBottom == 'function') offsetBottom = offset.bottom() - - affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ? - false : offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ? - 'bottom' : offsetTop != null && scrollTop <= offsetTop ? - 'top' : false - - if (this.affixed === affix) return - - this.affixed = affix - this.unpin = affix == 'bottom' ? position.top - scrollTop : null - - this.$element.removeClass(reset).addClass('affix' + (affix ? '-' + affix : '')) - } - - - /* AFFIX PLUGIN DEFINITION - * ======================= */ - - var old = $.fn.affix - - $.fn.affix = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('affix') - , options = typeof option == 'object' && option - if (!data) $this.data('affix', (data = new Affix(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.affix.Constructor = Affix - - $.fn.affix.defaults = { - offset: 0 - } - - - /* AFFIX NO CONFLICT - * ================= */ - - $.fn.affix.noConflict = function () { - $.fn.affix = old - return this - } - - - /* AFFIX DATA-API - * ============== */ - - $(window).on('load', function () { - $('[data-spy="affix"]').each(function () { - var $spy = $(this) - , data = $spy.data() - - data.offset = data.offset || {} - - data.offsetBottom && (data.offset.bottom = data.offsetBottom) - data.offsetTop && (data.offset.top = data.offsetTop) - - $spy.affix(data) - }) - }) - - -}(window.jQuery); \ No newline at end of file diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap-alert.js b/src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap-alert.js deleted file mode 100644 index b5627984..00000000 --- a/src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap-alert.js +++ /dev/null @@ -1,99 +0,0 @@ -/* ========================================================== - * bootstrap-alert.js v2.3.0 - * http://twitter.github.com/bootstrap/javascript.html#alerts - * ========================================================== - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ========================================================== */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* ALERT CLASS DEFINITION - * ====================== */ - - var dismiss = '[data-dismiss="alert"]' - , Alert = function (el) { - $(el).on('click', dismiss, this.close) - } - - Alert.prototype.close = function (e) { - var $this = $(this) - , selector = $this.attr('data-target') - , $parent - - if (!selector) { - selector = $this.attr('href') - selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 - } - - $parent = $(selector) - - e && e.preventDefault() - - $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent()) - - $parent.trigger(e = $.Event('close')) - - if (e.isDefaultPrevented()) return - - $parent.removeClass('in') - - function removeElement() { - $parent - .trigger('closed') - .remove() - } - - $.support.transition && $parent.hasClass('fade') ? - $parent.on($.support.transition.end, removeElement) : - removeElement() - } - - - /* ALERT PLUGIN DEFINITION - * ======================= */ - - var old = $.fn.alert - - $.fn.alert = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('alert') - if (!data) $this.data('alert', (data = new Alert(this))) - if (typeof option == 'string') data[option].call($this) - }) - } - - $.fn.alert.Constructor = Alert - - - /* ALERT NO CONFLICT - * ================= */ - - $.fn.alert.noConflict = function () { - $.fn.alert = old - return this - } - - - /* ALERT DATA-API - * ============== */ - - $(document).on('click.alert.data-api', dismiss, Alert.prototype.close) - -}(window.jQuery); \ No newline at end of file diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap-button.js b/src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap-button.js deleted file mode 100644 index 045927b6..00000000 --- a/src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap-button.js +++ /dev/null @@ -1,105 +0,0 @@ -/* ============================================================ - * bootstrap-button.js v2.3.0 - * http://twitter.github.com/bootstrap/javascript.html#buttons - * ============================================================ - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============================================================ */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* BUTTON PUBLIC CLASS DEFINITION - * ============================== */ - - var Button = function (element, options) { - this.$element = $(element) - this.options = $.extend({}, $.fn.button.defaults, options) - } - - Button.prototype.setState = function (state) { - var d = 'disabled' - , $el = this.$element - , data = $el.data() - , val = $el.is('input') ? 'val' : 'html' - - state = state + 'Text' - data.resetText || $el.data('resetText', $el[val]()) - - $el[val](data[state] || this.options[state]) - - // push to event loop to allow forms to submit - setTimeout(function () { - state == 'loadingText' ? - $el.addClass(d).attr(d, d) : - $el.removeClass(d).removeAttr(d) - }, 0) - } - - Button.prototype.toggle = function () { - var $parent = this.$element.closest('[data-toggle="buttons-radio"]') - - $parent && $parent - .find('.active') - .removeClass('active') - - this.$element.toggleClass('active') - } - - - /* BUTTON PLUGIN DEFINITION - * ======================== */ - - var old = $.fn.button - - $.fn.button = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('button') - , options = typeof option == 'object' && option - if (!data) $this.data('button', (data = new Button(this, options))) - if (option == 'toggle') data.toggle() - else if (option) data.setState(option) - }) - } - - $.fn.button.defaults = { - loadingText: 'loading...' - } - - $.fn.button.Constructor = Button - - - /* BUTTON NO CONFLICT - * ================== */ - - $.fn.button.noConflict = function () { - $.fn.button = old - return this - } - - - /* BUTTON DATA-API - * =============== */ - - $(document).on('click.button.data-api', '[data-toggle^=button]', function (e) { - var $btn = $(e.target) - if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') - $btn.button('toggle') - }) - -}(window.jQuery); \ No newline at end of file diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap-carousel.js b/src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap-carousel.js deleted file mode 100644 index 60455201..00000000 --- a/src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap-carousel.js +++ /dev/null @@ -1,207 +0,0 @@ -/* ========================================================== - * bootstrap-carousel.js v2.3.0 - * http://twitter.github.com/bootstrap/javascript.html#carousel - * ========================================================== - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ========================================================== */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* CAROUSEL CLASS DEFINITION - * ========================= */ - - var Carousel = function (element, options) { - this.$element = $(element) - this.$indicators = this.$element.find('.carousel-indicators') - this.options = options - this.options.pause == 'hover' && this.$element - .on('mouseenter', $.proxy(this.pause, this)) - .on('mouseleave', $.proxy(this.cycle, this)) - } - - Carousel.prototype = { - - cycle: function (e) { - if (!e) this.paused = false - if (this.interval) clearInterval(this.interval); - this.options.interval - && !this.paused - && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) - return this - } - - , getActiveIndex: function () { - this.$active = this.$element.find('.item.active') - this.$items = this.$active.parent().children() - return this.$items.index(this.$active) - } - - , to: function (pos) { - var activeIndex = this.getActiveIndex() - , that = this - - if (pos > (this.$items.length - 1) || pos < 0) return - - if (this.sliding) { - return this.$element.one('slid', function () { - that.to(pos) - }) - } - - if (activeIndex == pos) { - return this.pause().cycle() - } - - return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) - } - - , pause: function (e) { - if (!e) this.paused = true - if (this.$element.find('.next, .prev').length && $.support.transition.end) { - this.$element.trigger($.support.transition.end) - this.cycle() - } - clearInterval(this.interval) - this.interval = null - return this - } - - , next: function () { - if (this.sliding) return - return this.slide('next') - } - - , prev: function () { - if (this.sliding) return - return this.slide('prev') - } - - , slide: function (type, next) { - var $active = this.$element.find('.item.active') - , $next = next || $active[type]() - , isCycling = this.interval - , direction = type == 'next' ? 'left' : 'right' - , fallback = type == 'next' ? 'first' : 'last' - , that = this - , e - - this.sliding = true - - isCycling && this.pause() - - $next = $next.length ? $next : this.$element.find('.item')[fallback]() - - e = $.Event('slide', { - relatedTarget: $next[0] - , direction: direction - }) - - if ($next.hasClass('active')) return - - if (this.$indicators.length) { - this.$indicators.find('.active').removeClass('active') - this.$element.one('slid', function () { - var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()]) - $nextIndicator && $nextIndicator.addClass('active') - }) - } - - if ($.support.transition && this.$element.hasClass('slide')) { - this.$element.trigger(e) - if (e.isDefaultPrevented()) return - $next.addClass(type) - $next[0].offsetWidth // force reflow - $active.addClass(direction) - $next.addClass(direction) - this.$element.one($.support.transition.end, function () { - $next.removeClass([type, direction].join(' ')).addClass('active') - $active.removeClass(['active', direction].join(' ')) - that.sliding = false - setTimeout(function () { that.$element.trigger('slid') }, 0) - }) - } else { - this.$element.trigger(e) - if (e.isDefaultPrevented()) return - $active.removeClass('active') - $next.addClass('active') - this.sliding = false - this.$element.trigger('slid') - } - - isCycling && this.cycle() - - return this - } - - } - - - /* CAROUSEL PLUGIN DEFINITION - * ========================== */ - - var old = $.fn.carousel - - $.fn.carousel = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('carousel') - , options = $.extend({}, $.fn.carousel.defaults, typeof option == 'object' && option) - , action = typeof option == 'string' ? option : options.slide - if (!data) $this.data('carousel', (data = new Carousel(this, options))) - if (typeof option == 'number') data.to(option) - else if (action) data[action]() - else if (options.interval) data.pause().cycle() - }) - } - - $.fn.carousel.defaults = { - interval: 5000 - , pause: 'hover' - } - - $.fn.carousel.Constructor = Carousel - - - /* CAROUSEL NO CONFLICT - * ==================== */ - - $.fn.carousel.noConflict = function () { - $.fn.carousel = old - return this - } - - /* CAROUSEL DATA-API - * ================= */ - - $(document).on('click.carousel.data-api', '[data-slide], [data-slide-to]', function (e) { - var $this = $(this), href - , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 - , options = $.extend({}, $target.data(), $this.data()) - , slideIndex - - $target.carousel(options) - - if (slideIndex = $this.attr('data-slide-to')) { - $target.data('carousel').pause().to(slideIndex).cycle() - } - - e.preventDefault() - }) - -}(window.jQuery); \ No newline at end of file diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap-collapse.js b/src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap-collapse.js deleted file mode 100644 index 7bbad8e4..00000000 --- a/src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap-collapse.js +++ /dev/null @@ -1,167 +0,0 @@ -/* ============================================================= - * bootstrap-collapse.js v2.3.0 - * http://twitter.github.com/bootstrap/javascript.html#collapse - * ============================================================= - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============================================================ */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* COLLAPSE PUBLIC CLASS DEFINITION - * ================================ */ - - var Collapse = function (element, options) { - this.$element = $(element) - this.options = $.extend({}, $.fn.collapse.defaults, options) - - if (this.options.parent) { - this.$parent = $(this.options.parent) - } - - this.options.toggle && this.toggle() - } - - Collapse.prototype = { - - constructor: Collapse - - , dimension: function () { - var hasWidth = this.$element.hasClass('width') - return hasWidth ? 'width' : 'height' - } - - , show: function () { - var dimension - , scroll - , actives - , hasData - - if (this.transitioning || this.$element.hasClass('in')) return - - dimension = this.dimension() - scroll = $.camelCase(['scroll', dimension].join('-')) - actives = this.$parent && this.$parent.find('> .accordion-group > .in') - - if (actives && actives.length) { - hasData = actives.data('collapse') - if (hasData && hasData.transitioning) return - actives.collapse('hide') - hasData || actives.data('collapse', null) - } - - this.$element[dimension](0) - this.transition('addClass', $.Event('show'), 'shown') - $.support.transition && this.$element[dimension](this.$element[0][scroll]) - } - - , hide: function () { - var dimension - if (this.transitioning || !this.$element.hasClass('in')) return - dimension = this.dimension() - this.reset(this.$element[dimension]()) - this.transition('removeClass', $.Event('hide'), 'hidden') - this.$element[dimension](0) - } - - , reset: function (size) { - var dimension = this.dimension() - - this.$element - .removeClass('collapse') - [dimension](size || 'auto') - [0].offsetWidth - - this.$element[size !== null ? 'addClass' : 'removeClass']('collapse') - - return this - } - - , transition: function (method, startEvent, completeEvent) { - var that = this - , complete = function () { - if (startEvent.type == 'show') that.reset() - that.transitioning = 0 - that.$element.trigger(completeEvent) - } - - this.$element.trigger(startEvent) - - if (startEvent.isDefaultPrevented()) return - - this.transitioning = 1 - - this.$element[method]('in') - - $.support.transition && this.$element.hasClass('collapse') ? - this.$element.one($.support.transition.end, complete) : - complete() - } - - , toggle: function () { - this[this.$element.hasClass('in') ? 'hide' : 'show']() - } - - } - - - /* COLLAPSE PLUGIN DEFINITION - * ========================== */ - - var old = $.fn.collapse - - $.fn.collapse = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('collapse') - , options = $.extend({}, $.fn.collapse.defaults, $this.data(), typeof option == 'object' && option) - if (!data) $this.data('collapse', (data = new Collapse(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.collapse.defaults = { - toggle: true - } - - $.fn.collapse.Constructor = Collapse - - - /* COLLAPSE NO CONFLICT - * ==================== */ - - $.fn.collapse.noConflict = function () { - $.fn.collapse = old - return this - } - - - /* COLLAPSE DATA-API - * ================= */ - - $(document).on('click.collapse.data-api', '[data-toggle=collapse]', function (e) { - var $this = $(this), href - , target = $this.attr('data-target') - || e.preventDefault() - || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 - , option = $(target).data('collapse') ? 'toggle' : $this.data() - $this[$(target).hasClass('in') ? 'addClass' : 'removeClass']('collapsed') - $(target).collapse(option) - }) - -}(window.jQuery); \ No newline at end of file diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap-dropdown.js b/src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap-dropdown.js deleted file mode 100644 index ec86cf0d..00000000 --- a/src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap-dropdown.js +++ /dev/null @@ -1,165 +0,0 @@ -/* ============================================================ - * bootstrap-dropdown.js v2.3.0 - * http://twitter.github.com/bootstrap/javascript.html#dropdowns - * ============================================================ - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============================================================ */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* DROPDOWN CLASS DEFINITION - * ========================= */ - - var toggle = '[data-toggle=dropdown]' - , Dropdown = function (element) { - var $el = $(element).on('click.dropdown.data-api', this.toggle) - $('html').on('click.dropdown.data-api', function () { - $el.parent().removeClass('open') - }) - } - - Dropdown.prototype = { - - constructor: Dropdown - - , toggle: function (e) { - var $this = $(this) - , $parent - , isActive - - if ($this.is('.disabled, :disabled')) return - - $parent = getParent($this) - - isActive = $parent.hasClass('open') - - clearMenus() - - if (!isActive) { - $parent.toggleClass('open') - } - - $this.focus() - - return false - } - - , keydown: function (e) { - var $this - , $items - , $active - , $parent - , isActive - , index - - if (!/(38|40|27)/.test(e.keyCode)) return - - $this = $(this) - - e.preventDefault() - e.stopPropagation() - - if ($this.is('.disabled, :disabled')) return - - $parent = getParent($this) - - isActive = $parent.hasClass('open') - - if (!isActive || (isActive && e.keyCode == 27)) { - if (e.which == 27) $parent.find(toggle).focus() - return $this.click() - } - - $items = $('[role=menu] li:not(.divider):visible a', $parent) - - if (!$items.length) return - - index = $items.index($items.filter(':focus')) - - if (e.keyCode == 38 && index > 0) index-- // up - if (e.keyCode == 40 && index < $items.length - 1) index++ // down - if (!~index) index = 0 - - $items - .eq(index) - .focus() - } - - } - - function clearMenus() { - $(toggle).each(function () { - getParent($(this)).removeClass('open') - }) - } - - function getParent($this) { - var selector = $this.attr('data-target') - , $parent - - if (!selector) { - selector = $this.attr('href') - selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 - } - - $parent = selector && $(selector) - - if (!$parent || !$parent.length) $parent = $this.parent() - - return $parent - } - - - /* DROPDOWN PLUGIN DEFINITION - * ========================== */ - - var old = $.fn.dropdown - - $.fn.dropdown = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('dropdown') - if (!data) $this.data('dropdown', (data = new Dropdown(this))) - if (typeof option == 'string') data[option].call($this) - }) - } - - $.fn.dropdown.Constructor = Dropdown - - - /* DROPDOWN NO CONFLICT - * ==================== */ - - $.fn.dropdown.noConflict = function () { - $.fn.dropdown = old - return this - } - - - /* APPLY TO STANDARD DROPDOWN ELEMENTS - * =================================== */ - - $(document) - .on('click.dropdown.data-api', clearMenus) - .on('click.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() }) - .on('.dropdown-menu', function (e) { e.stopPropagation() }) - .on('click.dropdown.data-api' , toggle, Dropdown.prototype.toggle) - .on('keydown.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown) - -}(window.jQuery); diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap-modal.js b/src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap-modal.js deleted file mode 100644 index b5ffa95b..00000000 --- a/src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap-modal.js +++ /dev/null @@ -1,247 +0,0 @@ -/* ========================================================= - * bootstrap-modal.js v2.3.0 - * http://twitter.github.com/bootstrap/javascript.html#modals - * ========================================================= - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ========================================================= */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* MODAL CLASS DEFINITION - * ====================== */ - - var Modal = function (element, options) { - this.options = options - this.$element = $(element) - .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this)) - this.options.remote && this.$element.find('.modal-body').load(this.options.remote) - } - - Modal.prototype = { - - constructor: Modal - - , toggle: function () { - return this[!this.isShown ? 'show' : 'hide']() - } - - , show: function () { - var that = this - , e = $.Event('show') - - this.$element.trigger(e) - - if (this.isShown || e.isDefaultPrevented()) return - - this.isShown = true - - this.escape() - - this.backdrop(function () { - var transition = $.support.transition && that.$element.hasClass('fade') - - if (!that.$element.parent().length) { - that.$element.appendTo(document.body) //don't move modals dom position - } - - that.$element.show() - - if (transition) { - that.$element[0].offsetWidth // force reflow - } - - that.$element - .addClass('in') - .attr('aria-hidden', false) - - that.enforceFocus() - - transition ? - that.$element.one($.support.transition.end, function () { that.$element.focus().trigger('shown') }) : - that.$element.focus().trigger('shown') - - }) - } - - , hide: function (e) { - e && e.preventDefault() - - var that = this - - e = $.Event('hide') - - this.$element.trigger(e) - - if (!this.isShown || e.isDefaultPrevented()) return - - this.isShown = false - - this.escape() - - $(document).off('focusin.modal') - - this.$element - .removeClass('in') - .attr('aria-hidden', true) - - $.support.transition && this.$element.hasClass('fade') ? - this.hideWithTransition() : - this.hideModal() - } - - , enforceFocus: function () { - var that = this - $(document).on('focusin.modal', function (e) { - if (that.$element[0] !== e.target && !that.$element.has(e.target).length) { - that.$element.focus() - } - }) - } - - , escape: function () { - var that = this - if (this.isShown && this.options.keyboard) { - this.$element.on('keyup.dismiss.modal', function ( e ) { - e.which == 27 && that.hide() - }) - } else if (!this.isShown) { - this.$element.off('keyup.dismiss.modal') - } - } - - , hideWithTransition: function () { - var that = this - , timeout = setTimeout(function () { - that.$element.off($.support.transition.end) - that.hideModal() - }, 500) - - this.$element.one($.support.transition.end, function () { - clearTimeout(timeout) - that.hideModal() - }) - } - - , hideModal: function () { - var that = this - this.$element.hide() - this.backdrop(function () { - that.removeBackdrop() - that.$element.trigger('hidden') - }) - } - - , removeBackdrop: function () { - this.$backdrop.remove() - this.$backdrop = null - } - - , backdrop: function (callback) { - var that = this - , animate = this.$element.hasClass('fade') ? 'fade' : '' - - if (this.isShown && this.options.backdrop) { - var doAnimate = $.support.transition && animate - - this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />') - .appendTo(document.body) - - this.$backdrop.click( - this.options.backdrop == 'static' ? - $.proxy(this.$element[0].focus, this.$element[0]) - : $.proxy(this.hide, this) - ) - - if (doAnimate) this.$backdrop[0].offsetWidth // force reflow - - this.$backdrop.addClass('in') - - if (!callback) return - - doAnimate ? - this.$backdrop.one($.support.transition.end, callback) : - callback() - - } else if (!this.isShown && this.$backdrop) { - this.$backdrop.removeClass('in') - - $.support.transition && this.$element.hasClass('fade')? - this.$backdrop.one($.support.transition.end, callback) : - callback() - - } else if (callback) { - callback() - } - } - } - - - /* MODAL PLUGIN DEFINITION - * ======================= */ - - var old = $.fn.modal - - $.fn.modal = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('modal') - , options = $.extend({}, $.fn.modal.defaults, $this.data(), typeof option == 'object' && option) - if (!data) $this.data('modal', (data = new Modal(this, options))) - if (typeof option == 'string') data[option]() - else if (options.show) data.show() - }) - } - - $.fn.modal.defaults = { - backdrop: true - , keyboard: true - , show: true - } - - $.fn.modal.Constructor = Modal - - - /* MODAL NO CONFLICT - * ================= */ - - $.fn.modal.noConflict = function () { - $.fn.modal = old - return this - } - - - /* MODAL DATA-API - * ============== */ - - $(document).on('click.modal.data-api', '[data-toggle="modal"]', function (e) { - var $this = $(this) - , href = $this.attr('href') - , $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) //strip for ie7 - , option = $target.data('modal') ? 'toggle' : $.extend({ remote:!/#/.test(href) && href }, $target.data(), $this.data()) - - e.preventDefault() - - $target - .modal(option) - .one('hide', function () { - $this.focus() - }) - }) - -}(window.jQuery); diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap-popover.js b/src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap-popover.js deleted file mode 100644 index 0e7774bf..00000000 --- a/src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap-popover.js +++ /dev/null @@ -1,114 +0,0 @@ -/* =========================================================== - * bootstrap-popover.js v2.3.0 - * http://twitter.github.com/bootstrap/javascript.html#popovers - * =========================================================== - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * =========================================================== */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* POPOVER PUBLIC CLASS DEFINITION - * =============================== */ - - var Popover = function (element, options) { - this.init('popover', element, options) - } - - - /* NOTE: POPOVER EXTENDS BOOTSTRAP-TOOLTIP.js - ========================================== */ - - Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, { - - constructor: Popover - - , setContent: function () { - var $tip = this.tip() - , title = this.getTitle() - , content = this.getContent() - - $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title) - $tip.find('.popover-content')[this.options.html ? 'html' : 'text'](content) - - $tip.removeClass('fade top bottom left right in') - } - - , hasContent: function () { - return this.getTitle() || this.getContent() - } - - , getContent: function () { - var content - , $e = this.$element - , o = this.options - - content = (typeof o.content == 'function' ? o.content.call($e[0]) : o.content) - || $e.attr('data-content') - - return content - } - - , tip: function () { - if (!this.$tip) { - this.$tip = $(this.options.template) - } - return this.$tip - } - - , destroy: function () { - this.hide().$element.off('.' + this.type).removeData(this.type) - } - - }) - - - /* POPOVER PLUGIN DEFINITION - * ======================= */ - - var old = $.fn.popover - - $.fn.popover = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('popover') - , options = typeof option == 'object' && option - if (!data) $this.data('popover', (data = new Popover(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.popover.Constructor = Popover - - $.fn.popover.defaults = $.extend({} , $.fn.tooltip.defaults, { - placement: 'right' - , trigger: 'click' - , content: '' - , template: '<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>' - }) - - - /* POPOVER NO CONFLICT - * =================== */ - - $.fn.popover.noConflict = function () { - $.fn.popover = old - return this - } - -}(window.jQuery); diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap-scrollspy.js b/src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap-scrollspy.js deleted file mode 100644 index dff9a3b3..00000000 --- a/src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap-scrollspy.js +++ /dev/null @@ -1,162 +0,0 @@ -/* ============================================================= - * bootstrap-scrollspy.js v2.3.0 - * http://twitter.github.com/bootstrap/javascript.html#scrollspy - * ============================================================= - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============================================================== */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* SCROLLSPY CLASS DEFINITION - * ========================== */ - - function ScrollSpy(element, options) { - var process = $.proxy(this.process, this) - , $element = $(element).is('body') ? $(window) : $(element) - , href - this.options = $.extend({}, $.fn.scrollspy.defaults, options) - this.$scrollElement = $element.on('scroll.scroll-spy.data-api', process) - this.selector = (this.options.target - || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 - || '') + ' .nav li > a' - this.$body = $('body') - this.refresh() - this.process() - } - - ScrollSpy.prototype = { - - constructor: ScrollSpy - - , refresh: function () { - var self = this - , $targets - - this.offsets = $([]) - this.targets = $([]) - - $targets = this.$body - .find(this.selector) - .map(function () { - var $el = $(this) - , href = $el.data('target') || $el.attr('href') - , $href = /^#\w/.test(href) && $(href) - return ( $href - && $href.length - && [[ $href.position().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]] ) || null - }) - .sort(function (a, b) { return a[0] - b[0] }) - .each(function () { - self.offsets.push(this[0]) - self.targets.push(this[1]) - }) - } - - , process: function () { - var scrollTop = this.$scrollElement.scrollTop() + this.options.offset - , scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight - , maxScroll = scrollHeight - this.$scrollElement.height() - , offsets = this.offsets - , targets = this.targets - , activeTarget = this.activeTarget - , i - - if (scrollTop >= maxScroll) { - return activeTarget != (i = targets.last()[0]) - && this.activate ( i ) - } - - for (i = offsets.length; i--;) { - activeTarget != targets[i] - && scrollTop >= offsets[i] - && (!offsets[i + 1] || scrollTop <= offsets[i + 1]) - && this.activate( targets[i] ) - } - } - - , activate: function (target) { - var active - , selector - - this.activeTarget = target - - $(this.selector) - .parent('.active') - .removeClass('active') - - selector = this.selector - + '[data-target="' + target + '"],' - + this.selector + '[href="' + target + '"]' - - active = $(selector) - .parent('li') - .addClass('active') - - if (active.parent('.dropdown-menu').length) { - active = active.closest('li.dropdown').addClass('active') - } - - active.trigger('activate') - } - - } - - - /* SCROLLSPY PLUGIN DEFINITION - * =========================== */ - - var old = $.fn.scrollspy - - $.fn.scrollspy = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('scrollspy') - , options = typeof option == 'object' && option - if (!data) $this.data('scrollspy', (data = new ScrollSpy(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.scrollspy.Constructor = ScrollSpy - - $.fn.scrollspy.defaults = { - offset: 10 - } - - - /* SCROLLSPY NO CONFLICT - * ===================== */ - - $.fn.scrollspy.noConflict = function () { - $.fn.scrollspy = old - return this - } - - - /* SCROLLSPY DATA-API - * ================== */ - - $(window).on('load', function () { - $('[data-spy="scroll"]').each(function () { - var $spy = $(this) - $spy.scrollspy($spy.data()) - }) - }) - -}(window.jQuery); \ No newline at end of file diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap-tab.js b/src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap-tab.js deleted file mode 100644 index bd77eb5c..00000000 --- a/src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap-tab.js +++ /dev/null @@ -1,144 +0,0 @@ -/* ======================================================== - * bootstrap-tab.js v2.3.0 - * http://twitter.github.com/bootstrap/javascript.html#tabs - * ======================================================== - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ======================================================== */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* TAB CLASS DEFINITION - * ==================== */ - - var Tab = function (element) { - this.element = $(element) - } - - Tab.prototype = { - - constructor: Tab - - , show: function () { - var $this = this.element - , $ul = $this.closest('ul:not(.dropdown-menu)') - , selector = $this.attr('data-target') - , previous - , $target - , e - - if (!selector) { - selector = $this.attr('href') - selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 - } - - if ( $this.parent('li').hasClass('active') ) return - - previous = $ul.find('.active:last a')[0] - - e = $.Event('show', { - relatedTarget: previous - }) - - $this.trigger(e) - - if (e.isDefaultPrevented()) return - - $target = $(selector) - - this.activate($this.parent('li'), $ul) - this.activate($target, $target.parent(), function () { - $this.trigger({ - type: 'shown' - , relatedTarget: previous - }) - }) - } - - , activate: function ( element, container, callback) { - var $active = container.find('> .active') - , transition = callback - && $.support.transition - && $active.hasClass('fade') - - function next() { - $active - .removeClass('active') - .find('> .dropdown-menu > .active') - .removeClass('active') - - element.addClass('active') - - if (transition) { - element[0].offsetWidth // reflow for transition - element.addClass('in') - } else { - element.removeClass('fade') - } - - if ( element.parent('.dropdown-menu') ) { - element.closest('li.dropdown').addClass('active') - } - - callback && callback() - } - - transition ? - $active.one($.support.transition.end, next) : - next() - - $active.removeClass('in') - } - } - - - /* TAB PLUGIN DEFINITION - * ===================== */ - - var old = $.fn.tab - - $.fn.tab = function ( option ) { - return this.each(function () { - var $this = $(this) - , data = $this.data('tab') - if (!data) $this.data('tab', (data = new Tab(this))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.tab.Constructor = Tab - - - /* TAB NO CONFLICT - * =============== */ - - $.fn.tab.noConflict = function () { - $.fn.tab = old - return this - } - - - /* TAB DATA-API - * ============ */ - - $(document).on('click.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) { - e.preventDefault() - $(this).tab('show') - }) - -}(window.jQuery); \ No newline at end of file diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap-tooltip.js b/src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap-tooltip.js deleted file mode 100644 index 98131907..00000000 --- a/src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap-tooltip.js +++ /dev/null @@ -1,353 +0,0 @@ -/* =========================================================== - * bootstrap-tooltip.js v2.3.0 - * http://twitter.github.com/bootstrap/javascript.html#tooltips - * Inspired by the original jQuery.tipsy by Jason Frame - * =========================================================== - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ========================================================== */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* TOOLTIP PUBLIC CLASS DEFINITION - * =============================== */ - - var Tooltip = function (element, options) { - this.init('tooltip', element, options) - } - - Tooltip.prototype = { - - constructor: Tooltip - - , init: function (type, element, options) { - var eventIn - , eventOut - , triggers - , trigger - , i - - this.type = type - this.$element = $(element) - this.options = this.getOptions(options) - this.enabled = true - - triggers = this.options.trigger.split(' ') - - for (i = triggers.length; i--;) { - trigger = triggers[i] - if (trigger == 'click') { - this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this)) - } else if (trigger != 'manual') { - eventIn = trigger == 'hover' ? 'mouseenter' : 'focus' - eventOut = trigger == 'hover' ? 'mouseleave' : 'blur' - this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this)) - this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this)) - } - } - - this.options.selector ? - (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) : - this.fixTitle() - } - - , getOptions: function (options) { - options = $.extend({}, $.fn[this.type].defaults, this.$element.data(), options) - - if (options.delay && typeof options.delay == 'number') { - options.delay = { - show: options.delay - , hide: options.delay - } - } - - return options - } - - , enter: function (e) { - var self = $(e.currentTarget)[this.type](this._options).data(this.type) - - if (!self.options.delay || !self.options.delay.show) return self.show() - - clearTimeout(this.timeout) - self.hoverState = 'in' - this.timeout = setTimeout(function() { - if (self.hoverState == 'in') self.show() - }, self.options.delay.show) - } - - , leave: function (e) { - var self = $(e.currentTarget)[this.type](this._options).data(this.type) - - if (this.timeout) clearTimeout(this.timeout) - if (!self.options.delay || !self.options.delay.hide) return self.hide() - - self.hoverState = 'out' - this.timeout = setTimeout(function() { - if (self.hoverState == 'out') self.hide() - }, self.options.delay.hide) - } - - , show: function () { - var $tip - , pos - , actualWidth - , actualHeight - , placement - , tp - , e = $.Event('show') - - if (this.hasContent() && this.enabled) { - this.$element.trigger(e) - if (e.isDefaultPrevented()) return - $tip = this.tip() - this.setContent() - - if (this.options.animation) { - $tip.addClass('fade') - } - - placement = typeof this.options.placement == 'function' ? - this.options.placement.call(this, $tip[0], this.$element[0]) : - this.options.placement - - $tip - .detach() - .css({ top: 0, left: 0, display: 'block' }) - - this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element) - - pos = this.getPosition() - - actualWidth = $tip[0].offsetWidth - actualHeight = $tip[0].offsetHeight - - switch (placement) { - case 'bottom': - tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2} - break - case 'top': - tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2} - break - case 'left': - tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth} - break - case 'right': - tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width} - break - } - - this.applyPlacement(tp, placement) - this.$element.trigger('shown') - } - } - - , applyPlacement: function(offset, placement){ - var $tip = this.tip() - , width = $tip[0].offsetWidth - , height = $tip[0].offsetHeight - , actualWidth - , actualHeight - , delta - , replace - - $tip - .offset(offset) - .addClass(placement) - .addClass('in') - - actualWidth = $tip[0].offsetWidth - actualHeight = $tip[0].offsetHeight - - if (placement == 'top' && actualHeight != height) { - offset.top = offset.top + height - actualHeight - replace = true - } - - if (placement == 'bottom' || placement == 'top') { - delta = 0 - - if (offset.left < 0){ - delta = offset.left * -2 - offset.left = 0 - $tip.offset(offset) - actualWidth = $tip[0].offsetWidth - actualHeight = $tip[0].offsetHeight - } - - this.replaceArrow(delta - width + actualWidth, actualWidth, 'left') - } else { - this.replaceArrow(actualHeight - height, actualHeight, 'top') - } - - if (replace) $tip.offset(offset) - } - - , replaceArrow: function(delta, dimension, position){ - this - .arrow() - .css(position, delta ? (50 * (1 - delta / dimension) + "%") : '') - } - - , setContent: function () { - var $tip = this.tip() - , title = this.getTitle() - - $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title) - $tip.removeClass('fade in top bottom left right') - } - - , hide: function () { - var that = this - , $tip = this.tip() - , e = $.Event('hide') - - this.$element.trigger(e) - if (e.isDefaultPrevented()) return - - $tip.removeClass('in') - - function removeWithAnimation() { - var timeout = setTimeout(function () { - $tip.off($.support.transition.end).detach() - }, 500) - - $tip.one($.support.transition.end, function () { - clearTimeout(timeout) - $tip.detach() - }) - } - - $.support.transition && this.$tip.hasClass('fade') ? - removeWithAnimation() : - $tip.detach() - - this.$element.trigger('hidden') - - return this - } - - , fixTitle: function () { - var $e = this.$element - if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') { - $e.attr('data-original-title', $e.attr('title') || '').attr('title', '') - } - } - - , hasContent: function () { - return this.getTitle() - } - - , getPosition: function () { - var el = this.$element[0] - return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : { - width: el.offsetWidth - , height: el.offsetHeight - }, this.$element.offset()) - } - - , getTitle: function () { - var title - , $e = this.$element - , o = this.options - - title = $e.attr('data-original-title') - || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title) - - return title - } - - , tip: function () { - return this.$tip = this.$tip || $(this.options.template) - } - - , arrow: function(){ - return this.$arrow = this.$arrow || this.tip().find(".tooltip-arrow") - } - - , validate: function () { - if (!this.$element[0].parentNode) { - this.hide() - this.$element = null - this.options = null - } - } - - , enable: function () { - this.enabled = true - } - - , disable: function () { - this.enabled = false - } - - , toggleEnabled: function () { - this.enabled = !this.enabled - } - - , toggle: function (e) { - var self = e ? $(e.currentTarget)[this.type](this._options).data(this.type) : this - self.tip().hasClass('in') ? self.hide() : self.show() - } - - , destroy: function () { - this.hide().$element.off('.' + this.type).removeData(this.type) - } - - } - - - /* TOOLTIP PLUGIN DEFINITION - * ========================= */ - - var old = $.fn.tooltip - - $.fn.tooltip = function ( option ) { - return this.each(function () { - var $this = $(this) - , data = $this.data('tooltip') - , options = typeof option == 'object' && option - if (!data) $this.data('tooltip', (data = new Tooltip(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.tooltip.Constructor = Tooltip - - $.fn.tooltip.defaults = { - animation: true - , placement: 'top' - , selector: false - , template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>' - , trigger: 'hover focus' - , title: '' - , delay: 0 - , html: false - , container: false - } - - - /* TOOLTIP NO CONFLICT - * =================== */ - - $.fn.tooltip.noConflict = function () { - $.fn.tooltip = old - return this - } - -}(window.jQuery); diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap-transition.js b/src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap-transition.js deleted file mode 100644 index 64f27577..00000000 --- a/src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap-transition.js +++ /dev/null @@ -1,60 +0,0 @@ -/* =================================================== - * bootstrap-transition.js v2.3.0 - * http://twitter.github.com/bootstrap/javascript.html#transitions - * =================================================== - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ========================================================== */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* CSS TRANSITION SUPPORT (http://www.modernizr.com/) - * ======================================================= */ - - $(function () { - - $.support.transition = (function () { - - var transitionEnd = (function () { - - var el = document.createElement('bootstrap') - , transEndEventNames = { - 'WebkitTransition' : 'webkitTransitionEnd' - , 'MozTransition' : 'transitionend' - , 'OTransition' : 'oTransitionEnd otransitionend' - , 'transition' : 'transitionend' - } - , name - - for (name in transEndEventNames){ - if (el.style[name] !== undefined) { - return transEndEventNames[name] - } - } - - }()) - - return transitionEnd && { - end: transitionEnd - } - - })() - - }) - -}(window.jQuery); \ No newline at end of file diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap-typeahead.js b/src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap-typeahead.js deleted file mode 100644 index 960f2af8..00000000 --- a/src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap-typeahead.js +++ /dev/null @@ -1,335 +0,0 @@ -/* ============================================================= - * bootstrap-typeahead.js v2.3.0 - * http://twitter.github.com/bootstrap/javascript.html#typeahead - * ============================================================= - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============================================================ */ - - -!function($){ - - "use strict"; // jshint ;_; - - - /* TYPEAHEAD PUBLIC CLASS DEFINITION - * ================================= */ - - var Typeahead = function (element, options) { - this.$element = $(element) - this.options = $.extend({}, $.fn.typeahead.defaults, options) - this.matcher = this.options.matcher || this.matcher - this.sorter = this.options.sorter || this.sorter - this.highlighter = this.options.highlighter || this.highlighter - this.updater = this.options.updater || this.updater - this.source = this.options.source - this.$menu = $(this.options.menu) - this.shown = false - this.listen() - } - - Typeahead.prototype = { - - constructor: Typeahead - - , select: function () { - var val = this.$menu.find('.active').attr('data-value') - this.$element - .val(this.updater(val)) - .change() - return this.hide() - } - - , updater: function (item) { - return item - } - - , show: function () { - var pos = $.extend({}, this.$element.position(), { - height: this.$element[0].offsetHeight - }) - - this.$menu - .insertAfter(this.$element) - .css({ - top: pos.top + pos.height - , left: pos.left - }) - .show() - - this.shown = true - return this - } - - , hide: function () { - this.$menu.hide() - this.shown = false - return this - } - - , lookup: function (event) { - var items - - this.query = this.$element.val() - - if (!this.query || this.query.length < this.options.minLength) { - return this.shown ? this.hide() : this - } - - items = $.isFunction(this.source) ? this.source(this.query, $.proxy(this.process, this)) : this.source - - return items ? this.process(items) : this - } - - , process: function (items) { - var that = this - - items = $.grep(items, function (item) { - return that.matcher(item) - }) - - items = this.sorter(items) - - if (!items.length) { - return this.shown ? this.hide() : this - } - - return this.render(items.slice(0, this.options.items)).show() - } - - , matcher: function (item) { - return ~item.toLowerCase().indexOf(this.query.toLowerCase()) - } - - , sorter: function (items) { - var beginswith = [] - , caseSensitive = [] - , caseInsensitive = [] - , item - - while (item = items.shift()) { - if (!item.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item) - else if (~item.indexOf(this.query)) caseSensitive.push(item) - else caseInsensitive.push(item) - } - - return beginswith.concat(caseSensitive, caseInsensitive) - } - - , highlighter: function (item) { - var query = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&') - return item.replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) { - return '<strong>' + match + '</strong>' - }) - } - - , render: function (items) { - var that = this - - items = $(items).map(function (i, item) { - i = $(that.options.item).attr('data-value', item) - i.find('a').html(that.highlighter(item)) - return i[0] - }) - - items.first().addClass('active') - this.$menu.html(items) - return this - } - - , next: function (event) { - var active = this.$menu.find('.active').removeClass('active') - , next = active.next() - - if (!next.length) { - next = $(this.$menu.find('li')[0]) - } - - next.addClass('active') - } - - , prev: function (event) { - var active = this.$menu.find('.active').removeClass('active') - , prev = active.prev() - - if (!prev.length) { - prev = this.$menu.find('li').last() - } - - prev.addClass('active') - } - - , listen: function () { - this.$element - .on('focus', $.proxy(this.focus, this)) - .on('blur', $.proxy(this.blur, this)) - .on('keypress', $.proxy(this.keypress, this)) - .on('keyup', $.proxy(this.keyup, this)) - - if (this.eventSupported('keydown')) { - this.$element.on('keydown', $.proxy(this.keydown, this)) - } - - this.$menu - .on('click', $.proxy(this.click, this)) - .on('mouseenter', 'li', $.proxy(this.mouseenter, this)) - .on('mouseleave', 'li', $.proxy(this.mouseleave, this)) - } - - , eventSupported: function(eventName) { - var isSupported = eventName in this.$element - if (!isSupported) { - this.$element.setAttribute(eventName, 'return;') - isSupported = typeof this.$element[eventName] === 'function' - } - return isSupported - } - - , move: function (e) { - if (!this.shown) return - - switch(e.keyCode) { - case 9: // tab - case 13: // enter - case 27: // escape - e.preventDefault() - break - - case 38: // up arrow - e.preventDefault() - this.prev() - break - - case 40: // down arrow - e.preventDefault() - this.next() - break - } - - e.stopPropagation() - } - - , keydown: function (e) { - this.suppressKeyPressRepeat = ~$.inArray(e.keyCode, [40,38,9,13,27]) - this.move(e) - } - - , keypress: function (e) { - if (this.suppressKeyPressRepeat) return - this.move(e) - } - - , keyup: function (e) { - switch(e.keyCode) { - case 40: // down arrow - case 38: // up arrow - case 16: // shift - case 17: // ctrl - case 18: // alt - break - - case 9: // tab - case 13: // enter - if (!this.shown) return - this.select() - break - - case 27: // escape - if (!this.shown) return - this.hide() - break - - default: - this.lookup() - } - - e.stopPropagation() - e.preventDefault() - } - - , focus: function (e) { - this.focused = true - } - - , blur: function (e) { - this.focused = false - if (!this.mousedover && this.shown) this.hide() - } - - , click: function (e) { - e.stopPropagation() - e.preventDefault() - this.select() - this.$element.focus() - } - - , mouseenter: function (e) { - this.mousedover = true - this.$menu.find('.active').removeClass('active') - $(e.currentTarget).addClass('active') - } - - , mouseleave: function (e) { - this.mousedover = false - if (!this.focused && this.shown) this.hide() - } - - } - - - /* TYPEAHEAD PLUGIN DEFINITION - * =========================== */ - - var old = $.fn.typeahead - - $.fn.typeahead = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('typeahead') - , options = typeof option == 'object' && option - if (!data) $this.data('typeahead', (data = new Typeahead(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.typeahead.defaults = { - source: [] - , items: 8 - , menu: '<ul class="typeahead dropdown-menu"></ul>' - , item: '<li><a href="#"></a></li>' - , minLength: 1 - } - - $.fn.typeahead.Constructor = Typeahead - - - /* TYPEAHEAD NO CONFLICT - * =================== */ - - $.fn.typeahead.noConflict = function () { - $.fn.typeahead = old - return this - } - - - /* TYPEAHEAD DATA-API - * ================== */ - - $(document).on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) { - var $this = $(this) - if ($this.data('typeahead')) return - $this.typeahead($this.data()) - }) - -}(window.jQuery); diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap.js b/src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap.js deleted file mode 100644 index a81171b4..00000000 --- a/src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap.js +++ /dev/null @@ -1,2268 +0,0 @@ -/* =================================================== - * bootstrap-transition.js v2.3.0 - * http://twitter.github.com/bootstrap/javascript.html#transitions - * =================================================== - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ========================================================== */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* CSS TRANSITION SUPPORT (http://www.modernizr.com/) - * ======================================================= */ - - $(function () { - - $.support.transition = (function () { - - var transitionEnd = (function () { - - var el = document.createElement('bootstrap') - , transEndEventNames = { - 'WebkitTransition' : 'webkitTransitionEnd' - , 'MozTransition' : 'transitionend' - , 'OTransition' : 'oTransitionEnd otransitionend' - , 'transition' : 'transitionend' - } - , name - - for (name in transEndEventNames){ - if (el.style[name] !== undefined) { - return transEndEventNames[name] - } - } - - }()) - - return transitionEnd && { - end: transitionEnd - } - - })() - - }) - -}(window.jQuery);/* ========================================================== - * bootstrap-alert.js v2.3.0 - * http://twitter.github.com/bootstrap/javascript.html#alerts - * ========================================================== - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ========================================================== */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* ALERT CLASS DEFINITION - * ====================== */ - - var dismiss = '[data-dismiss="alert"]' - , Alert = function (el) { - $(el).on('click', dismiss, this.close) - } - - Alert.prototype.close = function (e) { - var $this = $(this) - , selector = $this.attr('data-target') - , $parent - - if (!selector) { - selector = $this.attr('href') - selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 - } - - $parent = $(selector) - - e && e.preventDefault() - - $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent()) - - $parent.trigger(e = $.Event('close')) - - if (e.isDefaultPrevented()) return - - $parent.removeClass('in') - - function removeElement() { - $parent - .trigger('closed') - .remove() - } - - $.support.transition && $parent.hasClass('fade') ? - $parent.on($.support.transition.end, removeElement) : - removeElement() - } - - - /* ALERT PLUGIN DEFINITION - * ======================= */ - - var old = $.fn.alert - - $.fn.alert = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('alert') - if (!data) $this.data('alert', (data = new Alert(this))) - if (typeof option == 'string') data[option].call($this) - }) - } - - $.fn.alert.Constructor = Alert - - - /* ALERT NO CONFLICT - * ================= */ - - $.fn.alert.noConflict = function () { - $.fn.alert = old - return this - } - - - /* ALERT DATA-API - * ============== */ - - $(document).on('click.alert.data-api', dismiss, Alert.prototype.close) - -}(window.jQuery);/* ============================================================ - * bootstrap-button.js v2.3.0 - * http://twitter.github.com/bootstrap/javascript.html#buttons - * ============================================================ - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============================================================ */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* BUTTON PUBLIC CLASS DEFINITION - * ============================== */ - - var Button = function (element, options) { - this.$element = $(element) - this.options = $.extend({}, $.fn.button.defaults, options) - } - - Button.prototype.setState = function (state) { - var d = 'disabled' - , $el = this.$element - , data = $el.data() - , val = $el.is('input') ? 'val' : 'html' - - state = state + 'Text' - data.resetText || $el.data('resetText', $el[val]()) - - $el[val](data[state] || this.options[state]) - - // push to event loop to allow forms to submit - setTimeout(function () { - state == 'loadingText' ? - $el.addClass(d).attr(d, d) : - $el.removeClass(d).removeAttr(d) - }, 0) - } - - Button.prototype.toggle = function () { - var $parent = this.$element.closest('[data-toggle="buttons-radio"]') - - $parent && $parent - .find('.active') - .removeClass('active') - - this.$element.toggleClass('active') - } - - - /* BUTTON PLUGIN DEFINITION - * ======================== */ - - var old = $.fn.button - - $.fn.button = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('button') - , options = typeof option == 'object' && option - if (!data) $this.data('button', (data = new Button(this, options))) - if (option == 'toggle') data.toggle() - else if (option) data.setState(option) - }) - } - - $.fn.button.defaults = { - loadingText: 'loading...' - } - - $.fn.button.Constructor = Button - - - /* BUTTON NO CONFLICT - * ================== */ - - $.fn.button.noConflict = function () { - $.fn.button = old - return this - } - - - /* BUTTON DATA-API - * =============== */ - - $(document).on('click.button.data-api', '[data-toggle^=button]', function (e) { - var $btn = $(e.target) - if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') - $btn.button('toggle') - }) - -}(window.jQuery);/* ========================================================== - * bootstrap-carousel.js v2.3.0 - * http://twitter.github.com/bootstrap/javascript.html#carousel - * ========================================================== - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ========================================================== */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* CAROUSEL CLASS DEFINITION - * ========================= */ - - var Carousel = function (element, options) { - this.$element = $(element) - this.$indicators = this.$element.find('.carousel-indicators') - this.options = options - this.options.pause == 'hover' && this.$element - .on('mouseenter', $.proxy(this.pause, this)) - .on('mouseleave', $.proxy(this.cycle, this)) - } - - Carousel.prototype = { - - cycle: function (e) { - if (!e) this.paused = false - if (this.interval) clearInterval(this.interval); - this.options.interval - && !this.paused - && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) - return this - } - - , getActiveIndex: function () { - this.$active = this.$element.find('.item.active') - this.$items = this.$active.parent().children() - return this.$items.index(this.$active) - } - - , to: function (pos) { - var activeIndex = this.getActiveIndex() - , that = this - - if (pos > (this.$items.length - 1) || pos < 0) return - - if (this.sliding) { - return this.$element.one('slid', function () { - that.to(pos) - }) - } - - if (activeIndex == pos) { - return this.pause().cycle() - } - - return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) - } - - , pause: function (e) { - if (!e) this.paused = true - if (this.$element.find('.next, .prev').length && $.support.transition.end) { - this.$element.trigger($.support.transition.end) - this.cycle() - } - clearInterval(this.interval) - this.interval = null - return this - } - - , next: function () { - if (this.sliding) return - return this.slide('next') - } - - , prev: function () { - if (this.sliding) return - return this.slide('prev') - } - - , slide: function (type, next) { - var $active = this.$element.find('.item.active') - , $next = next || $active[type]() - , isCycling = this.interval - , direction = type == 'next' ? 'left' : 'right' - , fallback = type == 'next' ? 'first' : 'last' - , that = this - , e - - this.sliding = true - - isCycling && this.pause() - - $next = $next.length ? $next : this.$element.find('.item')[fallback]() - - e = $.Event('slide', { - relatedTarget: $next[0] - , direction: direction - }) - - if ($next.hasClass('active')) return - - if (this.$indicators.length) { - this.$indicators.find('.active').removeClass('active') - this.$element.one('slid', function () { - var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()]) - $nextIndicator && $nextIndicator.addClass('active') - }) - } - - if ($.support.transition && this.$element.hasClass('slide')) { - this.$element.trigger(e) - if (e.isDefaultPrevented()) return - $next.addClass(type) - $next[0].offsetWidth // force reflow - $active.addClass(direction) - $next.addClass(direction) - this.$element.one($.support.transition.end, function () { - $next.removeClass([type, direction].join(' ')).addClass('active') - $active.removeClass(['active', direction].join(' ')) - that.sliding = false - setTimeout(function () { that.$element.trigger('slid') }, 0) - }) - } else { - this.$element.trigger(e) - if (e.isDefaultPrevented()) return - $active.removeClass('active') - $next.addClass('active') - this.sliding = false - this.$element.trigger('slid') - } - - isCycling && this.cycle() - - return this - } - - } - - - /* CAROUSEL PLUGIN DEFINITION - * ========================== */ - - var old = $.fn.carousel - - $.fn.carousel = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('carousel') - , options = $.extend({}, $.fn.carousel.defaults, typeof option == 'object' && option) - , action = typeof option == 'string' ? option : options.slide - if (!data) $this.data('carousel', (data = new Carousel(this, options))) - if (typeof option == 'number') data.to(option) - else if (action) data[action]() - else if (options.interval) data.pause().cycle() - }) - } - - $.fn.carousel.defaults = { - interval: 5000 - , pause: 'hover' - } - - $.fn.carousel.Constructor = Carousel - - - /* CAROUSEL NO CONFLICT - * ==================== */ - - $.fn.carousel.noConflict = function () { - $.fn.carousel = old - return this - } - - /* CAROUSEL DATA-API - * ================= */ - - $(document).on('click.carousel.data-api', '[data-slide], [data-slide-to]', function (e) { - var $this = $(this), href - , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 - , options = $.extend({}, $target.data(), $this.data()) - , slideIndex - - $target.carousel(options) - - if (slideIndex = $this.attr('data-slide-to')) { - $target.data('carousel').pause().to(slideIndex).cycle() - } - - e.preventDefault() - }) - -}(window.jQuery);/* ============================================================= - * bootstrap-collapse.js v2.3.0 - * http://twitter.github.com/bootstrap/javascript.html#collapse - * ============================================================= - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============================================================ */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* COLLAPSE PUBLIC CLASS DEFINITION - * ================================ */ - - var Collapse = function (element, options) { - this.$element = $(element) - this.options = $.extend({}, $.fn.collapse.defaults, options) - - if (this.options.parent) { - this.$parent = $(this.options.parent) - } - - this.options.toggle && this.toggle() - } - - Collapse.prototype = { - - constructor: Collapse - - , dimension: function () { - var hasWidth = this.$element.hasClass('width') - return hasWidth ? 'width' : 'height' - } - - , show: function () { - var dimension - , scroll - , actives - , hasData - - if (this.transitioning || this.$element.hasClass('in')) return - - dimension = this.dimension() - scroll = $.camelCase(['scroll', dimension].join('-')) - actives = this.$parent && this.$parent.find('> .accordion-group > .in') - - if (actives && actives.length) { - hasData = actives.data('collapse') - if (hasData && hasData.transitioning) return - actives.collapse('hide') - hasData || actives.data('collapse', null) - } - - this.$element[dimension](0) - this.transition('addClass', $.Event('show'), 'shown') - $.support.transition && this.$element[dimension](this.$element[0][scroll]) - } - - , hide: function () { - var dimension - if (this.transitioning || !this.$element.hasClass('in')) return - dimension = this.dimension() - this.reset(this.$element[dimension]()) - this.transition('removeClass', $.Event('hide'), 'hidden') - this.$element[dimension](0) - } - - , reset: function (size) { - var dimension = this.dimension() - - this.$element - .removeClass('collapse') - [dimension](size || 'auto') - [0].offsetWidth - - this.$element[size !== null ? 'addClass' : 'removeClass']('collapse') - - return this - } - - , transition: function (method, startEvent, completeEvent) { - var that = this - , complete = function () { - if (startEvent.type == 'show') that.reset() - that.transitioning = 0 - that.$element.trigger(completeEvent) - } - - this.$element.trigger(startEvent) - - if (startEvent.isDefaultPrevented()) return - - this.transitioning = 1 - - this.$element[method]('in') - - $.support.transition && this.$element.hasClass('collapse') ? - this.$element.one($.support.transition.end, complete) : - complete() - } - - , toggle: function () { - this[this.$element.hasClass('in') ? 'hide' : 'show']() - } - - } - - - /* COLLAPSE PLUGIN DEFINITION - * ========================== */ - - var old = $.fn.collapse - - $.fn.collapse = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('collapse') - , options = $.extend({}, $.fn.collapse.defaults, $this.data(), typeof option == 'object' && option) - if (!data) $this.data('collapse', (data = new Collapse(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.collapse.defaults = { - toggle: true - } - - $.fn.collapse.Constructor = Collapse - - - /* COLLAPSE NO CONFLICT - * ==================== */ - - $.fn.collapse.noConflict = function () { - $.fn.collapse = old - return this - } - - - /* COLLAPSE DATA-API - * ================= */ - - $(document).on('click.collapse.data-api', '[data-toggle=collapse]', function (e) { - var $this = $(this), href - , target = $this.attr('data-target') - || e.preventDefault() - || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 - , option = $(target).data('collapse') ? 'toggle' : $this.data() - $this[$(target).hasClass('in') ? 'addClass' : 'removeClass']('collapsed') - $(target).collapse(option) - }) - -}(window.jQuery);/* ============================================================ - * bootstrap-dropdown.js v2.3.0 - * http://twitter.github.com/bootstrap/javascript.html#dropdowns - * ============================================================ - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============================================================ */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* DROPDOWN CLASS DEFINITION - * ========================= */ - - var toggle = '[data-toggle=dropdown]' - , Dropdown = function (element) { - var $el = $(element).on('click.dropdown.data-api', this.toggle) - $('html').on('click.dropdown.data-api', function () { - $el.parent().removeClass('open') - }) - } - - Dropdown.prototype = { - - constructor: Dropdown - - , toggle: function (e) { - var $this = $(this) - , $parent - , isActive - - if ($this.is('.disabled, :disabled')) return - - $parent = getParent($this) - - isActive = $parent.hasClass('open') - - clearMenus() - - if (!isActive) { - $parent.toggleClass('open') - } - - $this.focus() - - return false - } - - , keydown: function (e) { - var $this - , $items - , $active - , $parent - , isActive - , index - - if (!/(38|40|27)/.test(e.keyCode)) return - - $this = $(this) - - e.preventDefault() - e.stopPropagation() - - if ($this.is('.disabled, :disabled')) return - - $parent = getParent($this) - - isActive = $parent.hasClass('open') - - if (!isActive || (isActive && e.keyCode == 27)) { - if (e.which == 27) $parent.find(toggle).focus() - return $this.click() - } - - $items = $('[role=menu] li:not(.divider):visible a', $parent) - - if (!$items.length) return - - index = $items.index($items.filter(':focus')) - - if (e.keyCode == 38 && index > 0) index-- // up - if (e.keyCode == 40 && index < $items.length - 1) index++ // down - if (!~index) index = 0 - - $items - .eq(index) - .focus() - } - - } - - function clearMenus() { - $(toggle).each(function () { - getParent($(this)).removeClass('open') - }) - } - - function getParent($this) { - var selector = $this.attr('data-target') - , $parent - - if (!selector) { - selector = $this.attr('href') - selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 - } - - $parent = selector && $(selector) - - if (!$parent || !$parent.length) $parent = $this.parent() - - return $parent - } - - - /* DROPDOWN PLUGIN DEFINITION - * ========================== */ - - var old = $.fn.dropdown - - $.fn.dropdown = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('dropdown') - if (!data) $this.data('dropdown', (data = new Dropdown(this))) - if (typeof option == 'string') data[option].call($this) - }) - } - - $.fn.dropdown.Constructor = Dropdown - - - /* DROPDOWN NO CONFLICT - * ==================== */ - - $.fn.dropdown.noConflict = function () { - $.fn.dropdown = old - return this - } - - - /* APPLY TO STANDARD DROPDOWN ELEMENTS - * =================================== */ - - $(document) - .on('click.dropdown.data-api', clearMenus) - .on('click.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() }) - .on('.dropdown-menu', function (e) { e.stopPropagation() }) - .on('click.dropdown.data-api' , toggle, Dropdown.prototype.toggle) - .on('keydown.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown) - -}(window.jQuery); -/* ========================================================= - * bootstrap-modal.js v2.3.0 - * http://twitter.github.com/bootstrap/javascript.html#modals - * ========================================================= - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ========================================================= */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* MODAL CLASS DEFINITION - * ====================== */ - - var Modal = function (element, options) { - this.options = options - this.$element = $(element) - .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this)) - this.options.remote && this.$element.find('.modal-body').load(this.options.remote) - } - - Modal.prototype = { - - constructor: Modal - - , toggle: function () { - return this[!this.isShown ? 'show' : 'hide']() - } - - , show: function () { - var that = this - , e = $.Event('show') - - this.$element.trigger(e) - - if (this.isShown || e.isDefaultPrevented()) return - - this.isShown = true - - this.escape() - - this.backdrop(function () { - var transition = $.support.transition && that.$element.hasClass('fade') - - if (!that.$element.parent().length) { - that.$element.appendTo(document.body) //don't move modals dom position - } - - that.$element.show() - - if (transition) { - that.$element[0].offsetWidth // force reflow - } - - that.$element - .addClass('in') - .attr('aria-hidden', false) - - that.enforceFocus() - - transition ? - that.$element.one($.support.transition.end, function () { that.$element.focus().trigger('shown') }) : - that.$element.focus().trigger('shown') - - }) - } - - , hide: function (e) { - e && e.preventDefault() - - var that = this - - e = $.Event('hide') - - this.$element.trigger(e) - - if (!this.isShown || e.isDefaultPrevented()) return - - this.isShown = false - - this.escape() - - $(document).off('focusin.modal') - - this.$element - .removeClass('in') - .attr('aria-hidden', true) - - $.support.transition && this.$element.hasClass('fade') ? - this.hideWithTransition() : - this.hideModal() - } - - , enforceFocus: function () { - var that = this - $(document).on('focusin.modal', function (e) { - if (that.$element[0] !== e.target && !that.$element.has(e.target).length) { - that.$element.focus() - } - }) - } - - , escape: function () { - var that = this - if (this.isShown && this.options.keyboard) { - this.$element.on('keyup.dismiss.modal', function ( e ) { - e.which == 27 && that.hide() - }) - } else if (!this.isShown) { - this.$element.off('keyup.dismiss.modal') - } - } - - , hideWithTransition: function () { - var that = this - , timeout = setTimeout(function () { - that.$element.off($.support.transition.end) - that.hideModal() - }, 500) - - this.$element.one($.support.transition.end, function () { - clearTimeout(timeout) - that.hideModal() - }) - } - - , hideModal: function () { - var that = this - this.$element.hide() - this.backdrop(function () { - that.removeBackdrop() - that.$element.trigger('hidden') - }) - } - - , removeBackdrop: function () { - this.$backdrop.remove() - this.$backdrop = null - } - - , backdrop: function (callback) { - var that = this - , animate = this.$element.hasClass('fade') ? 'fade' : '' - - if (this.isShown && this.options.backdrop) { - var doAnimate = $.support.transition && animate - - this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />') - .appendTo(document.body) - - this.$backdrop.click( - this.options.backdrop == 'static' ? - $.proxy(this.$element[0].focus, this.$element[0]) - : $.proxy(this.hide, this) - ) - - if (doAnimate) this.$backdrop[0].offsetWidth // force reflow - - this.$backdrop.addClass('in') - - if (!callback) return - - doAnimate ? - this.$backdrop.one($.support.transition.end, callback) : - callback() - - } else if (!this.isShown && this.$backdrop) { - this.$backdrop.removeClass('in') - - $.support.transition && this.$element.hasClass('fade')? - this.$backdrop.one($.support.transition.end, callback) : - callback() - - } else if (callback) { - callback() - } - } - } - - - /* MODAL PLUGIN DEFINITION - * ======================= */ - - var old = $.fn.modal - - $.fn.modal = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('modal') - , options = $.extend({}, $.fn.modal.defaults, $this.data(), typeof option == 'object' && option) - if (!data) $this.data('modal', (data = new Modal(this, options))) - if (typeof option == 'string') data[option]() - else if (options.show) data.show() - }) - } - - $.fn.modal.defaults = { - backdrop: true - , keyboard: true - , show: true - } - - $.fn.modal.Constructor = Modal - - - /* MODAL NO CONFLICT - * ================= */ - - $.fn.modal.noConflict = function () { - $.fn.modal = old - return this - } - - - /* MODAL DATA-API - * ============== */ - - $(document).on('click.modal.data-api', '[data-toggle="modal"]', function (e) { - var $this = $(this) - , href = $this.attr('href') - , $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) //strip for ie7 - , option = $target.data('modal') ? 'toggle' : $.extend({ remote:!/#/.test(href) && href }, $target.data(), $this.data()) - - e.preventDefault() - - $target - .modal(option) - .one('hide', function () { - $this.focus() - }) - }) - -}(window.jQuery); -/* =========================================================== - * bootstrap-tooltip.js v2.3.0 - * http://twitter.github.com/bootstrap/javascript.html#tooltips - * Inspired by the original jQuery.tipsy by Jason Frame - * =========================================================== - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ========================================================== */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* TOOLTIP PUBLIC CLASS DEFINITION - * =============================== */ - - var Tooltip = function (element, options) { - this.init('tooltip', element, options) - } - - Tooltip.prototype = { - - constructor: Tooltip - - , init: function (type, element, options) { - var eventIn - , eventOut - , triggers - , trigger - , i - - this.type = type - this.$element = $(element) - this.options = this.getOptions(options) - this.enabled = true - - triggers = this.options.trigger.split(' ') - - for (i = triggers.length; i--;) { - trigger = triggers[i] - if (trigger == 'click') { - this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this)) - } else if (trigger != 'manual') { - eventIn = trigger == 'hover' ? 'mouseenter' : 'focus' - eventOut = trigger == 'hover' ? 'mouseleave' : 'blur' - this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this)) - this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this)) - } - } - - this.options.selector ? - (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) : - this.fixTitle() - } - - , getOptions: function (options) { - options = $.extend({}, $.fn[this.type].defaults, this.$element.data(), options) - - if (options.delay && typeof options.delay == 'number') { - options.delay = { - show: options.delay - , hide: options.delay - } - } - - return options - } - - , enter: function (e) { - var self = $(e.currentTarget)[this.type](this._options).data(this.type) - - if (!self.options.delay || !self.options.delay.show) return self.show() - - clearTimeout(this.timeout) - self.hoverState = 'in' - this.timeout = setTimeout(function() { - if (self.hoverState == 'in') self.show() - }, self.options.delay.show) - } - - , leave: function (e) { - var self = $(e.currentTarget)[this.type](this._options).data(this.type) - - if (this.timeout) clearTimeout(this.timeout) - if (!self.options.delay || !self.options.delay.hide) return self.hide() - - self.hoverState = 'out' - this.timeout = setTimeout(function() { - if (self.hoverState == 'out') self.hide() - }, self.options.delay.hide) - } - - , show: function () { - var $tip - , pos - , actualWidth - , actualHeight - , placement - , tp - , e = $.Event('show') - - if (this.hasContent() && this.enabled) { - this.$element.trigger(e) - if (e.isDefaultPrevented()) return - $tip = this.tip() - this.setContent() - - if (this.options.animation) { - $tip.addClass('fade') - } - - placement = typeof this.options.placement == 'function' ? - this.options.placement.call(this, $tip[0], this.$element[0]) : - this.options.placement - - $tip - .detach() - .css({ top: 0, left: 0, display: 'block' }) - - this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element) - - pos = this.getPosition() - - actualWidth = $tip[0].offsetWidth - actualHeight = $tip[0].offsetHeight - - switch (placement) { - case 'bottom': - tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2} - break - case 'top': - tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2} - break - case 'left': - tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth} - break - case 'right': - tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width} - break - } - - this.applyPlacement(tp, placement) - this.$element.trigger('shown') - } - } - - , applyPlacement: function(offset, placement){ - var $tip = this.tip() - , width = $tip[0].offsetWidth - , height = $tip[0].offsetHeight - , actualWidth - , actualHeight - , delta - , replace - - $tip - .offset(offset) - .addClass(placement) - .addClass('in') - - actualWidth = $tip[0].offsetWidth - actualHeight = $tip[0].offsetHeight - - if (placement == 'top' && actualHeight != height) { - offset.top = offset.top + height - actualHeight - replace = true - } - - if (placement == 'bottom' || placement == 'top') { - delta = 0 - - if (offset.left < 0){ - delta = offset.left * -2 - offset.left = 0 - $tip.offset(offset) - actualWidth = $tip[0].offsetWidth - actualHeight = $tip[0].offsetHeight - } - - this.replaceArrow(delta - width + actualWidth, actualWidth, 'left') - } else { - this.replaceArrow(actualHeight - height, actualHeight, 'top') - } - - if (replace) $tip.offset(offset) - } - - , replaceArrow: function(delta, dimension, position){ - this - .arrow() - .css(position, delta ? (50 * (1 - delta / dimension) + "%") : '') - } - - , setContent: function () { - var $tip = this.tip() - , title = this.getTitle() - - $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title) - $tip.removeClass('fade in top bottom left right') - } - - , hide: function () { - var that = this - , $tip = this.tip() - , e = $.Event('hide') - - this.$element.trigger(e) - if (e.isDefaultPrevented()) return - - $tip.removeClass('in') - - function removeWithAnimation() { - var timeout = setTimeout(function () { - $tip.off($.support.transition.end).detach() - }, 500) - - $tip.one($.support.transition.end, function () { - clearTimeout(timeout) - $tip.detach() - }) - } - - $.support.transition && this.$tip.hasClass('fade') ? - removeWithAnimation() : - $tip.detach() - - this.$element.trigger('hidden') - - return this - } - - , fixTitle: function () { - var $e = this.$element - if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') { - $e.attr('data-original-title', $e.attr('title') || '').attr('title', '') - } - } - - , hasContent: function () { - return this.getTitle() - } - - , getPosition: function () { - var el = this.$element[0] - return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : { - width: el.offsetWidth - , height: el.offsetHeight - }, this.$element.offset()) - } - - , getTitle: function () { - var title - , $e = this.$element - , o = this.options - - title = $e.attr('data-original-title') - || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title) - - return title - } - - , tip: function () { - return this.$tip = this.$tip || $(this.options.template) - } - - , arrow: function(){ - return this.$arrow = this.$arrow || this.tip().find(".tooltip-arrow") - } - - , validate: function () { - if (!this.$element[0].parentNode) { - this.hide() - this.$element = null - this.options = null - } - } - - , enable: function () { - this.enabled = true - } - - , disable: function () { - this.enabled = false - } - - , toggleEnabled: function () { - this.enabled = !this.enabled - } - - , toggle: function (e) { - var self = e ? $(e.currentTarget)[this.type](this._options).data(this.type) : this - self.tip().hasClass('in') ? self.hide() : self.show() - } - - , destroy: function () { - this.hide().$element.off('.' + this.type).removeData(this.type) - } - - } - - - /* TOOLTIP PLUGIN DEFINITION - * ========================= */ - - var old = $.fn.tooltip - - $.fn.tooltip = function ( option ) { - return this.each(function () { - var $this = $(this) - , data = $this.data('tooltip') - , options = typeof option == 'object' && option - if (!data) $this.data('tooltip', (data = new Tooltip(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.tooltip.Constructor = Tooltip - - $.fn.tooltip.defaults = { - animation: true - , placement: 'top' - , selector: false - , template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>' - , trigger: 'hover focus' - , title: '' - , delay: 0 - , html: false - , container: false - } - - - /* TOOLTIP NO CONFLICT - * =================== */ - - $.fn.tooltip.noConflict = function () { - $.fn.tooltip = old - return this - } - -}(window.jQuery); -/* =========================================================== - * bootstrap-popover.js v2.3.0 - * http://twitter.github.com/bootstrap/javascript.html#popovers - * =========================================================== - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * =========================================================== */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* POPOVER PUBLIC CLASS DEFINITION - * =============================== */ - - var Popover = function (element, options) { - this.init('popover', element, options) - } - - - /* NOTE: POPOVER EXTENDS BOOTSTRAP-TOOLTIP.js - ========================================== */ - - Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, { - - constructor: Popover - - , setContent: function () { - var $tip = this.tip() - , title = this.getTitle() - , content = this.getContent() - - $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title) - $tip.find('.popover-content')[this.options.html ? 'html' : 'text'](content) - - $tip.removeClass('fade top bottom left right in') - } - - , hasContent: function () { - return this.getTitle() || this.getContent() - } - - , getContent: function () { - var content - , $e = this.$element - , o = this.options - - content = (typeof o.content == 'function' ? o.content.call($e[0]) : o.content) - || $e.attr('data-content') - - return content - } - - , tip: function () { - if (!this.$tip) { - this.$tip = $(this.options.template) - } - return this.$tip - } - - , destroy: function () { - this.hide().$element.off('.' + this.type).removeData(this.type) - } - - }) - - - /* POPOVER PLUGIN DEFINITION - * ======================= */ - - var old = $.fn.popover - - $.fn.popover = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('popover') - , options = typeof option == 'object' && option - if (!data) $this.data('popover', (data = new Popover(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.popover.Constructor = Popover - - $.fn.popover.defaults = $.extend({} , $.fn.tooltip.defaults, { - placement: 'right' - , trigger: 'click' - , content: '' - , template: '<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>' - }) - - - /* POPOVER NO CONFLICT - * =================== */ - - $.fn.popover.noConflict = function () { - $.fn.popover = old - return this - } - -}(window.jQuery); -/* ============================================================= - * bootstrap-scrollspy.js v2.3.0 - * http://twitter.github.com/bootstrap/javascript.html#scrollspy - * ============================================================= - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============================================================== */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* SCROLLSPY CLASS DEFINITION - * ========================== */ - - function ScrollSpy(element, options) { - var process = $.proxy(this.process, this) - , $element = $(element).is('body') ? $(window) : $(element) - , href - this.options = $.extend({}, $.fn.scrollspy.defaults, options) - this.$scrollElement = $element.on('scroll.scroll-spy.data-api', process) - this.selector = (this.options.target - || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 - || '') + ' .nav li > a' - this.$body = $('body') - this.refresh() - this.process() - } - - ScrollSpy.prototype = { - - constructor: ScrollSpy - - , refresh: function () { - var self = this - , $targets - - this.offsets = $([]) - this.targets = $([]) - - $targets = this.$body - .find(this.selector) - .map(function () { - var $el = $(this) - , href = $el.data('target') || $el.attr('href') - , $href = /^#\w/.test(href) && $(href) - return ( $href - && $href.length - && [[ $href.position().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]] ) || null - }) - .sort(function (a, b) { return a[0] - b[0] }) - .each(function () { - self.offsets.push(this[0]) - self.targets.push(this[1]) - }) - } - - , process: function () { - var scrollTop = this.$scrollElement.scrollTop() + this.options.offset - , scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight - , maxScroll = scrollHeight - this.$scrollElement.height() - , offsets = this.offsets - , targets = this.targets - , activeTarget = this.activeTarget - , i - - if (scrollTop >= maxScroll) { - return activeTarget != (i = targets.last()[0]) - && this.activate ( i ) - } - - for (i = offsets.length; i--;) { - activeTarget != targets[i] - && scrollTop >= offsets[i] - && (!offsets[i + 1] || scrollTop <= offsets[i + 1]) - && this.activate( targets[i] ) - } - } - - , activate: function (target) { - var active - , selector - - this.activeTarget = target - - $(this.selector) - .parent('.active') - .removeClass('active') - - selector = this.selector - + '[data-target="' + target + '"],' - + this.selector + '[href="' + target + '"]' - - active = $(selector) - .parent('li') - .addClass('active') - - if (active.parent('.dropdown-menu').length) { - active = active.closest('li.dropdown').addClass('active') - } - - active.trigger('activate') - } - - } - - - /* SCROLLSPY PLUGIN DEFINITION - * =========================== */ - - var old = $.fn.scrollspy - - $.fn.scrollspy = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('scrollspy') - , options = typeof option == 'object' && option - if (!data) $this.data('scrollspy', (data = new ScrollSpy(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.scrollspy.Constructor = ScrollSpy - - $.fn.scrollspy.defaults = { - offset: 10 - } - - - /* SCROLLSPY NO CONFLICT - * ===================== */ - - $.fn.scrollspy.noConflict = function () { - $.fn.scrollspy = old - return this - } - - - /* SCROLLSPY DATA-API - * ================== */ - - $(window).on('load', function () { - $('[data-spy="scroll"]').each(function () { - var $spy = $(this) - $spy.scrollspy($spy.data()) - }) - }) - -}(window.jQuery);/* ======================================================== - * bootstrap-tab.js v2.3.0 - * http://twitter.github.com/bootstrap/javascript.html#tabs - * ======================================================== - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ======================================================== */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* TAB CLASS DEFINITION - * ==================== */ - - var Tab = function (element) { - this.element = $(element) - } - - Tab.prototype = { - - constructor: Tab - - , show: function () { - var $this = this.element - , $ul = $this.closest('ul:not(.dropdown-menu)') - , selector = $this.attr('data-target') - , previous - , $target - , e - - if (!selector) { - selector = $this.attr('href') - selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 - } - - if ( $this.parent('li').hasClass('active') ) return - - previous = $ul.find('.active:last a')[0] - - e = $.Event('show', { - relatedTarget: previous - }) - - $this.trigger(e) - - if (e.isDefaultPrevented()) return - - $target = $(selector) - - this.activate($this.parent('li'), $ul) - this.activate($target, $target.parent(), function () { - $this.trigger({ - type: 'shown' - , relatedTarget: previous - }) - }) - } - - , activate: function ( element, container, callback) { - var $active = container.find('> .active') - , transition = callback - && $.support.transition - && $active.hasClass('fade') - - function next() { - $active - .removeClass('active') - .find('> .dropdown-menu > .active') - .removeClass('active') - - element.addClass('active') - - if (transition) { - element[0].offsetWidth // reflow for transition - element.addClass('in') - } else { - element.removeClass('fade') - } - - if ( element.parent('.dropdown-menu') ) { - element.closest('li.dropdown').addClass('active') - } - - callback && callback() - } - - transition ? - $active.one($.support.transition.end, next) : - next() - - $active.removeClass('in') - } - } - - - /* TAB PLUGIN DEFINITION - * ===================== */ - - var old = $.fn.tab - - $.fn.tab = function ( option ) { - return this.each(function () { - var $this = $(this) - , data = $this.data('tab') - if (!data) $this.data('tab', (data = new Tab(this))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.tab.Constructor = Tab - - - /* TAB NO CONFLICT - * =============== */ - - $.fn.tab.noConflict = function () { - $.fn.tab = old - return this - } - - - /* TAB DATA-API - * ============ */ - - $(document).on('click.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) { - e.preventDefault() - $(this).tab('show') - }) - -}(window.jQuery);/* ============================================================= - * bootstrap-typeahead.js v2.3.0 - * http://twitter.github.com/bootstrap/javascript.html#typeahead - * ============================================================= - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============================================================ */ - - -!function($){ - - "use strict"; // jshint ;_; - - - /* TYPEAHEAD PUBLIC CLASS DEFINITION - * ================================= */ - - var Typeahead = function (element, options) { - this.$element = $(element) - this.options = $.extend({}, $.fn.typeahead.defaults, options) - this.matcher = this.options.matcher || this.matcher - this.sorter = this.options.sorter || this.sorter - this.highlighter = this.options.highlighter || this.highlighter - this.updater = this.options.updater || this.updater - this.source = this.options.source - this.$menu = $(this.options.menu) - this.shown = false - this.listen() - } - - Typeahead.prototype = { - - constructor: Typeahead - - , select: function () { - var val = this.$menu.find('.active').attr('data-value') - this.$element - .val(this.updater(val)) - .change() - return this.hide() - } - - , updater: function (item) { - return item - } - - , show: function () { - var pos = $.extend({}, this.$element.position(), { - height: this.$element[0].offsetHeight - }) - - this.$menu - .insertAfter(this.$element) - .css({ - top: pos.top + pos.height - , left: pos.left - }) - .show() - - this.shown = true - return this - } - - , hide: function () { - this.$menu.hide() - this.shown = false - return this - } - - , lookup: function (event) { - var items - - this.query = this.$element.val() - - if (!this.query || this.query.length < this.options.minLength) { - return this.shown ? this.hide() : this - } - - items = $.isFunction(this.source) ? this.source(this.query, $.proxy(this.process, this)) : this.source - - return items ? this.process(items) : this - } - - , process: function (items) { - var that = this - - items = $.grep(items, function (item) { - return that.matcher(item) - }) - - items = this.sorter(items) - - if (!items.length) { - return this.shown ? this.hide() : this - } - - return this.render(items.slice(0, this.options.items)).show() - } - - , matcher: function (item) { - return ~item.toLowerCase().indexOf(this.query.toLowerCase()) - } - - , sorter: function (items) { - var beginswith = [] - , caseSensitive = [] - , caseInsensitive = [] - , item - - while (item = items.shift()) { - if (!item.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item) - else if (~item.indexOf(this.query)) caseSensitive.push(item) - else caseInsensitive.push(item) - } - - return beginswith.concat(caseSensitive, caseInsensitive) - } - - , highlighter: function (item) { - var query = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&') - return item.replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) { - return '<strong>' + match + '</strong>' - }) - } - - , render: function (items) { - var that = this - - items = $(items).map(function (i, item) { - i = $(that.options.item).attr('data-value', item) - i.find('a').html(that.highlighter(item)) - return i[0] - }) - - items.first().addClass('active') - this.$menu.html(items) - return this - } - - , next: function (event) { - var active = this.$menu.find('.active').removeClass('active') - , next = active.next() - - if (!next.length) { - next = $(this.$menu.find('li')[0]) - } - - next.addClass('active') - } - - , prev: function (event) { - var active = this.$menu.find('.active').removeClass('active') - , prev = active.prev() - - if (!prev.length) { - prev = this.$menu.find('li').last() - } - - prev.addClass('active') - } - - , listen: function () { - this.$element - .on('focus', $.proxy(this.focus, this)) - .on('blur', $.proxy(this.blur, this)) - .on('keypress', $.proxy(this.keypress, this)) - .on('keyup', $.proxy(this.keyup, this)) - - if (this.eventSupported('keydown')) { - this.$element.on('keydown', $.proxy(this.keydown, this)) - } - - this.$menu - .on('click', $.proxy(this.click, this)) - .on('mouseenter', 'li', $.proxy(this.mouseenter, this)) - .on('mouseleave', 'li', $.proxy(this.mouseleave, this)) - } - - , eventSupported: function(eventName) { - var isSupported = eventName in this.$element - if (!isSupported) { - this.$element.setAttribute(eventName, 'return;') - isSupported = typeof this.$element[eventName] === 'function' - } - return isSupported - } - - , move: function (e) { - if (!this.shown) return - - switch(e.keyCode) { - case 9: // tab - case 13: // enter - case 27: // escape - e.preventDefault() - break - - case 38: // up arrow - e.preventDefault() - this.prev() - break - - case 40: // down arrow - e.preventDefault() - this.next() - break - } - - e.stopPropagation() - } - - , keydown: function (e) { - this.suppressKeyPressRepeat = ~$.inArray(e.keyCode, [40,38,9,13,27]) - this.move(e) - } - - , keypress: function (e) { - if (this.suppressKeyPressRepeat) return - this.move(e) - } - - , keyup: function (e) { - switch(e.keyCode) { - case 40: // down arrow - case 38: // up arrow - case 16: // shift - case 17: // ctrl - case 18: // alt - break - - case 9: // tab - case 13: // enter - if (!this.shown) return - this.select() - break - - case 27: // escape - if (!this.shown) return - this.hide() - break - - default: - this.lookup() - } - - e.stopPropagation() - e.preventDefault() - } - - , focus: function (e) { - this.focused = true - } - - , blur: function (e) { - this.focused = false - if (!this.mousedover && this.shown) this.hide() - } - - , click: function (e) { - e.stopPropagation() - e.preventDefault() - this.select() - this.$element.focus() - } - - , mouseenter: function (e) { - this.mousedover = true - this.$menu.find('.active').removeClass('active') - $(e.currentTarget).addClass('active') - } - - , mouseleave: function (e) { - this.mousedover = false - if (!this.focused && this.shown) this.hide() - } - - } - - - /* TYPEAHEAD PLUGIN DEFINITION - * =========================== */ - - var old = $.fn.typeahead - - $.fn.typeahead = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('typeahead') - , options = typeof option == 'object' && option - if (!data) $this.data('typeahead', (data = new Typeahead(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.typeahead.defaults = { - source: [] - , items: 8 - , menu: '<ul class="typeahead dropdown-menu"></ul>' - , item: '<li><a href="#"></a></li>' - , minLength: 1 - } - - $.fn.typeahead.Constructor = Typeahead - - - /* TYPEAHEAD NO CONFLICT - * =================== */ - - $.fn.typeahead.noConflict = function () { - $.fn.typeahead = old - return this - } - - - /* TYPEAHEAD DATA-API - * ================== */ - - $(document).on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) { - var $this = $(this) - if ($this.data('typeahead')) return - $this.typeahead($this.data()) - }) - -}(window.jQuery); -/* ========================================================== - * bootstrap-affix.js v2.3.0 - * http://twitter.github.com/bootstrap/javascript.html#affix - * ========================================================== - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ========================================================== */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* AFFIX CLASS DEFINITION - * ====================== */ - - var Affix = function (element, options) { - this.options = $.extend({}, $.fn.affix.defaults, options) - this.$window = $(window) - .on('scroll.affix.data-api', $.proxy(this.checkPosition, this)) - .on('click.affix.data-api', $.proxy(function () { setTimeout($.proxy(this.checkPosition, this), 1) }, this)) - this.$element = $(element) - this.checkPosition() - } - - Affix.prototype.checkPosition = function () { - if (!this.$element.is(':visible')) return - - var scrollHeight = $(document).height() - , scrollTop = this.$window.scrollTop() - , position = this.$element.offset() - , offset = this.options.offset - , offsetBottom = offset.bottom - , offsetTop = offset.top - , reset = 'affix affix-top affix-bottom' - , affix - - if (typeof offset != 'object') offsetBottom = offsetTop = offset - if (typeof offsetTop == 'function') offsetTop = offset.top() - if (typeof offsetBottom == 'function') offsetBottom = offset.bottom() - - affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ? - false : offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ? - 'bottom' : offsetTop != null && scrollTop <= offsetTop ? - 'top' : false - - if (this.affixed === affix) return - - this.affixed = affix - this.unpin = affix == 'bottom' ? position.top - scrollTop : null - - this.$element.removeClass(reset).addClass('affix' + (affix ? '-' + affix : '')) - } - - - /* AFFIX PLUGIN DEFINITION - * ======================= */ - - var old = $.fn.affix - - $.fn.affix = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('affix') - , options = typeof option == 'object' && option - if (!data) $this.data('affix', (data = new Affix(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.affix.Constructor = Affix - - $.fn.affix.defaults = { - offset: 0 - } - - - /* AFFIX NO CONFLICT - * ================= */ - - $.fn.affix.noConflict = function () { - $.fn.affix = old - return this - } - - - /* AFFIX DATA-API - * ============== */ - - $(window).on('load', function () { - $('[data-spy="affix"]').each(function () { - var $spy = $(this) - , data = $spy.data() - - data.offset = data.offset || {} - - data.offsetBottom && (data.offset.bottom = data.offsetBottom) - data.offsetTop && (data.offset.top = data.offsetTop) - - $spy.affix(data) - }) - }) - - -}(window.jQuery); \ No newline at end of file diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap.min.js b/src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap.min.js deleted file mode 100644 index 42501777..00000000 --- a/src/main/webapp/bower_components/bootstrap/docs/assets/js/bootstrap.min.js +++ /dev/null @@ -1,6 +0,0 @@ -/** -* Bootstrap.js v2.3.0 by @fat & @mdo -* Copyright 2012 Twitter, Inc. -* http://www.apache.org/licenses/LICENSE-2.0.txt -*/ -!function(e){"use strict";e(function(){e.support.transition=function(){var e=function(){var e=document.createElement("bootstrap"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},n;for(n in t)if(e.style[n]!==undefined)return t[n]}();return e&&{end:e}}()})}(window.jQuery),!function(e){"use strict";var t='[data-dismiss="alert"]',n=function(n){e(n).on("click",t,this.close)};n.prototype.close=function(t){function s(){i.trigger("closed").remove()}var n=e(this),r=n.attr("data-target"),i;r||(r=n.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,"")),i=e(r),t&&t.preventDefault(),i.length||(i=n.hasClass("alert")?n:n.parent()),i.trigger(t=e.Event("close"));if(t.isDefaultPrevented())return;i.removeClass("in"),e.support.transition&&i.hasClass("fade")?i.on(e.support.transition.end,s):s()};var r=e.fn.alert;e.fn.alert=function(t){return this.each(function(){var r=e(this),i=r.data("alert");i||r.data("alert",i=new n(this)),typeof t=="string"&&i[t].call(r)})},e.fn.alert.Constructor=n,e.fn.alert.noConflict=function(){return e.fn.alert=r,this},e(document).on("click.alert.data-api",t,n.prototype.close)}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.button.defaults,n)};t.prototype.setState=function(e){var t="disabled",n=this.$element,r=n.data(),i=n.is("input")?"val":"html";e+="Text",r.resetText||n.data("resetText",n[i]()),n[i](r[e]||this.options[e]),setTimeout(function(){e=="loadingText"?n.addClass(t).attr(t,t):n.removeClass(t).removeAttr(t)},0)},t.prototype.toggle=function(){var e=this.$element.closest('[data-toggle="buttons-radio"]');e&&e.find(".active").removeClass("active"),this.$element.toggleClass("active")};var n=e.fn.button;e.fn.button=function(n){return this.each(function(){var r=e(this),i=r.data("button"),s=typeof n=="object"&&n;i||r.data("button",i=new t(this,s)),n=="toggle"?i.toggle():n&&i.setState(n)})},e.fn.button.defaults={loadingText:"loading..."},e.fn.button.Constructor=t,e.fn.button.noConflict=function(){return e.fn.button=n,this},e(document).on("click.button.data-api","[data-toggle^=button]",function(t){var n=e(t.target);n.hasClass("btn")||(n=n.closest(".btn")),n.button("toggle")})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.$indicators=this.$element.find(".carousel-indicators"),this.options=n,this.options.pause=="hover"&&this.$element.on("mouseenter",e.proxy(this.pause,this)).on("mouseleave",e.proxy(this.cycle,this))};t.prototype={cycle:function(t){return t||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(e.proxy(this.next,this),this.options.interval)),this},getActiveIndex:function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},to:function(t){var n=this.getActiveIndex(),r=this;if(t>this.$items.length-1||t<0)return;return this.sliding?this.$element.one("slid",function(){r.to(t)}):n==t?this.pause().cycle():this.slide(t>n?"next":"prev",e(this.$items[t]))},pause:function(t){return t||(this.paused=!0),this.$element.find(".next, .prev").length&&e.support.transition.end&&(this.$element.trigger(e.support.transition.end),this.cycle()),clearInterval(this.interval),this.interval=null,this},next:function(){if(this.sliding)return;return this.slide("next")},prev:function(){if(this.sliding)return;return this.slide("prev")},slide:function(t,n){var r=this.$element.find(".item.active"),i=n||r[t](),s=this.interval,o=t=="next"?"left":"right",u=t=="next"?"first":"last",a=this,f;this.sliding=!0,s&&this.pause(),i=i.length?i:this.$element.find(".item")[u](),f=e.Event("slide",{relatedTarget:i[0],direction:o});if(i.hasClass("active"))return;this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid",function(){var t=e(a.$indicators.children()[a.getActiveIndex()]);t&&t.addClass("active")}));if(e.support.transition&&this.$element.hasClass("slide")){this.$element.trigger(f);if(f.isDefaultPrevented())return;i.addClass(t),i[0].offsetWidth,r.addClass(o),i.addClass(o),this.$element.one(e.support.transition.end,function(){i.removeClass([t,o].join(" ")).addClass("active"),r.removeClass(["active",o].join(" ")),a.sliding=!1,setTimeout(function(){a.$element.trigger("slid")},0)})}else{this.$element.trigger(f);if(f.isDefaultPrevented())return;r.removeClass("active"),i.addClass("active"),this.sliding=!1,this.$element.trigger("slid")}return s&&this.cycle(),this}};var n=e.fn.carousel;e.fn.carousel=function(n){return this.each(function(){var r=e(this),i=r.data("carousel"),s=e.extend({},e.fn.carousel.defaults,typeof n=="object"&&n),o=typeof n=="string"?n:s.slide;i||r.data("carousel",i=new t(this,s)),typeof n=="number"?i.to(n):o?i[o]():s.interval&&i.pause().cycle()})},e.fn.carousel.defaults={interval:5e3,pause:"hover"},e.fn.carousel.Constructor=t,e.fn.carousel.noConflict=function(){return e.fn.carousel=n,this},e(document).on("click.carousel.data-api","[data-slide], [data-slide-to]",function(t){var n=e(this),r,i=e(n.attr("data-target")||(r=n.attr("href"))&&r.replace(/.*(?=#[^\s]+$)/,"")),s=e.extend({},i.data(),n.data()),o;i.carousel(s),(o=n.attr("data-slide-to"))&&i.data("carousel").pause().to(o).cycle(),t.preventDefault()})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.collapse.defaults,n),this.options.parent&&(this.$parent=e(this.options.parent)),this.options.toggle&&this.toggle()};t.prototype={constructor:t,dimension:function(){var e=this.$element.hasClass("width");return e?"width":"height"},show:function(){var t,n,r,i;if(this.transitioning||this.$element.hasClass("in"))return;t=this.dimension(),n=e.camelCase(["scroll",t].join("-")),r=this.$parent&&this.$parent.find("> .accordion-group > .in");if(r&&r.length){i=r.data("collapse");if(i&&i.transitioning)return;r.collapse("hide"),i||r.data("collapse",null)}this.$element[t](0),this.transition("addClass",e.Event("show"),"shown"),e.support.transition&&this.$element[t](this.$element[0][n])},hide:function(){var t;if(this.transitioning||!this.$element.hasClass("in"))return;t=this.dimension(),this.reset(this.$element[t]()),this.transition("removeClass",e.Event("hide"),"hidden"),this.$element[t](0)},reset:function(e){var t=this.dimension();return this.$element.removeClass("collapse")[t](e||"auto")[0].offsetWidth,this.$element[e!==null?"addClass":"removeClass"]("collapse"),this},transition:function(t,n,r){var i=this,s=function(){n.type=="show"&&i.reset(),i.transitioning=0,i.$element.trigger(r)};this.$element.trigger(n);if(n.isDefaultPrevented())return;this.transitioning=1,this.$element[t]("in"),e.support.transition&&this.$element.hasClass("collapse")?this.$element.one(e.support.transition.end,s):s()},toggle:function(){this[this.$element.hasClass("in")?"hide":"show"]()}};var n=e.fn.collapse;e.fn.collapse=function(n){return this.each(function(){var r=e(this),i=r.data("collapse"),s=e.extend({},e.fn.collapse.defaults,r.data(),typeof n=="object"&&n);i||r.data("collapse",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.collapse.defaults={toggle:!0},e.fn.collapse.Constructor=t,e.fn.collapse.noConflict=function(){return e.fn.collapse=n,this},e(document).on("click.collapse.data-api","[data-toggle=collapse]",function(t){var n=e(this),r,i=n.attr("data-target")||t.preventDefault()||(r=n.attr("href"))&&r.replace(/.*(?=#[^\s]+$)/,""),s=e(i).data("collapse")?"toggle":n.data();n[e(i).hasClass("in")?"addClass":"removeClass"]("collapsed"),e(i).collapse(s)})}(window.jQuery),!function(e){"use strict";function r(){e(t).each(function(){i(e(this)).removeClass("open")})}function i(t){var n=t.attr("data-target"),r;n||(n=t.attr("href"),n=n&&/#/.test(n)&&n.replace(/.*(?=#[^\s]*$)/,"")),r=n&&e(n);if(!r||!r.length)r=t.parent();return r}var t="[data-toggle=dropdown]",n=function(t){var n=e(t).on("click.dropdown.data-api",this.toggle);e("html").on("click.dropdown.data-api",function(){n.parent().removeClass("open")})};n.prototype={constructor:n,toggle:function(t){var n=e(this),s,o;if(n.is(".disabled, :disabled"))return;return s=i(n),o=s.hasClass("open"),r(),o||s.toggleClass("open"),n.focus(),!1},keydown:function(n){var r,s,o,u,a,f;if(!/(38|40|27)/.test(n.keyCode))return;r=e(this),n.preventDefault(),n.stopPropagation();if(r.is(".disabled, :disabled"))return;u=i(r),a=u.hasClass("open");if(!a||a&&n.keyCode==27)return n.which==27&&u.find(t).focus(),r.click();s=e("[role=menu] li:not(.divider):visible a",u);if(!s.length)return;f=s.index(s.filter(":focus")),n.keyCode==38&&f>0&&f--,n.keyCode==40&&f<s.length-1&&f++,~f||(f=0),s.eq(f).focus()}};var s=e.fn.dropdown;e.fn.dropdown=function(t){return this.each(function(){var r=e(this),i=r.data("dropdown");i||r.data("dropdown",i=new n(this)),typeof t=="string"&&i[t].call(r)})},e.fn.dropdown.Constructor=n,e.fn.dropdown.noConflict=function(){return e.fn.dropdown=s,this},e(document).on("click.dropdown.data-api",r).on("click.dropdown.data-api",".dropdown form",function(e){e.stopPropagation()}).on(".dropdown-menu",function(e){e.stopPropagation()}).on("click.dropdown.data-api",t,n.prototype.toggle).on("keydown.dropdown.data-api",t+", [role=menu]",n.prototype.keydown)}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.options=n,this.$element=e(t).delegate('[data-dismiss="modal"]',"click.dismiss.modal",e.proxy(this.hide,this)),this.options.remote&&this.$element.find(".modal-body").load(this.options.remote)};t.prototype={constructor:t,toggle:function(){return this[this.isShown?"hide":"show"]()},show:function(){var t=this,n=e.Event("show");this.$element.trigger(n);if(this.isShown||n.isDefaultPrevented())return;this.isShown=!0,this.escape(),this.backdrop(function(){var n=e.support.transition&&t.$element.hasClass("fade");t.$element.parent().length||t.$element.appendTo(document.body),t.$element.show(),n&&t.$element[0].offsetWidth,t.$element.addClass("in").attr("aria-hidden",!1),t.enforceFocus(),n?t.$element.one(e.support.transition.end,function(){t.$element.focus().trigger("shown")}):t.$element.focus().trigger("shown")})},hide:function(t){t&&t.preventDefault();var n=this;t=e.Event("hide"),this.$element.trigger(t);if(!this.isShown||t.isDefaultPrevented())return;this.isShown=!1,this.escape(),e(document).off("focusin.modal"),this.$element.removeClass("in").attr("aria-hidden",!0),e.support.transition&&this.$element.hasClass("fade")?this.hideWithTransition():this.hideModal()},enforceFocus:function(){var t=this;e(document).on("focusin.modal",function(e){t.$element[0]!==e.target&&!t.$element.has(e.target).length&&t.$element.focus()})},escape:function(){var e=this;this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.modal",function(t){t.which==27&&e.hide()}):this.isShown||this.$element.off("keyup.dismiss.modal")},hideWithTransition:function(){var t=this,n=setTimeout(function(){t.$element.off(e.support.transition.end),t.hideModal()},500);this.$element.one(e.support.transition.end,function(){clearTimeout(n),t.hideModal()})},hideModal:function(){var e=this;this.$element.hide(),this.backdrop(function(){e.removeBackdrop(),e.$element.trigger("hidden")})},removeBackdrop:function(){this.$backdrop.remove(),this.$backdrop=null},backdrop:function(t){var n=this,r=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var i=e.support.transition&&r;this.$backdrop=e('<div class="modal-backdrop '+r+'" />').appendTo(document.body),this.$backdrop.click(this.options.backdrop=="static"?e.proxy(this.$element[0].focus,this.$element[0]):e.proxy(this.hide,this)),i&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in");if(!t)return;i?this.$backdrop.one(e.support.transition.end,t):t()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("in"),e.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one(e.support.transition.end,t):t()):t&&t()}};var n=e.fn.modal;e.fn.modal=function(n){return this.each(function(){var r=e(this),i=r.data("modal"),s=e.extend({},e.fn.modal.defaults,r.data(),typeof n=="object"&&n);i||r.data("modal",i=new t(this,s)),typeof n=="string"?i[n]():s.show&&i.show()})},e.fn.modal.defaults={backdrop:!0,keyboard:!0,show:!0},e.fn.modal.Constructor=t,e.fn.modal.noConflict=function(){return e.fn.modal=n,this},e(document).on("click.modal.data-api",'[data-toggle="modal"]',function(t){var n=e(this),r=n.attr("href"),i=e(n.attr("data-target")||r&&r.replace(/.*(?=#[^\s]+$)/,"")),s=i.data("modal")?"toggle":e.extend({remote:!/#/.test(r)&&r},i.data(),n.data());t.preventDefault(),i.modal(s).one("hide",function(){n.focus()})})}(window.jQuery),!function(e){"use strict";var t=function(e,t){this.init("tooltip",e,t)};t.prototype={constructor:t,init:function(t,n,r){var i,s,o,u,a;this.type=t,this.$element=e(n),this.options=this.getOptions(r),this.enabled=!0,o=this.options.trigger.split(" ");for(a=o.length;a--;)u=o[a],u=="click"?this.$element.on("click."+this.type,this.options.selector,e.proxy(this.toggle,this)):u!="manual"&&(i=u=="hover"?"mouseenter":"focus",s=u=="hover"?"mouseleave":"blur",this.$element.on(i+"."+this.type,this.options.selector,e.proxy(this.enter,this)),this.$element.on(s+"."+this.type,this.options.selector,e.proxy(this.leave,this)));this.options.selector?this._options=e.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},getOptions:function(t){return t=e.extend({},e.fn[this.type].defaults,this.$element.data(),t),t.delay&&typeof t.delay=="number"&&(t.delay={show:t.delay,hide:t.delay}),t},enter:function(t){var n=e(t.currentTarget)[this.type](this._options).data(this.type);if(!n.options.delay||!n.options.delay.show)return n.show();clearTimeout(this.timeout),n.hoverState="in",this.timeout=setTimeout(function(){n.hoverState=="in"&&n.show()},n.options.delay.show)},leave:function(t){var n=e(t.currentTarget)[this.type](this._options).data(this.type);this.timeout&&clearTimeout(this.timeout);if(!n.options.delay||!n.options.delay.hide)return n.hide();n.hoverState="out",this.timeout=setTimeout(function(){n.hoverState=="out"&&n.hide()},n.options.delay.hide)},show:function(){var t,n,r,i,s,o,u=e.Event("show");if(this.hasContent()&&this.enabled){this.$element.trigger(u);if(u.isDefaultPrevented())return;t=this.tip(),this.setContent(),this.options.animation&&t.addClass("fade"),s=typeof this.options.placement=="function"?this.options.placement.call(this,t[0],this.$element[0]):this.options.placement,t.detach().css({top:0,left:0,display:"block"}),this.options.container?t.appendTo(this.options.container):t.insertAfter(this.$element),n=this.getPosition(),r=t[0].offsetWidth,i=t[0].offsetHeight;switch(s){case"bottom":o={top:n.top+n.height,left:n.left+n.width/2-r/2};break;case"top":o={top:n.top-i,left:n.left+n.width/2-r/2};break;case"left":o={top:n.top+n.height/2-i/2,left:n.left-r};break;case"right":o={top:n.top+n.height/2-i/2,left:n.left+n.width}}this.applyPlacement(o,s),this.$element.trigger("shown")}},applyPlacement:function(e,t){var n=this.tip(),r=n[0].offsetWidth,i=n[0].offsetHeight,s,o,u,a;n.offset(e).addClass(t).addClass("in"),s=n[0].offsetWidth,o=n[0].offsetHeight,t=="top"&&o!=i&&(e.top=e.top+i-o,a=!0),t=="bottom"||t=="top"?(u=0,e.left<0&&(u=e.left*-2,e.left=0,n.offset(e),s=n[0].offsetWidth,o=n[0].offsetHeight),this.replaceArrow(u-r+s,s,"left")):this.replaceArrow(o-i,o,"top"),a&&n.offset(e)},replaceArrow:function(e,t,n){this.arrow().css(n,e?50*(1-e/t)+"%":"")},setContent:function(){var e=this.tip(),t=this.getTitle();e.find(".tooltip-inner")[this.options.html?"html":"text"](t),e.removeClass("fade in top bottom left right")},hide:function(){function i(){var t=setTimeout(function(){n.off(e.support.transition.end).detach()},500);n.one(e.support.transition.end,function(){clearTimeout(t),n.detach()})}var t=this,n=this.tip(),r=e.Event("hide");this.$element.trigger(r);if(r.isDefaultPrevented())return;return n.removeClass("in"),e.support.transition&&this.$tip.hasClass("fade")?i():n.detach(),this.$element.trigger("hidden"),this},fixTitle:function(){var e=this.$element;(e.attr("title")||typeof e.attr("data-original-title")!="string")&&e.attr("data-original-title",e.attr("title")||"").attr("title","")},hasContent:function(){return this.getTitle()},getPosition:function(){var t=this.$element[0];return e.extend({},typeof t.getBoundingClientRect=="function"?t.getBoundingClientRect():{width:t.offsetWidth,height:t.offsetHeight},this.$element.offset())},getTitle:function(){var e,t=this.$element,n=this.options;return e=t.attr("data-original-title")||(typeof n.title=="function"?n.title.call(t[0]):n.title),e},tip:function(){return this.$tip=this.$tip||e(this.options.template)},arrow:function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},validate:function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},enable:function(){this.enabled=!0},disable:function(){this.enabled=!1},toggleEnabled:function(){this.enabled=!this.enabled},toggle:function(t){var n=t?e(t.currentTarget)[this.type](this._options).data(this.type):this;n.tip().hasClass("in")?n.hide():n.show()},destroy:function(){this.hide().$element.off("."+this.type).removeData(this.type)}};var n=e.fn.tooltip;e.fn.tooltip=function(n){return this.each(function(){var r=e(this),i=r.data("tooltip"),s=typeof n=="object"&&n;i||r.data("tooltip",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.tooltip.Constructor=t,e.fn.tooltip.defaults={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1},e.fn.tooltip.noConflict=function(){return e.fn.tooltip=n,this}}(window.jQuery),!function(e){"use strict";var t=function(e,t){this.init("popover",e,t)};t.prototype=e.extend({},e.fn.tooltip.Constructor.prototype,{constructor:t,setContent:function(){var e=this.tip(),t=this.getTitle(),n=this.getContent();e.find(".popover-title")[this.options.html?"html":"text"](t),e.find(".popover-content")[this.options.html?"html":"text"](n),e.removeClass("fade top bottom left right in")},hasContent:function(){return this.getTitle()||this.getContent()},getContent:function(){var e,t=this.$element,n=this.options;return e=(typeof n.content=="function"?n.content.call(t[0]):n.content)||t.attr("data-content"),e},tip:function(){return this.$tip||(this.$tip=e(this.options.template)),this.$tip},destroy:function(){this.hide().$element.off("."+this.type).removeData(this.type)}});var n=e.fn.popover;e.fn.popover=function(n){return this.each(function(){var r=e(this),i=r.data("popover"),s=typeof n=="object"&&n;i||r.data("popover",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.popover.Constructor=t,e.fn.popover.defaults=e.extend({},e.fn.tooltip.defaults,{placement:"right",trigger:"click",content:"",template:'<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),e.fn.popover.noConflict=function(){return e.fn.popover=n,this}}(window.jQuery),!function(e){"use strict";function t(t,n){var r=e.proxy(this.process,this),i=e(t).is("body")?e(window):e(t),s;this.options=e.extend({},e.fn.scrollspy.defaults,n),this.$scrollElement=i.on("scroll.scroll-spy.data-api",r),this.selector=(this.options.target||(s=e(t).attr("href"))&&s.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.$body=e("body"),this.refresh(),this.process()}t.prototype={constructor:t,refresh:function(){var t=this,n;this.offsets=e([]),this.targets=e([]),n=this.$body.find(this.selector).map(function(){var n=e(this),r=n.data("target")||n.attr("href"),i=/^#\w/.test(r)&&e(r);return i&&i.length&&[[i.position().top+(!e.isWindow(t.$scrollElement.get(0))&&t.$scrollElement.scrollTop()),r]]||null}).sort(function(e,t){return e[0]-t[0]}).each(function(){t.offsets.push(this[0]),t.targets.push(this[1])})},process:function(){var e=this.$scrollElement.scrollTop()+this.options.offset,t=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,n=t-this.$scrollElement.height(),r=this.offsets,i=this.targets,s=this.activeTarget,o;if(e>=n)return s!=(o=i.last()[0])&&this.activate(o);for(o=r.length;o--;)s!=i[o]&&e>=r[o]&&(!r[o+1]||e<=r[o+1])&&this.activate(i[o])},activate:function(t){var n,r;this.activeTarget=t,e(this.selector).parent(".active").removeClass("active"),r=this.selector+'[data-target="'+t+'"],'+this.selector+'[href="'+t+'"]',n=e(r).parent("li").addClass("active"),n.parent(".dropdown-menu").length&&(n=n.closest("li.dropdown").addClass("active")),n.trigger("activate")}};var n=e.fn.scrollspy;e.fn.scrollspy=function(n){return this.each(function(){var r=e(this),i=r.data("scrollspy"),s=typeof n=="object"&&n;i||r.data("scrollspy",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.scrollspy.Constructor=t,e.fn.scrollspy.defaults={offset:10},e.fn.scrollspy.noConflict=function(){return e.fn.scrollspy=n,this},e(window).on("load",function(){e('[data-spy="scroll"]').each(function(){var t=e(this);t.scrollspy(t.data())})})}(window.jQuery),!function(e){"use strict";var t=function(t){this.element=e(t)};t.prototype={constructor:t,show:function(){var t=this.element,n=t.closest("ul:not(.dropdown-menu)"),r=t.attr("data-target"),i,s,o;r||(r=t.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,""));if(t.parent("li").hasClass("active"))return;i=n.find(".active:last a")[0],o=e.Event("show",{relatedTarget:i}),t.trigger(o);if(o.isDefaultPrevented())return;s=e(r),this.activate(t.parent("li"),n),this.activate(s,s.parent(),function(){t.trigger({type:"shown",relatedTarget:i})})},activate:function(t,n,r){function o(){i.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),t.addClass("active"),s?(t[0].offsetWidth,t.addClass("in")):t.removeClass("fade"),t.parent(".dropdown-menu")&&t.closest("li.dropdown").addClass("active"),r&&r()}var i=n.find("> .active"),s=r&&e.support.transition&&i.hasClass("fade");s?i.one(e.support.transition.end,o):o(),i.removeClass("in")}};var n=e.fn.tab;e.fn.tab=function(n){return this.each(function(){var r=e(this),i=r.data("tab");i||r.data("tab",i=new t(this)),typeof n=="string"&&i[n]()})},e.fn.tab.Constructor=t,e.fn.tab.noConflict=function(){return e.fn.tab=n,this},e(document).on("click.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(t){t.preventDefault(),e(this).tab("show")})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.typeahead.defaults,n),this.matcher=this.options.matcher||this.matcher,this.sorter=this.options.sorter||this.sorter,this.highlighter=this.options.highlighter||this.highlighter,this.updater=this.options.updater||this.updater,this.source=this.options.source,this.$menu=e(this.options.menu),this.shown=!1,this.listen()};t.prototype={constructor:t,select:function(){var e=this.$menu.find(".active").attr("data-value");return this.$element.val(this.updater(e)).change(),this.hide()},updater:function(e){return e},show:function(){var t=e.extend({},this.$element.position(),{height:this.$element[0].offsetHeight});return this.$menu.insertAfter(this.$element).css({top:t.top+t.height,left:t.left}).show(),this.shown=!0,this},hide:function(){return this.$menu.hide(),this.shown=!1,this},lookup:function(t){var n;return this.query=this.$element.val(),!this.query||this.query.length<this.options.minLength?this.shown?this.hide():this:(n=e.isFunction(this.source)?this.source(this.query,e.proxy(this.process,this)):this.source,n?this.process(n):this)},process:function(t){var n=this;return t=e.grep(t,function(e){return n.matcher(e)}),t=this.sorter(t),t.length?this.render(t.slice(0,this.options.items)).show():this.shown?this.hide():this},matcher:function(e){return~e.toLowerCase().indexOf(this.query.toLowerCase())},sorter:function(e){var t=[],n=[],r=[],i;while(i=e.shift())i.toLowerCase().indexOf(this.query.toLowerCase())?~i.indexOf(this.query)?n.push(i):r.push(i):t.push(i);return t.concat(n,r)},highlighter:function(e){var t=this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&");return e.replace(new RegExp("("+t+")","ig"),function(e,t){return"<strong>"+t+"</strong>"})},render:function(t){var n=this;return t=e(t).map(function(t,r){return t=e(n.options.item).attr("data-value",r),t.find("a").html(n.highlighter(r)),t[0]}),t.first().addClass("active"),this.$menu.html(t),this},next:function(t){var n=this.$menu.find(".active").removeClass("active"),r=n.next();r.length||(r=e(this.$menu.find("li")[0])),r.addClass("active")},prev:function(e){var t=this.$menu.find(".active").removeClass("active"),n=t.prev();n.length||(n=this.$menu.find("li").last()),n.addClass("active")},listen:function(){this.$element.on("focus",e.proxy(this.focus,this)).on("blur",e.proxy(this.blur,this)).on("keypress",e.proxy(this.keypress,this)).on("keyup",e.proxy(this.keyup,this)),this.eventSupported("keydown")&&this.$element.on("keydown",e.proxy(this.keydown,this)),this.$menu.on("click",e.proxy(this.click,this)).on("mouseenter","li",e.proxy(this.mouseenter,this)).on("mouseleave","li",e.proxy(this.mouseleave,this))},eventSupported:function(e){var t=e in this.$element;return t||(this.$element.setAttribute(e,"return;"),t=typeof this.$element[e]=="function"),t},move:function(e){if(!this.shown)return;switch(e.keyCode){case 9:case 13:case 27:e.preventDefault();break;case 38:e.preventDefault(),this.prev();break;case 40:e.preventDefault(),this.next()}e.stopPropagation()},keydown:function(t){this.suppressKeyPressRepeat=~e.inArray(t.keyCode,[40,38,9,13,27]),this.move(t)},keypress:function(e){if(this.suppressKeyPressRepeat)return;this.move(e)},keyup:function(e){switch(e.keyCode){case 40:case 38:case 16:case 17:case 18:break;case 9:case 13:if(!this.shown)return;this.select();break;case 27:if(!this.shown)return;this.hide();break;default:this.lookup()}e.stopPropagation(),e.preventDefault()},focus:function(e){this.focused=!0},blur:function(e){this.focused=!1,!this.mousedover&&this.shown&&this.hide()},click:function(e){e.stopPropagation(),e.preventDefault(),this.select(),this.$element.focus()},mouseenter:function(t){this.mousedover=!0,this.$menu.find(".active").removeClass("active"),e(t.currentTarget).addClass("active")},mouseleave:function(e){this.mousedover=!1,!this.focused&&this.shown&&this.hide()}};var n=e.fn.typeahead;e.fn.typeahead=function(n){return this.each(function(){var r=e(this),i=r.data("typeahead"),s=typeof n=="object"&&n;i||r.data("typeahead",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.typeahead.defaults={source:[],items:8,menu:'<ul class="typeahead dropdown-menu"></ul>',item:'<li><a href="#"></a></li>',minLength:1},e.fn.typeahead.Constructor=t,e.fn.typeahead.noConflict=function(){return e.fn.typeahead=n,this},e(document).on("focus.typeahead.data-api",'[data-provide="typeahead"]',function(t){var n=e(this);if(n.data("typeahead"))return;n.typeahead(n.data())})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.options=e.extend({},e.fn.affix.defaults,n),this.$window=e(window).on("scroll.affix.data-api",e.proxy(this.checkPosition,this)).on("click.affix.data-api",e.proxy(function(){setTimeout(e.proxy(this.checkPosition,this),1)},this)),this.$element=e(t),this.checkPosition()};t.prototype.checkPosition=function(){if(!this.$element.is(":visible"))return;var t=e(document).height(),n=this.$window.scrollTop(),r=this.$element.offset(),i=this.options.offset,s=i.bottom,o=i.top,u="affix affix-top affix-bottom",a;typeof i!="object"&&(s=o=i),typeof o=="function"&&(o=i.top()),typeof s=="function"&&(s=i.bottom()),a=this.unpin!=null&&n+this.unpin<=r.top?!1:s!=null&&r.top+this.$element.height()>=t-s?"bottom":o!=null&&n<=o?"top":!1;if(this.affixed===a)return;this.affixed=a,this.unpin=a=="bottom"?r.top-n:null,this.$element.removeClass(u).addClass("affix"+(a?"-"+a:""))};var n=e.fn.affix;e.fn.affix=function(n){return this.each(function(){var r=e(this),i=r.data("affix"),s=typeof n=="object"&&n;i||r.data("affix",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.affix.Constructor=t,e.fn.affix.defaults={offset:0},e.fn.affix.noConflict=function(){return e.fn.affix=n,this},e(window).on("load",function(){e('[data-spy="affix"]').each(function(){var t=e(this),n=t.data();n.offset=n.offset||{},n.offsetBottom&&(n.offset.bottom=n.offsetBottom),n.offsetTop&&(n.offset.top=n.offsetTop),t.affix(n)})})}(window.jQuery); \ No newline at end of file diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/js/google-code-prettify/prettify.css b/src/main/webapp/bower_components/bootstrap/docs/assets/js/google-code-prettify/prettify.css deleted file mode 100644 index d437aff6..00000000 --- a/src/main/webapp/bower_components/bootstrap/docs/assets/js/google-code-prettify/prettify.css +++ /dev/null @@ -1,30 +0,0 @@ -.com { color: #93a1a1; } -.lit { color: #195f91; } -.pun, .opn, .clo { color: #93a1a1; } -.fun { color: #dc322f; } -.str, .atv { color: #D14; } -.kwd, .prettyprint .tag { color: #1e347b; } -.typ, .atn, .dec, .var { color: teal; } -.pln { color: #48484c; } - -.prettyprint { - padding: 8px; - background-color: #f7f7f9; - border: 1px solid #e1e1e8; -} -.prettyprint.linenums { - -webkit-box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0; - -moz-box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0; - box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0; -} - -/* Specify class=linenums on a pre to get line numbering */ -ol.linenums { - margin: 0 0 0 33px; /* IE indents via margin-left */ -} -ol.linenums li { - padding-left: 12px; - color: #bebec5; - line-height: 20px; - text-shadow: 0 1px 0 #fff; -} \ No newline at end of file diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/js/google-code-prettify/prettify.js b/src/main/webapp/bower_components/bootstrap/docs/assets/js/google-code-prettify/prettify.js deleted file mode 100644 index eef5ad7e..00000000 --- a/src/main/webapp/bower_components/bootstrap/docs/assets/js/google-code-prettify/prettify.js +++ /dev/null @@ -1,28 +0,0 @@ -var q=null;window.PR_SHOULD_USE_CONTINUATION=!0; -(function(){function L(a){function m(a){var f=a.charCodeAt(0);if(f!==92)return f;var b=a.charAt(1);return(f=r[b])?f:"0"<=b&&b<="7"?parseInt(a.substring(1),8):b==="u"||b==="x"?parseInt(a.substring(2),16):a.charCodeAt(1)}function e(a){if(a<32)return(a<16?"\\x0":"\\x")+a.toString(16);a=String.fromCharCode(a);if(a==="\\"||a==="-"||a==="["||a==="]")a="\\"+a;return a}function h(a){for(var f=a.substring(1,a.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),a= -[],b=[],o=f[0]==="^",c=o?1:0,i=f.length;c<i;++c){var j=f[c];if(/\\[bdsw]/i.test(j))a.push(j);else{var j=m(j),d;c+2<i&&"-"===f[c+1]?(d=m(f[c+2]),c+=2):d=j;b.push([j,d]);d<65||j>122||(d<65||j>90||b.push([Math.max(65,j)|32,Math.min(d,90)|32]),d<97||j>122||b.push([Math.max(97,j)&-33,Math.min(d,122)&-33]))}}b.sort(function(a,f){return a[0]-f[0]||f[1]-a[1]});f=[];j=[NaN,NaN];for(c=0;c<b.length;++c)i=b[c],i[0]<=j[1]+1?j[1]=Math.max(j[1],i[1]):f.push(j=i);b=["["];o&&b.push("^");b.push.apply(b,a);for(c=0;c< -f.length;++c)i=f[c],b.push(e(i[0])),i[1]>i[0]&&(i[1]+1>i[0]&&b.push("-"),b.push(e(i[1])));b.push("]");return b.join("")}function y(a){for(var f=a.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),b=f.length,d=[],c=0,i=0;c<b;++c){var j=f[c];j==="("?++i:"\\"===j.charAt(0)&&(j=+j.substring(1))&&j<=i&&(d[j]=-1)}for(c=1;c<d.length;++c)-1===d[c]&&(d[c]=++t);for(i=c=0;c<b;++c)j=f[c],j==="("?(++i,d[i]===void 0&&(f[c]="(?:")):"\\"===j.charAt(0)&& -(j=+j.substring(1))&&j<=i&&(f[c]="\\"+d[i]);for(i=c=0;c<b;++c)"^"===f[c]&&"^"!==f[c+1]&&(f[c]="");if(a.ignoreCase&&s)for(c=0;c<b;++c)j=f[c],a=j.charAt(0),j.length>=2&&a==="["?f[c]=h(j):a!=="\\"&&(f[c]=j.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return f.join("")}for(var t=0,s=!1,l=!1,p=0,d=a.length;p<d;++p){var g=a[p];if(g.ignoreCase)l=!0;else if(/[a-z]/i.test(g.source.replace(/\\u[\da-f]{4}|\\x[\da-f]{2}|\\[^UXux]/gi,""))){s=!0;l=!1;break}}for(var r= -{b:8,t:9,n:10,v:11,f:12,r:13},n=[],p=0,d=a.length;p<d;++p){g=a[p];if(g.global||g.multiline)throw Error(""+g);n.push("(?:"+y(g)+")")}return RegExp(n.join("|"),l?"gi":"g")}function M(a){function m(a){switch(a.nodeType){case 1:if(e.test(a.className))break;for(var g=a.firstChild;g;g=g.nextSibling)m(g);g=a.nodeName;if("BR"===g||"LI"===g)h[s]="\n",t[s<<1]=y++,t[s++<<1|1]=a;break;case 3:case 4:g=a.nodeValue,g.length&&(g=p?g.replace(/\r\n?/g,"\n"):g.replace(/[\t\n\r ]+/g," "),h[s]=g,t[s<<1]=y,y+=g.length, -t[s++<<1|1]=a)}}var e=/(?:^|\s)nocode(?:\s|$)/,h=[],y=0,t=[],s=0,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=document.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);m(a);return{a:h.join("").replace(/\n$/,""),c:t}}function B(a,m,e,h){m&&(a={a:m,d:a},e(a),h.push.apply(h,a.e))}function x(a,m){function e(a){for(var l=a.d,p=[l,"pln"],d=0,g=a.a.match(y)||[],r={},n=0,z=g.length;n<z;++n){var f=g[n],b=r[f],o=void 0,c;if(typeof b=== -"string")c=!1;else{var i=h[f.charAt(0)];if(i)o=f.match(i[1]),b=i[0];else{for(c=0;c<t;++c)if(i=m[c],o=f.match(i[1])){b=i[0];break}o||(b="pln")}if((c=b.length>=5&&"lang-"===b.substring(0,5))&&!(o&&typeof o[1]==="string"))c=!1,b="src";c||(r[f]=b)}i=d;d+=f.length;if(c){c=o[1];var j=f.indexOf(c),k=j+c.length;o[2]&&(k=f.length-o[2].length,j=k-c.length);b=b.substring(5);B(l+i,f.substring(0,j),e,p);B(l+i+j,c,C(b,c),p);B(l+i+k,f.substring(k),e,p)}else p.push(l+i,b)}a.e=p}var h={},y;(function(){for(var e=a.concat(m), -l=[],p={},d=0,g=e.length;d<g;++d){var r=e[d],n=r[3];if(n)for(var k=n.length;--k>=0;)h[n.charAt(k)]=r;r=r[1];n=""+r;p.hasOwnProperty(n)||(l.push(r),p[n]=q)}l.push(/[\S\s]/);y=L(l)})();var t=m.length;return e}function u(a){var m=[],e=[];a.tripleQuotedStrings?m.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,q,"'\""]):a.multiLineStrings?m.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/, -q,"'\"`"]):m.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,q,"\"'"]);a.verbatimStrings&&e.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,q]);var h=a.hashComments;h&&(a.cStyleComments?(h>1?m.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,"#"]):m.push(["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,q,"#"]),e.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,q])):m.push(["com",/^#[^\n\r]*/, -q,"#"]));a.cStyleComments&&(e.push(["com",/^\/\/[^\n\r]*/,q]),e.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,q]));a.regexLiterals&&e.push(["lang-regex",/^(?:^^\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\(|\*|\*=|\+=|,|-=|->|\/|\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\^=|\^\^|\^\^=|{|\||\|=|\|\||\|\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);(h=a.types)&&e.push(["typ",h]);a=(""+a.keywords).replace(/^ | $/g, -"");a.length&&e.push(["kwd",RegExp("^(?:"+a.replace(/[\s,]+/g,"|")+")\\b"),q]);m.push(["pln",/^\s+/,q," \r\n\t\xa0"]);e.push(["lit",/^@[$_a-z][\w$@]*/i,q],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,q],["pln",/^[$_a-z][\w$@]*/i,q],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,q,"0123456789"],["pln",/^\\[\S\s]?/,q],["pun",/^.[^\s\w"-$'./@\\`]*/,q]);return x(m,e)}function D(a,m){function e(a){switch(a.nodeType){case 1:if(k.test(a.className))break;if("BR"===a.nodeName)h(a), -a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)e(a);break;case 3:case 4:if(p){var b=a.nodeValue,d=b.match(t);if(d){var c=b.substring(0,d.index);a.nodeValue=c;(b=b.substring(d.index+d[0].length))&&a.parentNode.insertBefore(s.createTextNode(b),a.nextSibling);h(a);c||a.parentNode.removeChild(a)}}}}function h(a){function b(a,d){var e=d?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),g=a.nextSibling;f.appendChild(e);for(var h=g;h;h=g)g=h.nextSibling,f.appendChild(h)}return e} -for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),e;(e=a.parentNode)&&e.nodeType===1;)a=e;d.push(a)}var k=/(?:^|\s)nocode(?:\s|$)/,t=/\r\n?|\n/,s=a.ownerDocument,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=s.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);for(l=s.createElement("LI");a.firstChild;)l.appendChild(a.firstChild);for(var d=[l],g=0;g<d.length;++g)e(d[g]);m===(m|0)&&d[0].setAttribute("value", -m);var r=s.createElement("OL");r.className="linenums";for(var n=Math.max(0,m-1|0)||0,g=0,z=d.length;g<z;++g)l=d[g],l.className="L"+(g+n)%10,l.firstChild||l.appendChild(s.createTextNode("\xa0")),r.appendChild(l);a.appendChild(r)}function k(a,m){for(var e=m.length;--e>=0;){var h=m[e];A.hasOwnProperty(h)?window.console&&console.warn("cannot override language handler %s",h):A[h]=a}}function C(a,m){if(!a||!A.hasOwnProperty(a))a=/^\s*</.test(m)?"default-markup":"default-code";return A[a]}function E(a){var m= -a.g;try{var e=M(a.h),h=e.a;a.a=h;a.c=e.c;a.d=0;C(m,h)(a);var k=/\bMSIE\b/.test(navigator.userAgent),m=/\n/g,t=a.a,s=t.length,e=0,l=a.c,p=l.length,h=0,d=a.e,g=d.length,a=0;d[g]=s;var r,n;for(n=r=0;n<g;)d[n]!==d[n+2]?(d[r++]=d[n++],d[r++]=d[n++]):n+=2;g=r;for(n=r=0;n<g;){for(var z=d[n],f=d[n+1],b=n+2;b+2<=g&&d[b+1]===f;)b+=2;d[r++]=z;d[r++]=f;n=b}for(d.length=r;h<p;){var o=l[h+2]||s,c=d[a+2]||s,b=Math.min(o,c),i=l[h+1],j;if(i.nodeType!==1&&(j=t.substring(e,b))){k&&(j=j.replace(m,"\r"));i.nodeValue= -j;var u=i.ownerDocument,v=u.createElement("SPAN");v.className=d[a+1];var x=i.parentNode;x.replaceChild(v,i);v.appendChild(i);e<o&&(l[h+1]=i=u.createTextNode(t.substring(b,o)),x.insertBefore(i,v.nextSibling))}e=b;e>=o&&(h+=2);e>=c&&(a+=2)}}catch(w){"console"in window&&console.log(w&&w.stack?w.stack:w)}}var v=["break,continue,do,else,for,if,return,while"],w=[[v,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"], -"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],F=[w,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],G=[w,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"], -H=[G,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"],w=[w,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],I=[v,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"], -J=[v,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],v=[v,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],K=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/,N=/\S/,O=u({keywords:[F,H,w,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+ -I,J,v],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),A={};k(O,["default-code"]);k(x([],[["pln",/^[^<?]+/],["dec",/^<!\w[^>]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",/^<xmp\b[^>]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]), -["default-markup","htm","html","mxml","xhtml","xml","xsl"]);k(x([["pln",/^\s+/,q," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,q,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css", -/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);k(x([],[["atv",/^[\S\s]+/]]),["uq.val"]);k(u({keywords:F,hashComments:!0,cStyleComments:!0,types:K}),["c","cc","cpp","cxx","cyc","m"]);k(u({keywords:"null,true,false"}),["json"]);k(u({keywords:H,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:K}),["cs"]);k(u({keywords:G,cStyleComments:!0}),["java"]);k(u({keywords:v,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);k(u({keywords:I,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}), -["cv","py"]);k(u({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl","pl","pm"]);k(u({keywords:J,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb"]);k(u({keywords:w,cStyleComments:!0,regexLiterals:!0}),["js"]);k(u({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes", -hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);k(x([],[["str",/^[\S\s]+/]]),["regex"]);window.prettyPrintOne=function(a,m,e){var h=document.createElement("PRE");h.innerHTML=a;e&&D(h,e);E({g:m,i:e,h:h});return h.innerHTML};window.prettyPrint=function(a){function m(){for(var e=window.PR_SHOULD_USE_CONTINUATION?l.now()+250:Infinity;p<h.length&&l.now()<e;p++){var n=h[p],k=n.className;if(k.indexOf("prettyprint")>=0){var k=k.match(g),f,b;if(b= -!k){b=n;for(var o=void 0,c=b.firstChild;c;c=c.nextSibling)var i=c.nodeType,o=i===1?o?b:c:i===3?N.test(c.nodeValue)?b:o:o;b=(f=o===b?void 0:o)&&"CODE"===f.tagName}b&&(k=f.className.match(g));k&&(k=k[1]);b=!1;for(o=n.parentNode;o;o=o.parentNode)if((o.tagName==="pre"||o.tagName==="code"||o.tagName==="xmp")&&o.className&&o.className.indexOf("prettyprint")>=0){b=!0;break}b||((b=(b=n.className.match(/\blinenums\b(?::(\d+))?/))?b[1]&&b[1].length?+b[1]:!0:!1)&&D(n,b),d={g:k,h:n,i:b},E(d))}}p<h.length?setTimeout(m, -250):a&&a()}for(var e=[document.getElementsByTagName("pre"),document.getElementsByTagName("code"),document.getElementsByTagName("xmp")],h=[],k=0;k<e.length;++k)for(var t=0,s=e[k].length;t<s;++t)h.push(e[k][t]);var e=q,l=Date;l.now||(l={now:function(){return+new Date}});var p=0,d,g=/\blang(?:uage)?-([\w.]+)(?!\S)/;m()};window.PR={createSimpleLexer:x,registerLangHandler:k,sourceDecorator:u,PR_ATTRIB_NAME:"atn",PR_ATTRIB_VALUE:"atv",PR_COMMENT:"com",PR_DECLARATION:"dec",PR_KEYWORD:"kwd",PR_LITERAL:"lit", -PR_NOCODE:"nocode",PR_PLAIN:"pln",PR_PUNCTUATION:"pun",PR_SOURCE:"src",PR_STRING:"str",PR_TAG:"tag",PR_TYPE:"typ"}})(); diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/js/holder/holder.js b/src/main/webapp/bower_components/bootstrap/docs/assets/js/holder/holder.js deleted file mode 100755 index 9c36d428..00000000 --- a/src/main/webapp/bower_components/bootstrap/docs/assets/js/holder/holder.js +++ /dev/null @@ -1,401 +0,0 @@ -/* - -Holder - 1.9 - client side image placeholders -(c) 2012-2013 Ivan Malopinsky / http://imsky.co - -Provided under the Apache 2.0 License: http://www.apache.org/licenses/LICENSE-2.0 -Commercial use requires attribution. - -*/ - -var Holder = Holder || {}; -(function (app, win) { - -var preempted = false, -fallback = false, -canvas = document.createElement('canvas'); - -//getElementsByClassName polyfill -document.getElementsByClassName||(document.getElementsByClassName=function(e){var t=document,n,r,i,s=[];if(t.querySelectorAll)return t.querySelectorAll("."+e);if(t.evaluate){r=".//*[contains(concat(' ', @class, ' '), ' "+e+" ')]",n=t.evaluate(r,t,null,0,null);while(i=n.iterateNext())s.push(i)}else{n=t.getElementsByTagName("*"),r=new RegExp("(^|\\s)"+e+"(\\s|$)");for(i=0;i<n.length;i++)r.test(n[i].className)&&s.push(n[i])}return s}) - -//getComputedStyle polyfill -window.getComputedStyle||(window.getComputedStyle=function(e,t){return this.el=e,this.getPropertyValue=function(t){var n=/(\-([a-z]){1})/g;return t=="float"&&(t="styleFloat"),n.test(t)&&(t=t.replace(n,function(){return arguments[2].toUpperCase()})),e.currentStyle[t]?e.currentStyle[t]:null},this}) - -//http://javascript.nwbox.com/ContentLoaded by Diego Perini with modifications -function contentLoaded(n,t){var l="complete",s="readystatechange",u=!1,h=u,c=!0,i=n.document,a=i.documentElement,e=i.addEventListener?"addEventListener":"attachEvent",v=i.addEventListener?"removeEventListener":"detachEvent",f=i.addEventListener?"":"on",r=function(e){(e.type!=s||i.readyState==l)&&((e.type=="load"?n:i)[v](f+e.type,r,u),!h&&(h=!0)&&t.call(n,null))},o=function(){try{a.doScroll("left")}catch(n){setTimeout(o,50);return}r("poll")};if(i.readyState==l)t.call(n,"lazy");else{if(i.createEventObject&&a.doScroll){try{c=!n.frameElement}catch(y){}c&&o()}i[e](f+"DOMContentLoaded",r,u),i[e](f+s,r,u),n[e](f+"load",r,u)}}; - -//https://gist.github.com/991057 by Jed Schmidt with modifications -function selector(a){ - a=a.match(/^(\W)?(.*)/);var b=document["getElement"+(a[1]?a[1]=="#"?"ById":"sByClassName":"sByTagName")](a[2]); - var ret=[]; b!=null&&(b.length?ret=b:b.length==0?ret=b:ret=[b]); return ret; -} - -//shallow object property extend -function extend(a,b){var c={};for(var d in a)c[d]=a[d];for(var e in b)c[e]=b[e];return c} - -//hasOwnProperty polyfill -if (!Object.prototype.hasOwnProperty) - Object.prototype.hasOwnProperty = function(prop) { - var proto = this.__proto__ || this.constructor.prototype; - return (prop in this) && (!(prop in proto) || proto[prop] !== this[prop]); - } - -function text_size(width, height, template) { - var dimension_arr = [height, width].sort(); - var maxFactor = Math.round(dimension_arr[1] / 16), - minFactor = Math.round(dimension_arr[0] / 16); - var text_height = Math.max(template.size, maxFactor); - return { - height: text_height - } -} - -function draw(ctx, dimensions, template, ratio) { - var ts = text_size(dimensions.width, dimensions.height, template); - var text_height = ts.height; - var width = dimensions.width * ratio, height = dimensions.height * ratio; - var font = template.font ? template.font : "sans-serif"; - canvas.width = width; - canvas.height = height; - ctx.textAlign = "center"; - ctx.textBaseline = "middle"; - ctx.fillStyle = template.background; - ctx.fillRect(0, 0, width, height); - ctx.fillStyle = template.foreground; - ctx.font = "bold " + text_height + "px "+font; - var text = template.text ? template.text : (dimensions.width + "x" + dimensions.height); - if (ctx.measureText(text).width / width > 1) { - text_height = template.size / (ctx.measureText(text).width / width); - } - //Resetting font size if necessary - ctx.font = "bold " + (text_height * ratio) + "px "+font; - ctx.fillText(text, (width / 2), (height / 2), width); - return canvas.toDataURL("image/png"); -} - -function render(mode, el, holder, src) { - var dimensions = holder.dimensions, - theme = holder.theme, - text = holder.text ? decodeURIComponent(holder.text) : holder.text; - var dimensions_caption = dimensions.width + "x" + dimensions.height; - theme = (text ? extend(theme, { text: text }) : theme); - theme = (holder.font ? extend(theme, {font: holder.font}) : theme); - - var ratio = 1; - if(window.devicePixelRatio && window.devicePixelRatio > 1){ - ratio = window.devicePixelRatio; - } - - if (mode == "image") { - el.setAttribute("data-src", src); - el.setAttribute("alt", text ? text : theme.text ? theme.text + " [" + dimensions_caption + "]" : dimensions_caption); - - if(fallback || !holder.auto){ - el.style.width = dimensions.width + "px"; - el.style.height = dimensions.height + "px"; - } - - if (fallback) { - el.style.backgroundColor = theme.background; - - } - else{ - el.setAttribute("src", draw(ctx, dimensions, theme, ratio)); - } - } else { - if (!fallback) { - el.style.backgroundImage = "url(" + draw(ctx, dimensions, theme, ratio) + ")"; - el.style.backgroundSize = dimensions.width+"px "+dimensions.height+"px"; - } - } -}; - -function fluid(el, holder, src) { - var dimensions = holder.dimensions, - theme = holder.theme, - text = holder.text; - var dimensions_caption = dimensions.width + "x" + dimensions.height; - theme = (text ? extend(theme, { - text: text - }) : theme); - - var fluid = document.createElement("div"); - - fluid.style.backgroundColor = theme.background; - fluid.style.color = theme.foreground; - fluid.className = el.className + " holderjs-fluid"; - fluid.style.width = holder.dimensions.width + (holder.dimensions.width.indexOf("%")>0?"":"px"); - fluid.style.height = holder.dimensions.height + (holder.dimensions.height.indexOf("%")>0?"":"px"); - fluid.id = el.id; - - el.style.width=0; - el.style.height=0; - - if (theme.text) { - fluid.appendChild(document.createTextNode(theme.text)) - } else { - fluid.appendChild(document.createTextNode(dimensions_caption)) - fluid_images.push(fluid); - setTimeout(fluid_update, 0); - } - - el.parentNode.insertBefore(fluid, el.nextSibling) - - if(window.jQuery){ - jQuery(function($){ - $(el).on("load", function(){ - el.style.width = fluid.style.width; - el.style.height = fluid.style.height; - $(el).show(); - $(fluid).remove(); - }); - }) - } -} - -function fluid_update() { - for (i in fluid_images) { - if(!fluid_images.hasOwnProperty(i)) continue; - var el = fluid_images[i], - label = el.firstChild; - - el.style.lineHeight = el.offsetHeight+"px"; - label.data = el.offsetWidth + "x" + el.offsetHeight; - } -} - -function parse_flags(flags, options) { - - var ret = { - theme: settings.themes.gray - }, render = false; - - for (sl = flags.length, j = 0; j < sl; j++) { - var flag = flags[j]; - if (app.flags.dimensions.match(flag)) { - render = true; - ret.dimensions = app.flags.dimensions.output(flag); - } else if (app.flags.fluid.match(flag)) { - render = true; - ret.dimensions = app.flags.fluid.output(flag); - ret.fluid = true; - } else if (app.flags.colors.match(flag)) { - ret.theme = app.flags.colors.output(flag); - } else if (options.themes[flag]) { - //If a theme is specified, it will override custom colors - ret.theme = options.themes[flag]; - } else if (app.flags.text.match(flag)) { - ret.text = app.flags.text.output(flag); - } else if(app.flags.font.match(flag)){ - ret.font = app.flags.font.output(flag); - } - else if(app.flags.auto.match(flag)){ - ret.auto = true; - } - } - - return render ? ret : false; - -}; - -if (!canvas.getContext) { - fallback = true; -} else { - if (canvas.toDataURL("image/png") - .indexOf("data:image/png") < 0) { - //Android doesn't support data URI - fallback = true; - } else { - var ctx = canvas.getContext("2d"); - } -} - -var fluid_images = []; - -var settings = { - domain: "holder.js", - images: "img", - bgnodes: ".holderjs", - themes: { - "gray": { - background: "#eee", - foreground: "#aaa", - size: 12 - }, - "social": { - background: "#3a5a97", - foreground: "#fff", - size: 12 - }, - "industrial": { - background: "#434A52", - foreground: "#C2F200", - size: 12 - } - }, - stylesheet: ".holderjs-fluid {font-size:16px;font-weight:bold;text-align:center;font-family:sans-serif;margin:0}" -}; - - -app.flags = { - dimensions: { - regex: /^(\d+)x(\d+)$/, - output: function (val) { - var exec = this.regex.exec(val); - return { - width: +exec[1], - height: +exec[2] - } - } - }, - fluid: { - regex: /^([0-9%]+)x([0-9%]+)$/, - output: function (val) { - var exec = this.regex.exec(val); - return { - width: exec[1], - height: exec[2] - } - } - }, - colors: { - regex: /#([0-9a-f]{3,})\:#([0-9a-f]{3,})/i, - output: function (val) { - var exec = this.regex.exec(val); - return { - size: settings.themes.gray.size, - foreground: "#" + exec[2], - background: "#" + exec[1] - } - } - }, - text: { - regex: /text\:(.*)/, - output: function (val) { - return this.regex.exec(val)[1]; - } - }, - font: { - regex: /font\:(.*)/, - output: function(val){ - return this.regex.exec(val)[1]; - } - }, - auto: { - regex: /^auto$/ - } -} - -for (var flag in app.flags) { - if(!app.flags.hasOwnProperty(flag)) continue; - app.flags[flag].match = function (val) { - return val.match(this.regex) - } -} - -app.add_theme = function (name, theme) { - name != null && theme != null && (settings.themes[name] = theme); - return app; -}; - -app.add_image = function (src, el) { - var node = selector(el); - if (node.length) { - for (var i = 0, l = node.length; i < l; i++) { - var img = document.createElement("img") - img.setAttribute("data-src", src); - node[i].appendChild(img); - } - } - return app; -}; - -app.run = function (o) { - var options = extend(settings, o), images = []; - - if(options.images instanceof window.NodeList){ - imageNodes = options.images; - } - else if(options.images instanceof window.Node){ - imageNodes = [options.images]; - } - else{ - imageNodes = selector(options.images); - } - - if(options.elements instanceof window.NodeList){ - bgnodes = options.bgnodes; - } - else if(options.bgnodes instanceof window.Node){ - bgnodes = [options.bgnodes]; - } - else{ - bgnodes = selector(options.bgnodes); - } - - preempted = true; - - for (i = 0, l = imageNodes.length; i < l; i++) images.push(imageNodes[i]); - - var holdercss = document.getElementById("holderjs-style"); - - if(!holdercss){ - holdercss = document.createElement("style"); - holdercss.setAttribute("id", "holderjs-style"); - holdercss.type = "text/css"; - document.getElementsByTagName("head")[0].appendChild(holdercss); - } - - if(holdercss.styleSheet){ - holdercss.styleSheet += options.stylesheet; - } - else{ - holdercss.textContent+= options.stylesheet; - } - - var cssregex = new RegExp(options.domain + "\/(.*?)\"?\\)"); - - for (var l = bgnodes.length, i = 0; i < l; i++) { - var src = window.getComputedStyle(bgnodes[i], null) - .getPropertyValue("background-image"); - var flags = src.match(cssregex); - if (flags) { - var holder = parse_flags(flags[1].split("/"), options); - if (holder) { - render("background", bgnodes[i], holder, src); - } - } - } - - for (var l = images.length, i = 0; i < l; i++) { - var src = images[i].getAttribute("src") || images[i].getAttribute("data-src"); - if (src != null && src.indexOf(options.domain) >= 0) { - var holder = parse_flags(src.substr(src.lastIndexOf(options.domain) + options.domain.length + 1) - .split("/"), options); - if (holder) { - if (holder.fluid) { - fluid(images[i], holder, src); - } else { - render("image", images[i], holder, src); - } - } - } - } - return app; -}; - -contentLoaded(win, function () { - if (window.addEventListener) { - window.addEventListener("resize", fluid_update, false); - window.addEventListener("orientationchange", fluid_update, false); - } else { - window.attachEvent("onresize", fluid_update) - } - preempted || app.run(); -}); - -if ( typeof define === "function" && define.amd ) { - define( "Holder", [], function () { return app; } ); -} - -})(Holder, window); \ No newline at end of file diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/js/html5shiv.js b/src/main/webapp/bower_components/bootstrap/docs/assets/js/html5shiv.js deleted file mode 100644 index 784f221c..00000000 --- a/src/main/webapp/bower_components/bootstrap/docs/assets/js/html5shiv.js +++ /dev/null @@ -1,8 +0,0 @@ -/* - HTML5 Shiv v3.6.2pre | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed -*/ -(function(l,f){function m(){var a=e.elements;return"string"==typeof a?a.split(" "):a}function i(a){var b=n[a[o]];b||(b={},h++,a[o]=h,n[h]=b);return b}function p(a,b,c){b||(b=f);if(g)return b.createElement(a);c||(c=i(b));b=c.cache[a]?c.cache[a].cloneNode():r.test(a)?(c.cache[a]=c.createElem(a)).cloneNode():c.createElem(a);return b.canHaveChildren&&!s.test(a)?c.frag.appendChild(b):b}function t(a,b){if(!b.cache)b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag(); -a.createElement=function(c){return!e.shivMethods?b.createElem(c):p(c,a,b)};a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+m().join().replace(/\w+/g,function(a){b.createElem(a);b.frag.createElement(a);return'c("'+a+'")'})+");return n}")(e,b.frag)}function q(a){a||(a=f);var b=i(a);if(e.shivCSS&&!j&&!b.hasCSS){var c,d=a;c=d.createElement("p");d=d.getElementsByTagName("head")[0]||d.documentElement;c.innerHTML="x<style>article,aside,figcaption,figure,footer,header,hgroup,nav,section{display:block}mark{background:#FF0;color:#000}</style>"; -c=d.insertBefore(c.lastChild,d.firstChild);b.hasCSS=!!c}g||t(a,b);return a}var k=l.html5||{},s=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,r=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,j,o="_html5shiv",h=0,n={},g;(function(){try{var a=f.createElement("a");a.innerHTML="<xyz></xyz>";j="hidden"in a;var b;if(!(b=1==a.childNodes.length)){f.createElement("a");var c=f.createDocumentFragment();b="undefined"==typeof c.cloneNode|| -"undefined"==typeof c.createDocumentFragment||"undefined"==typeof c.createElement}g=b}catch(d){g=j=!0}})();var e={elements:k.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",version:"3.6.2pre",shivCSS:!1!==k.shivCSS,supportsUnknownElements:g,shivMethods:!1!==k.shivMethods,type:"default",shivDocument:q,createElement:p,createDocumentFragment:function(a,b){a||(a=f);if(g)return a.createDocumentFragment(); -for(var b=b||i(a),c=b.frag.cloneNode(),d=0,e=m(),h=e.length;d<h;d++)c.createElement(e[d]);return c}};l.html5=e;q(f)})(this,document); diff --git a/src/main/webapp/bower_components/bootstrap/docs/assets/js/jquery.js b/src/main/webapp/bower_components/bootstrap/docs/assets/js/jquery.js deleted file mode 100644 index 006e9531..00000000 --- a/src/main/webapp/bower_components/bootstrap/docs/assets/js/jquery.js +++ /dev/null @@ -1,5 +0,0 @@ -/*! jQuery v1.9.1 | (c) 2005, 2012 jQuery Foundation, Inc. | jquery.org/license -//@ sourceMappingURL=jquery.min.map -*/(function(e,t){var n,r,i=typeof t,o=e.document,a=e.location,s=e.jQuery,u=e.$,l={},c=[],p="1.9.1",f=c.concat,d=c.push,h=c.slice,g=c.indexOf,m=l.toString,y=l.hasOwnProperty,v=p.trim,b=function(e,t){return new b.fn.init(e,t,r)},x=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,w=/\S+/g,T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,k=/^[\],:{}\s]*$/,E=/(?:^|:|,)(?:\s*\[)+/g,S=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,A=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,j=/^-ms-/,D=/-([\da-z])/gi,L=function(e,t){return t.toUpperCase()},H=function(e){(o.addEventListener||"load"===e.type||"complete"===o.readyState)&&(q(),b.ready())},q=function(){o.addEventListener?(o.removeEventListener("DOMContentLoaded",H,!1),e.removeEventListener("load",H,!1)):(o.detachEvent("onreadystatechange",H),e.detachEvent("onload",H))};b.fn=b.prototype={jquery:p,constructor:b,init:function(e,n,r){var i,a;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof b?n[0]:n,b.merge(this,b.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:o,!0)),C.test(i[1])&&b.isPlainObject(n))for(i in n)b.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(a=o.getElementById(i[2]),a&&a.parentNode){if(a.id!==i[2])return r.find(e);this.length=1,this[0]=a}return this.context=o,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):b.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),b.makeArray(e,this))},selector:"",length:0,size:function(){return this.length},toArray:function(){return h.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=b.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return b.each(this,e,t)},ready:function(e){return b.ready.promise().done(e),this},slice:function(){return this.pushStack(h.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(b.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:d,sort:[].sort,splice:[].splice},b.fn.init.prototype=b.fn,b.extend=b.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},u=1,l=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},u=2),"object"==typeof s||b.isFunction(s)||(s={}),l===u&&(s=this,--u);l>u;u++)if(null!=(o=arguments[u]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(b.isPlainObject(r)||(n=b.isArray(r)))?(n?(n=!1,a=e&&b.isArray(e)?e:[]):a=e&&b.isPlainObject(e)?e:{},s[i]=b.extend(c,a,r)):r!==t&&(s[i]=r));return s},b.extend({noConflict:function(t){return e.$===b&&(e.$=u),t&&e.jQuery===b&&(e.jQuery=s),b},isReady:!1,readyWait:1,holdReady:function(e){e?b.readyWait++:b.ready(!0)},ready:function(e){if(e===!0?!--b.readyWait:!b.isReady){if(!o.body)return setTimeout(b.ready);b.isReady=!0,e!==!0&&--b.readyWait>0||(n.resolveWith(o,[b]),b.fn.trigger&&b(o).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===b.type(e)},isArray:Array.isArray||function(e){return"array"===b.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[m.call(e)]||"object":typeof e},isPlainObject:function(e){if(!e||"object"!==b.type(e)||e.nodeType||b.isWindow(e))return!1;try{if(e.constructor&&!y.call(e,"constructor")&&!y.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}var r;for(r in e);return r===t||y.call(e,r)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||o;var r=C.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=b.buildFragment([e],t,i),i&&b(i).remove(),b.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=b.trim(n),n&&k.test(n.replace(S,"@").replace(A,"]").replace(E,"")))?Function("return "+n)():(b.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||b.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&b.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(j,"ms-").replace(D,L)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:v&&!v.call("\ufeff\u00a0")?function(e){return null==e?"":v.call(e)}:function(e){return null==e?"":(e+"").replace(T,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?b.merge(n,"string"==typeof e?[e]:e):d.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(g)return g.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return f.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),b.isFunction(e)?(r=h.call(arguments,2),i=function(){return e.apply(n||this,r.concat(h.call(arguments)))},i.guid=e.guid=e.guid||b.guid++,i):t},access:function(e,n,r,i,o,a,s){var u=0,l=e.length,c=null==r;if("object"===b.type(r)){o=!0;for(u in r)b.access(e,n,u,r[u],!0,a,s)}else if(i!==t&&(o=!0,b.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(b(e),n)})),n))for(;l>u;u++)n(e[u],r,s?i:i.call(e[u],u,n(e[u],r)));return o?e:c?n.call(e):l?n(e[0],r):a},now:function(){return(new Date).getTime()}}),b.ready.promise=function(t){if(!n)if(n=b.Deferred(),"complete"===o.readyState)setTimeout(b.ready);else if(o.addEventListener)o.addEventListener("DOMContentLoaded",H,!1),e.addEventListener("load",H,!1);else{o.attachEvent("onreadystatechange",H),e.attachEvent("onload",H);var r=!1;try{r=null==e.frameElement&&o.documentElement}catch(i){}r&&r.doScroll&&function a(){if(!b.isReady){try{r.doScroll("left")}catch(e){return setTimeout(a,50)}q(),b.ready()}}()}return n.promise(t)},b.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){l["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=b.type(e);return b.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=b(o);var _={};function F(e){var t=_[e]={};return b.each(e.match(w)||[],function(e,n){t[n]=!0}),t}b.Callbacks=function(e){e="string"==typeof e?_[e]||F(e):b.extend({},e);var n,r,i,o,a,s,u=[],l=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=u.length,n=!0;u&&o>a;a++)if(u[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,u&&(l?l.length&&c(l.shift()):r?u=[]:p.disable())},p={add:function(){if(u){var t=u.length;(function i(t){b.each(t,function(t,n){var r=b.type(n);"function"===r?e.unique&&p.has(n)||u.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=u.length:r&&(s=t,c(r))}return this},remove:function(){return u&&b.each(arguments,function(e,t){var r;while((r=b.inArray(t,u,r))>-1)u.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?b.inArray(e,u)>-1:!(!u||!u.length)},empty:function(){return u=[],this},disable:function(){return u=l=r=t,this},disabled:function(){return!u},lock:function(){return l=t,r||p.disable(),this},locked:function(){return!l},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],!u||i&&!l||(n?l.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},b.extend({Deferred:function(e){var t=[["resolve","done",b.Callbacks("once memory"),"resolved"],["reject","fail",b.Callbacks("once memory"),"rejected"],["notify","progress",b.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return b.Deferred(function(n){b.each(t,function(t,o){var a=o[0],s=b.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&b.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?b.extend(e,r):r}},i={};return r.pipe=r.then,b.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=h.call(arguments),r=n.length,i=1!==r||e&&b.isFunction(e.promise)?r:0,o=1===i?e:b.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?h.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,u,l;if(r>1)for(s=Array(r),u=Array(r),l=Array(r);r>t;t++)n[t]&&b.isFunction(n[t].promise)?n[t].promise().done(a(t,l,n)).fail(o.reject).progress(a(t,u,s)):--i;return i||o.resolveWith(l,n),o.promise()}}),b.support=function(){var t,n,r,a,s,u,l,c,p,f,d=o.createElement("div");if(d.setAttribute("className","t"),d.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",n=d.getElementsByTagName("*"),r=d.getElementsByTagName("a")[0],!n||!r||!n.length)return{};s=o.createElement("select"),l=s.appendChild(o.createElement("option")),a=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t={getSetAttribute:"t"!==d.className,leadingWhitespace:3===d.firstChild.nodeType,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/top/.test(r.getAttribute("style")),hrefNormalized:"/a"===r.getAttribute("href"),opacity:/^0.5/.test(r.style.opacity),cssFloat:!!r.style.cssFloat,checkOn:!!a.value,optSelected:l.selected,enctype:!!o.createElement("form").enctype,html5Clone:"<:nav></:nav>"!==o.createElement("nav").cloneNode(!0).outerHTML,boxModel:"CSS1Compat"===o.compatMode,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},a.checked=!0,t.noCloneChecked=a.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!l.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}a=o.createElement("input"),a.setAttribute("value",""),t.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),t.radioValue="t"===a.value,a.setAttribute("checked","t"),a.setAttribute("name","t"),u=o.createDocumentFragment(),u.appendChild(a),t.appendChecked=a.checked,t.checkClone=u.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;return d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip,b(function(){var n,r,a,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",u=o.getElementsByTagName("body")[0];u&&(n=o.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",u.appendChild(n).appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",a=d.getElementsByTagName("td"),a[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===a[0].offsetHeight,a[0].style.display="",a[1].style.display="none",t.reliableHiddenOffsets=p&&0===a[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",t.boxSizing=4===d.offsetWidth,t.doesNotIncludeMarginInBodyOffset=1!==u.offsetTop,e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(o.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="<div></div>",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(u.style.zoom=1)),u.removeChild(n),n=d=a=r=null)}),n=s=u=l=r=a=null,t}();var O=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,B=/([A-Z])/g;function P(e,n,r,i){if(b.acceptData(e)){var o,a,s=b.expando,u="string"==typeof n,l=e.nodeType,p=l?b.cache:e,f=l?e[s]:e[s]&&s;if(f&&p[f]&&(i||p[f].data)||!u||r!==t)return f||(l?e[s]=f=c.pop()||b.guid++:f=s),p[f]||(p[f]={},l||(p[f].toJSON=b.noop)),("object"==typeof n||"function"==typeof n)&&(i?p[f]=b.extend(p[f],n):p[f].data=b.extend(p[f].data,n)),o=p[f],i||(o.data||(o.data={}),o=o.data),r!==t&&(o[b.camelCase(n)]=r),u?(a=o[n],null==a&&(a=o[b.camelCase(n)])):a=o,a}}function R(e,t,n){if(b.acceptData(e)){var r,i,o,a=e.nodeType,s=a?b.cache:e,u=a?e[b.expando]:b.expando;if(s[u]){if(t&&(o=n?s[u]:s[u].data)){b.isArray(t)?t=t.concat(b.map(t,b.camelCase)):t in o?t=[t]:(t=b.camelCase(t),t=t in o?[t]:t.split(" "));for(r=0,i=t.length;i>r;r++)delete o[t[r]];if(!(n?$:b.isEmptyObject)(o))return}(n||(delete s[u].data,$(s[u])))&&(a?b.cleanData([e],!0):b.support.deleteExpando||s!=s.window?delete s[u]:s[u]=null)}}}b.extend({cache:{},expando:"jQuery"+(p+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(e){return e=e.nodeType?b.cache[e[b.expando]]:e[b.expando],!!e&&!$(e)},data:function(e,t,n){return P(e,t,n)},removeData:function(e,t){return R(e,t)},_data:function(e,t,n){return P(e,t,n,!0)},_removeData:function(e,t){return R(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&b.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),b.fn.extend({data:function(e,n){var r,i,o=this[0],a=0,s=null;if(e===t){if(this.length&&(s=b.data(o),1===o.nodeType&&!b._data(o,"parsedAttrs"))){for(r=o.attributes;r.length>a;a++)i=r[a].name,i.indexOf("data-")||(i=b.camelCase(i.slice(5)),W(o,i,s[i]));b._data(o,"parsedAttrs",!0)}return s}return"object"==typeof e?this.each(function(){b.data(this,e)}):b.access(this,function(n){return n===t?o?W(o,e,b.data(o,e)):null:(this.each(function(){b.data(this,e,n)}),t)},null,n,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){b.removeData(this,e)})}});function W(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(B,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:O.test(r)?b.parseJSON(r):r}catch(o){}b.data(e,n,r)}else r=t}return r}function $(e){var t;for(t in e)if(("data"!==t||!b.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}b.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=b._data(e,n),r&&(!i||b.isArray(r)?i=b._data(e,n,b.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=b.queue(e,t),r=n.length,i=n.shift(),o=b._queueHooks(e,t),a=function(){b.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),o.cur=i,i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return b._data(e,n)||b._data(e,n,{empty:b.Callbacks("once memory").add(function(){b._removeData(e,t+"queue"),b._removeData(e,n)})})}}),b.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?b.queue(this[0],e):n===t?this:this.each(function(){var t=b.queue(this,e,n);b._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&b.dequeue(this,e)})},dequeue:function(e){return this.each(function(){b.dequeue(this,e)})},delay:function(e,t){return e=b.fx?b.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=b.Deferred(),a=this,s=this.length,u=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=b._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(u));return u(),o.promise(n)}});var I,z,X=/[\t\r\n]/g,U=/\r/g,V=/^(?:input|select|textarea|button|object)$/i,Y=/^(?:a|area)$/i,J=/^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i,G=/^(?:checked|selected)$/i,Q=b.support.getSetAttribute,K=b.support.input;b.fn.extend({attr:function(e,t){return b.access(this,b.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})},prop:function(e,t){return b.access(this,b.prop,e,t,arguments.length>1)},removeProp:function(e){return e=b.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,u="string"==typeof e&&e;if(b.isFunction(e))return this.each(function(t){b(this).addClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(X," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=b.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,u=0===arguments.length||"string"==typeof e&&e;if(b.isFunction(e))return this.each(function(t){b(this).removeClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(X," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?b.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e,r="boolean"==typeof t;return b.isFunction(e)?this.each(function(n){b(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var o,a=0,s=b(this),u=t,l=e.match(w)||[];while(o=l[a++])u=r?u:!s.hasClass(o),s[u?"addClass":"removeClass"](o)}else(n===i||"boolean"===n)&&(this.className&&b._data(this,"__className__",this.className),this.className=this.className||e===!1?"":b._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(X," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=b.isFunction(e),this.each(function(n){var o,a=b(this);1===this.nodeType&&(o=i?e.call(this,n,a.val()):e,null==o?o="":"number"==typeof o?o+="":b.isArray(o)&&(o=b.map(o,function(e){return null==e?"":e+""})),r=b.valHooks[this.type]||b.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=b.valHooks[o.type]||b.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(U,""):null==n?"":n)}}}),b.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,u=0>i?s:o?i:0;for(;s>u;u++)if(n=r[u],!(!n.selected&&u!==i||(b.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&b.nodeName(n.parentNode,"optgroup"))){if(t=b(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n=b.makeArray(t);return b(e).find("option").each(function(){this.selected=b.inArray(b(this).val(),n)>=0}),n.length||(e.selectedIndex=-1),n}}},attr:function(e,n,r){var o,a,s,u=e.nodeType;if(e&&3!==u&&8!==u&&2!==u)return typeof e.getAttribute===i?b.prop(e,n,r):(a=1!==u||!b.isXMLDoc(e),a&&(n=n.toLowerCase(),o=b.attrHooks[n]||(J.test(n)?z:I)),r===t?o&&a&&"get"in o&&null!==(s=o.get(e,n))?s:(typeof e.getAttribute!==i&&(s=e.getAttribute(n)),null==s?t:s):null!==r?o&&a&&"set"in o&&(s=o.set(e,r,n))!==t?s:(e.setAttribute(n,r+""),r):(b.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(w);if(o&&1===e.nodeType)while(n=o[i++])r=b.propFix[n]||n,J.test(n)?!Q&&G.test(n)?e[b.camelCase("default-"+n)]=e[r]=!1:e[r]=!1:b.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!b.support.radioValue&&"radio"===t&&b.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},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(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!b.isXMLDoc(e),a&&(n=b.propFix[n]||n,o=b.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var n=e.getAttributeNode("tabindex");return n&&n.specified?parseInt(n.value,10):V.test(e.nodeName)||Y.test(e.nodeName)&&e.href?0:t}}}}),z={get:function(e,n){var r=b.prop(e,n),i="boolean"==typeof r&&e.getAttribute(n),o="boolean"==typeof r?K&&Q?null!=i:G.test(n)?e[b.camelCase("default-"+n)]:!!i:e.getAttributeNode(n);return o&&o.value!==!1?n.toLowerCase():t},set:function(e,t,n){return t===!1?b.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&b.propFix[n]||n,n):e[b.camelCase("default-"+n)]=e[n]=!0,n}},K&&Q||(b.attrHooks.value={get:function(e,n){var r=e.getAttributeNode(n);return b.nodeName(e,"input")?e.defaultValue:r&&r.specified?r.value:t},set:function(e,n,r){return b.nodeName(e,"input")?(e.defaultValue=n,t):I&&I.set(e,n,r)}}),Q||(I=b.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&("id"===n||"name"===n||"coords"===n?""!==r.value:r.specified)?r.value:t},set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},b.attrHooks.contenteditable={get:I.get,set:function(e,t,n){I.set(e,""===t?!1:t,n)}},b.each(["width","height"],function(e,n){b.attrHooks[n]=b.extend(b.attrHooks[n],{set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}})})),b.support.hrefNormalized||(b.each(["href","src","width","height"],function(e,n){b.attrHooks[n]=b.extend(b.attrHooks[n],{get:function(e){var r=e.getAttribute(n,2);return null==r?t:r}})}),b.each(["href","src"],function(e,t){b.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}})),b.support.style||(b.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),b.support.optSelected||(b.propHooks.selected=b.extend(b.propHooks.selected,{get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}})),b.support.enctype||(b.propFix.enctype="encoding"),b.support.checkOn||b.each(["radio","checkbox"],function(){b.valHooks[this]={get:function(e){return null===e.getAttribute("value")?"on":e.value}}}),b.each(["radio","checkbox"],function(){b.valHooks[this]=b.extend(b.valHooks[this],{set:function(e,n){return b.isArray(n)?e.checked=b.inArray(b(e).val(),n)>=0:t}})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}b.event={global:{},add:function(e,n,r,o,a){var s,u,l,c,p,f,d,h,g,m,y,v=b._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=b.guid++),(u=v.events)||(u=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof b===i||e&&b.event.triggered===e.type?t:b.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(w)||[""],l=n.length;while(l--)s=rt.exec(n[l])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),p=b.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=b.event.special[g]||{},d=b.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&b.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=u[g])||(h=u[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),b.event.global[g]=!0;e=null}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,p,f,d,h,g,m=b.hasData(e)&&b._data(e);if(m&&(c=m.events)){t=(t||"").match(w)||[""],l=t.length;while(l--)if(s=rt.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=b.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),u=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));u&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||b.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)b.event.remove(e,d+t[l],n,r,!0);b.isEmptyObject(c)&&(delete m.handle,b._removeData(e,"events"))}},trigger:function(n,r,i,a){var s,u,l,c,p,f,d,h=[i||o],g=y.call(n,"type")?n.type:n,m=y.call(n,"namespace")?n.namespace.split("."):[];if(l=f=i=i||o,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+b.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),u=0>g.indexOf(":")&&"on"+g,n=n[b.expando]?n:new b.Event(g,"object"==typeof n&&n),n.isTrigger=!0,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:b.makeArray(r,[n]),p=b.event.special[g]||{},a||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!a&&!p.noBubble&&!b.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(l=l.parentNode);l;l=l.parentNode)h.push(l),f=l;f===(i.ownerDocument||o)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((l=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(b._data(l,"events")||{})[n.type]&&b._data(l,"handle"),s&&s.apply(l,r),s=u&&l[u],s&&b.acceptData(l)&&s.apply&&s.apply(l,r)===!1&&n.preventDefault();if(n.type=g,!(a||n.isDefaultPrevented()||p._default&&p._default.apply(i.ownerDocument,r)!==!1||"click"===g&&b.nodeName(i,"a")||!b.acceptData(i)||!u||!i[g]||b.isWindow(i))){f=i[u],f&&(i[u]=null),b.event.triggered=g;try{i[g]()}catch(v){}b.event.triggered=t,f&&(i[u]=f)}return n.result}},dispatch:function(e){e=b.event.fix(e);var n,r,i,o,a,s=[],u=h.call(arguments),l=(b._data(this,"events")||{})[e.type]||[],c=b.event.special[e.type]||{};if(u[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=b.event.handlers.call(this,e,l),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((b.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,u),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],u=n.delegateCount,l=e.target;if(u&&l.nodeType&&(!e.button||"click"!==e.type))for(;l!=this;l=l.parentNode||this)if(1===l.nodeType&&(l.disabled!==!0||"click"!==e.type)){for(o=[],a=0;u>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?b(r,this).index(l)>=0:b.find(r,this,null,[l]).length),o[r]&&o.push(i);o.length&&s.push({elem:l,handlers:o})}return n.length>u&&s.push({elem:this,handlers:n.slice(u)}),s},fix:function(e){if(e[b.expando])return e;var t,n,r,i=e.type,a=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new b.Event(a),t=r.length;while(t--)n=r[t],e[n]=a[n];return e.target||(e.target=a.srcElement||o),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,a):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,a,s=n.button,u=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||o,a=i.documentElement,r=i.body,e.pageX=n.clientX+(a&&a.scrollLeft||r&&r.scrollLeft||0)-(a&&a.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(a&&a.scrollTop||r&&r.scrollTop||0)-(a&&a.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&u&&(e.relatedTarget=u===e.target?n.toElement:u),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},click:{trigger:function(){return b.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t}},focus:{trigger:function(){if(this!==o.activeElement&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===o.activeElement&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=b.extend(new b.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?b.event.trigger(i,null,t):b.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},b.removeEvent=o.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},b.Event=function(e,n){return this instanceof b.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&b.extend(this,n),this.timeStamp=e&&e.timeStamp||b.now(),this[b.expando]=!0,t):new b.Event(e,n)},b.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},b.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){b.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj; -return(!i||i!==r&&!b.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),b.support.submitBubbles||(b.event.special.submit={setup:function(){return b.nodeName(this,"form")?!1:(b.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=b.nodeName(n,"input")||b.nodeName(n,"button")?n.form:t;r&&!b._data(r,"submitBubbles")&&(b.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),b._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&b.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return b.nodeName(this,"form")?!1:(b.event.remove(this,"._submit"),t)}}),b.support.changeBubbles||(b.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(b.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),b.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),b.event.simulate("change",this,e,!0)})),!1):(b.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!b._data(t,"changeBubbles")&&(b.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||b.event.simulate("change",this.parentNode,e,!0)}),b._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return b.event.remove(this,"._change"),!Z.test(this.nodeName)}}),b.support.focusinBubbles||b.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){b.event.simulate(t,e.target,b.event.fix(e),!0)};b.event.special[t]={setup:function(){0===n++&&o.addEventListener(e,r,!0)},teardown:function(){0===--n&&o.removeEventListener(e,r,!0)}}}),b.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return b().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=b.guid++)),this.each(function(){b.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,b(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){b.event.remove(this,e,r,n)})},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},trigger:function(e,t){return this.each(function(){b.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?b.event.trigger(e,n,r,!0):t}}),function(e,t){var n,r,i,o,a,s,u,l,c,p,f,d,h,g,m,y,v,x="sizzle"+-new Date,w=e.document,T={},N=0,C=0,k=it(),E=it(),S=it(),A=typeof t,j=1<<31,D=[],L=D.pop,H=D.push,q=D.slice,M=D.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},_="[\\x20\\t\\r\\n\\f]",F="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=F.replace("w","w#"),B="([*^$|!~]?=)",P="\\["+_+"*("+F+")"+_+"*(?:"+B+_+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+O+")|)|)"+_+"*\\]",R=":("+F+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+P.replace(3,8)+")*)|.*)\\)|)",W=RegExp("^"+_+"+|((?:^|[^\\\\])(?:\\\\.)*)"+_+"+$","g"),$=RegExp("^"+_+"*,"+_+"*"),I=RegExp("^"+_+"*([\\x20\\t\\r\\n\\f>+~])"+_+"*"),z=RegExp(R),X=RegExp("^"+O+"$"),U={ID:RegExp("^#("+F+")"),CLASS:RegExp("^\\.("+F+")"),NAME:RegExp("^\\[name=['\"]?("+F+")['\"]?\\]"),TAG:RegExp("^("+F.replace("w","w*")+")"),ATTR:RegExp("^"+P),PSEUDO:RegExp("^"+R),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+_+"*(even|odd|(([+-]|)(\\d*)n|)"+_+"*(?:([+-]|)"+_+"*(\\d+)|))"+_+"*\\)|)","i"),needsContext:RegExp("^"+_+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+_+"*((?:-\\d)?\\d*)"+_+"*\\)|)(?=[^-]|$)","i")},V=/[\x20\t\r\n\f]*[+~]/,Y=/^[^{]+\{\s*\[native code/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,G=/^(?:input|select|textarea|button)$/i,Q=/^h\d$/i,K=/'|\\/g,Z=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,et=/\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,tt=function(e,t){var n="0x"+t-65536;return n!==n?t:0>n?String.fromCharCode(n+65536):String.fromCharCode(55296|n>>10,56320|1023&n)};try{q.call(w.documentElement.childNodes,0)[0].nodeType}catch(nt){q=function(e){var t,n=[];while(t=this[e++])n.push(t);return n}}function rt(e){return Y.test(e+"")}function it(){var e,t=[];return e=function(n,r){return t.push(n+=" ")>i.cacheLength&&delete e[t.shift()],e[n]=r}}function ot(e){return e[x]=!0,e}function at(e){var t=p.createElement("div");try{return e(t)}catch(n){return!1}finally{t=null}}function st(e,t,n,r){var i,o,a,s,u,l,f,g,m,v;if((t?t.ownerDocument||t:w)!==p&&c(t),t=t||p,n=n||[],!e||"string"!=typeof e)return n;if(1!==(s=t.nodeType)&&9!==s)return[];if(!d&&!r){if(i=J.exec(e))if(a=i[1]){if(9===s){if(o=t.getElementById(a),!o||!o.parentNode)return n;if(o.id===a)return n.push(o),n}else if(t.ownerDocument&&(o=t.ownerDocument.getElementById(a))&&y(t,o)&&o.id===a)return n.push(o),n}else{if(i[2])return H.apply(n,q.call(t.getElementsByTagName(e),0)),n;if((a=i[3])&&T.getByClassName&&t.getElementsByClassName)return H.apply(n,q.call(t.getElementsByClassName(a),0)),n}if(T.qsa&&!h.test(e)){if(f=!0,g=x,m=t,v=9===s&&e,1===s&&"object"!==t.nodeName.toLowerCase()){l=ft(e),(f=t.getAttribute("id"))?g=f.replace(K,"\\$&"):t.setAttribute("id",g),g="[id='"+g+"'] ",u=l.length;while(u--)l[u]=g+dt(l[u]);m=V.test(e)&&t.parentNode||t,v=l.join(",")}if(v)try{return H.apply(n,q.call(m.querySelectorAll(v),0)),n}catch(b){}finally{f||t.removeAttribute("id")}}}return wt(e.replace(W,"$1"),t,n,r)}a=st.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},c=st.setDocument=function(e){var n=e?e.ownerDocument||e:w;return n!==p&&9===n.nodeType&&n.documentElement?(p=n,f=n.documentElement,d=a(n),T.tagNameNoComments=at(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),T.attributes=at(function(e){e.innerHTML="<select></select>";var t=typeof e.lastChild.getAttribute("multiple");return"boolean"!==t&&"string"!==t}),T.getByClassName=at(function(e){return e.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",e.getElementsByClassName&&e.getElementsByClassName("e").length?(e.lastChild.className="e",2===e.getElementsByClassName("e").length):!1}),T.getByName=at(function(e){e.id=x+0,e.innerHTML="<a name='"+x+"'></a><div name='"+x+"'></div>",f.insertBefore(e,f.firstChild);var t=n.getElementsByName&&n.getElementsByName(x).length===2+n.getElementsByName(x+0).length;return T.getIdNotName=!n.getElementById(x),f.removeChild(e),t}),i.attrHandle=at(function(e){return e.innerHTML="<a href='#'></a>",e.firstChild&&typeof e.firstChild.getAttribute!==A&&"#"===e.firstChild.getAttribute("href")})?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},T.getIdNotName?(i.find.ID=function(e,t){if(typeof t.getElementById!==A&&!d){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){return e.getAttribute("id")===t}}):(i.find.ID=function(e,n){if(typeof n.getElementById!==A&&!d){var r=n.getElementById(e);return r?r.id===e||typeof r.getAttributeNode!==A&&r.getAttributeNode("id").value===e?[r]:t:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){var n=typeof e.getAttributeNode!==A&&e.getAttributeNode("id");return n&&n.value===t}}),i.find.TAG=T.tagNameNoComments?function(e,n){return typeof n.getElementsByTagName!==A?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},i.find.NAME=T.getByName&&function(e,n){return typeof n.getElementsByName!==A?n.getElementsByName(name):t},i.find.CLASS=T.getByClassName&&function(e,n){return typeof n.getElementsByClassName===A||d?t:n.getElementsByClassName(e)},g=[],h=[":focus"],(T.qsa=rt(n.querySelectorAll))&&(at(function(e){e.innerHTML="<select><option selected=''></option></select>",e.querySelectorAll("[selected]").length||h.push("\\["+_+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||h.push(":checked")}),at(function(e){e.innerHTML="<input type='hidden' i=''/>",e.querySelectorAll("[i^='']").length&&h.push("[*^$]="+_+"*(?:\"\"|'')"),e.querySelectorAll(":enabled").length||h.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),h.push(",.*:")})),(T.matchesSelector=rt(m=f.matchesSelector||f.mozMatchesSelector||f.webkitMatchesSelector||f.oMatchesSelector||f.msMatchesSelector))&&at(function(e){T.disconnectedMatch=m.call(e,"div"),m.call(e,"[s!='']:x"),g.push("!=",R)}),h=RegExp(h.join("|")),g=RegExp(g.join("|")),y=rt(f.contains)||f.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},v=f.compareDocumentPosition?function(e,t){var r;return e===t?(u=!0,0):(r=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t))?1&r||e.parentNode&&11===e.parentNode.nodeType?e===n||y(w,e)?-1:t===n||y(w,t)?1:0:4&r?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return u=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:0;if(o===a)return ut(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?ut(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},u=!1,[0,0].sort(v),T.detectDuplicates=u,p):p},st.matches=function(e,t){return st(e,null,null,t)},st.matchesSelector=function(e,t){if((e.ownerDocument||e)!==p&&c(e),t=t.replace(Z,"='$1']"),!(!T.matchesSelector||d||g&&g.test(t)||h.test(t)))try{var n=m.call(e,t);if(n||T.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(r){}return st(t,p,null,[e]).length>0},st.contains=function(e,t){return(e.ownerDocument||e)!==p&&c(e),y(e,t)},st.attr=function(e,t){var n;return(e.ownerDocument||e)!==p&&c(e),d||(t=t.toLowerCase()),(n=i.attrHandle[t])?n(e):d||T.attributes?e.getAttribute(t):((n=e.getAttributeNode(t))||e.getAttribute(t))&&e[t]===!0?t:n&&n.specified?n.value:null},st.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},st.uniqueSort=function(e){var t,n=[],r=1,i=0;if(u=!T.detectDuplicates,e.sort(v),u){for(;t=e[r];r++)t===e[r-1]&&(i=n.push(r));while(i--)e.splice(n[i],1)}return e};function ut(e,t){var n=t&&e,r=n&&(~t.sourceIndex||j)-(~e.sourceIndex||j);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function lt(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function ct(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function pt(e){return ot(function(t){return t=+t,ot(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}o=st.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=o(t);return n},i=st.selectors={cacheLength:50,createPseudo:ot,match:U,find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(et,tt),e[3]=(e[4]||e[5]||"").replace(et,tt),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||st.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&st.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&&e[2];return U.CHILD.test(e[0])?null:(e[4]?e[2]=e[4]:n&&z.test(n)&&(t=ft(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){return"*"===e?function(){return!0}:(e=e.replace(et,tt).toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=k[e+" "];return t||(t=RegExp("(^|"+_+")"+e+"("+_+"|$)"))&&k(e,function(e){return t.test(e.className||typeof e.getAttribute!==A&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=st.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!u&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[x]||(m[x]={}),l=c[e]||[],d=l[0]===N&&l[1],f=l[0]===N&&l[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[N,d,f];break}}else if(v&&(l=(t[x]||(t[x]={}))[e])&&l[0]===N)f=l[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[x]||(p[x]={}))[e]=[N,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||st.error("unsupported pseudo: "+e);return r[x]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?ot(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=M.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:ot(function(e){var t=[],n=[],r=s(e.replace(W,"$1"));return r[x]?ot(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:ot(function(e){return function(t){return st(e,t).length>0}}),contains:ot(function(e){return function(t){return(t.textContent||t.innerText||o(t)).indexOf(e)>-1}}),lang:ot(function(e){return X.test(e||"")||st.error("unsupported lang: "+e),e=e.replace(et,tt).toLowerCase(),function(t){var n;do if(n=d?t.getAttribute("xml:lang")||t.getAttribute("lang"):t.lang)return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===f},focus:function(e){return e===p.activeElement&&(!p.hasFocus||p.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!i.pseudos.empty(e)},header:function(e){return Q.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:pt(function(){return[0]}),last:pt(function(e,t){return[t-1]}),eq:pt(function(e,t,n){return[0>n?n+t:n]}),even:pt(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:pt(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:pt(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:pt(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}};for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})i.pseudos[n]=lt(n);for(n in{submit:!0,reset:!0})i.pseudos[n]=ct(n);function ft(e,t){var n,r,o,a,s,u,l,c=E[e+" "];if(c)return t?0:c.slice(0);s=e,u=[],l=i.preFilter;while(s){(!n||(r=$.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),u.push(o=[])),n=!1,(r=I.exec(s))&&(n=r.shift(),o.push({value:n,type:r[0].replace(W," ")}),s=s.slice(n.length));for(a in i.filter)!(r=U[a].exec(s))||l[a]&&!(r=l[a](r))||(n=r.shift(),o.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?st.error(e):E(e,u).slice(0)}function dt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function ht(e,t,n){var i=t.dir,o=n&&"parentNode"===i,a=C++;return t.first?function(t,n,r){while(t=t[i])if(1===t.nodeType||o)return e(t,n,r)}:function(t,n,s){var u,l,c,p=N+" "+a;if(s){while(t=t[i])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[i])if(1===t.nodeType||o)if(c=t[x]||(t[x]={}),(l=c[i])&&l[0]===p){if((u=l[1])===!0||u===r)return u===!0}else if(l=c[i]=[p],l[1]=e(t,n,s)||r,l[1]===!0)return!0}}function gt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function mt(e,t,n,r,i){var o,a=[],s=0,u=e.length,l=null!=t;for(;u>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),l&&t.push(s));return a}function yt(e,t,n,r,i,o){return r&&!r[x]&&(r=yt(r)),i&&!i[x]&&(i=yt(i,o)),ot(function(o,a,s,u){var l,c,p,f=[],d=[],h=a.length,g=o||xt(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:mt(g,f,e,s,u),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,u),r){l=mt(y,d),r(l,[],s,u),c=l.length;while(c--)(p=l[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){l=[],c=y.length;while(c--)(p=y[c])&&l.push(m[c]=p);i(null,y=[],l,u)}c=y.length;while(c--)(p=y[c])&&(l=i?M.call(o,p):f[c])>-1&&(o[l]=!(a[l]=p))}}else y=mt(y===a?y.splice(h,y.length):y),i?i(null,a,y,u):H.apply(a,y)})}function vt(e){var t,n,r,o=e.length,a=i.relative[e[0].type],s=a||i.relative[" "],u=a?1:0,c=ht(function(e){return e===t},s,!0),p=ht(function(e){return M.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;o>u;u++)if(n=i.relative[e[u].type])f=[ht(gt(f),n)];else{if(n=i.filter[e[u].type].apply(null,e[u].matches),n[x]){for(r=++u;o>r;r++)if(i.relative[e[r].type])break;return yt(u>1&>(f),u>1&&dt(e.slice(0,u-1)).replace(W,"$1"),n,r>u&&vt(e.slice(u,r)),o>r&&vt(e=e.slice(r)),o>r&&dt(e))}f.push(n)}return gt(f)}function bt(e,t){var n=0,o=t.length>0,a=e.length>0,s=function(s,u,c,f,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,T=l,C=s||a&&i.find.TAG("*",d&&u.parentNode||u),k=N+=null==T?1:Math.random()||.1;for(w&&(l=u!==p&&u,r=n);null!=(h=C[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,u,c)){f.push(h);break}w&&(N=k,r=++n)}o&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,o&&b!==v){g=0;while(m=t[g++])m(x,y,u,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=L.call(f));y=mt(y)}H.apply(f,y),w&&!s&&y.length>0&&v+t.length>1&&st.uniqueSort(f)}return w&&(N=k,l=T),x};return o?ot(s):s}s=st.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=ft(e)),n=t.length;while(n--)o=vt(t[n]),o[x]?r.push(o):i.push(o);o=S(e,bt(i,r))}return o};function xt(e,t,n){var r=0,i=t.length;for(;i>r;r++)st(e,t[r],n);return n}function wt(e,t,n,r){var o,a,u,l,c,p=ft(e);if(!r&&1===p.length){if(a=p[0]=p[0].slice(0),a.length>2&&"ID"===(u=a[0]).type&&9===t.nodeType&&!d&&i.relative[a[1].type]){if(t=i.find.ID(u.matches[0].replace(et,tt),t)[0],!t)return n;e=e.slice(a.shift().value.length)}o=U.needsContext.test(e)?0:a.length;while(o--){if(u=a[o],i.relative[l=u.type])break;if((c=i.find[l])&&(r=c(u.matches[0].replace(et,tt),V.test(a[0].type)&&t.parentNode||t))){if(a.splice(o,1),e=r.length&&dt(a),!e)return H.apply(n,q.call(r,0)),n;break}}}return s(e,p)(r,t,d,n,V.test(e)),n}i.pseudos.nth=i.pseudos.eq;function Tt(){}i.filters=Tt.prototype=i.pseudos,i.setFilters=new Tt,c(),st.attr=b.attr,b.find=st,b.expr=st.selectors,b.expr[":"]=b.expr.pseudos,b.unique=st.uniqueSort,b.text=st.getText,b.isXMLDoc=st.isXML,b.contains=st.contains}(e);var at=/Until$/,st=/^(?:parents|prev(?:Until|All))/,ut=/^.[^:#\[\.,]*$/,lt=b.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};b.fn.extend({find:function(e){var t,n,r,i=this.length;if("string"!=typeof e)return r=this,this.pushStack(b(e).filter(function(){for(t=0;i>t;t++)if(b.contains(r[t],this))return!0}));for(n=[],t=0;i>t;t++)b.find(e,this[t],n);return n=this.pushStack(i>1?b.unique(n):n),n.selector=(this.selector?this.selector+" ":"")+e,n},has:function(e){var t,n=b(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(b.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e,!1))},filter:function(e){return this.pushStack(ft(this,e,!0))},is:function(e){return!!e&&("string"==typeof e?lt.test(e)?b(e,this.context).index(this[0])>=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(e,t){var n,r=0,i=this.length,o=[],a=lt.test(e)||"string"!=typeof e?b(e,t||this.context):0;for(;i>r;r++){n=this[r];while(n&&n.ownerDocument&&n!==t&&11!==n.nodeType){if(a?a.index(n)>-1:b.find.matchesSelector(n,e)){o.push(n);break}n=n.parentNode}}return this.pushStack(o.length>1?b.unique(o):o)},index:function(e){return e?"string"==typeof e?b.inArray(this[0],b(e)):b.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?b(e,t):b.makeArray(e&&e.nodeType?[e]:e),r=b.merge(this.get(),n);return this.pushStack(b.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),b.fn.andSelf=b.fn.addBack;function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}b.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(e,t,n){return b.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(e,t,n){return b.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return b.dir(e,"previousSibling",n)},siblings:function(e){return b.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.merge([],e.childNodes)}},function(e,t){b.fn[e]=function(n,r){var i=b.map(this,t,n);return at.test(e)||(r=n),r&&"string"==typeof r&&(i=b.filter(r,i)),i=this.length>1&&!ct[e]?b.unique(i):i,this.length>1&&st.test(e)&&(i=i.reverse()),this.pushStack(i)}}),b.extend({filter:function(e,t,n){return n&&(e=":not("+e+")"),1===t.length?b.find.matchesSelector(t[0],e)?[t[0]]:[]:b.find.matches(e,t)},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!b(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(t=t||0,b.isFunction(t))return b.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return b.grep(e,function(e){return e===t===n});if("string"==typeof t){var r=b.grep(e,function(e){return 1===e.nodeType});if(ut.test(t))return b.filter(t,r,!n);t=b.filter(t,r)}return b.grep(e,function(e){return b.inArray(e,t)>=0===n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/<tbody/i,wt=/<|&#?\w+;/,Tt=/<(?:script|style|link)/i,Nt=/^(?:checkbox|radio)$/i,Ct=/checked\s*(?:[^=]|=\s*.checked.)/i,kt=/^$|\/(?:java|ecma)script/i,Et=/^true\/(.*)/,St=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,At={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:b.support.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},jt=dt(o),Dt=jt.appendChild(o.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,b.fn.extend({text:function(e){return b.access(this,function(e){return e===t?b.text(this):this.empty().append((this[0]&&this[0].ownerDocument||o).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(b.isFunction(e))return this.each(function(t){b(this).wrapAll(e.call(this,t))});if(this[0]){var t=b(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return b.isFunction(e)?this.each(function(t){b(this).wrapInner(e.call(this,t))}):this.each(function(){var t=b(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=b.isFunction(e);return this.each(function(n){b(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){b.nodeName(this,"body")||b(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.appendChild(e)})},prepend:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.insertBefore(e,this.firstChild)})},before:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=0;for(;null!=(n=this[r]);r++)(!e||b.filter(e,[n]).length>0)&&(t||1!==n.nodeType||b.cleanData(Ot(n)),n.parentNode&&(t&&b.contains(n.ownerDocument,n)&&Mt(Ot(n,"script")),n.parentNode.removeChild(n)));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&b.cleanData(Ot(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&b.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return b.clone(this,e,t)})},html:function(e){return b.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!b.support.htmlSerialize&&mt.test(e)||!b.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1></$2>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(b.cleanData(Ot(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(e){var t=b.isFunction(e);return t||"string"==typeof e||(e=b(e).not(this).detach()),this.domManip([e],!0,function(e){var t=this.nextSibling,n=this.parentNode;n&&(b(this).remove(),n.insertBefore(e,t))})},detach:function(e){return this.remove(e,!0)},domManip:function(e,n,r){e=f.apply([],e);var i,o,a,s,u,l,c=0,p=this.length,d=this,h=p-1,g=e[0],m=b.isFunction(g);if(m||!(1>=p||"string"!=typeof g||b.support.checkClone)&&Ct.test(g))return this.each(function(i){var o=d.eq(i);m&&(e[0]=g.call(this,i,n?o.html():t)),o.domManip(e,n,r)});if(p&&(l=b.buildFragment(e,this[0].ownerDocument,!1,this),i=l.firstChild,1===l.childNodes.length&&(l=i),i)){for(n=n&&b.nodeName(i,"tr"),s=b.map(Ot(l,"script"),Ht),a=s.length;p>c;c++)o=l,c!==h&&(o=b.clone(o,!0,!0),a&&b.merge(s,Ot(o,"script"))),r.call(n&&b.nodeName(this[c],"table")?Lt(this[c],"tbody"):this[c],o,c);if(a)for(u=s[s.length-1].ownerDocument,b.map(s,qt),c=0;a>c;c++)o=s[c],kt.test(o.type||"")&&!b._data(o,"globalEval")&&b.contains(u,o)&&(o.src?b.ajax({url:o.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):b.globalEval((o.text||o.textContent||o.innerHTML||"").replace(St,"")));l=i=null}return this}});function Lt(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function Ht(e){var t=e.getAttributeNode("type");return e.type=(t&&t.specified)+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function Mt(e,t){var n,r=0;for(;null!=(n=e[r]);r++)b._data(n,"globalEval",!t||b._data(t[r],"globalEval"))}function _t(e,t){if(1===t.nodeType&&b.hasData(e)){var n,r,i,o=b._data(e),a=b._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)b.event.add(t,n,s[n][r])}a.data&&(a.data=b.extend({},a.data))}}function Ft(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!b.support.noCloneEvent&&t[b.expando]){i=b._data(t);for(r in i.events)b.removeEvent(t,r,i.handle);t.removeAttribute(b.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),b.support.html5Clone&&e.innerHTML&&!b.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Nt.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}b.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){b.fn[e]=function(e){var n,r=0,i=[],o=b(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),b(o[r])[t](n),d.apply(i,n.get());return this.pushStack(i)}});function Ot(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||b.nodeName(o,n)?s.push(o):b.merge(s,Ot(o,n));return n===t||n&&b.nodeName(e,n)?b.merge([e],s):s}function Bt(e){Nt.test(e.type)&&(e.defaultChecked=e.checked)}b.extend({clone:function(e,t,n){var r,i,o,a,s,u=b.contains(e.ownerDocument,e);if(b.support.html5Clone||b.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(b.support.noCloneEvent&&b.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||b.isXMLDoc(e)))for(r=Ot(o),s=Ot(e),a=0;null!=(i=s[a]);++a)r[a]&&Ft(i,r[a]);if(t)if(n)for(s=s||Ot(e),r=r||Ot(o),a=0;null!=(i=s[a]);a++)_t(i,r[a]);else _t(e,o);return r=Ot(o,"script"),r.length>0&&Mt(r,!u&&Ot(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,u,l,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===b.type(o))b.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),u=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[u]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1></$2>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!b.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!b.support.tbody){o="table"!==u||xt.test(o)?"<table>"!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)b.nodeName(l=o.childNodes[i],"tbody")&&!l.childNodes.length&&o.removeChild(l) -}b.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),b.support.appendChecked||b.grep(Ot(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===b.inArray(o,r))&&(a=b.contains(o.ownerDocument,o),s=Ot(f.appendChild(o),"script"),a&&Mt(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,u=b.expando,l=b.cache,p=b.support.deleteExpando,f=b.event.special;for(;null!=(n=e[s]);s++)if((t||b.acceptData(n))&&(o=n[u],a=o&&l[o])){if(a.events)for(r in a.events)f[r]?b.event.remove(n,r):b.removeEvent(n,r,a.handle);l[o]&&(delete l[o],p?delete n[u]:typeof n.removeAttribute!==i?n.removeAttribute(u):n[u]=null,c.push(o))}}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+x+")(.*)$","i"),Yt=RegExp("^("+x+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+x+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===b.css(e,"display")||!b.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=b._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=b._data(r,"olddisplay",un(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&b._data(r,"olddisplay",i?n:b.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}b.fn.extend({css:function(e,n){return b.access(this,function(e,n,r){var i,o,a={},s=0;if(b.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=b.css(e,n[s],!1,o);return a}return r!==t?b.style(e,n,r):b.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){var t="boolean"==typeof e;return this.each(function(){(t?e:nn(this))?b(this).show():b(this).hide()})}}),b.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":b.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,u=b.camelCase(n),l=e.style;if(n=b.cssProps[u]||(b.cssProps[u]=tn(l,u)),s=b.cssHooks[n]||b.cssHooks[u],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:l[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(b.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||b.cssNumber[u]||(r+="px"),b.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(l[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{l[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,u=b.camelCase(n);return n=b.cssProps[u]||(b.cssProps[u]=tn(e.style,u)),s=b.cssHooks[n]||b.cssHooks[u],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||b.isNumeric(o)?o||0:a):a},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s.getPropertyValue(n)||s[n]:t,l=e.style;return s&&(""!==u||b.contains(e.ownerDocument,e)||(u=b.style(e,n)),Yt.test(u)&&Ut.test(n)&&(i=l.width,o=l.minWidth,a=l.maxWidth,l.minWidth=l.maxWidth=l.width=u,u=s.width,l.width=i,l.minWidth=o,l.maxWidth=a)),u}):o.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s[n]:t,l=e.style;return null==u&&l&&l[n]&&(u=l[n]),Yt.test(u)&&!zt.test(n)&&(i=l.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),l.left="fontSize"===n?"1em":u,u=l.pixelLeft+"px",l.left=i,a&&(o.left=a)),""===u?"auto":u});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=b.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=b.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=b.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=b.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=b.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=b.support.boxSizing&&"border-box"===b.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(b.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function un(e){var t=o,n=Gt[e];return n||(n=ln(e,t),"none"!==n&&n||(Pt=(Pt||b("<iframe frameborder='0' width='0' height='0'/>").css("cssText","display:block !important")).appendTo(t.documentElement),t=(Pt[0].contentWindow||Pt[0].contentDocument).document,t.write("<!doctype html><html><body>"),t.close(),n=ln(e,t),Pt.detach()),Gt[e]=n),n}function ln(e,t){var n=b(t.createElement(e)).appendTo(t.body),r=b.css(n[0],"display");return n.remove(),r}b.each(["height","width"],function(e,n){b.cssHooks[n]={get:function(e,r,i){return r?0===e.offsetWidth&&Xt.test(b.css(e,"display"))?b.swap(e,Qt,function(){return sn(e,n,i)}):sn(e,n,i):t},set:function(e,t,r){var i=r&&Rt(e);return on(e,t,r?an(e,n,r,b.support.boxSizing&&"border-box"===b.css(e,"boxSizing",!1,i),i):0)}}}),b.support.opacity||(b.cssHooks.opacity={get:function(e,t){return It.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=b.isNumeric(t)?"alpha(opacity="+100*t+")":"",o=r&&r.filter||n.filter||"";n.zoom=1,(t>=1||""===t)&&""===b.trim(o.replace($t,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===t||r&&!r.filter)||(n.filter=$t.test(o)?o.replace($t,i):o+" "+i)}}),b(function(){b.support.reliableMarginRight||(b.cssHooks.marginRight={get:function(e,n){return n?b.swap(e,{display:"inline-block"},Wt,[e,"marginRight"]):t}}),!b.support.pixelPosition&&b.fn.position&&b.each(["top","left"],function(e,n){b.cssHooks[n]={get:function(e,r){return r?(r=Wt(e,n),Yt.test(r)?b(e).position()[n]+"px":r):t}}})}),b.expr&&b.expr.filters&&(b.expr.filters.hidden=function(e){return 0>=e.offsetWidth&&0>=e.offsetHeight||!b.support.reliableHiddenOffsets&&"none"===(e.style&&e.style.display||b.css(e,"display"))},b.expr.filters.visible=function(e){return!b.expr.filters.hidden(e)}),b.each({margin:"",padding:"",border:"Width"},function(e,t){b.cssHooks[e+t]={expand:function(n){var r=0,i={},o="string"==typeof n?n.split(" "):[n];for(;4>r;r++)i[e+Zt[r]+t]=o[r]||o[r-2]||o[0];return i}},Ut.test(e)||(b.cssHooks[e+t].set=on)});var cn=/%20/g,pn=/\[\]$/,fn=/\r?\n/g,dn=/^(?:submit|button|image|reset|file)$/i,hn=/^(?:input|select|textarea|keygen)/i;b.fn.extend({serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=b.prop(this,"elements");return e?b.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!b(this).is(":disabled")&&hn.test(this.nodeName)&&!dn.test(e)&&(this.checked||!Nt.test(e))}).map(function(e,t){var n=b(this).val();return null==n?null:b.isArray(n)?b.map(n,function(e){return{name:t.name,value:e.replace(fn,"\r\n")}}):{name:t.name,value:n.replace(fn,"\r\n")}}).get()}}),b.param=function(e,n){var r,i=[],o=function(e,t){t=b.isFunction(t)?t():null==t?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(n===t&&(n=b.ajaxSettings&&b.ajaxSettings.traditional),b.isArray(e)||e.jquery&&!b.isPlainObject(e))b.each(e,function(){o(this.name,this.value)});else for(r in e)gn(r,e[r],n,o);return i.join("&").replace(cn,"+")};function gn(e,t,n,r){var i;if(b.isArray(t))b.each(t,function(t,i){n||pn.test(e)?r(e,i):gn(e+"["+("object"==typeof i?t:"")+"]",i,n,r)});else if(n||"object"!==b.type(t))r(e,t);else for(i in t)gn(e+"["+i+"]",t[i],n,r)}b.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){b.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),b.fn.hover=function(e,t){return this.mouseenter(e).mouseleave(t||e)};var mn,yn,vn=b.now(),bn=/\?/,xn=/#.*$/,wn=/([?&])_=[^&]*/,Tn=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Nn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Cn=/^(?:GET|HEAD)$/,kn=/^\/\//,En=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,Sn=b.fn.load,An={},jn={},Dn="*/".concat("*");try{yn=a.href}catch(Ln){yn=o.createElement("a"),yn.href="",yn=yn.href}mn=En.exec(yn.toLowerCase())||[];function Hn(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(w)||[];if(b.isFunction(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function qn(e,n,r,i){var o={},a=e===jn;function s(u){var l;return o[u]=!0,b.each(e[u]||[],function(e,u){var c=u(n,r,i);return"string"!=typeof c||a||o[c]?a?!(l=c):t:(n.dataTypes.unshift(c),s(c),!1)}),l}return s(n.dataTypes[0])||!o["*"]&&s("*")}function Mn(e,n){var r,i,o=b.ajaxSettings.flatOptions||{};for(i in n)n[i]!==t&&((o[i]?e:r||(r={}))[i]=n[i]);return r&&b.extend(!0,e,r),e}b.fn.load=function(e,n,r){if("string"!=typeof e&&Sn)return Sn.apply(this,arguments);var i,o,a,s=this,u=e.indexOf(" ");return u>=0&&(i=e.slice(u,e.length),e=e.slice(0,u)),b.isFunction(n)?(r=n,n=t):n&&"object"==typeof n&&(a="POST"),s.length>0&&b.ajax({url:e,type:a,dataType:"html",data:n}).done(function(e){o=arguments,s.html(i?b("<div>").append(b.parseHTML(e)).find(i):e)}).complete(r&&function(e,t){s.each(r,o||[e.responseText,t,e])}),this},b.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){b.fn[t]=function(e){return this.on(t,e)}}),b.each(["get","post"],function(e,n){b[n]=function(e,r,i,o){return b.isFunction(r)&&(o=o||i,i=r,r=t),b.ajax({url:e,type:n,dataType:o,data:r,success:i})}}),b.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:yn,type:"GET",isLocal:Nn.test(mn[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Dn,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":e.String,"text html":!0,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Mn(Mn(e,b.ajaxSettings),t):Mn(b.ajaxSettings,e)},ajaxPrefilter:Hn(An),ajaxTransport:Hn(jn),ajax:function(e,n){"object"==typeof e&&(n=e,e=t),n=n||{};var r,i,o,a,s,u,l,c,p=b.ajaxSetup({},n),f=p.context||p,d=p.context&&(f.nodeType||f.jquery)?b(f):b.event,h=b.Deferred(),g=b.Callbacks("once memory"),m=p.statusCode||{},y={},v={},x=0,T="canceled",N={readyState:0,getResponseHeader:function(e){var t;if(2===x){if(!c){c={};while(t=Tn.exec(a))c[t[1].toLowerCase()]=t[2]}t=c[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===x?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return x||(e=v[n]=v[n]||e,y[e]=t),this},overrideMimeType:function(e){return x||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>x)for(t in e)m[t]=[m[t],e[t]];else N.always(e[N.status]);return this},abort:function(e){var t=e||T;return l&&l.abort(t),k(0,t),this}};if(h.promise(N).complete=g.add,N.success=N.done,N.error=N.fail,p.url=((e||p.url||yn)+"").replace(xn,"").replace(kn,mn[1]+"//"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=b.trim(p.dataType||"*").toLowerCase().match(w)||[""],null==p.crossDomain&&(r=En.exec(p.url.toLowerCase()),p.crossDomain=!(!r||r[1]===mn[1]&&r[2]===mn[2]&&(r[3]||("http:"===r[1]?80:443))==(mn[3]||("http:"===mn[1]?80:443)))),p.data&&p.processData&&"string"!=typeof p.data&&(p.data=b.param(p.data,p.traditional)),qn(An,p,n,N),2===x)return N;u=p.global,u&&0===b.active++&&b.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!Cn.test(p.type),o=p.url,p.hasContent||(p.data&&(o=p.url+=(bn.test(o)?"&":"?")+p.data,delete p.data),p.cache===!1&&(p.url=wn.test(o)?o.replace(wn,"$1_="+vn++):o+(bn.test(o)?"&":"?")+"_="+vn++)),p.ifModified&&(b.lastModified[o]&&N.setRequestHeader("If-Modified-Since",b.lastModified[o]),b.etag[o]&&N.setRequestHeader("If-None-Match",b.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&N.setRequestHeader("Content-Type",p.contentType),N.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+Dn+"; q=0.01":""):p.accepts["*"]);for(i in p.headers)N.setRequestHeader(i,p.headers[i]);if(p.beforeSend&&(p.beforeSend.call(f,N,p)===!1||2===x))return N.abort();T="abort";for(i in{success:1,error:1,complete:1})N[i](p[i]);if(l=qn(jn,p,n,N)){N.readyState=1,u&&d.trigger("ajaxSend",[N,p]),p.async&&p.timeout>0&&(s=setTimeout(function(){N.abort("timeout")},p.timeout));try{x=1,l.send(y,k)}catch(C){if(!(2>x))throw C;k(-1,C)}}else k(-1,"No Transport");function k(e,n,r,i){var c,y,v,w,T,C=n;2!==x&&(x=2,s&&clearTimeout(s),l=t,a=i||"",N.readyState=e>0?4:0,r&&(w=_n(p,N,r)),e>=200&&300>e||304===e?(p.ifModified&&(T=N.getResponseHeader("Last-Modified"),T&&(b.lastModified[o]=T),T=N.getResponseHeader("etag"),T&&(b.etag[o]=T)),204===e?(c=!0,C="nocontent"):304===e?(c=!0,C="notmodified"):(c=Fn(p,w),C=c.state,y=c.data,v=c.error,c=!v)):(v=C,(e||!C)&&(C="error",0>e&&(e=0))),N.status=e,N.statusText=(n||C)+"",c?h.resolveWith(f,[y,C,N]):h.rejectWith(f,[N,C,v]),N.statusCode(m),m=t,u&&d.trigger(c?"ajaxSuccess":"ajaxError",[N,p,c?y:v]),g.fireWith(f,[N,C]),u&&(d.trigger("ajaxComplete",[N,p]),--b.active||b.event.trigger("ajaxStop")))}return N},getScript:function(e,n){return b.get(e,t,n,"script")},getJSON:function(e,t,n){return b.get(e,t,n,"json")}});function _n(e,n,r){var i,o,a,s,u=e.contents,l=e.dataTypes,c=e.responseFields;for(s in c)s in r&&(n[c[s]]=r[s]);while("*"===l[0])l.shift(),o===t&&(o=e.mimeType||n.getResponseHeader("Content-Type"));if(o)for(s in u)if(u[s]&&u[s].test(o)){l.unshift(s);break}if(l[0]in r)a=l[0];else{for(s in r){if(!l[0]||e.converters[s+" "+l[0]]){a=s;break}i||(i=s)}a=a||i}return a?(a!==l[0]&&l.unshift(a),r[a]):t}function Fn(e,t){var n,r,i,o,a={},s=0,u=e.dataTypes.slice(),l=u[0];if(e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u[1])for(i in e.converters)a[i.toLowerCase()]=e.converters[i];for(;r=u[++s];)if("*"!==r){if("*"!==l&&l!==r){if(i=a[l+" "+r]||a["* "+r],!i)for(n in a)if(o=n.split(" "),o[1]===r&&(i=a[l+" "+o[0]]||a["* "+o[0]])){i===!0?i=a[n]:a[n]!==!0&&(r=o[0],u.splice(s--,0,r));break}if(i!==!0)if(i&&e["throws"])t=i(t);else try{t=i(t)}catch(c){return{state:"parsererror",error:i?c:"No conversion from "+l+" to "+r}}}l=r}return{state:"success",data:t}}b.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return b.globalEval(e),e}}}),b.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),b.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=o.head||b("head")[0]||o.documentElement;return{send:function(t,i){n=o.createElement("script"),n.async=!0,e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),n=null,t||i(200,"success"))},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(t,!0)}}}});var On=[],Bn=/(=)\?(?=&|$)|\?\?/;b.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=On.pop()||b.expando+"_"+vn++;return this[e]=!0,e}}),b.ajaxPrefilter("json jsonp",function(n,r,i){var o,a,s,u=n.jsonp!==!1&&(Bn.test(n.url)?"url":"string"==typeof n.data&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Bn.test(n.data)&&"data");return u||"jsonp"===n.dataTypes[0]?(o=n.jsonpCallback=b.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,u?n[u]=n[u].replace(Bn,"$1"+o):n.jsonp!==!1&&(n.url+=(bn.test(n.url)?"&":"?")+n.jsonp+"="+o),n.converters["script json"]=function(){return s||b.error(o+" was not called"),s[0]},n.dataTypes[0]="json",a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&&(n.jsonpCallback=r.jsonpCallback,On.push(o)),s&&b.isFunction(a)&&a(s[0]),s=a=t}),"script"):t});var Pn,Rn,Wn=0,$n=e.ActiveXObject&&function(){var e;for(e in Pn)Pn[e](t,!0)};function In(){try{return new e.XMLHttpRequest}catch(t){}}function zn(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}b.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&In()||zn()}:In,Rn=b.ajaxSettings.xhr(),b.support.cors=!!Rn&&"withCredentials"in Rn,Rn=b.support.ajax=!!Rn,Rn&&b.ajaxTransport(function(n){if(!n.crossDomain||b.support.cors){var r;return{send:function(i,o){var a,s,u=n.xhr();if(n.username?u.open(n.type,n.url,n.async,n.username,n.password):u.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)u[s]=n.xhrFields[s];n.mimeType&&u.overrideMimeType&&u.overrideMimeType(n.mimeType),n.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");try{for(s in i)u.setRequestHeader(s,i[s])}catch(l){}u.send(n.hasContent&&n.data||null),r=function(e,i){var s,l,c,p;try{if(r&&(i||4===u.readyState))if(r=t,a&&(u.onreadystatechange=b.noop,$n&&delete Pn[a]),i)4!==u.readyState&&u.abort();else{p={},s=u.status,l=u.getAllResponseHeaders(),"string"==typeof u.responseText&&(p.text=u.responseText);try{c=u.statusText}catch(f){c=""}s||!n.isLocal||n.crossDomain?1223===s&&(s=204):s=p.text?200:404}}catch(d){i||o(-1,d)}p&&o(s,c,p,l)},n.async?4===u.readyState?setTimeout(r):(a=++Wn,$n&&(Pn||(Pn={},b(e).unload($n)),Pn[a]=r),u.onreadystatechange=r):r()},abort:function(){r&&r(t,!0)}}}});var Xn,Un,Vn=/^(?:toggle|show|hide)$/,Yn=RegExp("^(?:([+-])=|)("+x+")([a-z%]*)$","i"),Jn=/queueHooks$/,Gn=[nr],Qn={"*":[function(e,t){var n,r,i=this.createTween(e,t),o=Yn.exec(t),a=i.cur(),s=+a||0,u=1,l=20;if(o){if(n=+o[2],r=o[3]||(b.cssNumber[e]?"":"px"),"px"!==r&&s){s=b.css(i.elem,e,!0)||n||1;do u=u||".5",s/=u,b.style(i.elem,e,s+r);while(u!==(u=i.cur()/a)&&1!==u&&--l)}i.unit=r,i.start=s,i.end=o[1]?s+(o[1]+1)*n:n}return i}]};function Kn(){return setTimeout(function(){Xn=t}),Xn=b.now()}function Zn(e,t){b.each(t,function(t,n){var r=(Qn[t]||[]).concat(Qn["*"]),i=0,o=r.length;for(;o>i;i++)if(r[i].call(e,t,n))return})}function er(e,t,n){var r,i,o=0,a=Gn.length,s=b.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;var t=Xn||Kn(),n=Math.max(0,l.startTime+l.duration-t),r=n/l.duration||0,o=1-r,a=0,u=l.tweens.length;for(;u>a;a++)l.tweens[a].run(o);return s.notifyWith(e,[l,o,n]),1>o&&u?n:(s.resolveWith(e,[l]),!1)},l=s.promise({elem:e,props:b.extend({},t),opts:b.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xn||Kn(),duration:n.duration,tweens:[],createTween:function(t,n){var r=b.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)l.tweens[n].run(1);return t?s.resolveWith(e,[l,t]):s.rejectWith(e,[l,t]),this}}),c=l.props;for(tr(c,l.opts.specialEasing);a>o;o++)if(r=Gn[o].call(l,e,c,l.opts))return r;return Zn(l,c),b.isFunction(l.opts.start)&&l.opts.start.call(e,l),b.fx.timer(b.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always)}function tr(e,t){var n,r,i,o,a;for(i in e)if(r=b.camelCase(i),o=t[r],n=e[i],b.isArray(n)&&(o=n[1],n=e[i]=n[0]),i!==r&&(e[r]=n,delete e[i]),a=b.cssHooks[r],a&&"expand"in a){n=a.expand(n),delete e[r];for(i in n)i in e||(e[i]=n[i],t[i]=o)}else t[r]=o}b.Animation=b.extend(er,{tweener:function(e,t){b.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;i>r;r++)n=e[r],Qn[n]=Qn[n]||[],Qn[n].unshift(t)},prefilter:function(e,t){t?Gn.unshift(e):Gn.push(e)}});function nr(e,t,n){var r,i,o,a,s,u,l,c,p,f=this,d=e.style,h={},g=[],m=e.nodeType&&nn(e);n.queue||(c=b._queueHooks(e,"fx"),null==c.unqueued&&(c.unqueued=0,p=c.empty.fire,c.empty.fire=function(){c.unqueued||p()}),c.unqueued++,f.always(function(){f.always(function(){c.unqueued--,b.queue(e,"fx").length||c.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[d.overflow,d.overflowX,d.overflowY],"inline"===b.css(e,"display")&&"none"===b.css(e,"float")&&(b.support.inlineBlockNeedsLayout&&"inline"!==un(e.nodeName)?d.zoom=1:d.display="inline-block")),n.overflow&&(d.overflow="hidden",b.support.shrinkWrapBlocks||f.always(function(){d.overflow=n.overflow[0],d.overflowX=n.overflow[1],d.overflowY=n.overflow[2]}));for(i in t)if(a=t[i],Vn.exec(a)){if(delete t[i],u=u||"toggle"===a,a===(m?"hide":"show"))continue;g.push(i)}if(o=g.length){s=b._data(e,"fxshow")||b._data(e,"fxshow",{}),"hidden"in s&&(m=s.hidden),u&&(s.hidden=!m),m?b(e).show():f.done(function(){b(e).hide()}),f.done(function(){var t;b._removeData(e,"fxshow");for(t in h)b.style(e,t,h[t])});for(i=0;o>i;i++)r=g[i],l=f.createTween(r,m?s[r]:0),h[r]=s[r]||b.style(e,r),r in s||(s[r]=l.start,m&&(l.end=l.start,l.start="width"===r||"height"===r?1:0))}}function rr(e,t,n,r,i){return new rr.prototype.init(e,t,n,r,i)}b.Tween=rr,rr.prototype={constructor:rr,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(b.cssNumber[n]?"":"px")},cur:function(){var e=rr.propHooks[this.prop];return e&&e.get?e.get(this):rr.propHooks._default.get(this)},run:function(e){var t,n=rr.propHooks[this.prop];return this.pos=t=this.options.duration?b.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):rr.propHooks._default.set(this),this}},rr.prototype.init.prototype=rr.prototype,rr.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=b.css(e.elem,e.prop,""),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){b.fx.step[e.prop]?b.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[b.cssProps[e.prop]]||b.cssHooks[e.prop])?b.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},rr.propHooks.scrollTop=rr.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},b.each(["toggle","show","hide"],function(e,t){var n=b.fn[t];b.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ir(t,!0),e,r,i)}}),b.fn.extend({fadeTo:function(e,t,n,r){return this.filter(nn).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=b.isEmptyObject(e),o=b.speed(t,n,r),a=function(){var t=er(this,b.extend({},e),o);a.finish=function(){t.stop(!0)},(i||b._data(this,"finish"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return"string"!=typeof e&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=null!=e&&e+"queueHooks",o=b.timers,a=b._data(this);if(n)a[n]&&a[n].stop&&i(a[n]);else for(n in a)a[n]&&a[n].stop&&Jn.test(n)&&i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&&o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&&b.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=b._data(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=b.timers,a=r?r.length:0;for(n.finish=!0,b.queue(this,e,[]),i&&i.cur&&i.cur.finish&&i.cur.finish.call(this),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}});function ir(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=Zt[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}b.each({slideDown:ir("show"),slideUp:ir("hide"),slideToggle:ir("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){b.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),b.speed=function(e,t,n){var r=e&&"object"==typeof e?b.extend({},e):{complete:n||!n&&t||b.isFunction(e)&&e,duration:e,easing:n&&t||t&&!b.isFunction(t)&&t};return r.duration=b.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in b.fx.speeds?b.fx.speeds[r.duration]:b.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){b.isFunction(r.old)&&r.old.call(this),r.queue&&b.dequeue(this,r.queue)},r},b.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},b.timers=[],b.fx=rr.prototype.init,b.fx.tick=function(){var e,n=b.timers,r=0;for(Xn=b.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||b.fx.stop(),Xn=t},b.fx.timer=function(e){e()&&b.timers.push(e)&&b.fx.start()},b.fx.interval=13,b.fx.start=function(){Un||(Un=setInterval(b.fx.tick,b.fx.interval))},b.fx.stop=function(){clearInterval(Un),Un=null},b.fx.speeds={slow:600,fast:200,_default:400},b.fx.step={},b.expr&&b.expr.filters&&(b.expr.filters.animated=function(e){return b.grep(b.timers,function(t){return e===t.elem}).length}),b.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){b.offset.setOffset(this,e,t)});var n,r,o={top:0,left:0},a=this[0],s=a&&a.ownerDocument;if(s)return n=s.documentElement,b.contains(n,a)?(typeof a.getBoundingClientRect!==i&&(o=a.getBoundingClientRect()),r=or(s),{top:o.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:o.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):o},b.offset={setOffset:function(e,t,n){var r=b.css(e,"position");"static"===r&&(e.style.position="relative");var i=b(e),o=i.offset(),a=b.css(e,"top"),s=b.css(e,"left"),u=("absolute"===r||"fixed"===r)&&b.inArray("auto",[a,s])>-1,l={},c={},p,f;u?(c=i.position(),p=c.top,f=c.left):(p=parseFloat(a)||0,f=parseFloat(s)||0),b.isFunction(t)&&(t=t.call(e,n,o)),null!=t.top&&(l.top=t.top-o.top+p),null!=t.left&&(l.left=t.left-o.left+f),"using"in t?t.using.call(e,l):i.css(l)}},b.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return"fixed"===b.css(r,"position")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),b.nodeName(e[0],"html")||(n=e.offset()),n.top+=b.css(e[0],"borderTopWidth",!0),n.left+=b.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-b.css(r,"marginTop",!0),left:t.left-n.left-b.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||o.documentElement;while(e&&!b.nodeName(e,"html")&&"static"===b.css(e,"position"))e=e.offsetParent;return e||o.documentElement})}}),b.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);b.fn[e]=function(i){return b.access(this,function(e,i,o){var a=or(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?b(a).scrollLeft():o,r?o:b(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}});function or(e){return b.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}b.each({Height:"height",Width:"width"},function(e,n){b.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){b.fn[i]=function(i,o){var a=arguments.length&&(r||"boolean"!=typeof i),s=r||(i===!0||o===!0?"margin":"border");return b.access(this,function(n,r,i){var o;return b.isWindow(n)?n.document.documentElement["client"+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body["scroll"+e],o["scroll"+e],n.body["offset"+e],o["offset"+e],o["client"+e])):i===t?b.css(n,r,s):b.style(n,r,i,s)},n,a?i:t,a,null)}})}),e.jQuery=e.$=b,"function"==typeof define&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return b})})(window); \ No newline at end of file diff --git a/src/main/webapp/bower_components/bootstrap/docs/base-css.html b/src/main/webapp/bower_components/bootstrap/docs/base-css.html deleted file mode 100644 index d1ca3fb8..00000000 --- a/src/main/webapp/bower_components/bootstrap/docs/base-css.html +++ /dev/null @@ -1,2215 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <title>Base · Bootstrap</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta name="description" content=""> - <meta name="author" content=""> - - <!-- Le styles --> - <link href="assets/css/bootstrap.css" rel="stylesheet"> - <link href="assets/css/bootstrap-responsive.css" rel="stylesheet"> - <link href="assets/css/docs.css" rel="stylesheet"> - <link href="assets/js/google-code-prettify/prettify.css" rel="stylesheet"> - - <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements --> - <!--[if lt IE 9]> - <script src="assets/js/html5shiv.js"></script> - <![endif]--> - - <!-- Le fav and touch icons --> - <link rel="apple-touch-icon-precomposed" sizes="144x144" href="assets/ico/apple-touch-icon-144-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="114x114" href="assets/ico/apple-touch-icon-114-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="72x72" href="assets/ico/apple-touch-icon-72-precomposed.png"> - <link rel="apple-touch-icon-precomposed" href="assets/ico/apple-touch-icon-57-precomposed.png"> - <link rel="shortcut icon" href="assets/ico/favicon.png"> - - </head> - - <body data-spy="scroll" data-target=".bs-docs-sidebar"> - - <!-- Navbar - ================================================== --> - <div class="navbar navbar-inverse navbar-fixed-top"> - <div class="navbar-inner"> - <div class="container"> - <button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - </button> - <a class="brand" href="./index.html">Bootstrap</a> - <div class="nav-collapse collapse"> - <ul class="nav"> - <li class=""> - <a href="./index.html">Home</a> - </li> - <li class=""> - <a href="./getting-started.html">Get started</a> - </li> - <li class=""> - <a href="./scaffolding.html">Scaffolding</a> - </li> - <li class="active"> - <a href="./base-css.html">Base CSS</a> - </li> - <li class=""> - <a href="./components.html">Components</a> - </li> - <li class=""> - <a href="./javascript.html">JavaScript</a> - </li> - <li class=""> - <a href="./customize.html">Customize</a> - </li> - </ul> - </div> - </div> - </div> - </div> - -<!-- Subhead -================================================== --> -<header class="jumbotron subhead" id="overview"> - <div class="container"> - <h1>Base CSS</h1> - <p class="lead">Fundamental HTML elements styled and enhanced with extensible classes.</p> - </div> -</header> - - - <div class="container"> - - <!-- Docs nav - ================================================== --> - <div class="row"> - <div class="span3 bs-docs-sidebar"> - <ul class="nav nav-list bs-docs-sidenav"> - <li><a href="#typography"><i class="icon-chevron-right"></i> Typography</a></li> - <li><a href="#code"><i class="icon-chevron-right"></i> Code</a></li> - <li><a href="#tables"><i class="icon-chevron-right"></i> Tables</a></li> - <li><a href="#forms"><i class="icon-chevron-right"></i> Forms</a></li> - <li><a href="#buttons"><i class="icon-chevron-right"></i> Buttons</a></li> - <li><a href="#images"><i class="icon-chevron-right"></i> Images</a></li> - <li><a href="#icons"><i class="icon-chevron-right"></i> Icons by Glyphicons</a></li> - </ul> - </div> - <div class="span9"> - - - - <!-- Typography - ================================================== --> - <section id="typography"> - <div class="page-header"> - <h1>Typography</h1> - </div> - - <h2 id="headings">Headings</h2> - <p>All HTML headings, <code><h1></code> through <code><h6></code> are available.</p> - <div class="bs-docs-example"> - <h1>h1. Heading 1</h1> - <h2>h2. Heading 2</h2> - <h3>h3. Heading 3</h3> - <h4>h4. Heading 4</h4> - <h5>h5. Heading 5</h5> - <h6>h6. Heading 6</h6> - </div> - - <h2 id="body-copy">Body copy</h2> - <p>Bootstrap's global default <code>font-size</code> is <strong>14px</strong>, with a <code>line-height</code> of <strong>20px</strong>. This is applied to the <code><body></code> and all paragraphs. In addition, <code><p></code> (paragraphs) receive a bottom margin of half their line-height (10px by default).</p> - <div class="bs-docs-example"> - <p>Nullam quis risus eget urna mollis ornare vel eu leo. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nullam id dolor id nibh ultricies vehicula.</p> - <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec ullamcorper nulla non metus auctor fringilla. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Donec ullamcorper nulla non metus auctor fringilla.</p> - <p>Maecenas sed diam eget risus varius blandit sit amet non magna. Donec id elit non mi porta gravida at eget metus. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit.</p> - </div> - <pre class="prettyprint"><p>...</p></pre> - - <h3>Lead body copy</h3> - <p>Make a paragraph stand out by adding <code>.lead</code>.</p> - <div class="bs-docs-example"> - <p class="lead">Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Duis mollis, est non commodo luctus.</p> - </div> - <pre class="prettyprint"><p class="lead">...</p></pre> - - <h3>Built with Less</h3> - <p>The typographic scale is based on two LESS variables in <strong>variables.less</strong>: <code>@baseFontSize</code> and <code>@baseLineHeight</code>. The first is the base font-size used throughout and the second is the base line-height. We use those variables and some simple math to create the margins, paddings, and line-heights of all our type and more. Customize them and Bootstrap adapts.</p> - - - <hr class="bs-docs-separator"> - - - <h2 id="emphasis">Emphasis</h2> - <p>Make use of HTML's default emphasis tags with lightweight styles.</p> - - <h3><code><small></code></h3> - <p>For de-emphasizing inline or blocks of text, <small>use the small tag.</small></p> - <div class="bs-docs-example"> - <p><small>This line of text is meant to be treated as fine print.</small></p> - </div> -<pre class="prettyprint"> -<p> - <small>This line of text is meant to be treated as fine print.</small> -</p> -</pre> - - <h3>Bold</h3> - <p>For emphasizing a snippet of text with a heavier font-weight.</p> - <div class="bs-docs-example"> - <p>The following snippet of text is <strong>rendered as bold text</strong>.</p> - </div> - <pre class="prettyprint"><strong>rendered as bold text</strong></pre> - - <h3>Italics</h3> - <p>For emphasizing a snippet of text with italics.</p> - <div class="bs-docs-example"> - <p>The following snippet of text is <em>rendered as italicized text</em>.</p> - </div> - <pre class="prettyprint"><em>rendered as italicized text</em></pre> - - <p><span class="label label-info">Heads up!</span> Feel free to use <code><b></code> and <code><i></code> in HTML5. <code><b></code> is meant to highlight words or phrases without conveying additional importance while <code><i></code> is mostly for voice, technical terms, etc.</p> - - <h3>Alignment classes</h3> - <p>Easily realign text to components with text alignment classes.</p> - <div class="bs-docs-example"> - <p class="text-left">Left aligned text.</p> - <p class="text-center">Center aligned text.</p> - <p class="text-right">Right aligned text.</p> - </div> -<pre class="prettyprint linenums"> -<p class="text-left">Left aligned text.</p> -<p class="text-center">Center aligned text.</p> -<p class="text-right">Right aligned text.</p> -</pre> - - <h3>Emphasis classes</h3> - <p>Convey meaning through color with a handful of emphasis utility classes.</p> - <div class="bs-docs-example"> - <p class="muted">Fusce dapibus, tellus ac cursus commodo, tortor mauris nibh.</p> - <p class="text-warning">Etiam porta sem malesuada magna mollis euismod.</p> - <p class="text-error">Donec ullamcorper nulla non metus auctor fringilla.</p> - <p class="text-info">Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis.</p> - <p class="text-success">Duis mollis, est non commodo luctus, nisi erat porttitor ligula.</p> - </div> -<pre class="prettyprint linenums"> -<p class="muted">Fusce dapibus, tellus ac cursus commodo, tortor mauris nibh.</p> -<p class="text-warning">Etiam porta sem malesuada magna mollis euismod.</p> -<p class="text-error">Donec ullamcorper nulla non metus auctor fringilla.</p> -<p class="text-info">Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis.</p> -<p class="text-success">Duis mollis, est non commodo luctus, nisi erat porttitor ligula.</p> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2 id="abbreviations">Abbreviations</h2> - <p>Stylized implementation of HTML's <code><abbr></code> element for abbreviations and acronyms to show the expanded version on hover. Abbreviations with a <code>title</code> attribute have a light dotted bottom border and a help cursor on hover, providing additional context on hover.</p> - - <h3><code><abbr></code></h3> - <p>For expanded text on long hover of an abbreviation, include the <code>title</code> attribute.</p> - <div class="bs-docs-example"> - <p>An abbreviation of the word attribute is <abbr title="attribute">attr</abbr>.</p> - </div> - <pre class="prettyprint"><abbr title="attribute">attr</abbr></pre> - - <h3><code><abbr class="initialism"></code></h3> - <p>Add <code>.initialism</code> to an abbreviation for a slightly smaller font-size.</p> - <div class="bs-docs-example"> - <p><abbr title="HyperText Markup Language" class="initialism">HTML</abbr> is the best thing since sliced bread.</p> - </div> - <pre class="prettyprint"><abbr title="HyperText Markup Language" class="initialism">HTML</abbr></pre> - - - <hr class="bs-docs-separator"> - - - <h2 id="addresses">Addresses</h2> - <p>Present contact information for the nearest ancestor or the entire body of work.</p> - - <h3><code><address></code></h3> - <p>Preserve formatting by ending all lines with <code><br></code>.</p> - <div class="bs-docs-example"> - <address> - <strong>Twitter, Inc.</strong><br> - 795 Folsom Ave, Suite 600<br> - San Francisco, CA 94107<br> - <abbr title="Phone">P:</abbr> (123) 456-7890 - </address> - <address> - <strong>Full Name</strong><br> - <a href="mailto:#">first.last@example.com</a> - </address> - </div> -<pre class="prettyprint linenums"> -<address> - <strong>Twitter, Inc.</strong><br> - 795 Folsom Ave, Suite 600<br> - San Francisco, CA 94107<br> - <abbr title="Phone">P:</abbr> (123) 456-7890 -</address> - -<address> - <strong>Full Name</strong><br> - <a href="mailto:#">first.last@example.com</a> -</address> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2 id="blockquotes">Blockquotes</h2> - <p>For quoting blocks of content from another source within your document.</p> - - <h3>Default blockquote</h3> - <p>Wrap <code><blockquote></code> around any <abbr title="HyperText Markup Language">HTML</abbr> as the quote. For straight quotes we recommend a <code><p></code>.</p> - <div class="bs-docs-example"> - <blockquote> - <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p> - </blockquote> - </div> -<pre class="prettyprint linenums"> -<blockquote> - <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p> -</blockquote> -</pre> - - <h3>Blockquote options</h3> - <p>Style and content changes for simple variations on a standard blockquote.</p> - - <h4>Naming a source</h4> - <p>Add <code><small></code> tag for identifying the source. Wrap the name of the source work in <code><cite></code>.</p> - <div class="bs-docs-example"> - <blockquote> - <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p> - <small>Someone famous in <cite title="Source Title">Source Title</cite></small> - </blockquote> - </div> -<pre class="prettyprint linenums"> -<blockquote> - <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p> - <small>Someone famous <cite title="Source Title">Source Title</cite></small> -</blockquote> -</pre> - - <h4>Alternate displays</h4> - <p>Use <code>.pull-right</code> for a floated, right-aligned blockquote.</p> - <div class="bs-docs-example" style="overflow: hidden;"> - <blockquote class="pull-right"> - <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p> - <small>Someone famous in <cite title="Source Title">Source Title</cite></small> - </blockquote> - </div> -<pre class="prettyprint linenums"> -<blockquote class="pull-right"> - ... -</blockquote> -</pre> - - - <hr class="bs-docs-separator"> - - - <!-- Lists --> - <h2 id="lists">Lists</h2> - - <h3>Unordered</h3> - <p>A list of items in which the order does <em>not</em> explicitly matter.</p> - <div class="bs-docs-example"> - <ul> - <li>Lorem ipsum dolor sit amet</li> - <li>Consectetur adipiscing elit</li> - <li>Integer molestie lorem at massa</li> - <li>Facilisis in pretium nisl aliquet</li> - <li>Nulla volutpat aliquam velit - <ul> - <li>Phasellus iaculis neque</li> - <li>Purus sodales ultricies</li> - <li>Vestibulum laoreet porttitor sem</li> - <li>Ac tristique libero volutpat at</li> - </ul> - </li> - <li>Faucibus porta lacus fringilla vel</li> - <li>Aenean sit amet erat nunc</li> - <li>Eget porttitor lorem</li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul> - <li>...</li> -</ul> -</pre> - - <h3>Ordered</h3> - <p>A list of items in which the order <em>does</em> explicitly matter.</p> - <div class="bs-docs-example"> - <ol> - <li>Lorem ipsum dolor sit amet</li> - <li>Consectetur adipiscing elit</li> - <li>Integer molestie lorem at massa</li> - <li>Facilisis in pretium nisl aliquet</li> - <li>Nulla volutpat aliquam velit</li> - <li>Faucibus porta lacus fringilla vel</li> - <li>Aenean sit amet erat nunc</li> - <li>Eget porttitor lorem</li> - </ol> - </div> -<pre class="prettyprint linenums"> -<ol> - <li>...</li> -</ol> -</pre> - - <h3>Unstyled</h3> - <p>Remove the default <code>list-style</code> and left padding on list items (immediate children only).</p> - <div class="bs-docs-example"> - <ul class="unstyled"> - <li>Lorem ipsum dolor sit amet</li> - <li>Consectetur adipiscing elit</li> - <li>Integer molestie lorem at massa</li> - <li>Facilisis in pretium nisl aliquet</li> - <li>Nulla volutpat aliquam velit - <ul> - <li>Phasellus iaculis neque</li> - <li>Purus sodales ultricies</li> - <li>Vestibulum laoreet porttitor sem</li> - <li>Ac tristique libero volutpat at</li> - </ul> - </li> - <li>Faucibus porta lacus fringilla vel</li> - <li>Aenean sit amet erat nunc</li> - <li>Eget porttitor lorem</li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="unstyled"> - <li>...</li> -</ul> -</pre> - - <h3>Inline</h3> - <p>Place all list items on a single line with <code>inline-block</code> and some light padding.</p> - <div class="bs-docs-example"> - <ul class="inline"> - <li>Lorem ipsum</li> - <li>Phasellus iaculis</li> - <li>Nulla volutpat</li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="inline"> - <li>...</li> -</ul> -</pre> - - <h3>Description</h3> - <p>A list of terms with their associated descriptions.</p> - <div class="bs-docs-example"> - <dl> - <dt>Description lists</dt> - <dd>A description list is perfect for defining terms.</dd> - <dt>Euismod</dt> - <dd>Vestibulum id ligula porta felis euismod semper eget lacinia odio sem nec elit.</dd> - <dd>Donec id elit non mi porta gravida at eget metus.</dd> - <dt>Malesuada porta</dt> - <dd>Etiam porta sem malesuada magna mollis euismod.</dd> - </dl> - </div> -<pre class="prettyprint linenums"> -<dl> - <dt>...</dt> - <dd>...</dd> -</dl> -</pre> - - <h4>Horizontal description</h4> - <p>Make terms and descriptions in <code><dl></code> line up side-by-side.</p> - <div class="bs-docs-example"> - <dl class="dl-horizontal"> - <dt>Description lists</dt> - <dd>A description list is perfect for defining terms.</dd> - <dt>Euismod</dt> - <dd>Vestibulum id ligula porta felis euismod semper eget lacinia odio sem nec elit.</dd> - <dd>Donec id elit non mi porta gravida at eget metus.</dd> - <dt>Malesuada porta</dt> - <dd>Etiam porta sem malesuada magna mollis euismod.</dd> - <dt>Felis euismod semper eget lacinia</dt> - <dd>Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</dd> - </dl> - </div> -<pre class="prettyprint linenums"> -<dl class="dl-horizontal"> - <dt>...</dt> - <dd>...</dd> -</dl> -</pre> - <p> - <span class="label label-info">Heads up!</span> - Horizontal description lists will truncate terms that are too long to fit in the left column fix <code>text-overflow</code>. In narrower viewports, they will change to the default stacked layout. - </p> - </section> - - - - <!-- Code - ================================================== --> - <section id="code"> - <div class="page-header"> - <h1>Code</h1> - </div> - - <h2>Inline</h2> - <p>Wrap inline snippets of code with <code><code></code>.</p> -<div class="bs-docs-example"> - For example, <code><section></code> should be wrapped as inline. -</div> -<pre class="prettyprint linenums"> -For example, <code>&lt;section&gt;</code> should be wrapped as inline. -</pre> - - <h2>Basic block</h2> - <p>Use <code><pre></code> for multiple lines of code. Be sure to escape any angle brackets in the code for proper rendering.</p> -<div class="bs-docs-example"> - <pre><p>Sample text here...</p></pre> -</div> -<pre class="prettyprint linenums" style="margin-bottom: 9px;"> -<pre> - &lt;p&gt;Sample text here...&lt;/p&gt; -</pre> -</pre> - <p><span class="label label-info">Heads up!</span> Be sure to keep code within <code><pre></code> tags as close to the left as possible; it will render all tabs.</p> - <p>You may optionally add the <code>.pre-scrollable</code> class which will set a max-height of 350px and provide a y-axis scrollbar.</p> - </section> - - - - <!-- Tables - ================================================== --> - <section id="tables"> - <div class="page-header"> - <h1>Tables</h1> - </div> - - <h2>Default styles</h2> - <p>For basic styling—light padding and only horizontal dividers—add the base class <code>.table</code> to any <code><table></code>.</p> - <div class="bs-docs-example"> - <table class="table"> - <thead> - <tr> - <th>#</th> - <th>First Name</th> - <th>Last Name</th> - <th>Username</th> - </tr> - </thead> - <tbody> - <tr> - <td>1</td> - <td>Mark</td> - <td>Otto</td> - <td>@mdo</td> - </tr> - <tr> - <td>2</td> - <td>Jacob</td> - <td>Thornton</td> - <td>@fat</td> - </tr> - <tr> - <td>3</td> - <td>Larry</td> - <td>the Bird</td> - <td>@twitter</td> - </tr> - </tbody> - </table> - </div> -<pre class="prettyprint linenums"> -<table class="table"> - … -</table> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>Optional classes</h2> - <p>Add any of the following classes to the <code>.table</code> base class.</p> - - <h3><code>.table-striped</code></h3> - <p>Adds zebra-striping to any table row within the <code><tbody></code> via the <code>:nth-child</code> CSS selector (not available in IE7-8).</p> - <div class="bs-docs-example"> - <table class="table table-striped"> - <thead> - <tr> - <th>#</th> - <th>First Name</th> - <th>Last Name</th> - <th>Username</th> - </tr> - </thead> - <tbody> - <tr> - <td>1</td> - <td>Mark</td> - <td>Otto</td> - <td>@mdo</td> - </tr> - <tr> - <td>2</td> - <td>Jacob</td> - <td>Thornton</td> - <td>@fat</td> - </tr> - <tr> - <td>3</td> - <td>Larry</td> - <td>the Bird</td> - <td>@twitter</td> - </tr> - </tbody> - </table> - </div> -<pre class="prettyprint linenums" style="margin-bottom: 18px;"> -<table class="table table-striped"> - … -</table> -</pre> - - <h3><code>.table-bordered</code></h3> - <p>Add borders and rounded corners to the table.</p> - <div class="bs-docs-example"> - <table class="table table-bordered"> - <thead> - <tr> - <th>#</th> - <th>First Name</th> - <th>Last Name</th> - <th>Username</th> - </tr> - </thead> - <tbody> - <tr> - <td rowspan="2">1</td> - <td>Mark</td> - <td>Otto</td> - <td>@mdo</td> - </tr> - <tr> - <td>Mark</td> - <td>Otto</td> - <td>@TwBootstrap</td> - </tr> - <tr> - <td>2</td> - <td>Jacob</td> - <td>Thornton</td> - <td>@fat</td> - </tr> - <tr> - <td>3</td> - <td colspan="2">Larry the Bird</td> - <td>@twitter</td> - </tr> - </tbody> - </table> - </div> -<pre class="prettyprint linenums"> -<table class="table table-bordered"> - … -</table> -</pre> - - <h3><code>.table-hover</code></h3> - <p>Enable a hover state on table rows within a <code><tbody></code>.</p> - <div class="bs-docs-example"> - <table class="table table-hover"> - <thead> - <tr> - <th>#</th> - <th>First Name</th> - <th>Last Name</th> - <th>Username</th> - </tr> - </thead> - <tbody> - <tr> - <td>1</td> - <td>Mark</td> - <td>Otto</td> - <td>@mdo</td> - </tr> - <tr> - <td>2</td> - <td>Jacob</td> - <td>Thornton</td> - <td>@fat</td> - </tr> - <tr> - <td>3</td> - <td colspan="2">Larry the Bird</td> - <td>@twitter</td> - </tr> - </tbody> - </table> - </div> -<pre class="prettyprint linenums" style="margin-bottom: 18px;"> -<table class="table table-hover"> - … -</table> -</pre> - - <h3><code>.table-condensed</code></h3> - <p>Makes tables more compact by cutting cell padding in half.</p> - <div class="bs-docs-example"> - <table class="table table-condensed"> - <thead> - <tr> - <th>#</th> - <th>First Name</th> - <th>Last Name</th> - <th>Username</th> - </tr> - </thead> - <tbody> - <tr> - <td>1</td> - <td>Mark</td> - <td>Otto</td> - <td>@mdo</td> - </tr> - <tr> - <td>2</td> - <td>Jacob</td> - <td>Thornton</td> - <td>@fat</td> - </tr> - <tr> - <td>3</td> - <td colspan="2">Larry the Bird</td> - <td>@twitter</td> - </tr> - </tbody> - </table> - </div> -<pre class="prettyprint linenums" style="margin-bottom: 18px;"> -<table class="table table-condensed"> - … -</table> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>Optional row classes</h2> - <p>Use contextual classes to color table rows.</p> - <table class="table table-bordered table-striped"> - <colgroup> - <col class="span1"> - <col class="span7"> - </colgroup> - <thead> - <tr> - <th>Class</th> - <th>Description</th> - </tr> - </thead> - <tbody> - <tr> - <td> - <code>.success</code> - </td> - <td>Indicates a successful or positive action.</td> - </tr> - <tr> - <td> - <code>.error</code> - </td> - <td>Indicates a dangerous or potentially negative action.</td> - </tr> - <tr> - <td> - <code>.warning</code> - </td> - <td>Indicates a warning that might need attention.</td> - </tr> - <tr> - <td> - <code>.info</code> - </td> - <td>Used as an alternative to the default styles.</td> - </tr> - </tbody> - </table> - <div class="bs-docs-example"> - <table class="table"> - <thead> - <tr> - <th>#</th> - <th>Product</th> - <th>Payment Taken</th> - <th>Status</th> - </tr> - </thead> - <tbody> - <tr class="success"> - <td>1</td> - <td>TB - Monthly</td> - <td>01/04/2012</td> - <td>Approved</td> - </tr> - <tr class="error"> - <td>2</td> - <td>TB - Monthly</td> - <td>02/04/2012</td> - <td>Declined</td> - </tr> - <tr class="warning"> - <td>3</td> - <td>TB - Monthly</td> - <td>03/04/2012</td> - <td>Pending</td> - </tr> - <tr class="info"> - <td>4</td> - <td>TB - Monthly</td> - <td>04/04/2012</td> - <td>Call in to confirm</td> - </tr> - </tbody> - </table> - </div> -<pre class="prettyprint linenums"> -... - <tr class="success"> - <td>1</td> - <td>TB - Monthly</td> - <td>01/04/2012</td> - <td>Approved</td> - </tr> -... -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>Supported table markup</h2> - <p>List of supported table HTML elements and how they should be used.</p> - <table class="table table-bordered table-striped"> - <colgroup> - <col class="span1"> - <col class="span7"> - </colgroup> - <thead> - <tr> - <th>Tag</th> - <th>Description</th> - </tr> - </thead> - <tbody> - <tr> - <td> - <code><table></code> - </td> - <td> - Wrapping element for displaying data in a tabular format - </td> - </tr> - <tr> - <td> - <code><thead></code> - </td> - <td> - Container element for table header rows (<code><tr></code>) to label table columns - </td> - </tr> - <tr> - <td> - <code><tbody></code> - </td> - <td> - Container element for table rows (<code><tr></code>) in the body of the table - </td> - </tr> - <tr> - <td> - <code><tr></code> - </td> - <td> - Container element for a set of table cells (<code><td></code> or <code><th></code>) that appears on a single row - </td> - </tr> - <tr> - <td> - <code><td></code> - </td> - <td> - Default table cell - </td> - </tr> - <tr> - <td> - <code><th></code> - </td> - <td> - Special table cell for column (or row, depending on scope and placement) labels - </td> - </tr> - <tr> - <td> - <code><caption></code> - </td> - <td> - Description or summary of what the table holds, especially useful for screen readers - </td> - </tr> - </tbody> - </table> -<pre class="prettyprint linenums"> -<table> - <caption>...</caption> - <thead> - <tr> - <th>...</th> - <th>...</th> - </tr> - </thead> - <tbody> - <tr> - <td>...</td> - <td>...</td> - </tr> - </tbody> -</table> -</pre> - - </section> - - - - <!-- Forms - ================================================== --> - <section id="forms"> - <div class="page-header"> - <h1>Forms</h1> - </div> - - <h2>Default styles</h2> - <p>Individual form controls receive styling, but without any required base class on the <code><form></code> or large changes in markup. Results in stacked, left-aligned labels on top of form controls.</p> - <form class="bs-docs-example"> - <fieldset> - <legend>Legend</legend> - <label>Label name</label> - <input type="text" placeholder="Type something…"> - <span class="help-block">Example block-level help text here.</span> - <label class="checkbox"> - <input type="checkbox"> Check me out - </label> - <button type="submit" class="btn">Submit</button> - </fieldset> - </form> -<pre class="prettyprint linenums"> -<form> - <fieldset> - <legend>Legend</legend> - <label>Label name</label> - <input type="text" placeholder="Type something…"> - <span class="help-block">Example block-level help text here.</span> - <label class="checkbox"> - <input type="checkbox"> Check me out - </label> - <button type="submit" class="btn">Submit</button> - </fieldset> -</form> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>Optional layouts</h2> - <p>Included with Bootstrap are three optional form layouts for common use cases.</p> - - <h3>Search form</h3> - <p>Add <code>.form-search</code> to the form and <code>.search-query</code> to the <code><input></code> for an extra-rounded text input.</p> - <form class="bs-docs-example form-search"> - <input type="text" class="input-medium search-query"> - <button type="submit" class="btn">Search</button> - </form> -<pre class="prettyprint linenums"> -<form class="form-search"> - <input type="text" class="input-medium search-query"> - <button type="submit" class="btn">Search</button> -</form> -</pre> - - <h3>Inline form</h3> - <p>Add <code>.form-inline</code> for left-aligned labels and inline-block controls for a compact layout.</p> - <form class="bs-docs-example form-inline"> - <input type="text" class="input-small" placeholder="Email"> - <input type="password" class="input-small" placeholder="Password"> - <label class="checkbox"> - <input type="checkbox"> Remember me - </label> - <button type="submit" class="btn">Sign in</button> - </form> -<pre class="prettyprint linenums"> -<form class="form-inline"> - <input type="text" class="input-small" placeholder="Email"> - <input type="password" class="input-small" placeholder="Password"> - <label class="checkbox"> - <input type="checkbox"> Remember me - </label> - <button type="submit" class="btn">Sign in</button> -</form> -</pre> - - <h3>Horizontal form</h3> - <p>Right align labels and float them to the left to make them appear on the same line as controls. Requires the most markup changes from a default form:</p> - <ul> - <li>Add <code>.form-horizontal</code> to the form</li> - <li>Wrap labels and controls in <code>.control-group</code></li> - <li>Add <code>.control-label</code> to the label</li> - <li>Wrap any associated controls in <code>.controls</code> for proper alignment</li> - </ul> - <form class="bs-docs-example form-horizontal"> - <div class="control-group"> - <label class="control-label" for="inputEmail">Email</label> - <div class="controls"> - <input type="text" id="inputEmail" placeholder="Email"> - </div> - </div> - <div class="control-group"> - <label class="control-label" for="inputPassword">Password</label> - <div class="controls"> - <input type="password" id="inputPassword" placeholder="Password"> - </div> - </div> - <div class="control-group"> - <div class="controls"> - <label class="checkbox"> - <input type="checkbox"> Remember me - </label> - <button type="submit" class="btn">Sign in</button> - </div> - </div> - </form> -<pre class="prettyprint linenums"> -<form class="form-horizontal"> - <div class="control-group"> - <label class="control-label" for="inputEmail">Email</label> - <div class="controls"> - <input type="text" id="inputEmail" placeholder="Email"> - </div> - </div> - <div class="control-group"> - <label class="control-label" for="inputPassword">Password</label> - <div class="controls"> - <input type="password" id="inputPassword" placeholder="Password"> - </div> - </div> - <div class="control-group"> - <div class="controls"> - <label class="checkbox"> - <input type="checkbox"> Remember me - </label> - <button type="submit" class="btn">Sign in</button> - </div> - </div> -</form> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>Supported form controls</h2> - <p>Examples of standard form controls supported in an example form layout.</p> - - <h3>Inputs</h3> - <p>Most common form control, text-based input fields. Includes support for all HTML5 types: text, password, datetime, datetime-local, date, month, time, week, number, email, url, search, tel, and color.</p> - <p>Requires the use of a specified <code>type</code> at all times.</p> - <form class="bs-docs-example form-inline"> - <input type="text" placeholder="Text input"> - </form> -<pre class="prettyprint linenums"> -<input type="text" placeholder="Text input"> -</pre> - - <h3>Textarea</h3> - <p>Form control which supports multiple lines of text. Change <code>rows</code> attribute as necessary.</p> - <form class="bs-docs-example form-inline"> - <textarea rows="3"></textarea> - </form> -<pre class="prettyprint linenums"> -<textarea rows="3"></textarea> -</pre> - - <h3>Checkboxes and radios</h3> - <p>Checkboxes are for selecting one or several options in a list while radios are for selecting one option from many.</p> - <h4>Default (stacked)</h4> - <form class="bs-docs-example"> - <label class="checkbox"> - <input type="checkbox" value=""> - Option one is this and that—be sure to include why it's great - </label> - <br> - <label class="radio"> - <input type="radio" name="optionsRadios" id="optionsRadios1" value="option1" checked> - Option one is this and that—be sure to include why it's great - </label> - <label class="radio"> - <input type="radio" name="optionsRadios" id="optionsRadios2" value="option2"> - Option two can be something else and selecting it will deselect option one - </label> - </form> -<pre class="prettyprint linenums"> -<label class="checkbox"> - <input type="checkbox" value=""> - Option one is this and that—be sure to include why it's great -</label> - -<label class="radio"> - <input type="radio" name="optionsRadios" id="optionsRadios1" value="option1" checked> - Option one is this and that—be sure to include why it's great -</label> -<label class="radio"> - <input type="radio" name="optionsRadios" id="optionsRadios2" value="option2"> - Option two can be something else and selecting it will deselect option one -</label> -</pre> - - <h4>Inline checkboxes</h4> - <p>Add the <code>.inline</code> class to a series of checkboxes or radios for controls appear on the same line.</p> - <form class="bs-docs-example"> - <label class="checkbox inline"> - <input type="checkbox" id="inlineCheckbox1" value="option1"> 1 - </label> - <label class="checkbox inline"> - <input type="checkbox" id="inlineCheckbox2" value="option2"> 2 - </label> - <label class="checkbox inline"> - <input type="checkbox" id="inlineCheckbox3" value="option3"> 3 - </label> - </form> -<pre class="prettyprint linenums"> -<label class="checkbox inline"> - <input type="checkbox" id="inlineCheckbox1" value="option1"> 1 -</label> -<label class="checkbox inline"> - <input type="checkbox" id="inlineCheckbox2" value="option2"> 2 -</label> -<label class="checkbox inline"> - <input type="checkbox" id="inlineCheckbox3" value="option3"> 3 -</label> -</pre> - - <h3>Selects</h3> - <p>Use the default option or specify a <code>multiple="multiple"</code> to show multiple options at once.</p> - <form class="bs-docs-example"> - <select> - <option>1</option> - <option>2</option> - <option>3</option> - <option>4</option> - <option>5</option> - </select> - <br> - <select multiple="multiple"> - <option>1</option> - <option>2</option> - <option>3</option> - <option>4</option> - <option>5</option> - </select> - </form> -<pre class="prettyprint linenums"> -<select> - <option>1</option> - <option>2</option> - <option>3</option> - <option>4</option> - <option>5</option> -</select> - -<select multiple="multiple"> - <option>1</option> - <option>2</option> - <option>3</option> - <option>4</option> - <option>5</option> -</select> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>Extending form controls</h2> - <p>Adding on top of existing browser controls, Bootstrap includes other useful form components.</p> - - <h3>Prepended and appended inputs</h3> - <p>Add text or buttons before or after any text-based input. Do note that <code>select</code> elements are not supported here.</p> - - <h4>Default options</h4> - <p>Wrap an <code>.add-on</code> and an <code>input</code> with one of two classes to prepend or append text to an input.</p> - <form class="bs-docs-example"> - <div class="input-prepend"> - <span class="add-on">@</span> - <input class="span2" id="prependedInput" type="text" placeholder="Username"> - </div> - <br> - <div class="input-append"> - <input class="span2" id="appendedInput" type="text"> - <span class="add-on">.00</span> - </div> - </form> -<pre class="prettyprint linenums"> -<div class="input-prepend"> - <span class="add-on">@</span> - <input class="span2" id="prependedInput" type="text" placeholder="Username"> -</div> -<div class="input-append"> - <input class="span2" id="appendedInput" type="text"> - <span class="add-on">.00</span> -</div> -</pre> - - <h4>Combined</h4> - <p>Use both classes and two instances of <code>.add-on</code> to prepend and append an input.</p> - <form class="bs-docs-example form-inline"> - <div class="input-prepend input-append"> - <span class="add-on">$</span> - <input class="span2" id="appendedPrependedInput" type="text"> - <span class="add-on">.00</span> - </div> - </form> -<pre class="prettyprint linenums"> -<div class="input-prepend input-append"> - <span class="add-on">$</span> - <input class="span2" id="appendedPrependedInput" type="text"> - <span class="add-on">.00</span> -</div> -</pre> - - <h4>Buttons instead of text</h4> - <p>Instead of a <code><span></code> with text, use a <code>.btn</code> to attach a button (or two) to an input.</p> - <form class="bs-docs-example"> - <div class="input-append"> - <input class="span2" id="appendedInputButton" type="text"> - <button class="btn" type="button">Go!</button> - </div> - </form> -<pre class="prettyprint linenums"> -<div class="input-append"> - <input class="span2" id="appendedInputButton" type="text"> - <button class="btn" type="button">Go!</button> -</div> -</pre> - <form class="bs-docs-example"> - <div class="input-append"> - <input class="span2" id="appendedInputButtons" type="text"> - <button class="btn" type="button">Search</button> - <button class="btn" type="button">Options</button> - </div> - </form> -<pre class="prettyprint linenums"> -<div class="input-append"> - <input class="span2" id="appendedInputButtons" type="text"> - <button class="btn" type="button">Search</button> - <button class="btn" type="button">Options</button> -</div> -</pre> - - <h4>Button dropdowns</h4> - <p></p> - <form class="bs-docs-example"> - <div class="input-append"> - <input class="span2" id="appendedDropdownButton" type="text"> - <div class="btn-group"> - <button class="btn dropdown-toggle" data-toggle="dropdown">Action <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - </div><!-- /input-append --> - </form> -<pre class="prettyprint linenums"> -<div class="input-append"> - <input class="span2" id="appendedDropdownButton" type="text"> - <div class="btn-group"> - <button class="btn dropdown-toggle" data-toggle="dropdown"> - Action - <span class="caret"></span> - </button> - <ul class="dropdown-menu"> - ... - </ul> - </div> -</div> -</pre> - - <form class="bs-docs-example"> - <div class="input-prepend"> - <div class="btn-group"> - <button class="btn dropdown-toggle" data-toggle="dropdown">Action <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - <input class="span2" id="prependedDropdownButton" type="text"> - </div><!-- /input-prepend --> - </form> -<pre class="prettyprint linenums"> -<div class="input-prepend"> - <div class="btn-group"> - <button class="btn dropdown-toggle" data-toggle="dropdown"> - Action - <span class="caret"></span> - </button> - <ul class="dropdown-menu"> - ... - </ul> - </div> - <input class="span2" id="prependedDropdownButton" type="text"> -</div> -</pre> - - <form class="bs-docs-example"> - <div class="input-prepend input-append"> - <div class="btn-group"> - <button class="btn dropdown-toggle" data-toggle="dropdown">Action <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - <input class="span2" id="appendedPrependedDropdownButton" type="text"> - <div class="btn-group"> - <button class="btn dropdown-toggle" data-toggle="dropdown">Action <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - </div><!-- /input-prepend input-append --> - </form> -<pre class="prettyprint linenums"> -<div class="input-prepend input-append"> - <div class="btn-group"> - <button class="btn dropdown-toggle" data-toggle="dropdown"> - Action - <span class="caret"></span> - </button> - <ul class="dropdown-menu"> - ... - </ul> - </div> - <input class="span2" id="appendedPrependedDropdownButton" type="text"> - <div class="btn-group"> - <button class="btn dropdown-toggle" data-toggle="dropdown"> - Action - <span class="caret"></span> - </button> - <ul class="dropdown-menu"> - ... - </ul> - </div> -</div> -</pre> - - <h4>Segmented dropdown groups</h4> - <form class="bs-docs-example"> - <div class="input-prepend"> - <div class="btn-group"> - <button class="btn" tabindex="-1">Action</button> - <button class="btn dropdown-toggle" data-toggle="dropdown" tabindex="-1"> - <span class="caret"></span> - </button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div> - <input type="text"> - </div> - <div class="input-append"> - <input type="text"> - <div class="btn-group"> - <button class="btn" tabindex="-1">Action</button> - <button class="btn dropdown-toggle" data-toggle="dropdown" tabindex="-1"> - <span class="caret"></span> - </button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div> - </div> - </form> -<pre class="prettyprint linenums"> -<form> - <div class="input-prepend"> - <div class="btn-group">...</div> - <input type="text"> - </div> - <div class="input-append"> - <input type="text"> - <div class="btn-group">...</div> - </div> -</form> -</pre> - - <h4>Search form</h4> - <form class="bs-docs-example form-search"> - <div class="input-append"> - <input type="text" class="span2 search-query"> - <button type="submit" class="btn">Search</button> - </div> - <div class="input-prepend"> - <button type="submit" class="btn">Search</button> - <input type="text" class="span2 search-query"> - </div> - </form> -<pre class="prettyprint linenums"> -<form class="form-search"> - <div class="input-append"> - <input type="text" class="span2 search-query"> - <button type="submit" class="btn">Search</button> - </div> - <div class="input-prepend"> - <button type="submit" class="btn">Search</button> - <input type="text" class="span2 search-query"> - </div> -</form> -</pre> - - <h3>Control sizing</h3> - <p>Use relative sizing classes like <code>.input-large</code> or match your inputs to the grid column sizes using <code>.span*</code> classes.</p> - - <h4>Block level inputs</h4> - <p>Make any <code><input></code> or <code><textarea></code> element behave like a block level element.</p> - <form class="bs-docs-example" style="padding-bottom: 15px;"> - <div class="controls"> - <input class="input-block-level" type="text" placeholder=".input-block-level"> - </div> - </form> -<pre class="prettyprint linenums"> -<input class="input-block-level" type="text" placeholder=".input-block-level"> -</pre> - - <h4>Relative sizing</h4> - <form class="bs-docs-example" style="padding-bottom: 15px;"> - <div class="controls docs-input-sizes"> - <input class="input-mini" type="text" placeholder=".input-mini"> - <input class="input-small" type="text" placeholder=".input-small"> - <input class="input-medium" type="text" placeholder=".input-medium"> - <input class="input-large" type="text" placeholder=".input-large"> - <input class="input-xlarge" type="text" placeholder=".input-xlarge"> - <input class="input-xxlarge" type="text" placeholder=".input-xxlarge"> - </div> - </form> -<pre class="prettyprint linenums"> -<input class="input-mini" type="text" placeholder=".input-mini"> -<input class="input-small" type="text" placeholder=".input-small"> -<input class="input-medium" type="text" placeholder=".input-medium"> -<input class="input-large" type="text" placeholder=".input-large"> -<input class="input-xlarge" type="text" placeholder=".input-xlarge"> -<input class="input-xxlarge" type="text" placeholder=".input-xxlarge"> -</pre> - <p> - <span class="label label-info">Heads up!</span> In future versions, we'll be altering the use of these relative input classes to match our button sizes. For example, <code>.input-large</code> will increase the padding and font-size of an input. - </p> - - <h4>Grid sizing</h4> - <p>Use <code>.span1</code> to <code>.span12</code> for inputs that match the same sizes of the grid columns.</p> - <form class="bs-docs-example" style="padding-bottom: 15px;"> - <div class="controls docs-input-sizes"> - <input class="span1" type="text" placeholder=".span1"> - <input class="span2" type="text" placeholder=".span2"> - <input class="span3" type="text" placeholder=".span3"> - <select class="span1"> - <option>1</option> - <option>2</option> - <option>3</option> - <option>4</option> - <option>5</option> - </select> - <select class="span2"> - <option>1</option> - <option>2</option> - <option>3</option> - <option>4</option> - <option>5</option> - </select> - <select class="span3"> - <option>1</option> - <option>2</option> - <option>3</option> - <option>4</option> - <option>5</option> - </select> - </div> - </form> -<pre class="prettyprint linenums"> -<input class="span1" type="text" placeholder=".span1"> -<input class="span2" type="text" placeholder=".span2"> -<input class="span3" type="text" placeholder=".span3"> -<select class="span1"> - ... -</select> -<select class="span2"> - ... -</select> -<select class="span3"> - ... -</select> -</pre> - - <p>For multiple grid inputs per line, <strong>use the <code>.controls-row</code> modifier class for proper spacing</strong>. It floats the inputs to collapse white-space, sets the proper margins, and clears the float.</p> - <form class="bs-docs-example" style="padding-bottom: 15px;"> - <div class="controls"> - <input class="span5" type="text" placeholder=".span5"> - </div> - <div class="controls controls-row"> - <input class="span4" type="text" placeholder=".span4"> - <input class="span1" type="text" placeholder=".span1"> - </div> - <div class="controls controls-row"> - <input class="span3" type="text" placeholder=".span3"> - <input class="span2" type="text" placeholder=".span2"> - </div> - <div class="controls controls-row"> - <input class="span2" type="text" placeholder=".span2"> - <input class="span3" type="text" placeholder=".span3"> - </div> - <div class="controls controls-row"> - <input class="span1" type="text" placeholder=".span1"> - <input class="span4" type="text" placeholder=".span4"> - </div> - </form> -<pre class="prettyprint linenums"> -<div class="controls"> - <input class="span5" type="text" placeholder=".span5"> -</div> -<div class="controls controls-row"> - <input class="span4" type="text" placeholder=".span4"> - <input class="span1" type="text" placeholder=".span1"> -</div> -... -</pre> - - <h3>Uneditable inputs</h3> - <p>Present data in a form that's not editable without using actual form markup.</p> - <form class="bs-docs-example"> - <span class="input-xlarge uneditable-input">Some value here</span> - </form> -<pre class="prettyprint linenums"> -<span class="input-xlarge uneditable-input">Some value here</span> -</pre> - - <h3>Form actions</h3> - <p>End a form with a group of actions (buttons). When placed within a <code>.form-actions</code>, the buttons will automatically indent to line up with the form controls.</p> - <form class="bs-docs-example"> - <div class="form-actions"> - <button type="submit" class="btn btn-primary">Save changes</button> - <button type="button" class="btn">Cancel</button> - </div> - </form> -<pre class="prettyprint linenums"> -<div class="form-actions"> - <button type="submit" class="btn btn-primary">Save changes</button> - <button type="button" class="btn">Cancel</button> -</div> -</pre> - - <h3>Help text</h3> - <p>Inline and block level support for help text that appears around form controls.</p> - <h4>Inline help</h4> - <form class="bs-docs-example form-inline"> - <input type="text"> <span class="help-inline">Inline help text</span> - </form> -<pre class="prettyprint linenums"> -<input type="text"><span class="help-inline">Inline help text</span> -</pre> - - <h4>Block help</h4> - <form class="bs-docs-example form-inline"> - <input type="text"> - <span class="help-block">A longer block of help text that breaks onto a new line and may extend beyond one line.</span> - </form> -<pre class="prettyprint linenums"> -<input type="text"><span class="help-block">A longer block of help text that breaks onto a new line and may extend beyond one line.</span> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>Form control states</h2> - <p>Provide feedback to users or visitors with basic feedback states on form controls and labels.</p> - - <h3>Input focus</h3> - <p>We remove the default <code>outline</code> styles on some form controls and apply a <code>box-shadow</code> in its place for <code>:focus</code>.</p> - <form class="bs-docs-example form-inline"> - <input class="input-xlarge focused" id="focusedInput" type="text" value="This is focused..."> - </form> -<pre class="prettyprint linenums"> -<input class="input-xlarge" id="focusedInput" type="text" value="This is focused..."> -</pre> - - <h3>Invalid inputs</h3> - <p>Style inputs via default browser functionality with <code>:invalid</code>. Specify a <code>type</code>, add the <code>required</code> attribute if the field is not optional, and (if applicable) specify a <code>pattern</code>.</p> - <p>This is not available in versions of Internet Explorer 7-9 due to lack of support for CSS pseudo selectors.</p> - <form class="bs-docs-example form-inline"> - <input class="span3" type="email" placeholder="test@example.com" required> - </form> -<pre class="prettyprint linenums"> -<input class="span3" type="email" required> -</pre> - - <h3>Disabled inputs</h3> - <p>Add the <code>disabled</code> attribute on an input to prevent user input and trigger a slightly different look.</p> - <form class="bs-docs-example form-inline"> - <input class="input-xlarge" id="disabledInput" type="text" placeholder="Disabled input here…" disabled> - </form> -<pre class="prettyprint linenums"> -<input class="input-xlarge" id="disabledInput" type="text" placeholder="Disabled input here..." disabled> -</pre> - - <h3>Validation states</h3> - <p>Bootstrap includes validation styles for error, warning, info, and success messages. To use, add the appropriate class to the surrounding <code>.control-group</code>.</p> - - <form class="bs-docs-example form-horizontal"> - <div class="control-group warning"> - <label class="control-label" for="inputWarning">Input with warning</label> - <div class="controls"> - <input type="text" id="inputWarning"> - <span class="help-inline">Something may have gone wrong</span> - </div> - </div> - <div class="control-group error"> - <label class="control-label" for="inputError">Input with error</label> - <div class="controls"> - <input type="text" id="inputError"> - <span class="help-inline">Please correct the error</span> - </div> - </div> - <div class="control-group info"> - <label class="control-label" for="inputInfo">Input with info</label> - <div class="controls"> - <input type="text" id="inputInfo"> - <span class="help-inline">Username is taken</span> - </div> - </div> - <div class="control-group success"> - <label class="control-label" for="inputSuccess">Input with success</label> - <div class="controls"> - <input type="text" id="inputSuccess"> - <span class="help-inline">Woohoo!</span> - </div> - </div> - </form> -<pre class="prettyprint linenums"> -<div class="control-group warning"> - <label class="control-label" for="inputWarning">Input with warning</label> - <div class="controls"> - <input type="text" id="inputWarning"> - <span class="help-inline">Something may have gone wrong</span> - </div> -</div> - -<div class="control-group error"> - <label class="control-label" for="inputError">Input with error</label> - <div class="controls"> - <input type="text" id="inputError"> - <span class="help-inline">Please correct the error</span> - </div> -</div> - -<div class="control-group info"> - <label class="control-label" for="inputInfo">Input with info</label> - <div class="controls"> - <input type="text" id="inputInfo"> - <span class="help-inline">Username is already taken</span> - </div> -</div> - -<div class="control-group success"> - <label class="control-label" for="inputSuccess">Input with success</label> - <div class="controls"> - <input type="text" id="inputSuccess"> - <span class="help-inline">Woohoo!</span> - </div> -</div> -</pre> - - </section> - - - - <!-- Buttons - ================================================== --> - <section id="buttons"> - <div class="page-header"> - <h1>Buttons</h1> - </div> - - <h2>Default buttons</h2> - <p>Button styles can be applied to anything with the <code>.btn</code> class applied. However, typically you'll want to apply these to only <code><a></code> and <code><button></code> elements for the best rendering.</p> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th>Button</th> - <th>class=""</th> - <th>Description</th> - </tr> - </thead> - <tbody> - <tr> - <td><button type="button" class="btn">Default</button></td> - <td><code>btn</code></td> - <td>Standard gray button with gradient</td> - </tr> - <tr> - <td><button type="button" class="btn btn-primary">Primary</button></td> - <td><code>btn btn-primary</code></td> - <td>Provides extra visual weight and identifies the primary action in a set of buttons</td> - </tr> - <tr> - <td><button type="button" class="btn btn-info">Info</button></td> - <td><code>btn btn-info</code></td> - <td>Used as an alternative to the default styles</td> - </tr> - <tr> - <td><button type="button" class="btn btn-success">Success</button></td> - <td><code>btn btn-success</code></td> - <td>Indicates a successful or positive action</td> - </tr> - <tr> - <td><button type="button" class="btn btn-warning">Warning</button></td> - <td><code>btn btn-warning</code></td> - <td>Indicates caution should be taken with this action</td> - </tr> - <tr> - <td><button type="button" class="btn btn-danger">Danger</button></td> - <td><code>btn btn-danger</code></td> - <td>Indicates a dangerous or potentially negative action</td> - </tr> - <tr> - <td><button type="button" class="btn btn-inverse">Inverse</button></td> - <td><code>btn btn-inverse</code></td> - <td>Alternate dark gray button, not tied to a semantic action or use</td> - </tr> - <tr> - <td><button type="button" class="btn btn-link">Link</button></td> - <td><code>btn btn-link</code></td> - <td>Deemphasize a button by making it look like a link while maintaining button behavior</td> - </tr> - </tbody> - </table> - - <h4>Cross browser compatibility</h4> - <p>IE9 doesn't crop background gradients on rounded corners, so we remove it. Related, IE9 jankifies disabled <code>button</code> elements, rendering text gray with a nasty text-shadow that we cannot fix.</p> - - - <h2>Button sizes</h2> - <p>Fancy larger or smaller buttons? Add <code>.btn-large</code>, <code>.btn-small</code>, or <code>.btn-mini</code> for additional sizes.</p> - <div class="bs-docs-example"> - <p> - <button type="button" class="btn btn-large btn-primary">Large button</button> - <button type="button" class="btn btn-large">Large button</button> - </p> - <p> - <button type="button" class="btn btn-primary">Default button</button> - <button type="button" class="btn">Default button</button> - </p> - <p> - <button type="button" class="btn btn-small btn-primary">Small button</button> - <button type="button" class="btn btn-small">Small button</button> - </p> - <p> - <button type="button" class="btn btn-mini btn-primary">Mini button</button> - <button type="button" class="btn btn-mini">Mini button</button> - </p> - </div> -<pre class="prettyprint linenums"> -<p> - <button class="btn btn-large btn-primary" type="button">Large button</button> - <button class="btn btn-large" type="button">Large button</button> -</p> -<p> - <button class="btn btn-primary" type="button">Default button</button> - <button class="btn" type="button">Default button</button> -</p> -<p> - <button class="btn btn-small btn-primary" type="button">Small button</button> - <button class="btn btn-small" type="button">Small button</button> -</p> -<p> - <button class="btn btn-mini btn-primary" type="button">Mini button</button> - <button class="btn btn-mini" type="button">Mini button</button> -</p> -</pre> - <p>Create block level buttons—those that span the full width of a parent— by adding <code>.btn-block</code>.</p> - <div class="bs-docs-example"> - <div class="well" style="max-width: 400px; margin: 0 auto 10px;"> - <button type="button" class="btn btn-large btn-block btn-primary">Block level button</button> - <button type="button" class="btn btn-large btn-block">Block level button</button> - </div> - </div> -<pre class="prettyprint linenums"> -<button class="btn btn-large btn-block btn-primary" type="button">Block level button</button> -<button class="btn btn-large btn-block" type="button">Block level button</button> -</pre> - - - <h2>Disabled state</h2> - <p>Make buttons look unclickable by fading them back 50%.</p> - - <h3>Anchor element</h3> - <p>Add the <code>.disabled</code> class to <code><a></code> buttons.</p> - <p class="bs-docs-example"> - <a href="#" class="btn btn-large btn-primary disabled">Primary link</a> - <a href="#" class="btn btn-large disabled">Link</a> - </p> -<pre class="prettyprint linenums"> -<a href="#" class="btn btn-large btn-primary disabled">Primary link</a> -<a href="#" class="btn btn-large disabled">Link</a> -</pre> - <p> - <span class="label label-info">Heads up!</span> - We use <code>.disabled</code> as a utility class here, similar to the common <code>.active</code> class, so no prefix is required. Also, this class is only for aesthetic; you must use custom JavaScript to disable links here. - </p> - - <h3>Button element</h3> - <p>Add the <code>disabled</code> attribute to <code><button></code> buttons.</p> - <p class="bs-docs-example"> - <button type="button" class="btn btn-large btn-primary disabled" disabled="disabled">Primary button</button> - <button type="button" class="btn btn-large" disabled>Button</button> - </p> -<pre class="prettyprint linenums"> -<button type="button" class="btn btn-large btn-primary disabled" disabled="disabled">Primary button</button> -<button type="button" class="btn btn-large" disabled>Button</button> -</pre> - - - <h2>One class, multiple tags</h2> - <p>Use the <code>.btn</code> class on an <code><a></code>, <code><button></code>, or <code><input></code> element.</p> - <form class="bs-docs-example"> - <a class="btn" href="">Link</a> - <button class="btn" type="submit">Button</button> - <input class="btn" type="button" value="Input"> - <input class="btn" type="submit" value="Submit"> - </form> -<pre class="prettyprint linenums"> -<a class="btn" href="">Link</a> -<button class="btn" type="submit">Button</button> -<input class="btn" type="button" value="Input"> -<input class="btn" type="submit" value="Submit"> -</pre> - <p>As a best practice, try to match the element for your context to ensure matching cross-browser rendering. If you have an <code>input</code>, use an <code><input type="submit"></code> for your button.</p> - - </section> - - - - <!-- Images - ================================================== --> - <section id="images"> - <div class="page-header"> - <h1>Images</h1> - </div> - - <p>Add classes to an <code><img></code> element to easily style images in any project.</p> - <div class="bs-docs-example bs-docs-example-images"> - <img data-src="holder.js/140x140" class="img-rounded"> - <img data-src="holder.js/140x140" class="img-circle"> - <img data-src="holder.js/140x140" class="img-polaroid"> - </div> -<pre class="prettyprint linenums"> -<img src="..." class="img-rounded"> -<img src="..." class="img-circle"> -<img src="..." class="img-polaroid"> -</pre> - <p><span class="label label-info">Heads up!</span> <code>.img-rounded</code> and <code>.img-circle</code> do not work in IE7-8 due to lack of <code>border-radius</code> support.</p> - - - </section> - - - - <!-- Icons - ================================================== --> - <section id="icons"> - <div class="page-header"> - <h1>Icons <small>by <a href="http://glyphicons.com" target="_blank">Glyphicons</a></small></h1> - </div> - - <h2>Icon glyphs</h2> - <p>140 icons in sprite form, available in dark gray (default) and white, provided by <a href="http://glyphicons.com" target="_blank">Glyphicons</a>.</p> - <ul class="the-icons clearfix"> - <li><i class="icon-glass"></i> icon-glass</li> - <li><i class="icon-music"></i> icon-music</li> - <li><i class="icon-search"></i> icon-search</li> - <li><i class="icon-envelope"></i> icon-envelope</li> - <li><i class="icon-heart"></i> icon-heart</li> - <li><i class="icon-star"></i> icon-star</li> - <li><i class="icon-star-empty"></i> icon-star-empty</li> - <li><i class="icon-user"></i> icon-user</li> - <li><i class="icon-film"></i> icon-film</li> - <li><i class="icon-th-large"></i> icon-th-large</li> - <li><i class="icon-th"></i> icon-th</li> - <li><i class="icon-th-list"></i> icon-th-list</li> - <li><i class="icon-ok"></i> icon-ok</li> - <li><i class="icon-remove"></i> icon-remove</li> - <li><i class="icon-zoom-in"></i> icon-zoom-in</li> - <li><i class="icon-zoom-out"></i> icon-zoom-out</li> - <li><i class="icon-off"></i> icon-off</li> - <li><i class="icon-signal"></i> icon-signal</li> - <li><i class="icon-cog"></i> icon-cog</li> - <li><i class="icon-trash"></i> icon-trash</li> - <li><i class="icon-home"></i> icon-home</li> - <li><i class="icon-file"></i> icon-file</li> - <li><i class="icon-time"></i> icon-time</li> - <li><i class="icon-road"></i> icon-road</li> - <li><i class="icon-download-alt"></i> icon-download-alt</li> - <li><i class="icon-download"></i> icon-download</li> - <li><i class="icon-upload"></i> icon-upload</li> - <li><i class="icon-inbox"></i> icon-inbox</li> - - <li><i class="icon-play-circle"></i> icon-play-circle</li> - <li><i class="icon-repeat"></i> icon-repeat</li> - <li><i class="icon-refresh"></i> icon-refresh</li> - <li><i class="icon-list-alt"></i> icon-list-alt</li> - <li><i class="icon-lock"></i> icon-lock</li> - <li><i class="icon-flag"></i> icon-flag</li> - <li><i class="icon-headphones"></i> icon-headphones</li> - <li><i class="icon-volume-off"></i> icon-volume-off</li> - <li><i class="icon-volume-down"></i> icon-volume-down</li> - <li><i class="icon-volume-up"></i> icon-volume-up</li> - <li><i class="icon-qrcode"></i> icon-qrcode</li> - <li><i class="icon-barcode"></i> icon-barcode</li> - <li><i class="icon-tag"></i> icon-tag</li> - <li><i class="icon-tags"></i> icon-tags</li> - <li><i class="icon-book"></i> icon-book</li> - <li><i class="icon-bookmark"></i> icon-bookmark</li> - <li><i class="icon-print"></i> icon-print</li> - <li><i class="icon-camera"></i> icon-camera</li> - <li><i class="icon-font"></i> icon-font</li> - <li><i class="icon-bold"></i> icon-bold</li> - <li><i class="icon-italic"></i> icon-italic</li> - <li><i class="icon-text-height"></i> icon-text-height</li> - <li><i class="icon-text-width"></i> icon-text-width</li> - <li><i class="icon-align-left"></i> icon-align-left</li> - <li><i class="icon-align-center"></i> icon-align-center</li> - <li><i class="icon-align-right"></i> icon-align-right</li> - <li><i class="icon-align-justify"></i> icon-align-justify</li> - <li><i class="icon-list"></i> icon-list</li> - - <li><i class="icon-indent-left"></i> icon-indent-left</li> - <li><i class="icon-indent-right"></i> icon-indent-right</li> - <li><i class="icon-facetime-video"></i> icon-facetime-video</li> - <li><i class="icon-picture"></i> icon-picture</li> - <li><i class="icon-pencil"></i> icon-pencil</li> - <li><i class="icon-map-marker"></i> icon-map-marker</li> - <li><i class="icon-adjust"></i> icon-adjust</li> - <li><i class="icon-tint"></i> icon-tint</li> - <li><i class="icon-edit"></i> icon-edit</li> - <li><i class="icon-share"></i> icon-share</li> - <li><i class="icon-check"></i> icon-check</li> - <li><i class="icon-move"></i> icon-move</li> - <li><i class="icon-step-backward"></i> icon-step-backward</li> - <li><i class="icon-fast-backward"></i> icon-fast-backward</li> - <li><i class="icon-backward"></i> icon-backward</li> - <li><i class="icon-play"></i> icon-play</li> - <li><i class="icon-pause"></i> icon-pause</li> - <li><i class="icon-stop"></i> icon-stop</li> - <li><i class="icon-forward"></i> icon-forward</li> - <li><i class="icon-fast-forward"></i> icon-fast-forward</li> - <li><i class="icon-step-forward"></i> icon-step-forward</li> - <li><i class="icon-eject"></i> icon-eject</li> - <li><i class="icon-chevron-left"></i> icon-chevron-left</li> - <li><i class="icon-chevron-right"></i> icon-chevron-right</li> - <li><i class="icon-plus-sign"></i> icon-plus-sign</li> - <li><i class="icon-minus-sign"></i> icon-minus-sign</li> - <li><i class="icon-remove-sign"></i> icon-remove-sign</li> - <li><i class="icon-ok-sign"></i> icon-ok-sign</li> - - <li><i class="icon-question-sign"></i> icon-question-sign</li> - <li><i class="icon-info-sign"></i> icon-info-sign</li> - <li><i class="icon-screenshot"></i> icon-screenshot</li> - <li><i class="icon-remove-circle"></i> icon-remove-circle</li> - <li><i class="icon-ok-circle"></i> icon-ok-circle</li> - <li><i class="icon-ban-circle"></i> icon-ban-circle</li> - <li><i class="icon-arrow-left"></i> icon-arrow-left</li> - <li><i class="icon-arrow-right"></i> icon-arrow-right</li> - <li><i class="icon-arrow-up"></i> icon-arrow-up</li> - <li><i class="icon-arrow-down"></i> icon-arrow-down</li> - <li><i class="icon-share-alt"></i> icon-share-alt</li> - <li><i class="icon-resize-full"></i> icon-resize-full</li> - <li><i class="icon-resize-small"></i> icon-resize-small</li> - <li><i class="icon-plus"></i> icon-plus</li> - <li><i class="icon-minus"></i> icon-minus</li> - <li><i class="icon-asterisk"></i> icon-asterisk</li> - <li><i class="icon-exclamation-sign"></i> icon-exclamation-sign</li> - <li><i class="icon-gift"></i> icon-gift</li> - <li><i class="icon-leaf"></i> icon-leaf</li> - <li><i class="icon-fire"></i> icon-fire</li> - <li><i class="icon-eye-open"></i> icon-eye-open</li> - <li><i class="icon-eye-close"></i> icon-eye-close</li> - <li><i class="icon-warning-sign"></i> icon-warning-sign</li> - <li><i class="icon-plane"></i> icon-plane</li> - <li><i class="icon-calendar"></i> icon-calendar</li> - <li><i class="icon-random"></i> icon-random</li> - <li><i class="icon-comment"></i> icon-comment</li> - <li><i class="icon-magnet"></i> icon-magnet</li> - - <li><i class="icon-chevron-up"></i> icon-chevron-up</li> - <li><i class="icon-chevron-down"></i> icon-chevron-down</li> - <li><i class="icon-retweet"></i> icon-retweet</li> - <li><i class="icon-shopping-cart"></i> icon-shopping-cart</li> - <li><i class="icon-folder-close"></i> icon-folder-close</li> - <li><i class="icon-folder-open"></i> icon-folder-open</li> - <li><i class="icon-resize-vertical"></i> icon-resize-vertical</li> - <li><i class="icon-resize-horizontal"></i> icon-resize-horizontal</li> - <li><i class="icon-hdd"></i> icon-hdd</li> - <li><i class="icon-bullhorn"></i> icon-bullhorn</li> - <li><i class="icon-bell"></i> icon-bell</li> - <li><i class="icon-certificate"></i> icon-certificate</li> - <li><i class="icon-thumbs-up"></i> icon-thumbs-up</li> - <li><i class="icon-thumbs-down"></i> icon-thumbs-down</li> - <li><i class="icon-hand-right"></i> icon-hand-right</li> - <li><i class="icon-hand-left"></i> icon-hand-left</li> - <li><i class="icon-hand-up"></i> icon-hand-up</li> - <li><i class="icon-hand-down"></i> icon-hand-down</li> - <li><i class="icon-circle-arrow-right"></i> icon-circle-arrow-right</li> - <li><i class="icon-circle-arrow-left"></i> icon-circle-arrow-left</li> - <li><i class="icon-circle-arrow-up"></i> icon-circle-arrow-up</li> - <li><i class="icon-circle-arrow-down"></i> icon-circle-arrow-down</li> - <li><i class="icon-globe"></i> icon-globe</li> - <li><i class="icon-wrench"></i> icon-wrench</li> - <li><i class="icon-tasks"></i> icon-tasks</li> - <li><i class="icon-filter"></i> icon-filter</li> - <li><i class="icon-briefcase"></i> icon-briefcase</li> - <li><i class="icon-fullscreen"></i> icon-fullscreen</li> - </ul> - - <h3>Glyphicons attribution</h3> - <p><a href="http://glyphicons.com/">Glyphicons</a> Halflings are normally not available for free, but an arrangement between Bootstrap and the Glyphicons creators have made this possible at no cost to you as developers. As a thank you, we ask you to include an optional link back to <a href="http://glyphicons.com/">Glyphicons</a> whenever practical.</p> - - - <hr class="bs-docs-separator"> - - - <h2>How to use</h2> - <p>All icons require an <code><i></code> tag with a unique class, prefixed with <code>icon-</code>. To use, place the following code just about anywhere:</p> -<pre class="prettyprint linenums"> -<i class="icon-search"></i> -</pre> - <p>There are also styles available for inverted (white) icons, made ready with one extra class. We will specifically enforce this class on hover and active states for nav and dropdown links.</p> -<pre class="prettyprint linenums"> -<i class="icon-search icon-white"></i> -</pre> - <p> - <span class="label label-info">Heads up!</span> - When using beside strings of text, as in buttons or nav links, be sure to leave a space after the <code><i></code> tag for proper spacing. - </p> - - - <hr class="bs-docs-separator"> - - - <h2>Icon examples</h2> - <p>Use them in buttons, button groups for a toolbar, navigation, or prepended form inputs.</p> - - <h4>Buttons</h4> - - <h5>Button group in a button toolbar</h5> - <div class="bs-docs-example"> - <div class="btn-toolbar"> - <div class="btn-group"> - <a class="btn" href="#"><i class="icon-align-left"></i></a> - <a class="btn" href="#"><i class="icon-align-center"></i></a> - <a class="btn" href="#"><i class="icon-align-right"></i></a> - <a class="btn" href="#"><i class="icon-align-justify"></i></a> - </div> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="btn-toolbar"> - <div class="btn-group"> - <a class="btn" href="#"><i class="icon-align-left"></i></a> - <a class="btn" href="#"><i class="icon-align-center"></i></a> - <a class="btn" href="#"><i class="icon-align-right"></i></a> - <a class="btn" href="#"><i class="icon-align-justify"></i></a> - </div> -</div> -</pre> - - <h5>Dropdown in a button group</h5> - <div class="bs-docs-example"> - <div class="btn-group"> - <a class="btn btn-primary" href="#"><i class="icon-user icon-white"></i> User</a> - <a class="btn btn-primary dropdown-toggle" data-toggle="dropdown" href="#"><span class="caret"></span></a> - <ul class="dropdown-menu"> - <li><a href="#"><i class="icon-pencil"></i> Edit</a></li> - <li><a href="#"><i class="icon-trash"></i> Delete</a></li> - <li><a href="#"><i class="icon-ban-circle"></i> Ban</a></li> - <li class="divider"></li> - <li><a href="#"><i class="i"></i> Make admin</a></li> - </ul> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="btn-group"> - <a class="btn btn-primary" href="#"><i class="icon-user icon-white"></i> User</a> - <a class="btn btn-primary dropdown-toggle" data-toggle="dropdown" href="#"><span class="caret"></span></a> - <ul class="dropdown-menu"> - <li><a href="#"><i class="icon-pencil"></i> Edit</a></li> - <li><a href="#"><i class="icon-trash"></i> Delete</a></li> - <li><a href="#"><i class="icon-ban-circle"></i> Ban</a></li> - <li class="divider"></li> - <li><a href="#"><i class="i"></i> Make admin</a></li> - </ul> -</div> -</pre> - - <h5>Button sizes</h5> - <div class="bs-docs-example"> - <a class="btn btn-large" href="#"><i class="icon-star"></i> Star</a> - <a class="btn btn-small" href="#"><i class="icon-star"></i> Star</a> - <a class="btn btn-mini" href="#"><i class="icon-star"></i> Star</a> - </div> -<pre class="prettyprint linenums"> -<a class="btn btn-large" href="#"><i class="icon-star"></i> Star</a> -<a class="btn btn-small" href="#"><i class="icon-star"></i> Star</a> -<a class="btn btn-mini" href="#"><i class="icon-star"></i> Star</a> -</pre> - - <h4>Navigation</h4> - <div class="bs-docs-example"> - <div class="well" style="padding: 8px 0; margin-bottom: 0;"> - <ul class="nav nav-list"> - <li class="active"><a href="#"><i class="icon-home icon-white"></i> Home</a></li> - <li><a href="#"><i class="icon-book"></i> Library</a></li> - <li><a href="#"><i class="icon-pencil"></i> Applications</a></li> - <li><a href="#"><i class="i"></i> Misc</a></li> - </ul> - </div> - </div> -<pre class="prettyprint linenums"> -<ul class="nav nav-list"> - <li class="active"><a href="#"><i class="icon-home icon-white"></i> Home</a></li> - <li><a href="#"><i class="icon-book"></i> Library</a></li> - <li><a href="#"><i class="icon-pencil"></i> Applications</a></li> - <li><a href="#"><i class="i"></i> Misc</a></li> -</ul> -</pre> - - <h4>Form fields</h4> - <form class="bs-docs-example form-horizontal"> - <div class="control-group"> - <label class="control-label" for="inputIcon">Email address</label> - <div class="controls"> - <div class="input-prepend"> - <span class="add-on"><i class="icon-envelope"></i></span><input class="span2" id="inputIcon" type="text"> - </div> - </div> - </div> - </form> -<pre class="prettyprint linenums"> -<div class="control-group"> - <label class="control-label" for="inputIcon">Email address</label> - <div class="controls"> - <div class="input-prepend"> - <span class="add-on"><i class="icon-envelope"></i></span> - <input class="span2" id="inputIcon" type="text"> - </div> - </div> -</div> -</pre> - - </section> - - - - </div> - </div> - - </div> - - - - <!-- Footer - ================================================== --> - <footer class="footer"> - <div class="container"> - <p>Designed and built with all the love in the world by <a href="http://twitter.com/mdo" target="_blank">@mdo</a> and <a href="http://twitter.com/fat" target="_blank">@fat</a>.</p> - <p>Code licensed under <a href="http://www.apache.org/licenses/LICENSE-2.0" target="_blank">Apache License v2.0</a>, documentation under <a href="http://creativecommons.org/licenses/by/3.0/">CC BY 3.0</a>.</p> - <p><a href="http://glyphicons.com">Glyphicons Free</a> licensed under <a href="http://creativecommons.org/licenses/by/3.0/">CC BY 3.0</a>.</p> - <ul class="footer-links"> - <li><a href="http://blog.getbootstrap.com">Blog</a></li> - <li class="muted">·</li> - <li><a href="https://github.com/twitter/bootstrap/issues?state=open">Issues</a></li> - <li class="muted">·</li> - <li><a href="https://github.com/twitter/bootstrap/blob/master/CHANGELOG.md">Changelog</a></li> - </ul> - </div> - </footer> - - - - <!-- Le javascript - ================================================== --> - <!-- Placed at the end of the document so the pages load faster --> - <script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> - <script src="assets/js/jquery.js"></script> - <script src="assets/js/bootstrap-transition.js"></script> - <script src="assets/js/bootstrap-alert.js"></script> - <script src="assets/js/bootstrap-modal.js"></script> - <script src="assets/js/bootstrap-dropdown.js"></script> - <script src="assets/js/bootstrap-scrollspy.js"></script> - <script src="assets/js/bootstrap-tab.js"></script> - <script src="assets/js/bootstrap-tooltip.js"></script> - <script src="assets/js/bootstrap-popover.js"></script> - <script src="assets/js/bootstrap-button.js"></script> - <script src="assets/js/bootstrap-collapse.js"></script> - <script src="assets/js/bootstrap-carousel.js"></script> - <script src="assets/js/bootstrap-typeahead.js"></script> - <script src="assets/js/bootstrap-affix.js"></script> - - <script src="assets/js/holder/holder.js"></script> - <script src="assets/js/google-code-prettify/prettify.js"></script> - - <script src="assets/js/application.js"></script> - - - - </body> -</html> diff --git a/src/main/webapp/bower_components/bootstrap/docs/build/index.js b/src/main/webapp/bower_components/bootstrap/docs/build/index.js deleted file mode 100644 index 1a9cb387..00000000 --- a/src/main/webapp/bower_components/bootstrap/docs/build/index.js +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/env node -var hogan = require('hogan.js') - , fs = require('fs') - , prod = process.argv[2] == 'production' - , title = 'Bootstrap' - -var layout, pages - -// compile layout template -layout = fs.readFileSync(__dirname + '/../templates/layout.mustache', 'utf-8') -layout = hogan.compile(layout, { sectionTags: [{o:'_i', c:'i'}] }) - -// retrieve pages -pages = fs.readdirSync(__dirname + '/../templates/pages') - -// iterate over pages -pages.forEach(function (name) { - - if (!name.match(/\.mustache$/)) return - - var page = fs.readFileSync(__dirname + '/../templates/pages/' + name, 'utf-8') - , context = {} - - context[name.replace(/\.mustache$/, '')] = 'active' - context._i = true - context.production = prod - context.title = name - .replace(/\.mustache/, '') - .replace(/\-.*/, '') - .replace(/(.)/, function ($1) { return $1.toUpperCase() }) - - if (context.title == 'Index') { - context.title = title - } else { - context.title += ' · ' + title - } - - page = hogan.compile(page, { sectionTags: [{o:'_i', c:'i'}] }) - page = layout.render(context, { - body: page - }) - - fs.writeFileSync(__dirname + '/../' + name.replace(/mustache$/, 'html'), page, 'utf-8') -}) \ No newline at end of file diff --git a/src/main/webapp/bower_components/bootstrap/docs/build/package.json b/src/main/webapp/bower_components/bootstrap/docs/build/package.json deleted file mode 100644 index 97ab2590..00000000 --- a/src/main/webapp/bower_components/bootstrap/docs/build/package.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "bootstrap-doc-builder" -, "version": "0.0.1" -, "description": "build bootstrap docs" -, "dependencies": { "hogan.js": "1.0.5-dev" } -} diff --git a/src/main/webapp/bower_components/bootstrap/docs/components.html b/src/main/webapp/bower_components/bootstrap/docs/components.html deleted file mode 100644 index 7b960543..00000000 --- a/src/main/webapp/bower_components/bootstrap/docs/components.html +++ /dev/null @@ -1,2626 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <title>Components · Bootstrap</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta name="description" content=""> - <meta name="author" content=""> - - <!-- Le styles --> - <link href="assets/css/bootstrap.css" rel="stylesheet"> - <link href="assets/css/bootstrap-responsive.css" rel="stylesheet"> - <link href="assets/css/docs.css" rel="stylesheet"> - <link href="assets/js/google-code-prettify/prettify.css" rel="stylesheet"> - - <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements --> - <!--[if lt IE 9]> - <script src="assets/js/html5shiv.js"></script> - <![endif]--> - - <!-- Le fav and touch icons --> - <link rel="apple-touch-icon-precomposed" sizes="144x144" href="assets/ico/apple-touch-icon-144-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="114x114" href="assets/ico/apple-touch-icon-114-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="72x72" href="assets/ico/apple-touch-icon-72-precomposed.png"> - <link rel="apple-touch-icon-precomposed" href="assets/ico/apple-touch-icon-57-precomposed.png"> - <link rel="shortcut icon" href="assets/ico/favicon.png"> - - </head> - - <body data-spy="scroll" data-target=".bs-docs-sidebar"> - - <!-- Navbar - ================================================== --> - <div class="navbar navbar-inverse navbar-fixed-top"> - <div class="navbar-inner"> - <div class="container"> - <button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - </button> - <a class="brand" href="./index.html">Bootstrap</a> - <div class="nav-collapse collapse"> - <ul class="nav"> - <li class=""> - <a href="./index.html">Home</a> - </li> - <li class=""> - <a href="./getting-started.html">Get started</a> - </li> - <li class=""> - <a href="./scaffolding.html">Scaffolding</a> - </li> - <li class=""> - <a href="./base-css.html">Base CSS</a> - </li> - <li class="active"> - <a href="./components.html">Components</a> - </li> - <li class=""> - <a href="./javascript.html">JavaScript</a> - </li> - <li class=""> - <a href="./customize.html">Customize</a> - </li> - </ul> - </div> - </div> - </div> - </div> - -<!-- Subhead -================================================== --> -<header class="jumbotron subhead" id="overview"> - <div class="container"> - <h1>Components</h1> - <p class="lead">Dozens of reusable components built to provide navigation, alerts, popovers, and more.</p> - </div> -</header> - - - <div class="container"> - - <!-- Docs nav - ================================================== --> - <div class="row"> - <div class="span3 bs-docs-sidebar"> - <ul class="nav nav-list bs-docs-sidenav"> - <li><a href="#dropdowns"><i class="icon-chevron-right"></i> Dropdowns</a></li> - <li><a href="#buttonGroups"><i class="icon-chevron-right"></i> Button groups</a></li> - <li><a href="#buttonDropdowns"><i class="icon-chevron-right"></i> Button dropdowns</a></li> - <li><a href="#navs"><i class="icon-chevron-right"></i> Navs</a></li> - <li><a href="#navbar"><i class="icon-chevron-right"></i> Navbar</a></li> - <li><a href="#breadcrumbs"><i class="icon-chevron-right"></i> Breadcrumbs</a></li> - <li><a href="#pagination"><i class="icon-chevron-right"></i> Pagination</a></li> - <li><a href="#labels-badges"><i class="icon-chevron-right"></i> Labels and badges</a></li> - <li><a href="#typography"><i class="icon-chevron-right"></i> Typography</a></li> - <li><a href="#thumbnails"><i class="icon-chevron-right"></i> Thumbnails</a></li> - <li><a href="#alerts"><i class="icon-chevron-right"></i> Alerts</a></li> - <li><a href="#progress"><i class="icon-chevron-right"></i> Progress bars</a></li> - <li><a href="#media"><i class="icon-chevron-right"></i> Media object</a></li> - <li><a href="#misc"><i class="icon-chevron-right"></i> Misc</a></li> - </ul> - </div> - <div class="span9"> - - - - <!-- Dropdowns - ================================================== --> - <section id="dropdowns"> - <div class="page-header"> - <h1>Dropdown menus</h1> - </div> - - <h2>Example</h2> - <p>Toggleable, contextual menu for displaying lists of links. Made interactive with the <a href="./javascript.html#dropdowns">dropdown JavaScript plugin</a>.</p> - <div class="bs-docs-example"> - <div class="dropdown clearfix"> - <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu" style="display: block; position: static; margin-bottom: 5px; *width: 180px;"> - <li><a tabindex="-1" href="#">Action</a></li> - <li><a tabindex="-1" href="#">Another action</a></li> - <li><a tabindex="-1" href="#">Something else here</a></li> - <li class="divider"></li> - <li><a tabindex="-1" href="#">Separated link</a></li> - </ul> - </div> - </div> -<pre class="prettyprint linenums"> -<ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu"> - <li><a tabindex="-1" href="#">Action</a></li> - <li><a tabindex="-1" href="#">Another action</a></li> - <li><a tabindex="-1" href="#">Something else here</a></li> - <li class="divider"></li> - <li><a tabindex="-1" href="#">Separated link</a></li> -</ul> -</pre> - - <h2>Markup</h2> - <p>Looking at just the dropdown menu, here's the required HTML. You need to wrap the dropdown's trigger and the dropdown menu within <code>.dropdown</code>, or another element that declares <code>position: relative;</code>. Then just create the menu.</p> - -<pre class="prettyprint linenums"> -<div class="dropdown"> - <!-- Link or button to toggle dropdown --> - <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"> - <li><a tabindex="-1" href="#">Action</a></li> - <li><a tabindex="-1" href="#">Another action</a></li> - <li><a tabindex="-1" href="#">Something else here</a></li> - <li class="divider"></li> - <li><a tabindex="-1" href="#">Separated link</a></li> - </ul> -</div> -</pre> - - <h2>Options</h2> - <p>Align menus to the right and add include additional levels of dropdowns.</p> - - <h3>Aligning the menus</h3> - <p>Add <code>.pull-right</code> to a <code>.dropdown-menu</code> to right align the dropdown menu.</p> -<pre class="prettyprint linenums"> -<ul class="dropdown-menu pull-right" role="menu" aria-labelledby="dLabel"> - ... -</ul> -</pre> - - <h3>Disabled menu options</h3> - <p>Add <code>.disabled</code> to a <code><li></code> in the dropdown to disable the link.</p> - <div class="bs-docs-example"> - <div class="dropdown clearfix"> - <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu" style="display: block; position: static; margin-bottom: 5px; *width: 180px;"> - <li><a tabindex="-1" href="#">Regular link</a></li> - <li class="disabled"><a tabindex="-1" href="#">Disabled link</a></li> - <li><a tabindex="-1" href="#">Another link</a></li> - </ul> - </div> - </div> -<pre class="prettyprint linenums"> -<ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu"> - <li><a tabindex="-1" href="#">Regular link</a></li> - <li class="disabled"><a tabindex="-1" href="#">Disabled link</a></li> - <li><a tabindex="-1" href="#">Another link</a></li> -</ul> -</pre> - - <h3>Sub menus on dropdowns</h3> - <p>Add an extra level of dropdown menus, appearing on hover like those of OS X, with some simple markup additions. Add <code>.dropdown-submenu</code> to any <code>li</code> in an existing dropdown menu for automatic styling.</p> - <div class="bs-docs-example bs-docs-example-submenus"> - - <div class="pull-left"> - <p class="muted">Default</p> - <div class="dropdown clearfix"> - <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu"> - <li><a tabindex="-1" href="#">Action</a></li> - <li><a tabindex="-1" href="#">Another action</a></li> - <li><a tabindex="-1" href="#">Something else here</a></li> - <li class="divider"></li> - <li class="dropdown-submenu"> - <a tabindex="-1" href="#">More options</a> - <ul class="dropdown-menu"> - <li><a tabindex="-1" href="#">Second level link</a></li> - <li><a tabindex="-1" href="#">Second level link</a></li> - <li><a tabindex="-1" href="#">Second level link</a></li> - <li><a tabindex="-1" href="#">Second level link</a></li> - <li><a tabindex="-1" href="#">Second level link</a></li> - </ul> - </li> - </ul> - </div> - </div> - - <div class="pull-left"> - <p class="muted">Dropup</p> - <div class="dropup"> - <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu"> - <li><a tabindex="-1" href="#">Action</a></li> - <li><a tabindex="-1" href="#">Another action</a></li> - <li><a tabindex="-1" href="#">Something else here</a></li> - <li class="divider"></li> - <li class="dropdown-submenu"> - <a tabindex="-1" href="#">More options</a> - <ul class="dropdown-menu"> - <li><a tabindex="-1" href="#">Second level link</a></li> - <li><a tabindex="-1" href="#">Second level link</a></li> - <li><a tabindex="-1" href="#">Second level link</a></li> - <li><a tabindex="-1" href="#">Second level link</a></li> - <li><a tabindex="-1" href="#">Second level link</a></li> - </ul> - </li> - </ul> - </div> - </div> - - <div class="pull-left"> - <p class="muted">Left submenu</p> - <div class="dropdown"> - <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu"> - <li><a tabindex="-1" href="#">Action</a></li> - <li><a tabindex="-1" href="#">Another action</a></li> - <li><a tabindex="-1" href="#">Something else here</a></li> - <li class="divider"></li> - <li class="dropdown-submenu pull-left"> - <a tabindex="-1" href="#">More options</a> - <ul class="dropdown-menu"> - <li><a tabindex="-1" href="#">Second level link</a></li> - <li><a tabindex="-1" href="#">Second level link</a></li> - <li><a tabindex="-1" href="#">Second level link</a></li> - <li><a tabindex="-1" href="#">Second level link</a></li> - <li><a tabindex="-1" href="#">Second level link</a></li> - </ul> - </li> - </ul> - </div> - </div> - - </div> -<pre class="prettyprint linenums"> -<ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"> - ... - <li class="dropdown-submenu"> - <a tabindex="-1" href="#">More options</a> - <ul class="dropdown-menu"> - ... - </ul> - </li> -</ul> -</pre> - - </section> - - - - - <!-- Button Groups - ================================================== --> - <section id="buttonGroups"> - <div class="page-header"> - <h1>Button groups</h1> - </div> - - <h2>Examples</h2> - <p>Two basic options, along with two more specific variations.</p> - - <h3>Single button group</h3> - <p>Wrap a series of buttons with <code>.btn</code> in <code>.btn-group</code>.</p> - <div class="bs-docs-example"> - <div class="btn-group" style="margin: 9px 0 5px;"> - <button class="btn">Left</button> - <button class="btn">Middle</button> - <button class="btn">Right</button> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="btn-group"> - <button class="btn">Left</button> - <button class="btn">Middle</button> - <button class="btn">Right</button> -</div> -</pre> - - <h3>Multiple button groups</h3> - <p>Combine sets of <code><div class="btn-group"></code> into a <code><div class="btn-toolbar"></code> for more complex components.</p> - <div class="bs-docs-example"> - <div class="btn-toolbar" style="margin: 0;"> - <div class="btn-group"> - <button class="btn">1</button> - <button class="btn">2</button> - <button class="btn">3</button> - <button class="btn">4</button> - </div> - <div class="btn-group"> - <button class="btn">5</button> - <button class="btn">6</button> - <button class="btn">7</button> - </div> - <div class="btn-group"> - <button class="btn">8</button> - </div> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="btn-toolbar"> - <div class="btn-group"> - ... - </div> -</div> -</pre> - - <h3>Vertical button groups</h3> - <p>Make a set of buttons appear vertically stacked rather than horizontally.</p> - <div class="bs-docs-example"> - <div class="btn-group btn-group-vertical"> - <button type="button" class="btn"><i class="icon-align-left"></i></button> - <button type="button" class="btn"><i class="icon-align-center"></i></button> - <button type="button" class="btn"><i class="icon-align-right"></i></button> - <button type="button" class="btn"><i class="icon-align-justify"></i></button> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="btn-group btn-group-vertical"> - ... -</div> -</pre> - - - <hr class="bs-docs-separator"> - - - <h4>Checkbox and radio flavors</h4> - <p>Button groups can also function as radios, where only one button may be active, or checkboxes, where any number of buttons may be active. View <a href="./javascript.html#buttons">the JavaScript docs</a> for that.</p> - - <h4>Dropdowns in button groups</h4> - <p><span class="label label-info">Heads up!</span> Buttons with dropdowns must be individually wrapped in their own <code>.btn-group</code> within a <code>.btn-toolbar</code> for proper rendering.</p> - </section> - - - - <!-- Split button dropdowns - ================================================== --> - <section id="buttonDropdowns"> - <div class="page-header"> - <h1>Button dropdown menus</h1> - </div> - - - <h2>Overview and examples</h2> - <p>Use any button to trigger a dropdown menu by placing it within a <code>.btn-group</code> and providing the proper menu markup.</p> - <div class="bs-docs-example"> - <div class="btn-toolbar" style="margin: 0;"> - <div class="btn-group"> - <button class="btn dropdown-toggle" data-toggle="dropdown">Action <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-primary dropdown-toggle" data-toggle="dropdown">Action <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-danger dropdown-toggle" data-toggle="dropdown">Danger <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-warning dropdown-toggle" data-toggle="dropdown">Warning <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-success dropdown-toggle" data-toggle="dropdown">Success <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-info dropdown-toggle" data-toggle="dropdown">Info <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-inverse dropdown-toggle" data-toggle="dropdown">Inverse <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - </div><!-- /btn-toolbar --> - </div> -<pre class="prettyprint linenums"> -<div class="btn-group"> - <a class="btn dropdown-toggle" data-toggle="dropdown" href="#"> - Action - <span class="caret"></span> - </a> - <ul class="dropdown-menu"> - <!-- dropdown menu links --> - </ul> -</div> -</pre> - - <h3>Works with all button sizes</h3> - <p>Button dropdowns work at any size: <code>.btn-large</code>, <code>.btn-small</code>, or <code>.btn-mini</code>.</p> - <div class="bs-docs-example"> - <div class="btn-toolbar" style="margin: 0;"> - <div class="btn-group"> - <button class="btn btn-large dropdown-toggle" data-toggle="dropdown">Large button <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-small dropdown-toggle" data-toggle="dropdown">Small button <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-mini dropdown-toggle" data-toggle="dropdown">Mini button <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - </div><!-- /btn-toolbar --> - </div> - - <h3>Requires JavaScript</h3> - <p>Button dropdowns require the <a href="./javascript.html#dropdowns">Bootstrap dropdown plugin</a> to function.</p> - <p>In some cases—like mobile—dropdown menus will extend outside the viewport. You need to resolve the alignment manually or with custom JavaScript.</p> - - - <hr class="bs-docs-separator"> - - - <h2>Split button dropdowns</h2> - <p>Building on the button group styles and markup, we can easily create a split button. Split buttons feature a standard action on the left and a dropdown toggle on the right with contextual links.</p> - <div class="bs-docs-example"> - <div class="btn-toolbar" style="margin: 0;"> - <div class="btn-group"> - <button class="btn">Action</button> - <button class="btn dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-primary">Action</button> - <button class="btn btn-primary dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-danger">Danger</button> - <button class="btn btn-danger dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-warning">Warning</button> - <button class="btn btn-warning dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-success">Success</button> - <button class="btn btn-success dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-info">Info</button> - <button class="btn btn-info dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-inverse">Inverse</button> - <button class="btn btn-inverse dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - </div><!-- /btn-toolbar --> - </div> -<pre class="prettyprint linenums"> -<div class="btn-group"> - <button class="btn">Action</button> - <button class="btn dropdown-toggle" data-toggle="dropdown"> - <span class="caret"></span> - </button> - <ul class="dropdown-menu"> - <!-- dropdown menu links --> - </ul> -</div> -</pre> - - <h3>Sizes</h3> - <p>Utilize the extra button classes <code>.btn-mini</code>, <code>.btn-small</code>, or <code>.btn-large</code> for sizing.</p> - <div class="bs-docs-example"> - <div class="btn-toolbar"> - <div class="btn-group"> - <button class="btn btn-large">Large action</button> - <button class="btn btn-large dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - </div><!-- /btn-toolbar --> - <div class="btn-toolbar"> - <div class="btn-group"> - <button class="btn btn-small">Small action</button> - <button class="btn btn-small dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - </div><!-- /btn-toolbar --> - <div class="btn-toolbar"> - <div class="btn-group"> - <button class="btn btn-mini">Mini action</button> - <button class="btn btn-mini dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - </div><!-- /btn-toolbar --> - </div> -<pre class="prettyprint linenums"> -<div class="btn-group"> - <button class="btn btn-mini">Action</button> - <button class="btn btn-mini dropdown-toggle" data-toggle="dropdown"> - <span class="caret"></span> - </button> - <ul class="dropdown-menu"> - <!-- dropdown menu links --> - </ul> -</div> -</pre> - - <h3>Dropup menus</h3> - <p>Dropdown menus can also be toggled from the bottom up by adding a single class to the immediate parent of <code>.dropdown-menu</code>. It will flip the direction of the <code>.caret</code> and reposition the menu itself to move from the bottom up instead of top down.</p> - <div class="bs-docs-example"> - <div class="btn-toolbar" style="margin: 0;"> - <div class="btn-group dropup"> - <button class="btn">Dropup</button> - <button class="btn dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group dropup"> - <button class="btn primary">Right dropup</button> - <button class="btn primary dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu pull-right"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="btn-group dropup"> - <button class="btn">Dropup</button> - <button class="btn dropdown-toggle" data-toggle="dropdown"> - <span class="caret"></span> - </button> - <ul class="dropdown-menu"> - <!-- dropdown menu links --> - </ul> -</div> -</pre> - - </section> - - - - <!-- Nav, Tabs, & Pills - ================================================== --> - <section id="navs"> - <div class="page-header"> - <h1>Nav: tabs, pills, and lists</small></h1> - </div> - - <h2>Lightweight defaults <small>Same markup, different classes</small></h2> - <p>All nav components here—tabs, pills, and lists—<strong>share the same base markup and styles</strong> through the <code>.nav</code> class.</p> - - <h3>Basic tabs</h3> - <p>Take a regular <code><ul></code> of links and add <code>.nav-tabs</code>:</p> - <div class="bs-docs-example"> - <ul class="nav nav-tabs"> - <li class="active"><a href="#">Home</a></li> - <li><a href="#">Profile</a></li> - <li><a href="#">Messages</a></li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="nav nav-tabs"> - <li class="active"> - <a href="#">Home</a> - </li> - <li><a href="#">...</a></li> - <li><a href="#">...</a></li> -</ul> -</pre> - - <h3>Basic pills</h3> - <p>Take that same HTML, but use <code>.nav-pills</code> instead:</p> - <div class="bs-docs-example"> - <ul class="nav nav-pills"> - <li class="active"><a href="#">Home</a></li> - <li><a href="#">Profile</a></li> - <li><a href="#">Messages</a></li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="nav nav-pills"> - <li class="active"> - <a href="#">Home</a> - </li> - <li><a href="#">...</a></li> - <li><a href="#">...</a></li> -</ul> -</pre> - - <h3>Disabled state</h3> - <p>For any nav component (tabs, pills, or list), add <code>.disabled</code> for <strong>gray links and no hover effects</strong>. Links will remain clickable, however, unless you remove the <code>href</code> attribute. Alternatively, you could implement custom JavaScript to prevent those clicks.</p> - <div class="bs-docs-example"> - <ul class="nav nav-pills"> - <li><a href="#">Clickable link</a></li> - <li><a href="#">Clickable link</a></li> - <li class="disabled"><a href="#">Disabled link</a></li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="nav nav-pills"> - ... - <li class="disabled"><a href="#">Home</a></li> - ... -</ul> -</pre> - - <h3>Component alignment</h3> - <p>To align nav links, use the <code>.pull-left</code> or <code>.pull-right</code> utility classes. Both classes will add a CSS float in the specified direction.</p> - - - <hr class="bs-docs-separator"> - - - <h2>Stackable</h2> - <p>As tabs and pills are horizontal by default, just add a second class, <code>.nav-stacked</code>, to make them appear vertically stacked.</p> - - <h3>Stacked tabs</h3> - <div class="bs-docs-example"> - <ul class="nav nav-tabs nav-stacked"> - <li class="active"><a href="#">Home</a></li> - <li><a href="#">Profile</a></li> - <li><a href="#">Messages</a></li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="nav nav-tabs nav-stacked"> - ... -</ul> -</pre> - - <h3>Stacked pills</h3> - <div class="bs-docs-example"> - <ul class="nav nav-pills nav-stacked"> - <li class="active"><a href="#">Home</a></li> - <li><a href="#">Profile</a></li> - <li><a href="#">Messages</a></li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="nav nav-pills nav-stacked"> - ... -</ul> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>Dropdowns</h2> - <p>Add dropdown menus with a little extra HTML and the <a href="./javascript.html#dropdowns">dropdowns JavaScript plugin</a>.</p> - - <h3>Tabs with dropdowns</h3> - <div class="bs-docs-example"> - <ul class="nav nav-tabs"> - <li class="active"><a href="#">Home</a></li> - <li><a href="#">Help</a></li> - <li class="dropdown"> - <a class="dropdown-toggle" data-toggle="dropdown" href="#">Dropdown <b class="caret"></b></a> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="nav nav-tabs"> - <li class="dropdown"> - <a class="dropdown-toggle" - data-toggle="dropdown" - href="#"> - Dropdown - <b class="caret"></b> - </a> - <ul class="dropdown-menu"> - <!-- links --> - </ul> - </li> -</ul> -</pre> - - <h3>Pills with dropdowns</h3> - <div class="bs-docs-example"> - <ul class="nav nav-pills"> - <li class="active"><a href="#">Home</a></li> - <li><a href="#">Help</a></li> - <li class="dropdown"> - <a class="dropdown-toggle" data-toggle="dropdown" href="#">Dropdown <b class="caret"></b></a> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="nav nav-pills"> - <li class="dropdown"> - <a class="dropdown-toggle" - data-toggle="dropdown" - href="#"> - Dropdown - <b class="caret"></b> - </a> - <ul class="dropdown-menu"> - <!-- links --> - </ul> - </li> -</ul> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>Nav lists</h2> - <p>A simple and easy way to build groups of nav links with optional headers. They're best used in sidebars like the Finder in OS X.</p> - - <h3>Example nav list</h3> - <p>Take a list of links and add <code>class="nav nav-list"</code>:</p> - <div class="bs-docs-example"> - <div class="well" style="max-width: 340px; padding: 8px 0;"> - <ul class="nav nav-list"> - <li class="nav-header">List header</li> - <li class="active"><a href="#">Home</a></li> - <li><a href="#">Library</a></li> - <li><a href="#">Applications</a></li> - <li class="nav-header">Another list header</li> - <li><a href="#">Profile</a></li> - <li><a href="#">Settings</a></li> - <li class="divider"></li> - <li><a href="#">Help</a></li> - </ul> - </div> <!-- /well --> - </div> -<pre class="prettyprint linenums"> -<ul class="nav nav-list"> - <li class="nav-header">List header</li> - <li class="active"><a href="#">Home</a></li> - <li><a href="#">Library</a></li> - ... -</ul> -</pre> - <p> - <span class="label label-info">Note</span> - For nesting within a nav list, include <code>class="nav nav-list"</code> on any nested <code><ul></code>. - </p> - - <h3>Horizontal dividers</h3> - <p>Add a horizontal divider by creating an empty list item with the class <code>.divider</code>, like so:</p> -<pre class="prettyprint linenums"> -<ul class="nav nav-list"> - ... - <li class="divider"></li> - ... -</ul> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>Tabbable nav</h2> - <p>Bring your tabs to life with a simple plugin to toggle between content via tabs. Bootstrap integrates tabbable tabs in four styles: top (default), right, bottom, and left.</p> - - <h3>Tabbable example</h3> - <p>To make tabs tabbable, create a <code>.tab-pane</code> with unique ID for every tab and wrap them in <code>.tab-content</code>.</p> - <div class="bs-docs-example"> - <div class="tabbable" style="margin-bottom: 18px;"> - <ul class="nav nav-tabs"> - <li class="active"><a href="#tab1" data-toggle="tab">Section 1</a></li> - <li><a href="#tab2" data-toggle="tab">Section 2</a></li> - <li><a href="#tab3" data-toggle="tab">Section 3</a></li> - </ul> - <div class="tab-content" style="padding-bottom: 9px; border-bottom: 1px solid #ddd;"> - <div class="tab-pane active" id="tab1"> - <p>I'm in Section 1.</p> - </div> - <div class="tab-pane" id="tab2"> - <p>Howdy, I'm in Section 2.</p> - </div> - <div class="tab-pane" id="tab3"> - <p>What up girl, this is Section 3.</p> - </div> - </div> - </div> <!-- /tabbable --> - </div> -<pre class="prettyprint linenums"> -<div class="tabbable"> <!-- Only required for left/right tabs --> - <ul class="nav nav-tabs"> - <li class="active"><a href="#tab1" data-toggle="tab">Section 1</a></li> - <li><a href="#tab2" data-toggle="tab">Section 2</a></li> - </ul> - <div class="tab-content"> - <div class="tab-pane active" id="tab1"> - <p>I'm in Section 1.</p> - </div> - <div class="tab-pane" id="tab2"> - <p>Howdy, I'm in Section 2.</p> - </div> - </div> -</div> -</pre> - - <h4>Fade in tabs</h4> - <p>To make tabs fade in, add <code>.fade</code> to each <code>.tab-pane</code>.</p> - - <h4>Requires jQuery plugin</h4> - <p>All tabbable tabs are powered by our lightweight jQuery plugin. Read more about how to bring tabbable tabs to life <a href="./javascript.html#tabs">on the JavaScript docs page</a>.</p> - - <h3>Tabbable in any direction</h3> - - <h4>Tabs on the bottom</h4> - <p>Flip the order of the HTML and add a class to put tabs on the bottom.</p> - <div class="bs-docs-example"> - <div class="tabbable tabs-below"> - <div class="tab-content"> - <div class="tab-pane active" id="A"> - <p>I'm in Section A.</p> - </div> - <div class="tab-pane" id="B"> - <p>Howdy, I'm in Section B.</p> - </div> - <div class="tab-pane" id="C"> - <p>What up girl, this is Section C.</p> - </div> - </div> - <ul class="nav nav-tabs"> - <li class="active"><a href="#A" data-toggle="tab">Section 1</a></li> - <li><a href="#B" data-toggle="tab">Section 2</a></li> - <li><a href="#C" data-toggle="tab">Section 3</a></li> - </ul> - </div> <!-- /tabbable --> - </div> -<pre class="prettyprint linenums"> -<div class="tabbable tabs-below"> - <div class="tab-content"> - ... - </div> - <ul class="nav nav-tabs"> - ... - </ul> -</div> -</pre> - - <h4>Tabs on the left</h4> - <p>Swap the class to put tabs on the left.</p> - <div class="bs-docs-example"> - <div class="tabbable tabs-left"> - <ul class="nav nav-tabs"> - <li class="active"><a href="#lA" data-toggle="tab">Section 1</a></li> - <li><a href="#lB" data-toggle="tab">Section 2</a></li> - <li><a href="#lC" data-toggle="tab">Section 3</a></li> - </ul> - <div class="tab-content"> - <div class="tab-pane active" id="lA"> - <p>I'm in Section A.</p> - </div> - <div class="tab-pane" id="lB"> - <p>Howdy, I'm in Section B.</p> - </div> - <div class="tab-pane" id="lC"> - <p>What up girl, this is Section C.</p> - </div> - </div> - </div> <!-- /tabbable --> - </div> -<pre class="prettyprint linenums"> -<div class="tabbable tabs-left"> - <ul class="nav nav-tabs"> - ... - </ul> - <div class="tab-content"> - ... - </div> -</div> -</pre> - - <h4>Tabs on the right</h4> - <p>Swap the class to put tabs on the right.</p> - <div class="bs-docs-example"> - <div class="tabbable tabs-right"> - <ul class="nav nav-tabs"> - <li class="active"><a href="#rA" data-toggle="tab">Section 1</a></li> - <li><a href="#rB" data-toggle="tab">Section 2</a></li> - <li><a href="#rC" data-toggle="tab">Section 3</a></li> - </ul> - <div class="tab-content"> - <div class="tab-pane active" id="rA"> - <p>I'm in Section A.</p> - </div> - <div class="tab-pane" id="rB"> - <p>Howdy, I'm in Section B.</p> - </div> - <div class="tab-pane" id="rC"> - <p>What up girl, this is Section C.</p> - </div> - </div> - </div> <!-- /tabbable --> - </div> -<pre class="prettyprint linenums"> -<div class="tabbable tabs-right"> - <ul class="nav nav-tabs"> - ... - </ul> - <div class="tab-content"> - ... - </div> -</div> -</pre> - - </section> - - - - <!-- Navbar - ================================================== --> - <section id="navbar"> - <div class="page-header"> - <h1>Navbar</h1> - </div> - - - <h2>Basic navbar</h2> - <p>To start, navbars are static (not fixed to the top) and include support for a project name and basic navigation. Place one anywhere within a <code>.container</code>, which sets the width of your site and content.</p> - <div class="bs-docs-example"> - <div class="navbar"> - <div class="navbar-inner"> - <a class="brand" href="#">Title</a> - <ul class="nav"> - <li class="active"><a href="#">Home</a></li> - <li><a href="#">Link</a></li> - <li><a href="#">Link</a></li> - </ul> - </div> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="navbar"> - <div class="navbar-inner"> - <a class="brand" href="#">Title</a> - <ul class="nav"> - <li class="active"><a href="#">Home</a></li> - <li><a href="#">Link</a></li> - <li><a href="#">Link</a></li> - </ul> - </div> -</div> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>Navbar components</h2> - - <h3>Brand</h3> - <p>A simple link to show your brand or project name only requires an anchor tag.</p> - <div class="bs-docs-example"> - <div class="navbar"> - <div class="navbar-inner"> - <a class="brand" href="#">Title</a> - </div> - </div> - </div> -<pre class="prettyprint linenums"> -<a class="brand" href="#">Project name</a> -</pre> - - <h3>Nav links</h3> - <p>Nav items are simple to add via unordered lists.</p> - <div class="bs-docs-example"> - <div class="navbar"> - <div class="navbar-inner"> - <ul class="nav"> - <li class="active"><a href="#">Home</a></li> - <li><a href="#">Link</a></li> - <li><a href="#">Link</a></li> - </ul> - </div> - </div> - </div> -<pre class="prettyprint linenums"> -<ul class="nav"> - <li class="active"> - <a href="#">Home</a> - </li> - <li><a href="#">Link</a></li> - <li><a href="#">Link</a></li> -</ul> -</pre> - <p>You can easily add dividers to your nav links with an empty list item and a simple class. Just add this between links:</p> - <div class="bs-docs-example"> - <div class="navbar"> - <div class="navbar-inner"> - <ul class="nav"> - <li class="active"><a href="#">Home</a></li> - <li class="divider-vertical"></li> - <li><a href="#">Link</a></li> - <li class="divider-vertical"></li> - <li><a href="#">Link</a></li> - <li class="divider-vertical"></li> - </ul> - </div> - </div> - </div> -<pre class="prettyprint linenums"> -<ul class="nav"> - ... - <li class="divider-vertical"></li> - ... -</ul> -</pre> - - <h3>Forms</h3> - <p>To properly style and position a form within the navbar, add the appropriate classes as shown below. For a default form, include <code>.navbar-form</code> and either <code>.pull-left</code> or <code>.pull-right</code> to properly align it.</p> - <div class="bs-docs-example"> - <div class="navbar"> - <div class="navbar-inner"> - <form class="navbar-form pull-left"> - <input type="text" class="span2"> - <button type="submit" class="btn">Submit</button> - </form> - </div> - </div> - </div> -<pre class="prettyprint linenums"> -<form class="navbar-form pull-left"> - <input type="text" class="span2"> - <button type="submit" class="btn">Submit</button> -</form> -</pre> - - <h3>Search form</h3> - <p>For a more customized search form, add <code>.navbar-search</code> to the <code>form</code> and <code>.search-query</code> to the input for specialized styles in the navbar.</p> - <div class="bs-docs-example"> - <div class="navbar"> - <div class="navbar-inner"> - <form class="navbar-search pull-left"> - <input type="text" class="search-query" placeholder="Search"> - </form> - </div> - </div> - </div> -<pre class="prettyprint linenums"> -<form class="navbar-search pull-left"> - <input type="text" class="search-query" placeholder="Search"> -</form> -</pre> - - <h3>Component alignment</h3> - <p>Align nav links, search form, or text, use the <code>.pull-left</code> or <code>.pull-right</code> utility classes. Both classes will add a CSS float in the specified direction.</p> - - <h3>Using dropdowns</h3> - <p>Add dropdowns and dropups to the nav with a bit of markup and the <a href="./javascript.html#dropdowns">dropdowns JavaScript plugin</a>.</p> -<pre class="prettyprint linenums"> -<ul class="nav"> - <li class="dropdown"> - <a href="#" class="dropdown-toggle" data-toggle="dropdown"> - Account - <b class="caret"></b> - </a> - <ul class="dropdown-menu"> - ... - </ul> - </li> -</ul> -</pre> - <p>Visit the <a href="./javascript.html#dropdowns">JavaScript dropdowns documentation</a> for more markup and information on calling dropdowns.</p> - - <h3>Text</h3> - <p>Wrap strings of text in an element with <code>.navbar-text</code>, usually on a <code><p></code> tag for proper leading and color.</p> - - - <hr class="bs-docs-separator"> - - - <h2>Optional display variations</h2> - <p>Fix the navbar to the top or bottom of the viewport with an additional class on the outermost div, <code>.navbar</code>.</p> - - <h3>Fixed to top</h3> - <p>Add <code>.navbar-fixed-top</code> and remember to account for the hidden area underneath it by adding at least 40px <code>padding</code> to the <code><body></code>. Be sure to add this after the core Bootstrap CSS and before the optional responsive CSS.</p> - <div class="bs-docs-example bs-navbar-top-example"> - <div class="navbar navbar-fixed-top" style="position: absolute;"> - <div class="navbar-inner"> - <div class="container" style="width: auto; padding: 0 20px;"> - <a class="brand" href="#">Title</a> - <ul class="nav"> - <li class="active"><a href="#">Home</a></li> - <li><a href="#">Link</a></li> - <li><a href="#">Link</a></li> - </ul> - </div> - </div> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="navbar navbar-fixed-top"> - ... -</div> -</pre> - - <h3>Fixed to bottom</h3> - <p>Add <code>.navbar-fixed-bottom</code> instead.</p> - <div class="bs-docs-example bs-navbar-bottom-example"> - <div class="navbar navbar-fixed-bottom" style="position: absolute;"> - <div class="navbar-inner"> - <div class="container" style="width: auto; padding: 0 20px;"> - <a class="brand" href="#">Title</a> - <ul class="nav"> - <li class="active"><a href="#">Home</a></li> - <li><a href="#">Link</a></li> - <li><a href="#">Link</a></li> - </ul> - </div> - </div> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="navbar navbar-fixed-bottom"> - ... -</div> -</pre> - - <h3>Static top navbar</h3> - <p>Create a full-width navbar that scrolls away with the page by adding <code>.navbar-static-top</code>. Unlike the <code>.navbar-fixed-top</code> class, you do not need to change any padding on the <code>body</code>.</p> - <div class="bs-docs-example bs-navbar-top-example"> - <div class="navbar navbar-static-top" style="margin: -1px -1px 0;"> - <div class="navbar-inner"> - <div class="container" style="width: auto; padding: 0 20px;"> - <a class="brand" href="#">Title</a> - <ul class="nav"> - <li class="active"><a href="#">Home</a></li> - <li><a href="#">Link</a></li> - <li><a href="#">Link</a></li> - </ul> - </div> - </div> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="navbar navbar-static-top"> - ... -</div> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>Responsive navbar</h2> - <p>To implement a collapsing responsive navbar, wrap your navbar content in a containing div, <code>.nav-collapse.collapse</code>, and add the navbar toggle button, <code>.btn-navbar</code>.</p> - <div class="bs-docs-example"> - <div class="navbar"> - <div class="navbar-inner"> - <div class="container"> - <a class="btn btn-navbar" data-toggle="collapse" data-target=".navbar-responsive-collapse"> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - </a> - <a class="brand" href="#">Title</a> - <div class="nav-collapse collapse navbar-responsive-collapse"> - <ul class="nav"> - <li class="active"><a href="#">Home</a></li> - <li><a href="#">Link</a></li> - <li><a href="#">Link</a></li> - <li class="dropdown"> - <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li class="nav-header">Nav header</li> - <li><a href="#">Separated link</a></li> - <li><a href="#">One more separated link</a></li> - </ul> - </li> - </ul> - <form class="navbar-search pull-left" action=""> - <input type="text" class="search-query span2" placeholder="Search"> - </form> - <ul class="nav pull-right"> - <li><a href="#">Link</a></li> - <li class="divider-vertical"></li> - <li class="dropdown"> - <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </li> - </ul> - </div><!-- /.nav-collapse --> - </div> - </div><!-- /navbar-inner --> - </div><!-- /navbar --> - </div> -<pre class="prettyprint linenums"> -<div class="navbar"> - <div class="navbar-inner"> - <div class="container"> - - <!-- .btn-navbar is used as the toggle for collapsed navbar content --> - <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - </a> - - <!-- Be sure to leave the brand out there if you want it shown --> - <a class="brand" href="#">Project name</a> - - <!-- Everything you want hidden at 940px or less, place within here --> - <div class="nav-collapse collapse"> - <!-- .nav, .navbar-search, .navbar-form, etc --> - </div> - - </div> - </div> -</div> -</pre> - <div class="alert alert-info"> - <strong>Heads up!</strong> The responsive navbar requires the <a href="./javascript.html#collapse">collapse plugin</a> and <a href="./scaffolding.html#responsive">responsive Bootstrap CSS file</a>. - </div> - - - <hr class="bs-docs-separator"> - - - <h2>Inverted variation</h2> - <p>Modify the look of the navbar by adding <code>.navbar-inverse</code>.</p> - <div class="bs-docs-example"> - <div class="navbar navbar-inverse" style="position: static;"> - <div class="navbar-inner"> - <div class="container"> - <a class="btn btn-navbar" data-toggle="collapse" data-target=".navbar-inverse-collapse"> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - </a> - <a class="brand" href="#">Title</a> - <div class="nav-collapse collapse navbar-inverse-collapse"> - <ul class="nav"> - <li class="active"><a href="#">Home</a></li> - <li><a href="#">Link</a></li> - <li><a href="#">Link</a></li> - <li class="dropdown"> - <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li class="nav-header">Nav header</li> - <li><a href="#">Separated link</a></li> - <li><a href="#">One more separated link</a></li> - </ul> - </li> - </ul> - <form class="navbar-search pull-left" action=""> - <input type="text" class="search-query span2" placeholder="Search"> - </form> - <ul class="nav pull-right"> - <li><a href="#">Link</a></li> - <li class="divider-vertical"></li> - <li class="dropdown"> - <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </li> - </ul> - </div><!-- /.nav-collapse --> - </div> - </div><!-- /navbar-inner --> - </div><!-- /navbar --> - </div> -<pre class="prettyprint linenums"> -<div class="navbar navbar-inverse"> - ... -</div> -</pre> - - </section> - - - - <!-- Breadcrumbs - ================================================== --> - <section id="breadcrumbs"> - <div class="page-header"> - <h1>Breadcrumbs <small></small></h1> - </div> - - <h2>Examples</h2> - <p>A single example shown as it might be displayed across multiple pages.</p> - <div class="bs-docs-example"> - <ul class="breadcrumb"> - <li class="active">Home</li> - </ul> - <ul class="breadcrumb"> - <li><a href="#">Home</a> <span class="divider">/</span></li> - <li class="active">Library</li> - </ul> - <ul class="breadcrumb" style="margin-bottom: 5px;"> - <li><a href="#">Home</a> <span class="divider">/</span></li> - <li><a href="#">Library</a> <span class="divider">/</span></li> - <li class="active">Data</li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="breadcrumb"> - <li><a href="#">Home</a> <span class="divider">/</span></li> - <li><a href="#">Library</a> <span class="divider">/</span></li> - <li class="active">Data</li> -</ul> -</pre> - - </section> - - - - <!-- Pagination - ================================================== --> - <section id="pagination"> - <div class="page-header"> - <h1>Pagination <small>Two options for paging through content</small></h1> - </div> - - <h2>Standard pagination</h2> - <p>Simple pagination inspired by Rdio, great for apps and search results. The large block is hard to miss, easily scalable, and provides large click areas.</p> - <div class="bs-docs-example"> - <div class="pagination"> - <ul> - <li><a href="#">«</a></li> - <li><a href="#">1</a></li> - <li><a href="#">2</a></li> - <li><a href="#">3</a></li> - <li><a href="#">4</a></li> - <li><a href="#">5</a></li> - <li><a href="#">»</a></li> - </ul> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="pagination"> - <ul> - <li><a href="#">Prev</a></li> - <li><a href="#">1</a></li> - <li><a href="#">2</a></li> - <li><a href="#">3</a></li> - <li><a href="#">4</a></li> - <li><a href="#">5</a></li> - <li><a href="#">Next</a></li> - </ul> -</div> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>Options</h2> - - <h3>Disabled and active states</h3> - <p>Links are customizable for different circumstances. Use <code>.disabled</code> for unclickable links and <code>.active</code> to indicate the current page.</p> - <div class="bs-docs-example"> - <div class="pagination pagination-centered"> - <ul> - <li class="disabled"><a href="#">«</a></li> - <li class="active"><a href="#">1</a></li> - <li><a href="#">2</a></li> - <li><a href="#">3</a></li> - <li><a href="#">4</a></li> - <li><a href="#">5</a></li> - <li><a href="#">»</a></li> - </ul> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="pagination"> - <ul> - <li class="disabled"><a href="#">&laquo;</a></li> - <li class="active"><a href="#">1</a></li> - ... - </ul> -</div> -</pre> - <p>You can optionally swap out active or disabled anchors for spans to remove click functionality while retaining intended styles.</p> -<pre class="prettyprint linenums"> -<div class="pagination"> - <ul> - <li class="disabled"><span>&laquo;</span></li> - <li class="active"><span>1</span></li> - ... - </ul> -</div> -</pre> - - <h3>Sizes</h3> - <p>Fancy larger or smaller pagination? Add <code>.pagination-large</code>, <code>.pagination-small</code>, or <code>.pagination-mini</code> for additional sizes.</p> - <div class="bs-docs-example"> - <div class="pagination pagination-large"> - <ul> - <li><a href="#">«</a></li> - <li><a href="#">1</a></li> - <li><a href="#">2</a></li> - <li><a href="#">3</a></li> - <li><a href="#">4</a></li> - <li><a href="#">5</a></li> - <li><a href="#">»</a></li> - </ul> - </div> - <div class="pagination"> - <ul> - <li><a href="#">«</a></li> - <li><a href="#">1</a></li> - <li><a href="#">2</a></li> - <li><a href="#">3</a></li> - <li><a href="#">4</a></li> - <li><a href="#">5</a></li> - <li><a href="#">»</a></li> - </ul> - </div> - <div class="pagination pagination-small"> - <ul> - <li><a href="#">«</a></li> - <li><a href="#">1</a></li> - <li><a href="#">2</a></li> - <li><a href="#">3</a></li> - <li><a href="#">4</a></li> - <li><a href="#">5</a></li> - <li><a href="#">»</a></li> - </ul> - </div> - <div class="pagination pagination-mini"> - <ul> - <li><a href="#">«</a></li> - <li><a href="#">1</a></li> - <li><a href="#">2</a></li> - <li><a href="#">3</a></li> - <li><a href="#">4</a></li> - <li><a href="#">5</a></li> - <li><a href="#">»</a></li> - </ul> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="pagination pagination-large"> - <ul> - ... - </ul> -</div> -<div class="pagination"> - <ul> - ... - </ul> -</div> -<div class="pagination pagination-small"> - <ul> - ... - </ul> -</div> -<div class="pagination pagination-mini"> - <ul> - ... - </ul> -</div> -</pre> - - <h3>Alignment</h3> - <p>Add one of two optional classes to change the alignment of pagination links: <code>.pagination-centered</code> and <code>.pagination-right</code>.</p> - <div class="bs-docs-example"> - <div class="pagination pagination-centered"> - <ul> - <li><a href="#">«</a></li> - <li><a href="#">1</a></li> - <li><a href="#">2</a></li> - <li><a href="#">3</a></li> - <li><a href="#">4</a></li> - <li><a href="#">5</a></li> - <li><a href="#">»</a></li> - </ul> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="pagination pagination-centered"> - ... -</div> -</pre> - <div class="bs-docs-example"> - <div class="pagination pagination-right"> - <ul> - <li><a href="#">«</a></li> - <li><a href="#">1</a></li> - <li><a href="#">2</a></li> - <li><a href="#">3</a></li> - <li><a href="#">4</a></li> - <li><a href="#">5</a></li> - <li><a href="#">»</a></li> - </ul> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="pagination pagination-right"> - ... -</div> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>Pager</h2> - <p>Quick previous and next links for simple pagination implementations with light markup and styles. It's great for simple sites like blogs or magazines.</p> - - <h3>Default example</h3> - <p>By default, the pager centers links.</p> - <div class="bs-docs-example"> - <ul class="pager"> - <li><a href="#">Previous</a></li> - <li><a href="#">Next</a></li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="pager"> - <li><a href="#">Previous</a></li> - <li><a href="#">Next</a></li> -</ul> -</pre> - - <h3>Aligned links</h3> - <p>Alternatively, you can align each link to the sides:</p> - <div class="bs-docs-example"> - <ul class="pager"> - <li class="previous"><a href="#">← Older</a></li> - <li class="next"><a href="#">Newer →</a></li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="pager"> - <li class="previous"> - <a href="#">&larr; Older</a> - </li> - <li class="next"> - <a href="#">Newer &rarr;</a> - </li> -</ul> -</pre> - - <h3>Optional disabled state</h3> - <p>Pager links also use the general <code>.disabled</code> utility class from the pagination.</p> - <div class="bs-docs-example"> - <ul class="pager"> - <li class="previous disabled"><a href="#">← Older</a></li> - <li class="next"><a href="#">Newer →</a></li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="pager"> - <li class="previous disabled"> - <a href="#">&larr; Older</a> - </li> - ... -</ul> -</pre> - - </section> - - - - <!-- Labels and badges - ================================================== --> - <section id="labels-badges"> - <div class="page-header"> - <h1>Labels and badges</h1> - </div> - <h3>Labels</h3> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th>Labels</th> - <th>Markup</th> - </tr> - </thead> - <tbody> - <tr> - <td> - <span class="label">Default</span> - </td> - <td> - <code><span class="label">Default</span></code> - </td> - </tr> - <tr> - <td> - <span class="label label-success">Success</span> - </td> - <td> - <code><span class="label label-success">Success</span></code> - </td> - </tr> - <tr> - <td> - <span class="label label-warning">Warning</span> - </td> - <td> - <code><span class="label label-warning">Warning</span></code> - </td> - </tr> - <tr> - <td> - <span class="label label-important">Important</span> - </td> - <td> - <code><span class="label label-important">Important</span></code> - </td> - </tr> - <tr> - <td> - <span class="label label-info">Info</span> - </td> - <td> - <code><span class="label label-info">Info</span></code> - </td> - </tr> - <tr> - <td> - <span class="label label-inverse">Inverse</span> - </td> - <td> - <code><span class="label label-inverse">Inverse</span></code> - </td> - </tr> - </tbody> - </table> - - <h3>Badges</h3> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th>Name</th> - <th>Example</th> - <th>Markup</th> - </tr> - </thead> - <tbody> - <tr> - <td> - Default - </td> - <td> - <span class="badge">1</span> - </td> - <td> - <code><span class="badge">1</span></code> - </td> - </tr> - <tr> - <td> - Success - </td> - <td> - <span class="badge badge-success">2</span> - </td> - <td> - <code><span class="badge badge-success">2</span></code> - </td> - </tr> - <tr> - <td> - Warning - </td> - <td> - <span class="badge badge-warning">4</span> - </td> - <td> - <code><span class="badge badge-warning">4</span></code> - </td> - </tr> - <tr> - <td> - Important - </td> - <td> - <span class="badge badge-important">6</span> - </td> - <td> - <code><span class="badge badge-important">6</span></code> - </td> - </tr> - <tr> - <td> - Info - </td> - <td> - <span class="badge badge-info">8</span> - </td> - <td> - <code><span class="badge badge-info">8</span></code> - </td> - </tr> - <tr> - <td> - Inverse - </td> - <td> - <span class="badge badge-inverse">10</span> - </td> - <td> - <code><span class="badge badge-inverse">10</span></code> - </td> - </tr> - </tbody> - </table> - - <h3>Easily collapsible</h3> - <p>For easy implementation, labels and badges will simply collapse (via CSS's <code>:empty</code> selector) when no content exists within.</p> - - </section> - - - - <!-- Typographic components - ================================================== --> - <section id="typography"> - <div class="page-header"> - <h1>Typographic components</h1> - </div> - - <h2>Hero unit</h2> - <p>A lightweight, flexible component to showcase key content on your site. It works well on marketing and content-heavy sites.</p> - <div class="bs-docs-example"> - <div class="hero-unit"> - <h1>Hello, world!</h1> - <p>This is a simple hero unit, a simple jumbotron-style component for calling extra attention to featured content or information.</p> - <p><a class="btn btn-primary btn-large">Learn more</a></p> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="hero-unit"> - <h1>Heading</h1> - <p>Tagline</p> - <p> - <a class="btn btn-primary btn-large"> - Learn more - </a> - </p> -</div> -</pre> - - <h2>Page header</h2> - <p>A simple shell for an <code>h1</code> to appropriately space out and segment sections of content on a page. It can utilize the <code>h1</code>'s default <code>small</code>, element as well most other components (with additional styles).</p> - <div class="bs-docs-example"> - <div class="page-header"> - <h1>Example page header <small>Subtext for header</small></h1> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="page-header"> - <h1>Example page header <small>Subtext for header</small></h1> -</div> -</pre> - - </section> - - - - <!-- Thumbnails - ================================================== --> - <section id="thumbnails"> - <div class="page-header"> - <h1>Thumbnails <small>Grids of images, videos, text, and more</small></h1> - </div> - - <h2>Default thumbnails</h2> - <p>By default, Bootstrap's thumbnails are designed to showcase linked images with minimal required markup.</p> - <div class="row-fluid"> - <ul class="thumbnails"> - <li class="span3"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/260x180" alt=""> - </a> - </li> - <li class="span3"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/260x180" alt=""> - </a> - </li> - <li class="span3"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/260x180" alt=""> - </a> - </li> - <li class="span3"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/260x180" alt=""> - </a> - </li> - </ul> - </div> - - <h2>Highly customizable</h2> - <p>With a bit of extra markup, it's possible to add any kind of HTML content like headings, paragraphs, or buttons into thumbnails.</p> - <div class="row-fluid"> - <ul class="thumbnails"> - <li class="span4"> - <div class="thumbnail"> - <img data-src="holder.js/300x200" alt=""> - <div class="caption"> - <h3>Thumbnail label</h3> - <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> - <p><a href="#" class="btn btn-primary">Action</a> <a href="#" class="btn">Action</a></p> - </div> - </div> - </li> - <li class="span4"> - <div class="thumbnail"> - <img data-src="holder.js/300x200" alt=""> - <div class="caption"> - <h3>Thumbnail label</h3> - <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> - <p><a href="#" class="btn btn-primary">Action</a> <a href="#" class="btn">Action</a></p> - </div> - </div> - </li> - <li class="span4"> - <div class="thumbnail"> - <img data-src="holder.js/300x200" alt=""> - <div class="caption"> - <h3>Thumbnail label</h3> - <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> - <p><a href="#" class="btn btn-primary">Action</a> <a href="#" class="btn">Action</a></p> - </div> - </div> - </li> - </ul> - </div> - - <h3>Why use thumbnails</h3> - <p>Thumbnails (previously <code>.media-grid</code> up until v1.4) are great for grids of photos or videos, image search results, retail products, portfolios, and much more. They can be links or static content.</p> - - <h3>Simple, flexible markup</h3> - <p>Thumbnail markup is simple—a <code>ul</code> with any number of <code>li</code> elements is all that is required. It's also super flexible, allowing for any type of content with just a bit more markup to wrap your contents.</p> - - <h3>Uses grid column sizes</h3> - <p>Lastly, the thumbnails component uses existing grid system classes—like <code>.span2</code> or <code>.span3</code>—for control of thumbnail dimensions.</p> - - <h2>Markup</h2> - <p>As mentioned previously, the required markup for thumbnails is light and straightforward. Here's a look at the default setup <strong>for linked images</strong>:</p> -<pre class="prettyprint linenums"> -<ul class="thumbnails"> - <li class="span4"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/300x200" alt=""> - </a> - </li> - ... -</ul> -</pre> - <p>For custom HTML content in thumbnails, the markup changes slightly. To allow block level content anywhere, we swap the <code><a></code> for a <code><div></code> like so:</p> -<pre class="prettyprint linenums"> -<ul class="thumbnails"> - <li class="span4"> - <div class="thumbnail"> - <img data-src="holder.js/300x200" alt=""> - <h3>Thumbnail label</h3> - <p>Thumbnail caption...</p> - </div> - </li> - ... -</ul> -</pre> - - <h2>More examples</h2> - <p>Explore all your options with the various grid classes available to you. You can also mix and match different sizes.</p> - <ul class="thumbnails"> - <li class="span4"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/360x270" alt=""> - </a> - </li> - <li class="span3"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/260x120" alt=""> - </a> - </li> - <li class="span2"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/160x120" alt=""> - </a> - </li> - <li class="span3"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/260x120" alt=""> - </a> - </li> - <li class="span2"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/160x120" alt=""> - </a> - </li> - </ul> - - </section> - - - - - <!-- Alerts - ================================================== --> - <section id="alerts"> - <div class="page-header"> - <h1>Alerts <small>Styles for success, warning, and error messages</small></h1> - </div> - - <h2>Default alert</h2> - <p>Wrap any text and an optional dismiss button in <code>.alert</code> for a basic warning alert message.</p> - <div class="bs-docs-example"> - <div class="alert"> - <button type="button" class="close" data-dismiss="alert">×</button> - <strong>Warning!</strong> Best check yo self, you're not looking too good. - </div> - </div> -<pre class="prettyprint linenums"> -<div class="alert"> - <button type="button" class="close" data-dismiss="alert">&times;</button> - <strong>Warning!</strong> Best check yo self, you're not looking too good. -</div> -</pre> - - <h3>Dismiss buttons</h3> - <p>Mobile Safari and Mobile Opera browsers, in addition to the <code>data-dismiss="alert"</code> attribute, require an <code>href="#"</code> for the dismissal of alerts when using an <code><a></code> tag.</p> - <pre class="prettyprint linenums"><a href="#" class="close" data-dismiss="alert">&times;</a></pre> - <p>Alternatively, you may use a <code><button></code> element with the data attribute, which we have opted to do for our docs. When using <code><button></code>, you must include <code>type="button"</code> or your forms may not submit.</p> - <pre class="prettyprint linenums"><button type="button" class="close" data-dismiss="alert">&times;</button></pre> - - <h3>Dismiss alerts via JavaScript</h3> - <p>Use the <a href="./javascript.html#alerts">alerts jQuery plugin</a> for quick and easy dismissal of alerts.</p> - - - <hr class="bs-docs-separator"> - - - <h2>Options</h2> - <p>For longer messages, increase the padding on the top and bottom of the alert wrapper by adding <code>.alert-block</code>.</p> - <div class="bs-docs-example"> - <div class="alert alert-block"> - <button type="button" class="close" data-dismiss="alert">×</button> - <h4>Warning!</h4> - <p>Best check yo self, you're not looking too good. Nulla vitae elit libero, a pharetra augue. Praesent commodo cursus magna, vel scelerisque nisl consectetur et.</p> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="alert alert-block"> - <button type="button" class="close" data-dismiss="alert">&times;</button> - <h4>Warning!</h4> - Best check yo self, you're not... -</div> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>Contextual alternatives</h2> - <p>Add optional classes to change an alert's connotation.</p> - - <h3>Error or danger</h3> - <div class="bs-docs-example"> - <div class="alert alert-error"> - <button type="button" class="close" data-dismiss="alert">×</button> - <strong>Oh snap!</strong> Change a few things up and try submitting again. - </div> - </div> -<pre class="prettyprint linenums"> -<div class="alert alert-error"> - ... -</div> -</pre> - - <h3>Success</h3> - <div class="bs-docs-example"> - <div class="alert alert-success"> - <button type="button" class="close" data-dismiss="alert">×</button> - <strong>Well done!</strong> You successfully read this important alert message. - </div> - </div> -<pre class="prettyprint linenums"> -<div class="alert alert-success"> - ... -</div> -</pre> - - <h3>Information</h3> - <div class="bs-docs-example"> - <div class="alert alert-info"> - <button type="button" class="close" data-dismiss="alert">×</button> - <strong>Heads up!</strong> This alert needs your attention, but it's not super important. - </div> - </div> -<pre class="prettyprint linenums"> -<div class="alert alert-info"> - ... -</div> -</pre> - - </section> - - - - - <!-- Progress bars - ================================================== --> - <section id="progress"> - <div class="page-header"> - <h1>Progress bars <small>For loading, redirecting, or action status</small></h1> - </div> - - <h2>Examples and markup</h2> - - <h3>Basic</h3> - <p>Default progress bar with a vertical gradient.</p> - <div class="bs-docs-example"> - <div class="progress"> - <div class="bar" style="width: 60%;"></div> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="progress"> - <div class="bar" style="width: 60%;"></div> -</div> -</pre> - - <h3>Striped</h3> - <p>Uses a gradient to create a striped effect. Not available in IE7-8.</p> - <div class="bs-docs-example"> - <div class="progress progress-striped"> - <div class="bar" style="width: 20%;"></div> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="progress progress-striped"> - <div class="bar" style="width: 20%;"></div> -</div> -</pre> - - <h3>Animated</h3> - <p>Add <code>.active</code> to <code>.progress-striped</code> to animate the stripes right to left. Not available in all versions of IE.</p> - <div class="bs-docs-example"> - <div class="progress progress-striped active"> - <div class="bar" style="width: 45%"></div> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="progress progress-striped active"> - <div class="bar" style="width: 40%;"></div> -</div> -</pre> - - <h3>Stacked</h3> - <p>Place multiple bars into the same <code>.progress</code> to stack them.</p> - <div class="bs-docs-example"> - <div class="progress"> - <div class="bar bar-success" style="width: 35%"></div> - <div class="bar bar-warning" style="width: 20%"></div> - <div class="bar bar-danger" style="width: 10%"></div> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="progress"> - <div class="bar bar-success" style="width: 35%;"></div> - <div class="bar bar-warning" style="width: 20%;"></div> - <div class="bar bar-danger" style="width: 10%;"></div> -</div> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>Options</h2> - - <h3>Additional colors</h3> - <p>Progress bars use some of the same button and alert classes for consistent styles.</p> - <div class="bs-docs-example"> - <div class="progress progress-info" style="margin-bottom: 9px;"> - <div class="bar" style="width: 20%"></div> - </div> - <div class="progress progress-success" style="margin-bottom: 9px;"> - <div class="bar" style="width: 40%"></div> - </div> - <div class="progress progress-warning" style="margin-bottom: 9px;"> - <div class="bar" style="width: 60%"></div> - </div> - <div class="progress progress-danger"> - <div class="bar" style="width: 80%"></div> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="progress progress-info"> - <div class="bar" style="width: 20%"></div> -</div> -<div class="progress progress-success"> - <div class="bar" style="width: 40%"></div> -</div> -<div class="progress progress-warning"> - <div class="bar" style="width: 60%"></div> -</div> -<div class="progress progress-danger"> - <div class="bar" style="width: 80%"></div> -</div> -</pre> - - <h3>Striped bars</h3> - <p>Similar to the solid colors, we have varied striped progress bars.</p> - <div class="bs-docs-example"> - <div class="progress progress-info progress-striped" style="margin-bottom: 9px;"> - <div class="bar" style="width: 20%"></div> - </div> - <div class="progress progress-success progress-striped" style="margin-bottom: 9px;"> - <div class="bar" style="width: 40%"></div> - </div> - <div class="progress progress-warning progress-striped" style="margin-bottom: 9px;"> - <div class="bar" style="width: 60%"></div> - </div> - <div class="progress progress-danger progress-striped"> - <div class="bar" style="width: 80%"></div> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="progress progress-info progress-striped"> - <div class="bar" style="width: 20%"></div> -</div> -<div class="progress progress-success progress-striped"> - <div class="bar" style="width: 40%"></div> -</div> -<div class="progress progress-warning progress-striped"> - <div class="bar" style="width: 60%"></div> -</div> -<div class="progress progress-danger progress-striped"> - <div class="bar" style="width: 80%"></div> -</div> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>Browser support</h2> - <p>Progress bars use CSS3 gradients, transitions, and animations to achieve all their effects. These features are not supported in IE7-9 or older versions of Firefox.</p> - <p>Versions earlier than Internet Explorer 10 and Opera 12 do not support animations.</p> - - </section> - - - - - <!-- Media object - ================================================== --> - <section id="media"> - <div class="page-header"> - <h1>Media object</h1> - </div> - <p class="lead">Abstract object styles for building various types of components (like blog comments, Tweets, etc) that feature a left- or right-aligned image alongside textual content.</p> - - <h2>Default example</h2> - <p>The default media allow to float a media object (images, video, audio) to the left or right of a content block.</p> - <div class="bs-docs-example"> - <div class="media"> - <a class="pull-left" href="#"> - <img class="media-object" data-src="holder.js/64x64"> - </a> - <div class="media-body"> - <h4 class="media-heading">Media heading</h4> - Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus. - </div> - </div> - <div class="media"> - <a class="pull-left" href="#"> - <img class="media-object" data-src="holder.js/64x64"> - </a> - <div class="media-body"> - <h4 class="media-heading">Media heading</h4> - Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus. - <div class="media"> - <a class="pull-left" href="#"> - <img class="media-object" data-src="holder.js/64x64"> - </a> - <div class="media-body"> - <h4 class="media-heading">Media heading</h4> - Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus. - </div> - </div> - </div> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="media"> - <a class="pull-left" href="#"> - <img class="media-object" data-src="holder.js/64x64"> - </a> - <div class="media-body"> - <h4 class="media-heading">Media heading</h4> - ... - - <!-- Nested media object --> - <div class="media"> - ... - </div> - </div> -</div> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>Media list</h2> - <p>With a bit of extra markup, you can use media inside list (useful for comment threads or articles lists).</p> - <div class="bs-docs-example"> - <ul class="media-list"> - <li class="media"> - <a class="pull-left" href="#"> - <img class="media-object" data-src="holder.js/64x64"> - </a> - <div class="media-body"> - <h4 class="media-heading">Media heading</h4> - <p>Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis.</p> - <!-- Nested media object --> - <div class="media"> - <a class="pull-left" href="#"> - <img class="media-object" data-src="holder.js/64x64"> - </a> - <div class="media-body"> - <h4 class="media-heading">Nested media heading</h4> - Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. - <!-- Nested media object --> - <div class="media"> - <a class="pull-left" href="#"> - <img class="media-object" data-src="holder.js/64x64"> - </a> - <div class="media-body"> - <h4 class="media-heading">Nested media heading</h4> - Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. - </div> - </div> - </div> - </div> - <!-- Nested media object --> - <div class="media"> - <a class="pull-left" href="#"> - <img class="media-object" data-src="holder.js/64x64"> - </a> - <div class="media-body"> - <h4 class="media-heading">Nested media heading</h4> - Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. - </div> - </div> - </div> - </li> - <li class="media"> - <a class="pull-right" href="#"> - <img class="media-object" data-src="holder.js/64x64"> - </a> - <div class="media-body"> - <h4 class="media-heading">Media heading</h4> - Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. - </div> - </li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="media-list"> - <li class="media"> - <a class="pull-left" href="#"> - <img class="media-object" data-src="holder.js/64x64"> - </a> - <div class="media-body"> - <h4 class="media-heading">Media heading</h4> - ... - - <!-- Nested media object --> - <div class="media"> - ... - </div> - </div> - </li> -</ul> -</pre> - -</section> - - - - - - <!-- Miscellaneous - ================================================== --> - <section id="misc"> - <div class="page-header"> - <h1>Miscellaneous <small>Lightweight utility components</small></h1> - </div> - - <h2>Wells</h2> - <p>Use the well as a simple effect on an element to give it an inset effect.</p> - <div class="bs-docs-example"> - <div class="well"> - Look, I'm in a well! - </div> - </div> -<pre class="prettyprint linenums"> -<div class="well"> - ... -</div> -</pre> - <h3>Optional classes</h3> - <p>Control padding and rounded corners with two optional modifier classes.</p> - <div class="bs-docs-example"> - <div class="well well-large"> - Look, I'm in a well! - </div> - </div> -<pre class="prettyprint linenums"> -<div class="well well-large"> - ... -</div> -</pre> - <div class="bs-docs-example"> - <div class="well well-small"> - Look, I'm in a well! - </div> - </div> -<pre class="prettyprint linenums"> -<div class="well well-small"> - ... -</div> -</pre> - - <h2>Close icon</h2> - <p>Use the generic close icon for dismissing content like modals and alerts.</p> - <div class="bs-docs-example"> - <p><button class="close" style="float: none;">×</button></p> - </div> - <pre class="prettyprint linenums"><button class="close">&times;</button></pre> - <p>iOS devices require an <code>href="#"</code> for click events if you would rather use an anchor.</p> - <pre class="prettyprint linenums"><a class="close" href="#">&times;</a></pre> - - <h2>Helper classes</h2> - <p>Simple, focused classes for small display or behavior tweaks.</p> - - <h4>.pull-left</h4> - <p>Float an element left</p> -<pre class="prettyprint linenums"> -class="pull-left" -</pre> -<pre class="prettyprint linenums"> -.pull-left { - float: left; -} -</pre> - - <h4>.pull-right</h4> - <p>Float an element right</p> -<pre class="prettyprint linenums"> -class="pull-right" -</pre> -<pre class="prettyprint linenums"> -.pull-right { - float: right; -} -</pre> - - <h4>.muted</h4> - <p>Change an element's color to <code>#999</code></p> -<pre class="prettyprint linenums"> -class="muted" -</pre> -<pre class="prettyprint linenums"> -.muted { - color: #999; -} -</pre> - - <h4>.clearfix</h4> - <p>Clear the <code>float</code> on any element</p> -<pre class="prettyprint linenums"> -class="clearfix" -</pre> -<pre class="prettyprint linenums"> -.clearfix { - *zoom: 1; - &:before, - &:after { - display: table; - content: ""; - } - &:after { - clear: both; - } -} -</pre> - - </section> - - - - </div> - </div> - - </div> - - - - <!-- Footer - ================================================== --> - <footer class="footer"> - <div class="container"> - <p>Designed and built with all the love in the world by <a href="http://twitter.com/mdo" target="_blank">@mdo</a> and <a href="http://twitter.com/fat" target="_blank">@fat</a>.</p> - <p>Code licensed under <a href="http://www.apache.org/licenses/LICENSE-2.0" target="_blank">Apache License v2.0</a>, documentation under <a href="http://creativecommons.org/licenses/by/3.0/">CC BY 3.0</a>.</p> - <p><a href="http://glyphicons.com">Glyphicons Free</a> licensed under <a href="http://creativecommons.org/licenses/by/3.0/">CC BY 3.0</a>.</p> - <ul class="footer-links"> - <li><a href="http://blog.getbootstrap.com">Blog</a></li> - <li class="muted">·</li> - <li><a href="https://github.com/twitter/bootstrap/issues?state=open">Issues</a></li> - <li class="muted">·</li> - <li><a href="https://github.com/twitter/bootstrap/blob/master/CHANGELOG.md">Changelog</a></li> - </ul> - </div> - </footer> - - - - <!-- Le javascript - ================================================== --> - <!-- Placed at the end of the document so the pages load faster --> - <script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> - <script src="assets/js/jquery.js"></script> - <script src="assets/js/bootstrap-transition.js"></script> - <script src="assets/js/bootstrap-alert.js"></script> - <script src="assets/js/bootstrap-modal.js"></script> - <script src="assets/js/bootstrap-dropdown.js"></script> - <script src="assets/js/bootstrap-scrollspy.js"></script> - <script src="assets/js/bootstrap-tab.js"></script> - <script src="assets/js/bootstrap-tooltip.js"></script> - <script src="assets/js/bootstrap-popover.js"></script> - <script src="assets/js/bootstrap-button.js"></script> - <script src="assets/js/bootstrap-collapse.js"></script> - <script src="assets/js/bootstrap-carousel.js"></script> - <script src="assets/js/bootstrap-typeahead.js"></script> - <script src="assets/js/bootstrap-affix.js"></script> - - <script src="assets/js/holder/holder.js"></script> - <script src="assets/js/google-code-prettify/prettify.js"></script> - - <script src="assets/js/application.js"></script> - - - - </body> -</html> diff --git a/src/main/webapp/bower_components/bootstrap/docs/customize.html b/src/main/webapp/bower_components/bootstrap/docs/customize.html deleted file mode 100644 index a3c6ec68..00000000 --- a/src/main/webapp/bower_components/bootstrap/docs/customize.html +++ /dev/null @@ -1,514 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <title>Customize · Bootstrap</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta name="description" content=""> - <meta name="author" content=""> - - <!-- Le styles --> - <link href="assets/css/bootstrap.css" rel="stylesheet"> - <link href="assets/css/bootstrap-responsive.css" rel="stylesheet"> - <link href="assets/css/docs.css" rel="stylesheet"> - <link href="assets/js/google-code-prettify/prettify.css" rel="stylesheet"> - - <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements --> - <!--[if lt IE 9]> - <script src="assets/js/html5shiv.js"></script> - <![endif]--> - - <!-- Le fav and touch icons --> - <link rel="apple-touch-icon-precomposed" sizes="144x144" href="assets/ico/apple-touch-icon-144-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="114x114" href="assets/ico/apple-touch-icon-114-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="72x72" href="assets/ico/apple-touch-icon-72-precomposed.png"> - <link rel="apple-touch-icon-precomposed" href="assets/ico/apple-touch-icon-57-precomposed.png"> - <link rel="shortcut icon" href="assets/ico/favicon.png"> - - </head> - - <body data-spy="scroll" data-target=".bs-docs-sidebar"> - - <!-- Navbar - ================================================== --> - <div class="navbar navbar-inverse navbar-fixed-top"> - <div class="navbar-inner"> - <div class="container"> - <button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - </button> - <a class="brand" href="./index.html">Bootstrap</a> - <div class="nav-collapse collapse"> - <ul class="nav"> - <li class=""> - <a href="./index.html">Home</a> - </li> - <li class=""> - <a href="./getting-started.html">Get started</a> - </li> - <li class=""> - <a href="./scaffolding.html">Scaffolding</a> - </li> - <li class=""> - <a href="./base-css.html">Base CSS</a> - </li> - <li class=""> - <a href="./components.html">Components</a> - </li> - <li class=""> - <a href="./javascript.html">JavaScript</a> - </li> - <li class="active"> - <a href="./customize.html">Customize</a> - </li> - </ul> - </div> - </div> - </div> - </div> - -<!-- Masthead -================================================== --> -<header class="jumbotron subhead" id="overview"> - <div class="container"> - <h1>Customize and download</h1> - <p class="lead"><a href="https://github.com/twitter/bootstrap/zipball/master">Download Bootstrap</a> or customize variables, components, JavaScript plugins, and more.</p> - </div> -</header> - - - <div class="container"> - - <!-- Docs nav - ================================================== --> - <div class="row"> - <div class="span3 bs-docs-sidebar"> - <ul class="nav nav-list bs-docs-sidenav"> - <li><a href="#components"><i class="icon-chevron-right"></i> 1. Choose components</a></li> - <li><a href="#plugins"><i class="icon-chevron-right"></i> 2. Select jQuery plugins</a></li> - <li><a href="#variables"><i class="icon-chevron-right"></i> 3. Customize variables</a></li> - <li><a href="#download"><i class="icon-chevron-right"></i> 4. Download</a></li> - </ul> - </div> - <div class="span9"> - - - <!-- Customize form - ================================================== --> - <form> - <section class="download" id="components"> - <div class="page-header"> - <a class="btn btn-small pull-right toggle-all" href="#">Toggle all</a> - <h1> - 1. Choose components - </h1> - </div> - <div class="row download-builder"> - <div class="span3"> - <h3>Scaffolding</h3> - <label class="checkbox"><input checked="checked" type="checkbox" value="reset.less"> Normalize and reset</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="scaffolding.less"> Body type and links</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="grid.less"> Grid system</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="layouts.less"> Layouts</label> - <h3>Base CSS</h3> - <label class="checkbox"><input checked="checked" type="checkbox" value="type.less"> Headings, body, etc</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="code.less"> Code and pre</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="labels-badges.less"> Labels and badges</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="tables.less"> Tables</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="forms.less"> Forms</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="buttons.less"> Buttons</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="sprites.less"> Icons</label> - </div><!-- /span --> - <div class="span3"> - <h3>Components</h3> - <label class="checkbox"><input checked="checked" type="checkbox" value="button-groups.less"> Button groups and dropdowns</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="navs.less"> Navs, tabs, and pills</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="navbar.less"> Navbar</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="breadcrumbs.less"> Breadcrumbs</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="pagination.less"> Pagination</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="pager.less"> Pager</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="thumbnails.less"> Thumbnails</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="alerts.less"> Alerts</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="progress-bars.less"> Progress bars</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="hero-unit.less"> Hero unit</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="media.less"> Media component</label> - <h3>JS Components</h3> - <label class="checkbox"><input checked="checked" type="checkbox" value="tooltip.less"> Tooltips</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="popovers.less"> Popovers</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="modals.less"> Modals</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="dropdowns.less"> Dropdowns</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="accordion.less"> Collapse</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="carousel.less"> Carousel</label> - </div><!-- /span --> - <div class="span3"> - <h3>Miscellaneous</h3> - <label class="checkbox"><input checked="checked" type="checkbox" value="wells.less"> Wells</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="close.less"> Close icon</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="utilities.less"> Utilities</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="component-animations.less"> Component animations</label> - <h3>Responsive</h3> - <label class="checkbox"><input checked="checked" type="checkbox" value="responsive-utilities.less"> Visible/hidden classes</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="responsive-767px-max.less"> Narrow tablets and below (<767px)</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="responsive-768px-979px.less"> Tablets to desktops (767-979px)</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="responsive-1200px-min.less"> Large desktops (>1200px)</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="responsive-navbar.less"> Responsive navbar</label> - </div><!-- /span --> - </div><!-- /row --> - </section> - - <section class="download" id="plugins"> - <div class="page-header"> - <a class="btn btn-small pull-right toggle-all" href="#">Toggle all</a> - <h1> - 2. Select jQuery plugins - </h1> - </div> - <div class="row download-builder"> - <div class="span3"> - <label class="checkbox"> - <input type="checkbox" checked="true" value="bootstrap-transition.js"> - Transitions <small>(required for any animation)</small> - </label> - <label class="checkbox"> - <input type="checkbox" checked="true" value="bootstrap-modal.js"> - Modals - </label> - <label class="checkbox"> - <input type="checkbox" checked="true" value="bootstrap-dropdown.js"> - Dropdowns - </label> - <label class="checkbox"> - <input type="checkbox" checked="true" value="bootstrap-scrollspy.js"> - Scrollspy - </label> - <label class="checkbox"> - <input type="checkbox" checked="true" value="bootstrap-tab.js"> - Togglable tabs - </label> - <label class="checkbox"> - <input type="checkbox" checked="true" value="bootstrap-tooltip.js"> - Tooltips - </label> - <label class="checkbox"> - <input type="checkbox" checked="true" value="bootstrap-popover.js"> - Popovers <small>(requires Tooltips)</small> - </label> - </div><!-- /span --> - <div class="span3"> - <label class="checkbox"> - <input type="checkbox" checked="true" value="bootstrap-affix.js"> - Affix - </label> - <label class="checkbox"> - <input type="checkbox" checked="true" value="bootstrap-alert.js"> - Alert messages - </label> - <label class="checkbox"> - <input type="checkbox" checked="true" value="bootstrap-button.js"> - Buttons - </label> - <label class="checkbox"> - <input type="checkbox" checked="true" value="bootstrap-collapse.js"> - Collapse - </label> - <label class="checkbox"> - <input type="checkbox" checked="true" value="bootstrap-carousel.js"> - Carousel - </label> - <label class="checkbox"> - <input type="checkbox" checked="true" value="bootstrap-typeahead.js"> - Typeahead - </label> - </div><!-- /span --> - <div class="span3"> - <h4 class="muted">Heads up!</h4> - <p class="muted">All checked plugins will be compiled into a single file, bootstrap.js. All plugins require the latest version of <a href="http://jquery.com/" target="_blank">jQuery</a> to be included.</p> - </div><!-- /span --> - </div><!-- /row --> - </section> - - - <section class="download" id="variables"> - <div class="page-header"> - <a class="btn btn-small pull-right toggle-all" href="#">Reset to defaults</a> - <h1> - 3. Customize variables - </h1> - </div> - <div class="row download-builder"> - <div class="span3"> - <h3>Scaffolding</h3> - <label>@bodyBackground</label> - <input type="text" class="span3" placeholder="@white"> - <label>@textColor</label> - <input type="text" class="span3" placeholder="@grayDark"> - - <h3>Links</h3> - <label>@linkColor</label> - <input type="text" class="span3" placeholder="#08c"> - <label>@linkColorHover</label> - <input type="text" class="span3" placeholder="darken(@linkColor, 15%)"> - <h3>Colors</h3> - <label>@blue</label> - <input type="text" class="span3" placeholder="#049cdb"> - <label>@green</label> - <input type="text" class="span3" placeholder="#46a546"> - <label>@red</label> - <input type="text" class="span3" placeholder="#9d261d"> - <label>@yellow</label> - <input type="text" class="span3" placeholder="#ffc40d"> - <label>@orange</label> - <input type="text" class="span3" placeholder="#f89406"> - <label>@pink</label> - <input type="text" class="span3" placeholder="#c3325f"> - <label>@purple</label> - <input type="text" class="span3" placeholder="#7a43b6"> - - <h3>Sprites</h3> - <label>@iconSpritePath</label> - <input type="text" class="span3" placeholder="'../img/glyphicons-halflings.png'"> - <label>@iconWhiteSpritePath</label> - <input type="text" class="span3" placeholder="'../img/glyphicons-halflings-white.png'"> - - <h3>Grid system</h3> - <label>@gridColumns</label> - <input type="text" class="span3" placeholder="12"> - <label>@gridColumnWidth</label> - <input type="text" class="span3" placeholder="60px"> - <label>@gridGutterWidth</label> - <input type="text" class="span3" placeholder="20px"> - <label>@gridColumnWidth1200</label> - <input type="text" class="span3" placeholder="70px"> - <label>@gridGutterWidth1200</label> - <input type="text" class="span3" placeholder="30px"> - <label>@gridColumnWidth768</label> - <input type="text" class="span3" placeholder="42px"> - <label>@gridGutterWidth768</label> - <input type="text" class="span3" placeholder="20px"> - - </div><!-- /span --> - <div class="span3"> - - <h3>Typography</h3> - <label>@sansFontFamily</label> - <input type="text" class="span3" placeholder="'Helvetica Neue', Helvetica, Arial, sans-serif"> - <label>@serifFontFamily</label> - <input type="text" class="span3" placeholder="Georgia, 'Times New Roman', Times, serif"> - <label>@monoFontFamily</label> - <input type="text" class="span3" placeholder="Menlo, Monaco, 'Courier New', monospace"> - - <label>@baseFontSize</label> - <input type="text" class="span3" placeholder="14px"> - <label>@baseFontFamily</label> - <input type="text" class="span3" placeholder="@sansFontFamily"> - <label>@baseLineHeight</label> - <input type="text" class="span3" placeholder="20px"> - - <label>@altFontFamily</label> - <input type="text" class="span3" placeholder="@serifFontFamily"> - <label>@headingsFontFamily</label> - <input type="text" class="span3" placeholder="inherit"> - <label>@headingsFontWeight</label> - <input type="text" class="span3" placeholder="bold"> - <label>@headingsColor</label> - <input type="text" class="span3" placeholder="inherit"> - - <label>@fontSizeLarge</label> - <input type="text" class="span3" placeholder="@baseFontSize * 1.25"> - <label>@fontSizeSmall</label> - <input type="text" class="span3" placeholder="@baseFontSize * 0.85"> - <label>@fontSizeMini</label> - <input type="text" class="span3" placeholder="@baseFontSize * 0.75"> - - <label>@paddingLarge</label> - <input type="text" class="span3" placeholder="11px 19px"> - <label>@paddingSmall</label> - <input type="text" class="span3" placeholder="2px 10px"> - <label>@paddingMini</label> - <input type="text" class="span3" placeholder="1px 6px"> - - <label>@baseBorderRadius</label> - <input type="text" class="span3" placeholder="4px"> - <label>@borderRadiusLarge</label> - <input type="text" class="span3" placeholder="6px"> - <label>@borderRadiusSmall</label> - <input type="text" class="span3" placeholder="3px"> - - <label>@heroUnitBackground</label> - <input type="text" class="span3" placeholder="@grayLighter"> - <label>@heroUnitHeadingColor</label> - <input type="text" class="span3" placeholder="inherit"> - <label>@heroUnitLeadColor</label> - <input type="text" class="span3" placeholder="inherit"> - - <h3>Tables</h3> - <label>@tableBackground</label> - <input type="text" class="span3" placeholder="transparent"> - <label>@tableBackgroundAccent</label> - <input type="text" class="span3" placeholder="#f9f9f9"> - <label>@tableBackgroundHover</label> - <input type="text" class="span3" placeholder="#f5f5f5"> - <label>@tableBorder</label> - <input type="text" class="span3" placeholder="#ddd"> - - <h3>Forms</h3> - <label>@placeholderText</label> - <input type="text" class="span3" placeholder="@grayLight"> - <label>@inputBackground</label> - <input type="text" class="span3" placeholder="@white"> - <label>@inputBorder</label> - <input type="text" class="span3" placeholder="#ccc"> - <label>@inputBorderRadius</label> - <input type="text" class="span3" placeholder="3px"> - <label>@inputDisabledBackground</label> - <input type="text" class="span3" placeholder="@grayLighter"> - <label>@formActionsBackground</label> - <input type="text" class="span3" placeholder="#f5f5f5"> - <label>@btnPrimaryBackground</label> - <input type="text" class="span3" placeholder="@linkColor"> - <label>@btnPrimaryBackgroundHighlight</label> - <input type="text" class="span3" placeholder="darken(@white, 10%)"> - - </div><!-- /span --> - <div class="span3"> - - <h3>Form states & alerts</h3> - <label>@warningText</label> - <input type="text" class="span3" placeholder="#c09853"> - <label>@warningBackground</label> - <input type="text" class="span3" placeholder="#fcf8e3"> - <label>@errorText</label> - <input type="text" class="span3" placeholder="#b94a48"> - <label>@errorBackground</label> - <input type="text" class="span3" placeholder="#f2dede"> - <label>@successText</label> - <input type="text" class="span3" placeholder="#468847"> - <label>@successBackground</label> - <input type="text" class="span3" placeholder="#dff0d8"> - <label>@infoText</label> - <input type="text" class="span3" placeholder="#3a87ad"> - <label>@infoBackground</label> - <input type="text" class="span3" placeholder="#d9edf7"> - - <h3>Navbar</h3> - <label>@navbarHeight</label> - <input type="text" class="span3" placeholder="40px"> - <label>@navbarBackground</label> - <input type="text" class="span3" placeholder="@grayDarker"> - <label>@navbarBackgroundHighlight</label> - <input type="text" class="span3" placeholder="@grayDark"> - <label>@navbarText</label> - <input type="text" class="span3" placeholder="@grayLight"> - <label>@navbarBrandColor</label> - <input type="text" class="span3" placeholder="@navbarLinkColor"> - <label>@navbarLinkColor</label> - <input type="text" class="span3" placeholder="@grayLight"> - <label>@navbarLinkColorHover</label> - <input type="text" class="span3" placeholder="@white"> - <label>@navbarLinkColorActive</label> - <input type="text" class="span3" placeholder="@navbarLinkColorHover"> - <label>@navbarLinkBackgroundHover</label> - <input type="text" class="span3" placeholder="transparent"> - <label>@navbarLinkBackgroundActive</label> - <input type="text" class="span3" placeholder="@navbarBackground"> - <label>@navbarSearchBackground</label> - <input type="text" class="span3" placeholder="lighten(@navbarBackground, 25%)"> - <label>@navbarSearchBackgroundFocus</label> - <input type="text" class="span3" placeholder="@white"> - <label>@navbarSearchBorder</label> - <input type="text" class="span3" placeholder="darken(@navbarSearchBackground, 30%)"> - <label>@navbarSearchPlaceholderColor</label> - <input type="text" class="span3" placeholder="#ccc"> - - <label>@navbarCollapseWidth</label> - <input type="text" class="span3" placeholder="979px"> - <label>@navbarCollapseDesktopWidth</label> - <input type="text" class="span3" placeholder="@navbarCollapseWidth + 1"> - - <h3>Dropdowns</h3> - <label>@dropdownBackground</label> - <input type="text" class="span3" placeholder="@white"> - <label>@dropdownBorder</label> - <input type="text" class="span3" placeholder="rgba(0,0,0,.2)"> - <label>@dropdownLinkColor</label> - <input type="text" class="span3" placeholder="@grayDark"> - <label>@dropdownLinkColorHover</label> - <input type="text" class="span3" placeholder="@white"> - <label>@dropdownLinkBackgroundHover</label> - <input type="text" class="span3" placeholder="@linkColor"> - </div><!-- /span --> - </div><!-- /row --> - </section> - - <section class="download" id="download"> - <div class="page-header"> - <h1> - 4. Download - </h1> - </div> - <div class="download-btn"> - <a class="btn btn-primary" href="#" >Customize and Download</a> - <h4>What's included?</h4> - <p>Downloads include compiled CSS, compiled and minified CSS, and compiled jQuery plugins, all nicely packed up into a zipball for your convenience.</p> - </div> - </section><!-- /download --> - </form> - - - - </div> - </div> - - </div> - - - - <!-- Footer - ================================================== --> - <footer class="footer"> - <div class="container"> - <p>Designed and built with all the love in the world by <a href="http://twitter.com/mdo" target="_blank">@mdo</a> and <a href="http://twitter.com/fat" target="_blank">@fat</a>.</p> - <p>Code licensed under <a href="http://www.apache.org/licenses/LICENSE-2.0" target="_blank">Apache License v2.0</a>, documentation under <a href="http://creativecommons.org/licenses/by/3.0/">CC BY 3.0</a>.</p> - <p><a href="http://glyphicons.com">Glyphicons Free</a> licensed under <a href="http://creativecommons.org/licenses/by/3.0/">CC BY 3.0</a>.</p> - <ul class="footer-links"> - <li><a href="http://blog.getbootstrap.com">Blog</a></li> - <li class="muted">·</li> - <li><a href="https://github.com/twitter/bootstrap/issues?state=open">Issues</a></li> - <li class="muted">·</li> - <li><a href="https://github.com/twitter/bootstrap/blob/master/CHANGELOG.md">Changelog</a></li> - </ul> - </div> - </footer> - - - - <!-- Le javascript - ================================================== --> - <!-- Placed at the end of the document so the pages load faster --> - <script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> - <script src="assets/js/jquery.js"></script> - <script src="assets/js/bootstrap-transition.js"></script> - <script src="assets/js/bootstrap-alert.js"></script> - <script src="assets/js/bootstrap-modal.js"></script> - <script src="assets/js/bootstrap-dropdown.js"></script> - <script src="assets/js/bootstrap-scrollspy.js"></script> - <script src="assets/js/bootstrap-tab.js"></script> - <script src="assets/js/bootstrap-tooltip.js"></script> - <script src="assets/js/bootstrap-popover.js"></script> - <script src="assets/js/bootstrap-button.js"></script> - <script src="assets/js/bootstrap-collapse.js"></script> - <script src="assets/js/bootstrap-carousel.js"></script> - <script src="assets/js/bootstrap-typeahead.js"></script> - <script src="assets/js/bootstrap-affix.js"></script> - - <script src="assets/js/holder/holder.js"></script> - <script src="assets/js/google-code-prettify/prettify.js"></script> - - <script src="assets/js/application.js"></script> - - - - </body> -</html> diff --git a/src/main/webapp/bower_components/bootstrap/docs/examples/carousel.html b/src/main/webapp/bower_components/bootstrap/docs/examples/carousel.html deleted file mode 100644 index 81d1a28a..00000000 --- a/src/main/webapp/bower_components/bootstrap/docs/examples/carousel.html +++ /dev/null @@ -1,454 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <title>Carousel Template · Bootstrap</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta name="description" content=""> - <meta name="author" content=""> - - <!-- Le styles --> - <link href="../assets/css/bootstrap.css" rel="stylesheet"> - <link href="../assets/css/bootstrap-responsive.css" rel="stylesheet"> - <style> - - /* GLOBAL STYLES - -------------------------------------------------- */ - /* Padding below the footer and lighter body text */ - - body { - padding-bottom: 40px; - color: #5a5a5a; - } - - - - /* CUSTOMIZE THE NAVBAR - -------------------------------------------------- */ - - /* Special class on .container surrounding .navbar, used for positioning it into place. */ - .navbar-wrapper { - position: absolute; - top: 0; - left: 0; - right: 0; - z-index: 10; - margin-top: 20px; - margin-bottom: -90px; /* Negative margin to pull up carousel. 90px is roughly margins and height of navbar. */ - } - .navbar-wrapper .navbar { - - } - - /* Remove border and change up box shadow for more contrast */ - .navbar .navbar-inner { - border: 0; - -webkit-box-shadow: 0 2px 10px rgba(0,0,0,.25); - -moz-box-shadow: 0 2px 10px rgba(0,0,0,.25); - box-shadow: 0 2px 10px rgba(0,0,0,.25); - } - - /* Downsize the brand/project name a bit */ - .navbar .brand { - padding: 14px 20px 16px; /* Increase vertical padding to match navbar links */ - font-size: 16px; - font-weight: bold; - text-shadow: 0 -1px 0 rgba(0,0,0,.5); - } - - /* Navbar links: increase padding for taller navbar */ - .navbar .nav > li > a { - padding: 15px 20px; - } - - /* Offset the responsive button for proper vertical alignment */ - .navbar .btn-navbar { - margin-top: 10px; - } - - - - /* CUSTOMIZE THE CAROUSEL - -------------------------------------------------- */ - - /* Carousel base class */ - .carousel { - margin-bottom: 60px; - } - - .carousel .container { - position: relative; - z-index: 9; - } - - .carousel-control { - height: 80px; - margin-top: 0; - font-size: 120px; - text-shadow: 0 1px 1px rgba(0,0,0,.4); - background-color: transparent; - border: 0; - z-index: 10; - } - - .carousel .item { - height: 500px; - } - .carousel img { - position: absolute; - top: 0; - left: 0; - min-width: 100%; - height: 500px; - } - - .carousel-caption { - background-color: transparent; - position: static; - max-width: 550px; - padding: 0 20px; - margin-top: 200px; - } - .carousel-caption h1, - .carousel-caption .lead { - margin: 0; - line-height: 1.25; - color: #fff; - text-shadow: 0 1px 1px rgba(0,0,0,.4); - } - .carousel-caption .btn { - margin-top: 10px; - } - - - - /* MARKETING CONTENT - -------------------------------------------------- */ - - /* Center align the text within the three columns below the carousel */ - .marketing .span4 { - text-align: center; - } - .marketing h2 { - font-weight: normal; - } - .marketing .span4 p { - margin-left: 10px; - margin-right: 10px; - } - - - /* Featurettes - ------------------------- */ - - .featurette-divider { - margin: 80px 0; /* Space out the Bootstrap <hr> more */ - } - .featurette { - padding-top: 120px; /* Vertically center images part 1: add padding above and below text. */ - overflow: hidden; /* Vertically center images part 2: clear their floats. */ - } - .featurette-image { - margin-top: -120px; /* Vertically center images part 3: negative margin up the image the same amount of the padding to center it. */ - } - - /* Give some space on the sides of the floated elements so text doesn't run right into it. */ - .featurette-image.pull-left { - margin-right: 40px; - } - .featurette-image.pull-right { - margin-left: 40px; - } - - /* Thin out the marketing headings */ - .featurette-heading { - font-size: 50px; - font-weight: 300; - line-height: 1; - letter-spacing: -1px; - } - - - - /* RESPONSIVE CSS - -------------------------------------------------- */ - - @media (max-width: 979px) { - - .container.navbar-wrapper { - margin-bottom: 0; - width: auto; - } - .navbar-inner { - border-radius: 0; - margin: -20px 0; - } - - .carousel .item { - height: 500px; - } - .carousel img { - width: auto; - height: 500px; - } - - .featurette { - height: auto; - padding: 0; - } - .featurette-image.pull-left, - .featurette-image.pull-right { - display: block; - float: none; - max-width: 40%; - margin: 0 auto 20px; - } - } - - - @media (max-width: 767px) { - - .navbar-inner { - margin: -20px; - } - - .carousel { - margin-left: -20px; - margin-right: -20px; - } - .carousel .container { - - } - .carousel .item { - height: 300px; - } - .carousel img { - height: 300px; - } - .carousel-caption { - width: 65%; - padding: 0 70px; - margin-top: 100px; - } - .carousel-caption h1 { - font-size: 30px; - } - .carousel-caption .lead, - .carousel-caption .btn { - font-size: 18px; - } - - .marketing .span4 + .span4 { - margin-top: 40px; - } - - .featurette-heading { - font-size: 30px; - } - .featurette .lead { - font-size: 18px; - line-height: 1.5; - } - - } - </style> - - <!-- HTML5 shim, for IE6-8 support of HTML5 elements --> - <!--[if lt IE 9]> - <script src="../assets/js/html5shiv.js"></script> - <![endif]--> - - <!-- Fav and touch icons --> - <link rel="apple-touch-icon-precomposed" sizes="144x144" href="../assets/ico/apple-touch-icon-144-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="114x114" href="../assets/ico/apple-touch-icon-114-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="72x72" href="../assets/ico/apple-touch-icon-72-precomposed.png"> - <link rel="apple-touch-icon-precomposed" href="../assets/ico/apple-touch-icon-57-precomposed.png"> - <link rel="shortcut icon" href="../assets/ico/favicon.png"> - </head> - - <body> - - - - <!-- NAVBAR - ================================================== --> - <div class="navbar-wrapper"> - <!-- Wrap the .navbar in .container to center it within the absolutely positioned parent. --> - <div class="container"> - - <div class="navbar navbar-inverse"> - <div class="navbar-inner"> - <!-- Responsive Navbar Part 1: Button for triggering responsive navbar (not covered in tutorial). Include responsive CSS to utilize. --> - <button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - </button> - <a class="brand" href="#">Project name</a> - <!-- Responsive Navbar Part 2: Place all navbar contents you want collapsed withing .navbar-collapse.collapse. --> - <div class="nav-collapse collapse"> - <ul class="nav"> - <li class="active"><a href="#">Home</a></li> - <li><a href="#about">About</a></li> - <li><a href="#contact">Contact</a></li> - <!-- Read about Bootstrap dropdowns at http://twitter.github.com/bootstrap/javascript.html#dropdowns --> - <li class="dropdown"> - <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li class="nav-header">Nav header</li> - <li><a href="#">Separated link</a></li> - <li><a href="#">One more separated link</a></li> - </ul> - </li> - </ul> - </div><!--/.nav-collapse --> - </div><!-- /.navbar-inner --> - </div><!-- /.navbar --> - - </div> <!-- /.container --> - </div><!-- /.navbar-wrapper --> - - - - <!-- Carousel - ================================================== --> - <div id="myCarousel" class="carousel slide"> - <div class="carousel-inner"> - <div class="item active"> - <img src="../assets/img/examples/slide-01.jpg" alt=""> - <div class="container"> - <div class="carousel-caption"> - <h1>Example headline.</h1> - <p class="lead">Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> - <a class="btn btn-large btn-primary" href="#">Sign up today</a> - </div> - </div> - </div> - <div class="item"> - <img src="../assets/img/examples/slide-02.jpg" alt=""> - <div class="container"> - <div class="carousel-caption"> - <h1>Another example headline.</h1> - <p class="lead">Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> - <a class="btn btn-large btn-primary" href="#">Learn more</a> - </div> - </div> - </div> - <div class="item"> - <img src="../assets/img/examples/slide-03.jpg" alt=""> - <div class="container"> - <div class="carousel-caption"> - <h1>One more for good measure.</h1> - <p class="lead">Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> - <a class="btn btn-large btn-primary" href="#">Browse gallery</a> - </div> - </div> - </div> - </div> - <a class="left carousel-control" href="#myCarousel" data-slide="prev">‹</a> - <a class="right carousel-control" href="#myCarousel" data-slide="next">›</a> - </div><!-- /.carousel --> - - - - <!-- Marketing messaging and featurettes - ================================================== --> - <!-- Wrap the rest of the page in another container to center all the content. --> - - <div class="container marketing"> - - <!-- Three columns of text below the carousel --> - <div class="row"> - <div class="span4"> - <img class="img-circle" data-src="holder.js/140x140"> - <h2>Heading</h2> - <p>Donec sed odio dui. Etiam porta sem malesuada magna mollis euismod. Nullam id dolor id nibh ultricies vehicula ut id elit. Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Praesent commodo cursus magna, vel scelerisque nisl consectetur et.</p> - <p><a class="btn" href="#">View details »</a></p> - </div><!-- /.span4 --> - <div class="span4"> - <img class="img-circle" data-src="holder.js/140x140"> - <h2>Heading</h2> - <p>Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</p> - <p><a class="btn" href="#">View details »</a></p> - </div><!-- /.span4 --> - <div class="span4"> - <img class="img-circle" data-src="holder.js/140x140"> - <h2>Heading</h2> - <p>Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Vestibulum id ligula porta felis euismod semper. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</p> - <p><a class="btn" href="#">View details »</a></p> - </div><!-- /.span4 --> - </div><!-- /.row --> - - - <!-- START THE FEATURETTES --> - - <hr class="featurette-divider"> - - <div class="featurette"> - <img class="featurette-image pull-right" src="../assets/img/examples/browser-icon-chrome.png"> - <h2 class="featurette-heading">First featurette headling. <span class="muted">It'll blow your mind.</span></h2> - <p class="lead">Donec ullamcorper nulla non metus auctor fringilla. Vestibulum id ligula porta felis euismod semper. Praesent commodo cursus magna, vel scelerisque nisl consectetur. Fusce dapibus, tellus ac cursus commodo.</p> - </div> - - <hr class="featurette-divider"> - - <div class="featurette"> - <img class="featurette-image pull-left" src="../assets/img/examples/browser-icon-firefox.png"> - <h2 class="featurette-heading">Oh yeah, it's that good. <span class="muted">See for yourself.</span></h2> - <p class="lead">Donec ullamcorper nulla non metus auctor fringilla. Vestibulum id ligula porta felis euismod semper. Praesent commodo cursus magna, vel scelerisque nisl consectetur. Fusce dapibus, tellus ac cursus commodo.</p> - </div> - - <hr class="featurette-divider"> - - <div class="featurette"> - <img class="featurette-image pull-right" src="../assets/img/examples/browser-icon-safari.png"> - <h2 class="featurette-heading">And lastly, this one. <span class="muted">Checkmate.</span></h2> - <p class="lead">Donec ullamcorper nulla non metus auctor fringilla. Vestibulum id ligula porta felis euismod semper. Praesent commodo cursus magna, vel scelerisque nisl consectetur. Fusce dapibus, tellus ac cursus commodo.</p> - </div> - - <hr class="featurette-divider"> - - <!-- /END THE FEATURETTES --> - - - <!-- FOOTER --> - <footer> - <p class="pull-right"><a href="#">Back to top</a></p> - <p>© 2013 Company, Inc. · <a href="#">Privacy</a> · <a href="#">Terms</a></p> - </footer> - - </div><!-- /.container --> - - - - <!-- Le javascript - ================================================== --> - <!-- Placed at the end of the document so the pages load faster --> - <script src="../assets/js/jquery.js"></script> - <script src="../assets/js/bootstrap-transition.js"></script> - <script src="../assets/js/bootstrap-alert.js"></script> - <script src="../assets/js/bootstrap-modal.js"></script> - <script src="../assets/js/bootstrap-dropdown.js"></script> - <script src="../assets/js/bootstrap-scrollspy.js"></script> - <script src="../assets/js/bootstrap-tab.js"></script> - <script src="../assets/js/bootstrap-tooltip.js"></script> - <script src="../assets/js/bootstrap-popover.js"></script> - <script src="../assets/js/bootstrap-button.js"></script> - <script src="../assets/js/bootstrap-collapse.js"></script> - <script src="../assets/js/bootstrap-carousel.js"></script> - <script src="../assets/js/bootstrap-typeahead.js"></script> - <script> - !function ($) { - $(function(){ - // carousel demo - $('#myCarousel').carousel() - }) - }(window.jQuery) - </script> - <script src="../assets/js/holder/holder.js"></script> - </body> -</html> diff --git a/src/main/webapp/bower_components/bootstrap/docs/examples/fluid.html b/src/main/webapp/bower_components/bootstrap/docs/examples/fluid.html deleted file mode 100644 index 502062a2..00000000 --- a/src/main/webapp/bower_components/bootstrap/docs/examples/fluid.html +++ /dev/null @@ -1,163 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <title>Bootstrap, from Twitter</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta name="description" content=""> - <meta name="author" content=""> - - <!-- Le styles --> - <link href="../assets/css/bootstrap.css" rel="stylesheet"> - <style type="text/css"> - body { - padding-top: 60px; - padding-bottom: 40px; - } - .sidebar-nav { - padding: 9px 0; - } - - @media (max-width: 980px) { - /* Enable use of floated navbar text */ - .navbar-text.pull-right { - float: none; - padding-left: 5px; - padding-right: 5px; - } - } - </style> - <link href="../assets/css/bootstrap-responsive.css" rel="stylesheet"> - - <!-- HTML5 shim, for IE6-8 support of HTML5 elements --> - <!--[if lt IE 9]> - <script src="../assets/js/html5shiv.js"></script> - <![endif]--> - - <!-- Fav and touch icons --> - <link rel="apple-touch-icon-precomposed" sizes="144x144" href="../assets/ico/apple-touch-icon-144-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="114x114" href="../assets/ico/apple-touch-icon-114-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="72x72" href="../assets/ico/apple-touch-icon-72-precomposed.png"> - <link rel="apple-touch-icon-precomposed" href="../assets/ico/apple-touch-icon-57-precomposed.png"> - <link rel="shortcut icon" href="../assets/ico/favicon.png"> - </head> - - <body> - - <div class="navbar navbar-inverse navbar-fixed-top"> - <div class="navbar-inner"> - <div class="container-fluid"> - <button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - </button> - <a class="brand" href="#">Project name</a> - <div class="nav-collapse collapse"> - <p class="navbar-text pull-right"> - Logged in as <a href="#" class="navbar-link">Username</a> - </p> - <ul class="nav"> - <li class="active"><a href="#">Home</a></li> - <li><a href="#about">About</a></li> - <li><a href="#contact">Contact</a></li> - </ul> - </div><!--/.nav-collapse --> - </div> - </div> - </div> - - <div class="container-fluid"> - <div class="row-fluid"> - <div class="span3"> - <div class="well sidebar-nav"> - <ul class="nav nav-list"> - <li class="nav-header">Sidebar</li> - <li class="active"><a href="#">Link</a></li> - <li><a href="#">Link</a></li> - <li><a href="#">Link</a></li> - <li><a href="#">Link</a></li> - <li class="nav-header">Sidebar</li> - <li><a href="#">Link</a></li> - <li><a href="#">Link</a></li> - <li><a href="#">Link</a></li> - <li><a href="#">Link</a></li> - <li><a href="#">Link</a></li> - <li><a href="#">Link</a></li> - <li class="nav-header">Sidebar</li> - <li><a href="#">Link</a></li> - <li><a href="#">Link</a></li> - <li><a href="#">Link</a></li> - </ul> - </div><!--/.well --> - </div><!--/span--> - <div class="span9"> - <div class="hero-unit"> - <h1>Hello, world!</h1> - <p>This is a template for a simple marketing or informational website. It includes a large callout called the hero unit and three supporting pieces of content. Use it as a starting point to create something more unique.</p> - <p><a href="#" class="btn btn-primary btn-large">Learn more »</a></p> - </div> - <div class="row-fluid"> - <div class="span4"> - <h2>Heading</h2> - <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p> - <p><a class="btn" href="#">View details »</a></p> - </div><!--/span--> - <div class="span4"> - <h2>Heading</h2> - <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p> - <p><a class="btn" href="#">View details »</a></p> - </div><!--/span--> - <div class="span4"> - <h2>Heading</h2> - <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p> - <p><a class="btn" href="#">View details »</a></p> - </div><!--/span--> - </div><!--/row--> - <div class="row-fluid"> - <div class="span4"> - <h2>Heading</h2> - <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p> - <p><a class="btn" href="#">View details »</a></p> - </div><!--/span--> - <div class="span4"> - <h2>Heading</h2> - <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p> - <p><a class="btn" href="#">View details »</a></p> - </div><!--/span--> - <div class="span4"> - <h2>Heading</h2> - <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p> - <p><a class="btn" href="#">View details »</a></p> - </div><!--/span--> - </div><!--/row--> - </div><!--/span--> - </div><!--/row--> - - <hr> - - <footer> - <p>© Company 2013</p> - </footer> - - </div><!--/.fluid-container--> - - <!-- Le javascript - ================================================== --> - <!-- Placed at the end of the document so the pages load faster --> - <script src="../assets/js/jquery.js"></script> - <script src="../assets/js/bootstrap-transition.js"></script> - <script src="../assets/js/bootstrap-alert.js"></script> - <script src="../assets/js/bootstrap-modal.js"></script> - <script src="../assets/js/bootstrap-dropdown.js"></script> - <script src="../assets/js/bootstrap-scrollspy.js"></script> - <script src="../assets/js/bootstrap-tab.js"></script> - <script src="../assets/js/bootstrap-tooltip.js"></script> - <script src="../assets/js/bootstrap-popover.js"></script> - <script src="../assets/js/bootstrap-button.js"></script> - <script src="../assets/js/bootstrap-collapse.js"></script> - <script src="../assets/js/bootstrap-carousel.js"></script> - <script src="../assets/js/bootstrap-typeahead.js"></script> - - </body> -</html> diff --git a/src/main/webapp/bower_components/bootstrap/docs/examples/hero.html b/src/main/webapp/bower_components/bootstrap/docs/examples/hero.html deleted file mode 100644 index 6fb7a2c4..00000000 --- a/src/main/webapp/bower_components/bootstrap/docs/examples/hero.html +++ /dev/null @@ -1,126 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <title>Bootstrap, from Twitter</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta name="description" content=""> - <meta name="author" content=""> - - <!-- Le styles --> - <link href="../assets/css/bootstrap.css" rel="stylesheet"> - <style type="text/css"> - body { - padding-top: 60px; - padding-bottom: 40px; - } - </style> - <link href="../assets/css/bootstrap-responsive.css" rel="stylesheet"> - - <!-- HTML5 shim, for IE6-8 support of HTML5 elements --> - <!--[if lt IE 9]> - <script src="../assets/js/html5shiv.js"></script> - <![endif]--> - - <!-- Fav and touch icons --> - <link rel="apple-touch-icon-precomposed" sizes="144x144" href="../assets/ico/apple-touch-icon-144-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="114x114" href="../assets/ico/apple-touch-icon-114-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="72x72" href="../assets/ico/apple-touch-icon-72-precomposed.png"> - <link rel="apple-touch-icon-precomposed" href="../assets/ico/apple-touch-icon-57-precomposed.png"> - <link rel="shortcut icon" href="../assets/ico/favicon.png"> - </head> - - <body> - - <div class="navbar navbar-inverse navbar-fixed-top"> - <div class="navbar-inner"> - <div class="container"> - <button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - </button> - <a class="brand" href="#">Project name</a> - <div class="nav-collapse collapse"> - <ul class="nav"> - <li class="active"><a href="#">Home</a></li> - <li><a href="#about">About</a></li> - <li><a href="#contact">Contact</a></li> - <li class="dropdown"> - <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li class="nav-header">Nav header</li> - <li><a href="#">Separated link</a></li> - <li><a href="#">One more separated link</a></li> - </ul> - </li> - </ul> - <form class="navbar-form pull-right"> - <input class="span2" type="text" placeholder="Email"> - <input class="span2" type="password" placeholder="Password"> - <button type="submit" class="btn">Sign in</button> - </form> - </div><!--/.nav-collapse --> - </div> - </div> - </div> - - <div class="container"> - - <!-- Main hero unit for a primary marketing message or call to action --> - <div class="hero-unit"> - <h1>Hello, world!</h1> - <p>This is a template for a simple marketing or informational website. It includes a large callout called the hero unit and three supporting pieces of content. Use it as a starting point to create something more unique.</p> - <p><a href="#" class="btn btn-primary btn-large">Learn more »</a></p> - </div> - - <!-- Example row of columns --> - <div class="row"> - <div class="span4"> - <h2>Heading</h2> - <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p> - <p><a class="btn" href="#">View details »</a></p> - </div> - <div class="span4"> - <h2>Heading</h2> - <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p> - <p><a class="btn" href="#">View details »</a></p> - </div> - <div class="span4"> - <h2>Heading</h2> - <p>Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Vestibulum id ligula porta felis euismod semper. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</p> - <p><a class="btn" href="#">View details »</a></p> - </div> - </div> - - <hr> - - <footer> - <p>© Company 2013</p> - </footer> - - </div> <!-- /container --> - - <!-- Le javascript - ================================================== --> - <!-- Placed at the end of the document so the pages load faster --> - <script src="../assets/js/jquery.js"></script> - <script src="../assets/js/bootstrap-transition.js"></script> - <script src="../assets/js/bootstrap-alert.js"></script> - <script src="../assets/js/bootstrap-modal.js"></script> - <script src="../assets/js/bootstrap-dropdown.js"></script> - <script src="../assets/js/bootstrap-scrollspy.js"></script> - <script src="../assets/js/bootstrap-tab.js"></script> - <script src="../assets/js/bootstrap-tooltip.js"></script> - <script src="../assets/js/bootstrap-popover.js"></script> - <script src="../assets/js/bootstrap-button.js"></script> - <script src="../assets/js/bootstrap-collapse.js"></script> - <script src="../assets/js/bootstrap-carousel.js"></script> - <script src="../assets/js/bootstrap-typeahead.js"></script> - - </body> -</html> diff --git a/src/main/webapp/bower_components/bootstrap/docs/examples/justified-nav.html b/src/main/webapp/bower_components/bootstrap/docs/examples/justified-nav.html deleted file mode 100644 index ef8f8d42..00000000 --- a/src/main/webapp/bower_components/bootstrap/docs/examples/justified-nav.html +++ /dev/null @@ -1,174 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <title>Template · Bootstrap</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta name="description" content=""> - <meta name="author" content=""> - - <!-- Le styles --> - <link href="../assets/css/bootstrap.css" rel="stylesheet"> - <style type="text/css"> - body { - padding-top: 20px; - padding-bottom: 60px; - } - - /* Custom container */ - .container { - margin: 0 auto; - max-width: 1000px; - } - .container > hr { - margin: 60px 0; - } - - /* Main marketing message and sign up button */ - .jumbotron { - margin: 80px 0; - text-align: center; - } - .jumbotron h1 { - font-size: 100px; - line-height: 1; - } - .jumbotron .lead { - font-size: 24px; - line-height: 1.25; - } - .jumbotron .btn { - font-size: 21px; - padding: 14px 24px; - } - - /* Supporting marketing content */ - .marketing { - margin: 60px 0; - } - .marketing p + h4 { - margin-top: 28px; - } - - - /* Customize the navbar links to be fill the entire space of the .navbar */ - .navbar .navbar-inner { - padding: 0; - } - .navbar .nav { - margin: 0; - display: table; - width: 100%; - } - .navbar .nav li { - display: table-cell; - width: 1%; - float: none; - } - .navbar .nav li a { - font-weight: bold; - text-align: center; - border-left: 1px solid rgba(255,255,255,.75); - border-right: 1px solid rgba(0,0,0,.1); - } - .navbar .nav li:first-child a { - border-left: 0; - border-radius: 3px 0 0 3px; - } - .navbar .nav li:last-child a { - border-right: 0; - border-radius: 0 3px 3px 0; - } - </style> - <link href="../assets/css/bootstrap-responsive.css" rel="stylesheet"> - - <!-- HTML5 shim, for IE6-8 support of HTML5 elements --> - <!--[if lt IE 9]> - <script src="../assets/js/html5shiv.js"></script> - <![endif]--> - - <!-- Fav and touch icons --> - <link rel="apple-touch-icon-precomposed" sizes="144x144" href="../assets/ico/apple-touch-icon-144-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="114x114" href="../assets/ico/apple-touch-icon-114-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="72x72" href="../assets/ico/apple-touch-icon-72-precomposed.png"> - <link rel="apple-touch-icon-precomposed" href="../assets/ico/apple-touch-icon-57-precomposed.png"> - <link rel="shortcut icon" href="../assets/ico/favicon.png"> - </head> - - <body> - - <div class="container"> - - <div class="masthead"> - <h3 class="muted">Project name</h3> - <div class="navbar"> - <div class="navbar-inner"> - <div class="container"> - <ul class="nav"> - <li class="active"><a href="#">Home</a></li> - <li><a href="#">Projects</a></li> - <li><a href="#">Services</a></li> - <li><a href="#">Downloads</a></li> - <li><a href="#">About</a></li> - <li><a href="#">Contact</a></li> - </ul> - </div> - </div> - </div><!-- /.navbar --> - </div> - - <!-- Jumbotron --> - <div class="jumbotron"> - <h1>Marketing stuff!</h1> - <p class="lead">Cras justo odio, dapibus ac facilisis in, egestas eget quam. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</p> - <a class="btn btn-large btn-success" href="#">Get started today</a> - </div> - - <hr> - - <!-- Example row of columns --> - <div class="row-fluid"> - <div class="span4"> - <h2>Heading</h2> - <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p> - <p><a class="btn" href="#">View details »</a></p> - </div> - <div class="span4"> - <h2>Heading</h2> - <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p> - <p><a class="btn" href="#">View details »</a></p> - </div> - <div class="span4"> - <h2>Heading</h2> - <p>Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Vestibulum id ligula porta felis euismod semper. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa.</p> - <p><a class="btn" href="#">View details »</a></p> - </div> - </div> - - <hr> - - <div class="footer"> - <p>© Company 2013</p> - </div> - - </div> <!-- /container --> - - <!-- Le javascript - ================================================== --> - <!-- Placed at the end of the document so the pages load faster --> - <script src="../assets/js/jquery.js"></script> - <script src="../assets/js/bootstrap-transition.js"></script> - <script src="../assets/js/bootstrap-alert.js"></script> - <script src="../assets/js/bootstrap-modal.js"></script> - <script src="../assets/js/bootstrap-dropdown.js"></script> - <script src="../assets/js/bootstrap-scrollspy.js"></script> - <script src="../assets/js/bootstrap-tab.js"></script> - <script src="../assets/js/bootstrap-tooltip.js"></script> - <script src="../assets/js/bootstrap-popover.js"></script> - <script src="../assets/js/bootstrap-button.js"></script> - <script src="../assets/js/bootstrap-collapse.js"></script> - <script src="../assets/js/bootstrap-carousel.js"></script> - <script src="../assets/js/bootstrap-typeahead.js"></script> - - </body> -</html> diff --git a/src/main/webapp/bower_components/bootstrap/docs/examples/marketing-narrow.html b/src/main/webapp/bower_components/bootstrap/docs/examples/marketing-narrow.html deleted file mode 100644 index f6f5d168..00000000 --- a/src/main/webapp/bower_components/bootstrap/docs/examples/marketing-narrow.html +++ /dev/null @@ -1,137 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <title>Template · Bootstrap</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta name="description" content=""> - <meta name="author" content=""> - - <!-- Le styles --> - <link href="../assets/css/bootstrap.css" rel="stylesheet"> - <style type="text/css"> - body { - padding-top: 20px; - padding-bottom: 40px; - } - - /* Custom container */ - .container-narrow { - margin: 0 auto; - max-width: 700px; - } - .container-narrow > hr { - margin: 30px 0; - } - - /* Main marketing message and sign up button */ - .jumbotron { - margin: 60px 0; - text-align: center; - } - .jumbotron h1 { - font-size: 72px; - line-height: 1; - } - .jumbotron .btn { - font-size: 21px; - padding: 14px 24px; - } - - /* Supporting marketing content */ - .marketing { - margin: 60px 0; - } - .marketing p + h4 { - margin-top: 28px; - } - </style> - <link href="../assets/css/bootstrap-responsive.css" rel="stylesheet"> - - <!-- HTML5 shim, for IE6-8 support of HTML5 elements --> - <!--[if lt IE 9]> - <script src="../assets/js/html5shiv.js"></script> - <![endif]--> - - <!-- Fav and touch icons --> - <link rel="apple-touch-icon-precomposed" sizes="144x144" href="../assets/ico/apple-touch-icon-144-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="114x114" href="../assets/ico/apple-touch-icon-114-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="72x72" href="../assets/ico/apple-touch-icon-72-precomposed.png"> - <link rel="apple-touch-icon-precomposed" href="../assets/ico/apple-touch-icon-57-precomposed.png"> - <link rel="shortcut icon" href="../assets/ico/favicon.png"> - </head> - - <body> - - <div class="container-narrow"> - - <div class="masthead"> - <ul class="nav nav-pills pull-right"> - <li class="active"><a href="#">Home</a></li> - <li><a href="#">About</a></li> - <li><a href="#">Contact</a></li> - </ul> - <h3 class="muted">Project name</h3> - </div> - - <hr> - - <div class="jumbotron"> - <h1>Super awesome marketing speak!</h1> - <p class="lead">Cras justo odio, dapibus ac facilisis in, egestas eget quam. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</p> - <a class="btn btn-large btn-success" href="#">Sign up today</a> - </div> - - <hr> - - <div class="row-fluid marketing"> - <div class="span6"> - <h4>Subheading</h4> - <p>Donec id elit non mi porta gravida at eget metus. Maecenas faucibus mollis interdum.</p> - - <h4>Subheading</h4> - <p>Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Cras mattis consectetur purus sit amet fermentum.</p> - - <h4>Subheading</h4> - <p>Maecenas sed diam eget risus varius blandit sit amet non magna.</p> - </div> - - <div class="span6"> - <h4>Subheading</h4> - <p>Donec id elit non mi porta gravida at eget metus. Maecenas faucibus mollis interdum.</p> - - <h4>Subheading</h4> - <p>Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Cras mattis consectetur purus sit amet fermentum.</p> - - <h4>Subheading</h4> - <p>Maecenas sed diam eget risus varius blandit sit amet non magna.</p> - </div> - </div> - - <hr> - - <div class="footer"> - <p>© Company 2013</p> - </div> - - </div> <!-- /container --> - - <!-- Le javascript - ================================================== --> - <!-- Placed at the end of the document so the pages load faster --> - <script src="../assets/js/jquery.js"></script> - <script src="../assets/js/bootstrap-transition.js"></script> - <script src="../assets/js/bootstrap-alert.js"></script> - <script src="../assets/js/bootstrap-modal.js"></script> - <script src="../assets/js/bootstrap-dropdown.js"></script> - <script src="../assets/js/bootstrap-scrollspy.js"></script> - <script src="../assets/js/bootstrap-tab.js"></script> - <script src="../assets/js/bootstrap-tooltip.js"></script> - <script src="../assets/js/bootstrap-popover.js"></script> - <script src="../assets/js/bootstrap-button.js"></script> - <script src="../assets/js/bootstrap-collapse.js"></script> - <script src="../assets/js/bootstrap-carousel.js"></script> - <script src="../assets/js/bootstrap-typeahead.js"></script> - - </body> -</html> diff --git a/src/main/webapp/bower_components/bootstrap/docs/examples/signin.html b/src/main/webapp/bower_components/bootstrap/docs/examples/signin.html deleted file mode 100644 index 03105278..00000000 --- a/src/main/webapp/bower_components/bootstrap/docs/examples/signin.html +++ /dev/null @@ -1,94 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <title>Sign in · Twitter Bootstrap</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta name="description" content=""> - <meta name="author" content=""> - - <!-- Le styles --> - <link href="../assets/css/bootstrap.css" rel="stylesheet"> - <style type="text/css"> - body { - padding-top: 40px; - padding-bottom: 40px; - background-color: #f5f5f5; - } - - .form-signin { - max-width: 300px; - padding: 19px 29px 29px; - margin: 0 auto 20px; - background-color: #fff; - border: 1px solid #e5e5e5; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; - border-radius: 5px; - -webkit-box-shadow: 0 1px 2px rgba(0,0,0,.05); - -moz-box-shadow: 0 1px 2px rgba(0,0,0,.05); - box-shadow: 0 1px 2px rgba(0,0,0,.05); - } - .form-signin .form-signin-heading, - .form-signin .checkbox { - margin-bottom: 10px; - } - .form-signin input[type="text"], - .form-signin input[type="password"] { - font-size: 16px; - height: auto; - margin-bottom: 15px; - padding: 7px 9px; - } - - </style> - <link href="../assets/css/bootstrap-responsive.css" rel="stylesheet"> - - <!-- HTML5 shim, for IE6-8 support of HTML5 elements --> - <!--[if lt IE 9]> - <script src="../assets/js/html5shiv.js"></script> - <![endif]--> - - <!-- Fav and touch icons --> - <link rel="apple-touch-icon-precomposed" sizes="144x144" href="../assets/ico/apple-touch-icon-144-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="114x114" href="../assets/ico/apple-touch-icon-114-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="72x72" href="../assets/ico/apple-touch-icon-72-precomposed.png"> - <link rel="apple-touch-icon-precomposed" href="../assets/ico/apple-touch-icon-57-precomposed.png"> - <link rel="shortcut icon" href="../assets/ico/favicon.png"> - </head> - - <body> - - <div class="container"> - - <form class="form-signin"> - <h2 class="form-signin-heading">Please sign in</h2> - <input type="text" class="input-block-level" placeholder="Email address"> - <input type="password" class="input-block-level" placeholder="Password"> - <label class="checkbox"> - <input type="checkbox" value="remember-me"> Remember me - </label> - <button class="btn btn-large btn-primary" type="submit">Sign in</button> - </form> - - </div> <!-- /container --> - - <!-- Le javascript - ================================================== --> - <!-- Placed at the end of the document so the pages load faster --> - <script src="../assets/js/jquery.js"></script> - <script src="../assets/js/bootstrap-transition.js"></script> - <script src="../assets/js/bootstrap-alert.js"></script> - <script src="../assets/js/bootstrap-modal.js"></script> - <script src="../assets/js/bootstrap-dropdown.js"></script> - <script src="../assets/js/bootstrap-scrollspy.js"></script> - <script src="../assets/js/bootstrap-tab.js"></script> - <script src="../assets/js/bootstrap-tooltip.js"></script> - <script src="../assets/js/bootstrap-popover.js"></script> - <script src="../assets/js/bootstrap-button.js"></script> - <script src="../assets/js/bootstrap-collapse.js"></script> - <script src="../assets/js/bootstrap-carousel.js"></script> - <script src="../assets/js/bootstrap-typeahead.js"></script> - - </body> -</html> diff --git a/src/main/webapp/bower_components/bootstrap/docs/examples/starter-template.html b/src/main/webapp/bower_components/bootstrap/docs/examples/starter-template.html deleted file mode 100644 index 29c47a89..00000000 --- a/src/main/webapp/bower_components/bootstrap/docs/examples/starter-template.html +++ /dev/null @@ -1,79 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <title>Bootstrap, from Twitter</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta name="description" content=""> - <meta name="author" content=""> - - <!-- Le styles --> - <link href="../assets/css/bootstrap.css" rel="stylesheet"> - <style> - body { - padding-top: 60px; /* 60px to make the container go all the way to the bottom of the topbar */ - } - </style> - <link href="../assets/css/bootstrap-responsive.css" rel="stylesheet"> - - <!-- HTML5 shim, for IE6-8 support of HTML5 elements --> - <!--[if lt IE 9]> - <script src="../assets/js/html5shiv.js"></script> - <![endif]--> - - <!-- Fav and touch icons --> - <link rel="apple-touch-icon-precomposed" sizes="144x144" href="../assets/ico/apple-touch-icon-144-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="114x114" href="../assets/ico/apple-touch-icon-114-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="72x72" href="../assets/ico/apple-touch-icon-72-precomposed.png"> - <link rel="apple-touch-icon-precomposed" href="../assets/ico/apple-touch-icon-57-precomposed.png"> - <link rel="shortcut icon" href="../assets/ico/favicon.png"> - </head> - - <body> - - <div class="navbar navbar-inverse navbar-fixed-top"> - <div class="navbar-inner"> - <div class="container"> - <button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - </button> - <a class="brand" href="#">Project name</a> - <div class="nav-collapse collapse"> - <ul class="nav"> - <li class="active"><a href="#">Home</a></li> - <li><a href="#about">About</a></li> - <li><a href="#contact">Contact</a></li> - </ul> - </div><!--/.nav-collapse --> - </div> - </div> - </div> - - <div class="container"> - - <h1>Bootstrap starter template</h1> - <p>Use this document as a way to quick start any new project.<br> All you get is this message and a barebones HTML document.</p> - - </div> <!-- /container --> - - <!-- Le javascript - ================================================== --> - <!-- Placed at the end of the document so the pages load faster --> - <script src="../assets/js/jquery.js"></script> - <script src="../assets/js/bootstrap-transition.js"></script> - <script src="../assets/js/bootstrap-alert.js"></script> - <script src="../assets/js/bootstrap-modal.js"></script> - <script src="../assets/js/bootstrap-dropdown.js"></script> - <script src="../assets/js/bootstrap-scrollspy.js"></script> - <script src="../assets/js/bootstrap-tab.js"></script> - <script src="../assets/js/bootstrap-tooltip.js"></script> - <script src="../assets/js/bootstrap-popover.js"></script> - <script src="../assets/js/bootstrap-button.js"></script> - <script src="../assets/js/bootstrap-collapse.js"></script> - <script src="../assets/js/bootstrap-carousel.js"></script> - <script src="../assets/js/bootstrap-typeahead.js"></script> - - </body> -</html> diff --git a/src/main/webapp/bower_components/bootstrap/docs/examples/sticky-footer-navbar.html b/src/main/webapp/bower_components/bootstrap/docs/examples/sticky-footer-navbar.html deleted file mode 100644 index a9027c8c..00000000 --- a/src/main/webapp/bower_components/bootstrap/docs/examples/sticky-footer-navbar.html +++ /dev/null @@ -1,161 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <title>Sticky footer · Twitter Bootstrap</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta name="description" content=""> - <meta name="author" content=""> - - <!-- CSS --> - <link href="../assets/css/bootstrap.css" rel="stylesheet"> - <style type="text/css"> - - /* Sticky footer styles - -------------------------------------------------- */ - - html, - body { - height: 100%; - /* The html and body elements cannot have any padding or margin. */ - } - - /* Wrapper for page content to push down footer */ - #wrap { - min-height: 100%; - height: auto !important; - height: 100%; - /* Negative indent footer by it's height */ - margin: 0 auto -60px; - } - - /* Set the fixed height of the footer here */ - #push, - #footer { - height: 60px; - } - #footer { - background-color: #f5f5f5; - } - - /* Lastly, apply responsive CSS fixes as necessary */ - @media (max-width: 767px) { - #footer { - margin-left: -20px; - margin-right: -20px; - padding-left: 20px; - padding-right: 20px; - } - } - - - - /* Custom page CSS - -------------------------------------------------- */ - /* Not required for template or sticky footer method. */ - - #wrap > .container { - padding-top: 60px; - } - .container .credit { - margin: 20px 0; - } - - code { - font-size: 80%; - } - - </style> - <link href="../assets/css/bootstrap-responsive.css" rel="stylesheet"> - - <!-- HTML5 shim, for IE6-8 support of HTML5 elements --> - <!--[if lt IE 9]> - <script src="../assets/js/html5shiv.js"></script> - <![endif]--> - - <!-- Fav and touch icons --> - <link rel="apple-touch-icon-precomposed" sizes="144x144" href="../assets/ico/apple-touch-icon-144-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="114x114" href="../assets/ico/apple-touch-icon-114-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="72x72" href="../assets/ico/apple-touch-icon-72-precomposed.png"> - <link rel="apple-touch-icon-precomposed" href="../assets/ico/apple-touch-icon-57-precomposed.png"> - <link rel="shortcut icon" href="../assets/ico/favicon.png"> - </head> - - <body> - - - <!-- Part 1: Wrap all page content here --> - <div id="wrap"> - - <!-- Fixed navbar --> - <div class="navbar navbar-fixed-top"> - <div class="navbar-inner"> - <div class="container"> - <button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - </button> - <a class="brand" href="#">Project name</a> - <div class="nav-collapse collapse"> - <ul class="nav"> - <li class="active"><a href="#">Home</a></li> - <li><a href="#about">About</a></li> - <li><a href="#contact">Contact</a></li> - <li class="dropdown"> - <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li class="nav-header">Nav header</li> - <li><a href="#">Separated link</a></li> - <li><a href="#">One more separated link</a></li> - </ul> - </li> - </ul> - </div><!--/.nav-collapse --> - </div> - </div> - </div> - - <!-- Begin page content --> - <div class="container"> - <div class="page-header"> - <h1>Sticky footer with fixed navbar</h1> - </div> - <p class="lead">Pin a fixed-height footer to the bottom of the viewport in desktop browsers with this custom HTML and CSS. A fixed navbar has been added within <code>#wrap</code> with <code>padding-top: 60px;</code> on the <code>.container</code>.</p> - <p>Back to <a href="./sticky-footer.html">the sticky footer</a> minus the navbar.</p> - </div> - - <div id="push"></div> - </div> - - <div id="footer"> - <div class="container"> - <p class="muted credit">Example courtesy <a href="http://martinbean.co.uk">Martin Bean</a> and <a href="http://ryanfait.com/sticky-footer/">Ryan Fait</a>.</p> - </div> - </div> - - - - <!-- Le javascript - ================================================== --> - <!-- Placed at the end of the document so the pages load faster --> - <script src="../assets/js/jquery.js"></script> - <script src="../assets/js/bootstrap-transition.js"></script> - <script src="../assets/js/bootstrap-alert.js"></script> - <script src="../assets/js/bootstrap-modal.js"></script> - <script src="../assets/js/bootstrap-dropdown.js"></script> - <script src="../assets/js/bootstrap-scrollspy.js"></script> - <script src="../assets/js/bootstrap-tab.js"></script> - <script src="../assets/js/bootstrap-tooltip.js"></script> - <script src="../assets/js/bootstrap-popover.js"></script> - <script src="../assets/js/bootstrap-button.js"></script> - <script src="../assets/js/bootstrap-collapse.js"></script> - <script src="../assets/js/bootstrap-carousel.js"></script> - <script src="../assets/js/bootstrap-typeahead.js"></script> - - </body> -</html> diff --git a/src/main/webapp/bower_components/bootstrap/docs/examples/sticky-footer.html b/src/main/webapp/bower_components/bootstrap/docs/examples/sticky-footer.html deleted file mode 100644 index d307d793..00000000 --- a/src/main/webapp/bower_components/bootstrap/docs/examples/sticky-footer.html +++ /dev/null @@ -1,125 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <title>Sticky footer · Twitter Bootstrap</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta name="description" content=""> - <meta name="author" content=""> - - <!-- CSS --> - <link href="../assets/css/bootstrap.css" rel="stylesheet"> - <style type="text/css"> - - /* Sticky footer styles - -------------------------------------------------- */ - - html, - body { - height: 100%; - /* The html and body elements cannot have any padding or margin. */ - } - - /* Wrapper for page content to push down footer */ - #wrap { - min-height: 100%; - height: auto !important; - height: 100%; - /* Negative indent footer by it's height */ - margin: 0 auto -60px; - } - - /* Set the fixed height of the footer here */ - #push, - #footer { - height: 60px; - } - #footer { - background-color: #f5f5f5; - } - - /* Lastly, apply responsive CSS fixes as necessary */ - @media (max-width: 767px) { - #footer { - margin-left: -20px; - margin-right: -20px; - padding-left: 20px; - padding-right: 20px; - } - } - - - - /* Custom page CSS - -------------------------------------------------- */ - /* Not required for template or sticky footer method. */ - - .container { - width: auto; - max-width: 680px; - } - .container .credit { - margin: 20px 0; - } - - </style> - <link href="../assets/css/bootstrap-responsive.css" rel="stylesheet"> - - <!-- HTML5 shim, for IE6-8 support of HTML5 elements --> - <!--[if lt IE 9]> - <script src="../assets/js/html5shiv.js"></script> - <![endif]--> - - <!-- Fav and touch icons --> - <link rel="apple-touch-icon-precomposed" sizes="144x144" href="../assets/ico/apple-touch-icon-144-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="114x114" href="../assets/ico/apple-touch-icon-114-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="72x72" href="../assets/ico/apple-touch-icon-72-precomposed.png"> - <link rel="apple-touch-icon-precomposed" href="../assets/ico/apple-touch-icon-57-precomposed.png"> - <link rel="shortcut icon" href="../assets/ico/favicon.png"> - </head> - - <body> - - - <!-- Part 1: Wrap all page content here --> - <div id="wrap"> - - <!-- Begin page content --> - <div class="container"> - <div class="page-header"> - <h1>Sticky footer</h1> - </div> - <p class="lead">Pin a fixed-height footer to the bottom of the viewport in desktop browsers with this custom HTML and CSS.</p> - <p>Use <a href="./sticky-footer-navbar.html">the sticky footer</a> with a fixed navbar if need be, too.</p> - </div> - - <div id="push"></div> - </div> - - <div id="footer"> - <div class="container"> - <p class="muted credit">Example courtesy <a href="http://martinbean.co.uk">Martin Bean</a> and <a href="http://ryanfait.com/sticky-footer/">Ryan Fait</a>.</p> - </div> - </div> - - - - <!-- Le javascript - ================================================== --> - <!-- Placed at the end of the document so the pages load faster --> - <script src="../assets/js/jquery.js"></script> - <script src="../assets/js/bootstrap-transition.js"></script> - <script src="../assets/js/bootstrap-alert.js"></script> - <script src="../assets/js/bootstrap-modal.js"></script> - <script src="../assets/js/bootstrap-dropdown.js"></script> - <script src="../assets/js/bootstrap-scrollspy.js"></script> - <script src="../assets/js/bootstrap-tab.js"></script> - <script src="../assets/js/bootstrap-tooltip.js"></script> - <script src="../assets/js/bootstrap-popover.js"></script> - <script src="../assets/js/bootstrap-button.js"></script> - <script src="../assets/js/bootstrap-collapse.js"></script> - <script src="../assets/js/bootstrap-carousel.js"></script> - <script src="../assets/js/bootstrap-typeahead.js"></script> - - </body> -</html> diff --git a/src/main/webapp/bower_components/bootstrap/docs/extend.html b/src/main/webapp/bower_components/bootstrap/docs/extend.html deleted file mode 100644 index 59281293..00000000 --- a/src/main/webapp/bower_components/bootstrap/docs/extend.html +++ /dev/null @@ -1,282 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <title>Extend · Bootstrap</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta name="description" content=""> - <meta name="author" content=""> - - <!-- Le styles --> - <link href="assets/css/bootstrap.css" rel="stylesheet"> - <link href="assets/css/bootstrap-responsive.css" rel="stylesheet"> - <link href="assets/css/docs.css" rel="stylesheet"> - <link href="assets/js/google-code-prettify/prettify.css" rel="stylesheet"> - - <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements --> - <!--[if lt IE 9]> - <script src="assets/js/html5shiv.js"></script> - <![endif]--> - - <!-- Le fav and touch icons --> - <link rel="apple-touch-icon-precomposed" sizes="144x144" href="assets/ico/apple-touch-icon-144-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="114x114" href="assets/ico/apple-touch-icon-114-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="72x72" href="assets/ico/apple-touch-icon-72-precomposed.png"> - <link rel="apple-touch-icon-precomposed" href="assets/ico/apple-touch-icon-57-precomposed.png"> - <link rel="shortcut icon" href="assets/ico/favicon.png"> - - </head> - - <body data-spy="scroll" data-target=".bs-docs-sidebar"> - - <!-- Navbar - ================================================== --> - <div class="navbar navbar-inverse navbar-fixed-top"> - <div class="navbar-inner"> - <div class="container"> - <button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - </button> - <a class="brand" href="./index.html">Bootstrap</a> - <div class="nav-collapse collapse"> - <ul class="nav"> - <li class=""> - <a href="./index.html">Home</a> - </li> - <li class=""> - <a href="./getting-started.html">Get started</a> - </li> - <li class=""> - <a href="./scaffolding.html">Scaffolding</a> - </li> - <li class=""> - <a href="./base-css.html">Base CSS</a> - </li> - <li class=""> - <a href="./components.html">Components</a> - </li> - <li class=""> - <a href="./javascript.html">JavaScript</a> - </li> - <li class=""> - <a href="./customize.html">Customize</a> - </li> - </ul> - </div> - </div> - </div> - </div> - -<!-- Subhead -================================================== --> -<header class="jumbotron subhead" id="overview"> - <div class="container"> - <h1>Extending Bootstrap</h1> - <p class="lead">Extend Bootstrap to take advantage of included styles and components, as well as LESS variables and mixins.</p> - <div> -</header> - - <div class="container"> - - <!-- Docs nav - ================================================== --> - <div class="row"> - <div class="span3 bs-docs-sidebar"> - <ul class="nav nav-list bs-docs-sidenav"> - <li><a href="#built-with-less"><i class="icon-chevron-right"></i> Built with LESS</a></li> - <li><a href="#compiling"><i class="icon-chevron-right"></i> Compiling Bootstrap</a></li> - <li><a href="#static-assets"><i class="icon-chevron-right"></i> Use as static assets</a></li> - </ul> - </div> - <div class="span9"> - - - - <!-- BUILT WITH LESS - ================================================== --> - <section id="built-with-less"> - <div class="page-header"> - <h1>Built with LESS</h1> - </div> - - <img style="float: right; height: 36px; margin: 10px 20px 20px" src="assets/img/less-logo-large.png" alt="LESS CSS"> - <p class="lead">Bootstrap is made with LESS at its core, a dynamic stylesheet language created by our good friend, <a href="http://cloudhead.io">Alexis Sellier</a>. It makes developing systems-based CSS faster, easier, and more fun.</p> - - <h3>Why LESS?</h3> - <p>One of Bootstrap's creators wrote a quick <a href="http://www.wordsbyf.at/2012/03/08/why-less/">blog post about this</a>, summarized here:</p> - <ul> - <li>Bootstrap compiles faster ~6x faster with Less compared to Sass</li> - <li>Less is written in JavaScript, making it easier to us to dive in and patch compared to Ruby with Sass.</li> - <li>Less is more; we want to feel like we're writing CSS and making Bootstrap approachable to all.</li> - </ul> - - <h3>What's included?</h3> - <p>As an extension of CSS, LESS includes variables, mixins for reusable snippets of code, operations for simple math, nesting, and even color functions.</p> - - <h3>Learn more</h3> - <p>Visit the official website at <a href="http://lesscss.org">http://lesscss.org</a> to learn more.</p> - </section> - - - - <!-- COMPILING LESS AND BOOTSTRAP - ================================================== --> - <section id="compiling"> - <div class="page-header"> - <h1>Compiling Bootstrap with Less</h1> - </div> - - <p class="lead">Since our CSS is written with Less and utilizes variables and mixins, it needs to be compiled for final production implementation. Here's how.</p> - - <div class="alert alert-info"> - <strong>Note:</strong> If you're submitting a pull request to GitHub with modified CSS, you <strong>must</strong> recompile the CSS via any of these methods. - </div> - - <h2>Tools for compiling</h2> - - <h3>Command line</h3> - <p>Follow <a href="https://github.com/twitter/bootstrap#developers">the instructions in the project readme</a> on GitHub for compiling via command line.</p> - - <h3>JavaScript</h3> - <p><a href="http://lesscss.org/">Download the latest Less.js</a> and include the path to it (and Bootstrap) in the <code><head></code>.</p> -<pre class="prettyprint"> -<link rel="stylesheet/less" href="/path/to/bootstrap.less"> -<script src="/path/to/less.js"></script> -</pre> - <p>To recompile the .less files, just save them and reload your page. Less.js compiles them and stores them in local storage.</p> - - <h3>Unofficial Mac app</h3> - <p><a href="http://incident57.com/less/">The unofficial Mac app</a> watches directories of .less files and compiles the code to local files after every save of a watched .less file. If you like, you can toggle preferences in the app for automatic minifying and which directory the compiled files end up in.</p> - - <h3>More apps</h3> - <h4><a href="http://crunchapp.net/" target="_blank">Crunch</a></h4> - <p>Crunch is a great looking LESS editor and compiler built on Adobe Air.</p> - <h4><a href="http://incident57.com/codekit/" target="_blank">CodeKit</a></h4> - <p>Created by the same guy as the unofficial Mac app, CodeKit is a Mac app that compiles LESS, SASS, Stylus, and CoffeeScript.</p> - <h4><a href="http://wearekiss.com/simpless" target="_blank">Simpless</a></h4> - <p>Mac, Linux, and Windows app for drag and drop compiling of LESS files. Plus, the <a href="https://github.com/Paratron/SimpLESS" target="_blank">source code is on GitHub</a>.</p> - - </section> - - - - <!-- Static assets - ================================================== --> - <section id="static-assets"> - <div class="page-header"> - <h1>Use as static assets</h1> - </div> - <p class="lead"><a href="./getting-started.html">Quickly start</a> any web project by dropping in the compiled or minified CSS and JS. Layer on custom styles separately for easy upgrades and maintenance moving forward.</p> - - <h3>Setup file structure</h3> - <p>Download the latest compiled Bootstrap and place into your project. For example, you might have something like this:</p> -<pre> - <span class="icon-folder-open"></span> app/ - <span class="icon-folder-open"></span> layouts/ - <span class="icon-folder-open"></span> templates/ - <span class="icon-folder-open"></span> public/ - <span class="icon-folder-open"></span> css/ - <span class="icon-file"></span> bootstrap.min.css - <span class="icon-folder-open"></span> js/ - <span class="icon-file"></span> bootstrap.min.js - <span class="icon-folder-open"></span> img/ - <span class="icon-file"></span> glyphicons-halflings.png - <span class="icon-file"></span> glyphicons-halflings-white.png -</pre> - - <h3>Utilize starter template</h3> - <p>Copy the following base HTML to get started.</p> -<pre class="prettyprint linenums"> -<html> - <head> - <title>Bootstrap 101 Template</title> - <!-- Bootstrap --> - <link href="public/css/bootstrap.min.css" rel="stylesheet"> - </head> - <body> - <h1>Hello, world!</h1> - <!-- Bootstrap --> - <script src="public/js/bootstrap.min.js"></script> - </body> -</html> -</pre> - - <h3>Layer on custom code</h3> - <p>Work in your custom CSS, JS, and more as necessary to make Bootstrap your own with your own separate CSS and JS files.</p> -<pre class="prettyprint linenums"> -<html> - <head> - <title>Bootstrap 101 Template</title> - <!-- Bootstrap --> - <link href="public/css/bootstrap.min.css" rel="stylesheet"> - <!-- Project --> - <link href="public/css/application.css" rel="stylesheet"> - </head> - <body> - <h1>Hello, world!</h1> - <!-- Bootstrap --> - <script src="public/js/bootstrap.min.js"></script> - <!-- Project --> - <script src="public/js/application.js"></script> - </body> -</html> -</pre> - - </section> - - </div> - </div> - - </div> - - - - <!-- Footer - ================================================== --> - <footer class="footer"> - <div class="container"> - <p>Designed and built with all the love in the world by <a href="http://twitter.com/mdo" target="_blank">@mdo</a> and <a href="http://twitter.com/fat" target="_blank">@fat</a>.</p> - <p>Code licensed under <a href="http://www.apache.org/licenses/LICENSE-2.0" target="_blank">Apache License v2.0</a>, documentation under <a href="http://creativecommons.org/licenses/by/3.0/">CC BY 3.0</a>.</p> - <p><a href="http://glyphicons.com">Glyphicons Free</a> licensed under <a href="http://creativecommons.org/licenses/by/3.0/">CC BY 3.0</a>.</p> - <ul class="footer-links"> - <li><a href="http://blog.getbootstrap.com">Blog</a></li> - <li class="muted">·</li> - <li><a href="https://github.com/twitter/bootstrap/issues?state=open">Issues</a></li> - <li class="muted">·</li> - <li><a href="https://github.com/twitter/bootstrap/blob/master/CHANGELOG.md">Changelog</a></li> - </ul> - </div> - </footer> - - - - <!-- Le javascript - ================================================== --> - <!-- Placed at the end of the document so the pages load faster --> - <script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> - <script src="assets/js/jquery.js"></script> - <script src="assets/js/bootstrap-transition.js"></script> - <script src="assets/js/bootstrap-alert.js"></script> - <script src="assets/js/bootstrap-modal.js"></script> - <script src="assets/js/bootstrap-dropdown.js"></script> - <script src="assets/js/bootstrap-scrollspy.js"></script> - <script src="assets/js/bootstrap-tab.js"></script> - <script src="assets/js/bootstrap-tooltip.js"></script> - <script src="assets/js/bootstrap-popover.js"></script> - <script src="assets/js/bootstrap-button.js"></script> - <script src="assets/js/bootstrap-collapse.js"></script> - <script src="assets/js/bootstrap-carousel.js"></script> - <script src="assets/js/bootstrap-typeahead.js"></script> - <script src="assets/js/bootstrap-affix.js"></script> - - <script src="assets/js/holder/holder.js"></script> - <script src="assets/js/google-code-prettify/prettify.js"></script> - - <script src="assets/js/application.js"></script> - - - - </body> -</html> diff --git a/src/main/webapp/bower_components/bootstrap/docs/getting-started.html b/src/main/webapp/bower_components/bootstrap/docs/getting-started.html deleted file mode 100644 index c54da9a6..00000000 --- a/src/main/webapp/bower_components/bootstrap/docs/getting-started.html +++ /dev/null @@ -1,377 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <title>Getting · Bootstrap</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta name="description" content=""> - <meta name="author" content=""> - - <!-- Le styles --> - <link href="assets/css/bootstrap.css" rel="stylesheet"> - <link href="assets/css/bootstrap-responsive.css" rel="stylesheet"> - <link href="assets/css/docs.css" rel="stylesheet"> - <link href="assets/js/google-code-prettify/prettify.css" rel="stylesheet"> - - <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements --> - <!--[if lt IE 9]> - <script src="assets/js/html5shiv.js"></script> - <![endif]--> - - <!-- Le fav and touch icons --> - <link rel="apple-touch-icon-precomposed" sizes="144x144" href="assets/ico/apple-touch-icon-144-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="114x114" href="assets/ico/apple-touch-icon-114-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="72x72" href="assets/ico/apple-touch-icon-72-precomposed.png"> - <link rel="apple-touch-icon-precomposed" href="assets/ico/apple-touch-icon-57-precomposed.png"> - <link rel="shortcut icon" href="assets/ico/favicon.png"> - - </head> - - <body data-spy="scroll" data-target=".bs-docs-sidebar"> - - <!-- Navbar - ================================================== --> - <div class="navbar navbar-inverse navbar-fixed-top"> - <div class="navbar-inner"> - <div class="container"> - <button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - </button> - <a class="brand" href="./index.html">Bootstrap</a> - <div class="nav-collapse collapse"> - <ul class="nav"> - <li class=""> - <a href="./index.html">Home</a> - </li> - <li class="active"> - <a href="./getting-started.html">Get started</a> - </li> - <li class=""> - <a href="./scaffolding.html">Scaffolding</a> - </li> - <li class=""> - <a href="./base-css.html">Base CSS</a> - </li> - <li class=""> - <a href="./components.html">Components</a> - </li> - <li class=""> - <a href="./javascript.html">JavaScript</a> - </li> - <li class=""> - <a href="./customize.html">Customize</a> - </li> - </ul> - </div> - </div> - </div> - </div> - -<!-- Subhead -================================================== --> -<header class="jumbotron subhead" id="overview"> - <div class="container"> - <h1>Getting started</h1> - <p class="lead">Overview of the project, its contents, and how to get started with a simple template.</p> - </div> -</header> - - - <div class="container"> - - <!-- Docs nav - ================================================== --> - <div class="row"> - <div class="span3 bs-docs-sidebar"> - <ul class="nav nav-list bs-docs-sidenav"> - <li><a href="#download-bootstrap"><i class="icon-chevron-right"></i> Download</a></li> - <li><a href="#file-structure"><i class="icon-chevron-right"></i> File structure</a></li> - <li><a href="#contents"><i class="icon-chevron-right"></i> What's included</a></li> - <li><a href="#html-template"><i class="icon-chevron-right"></i> HTML template</a></li> - <li><a href="#examples"><i class="icon-chevron-right"></i> Examples</a></li> - <li><a href="#what-next"><i class="icon-chevron-right"></i> What next?</a></li> - </ul> - </div> - <div class="span9"> - - - - <!-- Download - ================================================== --> - <section id="download-bootstrap"> - <div class="page-header"> - <h1>1. Download</h1> - </div> - <p class="lead">Before downloading, be sure to have a code editor (we recommend <a href="http://sublimetext.com/2">Sublime Text 2</a>) and some working knowledge of HTML and CSS. We won't walk through the source files here, but they are available for download. We'll focus on getting started with the compiled Bootstrap files.</p> - - <div class="row-fluid"> - <div class="span6"> - <h2>Download compiled</h2> - <p><strong>Fastest way to get started:</strong> get the compiled and minified versions of our CSS, JS, and images. No docs or original source files.</p> - <p><a class="btn btn-large btn-primary" href="assets/bootstrap.zip" >Download Bootstrap</a></p> - </div> - <div class="span6"> - <h2>Download source</h2> - <p>Get the original files for all CSS and JavaScript, along with a local copy of the docs by downloading the latest version directly from GitHub.</p> - <p><a class="btn btn-large" href="https://github.com/twitter/bootstrap/zipball/master" >Download Bootstrap source</a></p> - </div> - </div> - </section> - - - - <!-- File structure - ================================================== --> - <section id="file-structure"> - <div class="page-header"> - <h1>2. File structure</h1> - </div> - <p class="lead">Within the download you'll find the following file structure and contents, logically grouping common assets and providing both compiled and minified variations.</p> - <p>Once downloaded, unzip the compressed folder to see the structure of (the compiled) Bootstrap. You'll see something like this:</p> -<pre class="prettyprint"> - bootstrap/ - ├── css/ - │ ├── bootstrap.css - │ ├── bootstrap.min.css - ├── js/ - │ ├── bootstrap.js - │ ├── bootstrap.min.js - └── img/ - ├── glyphicons-halflings.png - └── glyphicons-halflings-white.png -</pre> - <p>This is the most basic form of Bootstrap: compiled files for quick drop-in usage in nearly any web project. We provide compiled CSS and JS (<code>bootstrap.*</code>), as well as compiled and minified CSS and JS (<code>bootstrap.min.*</code>). The image files are compressed using <a href="http://imageoptim.com/">ImageOptim</a>, a Mac app for compressing PNGs.</p> - <p>Please note that all JavaScript plugins require jQuery to be included.</p> - </section> - - - - <!-- Contents - ================================================== --> - <section id="contents"> - <div class="page-header"> - <h1>3. What's included</h1> - </div> - <p class="lead">Bootstrap comes equipped with HTML, CSS, and JS for all sorts of things, but they can be summarized with a handful of categories visible at the top of the <a href="http://getbootstrap.com">Bootstrap documentation</a>.</p> - - <h2>Docs sections</h2> - <h4><a href="http://twitter.github.com/bootstrap/scaffolding.html">Scaffolding</a></h4> - <p>Global styles for the body to reset type and background, link styles, grid system, and two simple layouts.</p> - <h4><a href="http://twitter.github.com/bootstrap/base-css.html">Base CSS</a></h4> - <p>Styles for common HTML elements like typography, code, tables, forms, and buttons. Also includes <a href="http://glyphicons.com">Glyphicons</a>, a great little icon set.</p> - <h4><a href="http://twitter.github.com/bootstrap/components.html">Components</a></h4> - <p>Basic styles for common interface components like tabs and pills, navbar, alerts, page headers, and more.</p> - <h4><a href="http://twitter.github.com/bootstrap/javascript.html">JavaScript plugins</a></h4> - <p>Similar to Components, these JavaScript plugins are interactive components for things like tooltips, popovers, modals, and more.</p> - - <h2>List of components</h2> - <p>Together, the <strong>Components</strong> and <strong>JavaScript plugins</strong> sections provide the following interface elements:</p> - <ul> - <li>Button groups</li> - <li>Button dropdowns</li> - <li>Navigational tabs, pills, and lists</li> - <li>Navbar</li> - <li>Labels</li> - <li>Badges</li> - <li>Page headers and hero unit</li> - <li>Thumbnails</li> - <li>Alerts</li> - <li>Progress bars</li> - <li>Modals</li> - <li>Dropdowns</li> - <li>Tooltips</li> - <li>Popovers</li> - <li>Accordion</li> - <li>Carousel</li> - <li>Typeahead</li> - </ul> - <p>In future guides, we may walk through these components individually in more detail. Until then, look for each of these in the documentation for information on how to utilize and customize them.</p> - </section> - - - - <!-- HTML template - ================================================== --> - <section id="html-template"> - <div class="page-header"> - <h1>4. Basic HTML template</h1> - </div> - <p class="lead">With a brief intro into the contents out of the way, we can focus on putting Bootstrap to use. To do that, we'll utilize a basic HTML template that includes everything we mentioned in the <a href="./getting-started.html#file-structure">File structure</a>.</p> - <p>Now, here's a look at a <strong>typical HTML file</strong>:</p> -<pre class="prettyprint linenums"> -<!DOCTYPE html> -<html> - <head> - <title>Bootstrap 101 Template</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - </head> - <body> - <h1>Hello, world!</h1> - <script src="http://code.jquery.com/jquery.js"></script> - </body> -</html> -</pre> - <p>To make this <strong>a Bootstrapped template</strong>, just include the appropriate CSS and JS files:</p> -<pre class="prettyprint linenums"> -<!DOCTYPE html> -<html> - <head> - <title>Bootstrap 101 Template</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <!-- Bootstrap --> - <link href="css/bootstrap.min.css" rel="stylesheet" media="screen"> - </head> - <body> - <h1>Hello, world!</h1> - <script src="http://code.jquery.com/jquery.js"></script> - <script src="js/bootstrap.min.js"></script> - </body> -</html> -</pre> - <p><strong>And you're set!</strong> With those two files added, you can begin to develop any site or application with Bootstrap.</p> - </section> - - - - <!-- Examples - ================================================== --> - <section id="examples"> - <div class="page-header"> - <h1>5. Examples</h1> - </div> - <p class="lead">Move beyond the base template with a few example layouts. We encourage folks to iterate on these examples and not simply use them as an end result.</p> - <ul class="thumbnails bootstrap-examples"> - <li class="span3"> - <a class="thumbnail" href="examples/starter-template.html"> - <img src="assets/img/examples/bootstrap-example-starter.png" alt=""> - </a> - <h4>Starter template</h4> - <p>A barebones HTML document with all the Bootstrap CSS and JavaScript included.</p> - </li> - <li class="span3"> - <a class="thumbnail" href="examples/hero.html"> - <img src="assets/img/examples/bootstrap-example-marketing.png" alt=""> - </a> - <h4>Basic marketing site</h4> - <p>Featuring a hero unit for a primary message and three supporting elements.</p> - </li> - <li class="span3"> - <a class="thumbnail" href="examples/fluid.html"> - <img src="assets/img/examples/bootstrap-example-fluid.png" alt=""> - </a> - <h4>Fluid layout</h4> - <p>Uses our new responsive, fluid grid system to create a seamless liquid layout.</p> - </li> - - <li class="span3"> - <a class="thumbnail" href="examples/marketing-narrow.html"> - <img src="assets/img/examples/bootstrap-example-marketing-narrow.png" alt=""> - </a> - <h4>Narrow marketing</h4> - <p>Slim, lightweight marketing template for small projects or teams.</p> - </li> - <li class="span3"> - <a class="thumbnail" href="examples/justified-nav.html"> - <img src="assets/img/examples/bootstrap-example-justified-nav.png" alt=""> - </a> - <h4>Justified nav</h4> - <p>Marketing page with equal-width navigation links in a modified navbar.</p> - </li> - <li class="span3"> - <a class="thumbnail" href="examples/signin.html"> - <img src="assets/img/examples/bootstrap-example-signin.png" alt=""> - </a> - <h4>Sign in</h4> - <p>Barebones sign in form with custom, larger form controls and a flexible layout.</p> - </li> - - <li class="span3"> - <a class="thumbnail" href="examples/sticky-footer.html"> - <img src="assets/img/examples/bootstrap-example-sticky-footer.png" alt=""> - </a> - <h4>Sticky footer</h4> - <p>Pin a fixed-height footer to the bottom of the user's viewport.</p> - </li> - <li class="span3"> - <a class="thumbnail" href="examples/carousel.html"> - <img src="assets/img/examples/bootstrap-example-carousel.png" alt=""> - </a> - <h4>Carousel jumbotron</h4> - <p>A more interactive riff on the basic marketing site featuring a prominent carousel.</p> - </li> - </ul> - </section> - - - - - <!-- Next - ================================================== --> - <section id="what-next"> - <div class="page-header"> - <h1>What next?</h1> - </div> - <p class="lead">Head to the docs for information, examples, and code snippets, or take the next leap and customize Bootstrap for any upcoming project.</p> - <a class="btn btn-large btn-primary" href="./scaffolding.html" >Visit the Bootstrap docs</a> - <a class="btn btn-large" href="./customize.html" style="margin-left: 5px;" >Customize Bootstrap</a> - </section> - - - - - </div> - </div> - - </div> - - - - <!-- Footer - ================================================== --> - <footer class="footer"> - <div class="container"> - <p>Designed and built with all the love in the world by <a href="http://twitter.com/mdo" target="_blank">@mdo</a> and <a href="http://twitter.com/fat" target="_blank">@fat</a>.</p> - <p>Code licensed under <a href="http://www.apache.org/licenses/LICENSE-2.0" target="_blank">Apache License v2.0</a>, documentation under <a href="http://creativecommons.org/licenses/by/3.0/">CC BY 3.0</a>.</p> - <p><a href="http://glyphicons.com">Glyphicons Free</a> licensed under <a href="http://creativecommons.org/licenses/by/3.0/">CC BY 3.0</a>.</p> - <ul class="footer-links"> - <li><a href="http://blog.getbootstrap.com">Blog</a></li> - <li class="muted">·</li> - <li><a href="https://github.com/twitter/bootstrap/issues?state=open">Issues</a></li> - <li class="muted">·</li> - <li><a href="https://github.com/twitter/bootstrap/blob/master/CHANGELOG.md">Changelog</a></li> - </ul> - </div> - </footer> - - - - <!-- Le javascript - ================================================== --> - <!-- Placed at the end of the document so the pages load faster --> - <script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> - <script src="assets/js/jquery.js"></script> - <script src="assets/js/bootstrap-transition.js"></script> - <script src="assets/js/bootstrap-alert.js"></script> - <script src="assets/js/bootstrap-modal.js"></script> - <script src="assets/js/bootstrap-dropdown.js"></script> - <script src="assets/js/bootstrap-scrollspy.js"></script> - <script src="assets/js/bootstrap-tab.js"></script> - <script src="assets/js/bootstrap-tooltip.js"></script> - <script src="assets/js/bootstrap-popover.js"></script> - <script src="assets/js/bootstrap-button.js"></script> - <script src="assets/js/bootstrap-collapse.js"></script> - <script src="assets/js/bootstrap-carousel.js"></script> - <script src="assets/js/bootstrap-typeahead.js"></script> - <script src="assets/js/bootstrap-affix.js"></script> - - <script src="assets/js/holder/holder.js"></script> - <script src="assets/js/google-code-prettify/prettify.js"></script> - - <script src="assets/js/application.js"></script> - - - - </body> -</html> diff --git a/src/main/webapp/bower_components/bootstrap/docs/index.html b/src/main/webapp/bower_components/bootstrap/docs/index.html deleted file mode 100644 index 1040bcf6..00000000 --- a/src/main/webapp/bower_components/bootstrap/docs/index.html +++ /dev/null @@ -1,221 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <title>Bootstrap</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta name="description" content=""> - <meta name="author" content=""> - - <!-- Le styles --> - <link href="assets/css/bootstrap.css" rel="stylesheet"> - <link href="assets/css/bootstrap-responsive.css" rel="stylesheet"> - <link href="assets/css/docs.css" rel="stylesheet"> - <link href="assets/js/google-code-prettify/prettify.css" rel="stylesheet"> - - <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements --> - <!--[if lt IE 9]> - <script src="assets/js/html5shiv.js"></script> - <![endif]--> - - <!-- Le fav and touch icons --> - <link rel="apple-touch-icon-precomposed" sizes="144x144" href="assets/ico/apple-touch-icon-144-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="114x114" href="assets/ico/apple-touch-icon-114-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="72x72" href="assets/ico/apple-touch-icon-72-precomposed.png"> - <link rel="apple-touch-icon-precomposed" href="assets/ico/apple-touch-icon-57-precomposed.png"> - <link rel="shortcut icon" href="assets/ico/favicon.png"> - - </head> - - <body data-spy="scroll" data-target=".bs-docs-sidebar"> - - <!-- Navbar - ================================================== --> - <div class="navbar navbar-inverse navbar-fixed-top"> - <div class="navbar-inner"> - <div class="container"> - <button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - </button> - <a class="brand" href="./index.html">Bootstrap</a> - <div class="nav-collapse collapse"> - <ul class="nav"> - <li class="active"> - <a href="./index.html">Home</a> - </li> - <li class=""> - <a href="./getting-started.html">Get started</a> - </li> - <li class=""> - <a href="./scaffolding.html">Scaffolding</a> - </li> - <li class=""> - <a href="./base-css.html">Base CSS</a> - </li> - <li class=""> - <a href="./components.html">Components</a> - </li> - <li class=""> - <a href="./javascript.html">JavaScript</a> - </li> - <li class=""> - <a href="./customize.html">Customize</a> - </li> - </ul> - </div> - </div> - </div> - </div> - -<div class="jumbotron masthead"> - <div class="container"> - <h1>Bootstrap</h1> - <p>Sleek, intuitive, and powerful front-end framework for faster and easier web development.</p> - <p> - <a href="assets/bootstrap.zip" class="btn btn-primary btn-large" >Download Bootstrap</a> - </p> - <ul class="masthead-links"> - <li> - <a href="http://github.com/twitter/bootstrap" >GitHub project</a> - </li> - <li> - <a href="./getting-started.html#examples" >Examples</a> - </li> - <li> - <a href="./extend.html" >Extend</a> - </li> - <li> - Version 2.3.0 - </li> - </ul> - </div> -</div> - -<div class="bs-docs-social"> - <div class="container"> - <ul class="bs-docs-social-buttons"> - <li> - <iframe class="github-btn" src="http://ghbtns.com/github-btn.html?user=twitter&repo=bootstrap&type=watch&count=true" allowtransparency="true" frameborder="0" scrolling="0" width="100px" height="20px"></iframe> - </li> - <li> - <iframe class="github-btn" src="http://ghbtns.com/github-btn.html?user=twitter&repo=bootstrap&type=fork&count=true" allowtransparency="true" frameborder="0" scrolling="0" width="102px" height="20px"></iframe> - </li> - <li class="follow-btn"> - <a href="https://twitter.com/twbootstrap" class="twitter-follow-button" data-link-color="#0069D6" data-show-count="true">Follow @twbootstrap</a> - </li> - <li class="tweet-btn"> - <a href="https://twitter.com/share" class="twitter-share-button" data-url="http://twitter.github.com/bootstrap/" data-count="horizontal" data-via="twbootstrap" data-related="mdo:Creator of Twitter Bootstrap">Tweet</a> - </li> - </ul> - </div> -</div> - -<div class="container"> - - <div class="marketing"> - - <h1>Introducing Bootstrap.</h1> - <p class="marketing-byline">Need reasons to love Bootstrap? Look no further.</p> - - <div class="row-fluid"> - <div class="span4"> - <img class="marketing-img" src="assets/img/bs-docs-twitter-github.png"> - <h2>By nerds, for nerds.</h2> - <p>Built at Twitter by <a href="http://twitter.com/mdo">@mdo</a> and <a href="http://twitter.com/fat">@fat</a>, Bootstrap utilizes <a href="http://lesscss.org">LESS CSS</a>, is compiled via <a href="http://nodejs.org">Node</a>, and is managed through <a href="http://github.com">GitHub</a> to help nerds do awesome stuff on the web.</p> - </div> - <div class="span4"> - <img class="marketing-img" src="assets/img/bs-docs-responsive-illustrations.png"> - <h2>Made for everyone.</h2> - <p>Bootstrap was made to not only look and behave great in the latest desktop browsers (as well as IE7!), but in tablet and smartphone browsers via <a href="./scaffolding.html#responsive">responsive CSS</a> as well.</p> - </div> - <div class="span4"> - <img class="marketing-img" src="assets/img/bs-docs-bootstrap-features.png"> - <h2>Packed with features.</h2> - <p>A 12-column responsive <a href="./scaffolding.html#gridSystem">grid</a>, dozens of components, <a href="./javascript.html">JavaScript plugins</a>, typography, form controls, and even a <a href="./customize.html">web-based Customizer</a> to make Bootstrap your own.</p> - </div> - </div> - - <hr class="soften"> - - <h1>Built with Bootstrap.</h1> - <p class="marketing-byline">For even more sites built with Bootstrap, <a href="http://builtwithbootstrap.tumblr.com/" target="_blank">visit the unofficial Tumblr</a> or <a href="./getting-started.html#examples">browse the examples</a>.</p> - <div class="row-fluid"> - <ul class="thumbnails example-sites"> - <li class="span3"> - <a class="thumbnail" href="http://soundready.fm/" target="_blank"> - <img src="assets/img/example-sites/soundready.png" alt="SoundReady.fm"> - </a> - </li> - <li class="span3"> - <a class="thumbnail" href="http://kippt.com/" target="_blank"> - <img src="assets/img/example-sites/kippt.png" alt="Kippt"> - </a> - </li> - <li class="span3"> - <a class="thumbnail" href="http://www.gathercontent.com/" target="_blank"> - <img src="assets/img/example-sites/gathercontent.png" alt="Gather Content"> - </a> - </li> - <li class="span3"> - <a class="thumbnail" href="http://www.jshint.com/" target="_blank"> - <img src="assets/img/example-sites/jshint.png" alt="JS Hint"> - </a> - </li> - </ul> - </div> - - </div> - -</div> - - - - <!-- Footer - ================================================== --> - <footer class="footer"> - <div class="container"> - <p>Designed and built with all the love in the world by <a href="http://twitter.com/mdo" target="_blank">@mdo</a> and <a href="http://twitter.com/fat" target="_blank">@fat</a>.</p> - <p>Code licensed under <a href="http://www.apache.org/licenses/LICENSE-2.0" target="_blank">Apache License v2.0</a>, documentation under <a href="http://creativecommons.org/licenses/by/3.0/">CC BY 3.0</a>.</p> - <p><a href="http://glyphicons.com">Glyphicons Free</a> licensed under <a href="http://creativecommons.org/licenses/by/3.0/">CC BY 3.0</a>.</p> - <ul class="footer-links"> - <li><a href="http://blog.getbootstrap.com">Blog</a></li> - <li class="muted">·</li> - <li><a href="https://github.com/twitter/bootstrap/issues?state=open">Issues</a></li> - <li class="muted">·</li> - <li><a href="https://github.com/twitter/bootstrap/blob/master/CHANGELOG.md">Changelog</a></li> - </ul> - </div> - </footer> - - - - <!-- Le javascript - ================================================== --> - <!-- Placed at the end of the document so the pages load faster --> - <script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> - <script src="assets/js/jquery.js"></script> - <script src="assets/js/bootstrap-transition.js"></script> - <script src="assets/js/bootstrap-alert.js"></script> - <script src="assets/js/bootstrap-modal.js"></script> - <script src="assets/js/bootstrap-dropdown.js"></script> - <script src="assets/js/bootstrap-scrollspy.js"></script> - <script src="assets/js/bootstrap-tab.js"></script> - <script src="assets/js/bootstrap-tooltip.js"></script> - <script src="assets/js/bootstrap-popover.js"></script> - <script src="assets/js/bootstrap-button.js"></script> - <script src="assets/js/bootstrap-collapse.js"></script> - <script src="assets/js/bootstrap-carousel.js"></script> - <script src="assets/js/bootstrap-typeahead.js"></script> - <script src="assets/js/bootstrap-affix.js"></script> - - <script src="assets/js/holder/holder.js"></script> - <script src="assets/js/google-code-prettify/prettify.js"></script> - - <script src="assets/js/application.js"></script> - - - - </body> -</html> diff --git a/src/main/webapp/bower_components/bootstrap/docs/javascript.html b/src/main/webapp/bower_components/bootstrap/docs/javascript.html deleted file mode 100644 index f4957d91..00000000 --- a/src/main/webapp/bower_components/bootstrap/docs/javascript.html +++ /dev/null @@ -1,1780 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <title>Javascript · Bootstrap</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta name="description" content=""> - <meta name="author" content=""> - - <!-- Le styles --> - <link href="assets/css/bootstrap.css" rel="stylesheet"> - <link href="assets/css/bootstrap-responsive.css" rel="stylesheet"> - <link href="assets/css/docs.css" rel="stylesheet"> - <link href="assets/js/google-code-prettify/prettify.css" rel="stylesheet"> - - <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements --> - <!--[if lt IE 9]> - <script src="assets/js/html5shiv.js"></script> - <![endif]--> - - <!-- Le fav and touch icons --> - <link rel="apple-touch-icon-precomposed" sizes="144x144" href="assets/ico/apple-touch-icon-144-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="114x114" href="assets/ico/apple-touch-icon-114-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="72x72" href="assets/ico/apple-touch-icon-72-precomposed.png"> - <link rel="apple-touch-icon-precomposed" href="assets/ico/apple-touch-icon-57-precomposed.png"> - <link rel="shortcut icon" href="assets/ico/favicon.png"> - - </head> - - <body data-spy="scroll" data-target=".bs-docs-sidebar"> - - <!-- Navbar - ================================================== --> - <div class="navbar navbar-inverse navbar-fixed-top"> - <div class="navbar-inner"> - <div class="container"> - <button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - </button> - <a class="brand" href="./index.html">Bootstrap</a> - <div class="nav-collapse collapse"> - <ul class="nav"> - <li class=""> - <a href="./index.html">Home</a> - </li> - <li class=""> - <a href="./getting-started.html">Get started</a> - </li> - <li class=""> - <a href="./scaffolding.html">Scaffolding</a> - </li> - <li class=""> - <a href="./base-css.html">Base CSS</a> - </li> - <li class=""> - <a href="./components.html">Components</a> - </li> - <li class="active"> - <a href="./javascript.html">JavaScript</a> - </li> - <li class=""> - <a href="./customize.html">Customize</a> - </li> - </ul> - </div> - </div> - </div> - </div> - -<!-- Subhead -================================================== --> -<header class="jumbotron subhead"> - <div class="container"> - <h1>JavaScript</h1> - <p class="lead">Bring Bootstrap's components to life—now with 13 custom jQuery plugins. - </div> -</header> - - <div class="container"> - - <!-- Docs nav - ================================================== --> - <div class="row"> - <div class="span3 bs-docs-sidebar"> - <ul class="nav nav-list bs-docs-sidenav"> - <li><a href="#overview"><i class="icon-chevron-right"></i> Overview</a></li> - <li><a href="#transitions"><i class="icon-chevron-right"></i> Transitions</a></li> - <li><a href="#modals"><i class="icon-chevron-right"></i> Modal</a></li> - <li><a href="#dropdowns"><i class="icon-chevron-right"></i> Dropdown</a></li> - <li><a href="#scrollspy"><i class="icon-chevron-right"></i> Scrollspy</a></li> - <li><a href="#tabs"><i class="icon-chevron-right"></i> Tab</a></li> - <li><a href="#tooltips"><i class="icon-chevron-right"></i> Tooltip</a></li> - <li><a href="#popovers"><i class="icon-chevron-right"></i> Popover</a></li> - <li><a href="#alerts"><i class="icon-chevron-right"></i> Alert</a></li> - <li><a href="#buttons"><i class="icon-chevron-right"></i> Button</a></li> - <li><a href="#collapse"><i class="icon-chevron-right"></i> Collapse</a></li> - <li><a href="#carousel"><i class="icon-chevron-right"></i> Carousel</a></li> - <li><a href="#typeahead"><i class="icon-chevron-right"></i> Typeahead</a></li> - <li><a href="#affix"><i class="icon-chevron-right"></i> Affix</a></li> - </ul> - </div> - <div class="span9"> - - - <!-- Overview - ================================================== --> - <section id="overview"> - <div class="page-header"> - <h1>JavaScript in Bootstrap</h1> - </div> - - <h3>Individual or compiled</h3> - <p>Plugins can be included individually (though some have required dependencies), or all at once. Both <strong>bootstrap.js</strong> and <strong>bootstrap.min.js</strong> contain all plugins in a single file.</p> - - <h3>Data attributes</h3> - <p>You can use all Bootstrap plugins purely through the markup API without writing a single line of JavaScript. This is Bootstrap's first class API and should be your first consideration when using a plugin.</p> - - <p>That said, in some situations it may be desirable to turn this functionality off. Therefore, we also provide the ability to disable the data attribute API by unbinding all events on the body namespaced with `'data-api'`. This looks like this: - <pre class="prettyprint linenums">$('body').off('.data-api')</pre> - - <p>Alternatively, to target a specific plugin, just include the plugin's name as a namespace along with the data-api namespace like this:</p> - <pre class="prettyprint linenums">$('body').off('.alert.data-api')</pre> - - <h3>Programmatic API</h3> - <p>We also believe you should be able to use all Bootstrap plugins purely through the JavaScript API. All public APIs are single, chainable methods, and return the collection acted upon.</p> - <pre class="prettyprint linenums">$(".btn.danger").button("toggle").addClass("fat")</pre> - <p>All methods should accept an optional options object, a string which targets a particular method, or nothing (which initiates a plugin with default behavior):</p> -<pre class="prettyprint linenums"> -$("#myModal").modal() // initialized with defaults -$("#myModal").modal({ keyboard: false }) // initialized with no keyboard -$("#myModal").modal('show') // initializes and invokes show immediately</p> -</pre> - <p>Each plugin also exposes its raw constructor on a `Constructor` property: <code>$.fn.popover.Constructor</code>. If you'd like to get a particular plugin instance, retrieve it directly from an element: <code>$('[rel=popover]').data('popover')</code>.</p> - - <h3>No Conflict</h3> - <p>Sometimes it is necessary to use Bootstrap plugins with other UI frameworks. In these circumstances, namespace collisions can occasionally occur. If this happens, you may call <code>.noConflict</code> on the plugin you wish to revert the value of.</p> - -<pre class="prettyprint linenums"> -var bootstrapButton = $.fn.button.noConflict() // return $.fn.button to previously assigned value -$.fn.bootstrapBtn = bootstrapButton // give $().bootstrapBtn the bootstrap functionality -</pre> - - <h3>Events</h3> - <p>Bootstrap provides custom events for most plugin's unique actions. Generally, these come in an infinitive and past participle form - where the infinitive (ex. <code>show</code>) is triggered at the start of an event, and its past participle form (ex. <code>shown</code>) is trigger on the completion of an action.</p> - <p>All infinitive events provide preventDefault functionality. This provides the ability to stop the execution of an action before it starts.</p> -<pre class="prettyprint linenums"> -$('#myModal').on('show', function (e) { - if (!data) return e.preventDefault() // stops modal from being shown -}) -</pre> - </section> - - - - <!-- Transitions - ================================================== --> - <section id="transitions"> - <div class="page-header"> - <h1>Transitions <small>bootstrap-transition.js</small></h1> - </div> - <h3>About transitions</h3> - <p>For simple transition effects, include <strong>bootstrap-transition.js</strong> once alongside the other JS files. If you're using the compiled (or minified) <strong>bootstrap.js</strong>, there is no need to include this—it's already there.</p> - <h3>Use cases</h3> - <p>A few examples of the transition plugin:</p> - <ul> - <li>Sliding or fading in modals</li> - <li>Fading out tabs</li> - <li>Fading out alerts</li> - <li>Sliding carousel panes</li> - </ul> - - </section> - - - - <!-- Modal - ================================================== --> - <section id="modals"> - <div class="page-header"> - <h1>Modals <small>bootstrap-modal.js</small></h1> - </div> - - - <h2>Examples</h2> - <p>Modals are streamlined, but flexible, dialog prompts with the minimum required functionality and smart defaults.</p> - - <h3>Static example</h3> - <p>A rendered modal with header, body, and set of actions in the footer.</p> - <div class="bs-docs-example" style="background-color: #f5f5f5;"> - <div class="modal" style="position: relative; top: auto; left: auto; right: auto; margin: 0 auto 20px; z-index: 1; max-width: 100%;"> - <div class="modal-header"> - <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> - <h3>Modal header</h3> - </div> - <div class="modal-body"> - <p>One fine body…</p> - </div> - <div class="modal-footer"> - <a href="#" class="btn">Close</a> - <a href="#" class="btn btn-primary">Save changes</a> - </div> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="modal hide fade"> - <div class="modal-header"> - <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button> - <h3>Modal header</h3> - </div> - <div class="modal-body"> - <p>One fine body…</p> - </div> - <div class="modal-footer"> - <a href="#" class="btn">Close</a> - <a href="#" class="btn btn-primary">Save changes</a> - </div> -</div> -</pre> - - <h3>Live demo</h3> - <p>Toggle a modal via JavaScript by clicking the button below. It will slide down and fade in from the top of the page.</p> - <!-- sample modal content --> - <div id="myModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> - <div class="modal-header"> - <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> - <h3 id="myModalLabel">Modal Heading</h3> - </div> - <div class="modal-body"> - <h4>Text in a modal</h4> - <p>Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem.</p> - - <h4>Popover in a modal</h4> - <p>This <a href="#" role="button" class="btn popover-test" title="A Title" data-content="And here's some amazing content. It's very engaging. right?">button</a> should trigger a popover on click.</p> - - <h4>Tooltips in a modal</h4> - <p><a href="#" class="tooltip-test" title="Tooltip">This link</a> and <a href="#" class="tooltip-test" title="Tooltip">that link</a> should have tooltips on hover.</p> - - <hr> - - <h4>Overflowing text to show optional scrollbar</h4> - <p>We set a fixed <code>max-height</code> on the <code>.modal-body</code>. Watch it overflow with all this extra lorem ipsum text we've included.</p> - <p>Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.</p> - <p>Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.</p> - <p>Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus auctor fringilla.</p> - <p>Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.</p> - <p>Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.</p> - <p>Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus auctor fringilla.</p> - </div> - <div class="modal-footer"> - <button class="btn" data-dismiss="modal">Close</button> - <button class="btn btn-primary">Save changes</button> - </div> - </div> - <div class="bs-docs-example" style="padding-bottom: 24px;"> - <a data-toggle="modal" href="#myModal" class="btn btn-primary btn-large">Launch demo modal</a> - </div> -<pre class="prettyprint linenums"> -<!-- Button to trigger modal --> -<a href="#myModal" role="button" class="btn" data-toggle="modal">Launch demo modal</a> - -<!-- Modal --> -<div id="myModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> - <div class="modal-header"> - <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> - <h3 id="myModalLabel">Modal header</h3> - </div> - <div class="modal-body"> - <p>One fine body…</p> - </div> - <div class="modal-footer"> - <button class="btn" data-dismiss="modal" aria-hidden="true">Close</button> - <button class="btn btn-primary">Save changes</button> - </div> -</div> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>Usage</h2> - - <h3>Via data attributes</h3> - <p>Activate a modal without writing JavaScript. Set <code>data-toggle="modal"</code> on a controller element, like a button, along with a <code>data-target="#foo"</code> or <code>href="#foo"</code> to target a specific modal to toggle.</p> - <pre class="prettyprint linenums"><button type="button" data-toggle="modal" data-target="#myModal">Launch modal</button></pre> - - <h3>Via JavaScript</h3> - <p>Call a modal with id <code>myModal</code> with a single line of JavaScript:</p> - <pre class="prettyprint linenums">$('#myModal').modal(options)</pre> - - <h3>Options</h3> - <p>Options can be passed via data attributes or JavaScript. For data attributes, append the option name to <code>data-</code>, as in <code>data-backdrop=""</code>.</p> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th style="width: 100px;">Name</th> - <th style="width: 50px;">type</th> - <th style="width: 50px;">default</th> - <th>description</th> - </tr> - </thead> - <tbody> - <tr> - <td>backdrop</td> - <td>boolean</td> - <td>true</td> - <td>Includes a modal-backdrop element. Alternatively, specify <code>static</code> for a backdrop which doesn't close the modal on click.</td> - </tr> - <tr> - <td>keyboard</td> - <td>boolean</td> - <td>true</td> - <td>Closes the modal when escape key is pressed</td> - </tr> - <tr> - <td>show</td> - <td>boolean</td> - <td>true</td> - <td>Shows the modal when initialized.</td> - </tr> - <tr> - <td>remote</td> - <td>path</td> - <td>false</td> - <td><p>If a remote url is provided, content will be loaded via jQuery's <code>load</code> method and injected into the <code>.modal-body</code>. If you're using the data api, you may alternatively use the <code>href</code> tag to specify the remote source. An example of this is shown below:</p> - <pre class="prettyprint linenums"><code><a data-toggle="modal" href="remote.html" data-target="#modal">click me</a></code></pre></td> - </tr> - </tbody> - </table> - - <h3>Methods</h3> - <h4>.modal(options)</h4> - <p>Activates your content as a modal. Accepts an optional options <code>object</code>.</p> -<pre class="prettyprint linenums"> -$('#myModal').modal({ - keyboard: false -}) -</pre> - <h4>.modal('toggle')</h4> - <p>Manually toggles a modal.</p> - <pre class="prettyprint linenums">$('#myModal').modal('toggle')</pre> - <h4>.modal('show')</h4> - <p>Manually opens a modal.</p> - <pre class="prettyprint linenums">$('#myModal').modal('show')</pre> - <h4>.modal('hide')</h4> - <p>Manually hides a modal.</p> - <pre class="prettyprint linenums">$('#myModal').modal('hide')</pre> - <h3>Events</h3> - <p>Bootstrap's modal class exposes a few events for hooking into modal functionality.</p> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th style="width: 150px;">Event</th> - <th>Description</th> - </tr> - </thead> - <tbody> - <tr> - <td>show</td> - <td>This event fires immediately when the <code>show</code> instance method is called.</td> - </tr> - <tr> - <td>shown</td> - <td>This event is fired when the modal has been made visible to the user (will wait for css transitions to complete).</td> - </tr> - <tr> - <td>hide</td> - <td>This event is fired immediately when the <code>hide</code> instance method has been called.</td> - </tr> - <tr> - <td>hidden</td> - <td>This event is fired when the modal has finished being hidden from the user (will wait for css transitions to complete).</td> - </tr> - </tbody> - </table> -<pre class="prettyprint linenums"> -$('#myModal').on('hidden', function () { - // do something… -}) -</pre> - </section> - - - - <!-- Dropdowns - ================================================== --> - <section id="dropdowns"> - <div class="page-header"> - <h1>Dropdowns <small>bootstrap-dropdown.js</small></h1> - </div> - - - <h2>Examples</h2> - <p>Add dropdown menus to nearly anything with this simple plugin, including the navbar, tabs, and pills.</p> - - <h3>Within a navbar</h3> - <div class="bs-docs-example"> - <div id="navbar-example" class="navbar navbar-static"> - <div class="navbar-inner"> - <div class="container" style="width: auto;"> - <a class="brand" href="#">Project Name</a> - <ul class="nav" role="navigation"> - <li class="dropdown"> - <a id="drop1" href="#" role="button" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a> - <ul class="dropdown-menu" role="menu" aria-labelledby="drop1"> - <li role="presentation"><a role="menuitem" tabindex="-1" href="http://google.com">Action</a></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#anotherAction">Another action</a></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Something else here</a></li> - <li role="presentation" class="divider"></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Separated link</a></li> - </ul> - </li> - <li class="dropdown"> - <a href="#" id="drop2" role="button" class="dropdown-toggle" data-toggle="dropdown">Dropdown 2 <b class="caret"></b></a> - <ul class="dropdown-menu" role="menu" aria-labelledby="drop2"> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Action</a></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Another action</a></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Something else here</a></li> - <li role="presentation" class="divider"></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Separated link</a></li> - </ul> - </li> - </ul> - <ul class="nav pull-right"> - <li id="fat-menu" class="dropdown"> - <a href="#" id="drop3" role="button" class="dropdown-toggle" data-toggle="dropdown">Dropdown 3 <b class="caret"></b></a> - <ul class="dropdown-menu" role="menu" aria-labelledby="drop3"> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Action</a></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Another action</a></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Something else here</a></li> - <li role="presentation" class="divider"></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Separated link</a></li> - </ul> - </li> - </ul> - </div> - </div> - </div> <!-- /navbar-example --> - </div> - - <h3>Within tabs</h3> - <div class="bs-docs-example"> - <ul class="nav nav-pills"> - <li class="active"><a href="#">Regular link</a></li> - <li class="dropdown"> - <a class="dropdown-toggle" id="drop4" role="button" data-toggle="dropdown" href="#">Dropdown <b class="caret"></b></a> - <ul id="menu1" class="dropdown-menu" role="menu" aria-labelledby="drop4"> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Action</a></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Another action</a></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Something else here</a></li> - <li role="presentation" class="divider"></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Separated link</a></li> - </ul> - </li> - <li class="dropdown"> - <a class="dropdown-toggle" id="drop5" role="button" data-toggle="dropdown" href="#">Dropdown 2 <b class="caret"></b></a> - <ul id="menu2" class="dropdown-menu" role="menu" aria-labelledby="drop5"> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Action</a></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Another action</a></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Something else here</a></li> - <li role="presentation" class="divider"></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Separated link</a></li> - </ul> - </li> - <li class="dropdown"> - <a class="dropdown-toggle" id="drop5" role="button" data-toggle="dropdown" href="#">Dropdown 3 <b class="caret"></b></a> - <ul id="menu3" class="dropdown-menu" role="menu" aria-labelledby="drop5"> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Action</a></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Another action</a></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Something else here</a></li> - <li role="presentation" class="divider"></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Separated link</a></li> - </ul> - </li> - </ul> <!-- /tabs --> - </div> - - - <hr class="bs-docs-separator"> - - - <h2>Usage</h2> - - <h3>Via data attributes</h3> - <p>Add <code>data-toggle="dropdown"</code> to a link or button to toggle a dropdown.</p> -<pre class="prettyprint linenums"> -<div class="dropdown"> - <a class="dropdown-toggle" data-toggle="dropdown" href="#">Dropdown trigger</a> - <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"> - ... - </ul> -</div> -</pre> - <p>To keep URLs intact, use the <code>data-target</code> attribute instead of <code>href="#"</code>.</p> -<pre class="prettyprint linenums"> -<div class="dropdown"> - <a class="dropdown-toggle" id="dLabel" role="button" data-toggle="dropdown" data-target="#" href="/page.html"> - Dropdown - <b class="caret"></b> - </a> - <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"> - ... - </ul> -</div> -</pre> - - <h3>Via JavaScript</h3> - <p>Call the dropdowns via JavaScript:</p> - <pre class="prettyprint linenums">$('.dropdown-toggle').dropdown()</pre> - - <h3>Options</h3> - <p><em>None</em></p> - - <h3>Methods</h3> - <h4>$().dropdown('toggle')</h4> - <p>A programmatic api for toggling menus for a given navbar or tabbed navigation.</p> - </section> - - - - <!-- ScrollSpy - ================================================== --> - <section id="scrollspy"> - <div class="page-header"> - <h1>ScrollSpy <small>bootstrap-scrollspy.js</small></h1> - </div> - - - <h2>Example in navbar</h2> - <p>The ScrollSpy plugin is for automatically updating nav targets based on scroll position. Scroll the area below the navbar and watch the active class change. The dropdown sub items will be highlighted as well.</p> - <div class="bs-docs-example"> - <div id="navbarExample" class="navbar navbar-static"> - <div class="navbar-inner"> - <div class="container" style="width: auto;"> - <a class="brand" href="#">Project Name</a> - <ul class="nav"> - <li><a href="#fat">@fat</a></li> - <li><a href="#mdo">@mdo</a></li> - <li class="dropdown"> - <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a> - <ul class="dropdown-menu"> - <li><a href="#one">one</a></li> - <li><a href="#two">two</a></li> - <li class="divider"></li> - <li><a href="#three">three</a></li> - </ul> - </li> - </ul> - </div> - </div> - </div> - <div data-spy="scroll" data-target="#navbarExample" data-offset="0" class="scrollspy-example"> - <h4 id="fat">@fat</h4> - <p>Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.</p> - <h4 id="mdo">@mdo</h4> - <p>Veniam marfa mustache skateboard, adipisicing fugiat velit pitchfork beard. Freegan beard aliqua cupidatat mcsweeney's vero. Cupidatat four loko nisi, ea helvetica nulla carles. Tattooed cosby sweater food truck, mcsweeney's quis non freegan vinyl. Lo-fi wes anderson +1 sartorial. Carles non aesthetic exercitation quis gentrify. Brooklyn adipisicing craft beer vice keytar deserunt.</p> - <h4 id="one">one</h4> - <p>Occaecat commodo aliqua delectus. Fap craft beer deserunt skateboard ea. Lomo bicycle rights adipisicing banh mi, velit ea sunt next level locavore single-origin coffee in magna veniam. High life id vinyl, echo park consequat quis aliquip banh mi pitchfork. Vero VHS est adipisicing. Consectetur nisi DIY minim messenger bag. Cred ex in, sustainable delectus consectetur fanny pack iphone.</p> - <h4 id="two">two</h4> - <p>In incididunt echo park, officia deserunt mcsweeney's proident master cleanse thundercats sapiente veniam. Excepteur VHS elit, proident shoreditch +1 biodiesel laborum craft beer. Single-origin coffee wayfarers irure four loko, cupidatat terry richardson master cleanse. Assumenda you probably haven't heard of them art party fanny pack, tattooed nulla cardigan tempor ad. Proident wolf nesciunt sartorial keffiyeh eu banh mi sustainable. Elit wolf voluptate, lo-fi ea portland before they sold out four loko. Locavore enim nostrud mlkshk brooklyn nesciunt.</p> - <h4 id="three">three</h4> - <p>Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.</p> - <p>Keytar twee blog, culpa messenger bag marfa whatever delectus food truck. Sapiente synth id assumenda. Locavore sed helvetica cliche irony, thundercats you probably haven't heard of them consequat hoodie gluten-free lo-fi fap aliquip. Labore elit placeat before they sold out, terry richardson proident brunch nesciunt quis cosby sweater pariatur keffiyeh ut helvetica artisan. Cardigan craft beer seitan readymade velit. VHS chambray laboris tempor veniam. Anim mollit minim commodo ullamco thundercats. - </p> - </div> - </div> - - - <hr class="bs-docs-separator"> - - - <h2>Usage</h2> - - <h3>Via data attributes</h3> - <p>To easily add scrollspy behavior to your topbar navigation, just add <code>data-spy="scroll"</code> to the element you want to spy on (most typically this would be the body) and <code>data-target=".navbar"</code> to select which nav to use. You'll want to use scrollspy with a <code>.nav</code> component.</p> - <pre class="prettyprint linenums"><body data-spy="scroll" data-target=".navbar">...</body></pre> - - <h3>Via JavaScript</h3> - <p>Call the scrollspy via JavaScript:</p> - <pre class="prettyprint linenums">$('#navbar').scrollspy()</pre> - - <div class="alert alert-info"> - <strong>Heads up!</strong> - Navbar links must have resolvable id targets. For example, a <code><a href="#home">home</a></code> must correspond to something in the dom like <code><div id="home"></div></code>. - </div> - - <h3>Methods</h3> - <h4>.scrollspy('refresh')</h4> - <p>When using scrollspy in conjunction with adding or removing of elements from the DOM, you'll need to call the refresh method like so:</p> -<pre class="prettyprint linenums"> -$('[data-spy="scroll"]').each(function () { - var $spy = $(this).scrollspy('refresh') -}); -</pre> - - <h3>Options</h3> - <p>Options can be passed via data attributes or JavaScript. For data attributes, append the option name to <code>data-</code>, as in <code>data-offset=""</code>.</p> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th style="width: 100px;">Name</th> - <th style="width: 100px;">type</th> - <th style="width: 50px;">default</th> - <th>description</th> - </tr> - </thead> - <tbody> - <tr> - <td>offset</td> - <td>number</td> - <td>10</td> - <td>Pixels to offset from top when calculating position of scroll.</td> - </tr> - </tbody> - </table> - - <h3>Events</h3> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th style="width: 150px;">Event</th> - <th>Description</th> - </tr> - </thead> - <tbody> - <tr> - <td>activate</td> - <td>This event fires whenever a new item becomes activated by the scrollspy.</td> - </tr> - </tbody> - </table> - </section> - - - - <!-- Tabs - ================================================== --> - <section id="tabs"> - <div class="page-header"> - <h1>Togglable tabs <small>bootstrap-tab.js</small></h1> - </div> - - - <h2>Example tabs</h2> - <p>Add quick, dynamic tab functionality to transition through panes of local content, even via dropdown menus.</p> - <div class="bs-docs-example"> - <ul id="myTab" class="nav nav-tabs"> - <li class="active"><a href="#home" data-toggle="tab">Home</a></li> - <li><a href="#profile" data-toggle="tab">Profile</a></li> - <li class="dropdown"> - <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a> - <ul class="dropdown-menu"> - <li><a href="#dropdown1" data-toggle="tab">@fat</a></li> - <li><a href="#dropdown2" data-toggle="tab">@mdo</a></li> - </ul> - </li> - </ul> - <div id="myTabContent" class="tab-content"> - <div class="tab-pane fade in active" id="home"> - <p>Raw denim you probably haven't heard of them jean shorts Austin. Nesciunt tofu stumptown aliqua, retro synth master cleanse. Mustache cliche tempor, williamsburg carles vegan helvetica. Reprehenderit butcher retro keffiyeh dreamcatcher synth. Cosby sweater eu banh mi, qui irure terry richardson ex squid. Aliquip placeat salvia cillum iphone. Seitan aliquip quis cardigan american apparel, butcher voluptate nisi qui.</p> - </div> - <div class="tab-pane fade" id="profile"> - <p>Food truck fixie locavore, accusamus mcsweeney's marfa nulla single-origin coffee squid. Exercitation +1 labore velit, blog sartorial PBR leggings next level wes anderson artisan four loko farm-to-table craft beer twee. Qui photo booth letterpress, commodo enim craft beer mlkshk aliquip jean shorts ullamco ad vinyl cillum PBR. Homo nostrud organic, assumenda labore aesthetic magna delectus mollit. Keytar helvetica VHS salvia yr, vero magna velit sapiente labore stumptown. Vegan fanny pack odio cillum wes anderson 8-bit, sustainable jean shorts beard ut DIY ethical culpa terry richardson biodiesel. Art party scenester stumptown, tumblr butcher vero sint qui sapiente accusamus tattooed echo park.</p> - </div> - <div class="tab-pane fade" id="dropdown1"> - <p>Etsy mixtape wayfarers, ethical wes anderson tofu before they sold out mcsweeney's organic lomo retro fanny pack lo-fi farm-to-table readymade. Messenger bag gentrify pitchfork tattooed craft beer, iphone skateboard locavore carles etsy salvia banksy hoodie helvetica. DIY synth PBR banksy irony. Leggings gentrify squid 8-bit cred pitchfork. Williamsburg banh mi whatever gluten-free, carles pitchfork biodiesel fixie etsy retro mlkshk vice blog. Scenester cred you probably haven't heard of them, vinyl craft beer blog stumptown. Pitchfork sustainable tofu synth chambray yr.</p> - </div> - <div class="tab-pane fade" id="dropdown2"> - <p>Trust fund seitan letterpress, keytar raw denim keffiyeh etsy art party before they sold out master cleanse gluten-free squid scenester freegan cosby sweater. Fanny pack portland seitan DIY, art party locavore wolf cliche high life echo park Austin. Cred vinyl keffiyeh DIY salvia PBR, banh mi before they sold out farm-to-table VHS viral locavore cosby sweater. Lomo wolf viral, mustache readymade thundercats keffiyeh craft beer marfa ethical. Wolf salvia freegan, sartorial keffiyeh echo park vegan.</p> - </div> - </div> - </div> - - - <hr class="bs-docs-separator"> - - - <h2>Usage</h2> - <p>Enable tabbable tabs via JavaScript (each tab needs to be activated individually):</p> -<pre class="prettyprint linenums"> -$('#myTab a').click(function (e) { - e.preventDefault(); - $(this).tab('show'); -})</pre> - <p>You can activate individual tabs in several ways:</p> -<pre class="prettyprint linenums"> -$('#myTab a[href="#profile"]').tab('show'); // Select tab by name -$('#myTab a:first').tab('show'); // Select first tab -$('#myTab a:last').tab('show'); // Select last tab -$('#myTab li:eq(2) a').tab('show'); // Select third tab (0-indexed) -</pre> - - <h3>Markup</h3> - <p>You can activate a tab or pill navigation without writing any JavaScript by simply specifying <code>data-toggle="tab"</code> or <code>data-toggle="pill"</code> on an element. Adding the <code>nav</code> and <code>nav-tabs</code> classes to the tab <code>ul</code> will apply the Bootstrap tab styling.</p> -<pre class="prettyprint linenums"> -<ul class="nav nav-tabs"> - <li><a href="#home" data-toggle="tab">Home</a></li> - <li><a href="#profile" data-toggle="tab">Profile</a></li> - <li><a href="#messages" data-toggle="tab">Messages</a></li> - <li><a href="#settings" data-toggle="tab">Settings</a></li> -</ul></pre> - - <h3>Methods</h3> - <h4>$().tab</h4> - <p> - Activates a tab element and content container. Tab should have either a <code>data-target</code> or an <code>href</code> targeting a container node in the DOM. - </p> -<pre class="prettyprint linenums"> -<ul class="nav nav-tabs" id="myTab"> - <li class="active"><a href="#home">Home</a></li> - <li><a href="#profile">Profile</a></li> - <li><a href="#messages">Messages</a></li> - <li><a href="#settings">Settings</a></li> -</ul> - -<div class="tab-content"> - <div class="tab-pane active" id="home">...</div> - <div class="tab-pane" id="profile">...</div> - <div class="tab-pane" id="messages">...</div> - <div class="tab-pane" id="settings">...</div> -</div> - -<script> - $(function () { - $('#myTab a:last').tab('show'); - }) -</script> -</pre> - - <h3>Events</h3> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th style="width: 150px;">Event</th> - <th>Description</th> - </tr> - </thead> - <tbody> - <tr> - <td>show</td> - <td>This event fires on tab show, but before the new tab has been shown. Use <code>event.target</code> and <code>event.relatedTarget</code> to target the active tab and the previous active tab (if available) respectively.</td> - </tr> - <tr> - <td>shown</td> - <td>This event fires on tab show after a tab has been shown. Use <code>event.target</code> and <code>event.relatedTarget</code> to target the active tab and the previous active tab (if available) respectively.</td> - </tr> - </tbody> - </table> -<pre class="prettyprint linenums"> -$('a[data-toggle="tab"]').on('shown', function (e) { - e.target // activated tab - e.relatedTarget // previous tab -}) -</pre> - </section> - - - <!-- Tooltips - ================================================== --> - <section id="tooltips"> - <div class="page-header"> - <h1>Tooltips <small>bootstrap-tooltip.js</small></h1> - </div> - - - <h2>Examples</h2> - <p>Inspired by the excellent jQuery.tipsy plugin written by Jason Frame; Tooltips are an updated version, which don't rely on images, use CSS3 for animations, and data-attributes for local title storage.</p> - <p>For performance reasons, the tooltip and popover data-apis are opt in, meaning <strong>you must initialize them yourself</strong>.</p> - <p>Hover over the links below to see tooltips:</p> - <div class="bs-docs-example tooltip-demo"> - <p class="muted" style="margin-bottom: 0;">Tight pants next level keffiyeh <a href="#" data-toggle="tooltip" title="Default tooltip">you probably</a> haven't heard of them. Photo booth beard raw denim letterpress vegan messenger bag stumptown. Farm-to-table seitan, mcsweeney's fixie sustainable quinoa 8-bit american apparel <a href="#" data-toggle="tooltip" title="Another tooltip">have a</a> terry richardson vinyl chambray. Beard stumptown, cardigans banh mi lomo thundercats. Tofu biodiesel williamsburg marfa, four loko mcsweeney's cleanse vegan chambray. A really ironic artisan <a href="#" data-toggle="tooltip" title="A much longer tooltip belongs right here to demonstrate the max-width we apply.">whatever keytar</a>, scenester farm-to-table banksy Austin <a href="#" data-toggle="tooltip" title="The last tip!">twitter handle</a> freegan cred raw denim single-origin coffee viral. - </p> - </div> - - <h3>Four directions</h3> - <div class="bs-docs-example tooltip-demo"> - <ul class="bs-docs-tooltip-examples"> - <li><a href="#" data-toggle="tooltip" data-placement="top" title="Tooltip on top">Tooltip on top</a></li> - <li><a href="#" data-toggle="tooltip" data-placement="right" title="Tooltip on right">Tooltip on right</a></li> - <li><a href="#" data-toggle="tooltip" data-placement="bottom" title="Tooltip on bottom">Tooltip on bottom</a></li> - <li><a href="#" data-toggle="tooltip" data-placement="left" title="Tooltip on left">Tooltip on left</a></li> - </ul> - </div> - - - <h3>Tooltips in input groups</h3> - <p>When using tooltips and popovers with the Bootstrap input groups, you'll have to set the <code>container</code> (documented below) option to avoid unwanted side effects.</p> - - <hr class="bs-docs-separator"> - - - <h2>Usage</h2> - <p>Trigger the tooltip via JavaScript:</p> - <pre class="prettyprint linenums">$('#example').tooltip(options)</pre> - - <h3>Options</h3> - <p>Options can be passed via data attributes or JavaScript. For data attributes, append the option name to <code>data-</code>, as in <code>data-animation=""</code>.</p> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th style="width: 100px;">Name</th> - <th style="width: 100px;">type</th> - <th style="width: 50px;">default</th> - <th>description</th> - </tr> - </thead> - <tbody> - <tr> - <td>animation</td> - <td>boolean</td> - <td>true</td> - <td>apply a css fade transition to the tooltip</td> - </tr> - <tr> - <td>html</td> - <td>boolean</td> - <td>false</td> - <td>Insert html into the tooltip. If false, jquery's <code>text</code> method will be used to insert content into the dom. Use text if you're worried about XSS attacks.</td> - </tr> - <tr> - <td>placement</td> - <td>string | function</td> - <td>'top'</td> - <td>how to position the tooltip - top | bottom | left | right</td> - </tr> - <tr> - <td>selector</td> - <td>string</td> - <td>false</td> - <td>If a selector is provided, tooltip objects will be delegated to the specified targets.</td> - </tr> - <tr> - <td>title</td> - <td>string | function</td> - <td>''</td> - <td>default title value if `title` tag isn't present</td> - </tr> - <tr> - <td>trigger</td> - <td>string</td> - <td>'hover focus'</td> - <td>how tooltip is triggered - click | hover | focus | manual. Note you case pass trigger mutliple, space seperated, trigger types.</td> - </tr> - <tr> - <td>delay</td> - <td>number | object</td> - <td>0</td> - <td> - <p>delay showing and hiding the tooltip (ms) - does not apply to manual trigger type</p> - <p>If a number is supplied, delay is applied to both hide/show</p> - <p>Object structure is: <code>delay: { show: 500, hide: 100 }</code></p> - </td> - </tr> - <tr> - <td>container</td> - <td>string | false</td> - <td>false</td> - <td> - <p>Appends the tooltip to a specific element <code>container: 'body'</code></p> - </td> - </tr> - </tbody> - </table> - <div class="alert alert-info"> - <strong>Heads up!</strong> - Options for individual tooltips can alternatively be specified through the use of data attributes. - </div> - - <h3>Markup</h3> - <pre class="prettyprint linenums"><a href="#" data-toggle="tooltip" title="first tooltip">hover over me</a></pre> - - <h3>Methods</h3> - <h4>$().tooltip(options)</h4> - <p>Attaches a tooltip handler to an element collection.</p> - <h4>.tooltip('show')</h4> - <p>Reveals an element's tooltip.</p> - <pre class="prettyprint linenums">$('#element').tooltip('show')</pre> - <h4>.tooltip('hide')</h4> - <p>Hides an element's tooltip.</p> - <pre class="prettyprint linenums">$('#element').tooltip('hide')</pre> - <h4>.tooltip('toggle')</h4> - <p>Toggles an element's tooltip.</p> - <pre class="prettyprint linenums">$('#element').tooltip('toggle')</pre> - <h4>.tooltip('destroy')</h4> - <p>Hides and destroys an element's tooltip.</p> - <pre class="prettyprint linenums">$('#element').tooltip('destroy')</pre> - </section> - - - - <!-- Popovers - ================================================== --> - <section id="popovers"> - <div class="page-header"> - <h1>Popovers <small>bootstrap-popover.js</small></h1> - </div> - - <h2>Examples</h2> - <p>Add small overlays of content, like those on the iPad, to any element for housing secondary information. Hover over the button to trigger the popover. <strong>Requires <a href="#tooltips">Tooltip</a> to be included.</strong></p> - - <h3>Static popover</h3> - <p>Four options are available: top, right, bottom, and left aligned.</p> - <div class="bs-docs-example bs-docs-example-popover"> - <div class="popover top"> - <div class="arrow"></div> - <h3 class="popover-title">Popover top</h3> - <div class="popover-content"> - <p>Sed posuere consectetur est at lobortis. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.</p> - </div> - </div> - - <div class="popover right"> - <div class="arrow"></div> - <h3 class="popover-title">Popover right</h3> - <div class="popover-content"> - <p>Sed posuere consectetur est at lobortis. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.</p> - </div> - </div> - - <div class="popover bottom"> - <div class="arrow"></div> - <h3 class="popover-title">Popover bottom</h3> - <div class="popover-content"> - <p>Sed posuere consectetur est at lobortis. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.</p> - </div> - </div> - - <div class="popover left"> - <div class="arrow"></div> - <h3 class="popover-title">Popover left</h3> - <div class="popover-content"> - <p>Sed posuere consectetur est at lobortis. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.</p> - </div> - </div> - - <div class="clearfix"></div> - </div> - <p>No markup shown as popovers are generated from JavaScript and content within a <code>data</code> attribute.</p> - - <h3>Live demo</h3> - <div class="bs-docs-example" style="padding-bottom: 24px;"> - <a href="#" class="btn btn-large btn-danger" data-toggle="popover" title="A Title" data-content="And here's some amazing content. It's very engaging. right?">Click to toggle popover</a> - </div> - - <h4>Four directions</h4> - <div class="bs-docs-example tooltip-demo"> - <ul class="bs-docs-tooltip-examples"> - <li><a href="#" class="btn" data-toggle="popover" data-placement="top" data-content="Vivamus sagittis lacus vel augue laoreet rutrum faucibus." title="Popover on top">Popover on top</a></li> - <li><a href="#" class="btn" data-toggle="popover" data-placement="right" data-content="Vivamus sagittis lacus vel augue laoreet rutrum faucibus." title="Popover on right">Popover on right</a></li> - <li><a href="#" class="btn" data-toggle="popover" data-placement="bottom" data-content="Vivamus sagittis lacus vel augue laoreet rutrum faucibus." title="Popover on bottom">Popover on bottom</a></li> - <li><a href="#" class="btn" data-toggle="popover" data-placement="left" data-content="Vivamus sagittis lacus vel augue laoreet rutrum faucibus." title="Popover on left">Popover on left</a></li> - </ul> - </div> - - - <hr class="bs-docs-separator"> - - - <h2>Usage</h2> - <p>Enable popovers via JavaScript:</p> - <pre class="prettyprint linenums">$('#example').popover(options)</pre> - - <h3>Options</h3> - <p>Options can be passed via data attributes or JavaScript. For data attributes, append the option name to <code>data-</code>, as in <code>data-animation=""</code>.</p> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th style="width: 100px;">Name</th> - <th style="width: 100px;">type</th> - <th style="width: 50px;">default</th> - <th>description</th> - </tr> - </thead> - <tbody> - <tr> - <td>animation</td> - <td>boolean</td> - <td>true</td> - <td>apply a css fade transition to the tooltip</td> - </tr> - <tr> - <td>html</td> - <td>boolean</td> - <td>false</td> - <td>Insert html into the popover. If false, jquery's <code>text</code> method will be used to insert content into the dom. Use text if you're worried about XSS attacks.</td> - </tr> - <tr> - <td>placement</td> - <td>string | function</td> - <td>'right'</td> - <td>how to position the popover - top | bottom | left | right</td> - </tr> - <tr> - <td>selector</td> - <td>string</td> - <td>false</td> - <td>if a selector is provided, tooltip objects will be delegated to the specified targets</td> - </tr> - <tr> - <td>trigger</td> - <td>string</td> - <td>'click'</td> - <td>how popover is triggered - click | hover | focus | manual</td> - </tr> - <tr> - <td>title</td> - <td>string | function</td> - <td>''</td> - <td>default title value if `title` attribute isn't present</td> - </tr> - <tr> - <td>content</td> - <td>string | function</td> - <td>''</td> - <td>default content value if `data-content` attribute isn't present</td> - </tr> - <tr> - <td>delay</td> - <td>number | object</td> - <td>0</td> - <td> - <p>delay showing and hiding the popover (ms) - does not apply to manual trigger type</p> - <p>If a number is supplied, delay is applied to both hide/show</p> - <p>Object structure is: <code>delay: { show: 500, hide: 100 }</code></p> - </td> - </tr> - <tr> - <td>container</td> - <td>string | false</td> - <td>false</td> - <td> - <p>Appends the popover to a specific element <code>container: 'body'</code></p> - </td> - </tr> - </tbody> - </table> - <div class="alert alert-info"> - <strong>Heads up!</strong> - Options for individual popovers can alternatively be specified through the use of data attributes. - </div> - - <h3>Markup</h3> - <p>For performance reasons, the Tooltip and Popover data-apis are opt in. If you would like to use them just specify a selector option.</p> - - <h3>Methods</h3> - <h4>$().popover(options)</h4> - <p>Initializes popovers for an element collection.</p> - <h4>.popover('show')</h4> - <p>Reveals an elements popover.</p> - <pre class="prettyprint linenums">$('#element').popover('show')</pre> - <h4>.popover('hide')</h4> - <p>Hides an elements popover.</p> - <pre class="prettyprint linenums">$('#element').popover('hide')</pre> - <h4>.popover('toggle')</h4> - <p>Toggles an elements popover.</p> - <pre class="prettyprint linenums">$('#element').popover('toggle')</pre> - <h4>.popover('destroy')</h4> - <p>Hides and destroys an element's popover.</p> - <pre class="prettyprint linenums">$('#element').popover('destroy')</pre> - </section> - - - - <!-- Alert - ================================================== --> - <section id="alerts"> - <div class="page-header"> - <h1>Alert messages <small>bootstrap-alert.js</small></h1> - </div> - - - <h2>Example alerts</h2> - <p>Add dismiss functionality to all alert messages with this plugin.</p> - <div class="bs-docs-example"> - <div class="alert fade in"> - <button type="button" class="close" data-dismiss="alert">×</button> - <strong>Holy guacamole!</strong> Best check yo self, you're not looking too good. - </div> - </div> - - <div class="bs-docs-example"> - <div class="alert alert-block alert-error fade in"> - <button type="button" class="close" data-dismiss="alert">×</button> - <h4 class="alert-heading">Oh snap! You got an error!</h4> - <p>Change this and that and try again. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum.</p> - <p> - <a class="btn btn-danger" href="#">Take this action</a> <a class="btn" href="#">Or do this</a> - </p> - </div> - </div> - - - <hr class="bs-docs-separator"> - - - <h2>Usage</h2> - <p>Enable dismissal of an alert via JavaScript:</p> - <pre class="prettyprint linenums">$(".alert").alert()</pre> - - <h3>Markup</h3> - <p>Just add <code>data-dismiss="alert"</code> to your close button to automatically give an alert close functionality.</p> - <pre class="prettyprint linenums"><a class="close" data-dismiss="alert" href="#">&times;</a></pre> - - <h3>Methods</h3> - <h4>$().alert()</h4> - <p>Wraps all alerts with close functionality. To have your alerts animate out when closed, make sure they have the <code>.fade</code> and <code>.in</code> class already applied to them.</p> - <h4>.alert('close')</h4> - <p>Closes an alert.</p> - <pre class="prettyprint linenums">$(".alert").alert('close')</pre> - - - <h3>Events</h3> - <p>Bootstrap's alert class exposes a few events for hooking into alert functionality.</p> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th style="width: 150px;">Event</th> - <th>Description</th> - </tr> - </thead> - <tbody> - <tr> - <td>close</td> - <td>This event fires immediately when the <code>close</code> instance method is called.</td> - </tr> - <tr> - <td>closed</td> - <td>This event is fired when the alert has been closed (will wait for css transitions to complete).</td> - </tr> - </tbody> - </table> -<pre class="prettyprint linenums"> -$('#my-alert').bind('closed', function () { - // do something… -}) -</pre> - </section> - - - - <!-- Buttons - ================================================== --> - <section id="buttons"> - <div class="page-header"> - <h1>Buttons <small>bootstrap-button.js</small></h1> - </div> - - <h2>Example uses</h2> - <p>Do more with buttons. Control button states or create groups of buttons for more components like toolbars.</p> - - <h4>Stateful</h4> - <p>Add <code>data-loading-text="Loading..."</code> to use a loading state on a button.</p> - <div class="bs-docs-example" style="padding-bottom: 24px;"> - <button type="button" id="fat-btn" data-loading-text="loading..." class="btn btn-primary"> - Loading state - </button> - </div> - <pre class="prettyprint linenums"><button type="button" class="btn btn-primary" data-loading-text="Loading...">Loading state</button></pre> - - <h4>Single toggle</h4> - <p>Add <code>data-toggle="button"</code> to activate toggling on a single button.</p> - <div class="bs-docs-example" style="padding-bottom: 24px;"> - <button type="button" class="btn btn-primary" data-toggle="button">Single Toggle</button> - </div> - <pre class="prettyprint linenums"><button type="button" class="btn btn-primary" data-toggle="button">Single Toggle</button></pre> - - <h4>Checkbox</h4> - <p>Add <code>data-toggle="buttons-checkbox"</code> for checkbox style toggling on btn-group.</p> - <div class="bs-docs-example" style="padding-bottom: 24px;"> - <div class="btn-group" data-toggle="buttons-checkbox"> - <button type="button" class="btn btn-primary">Left</button> - <button type="button" class="btn btn-primary">Middle</button> - <button type="button" class="btn btn-primary">Right</button> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="btn-group" data-toggle="buttons-checkbox"> - <button type="button" class="btn btn-primary">Left</button> - <button type="button" class="btn btn-primary">Middle</button> - <button type="button" class="btn btn-primary">Right</button> -</div> -</pre> - - <h4>Radio</h4> - <p>Add <code>data-toggle="buttons-radio"</code> for radio style toggling on btn-group.</p> - <div class="bs-docs-example" style="padding-bottom: 24px;"> - <div class="btn-group" data-toggle="buttons-radio"> - <button type="button" class="btn btn-primary">Left</button> - <button type="button" class="btn btn-primary">Middle</button> - <button type="button" class="btn btn-primary">Right</button> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="btn-group" data-toggle="buttons-radio"> - <button type="button" class="btn btn-primary">Left</button> - <button type="button" class="btn btn-primary">Middle</button> - <button type="button" class="btn btn-primary">Right</button> -</div> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>Usage</h2> - <p>Enable buttons via JavaScript:</p> - <pre class="prettyprint linenums">$('.nav-tabs').button()</pre> - - <h3>Markup</h3> - <p>Data attributes are integral to the button plugin. Check out the example code below for the various markup types.</p> - - <h3>Options</h3> - <p><em>None</em></p> - - <h3>Methods</h3> - <h4>$().button('toggle')</h4> - <p>Toggles push state. Gives the button the appearance that it has been activated.</p> - <div class="alert alert-info"> - <strong>Heads up!</strong> - You can enable auto toggling of a button by using the <code>data-toggle</code> attribute. - </div> - <pre class="prettyprint linenums"><button type="button" class="btn" data-toggle="button" >…</button></pre> - <h4>$().button('loading')</h4> - <p>Sets button state to loading - disables button and swaps text to loading text. Loading text should be defined on the button element using the data attribute <code>data-loading-text</code>. - </p> - <pre class="prettyprint linenums"><button type="button" class="btn" data-loading-text="loading stuff..." >...</button></pre> - <div class="alert alert-info"> - <strong>Heads up!</strong> - <a href="https://github.com/twitter/bootstrap/issues/793">Firefox persists the disabled state across page loads</a>. A workaround for this is to use <code>autocomplete="off"</code>. - </div> - <h4>$().button('reset')</h4> - <p>Resets button state - swaps text to original text.</p> - <h4>$().button(string)</h4> - <p>Resets button state - swaps text to any data defined text state.</p> -<pre class="prettyprint linenums"><button type="button" class="btn" data-complete-text="finished!" >...</button> -<script> - $('.btn').button('complete') -</script> -</pre> - </section> - - - - <!-- Collapse - ================================================== --> - <section id="collapse"> - <div class="page-header"> - <h1>Collapse <small>bootstrap-collapse.js</small></h1> - </div> - - <h3>About</h3> - <p>Get base styles and flexible support for collapsible components like accordions and navigation.</p> - <p class="muted"><strong>*</strong> Requires the Transitions plugin to be included.</p> - - <h2>Example accordion</h2> - <p>Using the collapse plugin, we built a simple accordion style widget:</p> - - <div class="bs-docs-example"> - <div class="accordion" id="accordion2"> - <div class="accordion-group"> - <div class="accordion-heading"> - <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#collapseOne"> - Collapsible Group Item #1 - </a> - </div> - <div id="collapseOne" class="accordion-body collapse in"> - <div class="accordion-inner"> - Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS. - </div> - </div> - </div> - <div class="accordion-group"> - <div class="accordion-heading"> - <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#collapseTwo"> - Collapsible Group Item #2 - </a> - </div> - <div id="collapseTwo" class="accordion-body collapse"> - <div class="accordion-inner"> - Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS. - </div> - </div> - </div> - <div class="accordion-group"> - <div class="accordion-heading"> - <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#collapseThree"> - Collapsible Group Item #3 - </a> - </div> - <div id="collapseThree" class="accordion-body collapse"> - <div class="accordion-inner"> - Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS. - </div> - </div> - </div> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="accordion" id="accordion2"> - <div class="accordion-group"> - <div class="accordion-heading"> - <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#collapseOne"> - Collapsible Group Item #1 - </a> - </div> - <div id="collapseOne" class="accordion-body collapse in"> - <div class="accordion-inner"> - Anim pariatur cliche... - </div> - </div> - </div> - <div class="accordion-group"> - <div class="accordion-heading"> - <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#collapseTwo"> - Collapsible Group Item #2 - </a> - </div> - <div id="collapseTwo" class="accordion-body collapse"> - <div class="accordion-inner"> - Anim pariatur cliche... - </div> - </div> - </div> -</div> -... -</pre> - <p>You can also use the plugin without the accordion markup. Make a button toggle the expanding and collapsing of another element.</p> -<pre class="prettyprint linenums"> -<button type="button" class="btn btn-danger" data-toggle="collapse" data-target="#demo"> - simple collapsible -</button> - -<div id="demo" class="collapse in"> … </div> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>Usage</h2> - - <h3>Via data attributes</h3> - <p>Just add <code>data-toggle="collapse"</code> and a <code>data-target</code> to element to automatically assign control of a collapsible element. The <code>data-target</code> attribute accepts a css selector to apply the collapse to. Be sure to add the class <code>collapse</code> to the collapsible element. If you'd like it to default open, add the additional class <code>in</code>.</p> - <p>To add accordion-like group management to a collapsible control, add the data attribute <code>data-parent="#selector"</code>. Refer to the demo to see this in action.</p> - - <h3>Via JavaScript</h3> - <p>Enable manually with:</p> - <pre class="prettyprint linenums">$(".collapse").collapse()</pre> - - <h3>Options</h3> - <p>Options can be passed via data attributes or JavaScript. For data attributes, append the option name to <code>data-</code>, as in <code>data-parent=""</code>.</p> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th style="width: 100px;">Name</th> - <th style="width: 50px;">type</th> - <th style="width: 50px;">default</th> - <th>description</th> - </tr> - </thead> - <tbody> - <tr> - <td>parent</td> - <td>selector</td> - <td>false</td> - <td>If selector then all collapsible elements under the specified parent will be closed when this collapsible item is shown. (similar to traditional accordion behavior)</td> - </tr> - <tr> - <td>toggle</td> - <td>boolean</td> - <td>true</td> - <td>Toggles the collapsible element on invocation</td> - </tr> - </tbody> - </table> - - - <h3>Methods</h3> - <h4>.collapse(options)</h4> - <p>Activates your content as a collapsible element. Accepts an optional options <code>object</code>. -<pre class="prettyprint linenums"> -$('#myCollapsible').collapse({ - toggle: false -}) -</pre> - <h4>.collapse('toggle')</h4> - <p>Toggles a collapsible element to shown or hidden.</p> - <h4>.collapse('show')</h4> - <p>Shows a collapsible element.</p> - <h4>.collapse('hide')</h4> - <p>Hides a collapsible element.</p> - - <h3>Events</h3> - <p>Bootstrap's collapse class exposes a few events for hooking into collapse functionality.</p> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th style="width: 150px;">Event</th> - <th>Description</th> - </tr> - </thead> - <tbody> - <tr> - <td>show</td> - <td>This event fires immediately when the <code>show</code> instance method is called.</td> - </tr> - <tr> - <td>shown</td> - <td>This event is fired when a collapse element has been made visible to the user (will wait for css transitions to complete).</td> - </tr> - <tr> - <td>hide</td> - <td> - This event is fired immediately when the <code>hide</code> method has been called. - </td> - </tr> - <tr> - <td>hidden</td> - <td>This event is fired when a collapse element has been hidden from the user (will wait for css transitions to complete).</td> - </tr> - </tbody> - </table> -<pre class="prettyprint linenums"> -$('#myCollapsible').on('hidden', function () { - // do something… -})</pre> - </section> - - - - <!-- Carousel - ================================================== --> - <section id="carousel"> - <div class="page-header"> - <h1>Carousel <small>bootstrap-carousel.js</small></h1> - </div> - - <h2>Example carousel</h2> - <p>The slideshow below shows a generic plugin and component for cycling through elements like a carousel.</p> - <div class="bs-docs-example"> - <div id="myCarousel" class="carousel slide"> - <ol class="carousel-indicators"> - <li data-target="#myCarousel" data-slide-to="0" class="active"></li> - <li data-target="#myCarousel" data-slide-to="1"></li> - <li data-target="#myCarousel" data-slide-to="2"></li> - </ol> - <div class="carousel-inner"> - <div class="item active"> - <img src="assets/img/bootstrap-mdo-sfmoma-01.jpg" alt=""> - <div class="carousel-caption"> - <h4>First Thumbnail label</h4> - <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> - </div> - </div> - <div class="item"> - <img src="assets/img/bootstrap-mdo-sfmoma-02.jpg" alt=""> - <div class="carousel-caption"> - <h4>Second Thumbnail label</h4> - <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> - </div> - </div> - <div class="item"> - <img src="assets/img/bootstrap-mdo-sfmoma-03.jpg" alt=""> - <div class="carousel-caption"> - <h4>Third Thumbnail label</h4> - <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> - </div> - </div> - </div> - <a class="left carousel-control" href="#myCarousel" data-slide="prev">‹</a> - <a class="right carousel-control" href="#myCarousel" data-slide="next">›</a> - </div> - </div> -<pre class="prettyprint linenums"> -<div id="myCarousel" class="carousel slide"> - <ol class="carousel-indicators"> - <li data-target="#myCarousel" data-slide-to="0" class="active"></li> - <li data-target="#myCarousel" data-slide-to="1"></li> - <li data-target="#myCarousel" data-slide-to="2"></li> - </ol> - <!-- Carousel items --> - <div class="carousel-inner"> - <div class="active item">…</div> - <div class="item">…</div> - <div class="item">…</div> - </div> - <!-- Carousel nav --> - <a class="carousel-control left" href="#myCarousel" data-slide="prev">&lsaquo;</a> - <a class="carousel-control right" href="#myCarousel" data-slide="next">&rsaquo;</a> -</div> -</pre> - - <div class="alert alert-warning"> - <strong>Heads up!</strong> - When implementing this carousel, remove the images we have provided and replace them with your own. - </div> - - - <hr class="bs-docs-separator"> - - - <h2>Usage</h2> - - <h3>Via data attributes</h3> - <p>Use data attributes to easily control the position of the carousel. <code>data-slide</code> accepts the keywords <code>prev</code> or <code>next</code>, which alters the slide position relative to it's current position. Alternatively, use <code>data-slide-to</code> to pass a raw slide index to the carousel <code>data-slide-to="2"</code>, which jump's the slide position to a particular index beginning with <code>0</code>.</p> - - <h3>Via JavaScript</h3> - <p>Call carousel manually with:</p> - <pre class="prettyprint linenums">$('.carousel').carousel()</pre> - - <h3>Options</h3> - <p>Options can be passed via data attributes or JavaScriptz. For data attributes, append the option name to <code>data-</code>, as in <code>data-interval=""</code>.</p> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th style="width: 100px;">Name</th> - <th style="width: 50px;">type</th> - <th style="width: 50px;">default</th> - <th>description</th> - </tr> - </thead> - <tbody> - <tr> - <td>interval</td> - <td>number</td> - <td>5000</td> - <td>The amount of time to delay between automatically cycling an item. If false, carousel will not automatically cycle.</td> - </tr> - <tr> - <td>pause</td> - <td>string</td> - <td>"hover"</td> - <td>Pauses the cycling of the carousel on mouseenter and resumes the cycling of the carousel on mouseleave.</td> - </tr> - </tbody> - </table> - - <h3>Methods</h3> - <h4>.carousel(options)</h4> - <p>Initializes the carousel with an optional options <code>object</code> and starts cycling through items.</p> -<pre class="prettyprint linenums"> -$('.carousel').carousel({ - interval: 2000 -}) -</pre> - <h4>.carousel('cycle')</h4> - <p>Cycles through the carousel items from left to right.</p> - <h4>.carousel('pause')</h4> - <p>Stops the carousel from cycling through items.</p> - <h4>.carousel(number)</h4> - <p>Cycles the carousel to a particular frame (0 based, similar to an array).</p> - <h4>.carousel('prev')</h4> - <p>Cycles to the previous item.</p> - <h4>.carousel('next')</h4> - <p>Cycles to the next item.</p> - - <h3>Events</h3> - <p>Bootstrap's carousel class exposes two events for hooking into carousel functionality.</p> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th style="width: 150px;">Event</th> - <th>Description</th> - </tr> - </thead> - <tbody> - <tr> - <td>slide</td> - <td>This event fires immediately when the <code>slide</code> instance method is invoked.</td> - </tr> - <tr> - <td>slid</td> - <td>This event is fired when the carousel has completed its slide transition.</td> - </tr> - </tbody> - </table> - </section> - - - - <!-- Typeahead - ================================================== --> - <section id="typeahead"> - <div class="page-header"> - <h1>Typeahead <small>bootstrap-typeahead.js</small></h1> - </div> - - - <h2>Example</h2> - <p>A basic, easily extended plugin for quickly creating elegant typeaheads with any form text input.</p> - <div class="bs-docs-example" style="background-color: #f5f5f5;"> - <input type="text" class="span3" style="margin: 0 auto;" data-provide="typeahead" data-items="4" data-source='["Alabama","Alaska","Arizona","Arkansas","California","Colorado","Connecticut","Delaware","Florida","Georgia","Hawaii","Idaho","Illinois","Indiana","Iowa","Kansas","Kentucky","Louisiana","Maine","Maryland","Massachusetts","Michigan","Minnesota","Mississippi","Missouri","Montana","Nebraska","Nevada","New Hampshire","New Jersey","New Mexico","New York","North Dakota","North Carolina","Ohio","Oklahoma","Oregon","Pennsylvania","Rhode Island","South Carolina","South Dakota","Tennessee","Texas","Utah","Vermont","Virginia","Washington","West Virginia","Wisconsin","Wyoming"]'> - </div> - <pre class="prettyprint linenums"><input type="text" data-provide="typeahead"></pre> - <p>You'll want to set <code>autocomplete="off"</code> to prevent default browser menus from appearing over the Bootstrap typeahead dropdown.</p> - - <hr class="bs-docs-separator"> - - - <h2>Usage</h2> - - <h3>Via data attributes</h3> - <p>Add data attributes to register an element with typeahead functionality as shown in the example above.</p> - - <h3>Via JavaScript</h3> - <p>Call the typeahead manually with:</p> - <pre class="prettyprint linenums">$('.typeahead').typeahead()</pre> - - <h3>Options</h3> - <p>Options can be passed via data attributes or JavaScript. For data attributes, append the option name to <code>data-</code>, as in <code>data-source=""</code>.</p> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th style="width: 100px;">Name</th> - <th style="width: 50px;">type</th> - <th style="width: 100px;">default</th> - <th>description</th> - </tr> - </thead> - <tbody> - <tr> - <td>source</td> - <td>array, function</td> - <td>[ ]</td> - <td>The data source to query against. May be an array of strings or a function. The function is passed two arguments, the <code>query</code> value in the input field and the <code>process</code> callback. The function may be used synchronously by returning the data source directly or asynchronously via the <code>process</code> callback's single argument.</td> - </tr> - <tr> - <td>items</td> - <td>number</td> - <td>8</td> - <td>The max number of items to display in the dropdown.</td> - </tr> - <tr> - <td>minLength</td> - <td>number</td> - <td>1</td> - <td>The minimum character length needed before triggering autocomplete suggestions</td> - </tr> - <tr> - <td>matcher</td> - <td>function</td> - <td>case insensitive</td> - <td>The method used to determine if a query matches an item. Accepts a single argument, the <code>item</code> against which to test the query. Access the current query with <code>this.query</code>. Return a boolean <code>true</code> if query is a match.</td> - </tr> - <tr> - <td>sorter</td> - <td>function</td> - <td>exact match,<br> case sensitive,<br> case insensitive</td> - <td>Method used to sort autocomplete results. Accepts a single argument <code>items</code> and has the scope of the typeahead instance. Reference the current query with <code>this.query</code>.</td> - </tr> - <tr> - <td>updater</td> - <td>function</td> - <td>returns selected item</td> - <td>The method used to return selected item. Accepts a single argument, the <code>item</code> and has the scope of the typeahead instance.</td> - </tr> - <tr> - <td>highlighter</td> - <td>function</td> - <td>highlights all default matches</td> - <td>Method used to highlight autocomplete results. Accepts a single argument <code>item</code> and has the scope of the typeahead instance. Should return html.</td> - </tr> - </tbody> - </table> - - <h3>Methods</h3> - <h4>.typeahead(options)</h4> - <p>Initializes an input with a typeahead.</p> - </section> - - - - <!-- Affix - ================================================== --> - <section id="affix"> - <div class="page-header"> - <h1>Affix <small>bootstrap-affix.js</small></h1> - </div> - - <h2>Example</h2> - <p>The subnavigation on the left is a live demo of the affix plugin.</p> - - <hr class="bs-docs-separator"> - - <h2>Usage</h2> - - <h3>Via data attributes</h3> - <p>To easily add affix behavior to any element, just add <code>data-spy="affix"</code> to the element you want to spy on. Then use offsets to define when to toggle the pinning of an element on and off.</p> - - <pre class="prettyprint linenums"><div data-spy="affix" data-offset-top="200">...</div></pre> - - <div class="alert alert-info"> - <strong>Heads up!</strong> - You must manage the position of a pinned element and the behavior of its immediate parent. Position is controlled by <code>affix</code>, <code>affix-top</code>, and <code>affix-bottom</code>. Remember to check for a potentially collapsed parent when the affix kicks in as it's removing content from the normal flow of the page. - </div> - - <h3>Via JavaScript</h3> - <p>Call the affix plugin via JavaScript:</p> - <pre class="prettyprint linenums">$('#navbar').affix()</pre> - - <h3>Options</h3> - <p>Options can be passed via data attributes or JavaScript. For data attributes, append the option name to <code>data-</code>, as in <code>data-offset-top="200"</code>.</p> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th style="width: 100px;">Name</th> - <th style="width: 100px;">type</th> - <th style="width: 50px;">default</th> - <th>description</th> - </tr> - </thead> - <tbody> - <tr> - <td>offset</td> - <td>number | function | object</td> - <td>10</td> - <td>Pixels to offset from screen when calculating position of scroll. If a single number is provided, the offset will be applied in both top and left directions. To listen for a single direction, or multiple unique offsets, just provide an object <code>offset: { x: 10 }</code>. Use a function when you need to dynamically provide an offset (useful for some responsive designs).</td> - </tr> - </tbody> - </table> - </section> - - - - </div> - </div> - - </div> - - - - <!-- Footer - ================================================== --> - <footer class="footer"> - <div class="container"> - <p>Designed and built with all the love in the world by <a href="http://twitter.com/mdo" target="_blank">@mdo</a> and <a href="http://twitter.com/fat" target="_blank">@fat</a>.</p> - <p>Code licensed under <a href="http://www.apache.org/licenses/LICENSE-2.0" target="_blank">Apache License v2.0</a>, documentation under <a href="http://creativecommons.org/licenses/by/3.0/">CC BY 3.0</a>.</p> - <p><a href="http://glyphicons.com">Glyphicons Free</a> licensed under <a href="http://creativecommons.org/licenses/by/3.0/">CC BY 3.0</a>.</p> - <ul class="footer-links"> - <li><a href="http://blog.getbootstrap.com">Blog</a></li> - <li class="muted">·</li> - <li><a href="https://github.com/twitter/bootstrap/issues?state=open">Issues</a></li> - <li class="muted">·</li> - <li><a href="https://github.com/twitter/bootstrap/blob/master/CHANGELOG.md">Changelog</a></li> - </ul> - </div> - </footer> - - - - <!-- Le javascript - ================================================== --> - <!-- Placed at the end of the document so the pages load faster --> - <script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> - <script src="assets/js/jquery.js"></script> - <script src="assets/js/bootstrap-transition.js"></script> - <script src="assets/js/bootstrap-alert.js"></script> - <script src="assets/js/bootstrap-modal.js"></script> - <script src="assets/js/bootstrap-dropdown.js"></script> - <script src="assets/js/bootstrap-scrollspy.js"></script> - <script src="assets/js/bootstrap-tab.js"></script> - <script src="assets/js/bootstrap-tooltip.js"></script> - <script src="assets/js/bootstrap-popover.js"></script> - <script src="assets/js/bootstrap-button.js"></script> - <script src="assets/js/bootstrap-collapse.js"></script> - <script src="assets/js/bootstrap-carousel.js"></script> - <script src="assets/js/bootstrap-typeahead.js"></script> - <script src="assets/js/bootstrap-affix.js"></script> - - <script src="assets/js/holder/holder.js"></script> - <script src="assets/js/google-code-prettify/prettify.js"></script> - - <script src="assets/js/application.js"></script> - - - - </body> -</html> diff --git a/src/main/webapp/bower_components/bootstrap/docs/scaffolding.html b/src/main/webapp/bower_components/bootstrap/docs/scaffolding.html deleted file mode 100644 index 87a9bb00..00000000 --- a/src/main/webapp/bower_components/bootstrap/docs/scaffolding.html +++ /dev/null @@ -1,602 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <title>Scaffolding · Bootstrap</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta name="description" content=""> - <meta name="author" content=""> - - <!-- Le styles --> - <link href="assets/css/bootstrap.css" rel="stylesheet"> - <link href="assets/css/bootstrap-responsive.css" rel="stylesheet"> - <link href="assets/css/docs.css" rel="stylesheet"> - <link href="assets/js/google-code-prettify/prettify.css" rel="stylesheet"> - - <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements --> - <!--[if lt IE 9]> - <script src="assets/js/html5shiv.js"></script> - <![endif]--> - - <!-- Le fav and touch icons --> - <link rel="apple-touch-icon-precomposed" sizes="144x144" href="assets/ico/apple-touch-icon-144-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="114x114" href="assets/ico/apple-touch-icon-114-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="72x72" href="assets/ico/apple-touch-icon-72-precomposed.png"> - <link rel="apple-touch-icon-precomposed" href="assets/ico/apple-touch-icon-57-precomposed.png"> - <link rel="shortcut icon" href="assets/ico/favicon.png"> - - </head> - - <body data-spy="scroll" data-target=".bs-docs-sidebar"> - - <!-- Navbar - ================================================== --> - <div class="navbar navbar-inverse navbar-fixed-top"> - <div class="navbar-inner"> - <div class="container"> - <button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - </button> - <a class="brand" href="./index.html">Bootstrap</a> - <div class="nav-collapse collapse"> - <ul class="nav"> - <li class=""> - <a href="./index.html">Home</a> - </li> - <li class=""> - <a href="./getting-started.html">Get started</a> - </li> - <li class="active"> - <a href="./scaffolding.html">Scaffolding</a> - </li> - <li class=""> - <a href="./base-css.html">Base CSS</a> - </li> - <li class=""> - <a href="./components.html">Components</a> - </li> - <li class=""> - <a href="./javascript.html">JavaScript</a> - </li> - <li class=""> - <a href="./customize.html">Customize</a> - </li> - </ul> - </div> - </div> - </div> - </div> - -<!-- Subhead -================================================== --> -<header class="jumbotron subhead" id="overview"> - <div class="container"> - <h1>Scaffolding</h1> - <p class="lead">Bootstrap is built on responsive 12-column grids, layouts, and components.</p> - </div> -</header> - - <div class="container"> - - <!-- Docs nav - ================================================== --> - <div class="row"> - <div class="span3 bs-docs-sidebar"> - <ul class="nav nav-list bs-docs-sidenav"> - <li><a href="#global"><i class="icon-chevron-right"></i> Global styles</a></li> - <li><a href="#gridSystem"><i class="icon-chevron-right"></i> Grid system</a></li> - <li><a href="#fluidGridSystem"><i class="icon-chevron-right"></i> Fluid grid system</a></li> - <li><a href="#layouts"><i class="icon-chevron-right"></i> Layouts</a></li> - <li><a href="#responsive"><i class="icon-chevron-right"></i> Responsive design</a></li> - </ul> - </div> - <div class="span9"> - - - - <!-- Global Bootstrap settings - ================================================== --> - <section id="global"> - <div class="page-header"> - <h1>Global settings</h1> - </div> - - <h3>Requires HTML5 doctype</h3> - <p>Bootstrap makes use of certain HTML elements and CSS properties that require the use of the HTML5 doctype. Include it at the beginning of all your projects.</p> -<pre class="prettyprint linenums"> -<!DOCTYPE html> -<html lang="en"> - ... -</html> -</pre> - - <h3>Typography and links</h3> - <p>Bootstrap sets basic global display, typography, and link styles. Specifically, we:</p> - <ul> - <li>Remove <code>margin</code> on the body</li> - <li>Set <code>background-color: white;</code> on the <code>body</code></li> - <li>Use the <code>@baseFontFamily</code>, <code>@baseFontSize</code>, and <code>@baseLineHeight</code> attributes as our typographic base</li> - <li>Set the global link color via <code>@linkColor</code> and apply link underlines only on <code>:hover</code></li> - </ul> - <p>These styles can be found within <strong>scaffolding.less</strong>.</p> - - <h3>Reset via Normalize</h3> - <p>With Bootstrap 2, the old reset block has been dropped in favor of <a href="http://necolas.github.com/normalize.css/" target="_blank">Normalize.css</a>, a project by <a href="http://twitter.com/necolas" target="_blank">Nicolas Gallagher</a> and <a href="http://twitter.com/jon_neal" target="_blank">Jonathan Neal</a> that also powers the <a href="http://html5boilerplate.com" target="_blank">HTML5 Boilerplate</a>. While we use much of Normalize within our <strong>reset.less</strong>, we have removed some elements specifically for Bootstrap.</p> - - </section> - - - - - <!-- Grid system - ================================================== --> - <section id="gridSystem"> - <div class="page-header"> - <h1>Default grid system</h1> - </div> - - <h2>Live grid example</h2> - <p>The default Bootstrap grid system utilizes <strong>12 columns</strong>, making for a 940px wide container without <a href="./scaffolding.html#responsive">responsive features</a> enabled. With the responsive CSS file added, the grid adapts to be 724px and 1170px wide depending on your viewport. Below 767px viewports, the columns become fluid and stack vertically.</p> - <div class="bs-docs-grid"> - <div class="row show-grid"> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - </div> - <div class="row show-grid"> - <div class="span2">2</div> - <div class="span3">3</div> - <div class="span4">4</div> - </div> - <div class="row show-grid"> - <div class="span4">4</div> - <div class="span5">5</div> - </div> - <div class="row show-grid"> - <div class="span9">9</div> - </div> - </div> - - <h3>Basic grid HTML</h3> - <p>For a simple two column layout, create a <code>.row</code> and add the appropriate number of <code>.span*</code> columns. As this is a 12-column grid, each <code>.span*</code> spans a number of those 12 columns, and should always add up to 12 for each row (or the number of columns in the parent).</p> -<pre class="prettyprint linenums"> -<div class="row"> - <div class="span4">...</div> - <div class="span8">...</div> -</div> -</pre> - <p>Given this example, we have <code>.span4</code> and <code>.span8</code>, making for 12 total columns and a complete row.</p> - - <h2>Offsetting columns</h2> - <p>Move columns to the right using <code>.offset*</code> classes. Each class increases the left margin of a column by a whole column. For example, <code>.offset4</code> moves <code>.span4</code> over four columns.</p> - <div class="bs-docs-grid"> - <div class="row show-grid"> - <div class="span4">4</div> - <div class="span3 offset2">3 offset 2</div> - </div><!-- /row --> - <div class="row show-grid"> - <div class="span3 offset1">3 offset 1</div> - <div class="span3 offset2">3 offset 2</div> - </div><!-- /row --> - <div class="row show-grid"> - <div class="span6 offset3">6 offset 3</div> - </div><!-- /row --> - </div> -<pre class="prettyprint linenums"> -<div class="row"> - <div class="span4">...</div> - <div class="span3 offset2">...</div> -</div> -</pre> - - <h2>Nesting columns</h2> - <p>To nest your content with the default grid, add a new <code>.row</code> and set of <code>.span*</code> columns within an existing <code>.span*</code> column. Nested rows should include a set of columns that add up to the number of columns of its parent.</p> - <div class="row show-grid"> - <div class="span9"> - Level 1 column - <div class="row show-grid"> - <div class="span6"> - Level 2 - </div> - <div class="span3"> - Level 2 - </div> - </div> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="row"> - <div class="span9"> - Level 1 column - <div class="row"> - <div class="span6">Level 2</div> - <div class="span3">Level 2</div> - </div> - </div> -</div> -</pre> - </section> - - - - <!-- Fluid grid system - ================================================== --> - <section id="fluidGridSystem"> - <div class="page-header"> - <h1>Fluid grid system</h1> - </div> - - <h2>Live fluid grid example</h2> - <p>The fluid grid system uses percents instead of pixels for column widths. It has the same responsive capabilities as our fixed grid system, ensuring proper proportions for key screen resolutions and devices.</p> - <div class="bs-docs-grid"> - <div class="row-fluid show-grid"> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - </div> - <div class="row-fluid show-grid"> - <div class="span4">4</div> - <div class="span4">4</div> - <div class="span4">4</div> - </div> - <div class="row-fluid show-grid"> - <div class="span4">4</div> - <div class="span8">8</div> - </div> - <div class="row-fluid show-grid"> - <div class="span6">6</div> - <div class="span6">6</div> - </div> - <div class="row-fluid show-grid"> - <div class="span12">12</div> - </div> - </div> - - <h3>Basic fluid grid HTML</h3> - <p>Make any row "fluid" by changing <code>.row</code> to <code>.row-fluid</code>. The column classes stay the exact same, making it easy to flip between fixed and fluid grids.</p> -<pre class="prettyprint linenums"> -<div class="row-fluid"> - <div class="span4">...</div> - <div class="span8">...</div> -</div> -</pre> - - <h2>Fluid offsetting</h2> - <p>Operates the same way as the fixed grid system offsetting: add <code>.offset*</code> to any column to offset by that many columns.</p> - <div class="bs-docs-grid"> - <div class="row-fluid show-grid"> - <div class="span4">4</div> - <div class="span4 offset4">4 offset 4</div> - </div><!-- /row --> - <div class="row-fluid show-grid"> - <div class="span3 offset3">3 offset 3</div> - <div class="span3 offset3">3 offset 3</div> - </div><!-- /row --> - <div class="row-fluid show-grid"> - <div class="span6 offset6">6 offset 6</div> - </div><!-- /row --> - </div> -<pre class="prettyprint linenums"> -<div class="row-fluid"> - <div class="span4">...</div> - <div class="span4 offset2">...</div> -</div> -</pre> - - <h2>Fluid nesting</h2> - <p>Fluid grids utilize nesting differently: each nested level of columns should add up to 12 columns. This is because the fluid grid uses percentages, not pixels, for setting widths.</p> - <div class="row-fluid show-grid"> - <div class="span12"> - Fluid 12 - <div class="row-fluid show-grid"> - <div class="span6"> - Fluid 6 - <div class="row-fluid show-grid"> - <div class="span6"> - Fluid 6 - </div> - <div class="span6"> - Fluid 6 - </div> - </div> - </div> - <div class="span6"> - Fluid 6 - </div> - </div> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="row-fluid"> - <div class="span12"> - Fluid 12 - <div class="row-fluid"> - <div class="span6"> - Fluid 6 - <div class="row-fluid"> - <div class="span6">Fluid 6</div> - <div class="span6">Fluid 6</div> - </div> - </div> - <div class="span6">Fluid 6</div> - </div> - </div> -</div> -</pre> - - </section> - - - - - <!-- Layouts (Default and fluid) - ================================================== --> - <section id="layouts"> - <div class="page-header"> - <h1>Layouts</h1> - </div> - - <h2>Fixed layout</h2> - <p>Provides a common fixed-width (and optionally responsive) layout with only <code><div class="container"></code> required.</p> - <div class="mini-layout"> - <div class="mini-layout-body"></div> - </div> -<pre class="prettyprint linenums"> -<body> - <div class="container"> - ... - </div> -</body> -</pre> - - <h2>Fluid layout</h2> - <p>Create a fluid, two-column page with <code><div class="container-fluid"></code>—great for applications and docs.</p> - <div class="mini-layout fluid"> - <div class="mini-layout-sidebar"></div> - <div class="mini-layout-body"></div> - </div> -<pre class="prettyprint linenums"> -<div class="container-fluid"> - <div class="row-fluid"> - <div class="span2"> - <!--Sidebar content--> - </div> - <div class="span10"> - <!--Body content--> - </div> - </div> -</div> -</pre> - </section> - - - - - <!-- Responsive design - ================================================== --> - <section id="responsive"> - <div class="page-header"> - <h1>Responsive design</h1> - </div> - - <h2>Enabling responsive features</h2> - <p>Turn on responsive CSS in your project by including the proper meta tag and additional stylesheet within the <code><head></code> of your document. If you've compiled Bootstrap from the Customize page, you need only include the meta tag.</p> -<pre class="prettyprint linenums"> -<meta name="viewport" content="width=device-width, initial-scale=1.0"> -<link href="assets/css/bootstrap-responsive.css" rel="stylesheet"> -</pre> - <p><span class="label label-info">Heads up!</span> Bootstrap doesn't include responsive features by default at this time as not everything needs to be responsive. Instead of encouraging developers to remove this feature, we figure it best to enable it as needed.</p> - - <h2>About responsive Bootstrap</h2> - <img src="assets/img/responsive-illustrations.png" alt="Responsive devices" style="float: right; margin: 0 0 20px 20px;"> - <p>Media queries allow for custom CSS based on a number of conditions—ratios, widths, display type, etc—but usually focuses around <code>min-width</code> and <code>max-width</code>.</p> - <ul> - <li>Modify the width of column in our grid</li> - <li>Stack elements instead of float wherever necessary</li> - <li>Resize headings and text to be more appropriate for devices</li> - </ul> - <p>Use media queries responsibly and only as a start to your mobile audiences. For larger projects, do consider dedicated code bases and not layers of media queries.</p> - - <h2>Supported devices</h2> - <p>Bootstrap supports a handful of media queries in a single file to help make your projects more appropriate on different devices and screen resolutions. Here's what's included:</p> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th>Label</th> - <th>Layout width</th> - <th>Column width</th> - <th>Gutter width</th> - </tr> - </thead> - <tbody> - <tr> - <td>Large display</td> - <td>1200px and up</td> - <td>70px</td> - <td>30px</td> - </tr> - <tr> - <td>Default</td> - <td>980px and up</td> - <td>60px</td> - <td>20px</td> - </tr> - <tr> - <td>Portrait tablets</td> - <td>768px and above</td> - <td>42px</td> - <td>20px</td> - </tr> - <tr> - <td>Phones to tablets</td> - <td>767px and below</td> - <td class="muted" colspan="2">Fluid columns, no fixed widths</td> - </tr> - <tr> - <td>Phones</td> - <td>480px and below</td> - <td class="muted" colspan="2">Fluid columns, no fixed widths</td> - </tr> - </tbody> - </table> -<pre class="prettyprint linenums"> -/* Large desktop */ -@media (min-width: 1200px) { ... } - -/* Portrait tablet to landscape and desktop */ -@media (min-width: 768px) and (max-width: 979px) { ... } - -/* Landscape phone to portrait tablet */ -@media (max-width: 767px) { ... } - -/* Landscape phones and down */ -@media (max-width: 480px) { ... } -</pre> - - - <h2>Responsive utility classes</h2> - <p>For faster mobile-friendly development, use these utility classes for showing and hiding content by device. Below is a table of the available classes and their effect on a given media query layout (labeled by device). They can be found in <code>responsive.less</code>.</p> - <table class="table table-bordered table-striped responsive-utilities"> - <thead> - <tr> - <th>Class</th> - <th>Phones <small>767px and below</small></th> - <th>Tablets <small>979px to 768px</small></th> - <th>Desktops <small>Default</small></th> - </tr> - </thead> - <tbody> - <tr> - <th><code>.visible-phone</code></th> - <td class="is-visible">Visible</td> - <td class="is-hidden">Hidden</td> - <td class="is-hidden">Hidden</td> - </tr> - <tr> - <th><code>.visible-tablet</code></th> - <td class="is-hidden">Hidden</td> - <td class="is-visible">Visible</td> - <td class="is-hidden">Hidden</td> - </tr> - <tr> - <th><code>.visible-desktop</code></th> - <td class="is-hidden">Hidden</td> - <td class="is-hidden">Hidden</td> - <td class="is-visible">Visible</td> - </tr> - <tr> - <th><code>.hidden-phone</code></th> - <td class="is-hidden">Hidden</td> - <td class="is-visible">Visible</td> - <td class="is-visible">Visible</td> - </tr> - <tr> - <th><code>.hidden-tablet</code></th> - <td class="is-visible">Visible</td> - <td class="is-hidden">Hidden</td> - <td class="is-visible">Visible</td> - </tr> - <tr> - <th><code>.hidden-desktop</code></th> - <td class="is-visible">Visible</td> - <td class="is-visible">Visible</td> - <td class="is-hidden">Hidden</td> - </tr> - </tbody> - </table> - - <h3>When to use</h3> - <p>Use on a limited basis and avoid creating entirely different versions of the same site. Instead, use them to complement each device's presentation. Responsive utilities should not be used with tables, and as such are not supported.</p> - - <h3>Responsive utilities test case</h3> - <p>Resize your browser or load on different devices to test the above classes.</p> - <h4>Visible on...</h4> - <p>Green checkmarks indicate that class is visible in your current viewport.</p> - <ul class="responsive-utilities-test"> - <li>Phone<span class="visible-phone">✔ Phone</span></li> - <li>Tablet<span class="visible-tablet">✔ Tablet</span></li> - <li>Desktop<span class="visible-desktop">✔ Desktop</span></li> - </ul> - <h4>Hidden on...</h4> - <p>Here, green checkmarks indicate that class is hidden in your current viewport.</p> - <ul class="responsive-utilities-test hidden-on"> - <li>Phone<span class="hidden-phone">✔ Phone</span></li> - <li>Tablet<span class="hidden-tablet">✔ Tablet</span></li> - <li>Desktop<span class="hidden-desktop">✔ Desktop</span></li> - </ul> - - </section> - - - - </div> - </div> - - </div> - - - - <!-- Footer - ================================================== --> - <footer class="footer"> - <div class="container"> - <p>Designed and built with all the love in the world by <a href="http://twitter.com/mdo" target="_blank">@mdo</a> and <a href="http://twitter.com/fat" target="_blank">@fat</a>.</p> - <p>Code licensed under <a href="http://www.apache.org/licenses/LICENSE-2.0" target="_blank">Apache License v2.0</a>, documentation under <a href="http://creativecommons.org/licenses/by/3.0/">CC BY 3.0</a>.</p> - <p><a href="http://glyphicons.com">Glyphicons Free</a> licensed under <a href="http://creativecommons.org/licenses/by/3.0/">CC BY 3.0</a>.</p> - <ul class="footer-links"> - <li><a href="http://blog.getbootstrap.com">Blog</a></li> - <li class="muted">·</li> - <li><a href="https://github.com/twitter/bootstrap/issues?state=open">Issues</a></li> - <li class="muted">·</li> - <li><a href="https://github.com/twitter/bootstrap/blob/master/CHANGELOG.md">Changelog</a></li> - </ul> - </div> - </footer> - - - - <!-- Le javascript - ================================================== --> - <!-- Placed at the end of the document so the pages load faster --> - <script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> - <script src="assets/js/jquery.js"></script> - <script src="assets/js/bootstrap-transition.js"></script> - <script src="assets/js/bootstrap-alert.js"></script> - <script src="assets/js/bootstrap-modal.js"></script> - <script src="assets/js/bootstrap-dropdown.js"></script> - <script src="assets/js/bootstrap-scrollspy.js"></script> - <script src="assets/js/bootstrap-tab.js"></script> - <script src="assets/js/bootstrap-tooltip.js"></script> - <script src="assets/js/bootstrap-popover.js"></script> - <script src="assets/js/bootstrap-button.js"></script> - <script src="assets/js/bootstrap-collapse.js"></script> - <script src="assets/js/bootstrap-carousel.js"></script> - <script src="assets/js/bootstrap-typeahead.js"></script> - <script src="assets/js/bootstrap-affix.js"></script> - - <script src="assets/js/holder/holder.js"></script> - <script src="assets/js/google-code-prettify/prettify.js"></script> - - <script src="assets/js/application.js"></script> - - - - </body> -</html> diff --git a/src/main/webapp/bower_components/bootstrap/docs/templates/layout.mustache b/src/main/webapp/bower_components/bootstrap/docs/templates/layout.mustache deleted file mode 100644 index 993b4462..00000000 --- a/src/main/webapp/bower_components/bootstrap/docs/templates/layout.mustache +++ /dev/null @@ -1,151 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <title>{{title}}</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta name="description" content=""> - <meta name="author" content=""> - - <!-- Le styles --> - <link href="assets/css/bootstrap.css" rel="stylesheet"> - <link href="assets/css/bootstrap-responsive.css" rel="stylesheet"> - <link href="assets/css/docs.css" rel="stylesheet"> - <link href="assets/js/google-code-prettify/prettify.css" rel="stylesheet"> - - <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements --> - <!--[if lt IE 9]> - <script src="assets/js/html5shiv.js"></script> - <![endif]--> - - <!-- Le fav and touch icons --> - <link rel="apple-touch-icon-precomposed" sizes="144x144" href="assets/ico/apple-touch-icon-144-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="114x114" href="assets/ico/apple-touch-icon-114-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="72x72" href="assets/ico/apple-touch-icon-72-precomposed.png"> - <link rel="apple-touch-icon-precomposed" href="assets/ico/apple-touch-icon-57-precomposed.png"> - <link rel="shortcut icon" href="assets/ico/favicon.png"> - - {{#production}} - <script type="text/javascript"> - var _gaq = _gaq || []; - _gaq.push(['_setAccount', 'UA-146052-10']); - _gaq.push(['_trackPageview']); - (function() { - var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; - ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; - var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); - })(); - </script> - {{/production}} - </head> - - <body data-spy="scroll" data-target=".bs-docs-sidebar"> - - <!-- Navbar - ================================================== --> - <div class="navbar navbar-inverse navbar-fixed-top"> - <div class="navbar-inner"> - <div class="container"> - <button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - </button> - <a class="brand" href="./index.html">Bootstrap</a> - <div class="nav-collapse collapse"> - <ul class="nav"> - <li class="{{index}}"> - <a href="./index.html">{{_i}}Home{{/i}}</a> - </li> - <li class="{{getting-started}}"> - <a href="./getting-started.html">{{_i}}Get started{{/i}}</a> - </li> - <li class="{{scaffolding}}"> - <a href="./scaffolding.html">{{_i}}Scaffolding{{/i}}</a> - </li> - <li class="{{base-css}}"> - <a href="./base-css.html">{{_i}}Base CSS{{/i}}</a> - </li> - <li class="{{components}}"> - <a href="./components.html">{{_i}}Components{{/i}}</a> - </li> - <li class="{{javascript}}"> - <a href="./javascript.html">{{_i}}JavaScript{{/i}}</a> - </li> - <li class="{{customize}}"> - <a href="./customize.html">{{_i}}Customize{{/i}}</a> - </li> - </ul> - </div> - </div> - </div> - </div> - -{{>body}} - - - - <!-- Footer - ================================================== --> - <footer class="footer"> - <div class="container"> - <p>{{_i}}Designed and built with all the love in the world by <a href="http://twitter.com/mdo" target="_blank">@mdo</a> and <a href="http://twitter.com/fat" target="_blank">@fat</a>.{{/i}}</p> - <p>{{_i}}Code licensed under <a href="http://www.apache.org/licenses/LICENSE-2.0" target="_blank">Apache License v2.0</a>, documentation under <a href="http://creativecommons.org/licenses/by/3.0/">CC BY 3.0</a>.{{/i}}</p> - <p>{{_i}}<a href="http://glyphicons.com">Glyphicons Free</a> licensed under <a href="http://creativecommons.org/licenses/by/3.0/">CC BY 3.0</a>.{{/i}}</p> - <ul class="footer-links"> - <li><a href="http://blog.getbootstrap.com">{{_i}}Blog{{/i}}</a></li> - <li class="muted">·</li> - <li><a href="https://github.com/twitter/bootstrap/issues?state=open">{{_i}}Issues{{/i}}</a></li> - <li class="muted">·</li> - <li><a href="https://github.com/twitter/bootstrap/blob/master/CHANGELOG.md">{{_i}}Changelog{{/i}}</a></li> - </ul> - </div> - </footer> - - - - <!-- Le javascript - ================================================== --> - <!-- Placed at the end of the document so the pages load faster --> - <script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> - <script src="assets/js/jquery.js"></script> - <script src="assets/js/bootstrap-transition.js"></script> - <script src="assets/js/bootstrap-alert.js"></script> - <script src="assets/js/bootstrap-modal.js"></script> - <script src="assets/js/bootstrap-dropdown.js"></script> - <script src="assets/js/bootstrap-scrollspy.js"></script> - <script src="assets/js/bootstrap-tab.js"></script> - <script src="assets/js/bootstrap-tooltip.js"></script> - <script src="assets/js/bootstrap-popover.js"></script> - <script src="assets/js/bootstrap-button.js"></script> - <script src="assets/js/bootstrap-collapse.js"></script> - <script src="assets/js/bootstrap-carousel.js"></script> - <script src="assets/js/bootstrap-typeahead.js"></script> - <script src="assets/js/bootstrap-affix.js"></script> - - <script src="assets/js/holder/holder.js"></script> - <script src="assets/js/google-code-prettify/prettify.js"></script> - - <script src="assets/js/application.js"></script> - - - {{#production}} - <!-- Analytics - ================================================== --> - <script> - var _gauges = _gauges || []; - (function() { - var t = document.createElement('script'); - t.type = 'text/javascript'; - t.async = true; - t.id = 'gauges-tracker'; - t.setAttribute('data-site-id', '4f0dc9fef5a1f55508000013'); - t.src = '//secure.gaug.es/track.js'; - var s = document.getElementsByTagName('script')[0]; - s.parentNode.insertBefore(t, s); - })(); - </script> - {{/production}} - - </body> -</html> diff --git a/src/main/webapp/bower_components/bootstrap/docs/templates/pages/base-css.mustache b/src/main/webapp/bower_components/bootstrap/docs/templates/pages/base-css.mustache deleted file mode 100644 index 1f40f371..00000000 --- a/src/main/webapp/bower_components/bootstrap/docs/templates/pages/base-css.mustache +++ /dev/null @@ -1,2102 +0,0 @@ -<!-- Subhead -================================================== --> -<header class="jumbotron subhead" id="overview"> - <div class="container"> - <h1>{{_i}}Base CSS{{/i}}</h1> - <p class="lead">{{_i}}Fundamental HTML elements styled and enhanced with extensible classes.{{/i}}</p> - </div> -</header> - - - <div class="container"> - - <!-- Docs nav - ================================================== --> - <div class="row"> - <div class="span3 bs-docs-sidebar"> - <ul class="nav nav-list bs-docs-sidenav"> - <li><a href="#typography"><i class="icon-chevron-right"></i> {{_i}}Typography{{/i}}</a></li> - <li><a href="#code"><i class="icon-chevron-right"></i> {{_i}}Code{{/i}}</a></li> - <li><a href="#tables"><i class="icon-chevron-right"></i> {{_i}}Tables{{/i}}</a></li> - <li><a href="#forms"><i class="icon-chevron-right"></i> {{_i}}Forms{{/i}}</a></li> - <li><a href="#buttons"><i class="icon-chevron-right"></i> {{_i}}Buttons{{/i}}</a></li> - <li><a href="#images"><i class="icon-chevron-right"></i> {{_i}}Images{{/i}}</a></li> - <li><a href="#icons"><i class="icon-chevron-right"></i> {{_i}}Icons by Glyphicons{{/i}}</a></li> - </ul> - </div> - <div class="span9"> - - - - <!-- Typography - ================================================== --> - <section id="typography"> - <div class="page-header"> - <h1>{{_i}}Typography{{/i}}</h1> - </div> - - {{! Headings }} - <h2 id="headings">{{_i}}Headings{{/i}}</h2> - <p>{{_i}}All HTML headings, <code><h1></code> through <code><h6></code> are available.{{/i}}</p> - <div class="bs-docs-example"> - <h1>h1. {{_i}}Heading 1{{/i}}</h1> - <h2>h2. {{_i}}Heading 2{{/i}}</h2> - <h3>h3. {{_i}}Heading 3{{/i}}</h3> - <h4>h4. {{_i}}Heading 4{{/i}}</h4> - <h5>h5. {{_i}}Heading 5{{/i}}</h5> - <h6>h6. {{_i}}Heading 6{{/i}}</h6> - </div> - - {{! Body copy }} - <h2 id="body-copy">{{_i}}Body copy{{/i}}</h2> - <p>{{_i}}Bootstrap's global default <code>font-size</code> is <strong>14px</strong>, with a <code>line-height</code> of <strong>20px</strong>. This is applied to the <code><body></code> and all paragraphs. In addition, <code><p></code> (paragraphs) receive a bottom margin of half their line-height (10px by default).{{/i}}</p> - <div class="bs-docs-example"> - <p>Nullam quis risus eget urna mollis ornare vel eu leo. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nullam id dolor id nibh ultricies vehicula.</p> - <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec ullamcorper nulla non metus auctor fringilla. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Donec ullamcorper nulla non metus auctor fringilla.</p> - <p>Maecenas sed diam eget risus varius blandit sit amet non magna. Donec id elit non mi porta gravida at eget metus. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit.</p> - </div> - <pre class="prettyprint"><p>...</p></pre> - - {{! Body copy .lead }} - <h3>{{_i}}Lead body copy{{/i}}</h3> - <p>{{_i}}Make a paragraph stand out by adding <code>.lead</code>.{{/i}}</p> - <div class="bs-docs-example"> - <p class="lead">Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Duis mollis, est non commodo luctus.</p> - </div> - <pre class="prettyprint"><p class="lead">...</p></pre> - - {{! Using LESS }} - <h3>{{_i}}Built with Less{{/i}}</h3> - <p>{{_i}}The typographic scale is based on two LESS variables in <strong>variables.less</strong>: <code>@baseFontSize</code> and <code>@baseLineHeight</code>. The first is the base font-size used throughout and the second is the base line-height. We use those variables and some simple math to create the margins, paddings, and line-heights of all our type and more. Customize them and Bootstrap adapts.{{/i}}</p> - - - <hr class="bs-docs-separator"> - - - {{! Emphasis }} - <h2 id="emphasis">{{_i}}Emphasis{{/i}}</h2> - <p>{{_i}}Make use of HTML's default emphasis tags with lightweight styles.{{/i}}</p> - - <h3><code><small></code></h3> - <p>{{_i}}For de-emphasizing inline or blocks of text, <small>use the small tag.</small>{{/i}}</p> - <div class="bs-docs-example"> - <p><small>This line of text is meant to be treated as fine print.</small></p> - </div> -<pre class="prettyprint"> -<p> - <small>This line of text is meant to be treated as fine print.</small> -</p> -</pre> - - <h3>{{_i}}Bold{{/i}}</h3> - <p>{{_i}}For emphasizing a snippet of text with a heavier font-weight.{{/i}}</p> - <div class="bs-docs-example"> - <p>The following snippet of text is <strong>rendered as bold text</strong>.</p> - </div> - <pre class="prettyprint"><strong>rendered as bold text</strong></pre> - - <h3>{{_i}}Italics{{/i}}</h3> - <p>{{_i}}For emphasizing a snippet of text with italics.{{/i}}</p> - <div class="bs-docs-example"> - <p>The following snippet of text is <em>rendered as italicized text</em>.</p> - </div> - <pre class="prettyprint"><em>rendered as italicized text</em></pre> - - <p><span class="label label-info">{{_i}}Heads up!{{/i}}</span> {{_i}}Feel free to use <code><b></code> and <code><i></code> in HTML5. <code><b></code> is meant to highlight words or phrases without conveying additional importance while <code><i></code> is mostly for voice, technical terms, etc.{{/i}}</p> - - <h3>{{_i}}Alignment classes{{/i}}</h3> - <p>{{_i}}Easily realign text to components with text alignment classes.{{/i}}</p> - <div class="bs-docs-example"> - <p class="text-left">Left aligned text.</p> - <p class="text-center">Center aligned text.</p> - <p class="text-right">Right aligned text.</p> - </div> -<pre class="prettyprint linenums"> -<p class="text-left">Left aligned text.</p> -<p class="text-center">Center aligned text.</p> -<p class="text-right">Right aligned text.</p> -</pre> - - <h3>{{_i}}Emphasis classes{{/i}}</h3> - <p>{{_i}}Convey meaning through color with a handful of emphasis utility classes.{{/i}}</p> - <div class="bs-docs-example"> - <p class="muted">Fusce dapibus, tellus ac cursus commodo, tortor mauris nibh.</p> - <p class="text-warning">Etiam porta sem malesuada magna mollis euismod.</p> - <p class="text-error">Donec ullamcorper nulla non metus auctor fringilla.</p> - <p class="text-info">Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis.</p> - <p class="text-success">Duis mollis, est non commodo luctus, nisi erat porttitor ligula.</p> - </div> -<pre class="prettyprint linenums"> -<p class="muted">Fusce dapibus, tellus ac cursus commodo, tortor mauris nibh.</p> -<p class="text-warning">Etiam porta sem malesuada magna mollis euismod.</p> -<p class="text-error">Donec ullamcorper nulla non metus auctor fringilla.</p> -<p class="text-info">Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis.</p> -<p class="text-success">Duis mollis, est non commodo luctus, nisi erat porttitor ligula.</p> -</pre> - - - <hr class="bs-docs-separator"> - - - {{! Abbreviations }} - <h2 id="abbreviations">{{_i}}Abbreviations{{/i}}</h2> - <p>{{_i}}Stylized implementation of HTML's <code><abbr></code> element for abbreviations and acronyms to show the expanded version on hover. Abbreviations with a <code>title</code> attribute have a light dotted bottom border and a help cursor on hover, providing additional context on hover.{{/i}}</p> - - <h3><code><abbr></code></h3> - <p>{{_i}}For expanded text on long hover of an abbreviation, include the <code>title</code> attribute.{{/i}}</p> - <div class="bs-docs-example"> - <p>{{_i}}An abbreviation of the word attribute is <abbr title="attribute">attr</abbr>.{{/i}}</p> - </div> - <pre class="prettyprint"><abbr title="attribute">attr</abbr></pre> - - <h3><code><abbr class="initialism"></code></h3> - <p>{{_i}}Add <code>.initialism</code> to an abbreviation for a slightly smaller font-size.{{/i}}</p> - <div class="bs-docs-example"> - <p>{{_i}}<abbr title="HyperText Markup Language" class="initialism">HTML</abbr> is the best thing since sliced bread.{{/i}}</p> - </div> - <pre class="prettyprint"><abbr title="HyperText Markup Language" class="initialism">HTML</abbr></pre> - - - <hr class="bs-docs-separator"> - - - {{! Addresses }} - <h2 id="addresses">{{_i}}Addresses{{/i}}</h2> - <p>{{_i}}Present contact information for the nearest ancestor or the entire body of work.{{/i}}</p> - - <h3><code><address></code></h3> - <p>{{_i}}Preserve formatting by ending all lines with <code><br></code>.{{/i}}</p> - <div class="bs-docs-example"> - <address> - <strong>Twitter, Inc.</strong><br> - 795 Folsom Ave, Suite 600<br> - San Francisco, CA 94107<br> - <abbr title="Phone">P:</abbr> (123) 456-7890 - </address> - <address> - <strong>{{_i}}Full Name{{/i}}</strong><br> - <a href="mailto:#">{{_i}}first.last@example.com{{/i}}</a> - </address> - </div> -<pre class="prettyprint linenums"> -<address> - <strong>Twitter, Inc.</strong><br> - 795 Folsom Ave, Suite 600<br> - San Francisco, CA 94107<br> - <abbr title="Phone">P:</abbr> (123) 456-7890 -</address> - -<address> - <strong>{{_i}}Full Name{{/i}}</strong><br> - <a href="mailto:#">{{_i}}first.last@example.com{{/i}}</a> -</address> -</pre> - - - <hr class="bs-docs-separator"> - - - {{! Blockquotes }} - <h2 id="blockquotes">{{_i}}Blockquotes{{/i}}</h2> - <p>{{_i}}For quoting blocks of content from another source within your document.{{/i}}</p> - - <h3>{{_i}}Default blockquote{{/i}}</h3> - <p>{{_i}}Wrap <code><blockquote></code> around any <abbr title="HyperText Markup Language">HTML</abbr> as the quote. For straight quotes we recommend a <code><p></code>.{{/i}}</p> - <div class="bs-docs-example"> - <blockquote> - <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p> - </blockquote> - </div> -<pre class="prettyprint linenums"> -<blockquote> - <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p> -</blockquote> -</pre> - - <h3>{{_i}}Blockquote options{{/i}}</h3> - <p>{{_i}}Style and content changes for simple variations on a standard blockquote.{{/i}}</p> - - <h4>{{_i}}Naming a source{{/i}}</h4> - <p>{{_i}}Add <code><small></code> tag for identifying the source. Wrap the name of the source work in <code><cite></code>.{{/i}}</p> - <div class="bs-docs-example"> - <blockquote> - <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p> - <small>{{_i}}Someone famous in <cite title="Source Title">Source Title</cite>{{/i}}</small> - </blockquote> - </div> -<pre class="prettyprint linenums"> -<blockquote> - <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p> - <small>{{_i}}Someone famous <cite title="Source Title">Source Title</cite>{{/i}}</small> -</blockquote> -</pre> - - <h4>{{_i}}Alternate displays{{/i}}</h4> - <p>{{_i}}Use <code>.pull-right</code> for a floated, right-aligned blockquote.{{/i}}</p> - <div class="bs-docs-example" style="overflow: hidden;"> - <blockquote class="pull-right"> - <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p> - <small>{{_i}}Someone famous in <cite title="Source Title">Source Title</cite>{{/i}}</small> - </blockquote> - </div> -<pre class="prettyprint linenums"> -<blockquote class="pull-right"> - ... -</blockquote> -</pre> - - - <hr class="bs-docs-separator"> - - - <!-- Lists --> - <h2 id="lists">{{_i}}Lists{{/i}}</h2> - - <h3>{{_i}}Unordered{{/i}}</h3> - <p>{{_i}}A list of items in which the order does <em>not</em> explicitly matter.{{/i}}</p> - <div class="bs-docs-example"> - <ul> - <li>Lorem ipsum dolor sit amet</li> - <li>Consectetur adipiscing elit</li> - <li>Integer molestie lorem at massa</li> - <li>Facilisis in pretium nisl aliquet</li> - <li>Nulla volutpat aliquam velit - <ul> - <li>Phasellus iaculis neque</li> - <li>Purus sodales ultricies</li> - <li>Vestibulum laoreet porttitor sem</li> - <li>Ac tristique libero volutpat at</li> - </ul> - </li> - <li>Faucibus porta lacus fringilla vel</li> - <li>Aenean sit amet erat nunc</li> - <li>Eget porttitor lorem</li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul> - <li>...</li> -</ul> -</pre> - - <h3>{{_i}}Ordered{{/i}}</h3> - <p>{{_i}}A list of items in which the order <em>does</em> explicitly matter.{{/i}}</p> - <div class="bs-docs-example"> - <ol> - <li>Lorem ipsum dolor sit amet</li> - <li>Consectetur adipiscing elit</li> - <li>Integer molestie lorem at massa</li> - <li>Facilisis in pretium nisl aliquet</li> - <li>Nulla volutpat aliquam velit</li> - <li>Faucibus porta lacus fringilla vel</li> - <li>Aenean sit amet erat nunc</li> - <li>Eget porttitor lorem</li> - </ol> - </div> -<pre class="prettyprint linenums"> -<ol> - <li>...</li> -</ol> -</pre> - - <h3>{{_i}}Unstyled{{/i}}</h3> - <p>{{_i}}Remove the default <code>list-style</code> and left padding on list items (immediate children only).{{/i}}</p> - <div class="bs-docs-example"> - <ul class="unstyled"> - <li>Lorem ipsum dolor sit amet</li> - <li>Consectetur adipiscing elit</li> - <li>Integer molestie lorem at massa</li> - <li>Facilisis in pretium nisl aliquet</li> - <li>Nulla volutpat aliquam velit - <ul> - <li>Phasellus iaculis neque</li> - <li>Purus sodales ultricies</li> - <li>Vestibulum laoreet porttitor sem</li> - <li>Ac tristique libero volutpat at</li> - </ul> - </li> - <li>Faucibus porta lacus fringilla vel</li> - <li>Aenean sit amet erat nunc</li> - <li>Eget porttitor lorem</li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="unstyled"> - <li>...</li> -</ul> -</pre> - - <h3>{{_i}}Inline{{/i}}</h3> - <p>{{_i}}Place all list items on a single line with <code>inline-block</code> and some light padding.{{/i}}</p> - <div class="bs-docs-example"> - <ul class="inline"> - <li>Lorem ipsum</li> - <li>Phasellus iaculis</li> - <li>Nulla volutpat</li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="inline"> - <li>...</li> -</ul> -</pre> - - <h3>{{_i}}Description{{/i}}</h3> - <p>{{_i}}A list of terms with their associated descriptions.{{/i}}</p> - <div class="bs-docs-example"> - <dl> - <dt>{{_i}}Description lists{{/i}}</dt> - <dd>{{_i}}A description list is perfect for defining terms.{{/i}}</dd> - <dt>Euismod</dt> - <dd>Vestibulum id ligula porta felis euismod semper eget lacinia odio sem nec elit.</dd> - <dd>Donec id elit non mi porta gravida at eget metus.</dd> - <dt>Malesuada porta</dt> - <dd>Etiam porta sem malesuada magna mollis euismod.</dd> - </dl> - </div> -<pre class="prettyprint linenums"> -<dl> - <dt>...</dt> - <dd>...</dd> -</dl> -</pre> - - <h4>{{_i}}Horizontal description{{/i}}</h4> - <p>{{_i}}Make terms and descriptions in <code><dl></code> line up side-by-side.{{/i}}</p> - <div class="bs-docs-example"> - <dl class="dl-horizontal"> - <dt>{{_i}}Description lists{{/i}}</dt> - <dd>{{_i}}A description list is perfect for defining terms.{{/i}}</dd> - <dt>Euismod</dt> - <dd>Vestibulum id ligula porta felis euismod semper eget lacinia odio sem nec elit.</dd> - <dd>Donec id elit non mi porta gravida at eget metus.</dd> - <dt>Malesuada porta</dt> - <dd>Etiam porta sem malesuada magna mollis euismod.</dd> - <dt>Felis euismod semper eget lacinia</dt> - <dd>Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</dd> - </dl> - </div> -<pre class="prettyprint linenums"> -<dl class="dl-horizontal"> - <dt>...</dt> - <dd>...</dd> -</dl> -</pre> - <p> - <span class="label label-info">{{_i}}Heads up!{{/i}}</span> - {{_i}}Horizontal description lists will truncate terms that are too long to fit in the left column fix <code>text-overflow</code>. In narrower viewports, they will change to the default stacked layout.{{/i}} - </p> - </section> - - - - <!-- Code - ================================================== --> - <section id="code"> - <div class="page-header"> - <h1>{{_i}}Code{{/i}}</h1> - </div> - - <h2>Inline</h2> - <p>Wrap inline snippets of code with <code><code></code>.</p> -<div class="bs-docs-example"> - For example, <code><section></code> should be wrapped as inline. -</div> -<pre class="prettyprint linenums"> -{{_i}}For example, <code>&lt;section&gt;</code> should be wrapped as inline.{{/i}} -</pre> - - <h2>Basic block</h2> - <p>{{_i}}Use <code><pre></code> for multiple lines of code. Be sure to escape any angle brackets in the code for proper rendering.{{/i}}</p> -<div class="bs-docs-example"> - <pre><p>{{_i}}Sample text here...{{/i}}</p></pre> -</div> -<pre class="prettyprint linenums" style="margin-bottom: 9px;"> -<pre> - &lt;p&gt;{{_i}}Sample text here...{{/i}}&lt;/p&gt; -</pre> -</pre> - <p><span class="label label-info">{{_i}}Heads up!{{/i}}</span> {{_i}}Be sure to keep code within <code><pre></code> tags as close to the left as possible; it will render all tabs.{{/i}}</p> - <p>{{_i}}You may optionally add the <code>.pre-scrollable</code> class which will set a max-height of 350px and provide a y-axis scrollbar.{{/i}}</p> - </section> - - - - <!-- Tables - ================================================== --> - <section id="tables"> - <div class="page-header"> - <h1>{{_i}}Tables{{/i}}</h1> - </div> - - <h2>{{_i}}Default styles{{/i}}</h2> - <p>{{_i}}For basic styling—light padding and only horizontal dividers—add the base class <code>.table</code> to any <code><table></code>.{{/i}}</p> - <div class="bs-docs-example"> - <table class="table"> - <thead> - <tr> - <th>#</th> - <th>{{_i}}First Name{{/i}}</th> - <th>{{_i}}Last Name{{/i}}</th> - <th>{{_i}}Username{{/i}}</th> - </tr> - </thead> - <tbody> - <tr> - <td>1</td> - <td>Mark</td> - <td>Otto</td> - <td>@mdo</td> - </tr> - <tr> - <td>2</td> - <td>Jacob</td> - <td>Thornton</td> - <td>@fat</td> - </tr> - <tr> - <td>3</td> - <td>Larry</td> - <td>the Bird</td> - <td>@twitter</td> - </tr> - </tbody> - </table> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<table class="table"> - … -</table> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Optional classes{{/i}}</h2> - <p>{{_i}}Add any of the following classes to the <code>.table</code> base class.{{/i}}</p> - - <h3><code>{{_i}}.table-striped{{/i}}</code></h3> - <p>{{_i}}Adds zebra-striping to any table row within the <code><tbody></code> via the <code>:nth-child</code> CSS selector (not available in IE7-8).{{/i}}</p> - <div class="bs-docs-example"> - <table class="table table-striped"> - <thead> - <tr> - <th>#</th> - <th>{{_i}}First Name{{/i}}</th> - <th>{{_i}}Last Name{{/i}}</th> - <th>{{_i}}Username{{/i}}</th> - </tr> - </thead> - <tbody> - <tr> - <td>1</td> - <td>Mark</td> - <td>Otto</td> - <td>@mdo</td> - </tr> - <tr> - <td>2</td> - <td>Jacob</td> - <td>Thornton</td> - <td>@fat</td> - </tr> - <tr> - <td>3</td> - <td>Larry</td> - <td>the Bird</td> - <td>@twitter</td> - </tr> - </tbody> - </table> - </div>{{! /example }} -<pre class="prettyprint linenums" style="margin-bottom: 18px;"> -<table class="table table-striped"> - … -</table> -</pre> - - <h3><code>{{_i}}.table-bordered{{/i}}</code></h3> - <p>{{_i}}Add borders and rounded corners to the table.{{/i}}</p> - <div class="bs-docs-example"> - <table class="table table-bordered"> - <thead> - <tr> - <th>#</th> - <th>{{_i}}First Name{{/i}}</th> - <th>{{_i}}Last Name{{/i}}</th> - <th>{{_i}}Username{{/i}}</th> - </tr> - </thead> - <tbody> - <tr> - <td rowspan="2">1</td> - <td>Mark</td> - <td>Otto</td> - <td>@mdo</td> - </tr> - <tr> - <td>Mark</td> - <td>Otto</td> - <td>@TwBootstrap</td> - </tr> - <tr> - <td>2</td> - <td>Jacob</td> - <td>Thornton</td> - <td>@fat</td> - </tr> - <tr> - <td>3</td> - <td colspan="2">Larry the Bird</td> - <td>@twitter</td> - </tr> - </tbody> - </table> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<table class="table table-bordered"> - … -</table> -</pre> - - <h3><code>{{_i}}.table-hover{{/i}}</code></h3> - <p>{{_i}}Enable a hover state on table rows within a <code><tbody></code>.{{/i}}</p> - <div class="bs-docs-example"> - <table class="table table-hover"> - <thead> - <tr> - <th>#</th> - <th>{{_i}}First Name{{/i}}</th> - <th>{{_i}}Last Name{{/i}}</th> - <th>{{_i}}Username{{/i}}</th> - </tr> - </thead> - <tbody> - <tr> - <td>1</td> - <td>Mark</td> - <td>Otto</td> - <td>@mdo</td> - </tr> - <tr> - <td>2</td> - <td>Jacob</td> - <td>Thornton</td> - <td>@fat</td> - </tr> - <tr> - <td>3</td> - <td colspan="2">Larry the Bird</td> - <td>@twitter</td> - </tr> - </tbody> - </table> - </div>{{! /example }} -<pre class="prettyprint linenums" style="margin-bottom: 18px;"> -<table class="table table-hover"> - … -</table> -</pre> - - <h3><code>{{_i}}.table-condensed{{/i}}</code></h3> - <p>{{_i}}Makes tables more compact by cutting cell padding in half.{{/i}}</p> - <div class="bs-docs-example"> - <table class="table table-condensed"> - <thead> - <tr> - <th>#</th> - <th>{{_i}}First Name{{/i}}</th> - <th>{{_i}}Last Name{{/i}}</th> - <th>{{_i}}Username{{/i}}</th> - </tr> - </thead> - <tbody> - <tr> - <td>1</td> - <td>Mark</td> - <td>Otto</td> - <td>@mdo</td> - </tr> - <tr> - <td>2</td> - <td>Jacob</td> - <td>Thornton</td> - <td>@fat</td> - </tr> - <tr> - <td>3</td> - <td colspan="2">Larry the Bird</td> - <td>@twitter</td> - </tr> - </tbody> - </table> - </div>{{! /example }} -<pre class="prettyprint linenums" style="margin-bottom: 18px;"> -<table class="table table-condensed"> - … -</table> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Optional row classes{{/i}}</h2> - <p>{{_i}}Use contextual classes to color table rows.{{/i}}</p> - <table class="table table-bordered table-striped"> - <colgroup> - <col class="span1"> - <col class="span7"> - </colgroup> - <thead> - <tr> - <th>{{_i}}Class{{/i}}</th> - <th>{{_i}}Description{{/i}}</th> - </tr> - </thead> - <tbody> - <tr> - <td> - <code>.success</code> - </td> - <td>{{_i}}Indicates a successful or positive action.{{/i}}</td> - </tr> - <tr> - <td> - <code>.error</code> - </td> - <td>{{_i}}Indicates a dangerous or potentially negative action.{{/i}}</td> - </tr> - <tr> - <td> - <code>.warning</code> - </td> - <td>{{_i}}Indicates a warning that might need attention.{{/i}}</td> - </tr> - <tr> - <td> - <code>.info</code> - </td> - <td>{{_i}}Used as an alternative to the default styles.{{/i}}</td> - </tr> - </tbody> - </table> - <div class="bs-docs-example"> - <table class="table"> - <thead> - <tr> - <th>#</th> - <th>{{_i}}Product{{/i}}</th> - <th>{{_i}}Payment Taken{{/i}}</th> - <th>{{_i}}Status{{/i}}</th> - </tr> - </thead> - <tbody> - <tr class="success"> - <td>1</td> - <td>TB - Monthly</td> - <td>01/04/2012</td> - <td>Approved</td> - </tr> - <tr class="error"> - <td>2</td> - <td>TB - Monthly</td> - <td>02/04/2012</td> - <td>Declined</td> - </tr> - <tr class="warning"> - <td>3</td> - <td>TB - Monthly</td> - <td>03/04/2012</td> - <td>Pending</td> - </tr> - <tr class="info"> - <td>4</td> - <td>TB - Monthly</td> - <td>04/04/2012</td> - <td>Call in to confirm</td> - </tr> - </tbody> - </table> - </div>{{! /example }} -<pre class="prettyprint linenums"> -... - <tr class="success"> - <td>1</td> - <td>TB - Monthly</td> - <td>01/04/2012</td> - <td>Approved</td> - </tr> -... -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Supported table markup{{/i}}</h2> - <p>{{_i}}List of supported table HTML elements and how they should be used.{{/i}}</p> - <table class="table table-bordered table-striped"> - <colgroup> - <col class="span1"> - <col class="span7"> - </colgroup> - <thead> - <tr> - <th>{{_i}}Tag{{/i}}</th> - <th>{{_i}}Description{{/i}}</th> - </tr> - </thead> - <tbody> - <tr> - <td> - <code><table></code> - </td> - <td> - {{_i}}Wrapping element for displaying data in a tabular format{{/i}} - </td> - </tr> - <tr> - <td> - <code><thead></code> - </td> - <td> - {{_i}}Container element for table header rows (<code><tr></code>) to label table columns{{/i}} - </td> - </tr> - <tr> - <td> - <code><tbody></code> - </td> - <td> - {{_i}}Container element for table rows (<code><tr></code>) in the body of the table{{/i}} - </td> - </tr> - <tr> - <td> - <code><tr></code> - </td> - <td> - {{_i}}Container element for a set of table cells (<code><td></code> or <code><th></code>) that appears on a single row{{/i}} - </td> - </tr> - <tr> - <td> - <code><td></code> - </td> - <td> - {{_i}}Default table cell{{/i}} - </td> - </tr> - <tr> - <td> - <code><th></code> - </td> - <td> - {{_i}}Special table cell for column (or row, depending on scope and placement) labels{{/i}} - </td> - </tr> - <tr> - <td> - <code><caption></code> - </td> - <td> - {{_i}}Description or summary of what the table holds, especially useful for screen readers{{/i}} - </td> - </tr> - </tbody> - </table> -<pre class="prettyprint linenums"> -<table> - <caption>...</caption> - <thead> - <tr> - <th>...</th> - <th>...</th> - </tr> - </thead> - <tbody> - <tr> - <td>...</td> - <td>...</td> - </tr> - </tbody> -</table> -</pre> - - </section> - - - - <!-- Forms - ================================================== --> - <section id="forms"> - <div class="page-header"> - <h1>{{_i}}Forms{{/i}}</h1> - </div> - - <h2>{{_i}}Default styles{{/i}}</h2> - <p>{{_i}}Individual form controls receive styling, but without any required base class on the <code><form></code> or large changes in markup. Results in stacked, left-aligned labels on top of form controls.{{/i}}</p> - <form class="bs-docs-example"> - <fieldset> - <legend>Legend</legend> - <label>{{_i}}Label name{{/i}}</label> - <input type="text" placeholder="{{_i}}Type something…{{/i}}"> - <span class="help-block">{{_i}}Example block-level help text here.{{/i}}</span> - <label class="checkbox"> - <input type="checkbox"> {{_i}}Check me out{{/i}} - </label> - <button type="submit" class="btn">{{_i}}Submit{{/i}}</button> - </fieldset> - </form>{{! /example }} -<pre class="prettyprint linenums"> -<form> - <fieldset> - <legend>{{_i}}Legend{{/i}}</legend> - <label>{{_i}}Label name{{/i}}</label> - <input type="text" placeholder="{{_i}}Type something…{{/i}}"> - <span class="help-block">Example block-level help text here.</span> - <label class="checkbox"> - <input type="checkbox"> {{_i}}Check me out{{/i}} - </label> - <button type="submit" class="btn">{{_i}}Submit{{/i}}</button> - </fieldset> -</form> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Optional layouts{{/i}}</h2> - <p>{{_i}}Included with Bootstrap are three optional form layouts for common use cases.{{/i}}</p> - - <h3>{{_i}}Search form{{/i}}</h3> - <p>{{_i}}Add <code>.form-search</code> to the form and <code>.search-query</code> to the <code><input></code> for an extra-rounded text input.{{/i}}</p> - <form class="bs-docs-example form-search"> - <input type="text" class="input-medium search-query"> - <button type="submit" class="btn">{{_i}}Search{{/i}}</button> - </form>{{! /example }} -<pre class="prettyprint linenums"> -<form class="form-search"> - <input type="text" class="input-medium search-query"> - <button type="submit" class="btn">{{_i}}Search{{/i}}</button> -</form> -</pre> - - <h3>{{_i}}Inline form{{/i}}</h3> - <p>{{_i}}Add <code>.form-inline</code> for left-aligned labels and inline-block controls for a compact layout.{{/i}}</p> - <form class="bs-docs-example form-inline"> - <input type="text" class="input-small" placeholder="{{_i}}Email{{/i}}"> - <input type="password" class="input-small" placeholder="{{_i}}Password{{/i}}"> - <label class="checkbox"> - <input type="checkbox"> {{_i}}Remember me{{/i}} - </label> - <button type="submit" class="btn">{{_i}}Sign in{{/i}}</button> - </form>{{! /example }} -<pre class="prettyprint linenums"> -<form class="form-inline"> - <input type="text" class="input-small" placeholder="{{_i}}Email{{/i}}"> - <input type="password" class="input-small" placeholder="{{_i}}Password{{/i}}"> - <label class="checkbox"> - <input type="checkbox"> {{_i}}Remember me{{/i}} - </label> - <button type="submit" class="btn">{{_i}}Sign in{{/i}}</button> -</form> -</pre> - - <h3>{{_i}}Horizontal form{{/i}}</h3> - <p>{{_i}}Right align labels and float them to the left to make them appear on the same line as controls. Requires the most markup changes from a default form:{{/i}}</p> - <ul> - <li>{{_i}}Add <code>.form-horizontal</code> to the form{{/i}}</li> - <li>{{_i}}Wrap labels and controls in <code>.control-group</code>{{/i}}</li> - <li>{{_i}}Add <code>.control-label</code> to the label{{/i}}</li> - <li>{{_i}}Wrap any associated controls in <code>.controls</code> for proper alignment{{/i}}</li> - </ul> - <form class="bs-docs-example form-horizontal"> - <div class="control-group"> - <label class="control-label" for="inputEmail">{{_i}}Email{{/i}}</label> - <div class="controls"> - <input type="text" id="inputEmail" placeholder="{{_i}}Email{{/i}}"> - </div> - </div> - <div class="control-group"> - <label class="control-label" for="inputPassword">{{_i}}Password{{/i}}</label> - <div class="controls"> - <input type="password" id="inputPassword" placeholder="{{_i}}Password{{/i}}"> - </div> - </div> - <div class="control-group"> - <div class="controls"> - <label class="checkbox"> - <input type="checkbox"> {{_i}}Remember me{{/i}} - </label> - <button type="submit" class="btn">{{_i}}Sign in{{/i}}</button> - </div> - </div> - </form> -<pre class="prettyprint linenums"> -<form class="form-horizontal"> - <div class="control-group"> - <label class="control-label" for="inputEmail">{{_i}}Email{{/i}}</label> - <div class="controls"> - <input type="text" id="inputEmail" placeholder="{{_i}}Email{{/i}}"> - </div> - </div> - <div class="control-group"> - <label class="control-label" for="inputPassword">{{_i}}Password{{/i}}</label> - <div class="controls"> - <input type="password" id="inputPassword" placeholder="{{_i}}Password{{/i}}"> - </div> - </div> - <div class="control-group"> - <div class="controls"> - <label class="checkbox"> - <input type="checkbox"> {{_i}}Remember me{{/i}} - </label> - <button type="submit" class="btn">{{_i}}Sign in{{/i}}</button> - </div> - </div> -</form> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Supported form controls{{/i}}</h2> - <p>{{_i}}Examples of standard form controls supported in an example form layout.{{/i}}</p> - - <h3>{{_i}}Inputs{{/i}}</h3> - <p>{{_i}}Most common form control, text-based input fields. Includes support for all HTML5 types: text, password, datetime, datetime-local, date, month, time, week, number, email, url, search, tel, and color.{{/i}}</p> - <p>{{_i}}Requires the use of a specified <code>type</code> at all times.{{/i}}</p> - <form class="bs-docs-example form-inline"> - <input type="text" placeholder="Text input"> - </form> -<pre class="prettyprint linenums"> -<input type="text" placeholder="Text input"> -</pre> - - <h3>{{_i}}Textarea{{/i}}</h3> - <p>{{_i}}Form control which supports multiple lines of text. Change <code>rows</code> attribute as necessary.{{/i}}</p> - <form class="bs-docs-example form-inline"> - <textarea rows="3"></textarea> - </form> -<pre class="prettyprint linenums"> -<textarea rows="3"></textarea> -</pre> - - <h3>{{_i}}Checkboxes and radios{{/i}}</h3> - <p>{{_i}}Checkboxes are for selecting one or several options in a list while radios are for selecting one option from many.{{/i}}</p> - <h4>{{_i}}Default (stacked){{/i}}</h4> - <form class="bs-docs-example"> - <label class="checkbox"> - <input type="checkbox" value=""> - {{_i}}Option one is this and that—be sure to include why it's great{{/i}} - </label> - <br> - <label class="radio"> - <input type="radio" name="optionsRadios" id="optionsRadios1" value="option1" checked> - {{_i}}Option one is this and that—be sure to include why it's great{{/i}} - </label> - <label class="radio"> - <input type="radio" name="optionsRadios" id="optionsRadios2" value="option2"> - {{_i}}Option two can be something else and selecting it will deselect option one{{/i}} - </label> - </form> -<pre class="prettyprint linenums"> -<label class="checkbox"> - <input type="checkbox" value=""> - {{_i}}Option one is this and that—be sure to include why it's great{{/i}} -</label> - -<label class="radio"> - <input type="radio" name="optionsRadios" id="optionsRadios1" value="option1" checked> - {{_i}}Option one is this and that—be sure to include why it's great{{/i}} -</label> -<label class="radio"> - <input type="radio" name="optionsRadios" id="optionsRadios2" value="option2"> - {{_i}}Option two can be something else and selecting it will deselect option one{{/i}} -</label> -</pre> - - <h4>{{_i}}Inline checkboxes{{/i}}</h4> - <p>{{_i}}Add the <code>.inline</code> class to a series of checkboxes or radios for controls appear on the same line.{{/i}}</p> - <form class="bs-docs-example"> - <label class="checkbox inline"> - <input type="checkbox" id="inlineCheckbox1" value="option1"> 1 - </label> - <label class="checkbox inline"> - <input type="checkbox" id="inlineCheckbox2" value="option2"> 2 - </label> - <label class="checkbox inline"> - <input type="checkbox" id="inlineCheckbox3" value="option3"> 3 - </label> - </form> -<pre class="prettyprint linenums"> -<label class="checkbox inline"> - <input type="checkbox" id="inlineCheckbox1" value="option1"> 1 -</label> -<label class="checkbox inline"> - <input type="checkbox" id="inlineCheckbox2" value="option2"> 2 -</label> -<label class="checkbox inline"> - <input type="checkbox" id="inlineCheckbox3" value="option3"> 3 -</label> -</pre> - - <h3>{{_i}}Selects{{/i}}</h3> - <p>{{_i}}Use the default option or specify a <code>multiple="multiple"</code> to show multiple options at once.{{/i}}</p> - <form class="bs-docs-example"> - <select> - <option>1</option> - <option>2</option> - <option>3</option> - <option>4</option> - <option>5</option> - </select> - <br> - <select multiple="multiple"> - <option>1</option> - <option>2</option> - <option>3</option> - <option>4</option> - <option>5</option> - </select> - </form> -<pre class="prettyprint linenums"> -<select> - <option>1</option> - <option>2</option> - <option>3</option> - <option>4</option> - <option>5</option> -</select> - -<select multiple="multiple"> - <option>1</option> - <option>2</option> - <option>3</option> - <option>4</option> - <option>5</option> -</select> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Extending form controls{{/i}}</h2> - <p>{{_i}}Adding on top of existing browser controls, Bootstrap includes other useful form components.{{/i}}</p> - - <h3>{{_i}}Prepended and appended inputs{{/i}}</h3> - <p>{{_i}}Add text or buttons before or after any text-based input. Do note that <code>select</code> elements are not supported here.{{/i}}</p> - - <h4>{{_i}}Default options{{/i}}</h4> - <p>{{_i}}Wrap an <code>.add-on</code> and an <code>input</code> with one of two classes to prepend or append text to an input.{{/i}}</p> - <form class="bs-docs-example"> - <div class="input-prepend"> - <span class="add-on">@</span> - <input class="span2" id="prependedInput" type="text" placeholder="{{_i}}Username{{/i}}"> - </div> - <br> - <div class="input-append"> - <input class="span2" id="appendedInput" type="text"> - <span class="add-on">.00</span> - </div> - </form> -<pre class="prettyprint linenums"> -<div class="input-prepend"> - <span class="add-on">@</span> - <input class="span2" id="prependedInput" type="text" placeholder="{{_i}}Username{{/i}}"> -</div> -<div class="input-append"> - <input class="span2" id="appendedInput" type="text"> - <span class="add-on">.00</span> -</div> -</pre> - - <h4>{{_i}}Combined{{/i}}</h4> - <p>{{_i}}Use both classes and two instances of <code>.add-on</code> to prepend and append an input.{{/i}}</p> - <form class="bs-docs-example form-inline"> - <div class="input-prepend input-append"> - <span class="add-on">$</span> - <input class="span2" id="appendedPrependedInput" type="text"> - <span class="add-on">.00</span> - </div> - </form> -<pre class="prettyprint linenums"> -<div class="input-prepend input-append"> - <span class="add-on">$</span> - <input class="span2" id="appendedPrependedInput" type="text"> - <span class="add-on">.00</span> -</div> -</pre> - - <h4>{{_i}}Buttons instead of text{{/i}}</h4> - <p>{{_i}}Instead of a <code><span></code> with text, use a <code>.btn</code> to attach a button (or two) to an input.{{/i}}</p> - <form class="bs-docs-example"> - <div class="input-append"> - <input class="span2" id="appendedInputButton" type="text"> - <button class="btn" type="button">Go!</button> - </div> - </form> -<pre class="prettyprint linenums"> -<div class="input-append"> - <input class="span2" id="appendedInputButton" type="text"> - <button class="btn" type="button">Go!</button> -</div> -</pre> - <form class="bs-docs-example"> - <div class="input-append"> - <input class="span2" id="appendedInputButtons" type="text"> - <button class="btn" type="button">Search</button> - <button class="btn" type="button">Options</button> - </div> - </form> -<pre class="prettyprint linenums"> -<div class="input-append"> - <input class="span2" id="appendedInputButtons" type="text"> - <button class="btn" type="button">Search</button> - <button class="btn" type="button">Options</button> -</div> -</pre> - - <h4>{{_i}}Button dropdowns{{/i}}</h4> - <p>{{_i}}{{/i}}</p> - <form class="bs-docs-example"> - <div class="input-append"> - <input class="span2" id="appendedDropdownButton" type="text"> - <div class="btn-group"> - <button class="btn dropdown-toggle" data-toggle="dropdown">{{_i}}Action{{/i}} <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div><!-- /btn-group --> - </div><!-- /input-append --> - </form> -<pre class="prettyprint linenums"> -<div class="input-append"> - <input class="span2" id="appendedDropdownButton" type="text"> - <div class="btn-group"> - <button class="btn dropdown-toggle" data-toggle="dropdown"> - {{_i}}Action{{/i}} - <span class="caret"></span> - </button> - <ul class="dropdown-menu"> - ... - </ul> - </div> -</div> -</pre> - - <form class="bs-docs-example"> - <div class="input-prepend"> - <div class="btn-group"> - <button class="btn dropdown-toggle" data-toggle="dropdown">{{_i}}Action{{/i}} <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div><!-- /btn-group --> - <input class="span2" id="prependedDropdownButton" type="text"> - </div><!-- /input-prepend --> - </form> -<pre class="prettyprint linenums"> -<div class="input-prepend"> - <div class="btn-group"> - <button class="btn dropdown-toggle" data-toggle="dropdown"> - {{_i}}Action{{/i}} - <span class="caret"></span> - </button> - <ul class="dropdown-menu"> - ... - </ul> - </div> - <input class="span2" id="prependedDropdownButton" type="text"> -</div> -</pre> - - <form class="bs-docs-example"> - <div class="input-prepend input-append"> - <div class="btn-group"> - <button class="btn dropdown-toggle" data-toggle="dropdown">{{_i}}Action{{/i}} <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div><!-- /btn-group --> - <input class="span2" id="appendedPrependedDropdownButton" type="text"> - <div class="btn-group"> - <button class="btn dropdown-toggle" data-toggle="dropdown">{{_i}}Action{{/i}} <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div><!-- /btn-group --> - </div><!-- /input-prepend input-append --> - </form> -<pre class="prettyprint linenums"> -<div class="input-prepend input-append"> - <div class="btn-group"> - <button class="btn dropdown-toggle" data-toggle="dropdown"> - {{_i}}Action{{/i}} - <span class="caret"></span> - </button> - <ul class="dropdown-menu"> - ... - </ul> - </div> - <input class="span2" id="appendedPrependedDropdownButton" type="text"> - <div class="btn-group"> - <button class="btn dropdown-toggle" data-toggle="dropdown"> - {{_i}}Action{{/i}} - <span class="caret"></span> - </button> - <ul class="dropdown-menu"> - ... - </ul> - </div> -</div> -</pre> - - <h4>{{_i}}Segmented dropdown groups{{/i}}</h4> - <form class="bs-docs-example"> - <div class="input-prepend"> - <div class="btn-group"> - <button class="btn" tabindex="-1">Action</button> - <button class="btn dropdown-toggle" data-toggle="dropdown" tabindex="-1"> - <span class="caret"></span> - </button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div> - <input type="text"> - </div> - <div class="input-append"> - <input type="text"> - <div class="btn-group"> - <button class="btn" tabindex="-1">Action</button> - <button class="btn dropdown-toggle" data-toggle="dropdown" tabindex="-1"> - <span class="caret"></span> - </button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div> - </div> - </form> -<pre class="prettyprint linenums"> -<form> - <div class="input-prepend"> - <div class="btn-group">...</div> - <input type="text"> - </div> - <div class="input-append"> - <input type="text"> - <div class="btn-group">...</div> - </div> -</form> -</pre> - - <h4>{{_i}}Search form{{/i}}</h4> - <form class="bs-docs-example form-search"> - <div class="input-append"> - <input type="text" class="span2 search-query"> - <button type="submit" class="btn">{{_i}}Search{{/i}}</button> - </div> - <div class="input-prepend"> - <button type="submit" class="btn">{{_i}}Search{{/i}}</button> - <input type="text" class="span2 search-query"> - </div> - </form>{{! /example }} -<pre class="prettyprint linenums"> -<form class="form-search"> - <div class="input-append"> - <input type="text" class="span2 search-query"> - <button type="submit" class="btn">{{_i}}Search{{/i}}</button> - </div> - <div class="input-prepend"> - <button type="submit" class="btn">{{_i}}Search{{/i}}</button> - <input type="text" class="span2 search-query"> - </div> -</form> -</pre> - - <h3>{{_i}}Control sizing{{/i}}</h3> - <p>{{_i}}Use relative sizing classes like <code>.input-large</code> or match your inputs to the grid column sizes using <code>.span*</code> classes.{{/i}}</p> - - <h4>{{_i}}Block level inputs{{/i}}</h4> - <p>{{_i}}Make any <code><input></code> or <code><textarea></code> element behave like a block level element.{{/i}}</p> - <form class="bs-docs-example" style="padding-bottom: 15px;"> - <div class="controls"> - <input class="input-block-level" type="text" placeholder=".input-block-level"> - </div> - </form> -<pre class="prettyprint linenums"> -<input class="input-block-level" type="text" placeholder=".input-block-level"> -</pre> - - <h4>{{_i}}Relative sizing{{/i}}</h4> - <form class="bs-docs-example" style="padding-bottom: 15px;"> - <div class="controls docs-input-sizes"> - <input class="input-mini" type="text" placeholder=".input-mini"> - <input class="input-small" type="text" placeholder=".input-small"> - <input class="input-medium" type="text" placeholder=".input-medium"> - <input class="input-large" type="text" placeholder=".input-large"> - <input class="input-xlarge" type="text" placeholder=".input-xlarge"> - <input class="input-xxlarge" type="text" placeholder=".input-xxlarge"> - </div> - </form> -<pre class="prettyprint linenums"> -<input class="input-mini" type="text" placeholder=".input-mini"> -<input class="input-small" type="text" placeholder=".input-small"> -<input class="input-medium" type="text" placeholder=".input-medium"> -<input class="input-large" type="text" placeholder=".input-large"> -<input class="input-xlarge" type="text" placeholder=".input-xlarge"> -<input class="input-xxlarge" type="text" placeholder=".input-xxlarge"> -</pre> - <p> - <span class="label label-info">{{_i}}Heads up!{{/i}}</span> In future versions, we'll be altering the use of these relative input classes to match our button sizes. For example, <code>.input-large</code> will increase the padding and font-size of an input. - </p> - - <h4>{{_i}}Grid sizing{{/i}}</h4> - <p>{{_i}}Use <code>.span1</code> to <code>.span12</code> for inputs that match the same sizes of the grid columns.{{/i}}</p> - <form class="bs-docs-example" style="padding-bottom: 15px;"> - <div class="controls docs-input-sizes"> - <input class="span1" type="text" placeholder=".span1"> - <input class="span2" type="text" placeholder=".span2"> - <input class="span3" type="text" placeholder=".span3"> - <select class="span1"> - <option>1</option> - <option>2</option> - <option>3</option> - <option>4</option> - <option>5</option> - </select> - <select class="span2"> - <option>1</option> - <option>2</option> - <option>3</option> - <option>4</option> - <option>5</option> - </select> - <select class="span3"> - <option>1</option> - <option>2</option> - <option>3</option> - <option>4</option> - <option>5</option> - </select> - </div> - </form> -<pre class="prettyprint linenums"> -<input class="span1" type="text" placeholder=".span1"> -<input class="span2" type="text" placeholder=".span2"> -<input class="span3" type="text" placeholder=".span3"> -<select class="span1"> - ... -</select> -<select class="span2"> - ... -</select> -<select class="span3"> - ... -</select> -</pre> - - <p>{{_i}}For multiple grid inputs per line, <strong>use the <code>.controls-row</code> modifier class for proper spacing</strong>. It floats the inputs to collapse white-space, sets the proper margins, and clears the float.{{/i}}</p> - <form class="bs-docs-example" style="padding-bottom: 15px;"> - <div class="controls"> - <input class="span5" type="text" placeholder=".span5"> - </div> - <div class="controls controls-row"> - <input class="span4" type="text" placeholder=".span4"> - <input class="span1" type="text" placeholder=".span1"> - </div> - <div class="controls controls-row"> - <input class="span3" type="text" placeholder=".span3"> - <input class="span2" type="text" placeholder=".span2"> - </div> - <div class="controls controls-row"> - <input class="span2" type="text" placeholder=".span2"> - <input class="span3" type="text" placeholder=".span3"> - </div> - <div class="controls controls-row"> - <input class="span1" type="text" placeholder=".span1"> - <input class="span4" type="text" placeholder=".span4"> - </div> - </form> -<pre class="prettyprint linenums"> -<div class="controls"> - <input class="span5" type="text" placeholder=".span5"> -</div> -<div class="controls controls-row"> - <input class="span4" type="text" placeholder=".span4"> - <input class="span1" type="text" placeholder=".span1"> -</div> -... -</pre> - - <h3>{{_i}}Uneditable inputs{{/i}}</h3> - <p>{{_i}}Present data in a form that's not editable without using actual form markup.{{/i}}</p> - <form class="bs-docs-example"> - <span class="input-xlarge uneditable-input">Some value here</span> - </form> -<pre class="prettyprint linenums"> -<span class="input-xlarge uneditable-input">Some value here</span> -</pre> - - <h3>{{_i}}Form actions{{/i}}</h3> - <p>{{_i}}End a form with a group of actions (buttons). When placed within a <code>.form-actions</code>, the buttons will automatically indent to line up with the form controls.{{/i}}</p> - <form class="bs-docs-example"> - <div class="form-actions"> - <button type="submit" class="btn btn-primary">{{_i}}Save changes{{/i}}</button> - <button type="button" class="btn">{{_i}}Cancel{{/i}}</button> - </div> - </form> -<pre class="prettyprint linenums"> -<div class="form-actions"> - <button type="submit" class="btn btn-primary">{{_i}}Save changes{{/i}}</button> - <button type="button" class="btn">{{_i}}Cancel{{/i}}</button> -</div> -</pre> - - <h3>{{_i}}Help text{{/i}}</h3> - <p>{{_i}}Inline and block level support for help text that appears around form controls.{{/i}}</p> - <h4>{{_i}}Inline help{{/i}}</h4> - <form class="bs-docs-example form-inline"> - <input type="text"> <span class="help-inline">Inline help text</span> - </form> -<pre class="prettyprint linenums"> -<input type="text"><span class="help-inline">Inline help text</span> -</pre> - - <h4>{{_i}}Block help{{/i}}</h4> - <form class="bs-docs-example form-inline"> - <input type="text"> - <span class="help-block">A longer block of help text that breaks onto a new line and may extend beyond one line.</span> - </form> -<pre class="prettyprint linenums"> -<input type="text"><span class="help-block">A longer block of help text that breaks onto a new line and may extend beyond one line.</span> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Form control states{{/i}}</h2> - <p>{{_i}}Provide feedback to users or visitors with basic feedback states on form controls and labels.{{/i}}</p> - - <h3>{{_i}}Input focus{{/i}}</h3> - <p>{{_i}}We remove the default <code>outline</code> styles on some form controls and apply a <code>box-shadow</code> in its place for <code>:focus</code>.{{/i}}</p> - <form class="bs-docs-example form-inline"> - <input class="input-xlarge focused" id="focusedInput" type="text" value="{{_i}}This is focused...{{/i}}"> - </form> -<pre class="prettyprint linenums"> -<input class="input-xlarge" id="focusedInput" type="text" value="{{_i}}This is focused...{{/i}}"> -</pre> - - <h3>{{_i}}Invalid inputs{{/i}}</h3> - <p>{{_i}}Style inputs via default browser functionality with <code>:invalid</code>. Specify a <code>type</code>, add the <code>required</code> attribute if the field is not optional, and (if applicable) specify a <code>pattern</code>.{{/i}}</p> - <p>{{_i}}This is not available in versions of Internet Explorer 7-9 due to lack of support for CSS pseudo selectors.{{/i}}</p> - <form class="bs-docs-example form-inline"> - <input class="span3" type="email" placeholder="test@example.com" required> - </form> -<pre class="prettyprint linenums"> -<input class="span3" type="email" required> -</pre> - - <h3>{{_i}}Disabled inputs{{/i}}</h3> - <p>{{_i}}Add the <code>disabled</code> attribute on an input to prevent user input and trigger a slightly different look.{{/i}}</p> - <form class="bs-docs-example form-inline"> - <input class="input-xlarge" id="disabledInput" type="text" placeholder="{{_i}}Disabled input here…{{/i}}" disabled> - </form> -<pre class="prettyprint linenums"> -<input class="input-xlarge" id="disabledInput" type="text" placeholder="{{_i}}Disabled input here...{{/i}}" disabled> -</pre> - - <h3>{{_i}}Validation states{{/i}}</h3> - <p>{{_i}}Bootstrap includes validation styles for error, warning, info, and success messages. To use, add the appropriate class to the surrounding <code>.control-group</code>.{{/i}}</p> - - <form class="bs-docs-example form-horizontal"> - <div class="control-group warning"> - <label class="control-label" for="inputWarning">{{_i}}Input with warning{{/i}}</label> - <div class="controls"> - <input type="text" id="inputWarning"> - <span class="help-inline">{{_i}}Something may have gone wrong{{/i}}</span> - </div> - </div> - <div class="control-group error"> - <label class="control-label" for="inputError">{{_i}}Input with error{{/i}}</label> - <div class="controls"> - <input type="text" id="inputError"> - <span class="help-inline">{{_i}}Please correct the error{{/i}}</span> - </div> - </div> - <div class="control-group info"> - <label class="control-label" for="inputInfo">{{_i}}Input with info{{/i}}</label> - <div class="controls"> - <input type="text" id="inputInfo"> - <span class="help-inline">{{_i}}Username is taken{{/i}}</span> - </div> - </div> - <div class="control-group success"> - <label class="control-label" for="inputSuccess">{{_i}}Input with success{{/i}}</label> - <div class="controls"> - <input type="text" id="inputSuccess"> - <span class="help-inline">{{_i}}Woohoo!{{/i}}</span> - </div> - </div> - </form> -<pre class="prettyprint linenums"> -<div class="control-group warning"> - <label class="control-label" for="inputWarning">{{_i}}Input with warning{{/i}}</label> - <div class="controls"> - <input type="text" id="inputWarning"> - <span class="help-inline">{{_i}}Something may have gone wrong{{/i}}</span> - </div> -</div> - -<div class="control-group error"> - <label class="control-label" for="inputError">{{_i}}Input with error{{/i}}</label> - <div class="controls"> - <input type="text" id="inputError"> - <span class="help-inline">{{_i}}Please correct the error{{/i}}</span> - </div> -</div> - -<div class="control-group info"> - <label class="control-label" for="inputInfo">{{_i}}Input with info{{/i}}</label> - <div class="controls"> - <input type="text" id="inputInfo"> - <span class="help-inline">{{_i}}Username is already taken{{/i}}</span> - </div> -</div> - -<div class="control-group success"> - <label class="control-label" for="inputSuccess">{{_i}}Input with success{{/i}}</label> - <div class="controls"> - <input type="text" id="inputSuccess"> - <span class="help-inline">{{_i}}Woohoo!{{/i}}</span> - </div> -</div> -</pre> - - </section> - - - - <!-- Buttons - ================================================== --> - <section id="buttons"> - <div class="page-header"> - <h1>{{_i}}Buttons{{/i}}</h1> - </div> - - <h2>Default buttons</h2> - <p>{{_i}}Button styles can be applied to anything with the <code>.btn</code> class applied. However, typically you'll want to apply these to only <code><a></code> and <code><button></code> elements for the best rendering.{{/i}}</p> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th>{{_i}}Button{{/i}}</th> - <th>{{_i}}class=""{{/i}}</th> - <th>{{_i}}Description{{/i}}</th> - </tr> - </thead> - <tbody> - <tr> - <td><button type="button" class="btn">{{_i}}Default{{/i}}</button></td> - <td><code>btn</code></td> - <td>{{_i}}Standard gray button with gradient{{/i}}</td> - </tr> - <tr> - <td><button type="button" class="btn btn-primary">{{_i}}Primary{{/i}}</button></td> - <td><code>btn btn-primary</code></td> - <td>{{_i}}Provides extra visual weight and identifies the primary action in a set of buttons{{/i}}</td> - </tr> - <tr> - <td><button type="button" class="btn btn-info">{{_i}}Info{{/i}}</button></td> - <td><code>btn btn-info</code></td> - <td>{{_i}}Used as an alternative to the default styles{{/i}}</td> - </tr> - <tr> - <td><button type="button" class="btn btn-success">{{_i}}Success{{/i}}</button></td> - <td><code>btn btn-success</code></td> - <td>{{_i}}Indicates a successful or positive action{{/i}}</td> - </tr> - <tr> - <td><button type="button" class="btn btn-warning">{{_i}}Warning{{/i}}</button></td> - <td><code>btn btn-warning</code></td> - <td>{{_i}}Indicates caution should be taken with this action{{/i}}</td> - </tr> - <tr> - <td><button type="button" class="btn btn-danger">{{_i}}Danger{{/i}}</button></td> - <td><code>btn btn-danger</code></td> - <td>{{_i}}Indicates a dangerous or potentially negative action{{/i}}</td> - </tr> - <tr> - <td><button type="button" class="btn btn-inverse">{{_i}}Inverse{{/i}}</button></td> - <td><code>btn btn-inverse</code></td> - <td>{{_i}}Alternate dark gray button, not tied to a semantic action or use{{/i}}</td> - </tr> - <tr> - <td><button type="button" class="btn btn-link">{{_i}}Link{{/i}}</button></td> - <td><code>btn btn-link</code></td> - <td>{{_i}}Deemphasize a button by making it look like a link while maintaining button behavior{{/i}}</td> - </tr> - </tbody> - </table> - - <h4>{{_i}}Cross browser compatibility{{/i}}</h4> - <p>{{_i}}IE9 doesn't crop background gradients on rounded corners, so we remove it. Related, IE9 jankifies disabled <code>button</code> elements, rendering text gray with a nasty text-shadow that we cannot fix.{{/i}}</p> - - - <h2>{{_i}}Button sizes{{/i}}</h2> - <p>{{_i}}Fancy larger or smaller buttons? Add <code>.btn-large</code>, <code>.btn-small</code>, or <code>.btn-mini</code> for additional sizes.{{/i}}</p> - <div class="bs-docs-example"> - <p> - <button type="button" class="btn btn-large btn-primary">{{_i}}Large button{{/i}}</button> - <button type="button" class="btn btn-large">{{_i}}Large button{{/i}}</button> - </p> - <p> - <button type="button" class="btn btn-primary">{{_i}}Default button{{/i}}</button> - <button type="button" class="btn">{{_i}}Default button{{/i}}</button> - </p> - <p> - <button type="button" class="btn btn-small btn-primary">{{_i}}Small button{{/i}}</button> - <button type="button" class="btn btn-small">{{_i}}Small button{{/i}}</button> - </p> - <p> - <button type="button" class="btn btn-mini btn-primary">{{_i}}Mini button{{/i}}</button> - <button type="button" class="btn btn-mini">{{_i}}Mini button{{/i}}</button> - </p> - </div> -<pre class="prettyprint linenums"> -<p> - <button class="btn btn-large btn-primary" type="button">{{_i}}Large button{{/i}}</button> - <button class="btn btn-large" type="button">{{_i}}Large button{{/i}}</button> -</p> -<p> - <button class="btn btn-primary" type="button">{{_i}}Default button{{/i}}</button> - <button class="btn" type="button">{{_i}}Default button{{/i}}</button> -</p> -<p> - <button class="btn btn-small btn-primary" type="button">{{_i}}Small button{{/i}}</button> - <button class="btn btn-small" type="button">{{_i}}Small button{{/i}}</button> -</p> -<p> - <button class="btn btn-mini btn-primary" type="button">{{_i}}Mini button{{/i}}</button> - <button class="btn btn-mini" type="button">{{_i}}Mini button{{/i}}</button> -</p> -</pre> - <p>{{_i}}Create block level buttons—those that span the full width of a parent— by adding <code>.btn-block</code>.{{/i}}</p> - <div class="bs-docs-example"> - <div class="well" style="max-width: 400px; margin: 0 auto 10px;"> - <button type="button" class="btn btn-large btn-block btn-primary">{{_i}}Block level button{{/i}}</button> - <button type="button" class="btn btn-large btn-block">{{_i}}Block level button{{/i}}</button> - </div> - </div> -<pre class="prettyprint linenums"> -<button class="btn btn-large btn-block btn-primary" type="button">{{_i}}Block level button{{/i}}</button> -<button class="btn btn-large btn-block" type="button">{{_i}}Block level button{{/i}}</button> -</pre> - - - <h2>{{_i}}Disabled state{{/i}}</h2> - <p>{{_i}}Make buttons look unclickable by fading them back 50%.{{/i}}</p> - - <h3>Anchor element</h3> - <p>{{_i}}Add the <code>.disabled</code> class to <code><a></code> buttons.{{/i}}</p> - <p class="bs-docs-example"> - <a href="#" class="btn btn-large btn-primary disabled">{{_i}}Primary link{{/i}}</a> - <a href="#" class="btn btn-large disabled">{{_i}}Link{{/i}}</a> - </p> -<pre class="prettyprint linenums"> -<a href="#" class="btn btn-large btn-primary disabled">{{_i}}Primary link{{/i}}</a> -<a href="#" class="btn btn-large disabled">{{_i}}Link{{/i}}</a> -</pre> - <p> - <span class="label label-info">{{_i}}Heads up!{{/i}}</span> - {{_i}}We use <code>.disabled</code> as a utility class here, similar to the common <code>.active</code> class, so no prefix is required. Also, this class is only for aesthetic; you must use custom JavaScript to disable links here.{{/i}} - </p> - - <h3>Button element</h3> - <p>{{_i}}Add the <code>disabled</code> attribute to <code><button></code> buttons.{{/i}}</p> - <p class="bs-docs-example"> - <button type="button" class="btn btn-large btn-primary disabled" disabled="disabled">{{_i}}Primary button{{/i}}</button> - <button type="button" class="btn btn-large" disabled>{{_i}}Button{{/i}}</button> - </p> -<pre class="prettyprint linenums"> -<button type="button" class="btn btn-large btn-primary disabled" disabled="disabled">{{_i}}Primary button{{/i}}</button> -<button type="button" class="btn btn-large" disabled>{{_i}}Button{{/i}}</button> -</pre> - - - <h2>{{_i}}One class, multiple tags{{/i}}</h2> - <p>{{_i}}Use the <code>.btn</code> class on an <code><a></code>, <code><button></code>, or <code><input></code> element.{{/i}}</p> - <form class="bs-docs-example"> - <a class="btn" href="">{{_i}}Link{{/i}}</a> - <button class="btn" type="submit">{{_i}}Button{{/i}}</button> - <input class="btn" type="button" value="{{_i}}Input{{/i}}"> - <input class="btn" type="submit" value="{{_i}}Submit{{/i}}"> - </form> -<pre class="prettyprint linenums"> -<a class="btn" href="">{{_i}}Link{{/i}}</a> -<button class="btn" type="submit">{{_i}}Button{{/i}}</button> -<input class="btn" type="button" value="{{_i}}Input{{/i}}"> -<input class="btn" type="submit" value="{{_i}}Submit{{/i}}"> -</pre> - <p>{{_i}}As a best practice, try to match the element for your context to ensure matching cross-browser rendering. If you have an <code>input</code>, use an <code><input type="submit"></code> for your button.{{/i}}</p> - - </section> - - - - <!-- Images - ================================================== --> - <section id="images"> - <div class="page-header"> - <h1>{{_i}}Images{{/i}}</h1> - </div> - - <p>{{_i}}Add classes to an <code><img></code> element to easily style images in any project.{{/i}}</p> - <div class="bs-docs-example bs-docs-example-images"> - <img data-src="holder.js/140x140" class="img-rounded"> - <img data-src="holder.js/140x140" class="img-circle"> - <img data-src="holder.js/140x140" class="img-polaroid"> - </div> -<pre class="prettyprint linenums"> -<img src="..." class="img-rounded"> -<img src="..." class="img-circle"> -<img src="..." class="img-polaroid"> -</pre> - <p><span class="label label-info">{{_i}}Heads up!{{/i}}</span> {{_i}}<code>.img-rounded</code> and <code>.img-circle</code> do not work in IE7-8 due to lack of <code>border-radius</code> support.{{/i}}</p> - - - </section> - - - - <!-- Icons - ================================================== --> - <section id="icons"> - <div class="page-header"> - <h1>{{_i}}Icons <small>by <a href="http://glyphicons.com" target="_blank">Glyphicons</a></small>{{/i}}</h1> - </div> - - <h2>{{_i}}Icon glyphs{{/i}}</h2> - <p>{{_i}}140 icons in sprite form, available in dark gray (default) and white, provided by <a href="http://glyphicons.com" target="_blank">Glyphicons</a>.{{/i}}</p> - <ul class="the-icons clearfix"> - <li><i class="icon-glass"></i> icon-glass</li> - <li><i class="icon-music"></i> icon-music</li> - <li><i class="icon-search"></i> icon-search</li> - <li><i class="icon-envelope"></i> icon-envelope</li> - <li><i class="icon-heart"></i> icon-heart</li> - <li><i class="icon-star"></i> icon-star</li> - <li><i class="icon-star-empty"></i> icon-star-empty</li> - <li><i class="icon-user"></i> icon-user</li> - <li><i class="icon-film"></i> icon-film</li> - <li><i class="icon-th-large"></i> icon-th-large</li> - <li><i class="icon-th"></i> icon-th</li> - <li><i class="icon-th-list"></i> icon-th-list</li> - <li><i class="icon-ok"></i> icon-ok</li> - <li><i class="icon-remove"></i> icon-remove</li> - <li><i class="icon-zoom-in"></i> icon-zoom-in</li> - <li><i class="icon-zoom-out"></i> icon-zoom-out</li> - <li><i class="icon-off"></i> icon-off</li> - <li><i class="icon-signal"></i> icon-signal</li> - <li><i class="icon-cog"></i> icon-cog</li> - <li><i class="icon-trash"></i> icon-trash</li> - <li><i class="icon-home"></i> icon-home</li> - <li><i class="icon-file"></i> icon-file</li> - <li><i class="icon-time"></i> icon-time</li> - <li><i class="icon-road"></i> icon-road</li> - <li><i class="icon-download-alt"></i> icon-download-alt</li> - <li><i class="icon-download"></i> icon-download</li> - <li><i class="icon-upload"></i> icon-upload</li> - <li><i class="icon-inbox"></i> icon-inbox</li> - - <li><i class="icon-play-circle"></i> icon-play-circle</li> - <li><i class="icon-repeat"></i> icon-repeat</li> - <li><i class="icon-refresh"></i> icon-refresh</li> - <li><i class="icon-list-alt"></i> icon-list-alt</li> - <li><i class="icon-lock"></i> icon-lock</li> - <li><i class="icon-flag"></i> icon-flag</li> - <li><i class="icon-headphones"></i> icon-headphones</li> - <li><i class="icon-volume-off"></i> icon-volume-off</li> - <li><i class="icon-volume-down"></i> icon-volume-down</li> - <li><i class="icon-volume-up"></i> icon-volume-up</li> - <li><i class="icon-qrcode"></i> icon-qrcode</li> - <li><i class="icon-barcode"></i> icon-barcode</li> - <li><i class="icon-tag"></i> icon-tag</li> - <li><i class="icon-tags"></i> icon-tags</li> - <li><i class="icon-book"></i> icon-book</li> - <li><i class="icon-bookmark"></i> icon-bookmark</li> - <li><i class="icon-print"></i> icon-print</li> - <li><i class="icon-camera"></i> icon-camera</li> - <li><i class="icon-font"></i> icon-font</li> - <li><i class="icon-bold"></i> icon-bold</li> - <li><i class="icon-italic"></i> icon-italic</li> - <li><i class="icon-text-height"></i> icon-text-height</li> - <li><i class="icon-text-width"></i> icon-text-width</li> - <li><i class="icon-align-left"></i> icon-align-left</li> - <li><i class="icon-align-center"></i> icon-align-center</li> - <li><i class="icon-align-right"></i> icon-align-right</li> - <li><i class="icon-align-justify"></i> icon-align-justify</li> - <li><i class="icon-list"></i> icon-list</li> - - <li><i class="icon-indent-left"></i> icon-indent-left</li> - <li><i class="icon-indent-right"></i> icon-indent-right</li> - <li><i class="icon-facetime-video"></i> icon-facetime-video</li> - <li><i class="icon-picture"></i> icon-picture</li> - <li><i class="icon-pencil"></i> icon-pencil</li> - <li><i class="icon-map-marker"></i> icon-map-marker</li> - <li><i class="icon-adjust"></i> icon-adjust</li> - <li><i class="icon-tint"></i> icon-tint</li> - <li><i class="icon-edit"></i> icon-edit</li> - <li><i class="icon-share"></i> icon-share</li> - <li><i class="icon-check"></i> icon-check</li> - <li><i class="icon-move"></i> icon-move</li> - <li><i class="icon-step-backward"></i> icon-step-backward</li> - <li><i class="icon-fast-backward"></i> icon-fast-backward</li> - <li><i class="icon-backward"></i> icon-backward</li> - <li><i class="icon-play"></i> icon-play</li> - <li><i class="icon-pause"></i> icon-pause</li> - <li><i class="icon-stop"></i> icon-stop</li> - <li><i class="icon-forward"></i> icon-forward</li> - <li><i class="icon-fast-forward"></i> icon-fast-forward</li> - <li><i class="icon-step-forward"></i> icon-step-forward</li> - <li><i class="icon-eject"></i> icon-eject</li> - <li><i class="icon-chevron-left"></i> icon-chevron-left</li> - <li><i class="icon-chevron-right"></i> icon-chevron-right</li> - <li><i class="icon-plus-sign"></i> icon-plus-sign</li> - <li><i class="icon-minus-sign"></i> icon-minus-sign</li> - <li><i class="icon-remove-sign"></i> icon-remove-sign</li> - <li><i class="icon-ok-sign"></i> icon-ok-sign</li> - - <li><i class="icon-question-sign"></i> icon-question-sign</li> - <li><i class="icon-info-sign"></i> icon-info-sign</li> - <li><i class="icon-screenshot"></i> icon-screenshot</li> - <li><i class="icon-remove-circle"></i> icon-remove-circle</li> - <li><i class="icon-ok-circle"></i> icon-ok-circle</li> - <li><i class="icon-ban-circle"></i> icon-ban-circle</li> - <li><i class="icon-arrow-left"></i> icon-arrow-left</li> - <li><i class="icon-arrow-right"></i> icon-arrow-right</li> - <li><i class="icon-arrow-up"></i> icon-arrow-up</li> - <li><i class="icon-arrow-down"></i> icon-arrow-down</li> - <li><i class="icon-share-alt"></i> icon-share-alt</li> - <li><i class="icon-resize-full"></i> icon-resize-full</li> - <li><i class="icon-resize-small"></i> icon-resize-small</li> - <li><i class="icon-plus"></i> icon-plus</li> - <li><i class="icon-minus"></i> icon-minus</li> - <li><i class="icon-asterisk"></i> icon-asterisk</li> - <li><i class="icon-exclamation-sign"></i> icon-exclamation-sign</li> - <li><i class="icon-gift"></i> icon-gift</li> - <li><i class="icon-leaf"></i> icon-leaf</li> - <li><i class="icon-fire"></i> icon-fire</li> - <li><i class="icon-eye-open"></i> icon-eye-open</li> - <li><i class="icon-eye-close"></i> icon-eye-close</li> - <li><i class="icon-warning-sign"></i> icon-warning-sign</li> - <li><i class="icon-plane"></i> icon-plane</li> - <li><i class="icon-calendar"></i> icon-calendar</li> - <li><i class="icon-random"></i> icon-random</li> - <li><i class="icon-comment"></i> icon-comment</li> - <li><i class="icon-magnet"></i> icon-magnet</li> - - <li><i class="icon-chevron-up"></i> icon-chevron-up</li> - <li><i class="icon-chevron-down"></i> icon-chevron-down</li> - <li><i class="icon-retweet"></i> icon-retweet</li> - <li><i class="icon-shopping-cart"></i> icon-shopping-cart</li> - <li><i class="icon-folder-close"></i> icon-folder-close</li> - <li><i class="icon-folder-open"></i> icon-folder-open</li> - <li><i class="icon-resize-vertical"></i> icon-resize-vertical</li> - <li><i class="icon-resize-horizontal"></i> icon-resize-horizontal</li> - <li><i class="icon-hdd"></i> icon-hdd</li> - <li><i class="icon-bullhorn"></i> icon-bullhorn</li> - <li><i class="icon-bell"></i> icon-bell</li> - <li><i class="icon-certificate"></i> icon-certificate</li> - <li><i class="icon-thumbs-up"></i> icon-thumbs-up</li> - <li><i class="icon-thumbs-down"></i> icon-thumbs-down</li> - <li><i class="icon-hand-right"></i> icon-hand-right</li> - <li><i class="icon-hand-left"></i> icon-hand-left</li> - <li><i class="icon-hand-up"></i> icon-hand-up</li> - <li><i class="icon-hand-down"></i> icon-hand-down</li> - <li><i class="icon-circle-arrow-right"></i> icon-circle-arrow-right</li> - <li><i class="icon-circle-arrow-left"></i> icon-circle-arrow-left</li> - <li><i class="icon-circle-arrow-up"></i> icon-circle-arrow-up</li> - <li><i class="icon-circle-arrow-down"></i> icon-circle-arrow-down</li> - <li><i class="icon-globe"></i> icon-globe</li> - <li><i class="icon-wrench"></i> icon-wrench</li> - <li><i class="icon-tasks"></i> icon-tasks</li> - <li><i class="icon-filter"></i> icon-filter</li> - <li><i class="icon-briefcase"></i> icon-briefcase</li> - <li><i class="icon-fullscreen"></i> icon-fullscreen</li> - </ul> - - <h3>Glyphicons attribution</h3> - <p>{{_i}}<a href="http://glyphicons.com/">Glyphicons</a> Halflings are normally not available for free, but an arrangement between Bootstrap and the Glyphicons creators have made this possible at no cost to you as developers. As a thank you, we ask you to include an optional link back to <a href="http://glyphicons.com/">Glyphicons</a> whenever practical.{{/i}}</p> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}How to use{{/i}}</h2> - <p>{{_i}}All icons require an <code><i></code> tag with a unique class, prefixed with <code>icon-</code>. To use, place the following code just about anywhere:{{/i}}</p> -<pre class="prettyprint linenums"> -<i class="icon-search"></i> -</pre> - <p>{{_i}}There are also styles available for inverted (white) icons, made ready with one extra class. We will specifically enforce this class on hover and active states for nav and dropdown links.{{/i}}</p> -<pre class="prettyprint linenums"> -<i class="icon-search icon-white"></i> -</pre> - <p> - <span class="label label-info">{{_i}}Heads up!{{/i}}</span> - {{_i}}When using beside strings of text, as in buttons or nav links, be sure to leave a space after the <code><i></code> tag for proper spacing.{{/i}} - </p> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Icon examples{{/i}}</h2> - <p>{{_i}}Use them in buttons, button groups for a toolbar, navigation, or prepended form inputs.{{/i}}</p> - - <h4>{{_i}}Buttons{{/i}}</h4> - - <h5>{{_i}}Button group in a button toolbar{{/i}}</h5> - <div class="bs-docs-example"> - <div class="btn-toolbar"> - <div class="btn-group"> - <a class="btn" href="#"><i class="icon-align-left"></i></a> - <a class="btn" href="#"><i class="icon-align-center"></i></a> - <a class="btn" href="#"><i class="icon-align-right"></i></a> - <a class="btn" href="#"><i class="icon-align-justify"></i></a> - </div> - </div> - </div>{{! /bs-docs-example }} -<pre class="prettyprint linenums"> -<div class="btn-toolbar"> - <div class="btn-group"> - <a class="btn" href="#"><i class="icon-align-left"></i></a> - <a class="btn" href="#"><i class="icon-align-center"></i></a> - <a class="btn" href="#"><i class="icon-align-right"></i></a> - <a class="btn" href="#"><i class="icon-align-justify"></i></a> - </div> -</div> -</pre> - - <h5>{{_i}}Dropdown in a button group{{/i}}</h5> - <div class="bs-docs-example"> - <div class="btn-group"> - <a class="btn btn-primary" href="#"><i class="icon-user icon-white"></i> {{_i}}User{{/i}}</a> - <a class="btn btn-primary dropdown-toggle" data-toggle="dropdown" href="#"><span class="caret"></span></a> - <ul class="dropdown-menu"> - <li><a href="#"><i class="icon-pencil"></i> {{_i}}Edit{{/i}}</a></li> - <li><a href="#"><i class="icon-trash"></i> {{_i}}Delete{{/i}}</a></li> - <li><a href="#"><i class="icon-ban-circle"></i> {{_i}}Ban{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#"><i class="i"></i> {{_i}}Make admin{{/i}}</a></li> - </ul> - </div> - </div>{{! /bs-docs-example }} -<pre class="prettyprint linenums"> -<div class="btn-group"> - <a class="btn btn-primary" href="#"><i class="icon-user icon-white"></i> {{_i}}User{{/i}}</a> - <a class="btn btn-primary dropdown-toggle" data-toggle="dropdown" href="#"><span class="caret"></span></a> - <ul class="dropdown-menu"> - <li><a href="#"><i class="icon-pencil"></i> {{_i}}Edit{{/i}}</a></li> - <li><a href="#"><i class="icon-trash"></i> {{_i}}Delete{{/i}}</a></li> - <li><a href="#"><i class="icon-ban-circle"></i> {{_i}}Ban{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#"><i class="i"></i> {{_i}}Make admin{{/i}}</a></li> - </ul> -</div> -</pre> - - <h5>{{_i}}Button sizes{{/i}}</h5> - <div class="bs-docs-example"> - <a class="btn btn-large" href="#"><i class="icon-star"></i> Star</a> - <a class="btn btn-small" href="#"><i class="icon-star"></i> Star</a> - <a class="btn btn-mini" href="#"><i class="icon-star"></i> Star</a> - </div>{{! /bs-docs-example }} -<pre class="prettyprint linenums"> -<a class="btn btn-large" href="#"><i class="icon-star"></i> Star</a> -<a class="btn btn-small" href="#"><i class="icon-star"></i> Star</a> -<a class="btn btn-mini" href="#"><i class="icon-star"></i> Star</a> -</pre> - - <h4>{{_i}}Navigation{{/i}}</h4> - <div class="bs-docs-example"> - <div class="well" style="padding: 8px 0; margin-bottom: 0;"> - <ul class="nav nav-list"> - <li class="active"><a href="#"><i class="icon-home icon-white"></i> {{_i}}Home{{/i}}</a></li> - <li><a href="#"><i class="icon-book"></i> {{_i}}Library{{/i}}</a></li> - <li><a href="#"><i class="icon-pencil"></i> {{_i}}Applications{{/i}}</a></li> - <li><a href="#"><i class="i"></i> {{_i}}Misc{{/i}}</a></li> - </ul> - </div>{{! /well }} - </div>{{! /bs-docs-example }} -<pre class="prettyprint linenums"> -<ul class="nav nav-list"> - <li class="active"><a href="#"><i class="icon-home icon-white"></i> {{_i}}Home{{/i}}</a></li> - <li><a href="#"><i class="icon-book"></i> {{_i}}Library{{/i}}</a></li> - <li><a href="#"><i class="icon-pencil"></i> {{_i}}Applications{{/i}}</a></li> - <li><a href="#"><i class="i"></i> {{_i}}Misc{{/i}}</a></li> -</ul> -</pre> - - <h4>{{_i}}Form fields{{/i}}</h4> - <form class="bs-docs-example form-horizontal"> - <div class="control-group"> - <label class="control-label" for="inputIcon">{{_i}}Email address{{/i}}</label> - <div class="controls"> - <div class="input-prepend"> - <span class="add-on"><i class="icon-envelope"></i></span><input class="span2" id="inputIcon" type="text"> - </div> - </div> - </div> - </form> -<pre class="prettyprint linenums"> -<div class="control-group"> - <label class="control-label" for="inputIcon">{{_i}}Email address{{/i}}</label> - <div class="controls"> - <div class="input-prepend"> - <span class="add-on"><i class="icon-envelope"></i></span> - <input class="span2" id="inputIcon" type="text"> - </div> - </div> -</div> -</pre> - - </section> - - - - </div>{{! /span9 }} - </div>{{! row}} - - </div>{{! /.container }} diff --git a/src/main/webapp/bower_components/bootstrap/docs/templates/pages/components.mustache b/src/main/webapp/bower_components/bootstrap/docs/templates/pages/components.mustache deleted file mode 100644 index 6d3ff9be..00000000 --- a/src/main/webapp/bower_components/bootstrap/docs/templates/pages/components.mustache +++ /dev/null @@ -1,2505 +0,0 @@ -<!-- Subhead -================================================== --> -<header class="jumbotron subhead" id="overview"> - <div class="container"> - <h1>{{_i}}Components{{/i}}</h1> - <p class="lead">{{_i}}Dozens of reusable components built to provide navigation, alerts, popovers, and more.{{/i}}</p> - </div> -</header> - - - <div class="container"> - - <!-- Docs nav - ================================================== --> - <div class="row"> - <div class="span3 bs-docs-sidebar"> - <ul class="nav nav-list bs-docs-sidenav"> - <li><a href="#dropdowns"><i class="icon-chevron-right"></i> {{_i}}Dropdowns{{/i}}</a></li> - <li><a href="#buttonGroups"><i class="icon-chevron-right"></i> {{_i}}Button groups{{/i}}</a></li> - <li><a href="#buttonDropdowns"><i class="icon-chevron-right"></i> {{_i}}Button dropdowns{{/i}}</a></li> - <li><a href="#navs"><i class="icon-chevron-right"></i> {{_i}}Navs{{/i}}</a></li> - <li><a href="#navbar"><i class="icon-chevron-right"></i> {{_i}}Navbar{{/i}}</a></li> - <li><a href="#breadcrumbs"><i class="icon-chevron-right"></i> {{_i}}Breadcrumbs{{/i}}</a></li> - <li><a href="#pagination"><i class="icon-chevron-right"></i> {{_i}}Pagination{{/i}}</a></li> - <li><a href="#labels-badges"><i class="icon-chevron-right"></i> {{_i}}Labels and badges{{/i}}</a></li> - <li><a href="#typography"><i class="icon-chevron-right"></i> {{_i}}Typography{{/i}}</a></li> - <li><a href="#thumbnails"><i class="icon-chevron-right"></i> {{_i}}Thumbnails{{/i}}</a></li> - <li><a href="#alerts"><i class="icon-chevron-right"></i> {{_i}}Alerts{{/i}}</a></li> - <li><a href="#progress"><i class="icon-chevron-right"></i> {{_i}}Progress bars{{/i}}</a></li> - <li><a href="#media"><i class="icon-chevron-right"></i> {{_i}}Media object{{/i}}</a></li> - <li><a href="#misc"><i class="icon-chevron-right"></i> {{_i}}Misc{{/i}}</a></li> - </ul> - </div> - <div class="span9"> - - - - <!-- Dropdowns - ================================================== --> - <section id="dropdowns"> - <div class="page-header"> - <h1>{{_i}}Dropdown menus{{/i}}</h1> - </div> - - <h2>{{_i}}Example{{/i}}</h2> - <p>{{_i}}Toggleable, contextual menu for displaying lists of links. Made interactive with the <a href="./javascript.html#dropdowns">dropdown JavaScript plugin</a>.{{/i}}</p> - <div class="bs-docs-example"> - <div class="dropdown clearfix"> - <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu" style="display: block; position: static; margin-bottom: 5px; *width: 180px;"> - <li><a tabindex="-1" href="#">{{_i}}Action{{/i}}</a></li> - <li><a tabindex="-1" href="#">{{_i}}Another action{{/i}}</a></li> - <li><a tabindex="-1" href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a tabindex="-1" href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu"> - <li><a tabindex="-1" href="#">{{_i}}Action{{/i}}</a></li> - <li><a tabindex="-1" href="#">{{_i}}Another action{{/i}}</a></li> - <li><a tabindex="-1" href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a tabindex="-1" href="#">{{_i}}Separated link{{/i}}</a></li> -</ul> -</pre> - - <h2>{{_i}}Markup{{/i}}</h2> - <p>{{_i}}Looking at just the dropdown menu, here's the required HTML. You need to wrap the dropdown's trigger and the dropdown menu within <code>.dropdown</code>, or another element that declares <code>position: relative;</code>. Then just create the menu.{{/i}}</p> - -<pre class="prettyprint linenums"> -<div class="dropdown"> - <!-- Link or button to toggle dropdown --> - <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"> - <li><a tabindex="-1" href="#">{{_i}}Action{{/i}}</a></li> - <li><a tabindex="-1" href="#">{{_i}}Another action{{/i}}</a></li> - <li><a tabindex="-1" href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a tabindex="-1" href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> -</div> -</pre> - - <h2>{{_i}}Options{{/i}}</h2> - <p>{{_i}}Align menus to the right and add include additional levels of dropdowns.{{/i}}</p> - - <h3>{{_i}}Aligning the menus{{/i}}</h3> - <p>{{_i}}Add <code>.pull-right</code> to a <code>.dropdown-menu</code> to right align the dropdown menu.{{/i}}</p> -<pre class="prettyprint linenums"> -<ul class="dropdown-menu pull-right" role="menu" aria-labelledby="dLabel"> - ... -</ul> -</pre> - - <h3>{{_i}}Disabled menu options{{/i}}</h3> - <p>{{_i}}Add <code>.disabled</code> to a <code><li></code> in the dropdown to disable the link.{{/i}}</p> - <div class="bs-docs-example"> - <div class="dropdown clearfix"> - <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu" style="display: block; position: static; margin-bottom: 5px; *width: 180px;"> - <li><a tabindex="-1" href="#">{{_i}}Regular link{{/i}}</a></li> - <li class="disabled"><a tabindex="-1" href="#">{{_i}}Disabled link{{/i}}</a></li> - <li><a tabindex="-1" href="#">{{_i}}Another link{{/i}}</a></li> - </ul> - </div> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu"> - <li><a tabindex="-1" href="#">{{_i}}Regular link{{/i}}</a></li> - <li class="disabled"><a tabindex="-1" href="#">{{_i}}Disabled link{{/i}}</a></li> - <li><a tabindex="-1" href="#">{{_i}}Another link{{/i}}</a></li> -</ul> -</pre> - - <h3>{{_i}}Sub menus on dropdowns{{/i}}</h3> - <p>{{_i}}Add an extra level of dropdown menus, appearing on hover like those of OS X, with some simple markup additions. Add <code>.dropdown-submenu</code> to any <code>li</code> in an existing dropdown menu for automatic styling.{{/i}}</p> - <div class="bs-docs-example bs-docs-example-submenus"> - - <div class="pull-left"> - <p class="muted">Default</p> - <div class="dropdown clearfix"> - <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu"> - <li><a tabindex="-1" href="#">{{_i}}Action{{/i}}</a></li> - <li><a tabindex="-1" href="#">{{_i}}Another action{{/i}}</a></li> - <li><a tabindex="-1" href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li class="dropdown-submenu"> - <a tabindex="-1" href="#">{{_i}}More options{{/i}}</a> - <ul class="dropdown-menu"> - <li><a tabindex="-1" href="#">{{_i}}Second level link{{/i}}</a></li> - <li><a tabindex="-1" href="#">{{_i}}Second level link{{/i}}</a></li> - <li><a tabindex="-1" href="#">{{_i}}Second level link{{/i}}</a></li> - <li><a tabindex="-1" href="#">{{_i}}Second level link{{/i}}</a></li> - <li><a tabindex="-1" href="#">{{_i}}Second level link{{/i}}</a></li> - </ul> - </li> - </ul> - </div> - </div>{{! /.pull-left }} - - <div class="pull-left"> - <p class="muted">Dropup</p> - <div class="dropup"> - <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu"> - <li><a tabindex="-1" href="#">{{_i}}Action{{/i}}</a></li> - <li><a tabindex="-1" href="#">{{_i}}Another action{{/i}}</a></li> - <li><a tabindex="-1" href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li class="dropdown-submenu"> - <a tabindex="-1" href="#">{{_i}}More options{{/i}}</a> - <ul class="dropdown-menu"> - <li><a tabindex="-1" href="#">{{_i}}Second level link{{/i}}</a></li> - <li><a tabindex="-1" href="#">{{_i}}Second level link{{/i}}</a></li> - <li><a tabindex="-1" href="#">{{_i}}Second level link{{/i}}</a></li> - <li><a tabindex="-1" href="#">{{_i}}Second level link{{/i}}</a></li> - <li><a tabindex="-1" href="#">{{_i}}Second level link{{/i}}</a></li> - </ul> - </li> - </ul> - </div> - </div>{{! /.pull-left }} - - <div class="pull-left"> - <p class="muted">Left submenu</p> - <div class="dropdown"> - <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu"> - <li><a tabindex="-1" href="#">{{_i}}Action{{/i}}</a></li> - <li><a tabindex="-1" href="#">{{_i}}Another action{{/i}}</a></li> - <li><a tabindex="-1" href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li class="dropdown-submenu pull-left"> - <a tabindex="-1" href="#">{{_i}}More options{{/i}}</a> - <ul class="dropdown-menu"> - <li><a tabindex="-1" href="#">{{_i}}Second level link{{/i}}</a></li> - <li><a tabindex="-1" href="#">{{_i}}Second level link{{/i}}</a></li> - <li><a tabindex="-1" href="#">{{_i}}Second level link{{/i}}</a></li> - <li><a tabindex="-1" href="#">{{_i}}Second level link{{/i}}</a></li> - <li><a tabindex="-1" href="#">{{_i}}Second level link{{/i}}</a></li> - </ul> - </li> - </ul> - </div> - </div>{{! /.pull-left }} - - </div>{{! /example }} -<pre class="prettyprint linenums"> -<ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"> - ... - <li class="dropdown-submenu"> - <a tabindex="-1" href="#">{{_i}}More options{{/i}}</a> - <ul class="dropdown-menu"> - ... - </ul> - </li> -</ul> -</pre> - - </section> - - - - - <!-- Button Groups - ================================================== --> - <section id="buttonGroups"> - <div class="page-header"> - <h1>{{_i}}Button groups{{/i}}</h1> - </div> - - <h2>{{_i}}Examples{{/i}}</h2> - <p>{{_i}}Two basic options, along with two more specific variations.{{/i}}</p> - - <h3>{{_i}}Single button group{{/i}}</h3> - <p>{{_i}}Wrap a series of buttons with <code>.btn</code> in <code>.btn-group</code>.{{/i}}</p> - <div class="bs-docs-example"> - <div class="btn-group" style="margin: 9px 0 5px;"> - <button class="btn">{{_i}}Left{{/i}}</button> - <button class="btn">{{_i}}Middle{{/i}}</button> - <button class="btn">{{_i}}Right{{/i}}</button> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="btn-group"> - <button class="btn">Left</button> - <button class="btn">Middle</button> - <button class="btn">Right</button> -</div> -</pre> - - <h3>{{_i}}Multiple button groups{{/i}}</h3> - <p>{{_i}}Combine sets of <code><div class="btn-group"></code> into a <code><div class="btn-toolbar"></code> for more complex components.{{/i}}</p> - <div class="bs-docs-example"> - <div class="btn-toolbar" style="margin: 0;"> - <div class="btn-group"> - <button class="btn">1</button> - <button class="btn">2</button> - <button class="btn">3</button> - <button class="btn">4</button> - </div> - <div class="btn-group"> - <button class="btn">5</button> - <button class="btn">6</button> - <button class="btn">7</button> - </div> - <div class="btn-group"> - <button class="btn">8</button> - </div> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="btn-toolbar"> - <div class="btn-group"> - ... - </div> -</div> -</pre> - - <h3>{{_i}}Vertical button groups{{/i}}</h3> - <p>{{_i}}Make a set of buttons appear vertically stacked rather than horizontally.{{/i}}</p> - <div class="bs-docs-example"> - <div class="btn-group btn-group-vertical"> - <button type="button" class="btn"><i class="icon-align-left"></i></button> - <button type="button" class="btn"><i class="icon-align-center"></i></button> - <button type="button" class="btn"><i class="icon-align-right"></i></button> - <button type="button" class="btn"><i class="icon-align-justify"></i></button> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="btn-group btn-group-vertical"> - ... -</div> -</pre> - - - <hr class="bs-docs-separator"> - - - <h4>{{_i}}Checkbox and radio flavors{{/i}}</h4> - <p>{{_i}}Button groups can also function as radios, where only one button may be active, or checkboxes, where any number of buttons may be active. View <a href="./javascript.html#buttons">the JavaScript docs</a> for that.{{/i}}</p> - - <h4>{{_i}}Dropdowns in button groups{{/i}}</h4> - <p><span class="label label-info">{{_i}}Heads up!{{/i}}</span> {{_i}}Buttons with dropdowns must be individually wrapped in their own <code>.btn-group</code> within a <code>.btn-toolbar</code> for proper rendering.{{/i}}</p> - </section> - - - - <!-- Split button dropdowns - ================================================== --> - <section id="buttonDropdowns"> - <div class="page-header"> - <h1>{{_i}}Button dropdown menus{{/i}}</h1> - </div> - - - <h2>{{_i}}Overview and examples{{/i}}</h2> - <p>{{_i}}Use any button to trigger a dropdown menu by placing it within a <code>.btn-group</code> and providing the proper menu markup.{{/i}}</p> - <div class="bs-docs-example"> - <div class="btn-toolbar" style="margin: 0;"> - <div class="btn-group"> - <button class="btn dropdown-toggle" data-toggle="dropdown">{{_i}}Action{{/i}} <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-primary dropdown-toggle" data-toggle="dropdown">{{_i}}Action{{/i}} <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-danger dropdown-toggle" data-toggle="dropdown">{{_i}}Danger{{/i}} <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-warning dropdown-toggle" data-toggle="dropdown">{{_i}}Warning{{/i}} <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-success dropdown-toggle" data-toggle="dropdown">{{_i}}Success{{/i}} <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-info dropdown-toggle" data-toggle="dropdown">{{_i}}Info{{/i}} <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-inverse dropdown-toggle" data-toggle="dropdown">{{_i}}Inverse{{/i}} <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div><!-- /btn-group --> - </div><!-- /btn-toolbar --> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<div class="btn-group"> - <a class="btn dropdown-toggle" data-toggle="dropdown" href="#"> - {{_i}}Action{{/i}} - <span class="caret"></span> - </a> - <ul class="dropdown-menu"> - <!-- {{_i}}dropdown menu links{{/i}} --> - </ul> -</div> -</pre> - - <h3>{{_i}}Works with all button sizes{{/i}}</h3> - <p>{{_i}}Button dropdowns work at any size: <code>.btn-large</code>, <code>.btn-small</code>, or <code>.btn-mini</code>.{{/i}}</p> - <div class="bs-docs-example"> - <div class="btn-toolbar" style="margin: 0;"> - <div class="btn-group"> - <button class="btn btn-large dropdown-toggle" data-toggle="dropdown">{{_i}}Large button{{/i}} <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-small dropdown-toggle" data-toggle="dropdown">{{_i}}Small button{{/i}} <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-mini dropdown-toggle" data-toggle="dropdown">{{_i}}Mini button{{/i}} <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div><!-- /btn-group --> - </div><!-- /btn-toolbar --> - </div>{{! /example }} - - <h3>{{_i}}Requires JavaScript{{/i}}</h3> - <p>{{_i}}Button dropdowns require the <a href="./javascript.html#dropdowns">Bootstrap dropdown plugin</a> to function.{{/i}}</p> - <p>{{_i}}In some cases—like mobile—dropdown menus will extend outside the viewport. You need to resolve the alignment manually or with custom JavaScript.{{/i}}</p> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Split button dropdowns{{/i}}</h2> - <p>{{_i}}Building on the button group styles and markup, we can easily create a split button. Split buttons feature a standard action on the left and a dropdown toggle on the right with contextual links.{{/i}}</p> - <div class="bs-docs-example"> - <div class="btn-toolbar" style="margin: 0;"> - <div class="btn-group"> - <button class="btn">{{_i}}Action{{/i}}</button> - <button class="btn dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-primary">{{_i}}Action{{/i}}</button> - <button class="btn btn-primary dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-danger">{{_i}}Danger{{/i}}</button> - <button class="btn btn-danger dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-warning">{{_i}}Warning{{/i}}</button> - <button class="btn btn-warning dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-success">{{_i}}Success{{/i}}</button> - <button class="btn btn-success dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-info">{{_i}}Info{{/i}}</button> - <button class="btn btn-info dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-inverse">{{_i}}Inverse{{/i}}</button> - <button class="btn btn-inverse dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div><!-- /btn-group --> - </div><!-- /btn-toolbar --> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<div class="btn-group"> - <button class="btn">{{_i}}Action{{/i}}</button> - <button class="btn dropdown-toggle" data-toggle="dropdown"> - <span class="caret"></span> - </button> - <ul class="dropdown-menu"> - <!-- {{_i}}dropdown menu links{{/i}} --> - </ul> -</div> -</pre> - - <h3>{{_i}}Sizes{{/i}}</h3> - <p>{{_i}}Utilize the extra button classes <code>.btn-mini</code>, <code>.btn-small</code>, or <code>.btn-large</code> for sizing.{{/i}}</p> - <div class="bs-docs-example"> - <div class="btn-toolbar"> - <div class="btn-group"> - <button class="btn btn-large">{{_i}}Large action{{/i}}</button> - <button class="btn btn-large dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div><!-- /btn-group --> - </div><!-- /btn-toolbar --> - <div class="btn-toolbar"> - <div class="btn-group"> - <button class="btn btn-small">{{_i}}Small action{{/i}}</button> - <button class="btn btn-small dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div><!-- /btn-group --> - </div><!-- /btn-toolbar --> - <div class="btn-toolbar"> - <div class="btn-group"> - <button class="btn btn-mini">{{_i}}Mini action{{/i}}</button> - <button class="btn btn-mini dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div><!-- /btn-group --> - </div><!-- /btn-toolbar --> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<div class="btn-group"> - <button class="btn btn-mini">{{_i}}Action{{/i}}</button> - <button class="btn btn-mini dropdown-toggle" data-toggle="dropdown"> - <span class="caret"></span> - </button> - <ul class="dropdown-menu"> - <!-- {{_i}}dropdown menu links{{/i}} --> - </ul> -</div> -</pre> - - <h3>{{_i}}Dropup menus{{/i}}</h3> - <p>{{_i}}Dropdown menus can also be toggled from the bottom up by adding a single class to the immediate parent of <code>.dropdown-menu</code>. It will flip the direction of the <code>.caret</code> and reposition the menu itself to move from the bottom up instead of top down.{{/i}}</p> - <div class="bs-docs-example"> - <div class="btn-toolbar" style="margin: 0;"> - <div class="btn-group dropup"> - <button class="btn">{{_i}}Dropup{{/i}}</button> - <button class="btn dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group dropup"> - <button class="btn primary">{{_i}}Right dropup{{/i}}</button> - <button class="btn primary dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu pull-right"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div><!-- /btn-group --> - </div> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<div class="btn-group dropup"> - <button class="btn">{{_i}}Dropup{{/i}}</button> - <button class="btn dropdown-toggle" data-toggle="dropdown"> - <span class="caret"></span> - </button> - <ul class="dropdown-menu"> - <!-- {{_i}}dropdown menu links{{/i}} --> - </ul> -</div> -</pre> - - </section> - - - - <!-- Nav, Tabs, & Pills - ================================================== --> - <section id="navs"> - <div class="page-header"> - <h1>{{_i}}Nav: tabs, pills, and lists{{/i}}</small></h1> - </div> - - <h2>{{_i}}Lightweight defaults{{/i}} <small>{{_i}}Same markup, different classes{{/i}}</small></h2> - <p>{{_i}}All nav components here—tabs, pills, and lists—<strong>share the same base markup and styles</strong> through the <code>.nav</code> class.{{/i}}</p> - - <h3>{{_i}}Basic tabs{{/i}}</h3> - <p>{{_i}}Take a regular <code><ul></code> of links and add <code>.nav-tabs</code>:{{/i}}</p> - <div class="bs-docs-example"> - <ul class="nav nav-tabs"> - <li class="active"><a href="#">{{_i}}Home{{/i}}</a></li> - <li><a href="#">{{_i}}Profile{{/i}}</a></li> - <li><a href="#">{{_i}}Messages{{/i}}</a></li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="nav nav-tabs"> - <li class="active"> - <a href="#">{{_i}}Home{{/i}}</a> - </li> - <li><a href="#">...</a></li> - <li><a href="#">...</a></li> -</ul> -</pre> - - <h3>{{_i}}Basic pills{{/i}}</h3> - <p>{{_i}}Take that same HTML, but use <code>.nav-pills</code> instead:{{/i}}</p> - <div class="bs-docs-example"> - <ul class="nav nav-pills"> - <li class="active"><a href="#">{{_i}}Home{{/i}}</a></li> - <li><a href="#">{{_i}}Profile{{/i}}</a></li> - <li><a href="#">{{_i}}Messages{{/i}}</a></li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="nav nav-pills"> - <li class="active"> - <a href="#">{{_i}}Home{{/i}}</a> - </li> - <li><a href="#">...</a></li> - <li><a href="#">...</a></li> -</ul> -</pre> - - <h3>{{_i}}Disabled state{{/i}}</h3> - <p>{{_i}}For any nav component (tabs, pills, or list), add <code>.disabled</code> for <strong>gray links and no hover effects</strong>. Links will remain clickable, however, unless you remove the <code>href</code> attribute. Alternatively, you could implement custom JavaScript to prevent those clicks.{{/i}}</p> - <div class="bs-docs-example"> - <ul class="nav nav-pills"> - <li><a href="#">{{_i}}Clickable link{{/i}}</a></li> - <li><a href="#">{{_i}}Clickable link{{/i}}</a></li> - <li class="disabled"><a href="#">{{_i}}Disabled link{{/i}}</a></li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="nav nav-pills"> - ... - <li class="disabled"><a href="#">{{_i}}Home{{/i}}</a></li> - ... -</ul> -</pre> - - <h3>{{_i}}Component alignment{{/i}}</h3> - <p>{{_i}}To align nav links, use the <code>.pull-left</code> or <code>.pull-right</code> utility classes. Both classes will add a CSS float in the specified direction.{{/i}}</p> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Stackable{{/i}}</h2> - <p>{{_i}}As tabs and pills are horizontal by default, just add a second class, <code>.nav-stacked</code>, to make them appear vertically stacked.{{/i}}</p> - - <h3>{{_i}}Stacked tabs{{/i}}</h3> - <div class="bs-docs-example"> - <ul class="nav nav-tabs nav-stacked"> - <li class="active"><a href="#">{{_i}}Home{{/i}}</a></li> - <li><a href="#">{{_i}}Profile{{/i}}</a></li> - <li><a href="#">{{_i}}Messages{{/i}}</a></li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="nav nav-tabs nav-stacked"> - ... -</ul> -</pre> - - <h3>{{_i}}Stacked pills{{/i}}</h3> - <div class="bs-docs-example"> - <ul class="nav nav-pills nav-stacked"> - <li class="active"><a href="#">{{_i}}Home{{/i}}</a></li> - <li><a href="#">{{_i}}Profile{{/i}}</a></li> - <li><a href="#">{{_i}}Messages{{/i}}</a></li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="nav nav-pills nav-stacked"> - ... -</ul> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Dropdowns{{/i}}</h2> - <p>{{_i}}Add dropdown menus with a little extra HTML and the <a href="./javascript.html#dropdowns">dropdowns JavaScript plugin</a>.{{/i}}</p> - - <h3>{{_i}}Tabs with dropdowns{{/i}}</h3> - <div class="bs-docs-example"> - <ul class="nav nav-tabs"> - <li class="active"><a href="#">{{_i}}Home{{/i}}</a></li> - <li><a href="#">{{_i}}Help{{/i}}</a></li> - <li class="dropdown"> - <a class="dropdown-toggle" data-toggle="dropdown" href="#">{{_i}}Dropdown{{/i}} <b class="caret"></b></a> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="nav nav-tabs"> - <li class="dropdown"> - <a class="dropdown-toggle" - data-toggle="dropdown" - href="#"> - {{_i}}Dropdown{{/i}} - <b class="caret"></b> - </a> - <ul class="dropdown-menu"> - <!-- {{_i}}links{{/i}} --> - </ul> - </li> -</ul> -</pre> - - <h3>{{_i}}Pills with dropdowns{{/i}}</h3> - <div class="bs-docs-example"> - <ul class="nav nav-pills"> - <li class="active"><a href="#">{{_i}}Home{{/i}}</a></li> - <li><a href="#">{{_i}}Help{{/i}}</a></li> - <li class="dropdown"> - <a class="dropdown-toggle" data-toggle="dropdown" href="#">{{_i}}Dropdown{{/i}} <b class="caret"></b></a> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </li> - </ul> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<ul class="nav nav-pills"> - <li class="dropdown"> - <a class="dropdown-toggle" - data-toggle="dropdown" - href="#"> - {{_i}}Dropdown{{/i}} - <b class="caret"></b> - </a> - <ul class="dropdown-menu"> - <!-- {{_i}}links{{/i}} --> - </ul> - </li> -</ul> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Nav lists{{/i}}</h2> - <p>{{_i}}A simple and easy way to build groups of nav links with optional headers. They're best used in sidebars like the Finder in OS X.{{/i}}</p> - - <h3>{{_i}}Example nav list{{/i}}</h3> - <p>{{_i}}Take a list of links and add <code>class="nav nav-list"</code>:{{/i}}</p> - <div class="bs-docs-example"> - <div class="well" style="max-width: 340px; padding: 8px 0;"> - <ul class="nav nav-list"> - <li class="nav-header">{{_i}}List header{{/i}}</li> - <li class="active"><a href="#">{{_i}}Home{{/i}}</a></li> - <li><a href="#">{{_i}}Library{{/i}}</a></li> - <li><a href="#">{{_i}}Applications{{/i}}</a></li> - <li class="nav-header">{{_i}}Another list header{{/i}}</li> - <li><a href="#">{{_i}}Profile{{/i}}</a></li> - <li><a href="#">{{_i}}Settings{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Help{{/i}}</a></li> - </ul> - </div> <!-- /well --> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<ul class="nav nav-list"> - <li class="nav-header">{{_i}}List header{{/i}}</li> - <li class="active"><a href="#">{{_i}}Home{{/i}}</a></li> - <li><a href="#">{{_i}}Library{{/i}}</a></li> - ... -</ul> -</pre> - <p> - <span class="label label-info">{{_i}}Note{{/i}}</span> - {{_i}}For nesting within a nav list, include <code>class="nav nav-list"</code> on any nested <code><ul></code>.{{/i}} - </p> - - <h3>{{_i}}Horizontal dividers{{/i}}</h3> - <p>{{_i}}Add a horizontal divider by creating an empty list item with the class <code>.divider</code>, like so:{{/i}}</p> -<pre class="prettyprint linenums"> -<ul class="nav nav-list"> - ... - <li class="divider"></li> - ... -</ul> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Tabbable nav{{/i}}</h2> - <p>{{_i}}Bring your tabs to life with a simple plugin to toggle between content via tabs. Bootstrap integrates tabbable tabs in four styles: top (default), right, bottom, and left.{{/i}}</p> - - <h3>{{_i}}Tabbable example{{/i}}</h3> - <p>{{_i}}To make tabs tabbable, create a <code>.tab-pane</code> with unique ID for every tab and wrap them in <code>.tab-content</code>.{{/i}}</p> - <div class="bs-docs-example"> - <div class="tabbable" style="margin-bottom: 18px;"> - <ul class="nav nav-tabs"> - <li class="active"><a href="#tab1" data-toggle="tab">{{_i}}Section 1{{/i}}</a></li> - <li><a href="#tab2" data-toggle="tab">{{_i}}Section 2{{/i}}</a></li> - <li><a href="#tab3" data-toggle="tab">{{_i}}Section 3{{/i}}</a></li> - </ul> - <div class="tab-content" style="padding-bottom: 9px; border-bottom: 1px solid #ddd;"> - <div class="tab-pane active" id="tab1"> - <p>{{_i}}I'm in Section 1.{{/i}}</p> - </div> - <div class="tab-pane" id="tab2"> - <p>{{_i}}Howdy, I'm in Section 2.{{/i}}</p> - </div> - <div class="tab-pane" id="tab3"> - <p>{{_i}}What up girl, this is Section 3.{{/i}}</p> - </div> - </div> - </div> <!-- /tabbable --> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<div class="tabbable"> <!-- Only required for left/right tabs --> - <ul class="nav nav-tabs"> - <li class="active"><a href="#tab1" data-toggle="tab">{{_i}}Section 1{{/i}}</a></li> - <li><a href="#tab2" data-toggle="tab">{{_i}}Section 2{{/i}}</a></li> - </ul> - <div class="tab-content"> - <div class="tab-pane active" id="tab1"> - <p>{{_i}}I'm in Section 1.{{/i}}</p> - </div> - <div class="tab-pane" id="tab2"> - <p>{{_i}}Howdy, I'm in Section 2.{{/i}}</p> - </div> - </div> -</div> -</pre> - - <h4>{{_i}}Fade in tabs{{/i}}</h4> - <p>{{_i}}To make tabs fade in, add <code>.fade</code> to each <code>.tab-pane</code>.{{/i}}</p> - - <h4>{{_i}}Requires jQuery plugin{{/i}}</h4> - <p>{{_i}}All tabbable tabs are powered by our lightweight jQuery plugin. Read more about how to bring tabbable tabs to life <a href="./javascript.html#tabs">on the JavaScript docs page</a>.{{/i}}</p> - - <h3>{{_i}}Tabbable in any direction{{/i}}</h3> - - <h4>{{_i}}Tabs on the bottom{{/i}}</h4> - <p>{{_i}}Flip the order of the HTML and add a class to put tabs on the bottom.{{/i}}</p> - <div class="bs-docs-example"> - <div class="tabbable tabs-below"> - <div class="tab-content"> - <div class="tab-pane active" id="A"> - <p>{{_i}}I'm in Section A.{{/i}}</p> - </div> - <div class="tab-pane" id="B"> - <p>{{_i}}Howdy, I'm in Section B.{{/i}}</p> - </div> - <div class="tab-pane" id="C"> - <p>{{_i}}What up girl, this is Section C.{{/i}}</p> - </div> - </div> - <ul class="nav nav-tabs"> - <li class="active"><a href="#A" data-toggle="tab">{{_i}}Section 1{{/i}}</a></li> - <li><a href="#B" data-toggle="tab">{{_i}}Section 2{{/i}}</a></li> - <li><a href="#C" data-toggle="tab">{{_i}}Section 3{{/i}}</a></li> - </ul> - </div> <!-- /tabbable --> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<div class="tabbable tabs-below"> - <div class="tab-content"> - ... - </div> - <ul class="nav nav-tabs"> - ... - </ul> -</div> -</pre> - - <h4>{{_i}}Tabs on the left{{/i}}</h4> - <p>{{_i}}Swap the class to put tabs on the left.{{/i}}</p> - <div class="bs-docs-example"> - <div class="tabbable tabs-left"> - <ul class="nav nav-tabs"> - <li class="active"><a href="#lA" data-toggle="tab">{{_i}}Section 1{{/i}}</a></li> - <li><a href="#lB" data-toggle="tab">{{_i}}Section 2{{/i}}</a></li> - <li><a href="#lC" data-toggle="tab">{{_i}}Section 3{{/i}}</a></li> - </ul> - <div class="tab-content"> - <div class="tab-pane active" id="lA"> - <p>{{_i}}I'm in Section A.{{/i}}</p> - </div> - <div class="tab-pane" id="lB"> - <p>{{_i}}Howdy, I'm in Section B.{{/i}}</p> - </div> - <div class="tab-pane" id="lC"> - <p>{{_i}}What up girl, this is Section C.{{/i}}</p> - </div> - </div> - </div> <!-- /tabbable --> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<div class="tabbable tabs-left"> - <ul class="nav nav-tabs"> - ... - </ul> - <div class="tab-content"> - ... - </div> -</div> -</pre> - - <h4>{{_i}}Tabs on the right{{/i}}</h4> - <p>{{_i}}Swap the class to put tabs on the right.{{/i}}</p> - <div class="bs-docs-example"> - <div class="tabbable tabs-right"> - <ul class="nav nav-tabs"> - <li class="active"><a href="#rA" data-toggle="tab">{{_i}}Section 1{{/i}}</a></li> - <li><a href="#rB" data-toggle="tab">{{_i}}Section 2{{/i}}</a></li> - <li><a href="#rC" data-toggle="tab">{{_i}}Section 3{{/i}}</a></li> - </ul> - <div class="tab-content"> - <div class="tab-pane active" id="rA"> - <p>{{_i}}I'm in Section A.{{/i}}</p> - </div> - <div class="tab-pane" id="rB"> - <p>{{_i}}Howdy, I'm in Section B.{{/i}}</p> - </div> - <div class="tab-pane" id="rC"> - <p>{{_i}}What up girl, this is Section C.{{/i}}</p> - </div> - </div> - </div> <!-- /tabbable --> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<div class="tabbable tabs-right"> - <ul class="nav nav-tabs"> - ... - </ul> - <div class="tab-content"> - ... - </div> -</div> -</pre> - - </section> - - - - <!-- Navbar - ================================================== --> - <section id="navbar"> - <div class="page-header"> - <h1>{{_i}}Navbar{{/i}}</h1> - </div> - - - <h2>{{_i}}Basic navbar{{/i}}</h2> - <p>{{_i}}To start, navbars are static (not fixed to the top) and include support for a project name and basic navigation. Place one anywhere within a <code>.container</code>, which sets the width of your site and content.{{/i}}</p> - <div class="bs-docs-example"> - <div class="navbar"> - <div class="navbar-inner"> - <a class="brand" href="#">{{_i}}Title{{/i}}</a> - <ul class="nav"> - <li class="active"><a href="#">{{_i}}Home{{/i}}</a></li> - <li><a href="#">{{_i}}Link{{/i}}</a></li> - <li><a href="#">{{_i}}Link{{/i}}</a></li> - </ul> - </div> - </div> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<div class="navbar"> - <div class="navbar-inner"> - <a class="brand" href="#">{{_i}}Title{{/i}}</a> - <ul class="nav"> - <li class="active"><a href="#">{{_i}}Home{{/i}}</a></li> - <li><a href="#">{{_i}}Link{{/i}}</a></li> - <li><a href="#">{{_i}}Link{{/i}}</a></li> - </ul> - </div> -</div> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Navbar components{{/i}}</h2> - - <h3>{{_i}}Brand{{/i}}</h3> - <p>{{_i}}A simple link to show your brand or project name only requires an anchor tag.{{/i}}</p> - <div class="bs-docs-example"> - <div class="navbar"> - <div class="navbar-inner"> - <a class="brand" href="#">{{_i}}Title{{/i}}</a> - </div> - </div> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<a class="brand" href="#">{{_i}}Project name{{/i}}</a> -</pre> - - <h3>{{_i}}Nav links{{/i}}</h3> - <p>{{_i}}Nav items are simple to add via unordered lists.{{/i}}</p> - <div class="bs-docs-example"> - <div class="navbar"> - <div class="navbar-inner"> - <ul class="nav"> - <li class="active"><a href="#">{{_i}}Home{{/i}}</a></li> - <li><a href="#">{{_i}}Link{{/i}}</a></li> - <li><a href="#">{{_i}}Link{{/i}}</a></li> - </ul> - </div> - </div> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<ul class="nav"> - <li class="active"> - <a href="#">{{_i}}Home{{/i}}</a> - </li> - <li><a href="#">{{_i}}Link{{/i}}</a></li> - <li><a href="#">{{_i}}Link{{/i}}</a></li> -</ul> -</pre> - <p>{{_i}}You can easily add dividers to your nav links with an empty list item and a simple class. Just add this between links:{{/i}}</p> - <div class="bs-docs-example"> - <div class="navbar"> - <div class="navbar-inner"> - <ul class="nav"> - <li class="active"><a href="#">{{_i}}Home{{/i}}</a></li> - <li class="divider-vertical"></li> - <li><a href="#">{{_i}}Link{{/i}}</a></li> - <li class="divider-vertical"></li> - <li><a href="#">{{_i}}Link{{/i}}</a></li> - <li class="divider-vertical"></li> - </ul> - </div> - </div> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<ul class="nav"> - ... - <li class="divider-vertical"></li> - ... -</ul> -</pre> - - <h3>{{_i}}Forms{{/i}}</h3> - <p>{{_i}}To properly style and position a form within the navbar, add the appropriate classes as shown below. For a default form, include <code>.navbar-form</code> and either <code>.pull-left</code> or <code>.pull-right</code> to properly align it.{{/i}}</p> - <div class="bs-docs-example"> - <div class="navbar"> - <div class="navbar-inner"> - <form class="navbar-form pull-left"> - <input type="text" class="span2"> - <button type="submit" class="btn">{{_i}}Submit{{/i}}</button> - </form> - </div> - </div> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<form class="navbar-form pull-left"> - <input type="text" class="span2"> - <button type="submit" class="btn">{{_i}}Submit{{/i}}</button> -</form> -</pre> - - <h3>{{_i}}Search form{{/i}}</h3> - <p>{{_i}}For a more customized search form, add <code>.navbar-search</code> to the <code>form</code> and <code>.search-query</code> to the input for specialized styles in the navbar.{{/i}}</p> - <div class="bs-docs-example"> - <div class="navbar"> - <div class="navbar-inner"> - <form class="navbar-search pull-left"> - <input type="text" class="search-query" placeholder="{{_i}}Search{{/i}}"> - </form> - </div> - </div> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<form class="navbar-search pull-left"> - <input type="text" class="search-query" placeholder="{{_i}}Search{{/i}}"> -</form> -</pre> - - <h3>{{_i}}Component alignment{{/i}}</h3> - <p>{{_i}}Align nav links, search form, or text, use the <code>.pull-left</code> or <code>.pull-right</code> utility classes. Both classes will add a CSS float in the specified direction.{{/i}}</p> - - <h3>{{_i}}Using dropdowns{{/i}}</h3> - <p>{{_i}}Add dropdowns and dropups to the nav with a bit of markup and the <a href="./javascript.html#dropdowns">dropdowns JavaScript plugin</a>.{{/i}}</p> -<pre class="prettyprint linenums"> -<ul class="nav"> - <li class="dropdown"> - <a href="#" class="dropdown-toggle" data-toggle="dropdown"> - {{_i}}Account{{/i}} - <b class="caret"></b> - </a> - <ul class="dropdown-menu"> - ... - </ul> - </li> -</ul> -</pre> - <p>{{_i}}Visit the <a href="./javascript.html#dropdowns">JavaScript dropdowns documentation</a> for more markup and information on calling dropdowns.{{/i}}</p> - - <h3>{{_i}}Text{{/i}}</h3> - <p>{{_i}}Wrap strings of text in an element with <code>.navbar-text</code>, usually on a <code><p></code> tag for proper leading and color.{{/i}}</p> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Optional display variations{{/i}}</h2> - <p>{{_i}}Fix the navbar to the top or bottom of the viewport with an additional class on the outermost div, <code>.navbar</code>.{{/i}}</p> - - <h3>Fixed to top</h3> - <p>{{_i}}Add <code>.navbar-fixed-top</code> and remember to account for the hidden area underneath it by adding at least 40px <code>padding</code> to the <code><body></code>. Be sure to add this after the core Bootstrap CSS and before the optional responsive CSS.{{/i}}</p> - <div class="bs-docs-example bs-navbar-top-example"> - <div class="navbar navbar-fixed-top" style="position: absolute;"> - <div class="navbar-inner"> - <div class="container" style="width: auto; padding: 0 20px;"> - <a class="brand" href="#">{{_i}}Title{{/i}}</a> - <ul class="nav"> - <li class="active"><a href="#">{{_i}}Home{{/i}}</a></li> - <li><a href="#">{{_i}}Link{{/i}}</a></li> - <li><a href="#">{{_i}}Link{{/i}}</a></li> - </ul> - </div> - </div> - </div> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<div class="navbar navbar-fixed-top"> - ... -</div> -</pre> - - <h3>Fixed to bottom</h3> - <p>{{_i}}Add <code>.navbar-fixed-bottom</code> instead.{{/i}}</p> - <div class="bs-docs-example bs-navbar-bottom-example"> - <div class="navbar navbar-fixed-bottom" style="position: absolute;"> - <div class="navbar-inner"> - <div class="container" style="width: auto; padding: 0 20px;"> - <a class="brand" href="#">{{_i}}Title{{/i}}</a> - <ul class="nav"> - <li class="active"><a href="#">{{_i}}Home{{/i}}</a></li> - <li><a href="#">{{_i}}Link{{/i}}</a></li> - <li><a href="#">{{_i}}Link{{/i}}</a></li> - </ul> - </div> - </div> - </div> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<div class="navbar navbar-fixed-bottom"> - ... -</div> -</pre> - - <h3>{{_i}}Static top navbar{{/i}}</h3> - <p>{{_i}}Create a full-width navbar that scrolls away with the page by adding <code>.navbar-static-top</code>. Unlike the <code>.navbar-fixed-top</code> class, you do not need to change any padding on the <code>body</code>.{{/i}}</p> - <div class="bs-docs-example bs-navbar-top-example"> - <div class="navbar navbar-static-top" style="margin: -1px -1px 0;"> - <div class="navbar-inner"> - <div class="container" style="width: auto; padding: 0 20px;"> - <a class="brand" href="#">{{_i}}Title{{/i}}</a> - <ul class="nav"> - <li class="active"><a href="#">{{_i}}Home{{/i}}</a></li> - <li><a href="#">{{_i}}Link{{/i}}</a></li> - <li><a href="#">{{_i}}Link{{/i}}</a></li> - </ul> - </div> - </div> - </div> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<div class="navbar navbar-static-top"> - ... -</div> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Responsive navbar{{/i}}</h2> - <p>{{_i}}To implement a collapsing responsive navbar, wrap your navbar content in a containing div, <code>.nav-collapse.collapse</code>, and add the navbar toggle button, <code>.btn-navbar</code>.{{/i}}</p> - <div class="bs-docs-example"> - <div class="navbar"> - <div class="navbar-inner"> - <div class="container"> - <a class="btn btn-navbar" data-toggle="collapse" data-target=".navbar-responsive-collapse"> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - </a> - <a class="brand" href="#">{{_i}}Title{{/i}}</a> - <div class="nav-collapse collapse navbar-responsive-collapse"> - <ul class="nav"> - <li class="active"><a href="#">{{_i}}Home{{/i}}</a></li> - <li><a href="#">{{_i}}Link{{/i}}</a></li> - <li><a href="#">{{_i}}Link{{/i}}</a></li> - <li class="dropdown"> - <a href="#" class="dropdown-toggle" data-toggle="dropdown">{{_i}}Dropdown{{/i}} <b class="caret"></b></a> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li class="nav-header">Nav header</li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - <li><a href="#">{{_i}}One more separated link{{/i}}</a></li> - </ul> - </li> - </ul> - <form class="navbar-search pull-left" action=""> - <input type="text" class="search-query span2" placeholder="Search"> - </form> - <ul class="nav pull-right"> - <li><a href="#">{{_i}}Link{{/i}}</a></li> - <li class="divider-vertical"></li> - <li class="dropdown"> - <a href="#" class="dropdown-toggle" data-toggle="dropdown">{{_i}}Dropdown{{/i}} <b class="caret"></b></a> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </li> - </ul> - </div><!-- /.nav-collapse --> - </div> - </div><!-- /navbar-inner --> - </div><!-- /navbar --> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<div class="navbar"> - <div class="navbar-inner"> - <div class="container"> - - <!-- {{_i}}.btn-navbar is used as the toggle for collapsed navbar content{{/i}} --> - <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - </a> - - <!-- {{_i}}Be sure to leave the brand out there if you want it shown{{/i}} --> - <a class="brand" href="#">{{_i}}Project name{{/i}}</a> - - <!-- {{_i}}Everything you want hidden at 940px or less, place within here{{/i}} --> - <div class="nav-collapse collapse"> - <!-- .nav, .navbar-search, .navbar-form, etc --> - </div> - - </div> - </div> -</div> -</pre> - <div class="alert alert-info"> - <strong>{{_i}}Heads up!{{/i}}</strong> The responsive navbar requires the <a href="./javascript.html#collapse">collapse plugin</a> and <a href="./scaffolding.html#responsive">responsive Bootstrap CSS file</a>. - </div> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Inverted variation{{/i}}</h2> - <p>{{_i}}Modify the look of the navbar by adding <code>.navbar-inverse</code>.{{/i}}</p> - <div class="bs-docs-example"> - <div class="navbar navbar-inverse" style="position: static;"> - <div class="navbar-inner"> - <div class="container"> - <a class="btn btn-navbar" data-toggle="collapse" data-target=".navbar-inverse-collapse"> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - </a> - <a class="brand" href="#">{{_i}}Title{{/i}}</a> - <div class="nav-collapse collapse navbar-inverse-collapse"> - <ul class="nav"> - <li class="active"><a href="#">{{_i}}Home{{/i}}</a></li> - <li><a href="#">{{_i}}Link{{/i}}</a></li> - <li><a href="#">{{_i}}Link{{/i}}</a></li> - <li class="dropdown"> - <a href="#" class="dropdown-toggle" data-toggle="dropdown">{{_i}}Dropdown{{/i}} <b class="caret"></b></a> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li class="nav-header">Nav header</li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - <li><a href="#">{{_i}}One more separated link{{/i}}</a></li> - </ul> - </li> - </ul> - <form class="navbar-search pull-left" action=""> - <input type="text" class="search-query span2" placeholder="Search"> - </form> - <ul class="nav pull-right"> - <li><a href="#">{{_i}}Link{{/i}}</a></li> - <li class="divider-vertical"></li> - <li class="dropdown"> - <a href="#" class="dropdown-toggle" data-toggle="dropdown">{{_i}}Dropdown{{/i}} <b class="caret"></b></a> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </li> - </ul> - </div><!-- /.nav-collapse --> - </div> - </div><!-- /navbar-inner --> - </div><!-- /navbar --> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<div class="navbar navbar-inverse"> - ... -</div> -</pre> - - </section> - - - - <!-- Breadcrumbs - ================================================== --> - <section id="breadcrumbs"> - <div class="page-header"> - <h1>{{_i}}Breadcrumbs{{/i}} <small></small></h1> - </div> - - <h2>{{_i}}Examples{{/i}}</h2> - <p>{{_i}}A single example shown as it might be displayed across multiple pages.{{/i}}</p> - <div class="bs-docs-example"> - <ul class="breadcrumb"> - <li class="active">{{_i}}Home{{/i}}</li> - </ul> - <ul class="breadcrumb"> - <li><a href="#">{{_i}}Home{{/i}}</a> <span class="divider">/</span></li> - <li class="active">{{_i}}Library{{/i}}</li> - </ul> - <ul class="breadcrumb" style="margin-bottom: 5px;"> - <li><a href="#">{{_i}}Home{{/i}}</a> <span class="divider">/</span></li> - <li><a href="#">{{_i}}Library{{/i}}</a> <span class="divider">/</span></li> - <li class="active">{{_i}}Data{{/i}}</li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="breadcrumb"> - <li><a href="#">{{_i}}Home{{/i}}</a> <span class="divider">/</span></li> - <li><a href="#">{{_i}}Library{{/i}}</a> <span class="divider">/</span></li> - <li class="active">{{_i}}Data{{/i}}</li> -</ul> -</pre> - - </section> - - - - <!-- Pagination - ================================================== --> - <section id="pagination"> - <div class="page-header"> - <h1>{{_i}}Pagination{{/i}} <small>{{_i}}Two options for paging through content{{/i}}</small></h1> - </div> - - <h2>{{_i}}Standard pagination{{/i}}</h2> - <p>{{_i}}Simple pagination inspired by Rdio, great for apps and search results. The large block is hard to miss, easily scalable, and provides large click areas.{{/i}}</p> - <div class="bs-docs-example"> - <div class="pagination"> - <ul> - <li><a href="#">«</a></li> - <li><a href="#">1</a></li> - <li><a href="#">2</a></li> - <li><a href="#">3</a></li> - <li><a href="#">4</a></li> - <li><a href="#">5</a></li> - <li><a href="#">»</a></li> - </ul> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="pagination"> - <ul> - <li><a href="#">Prev</a></li> - <li><a href="#">1</a></li> - <li><a href="#">2</a></li> - <li><a href="#">3</a></li> - <li><a href="#">4</a></li> - <li><a href="#">5</a></li> - <li><a href="#">Next</a></li> - </ul> -</div> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Options{{/i}}</h2> - - <h3>{{_i}}Disabled and active states{{/i}}</h3> - <p>{{_i}}Links are customizable for different circumstances. Use <code>.disabled</code> for unclickable links and <code>.active</code> to indicate the current page.{{/i}}</p> - <div class="bs-docs-example"> - <div class="pagination pagination-centered"> - <ul> - <li class="disabled"><a href="#">«</a></li> - <li class="active"><a href="#">1</a></li> - <li><a href="#">2</a></li> - <li><a href="#">3</a></li> - <li><a href="#">4</a></li> - <li><a href="#">5</a></li> - <li><a href="#">»</a></li> - </ul> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="pagination"> - <ul> - <li class="disabled"><a href="#">&laquo;</a></li> - <li class="active"><a href="#">1</a></li> - ... - </ul> -</div> -</pre> - <p>{{_i}}You can optionally swap out active or disabled anchors for spans to remove click functionality while retaining intended styles.{{/i}}</p> -<pre class="prettyprint linenums"> -<div class="pagination"> - <ul> - <li class="disabled"><span>&laquo;</span></li> - <li class="active"><span>1</span></li> - ... - </ul> -</div> -</pre> - - <h3>{{_i}}Sizes{{/i}}</h3> - <p>{{_i}}Fancy larger or smaller pagination? Add <code>.pagination-large</code>, <code>.pagination-small</code>, or <code>.pagination-mini</code> for additional sizes.{{/i}}</p> - <div class="bs-docs-example"> - <div class="pagination pagination-large"> - <ul> - <li><a href="#">«</a></li> - <li><a href="#">1</a></li> - <li><a href="#">2</a></li> - <li><a href="#">3</a></li> - <li><a href="#">4</a></li> - <li><a href="#">5</a></li> - <li><a href="#">»</a></li> - </ul> - </div> - <div class="pagination"> - <ul> - <li><a href="#">«</a></li> - <li><a href="#">1</a></li> - <li><a href="#">2</a></li> - <li><a href="#">3</a></li> - <li><a href="#">4</a></li> - <li><a href="#">5</a></li> - <li><a href="#">»</a></li> - </ul> - </div> - <div class="pagination pagination-small"> - <ul> - <li><a href="#">«</a></li> - <li><a href="#">1</a></li> - <li><a href="#">2</a></li> - <li><a href="#">3</a></li> - <li><a href="#">4</a></li> - <li><a href="#">5</a></li> - <li><a href="#">»</a></li> - </ul> - </div> - <div class="pagination pagination-mini"> - <ul> - <li><a href="#">«</a></li> - <li><a href="#">1</a></li> - <li><a href="#">2</a></li> - <li><a href="#">3</a></li> - <li><a href="#">4</a></li> - <li><a href="#">5</a></li> - <li><a href="#">»</a></li> - </ul> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="pagination pagination-large"> - <ul> - ... - </ul> -</div> -<div class="pagination"> - <ul> - ... - </ul> -</div> -<div class="pagination pagination-small"> - <ul> - ... - </ul> -</div> -<div class="pagination pagination-mini"> - <ul> - ... - </ul> -</div> -</pre> - - <h3>{{_i}}Alignment{{/i}}</h3> - <p>{{_i}}Add one of two optional classes to change the alignment of pagination links: <code>.pagination-centered</code> and <code>.pagination-right</code>.{{/i}}</p> - <div class="bs-docs-example"> - <div class="pagination pagination-centered"> - <ul> - <li><a href="#">«</a></li> - <li><a href="#">1</a></li> - <li><a href="#">2</a></li> - <li><a href="#">3</a></li> - <li><a href="#">4</a></li> - <li><a href="#">5</a></li> - <li><a href="#">»</a></li> - </ul> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="pagination pagination-centered"> - ... -</div> -</pre> - <div class="bs-docs-example"> - <div class="pagination pagination-right"> - <ul> - <li><a href="#">«</a></li> - <li><a href="#">1</a></li> - <li><a href="#">2</a></li> - <li><a href="#">3</a></li> - <li><a href="#">4</a></li> - <li><a href="#">5</a></li> - <li><a href="#">»</a></li> - </ul> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="pagination pagination-right"> - ... -</div> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Pager{{/i}}</h2> - <p>{{_i}}Quick previous and next links for simple pagination implementations with light markup and styles. It's great for simple sites like blogs or magazines.{{/i}}</p> - - <h3>{{_i}}Default example{{/i}}</h3> - <p>{{_i}}By default, the pager centers links.{{/i}}</p> - <div class="bs-docs-example"> - <ul class="pager"> - <li><a href="#">{{_i}}Previous{{/i}}</a></li> - <li><a href="#">{{_i}}Next{{/i}}</a></li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="pager"> - <li><a href="#">{{_i}}Previous{{/i}}</a></li> - <li><a href="#">{{_i}}Next{{/i}}</a></li> -</ul> -</pre> - - <h3>{{_i}}Aligned links{{/i}}</h3> - <p>{{_i}}Alternatively, you can align each link to the sides:{{/i}}</p> - <div class="bs-docs-example"> - <ul class="pager"> - <li class="previous"><a href="#">{{_i}}← Older{{/i}}</a></li> - <li class="next"><a href="#">{{_i}}Newer →{{/i}}</a></li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="pager"> - <li class="previous"> - <a href="#">{{_i}}&larr; Older{{/i}}</a> - </li> - <li class="next"> - <a href="#">{{_i}}Newer &rarr;{{/i}}</a> - </li> -</ul> -</pre> - - <h3>{{_i}}Optional disabled state{{/i}}</h3> - <p>{{_i}}Pager links also use the general <code>.disabled</code> utility class from the pagination.{{/i}}</p> - <div class="bs-docs-example"> - <ul class="pager"> - <li class="previous disabled"><a href="#">{{_i}}← Older{{/i}}</a></li> - <li class="next"><a href="#">{{_i}}Newer →{{/i}}</a></li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="pager"> - <li class="previous disabled"> - <a href="#">{{_i}}&larr; Older{{/i}}</a> - </li> - ... -</ul> -</pre> - - </section> - - - - <!-- Labels and badges - ================================================== --> - <section id="labels-badges"> - <div class="page-header"> - <h1>{{_i}}Labels and badges{{/i}}</h1> - </div> - <h3>{{_i}}Labels{{/i}}</h3> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th>{{_i}}Labels{{/i}}</th> - <th>{{_i}}Markup{{/i}}</th> - </tr> - </thead> - <tbody> - <tr> - <td> - <span class="label">{{_i}}Default{{/i}}</span> - </td> - <td> - <code><span class="label">{{_i}}Default{{/i}}</span></code> - </td> - </tr> - <tr> - <td> - <span class="label label-success">{{_i}}Success{{/i}}</span> - </td> - <td> - <code><span class="label label-success">{{_i}}Success{{/i}}</span></code> - </td> - </tr> - <tr> - <td> - <span class="label label-warning">{{_i}}Warning{{/i}}</span> - </td> - <td> - <code><span class="label label-warning">{{_i}}Warning{{/i}}</span></code> - </td> - </tr> - <tr> - <td> - <span class="label label-important">{{_i}}Important{{/i}}</span> - </td> - <td> - <code><span class="label label-important">{{_i}}Important{{/i}}</span></code> - </td> - </tr> - <tr> - <td> - <span class="label label-info">{{_i}}Info{{/i}}</span> - </td> - <td> - <code><span class="label label-info">{{_i}}Info{{/i}}</span></code> - </td> - </tr> - <tr> - <td> - <span class="label label-inverse">{{_i}}Inverse{{/i}}</span> - </td> - <td> - <code><span class="label label-inverse">{{_i}}Inverse{{/i}}</span></code> - </td> - </tr> - </tbody> - </table> - - <h3>{{_i}}Badges{{/i}}</h3> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th>{{_i}}Name{{/i}}</th> - <th>{{_i}}Example{{/i}}</th> - <th>{{_i}}Markup{{/i}}</th> - </tr> - </thead> - <tbody> - <tr> - <td> - {{_i}}Default{{/i}} - </td> - <td> - <span class="badge">1</span> - </td> - <td> - <code><span class="badge">1</span></code> - </td> - </tr> - <tr> - <td> - {{_i}}Success{{/i}} - </td> - <td> - <span class="badge badge-success">2</span> - </td> - <td> - <code><span class="badge badge-success">2</span></code> - </td> - </tr> - <tr> - <td> - {{_i}}Warning{{/i}} - </td> - <td> - <span class="badge badge-warning">4</span> - </td> - <td> - <code><span class="badge badge-warning">4</span></code> - </td> - </tr> - <tr> - <td> - {{_i}}Important{{/i}} - </td> - <td> - <span class="badge badge-important">6</span> - </td> - <td> - <code><span class="badge badge-important">6</span></code> - </td> - </tr> - <tr> - <td> - {{_i}}Info{{/i}} - </td> - <td> - <span class="badge badge-info">8</span> - </td> - <td> - <code><span class="badge badge-info">8</span></code> - </td> - </tr> - <tr> - <td> - {{_i}}Inverse{{/i}} - </td> - <td> - <span class="badge badge-inverse">10</span> - </td> - <td> - <code><span class="badge badge-inverse">10</span></code> - </td> - </tr> - </tbody> - </table> - - <h3>{{_i}}Easily collapsible{{/i}}</h3> - <p>{{_i}}For easy implementation, labels and badges will simply collapse (via CSS's <code>:empty</code> selector) when no content exists within.{{/i}}</p> - - </section> - - - - <!-- Typographic components - ================================================== --> - <section id="typography"> - <div class="page-header"> - <h1>{{_i}}Typographic components{{/i}}</h1> - </div> - - <h2>{{_i}}Hero unit{{/i}}</h2> - <p>{{_i}}A lightweight, flexible component to showcase key content on your site. It works well on marketing and content-heavy sites.{{/i}}</p> - <div class="bs-docs-example"> - <div class="hero-unit"> - <h1>{{_i}}Hello, world!{{/i}}</h1> - <p>{{_i}}This is a simple hero unit, a simple jumbotron-style component for calling extra attention to featured content or information.{{/i}}</p> - <p><a class="btn btn-primary btn-large">{{_i}}Learn more{{/i}}</a></p> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="hero-unit"> - <h1>{{_i}}Heading{{/i}}</h1> - <p>{{_i}}Tagline{{/i}}</p> - <p> - <a class="btn btn-primary btn-large"> - {{_i}}Learn more{{/i}} - </a> - </p> -</div> -</pre> - - <h2>{{_i}}Page header{{/i}}</h2> - <p>{{_i}}A simple shell for an <code>h1</code> to appropriately space out and segment sections of content on a page. It can utilize the <code>h1</code>'s default <code>small</code>, element as well most other components (with additional styles).{{/i}}</p> - <div class="bs-docs-example"> - <div class="page-header"> - <h1>{{_i}}Example page header{{/i}} <small>{{_i}}Subtext for header{{/i}}</small></h1> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="page-header"> - <h1>{{_i}}Example page header{{/i}} <small>{{_i}}Subtext for header{{/i}}</small></h1> -</div> -</pre> - - </section> - - - - <!-- Thumbnails - ================================================== --> - <section id="thumbnails"> - <div class="page-header"> - <h1>{{_i}}Thumbnails{{/i}} <small>{{_i}}Grids of images, videos, text, and more{{/i}}</small></h1> - </div> - - <h2>{{_i}}Default thumbnails{{/i}}</h2> - <p>{{_i}}By default, Bootstrap's thumbnails are designed to showcase linked images with minimal required markup.{{/i}}</p> - <div class="row-fluid"> - <ul class="thumbnails"> - <li class="span3"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/260x180" alt=""> - </a> - </li> - <li class="span3"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/260x180" alt=""> - </a> - </li> - <li class="span3"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/260x180" alt=""> - </a> - </li> - <li class="span3"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/260x180" alt=""> - </a> - </li> - </ul> - </div> - - <h2>{{_i}}Highly customizable{{/i}}</h2> - <p>{{_i}}With a bit of extra markup, it's possible to add any kind of HTML content like headings, paragraphs, or buttons into thumbnails.{{/i}}</p> - <div class="row-fluid"> - <ul class="thumbnails"> - <li class="span4"> - <div class="thumbnail"> - <img data-src="holder.js/300x200" alt=""> - <div class="caption"> - <h3>{{_i}}Thumbnail label{{/i}}</h3> - <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> - <p><a href="#" class="btn btn-primary">{{_i}}Action{{/i}}</a> <a href="#" class="btn">{{_i}}Action{{/i}}</a></p> - </div> - </div> - </li> - <li class="span4"> - <div class="thumbnail"> - <img data-src="holder.js/300x200" alt=""> - <div class="caption"> - <h3>{{_i}}Thumbnail label{{/i}}</h3> - <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> - <p><a href="#" class="btn btn-primary">{{_i}}Action{{/i}}</a> <a href="#" class="btn">{{_i}}Action{{/i}}</a></p> - </div> - </div> - </li> - <li class="span4"> - <div class="thumbnail"> - <img data-src="holder.js/300x200" alt=""> - <div class="caption"> - <h3>{{_i}}Thumbnail label{{/i}}</h3> - <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> - <p><a href="#" class="btn btn-primary">{{_i}}Action{{/i}}</a> <a href="#" class="btn">{{_i}}Action{{/i}}</a></p> - </div> - </div> - </li> - </ul> - </div> - - <h3>{{_i}}Why use thumbnails{{/i}}</h3> - <p>{{_i}}Thumbnails (previously <code>.media-grid</code> up until v1.4) are great for grids of photos or videos, image search results, retail products, portfolios, and much more. They can be links or static content.{{/i}}</p> - - <h3>{{_i}}Simple, flexible markup{{/i}}</h3> - <p>{{_i}}Thumbnail markup is simple—a <code>ul</code> with any number of <code>li</code> elements is all that is required. It's also super flexible, allowing for any type of content with just a bit more markup to wrap your contents.{{/i}}</p> - - <h3>{{_i}}Uses grid column sizes{{/i}}</h3> - <p>{{_i}}Lastly, the thumbnails component uses existing grid system classes—like <code>.span2</code> or <code>.span3</code>—for control of thumbnail dimensions.{{/i}}</p> - - <h2>{{_i}}Markup{{/i}}</h2> - <p>{{_i}}As mentioned previously, the required markup for thumbnails is light and straightforward. Here's a look at the default setup <strong>for linked images</strong>:{{/i}}</p> -<pre class="prettyprint linenums"> -<ul class="thumbnails"> - <li class="span4"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/300x200" alt=""> - </a> - </li> - ... -</ul> -</pre> - <p>{{_i}}For custom HTML content in thumbnails, the markup changes slightly. To allow block level content anywhere, we swap the <code><a></code> for a <code><div></code> like so:{{/i}}</p> -<pre class="prettyprint linenums"> -<ul class="thumbnails"> - <li class="span4"> - <div class="thumbnail"> - <img data-src="holder.js/300x200" alt=""> - <h3>{{_i}}Thumbnail label{{/i}}</h3> - <p>{{_i}}Thumbnail caption...{{/i}}</p> - </div> - </li> - ... -</ul> -</pre> - - <h2>{{_i}}More examples{{/i}}</h2> - <p>{{_i}}Explore all your options with the various grid classes available to you. You can also mix and match different sizes.{{/i}}</p> - <ul class="thumbnails"> - <li class="span4"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/360x270" alt=""> - </a> - </li> - <li class="span3"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/260x120" alt=""> - </a> - </li> - <li class="span2"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/160x120" alt=""> - </a> - </li> - <li class="span3"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/260x120" alt=""> - </a> - </li> - <li class="span2"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/160x120" alt=""> - </a> - </li> - </ul> - - </section> - - - - - <!-- Alerts - ================================================== --> - <section id="alerts"> - <div class="page-header"> - <h1>{{_i}}Alerts{{/i}} <small>{{_i}}Styles for success, warning, and error messages{{/i}}</small></h1> - </div> - - <h2>{{_i}}Default alert{{/i}}</h2> - <p>{{_i}}Wrap any text and an optional dismiss button in <code>.alert</code> for a basic warning alert message.{{/i}}</p> - <div class="bs-docs-example"> - <div class="alert"> - <button type="button" class="close" data-dismiss="alert">×</button> - <strong>{{_i}}Warning!{{/i}}</strong> {{_i}}Best check yo self, you're not looking too good.{{/i}} - </div> - </div> -<pre class="prettyprint linenums"> -<div class="alert"> - <button type="button" class="close" data-dismiss="alert">&times;</button> - <strong>{{_i}}Warning!{{/i}}</strong> {{_i}}Best check yo self, you're not looking too good.{{/i}} -</div> -</pre> - - <h3>{{_i}}Dismiss buttons{{/i}}</h3> - <p>{{_i}}Mobile Safari and Mobile Opera browsers, in addition to the <code>data-dismiss="alert"</code> attribute, require an <code>href="#"</code> for the dismissal of alerts when using an <code><a></code> tag.{{/i}}</p> - <pre class="prettyprint linenums"><a href="#" class="close" data-dismiss="alert">&times;</a></pre> - <p>{{_i}}Alternatively, you may use a <code><button></code> element with the data attribute, which we have opted to do for our docs. When using <code><button></code>, you must include <code>type="button"</code> or your forms may not submit.{{/i}}</p> - <pre class="prettyprint linenums"><button type="button" class="close" data-dismiss="alert">&times;</button></pre> - - <h3>{{_i}}Dismiss alerts via JavaScript{{/i}}</h3> - <p>{{_i}}Use the <a href="./javascript.html#alerts">alerts jQuery plugin</a> for quick and easy dismissal of alerts.{{/i}}</p> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Options{{/i}}</h2> - <p>{{_i}}For longer messages, increase the padding on the top and bottom of the alert wrapper by adding <code>.alert-block</code>.{{/i}}</p> - <div class="bs-docs-example"> - <div class="alert alert-block"> - <button type="button" class="close" data-dismiss="alert">×</button> - <h4>{{_i}}Warning!{{/i}}</h4> - <p>{{_i}}Best check yo self, you're not looking too good.{{/i}} Nulla vitae elit libero, a pharetra augue. Praesent commodo cursus magna, vel scelerisque nisl consectetur et.</p> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="alert alert-block"> - <button type="button" class="close" data-dismiss="alert">&times;</button> - <h4>{{_i}}Warning!{{/i}}</h4> - {{_i}}Best check yo self, you're not...{{/i}} -</div> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Contextual alternatives{{/i}}</h2> - <p>{{_i}}Add optional classes to change an alert's connotation.{{/i}}</p> - - <h3>{{_i}}Error or danger{{/i}}</h3> - <div class="bs-docs-example"> - <div class="alert alert-error"> - <button type="button" class="close" data-dismiss="alert">×</button> - <strong>{{_i}}Oh snap!{{/i}}</strong> {{_i}}Change a few things up and try submitting again.{{/i}} - </div> - </div> -<pre class="prettyprint linenums"> -<div class="alert alert-error"> - ... -</div> -</pre> - - <h3>{{_i}}Success{{/i}}</h3> - <div class="bs-docs-example"> - <div class="alert alert-success"> - <button type="button" class="close" data-dismiss="alert">×</button> - <strong>{{_i}}Well done!{{/i}}</strong> {{_i}}You successfully read this important alert message.{{/i}} - </div> - </div> -<pre class="prettyprint linenums"> -<div class="alert alert-success"> - ... -</div> -</pre> - - <h3>{{_i}}Information{{/i}}</h3> - <div class="bs-docs-example"> - <div class="alert alert-info"> - <button type="button" class="close" data-dismiss="alert">×</button> - <strong>{{_i}}Heads up!{{/i}}</strong> {{_i}}This alert needs your attention, but it's not super important.{{/i}} - </div> - </div> -<pre class="prettyprint linenums"> -<div class="alert alert-info"> - ... -</div> -</pre> - - </section> - - - - - <!-- Progress bars - ================================================== --> - <section id="progress"> - <div class="page-header"> - <h1>{{_i}}Progress bars{{/i}} <small>{{_i}}For loading, redirecting, or action status{{/i}}</small></h1> - </div> - - <h2>{{_i}}Examples and markup{{/i}}</h2> - - <h3>{{_i}}Basic{{/i}}</h3> - <p>{{_i}}Default progress bar with a vertical gradient.{{/i}}</p> - <div class="bs-docs-example"> - <div class="progress"> - <div class="bar" style="width: 60%;"></div> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="progress"> - <div class="bar" style="width: 60%;"></div> -</div> -</pre> - - <h3>{{_i}}Striped{{/i}}</h3> - <p>{{_i}}Uses a gradient to create a striped effect. Not available in IE7-8.{{/i}}</p> - <div class="bs-docs-example"> - <div class="progress progress-striped"> - <div class="bar" style="width: 20%;"></div> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="progress progress-striped"> - <div class="bar" style="width: 20%;"></div> -</div> -</pre> - - <h3>{{_i}}Animated{{/i}}</h3> - <p>{{_i}}Add <code>.active</code> to <code>.progress-striped</code> to animate the stripes right to left. Not available in all versions of IE.{{/i}}</p> - <div class="bs-docs-example"> - <div class="progress progress-striped active"> - <div class="bar" style="width: 45%"></div> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="progress progress-striped active"> - <div class="bar" style="width: 40%;"></div> -</div> -</pre> - - <h3>Stacked</h3> - <p>Place multiple bars into the same <code>.progress</code> to stack them.</p> - <div class="bs-docs-example"> - <div class="progress"> - <div class="bar bar-success" style="width: 35%"></div> - <div class="bar bar-warning" style="width: 20%"></div> - <div class="bar bar-danger" style="width: 10%"></div> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="progress"> - <div class="bar bar-success" style="width: 35%;"></div> - <div class="bar bar-warning" style="width: 20%;"></div> - <div class="bar bar-danger" style="width: 10%;"></div> -</div> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Options{{/i}}</h2> - - <h3>{{_i}}Additional colors{{/i}}</h3> - <p>{{_i}}Progress bars use some of the same button and alert classes for consistent styles.{{/i}}</p> - <div class="bs-docs-example"> - <div class="progress progress-info" style="margin-bottom: 9px;"> - <div class="bar" style="width: 20%"></div> - </div> - <div class="progress progress-success" style="margin-bottom: 9px;"> - <div class="bar" style="width: 40%"></div> - </div> - <div class="progress progress-warning" style="margin-bottom: 9px;"> - <div class="bar" style="width: 60%"></div> - </div> - <div class="progress progress-danger"> - <div class="bar" style="width: 80%"></div> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="progress progress-info"> - <div class="bar" style="width: 20%"></div> -</div> -<div class="progress progress-success"> - <div class="bar" style="width: 40%"></div> -</div> -<div class="progress progress-warning"> - <div class="bar" style="width: 60%"></div> -</div> -<div class="progress progress-danger"> - <div class="bar" style="width: 80%"></div> -</div> -</pre> - - <h3>{{_i}}Striped bars{{/i}}</h3> - <p>{{_i}}Similar to the solid colors, we have varied striped progress bars.{{/i}}</p> - <div class="bs-docs-example"> - <div class="progress progress-info progress-striped" style="margin-bottom: 9px;"> - <div class="bar" style="width: 20%"></div> - </div> - <div class="progress progress-success progress-striped" style="margin-bottom: 9px;"> - <div class="bar" style="width: 40%"></div> - </div> - <div class="progress progress-warning progress-striped" style="margin-bottom: 9px;"> - <div class="bar" style="width: 60%"></div> - </div> - <div class="progress progress-danger progress-striped"> - <div class="bar" style="width: 80%"></div> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="progress progress-info progress-striped"> - <div class="bar" style="width: 20%"></div> -</div> -<div class="progress progress-success progress-striped"> - <div class="bar" style="width: 40%"></div> -</div> -<div class="progress progress-warning progress-striped"> - <div class="bar" style="width: 60%"></div> -</div> -<div class="progress progress-danger progress-striped"> - <div class="bar" style="width: 80%"></div> -</div> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Browser support{{/i}}</h2> - <p>{{_i}}Progress bars use CSS3 gradients, transitions, and animations to achieve all their effects. These features are not supported in IE7-9 or older versions of Firefox.{{/i}}</p> - <p>{{_i}}Versions earlier than Internet Explorer 10 and Opera 12 do not support animations.{{/i}}</p> - - </section> - - - - - <!-- Media object - ================================================== --> - <section id="media"> - <div class="page-header"> - <h1>{{_i}}Media object{{/i}}</h1> - </div> - <p class="lead">{{_i}}Abstract object styles for building various types of components (like blog comments, Tweets, etc) that feature a left- or right-aligned image alongside textual content.{{/i}}</p> - - <h2>{{_i}}Default example{{/i}}</h2> - <p>{{_i}}The default media allow to float a media object (images, video, audio) to the left or right of a content block.{{/i}}</p> - <div class="bs-docs-example"> - <div class="media"> - <a class="pull-left" href="#"> - <img class="media-object" data-src="holder.js/64x64"> - </a> - <div class="media-body"> - <h4 class="media-heading">{{_i}}Media heading{{/i}}</h4> - Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus. - </div> - </div> - <div class="media"> - <a class="pull-left" href="#"> - <img class="media-object" data-src="holder.js/64x64"> - </a> - <div class="media-body"> - <h4 class="media-heading">{{_i}}Media heading{{/i}}</h4> - Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus. - <div class="media"> - <a class="pull-left" href="#"> - <img class="media-object" data-src="holder.js/64x64"> - </a> - <div class="media-body"> - <h4 class="media-heading">{{_i}}Media heading{{/i}}</h4> - Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus. - </div> - </div> - </div> - </div> - </div>{{! /.bs-docs-example }} -<pre class="prettyprint linenums"> -<div class="media"> - <a class="pull-left" href="#"> - <img class="media-object" data-src="holder.js/64x64"> - </a> - <div class="media-body"> - <h4 class="media-heading">{{_i}}Media heading{{/i}}</h4> - ... - - <!-- Nested media object --> - <div class="media"> - ... - </div> - </div> -</div> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Media list{{/i}}</h2> - <p>{{_i}}With a bit of extra markup, you can use media inside list (useful for comment threads or articles lists).{{/i}}</p> - <div class="bs-docs-example"> - <ul class="media-list"> - <li class="media"> - <a class="pull-left" href="#"> - <img class="media-object" data-src="holder.js/64x64"> - </a> - <div class="media-body"> - <h4 class="media-heading">{{_i}}Media heading{{/i}}</h4> - <p>Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis.</p> - <!-- Nested media object --> - <div class="media"> - <a class="pull-left" href="#"> - <img class="media-object" data-src="holder.js/64x64"> - </a> - <div class="media-body"> - <h4 class="media-heading">{{_i}}Nested media heading{{/i}}</h4> - Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. - <!-- Nested media object --> - <div class="media"> - <a class="pull-left" href="#"> - <img class="media-object" data-src="holder.js/64x64"> - </a> - <div class="media-body"> - <h4 class="media-heading">{{_i}}Nested media heading{{/i}}</h4> - Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. - </div> - </div> - </div> - </div> - <!-- Nested media object --> - <div class="media"> - <a class="pull-left" href="#"> - <img class="media-object" data-src="holder.js/64x64"> - </a> - <div class="media-body"> - <h4 class="media-heading">{{_i}}Nested media heading{{/i}}</h4> - Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. - </div> - </div> - </div> - </li> - <li class="media"> - <a class="pull-right" href="#"> - <img class="media-object" data-src="holder.js/64x64"> - </a> - <div class="media-body"> - <h4 class="media-heading">{{_i}}Media heading{{/i}}</h4> - Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. - </div> - </li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="media-list"> - <li class="media"> - <a class="pull-left" href="#"> - <img class="media-object" data-src="holder.js/64x64"> - </a> - <div class="media-body"> - <h4 class="media-heading">{{_i}}Media heading{{/i}}</h4> - ... - - <!-- Nested media object --> - <div class="media"> - ... - </div> - </div> - </li> -</ul> -</pre> - -</section> - - - - - - <!-- Miscellaneous - ================================================== --> - <section id="misc"> - <div class="page-header"> - <h1>{{_i}}Miscellaneous{{/i}} <small>{{_i}}Lightweight utility components{{/i}}</small></h1> - </div> - - <h2>{{_i}}Wells{{/i}}</h2> - <p>{{_i}}Use the well as a simple effect on an element to give it an inset effect.{{/i}}</p> - <div class="bs-docs-example"> - <div class="well"> - {{_i}}Look, I'm in a well!{{/i}} - </div> - </div> -<pre class="prettyprint linenums"> -<div class="well"> - ... -</div> -</pre> - <h3>{{_i}}Optional classes{{/i}}</h3> - <p>{{_i}}Control padding and rounded corners with two optional modifier classes.{{/i}}</p> - <div class="bs-docs-example"> - <div class="well well-large"> - {{_i}}Look, I'm in a well!{{/i}} - </div> - </div> -<pre class="prettyprint linenums"> -<div class="well well-large"> - ... -</div> -</pre> - <div class="bs-docs-example"> - <div class="well well-small"> - {{_i}}Look, I'm in a well!{{/i}} - </div> - </div> -<pre class="prettyprint linenums"> -<div class="well well-small"> - ... -</div> -</pre> - - <h2>{{_i}}Close icon{{/i}}</h2> - <p>{{_i}}Use the generic close icon for dismissing content like modals and alerts.{{/i}}</p> - <div class="bs-docs-example"> - <p><button class="close" style="float: none;">×</button></p> - </div> - <pre class="prettyprint linenums"><button class="close">&times;</button></pre> - <p>{{_i}}iOS devices require an <code>href="#"</code> for click events if you would rather use an anchor.{{/i}}</p> - <pre class="prettyprint linenums"><a class="close" href="#">&times;</a></pre> - - <h2>{{_i}}Helper classes{{/i}}</h2> - <p>{{_i}}Simple, focused classes for small display or behavior tweaks.{{/i}}</p> - - <h4>{{_i}}.pull-left{{/i}}</h4> - <p>{{_i}}Float an element left{{/i}}</p> -<pre class="prettyprint linenums"> -class="pull-left" -</pre> -<pre class="prettyprint linenums"> -.pull-left { - float: left; -} -</pre> - - <h4>{{_i}}.pull-right{{/i}}</h4> - <p>{{_i}}Float an element right{{/i}}</p> -<pre class="prettyprint linenums"> -class="pull-right" -</pre> -<pre class="prettyprint linenums"> -.pull-right { - float: right; -} -</pre> - - <h4>{{_i}}.muted{{/i}}</h4> - <p>{{_i}}Change an element's color to <code>#999</code>{{/i}}</p> -<pre class="prettyprint linenums"> -class="muted" -</pre> -<pre class="prettyprint linenums"> -.muted { - color: #999; -} -</pre> - - <h4>{{_i}}.clearfix{{/i}}</h4> - <p>{{_i}}Clear the <code>float</code> on any element{{/i}}</p> -<pre class="prettyprint linenums"> -class="clearfix" -</pre> -<pre class="prettyprint linenums"> -.clearfix { - *zoom: 1; - &:before, - &:after { - display: table; - content: ""; - } - &:after { - clear: both; - } -} -</pre> - - </section> - - - - </div>{{! /span9 }} - </div>{{! row}} - - </div>{{! /.container }} diff --git a/src/main/webapp/bower_components/bootstrap/docs/templates/pages/customize.mustache b/src/main/webapp/bower_components/bootstrap/docs/templates/pages/customize.mustache deleted file mode 100644 index 8d8a2f92..00000000 --- a/src/main/webapp/bower_components/bootstrap/docs/templates/pages/customize.mustache +++ /dev/null @@ -1,393 +0,0 @@ -<!-- Masthead -================================================== --> -<header class="jumbotron subhead" id="overview"> - <div class="container"> - <h1>{{_i}}Customize and download{{/i}}</h1> - <p class="lead">{{_i}}<a href="https://github.com/twitter/bootstrap/zipball/master">Download Bootstrap</a> or customize variables, components, JavaScript plugins, and more.{{/i}}</p> - </div> -</header> - - - <div class="container"> - - <!-- Docs nav - ================================================== --> - <div class="row"> - <div class="span3 bs-docs-sidebar"> - <ul class="nav nav-list bs-docs-sidenav"> - <li><a href="#components"><i class="icon-chevron-right"></i> {{_i}}1. Choose components{{/i}}</a></li> - <li><a href="#plugins"><i class="icon-chevron-right"></i> {{_i}}2. Select jQuery plugins{{/i}}</a></li> - <li><a href="#variables"><i class="icon-chevron-right"></i> {{_i}}3. Customize variables{{/i}}</a></li> - <li><a href="#download"><i class="icon-chevron-right"></i> {{_i}}4. Download{{/i}}</a></li> - </ul> - </div> - <div class="span9"> - - - <!-- Customize form - ================================================== --> - <form> - <section class="download" id="components"> - <div class="page-header"> - <a class="btn btn-small pull-right toggle-all" href="#">{{_i}}Toggle all{{/i}}</a> - <h1> - {{_i}}1. Choose components{{/i}} - </h1> - </div> - <div class="row download-builder"> - <div class="span3"> - <h3>{{_i}}Scaffolding{{/i}}</h3> - <label class="checkbox"><input checked="checked" type="checkbox" value="reset.less"> {{_i}}Normalize and reset{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="scaffolding.less"> {{_i}}Body type and links{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="grid.less"> {{_i}}Grid system{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="layouts.less"> {{_i}}Layouts{{/i}}</label> - <h3>{{_i}}Base CSS{{/i}}</h3> - <label class="checkbox"><input checked="checked" type="checkbox" value="type.less"> {{_i}}Headings, body, etc{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="code.less"> {{_i}}Code and pre{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="labels-badges.less"> {{_i}}Labels and badges{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="tables.less"> {{_i}}Tables{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="forms.less"> {{_i}}Forms{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="buttons.less"> {{_i}}Buttons{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="sprites.less"> {{_i}}Icons{{/i}}</label> - </div><!-- /span --> - <div class="span3"> - <h3>{{_i}}Components{{/i}}</h3> - <label class="checkbox"><input checked="checked" type="checkbox" value="button-groups.less"> {{_i}}Button groups and dropdowns{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="navs.less"> {{_i}}Navs, tabs, and pills{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="navbar.less"> {{_i}}Navbar{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="breadcrumbs.less"> {{_i}}Breadcrumbs{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="pagination.less"> {{_i}}Pagination{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="pager.less"> {{_i}}Pager{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="thumbnails.less"> {{_i}}Thumbnails{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="alerts.less"> {{_i}}Alerts{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="progress-bars.less"> {{_i}}Progress bars{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="hero-unit.less"> {{_i}}Hero unit{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="media.less"> {{_i}}Media component{{/i}}</label> - <h3>{{_i}}JS Components{{/i}}</h3> - <label class="checkbox"><input checked="checked" type="checkbox" value="tooltip.less"> {{_i}}Tooltips{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="popovers.less"> {{_i}}Popovers{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="modals.less"> {{_i}}Modals{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="dropdowns.less"> {{_i}}Dropdowns{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="accordion.less"> {{_i}}Collapse{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="carousel.less"> {{_i}}Carousel{{/i}}</label> - </div><!-- /span --> - <div class="span3"> - <h3>{{_i}}Miscellaneous{{/i}}</h3> - <label class="checkbox"><input checked="checked" type="checkbox" value="wells.less"> {{_i}}Wells{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="close.less"> {{_i}}Close icon{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="utilities.less"> {{_i}}Utilities{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="component-animations.less"> {{_i}}Component animations{{/i}}</label> - <h3>{{_i}}Responsive{{/i}}</h3> - <label class="checkbox"><input checked="checked" type="checkbox" value="responsive-utilities.less"> {{_i}}Visible/hidden classes{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="responsive-767px-max.less"> {{_i}}Narrow tablets and below (<767px){{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="responsive-768px-979px.less"> {{_i}}Tablets to desktops (767-979px){{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="responsive-1200px-min.less"> {{_i}}Large desktops (>1200px){{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="responsive-navbar.less"> {{_i}}Responsive navbar{{/i}}</label> - </div><!-- /span --> - </div><!-- /row --> - </section> - - <section class="download" id="plugins"> - <div class="page-header"> - <a class="btn btn-small pull-right toggle-all" href="#">{{_i}}Toggle all{{/i}}</a> - <h1> - {{_i}}2. Select jQuery plugins{{/i}} - </h1> - </div> - <div class="row download-builder"> - <div class="span3"> - <label class="checkbox"> - <input type="checkbox" checked="true" value="bootstrap-transition.js"> - {{_i}}Transitions <small>(required for any animation)</small>{{/i}} - </label> - <label class="checkbox"> - <input type="checkbox" checked="true" value="bootstrap-modal.js"> - {{_i}}Modals{{/i}} - </label> - <label class="checkbox"> - <input type="checkbox" checked="true" value="bootstrap-dropdown.js"> - {{_i}}Dropdowns{{/i}} - </label> - <label class="checkbox"> - <input type="checkbox" checked="true" value="bootstrap-scrollspy.js"> - {{_i}}Scrollspy{{/i}} - </label> - <label class="checkbox"> - <input type="checkbox" checked="true" value="bootstrap-tab.js"> - {{_i}}Togglable tabs{{/i}} - </label> - <label class="checkbox"> - <input type="checkbox" checked="true" value="bootstrap-tooltip.js"> - {{_i}}Tooltips{{/i}} - </label> - <label class="checkbox"> - <input type="checkbox" checked="true" value="bootstrap-popover.js"> - {{_i}}Popovers <small>(requires Tooltips)</small>{{/i}} - </label> - </div><!-- /span --> - <div class="span3"> - <label class="checkbox"> - <input type="checkbox" checked="true" value="bootstrap-affix.js"> - {{_i}}Affix{{/i}} - </label> - <label class="checkbox"> - <input type="checkbox" checked="true" value="bootstrap-alert.js"> - {{_i}}Alert messages{{/i}} - </label> - <label class="checkbox"> - <input type="checkbox" checked="true" value="bootstrap-button.js"> - {{_i}}Buttons{{/i}} - </label> - <label class="checkbox"> - <input type="checkbox" checked="true" value="bootstrap-collapse.js"> - {{_i}}Collapse{{/i}} - </label> - <label class="checkbox"> - <input type="checkbox" checked="true" value="bootstrap-carousel.js"> - {{_i}}Carousel{{/i}} - </label> - <label class="checkbox"> - <input type="checkbox" checked="true" value="bootstrap-typeahead.js"> - {{_i}}Typeahead{{/i}} - </label> - </div><!-- /span --> - <div class="span3"> - <h4 class="muted">{{_i}}Heads up!{{/i}}</h4> - <p class="muted">{{_i}}All checked plugins will be compiled into a single file, bootstrap.js. All plugins require the latest version of <a href="http://jquery.com/" target="_blank">jQuery</a> to be included.{{/i}}</p> - </div><!-- /span --> - </div><!-- /row --> - </section> - - - <section class="download" id="variables"> - <div class="page-header"> - <a class="btn btn-small pull-right toggle-all" href="#">{{_i}}Reset to defaults{{/i}}</a> - <h1> - {{_i}}3. Customize variables{{/i}} - </h1> - </div> - <div class="row download-builder"> - <div class="span3"> - <h3>{{_i}}Scaffolding{{/i}}</h3> - <label>@bodyBackground</label> - <input type="text" class="span3" placeholder="@white"> - <label>@textColor</label> - <input type="text" class="span3" placeholder="@grayDark"> - - <h3>{{_i}}Links{{/i}}</h3> - <label>@linkColor</label> - <input type="text" class="span3" placeholder="#08c"> - <label>@linkColorHover</label> - <input type="text" class="span3" placeholder="darken(@linkColor, 15%)"> - <h3>{{_i}}Colors{{/i}}</h3> - <label>@blue</label> - <input type="text" class="span3" placeholder="#049cdb"> - <label>@green</label> - <input type="text" class="span3" placeholder="#46a546"> - <label>@red</label> - <input type="text" class="span3" placeholder="#9d261d"> - <label>@yellow</label> - <input type="text" class="span3" placeholder="#ffc40d"> - <label>@orange</label> - <input type="text" class="span3" placeholder="#f89406"> - <label>@pink</label> - <input type="text" class="span3" placeholder="#c3325f"> - <label>@purple</label> - <input type="text" class="span3" placeholder="#7a43b6"> - - <h3>{{_i}}Sprites{{/i}}</h3> - <label>@iconSpritePath</label> - <input type="text" class="span3" placeholder="'../img/glyphicons-halflings.png'"> - <label>@iconWhiteSpritePath</label> - <input type="text" class="span3" placeholder="'../img/glyphicons-halflings-white.png'"> - - <h3>{{_i}}Grid system{{/i}}</h3> - <label>@gridColumns</label> - <input type="text" class="span3" placeholder="12"> - <label>@gridColumnWidth</label> - <input type="text" class="span3" placeholder="60px"> - <label>@gridGutterWidth</label> - <input type="text" class="span3" placeholder="20px"> - <label>@gridColumnWidth1200</label> - <input type="text" class="span3" placeholder="70px"> - <label>@gridGutterWidth1200</label> - <input type="text" class="span3" placeholder="30px"> - <label>@gridColumnWidth768</label> - <input type="text" class="span3" placeholder="42px"> - <label>@gridGutterWidth768</label> - <input type="text" class="span3" placeholder="20px"> - - </div><!-- /span --> - <div class="span3"> - - <h3>{{_i}}Typography{{/i}}</h3> - <label>@sansFontFamily</label> - <input type="text" class="span3" placeholder="'Helvetica Neue', Helvetica, Arial, sans-serif"> - <label>@serifFontFamily</label> - <input type="text" class="span3" placeholder="Georgia, 'Times New Roman', Times, serif"> - <label>@monoFontFamily</label> - <input type="text" class="span3" placeholder="Menlo, Monaco, 'Courier New', monospace"> - - <label>@baseFontSize</label> - <input type="text" class="span3" placeholder="14px"> - <label>@baseFontFamily</label> - <input type="text" class="span3" placeholder="@sansFontFamily"> - <label>@baseLineHeight</label> - <input type="text" class="span3" placeholder="20px"> - - <label>@altFontFamily</label> - <input type="text" class="span3" placeholder="@serifFontFamily"> - <label>@headingsFontFamily</label> - <input type="text" class="span3" placeholder="inherit"> - <label>@headingsFontWeight</label> - <input type="text" class="span3" placeholder="bold"> - <label>@headingsColor</label> - <input type="text" class="span3" placeholder="inherit"> - - <label>@fontSizeLarge</label> - <input type="text" class="span3" placeholder="@baseFontSize * 1.25"> - <label>@fontSizeSmall</label> - <input type="text" class="span3" placeholder="@baseFontSize * 0.85"> - <label>@fontSizeMini</label> - <input type="text" class="span3" placeholder="@baseFontSize * 0.75"> - - <label>@paddingLarge</label> - <input type="text" class="span3" placeholder="11px 19px"> - <label>@paddingSmall</label> - <input type="text" class="span3" placeholder="2px 10px"> - <label>@paddingMini</label> - <input type="text" class="span3" placeholder="1px 6px"> - - <label>@baseBorderRadius</label> - <input type="text" class="span3" placeholder="4px"> - <label>@borderRadiusLarge</label> - <input type="text" class="span3" placeholder="6px"> - <label>@borderRadiusSmall</label> - <input type="text" class="span3" placeholder="3px"> - - <label>@heroUnitBackground</label> - <input type="text" class="span3" placeholder="@grayLighter"> - <label>@heroUnitHeadingColor</label> - <input type="text" class="span3" placeholder="inherit"> - <label>@heroUnitLeadColor</label> - <input type="text" class="span3" placeholder="inherit"> - - <h3>{{_i}}Tables{{/i}}</h3> - <label>@tableBackground</label> - <input type="text" class="span3" placeholder="transparent"> - <label>@tableBackgroundAccent</label> - <input type="text" class="span3" placeholder="#f9f9f9"> - <label>@tableBackgroundHover</label> - <input type="text" class="span3" placeholder="#f5f5f5"> - <label>@tableBorder</label> - <input type="text" class="span3" placeholder="#ddd"> - - <h3>{{_i}}Forms{{/i}}</h3> - <label>@placeholderText</label> - <input type="text" class="span3" placeholder="@grayLight"> - <label>@inputBackground</label> - <input type="text" class="span3" placeholder="@white"> - <label>@inputBorder</label> - <input type="text" class="span3" placeholder="#ccc"> - <label>@inputBorderRadius</label> - <input type="text" class="span3" placeholder="3px"> - <label>@inputDisabledBackground</label> - <input type="text" class="span3" placeholder="@grayLighter"> - <label>@formActionsBackground</label> - <input type="text" class="span3" placeholder="#f5f5f5"> - <label>@btnPrimaryBackground</label> - <input type="text" class="span3" placeholder="@linkColor"> - <label>@btnPrimaryBackgroundHighlight</label> - <input type="text" class="span3" placeholder="darken(@white, 10%)"> - - </div><!-- /span --> - <div class="span3"> - - <h3>{{_i}}Form states & alerts{{/i}}</h3> - <label>@warningText</label> - <input type="text" class="span3" placeholder="#c09853"> - <label>@warningBackground</label> - <input type="text" class="span3" placeholder="#fcf8e3"> - <label>@errorText</label> - <input type="text" class="span3" placeholder="#b94a48"> - <label>@errorBackground</label> - <input type="text" class="span3" placeholder="#f2dede"> - <label>@successText</label> - <input type="text" class="span3" placeholder="#468847"> - <label>@successBackground</label> - <input type="text" class="span3" placeholder="#dff0d8"> - <label>@infoText</label> - <input type="text" class="span3" placeholder="#3a87ad"> - <label>@infoBackground</label> - <input type="text" class="span3" placeholder="#d9edf7"> - - <h3>{{_i}}Navbar{{/i}}</h3> - <label>@navbarHeight</label> - <input type="text" class="span3" placeholder="40px"> - <label>@navbarBackground</label> - <input type="text" class="span3" placeholder="@grayDarker"> - <label>@navbarBackgroundHighlight</label> - <input type="text" class="span3" placeholder="@grayDark"> - <label>@navbarText</label> - <input type="text" class="span3" placeholder="@grayLight"> - <label>@navbarBrandColor</label> - <input type="text" class="span3" placeholder="@navbarLinkColor"> - <label>@navbarLinkColor</label> - <input type="text" class="span3" placeholder="@grayLight"> - <label>@navbarLinkColorHover</label> - <input type="text" class="span3" placeholder="@white"> - <label>@navbarLinkColorActive</label> - <input type="text" class="span3" placeholder="@navbarLinkColorHover"> - <label>@navbarLinkBackgroundHover</label> - <input type="text" class="span3" placeholder="transparent"> - <label>@navbarLinkBackgroundActive</label> - <input type="text" class="span3" placeholder="@navbarBackground"> - <label>@navbarSearchBackground</label> - <input type="text" class="span3" placeholder="lighten(@navbarBackground, 25%)"> - <label>@navbarSearchBackgroundFocus</label> - <input type="text" class="span3" placeholder="@white"> - <label>@navbarSearchBorder</label> - <input type="text" class="span3" placeholder="darken(@navbarSearchBackground, 30%)"> - <label>@navbarSearchPlaceholderColor</label> - <input type="text" class="span3" placeholder="#ccc"> - - <label>@navbarCollapseWidth</label> - <input type="text" class="span3" placeholder="979px"> - <label>@navbarCollapseDesktopWidth</label> - <input type="text" class="span3" placeholder="@navbarCollapseWidth + 1"> - - <h3>{{_i}}Dropdowns{{/i}}</h3> - <label>@dropdownBackground</label> - <input type="text" class="span3" placeholder="@white"> - <label>@dropdownBorder</label> - <input type="text" class="span3" placeholder="rgba(0,0,0,.2)"> - <label>@dropdownLinkColor</label> - <input type="text" class="span3" placeholder="@grayDark"> - <label>@dropdownLinkColorHover</label> - <input type="text" class="span3" placeholder="@white"> - <label>@dropdownLinkBackgroundHover</label> - <input type="text" class="span3" placeholder="@linkColor"> - </div><!-- /span --> - </div><!-- /row --> - </section> - - <section class="download" id="download"> - <div class="page-header"> - <h1> - {{_i}}4. Download{{/i}} - </h1> - </div> - <div class="download-btn"> - <a class="btn btn-primary" href="#" {{#production}}onclick="_gaq.push(['_trackEvent', 'Customize', 'Download', 'Customize and Download']);"{{/production}}>{{_i}}Customize and Download{{/i}}</a> - <h4>{{_i}}What's included?{{/i}}</h4> - <p>{{_i}}Downloads include compiled CSS, compiled and minified CSS, and compiled jQuery plugins, all nicely packed up into a zipball for your convenience.{{/i}}</p> - </div> - </section><!-- /download --> - </form> - - - - </div>{{! /span9 }} - </div>{{! row}} - - </div>{{! /.container }} diff --git a/src/main/webapp/bower_components/bootstrap/docs/templates/pages/extend.mustache b/src/main/webapp/bower_components/bootstrap/docs/templates/pages/extend.mustache deleted file mode 100644 index b5c8d574..00000000 --- a/src/main/webapp/bower_components/bootstrap/docs/templates/pages/extend.mustache +++ /dev/null @@ -1,161 +0,0 @@ -<!-- Subhead -================================================== --> -<header class="jumbotron subhead" id="overview"> - <div class="container"> - <h1>{{_i}}Extending Bootstrap{{/i}}</h1> - <p class="lead">{{_i}}Extend Bootstrap to take advantage of included styles and components, as well as LESS variables and mixins.{{/i}}</p> - <div> -</header> - - <div class="container"> - - <!-- Docs nav - ================================================== --> - <div class="row"> - <div class="span3 bs-docs-sidebar"> - <ul class="nav nav-list bs-docs-sidenav"> - <li><a href="#built-with-less"><i class="icon-chevron-right"></i> {{_i}}Built with LESS{{/i}}</a></li> - <li><a href="#compiling"><i class="icon-chevron-right"></i> {{_i}}Compiling Bootstrap{{/i}}</a></li> - <li><a href="#static-assets"><i class="icon-chevron-right"></i> {{_i}}Use as static assets{{/i}}</a></li> - </ul> - </div> - <div class="span9"> - - - - <!-- BUILT WITH LESS - ================================================== --> - <section id="built-with-less"> - <div class="page-header"> - <h1>{{_i}}Built with LESS{{/i}}</h1> - </div> - - <img style="float: right; height: 36px; margin: 10px 20px 20px" src="assets/img/less-logo-large.png" alt="LESS CSS"> - <p class="lead">{{_i}}Bootstrap is made with LESS at its core, a dynamic stylesheet language created by our good friend, <a href="http://cloudhead.io">Alexis Sellier</a>. It makes developing systems-based CSS faster, easier, and more fun.{{/i}}</p> - - <h3>{{_i}}Why LESS?{{/i}}</h3> - <p>{{_i}}One of Bootstrap's creators wrote a quick <a href="http://www.wordsbyf.at/2012/03/08/why-less/">blog post about this</a>, summarized here:{{/i}}</p> - <ul> - <li>{{_i}}Bootstrap compiles faster ~6x faster with Less compared to Sass{{/i}}</li> - <li>{{_i}}Less is written in JavaScript, making it easier to us to dive in and patch compared to Ruby with Sass.{{/i}}</li> - <li>{{_i}}Less is more; we want to feel like we're writing CSS and making Bootstrap approachable to all.{{/i}}</li> - </ul> - - <h3>{{_i}}What's included?{{/i}}</h3> - <p>{{_i}}As an extension of CSS, LESS includes variables, mixins for reusable snippets of code, operations for simple math, nesting, and even color functions.{{/i}}</p> - - <h3>{{_i}}Learn more{{/i}}</h3> - <p>{{_i}}Visit the official website at <a href="http://lesscss.org">http://lesscss.org</a> to learn more.{{/i}}</p> - </section> - - - - <!-- COMPILING LESS AND BOOTSTRAP - ================================================== --> - <section id="compiling"> - <div class="page-header"> - <h1>{{_i}}Compiling Bootstrap with Less{{/i}}</h1> - </div> - - <p class="lead">{{_i}}Since our CSS is written with Less and utilizes variables and mixins, it needs to be compiled for final production implementation. Here's how.{{/i}}</p> - - <div class="alert alert-info"> - {{_i}}<strong>Note:</strong> If you're submitting a pull request to GitHub with modified CSS, you <strong>must</strong> recompile the CSS via any of these methods.{{/i}} - </div> - - <h2>{{_i}}Tools for compiling{{/i}}</h2> - - <h3>{{_i}}Command line{{/i}}</h3> - <p>{{_i}}Follow <a href="https://github.com/twitter/bootstrap#developers">the instructions in the project readme</a> on GitHub for compiling via command line.{{/i}}</p> - - <h3>{{_i}}JavaScript{{/i}}</h3> - <p>{{_i}}<a href="http://lesscss.org/">Download the latest Less.js</a> and include the path to it (and Bootstrap) in the <code><head></code>.{{/i}}</p> -<pre class="prettyprint"> -<link rel="stylesheet/less" href="/path/to/bootstrap.less"> -<script src="/path/to/less.js"></script> -</pre> - <p>{{_i}}To recompile the .less files, just save them and reload your page. Less.js compiles them and stores them in local storage.{{/i}}</p> - - <h3>{{_i}}Unofficial Mac app{{/i}}</h3> - <p>{{_i}}<a href="http://incident57.com/less/">The unofficial Mac app</a> watches directories of .less files and compiles the code to local files after every save of a watched .less file. If you like, you can toggle preferences in the app for automatic minifying and which directory the compiled files end up in.{{/i}}</p> - - <h3>{{_i}}More apps{{/i}}</h3> - <h4><a href="http://crunchapp.net/" target="_blank">Crunch</a></h4> - <p>{{_i}}Crunch is a great looking LESS editor and compiler built on Adobe Air.{{/i}}</p> - <h4><a href="http://incident57.com/codekit/" target="_blank">CodeKit</a></h4> - <p>{{_i}}Created by the same guy as the unofficial Mac app, CodeKit is a Mac app that compiles LESS, SASS, Stylus, and CoffeeScript.{{/i}}</p> - <h4><a href="http://wearekiss.com/simpless" target="_blank">Simpless</a></h4> - <p>{{_i}}Mac, Linux, and Windows app for drag and drop compiling of LESS files. Plus, the <a href="https://github.com/Paratron/SimpLESS" target="_blank">source code is on GitHub</a>.{{/i}}</p> - - </section> - - - - <!-- Static assets - ================================================== --> - <section id="static-assets"> - <div class="page-header"> - <h1>{{_i}}Use as static assets{{/i}}</h1> - </div> - <p class="lead">{{_i}}<a href="./getting-started.html">Quickly start</a> any web project by dropping in the compiled or minified CSS and JS. Layer on custom styles separately for easy upgrades and maintenance moving forward.{{/i}}</p> - - <h3>{{_i}}Setup file structure{{/i}}</h3> - <p>{{_i}}Download the latest compiled Bootstrap and place into your project. For example, you might have something like this:{{/i}}</p> -<pre> - <span class="icon-folder-open"></span> app/ - <span class="icon-folder-open"></span> layouts/ - <span class="icon-folder-open"></span> templates/ - <span class="icon-folder-open"></span> public/ - <span class="icon-folder-open"></span> css/ - <span class="icon-file"></span> bootstrap.min.css - <span class="icon-folder-open"></span> js/ - <span class="icon-file"></span> bootstrap.min.js - <span class="icon-folder-open"></span> img/ - <span class="icon-file"></span> glyphicons-halflings.png - <span class="icon-file"></span> glyphicons-halflings-white.png -</pre> - - <h3>{{_i}}Utilize starter template{{/i}}</h3> - <p>{{_i}}Copy the following base HTML to get started.{{/i}}</p> -<pre class="prettyprint linenums"> -<html> - <head> - <title>Bootstrap 101 Template</title> - <!-- Bootstrap --> - <link href="public/css/bootstrap.min.css" rel="stylesheet"> - </head> - <body> - <h1>Hello, world!</h1> - <!-- Bootstrap --> - <script src="public/js/bootstrap.min.js"></script> - </body> -</html> -</pre> - - <h3>{{_i}}Layer on custom code{{/i}}</h3> - <p>{{_i}}Work in your custom CSS, JS, and more as necessary to make Bootstrap your own with your own separate CSS and JS files.{{/i}}</p> -<pre class="prettyprint linenums"> -<html> - <head> - <title>Bootstrap 101 Template</title> - <!-- Bootstrap --> - <link href="public/css/bootstrap.min.css" rel="stylesheet"> - <!-- Project --> - <link href="public/css/application.css" rel="stylesheet"> - </head> - <body> - <h1>Hello, world!</h1> - <!-- Bootstrap --> - <script src="public/js/bootstrap.min.js"></script> - <!-- Project --> - <script src="public/js/application.js"></script> - </body> -</html> -</pre> - - </section> - - </div>{{! /span9 }} - </div>{{! row}} - - </div>{{! /.container }} diff --git a/src/main/webapp/bower_components/bootstrap/docs/templates/pages/getting-started.mustache b/src/main/webapp/bower_components/bootstrap/docs/templates/pages/getting-started.mustache deleted file mode 100644 index ae1534ce..00000000 --- a/src/main/webapp/bower_components/bootstrap/docs/templates/pages/getting-started.mustache +++ /dev/null @@ -1,256 +0,0 @@ -<!-- Subhead -================================================== --> -<header class="jumbotron subhead" id="overview"> - <div class="container"> - <h1>{{_i}}Getting started{{/i}}</h1> - <p class="lead">{{_i}}Overview of the project, its contents, and how to get started with a simple template.{{/i}}</p> - </div> -</header> - - - <div class="container"> - - <!-- Docs nav - ================================================== --> - <div class="row"> - <div class="span3 bs-docs-sidebar"> - <ul class="nav nav-list bs-docs-sidenav"> - <li><a href="#download-bootstrap"><i class="icon-chevron-right"></i> {{_i}}Download{{/i}}</a></li> - <li><a href="#file-structure"><i class="icon-chevron-right"></i> {{_i}}File structure{{/i}}</a></li> - <li><a href="#contents"><i class="icon-chevron-right"></i> {{_i}}What's included{{/i}}</a></li> - <li><a href="#html-template"><i class="icon-chevron-right"></i> {{_i}}HTML template{{/i}}</a></li> - <li><a href="#examples"><i class="icon-chevron-right"></i> {{_i}}Examples{{/i}}</a></li> - <li><a href="#what-next"><i class="icon-chevron-right"></i> {{_i}}What next?{{/i}}</a></li> - </ul> - </div> - <div class="span9"> - - - - <!-- Download - ================================================== --> - <section id="download-bootstrap"> - <div class="page-header"> - <h1>{{_i}}1. Download{{/i}}</h1> - </div> - <p class="lead">{{_i}}Before downloading, be sure to have a code editor (we recommend <a href="http://sublimetext.com/2">Sublime Text 2</a>) and some working knowledge of HTML and CSS. We won't walk through the source files here, but they are available for download. We'll focus on getting started with the compiled Bootstrap files.{{/i}}</p> - - <div class="row-fluid"> - <div class="span6"> - <h2>{{_i}}Download compiled{{/i}}</h2> - <p>{{_i}}<strong>Fastest way to get started:</strong> get the compiled and minified versions of our CSS, JS, and images. No docs or original source files.{{/i}}</p> - <p><a class="btn btn-large btn-primary" href="assets/bootstrap.zip" {{#production}}onclick="_gaq.push(['_trackEvent', 'Getting started', 'Download', 'Download compiled']);"{{/production}}>{{_i}}Download Bootstrap{{/i}}</a></p> - </div> - <div class="span6"> - <h2>Download source</h2> - <p>Get the original files for all CSS and JavaScript, along with a local copy of the docs by downloading the latest version directly from GitHub.</p> - <p><a class="btn btn-large" href="https://github.com/twitter/bootstrap/zipball/master" {{#production}}onclick="_gaq.push(['_trackEvent', 'Getting started', 'Download', 'Download source']);"{{/production}}>{{_i}}Download Bootstrap source{{/i}}</a></p> - </div> - </div> - </section> - - - - <!-- File structure - ================================================== --> - <section id="file-structure"> - <div class="page-header"> - <h1>{{_i}}2. File structure{{/i}}</h1> - </div> - <p class="lead">{{_i}}Within the download you'll find the following file structure and contents, logically grouping common assets and providing both compiled and minified variations.{{/i}}</p> - <p>{{_i}}Once downloaded, unzip the compressed folder to see the structure of (the compiled) Bootstrap. You'll see something like this:{{/i}}</p> -<pre class="prettyprint"> - bootstrap/ - ├── css/ - │ ├── bootstrap.css - │ ├── bootstrap.min.css - ├── js/ - │ ├── bootstrap.js - │ ├── bootstrap.min.js - └── img/ - ├── glyphicons-halflings.png - └── glyphicons-halflings-white.png -</pre> - <p>{{_i}}This is the most basic form of Bootstrap: compiled files for quick drop-in usage in nearly any web project. We provide compiled CSS and JS (<code>bootstrap.*</code>), as well as compiled and minified CSS and JS (<code>bootstrap.min.*</code>). The image files are compressed using <a href="http://imageoptim.com/">ImageOptim</a>, a Mac app for compressing PNGs.{{/i}}</p> - <p>{{_i}}Please note that all JavaScript plugins require jQuery to be included.{{/i}}</p> - </section> - - - - <!-- Contents - ================================================== --> - <section id="contents"> - <div class="page-header"> - <h1>{{_i}}3. What's included{{/i}}</h1> - </div> - <p class="lead">{{_i}}Bootstrap comes equipped with HTML, CSS, and JS for all sorts of things, but they can be summarized with a handful of categories visible at the top of the <a href="http://getbootstrap.com">Bootstrap documentation</a>.{{/i}}</p> - - <h2>{{_i}}Docs sections{{/i}}</h2> - <h4><a href="http://twitter.github.com/bootstrap/scaffolding.html">{{_i}}Scaffolding{{/i}}</a></h4> - <p>{{_i}}Global styles for the body to reset type and background, link styles, grid system, and two simple layouts.{{/i}}</p> - <h4><a href="http://twitter.github.com/bootstrap/base-css.html">{{_i}}Base CSS{{/i}}</a></h4> - <p>{{_i}}Styles for common HTML elements like typography, code, tables, forms, and buttons. Also includes <a href="http://glyphicons.com">Glyphicons</a>, a great little icon set.{{/i}}</p> - <h4><a href="http://twitter.github.com/bootstrap/components.html">{{_i}}Components{{/i}}</a></h4> - <p>{{_i}}Basic styles for common interface components like tabs and pills, navbar, alerts, page headers, and more.{{/i}}</p> - <h4><a href="http://twitter.github.com/bootstrap/javascript.html">{{_i}}JavaScript plugins{{/i}}</a></h4> - <p>{{_i}}Similar to Components, these JavaScript plugins are interactive components for things like tooltips, popovers, modals, and more.{{/i}}</p> - - <h2>{{_i}}List of components{{/i}}</h2> - <p>{{_i}}Together, the <strong>Components</strong> and <strong>JavaScript plugins</strong> sections provide the following interface elements:{{/i}}</p> - <ul> - <li>{{_i}}Button groups{{/i}}</li> - <li>{{_i}}Button dropdowns{{/i}}</li> - <li>{{_i}}Navigational tabs, pills, and lists{{/i}}</li> - <li>{{_i}}Navbar{{/i}}</li> - <li>{{_i}}Labels{{/i}}</li> - <li>{{_i}}Badges{{/i}}</li> - <li>{{_i}}Page headers and hero unit{{/i}}</li> - <li>{{_i}}Thumbnails{{/i}}</li> - <li>{{_i}}Alerts{{/i}}</li> - <li>{{_i}}Progress bars{{/i}}</li> - <li>{{_i}}Modals{{/i}}</li> - <li>{{_i}}Dropdowns{{/i}}</li> - <li>{{_i}}Tooltips{{/i}}</li> - <li>{{_i}}Popovers{{/i}}</li> - <li>{{_i}}Accordion{{/i}}</li> - <li>{{_i}}Carousel{{/i}}</li> - <li>{{_i}}Typeahead{{/i}}</li> - </ul> - <p>{{_i}}In future guides, we may walk through these components individually in more detail. Until then, look for each of these in the documentation for information on how to utilize and customize them.{{/i}}</p> - </section> - - - - <!-- HTML template - ================================================== --> - <section id="html-template"> - <div class="page-header"> - <h1>{{_i}}4. Basic HTML template{{/i}}</h1> - </div> - <p class="lead">{{_i}}With a brief intro into the contents out of the way, we can focus on putting Bootstrap to use. To do that, we'll utilize a basic HTML template that includes everything we mentioned in the <a href="./getting-started.html#file-structure">File structure</a>.{{/i}}</p> - <p>{{_i}}Now, here's a look at a <strong>typical HTML file</strong>:{{/i}}</p> -<pre class="prettyprint linenums"> -<!DOCTYPE html> -<html> - <head> - <title>Bootstrap 101 Template</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - </head> - <body> - <h1>Hello, world!</h1> - <script src="http://code.jquery.com/jquery.js"></script> - </body> -</html> -</pre> - <p>{{_i}}To make this <strong>a Bootstrapped template</strong>, just include the appropriate CSS and JS files:{{/i}}</p> -<pre class="prettyprint linenums"> -<!DOCTYPE html> -<html> - <head> - <title>Bootstrap 101 Template</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <!-- Bootstrap --> - <link href="css/bootstrap.min.css" rel="stylesheet" media="screen"> - </head> - <body> - <h1>Hello, world!</h1> - <script src="http://code.jquery.com/jquery.js"></script> - <script src="js/bootstrap.min.js"></script> - </body> -</html> -</pre> - <p>{{_i}}<strong>And you're set!</strong> With those two files added, you can begin to develop any site or application with Bootstrap.{{/i}}</p> - </section> - - - - <!-- Examples - ================================================== --> - <section id="examples"> - <div class="page-header"> - <h1>{{_i}}5. Examples{{/i}}</h1> - </div> - <p class="lead">{{_i}}Move beyond the base template with a few example layouts. We encourage folks to iterate on these examples and not simply use them as an end result.{{/i}}</p> - <ul class="thumbnails bootstrap-examples"> - <li class="span3"> - <a class="thumbnail" href="examples/starter-template.html"> - <img src="assets/img/examples/bootstrap-example-starter.png" alt=""> - </a> - <h4>{{_i}}Starter template{{/i}}</h4> - <p>{{_i}}A barebones HTML document with all the Bootstrap CSS and JavaScript included.{{/i}}</p> - </li> - <li class="span3"> - <a class="thumbnail" href="examples/hero.html"> - <img src="assets/img/examples/bootstrap-example-marketing.png" alt=""> - </a> - <h4>{{_i}}Basic marketing site{{/i}}</h4> - <p>{{_i}}Featuring a hero unit for a primary message and three supporting elements.{{/i}}</p> - </li> - <li class="span3"> - <a class="thumbnail" href="examples/fluid.html"> - <img src="assets/img/examples/bootstrap-example-fluid.png" alt=""> - </a> - <h4>{{_i}}Fluid layout{{/i}}</h4> - <p>{{_i}}Uses our new responsive, fluid grid system to create a seamless liquid layout.{{/i}}</p> - </li> - - <li class="span3"> - <a class="thumbnail" href="examples/marketing-narrow.html"> - <img src="assets/img/examples/bootstrap-example-marketing-narrow.png" alt=""> - </a> - <h4>{{_i}}Narrow marketing{{/i}}</h4> - <p>{{_i}}Slim, lightweight marketing template for small projects or teams.{{/i}}</p> - </li> - <li class="span3"> - <a class="thumbnail" href="examples/justified-nav.html"> - <img src="assets/img/examples/bootstrap-example-justified-nav.png" alt=""> - </a> - <h4>{{_i}}Justified nav{{/i}}</h4> - <p>{{_i}}Marketing page with equal-width navigation links in a modified navbar.{{/i}}</p> - </li> - <li class="span3"> - <a class="thumbnail" href="examples/signin.html"> - <img src="assets/img/examples/bootstrap-example-signin.png" alt=""> - </a> - <h4>{{_i}}Sign in{{/i}}</h4> - <p>{{_i}}Barebones sign in form with custom, larger form controls and a flexible layout.{{/i}}</p> - </li> - - <li class="span3"> - <a class="thumbnail" href="examples/sticky-footer.html"> - <img src="assets/img/examples/bootstrap-example-sticky-footer.png" alt=""> - </a> - <h4>{{_i}}Sticky footer{{/i}}</h4> - <p>{{_i}}Pin a fixed-height footer to the bottom of the user's viewport.{{/i}}</p> - </li> - <li class="span3"> - <a class="thumbnail" href="examples/carousel.html"> - <img src="assets/img/examples/bootstrap-example-carousel.png" alt=""> - </a> - <h4>{{_i}}Carousel jumbotron{{/i}}</h4> - <p>{{_i}}A more interactive riff on the basic marketing site featuring a prominent carousel.{{/i}}</p> - </li> - </ul> - </section> - - - - - <!-- Next - ================================================== --> - <section id="what-next"> - <div class="page-header"> - <h1>{{_i}}What next?{{/i}}</h1> - </div> - <p class="lead">{{_i}}Head to the docs for information, examples, and code snippets, or take the next leap and customize Bootstrap for any upcoming project.{{/i}}</p> - <a class="btn btn-large btn-primary" href="./scaffolding.html" {{#production}}onclick="_gaq.push(['_trackEvent', 'Getting started', 'Next steps', 'Visit docs']);"{{/production}}>{{_i}}Visit the Bootstrap docs{{/i}}</a> - <a class="btn btn-large" href="./customize.html" style="margin-left: 5px;" {{#production}}onclick="_gaq.push(['_trackEvent', 'Getting started', 'Next steps', 'Customize']);"{{/production}}>{{_i}}Customize Bootstrap{{/i}}</a> - </section> - - - - - </div>{{! /span9 }} - </div>{{! row}} - - </div>{{! /.container }} diff --git a/src/main/webapp/bower_components/bootstrap/docs/templates/pages/index.mustache b/src/main/webapp/bower_components/bootstrap/docs/templates/pages/index.mustache deleted file mode 100644 index b38ddec2..00000000 --- a/src/main/webapp/bower_components/bootstrap/docs/templates/pages/index.mustache +++ /dev/null @@ -1,100 +0,0 @@ -<div class="jumbotron masthead"> - <div class="container"> - <h1>{{_i}}Bootstrap{{/i}}</h1> - <p>{{_i}}Sleek, intuitive, and powerful front-end framework for faster and easier web development.{{/i}}</p> - <p> - <a href="assets/bootstrap.zip" class="btn btn-primary btn-large" {{#production}}onclick="_gaq.push(['_trackEvent', 'Jumbotron actions', 'Download', 'Download 2.3.0']);"{{/production}}>{{_i}}Download Bootstrap{{/i}}</a> - </p> - <ul class="masthead-links"> - <li> - <a href="http://github.com/twitter/bootstrap" {{#production}}onclick="_gaq.push(['_trackEvent', 'Jumbotron actions', 'Jumbotron links', 'GitHub project']);"{{/production}}>{{_i}}GitHub project{{/i}}</a> - </li> - <li> - <a href="./getting-started.html#examples" {{#production}}onclick="_gaq.push(['_trackEvent', 'Jumbotron actions', 'Jumbotron links', 'Examples']);"{{/production}}>{{_i}}Examples{{/i}}</a> - </li> - <li> - <a href="./extend.html" {{#production}}onclick="_gaq.push(['_trackEvent', 'Jumbotron actions', 'Jumbotron links', 'Extend']);"{{/production}}>{{_i}}Extend{{/i}}</a> - </li> - <li> - {{_i}}Version 2.3.0{{/i}} - </li> - </ul> - </div> -</div> - -<div class="bs-docs-social"> - <div class="container"> - <ul class="bs-docs-social-buttons"> - <li> - <iframe class="github-btn" src="http://ghbtns.com/github-btn.html?user=twitter&repo=bootstrap&type=watch&count=true" allowtransparency="true" frameborder="0" scrolling="0" width="100px" height="20px"></iframe> - </li> - <li> - <iframe class="github-btn" src="http://ghbtns.com/github-btn.html?user=twitter&repo=bootstrap&type=fork&count=true" allowtransparency="true" frameborder="0" scrolling="0" width="102px" height="20px"></iframe> - </li> - <li class="follow-btn"> - <a href="https://twitter.com/twbootstrap" class="twitter-follow-button" data-link-color="#0069D6" data-show-count="true">{{_i}}Follow @twbootstrap{{/i}}</a> - </li> - <li class="tweet-btn"> - <a href="https://twitter.com/share" class="twitter-share-button" data-url="http://twitter.github.com/bootstrap/" data-count="horizontal" data-via="twbootstrap" data-related="mdo:Creator of Twitter Bootstrap">Tweet</a> - </li> - </ul> - </div> -</div> - -<div class="container"> - - <div class="marketing"> - - <h1>{{_i}}Introducing Bootstrap.{{/i}}</h1> - <p class="marketing-byline">{{_i}}Need reasons to love Bootstrap? Look no further.{{/i}}</p> - - <div class="row-fluid"> - <div class="span4"> - <img class="marketing-img" src="assets/img/bs-docs-twitter-github.png"> - <h2>{{_i}}By nerds, for nerds.{{/i}}</h2> - <p>{{_i}}Built at Twitter by <a href="http://twitter.com/mdo">@mdo</a> and <a href="http://twitter.com/fat">@fat</a>, Bootstrap utilizes <a href="http://lesscss.org">LESS CSS</a>, is compiled via <a href="http://nodejs.org">Node</a>, and is managed through <a href="http://github.com">GitHub</a> to help nerds do awesome stuff on the web.{{/i}}</p> - </div> - <div class="span4"> - <img class="marketing-img" src="assets/img/bs-docs-responsive-illustrations.png"> - <h2>{{_i}}Made for everyone.{{/i}}</h2> - <p>{{_i}}Bootstrap was made to not only look and behave great in the latest desktop browsers (as well as IE7!), but in tablet and smartphone browsers via <a href="./scaffolding.html#responsive">responsive CSS</a> as well.{{/i}}</p> - </div> - <div class="span4"> - <img class="marketing-img" src="assets/img/bs-docs-bootstrap-features.png"> - <h2>{{_i}}Packed with features.{{/i}}</h2> - <p>{{_i}}A 12-column responsive <a href="./scaffolding.html#gridSystem">grid</a>, dozens of components, <a href="./javascript.html">JavaScript plugins</a>, typography, form controls, and even a <a href="./customize.html">web-based Customizer</a> to make Bootstrap your own.{{/i}}</p> - </div> - </div> - - <hr class="soften"> - - <h1>{{_i}}Built with Bootstrap.{{/i}}</h1> - <p class="marketing-byline">{{_i}}For even more sites built with Bootstrap, <a href="http://builtwithbootstrap.tumblr.com/" target="_blank">visit the unofficial Tumblr</a> or <a href="./getting-started.html#examples">browse the examples</a>.{{/i}}</p> - <div class="row-fluid"> - <ul class="thumbnails example-sites"> - <li class="span3"> - <a class="thumbnail" href="http://soundready.fm/" target="_blank"> - <img src="assets/img/example-sites/soundready.png" alt="SoundReady.fm"> - </a> - </li> - <li class="span3"> - <a class="thumbnail" href="http://kippt.com/" target="_blank"> - <img src="assets/img/example-sites/kippt.png" alt="Kippt"> - </a> - </li> - <li class="span3"> - <a class="thumbnail" href="http://www.gathercontent.com/" target="_blank"> - <img src="assets/img/example-sites/gathercontent.png" alt="Gather Content"> - </a> - </li> - <li class="span3"> - <a class="thumbnail" href="http://www.jshint.com/" target="_blank"> - <img src="assets/img/example-sites/jshint.png" alt="JS Hint"> - </a> - </li> - </ul> - </div> - - </div>{{! /.marketing }} - -</div>{{! /.container }} diff --git a/src/main/webapp/bower_components/bootstrap/docs/templates/pages/javascript.mustache b/src/main/webapp/bower_components/bootstrap/docs/templates/pages/javascript.mustache deleted file mode 100644 index 744988f4..00000000 --- a/src/main/webapp/bower_components/bootstrap/docs/templates/pages/javascript.mustache +++ /dev/null @@ -1,1660 +0,0 @@ -<!-- Subhead -================================================== --> -<header class="jumbotron subhead"> - <div class="container"> - <h1>{{_i}}JavaScript{{/i}}</h1> - <p class="lead">{{_i}}Bring Bootstrap's components to life—now with 13 custom jQuery plugins.{{/i}} - </div> -</header> - - <div class="container"> - - <!-- Docs nav - ================================================== --> - <div class="row"> - <div class="span3 bs-docs-sidebar"> - <ul class="nav nav-list bs-docs-sidenav"> - <li><a href="#overview"><i class="icon-chevron-right"></i> {{_i}}Overview{{/i}}</a></li> - <li><a href="#transitions"><i class="icon-chevron-right"></i> {{_i}}Transitions{{/i}}</a></li> - <li><a href="#modals"><i class="icon-chevron-right"></i> {{_i}}Modal{{/i}}</a></li> - <li><a href="#dropdowns"><i class="icon-chevron-right"></i> {{_i}}Dropdown{{/i}}</a></li> - <li><a href="#scrollspy"><i class="icon-chevron-right"></i> {{_i}}Scrollspy{{/i}}</a></li> - <li><a href="#tabs"><i class="icon-chevron-right"></i> {{_i}}Tab{{/i}}</a></li> - <li><a href="#tooltips"><i class="icon-chevron-right"></i> {{_i}}Tooltip{{/i}}</a></li> - <li><a href="#popovers"><i class="icon-chevron-right"></i> {{_i}}Popover{{/i}}</a></li> - <li><a href="#alerts"><i class="icon-chevron-right"></i> {{_i}}Alert{{/i}}</a></li> - <li><a href="#buttons"><i class="icon-chevron-right"></i> {{_i}}Button{{/i}}</a></li> - <li><a href="#collapse"><i class="icon-chevron-right"></i> {{_i}}Collapse{{/i}}</a></li> - <li><a href="#carousel"><i class="icon-chevron-right"></i> {{_i}}Carousel{{/i}}</a></li> - <li><a href="#typeahead"><i class="icon-chevron-right"></i> {{_i}}Typeahead{{/i}}</a></li> - <li><a href="#affix"><i class="icon-chevron-right"></i> {{_i}}Affix{{/i}}</a></li> - </ul> - </div> - <div class="span9"> - - - <!-- Overview - ================================================== --> - <section id="overview"> - <div class="page-header"> - <h1>{{_i}}JavaScript in Bootstrap{{/i}}</h1> - </div> - - <h3>{{_i}}Individual or compiled{{/i}}</h3> - <p>{{_i}}Plugins can be included individually (though some have required dependencies), or all at once. Both <strong>bootstrap.js</strong> and <strong>bootstrap.min.js</strong> contain all plugins in a single file.{{/i}}</p> - - <h3>{{_i}}Data attributes{{/i}}</h3> - <p>{{_i}}You can use all Bootstrap plugins purely through the markup API without writing a single line of JavaScript. This is Bootstrap's first class API and should be your first consideration when using a plugin.{{/i}}</p> - - <p>{{_i}}That said, in some situations it may be desirable to turn this functionality off. Therefore, we also provide the ability to disable the data attribute API by unbinding all events on the body namespaced with `'data-api'`. This looks like this:{{/i}} - <pre class="prettyprint linenums">$('body').off('.data-api')</pre> - - <p>{{_i}}Alternatively, to target a specific plugin, just include the plugin's name as a namespace along with the data-api namespace like this:{{/i}}</p> - <pre class="prettyprint linenums">$('body').off('.alert.data-api')</pre> - - <h3>{{_i}}Programmatic API{{/i}}</h3> - <p>{{_i}}We also believe you should be able to use all Bootstrap plugins purely through the JavaScript API. All public APIs are single, chainable methods, and return the collection acted upon.{{/i}}</p> - <pre class="prettyprint linenums">$(".btn.danger").button("toggle").addClass("fat")</pre> - <p>{{_i}}All methods should accept an optional options object, a string which targets a particular method, or nothing (which initiates a plugin with default behavior):{{/i}}</p> -<pre class="prettyprint linenums"> -$("#myModal").modal() // initialized with defaults -$("#myModal").modal({ keyboard: false }) // initialized with no keyboard -$("#myModal").modal('show') // initializes and invokes show immediately</p> -</pre> - <p>{{_i}}Each plugin also exposes its raw constructor on a `Constructor` property: <code>$.fn.popover.Constructor</code>. If you'd like to get a particular plugin instance, retrieve it directly from an element: <code>$('[rel=popover]').data('popover')</code>.{{/i}}</p> - - <h3>{{_i}}No Conflict{{/i}}</h3> - <p>{{_i}}Sometimes it is necessary to use Bootstrap plugins with other UI frameworks. In these circumstances, namespace collisions can occasionally occur. If this happens, you may call <code>.noConflict</code> on the plugin you wish to revert the value of.{{/i}}</p> - -<pre class="prettyprint linenums"> -var bootstrapButton = $.fn.button.noConflict() // return $.fn.button to previously assigned value -$.fn.bootstrapBtn = bootstrapButton // give $().bootstrapBtn the bootstrap functionality -</pre> - - <h3>{{_i}}Events{{/i}}</h3> - <p>{{_i}}Bootstrap provides custom events for most plugin's unique actions. Generally, these come in an infinitive and past participle form - where the infinitive (ex. <code>show</code>) is triggered at the start of an event, and its past participle form (ex. <code>shown</code>) is trigger on the completion of an action.{{/i}}</p> - <p>{{_i}}All infinitive events provide preventDefault functionality. This provides the ability to stop the execution of an action before it starts.{{/i}}</p> -<pre class="prettyprint linenums"> -$('#myModal').on('show', function (e) { - if (!data) return e.preventDefault() // stops modal from being shown -}) -</pre> - </section> - - - - <!-- Transitions - ================================================== --> - <section id="transitions"> - <div class="page-header"> - <h1>{{_i}}Transitions{{/i}} <small>bootstrap-transition.js</small></h1> - </div> - <h3>{{_i}}About transitions{{/i}}</h3> - <p>{{_i}}For simple transition effects, include <strong>bootstrap-transition.js</strong> once alongside the other JS files. If you're using the compiled (or minified) <strong>bootstrap.js</strong>, there is no need to include this—it's already there.{{/i}}</p> - <h3>{{_i}}Use cases{{/i}}</h3> - <p>{{_i}}A few examples of the transition plugin:{{/i}}</p> - <ul> - <li>{{_i}}Sliding or fading in modals{{/i}}</li> - <li>{{_i}}Fading out tabs{{/i}}</li> - <li>{{_i}}Fading out alerts{{/i}}</li> - <li>{{_i}}Sliding carousel panes{{/i}}</li> - </ul> - - {{! Ideas: include docs for .fade.in, .slide.in, etc }} - </section> - - - - <!-- Modal - ================================================== --> - <section id="modals"> - <div class="page-header"> - <h1>{{_i}}Modals{{/i}} <small>bootstrap-modal.js</small></h1> - </div> - - - <h2>{{_i}}Examples{{/i}}</h2> - <p>{{_i}}Modals are streamlined, but flexible, dialog prompts with the minimum required functionality and smart defaults.{{/i}}</p> - - <h3>{{_i}}Static example{{/i}}</h3> - <p>{{_i}}A rendered modal with header, body, and set of actions in the footer.{{/i}}</p> - <div class="bs-docs-example" style="background-color: #f5f5f5;"> - <div class="modal" style="position: relative; top: auto; left: auto; right: auto; margin: 0 auto 20px; z-index: 1; max-width: 100%;"> - <div class="modal-header"> - <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> - <h3>{{_i}}Modal header{{/i}}</h3> - </div> - <div class="modal-body"> - <p>{{_i}}One fine body…{{/i}}</p> - </div> - <div class="modal-footer"> - <a href="#" class="btn">{{_i}}Close{{/i}}</a> - <a href="#" class="btn btn-primary">{{_i}}Save changes{{/i}}</a> - </div> - </div> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<div class="modal hide fade"> - <div class="modal-header"> - <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button> - <h3>{{_i}}Modal header{{/i}}</h3> - </div> - <div class="modal-body"> - <p>{{_i}}One fine body…{{/i}}</p> - </div> - <div class="modal-footer"> - <a href="#" class="btn">{{_i}}Close{{/i}}</a> - <a href="#" class="btn btn-primary">{{_i}}Save changes{{/i}}</a> - </div> -</div> -</pre> - - <h3>{{_i}}Live demo{{/i}}</h3> - <p>{{_i}}Toggle a modal via JavaScript by clicking the button below. It will slide down and fade in from the top of the page.{{/i}}</p> - <!-- sample modal content --> - <div id="myModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> - <div class="modal-header"> - <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> - <h3 id="myModalLabel">{{_i}}Modal Heading{{/i}}</h3> - </div> - <div class="modal-body"> - <h4>{{_i}}Text in a modal{{/i}}</h4> - <p>Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem.</p> - - <h4>{{_i}}Popover in a modal{{/i}}</h4> - <p>{{_i}}This <a href="#" role="button" class="btn popover-test" title="A Title" data-content="And here's some amazing content. It's very engaging. right?">button</a> should trigger a popover on click.{{/i}}</p> - - <h4>{{_i}}Tooltips in a modal{{/i}}</h4> - <p>{{_i}}<a href="#" class="tooltip-test" title="Tooltip">This link</a> and <a href="#" class="tooltip-test" title="Tooltip">that link</a> should have tooltips on hover.{{/i}}</p> - - <hr> - - <h4>{{_i}}Overflowing text to show optional scrollbar{{/i}}</h4> - <p>{{_i}}We set a fixed <code>max-height</code> on the <code>.modal-body</code>. Watch it overflow with all this extra lorem ipsum text we've included.{{/i}}</p> - <p>Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.</p> - <p>Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.</p> - <p>Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus auctor fringilla.</p> - <p>Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.</p> - <p>Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.</p> - <p>Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus auctor fringilla.</p> - </div> - <div class="modal-footer"> - <button class="btn" data-dismiss="modal">{{_i}}Close{{/i}}</button> - <button class="btn btn-primary">{{_i}}Save changes{{/i}}</button> - </div> - </div> - <div class="bs-docs-example" style="padding-bottom: 24px;"> - <a data-toggle="modal" href="#myModal" class="btn btn-primary btn-large">{{_i}}Launch demo modal{{/i}}</a> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<!-- Button to trigger modal --> -<a href="#myModal" role="button" class="btn" data-toggle="modal">{{_i}}Launch demo modal{{/i}}</a> - -<!-- Modal --> -<div id="myModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> - <div class="modal-header"> - <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> - <h3 id="myModalLabel">Modal header</h3> - </div> - <div class="modal-body"> - <p>{{_i}}One fine body…{{/i}}</p> - </div> - <div class="modal-footer"> - <button class="btn" data-dismiss="modal" aria-hidden="true">{{_i}}Close{{/i}}</button> - <button class="btn btn-primary">{{_i}}Save changes{{/i}}</button> - </div> -</div> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Usage{{/i}}</h2> - - <h3>{{_i}}Via data attributes{{/i}}</h3> - <p>{{_i}}Activate a modal without writing JavaScript. Set <code>data-toggle="modal"</code> on a controller element, like a button, along with a <code>data-target="#foo"</code> or <code>href="#foo"</code> to target a specific modal to toggle.{{/i}}</p> - <pre class="prettyprint linenums"><button type="button" data-toggle="modal" data-target="#myModal">Launch modal</button></pre> - - <h3>{{_i}}Via JavaScript{{/i}}</h3> - <p>{{_i}}Call a modal with id <code>myModal</code> with a single line of JavaScript:{{/i}}</p> - <pre class="prettyprint linenums">$('#myModal').modal(options)</pre> - - <h3>{{_i}}Options{{/i}}</h3> - <p>{{_i}}Options can be passed via data attributes or JavaScript. For data attributes, append the option name to <code>data-</code>, as in <code>data-backdrop=""</code>.{{/i}}</p> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th style="width: 100px;">{{_i}}Name{{/i}}</th> - <th style="width: 50px;">{{_i}}type{{/i}}</th> - <th style="width: 50px;">{{_i}}default{{/i}}</th> - <th>{{_i}}description{{/i}}</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{_i}}backdrop{{/i}}</td> - <td>{{_i}}boolean{{/i}}</td> - <td>{{_i}}true{{/i}}</td> - <td>{{_i}}Includes a modal-backdrop element. Alternatively, specify <code>static</code> for a backdrop which doesn't close the modal on click.{{/i}}</td> - </tr> - <tr> - <td>{{_i}}keyboard{{/i}}</td> - <td>{{_i}}boolean{{/i}}</td> - <td>{{_i}}true{{/i}}</td> - <td>{{_i}}Closes the modal when escape key is pressed{{/i}}</td> - </tr> - <tr> - <td>{{_i}}show{{/i}}</td> - <td>{{_i}}boolean{{/i}}</td> - <td>{{_i}}true{{/i}}</td> - <td>{{_i}}Shows the modal when initialized.{{/i}}</td> - </tr> - <tr> - <td>{{_i}}remote{{/i}}</td> - <td>{{_i}}path{{/i}}</td> - <td>{{_i}}false{{/i}}</td> - <td><p>{{_i}}If a remote url is provided, content will be loaded via jQuery's <code>load</code> method and injected into the <code>.modal-body</code>. If you're using the data api, you may alternatively use the <code>href</code> tag to specify the remote source. An example of this is shown below:{{/i}}</p> - <pre class="prettyprint linenums"><code><a data-toggle="modal" href="remote.html" data-target="#modal">click me</a></code></pre></td> - </tr> - </tbody> - </table> - - <h3{{_i}}>Methods{{/i}}</h3> - <h4>.modal({{_i}}options{{/i}})</h4> - <p>{{_i}}Activates your content as a modal. Accepts an optional options <code>object</code>.{{/i}}</p> -<pre class="prettyprint linenums"> -$('#myModal').modal({ - keyboard: false -}) -</pre> - <h4>.modal('toggle')</h4> - <p>{{_i}}Manually toggles a modal.{{/i}}</p> - <pre class="prettyprint linenums">$('#myModal').modal('toggle')</pre> - <h4>.modal('show')</h4> - <p>{{_i}}Manually opens a modal.{{/i}}</p> - <pre class="prettyprint linenums">$('#myModal').modal('show')</pre> - <h4>.modal('hide')</h4> - <p>{{_i}}Manually hides a modal.{{/i}}</p> - <pre class="prettyprint linenums">$('#myModal').modal('hide')</pre> - <h3>{{_i}}Events{{/i}}</h3> - <p>{{_i}}Bootstrap's modal class exposes a few events for hooking into modal functionality.{{/i}}</p> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th style="width: 150px;">{{_i}}Event{{/i}}</th> - <th>{{_i}}Description{{/i}}</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{_i}}show{{/i}}</td> - <td>{{_i}}This event fires immediately when the <code>show</code> instance method is called.{{/i}}</td> - </tr> - <tr> - <td>{{_i}}shown{{/i}}</td> - <td>{{_i}}This event is fired when the modal has been made visible to the user (will wait for css transitions to complete).{{/i}}</td> - </tr> - <tr> - <td>{{_i}}hide{{/i}}</td> - <td>{{_i}}This event is fired immediately when the <code>hide</code> instance method has been called.{{/i}}</td> - </tr> - <tr> - <td>{{_i}}hidden{{/i}}</td> - <td>{{_i}}This event is fired when the modal has finished being hidden from the user (will wait for css transitions to complete).{{/i}}</td> - </tr> - </tbody> - </table> -<pre class="prettyprint linenums"> -$('#myModal').on('hidden', function () { - // {{_i}}do something…{{/i}} -}) -</pre> - </section> - - - - <!-- Dropdowns - ================================================== --> - <section id="dropdowns"> - <div class="page-header"> - <h1>{{_i}}Dropdowns{{/i}} <small>bootstrap-dropdown.js</small></h1> - </div> - - - <h2>{{_i}}Examples{{/i}}</h2> - <p>{{_i}}Add dropdown menus to nearly anything with this simple plugin, including the navbar, tabs, and pills.{{/i}}</p> - - <h3>{{_i}}Within a navbar{{/i}}</h3> - <div class="bs-docs-example"> - <div id="navbar-example" class="navbar navbar-static"> - <div class="navbar-inner"> - <div class="container" style="width: auto;"> - <a class="brand" href="#">{{_i}}Project Name{{/i}}</a> - <ul class="nav" role="navigation"> - <li class="dropdown"> - <a id="drop1" href="#" role="button" class="dropdown-toggle" data-toggle="dropdown">{{_i}}Dropdown{{/i}} <b class="caret"></b></a> - <ul class="dropdown-menu" role="menu" aria-labelledby="drop1"> - <li role="presentation"><a role="menuitem" tabindex="-1" href="http://google.com">{{_i}}Action{{/i}}</a></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#anotherAction">{{_i}}Another action{{/i}}</a></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">{{_i}}Something else here{{/i}}</a></li> - <li role="presentation" class="divider"></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </li> - <li class="dropdown"> - <a href="#" id="drop2" role="button" class="dropdown-toggle" data-toggle="dropdown">{{_i}}Dropdown 2 {{/i}}<b class="caret"></b></a> - <ul class="dropdown-menu" role="menu" aria-labelledby="drop2"> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">{{_i}}Action{{/i}}</a></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">{{_i}}Another action{{/i}}</a></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">{{_i}}Something else here{{/i}}</a></li> - <li role="presentation" class="divider"></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </li> - </ul> - <ul class="nav pull-right"> - <li id="fat-menu" class="dropdown"> - <a href="#" id="drop3" role="button" class="dropdown-toggle" data-toggle="dropdown">{{_i}}Dropdown 3{{/i}} <b class="caret"></b></a> - <ul class="dropdown-menu" role="menu" aria-labelledby="drop3"> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">{{_i}}Action{{/i}}</a></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">{{_i}}Another action{{/i}}</a></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">{{_i}}Something else here{{/i}}</a></li> - <li role="presentation" class="divider"></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </li> - </ul> - </div> - </div> - </div> <!-- /navbar-example --> - </div> {{! /example }} - - <h3>{{_i}}Within tabs{{/i}}</h3> - <div class="bs-docs-example"> - <ul class="nav nav-pills"> - <li class="active"><a href="#">{{_i}}Regular link{{/i}}</a></li> - <li class="dropdown"> - <a class="dropdown-toggle" id="drop4" role="button" data-toggle="dropdown" href="#">{{_i}}Dropdown{{/i}} <b class="caret"></b></a> - <ul id="menu1" class="dropdown-menu" role="menu" aria-labelledby="drop4"> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">{{_i}}Action{{/i}}</a></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">{{_i}}Another action{{/i}}</a></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">{{_i}}Something else here{{/i}}</a></li> - <li role="presentation" class="divider"></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </li> - <li class="dropdown"> - <a class="dropdown-toggle" id="drop5" role="button" data-toggle="dropdown" href="#">{{_i}}Dropdown 2{{/i}} <b class="caret"></b></a> - <ul id="menu2" class="dropdown-menu" role="menu" aria-labelledby="drop5"> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">{{_i}}Action{{/i}}</a></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">{{_i}}Another action{{/i}}</a></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">{{_i}}Something else here{{/i}}</a></li> - <li role="presentation" class="divider"></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </li> - <li class="dropdown"> - <a class="dropdown-toggle" id="drop5" role="button" data-toggle="dropdown" href="#">{{_i}}Dropdown 3{{/i}} <b class="caret"></b></a> - <ul id="menu3" class="dropdown-menu" role="menu" aria-labelledby="drop5"> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">{{_i}}Action{{/i}}</a></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">{{_i}}Another action{{/i}}</a></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">{{_i}}Something else here{{/i}}</a></li> - <li role="presentation" class="divider"></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </li> - </ul> <!-- /tabs --> - </div> {{! /example }} - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Usage{{/i}}</h2> - - <h3>{{_i}}Via data attributes{{/i}}</h3> - <p>{{_i}}Add <code>data-toggle="dropdown"</code> to a link or button to toggle a dropdown.{{/i}}</p> -<pre class="prettyprint linenums"> -<div class="dropdown"> - <a class="dropdown-toggle" data-toggle="dropdown" href="#">Dropdown trigger</a> - <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"> - ... - </ul> -</div> -</pre> - <p>{{_i}}To keep URLs intact, use the <code>data-target</code> attribute instead of <code>href="#"</code>.{{/i}}</p> -<pre class="prettyprint linenums"> -<div class="dropdown"> - <a class="dropdown-toggle" id="dLabel" role="button" data-toggle="dropdown" data-target="#" href="/page.html"> - {{_i}}Dropdown{{/i}} - <b class="caret"></b> - </a> - <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"> - ... - </ul> -</div> -</pre> - - <h3>{{_i}}Via JavaScript{{/i}}</h3> - <p>{{_i}}Call the dropdowns via JavaScript:{{/i}}</p> - <pre class="prettyprint linenums">$('.dropdown-toggle').dropdown()</pre> - - <h3>{{_i}}Options{{/i}}</h3> - <p><em>{{_i}}None{{/i}}</em></p> - - <h3>{{_i}}Methods{{/i}}</h3> - <h4>$().dropdown('toggle')</h4> - <p>{{_i}}A programmatic api for toggling menus for a given navbar or tabbed navigation.{{/i}}</p> - </section> - - - - <!-- ScrollSpy - ================================================== --> - <section id="scrollspy"> - <div class="page-header"> - <h1>{{_i}}ScrollSpy{{/i}} <small>bootstrap-scrollspy.js</small></h1> - </div> - - - <h2>{{_i}}Example in navbar{{/i}}</h2> - <p>{{_i}}The ScrollSpy plugin is for automatically updating nav targets based on scroll position. Scroll the area below the navbar and watch the active class change. The dropdown sub items will be highlighted as well.{{/i}}</p> - <div class="bs-docs-example"> - <div id="navbarExample" class="navbar navbar-static"> - <div class="navbar-inner"> - <div class="container" style="width: auto;"> - <a class="brand" href="#">{{_i}}Project Name{{/i}}</a> - <ul class="nav"> - <li><a href="#fat">@fat</a></li> - <li><a href="#mdo">@mdo</a></li> - <li class="dropdown"> - <a href="#" class="dropdown-toggle" data-toggle="dropdown">{{_i}}Dropdown{{/i}} <b class="caret"></b></a> - <ul class="dropdown-menu"> - <li><a href="#one">{{_i}}one{{/i}}</a></li> - <li><a href="#two">{{_i}}two{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#three">{{_i}}three{{/i}}</a></li> - </ul> - </li> - </ul> - </div> - </div> - </div> - <div data-spy="scroll" data-target="#navbarExample" data-offset="0" class="scrollspy-example"> - <h4 id="fat">@fat</h4> - <p>Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.</p> - <h4 id="mdo">@mdo</h4> - <p>Veniam marfa mustache skateboard, adipisicing fugiat velit pitchfork beard. Freegan beard aliqua cupidatat mcsweeney's vero. Cupidatat four loko nisi, ea helvetica nulla carles. Tattooed cosby sweater food truck, mcsweeney's quis non freegan vinyl. Lo-fi wes anderson +1 sartorial. Carles non aesthetic exercitation quis gentrify. Brooklyn adipisicing craft beer vice keytar deserunt.</p> - <h4 id="one">one</h4> - <p>Occaecat commodo aliqua delectus. Fap craft beer deserunt skateboard ea. Lomo bicycle rights adipisicing banh mi, velit ea sunt next level locavore single-origin coffee in magna veniam. High life id vinyl, echo park consequat quis aliquip banh mi pitchfork. Vero VHS est adipisicing. Consectetur nisi DIY minim messenger bag. Cred ex in, sustainable delectus consectetur fanny pack iphone.</p> - <h4 id="two">two</h4> - <p>In incididunt echo park, officia deserunt mcsweeney's proident master cleanse thundercats sapiente veniam. Excepteur VHS elit, proident shoreditch +1 biodiesel laborum craft beer. Single-origin coffee wayfarers irure four loko, cupidatat terry richardson master cleanse. Assumenda you probably haven't heard of them art party fanny pack, tattooed nulla cardigan tempor ad. Proident wolf nesciunt sartorial keffiyeh eu banh mi sustainable. Elit wolf voluptate, lo-fi ea portland before they sold out four loko. Locavore enim nostrud mlkshk brooklyn nesciunt.</p> - <h4 id="three">three</h4> - <p>Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.</p> - <p>Keytar twee blog, culpa messenger bag marfa whatever delectus food truck. Sapiente synth id assumenda. Locavore sed helvetica cliche irony, thundercats you probably haven't heard of them consequat hoodie gluten-free lo-fi fap aliquip. Labore elit placeat before they sold out, terry richardson proident brunch nesciunt quis cosby sweater pariatur keffiyeh ut helvetica artisan. Cardigan craft beer seitan readymade velit. VHS chambray laboris tempor veniam. Anim mollit minim commodo ullamco thundercats. - </p> - </div> - </div>{{! /example }} - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Usage{{/i}}</h2> - - <h3>{{_i}}Via data attributes{{/i}}</h3> - <p>{{_i}}To easily add scrollspy behavior to your topbar navigation, just add <code>data-spy="scroll"</code> to the element you want to spy on (most typically this would be the body) and <code>data-target=".navbar"</code> to select which nav to use. You'll want to use scrollspy with a <code>.nav</code> component.{{/i}}</p> - <pre class="prettyprint linenums"><body data-spy="scroll" data-target=".navbar">...</body></pre> - - <h3>{{_i}}Via JavaScript{{/i}}</h3> - <p>{{_i}}Call the scrollspy via JavaScript:{{/i}}</p> - <pre class="prettyprint linenums">$('#navbar').scrollspy()</pre> - - <div class="alert alert-info"> - <strong>{{_i}}Heads up!{{/i}}</strong> - {{_i}}Navbar links must have resolvable id targets. For example, a <code><a href="#home">home</a></code> must correspond to something in the dom like <code><div id="home"></div></code>.{{/i}} - </div> - - <h3>{{_i}}Methods{{/i}}</h3> - <h4>.scrollspy('refresh')</h4> - <p>{{_i}}When using scrollspy in conjunction with adding or removing of elements from the DOM, you'll need to call the refresh method like so:{{/i}}</p> -<pre class="prettyprint linenums"> -$('[data-spy="scroll"]').each(function () { - var $spy = $(this).scrollspy('refresh') -}); -</pre> - - <h3>{{_i}}Options{{/i}}</h3> - <p>{{_i}}Options can be passed via data attributes or JavaScript. For data attributes, append the option name to <code>data-</code>, as in <code>data-offset=""</code>.{{/i}}</p> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th style="width: 100px;">{{_i}}Name{{/i}}</th> - <th style="width: 100px;">{{_i}}type{{/i}}</th> - <th style="width: 50px;">{{_i}}default{{/i}}</th> - <th>{{_i}}description{{/i}}</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{_i}}offset{{/i}}</td> - <td>{{_i}}number{{/i}}</td> - <td>{{_i}}10{{/i}}</td> - <td>{{_i}}Pixels to offset from top when calculating position of scroll.{{/i}}</td> - </tr> - </tbody> - </table> - - <h3>{{_i}}Events{{/i}}</h3> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th style="width: 150px;">{{_i}}Event{{/i}}</th> - <th>{{_i}}Description{{/i}}</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{_i}}activate{{/i}}</td> - <td>{{_i}}This event fires whenever a new item becomes activated by the scrollspy.{{/i}}</td> - </tr> - </tbody> - </table> - </section> - - - - <!-- Tabs - ================================================== --> - <section id="tabs"> - <div class="page-header"> - <h1>{{_i}}Togglable tabs{{/i}} <small>bootstrap-tab.js</small></h1> - </div> - - - <h2>{{_i}}Example tabs{{/i}}</h2> - <p>{{_i}}Add quick, dynamic tab functionality to transition through panes of local content, even via dropdown menus.{{/i}}</p> - <div class="bs-docs-example"> - <ul id="myTab" class="nav nav-tabs"> - <li class="active"><a href="#home" data-toggle="tab">{{_i}}Home{{/i}}</a></li> - <li><a href="#profile" data-toggle="tab">{{_i}}Profile{{/i}}</a></li> - <li class="dropdown"> - <a href="#" class="dropdown-toggle" data-toggle="dropdown">{{_i}}Dropdown{{/i}} <b class="caret"></b></a> - <ul class="dropdown-menu"> - <li><a href="#dropdown1" data-toggle="tab">@fat</a></li> - <li><a href="#dropdown2" data-toggle="tab">@mdo</a></li> - </ul> - </li> - </ul> - <div id="myTabContent" class="tab-content"> - <div class="tab-pane fade in active" id="home"> - <p>Raw denim you probably haven't heard of them jean shorts Austin. Nesciunt tofu stumptown aliqua, retro synth master cleanse. Mustache cliche tempor, williamsburg carles vegan helvetica. Reprehenderit butcher retro keffiyeh dreamcatcher synth. Cosby sweater eu banh mi, qui irure terry richardson ex squid. Aliquip placeat salvia cillum iphone. Seitan aliquip quis cardigan american apparel, butcher voluptate nisi qui.</p> - </div> - <div class="tab-pane fade" id="profile"> - <p>Food truck fixie locavore, accusamus mcsweeney's marfa nulla single-origin coffee squid. Exercitation +1 labore velit, blog sartorial PBR leggings next level wes anderson artisan four loko farm-to-table craft beer twee. Qui photo booth letterpress, commodo enim craft beer mlkshk aliquip jean shorts ullamco ad vinyl cillum PBR. Homo nostrud organic, assumenda labore aesthetic magna delectus mollit. Keytar helvetica VHS salvia yr, vero magna velit sapiente labore stumptown. Vegan fanny pack odio cillum wes anderson 8-bit, sustainable jean shorts beard ut DIY ethical culpa terry richardson biodiesel. Art party scenester stumptown, tumblr butcher vero sint qui sapiente accusamus tattooed echo park.</p> - </div> - <div class="tab-pane fade" id="dropdown1"> - <p>Etsy mixtape wayfarers, ethical wes anderson tofu before they sold out mcsweeney's organic lomo retro fanny pack lo-fi farm-to-table readymade. Messenger bag gentrify pitchfork tattooed craft beer, iphone skateboard locavore carles etsy salvia banksy hoodie helvetica. DIY synth PBR banksy irony. Leggings gentrify squid 8-bit cred pitchfork. Williamsburg banh mi whatever gluten-free, carles pitchfork biodiesel fixie etsy retro mlkshk vice blog. Scenester cred you probably haven't heard of them, vinyl craft beer blog stumptown. Pitchfork sustainable tofu synth chambray yr.</p> - </div> - <div class="tab-pane fade" id="dropdown2"> - <p>Trust fund seitan letterpress, keytar raw denim keffiyeh etsy art party before they sold out master cleanse gluten-free squid scenester freegan cosby sweater. Fanny pack portland seitan DIY, art party locavore wolf cliche high life echo park Austin. Cred vinyl keffiyeh DIY salvia PBR, banh mi before they sold out farm-to-table VHS viral locavore cosby sweater. Lomo wolf viral, mustache readymade thundercats keffiyeh craft beer marfa ethical. Wolf salvia freegan, sartorial keffiyeh echo park vegan.</p> - </div> - </div> - </div>{{! /example }} - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Usage{{/i}}</h2> - <p>{{_i}}Enable tabbable tabs via JavaScript (each tab needs to be activated individually):{{/i}}</p> -<pre class="prettyprint linenums"> -$('#myTab a').click(function (e) { - e.preventDefault(); - $(this).tab('show'); -})</pre> - <p>{{_i}}You can activate individual tabs in several ways:{{/i}}</p> -<pre class="prettyprint linenums"> -$('#myTab a[href="#profile"]').tab('show'); // Select tab by name -$('#myTab a:first').tab('show'); // Select first tab -$('#myTab a:last').tab('show'); // Select last tab -$('#myTab li:eq(2) a').tab('show'); // Select third tab (0-indexed) -</pre> - - <h3>{{_i}}Markup{{/i}}</h3> - <p>{{_i}}You can activate a tab or pill navigation without writing any JavaScript by simply specifying <code>data-toggle="tab"</code> or <code>data-toggle="pill"</code> on an element. Adding the <code>nav</code> and <code>nav-tabs</code> classes to the tab <code>ul</code> will apply the Bootstrap tab styling.{{/i}}</p> -<pre class="prettyprint linenums"> -<ul class="nav nav-tabs"> - <li><a href="#home" data-toggle="tab">{{_i}}Home{{/i}}</a></li> - <li><a href="#profile" data-toggle="tab">{{_i}}Profile{{/i}}</a></li> - <li><a href="#messages" data-toggle="tab">{{_i}}Messages{{/i}}</a></li> - <li><a href="#settings" data-toggle="tab">{{_i}}Settings{{/i}}</a></li> -</ul></pre> - - <h3>{{_i}}Methods{{/i}}</h3> - <h4>$().tab</h4> - <p> - {{_i}}Activates a tab element and content container. Tab should have either a <code>data-target</code> or an <code>href</code> targeting a container node in the DOM.{{/i}} - </p> -<pre class="prettyprint linenums"> -<ul class="nav nav-tabs" id="myTab"> - <li class="active"><a href="#home">{{_i}}Home{{/i}}</a></li> - <li><a href="#profile">{{_i}}Profile{{/i}}</a></li> - <li><a href="#messages">{{_i}}Messages{{/i}}</a></li> - <li><a href="#settings">{{_i}}Settings{{/i}}</a></li> -</ul> - -<div class="tab-content"> - <div class="tab-pane active" id="home">...</div> - <div class="tab-pane" id="profile">...</div> - <div class="tab-pane" id="messages">...</div> - <div class="tab-pane" id="settings">...</div> -</div> - -<script> - $(function () { - $('#myTab a:last').tab('show'); - }) -</script> -</pre> - - <h3>{{_i}}Events{{/i}}</h3> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th style="width: 150px;">{{_i}}Event{{/i}}</th> - <th>{{_i}}Description{{/i}}</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{_i}}show{{/i}}</td> - <td>{{_i}}This event fires on tab show, but before the new tab has been shown. Use <code>event.target</code> and <code>event.relatedTarget</code> to target the active tab and the previous active tab (if available) respectively.{{/i}}</td> - </tr> - <tr> - <td>{{_i}}shown{{/i}}</td> - <td>{{_i}}This event fires on tab show after a tab has been shown. Use <code>event.target</code> and <code>event.relatedTarget</code> to target the active tab and the previous active tab (if available) respectively.{{/i}}</td> - </tr> - </tbody> - </table> -<pre class="prettyprint linenums"> -$('a[data-toggle="tab"]').on('shown', function (e) { - e.target // activated tab - e.relatedTarget // previous tab -}) -</pre> - </section> - - - <!-- Tooltips - ================================================== --> - <section id="tooltips"> - <div class="page-header"> - <h1>{{_i}}Tooltips{{/i}} <small>bootstrap-tooltip.js</small></h1> - </div> - - - <h2>{{_i}}Examples{{/i}}</h2> - <p>{{_i}}Inspired by the excellent jQuery.tipsy plugin written by Jason Frame; Tooltips are an updated version, which don't rely on images, use CSS3 for animations, and data-attributes for local title storage.{{/i}}</p> - <p>{{_i}}For performance reasons, the tooltip and popover data-apis are opt in, meaning <strong>you must initialize them yourself</strong>.{{/i}}</p> - <p>{{_i}}Hover over the links below to see tooltips:{{/i}}</p> - <div class="bs-docs-example tooltip-demo"> - <p class="muted" style="margin-bottom: 0;">{{_i}}Tight pants next level keffiyeh <a href="#" data-toggle="tooltip" title="Default tooltip">you probably</a> haven't heard of them. Photo booth beard raw denim letterpress vegan messenger bag stumptown. Farm-to-table seitan, mcsweeney's fixie sustainable quinoa 8-bit american apparel <a href="#" data-toggle="tooltip" title="Another tooltip">have a</a> terry richardson vinyl chambray. Beard stumptown, cardigans banh mi lomo thundercats. Tofu biodiesel williamsburg marfa, four loko mcsweeney's cleanse vegan chambray. A really ironic artisan <a href="#" data-toggle="tooltip" title="A much longer tooltip belongs right here to demonstrate the max-width we apply.">whatever keytar</a>, scenester farm-to-table banksy Austin <a href="#" data-toggle="tooltip" title="The last tip!">twitter handle</a> freegan cred raw denim single-origin coffee viral.{{/i}} - </p> - </div>{{! /example }} - - <h3>{{_i}}Four directions{{/i}}</h3> - <div class="bs-docs-example tooltip-demo"> - <ul class="bs-docs-tooltip-examples"> - <li><a href="#" data-toggle="tooltip" data-placement="top" title="Tooltip on top">Tooltip on top</a></li> - <li><a href="#" data-toggle="tooltip" data-placement="right" title="Tooltip on right">Tooltip on right</a></li> - <li><a href="#" data-toggle="tooltip" data-placement="bottom" title="Tooltip on bottom">Tooltip on bottom</a></li> - <li><a href="#" data-toggle="tooltip" data-placement="left" title="Tooltip on left">Tooltip on left</a></li> - </ul> - </div>{{! /example }} - - - <h3>{{_i}}Tooltips in input groups{{/i}}</h3> - <p>{{_i}}When using tooltips and popovers with the Bootstrap input groups, you'll have to set the <code>container</code> (documented below) option to avoid unwanted side effects.{{/i}}</p> - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Usage{{/i}}</h2> - <p>{{_i}}Trigger the tooltip via JavaScript:{{/i}}</p> - <pre class="prettyprint linenums">$('#example').tooltip({{_i}}options{{/i}})</pre> - - <h3>{{_i}}Options{{/i}}</h3> - <p>{{_i}}Options can be passed via data attributes or JavaScript. For data attributes, append the option name to <code>data-</code>, as in <code>data-animation=""</code>.{{/i}}</p> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th style="width: 100px;">{{_i}}Name{{/i}}</th> - <th style="width: 100px;">{{_i}}type{{/i}}</th> - <th style="width: 50px;">{{_i}}default{{/i}}</th> - <th>{{_i}}description{{/i}}</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{_i}}animation{{/i}}</td> - <td>{{_i}}boolean{{/i}}</td> - <td>true</td> - <td>{{_i}}apply a css fade transition to the tooltip{{/i}}</td> - </tr> - <tr> - <td>{{_i}}html{{/i}}</td> - <td>{{_i}}boolean{{/i}}</td> - <td>false</td> - <td>{{_i}}Insert html into the tooltip. If false, jquery's <code>text</code> method will be used to insert content into the dom. Use text if you're worried about XSS attacks.{{/i}}</td> - </tr> - <tr> - <td>{{_i}}placement{{/i}}</td> - <td>{{_i}}string | function{{/i}}</td> - <td>'top'</td> - <td>{{_i}}how to position the tooltip{{/i}} - top | bottom | left | right</td> - </tr> - <tr> - <td>{{_i}}selector{{/i}}</td> - <td>{{_i}}string{{/i}}</td> - <td>false</td> - <td>{{_i}}If a selector is provided, tooltip objects will be delegated to the specified targets.{{/i}}</td> - </tr> - <tr> - <td>{{_i}}title{{/i}}</td> - <td>{{_i}}string | function{{/i}}</td> - <td>''</td> - <td>{{_i}}default title value if `title` tag isn't present{{/i}}</td> - </tr> - <tr> - <td>{{_i}}trigger{{/i}}</td> - <td>{{_i}}string{{/i}}</td> - <td>'hover focus'</td> - <td>{{_i}}how tooltip is triggered{{/i}} - click | hover | focus | manual. {{_i}}Note you case pass trigger mutliple, space seperated, trigger types.{{/i}}</td> - </tr> - <tr> - <td>{{_i}}delay{{/i}}</td> - <td>{{_i}}number | object{{/i}}</td> - <td>0</td> - <td> - <p>{{_i}}delay showing and hiding the tooltip (ms) - does not apply to manual trigger type{{/i}}</p> - <p>{{_i}}If a number is supplied, delay is applied to both hide/show{{/i}}</p> - <p>{{_i}}Object structure is: <code>delay: { show: 500, hide: 100 }</code>{{/i}}</p> - </td> - </tr> - <tr> - <td>{{_i}}container{{/i}}</td> - <td>{{_i}}string | false{{/i}}</td> - <td>{{_i}}false{{/i}}</td> - <td> - <p>{{_i}}Appends the tooltip to a specific element <code>container: 'body'</code>{{/i}}</p> - </td> - </tr> - </tbody> - </table> - <div class="alert alert-info"> - <strong>{{_i}}Heads up!{{/i}}</strong> - {{_i}}Options for individual tooltips can alternatively be specified through the use of data attributes.{{/i}} - </div> - - <h3>{{_i}}Markup{{/i}}</h3> - <pre class="prettyprint linenums"><a href="#" data-toggle="tooltip" title="{{_i}}first tooltip{{/i}}">{{_i}}hover over me{{/i}}</a></pre> - - <h3>{{_i}}Methods{{/i}}</h3> - <h4>$().tooltip({{_i}}options{{/i}})</h4> - <p>{{_i}}Attaches a tooltip handler to an element collection.{{/i}}</p> - <h4>.tooltip('show')</h4> - <p>{{_i}}Reveals an element's tooltip.{{/i}}</p> - <pre class="prettyprint linenums">$('#element').tooltip('show')</pre> - <h4>.tooltip('hide')</h4> - <p>{{_i}}Hides an element's tooltip.{{/i}}</p> - <pre class="prettyprint linenums">$('#element').tooltip('hide')</pre> - <h4>.tooltip('toggle')</h4> - <p>{{_i}}Toggles an element's tooltip.{{/i}}</p> - <pre class="prettyprint linenums">$('#element').tooltip('toggle')</pre> - <h4>.tooltip('destroy')</h4> - <p>{{_i}}Hides and destroys an element's tooltip.{{/i}}</p> - <pre class="prettyprint linenums">$('#element').tooltip('destroy')</pre> - </section> - - - - <!-- Popovers - ================================================== --> - <section id="popovers"> - <div class="page-header"> - <h1>{{_i}}Popovers{{/i}} <small>bootstrap-popover.js</small></h1> - </div> - - <h2>{{_i}}Examples{{/i}}</h2> - <p>{{_i}}Add small overlays of content, like those on the iPad, to any element for housing secondary information. Hover over the button to trigger the popover. <strong>Requires <a href="#tooltips">Tooltip</a> to be included.</strong>{{/i}}</p> - - <h3>{{_i}}Static popover{{/i}}</h3> - <p>{{_i}}Four options are available: top, right, bottom, and left aligned.{{/i}}</p> - <div class="bs-docs-example bs-docs-example-popover"> - <div class="popover top"> - <div class="arrow"></div> - <h3 class="popover-title">Popover top</h3> - <div class="popover-content"> - <p>Sed posuere consectetur est at lobortis. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.</p> - </div> - </div> - - <div class="popover right"> - <div class="arrow"></div> - <h3 class="popover-title">Popover right</h3> - <div class="popover-content"> - <p>Sed posuere consectetur est at lobortis. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.</p> - </div> - </div> - - <div class="popover bottom"> - <div class="arrow"></div> - <h3 class="popover-title">Popover bottom</h3> - <div class="popover-content"> - <p>Sed posuere consectetur est at lobortis. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.</p> - </div> - </div> - - <div class="popover left"> - <div class="arrow"></div> - <h3 class="popover-title">Popover left</h3> - <div class="popover-content"> - <p>Sed posuere consectetur est at lobortis. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.</p> - </div> - </div> - - <div class="clearfix"></div> - </div> - <p>{{_i}}No markup shown as popovers are generated from JavaScript and content within a <code>data</code> attribute.{{/i}}</p> - - <h3>Live demo</h3> - <div class="bs-docs-example" style="padding-bottom: 24px;"> - <a href="#" class="btn btn-large btn-danger" data-toggle="popover" title="A Title" data-content="And here's some amazing content. It's very engaging. right?">{{_i}}Click to toggle popover{{/i}}</a> - </div> - - <h4>{{_i}}Four directions{{/i}}</h4> - <div class="bs-docs-example tooltip-demo"> - <ul class="bs-docs-tooltip-examples"> - <li><a href="#" class="btn" data-toggle="popover" data-placement="top" data-content="Vivamus sagittis lacus vel augue laoreet rutrum faucibus." title="Popover on top">Popover on top</a></li> - <li><a href="#" class="btn" data-toggle="popover" data-placement="right" data-content="Vivamus sagittis lacus vel augue laoreet rutrum faucibus." title="Popover on right">Popover on right</a></li> - <li><a href="#" class="btn" data-toggle="popover" data-placement="bottom" data-content="Vivamus sagittis lacus vel augue laoreet rutrum faucibus." title="Popover on bottom">Popover on bottom</a></li> - <li><a href="#" class="btn" data-toggle="popover" data-placement="left" data-content="Vivamus sagittis lacus vel augue laoreet rutrum faucibus." title="Popover on left">Popover on left</a></li> - </ul> - </div>{{! /example }} - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Usage{{/i}}</h2> - <p>{{_i}}Enable popovers via JavaScript:{{/i}}</p> - <pre class="prettyprint linenums">$('#example').popover({{_i}}options{{/i}})</pre> - - <h3>{{_i}}Options{{/i}}</h3> - <p>{{_i}}Options can be passed via data attributes or JavaScript. For data attributes, append the option name to <code>data-</code>, as in <code>data-animation=""</code>.{{/i}}</p> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th style="width: 100px;">{{_i}}Name{{/i}}</th> - <th style="width: 100px;">{{_i}}type{{/i}}</th> - <th style="width: 50px;">{{_i}}default{{/i}}</th> - <th>{{_i}}description{{/i}}</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{_i}}animation{{/i}}</td> - <td>{{_i}}boolean{{/i}}</td> - <td>true</td> - <td>{{_i}}apply a css fade transition to the tooltip{{/i}}</td> - </tr> - <tr> - <td>{{_i}}html{{/i}}</td> - <td>{{_i}}boolean{{/i}}</td> - <td>false</td> - <td>{{_i}}Insert html into the popover. If false, jquery's <code>text</code> method will be used to insert content into the dom. Use text if you're worried about XSS attacks.{{/i}}</td> - </tr> - <tr> - <td>{{_i}}placement{{/i}}</td> - <td>{{_i}}string | function{{/i}}</td> - <td>'right'</td> - <td>{{_i}}how to position the popover{{/i}} - top | bottom | left | right</td> - </tr> - <tr> - <td>{{_i}}selector{{/i}}</td> - <td>{{_i}}string{{/i}}</td> - <td>false</td> - <td>{{_i}}if a selector is provided, tooltip objects will be delegated to the specified targets{{/i}}</td> - </tr> - <tr> - <td>{{_i}}trigger{{/i}}</td> - <td>{{_i}}string{{/i}}</td> - <td>'click'</td> - <td>{{_i}}how popover is triggered{{/i}} - click | hover | focus | manual</td> - </tr> - <tr> - <td>{{_i}}title{{/i}}</td> - <td>{{_i}}string | function{{/i}}</td> - <td>''</td> - <td>{{_i}}default title value if `title` attribute isn't present{{/i}}</td> - </tr> - <tr> - <td>{{_i}}content{{/i}}</td> - <td>{{_i}}string | function{{/i}}</td> - <td>''</td> - <td>{{_i}}default content value if `data-content` attribute isn't present{{/i}}</td> - </tr> - <tr> - <td>{{_i}}delay{{/i}}</td> - <td>{{_i}}number | object{{/i}}</td> - <td>0</td> - <td> - <p>{{_i}}delay showing and hiding the popover (ms) - does not apply to manual trigger type{{/i}}</p> - <p>{{_i}}If a number is supplied, delay is applied to both hide/show{{/i}}</p> - <p>{{_i}}Object structure is: <code>delay: { show: 500, hide: 100 }</code>{{/i}}</p> - </td> - </tr> - <tr> - <td>{{_i}}container{{/i}}</td> - <td>{{_i}}string | false{{/i}}</td> - <td>{{_i}}false{{/i}}</td> - <td> - <p>{{_i}}Appends the popover to a specific element <code>container: 'body'</code>{{/i}}</p> - </td> - </tr> - </tbody> - </table> - <div class="alert alert-info"> - <strong>{{_i}}Heads up!{{/i}}</strong> - {{_i}}Options for individual popovers can alternatively be specified through the use of data attributes.{{/i}} - </div> - - <h3>{{_i}}Markup{{/i}}</h3> - <p>{{_i}}For performance reasons, the Tooltip and Popover data-apis are opt in. If you would like to use them just specify a selector option.{{/i}}</p> - - <h3>{{_i}}Methods{{/i}}</h3> - <h4>$().popover({{_i}}options{{/i}})</h4> - <p>{{_i}}Initializes popovers for an element collection.{{/i}}</p> - <h4>.popover('show')</h4> - <p>{{_i}}Reveals an elements popover.{{/i}}</p> - <pre class="prettyprint linenums">$('#element').popover('show')</pre> - <h4>.popover('hide')</h4> - <p>{{_i}}Hides an elements popover.{{/i}}</p> - <pre class="prettyprint linenums">$('#element').popover('hide')</pre> - <h4>.popover('toggle')</h4> - <p>{{_i}}Toggles an elements popover.{{/i}}</p> - <pre class="prettyprint linenums">$('#element').popover('toggle')</pre> - <h4>.popover('destroy')</h4> - <p>{{_i}}Hides and destroys an element's popover.{{/i}}</p> - <pre class="prettyprint linenums">$('#element').popover('destroy')</pre> - </section> - - - - <!-- Alert - ================================================== --> - <section id="alerts"> - <div class="page-header"> - <h1>{{_i}}Alert messages{{/i}} <small>bootstrap-alert.js</small></h1> - </div> - - - <h2>{{_i}}Example alerts{{/i}}</h2> - <p>{{_i}}Add dismiss functionality to all alert messages with this plugin.{{/i}}</p> - <div class="bs-docs-example"> - <div class="alert fade in"> - <button type="button" class="close" data-dismiss="alert">×</button> - <strong>{{_i}}Holy guacamole!{{/i}}</strong> {{_i}}Best check yo self, you're not looking too good.{{/i}} - </div> - </div>{{! /example }} - - <div class="bs-docs-example"> - <div class="alert alert-block alert-error fade in"> - <button type="button" class="close" data-dismiss="alert">×</button> - <h4 class="alert-heading">{{_i}}Oh snap! You got an error!{{/i}}</h4> - <p>{{_i}}Change this and that and try again. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum.{{/i}}</p> - <p> - <a class="btn btn-danger" href="#">{{_i}}Take this action{{/i}}</a> <a class="btn" href="#">{{_i}}Or do this{{/i}}</a> - </p> - </div> - </div>{{! /example }} - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Usage{{/i}}</h2> - <p>{{_i}}Enable dismissal of an alert via JavaScript:{{/i}}</p> - <pre class="prettyprint linenums">$(".alert").alert()</pre> - - <h3>{{_i}}Markup{{/i}}</h3> - <p>{{_i}}Just add <code>data-dismiss="alert"</code> to your close button to automatically give an alert close functionality.{{/i}}</p> - <pre class="prettyprint linenums"><a class="close" data-dismiss="alert" href="#">&times;</a></pre> - - <h3>{{_i}}Methods{{/i}}</h3> - <h4>$().alert()</h4> - <p>{{_i}}Wraps all alerts with close functionality. To have your alerts animate out when closed, make sure they have the <code>.fade</code> and <code>.in</code> class already applied to them.{{/i}}</p> - <h4>.alert('close')</h4> - <p>{{_i}}Closes an alert.{{/i}}</p> - <pre class="prettyprint linenums">$(".alert").alert('close')</pre> - - - <h3>{{_i}}Events{{/i}}</h3> - <p>{{_i}}Bootstrap's alert class exposes a few events for hooking into alert functionality.{{/i}}</p> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th style="width: 150px;">{{_i}}Event{{/i}}</th> - <th>{{_i}}Description{{/i}}</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{_i}}close{{/i}}</td> - <td>{{_i}}This event fires immediately when the <code>close</code> instance method is called.{{/i}}</td> - </tr> - <tr> - <td>{{_i}}closed{{/i}}</td> - <td>{{_i}}This event is fired when the alert has been closed (will wait for css transitions to complete).{{/i}}</td> - </tr> - </tbody> - </table> -<pre class="prettyprint linenums"> -$('#my-alert').bind('closed', function () { - // {{_i}}do something…{{/i}} -}) -</pre> - </section> - - - - <!-- Buttons - ================================================== --> - <section id="buttons"> - <div class="page-header"> - <h1>{{_i}}Buttons{{/i}} <small>bootstrap-button.js</small></h1> - </div> - - <h2>{{_i}}Example uses{{/i}}</h2> - <p>{{_i}}Do more with buttons. Control button states or create groups of buttons for more components like toolbars.{{/i}}</p> - - <h4>{{_i}}Stateful{{/i}}</h4> - <p>{{_i}}Add <code>data-loading-text="Loading..."</code> to use a loading state on a button.{{/i}}</p> - <div class="bs-docs-example" style="padding-bottom: 24px;"> - <button type="button" id="fat-btn" data-loading-text="loading..." class="btn btn-primary"> - {{_i}}Loading state{{/i}} - </button> - </div>{{! /example }} - <pre class="prettyprint linenums"><button type="button" class="btn btn-primary" data-loading-text="Loading...">Loading state</button></pre> - - <h4>{{_i}}Single toggle{{/i}}</h4> - <p>{{_i}}Add <code>data-toggle="button"</code> to activate toggling on a single button.{{/i}}</p> - <div class="bs-docs-example" style="padding-bottom: 24px;"> - <button type="button" class="btn btn-primary" data-toggle="button">{{_i}}Single Toggle{{/i}}</button> - </div>{{! /example }} - <pre class="prettyprint linenums"><button type="button" class="btn btn-primary" data-toggle="button">Single Toggle</button></pre> - - <h4>{{_i}}Checkbox{{/i}}</h4> - <p>{{_i}}Add <code>data-toggle="buttons-checkbox"</code> for checkbox style toggling on btn-group.{{/i}}</p> - <div class="bs-docs-example" style="padding-bottom: 24px;"> - <div class="btn-group" data-toggle="buttons-checkbox"> - <button type="button" class="btn btn-primary">{{_i}}Left{{/i}}</button> - <button type="button" class="btn btn-primary">{{_i}}Middle{{/i}}</button> - <button type="button" class="btn btn-primary">{{_i}}Right{{/i}}</button> - </div> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<div class="btn-group" data-toggle="buttons-checkbox"> - <button type="button" class="btn btn-primary">Left</button> - <button type="button" class="btn btn-primary">Middle</button> - <button type="button" class="btn btn-primary">Right</button> -</div> -</pre> - - <h4>{{_i}}Radio{{/i}}</h4> - <p>{{_i}}Add <code>data-toggle="buttons-radio"</code> for radio style toggling on btn-group.{{/i}}</p> - <div class="bs-docs-example" style="padding-bottom: 24px;"> - <div class="btn-group" data-toggle="buttons-radio"> - <button type="button" class="btn btn-primary">{{_i}}Left{{/i}}</button> - <button type="button" class="btn btn-primary">{{_i}}Middle{{/i}}</button> - <button type="button" class="btn btn-primary">{{_i}}Right{{/i}}</button> - </div> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<div class="btn-group" data-toggle="buttons-radio"> - <button type="button" class="btn btn-primary">Left</button> - <button type="button" class="btn btn-primary">Middle</button> - <button type="button" class="btn btn-primary">Right</button> -</div> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Usage{{/i}}</h2> - <p>{{_i}}Enable buttons via JavaScript:{{/i}}</p> - <pre class="prettyprint linenums">$('.nav-tabs').button()</pre> - - <h3>{{_i}}Markup{{/i}}</h3> - <p>{{_i}}Data attributes are integral to the button plugin. Check out the example code below for the various markup types.{{/i}}</p> - - <h3>{{_i}}Options{{/i}}</h3> - <p><em>{{_i}}None{{/i}}</em></p> - - <h3>{{_i}}Methods{{/i}}</h3> - <h4>$().button('toggle')</h4> - <p>{{_i}}Toggles push state. Gives the button the appearance that it has been activated.{{/i}}</p> - <div class="alert alert-info"> - <strong>{{_i}}Heads up!{{/i}}</strong> - {{_i}}You can enable auto toggling of a button by using the <code>data-toggle</code> attribute.{{/i}} - </div> - <pre class="prettyprint linenums"><button type="button" class="btn" data-toggle="button" >…</button></pre> - <h4>$().button('loading')</h4> - <p>{{_i}}Sets button state to loading - disables button and swaps text to loading text. Loading text should be defined on the button element using the data attribute <code>data-loading-text</code>.{{/i}} - </p> - <pre class="prettyprint linenums"><button type="button" class="btn" data-loading-text="loading stuff..." >...</button></pre> - <div class="alert alert-info"> - <strong>{{_i}}Heads up!{{/i}}</strong> - {{_i}}<a href="https://github.com/twitter/bootstrap/issues/793">Firefox persists the disabled state across page loads</a>. A workaround for this is to use <code>autocomplete="off"</code>.{{/i}} - </div> - <h4>$().button('reset')</h4> - <p>{{_i}}Resets button state - swaps text to original text.{{/i}}</p> - <h4>$().button(string)</h4> - <p>{{_i}}Resets button state - swaps text to any data defined text state.{{/i}}</p> -<pre class="prettyprint linenums"><button type="button" class="btn" data-complete-text="finished!" >...</button> -<script> - $('.btn').button('complete') -</script> -</pre> - </section> - - - - <!-- Collapse - ================================================== --> - <section id="collapse"> - <div class="page-header"> - <h1>{{_i}}Collapse{{/i}} <small>bootstrap-collapse.js</small></h1> - </div> - - <h3>{{_i}}About{{/i}}</h3> - <p>{{_i}}Get base styles and flexible support for collapsible components like accordions and navigation.{{/i}}</p> - <p class="muted"><strong>*</strong> {{_i}}Requires the Transitions plugin to be included.{{/i}}</p> - - <h2>{{_i}}Example accordion{{/i}}</h2> - <p>{{_i}}Using the collapse plugin, we built a simple accordion style widget:{{/i}}</p> - - <div class="bs-docs-example"> - <div class="accordion" id="accordion2"> - <div class="accordion-group"> - <div class="accordion-heading"> - <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#collapseOne"> - {{_i}}Collapsible Group Item #1{{/i}} - </a> - </div> - <div id="collapseOne" class="accordion-body collapse in"> - <div class="accordion-inner"> - Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS. - </div> - </div> - </div> - <div class="accordion-group"> - <div class="accordion-heading"> - <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#collapseTwo"> - {{_i}}Collapsible Group Item #2{{/i}} - </a> - </div> - <div id="collapseTwo" class="accordion-body collapse"> - <div class="accordion-inner"> - Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS. - </div> - </div> - </div> - <div class="accordion-group"> - <div class="accordion-heading"> - <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#collapseThree"> - {{_i}}Collapsible Group Item #3{{/i}} - </a> - </div> - <div id="collapseThree" class="accordion-body collapse"> - <div class="accordion-inner"> - Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS. - </div> - </div> - </div> - </div> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<div class="accordion" id="accordion2"> - <div class="accordion-group"> - <div class="accordion-heading"> - <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#collapseOne"> - {{_i}}Collapsible Group Item #1{{/i}} - </a> - </div> - <div id="collapseOne" class="accordion-body collapse in"> - <div class="accordion-inner"> - Anim pariatur cliche... - </div> - </div> - </div> - <div class="accordion-group"> - <div class="accordion-heading"> - <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#collapseTwo"> - {{_i}}Collapsible Group Item #2{{/i}} - </a> - </div> - <div id="collapseTwo" class="accordion-body collapse"> - <div class="accordion-inner"> - Anim pariatur cliche... - </div> - </div> - </div> -</div> -... -</pre> - <p>{{_i}}You can also use the plugin without the accordion markup. Make a button toggle the expanding and collapsing of another element.{{/i}}</p> -<pre class="prettyprint linenums"> -<button type="button" class="btn btn-danger" data-toggle="collapse" data-target="#demo"> - {{_i}}simple collapsible{{/i}} -</button> - -<div id="demo" class="collapse in"> … </div> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Usage{{/i}}</h2> - - <h3>{{_i}}Via data attributes{{/i}}</h3> - <p>{{_i}}Just add <code>data-toggle="collapse"</code> and a <code>data-target</code> to element to automatically assign control of a collapsible element. The <code>data-target</code> attribute accepts a css selector to apply the collapse to. Be sure to add the class <code>collapse</code> to the collapsible element. If you'd like it to default open, add the additional class <code>in</code>.{{/i}}</p> - <p>{{_i}}To add accordion-like group management to a collapsible control, add the data attribute <code>data-parent="#selector"</code>. Refer to the demo to see this in action.{{/i}}</p> - - <h3>{{_i}}Via JavaScript{{/i}}</h3> - <p>{{_i}}Enable manually with:{{/i}}</p> - <pre class="prettyprint linenums">$(".collapse").collapse()</pre> - - <h3>{{_i}}Options{{/i}}</h3> - <p>{{_i}}Options can be passed via data attributes or JavaScript. For data attributes, append the option name to <code>data-</code>, as in <code>data-parent=""</code>.{{/i}}</p> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th style="width: 100px;">{{_i}}Name{{/i}}</th> - <th style="width: 50px;">{{_i}}type{{/i}}</th> - <th style="width: 50px;">{{_i}}default{{/i}}</th> - <th>{{_i}}description{{/i}}</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{_i}}parent{{/i}}</td> - <td>{{_i}}selector{{/i}}</td> - <td>false</td> - <td>{{_i}}If selector then all collapsible elements under the specified parent will be closed when this collapsible item is shown. (similar to traditional accordion behavior){{/i}}</td> - </tr> - <tr> - <td>{{_i}}toggle{{/i}}</td> - <td>{{_i}}boolean{{/i}}</td> - <td>true</td> - <td>{{_i}}Toggles the collapsible element on invocation{{/i}}</td> - </tr> - </tbody> - </table> - - - <h3>{{_i}}Methods{{/i}}</h3> - <h4>.collapse({{_i}}options{{/i}})</h4> - <p>{{_i}}Activates your content as a collapsible element. Accepts an optional options <code>object</code>.{{/i}} -<pre class="prettyprint linenums"> -$('#myCollapsible').collapse({ - toggle: false -}) -</pre> - <h4>.collapse('toggle')</h4> - <p>{{_i}}Toggles a collapsible element to shown or hidden.{{/i}}</p> - <h4>.collapse('show')</h4> - <p>{{_i}}Shows a collapsible element.{{/i}}</p> - <h4>.collapse('hide')</h4> - <p>{{_i}}Hides a collapsible element.{{/i}}</p> - - <h3>{{_i}}Events{{/i}}</h3> - <p>{{_i}}Bootstrap's collapse class exposes a few events for hooking into collapse functionality.{{/i}}</p> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th style="width: 150px;">{{_i}}Event{{/i}}</th> - <th>{{_i}}Description{{/i}}</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{_i}}show{{/i}}</td> - <td>{{_i}}This event fires immediately when the <code>show</code> instance method is called.{{/i}}</td> - </tr> - <tr> - <td>{{_i}}shown{{/i}}</td> - <td>{{_i}}This event is fired when a collapse element has been made visible to the user (will wait for css transitions to complete).{{/i}}</td> - </tr> - <tr> - <td>{{_i}}hide{{/i}}</td> - <td> - {{_i}}This event is fired immediately when the <code>hide</code> method has been called.{{/i}} - </td> - </tr> - <tr> - <td>{{_i}}hidden{{/i}}</td> - <td>{{_i}}This event is fired when a collapse element has been hidden from the user (will wait for css transitions to complete).{{/i}}</td> - </tr> - </tbody> - </table> -<pre class="prettyprint linenums"> -$('#myCollapsible').on('hidden', function () { - // {{_i}}do something…{{/i}} -})</pre> - </section> - - - - <!-- Carousel - ================================================== --> - <section id="carousel"> - <div class="page-header"> - <h1>{{_i}}Carousel{{/i}} <small>bootstrap-carousel.js</small></h1> - </div> - - <h2>{{_i}}Example carousel{{/i}}</h2> - <p>{{_i}}The slideshow below shows a generic plugin and component for cycling through elements like a carousel.{{/i}}</p> - <div class="bs-docs-example"> - <div id="myCarousel" class="carousel slide"> - <ol class="carousel-indicators"> - <li data-target="#myCarousel" data-slide-to="0" class="active"></li> - <li data-target="#myCarousel" data-slide-to="1"></li> - <li data-target="#myCarousel" data-slide-to="2"></li> - </ol> - <div class="carousel-inner"> - <div class="item active"> - <img src="assets/img/bootstrap-mdo-sfmoma-01.jpg" alt=""> - <div class="carousel-caption"> - <h4>{{_i}}First Thumbnail label{{/i}}</h4> - <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> - </div> - </div> - <div class="item"> - <img src="assets/img/bootstrap-mdo-sfmoma-02.jpg" alt=""> - <div class="carousel-caption"> - <h4>{{_i}}Second Thumbnail label{{/i}}</h4> - <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> - </div> - </div> - <div class="item"> - <img src="assets/img/bootstrap-mdo-sfmoma-03.jpg" alt=""> - <div class="carousel-caption"> - <h4>{{_i}}Third Thumbnail label{{/i}}</h4> - <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> - </div> - </div> - </div> - <a class="left carousel-control" href="#myCarousel" data-slide="prev">‹</a> - <a class="right carousel-control" href="#myCarousel" data-slide="next">›</a> - </div> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<div id="myCarousel" class="carousel slide"> - <ol class="carousel-indicators"> - <li data-target="#myCarousel" data-slide-to="0" class="active"></li> - <li data-target="#myCarousel" data-slide-to="1"></li> - <li data-target="#myCarousel" data-slide-to="2"></li> - </ol> - <!-- {{_i}}Carousel items{{/i}} --> - <div class="carousel-inner"> - <div class="active item">…</div> - <div class="item">…</div> - <div class="item">…</div> - </div> - <!-- {{_i}}Carousel nav{{/i}} --> - <a class="carousel-control left" href="#myCarousel" data-slide="prev">&lsaquo;</a> - <a class="carousel-control right" href="#myCarousel" data-slide="next">&rsaquo;</a> -</div> -</pre> - - <div class="alert alert-warning"> - <strong>{{_i}}Heads up!{{/i}}</strong> - {{_i}}When implementing this carousel, remove the images we have provided and replace them with your own.{{/i}} - </div> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Usage{{/i}}</h2> - - <h3>{{_i}}Via data attributes{{/i}}</h3> - <p>{{_i}}Use data attributes to easily control the position of the carousel. <code>data-slide</code> accepts the keywords <code>prev</code> or <code>next</code>, which alters the slide position relative to it's current position. Alternatively, use <code>data-slide-to</code> to pass a raw slide index to the carousel <code>data-slide-to="2"</code>, which jump's the slide position to a particular index beginning with <code>0</code>.{{/i}}</p> - - <h3>{{_i}}Via JavaScript{{/i}}</h3> - <p>{{_i}}Call carousel manually with:{{/i}}</p> - <pre class="prettyprint linenums">$('.carousel').carousel()</pre> - - <h3>{{_i}}Options{{/i}}</h3> - <p>{{_i}}Options can be passed via data attributes or JavaScriptz. For data attributes, append the option name to <code>data-</code>, as in <code>data-interval=""</code>.{{/i}}</p> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th style="width: 100px;">{{_i}}Name{{/i}}</th> - <th style="width: 50px;">{{_i}}type{{/i}}</th> - <th style="width: 50px;">{{_i}}default{{/i}}</th> - <th>{{_i}}description{{/i}}</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{_i}}interval{{/i}}</td> - <td>{{_i}}number{{/i}}</td> - <td>5000</td> - <td>{{_i}}The amount of time to delay between automatically cycling an item. If false, carousel will not automatically cycle.{{/i}}</td> - </tr> - <tr> - <td>{{_i}}pause{{/i}}</td> - <td>{{_i}}string{{/i}}</td> - <td>"hover"</td> - <td>{{_i}}Pauses the cycling of the carousel on mouseenter and resumes the cycling of the carousel on mouseleave.{{/i}}</td> - </tr> - </tbody> - </table> - - <h3>{{_i}}Methods{{/i}}</h3> - <h4>.carousel({{_i}}options{{/i}})</h4> - <p>{{_i}}Initializes the carousel with an optional options <code>object</code> and starts cycling through items.{{/i}}</p> -<pre class="prettyprint linenums"> -$('.carousel').carousel({ - interval: 2000 -}) -</pre> - <h4>.carousel('cycle')</h4> - <p>{{_i}}Cycles through the carousel items from left to right.{{/i}}</p> - <h4>.carousel('pause')</h4> - <p>{{_i}}Stops the carousel from cycling through items.{{/i}}</p> - <h4>.carousel(number)</h4> - <p>{{_i}}Cycles the carousel to a particular frame (0 based, similar to an array).{{/i}}</p> - <h4>.carousel('prev')</h4> - <p>{{_i}}Cycles to the previous item.{{/i}}</p> - <h4>.carousel('next')</h4> - <p>{{_i}}Cycles to the next item.{{/i}}</p> - - <h3>{{_i}}Events{{/i}}</h3> - <p>{{_i}}Bootstrap's carousel class exposes two events for hooking into carousel functionality.{{/i}}</p> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th style="width: 150px;">{{_i}}Event{{/i}}</th> - <th>{{_i}}Description{{/i}}</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{_i}}slide{{/i}}</td> - <td>{{_i}}This event fires immediately when the <code>slide</code> instance method is invoked.{{/i}}</td> - </tr> - <tr> - <td>{{_i}}slid{{/i}}</td> - <td>{{_i}}This event is fired when the carousel has completed its slide transition.{{/i}}</td> - </tr> - </tbody> - </table> - </section> - - - - <!-- Typeahead - ================================================== --> - <section id="typeahead"> - <div class="page-header"> - <h1>{{_i}}Typeahead{{/i}} <small>bootstrap-typeahead.js</small></h1> - </div> - - - <h2>{{_i}}Example{{/i}}</h2> - <p>{{_i}}A basic, easily extended plugin for quickly creating elegant typeaheads with any form text input.{{/i}}</p> - <div class="bs-docs-example" style="background-color: #f5f5f5;"> - <input type="text" class="span3" style="margin: 0 auto;" data-provide="typeahead" data-items="4" data-source='["Alabama","Alaska","Arizona","Arkansas","California","Colorado","Connecticut","Delaware","Florida","Georgia","Hawaii","Idaho","Illinois","Indiana","Iowa","Kansas","Kentucky","Louisiana","Maine","Maryland","Massachusetts","Michigan","Minnesota","Mississippi","Missouri","Montana","Nebraska","Nevada","New Hampshire","New Jersey","New Mexico","New York","North Dakota","North Carolina","Ohio","Oklahoma","Oregon","Pennsylvania","Rhode Island","South Carolina","South Dakota","Tennessee","Texas","Utah","Vermont","Virginia","Washington","West Virginia","Wisconsin","Wyoming"]'> - </div>{{! /example }} - <pre class="prettyprint linenums"><input type="text" data-provide="typeahead"></pre> - <p>You'll want to set <code>autocomplete="off"</code> to prevent default browser menus from appearing over the Bootstrap typeahead dropdown.</p> - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Usage{{/i}}</h2> - - <h3>{{_i}}Via data attributes{{/i}}</h3> - <p>{{_i}}Add data attributes to register an element with typeahead functionality as shown in the example above.{{/i}}</p> - - <h3>{{_i}}Via JavaScript{{/i}}</h3> - <p>{{_i}}Call the typeahead manually with:{{/i}}</p> - <pre class="prettyprint linenums">$('.typeahead').typeahead()</pre> - - <h3>{{_i}}Options{{/i}}</h3> - <p>{{_i}}Options can be passed via data attributes or JavaScript. For data attributes, append the option name to <code>data-</code>, as in <code>data-source=""</code>.{{/i}}</p> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th style="width: 100px;">{{_i}}Name{{/i}}</th> - <th style="width: 50px;">{{_i}}type{{/i}}</th> - <th style="width: 100px;">{{_i}}default{{/i}}</th> - <th>{{_i}}description{{/i}}</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{_i}}source{{/i}}</td> - <td>{{_i}}array, function{{/i}}</td> - <td>[ ]</td> - <td>{{_i}}The data source to query against. May be an array of strings or a function. The function is passed two arguments, the <code>query</code> value in the input field and the <code>process</code> callback. The function may be used synchronously by returning the data source directly or asynchronously via the <code>process</code> callback's single argument.{{/i}}</td> - </tr> - <tr> - <td>{{_i}}items{{/i}}</td> - <td>{{_i}}number{{/i}}</td> - <td>8</td> - <td>{{_i}}The max number of items to display in the dropdown.{{/i}}</td> - </tr> - <tr> - <td>{{_i}}minLength{{/i}}</td> - <td>{{_i}}number{{/i}}</td> - <td>{{_i}}1{{/i}}</td> - <td>{{_i}}The minimum character length needed before triggering autocomplete suggestions{{/i}}</td> - </tr> - <tr> - <td>{{_i}}matcher{{/i}}</td> - <td>{{_i}}function{{/i}}</td> - <td>{{_i}}case insensitive{{/i}}</td> - <td>{{_i}}The method used to determine if a query matches an item. Accepts a single argument, the <code>item</code> against which to test the query. Access the current query with <code>this.query</code>. Return a boolean <code>true</code> if query is a match.{{/i}}</td> - </tr> - <tr> - <td>{{_i}}sorter{{/i}}</td> - <td>{{_i}}function{{/i}}</td> - <td>{{_i}}exact match,<br> case sensitive,<br> case insensitive{{/i}}</td> - <td>{{_i}}Method used to sort autocomplete results. Accepts a single argument <code>items</code> and has the scope of the typeahead instance. Reference the current query with <code>this.query</code>.{{/i}}</td> - </tr> - <tr> - <td>{{_i}}updater{{/i}}</td> - <td>{{_i}}function{{/i}}</td> - <td>{{_i}}returns selected item{{/i}}</td> - <td>{{_i}}The method used to return selected item. Accepts a single argument, the <code>item</code> and has the scope of the typeahead instance.{{/i}}</td> - </tr> - <tr> - <td>{{_i}}highlighter{{/i}}</td> - <td>{{_i}}function{{/i}}</td> - <td>{{_i}}highlights all default matches{{/i}}</td> - <td>{{_i}}Method used to highlight autocomplete results. Accepts a single argument <code>item</code> and has the scope of the typeahead instance. Should return html.{{/i}}</td> - </tr> - </tbody> - </table> - - <h3>{{_i}}Methods{{/i}}</h3> - <h4>.typeahead({{_i}}options{{/i}})</h4> - <p>{{_i}}Initializes an input with a typeahead.{{/i}}</p> - </section> - - - - <!-- Affix - ================================================== --> - <section id="affix"> - <div class="page-header"> - <h1>{{_i}}Affix{{/i}} <small>bootstrap-affix.js</small></h1> - </div> - - <h2>{{_i}}Example{{/i}}</h2> - <p>{{_i}}The subnavigation on the left is a live demo of the affix plugin.{{/i}}</p> - - <hr class="bs-docs-separator"> - - <h2>{{_i}}Usage{{/i}}</h2> - - <h3>{{_i}}Via data attributes{{/i}}</h3> - <p>{{_i}}To easily add affix behavior to any element, just add <code>data-spy="affix"</code> to the element you want to spy on. Then use offsets to define when to toggle the pinning of an element on and off.{{/i}}</p> - - <pre class="prettyprint linenums"><div data-spy="affix" data-offset-top="200">...</div></pre> - - <div class="alert alert-info"> - <strong>{{_i}}Heads up!{{/i}}</strong> - {{_i}}You must manage the position of a pinned element and the behavior of its immediate parent. Position is controlled by <code>affix</code>, <code>affix-top</code>, and <code>affix-bottom</code>. Remember to check for a potentially collapsed parent when the affix kicks in as it's removing content from the normal flow of the page.{{/i}} - </div> - - <h3>{{_i}}Via JavaScript{{/i}}</h3> - <p>{{_i}}Call the affix plugin via JavaScript:{{/i}}</p> - <pre class="prettyprint linenums">$('#navbar').affix()</pre> - - <h3>{{_i}}Options{{/i}}</h3> - <p>{{_i}}Options can be passed via data attributes or JavaScript. For data attributes, append the option name to <code>data-</code>, as in <code>data-offset-top="200"</code>.{{/i}}</p> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th style="width: 100px;">{{_i}}Name{{/i}}</th> - <th style="width: 100px;">{{_i}}type{{/i}}</th> - <th style="width: 50px;">{{_i}}default{{/i}}</th> - <th>{{_i}}description{{/i}}</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{_i}}offset{{/i}}</td> - <td>{{_i}}number | function | object{{/i}}</td> - <td>{{_i}}10{{/i}}</td> - <td>{{_i}}Pixels to offset from screen when calculating position of scroll. If a single number is provided, the offset will be applied in both top and left directions. To listen for a single direction, or multiple unique offsets, just provide an object <code>offset: { x: 10 }</code>. Use a function when you need to dynamically provide an offset (useful for some responsive designs).{{/i}}</td> - </tr> - </tbody> - </table> - </section> - - - - </div>{{! /span9 }} - </div>{{! row}} - - </div>{{! /.container }} diff --git a/src/main/webapp/bower_components/bootstrap/docs/templates/pages/scaffolding.mustache b/src/main/webapp/bower_components/bootstrap/docs/templates/pages/scaffolding.mustache deleted file mode 100644 index a6f2f9da..00000000 --- a/src/main/webapp/bower_components/bootstrap/docs/templates/pages/scaffolding.mustache +++ /dev/null @@ -1,485 +0,0 @@ -<!-- Subhead -================================================== --> -<header class="jumbotron subhead" id="overview"> - <div class="container"> - <h1>{{_i}}Scaffolding{{/i}}</h1> - <p class="lead">{{_i}}Bootstrap is built on responsive 12-column grids, layouts, and components.{{/i}}</p> - </div> -</header> - - <div class="container"> - - <!-- Docs nav - ================================================== --> - <div class="row"> - <div class="span3 bs-docs-sidebar"> - <ul class="nav nav-list bs-docs-sidenav"> - <li><a href="#global"><i class="icon-chevron-right"></i> {{_i}}Global styles{{/i}}</a></li> - <li><a href="#gridSystem"><i class="icon-chevron-right"></i> {{_i}}Grid system{{/i}}</a></li> - <li><a href="#fluidGridSystem"><i class="icon-chevron-right"></i> {{_i}}Fluid grid system{{/i}}</a></li> - <li><a href="#layouts"><i class="icon-chevron-right"></i> {{_i}}Layouts{{/i}}</a></li> - <li><a href="#responsive"><i class="icon-chevron-right"></i> {{_i}}Responsive design{{/i}}</a></li> - </ul> - </div> - <div class="span9"> - - - - <!-- Global Bootstrap settings - ================================================== --> - <section id="global"> - <div class="page-header"> - <h1>{{_i}}Global settings{{/i}}</h1> - </div> - - <h3>{{_i}}Requires HTML5 doctype{{/i}}</h3> - <p>{{_i}}Bootstrap makes use of certain HTML elements and CSS properties that require the use of the HTML5 doctype. Include it at the beginning of all your projects.{{/i}}</p> -<pre class="prettyprint linenums"> -<!DOCTYPE html> -<html lang="en"> - ... -</html> -</pre> - - <h3>{{_i}}Typography and links{{/i}}</h3> - <p>{{_i}}Bootstrap sets basic global display, typography, and link styles. Specifically, we:{{/i}}</p> - <ul> - <li>{{_i}}Remove <code>margin</code> on the body{{/i}}</li> - <li>{{_i}}Set <code>background-color: white;</code> on the <code>body</code>{{/i}}</li> - <li>{{_i}}Use the <code>@baseFontFamily</code>, <code>@baseFontSize</code>, and <code>@baseLineHeight</code> attributes as our typographic base{{/i}}</li> - <li>{{_i}}Set the global link color via <code>@linkColor</code> and apply link underlines only on <code>:hover</code>{{/i}}</li> - </ul> - <p>{{_i}}These styles can be found within <strong>scaffolding.less</strong>.{{/i}}</p> - - <h3>{{_i}}Reset via Normalize{{/i}}</h3> - <p>{{_i}}With Bootstrap 2, the old reset block has been dropped in favor of <a href="http://necolas.github.com/normalize.css/" target="_blank">Normalize.css</a>, a project by <a href="http://twitter.com/necolas" target="_blank">Nicolas Gallagher</a> and <a href="http://twitter.com/jon_neal" target="_blank">Jonathan Neal</a> that also powers the <a href="http://html5boilerplate.com" target="_blank">HTML5 Boilerplate</a>. While we use much of Normalize within our <strong>reset.less</strong>, we have removed some elements specifically for Bootstrap.{{/i}}</p> - - </section> - - - - - <!-- Grid system - ================================================== --> - <section id="gridSystem"> - <div class="page-header"> - <h1>{{_i}}Default grid system{{/i}}</h1> - </div> - - <h2>{{_i}}Live grid example{{/i}}</h2> - <p>{{_i}}The default Bootstrap grid system utilizes <strong>12 columns</strong>, making for a 940px wide container without <a href="./scaffolding.html#responsive">responsive features</a> enabled. With the responsive CSS file added, the grid adapts to be 724px and 1170px wide depending on your viewport. Below 767px viewports, the columns become fluid and stack vertically.{{/i}}</p> - <div class="bs-docs-grid"> - <div class="row show-grid"> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - </div> - <div class="row show-grid"> - <div class="span2">2</div> - <div class="span3">3</div> - <div class="span4">4</div> - </div> - <div class="row show-grid"> - <div class="span4">4</div> - <div class="span5">5</div> - </div> - <div class="row show-grid"> - <div class="span9">9</div> - </div> - </div> - - <h3>{{_i}}Basic grid HTML{{/i}}</h3> - <p>{{_i}}For a simple two column layout, create a <code>.row</code> and add the appropriate number of <code>.span*</code> columns. As this is a 12-column grid, each <code>.span*</code> spans a number of those 12 columns, and should always add up to 12 for each row (or the number of columns in the parent).{{/i}}</p> -<pre class="prettyprint linenums"> -<div class="row"> - <div class="span4">...</div> - <div class="span8">...</div> -</div> -</pre> - <p>{{_i}}Given this example, we have <code>.span4</code> and <code>.span8</code>, making for 12 total columns and a complete row.{{/i}}</p> - - <h2>{{_i}}Offsetting columns{{/i}}</h2> - <p>{{_i}}Move columns to the right using <code>.offset*</code> classes. Each class increases the left margin of a column by a whole column. For example, <code>.offset4</code> moves <code>.span4</code> over four columns.{{/i}}</p> - <div class="bs-docs-grid"> - <div class="row show-grid"> - <div class="span4">4</div> - <div class="span3 offset2">3 offset 2</div> - </div><!-- /row --> - <div class="row show-grid"> - <div class="span3 offset1">3 offset 1</div> - <div class="span3 offset2">3 offset 2</div> - </div><!-- /row --> - <div class="row show-grid"> - <div class="span6 offset3">6 offset 3</div> - </div><!-- /row --> - </div> -<pre class="prettyprint linenums"> -<div class="row"> - <div class="span4">...</div> - <div class="span3 offset2">...</div> -</div> -</pre> - - <h2>{{_i}}Nesting columns{{/i}}</h2> - <p>{{_i}}To nest your content with the default grid, add a new <code>.row</code> and set of <code>.span*</code> columns within an existing <code>.span*</code> column. Nested rows should include a set of columns that add up to the number of columns of its parent.{{/i}}</p> - <div class="row show-grid"> - <div class="span9"> - {{_i}}Level 1 column{{/i}} - <div class="row show-grid"> - <div class="span6"> - {{_i}}Level 2{{/i}} - </div> - <div class="span3"> - {{_i}}Level 2{{/i}} - </div> - </div> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="row"> - <div class="span9"> - {{_i}}Level 1 column{{/i}} - <div class="row"> - <div class="span6">{{_i}}Level 2{{/i}}</div> - <div class="span3">{{_i}}Level 2{{/i}}</div> - </div> - </div> -</div> -</pre> - </section> - - - - <!-- Fluid grid system - ================================================== --> - <section id="fluidGridSystem"> - <div class="page-header"> - <h1>{{_i}}Fluid grid system{{/i}}</h1> - </div> - - <h2>{{_i}}Live fluid grid example{{/i}}</h2> - <p>{{_i}}The fluid grid system uses percents instead of pixels for column widths. It has the same responsive capabilities as our fixed grid system, ensuring proper proportions for key screen resolutions and devices.{{/i}}</p> - <div class="bs-docs-grid"> - <div class="row-fluid show-grid"> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - </div> - <div class="row-fluid show-grid"> - <div class="span4">4</div> - <div class="span4">4</div> - <div class="span4">4</div> - </div> - <div class="row-fluid show-grid"> - <div class="span4">4</div> - <div class="span8">8</div> - </div> - <div class="row-fluid show-grid"> - <div class="span6">6</div> - <div class="span6">6</div> - </div> - <div class="row-fluid show-grid"> - <div class="span12">12</div> - </div> - </div> - - <h3>{{_i}}Basic fluid grid HTML{{/i}}</h3> - <p>{{_i}}Make any row "fluid" by changing <code>.row</code> to <code>.row-fluid</code>. The column classes stay the exact same, making it easy to flip between fixed and fluid grids.{{/i}}</p> -<pre class="prettyprint linenums"> -<div class="row-fluid"> - <div class="span4">...</div> - <div class="span8">...</div> -</div> -</pre> - - <h2>{{_i}}Fluid offsetting{{/i}}</h2> - <p>{{_i}}Operates the same way as the fixed grid system offsetting: add <code>.offset*</code> to any column to offset by that many columns.{{/i}}</p> - <div class="bs-docs-grid"> - <div class="row-fluid show-grid"> - <div class="span4">4</div> - <div class="span4 offset4">4 offset 4</div> - </div><!-- /row --> - <div class="row-fluid show-grid"> - <div class="span3 offset3">3 offset 3</div> - <div class="span3 offset3">3 offset 3</div> - </div><!-- /row --> - <div class="row-fluid show-grid"> - <div class="span6 offset6">6 offset 6</div> - </div><!-- /row --> - </div> -<pre class="prettyprint linenums"> -<div class="row-fluid"> - <div class="span4">...</div> - <div class="span4 offset2">...</div> -</div> -</pre> - - <h2>{{_i}}Fluid nesting{{/i}}</h2> - <p>{{_i}}Fluid grids utilize nesting differently: each nested level of columns should add up to 12 columns. This is because the fluid grid uses percentages, not pixels, for setting widths.{{/i}}</p> - <div class="row-fluid show-grid"> - <div class="span12"> - {{_i}}Fluid 12{{/i}} - <div class="row-fluid show-grid"> - <div class="span6"> - {{_i}}Fluid 6{{/i}} - <div class="row-fluid show-grid"> - <div class="span6"> - {{_i}}Fluid 6{{/i}} - </div> - <div class="span6"> - {{_i}}Fluid 6{{/i}} - </div> - </div> - </div> - <div class="span6"> - {{_i}}Fluid 6{{/i}} - </div> - </div> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="row-fluid"> - <div class="span12"> - {{_i}}Fluid 12{{/i}} - <div class="row-fluid"> - <div class="span6"> - {{_i}}Fluid 6{{/i}} - <div class="row-fluid"> - <div class="span6">{{_i}}Fluid 6{{/i}}</div> - <div class="span6">{{_i}}Fluid 6{{/i}}</div> - </div> - </div> - <div class="span6">{{_i}}Fluid 6{{/i}}</div> - </div> - </div> -</div> -</pre> - - </section> - - - - - <!-- Layouts (Default and fluid) - ================================================== --> - <section id="layouts"> - <div class="page-header"> - <h1>{{_i}}Layouts{{/i}}</h1> - </div> - - <h2>{{_i}}Fixed layout{{/i}}</h2> - <p>{{_i}}Provides a common fixed-width (and optionally responsive) layout with only <code><div class="container"></code> required.{{/i}}</p> - <div class="mini-layout"> - <div class="mini-layout-body"></div> - </div> -<pre class="prettyprint linenums"> -<body> - <div class="container"> - ... - </div> -</body> -</pre> - - <h2>{{_i}}Fluid layout{{/i}}</h2> - <p>{{_i}}Create a fluid, two-column page with <code><div class="container-fluid"></code>—great for applications and docs.{{/i}}</p> - <div class="mini-layout fluid"> - <div class="mini-layout-sidebar"></div> - <div class="mini-layout-body"></div> - </div> -<pre class="prettyprint linenums"> -<div class="container-fluid"> - <div class="row-fluid"> - <div class="span2"> - <!--{{_i}}Sidebar content{{/i}}--> - </div> - <div class="span10"> - <!--{{_i}}Body content{{/i}}--> - </div> - </div> -</div> -</pre> - </section> - - - - - <!-- Responsive design - ================================================== --> - <section id="responsive"> - <div class="page-header"> - <h1>{{_i}}Responsive design{{/i}}</h1> - </div> - - {{! Enabling }} - <h2>{{_i}}Enabling responsive features{{/i}}</h2> - <p>{{_i}}Turn on responsive CSS in your project by including the proper meta tag and additional stylesheet within the <code><head></code> of your document. If you've compiled Bootstrap from the Customize page, you need only include the meta tag.{{/i}}</p> -<pre class="prettyprint linenums"> -<meta name="viewport" content="width=device-width, initial-scale=1.0"> -<link href="assets/css/bootstrap-responsive.css" rel="stylesheet"> -</pre> - <p><span class="label label-info">{{_i}}Heads up!{{/i}}</span> {{_i}} Bootstrap doesn't include responsive features by default at this time as not everything needs to be responsive. Instead of encouraging developers to remove this feature, we figure it best to enable it as needed.{{/i}}</p> - - {{! About }} - <h2>{{_i}}About responsive Bootstrap{{/i}}</h2> - <img src="assets/img/responsive-illustrations.png" alt="Responsive devices" style="float: right; margin: 0 0 20px 20px;"> - <p>{{_i}}Media queries allow for custom CSS based on a number of conditions—ratios, widths, display type, etc—but usually focuses around <code>min-width</code> and <code>max-width</code>.{{/i}}</p> - <ul> - <li>{{_i}}Modify the width of column in our grid{{/i}}</li> - <li>{{_i}}Stack elements instead of float wherever necessary{{/i}}</li> - <li>{{_i}}Resize headings and text to be more appropriate for devices{{/i}}</li> - </ul> - <p>{{_i}}Use media queries responsibly and only as a start to your mobile audiences. For larger projects, do consider dedicated code bases and not layers of media queries.{{/i}}</p> - - {{! Supported }} - <h2>{{_i}}Supported devices{{/i}}</h2> - <p>{{_i}}Bootstrap supports a handful of media queries in a single file to help make your projects more appropriate on different devices and screen resolutions. Here's what's included:{{/i}}</p> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th>{{_i}}Label{{/i}}</th> - <th>{{_i}}Layout width{{/i}}</th> - <th>{{_i}}Column width{{/i}}</th> - <th>{{_i}}Gutter width{{/i}}</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{_i}}Large display{{/i}}</td> - <td>1200px and up</td> - <td>70px</td> - <td>30px</td> - </tr> - <tr> - <td>{{_i}}Default{{/i}}</td> - <td>980px and up</td> - <td>60px</td> - <td>20px</td> - </tr> - <tr> - <td>{{_i}}Portrait tablets{{/i}}</td> - <td>768px and above</td> - <td>42px</td> - <td>20px</td> - </tr> - <tr> - <td>{{_i}}Phones to tablets{{/i}}</td> - <td>767px and below</td> - <td class="muted" colspan="2">{{_i}}Fluid columns, no fixed widths{{/i}}</td> - </tr> - <tr> - <td>{{_i}}Phones{{/i}}</td> - <td>480px and below</td> - <td class="muted" colspan="2">{{_i}}Fluid columns, no fixed widths{{/i}}</td> - </tr> - </tbody> - </table> -<pre class="prettyprint linenums"> -/* {{_i}}Large desktop{{/i}} */ -@media (min-width: 1200px) { ... } - -/* {{_i}}Portrait tablet to landscape and desktop{{/i}} */ -@media (min-width: 768px) and (max-width: 979px) { ... } - -/* {{_i}}Landscape phone to portrait tablet{{/i}} */ -@media (max-width: 767px) { ... } - -/* {{_i}}Landscape phones and down{{/i}} */ -@media (max-width: 480px) { ... } -</pre> - - - {{! Responsive utility classes }} - <h2>{{_i}}Responsive utility classes{{/i}}</h2> - <p>{{_i}}For faster mobile-friendly development, use these utility classes for showing and hiding content by device. Below is a table of the available classes and their effect on a given media query layout (labeled by device). They can be found in <code>responsive.less</code>.{{/i}}</p> - <table class="table table-bordered table-striped responsive-utilities"> - <thead> - <tr> - <th>{{_i}}Class{{/i}}</th> - <th>{{_i}}Phones <small>767px and below</small>{{/i}}</th> - <th>{{_i}}Tablets <small>979px to 768px</small>{{/i}}</th> - <th>{{_i}}Desktops <small>Default</small>{{/i}}</th> - </tr> - </thead> - <tbody> - <tr> - <th><code>.visible-phone</code></th> - <td class="is-visible">{{_i}}Visible{{/i}}</td> - <td class="is-hidden">{{_i}}Hidden{{/i}}</td> - <td class="is-hidden">{{_i}}Hidden{{/i}}</td> - </tr> - <tr> - <th><code>.visible-tablet</code></th> - <td class="is-hidden">{{_i}}Hidden{{/i}}</td> - <td class="is-visible">{{_i}}Visible{{/i}}</td> - <td class="is-hidden">{{_i}}Hidden{{/i}}</td> - </tr> - <tr> - <th><code>.visible-desktop</code></th> - <td class="is-hidden">{{_i}}Hidden{{/i}}</td> - <td class="is-hidden">{{_i}}Hidden{{/i}}</td> - <td class="is-visible">{{_i}}Visible{{/i}}</td> - </tr> - <tr> - <th><code>.hidden-phone</code></th> - <td class="is-hidden">{{_i}}Hidden{{/i}}</td> - <td class="is-visible">{{_i}}Visible{{/i}}</td> - <td class="is-visible">{{_i}}Visible{{/i}}</td> - </tr> - <tr> - <th><code>.hidden-tablet</code></th> - <td class="is-visible">{{_i}}Visible{{/i}}</td> - <td class="is-hidden">{{_i}}Hidden{{/i}}</td> - <td class="is-visible">{{_i}}Visible{{/i}}</td> - </tr> - <tr> - <th><code>.hidden-desktop</code></th> - <td class="is-visible">{{_i}}Visible{{/i}}</td> - <td class="is-visible">{{_i}}Visible{{/i}}</td> - <td class="is-hidden">{{_i}}Hidden{{/i}}</td> - </tr> - </tbody> - </table> - - <h3>{{_i}}When to use{{/i}}</h3> - <p>{{_i}}Use on a limited basis and avoid creating entirely different versions of the same site. Instead, use them to complement each device's presentation. Responsive utilities should not be used with tables, and as such are not supported.{{/i}}</p> - - <h3>{{_i}}Responsive utilities test case{{/i}}</h3> - <p>{{_i}}Resize your browser or load on different devices to test the above classes.{{/i}}</p> - <h4>{{_i}}Visible on...{{/i}}</h4> - <p>{{_i}}Green checkmarks indicate that class is visible in your current viewport.{{/i}}</p> - <ul class="responsive-utilities-test"> - <li>{{_i}}Phone{{/i}}<span class="visible-phone">✔ {{_i}}Phone{{/i}}</span></li> - <li>{{_i}}Tablet{{/i}}<span class="visible-tablet">✔ {{_i}}Tablet{{/i}}</span></li> - <li>{{_i}}Desktop{{/i}}<span class="visible-desktop">✔ {{_i}}Desktop{{/i}}</span></li> - </ul> - <h4>{{_i}}Hidden on...{{/i}}</h4> - <p>{{_i}}Here, green checkmarks indicate that class is hidden in your current viewport.{{/i}}</p> - <ul class="responsive-utilities-test hidden-on"> - <li>{{_i}}Phone{{/i}}<span class="hidden-phone">✔ {{_i}}Phone{{/i}}</span></li> - <li>{{_i}}Tablet{{/i}}<span class="hidden-tablet">✔ {{_i}}Tablet{{/i}}</span></li> - <li>{{_i}}Desktop{{/i}}<span class="hidden-desktop">✔ {{_i}}Desktop{{/i}}</span></li> - </ul> - - </section> - - - - </div>{{! /span9 }} - </div>{{! row}} - - </div>{{! /.container }} diff --git a/src/main/webapp/bower_components/bootstrap/img/glyphicons-halflings-white.png b/src/main/webapp/bower_components/bootstrap/img/glyphicons-halflings-white.png deleted file mode 100644 index 3bf6484a29d8da269f9bc874b25493a45fae3bae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8777 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 B7G?kd diff --git a/src/main/webapp/bower_components/bootstrap/img/glyphicons-halflings.png b/src/main/webapp/bower_components/bootstrap/img/glyphicons-halflings.png deleted file mode 100644 index a9969993201f9cee63cf9f49217646347297b643..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12799 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 diff --git a/src/main/webapp/bower_components/bootstrap/js/.jshintrc b/src/main/webapp/bower_components/bootstrap/js/.jshintrc deleted file mode 100644 index e0722690..00000000 --- a/src/main/webapp/bower_components/bootstrap/js/.jshintrc +++ /dev/null @@ -1,12 +0,0 @@ -{ - "validthis": true, - "laxcomma" : true, - "laxbreak" : true, - "browser" : true, - "eqnull" : true, - "debug" : true, - "devel" : true, - "boss" : true, - "expr" : true, - "asi" : true -} \ No newline at end of file diff --git a/src/main/webapp/bower_components/bootstrap/js/bootstrap-affix.js b/src/main/webapp/bower_components/bootstrap/js/bootstrap-affix.js deleted file mode 100644 index 7595fdb0..00000000 --- a/src/main/webapp/bower_components/bootstrap/js/bootstrap-affix.js +++ /dev/null @@ -1,117 +0,0 @@ -/* ========================================================== - * bootstrap-affix.js v2.3.0 - * http://twitter.github.com/bootstrap/javascript.html#affix - * ========================================================== - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ========================================================== */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* AFFIX CLASS DEFINITION - * ====================== */ - - var Affix = function (element, options) { - this.options = $.extend({}, $.fn.affix.defaults, options) - this.$window = $(window) - .on('scroll.affix.data-api', $.proxy(this.checkPosition, this)) - .on('click.affix.data-api', $.proxy(function () { setTimeout($.proxy(this.checkPosition, this), 1) }, this)) - this.$element = $(element) - this.checkPosition() - } - - Affix.prototype.checkPosition = function () { - if (!this.$element.is(':visible')) return - - var scrollHeight = $(document).height() - , scrollTop = this.$window.scrollTop() - , position = this.$element.offset() - , offset = this.options.offset - , offsetBottom = offset.bottom - , offsetTop = offset.top - , reset = 'affix affix-top affix-bottom' - , affix - - if (typeof offset != 'object') offsetBottom = offsetTop = offset - if (typeof offsetTop == 'function') offsetTop = offset.top() - if (typeof offsetBottom == 'function') offsetBottom = offset.bottom() - - affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ? - false : offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ? - 'bottom' : offsetTop != null && scrollTop <= offsetTop ? - 'top' : false - - if (this.affixed === affix) return - - this.affixed = affix - this.unpin = affix == 'bottom' ? position.top - scrollTop : null - - this.$element.removeClass(reset).addClass('affix' + (affix ? '-' + affix : '')) - } - - - /* AFFIX PLUGIN DEFINITION - * ======================= */ - - var old = $.fn.affix - - $.fn.affix = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('affix') - , options = typeof option == 'object' && option - if (!data) $this.data('affix', (data = new Affix(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.affix.Constructor = Affix - - $.fn.affix.defaults = { - offset: 0 - } - - - /* AFFIX NO CONFLICT - * ================= */ - - $.fn.affix.noConflict = function () { - $.fn.affix = old - return this - } - - - /* AFFIX DATA-API - * ============== */ - - $(window).on('load', function () { - $('[data-spy="affix"]').each(function () { - var $spy = $(this) - , data = $spy.data() - - data.offset = data.offset || {} - - data.offsetBottom && (data.offset.bottom = data.offsetBottom) - data.offsetTop && (data.offset.top = data.offsetTop) - - $spy.affix(data) - }) - }) - - -}(window.jQuery); \ No newline at end of file diff --git a/src/main/webapp/bower_components/bootstrap/js/bootstrap-alert.js b/src/main/webapp/bower_components/bootstrap/js/bootstrap-alert.js deleted file mode 100644 index b5627984..00000000 --- a/src/main/webapp/bower_components/bootstrap/js/bootstrap-alert.js +++ /dev/null @@ -1,99 +0,0 @@ -/* ========================================================== - * bootstrap-alert.js v2.3.0 - * http://twitter.github.com/bootstrap/javascript.html#alerts - * ========================================================== - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ========================================================== */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* ALERT CLASS DEFINITION - * ====================== */ - - var dismiss = '[data-dismiss="alert"]' - , Alert = function (el) { - $(el).on('click', dismiss, this.close) - } - - Alert.prototype.close = function (e) { - var $this = $(this) - , selector = $this.attr('data-target') - , $parent - - if (!selector) { - selector = $this.attr('href') - selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 - } - - $parent = $(selector) - - e && e.preventDefault() - - $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent()) - - $parent.trigger(e = $.Event('close')) - - if (e.isDefaultPrevented()) return - - $parent.removeClass('in') - - function removeElement() { - $parent - .trigger('closed') - .remove() - } - - $.support.transition && $parent.hasClass('fade') ? - $parent.on($.support.transition.end, removeElement) : - removeElement() - } - - - /* ALERT PLUGIN DEFINITION - * ======================= */ - - var old = $.fn.alert - - $.fn.alert = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('alert') - if (!data) $this.data('alert', (data = new Alert(this))) - if (typeof option == 'string') data[option].call($this) - }) - } - - $.fn.alert.Constructor = Alert - - - /* ALERT NO CONFLICT - * ================= */ - - $.fn.alert.noConflict = function () { - $.fn.alert = old - return this - } - - - /* ALERT DATA-API - * ============== */ - - $(document).on('click.alert.data-api', dismiss, Alert.prototype.close) - -}(window.jQuery); \ No newline at end of file diff --git a/src/main/webapp/bower_components/bootstrap/js/bootstrap-button.js b/src/main/webapp/bower_components/bootstrap/js/bootstrap-button.js deleted file mode 100644 index 045927b6..00000000 --- a/src/main/webapp/bower_components/bootstrap/js/bootstrap-button.js +++ /dev/null @@ -1,105 +0,0 @@ -/* ============================================================ - * bootstrap-button.js v2.3.0 - * http://twitter.github.com/bootstrap/javascript.html#buttons - * ============================================================ - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============================================================ */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* BUTTON PUBLIC CLASS DEFINITION - * ============================== */ - - var Button = function (element, options) { - this.$element = $(element) - this.options = $.extend({}, $.fn.button.defaults, options) - } - - Button.prototype.setState = function (state) { - var d = 'disabled' - , $el = this.$element - , data = $el.data() - , val = $el.is('input') ? 'val' : 'html' - - state = state + 'Text' - data.resetText || $el.data('resetText', $el[val]()) - - $el[val](data[state] || this.options[state]) - - // push to event loop to allow forms to submit - setTimeout(function () { - state == 'loadingText' ? - $el.addClass(d).attr(d, d) : - $el.removeClass(d).removeAttr(d) - }, 0) - } - - Button.prototype.toggle = function () { - var $parent = this.$element.closest('[data-toggle="buttons-radio"]') - - $parent && $parent - .find('.active') - .removeClass('active') - - this.$element.toggleClass('active') - } - - - /* BUTTON PLUGIN DEFINITION - * ======================== */ - - var old = $.fn.button - - $.fn.button = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('button') - , options = typeof option == 'object' && option - if (!data) $this.data('button', (data = new Button(this, options))) - if (option == 'toggle') data.toggle() - else if (option) data.setState(option) - }) - } - - $.fn.button.defaults = { - loadingText: 'loading...' - } - - $.fn.button.Constructor = Button - - - /* BUTTON NO CONFLICT - * ================== */ - - $.fn.button.noConflict = function () { - $.fn.button = old - return this - } - - - /* BUTTON DATA-API - * =============== */ - - $(document).on('click.button.data-api', '[data-toggle^=button]', function (e) { - var $btn = $(e.target) - if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') - $btn.button('toggle') - }) - -}(window.jQuery); \ No newline at end of file diff --git a/src/main/webapp/bower_components/bootstrap/js/bootstrap-carousel.js b/src/main/webapp/bower_components/bootstrap/js/bootstrap-carousel.js deleted file mode 100644 index 60455201..00000000 --- a/src/main/webapp/bower_components/bootstrap/js/bootstrap-carousel.js +++ /dev/null @@ -1,207 +0,0 @@ -/* ========================================================== - * bootstrap-carousel.js v2.3.0 - * http://twitter.github.com/bootstrap/javascript.html#carousel - * ========================================================== - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ========================================================== */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* CAROUSEL CLASS DEFINITION - * ========================= */ - - var Carousel = function (element, options) { - this.$element = $(element) - this.$indicators = this.$element.find('.carousel-indicators') - this.options = options - this.options.pause == 'hover' && this.$element - .on('mouseenter', $.proxy(this.pause, this)) - .on('mouseleave', $.proxy(this.cycle, this)) - } - - Carousel.prototype = { - - cycle: function (e) { - if (!e) this.paused = false - if (this.interval) clearInterval(this.interval); - this.options.interval - && !this.paused - && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) - return this - } - - , getActiveIndex: function () { - this.$active = this.$element.find('.item.active') - this.$items = this.$active.parent().children() - return this.$items.index(this.$active) - } - - , to: function (pos) { - var activeIndex = this.getActiveIndex() - , that = this - - if (pos > (this.$items.length - 1) || pos < 0) return - - if (this.sliding) { - return this.$element.one('slid', function () { - that.to(pos) - }) - } - - if (activeIndex == pos) { - return this.pause().cycle() - } - - return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) - } - - , pause: function (e) { - if (!e) this.paused = true - if (this.$element.find('.next, .prev').length && $.support.transition.end) { - this.$element.trigger($.support.transition.end) - this.cycle() - } - clearInterval(this.interval) - this.interval = null - return this - } - - , next: function () { - if (this.sliding) return - return this.slide('next') - } - - , prev: function () { - if (this.sliding) return - return this.slide('prev') - } - - , slide: function (type, next) { - var $active = this.$element.find('.item.active') - , $next = next || $active[type]() - , isCycling = this.interval - , direction = type == 'next' ? 'left' : 'right' - , fallback = type == 'next' ? 'first' : 'last' - , that = this - , e - - this.sliding = true - - isCycling && this.pause() - - $next = $next.length ? $next : this.$element.find('.item')[fallback]() - - e = $.Event('slide', { - relatedTarget: $next[0] - , direction: direction - }) - - if ($next.hasClass('active')) return - - if (this.$indicators.length) { - this.$indicators.find('.active').removeClass('active') - this.$element.one('slid', function () { - var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()]) - $nextIndicator && $nextIndicator.addClass('active') - }) - } - - if ($.support.transition && this.$element.hasClass('slide')) { - this.$element.trigger(e) - if (e.isDefaultPrevented()) return - $next.addClass(type) - $next[0].offsetWidth // force reflow - $active.addClass(direction) - $next.addClass(direction) - this.$element.one($.support.transition.end, function () { - $next.removeClass([type, direction].join(' ')).addClass('active') - $active.removeClass(['active', direction].join(' ')) - that.sliding = false - setTimeout(function () { that.$element.trigger('slid') }, 0) - }) - } else { - this.$element.trigger(e) - if (e.isDefaultPrevented()) return - $active.removeClass('active') - $next.addClass('active') - this.sliding = false - this.$element.trigger('slid') - } - - isCycling && this.cycle() - - return this - } - - } - - - /* CAROUSEL PLUGIN DEFINITION - * ========================== */ - - var old = $.fn.carousel - - $.fn.carousel = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('carousel') - , options = $.extend({}, $.fn.carousel.defaults, typeof option == 'object' && option) - , action = typeof option == 'string' ? option : options.slide - if (!data) $this.data('carousel', (data = new Carousel(this, options))) - if (typeof option == 'number') data.to(option) - else if (action) data[action]() - else if (options.interval) data.pause().cycle() - }) - } - - $.fn.carousel.defaults = { - interval: 5000 - , pause: 'hover' - } - - $.fn.carousel.Constructor = Carousel - - - /* CAROUSEL NO CONFLICT - * ==================== */ - - $.fn.carousel.noConflict = function () { - $.fn.carousel = old - return this - } - - /* CAROUSEL DATA-API - * ================= */ - - $(document).on('click.carousel.data-api', '[data-slide], [data-slide-to]', function (e) { - var $this = $(this), href - , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 - , options = $.extend({}, $target.data(), $this.data()) - , slideIndex - - $target.carousel(options) - - if (slideIndex = $this.attr('data-slide-to')) { - $target.data('carousel').pause().to(slideIndex).cycle() - } - - e.preventDefault() - }) - -}(window.jQuery); \ No newline at end of file diff --git a/src/main/webapp/bower_components/bootstrap/js/bootstrap-collapse.js b/src/main/webapp/bower_components/bootstrap/js/bootstrap-collapse.js deleted file mode 100644 index 7bbad8e4..00000000 --- a/src/main/webapp/bower_components/bootstrap/js/bootstrap-collapse.js +++ /dev/null @@ -1,167 +0,0 @@ -/* ============================================================= - * bootstrap-collapse.js v2.3.0 - * http://twitter.github.com/bootstrap/javascript.html#collapse - * ============================================================= - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============================================================ */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* COLLAPSE PUBLIC CLASS DEFINITION - * ================================ */ - - var Collapse = function (element, options) { - this.$element = $(element) - this.options = $.extend({}, $.fn.collapse.defaults, options) - - if (this.options.parent) { - this.$parent = $(this.options.parent) - } - - this.options.toggle && this.toggle() - } - - Collapse.prototype = { - - constructor: Collapse - - , dimension: function () { - var hasWidth = this.$element.hasClass('width') - return hasWidth ? 'width' : 'height' - } - - , show: function () { - var dimension - , scroll - , actives - , hasData - - if (this.transitioning || this.$element.hasClass('in')) return - - dimension = this.dimension() - scroll = $.camelCase(['scroll', dimension].join('-')) - actives = this.$parent && this.$parent.find('> .accordion-group > .in') - - if (actives && actives.length) { - hasData = actives.data('collapse') - if (hasData && hasData.transitioning) return - actives.collapse('hide') - hasData || actives.data('collapse', null) - } - - this.$element[dimension](0) - this.transition('addClass', $.Event('show'), 'shown') - $.support.transition && this.$element[dimension](this.$element[0][scroll]) - } - - , hide: function () { - var dimension - if (this.transitioning || !this.$element.hasClass('in')) return - dimension = this.dimension() - this.reset(this.$element[dimension]()) - this.transition('removeClass', $.Event('hide'), 'hidden') - this.$element[dimension](0) - } - - , reset: function (size) { - var dimension = this.dimension() - - this.$element - .removeClass('collapse') - [dimension](size || 'auto') - [0].offsetWidth - - this.$element[size !== null ? 'addClass' : 'removeClass']('collapse') - - return this - } - - , transition: function (method, startEvent, completeEvent) { - var that = this - , complete = function () { - if (startEvent.type == 'show') that.reset() - that.transitioning = 0 - that.$element.trigger(completeEvent) - } - - this.$element.trigger(startEvent) - - if (startEvent.isDefaultPrevented()) return - - this.transitioning = 1 - - this.$element[method]('in') - - $.support.transition && this.$element.hasClass('collapse') ? - this.$element.one($.support.transition.end, complete) : - complete() - } - - , toggle: function () { - this[this.$element.hasClass('in') ? 'hide' : 'show']() - } - - } - - - /* COLLAPSE PLUGIN DEFINITION - * ========================== */ - - var old = $.fn.collapse - - $.fn.collapse = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('collapse') - , options = $.extend({}, $.fn.collapse.defaults, $this.data(), typeof option == 'object' && option) - if (!data) $this.data('collapse', (data = new Collapse(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.collapse.defaults = { - toggle: true - } - - $.fn.collapse.Constructor = Collapse - - - /* COLLAPSE NO CONFLICT - * ==================== */ - - $.fn.collapse.noConflict = function () { - $.fn.collapse = old - return this - } - - - /* COLLAPSE DATA-API - * ================= */ - - $(document).on('click.collapse.data-api', '[data-toggle=collapse]', function (e) { - var $this = $(this), href - , target = $this.attr('data-target') - || e.preventDefault() - || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 - , option = $(target).data('collapse') ? 'toggle' : $this.data() - $this[$(target).hasClass('in') ? 'addClass' : 'removeClass']('collapsed') - $(target).collapse(option) - }) - -}(window.jQuery); \ No newline at end of file diff --git a/src/main/webapp/bower_components/bootstrap/js/bootstrap-dropdown.js b/src/main/webapp/bower_components/bootstrap/js/bootstrap-dropdown.js deleted file mode 100644 index ec86cf0d..00000000 --- a/src/main/webapp/bower_components/bootstrap/js/bootstrap-dropdown.js +++ /dev/null @@ -1,165 +0,0 @@ -/* ============================================================ - * bootstrap-dropdown.js v2.3.0 - * http://twitter.github.com/bootstrap/javascript.html#dropdowns - * ============================================================ - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============================================================ */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* DROPDOWN CLASS DEFINITION - * ========================= */ - - var toggle = '[data-toggle=dropdown]' - , Dropdown = function (element) { - var $el = $(element).on('click.dropdown.data-api', this.toggle) - $('html').on('click.dropdown.data-api', function () { - $el.parent().removeClass('open') - }) - } - - Dropdown.prototype = { - - constructor: Dropdown - - , toggle: function (e) { - var $this = $(this) - , $parent - , isActive - - if ($this.is('.disabled, :disabled')) return - - $parent = getParent($this) - - isActive = $parent.hasClass('open') - - clearMenus() - - if (!isActive) { - $parent.toggleClass('open') - } - - $this.focus() - - return false - } - - , keydown: function (e) { - var $this - , $items - , $active - , $parent - , isActive - , index - - if (!/(38|40|27)/.test(e.keyCode)) return - - $this = $(this) - - e.preventDefault() - e.stopPropagation() - - if ($this.is('.disabled, :disabled')) return - - $parent = getParent($this) - - isActive = $parent.hasClass('open') - - if (!isActive || (isActive && e.keyCode == 27)) { - if (e.which == 27) $parent.find(toggle).focus() - return $this.click() - } - - $items = $('[role=menu] li:not(.divider):visible a', $parent) - - if (!$items.length) return - - index = $items.index($items.filter(':focus')) - - if (e.keyCode == 38 && index > 0) index-- // up - if (e.keyCode == 40 && index < $items.length - 1) index++ // down - if (!~index) index = 0 - - $items - .eq(index) - .focus() - } - - } - - function clearMenus() { - $(toggle).each(function () { - getParent($(this)).removeClass('open') - }) - } - - function getParent($this) { - var selector = $this.attr('data-target') - , $parent - - if (!selector) { - selector = $this.attr('href') - selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 - } - - $parent = selector && $(selector) - - if (!$parent || !$parent.length) $parent = $this.parent() - - return $parent - } - - - /* DROPDOWN PLUGIN DEFINITION - * ========================== */ - - var old = $.fn.dropdown - - $.fn.dropdown = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('dropdown') - if (!data) $this.data('dropdown', (data = new Dropdown(this))) - if (typeof option == 'string') data[option].call($this) - }) - } - - $.fn.dropdown.Constructor = Dropdown - - - /* DROPDOWN NO CONFLICT - * ==================== */ - - $.fn.dropdown.noConflict = function () { - $.fn.dropdown = old - return this - } - - - /* APPLY TO STANDARD DROPDOWN ELEMENTS - * =================================== */ - - $(document) - .on('click.dropdown.data-api', clearMenus) - .on('click.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() }) - .on('.dropdown-menu', function (e) { e.stopPropagation() }) - .on('click.dropdown.data-api' , toggle, Dropdown.prototype.toggle) - .on('keydown.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown) - -}(window.jQuery); diff --git a/src/main/webapp/bower_components/bootstrap/js/bootstrap-modal.js b/src/main/webapp/bower_components/bootstrap/js/bootstrap-modal.js deleted file mode 100644 index b5ffa95b..00000000 --- a/src/main/webapp/bower_components/bootstrap/js/bootstrap-modal.js +++ /dev/null @@ -1,247 +0,0 @@ -/* ========================================================= - * bootstrap-modal.js v2.3.0 - * http://twitter.github.com/bootstrap/javascript.html#modals - * ========================================================= - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ========================================================= */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* MODAL CLASS DEFINITION - * ====================== */ - - var Modal = function (element, options) { - this.options = options - this.$element = $(element) - .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this)) - this.options.remote && this.$element.find('.modal-body').load(this.options.remote) - } - - Modal.prototype = { - - constructor: Modal - - , toggle: function () { - return this[!this.isShown ? 'show' : 'hide']() - } - - , show: function () { - var that = this - , e = $.Event('show') - - this.$element.trigger(e) - - if (this.isShown || e.isDefaultPrevented()) return - - this.isShown = true - - this.escape() - - this.backdrop(function () { - var transition = $.support.transition && that.$element.hasClass('fade') - - if (!that.$element.parent().length) { - that.$element.appendTo(document.body) //don't move modals dom position - } - - that.$element.show() - - if (transition) { - that.$element[0].offsetWidth // force reflow - } - - that.$element - .addClass('in') - .attr('aria-hidden', false) - - that.enforceFocus() - - transition ? - that.$element.one($.support.transition.end, function () { that.$element.focus().trigger('shown') }) : - that.$element.focus().trigger('shown') - - }) - } - - , hide: function (e) { - e && e.preventDefault() - - var that = this - - e = $.Event('hide') - - this.$element.trigger(e) - - if (!this.isShown || e.isDefaultPrevented()) return - - this.isShown = false - - this.escape() - - $(document).off('focusin.modal') - - this.$element - .removeClass('in') - .attr('aria-hidden', true) - - $.support.transition && this.$element.hasClass('fade') ? - this.hideWithTransition() : - this.hideModal() - } - - , enforceFocus: function () { - var that = this - $(document).on('focusin.modal', function (e) { - if (that.$element[0] !== e.target && !that.$element.has(e.target).length) { - that.$element.focus() - } - }) - } - - , escape: function () { - var that = this - if (this.isShown && this.options.keyboard) { - this.$element.on('keyup.dismiss.modal', function ( e ) { - e.which == 27 && that.hide() - }) - } else if (!this.isShown) { - this.$element.off('keyup.dismiss.modal') - } - } - - , hideWithTransition: function () { - var that = this - , timeout = setTimeout(function () { - that.$element.off($.support.transition.end) - that.hideModal() - }, 500) - - this.$element.one($.support.transition.end, function () { - clearTimeout(timeout) - that.hideModal() - }) - } - - , hideModal: function () { - var that = this - this.$element.hide() - this.backdrop(function () { - that.removeBackdrop() - that.$element.trigger('hidden') - }) - } - - , removeBackdrop: function () { - this.$backdrop.remove() - this.$backdrop = null - } - - , backdrop: function (callback) { - var that = this - , animate = this.$element.hasClass('fade') ? 'fade' : '' - - if (this.isShown && this.options.backdrop) { - var doAnimate = $.support.transition && animate - - this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />') - .appendTo(document.body) - - this.$backdrop.click( - this.options.backdrop == 'static' ? - $.proxy(this.$element[0].focus, this.$element[0]) - : $.proxy(this.hide, this) - ) - - if (doAnimate) this.$backdrop[0].offsetWidth // force reflow - - this.$backdrop.addClass('in') - - if (!callback) return - - doAnimate ? - this.$backdrop.one($.support.transition.end, callback) : - callback() - - } else if (!this.isShown && this.$backdrop) { - this.$backdrop.removeClass('in') - - $.support.transition && this.$element.hasClass('fade')? - this.$backdrop.one($.support.transition.end, callback) : - callback() - - } else if (callback) { - callback() - } - } - } - - - /* MODAL PLUGIN DEFINITION - * ======================= */ - - var old = $.fn.modal - - $.fn.modal = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('modal') - , options = $.extend({}, $.fn.modal.defaults, $this.data(), typeof option == 'object' && option) - if (!data) $this.data('modal', (data = new Modal(this, options))) - if (typeof option == 'string') data[option]() - else if (options.show) data.show() - }) - } - - $.fn.modal.defaults = { - backdrop: true - , keyboard: true - , show: true - } - - $.fn.modal.Constructor = Modal - - - /* MODAL NO CONFLICT - * ================= */ - - $.fn.modal.noConflict = function () { - $.fn.modal = old - return this - } - - - /* MODAL DATA-API - * ============== */ - - $(document).on('click.modal.data-api', '[data-toggle="modal"]', function (e) { - var $this = $(this) - , href = $this.attr('href') - , $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) //strip for ie7 - , option = $target.data('modal') ? 'toggle' : $.extend({ remote:!/#/.test(href) && href }, $target.data(), $this.data()) - - e.preventDefault() - - $target - .modal(option) - .one('hide', function () { - $this.focus() - }) - }) - -}(window.jQuery); diff --git a/src/main/webapp/bower_components/bootstrap/js/bootstrap-popover.js b/src/main/webapp/bower_components/bootstrap/js/bootstrap-popover.js deleted file mode 100644 index 0e7774bf..00000000 --- a/src/main/webapp/bower_components/bootstrap/js/bootstrap-popover.js +++ /dev/null @@ -1,114 +0,0 @@ -/* =========================================================== - * bootstrap-popover.js v2.3.0 - * http://twitter.github.com/bootstrap/javascript.html#popovers - * =========================================================== - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * =========================================================== */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* POPOVER PUBLIC CLASS DEFINITION - * =============================== */ - - var Popover = function (element, options) { - this.init('popover', element, options) - } - - - /* NOTE: POPOVER EXTENDS BOOTSTRAP-TOOLTIP.js - ========================================== */ - - Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, { - - constructor: Popover - - , setContent: function () { - var $tip = this.tip() - , title = this.getTitle() - , content = this.getContent() - - $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title) - $tip.find('.popover-content')[this.options.html ? 'html' : 'text'](content) - - $tip.removeClass('fade top bottom left right in') - } - - , hasContent: function () { - return this.getTitle() || this.getContent() - } - - , getContent: function () { - var content - , $e = this.$element - , o = this.options - - content = (typeof o.content == 'function' ? o.content.call($e[0]) : o.content) - || $e.attr('data-content') - - return content - } - - , tip: function () { - if (!this.$tip) { - this.$tip = $(this.options.template) - } - return this.$tip - } - - , destroy: function () { - this.hide().$element.off('.' + this.type).removeData(this.type) - } - - }) - - - /* POPOVER PLUGIN DEFINITION - * ======================= */ - - var old = $.fn.popover - - $.fn.popover = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('popover') - , options = typeof option == 'object' && option - if (!data) $this.data('popover', (data = new Popover(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.popover.Constructor = Popover - - $.fn.popover.defaults = $.extend({} , $.fn.tooltip.defaults, { - placement: 'right' - , trigger: 'click' - , content: '' - , template: '<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>' - }) - - - /* POPOVER NO CONFLICT - * =================== */ - - $.fn.popover.noConflict = function () { - $.fn.popover = old - return this - } - -}(window.jQuery); diff --git a/src/main/webapp/bower_components/bootstrap/js/bootstrap-scrollspy.js b/src/main/webapp/bower_components/bootstrap/js/bootstrap-scrollspy.js deleted file mode 100644 index dff9a3b3..00000000 --- a/src/main/webapp/bower_components/bootstrap/js/bootstrap-scrollspy.js +++ /dev/null @@ -1,162 +0,0 @@ -/* ============================================================= - * bootstrap-scrollspy.js v2.3.0 - * http://twitter.github.com/bootstrap/javascript.html#scrollspy - * ============================================================= - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============================================================== */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* SCROLLSPY CLASS DEFINITION - * ========================== */ - - function ScrollSpy(element, options) { - var process = $.proxy(this.process, this) - , $element = $(element).is('body') ? $(window) : $(element) - , href - this.options = $.extend({}, $.fn.scrollspy.defaults, options) - this.$scrollElement = $element.on('scroll.scroll-spy.data-api', process) - this.selector = (this.options.target - || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 - || '') + ' .nav li > a' - this.$body = $('body') - this.refresh() - this.process() - } - - ScrollSpy.prototype = { - - constructor: ScrollSpy - - , refresh: function () { - var self = this - , $targets - - this.offsets = $([]) - this.targets = $([]) - - $targets = this.$body - .find(this.selector) - .map(function () { - var $el = $(this) - , href = $el.data('target') || $el.attr('href') - , $href = /^#\w/.test(href) && $(href) - return ( $href - && $href.length - && [[ $href.position().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]] ) || null - }) - .sort(function (a, b) { return a[0] - b[0] }) - .each(function () { - self.offsets.push(this[0]) - self.targets.push(this[1]) - }) - } - - , process: function () { - var scrollTop = this.$scrollElement.scrollTop() + this.options.offset - , scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight - , maxScroll = scrollHeight - this.$scrollElement.height() - , offsets = this.offsets - , targets = this.targets - , activeTarget = this.activeTarget - , i - - if (scrollTop >= maxScroll) { - return activeTarget != (i = targets.last()[0]) - && this.activate ( i ) - } - - for (i = offsets.length; i--;) { - activeTarget != targets[i] - && scrollTop >= offsets[i] - && (!offsets[i + 1] || scrollTop <= offsets[i + 1]) - && this.activate( targets[i] ) - } - } - - , activate: function (target) { - var active - , selector - - this.activeTarget = target - - $(this.selector) - .parent('.active') - .removeClass('active') - - selector = this.selector - + '[data-target="' + target + '"],' - + this.selector + '[href="' + target + '"]' - - active = $(selector) - .parent('li') - .addClass('active') - - if (active.parent('.dropdown-menu').length) { - active = active.closest('li.dropdown').addClass('active') - } - - active.trigger('activate') - } - - } - - - /* SCROLLSPY PLUGIN DEFINITION - * =========================== */ - - var old = $.fn.scrollspy - - $.fn.scrollspy = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('scrollspy') - , options = typeof option == 'object' && option - if (!data) $this.data('scrollspy', (data = new ScrollSpy(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.scrollspy.Constructor = ScrollSpy - - $.fn.scrollspy.defaults = { - offset: 10 - } - - - /* SCROLLSPY NO CONFLICT - * ===================== */ - - $.fn.scrollspy.noConflict = function () { - $.fn.scrollspy = old - return this - } - - - /* SCROLLSPY DATA-API - * ================== */ - - $(window).on('load', function () { - $('[data-spy="scroll"]').each(function () { - var $spy = $(this) - $spy.scrollspy($spy.data()) - }) - }) - -}(window.jQuery); \ No newline at end of file diff --git a/src/main/webapp/bower_components/bootstrap/js/bootstrap-tab.js b/src/main/webapp/bower_components/bootstrap/js/bootstrap-tab.js deleted file mode 100644 index bd77eb5c..00000000 --- a/src/main/webapp/bower_components/bootstrap/js/bootstrap-tab.js +++ /dev/null @@ -1,144 +0,0 @@ -/* ======================================================== - * bootstrap-tab.js v2.3.0 - * http://twitter.github.com/bootstrap/javascript.html#tabs - * ======================================================== - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ======================================================== */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* TAB CLASS DEFINITION - * ==================== */ - - var Tab = function (element) { - this.element = $(element) - } - - Tab.prototype = { - - constructor: Tab - - , show: function () { - var $this = this.element - , $ul = $this.closest('ul:not(.dropdown-menu)') - , selector = $this.attr('data-target') - , previous - , $target - , e - - if (!selector) { - selector = $this.attr('href') - selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 - } - - if ( $this.parent('li').hasClass('active') ) return - - previous = $ul.find('.active:last a')[0] - - e = $.Event('show', { - relatedTarget: previous - }) - - $this.trigger(e) - - if (e.isDefaultPrevented()) return - - $target = $(selector) - - this.activate($this.parent('li'), $ul) - this.activate($target, $target.parent(), function () { - $this.trigger({ - type: 'shown' - , relatedTarget: previous - }) - }) - } - - , activate: function ( element, container, callback) { - var $active = container.find('> .active') - , transition = callback - && $.support.transition - && $active.hasClass('fade') - - function next() { - $active - .removeClass('active') - .find('> .dropdown-menu > .active') - .removeClass('active') - - element.addClass('active') - - if (transition) { - element[0].offsetWidth // reflow for transition - element.addClass('in') - } else { - element.removeClass('fade') - } - - if ( element.parent('.dropdown-menu') ) { - element.closest('li.dropdown').addClass('active') - } - - callback && callback() - } - - transition ? - $active.one($.support.transition.end, next) : - next() - - $active.removeClass('in') - } - } - - - /* TAB PLUGIN DEFINITION - * ===================== */ - - var old = $.fn.tab - - $.fn.tab = function ( option ) { - return this.each(function () { - var $this = $(this) - , data = $this.data('tab') - if (!data) $this.data('tab', (data = new Tab(this))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.tab.Constructor = Tab - - - /* TAB NO CONFLICT - * =============== */ - - $.fn.tab.noConflict = function () { - $.fn.tab = old - return this - } - - - /* TAB DATA-API - * ============ */ - - $(document).on('click.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) { - e.preventDefault() - $(this).tab('show') - }) - -}(window.jQuery); \ No newline at end of file diff --git a/src/main/webapp/bower_components/bootstrap/js/bootstrap-tooltip.js b/src/main/webapp/bower_components/bootstrap/js/bootstrap-tooltip.js deleted file mode 100644 index 98131907..00000000 --- a/src/main/webapp/bower_components/bootstrap/js/bootstrap-tooltip.js +++ /dev/null @@ -1,353 +0,0 @@ -/* =========================================================== - * bootstrap-tooltip.js v2.3.0 - * http://twitter.github.com/bootstrap/javascript.html#tooltips - * Inspired by the original jQuery.tipsy by Jason Frame - * =========================================================== - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ========================================================== */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* TOOLTIP PUBLIC CLASS DEFINITION - * =============================== */ - - var Tooltip = function (element, options) { - this.init('tooltip', element, options) - } - - Tooltip.prototype = { - - constructor: Tooltip - - , init: function (type, element, options) { - var eventIn - , eventOut - , triggers - , trigger - , i - - this.type = type - this.$element = $(element) - this.options = this.getOptions(options) - this.enabled = true - - triggers = this.options.trigger.split(' ') - - for (i = triggers.length; i--;) { - trigger = triggers[i] - if (trigger == 'click') { - this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this)) - } else if (trigger != 'manual') { - eventIn = trigger == 'hover' ? 'mouseenter' : 'focus' - eventOut = trigger == 'hover' ? 'mouseleave' : 'blur' - this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this)) - this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this)) - } - } - - this.options.selector ? - (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) : - this.fixTitle() - } - - , getOptions: function (options) { - options = $.extend({}, $.fn[this.type].defaults, this.$element.data(), options) - - if (options.delay && typeof options.delay == 'number') { - options.delay = { - show: options.delay - , hide: options.delay - } - } - - return options - } - - , enter: function (e) { - var self = $(e.currentTarget)[this.type](this._options).data(this.type) - - if (!self.options.delay || !self.options.delay.show) return self.show() - - clearTimeout(this.timeout) - self.hoverState = 'in' - this.timeout = setTimeout(function() { - if (self.hoverState == 'in') self.show() - }, self.options.delay.show) - } - - , leave: function (e) { - var self = $(e.currentTarget)[this.type](this._options).data(this.type) - - if (this.timeout) clearTimeout(this.timeout) - if (!self.options.delay || !self.options.delay.hide) return self.hide() - - self.hoverState = 'out' - this.timeout = setTimeout(function() { - if (self.hoverState == 'out') self.hide() - }, self.options.delay.hide) - } - - , show: function () { - var $tip - , pos - , actualWidth - , actualHeight - , placement - , tp - , e = $.Event('show') - - if (this.hasContent() && this.enabled) { - this.$element.trigger(e) - if (e.isDefaultPrevented()) return - $tip = this.tip() - this.setContent() - - if (this.options.animation) { - $tip.addClass('fade') - } - - placement = typeof this.options.placement == 'function' ? - this.options.placement.call(this, $tip[0], this.$element[0]) : - this.options.placement - - $tip - .detach() - .css({ top: 0, left: 0, display: 'block' }) - - this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element) - - pos = this.getPosition() - - actualWidth = $tip[0].offsetWidth - actualHeight = $tip[0].offsetHeight - - switch (placement) { - case 'bottom': - tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2} - break - case 'top': - tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2} - break - case 'left': - tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth} - break - case 'right': - tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width} - break - } - - this.applyPlacement(tp, placement) - this.$element.trigger('shown') - } - } - - , applyPlacement: function(offset, placement){ - var $tip = this.tip() - , width = $tip[0].offsetWidth - , height = $tip[0].offsetHeight - , actualWidth - , actualHeight - , delta - , replace - - $tip - .offset(offset) - .addClass(placement) - .addClass('in') - - actualWidth = $tip[0].offsetWidth - actualHeight = $tip[0].offsetHeight - - if (placement == 'top' && actualHeight != height) { - offset.top = offset.top + height - actualHeight - replace = true - } - - if (placement == 'bottom' || placement == 'top') { - delta = 0 - - if (offset.left < 0){ - delta = offset.left * -2 - offset.left = 0 - $tip.offset(offset) - actualWidth = $tip[0].offsetWidth - actualHeight = $tip[0].offsetHeight - } - - this.replaceArrow(delta - width + actualWidth, actualWidth, 'left') - } else { - this.replaceArrow(actualHeight - height, actualHeight, 'top') - } - - if (replace) $tip.offset(offset) - } - - , replaceArrow: function(delta, dimension, position){ - this - .arrow() - .css(position, delta ? (50 * (1 - delta / dimension) + "%") : '') - } - - , setContent: function () { - var $tip = this.tip() - , title = this.getTitle() - - $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title) - $tip.removeClass('fade in top bottom left right') - } - - , hide: function () { - var that = this - , $tip = this.tip() - , e = $.Event('hide') - - this.$element.trigger(e) - if (e.isDefaultPrevented()) return - - $tip.removeClass('in') - - function removeWithAnimation() { - var timeout = setTimeout(function () { - $tip.off($.support.transition.end).detach() - }, 500) - - $tip.one($.support.transition.end, function () { - clearTimeout(timeout) - $tip.detach() - }) - } - - $.support.transition && this.$tip.hasClass('fade') ? - removeWithAnimation() : - $tip.detach() - - this.$element.trigger('hidden') - - return this - } - - , fixTitle: function () { - var $e = this.$element - if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') { - $e.attr('data-original-title', $e.attr('title') || '').attr('title', '') - } - } - - , hasContent: function () { - return this.getTitle() - } - - , getPosition: function () { - var el = this.$element[0] - return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : { - width: el.offsetWidth - , height: el.offsetHeight - }, this.$element.offset()) - } - - , getTitle: function () { - var title - , $e = this.$element - , o = this.options - - title = $e.attr('data-original-title') - || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title) - - return title - } - - , tip: function () { - return this.$tip = this.$tip || $(this.options.template) - } - - , arrow: function(){ - return this.$arrow = this.$arrow || this.tip().find(".tooltip-arrow") - } - - , validate: function () { - if (!this.$element[0].parentNode) { - this.hide() - this.$element = null - this.options = null - } - } - - , enable: function () { - this.enabled = true - } - - , disable: function () { - this.enabled = false - } - - , toggleEnabled: function () { - this.enabled = !this.enabled - } - - , toggle: function (e) { - var self = e ? $(e.currentTarget)[this.type](this._options).data(this.type) : this - self.tip().hasClass('in') ? self.hide() : self.show() - } - - , destroy: function () { - this.hide().$element.off('.' + this.type).removeData(this.type) - } - - } - - - /* TOOLTIP PLUGIN DEFINITION - * ========================= */ - - var old = $.fn.tooltip - - $.fn.tooltip = function ( option ) { - return this.each(function () { - var $this = $(this) - , data = $this.data('tooltip') - , options = typeof option == 'object' && option - if (!data) $this.data('tooltip', (data = new Tooltip(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.tooltip.Constructor = Tooltip - - $.fn.tooltip.defaults = { - animation: true - , placement: 'top' - , selector: false - , template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>' - , trigger: 'hover focus' - , title: '' - , delay: 0 - , html: false - , container: false - } - - - /* TOOLTIP NO CONFLICT - * =================== */ - - $.fn.tooltip.noConflict = function () { - $.fn.tooltip = old - return this - } - -}(window.jQuery); diff --git a/src/main/webapp/bower_components/bootstrap/js/bootstrap-transition.js b/src/main/webapp/bower_components/bootstrap/js/bootstrap-transition.js deleted file mode 100644 index 64f27577..00000000 --- a/src/main/webapp/bower_components/bootstrap/js/bootstrap-transition.js +++ /dev/null @@ -1,60 +0,0 @@ -/* =================================================== - * bootstrap-transition.js v2.3.0 - * http://twitter.github.com/bootstrap/javascript.html#transitions - * =================================================== - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ========================================================== */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* CSS TRANSITION SUPPORT (http://www.modernizr.com/) - * ======================================================= */ - - $(function () { - - $.support.transition = (function () { - - var transitionEnd = (function () { - - var el = document.createElement('bootstrap') - , transEndEventNames = { - 'WebkitTransition' : 'webkitTransitionEnd' - , 'MozTransition' : 'transitionend' - , 'OTransition' : 'oTransitionEnd otransitionend' - , 'transition' : 'transitionend' - } - , name - - for (name in transEndEventNames){ - if (el.style[name] !== undefined) { - return transEndEventNames[name] - } - } - - }()) - - return transitionEnd && { - end: transitionEnd - } - - })() - - }) - -}(window.jQuery); \ No newline at end of file diff --git a/src/main/webapp/bower_components/bootstrap/js/bootstrap-typeahead.js b/src/main/webapp/bower_components/bootstrap/js/bootstrap-typeahead.js deleted file mode 100644 index 960f2af8..00000000 --- a/src/main/webapp/bower_components/bootstrap/js/bootstrap-typeahead.js +++ /dev/null @@ -1,335 +0,0 @@ -/* ============================================================= - * bootstrap-typeahead.js v2.3.0 - * http://twitter.github.com/bootstrap/javascript.html#typeahead - * ============================================================= - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============================================================ */ - - -!function($){ - - "use strict"; // jshint ;_; - - - /* TYPEAHEAD PUBLIC CLASS DEFINITION - * ================================= */ - - var Typeahead = function (element, options) { - this.$element = $(element) - this.options = $.extend({}, $.fn.typeahead.defaults, options) - this.matcher = this.options.matcher || this.matcher - this.sorter = this.options.sorter || this.sorter - this.highlighter = this.options.highlighter || this.highlighter - this.updater = this.options.updater || this.updater - this.source = this.options.source - this.$menu = $(this.options.menu) - this.shown = false - this.listen() - } - - Typeahead.prototype = { - - constructor: Typeahead - - , select: function () { - var val = this.$menu.find('.active').attr('data-value') - this.$element - .val(this.updater(val)) - .change() - return this.hide() - } - - , updater: function (item) { - return item - } - - , show: function () { - var pos = $.extend({}, this.$element.position(), { - height: this.$element[0].offsetHeight - }) - - this.$menu - .insertAfter(this.$element) - .css({ - top: pos.top + pos.height - , left: pos.left - }) - .show() - - this.shown = true - return this - } - - , hide: function () { - this.$menu.hide() - this.shown = false - return this - } - - , lookup: function (event) { - var items - - this.query = this.$element.val() - - if (!this.query || this.query.length < this.options.minLength) { - return this.shown ? this.hide() : this - } - - items = $.isFunction(this.source) ? this.source(this.query, $.proxy(this.process, this)) : this.source - - return items ? this.process(items) : this - } - - , process: function (items) { - var that = this - - items = $.grep(items, function (item) { - return that.matcher(item) - }) - - items = this.sorter(items) - - if (!items.length) { - return this.shown ? this.hide() : this - } - - return this.render(items.slice(0, this.options.items)).show() - } - - , matcher: function (item) { - return ~item.toLowerCase().indexOf(this.query.toLowerCase()) - } - - , sorter: function (items) { - var beginswith = [] - , caseSensitive = [] - , caseInsensitive = [] - , item - - while (item = items.shift()) { - if (!item.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item) - else if (~item.indexOf(this.query)) caseSensitive.push(item) - else caseInsensitive.push(item) - } - - return beginswith.concat(caseSensitive, caseInsensitive) - } - - , highlighter: function (item) { - var query = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&') - return item.replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) { - return '<strong>' + match + '</strong>' - }) - } - - , render: function (items) { - var that = this - - items = $(items).map(function (i, item) { - i = $(that.options.item).attr('data-value', item) - i.find('a').html(that.highlighter(item)) - return i[0] - }) - - items.first().addClass('active') - this.$menu.html(items) - return this - } - - , next: function (event) { - var active = this.$menu.find('.active').removeClass('active') - , next = active.next() - - if (!next.length) { - next = $(this.$menu.find('li')[0]) - } - - next.addClass('active') - } - - , prev: function (event) { - var active = this.$menu.find('.active').removeClass('active') - , prev = active.prev() - - if (!prev.length) { - prev = this.$menu.find('li').last() - } - - prev.addClass('active') - } - - , listen: function () { - this.$element - .on('focus', $.proxy(this.focus, this)) - .on('blur', $.proxy(this.blur, this)) - .on('keypress', $.proxy(this.keypress, this)) - .on('keyup', $.proxy(this.keyup, this)) - - if (this.eventSupported('keydown')) { - this.$element.on('keydown', $.proxy(this.keydown, this)) - } - - this.$menu - .on('click', $.proxy(this.click, this)) - .on('mouseenter', 'li', $.proxy(this.mouseenter, this)) - .on('mouseleave', 'li', $.proxy(this.mouseleave, this)) - } - - , eventSupported: function(eventName) { - var isSupported = eventName in this.$element - if (!isSupported) { - this.$element.setAttribute(eventName, 'return;') - isSupported = typeof this.$element[eventName] === 'function' - } - return isSupported - } - - , move: function (e) { - if (!this.shown) return - - switch(e.keyCode) { - case 9: // tab - case 13: // enter - case 27: // escape - e.preventDefault() - break - - case 38: // up arrow - e.preventDefault() - this.prev() - break - - case 40: // down arrow - e.preventDefault() - this.next() - break - } - - e.stopPropagation() - } - - , keydown: function (e) { - this.suppressKeyPressRepeat = ~$.inArray(e.keyCode, [40,38,9,13,27]) - this.move(e) - } - - , keypress: function (e) { - if (this.suppressKeyPressRepeat) return - this.move(e) - } - - , keyup: function (e) { - switch(e.keyCode) { - case 40: // down arrow - case 38: // up arrow - case 16: // shift - case 17: // ctrl - case 18: // alt - break - - case 9: // tab - case 13: // enter - if (!this.shown) return - this.select() - break - - case 27: // escape - if (!this.shown) return - this.hide() - break - - default: - this.lookup() - } - - e.stopPropagation() - e.preventDefault() - } - - , focus: function (e) { - this.focused = true - } - - , blur: function (e) { - this.focused = false - if (!this.mousedover && this.shown) this.hide() - } - - , click: function (e) { - e.stopPropagation() - e.preventDefault() - this.select() - this.$element.focus() - } - - , mouseenter: function (e) { - this.mousedover = true - this.$menu.find('.active').removeClass('active') - $(e.currentTarget).addClass('active') - } - - , mouseleave: function (e) { - this.mousedover = false - if (!this.focused && this.shown) this.hide() - } - - } - - - /* TYPEAHEAD PLUGIN DEFINITION - * =========================== */ - - var old = $.fn.typeahead - - $.fn.typeahead = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('typeahead') - , options = typeof option == 'object' && option - if (!data) $this.data('typeahead', (data = new Typeahead(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.typeahead.defaults = { - source: [] - , items: 8 - , menu: '<ul class="typeahead dropdown-menu"></ul>' - , item: '<li><a href="#"></a></li>' - , minLength: 1 - } - - $.fn.typeahead.Constructor = Typeahead - - - /* TYPEAHEAD NO CONFLICT - * =================== */ - - $.fn.typeahead.noConflict = function () { - $.fn.typeahead = old - return this - } - - - /* TYPEAHEAD DATA-API - * ================== */ - - $(document).on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) { - var $this = $(this) - if ($this.data('typeahead')) return - $this.typeahead($this.data()) - }) - -}(window.jQuery); diff --git a/src/main/webapp/bower_components/bootstrap/js/tests/index.html b/src/main/webapp/bower_components/bootstrap/js/tests/index.html deleted file mode 100644 index 976ca168..00000000 --- a/src/main/webapp/bower_components/bootstrap/js/tests/index.html +++ /dev/null @@ -1,56 +0,0 @@ -<!DOCTYPE HTML> -<html> -<head> - <title>Bootstrap Plugin Test Suite</title> - - <!-- jquery --> - <!--<script src="http://code.jquery.com/jquery-1.7.min.js"></script>--> - <script src="vendor/jquery.js"></script> - - <!-- qunit --> - <link rel="stylesheet" href="vendor/qunit.css" type="text/css" media="screen" /> - <script src="vendor/qunit.js"></script> - - <!-- phantomjs logging script--> - <script src="unit/bootstrap-phantom.js"></script> - - <!-- plugin sources --> - <script src="../../js/bootstrap-transition.js"></script> - <script src="../../js/bootstrap-alert.js"></script> - <script src="../../js/bootstrap-button.js"></script> - <script src="../../js/bootstrap-carousel.js"></script> - <script src="../../js/bootstrap-collapse.js"></script> - <script src="../../js/bootstrap-dropdown.js"></script> - <script src="../../js/bootstrap-modal.js"></script> - <script src="../../js/bootstrap-scrollspy.js"></script> - <script src="../../js/bootstrap-tab.js"></script> - <script src="../../js/bootstrap-tooltip.js"></script> - <script src="../../js/bootstrap-popover.js"></script> - <script src="../../js/bootstrap-typeahead.js"></script> - <script src="../../js/bootstrap-affix.js"></script> - - <!-- unit tests --> - <script src="unit/bootstrap-transition.js"></script> - <script src="unit/bootstrap-alert.js"></script> - <script src="unit/bootstrap-button.js"></script> - <script src="unit/bootstrap-carousel.js"></script> - <script src="unit/bootstrap-collapse.js"></script> - <script src="unit/bootstrap-dropdown.js"></script> - <script src="unit/bootstrap-modal.js"></script> - <script src="unit/bootstrap-scrollspy.js"></script> - <script src="unit/bootstrap-tab.js"></script> - <script src="unit/bootstrap-tooltip.js"></script> - <script src="unit/bootstrap-popover.js"></script> - <script src="unit/bootstrap-typeahead.js"></script> - <script src="unit/bootstrap-affix.js"></script> -</head> -<body> - <div> - <h1 id="qunit-header">Bootstrap Plugin Test Suite</h1> - <h2 id="qunit-banner"></h2> - <h2 id="qunit-userAgent"></h2> - <ol id="qunit-tests"></ol> - <div id="qunit-fixture"></div> - </div> -</body> -</html> \ No newline at end of file diff --git a/src/main/webapp/bower_components/bootstrap/js/tests/phantom.js b/src/main/webapp/bower_components/bootstrap/js/tests/phantom.js deleted file mode 100644 index 4105bf52..00000000 --- a/src/main/webapp/bower_components/bootstrap/js/tests/phantom.js +++ /dev/null @@ -1,63 +0,0 @@ -// Simple phantom.js integration script -// Adapted from Modernizr - -function waitFor(testFx, onReady, timeOutMillis) { - var maxtimeOutMillis = timeOutMillis ? timeOutMillis : 5001 //< Default Max Timout is 5s - , start = new Date().getTime() - , condition = false - , interval = setInterval(function () { - if ((new Date().getTime() - start < maxtimeOutMillis) && !condition) { - // If not time-out yet and condition not yet fulfilled - condition = (typeof(testFx) === "string" ? eval(testFx) : testFx()) //< defensive code - } else { - if (!condition) { - // If condition still not fulfilled (timeout but condition is 'false') - console.log("'waitFor()' timeout") - phantom.exit(1) - } else { - // Condition fulfilled (timeout and/or condition is 'true') - typeof(onReady) === "string" ? eval(onReady) : onReady() //< Do what it's supposed to do once the condition is fulfilled - clearInterval(interval) //< Stop this interval - } - } - }, 100) //< repeat check every 100ms -} - - -if (phantom.args.length === 0 || phantom.args.length > 2) { - console.log('Usage: phantom.js URL') - phantom.exit() -} - -var page = new WebPage() - -// Route "console.log()" calls from within the Page context to the main Phantom context (i.e. current "this") -page.onConsoleMessage = function(msg) { - console.log(msg) -}; - -page.open(phantom.args[0], function(status){ - if (status !== "success") { - console.log("Unable to access network") - phantom.exit() - } else { - waitFor(function(){ - return page.evaluate(function(){ - var el = document.getElementById('qunit-testresult') - if (el && el.innerText.match('completed')) { - return true - } - return false - }) - }, function(){ - var failedNum = page.evaluate(function(){ - var el = document.getElementById('qunit-testresult') - try { - return el.getElementsByClassName('failed')[0].innerHTML - } catch (e) { } - return 10000 - }); - phantom.exit((parseInt(failedNum, 10) > 0) ? 1 : 0) - }) - } -}) \ No newline at end of file diff --git a/src/main/webapp/bower_components/bootstrap/js/tests/server.js b/src/main/webapp/bower_components/bootstrap/js/tests/server.js deleted file mode 100644 index 7c8445fe..00000000 --- a/src/main/webapp/bower_components/bootstrap/js/tests/server.js +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Simple connect server for phantom.js - * Adapted from Modernizr - */ - -var connect = require('connect') - , http = require('http') - , fs = require('fs') - , app = connect() - .use(connect.static(__dirname + '/../../')); - -http.createServer(app).listen(3000); - -fs.writeFileSync(__dirname + '/pid.txt', process.pid, 'utf-8') \ No newline at end of file diff --git a/src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-affix.js b/src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-affix.js deleted file mode 100644 index c9788789..00000000 --- a/src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-affix.js +++ /dev/null @@ -1,25 +0,0 @@ -$(function () { - - module("bootstrap-affix") - - test("should provide no conflict", function () { - var affix = $.fn.affix.noConflict() - ok(!$.fn.affix, 'affix was set back to undefined (org value)') - $.fn.affix = affix - }) - - test("should be defined on jquery object", function () { - ok($(document.body).affix, 'affix method is defined') - }) - - test("should return element", function () { - ok($(document.body).affix()[0] == document.body, 'document.body returned') - }) - - test("should exit early if element is not visible", function () { - var $affix = $('<div style="display: none"></div>').affix() - $affix.data('affix').checkPosition() - ok(!$affix.hasClass('affix'), 'affix class was not added') - }) - -}) \ No newline at end of file diff --git a/src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-alert.js b/src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-alert.js deleted file mode 100644 index 9a6b514c..00000000 --- a/src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-alert.js +++ /dev/null @@ -1,62 +0,0 @@ -$(function () { - - module("bootstrap-alerts") - - test("should provide no conflict", function () { - var alert = $.fn.alert.noConflict() - ok(!$.fn.alert, 'alert was set back to undefined (org value)') - $.fn.alert = alert - }) - - test("should be defined on jquery object", function () { - ok($(document.body).alert, 'alert method is defined') - }) - - test("should return element", function () { - ok($(document.body).alert()[0] == document.body, 'document.body returned') - }) - - test("should fade element out on clicking .close", function () { - var alertHTML = '<div class="alert-message warning fade in">' - + '<a class="close" href="#" data-dismiss="alert">×</a>' - + '<p><strong>Holy guacamole!</strong> Best check yo self, you\'re not looking too good.</p>' - + '</div>' - , alert = $(alertHTML).alert() - - alert.find('.close').click() - - ok(!alert.hasClass('in'), 'remove .in class on .close click') - }) - - test("should remove element when clicking .close", function () { - $.support.transition = false - - var alertHTML = '<div class="alert-message warning fade in">' - + '<a class="close" href="#" data-dismiss="alert">×</a>' - + '<p><strong>Holy guacamole!</strong> Best check yo self, you\'re not looking too good.</p>' - + '</div>' - , alert = $(alertHTML).appendTo('#qunit-fixture').alert() - - ok($('#qunit-fixture').find('.alert-message').length, 'element added to dom') - - alert.find('.close').click() - - ok(!$('#qunit-fixture').find('.alert-message').length, 'element removed from dom') - }) - - test("should not fire closed when close is prevented", function () { - $.support.transition = false - stop(); - $('<div class="alert"/>') - .bind('close', function (e) { - e.preventDefault(); - ok(true); - start(); - }) - .bind('closed', function () { - ok(false); - }) - .alert('close') - }) - -}) \ No newline at end of file diff --git a/src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-button.js b/src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-button.js deleted file mode 100644 index e23ff9e3..00000000 --- a/src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-button.js +++ /dev/null @@ -1,102 +0,0 @@ -$(function () { - - module("bootstrap-buttons") - - test("should provide no conflict", function () { - var button = $.fn.button.noConflict() - ok(!$.fn.button, 'button was set back to undefined (org value)') - $.fn.button = button - }) - - test("should be defined on jquery object", function () { - ok($(document.body).button, 'button method is defined') - }) - - test("should return element", function () { - ok($(document.body).button()[0] == document.body, 'document.body returned') - }) - - test("should return set state to loading", function () { - var btn = $('<button class="btn" data-loading-text="fat">mdo</button>') - equals(btn.html(), 'mdo', 'btn text equals mdo') - btn.button('loading') - equals(btn.html(), 'fat', 'btn text equals fat') - stop() - setTimeout(function () { - ok(btn.attr('disabled'), 'btn is disabled') - ok(btn.hasClass('disabled'), 'btn has disabled class') - start() - }, 0) - }) - - test("should return reset state", function () { - var btn = $('<button class="btn" data-loading-text="fat">mdo</button>') - equals(btn.html(), 'mdo', 'btn text equals mdo') - btn.button('loading') - equals(btn.html(), 'fat', 'btn text equals fat') - stop() - setTimeout(function () { - ok(btn.attr('disabled'), 'btn is disabled') - ok(btn.hasClass('disabled'), 'btn has disabled class') - start() - stop() - }, 0) - btn.button('reset') - equals(btn.html(), 'mdo', 'btn text equals mdo') - setTimeout(function () { - ok(!btn.attr('disabled'), 'btn is not disabled') - ok(!btn.hasClass('disabled'), 'btn does not have disabled class') - start() - }, 0) - }) - - test("should toggle active", function () { - var btn = $('<button class="btn">mdo</button>') - ok(!btn.hasClass('active'), 'btn does not have active class') - btn.button('toggle') - ok(btn.hasClass('active'), 'btn has class active') - }) - - test("should toggle active when btn children are clicked", function () { - var btn = $('<button class="btn" data-toggle="button">mdo</button>') - , inner = $('<i></i>') - btn - .append(inner) - .appendTo($('#qunit-fixture')) - ok(!btn.hasClass('active'), 'btn does not have active class') - inner.click() - ok(btn.hasClass('active'), 'btn has class active') - }) - - test("should toggle active when btn children are clicked within btn-group", function () { - var btngroup = $('<div class="btn-group" data-toggle="buttons-checkbox"></div>') - , btn = $('<button class="btn">fat</button>') - , inner = $('<i></i>') - btngroup - .append(btn.append(inner)) - .appendTo($('#qunit-fixture')) - ok(!btn.hasClass('active'), 'btn does not have active class') - inner.click() - ok(btn.hasClass('active'), 'btn has class active') - }) - - test("should check for closest matching toggle", function () { - var group = $("<div data-toggle='buttons-radio'></div>") - , btn1 = $("<button class='btn active'></button>") - , btn2 = $("<button class='btn'></button>") - , wrap = $("<div></div>") - - wrap.append(btn1, btn2) - - group - .append(wrap) - .appendTo($('#qunit-fixture')) - - ok(btn1.hasClass('active'), 'btn1 has active class') - ok(!btn2.hasClass('active'), 'btn2 does not have active class') - btn2.click() - ok(!btn1.hasClass('active'), 'btn1 does not have active class') - ok(btn2.hasClass('active'), 'btn2 has active class') - }) - -}) \ No newline at end of file diff --git a/src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-carousel.js b/src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-carousel.js deleted file mode 100644 index 80b6e139..00000000 --- a/src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-carousel.js +++ /dev/null @@ -1,81 +0,0 @@ -$(function () { - - module("bootstrap-carousel") - - test("should provide no conflict", function () { - var carousel = $.fn.carousel.noConflict() - ok(!$.fn.carousel, 'carousel was set back to undefined (org value)') - $.fn.carousel = carousel - }) - - test("should be defined on jquery object", function () { - ok($(document.body).carousel, 'carousel method is defined') - }) - - test("should return element", function () { - ok($(document.body).carousel()[0] == document.body, 'document.body returned') - }) - - test("should not fire sliden when slide is prevented", function () { - $.support.transition = false - stop() - $('<div class="carousel"/>') - .bind('slide', function (e) { - e.preventDefault(); - ok(true); - start(); - }) - .bind('slid', function () { - ok(false); - }) - .carousel('next') - }) - - test("should fire slide event with direction", function () { - var template = '<div id="myCarousel" class="carousel slide"><div class="carousel-inner"><div class="item active"><img alt=""><div class="carousel-caption"><h4>{{_i}}First Thumbnail label{{/i}}</h4><p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p></div></div><div class="item"><img alt=""><div class="carousel-caption"><h4>{{_i}}Second Thumbnail label{{/i}}</h4><p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p></div></div><div class="item"><img alt=""><div class="carousel-caption"><h4>{{_i}}Third Thumbnail label{{/i}}</h4><p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p></div></div></div><a class="left carousel-control" href="#myCarousel" data-slide="prev">‹</a><a class="right carousel-control" href="#myCarousel" data-slide="next">›</a></div>' - $.support.transition = false - stop() - $(template).on('slide', function (e) { - e.preventDefault() - ok(e.direction) - ok(e.direction === 'right' || e.direction === 'left') - start() - }).carousel('next') - }) - - test("should fire slide event with relatedTarget", function () { - var template = '<div id="myCarousel" class="carousel slide"><div class="carousel-inner"><div class="item active"><img alt=""><div class="carousel-caption"><h4>{{_i}}First Thumbnail label{{/i}}</h4><p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p></div></div><div class="item"><img alt=""><div class="carousel-caption"><h4>{{_i}}Second Thumbnail label{{/i}}</h4><p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p></div></div><div class="item"><img alt=""><div class="carousel-caption"><h4>{{_i}}Third Thumbnail label{{/i}}</h4><p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p></div></div></div><a class="left carousel-control" href="#myCarousel" data-slide="prev">‹</a><a class="right carousel-control" href="#myCarousel" data-slide="next">›</a></div>' - $.support.transition = false - stop() - $(template) - .on('slide', function (e) { - e.preventDefault(); - ok(e.relatedTarget); - ok($(e.relatedTarget).hasClass('item')); - start(); - }) - .carousel('next') - }) - - test("should set interval from data attribute", 3,function () { - var template = $('<div id="myCarousel" class="carousel slide"> <div class="carousel-inner"> <div class="item active"> <img alt=""> <div class="carousel-caption"> <h4>{{_i}}First Thumbnail label{{/i}}</h4> <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> </div> </div> <div class="item"> <img alt=""> <div class="carousel-caption"> <h4>{{_i}}Second Thumbnail label{{/i}}</h4> <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> </div> </div> <div class="item"> <img alt=""> <div class="carousel-caption"> <h4>{{_i}}Third Thumbnail label{{/i}}</h4> <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> </div> </div> </div> <a class="left carousel-control" href="#myCarousel" data-slide="prev">‹</a> <a class="right carousel-control" href="#myCarousel" data-slide="next">›</a> </div>'); - template.attr("data-interval", 1814); - - template.appendTo("body"); - $('[data-slide]').first().click(); - ok($('#myCarousel').data('carousel').options.interval == 1814); - $('#myCarousel').remove(); - - template.appendTo("body").attr("data-modal", "foobar"); - $('[data-slide]').first().click(); - ok($('#myCarousel').data('carousel').options.interval == 1814, "even if there is an data-modal attribute set"); - $('#myCarousel').remove(); - - template.appendTo("body"); - $('[data-slide]').first().click(); - $('#myCarousel').attr('data-interval', 1860); - $('[data-slide]').first().click(); - ok($('#myCarousel').data('carousel').options.interval == 1814, "attributes should be read only on intitialization"); - $('#myCarousel').remove(); - }) -}) \ No newline at end of file diff --git a/src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-collapse.js b/src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-collapse.js deleted file mode 100644 index 4c5916ec..00000000 --- a/src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-collapse.js +++ /dev/null @@ -1,94 +0,0 @@ -$(function () { - - module("bootstrap-collapse") - - test("should provide no conflict", function () { - var collapse = $.fn.collapse.noConflict() - ok(!$.fn.collapse, 'collapse was set back to undefined (org value)') - $.fn.collapse = collapse - }) - - test("should be defined on jquery object", function () { - ok($(document.body).collapse, 'collapse method is defined') - }) - - test("should return element", function () { - ok($(document.body).collapse()[0] == document.body, 'document.body returned') - }) - - test("should show a collapsed element", function () { - var el = $('<div class="collapse"></div>').collapse('show') - ok(el.hasClass('in'), 'has class in') - ok(/height/.test(el.attr('style')), 'has height set') - }) - - test("should hide a collapsed element", function () { - var el = $('<div class="collapse"></div>').collapse('hide') - ok(!el.hasClass('in'), 'does not have class in') - ok(/height/.test(el.attr('style')), 'has height set') - }) - - test("should not fire shown when show is prevented", function () { - $.support.transition = false - stop() - $('<div class="collapse"/>') - .bind('show', function (e) { - e.preventDefault(); - ok(true); - start(); - }) - .bind('shown', function () { - ok(false); - }) - .collapse('show') - }) - - test("should reset style to auto after finishing opening collapse", function () { - $.support.transition = false - stop() - $('<div class="collapse" style="height: 0px"/>') - .bind('show', function () { - ok(this.style.height == '0px') - }) - .bind('shown', function () { - ok(this.style.height == 'auto') - start() - }) - .collapse('show') - }) - - test("should add active class to target when collapse shown", function () { - $.support.transition = false - stop() - - var target = $('<a data-toggle="collapse" href="#test1"></a>') - .appendTo($('#qunit-fixture')) - - var collapsible = $('<div id="test1"></div>') - .appendTo($('#qunit-fixture')) - .on('show', function () { - ok(!target.hasClass('collapsed')) - start() - }) - - target.click() - }) - - test("should remove active class to target when collapse hidden", function () { - $.support.transition = false - stop() - - var target = $('<a data-toggle="collapse" href="#test1"></a>') - .appendTo($('#qunit-fixture')) - - var collapsible = $('<div id="test1" class="in"></div>') - .appendTo($('#qunit-fixture')) - .on('hide', function () { - ok(target.hasClass('collapsed')) - start() - }) - - target.click() - }) - -}) \ No newline at end of file diff --git a/src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-dropdown.js b/src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-dropdown.js deleted file mode 100644 index 2f0d2d29..00000000 --- a/src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-dropdown.js +++ /dev/null @@ -1,151 +0,0 @@ -$(function () { - - module("bootstrap-dropdowns") - - test("should provide no conflict", function () { - var dropdown = $.fn.dropdown.noConflict() - ok(!$.fn.dropdown, 'dropdown was set back to undefined (org value)') - $.fn.dropdown = dropdown - }) - - test("should be defined on jquery object", function () { - ok($(document.body).dropdown, 'dropdown method is defined') - }) - - test("should return element", function () { - var el = $("<div />") - ok(el.dropdown()[0] === el[0], 'same element returned') - }) - - test("should not open dropdown if target is disabled", function () { - var dropdownHTML = '<ul class="tabs">' - + '<li class="dropdown">' - + '<button disabled href="#" class="btn dropdown-toggle" data-toggle="dropdown">Dropdown</button>' - + '<ul class="dropdown-menu">' - + '<li><a href="#">Secondary link</a></li>' - + '<li><a href="#">Something else here</a></li>' - + '<li class="divider"></li>' - + '<li><a href="#">Another link</a></li>' - + '</ul>' - + '</li>' - + '</ul>' - , dropdown = $(dropdownHTML).find('[data-toggle="dropdown"]').dropdown().click() - - ok(!dropdown.parent('.dropdown').hasClass('open'), 'open class added on click') - }) - - test("should not open dropdown if target is disabled", function () { - var dropdownHTML = '<ul class="tabs">' - + '<li class="dropdown">' - + '<button href="#" class="btn dropdown-toggle disabled" data-toggle="dropdown">Dropdown</button>' - + '<ul class="dropdown-menu">' - + '<li><a href="#">Secondary link</a></li>' - + '<li><a href="#">Something else here</a></li>' - + '<li class="divider"></li>' - + '<li><a href="#">Another link</a></li>' - + '</ul>' - + '</li>' - + '</ul>' - , dropdown = $(dropdownHTML).find('[data-toggle="dropdown"]').dropdown().click() - - ok(!dropdown.parent('.dropdown').hasClass('open'), 'open class added on click') - }) - - test("should add class open to menu if clicked", function () { - var dropdownHTML = '<ul class="tabs">' - + '<li class="dropdown">' - + '<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>' - + '<ul class="dropdown-menu">' - + '<li><a href="#">Secondary link</a></li>' - + '<li><a href="#">Something else here</a></li>' - + '<li class="divider"></li>' - + '<li><a href="#">Another link</a></li>' - + '</ul>' - + '</li>' - + '</ul>' - , dropdown = $(dropdownHTML).find('[data-toggle="dropdown"]').dropdown().click() - - ok(dropdown.parent('.dropdown').hasClass('open'), 'open class added on click') - }) - - test("should test if element has a # before assuming it's a selector", function () { - var dropdownHTML = '<ul class="tabs">' - + '<li class="dropdown">' - + '<a href="/foo/" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>' - + '<ul class="dropdown-menu">' - + '<li><a href="#">Secondary link</a></li>' - + '<li><a href="#">Something else here</a></li>' - + '<li class="divider"></li>' - + '<li><a href="#">Another link</a></li>' - + '</ul>' - + '</li>' - + '</ul>' - , dropdown = $(dropdownHTML).find('[data-toggle="dropdown"]').dropdown().click() - - ok(dropdown.parent('.dropdown').hasClass('open'), 'open class added on click') - }) - - - test("should remove open class if body clicked", function () { - var dropdownHTML = '<ul class="tabs">' - + '<li class="dropdown">' - + '<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>' - + '<ul class="dropdown-menu">' - + '<li><a href="#">Secondary link</a></li>' - + '<li><a href="#">Something else here</a></li>' - + '<li class="divider"></li>' - + '<li><a href="#">Another link</a></li>' - + '</ul>' - + '</li>' - + '</ul>' - , dropdown = $(dropdownHTML) - .appendTo('#qunit-fixture') - .find('[data-toggle="dropdown"]') - .dropdown() - .click() - ok(dropdown.parent('.dropdown').hasClass('open'), 'open class added on click') - $('body').click() - ok(!dropdown.parent('.dropdown').hasClass('open'), 'open class removed') - dropdown.remove() - }) - - test("should remove open class if body clicked, with multiple drop downs", function () { - var dropdownHTML = - '<ul class="nav">' - + ' <li><a href="#menu1">Menu 1</a></li>' - + ' <li class="dropdown" id="testmenu">' - + ' <a class="dropdown-toggle" data-toggle="dropdown" href="#testmenu">Test menu <b class="caret"></b></a>' - + ' <ul class="dropdown-menu" role="menu">' - + ' <li><a href="#sub1">Submenu 1</a></li>' - + ' </ul>' - + ' </li>' - + '</ul>' - + '<div class="btn-group">' - + ' <button class="btn">Actions</button>' - + ' <button class="btn dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button>' - + ' <ul class="dropdown-menu">' - + ' <li><a href="#">Action 1</a></li>' - + ' </ul>' - + '</div>' - , dropdowns = $(dropdownHTML).appendTo('#qunit-fixture').find('[data-toggle="dropdown"]') - , first = dropdowns.first() - , last = dropdowns.last() - - ok(dropdowns.length == 2, "Should be two dropdowns") - - first.click() - ok(first.parents('.open').length == 1, 'open class added on click') - ok($('#qunit-fixture .open').length == 1, 'only one object is open') - $('body').click() - ok($("#qunit-fixture .open").length === 0, 'open class removed') - - last.click() - ok(last.parent('.open').length == 1, 'open class added on click') - ok($('#qunit-fixture .open').length == 1, 'only one object is open') - $('body').click() - ok($("#qunit-fixture .open").length === 0, 'open class removed') - - $("#qunit-fixture").html("") - }) - -}) \ No newline at end of file diff --git a/src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-modal.js b/src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-modal.js deleted file mode 100644 index 98aa990a..00000000 --- a/src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-modal.js +++ /dev/null @@ -1,120 +0,0 @@ -$(function () { - - module("bootstrap-modal") - - test("should provide no conflict", function () { - var modal = $.fn.modal.noConflict() - ok(!$.fn.modal, 'modal was set back to undefined (org value)') - $.fn.modal = modal - }) - - test("should be defined on jquery object", function () { - var div = $("<div id='modal-test'></div>") - ok(div.modal, 'modal method is defined') - }) - - test("should return element", function () { - var div = $("<div id='modal-test'></div>") - ok(div.modal() == div, 'document.body returned') - $('#modal-test').remove() - }) - - test("should expose defaults var for settings", function () { - ok($.fn.modal.defaults, 'default object exposed') - }) - - test("should insert into dom when show method is called", function () { - stop() - $.support.transition = false - $("<div id='modal-test'></div>") - .bind("shown", function () { - ok($('#modal-test').length, 'modal insterted into dom') - $(this).remove() - start() - }) - .modal("show") - }) - - test("should fire show event", function () { - stop() - $.support.transition = false - $("<div id='modal-test'></div>") - .bind("show", function () { - ok(true, "show was called") - }) - .bind("shown", function () { - $(this).remove() - start() - }) - .modal("show") - }) - - test("should not fire shown when default prevented", function () { - stop() - $.support.transition = false - $("<div id='modal-test'></div>") - .bind("show", function (e) { - e.preventDefault() - ok(true, "show was called") - start() - }) - .bind("shown", function () { - ok(false, "shown was called") - }) - .modal("show") - }) - - test("should hide modal when hide is called", function () { - stop() - $.support.transition = false - - $("<div id='modal-test'></div>") - .bind("shown", function () { - ok($('#modal-test').is(":visible"), 'modal visible') - ok($('#modal-test').length, 'modal insterted into dom') - $(this).modal("hide") - }) - .bind("hidden", function() { - ok(!$('#modal-test').is(":visible"), 'modal hidden') - $('#modal-test').remove() - start() - }) - .modal("show") - }) - - test("should toggle when toggle is called", function () { - stop() - $.support.transition = false - var div = $("<div id='modal-test'></div>") - div - .bind("shown", function () { - ok($('#modal-test').is(":visible"), 'modal visible') - ok($('#modal-test').length, 'modal insterted into dom') - div.modal("toggle") - }) - .bind("hidden", function() { - ok(!$('#modal-test').is(":visible"), 'modal hidden') - div.remove() - start() - }) - .modal("toggle") - }) - - test("should remove from dom when click [data-dismiss=modal]", function () { - stop() - $.support.transition = false - var div = $("<div id='modal-test'><span class='close' data-dismiss='modal'></span></div>") - div - .bind("shown", function () { - ok($('#modal-test').is(":visible"), 'modal visible') - ok($('#modal-test').length, 'modal insterted into dom') - div.find('.close').click() - }) - .bind("hidden", function() { - ok(!$('#modal-test').is(":visible"), 'modal hidden') - div.remove() - start() - }) - .modal("toggle") - }) -}) \ No newline at end of file diff --git a/src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-phantom.js b/src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-phantom.js deleted file mode 100644 index a04aeaa8..00000000 --- a/src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-phantom.js +++ /dev/null @@ -1,21 +0,0 @@ -// Logging setup for phantom integration -// adapted from Modernizr - -QUnit.begin = function () { - console.log("Starting test suite") - console.log("================================================\n") -} - -QUnit.moduleDone = function (opts) { - if (opts.failed === 0) { - console.log("\u2714 All tests passed in '" + opts.name + "' module") - } else { - console.log("\u2716 " + opts.failed + " tests failed in '" + opts.name + "' module") - } -} - -QUnit.done = function (opts) { - console.log("\n================================================") - console.log("Tests completed in " + opts.runtime + " milliseconds") - console.log(opts.passed + " tests of " + opts.total + " passed, " + opts.failed + " failed.") -} \ No newline at end of file diff --git a/src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-popover.js b/src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-popover.js deleted file mode 100644 index 20234e14..00000000 --- a/src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-popover.js +++ /dev/null @@ -1,113 +0,0 @@ -$(function () { - - module("bootstrap-popover") - - test("should provide no conflict", function () { - var popover = $.fn.popover.noConflict() - ok(!$.fn.popover, 'popover was set back to undefined (org value)') - $.fn.popover = popover - }) - - test("should be defined on jquery object", function () { - var div = $('<div></div>') - ok(div.popover, 'popover method is defined') - }) - - test("should return element", function () { - var div = $('<div></div>') - ok(div.popover() == div, 'document.body returned') - }) - - test("should render popover element", function () { - $.support.transition = false - var popover = $('<a href="#" title="mdo" data-content="http://twitter.com/mdo">@mdo</a>') - .appendTo('#qunit-fixture') - .popover('show') - - ok($('.popover').length, 'popover was inserted') - popover.popover('hide') - ok(!$(".popover").length, 'popover removed') - }) - - test("should store popover instance in popover data object", function () { - $.support.transition = false - var popover = $('<a href="#" title="mdo" data-content="http://twitter.com/mdo">@mdo</a>') - .popover() - - ok(!!popover.data('popover'), 'popover instance exists') - }) - - test("should get title and content from options", function () { - $.support.transition = false - var popover = $('<a href="#">@fat</a>') - .appendTo('#qunit-fixture') - .popover({ - title: function () { - return '@fat' - } - , content: function () { - return 'loves writing tests (╯°□°)╯︵ â”»â”â”»' - } - }) - - popover.popover('show') - - ok($('.popover').length, 'popover was inserted') - equals($('.popover .popover-title').text(), '@fat', 'title correctly inserted') - equals($('.popover .popover-content').text(), 'loves writing tests (╯°□°)╯︵ â”»â”â”»', 'content correctly inserted') - - popover.popover('hide') - ok(!$('.popover').length, 'popover was removed') - $('#qunit-fixture').empty() - }) - - test("should get title and content from attributes", function () { - $.support.transition = false - var popover = $('<a href="#" title="@mdo" data-content="loves data attributes (ã¥ï½¡â—•â€¿â€¿â—•ï½¡)㥠︵ â”»â”â”»" >@mdo</a>') - .appendTo('#qunit-fixture') - .popover() - .popover('show') - - ok($('.popover').length, 'popover was inserted') - equals($('.popover .popover-title').text(), '@mdo', 'title correctly inserted') - equals($('.popover .popover-content').text(), "loves data attributes (ã¥ï½¡â—•â€¿â€¿â—•ï½¡)㥠︵ â”»â”â”»", 'content correctly inserted') - - popover.popover('hide') - ok(!$('.popover').length, 'popover was removed') - $('#qunit-fixture').empty() - }) - - test("should respect custom classes", function() { - $.support.transition = false - var popover = $('<a href="#">@fat</a>') - .appendTo('#qunit-fixture') - .popover({ - title: 'Test' - , content: 'Test' - , template: '<div class="popover foobar"><div class="arrow"></div><div class="inner"><h3 class="title"></h3><div class="content"><p></p></div></div></div>' - }) - - popover.popover('show') - - ok($('.popover').length, 'popover was inserted') - ok($('.popover').hasClass('foobar'), 'custom class is present') - - popover.popover('hide') - ok(!$('.popover').length, 'popover was removed') - $('#qunit-fixture').empty() - }) - - test("should destroy popover", function () { - var popover = $('<div/>').popover({trigger: 'hover'}).on('click.foo', function(){}) - ok(popover.data('popover'), 'popover has data') - ok($._data(popover[0], 'events').mouseover && $._data(popover[0], 'events').mouseout, 'popover has hover event') - ok($._data(popover[0], 'events').click[0].namespace == 'foo', 'popover has extra click.foo event') - popover.popover('show') - popover.popover('destroy') - ok(!popover.hasClass('in'), 'popover is hidden') - ok(!popover.data('popover'), 'popover does not have data') - ok($._data(popover[0],'events').click[0].namespace == 'foo', 'popover still has click.foo') - ok(!$._data(popover[0], 'events').mouseover && !$._data(popover[0], 'events').mouseout, 'popover does not have any events') - }) - -}) \ No newline at end of file diff --git a/src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-scrollspy.js b/src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-scrollspy.js deleted file mode 100644 index 32bfa713..00000000 --- a/src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-scrollspy.js +++ /dev/null @@ -1,37 +0,0 @@ -$(function () { - - module("bootstrap-scrollspy") - - test("should provide no conflict", function () { - var scrollspy = $.fn.scrollspy.noConflict() - ok(!$.fn.scrollspy, 'scrollspy was set back to undefined (org value)') - $.fn.scrollspy = scrollspy - }) - - test("should be defined on jquery object", function () { - ok($(document.body).scrollspy, 'scrollspy method is defined') - }) - - test("should return element", function () { - ok($(document.body).scrollspy()[0] == document.body, 'document.body returned') - }) - - test("should switch active class on scroll", function () { - var sectionHTML = '<div id="masthead"></div>' - , $section = $(sectionHTML).append('#qunit-fixture') - , topbarHTML ='<div class="topbar">' - + '<div class="topbar-inner">' - + '<div class="container">' - + '<h3><a href="#">Bootstrap</a></h3>' - + '<ul class="nav">' - + '<li><a href="#masthead">Overview</a></li>' - + '</ul>' - + '</div>' - + '</div>' - + '</div>' - , $topbar = $(topbarHTML).scrollspy() - - ok($topbar.find('.active', true)) - }) - -}) \ No newline at end of file diff --git a/src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-tab.js b/src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-tab.js deleted file mode 100644 index ba5910d5..00000000 --- a/src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-tab.js +++ /dev/null @@ -1,86 +0,0 @@ -$(function () { - - module("bootstrap-tabs") - - test("should provide no conflict", function () { - var tab = $.fn.tab.noConflict() - ok(!$.fn.tab, 'tab was set back to undefined (org value)') - $.fn.tab = tab - }) - - test("should be defined on jquery object", function () { - ok($(document.body).tab, 'tabs method is defined') - }) - - test("should return element", function () { - ok($(document.body).tab()[0] == document.body, 'document.body returned') - }) - - test("should activate element by tab id", function () { - var tabsHTML = - '<ul class="tabs">' - + '<li><a href="#home">Home</a></li>' - + '<li><a href="#profile">Profile</a></li>' - + '</ul>' - - $('<ul><li id="home"></li><li id="profile"></li></ul>').appendTo("#qunit-fixture") - - $(tabsHTML).find('li:last a').tab('show') - equals($("#qunit-fixture").find('.active').attr('id'), "profile") - - $(tabsHTML).find('li:first a').tab('show') - equals($("#qunit-fixture").find('.active').attr('id'), "home") - }) - - test("should activate element by tab id", function () { - var pillsHTML = - '<ul class="pills">' - + '<li><a href="#home">Home</a></li>' - + '<li><a href="#profile">Profile</a></li>' - + '</ul>' - - $('<ul><li id="home"></li><li id="profile"></li></ul>').appendTo("#qunit-fixture") - - $(pillsHTML).find('li:last a').tab('show') - equals($("#qunit-fixture").find('.active').attr('id'), "profile") - - $(pillsHTML).find('li:first a').tab('show') - equals($("#qunit-fixture").find('.active').attr('id'), "home") - }) - - - test("should not fire closed when close is prevented", function () { - $.support.transition = false - stop(); - $('<div class="tab"/>') - .bind('show', function (e) { - e.preventDefault(); - ok(true); - start(); - }) - .bind('shown', function () { - ok(false); - }) - .tab('show') - }) - - test("show and shown events should reference correct relatedTarget", function () { - var dropHTML = - '<ul class="drop">' - + '<li class="dropdown"><a data-toggle="dropdown" href="#">1</a>' - + '<ul class="dropdown-menu">' - + '<li><a href="#1-1" data-toggle="tab">1-1</a></li>' - + '<li><a href="#1-2" data-toggle="tab">1-2</a></li>' - + '</ul>' - + '</li>' - + '</ul>' - - $(dropHTML).find('ul>li:first a').tab('show').end() - .find('ul>li:last a').on('show', function(event){ - equals(event.relatedTarget.hash, "#1-1") - }).on('shown', function(event){ - equals(event.relatedTarget.hash, "#1-1") - }).tab('show') - }) - -}) \ No newline at end of file diff --git a/src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-tooltip.js b/src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-tooltip.js deleted file mode 100644 index 5b37b4e6..00000000 --- a/src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-tooltip.js +++ /dev/null @@ -1,294 +0,0 @@ -$(function () { - - module("bootstrap-tooltip") - - test("should provide no conflict", function () { - var tooltip = $.fn.tooltip.noConflict() - ok(!$.fn.tooltip, 'tooltip was set back to undefined (org value)') - $.fn.tooltip = tooltip - }) - - test("should be defined on jquery object", function () { - var div = $("<div></div>") - ok(div.tooltip, 'popover method is defined') - }) - - test("should return element", function () { - var div = $("<div></div>") - ok(div.tooltip() == div, 'document.body returned') - }) - - test("should expose default settings", function () { - ok(!!$.fn.tooltip.defaults, 'defaults is defined') - }) - - test("should empty title attribute", function () { - var tooltip = $('<a href="#" rel="tooltip" title="Another tooltip"></a>').tooltip() - ok(tooltip.attr('title') === '', 'title attribute was emptied') - }) - - test("should add data attribute for referencing original title", function () { - var tooltip = $('<a href="#" rel="tooltip" title="Another tooltip"></a>').tooltip() - equals(tooltip.attr('data-original-title'), 'Another tooltip', 'original title preserved in data attribute') - }) - - test("should place tooltips relative to placement option", function () { - $.support.transition = false - var tooltip = $('<a href="#" rel="tooltip" title="Another tooltip"></a>') - .appendTo('#qunit-fixture') - .tooltip({placement: 'bottom'}) - .tooltip('show') - - ok($(".tooltip").is('.fade.bottom.in'), 'has correct classes applied') - tooltip.tooltip('hide') - }) - - test("should allow html entities", function () { - $.support.transition = false - var tooltip = $('<a href="#" rel="tooltip" title="<b>@fat</b>"></a>') - .appendTo('#qunit-fixture') - .tooltip({html: true}) - .tooltip('show') - - ok($('.tooltip b').length, 'b tag was inserted') - tooltip.tooltip('hide') - ok(!$(".tooltip").length, 'tooltip removed') - }) - - test("should respect custom classes", function () { - var tooltip = $('<a href="#" rel="tooltip" title="Another tooltip"></a>') - .appendTo('#qunit-fixture') - .tooltip({ template: '<div class="tooltip some-class"><div class="tooltip-arrow"/><div class="tooltip-inner"/></div>'}) - .tooltip('show') - - ok($('.tooltip').hasClass('some-class'), 'custom class is present') - tooltip.tooltip('hide') - ok(!$(".tooltip").length, 'tooltip removed') - }) - - test("should fire show event", function () { - stop() - var tooltip = $('<div title="tooltip title"></div>') - .bind("show", function() { - ok(true, "show was called") - start() - }) - .tooltip('show') - }) - - test("should fire shown event", function () { - stop() - var tooltip = $('<div title="tooltip title"></div>') - .bind("shown", function() { - ok(true, "shown was called") - start() - }) - .tooltip('show') - }) - - test("should not fire shown event when default prevented", function () { - stop() - var tooltip = $('<div title="tooltip title"></div>') - .bind("show", function(e) { - e.preventDefault() - ok(true, "show was called") - start() - }) - .bind("shown", function() { - ok(false, "shown was called") - }) - .tooltip('show') - }) - - test("should fire hide event", function () { - stop() - var tooltip = $('<div title="tooltip title"></div>') - .bind("shown", function() { - $(this).tooltip('hide') - }) - .bind("hide", function() { - ok(true, "hide was called") - start() - }) - .tooltip('show') - }) - - test("should fire hidden event", function () { - stop() - var tooltip = $('<div title="tooltip title"></div>') - .bind("shown", function() { - $(this).tooltip('hide') - }) - .bind("hidden", function() { - ok(true, "hidden was called") - start() - }) - .tooltip('show') - }) - - test("should not fire hidden event when default prevented", function () { - stop() - var tooltip = $('<div title="tooltip title"></div>') - .bind("shown", function() { - $(this).tooltip('hide') - }) - .bind("hide", function(e) { - e.preventDefault() - ok(true, "hide was called") - start() - }) - .bind("hidden", function() { - ok(false, "hidden was called") - }) - .tooltip('show') - }) - - test("should not show tooltip if leave event occurs before delay expires", function () { - var tooltip = $('<a href="#" rel="tooltip" title="Another tooltip"></a>') - .appendTo('#qunit-fixture') - .tooltip({ delay: 200 }) - - stop() - - tooltip.trigger('mouseenter') - - setTimeout(function () { - ok(!$(".tooltip").is('.fade.in'), 'tooltip is not faded in') - tooltip.trigger('mouseout') - setTimeout(function () { - ok(!$(".tooltip").is('.fade.in'), 'tooltip is not faded in') - start() - }, 200) - }, 100) - }) - - test("should not show tooltip if leave event occurs before delay expires, even if hide delay is 0", function () { - var tooltip = $('<a href="#" rel="tooltip" title="Another tooltip"></a>') - .appendTo('#qunit-fixture') - .tooltip({ delay: { show: 200, hide: 0} }) - - stop() - - tooltip.trigger('mouseenter') - - setTimeout(function () { - ok(!$(".tooltip").is('.fade.in'), 'tooltip is not faded in') - tooltip.trigger('mouseout') - setTimeout(function () { - ok(!$(".tooltip").is('.fade.in'), 'tooltip is not faded in') - start() - }, 200) - }, 100) - }) - - test("should not show tooltip if leave event occurs before delay expires", function () { - var tooltip = $('<a href="#" rel="tooltip" title="Another tooltip"></a>') - .appendTo('#qunit-fixture') - .tooltip({ delay: 100 }) - stop() - tooltip.trigger('mouseenter') - setTimeout(function () { - ok(!$(".tooltip").is('.fade.in'), 'tooltip is not faded in') - tooltip.trigger('mouseout') - setTimeout(function () { - ok(!$(".tooltip").is('.fade.in'), 'tooltip is not faded in') - start() - }, 100) - }, 50) - }) - - test("should show tooltip if leave event hasn't occured before delay expires", function () { - var tooltip = $('<a href="#" rel="tooltip" title="Another tooltip"></a>') - .appendTo('#qunit-fixture') - .tooltip({ delay: 150 }) - stop() - tooltip.trigger('mouseenter') - setTimeout(function () { - ok(!$(".tooltip").is('.fade.in'), 'tooltip is not faded in') - }, 100) - setTimeout(function () { - ok($(".tooltip").is('.fade.in'), 'tooltip has faded in') - start() - }, 200) - }) - - test("should destroy tooltip", function () { - var tooltip = $('<div/>').tooltip().on('click.foo', function(){}) - ok(tooltip.data('tooltip'), 'tooltip has data') - ok($._data(tooltip[0], 'events').mouseover && $._data(tooltip[0], 'events').mouseout, 'tooltip has hover event') - ok($._data(tooltip[0], 'events').click[0].namespace == 'foo', 'tooltip has extra click.foo event') - tooltip.tooltip('show') - tooltip.tooltip('destroy') - ok(!tooltip.hasClass('in'), 'tooltip is hidden') - ok(!$._data(tooltip[0], 'tooltip'), 'tooltip does not have data') - ok($._data(tooltip[0], 'events').click[0].namespace == 'foo', 'tooltip still has click.foo') - ok(!$._data(tooltip[0], 'events').mouseover && !$._data(tooltip[0], 'events').mouseout, 'tooltip does not have any events') - }) - - test("should show tooltip with delegate selector on click", function () { - var div = $('<div><a href="#" rel="tooltip" title="Another tooltip"></a></div>') - var tooltip = div.appendTo('#qunit-fixture') - .tooltip({ selector: 'a[rel=tooltip]', - trigger: 'click' }) - div.find('a').trigger('click') - ok($(".tooltip").is('.fade.in'), 'tooltip is faded in') - }) - - test("should show tooltip when toggle is called", function () { - var tooltip = $('<a href="#" rel="tooltip" title="tooltip on toggle"></a>') - .appendTo('#qunit-fixture') - .tooltip({trigger: 'manual'}) - .tooltip('toggle') - ok($(".tooltip").is('.fade.in'), 'tooltip should be toggled in') - }) - - test("should place tooltips inside the body", function () { - var tooltip = $('<a href="#" rel="tooltip" title="Another tooltip"></a>') - .appendTo('#qunit-fixture') - .tooltip({container:'body'}) - .tooltip('show') - ok($("body > .tooltip").length, 'inside the body') - ok(!$("#qunit-fixture > .tooltip").length, 'not found in parent') - tooltip.tooltip('hide') - }) - - test("should place tooltip inside window", function(){ - var container = $("<div />").appendTo("body") - .css({position: "absolute", width: 200, height: 200, bottom: 0, left: 0}) - , tooltip = $("<a href='#' title='Very very very very very very very very long tooltip'>Hover me</a>") - .css({position: "absolute", top:0, left: 0}) - .appendTo(container) - .tooltip({placement: "top", animate: false}) - .tooltip("show") - - stop() - - setTimeout(function(){ - ok($(".tooltip").offset().left >= 0) - - start() - container.remove() - }, 100) - }) - - test("should place tooltip on top of element", function(){ - var container = $("<div />").appendTo("body") - .css({position: "absolute", bottom: 0, left: 0, textAlign: "right", width: 300, height: 300}) - , p = $("<p style='margin-top:200px' />").appendTo(container) - , tooltiped = $("<a href='#' title='very very very very very very very long tooltip'>Hover me</a>") - .css({marginTop: 200}) - .appendTo(p) - .tooltip({placement: "top", animate: false}) - .tooltip("show") - - stop() - - setTimeout(function(){ - var tooltip = container.find(".tooltip") - - start() - ok(tooltip.offset().top + tooltip.outerHeight() <= tooltiped.offset().top) - container.remove() - }, 100) - }) -}) diff --git a/src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-transition.js b/src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-transition.js deleted file mode 100644 index 086773fa..00000000 --- a/src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-transition.js +++ /dev/null @@ -1,13 +0,0 @@ -$(function () { - - module("bootstrap-transition") - - test("should be defined on jquery support object", function () { - ok($.support.transition !== undefined, 'transition object is defined') - }) - - test("should provide an end object", function () { - ok($.support.transition ? $.support.transition.end : true, 'end string is defined') - }) - -}) \ No newline at end of file diff --git a/src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-typeahead.js b/src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-typeahead.js deleted file mode 100644 index 0aa2d61b..00000000 --- a/src/main/webapp/bower_components/bootstrap/js/tests/unit/bootstrap-typeahead.js +++ /dev/null @@ -1,236 +0,0 @@ -$(function () { - - module("bootstrap-typeahead") - - test("should provide no conflict", function () { - var typeahead = $.fn.typeahead.noConflict() - ok(!$.fn.typeahead, 'typeahead was set back to undefined (org value)') - $.fn.typeahead = typeahead - }) - - test("should be defined on jquery object", function () { - ok($(document.body).typeahead, 'alert method is defined') - }) - - test("should return element", function () { - ok($(document.body).typeahead()[0] == document.body, 'document.body returned') - }) - - test("should listen to an input", function () { - var $input = $('<input />') - $input.typeahead() - ok($._data($input[0], 'events').blur, 'has a blur event') - ok($._data($input[0], 'events').keypress, 'has a keypress event') - ok($._data($input[0], 'events').keyup, 'has a keyup event') - }) - - test("should create a menu", function () { - var $input = $('<input />') - ok($input.typeahead().data('typeahead').$menu, 'has a menu') - }) - - test("should listen to the menu", function () { - var $input = $('<input />') - , $menu = $input.typeahead().data('typeahead').$menu - - ok($._data($menu[0], 'events').mouseover, 'has a mouseover(pseudo: mouseenter)') - ok($._data($menu[0], 'events').click, 'has a click') - }) - - test("should show menu when query entered", function () { - var $input = $('<input />') - .appendTo('body') - .typeahead({ - source: ['aa', 'ab', 'ac'] - }) - , typeahead = $input.data('typeahead') - - $input.val('a') - typeahead.lookup() - - ok(typeahead.$menu.is(":visible"), 'typeahead is visible') - equals(typeahead.$menu.find('li').length, 3, 'has 3 items in menu') - equals(typeahead.$menu.find('.active').length, 1, 'one item is active') - - $input.remove() - typeahead.$menu.remove() - }) - - test("should accept data source via synchronous function", function () { - var $input = $('<input />').typeahead({ - source: function () { - return ['aa', 'ab', 'ac'] - } - }).appendTo('body') - , typeahead = $input.data('typeahead') - - $input.val('a') - typeahead.lookup() - - ok(typeahead.$menu.is(":visible"), 'typeahead is visible') - equals(typeahead.$menu.find('li').length, 3, 'has 3 items in menu') - equals(typeahead.$menu.find('.active').length, 1, 'one item is active') - - $input.remove() - typeahead.$menu.remove() - }) - - test("should accept data source via asynchronous function", function () { - var $input = $('<input />').typeahead({ - source: function (query, process) { - process(['aa', 'ab', 'ac']) - } - }).appendTo('body') - , typeahead = $input.data('typeahead') - - $input.val('a') - typeahead.lookup() - - ok(typeahead.$menu.is(":visible"), 'typeahead is visible') - equals(typeahead.$menu.find('li').length, 3, 'has 3 items in menu') - equals(typeahead.$menu.find('.active').length, 1, 'one item is active') - - $input.remove() - typeahead.$menu.remove() - }) - - test("should not explode when regex chars are entered", function () { - var $input = $('<input />').typeahead({ - source: ['aa', 'ab', 'ac', 'mdo*', 'fat+'] - }).appendTo('body') - , typeahead = $input.data('typeahead') - - $input.val('+') - typeahead.lookup() - - ok(typeahead.$menu.is(":visible"), 'typeahead is visible') - equals(typeahead.$menu.find('li').length, 1, 'has 1 item in menu') - equals(typeahead.$menu.find('.active').length, 1, 'one item is active') - - $input.remove() - typeahead.$menu.remove() - }) - - test("should hide menu when query entered", function () { - stop() - var $input = $('<input />').typeahead({ - source: ['aa', 'ab', 'ac'] - }).appendTo('body') - , typeahead = $input.data('typeahead') - - $input.val('a') - typeahead.lookup() - - ok(typeahead.$menu.is(":visible"), 'typeahead is visible') - equals(typeahead.$menu.find('li').length, 3, 'has 3 items in menu') - equals(typeahead.$menu.find('.active').length, 1, 'one item is active') - - $input.blur() - - setTimeout(function () { - ok(!typeahead.$menu.is(":visible"), "typeahead is no longer visible") - start() - }, 200) - - $input.remove() - typeahead.$menu.remove() - }) - - test("should set next item when down arrow is pressed", function () { - var $input = $('<input />').typeahead({ - source: ['aa', 'ab', 'ac'] - }).appendTo('body') - , typeahead = $input.data('typeahead') - - $input.val('a') - typeahead.lookup() - - ok(typeahead.$menu.is(":visible"), 'typeahead is visible') - equals(typeahead.$menu.find('li').length, 3, 'has 3 items in menu') - equals(typeahead.$menu.find('.active').length, 1, 'one item is active') - ok(typeahead.$menu.find('li').first().hasClass('active'), "first item is active") - - // simulate entire key pressing event - $input.trigger({ - type: 'keydown' - , keyCode: 40 - }) - .trigger({ - type: 'keypress' - , keyCode: 40 - }) - .trigger({ - type: 'keyup' - , keyCode: 40 - }) - - ok(typeahead.$menu.find('li').first().next().hasClass('active'), "second item is active") - - $input.trigger({ - type: 'keydown' - , keyCode: 38 - }) - .trigger({ - type: 'keypress' - , keyCode: 38 - }) - .trigger({ - type: 'keyup' - , keyCode: 38 - }) - - ok(typeahead.$menu.find('li').first().hasClass('active'), "first item is active") - - $input.remove() - typeahead.$menu.remove() - }) - - - test("should set input value to selected item", function () { - var $input = $('<input />').typeahead({ - source: ['aa', 'ab', 'ac'] - }).appendTo('body') - , typeahead = $input.data('typeahead') - , changed = false - , focus = false - , blur = false - - $input.val('a') - typeahead.lookup() - - $input.change(function() { changed = true }); - $input.focus(function() { focus = true; blur = false }); - $input.blur(function() { blur = true; focus = false }); - - $(typeahead.$menu.find('li')[2]).mouseover().click() - - equals($input.val(), 'ac', 'input value was correctly set') - ok(!typeahead.$menu.is(':visible'), 'the menu was hidden') - ok(changed, 'a change event was fired') - ok(focus && !blur, 'focus is still set') - - $input.remove() - typeahead.$menu.remove() - }) - - test("should start querying when minLength is met", function () { - var $input = $('<input />').typeahead({ - source: ['aaaa', 'aaab', 'aaac'], - minLength: 3 - }).appendTo('body') - , typeahead = $input.data('typeahead') - - $input.val('aa') - typeahead.lookup() - - equals(typeahead.$menu.find('li').length, 0, 'has 0 items in menu') - - $input.val('aaa') - typeahead.lookup() - - equals(typeahead.$menu.find('li').length, 3, 'has 3 items in menu') - - $input.remove() - typeahead.$menu.remove() - }) -}) diff --git a/src/main/webapp/bower_components/bootstrap/js/tests/vendor/jquery.js b/src/main/webapp/bower_components/bootstrap/js/tests/vendor/jquery.js deleted file mode 100644 index 006e9531..00000000 --- a/src/main/webapp/bower_components/bootstrap/js/tests/vendor/jquery.js +++ /dev/null @@ -1,5 +0,0 @@ -/*! jQuery v1.9.1 | (c) 2005, 2012 jQuery Foundation, Inc. | jquery.org/license -//@ sourceMappingURL=jquery.min.map -*/(function(e,t){var n,r,i=typeof t,o=e.document,a=e.location,s=e.jQuery,u=e.$,l={},c=[],p="1.9.1",f=c.concat,d=c.push,h=c.slice,g=c.indexOf,m=l.toString,y=l.hasOwnProperty,v=p.trim,b=function(e,t){return new b.fn.init(e,t,r)},x=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,w=/\S+/g,T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,k=/^[\],:{}\s]*$/,E=/(?:^|:|,)(?:\s*\[)+/g,S=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,A=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,j=/^-ms-/,D=/-([\da-z])/gi,L=function(e,t){return t.toUpperCase()},H=function(e){(o.addEventListener||"load"===e.type||"complete"===o.readyState)&&(q(),b.ready())},q=function(){o.addEventListener?(o.removeEventListener("DOMContentLoaded",H,!1),e.removeEventListener("load",H,!1)):(o.detachEvent("onreadystatechange",H),e.detachEvent("onload",H))};b.fn=b.prototype={jquery:p,constructor:b,init:function(e,n,r){var i,a;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof b?n[0]:n,b.merge(this,b.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:o,!0)),C.test(i[1])&&b.isPlainObject(n))for(i in n)b.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(a=o.getElementById(i[2]),a&&a.parentNode){if(a.id!==i[2])return r.find(e);this.length=1,this[0]=a}return this.context=o,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):b.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),b.makeArray(e,this))},selector:"",length:0,size:function(){return this.length},toArray:function(){return h.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=b.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return b.each(this,e,t)},ready:function(e){return b.ready.promise().done(e),this},slice:function(){return this.pushStack(h.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(b.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:d,sort:[].sort,splice:[].splice},b.fn.init.prototype=b.fn,b.extend=b.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},u=1,l=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},u=2),"object"==typeof s||b.isFunction(s)||(s={}),l===u&&(s=this,--u);l>u;u++)if(null!=(o=arguments[u]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(b.isPlainObject(r)||(n=b.isArray(r)))?(n?(n=!1,a=e&&b.isArray(e)?e:[]):a=e&&b.isPlainObject(e)?e:{},s[i]=b.extend(c,a,r)):r!==t&&(s[i]=r));return s},b.extend({noConflict:function(t){return e.$===b&&(e.$=u),t&&e.jQuery===b&&(e.jQuery=s),b},isReady:!1,readyWait:1,holdReady:function(e){e?b.readyWait++:b.ready(!0)},ready:function(e){if(e===!0?!--b.readyWait:!b.isReady){if(!o.body)return setTimeout(b.ready);b.isReady=!0,e!==!0&&--b.readyWait>0||(n.resolveWith(o,[b]),b.fn.trigger&&b(o).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===b.type(e)},isArray:Array.isArray||function(e){return"array"===b.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[m.call(e)]||"object":typeof e},isPlainObject:function(e){if(!e||"object"!==b.type(e)||e.nodeType||b.isWindow(e))return!1;try{if(e.constructor&&!y.call(e,"constructor")&&!y.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}var r;for(r in e);return r===t||y.call(e,r)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||o;var r=C.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=b.buildFragment([e],t,i),i&&b(i).remove(),b.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=b.trim(n),n&&k.test(n.replace(S,"@").replace(A,"]").replace(E,"")))?Function("return "+n)():(b.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||b.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&b.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(j,"ms-").replace(D,L)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:v&&!v.call("\ufeff\u00a0")?function(e){return null==e?"":v.call(e)}:function(e){return null==e?"":(e+"").replace(T,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?b.merge(n,"string"==typeof e?[e]:e):d.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(g)return g.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return f.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),b.isFunction(e)?(r=h.call(arguments,2),i=function(){return e.apply(n||this,r.concat(h.call(arguments)))},i.guid=e.guid=e.guid||b.guid++,i):t},access:function(e,n,r,i,o,a,s){var u=0,l=e.length,c=null==r;if("object"===b.type(r)){o=!0;for(u in r)b.access(e,n,u,r[u],!0,a,s)}else if(i!==t&&(o=!0,b.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(b(e),n)})),n))for(;l>u;u++)n(e[u],r,s?i:i.call(e[u],u,n(e[u],r)));return o?e:c?n.call(e):l?n(e[0],r):a},now:function(){return(new Date).getTime()}}),b.ready.promise=function(t){if(!n)if(n=b.Deferred(),"complete"===o.readyState)setTimeout(b.ready);else if(o.addEventListener)o.addEventListener("DOMContentLoaded",H,!1),e.addEventListener("load",H,!1);else{o.attachEvent("onreadystatechange",H),e.attachEvent("onload",H);var r=!1;try{r=null==e.frameElement&&o.documentElement}catch(i){}r&&r.doScroll&&function a(){if(!b.isReady){try{r.doScroll("left")}catch(e){return setTimeout(a,50)}q(),b.ready()}}()}return n.promise(t)},b.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){l["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=b.type(e);return b.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=b(o);var _={};function F(e){var t=_[e]={};return b.each(e.match(w)||[],function(e,n){t[n]=!0}),t}b.Callbacks=function(e){e="string"==typeof e?_[e]||F(e):b.extend({},e);var n,r,i,o,a,s,u=[],l=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=u.length,n=!0;u&&o>a;a++)if(u[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,u&&(l?l.length&&c(l.shift()):r?u=[]:p.disable())},p={add:function(){if(u){var t=u.length;(function i(t){b.each(t,function(t,n){var r=b.type(n);"function"===r?e.unique&&p.has(n)||u.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=u.length:r&&(s=t,c(r))}return this},remove:function(){return u&&b.each(arguments,function(e,t){var r;while((r=b.inArray(t,u,r))>-1)u.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?b.inArray(e,u)>-1:!(!u||!u.length)},empty:function(){return u=[],this},disable:function(){return u=l=r=t,this},disabled:function(){return!u},lock:function(){return l=t,r||p.disable(),this},locked:function(){return!l},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],!u||i&&!l||(n?l.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},b.extend({Deferred:function(e){var t=[["resolve","done",b.Callbacks("once memory"),"resolved"],["reject","fail",b.Callbacks("once memory"),"rejected"],["notify","progress",b.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return b.Deferred(function(n){b.each(t,function(t,o){var a=o[0],s=b.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&b.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?b.extend(e,r):r}},i={};return r.pipe=r.then,b.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=h.call(arguments),r=n.length,i=1!==r||e&&b.isFunction(e.promise)?r:0,o=1===i?e:b.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?h.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,u,l;if(r>1)for(s=Array(r),u=Array(r),l=Array(r);r>t;t++)n[t]&&b.isFunction(n[t].promise)?n[t].promise().done(a(t,l,n)).fail(o.reject).progress(a(t,u,s)):--i;return i||o.resolveWith(l,n),o.promise()}}),b.support=function(){var t,n,r,a,s,u,l,c,p,f,d=o.createElement("div");if(d.setAttribute("className","t"),d.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",n=d.getElementsByTagName("*"),r=d.getElementsByTagName("a")[0],!n||!r||!n.length)return{};s=o.createElement("select"),l=s.appendChild(o.createElement("option")),a=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t={getSetAttribute:"t"!==d.className,leadingWhitespace:3===d.firstChild.nodeType,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/top/.test(r.getAttribute("style")),hrefNormalized:"/a"===r.getAttribute("href"),opacity:/^0.5/.test(r.style.opacity),cssFloat:!!r.style.cssFloat,checkOn:!!a.value,optSelected:l.selected,enctype:!!o.createElement("form").enctype,html5Clone:"<:nav></:nav>"!==o.createElement("nav").cloneNode(!0).outerHTML,boxModel:"CSS1Compat"===o.compatMode,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},a.checked=!0,t.noCloneChecked=a.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!l.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}a=o.createElement("input"),a.setAttribute("value",""),t.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),t.radioValue="t"===a.value,a.setAttribute("checked","t"),a.setAttribute("name","t"),u=o.createDocumentFragment(),u.appendChild(a),t.appendChecked=a.checked,t.checkClone=u.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;return d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip,b(function(){var n,r,a,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",u=o.getElementsByTagName("body")[0];u&&(n=o.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",u.appendChild(n).appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",a=d.getElementsByTagName("td"),a[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===a[0].offsetHeight,a[0].style.display="",a[1].style.display="none",t.reliableHiddenOffsets=p&&0===a[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",t.boxSizing=4===d.offsetWidth,t.doesNotIncludeMarginInBodyOffset=1!==u.offsetTop,e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(o.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="<div></div>",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(u.style.zoom=1)),u.removeChild(n),n=d=a=r=null)}),n=s=u=l=r=a=null,t}();var O=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,B=/([A-Z])/g;function P(e,n,r,i){if(b.acceptData(e)){var o,a,s=b.expando,u="string"==typeof n,l=e.nodeType,p=l?b.cache:e,f=l?e[s]:e[s]&&s;if(f&&p[f]&&(i||p[f].data)||!u||r!==t)return f||(l?e[s]=f=c.pop()||b.guid++:f=s),p[f]||(p[f]={},l||(p[f].toJSON=b.noop)),("object"==typeof n||"function"==typeof n)&&(i?p[f]=b.extend(p[f],n):p[f].data=b.extend(p[f].data,n)),o=p[f],i||(o.data||(o.data={}),o=o.data),r!==t&&(o[b.camelCase(n)]=r),u?(a=o[n],null==a&&(a=o[b.camelCase(n)])):a=o,a}}function R(e,t,n){if(b.acceptData(e)){var r,i,o,a=e.nodeType,s=a?b.cache:e,u=a?e[b.expando]:b.expando;if(s[u]){if(t&&(o=n?s[u]:s[u].data)){b.isArray(t)?t=t.concat(b.map(t,b.camelCase)):t in o?t=[t]:(t=b.camelCase(t),t=t in o?[t]:t.split(" "));for(r=0,i=t.length;i>r;r++)delete o[t[r]];if(!(n?$:b.isEmptyObject)(o))return}(n||(delete s[u].data,$(s[u])))&&(a?b.cleanData([e],!0):b.support.deleteExpando||s!=s.window?delete s[u]:s[u]=null)}}}b.extend({cache:{},expando:"jQuery"+(p+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(e){return e=e.nodeType?b.cache[e[b.expando]]:e[b.expando],!!e&&!$(e)},data:function(e,t,n){return P(e,t,n)},removeData:function(e,t){return R(e,t)},_data:function(e,t,n){return P(e,t,n,!0)},_removeData:function(e,t){return R(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&b.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),b.fn.extend({data:function(e,n){var r,i,o=this[0],a=0,s=null;if(e===t){if(this.length&&(s=b.data(o),1===o.nodeType&&!b._data(o,"parsedAttrs"))){for(r=o.attributes;r.length>a;a++)i=r[a].name,i.indexOf("data-")||(i=b.camelCase(i.slice(5)),W(o,i,s[i]));b._data(o,"parsedAttrs",!0)}return s}return"object"==typeof e?this.each(function(){b.data(this,e)}):b.access(this,function(n){return n===t?o?W(o,e,b.data(o,e)):null:(this.each(function(){b.data(this,e,n)}),t)},null,n,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){b.removeData(this,e)})}});function W(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(B,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:O.test(r)?b.parseJSON(r):r}catch(o){}b.data(e,n,r)}else r=t}return r}function $(e){var t;for(t in e)if(("data"!==t||!b.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}b.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=b._data(e,n),r&&(!i||b.isArray(r)?i=b._data(e,n,b.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=b.queue(e,t),r=n.length,i=n.shift(),o=b._queueHooks(e,t),a=function(){b.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),o.cur=i,i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return b._data(e,n)||b._data(e,n,{empty:b.Callbacks("once memory").add(function(){b._removeData(e,t+"queue"),b._removeData(e,n)})})}}),b.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?b.queue(this[0],e):n===t?this:this.each(function(){var t=b.queue(this,e,n);b._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&b.dequeue(this,e)})},dequeue:function(e){return this.each(function(){b.dequeue(this,e)})},delay:function(e,t){return e=b.fx?b.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=b.Deferred(),a=this,s=this.length,u=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=b._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(u));return u(),o.promise(n)}});var I,z,X=/[\t\r\n]/g,U=/\r/g,V=/^(?:input|select|textarea|button|object)$/i,Y=/^(?:a|area)$/i,J=/^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i,G=/^(?:checked|selected)$/i,Q=b.support.getSetAttribute,K=b.support.input;b.fn.extend({attr:function(e,t){return b.access(this,b.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})},prop:function(e,t){return b.access(this,b.prop,e,t,arguments.length>1)},removeProp:function(e){return e=b.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,u="string"==typeof e&&e;if(b.isFunction(e))return this.each(function(t){b(this).addClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(X," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=b.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,u=0===arguments.length||"string"==typeof e&&e;if(b.isFunction(e))return this.each(function(t){b(this).removeClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(X," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?b.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e,r="boolean"==typeof t;return b.isFunction(e)?this.each(function(n){b(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var o,a=0,s=b(this),u=t,l=e.match(w)||[];while(o=l[a++])u=r?u:!s.hasClass(o),s[u?"addClass":"removeClass"](o)}else(n===i||"boolean"===n)&&(this.className&&b._data(this,"__className__",this.className),this.className=this.className||e===!1?"":b._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(X," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=b.isFunction(e),this.each(function(n){var o,a=b(this);1===this.nodeType&&(o=i?e.call(this,n,a.val()):e,null==o?o="":"number"==typeof o?o+="":b.isArray(o)&&(o=b.map(o,function(e){return null==e?"":e+""})),r=b.valHooks[this.type]||b.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=b.valHooks[o.type]||b.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(U,""):null==n?"":n)}}}),b.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,u=0>i?s:o?i:0;for(;s>u;u++)if(n=r[u],!(!n.selected&&u!==i||(b.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&b.nodeName(n.parentNode,"optgroup"))){if(t=b(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n=b.makeArray(t);return b(e).find("option").each(function(){this.selected=b.inArray(b(this).val(),n)>=0}),n.length||(e.selectedIndex=-1),n}}},attr:function(e,n,r){var o,a,s,u=e.nodeType;if(e&&3!==u&&8!==u&&2!==u)return typeof e.getAttribute===i?b.prop(e,n,r):(a=1!==u||!b.isXMLDoc(e),a&&(n=n.toLowerCase(),o=b.attrHooks[n]||(J.test(n)?z:I)),r===t?o&&a&&"get"in o&&null!==(s=o.get(e,n))?s:(typeof e.getAttribute!==i&&(s=e.getAttribute(n)),null==s?t:s):null!==r?o&&a&&"set"in o&&(s=o.set(e,r,n))!==t?s:(e.setAttribute(n,r+""),r):(b.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(w);if(o&&1===e.nodeType)while(n=o[i++])r=b.propFix[n]||n,J.test(n)?!Q&&G.test(n)?e[b.camelCase("default-"+n)]=e[r]=!1:e[r]=!1:b.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!b.support.radioValue&&"radio"===t&&b.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},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(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!b.isXMLDoc(e),a&&(n=b.propFix[n]||n,o=b.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var n=e.getAttributeNode("tabindex");return n&&n.specified?parseInt(n.value,10):V.test(e.nodeName)||Y.test(e.nodeName)&&e.href?0:t}}}}),z={get:function(e,n){var r=b.prop(e,n),i="boolean"==typeof r&&e.getAttribute(n),o="boolean"==typeof r?K&&Q?null!=i:G.test(n)?e[b.camelCase("default-"+n)]:!!i:e.getAttributeNode(n);return o&&o.value!==!1?n.toLowerCase():t},set:function(e,t,n){return t===!1?b.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&b.propFix[n]||n,n):e[b.camelCase("default-"+n)]=e[n]=!0,n}},K&&Q||(b.attrHooks.value={get:function(e,n){var r=e.getAttributeNode(n);return b.nodeName(e,"input")?e.defaultValue:r&&r.specified?r.value:t},set:function(e,n,r){return b.nodeName(e,"input")?(e.defaultValue=n,t):I&&I.set(e,n,r)}}),Q||(I=b.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&("id"===n||"name"===n||"coords"===n?""!==r.value:r.specified)?r.value:t},set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},b.attrHooks.contenteditable={get:I.get,set:function(e,t,n){I.set(e,""===t?!1:t,n)}},b.each(["width","height"],function(e,n){b.attrHooks[n]=b.extend(b.attrHooks[n],{set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}})})),b.support.hrefNormalized||(b.each(["href","src","width","height"],function(e,n){b.attrHooks[n]=b.extend(b.attrHooks[n],{get:function(e){var r=e.getAttribute(n,2);return null==r?t:r}})}),b.each(["href","src"],function(e,t){b.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}})),b.support.style||(b.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),b.support.optSelected||(b.propHooks.selected=b.extend(b.propHooks.selected,{get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}})),b.support.enctype||(b.propFix.enctype="encoding"),b.support.checkOn||b.each(["radio","checkbox"],function(){b.valHooks[this]={get:function(e){return null===e.getAttribute("value")?"on":e.value}}}),b.each(["radio","checkbox"],function(){b.valHooks[this]=b.extend(b.valHooks[this],{set:function(e,n){return b.isArray(n)?e.checked=b.inArray(b(e).val(),n)>=0:t}})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}b.event={global:{},add:function(e,n,r,o,a){var s,u,l,c,p,f,d,h,g,m,y,v=b._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=b.guid++),(u=v.events)||(u=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof b===i||e&&b.event.triggered===e.type?t:b.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(w)||[""],l=n.length;while(l--)s=rt.exec(n[l])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),p=b.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=b.event.special[g]||{},d=b.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&b.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=u[g])||(h=u[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),b.event.global[g]=!0;e=null}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,p,f,d,h,g,m=b.hasData(e)&&b._data(e);if(m&&(c=m.events)){t=(t||"").match(w)||[""],l=t.length;while(l--)if(s=rt.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=b.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),u=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));u&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||b.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)b.event.remove(e,d+t[l],n,r,!0);b.isEmptyObject(c)&&(delete m.handle,b._removeData(e,"events"))}},trigger:function(n,r,i,a){var s,u,l,c,p,f,d,h=[i||o],g=y.call(n,"type")?n.type:n,m=y.call(n,"namespace")?n.namespace.split("."):[];if(l=f=i=i||o,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+b.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),u=0>g.indexOf(":")&&"on"+g,n=n[b.expando]?n:new b.Event(g,"object"==typeof n&&n),n.isTrigger=!0,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:b.makeArray(r,[n]),p=b.event.special[g]||{},a||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!a&&!p.noBubble&&!b.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(l=l.parentNode);l;l=l.parentNode)h.push(l),f=l;f===(i.ownerDocument||o)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((l=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(b._data(l,"events")||{})[n.type]&&b._data(l,"handle"),s&&s.apply(l,r),s=u&&l[u],s&&b.acceptData(l)&&s.apply&&s.apply(l,r)===!1&&n.preventDefault();if(n.type=g,!(a||n.isDefaultPrevented()||p._default&&p._default.apply(i.ownerDocument,r)!==!1||"click"===g&&b.nodeName(i,"a")||!b.acceptData(i)||!u||!i[g]||b.isWindow(i))){f=i[u],f&&(i[u]=null),b.event.triggered=g;try{i[g]()}catch(v){}b.event.triggered=t,f&&(i[u]=f)}return n.result}},dispatch:function(e){e=b.event.fix(e);var n,r,i,o,a,s=[],u=h.call(arguments),l=(b._data(this,"events")||{})[e.type]||[],c=b.event.special[e.type]||{};if(u[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=b.event.handlers.call(this,e,l),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((b.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,u),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],u=n.delegateCount,l=e.target;if(u&&l.nodeType&&(!e.button||"click"!==e.type))for(;l!=this;l=l.parentNode||this)if(1===l.nodeType&&(l.disabled!==!0||"click"!==e.type)){for(o=[],a=0;u>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?b(r,this).index(l)>=0:b.find(r,this,null,[l]).length),o[r]&&o.push(i);o.length&&s.push({elem:l,handlers:o})}return n.length>u&&s.push({elem:this,handlers:n.slice(u)}),s},fix:function(e){if(e[b.expando])return e;var t,n,r,i=e.type,a=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new b.Event(a),t=r.length;while(t--)n=r[t],e[n]=a[n];return e.target||(e.target=a.srcElement||o),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,a):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,a,s=n.button,u=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||o,a=i.documentElement,r=i.body,e.pageX=n.clientX+(a&&a.scrollLeft||r&&r.scrollLeft||0)-(a&&a.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(a&&a.scrollTop||r&&r.scrollTop||0)-(a&&a.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&u&&(e.relatedTarget=u===e.target?n.toElement:u),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},click:{trigger:function(){return b.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t}},focus:{trigger:function(){if(this!==o.activeElement&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===o.activeElement&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=b.extend(new b.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?b.event.trigger(i,null,t):b.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},b.removeEvent=o.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},b.Event=function(e,n){return this instanceof b.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&b.extend(this,n),this.timeStamp=e&&e.timeStamp||b.now(),this[b.expando]=!0,t):new b.Event(e,n)},b.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},b.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){b.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj; -return(!i||i!==r&&!b.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),b.support.submitBubbles||(b.event.special.submit={setup:function(){return b.nodeName(this,"form")?!1:(b.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=b.nodeName(n,"input")||b.nodeName(n,"button")?n.form:t;r&&!b._data(r,"submitBubbles")&&(b.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),b._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&b.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return b.nodeName(this,"form")?!1:(b.event.remove(this,"._submit"),t)}}),b.support.changeBubbles||(b.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(b.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),b.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),b.event.simulate("change",this,e,!0)})),!1):(b.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!b._data(t,"changeBubbles")&&(b.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||b.event.simulate("change",this.parentNode,e,!0)}),b._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return b.event.remove(this,"._change"),!Z.test(this.nodeName)}}),b.support.focusinBubbles||b.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){b.event.simulate(t,e.target,b.event.fix(e),!0)};b.event.special[t]={setup:function(){0===n++&&o.addEventListener(e,r,!0)},teardown:function(){0===--n&&o.removeEventListener(e,r,!0)}}}),b.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return b().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=b.guid++)),this.each(function(){b.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,b(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){b.event.remove(this,e,r,n)})},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},trigger:function(e,t){return this.each(function(){b.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?b.event.trigger(e,n,r,!0):t}}),function(e,t){var n,r,i,o,a,s,u,l,c,p,f,d,h,g,m,y,v,x="sizzle"+-new Date,w=e.document,T={},N=0,C=0,k=it(),E=it(),S=it(),A=typeof t,j=1<<31,D=[],L=D.pop,H=D.push,q=D.slice,M=D.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},_="[\\x20\\t\\r\\n\\f]",F="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=F.replace("w","w#"),B="([*^$|!~]?=)",P="\\["+_+"*("+F+")"+_+"*(?:"+B+_+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+O+")|)|)"+_+"*\\]",R=":("+F+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+P.replace(3,8)+")*)|.*)\\)|)",W=RegExp("^"+_+"+|((?:^|[^\\\\])(?:\\\\.)*)"+_+"+$","g"),$=RegExp("^"+_+"*,"+_+"*"),I=RegExp("^"+_+"*([\\x20\\t\\r\\n\\f>+~])"+_+"*"),z=RegExp(R),X=RegExp("^"+O+"$"),U={ID:RegExp("^#("+F+")"),CLASS:RegExp("^\\.("+F+")"),NAME:RegExp("^\\[name=['\"]?("+F+")['\"]?\\]"),TAG:RegExp("^("+F.replace("w","w*")+")"),ATTR:RegExp("^"+P),PSEUDO:RegExp("^"+R),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+_+"*(even|odd|(([+-]|)(\\d*)n|)"+_+"*(?:([+-]|)"+_+"*(\\d+)|))"+_+"*\\)|)","i"),needsContext:RegExp("^"+_+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+_+"*((?:-\\d)?\\d*)"+_+"*\\)|)(?=[^-]|$)","i")},V=/[\x20\t\r\n\f]*[+~]/,Y=/^[^{]+\{\s*\[native code/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,G=/^(?:input|select|textarea|button)$/i,Q=/^h\d$/i,K=/'|\\/g,Z=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,et=/\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,tt=function(e,t){var n="0x"+t-65536;return n!==n?t:0>n?String.fromCharCode(n+65536):String.fromCharCode(55296|n>>10,56320|1023&n)};try{q.call(w.documentElement.childNodes,0)[0].nodeType}catch(nt){q=function(e){var t,n=[];while(t=this[e++])n.push(t);return n}}function rt(e){return Y.test(e+"")}function it(){var e,t=[];return e=function(n,r){return t.push(n+=" ")>i.cacheLength&&delete e[t.shift()],e[n]=r}}function ot(e){return e[x]=!0,e}function at(e){var t=p.createElement("div");try{return e(t)}catch(n){return!1}finally{t=null}}function st(e,t,n,r){var i,o,a,s,u,l,f,g,m,v;if((t?t.ownerDocument||t:w)!==p&&c(t),t=t||p,n=n||[],!e||"string"!=typeof e)return n;if(1!==(s=t.nodeType)&&9!==s)return[];if(!d&&!r){if(i=J.exec(e))if(a=i[1]){if(9===s){if(o=t.getElementById(a),!o||!o.parentNode)return n;if(o.id===a)return n.push(o),n}else if(t.ownerDocument&&(o=t.ownerDocument.getElementById(a))&&y(t,o)&&o.id===a)return n.push(o),n}else{if(i[2])return H.apply(n,q.call(t.getElementsByTagName(e),0)),n;if((a=i[3])&&T.getByClassName&&t.getElementsByClassName)return H.apply(n,q.call(t.getElementsByClassName(a),0)),n}if(T.qsa&&!h.test(e)){if(f=!0,g=x,m=t,v=9===s&&e,1===s&&"object"!==t.nodeName.toLowerCase()){l=ft(e),(f=t.getAttribute("id"))?g=f.replace(K,"\\$&"):t.setAttribute("id",g),g="[id='"+g+"'] ",u=l.length;while(u--)l[u]=g+dt(l[u]);m=V.test(e)&&t.parentNode||t,v=l.join(",")}if(v)try{return H.apply(n,q.call(m.querySelectorAll(v),0)),n}catch(b){}finally{f||t.removeAttribute("id")}}}return wt(e.replace(W,"$1"),t,n,r)}a=st.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},c=st.setDocument=function(e){var n=e?e.ownerDocument||e:w;return n!==p&&9===n.nodeType&&n.documentElement?(p=n,f=n.documentElement,d=a(n),T.tagNameNoComments=at(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),T.attributes=at(function(e){e.innerHTML="<select></select>";var t=typeof e.lastChild.getAttribute("multiple");return"boolean"!==t&&"string"!==t}),T.getByClassName=at(function(e){return e.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",e.getElementsByClassName&&e.getElementsByClassName("e").length?(e.lastChild.className="e",2===e.getElementsByClassName("e").length):!1}),T.getByName=at(function(e){e.id=x+0,e.innerHTML="<a name='"+x+"'></a><div name='"+x+"'></div>",f.insertBefore(e,f.firstChild);var t=n.getElementsByName&&n.getElementsByName(x).length===2+n.getElementsByName(x+0).length;return T.getIdNotName=!n.getElementById(x),f.removeChild(e),t}),i.attrHandle=at(function(e){return e.innerHTML="<a href='#'></a>",e.firstChild&&typeof e.firstChild.getAttribute!==A&&"#"===e.firstChild.getAttribute("href")})?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},T.getIdNotName?(i.find.ID=function(e,t){if(typeof t.getElementById!==A&&!d){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){return e.getAttribute("id")===t}}):(i.find.ID=function(e,n){if(typeof n.getElementById!==A&&!d){var r=n.getElementById(e);return r?r.id===e||typeof r.getAttributeNode!==A&&r.getAttributeNode("id").value===e?[r]:t:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){var n=typeof e.getAttributeNode!==A&&e.getAttributeNode("id");return n&&n.value===t}}),i.find.TAG=T.tagNameNoComments?function(e,n){return typeof n.getElementsByTagName!==A?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},i.find.NAME=T.getByName&&function(e,n){return typeof n.getElementsByName!==A?n.getElementsByName(name):t},i.find.CLASS=T.getByClassName&&function(e,n){return typeof n.getElementsByClassName===A||d?t:n.getElementsByClassName(e)},g=[],h=[":focus"],(T.qsa=rt(n.querySelectorAll))&&(at(function(e){e.innerHTML="<select><option selected=''></option></select>",e.querySelectorAll("[selected]").length||h.push("\\["+_+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||h.push(":checked")}),at(function(e){e.innerHTML="<input type='hidden' i=''/>",e.querySelectorAll("[i^='']").length&&h.push("[*^$]="+_+"*(?:\"\"|'')"),e.querySelectorAll(":enabled").length||h.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),h.push(",.*:")})),(T.matchesSelector=rt(m=f.matchesSelector||f.mozMatchesSelector||f.webkitMatchesSelector||f.oMatchesSelector||f.msMatchesSelector))&&at(function(e){T.disconnectedMatch=m.call(e,"div"),m.call(e,"[s!='']:x"),g.push("!=",R)}),h=RegExp(h.join("|")),g=RegExp(g.join("|")),y=rt(f.contains)||f.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},v=f.compareDocumentPosition?function(e,t){var r;return e===t?(u=!0,0):(r=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t))?1&r||e.parentNode&&11===e.parentNode.nodeType?e===n||y(w,e)?-1:t===n||y(w,t)?1:0:4&r?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return u=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:0;if(o===a)return ut(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?ut(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},u=!1,[0,0].sort(v),T.detectDuplicates=u,p):p},st.matches=function(e,t){return st(e,null,null,t)},st.matchesSelector=function(e,t){if((e.ownerDocument||e)!==p&&c(e),t=t.replace(Z,"='$1']"),!(!T.matchesSelector||d||g&&g.test(t)||h.test(t)))try{var n=m.call(e,t);if(n||T.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(r){}return st(t,p,null,[e]).length>0},st.contains=function(e,t){return(e.ownerDocument||e)!==p&&c(e),y(e,t)},st.attr=function(e,t){var n;return(e.ownerDocument||e)!==p&&c(e),d||(t=t.toLowerCase()),(n=i.attrHandle[t])?n(e):d||T.attributes?e.getAttribute(t):((n=e.getAttributeNode(t))||e.getAttribute(t))&&e[t]===!0?t:n&&n.specified?n.value:null},st.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},st.uniqueSort=function(e){var t,n=[],r=1,i=0;if(u=!T.detectDuplicates,e.sort(v),u){for(;t=e[r];r++)t===e[r-1]&&(i=n.push(r));while(i--)e.splice(n[i],1)}return e};function ut(e,t){var n=t&&e,r=n&&(~t.sourceIndex||j)-(~e.sourceIndex||j);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function lt(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function ct(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function pt(e){return ot(function(t){return t=+t,ot(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}o=st.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=o(t);return n},i=st.selectors={cacheLength:50,createPseudo:ot,match:U,find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(et,tt),e[3]=(e[4]||e[5]||"").replace(et,tt),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||st.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&st.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&&e[2];return U.CHILD.test(e[0])?null:(e[4]?e[2]=e[4]:n&&z.test(n)&&(t=ft(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){return"*"===e?function(){return!0}:(e=e.replace(et,tt).toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=k[e+" "];return t||(t=RegExp("(^|"+_+")"+e+"("+_+"|$)"))&&k(e,function(e){return t.test(e.className||typeof e.getAttribute!==A&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=st.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!u&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[x]||(m[x]={}),l=c[e]||[],d=l[0]===N&&l[1],f=l[0]===N&&l[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[N,d,f];break}}else if(v&&(l=(t[x]||(t[x]={}))[e])&&l[0]===N)f=l[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[x]||(p[x]={}))[e]=[N,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||st.error("unsupported pseudo: "+e);return r[x]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?ot(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=M.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:ot(function(e){var t=[],n=[],r=s(e.replace(W,"$1"));return r[x]?ot(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:ot(function(e){return function(t){return st(e,t).length>0}}),contains:ot(function(e){return function(t){return(t.textContent||t.innerText||o(t)).indexOf(e)>-1}}),lang:ot(function(e){return X.test(e||"")||st.error("unsupported lang: "+e),e=e.replace(et,tt).toLowerCase(),function(t){var n;do if(n=d?t.getAttribute("xml:lang")||t.getAttribute("lang"):t.lang)return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===f},focus:function(e){return e===p.activeElement&&(!p.hasFocus||p.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!i.pseudos.empty(e)},header:function(e){return Q.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:pt(function(){return[0]}),last:pt(function(e,t){return[t-1]}),eq:pt(function(e,t,n){return[0>n?n+t:n]}),even:pt(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:pt(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:pt(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:pt(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}};for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})i.pseudos[n]=lt(n);for(n in{submit:!0,reset:!0})i.pseudos[n]=ct(n);function ft(e,t){var n,r,o,a,s,u,l,c=E[e+" "];if(c)return t?0:c.slice(0);s=e,u=[],l=i.preFilter;while(s){(!n||(r=$.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),u.push(o=[])),n=!1,(r=I.exec(s))&&(n=r.shift(),o.push({value:n,type:r[0].replace(W," ")}),s=s.slice(n.length));for(a in i.filter)!(r=U[a].exec(s))||l[a]&&!(r=l[a](r))||(n=r.shift(),o.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?st.error(e):E(e,u).slice(0)}function dt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function ht(e,t,n){var i=t.dir,o=n&&"parentNode"===i,a=C++;return t.first?function(t,n,r){while(t=t[i])if(1===t.nodeType||o)return e(t,n,r)}:function(t,n,s){var u,l,c,p=N+" "+a;if(s){while(t=t[i])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[i])if(1===t.nodeType||o)if(c=t[x]||(t[x]={}),(l=c[i])&&l[0]===p){if((u=l[1])===!0||u===r)return u===!0}else if(l=c[i]=[p],l[1]=e(t,n,s)||r,l[1]===!0)return!0}}function gt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function mt(e,t,n,r,i){var o,a=[],s=0,u=e.length,l=null!=t;for(;u>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),l&&t.push(s));return a}function yt(e,t,n,r,i,o){return r&&!r[x]&&(r=yt(r)),i&&!i[x]&&(i=yt(i,o)),ot(function(o,a,s,u){var l,c,p,f=[],d=[],h=a.length,g=o||xt(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:mt(g,f,e,s,u),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,u),r){l=mt(y,d),r(l,[],s,u),c=l.length;while(c--)(p=l[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){l=[],c=y.length;while(c--)(p=y[c])&&l.push(m[c]=p);i(null,y=[],l,u)}c=y.length;while(c--)(p=y[c])&&(l=i?M.call(o,p):f[c])>-1&&(o[l]=!(a[l]=p))}}else y=mt(y===a?y.splice(h,y.length):y),i?i(null,a,y,u):H.apply(a,y)})}function vt(e){var t,n,r,o=e.length,a=i.relative[e[0].type],s=a||i.relative[" "],u=a?1:0,c=ht(function(e){return e===t},s,!0),p=ht(function(e){return M.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;o>u;u++)if(n=i.relative[e[u].type])f=[ht(gt(f),n)];else{if(n=i.filter[e[u].type].apply(null,e[u].matches),n[x]){for(r=++u;o>r;r++)if(i.relative[e[r].type])break;return yt(u>1&>(f),u>1&&dt(e.slice(0,u-1)).replace(W,"$1"),n,r>u&&vt(e.slice(u,r)),o>r&&vt(e=e.slice(r)),o>r&&dt(e))}f.push(n)}return gt(f)}function bt(e,t){var n=0,o=t.length>0,a=e.length>0,s=function(s,u,c,f,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,T=l,C=s||a&&i.find.TAG("*",d&&u.parentNode||u),k=N+=null==T?1:Math.random()||.1;for(w&&(l=u!==p&&u,r=n);null!=(h=C[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,u,c)){f.push(h);break}w&&(N=k,r=++n)}o&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,o&&b!==v){g=0;while(m=t[g++])m(x,y,u,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=L.call(f));y=mt(y)}H.apply(f,y),w&&!s&&y.length>0&&v+t.length>1&&st.uniqueSort(f)}return w&&(N=k,l=T),x};return o?ot(s):s}s=st.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=ft(e)),n=t.length;while(n--)o=vt(t[n]),o[x]?r.push(o):i.push(o);o=S(e,bt(i,r))}return o};function xt(e,t,n){var r=0,i=t.length;for(;i>r;r++)st(e,t[r],n);return n}function wt(e,t,n,r){var o,a,u,l,c,p=ft(e);if(!r&&1===p.length){if(a=p[0]=p[0].slice(0),a.length>2&&"ID"===(u=a[0]).type&&9===t.nodeType&&!d&&i.relative[a[1].type]){if(t=i.find.ID(u.matches[0].replace(et,tt),t)[0],!t)return n;e=e.slice(a.shift().value.length)}o=U.needsContext.test(e)?0:a.length;while(o--){if(u=a[o],i.relative[l=u.type])break;if((c=i.find[l])&&(r=c(u.matches[0].replace(et,tt),V.test(a[0].type)&&t.parentNode||t))){if(a.splice(o,1),e=r.length&&dt(a),!e)return H.apply(n,q.call(r,0)),n;break}}}return s(e,p)(r,t,d,n,V.test(e)),n}i.pseudos.nth=i.pseudos.eq;function Tt(){}i.filters=Tt.prototype=i.pseudos,i.setFilters=new Tt,c(),st.attr=b.attr,b.find=st,b.expr=st.selectors,b.expr[":"]=b.expr.pseudos,b.unique=st.uniqueSort,b.text=st.getText,b.isXMLDoc=st.isXML,b.contains=st.contains}(e);var at=/Until$/,st=/^(?:parents|prev(?:Until|All))/,ut=/^.[^:#\[\.,]*$/,lt=b.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};b.fn.extend({find:function(e){var t,n,r,i=this.length;if("string"!=typeof e)return r=this,this.pushStack(b(e).filter(function(){for(t=0;i>t;t++)if(b.contains(r[t],this))return!0}));for(n=[],t=0;i>t;t++)b.find(e,this[t],n);return n=this.pushStack(i>1?b.unique(n):n),n.selector=(this.selector?this.selector+" ":"")+e,n},has:function(e){var t,n=b(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(b.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e,!1))},filter:function(e){return this.pushStack(ft(this,e,!0))},is:function(e){return!!e&&("string"==typeof e?lt.test(e)?b(e,this.context).index(this[0])>=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(e,t){var n,r=0,i=this.length,o=[],a=lt.test(e)||"string"!=typeof e?b(e,t||this.context):0;for(;i>r;r++){n=this[r];while(n&&n.ownerDocument&&n!==t&&11!==n.nodeType){if(a?a.index(n)>-1:b.find.matchesSelector(n,e)){o.push(n);break}n=n.parentNode}}return this.pushStack(o.length>1?b.unique(o):o)},index:function(e){return e?"string"==typeof e?b.inArray(this[0],b(e)):b.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?b(e,t):b.makeArray(e&&e.nodeType?[e]:e),r=b.merge(this.get(),n);return this.pushStack(b.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),b.fn.andSelf=b.fn.addBack;function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}b.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(e,t,n){return b.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(e,t,n){return b.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return b.dir(e,"previousSibling",n)},siblings:function(e){return b.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.merge([],e.childNodes)}},function(e,t){b.fn[e]=function(n,r){var i=b.map(this,t,n);return at.test(e)||(r=n),r&&"string"==typeof r&&(i=b.filter(r,i)),i=this.length>1&&!ct[e]?b.unique(i):i,this.length>1&&st.test(e)&&(i=i.reverse()),this.pushStack(i)}}),b.extend({filter:function(e,t,n){return n&&(e=":not("+e+")"),1===t.length?b.find.matchesSelector(t[0],e)?[t[0]]:[]:b.find.matches(e,t)},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!b(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(t=t||0,b.isFunction(t))return b.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return b.grep(e,function(e){return e===t===n});if("string"==typeof t){var r=b.grep(e,function(e){return 1===e.nodeType});if(ut.test(t))return b.filter(t,r,!n);t=b.filter(t,r)}return b.grep(e,function(e){return b.inArray(e,t)>=0===n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/<tbody/i,wt=/<|&#?\w+;/,Tt=/<(?:script|style|link)/i,Nt=/^(?:checkbox|radio)$/i,Ct=/checked\s*(?:[^=]|=\s*.checked.)/i,kt=/^$|\/(?:java|ecma)script/i,Et=/^true\/(.*)/,St=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,At={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:b.support.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},jt=dt(o),Dt=jt.appendChild(o.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,b.fn.extend({text:function(e){return b.access(this,function(e){return e===t?b.text(this):this.empty().append((this[0]&&this[0].ownerDocument||o).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(b.isFunction(e))return this.each(function(t){b(this).wrapAll(e.call(this,t))});if(this[0]){var t=b(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return b.isFunction(e)?this.each(function(t){b(this).wrapInner(e.call(this,t))}):this.each(function(){var t=b(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=b.isFunction(e);return this.each(function(n){b(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){b.nodeName(this,"body")||b(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.appendChild(e)})},prepend:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.insertBefore(e,this.firstChild)})},before:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=0;for(;null!=(n=this[r]);r++)(!e||b.filter(e,[n]).length>0)&&(t||1!==n.nodeType||b.cleanData(Ot(n)),n.parentNode&&(t&&b.contains(n.ownerDocument,n)&&Mt(Ot(n,"script")),n.parentNode.removeChild(n)));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&b.cleanData(Ot(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&b.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return b.clone(this,e,t)})},html:function(e){return b.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!b.support.htmlSerialize&&mt.test(e)||!b.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1></$2>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(b.cleanData(Ot(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(e){var t=b.isFunction(e);return t||"string"==typeof e||(e=b(e).not(this).detach()),this.domManip([e],!0,function(e){var t=this.nextSibling,n=this.parentNode;n&&(b(this).remove(),n.insertBefore(e,t))})},detach:function(e){return this.remove(e,!0)},domManip:function(e,n,r){e=f.apply([],e);var i,o,a,s,u,l,c=0,p=this.length,d=this,h=p-1,g=e[0],m=b.isFunction(g);if(m||!(1>=p||"string"!=typeof g||b.support.checkClone)&&Ct.test(g))return this.each(function(i){var o=d.eq(i);m&&(e[0]=g.call(this,i,n?o.html():t)),o.domManip(e,n,r)});if(p&&(l=b.buildFragment(e,this[0].ownerDocument,!1,this),i=l.firstChild,1===l.childNodes.length&&(l=i),i)){for(n=n&&b.nodeName(i,"tr"),s=b.map(Ot(l,"script"),Ht),a=s.length;p>c;c++)o=l,c!==h&&(o=b.clone(o,!0,!0),a&&b.merge(s,Ot(o,"script"))),r.call(n&&b.nodeName(this[c],"table")?Lt(this[c],"tbody"):this[c],o,c);if(a)for(u=s[s.length-1].ownerDocument,b.map(s,qt),c=0;a>c;c++)o=s[c],kt.test(o.type||"")&&!b._data(o,"globalEval")&&b.contains(u,o)&&(o.src?b.ajax({url:o.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):b.globalEval((o.text||o.textContent||o.innerHTML||"").replace(St,"")));l=i=null}return this}});function Lt(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function Ht(e){var t=e.getAttributeNode("type");return e.type=(t&&t.specified)+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function Mt(e,t){var n,r=0;for(;null!=(n=e[r]);r++)b._data(n,"globalEval",!t||b._data(t[r],"globalEval"))}function _t(e,t){if(1===t.nodeType&&b.hasData(e)){var n,r,i,o=b._data(e),a=b._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)b.event.add(t,n,s[n][r])}a.data&&(a.data=b.extend({},a.data))}}function Ft(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!b.support.noCloneEvent&&t[b.expando]){i=b._data(t);for(r in i.events)b.removeEvent(t,r,i.handle);t.removeAttribute(b.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),b.support.html5Clone&&e.innerHTML&&!b.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Nt.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}b.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){b.fn[e]=function(e){var n,r=0,i=[],o=b(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),b(o[r])[t](n),d.apply(i,n.get());return this.pushStack(i)}});function Ot(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||b.nodeName(o,n)?s.push(o):b.merge(s,Ot(o,n));return n===t||n&&b.nodeName(e,n)?b.merge([e],s):s}function Bt(e){Nt.test(e.type)&&(e.defaultChecked=e.checked)}b.extend({clone:function(e,t,n){var r,i,o,a,s,u=b.contains(e.ownerDocument,e);if(b.support.html5Clone||b.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(b.support.noCloneEvent&&b.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||b.isXMLDoc(e)))for(r=Ot(o),s=Ot(e),a=0;null!=(i=s[a]);++a)r[a]&&Ft(i,r[a]);if(t)if(n)for(s=s||Ot(e),r=r||Ot(o),a=0;null!=(i=s[a]);a++)_t(i,r[a]);else _t(e,o);return r=Ot(o,"script"),r.length>0&&Mt(r,!u&&Ot(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,u,l,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===b.type(o))b.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),u=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[u]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1></$2>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!b.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!b.support.tbody){o="table"!==u||xt.test(o)?"<table>"!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)b.nodeName(l=o.childNodes[i],"tbody")&&!l.childNodes.length&&o.removeChild(l) -}b.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),b.support.appendChecked||b.grep(Ot(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===b.inArray(o,r))&&(a=b.contains(o.ownerDocument,o),s=Ot(f.appendChild(o),"script"),a&&Mt(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,u=b.expando,l=b.cache,p=b.support.deleteExpando,f=b.event.special;for(;null!=(n=e[s]);s++)if((t||b.acceptData(n))&&(o=n[u],a=o&&l[o])){if(a.events)for(r in a.events)f[r]?b.event.remove(n,r):b.removeEvent(n,r,a.handle);l[o]&&(delete l[o],p?delete n[u]:typeof n.removeAttribute!==i?n.removeAttribute(u):n[u]=null,c.push(o))}}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+x+")(.*)$","i"),Yt=RegExp("^("+x+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+x+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===b.css(e,"display")||!b.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=b._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=b._data(r,"olddisplay",un(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&b._data(r,"olddisplay",i?n:b.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}b.fn.extend({css:function(e,n){return b.access(this,function(e,n,r){var i,o,a={},s=0;if(b.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=b.css(e,n[s],!1,o);return a}return r!==t?b.style(e,n,r):b.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){var t="boolean"==typeof e;return this.each(function(){(t?e:nn(this))?b(this).show():b(this).hide()})}}),b.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":b.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,u=b.camelCase(n),l=e.style;if(n=b.cssProps[u]||(b.cssProps[u]=tn(l,u)),s=b.cssHooks[n]||b.cssHooks[u],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:l[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(b.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||b.cssNumber[u]||(r+="px"),b.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(l[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{l[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,u=b.camelCase(n);return n=b.cssProps[u]||(b.cssProps[u]=tn(e.style,u)),s=b.cssHooks[n]||b.cssHooks[u],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||b.isNumeric(o)?o||0:a):a},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s.getPropertyValue(n)||s[n]:t,l=e.style;return s&&(""!==u||b.contains(e.ownerDocument,e)||(u=b.style(e,n)),Yt.test(u)&&Ut.test(n)&&(i=l.width,o=l.minWidth,a=l.maxWidth,l.minWidth=l.maxWidth=l.width=u,u=s.width,l.width=i,l.minWidth=o,l.maxWidth=a)),u}):o.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s[n]:t,l=e.style;return null==u&&l&&l[n]&&(u=l[n]),Yt.test(u)&&!zt.test(n)&&(i=l.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),l.left="fontSize"===n?"1em":u,u=l.pixelLeft+"px",l.left=i,a&&(o.left=a)),""===u?"auto":u});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=b.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=b.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=b.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=b.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=b.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=b.support.boxSizing&&"border-box"===b.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(b.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function un(e){var t=o,n=Gt[e];return n||(n=ln(e,t),"none"!==n&&n||(Pt=(Pt||b("<iframe frameborder='0' width='0' height='0'/>").css("cssText","display:block !important")).appendTo(t.documentElement),t=(Pt[0].contentWindow||Pt[0].contentDocument).document,t.write("<!doctype html><html><body>"),t.close(),n=ln(e,t),Pt.detach()),Gt[e]=n),n}function ln(e,t){var n=b(t.createElement(e)).appendTo(t.body),r=b.css(n[0],"display");return n.remove(),r}b.each(["height","width"],function(e,n){b.cssHooks[n]={get:function(e,r,i){return r?0===e.offsetWidth&&Xt.test(b.css(e,"display"))?b.swap(e,Qt,function(){return sn(e,n,i)}):sn(e,n,i):t},set:function(e,t,r){var i=r&&Rt(e);return on(e,t,r?an(e,n,r,b.support.boxSizing&&"border-box"===b.css(e,"boxSizing",!1,i),i):0)}}}),b.support.opacity||(b.cssHooks.opacity={get:function(e,t){return It.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=b.isNumeric(t)?"alpha(opacity="+100*t+")":"",o=r&&r.filter||n.filter||"";n.zoom=1,(t>=1||""===t)&&""===b.trim(o.replace($t,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===t||r&&!r.filter)||(n.filter=$t.test(o)?o.replace($t,i):o+" "+i)}}),b(function(){b.support.reliableMarginRight||(b.cssHooks.marginRight={get:function(e,n){return n?b.swap(e,{display:"inline-block"},Wt,[e,"marginRight"]):t}}),!b.support.pixelPosition&&b.fn.position&&b.each(["top","left"],function(e,n){b.cssHooks[n]={get:function(e,r){return r?(r=Wt(e,n),Yt.test(r)?b(e).position()[n]+"px":r):t}}})}),b.expr&&b.expr.filters&&(b.expr.filters.hidden=function(e){return 0>=e.offsetWidth&&0>=e.offsetHeight||!b.support.reliableHiddenOffsets&&"none"===(e.style&&e.style.display||b.css(e,"display"))},b.expr.filters.visible=function(e){return!b.expr.filters.hidden(e)}),b.each({margin:"",padding:"",border:"Width"},function(e,t){b.cssHooks[e+t]={expand:function(n){var r=0,i={},o="string"==typeof n?n.split(" "):[n];for(;4>r;r++)i[e+Zt[r]+t]=o[r]||o[r-2]||o[0];return i}},Ut.test(e)||(b.cssHooks[e+t].set=on)});var cn=/%20/g,pn=/\[\]$/,fn=/\r?\n/g,dn=/^(?:submit|button|image|reset|file)$/i,hn=/^(?:input|select|textarea|keygen)/i;b.fn.extend({serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=b.prop(this,"elements");return e?b.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!b(this).is(":disabled")&&hn.test(this.nodeName)&&!dn.test(e)&&(this.checked||!Nt.test(e))}).map(function(e,t){var n=b(this).val();return null==n?null:b.isArray(n)?b.map(n,function(e){return{name:t.name,value:e.replace(fn,"\r\n")}}):{name:t.name,value:n.replace(fn,"\r\n")}}).get()}}),b.param=function(e,n){var r,i=[],o=function(e,t){t=b.isFunction(t)?t():null==t?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(n===t&&(n=b.ajaxSettings&&b.ajaxSettings.traditional),b.isArray(e)||e.jquery&&!b.isPlainObject(e))b.each(e,function(){o(this.name,this.value)});else for(r in e)gn(r,e[r],n,o);return i.join("&").replace(cn,"+")};function gn(e,t,n,r){var i;if(b.isArray(t))b.each(t,function(t,i){n||pn.test(e)?r(e,i):gn(e+"["+("object"==typeof i?t:"")+"]",i,n,r)});else if(n||"object"!==b.type(t))r(e,t);else for(i in t)gn(e+"["+i+"]",t[i],n,r)}b.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){b.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),b.fn.hover=function(e,t){return this.mouseenter(e).mouseleave(t||e)};var mn,yn,vn=b.now(),bn=/\?/,xn=/#.*$/,wn=/([?&])_=[^&]*/,Tn=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Nn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Cn=/^(?:GET|HEAD)$/,kn=/^\/\//,En=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,Sn=b.fn.load,An={},jn={},Dn="*/".concat("*");try{yn=a.href}catch(Ln){yn=o.createElement("a"),yn.href="",yn=yn.href}mn=En.exec(yn.toLowerCase())||[];function Hn(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(w)||[];if(b.isFunction(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function qn(e,n,r,i){var o={},a=e===jn;function s(u){var l;return o[u]=!0,b.each(e[u]||[],function(e,u){var c=u(n,r,i);return"string"!=typeof c||a||o[c]?a?!(l=c):t:(n.dataTypes.unshift(c),s(c),!1)}),l}return s(n.dataTypes[0])||!o["*"]&&s("*")}function Mn(e,n){var r,i,o=b.ajaxSettings.flatOptions||{};for(i in n)n[i]!==t&&((o[i]?e:r||(r={}))[i]=n[i]);return r&&b.extend(!0,e,r),e}b.fn.load=function(e,n,r){if("string"!=typeof e&&Sn)return Sn.apply(this,arguments);var i,o,a,s=this,u=e.indexOf(" ");return u>=0&&(i=e.slice(u,e.length),e=e.slice(0,u)),b.isFunction(n)?(r=n,n=t):n&&"object"==typeof n&&(a="POST"),s.length>0&&b.ajax({url:e,type:a,dataType:"html",data:n}).done(function(e){o=arguments,s.html(i?b("<div>").append(b.parseHTML(e)).find(i):e)}).complete(r&&function(e,t){s.each(r,o||[e.responseText,t,e])}),this},b.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){b.fn[t]=function(e){return this.on(t,e)}}),b.each(["get","post"],function(e,n){b[n]=function(e,r,i,o){return b.isFunction(r)&&(o=o||i,i=r,r=t),b.ajax({url:e,type:n,dataType:o,data:r,success:i})}}),b.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:yn,type:"GET",isLocal:Nn.test(mn[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Dn,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":e.String,"text html":!0,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Mn(Mn(e,b.ajaxSettings),t):Mn(b.ajaxSettings,e)},ajaxPrefilter:Hn(An),ajaxTransport:Hn(jn),ajax:function(e,n){"object"==typeof e&&(n=e,e=t),n=n||{};var r,i,o,a,s,u,l,c,p=b.ajaxSetup({},n),f=p.context||p,d=p.context&&(f.nodeType||f.jquery)?b(f):b.event,h=b.Deferred(),g=b.Callbacks("once memory"),m=p.statusCode||{},y={},v={},x=0,T="canceled",N={readyState:0,getResponseHeader:function(e){var t;if(2===x){if(!c){c={};while(t=Tn.exec(a))c[t[1].toLowerCase()]=t[2]}t=c[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===x?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return x||(e=v[n]=v[n]||e,y[e]=t),this},overrideMimeType:function(e){return x||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>x)for(t in e)m[t]=[m[t],e[t]];else N.always(e[N.status]);return this},abort:function(e){var t=e||T;return l&&l.abort(t),k(0,t),this}};if(h.promise(N).complete=g.add,N.success=N.done,N.error=N.fail,p.url=((e||p.url||yn)+"").replace(xn,"").replace(kn,mn[1]+"//"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=b.trim(p.dataType||"*").toLowerCase().match(w)||[""],null==p.crossDomain&&(r=En.exec(p.url.toLowerCase()),p.crossDomain=!(!r||r[1]===mn[1]&&r[2]===mn[2]&&(r[3]||("http:"===r[1]?80:443))==(mn[3]||("http:"===mn[1]?80:443)))),p.data&&p.processData&&"string"!=typeof p.data&&(p.data=b.param(p.data,p.traditional)),qn(An,p,n,N),2===x)return N;u=p.global,u&&0===b.active++&&b.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!Cn.test(p.type),o=p.url,p.hasContent||(p.data&&(o=p.url+=(bn.test(o)?"&":"?")+p.data,delete p.data),p.cache===!1&&(p.url=wn.test(o)?o.replace(wn,"$1_="+vn++):o+(bn.test(o)?"&":"?")+"_="+vn++)),p.ifModified&&(b.lastModified[o]&&N.setRequestHeader("If-Modified-Since",b.lastModified[o]),b.etag[o]&&N.setRequestHeader("If-None-Match",b.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&N.setRequestHeader("Content-Type",p.contentType),N.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+Dn+"; q=0.01":""):p.accepts["*"]);for(i in p.headers)N.setRequestHeader(i,p.headers[i]);if(p.beforeSend&&(p.beforeSend.call(f,N,p)===!1||2===x))return N.abort();T="abort";for(i in{success:1,error:1,complete:1})N[i](p[i]);if(l=qn(jn,p,n,N)){N.readyState=1,u&&d.trigger("ajaxSend",[N,p]),p.async&&p.timeout>0&&(s=setTimeout(function(){N.abort("timeout")},p.timeout));try{x=1,l.send(y,k)}catch(C){if(!(2>x))throw C;k(-1,C)}}else k(-1,"No Transport");function k(e,n,r,i){var c,y,v,w,T,C=n;2!==x&&(x=2,s&&clearTimeout(s),l=t,a=i||"",N.readyState=e>0?4:0,r&&(w=_n(p,N,r)),e>=200&&300>e||304===e?(p.ifModified&&(T=N.getResponseHeader("Last-Modified"),T&&(b.lastModified[o]=T),T=N.getResponseHeader("etag"),T&&(b.etag[o]=T)),204===e?(c=!0,C="nocontent"):304===e?(c=!0,C="notmodified"):(c=Fn(p,w),C=c.state,y=c.data,v=c.error,c=!v)):(v=C,(e||!C)&&(C="error",0>e&&(e=0))),N.status=e,N.statusText=(n||C)+"",c?h.resolveWith(f,[y,C,N]):h.rejectWith(f,[N,C,v]),N.statusCode(m),m=t,u&&d.trigger(c?"ajaxSuccess":"ajaxError",[N,p,c?y:v]),g.fireWith(f,[N,C]),u&&(d.trigger("ajaxComplete",[N,p]),--b.active||b.event.trigger("ajaxStop")))}return N},getScript:function(e,n){return b.get(e,t,n,"script")},getJSON:function(e,t,n){return b.get(e,t,n,"json")}});function _n(e,n,r){var i,o,a,s,u=e.contents,l=e.dataTypes,c=e.responseFields;for(s in c)s in r&&(n[c[s]]=r[s]);while("*"===l[0])l.shift(),o===t&&(o=e.mimeType||n.getResponseHeader("Content-Type"));if(o)for(s in u)if(u[s]&&u[s].test(o)){l.unshift(s);break}if(l[0]in r)a=l[0];else{for(s in r){if(!l[0]||e.converters[s+" "+l[0]]){a=s;break}i||(i=s)}a=a||i}return a?(a!==l[0]&&l.unshift(a),r[a]):t}function Fn(e,t){var n,r,i,o,a={},s=0,u=e.dataTypes.slice(),l=u[0];if(e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u[1])for(i in e.converters)a[i.toLowerCase()]=e.converters[i];for(;r=u[++s];)if("*"!==r){if("*"!==l&&l!==r){if(i=a[l+" "+r]||a["* "+r],!i)for(n in a)if(o=n.split(" "),o[1]===r&&(i=a[l+" "+o[0]]||a["* "+o[0]])){i===!0?i=a[n]:a[n]!==!0&&(r=o[0],u.splice(s--,0,r));break}if(i!==!0)if(i&&e["throws"])t=i(t);else try{t=i(t)}catch(c){return{state:"parsererror",error:i?c:"No conversion from "+l+" to "+r}}}l=r}return{state:"success",data:t}}b.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return b.globalEval(e),e}}}),b.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),b.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=o.head||b("head")[0]||o.documentElement;return{send:function(t,i){n=o.createElement("script"),n.async=!0,e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),n=null,t||i(200,"success"))},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(t,!0)}}}});var On=[],Bn=/(=)\?(?=&|$)|\?\?/;b.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=On.pop()||b.expando+"_"+vn++;return this[e]=!0,e}}),b.ajaxPrefilter("json jsonp",function(n,r,i){var o,a,s,u=n.jsonp!==!1&&(Bn.test(n.url)?"url":"string"==typeof n.data&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Bn.test(n.data)&&"data");return u||"jsonp"===n.dataTypes[0]?(o=n.jsonpCallback=b.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,u?n[u]=n[u].replace(Bn,"$1"+o):n.jsonp!==!1&&(n.url+=(bn.test(n.url)?"&":"?")+n.jsonp+"="+o),n.converters["script json"]=function(){return s||b.error(o+" was not called"),s[0]},n.dataTypes[0]="json",a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&&(n.jsonpCallback=r.jsonpCallback,On.push(o)),s&&b.isFunction(a)&&a(s[0]),s=a=t}),"script"):t});var Pn,Rn,Wn=0,$n=e.ActiveXObject&&function(){var e;for(e in Pn)Pn[e](t,!0)};function In(){try{return new e.XMLHttpRequest}catch(t){}}function zn(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}b.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&In()||zn()}:In,Rn=b.ajaxSettings.xhr(),b.support.cors=!!Rn&&"withCredentials"in Rn,Rn=b.support.ajax=!!Rn,Rn&&b.ajaxTransport(function(n){if(!n.crossDomain||b.support.cors){var r;return{send:function(i,o){var a,s,u=n.xhr();if(n.username?u.open(n.type,n.url,n.async,n.username,n.password):u.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)u[s]=n.xhrFields[s];n.mimeType&&u.overrideMimeType&&u.overrideMimeType(n.mimeType),n.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");try{for(s in i)u.setRequestHeader(s,i[s])}catch(l){}u.send(n.hasContent&&n.data||null),r=function(e,i){var s,l,c,p;try{if(r&&(i||4===u.readyState))if(r=t,a&&(u.onreadystatechange=b.noop,$n&&delete Pn[a]),i)4!==u.readyState&&u.abort();else{p={},s=u.status,l=u.getAllResponseHeaders(),"string"==typeof u.responseText&&(p.text=u.responseText);try{c=u.statusText}catch(f){c=""}s||!n.isLocal||n.crossDomain?1223===s&&(s=204):s=p.text?200:404}}catch(d){i||o(-1,d)}p&&o(s,c,p,l)},n.async?4===u.readyState?setTimeout(r):(a=++Wn,$n&&(Pn||(Pn={},b(e).unload($n)),Pn[a]=r),u.onreadystatechange=r):r()},abort:function(){r&&r(t,!0)}}}});var Xn,Un,Vn=/^(?:toggle|show|hide)$/,Yn=RegExp("^(?:([+-])=|)("+x+")([a-z%]*)$","i"),Jn=/queueHooks$/,Gn=[nr],Qn={"*":[function(e,t){var n,r,i=this.createTween(e,t),o=Yn.exec(t),a=i.cur(),s=+a||0,u=1,l=20;if(o){if(n=+o[2],r=o[3]||(b.cssNumber[e]?"":"px"),"px"!==r&&s){s=b.css(i.elem,e,!0)||n||1;do u=u||".5",s/=u,b.style(i.elem,e,s+r);while(u!==(u=i.cur()/a)&&1!==u&&--l)}i.unit=r,i.start=s,i.end=o[1]?s+(o[1]+1)*n:n}return i}]};function Kn(){return setTimeout(function(){Xn=t}),Xn=b.now()}function Zn(e,t){b.each(t,function(t,n){var r=(Qn[t]||[]).concat(Qn["*"]),i=0,o=r.length;for(;o>i;i++)if(r[i].call(e,t,n))return})}function er(e,t,n){var r,i,o=0,a=Gn.length,s=b.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;var t=Xn||Kn(),n=Math.max(0,l.startTime+l.duration-t),r=n/l.duration||0,o=1-r,a=0,u=l.tweens.length;for(;u>a;a++)l.tweens[a].run(o);return s.notifyWith(e,[l,o,n]),1>o&&u?n:(s.resolveWith(e,[l]),!1)},l=s.promise({elem:e,props:b.extend({},t),opts:b.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xn||Kn(),duration:n.duration,tweens:[],createTween:function(t,n){var r=b.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)l.tweens[n].run(1);return t?s.resolveWith(e,[l,t]):s.rejectWith(e,[l,t]),this}}),c=l.props;for(tr(c,l.opts.specialEasing);a>o;o++)if(r=Gn[o].call(l,e,c,l.opts))return r;return Zn(l,c),b.isFunction(l.opts.start)&&l.opts.start.call(e,l),b.fx.timer(b.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always)}function tr(e,t){var n,r,i,o,a;for(i in e)if(r=b.camelCase(i),o=t[r],n=e[i],b.isArray(n)&&(o=n[1],n=e[i]=n[0]),i!==r&&(e[r]=n,delete e[i]),a=b.cssHooks[r],a&&"expand"in a){n=a.expand(n),delete e[r];for(i in n)i in e||(e[i]=n[i],t[i]=o)}else t[r]=o}b.Animation=b.extend(er,{tweener:function(e,t){b.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;i>r;r++)n=e[r],Qn[n]=Qn[n]||[],Qn[n].unshift(t)},prefilter:function(e,t){t?Gn.unshift(e):Gn.push(e)}});function nr(e,t,n){var r,i,o,a,s,u,l,c,p,f=this,d=e.style,h={},g=[],m=e.nodeType&&nn(e);n.queue||(c=b._queueHooks(e,"fx"),null==c.unqueued&&(c.unqueued=0,p=c.empty.fire,c.empty.fire=function(){c.unqueued||p()}),c.unqueued++,f.always(function(){f.always(function(){c.unqueued--,b.queue(e,"fx").length||c.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[d.overflow,d.overflowX,d.overflowY],"inline"===b.css(e,"display")&&"none"===b.css(e,"float")&&(b.support.inlineBlockNeedsLayout&&"inline"!==un(e.nodeName)?d.zoom=1:d.display="inline-block")),n.overflow&&(d.overflow="hidden",b.support.shrinkWrapBlocks||f.always(function(){d.overflow=n.overflow[0],d.overflowX=n.overflow[1],d.overflowY=n.overflow[2]}));for(i in t)if(a=t[i],Vn.exec(a)){if(delete t[i],u=u||"toggle"===a,a===(m?"hide":"show"))continue;g.push(i)}if(o=g.length){s=b._data(e,"fxshow")||b._data(e,"fxshow",{}),"hidden"in s&&(m=s.hidden),u&&(s.hidden=!m),m?b(e).show():f.done(function(){b(e).hide()}),f.done(function(){var t;b._removeData(e,"fxshow");for(t in h)b.style(e,t,h[t])});for(i=0;o>i;i++)r=g[i],l=f.createTween(r,m?s[r]:0),h[r]=s[r]||b.style(e,r),r in s||(s[r]=l.start,m&&(l.end=l.start,l.start="width"===r||"height"===r?1:0))}}function rr(e,t,n,r,i){return new rr.prototype.init(e,t,n,r,i)}b.Tween=rr,rr.prototype={constructor:rr,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(b.cssNumber[n]?"":"px")},cur:function(){var e=rr.propHooks[this.prop];return e&&e.get?e.get(this):rr.propHooks._default.get(this)},run:function(e){var t,n=rr.propHooks[this.prop];return this.pos=t=this.options.duration?b.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):rr.propHooks._default.set(this),this}},rr.prototype.init.prototype=rr.prototype,rr.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=b.css(e.elem,e.prop,""),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){b.fx.step[e.prop]?b.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[b.cssProps[e.prop]]||b.cssHooks[e.prop])?b.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},rr.propHooks.scrollTop=rr.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},b.each(["toggle","show","hide"],function(e,t){var n=b.fn[t];b.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ir(t,!0),e,r,i)}}),b.fn.extend({fadeTo:function(e,t,n,r){return this.filter(nn).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=b.isEmptyObject(e),o=b.speed(t,n,r),a=function(){var t=er(this,b.extend({},e),o);a.finish=function(){t.stop(!0)},(i||b._data(this,"finish"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return"string"!=typeof e&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=null!=e&&e+"queueHooks",o=b.timers,a=b._data(this);if(n)a[n]&&a[n].stop&&i(a[n]);else for(n in a)a[n]&&a[n].stop&&Jn.test(n)&&i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&&o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&&b.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=b._data(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=b.timers,a=r?r.length:0;for(n.finish=!0,b.queue(this,e,[]),i&&i.cur&&i.cur.finish&&i.cur.finish.call(this),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}});function ir(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=Zt[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}b.each({slideDown:ir("show"),slideUp:ir("hide"),slideToggle:ir("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){b.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),b.speed=function(e,t,n){var r=e&&"object"==typeof e?b.extend({},e):{complete:n||!n&&t||b.isFunction(e)&&e,duration:e,easing:n&&t||t&&!b.isFunction(t)&&t};return r.duration=b.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in b.fx.speeds?b.fx.speeds[r.duration]:b.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){b.isFunction(r.old)&&r.old.call(this),r.queue&&b.dequeue(this,r.queue)},r},b.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},b.timers=[],b.fx=rr.prototype.init,b.fx.tick=function(){var e,n=b.timers,r=0;for(Xn=b.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||b.fx.stop(),Xn=t},b.fx.timer=function(e){e()&&b.timers.push(e)&&b.fx.start()},b.fx.interval=13,b.fx.start=function(){Un||(Un=setInterval(b.fx.tick,b.fx.interval))},b.fx.stop=function(){clearInterval(Un),Un=null},b.fx.speeds={slow:600,fast:200,_default:400},b.fx.step={},b.expr&&b.expr.filters&&(b.expr.filters.animated=function(e){return b.grep(b.timers,function(t){return e===t.elem}).length}),b.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){b.offset.setOffset(this,e,t)});var n,r,o={top:0,left:0},a=this[0],s=a&&a.ownerDocument;if(s)return n=s.documentElement,b.contains(n,a)?(typeof a.getBoundingClientRect!==i&&(o=a.getBoundingClientRect()),r=or(s),{top:o.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:o.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):o},b.offset={setOffset:function(e,t,n){var r=b.css(e,"position");"static"===r&&(e.style.position="relative");var i=b(e),o=i.offset(),a=b.css(e,"top"),s=b.css(e,"left"),u=("absolute"===r||"fixed"===r)&&b.inArray("auto",[a,s])>-1,l={},c={},p,f;u?(c=i.position(),p=c.top,f=c.left):(p=parseFloat(a)||0,f=parseFloat(s)||0),b.isFunction(t)&&(t=t.call(e,n,o)),null!=t.top&&(l.top=t.top-o.top+p),null!=t.left&&(l.left=t.left-o.left+f),"using"in t?t.using.call(e,l):i.css(l)}},b.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return"fixed"===b.css(r,"position")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),b.nodeName(e[0],"html")||(n=e.offset()),n.top+=b.css(e[0],"borderTopWidth",!0),n.left+=b.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-b.css(r,"marginTop",!0),left:t.left-n.left-b.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||o.documentElement;while(e&&!b.nodeName(e,"html")&&"static"===b.css(e,"position"))e=e.offsetParent;return e||o.documentElement})}}),b.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);b.fn[e]=function(i){return b.access(this,function(e,i,o){var a=or(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?b(a).scrollLeft():o,r?o:b(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}});function or(e){return b.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}b.each({Height:"height",Width:"width"},function(e,n){b.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){b.fn[i]=function(i,o){var a=arguments.length&&(r||"boolean"!=typeof i),s=r||(i===!0||o===!0?"margin":"border");return b.access(this,function(n,r,i){var o;return b.isWindow(n)?n.document.documentElement["client"+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body["scroll"+e],o["scroll"+e],n.body["offset"+e],o["offset"+e],o["client"+e])):i===t?b.css(n,r,s):b.style(n,r,i,s)},n,a?i:t,a,null)}})}),e.jQuery=e.$=b,"function"==typeof define&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return b})})(window); \ No newline at end of file diff --git a/src/main/webapp/bower_components/bootstrap/js/tests/vendor/qunit.css b/src/main/webapp/bower_components/bootstrap/js/tests/vendor/qunit.css deleted file mode 100644 index b3e3d002..00000000 --- a/src/main/webapp/bower_components/bootstrap/js/tests/vendor/qunit.css +++ /dev/null @@ -1,232 +0,0 @@ -/** - * QUnit - A JavaScript Unit Testing Framework - * - * http://docs.jquery.com/QUnit - * - * Copyright (c) 2012 John Resig, Jörn Zaefferer - * Dual licensed under the MIT (MIT-LICENSE.txt) - * or GPL (GPL-LICENSE.txt) licenses. - */ - -/** 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-tests ol, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult { - 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: 15px 15px 0 0; - -moz-border-radius: 15px 15px 0 0; - -webkit-border-top-right-radius: 15px; - -webkit-border-top-left-radius: 15px; -} - -#qunit-header a { - text-decoration: none; - color: #c2ccd1; -} - -#qunit-header a:hover, -#qunit-header a:focus { - color: #fff; -} - -#qunit-banner { - height: 5px; -} - -#qunit-testrunner-toolbar { - padding: 0.5em 0 0.5em 2em; - color: #5E740B; - background-color: #eee; -} - -#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; -} - - -/** 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 ol { - margin-top: 0.5em; - padding: 0.5em; - - background-color: #fff; - - border-radius: 15px; - -moz-border-radius: 15px; - -webkit-border-radius: 15px; - - box-shadow: inset 0px 2px 13px #999; - -moz-box-shadow: inset 0px 2px 13px #999; - -webkit-box-shadow: inset 0px 2px 13px #999; -} - -#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 { - margin: 0.5em; - padding: 0.4em 0.5em 0.4em 0.5em; - background-color: #fff; - border-bottom: none; - list-style-position: inside; -} - -/*** Passing Styles */ - -#qunit-tests li li.pass { - color: #5E740B; - background-color: #fff; - border-left: 26px 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: 26px solid #EE5757; - white-space: pre; -} - -#qunit-tests > li:last-child { - border-radius: 0 0 15px 15px; - -moz-border-radius: 0 0 15px 15px; - -webkit-border-bottom-right-radius: 15px; - -webkit-border-bottom-left-radius: 15px; -} - -#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; -} - -/** Fixture */ - -#qunit-fixture { - position: absolute; - top: -10000px; - left: -10000px; -} - -/** Runoff */ - -#qunit-fixture { - display:none; -} \ No newline at end of file diff --git a/src/main/webapp/bower_components/bootstrap/js/tests/vendor/qunit.js b/src/main/webapp/bower_components/bootstrap/js/tests/vendor/qunit.js deleted file mode 100644 index 46c95b29..00000000 --- a/src/main/webapp/bower_components/bootstrap/js/tests/vendor/qunit.js +++ /dev/null @@ -1,1510 +0,0 @@ -/** - * QUnit - A JavaScript Unit Testing Framework - * - * http://docs.jquery.com/QUnit - * - * Copyright (c) 2012 John Resig, Jörn Zaefferer - * Dual licensed under the MIT (MIT-LICENSE.txt) - * or GPL (GPL-LICENSE.txt) licenses. - */ - -(function(window) { - -var defined = { - setTimeout: typeof window.setTimeout !== "undefined", - sessionStorage: (function() { - try { - return !!sessionStorage.getItem; - } catch(e) { - return false; - } - })() -}; - -var testId = 0; - -var Test = function(name, testName, expected, testEnvironmentArg, async, callback) { - this.name = name; - this.testName = testName; - this.expected = expected; - this.testEnvironmentArg = testEnvironmentArg; - this.async = async; - this.callback = callback; - this.assertions = []; -}; -Test.prototype = { - init: function() { - var tests = id("qunit-tests"); - if (tests) { - var b = document.createElement("strong"); - b.innerHTML = "Running " + this.name; - var li = document.createElement("li"); - li.appendChild( b ); - li.className = "running"; - li.id = this.id = "test-output" + testId++; - tests.appendChild( li ); - } - }, - setup: function() { - if (this.module != config.previousModule) { - if ( config.previousModule ) { - QUnit.moduleDone( { - 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 }; - QUnit.moduleStart( { - name: this.module - } ); - } - - config.current = this; - this.testEnvironment = extend({ - setup: function() {}, - teardown: function() {} - }, this.moduleTestEnvironment); - if (this.testEnvironmentArg) { - extend(this.testEnvironment, this.testEnvironmentArg); - } - - QUnit.testStart( { - name: this.testName - } ); - - // allow utility functions to access the current test environment - // TODO why?? - QUnit.current_testEnvironment = this.testEnvironment; - - try { - if ( !config.pollution ) { - saveGlobal(); - } - - this.testEnvironment.setup.call(this.testEnvironment); - } catch(e) { - QUnit.ok( false, "Setup failed on " + this.testName + ": " + e.message ); - } - }, - run: function() { - if ( this.async ) { - QUnit.stop(); - } - - if ( config.notrycatch ) { - this.callback.call(this.testEnvironment); - return; - } - try { - this.callback.call(this.testEnvironment); - } catch(e) { - fail("Test " + this.testName + " died, exception and test follows", e, this.callback); - QUnit.ok( false, "Died on test #" + (this.assertions.length + 1) + ": " + e.message + " - " + QUnit.jsDump.parse(e) ); - // else next test will carry the responsibility - saveGlobal(); - - // Restart the tests if they're blocking - if ( config.blocking ) { - start(); - } - } - }, - teardown: function() { - try { - this.testEnvironment.teardown.call(this.testEnvironment); - checkPollution(); - } catch(e) { - QUnit.ok( false, "Teardown failed on " + this.testName + ": " + e.message ); - } - }, - finish: function() { - if ( this.expected && this.expected != this.assertions.length ) { - QUnit.ok( false, "Expected " + this.expected + " assertions, but " + this.assertions.length + " were run" ); - } - - var good = 0, bad = 0, - tests = id("qunit-tests"); - - config.stats.all += this.assertions.length; - config.moduleStats.all += this.assertions.length; - - if ( tests ) { - var ol = document.createElement("ol"); - - for ( var i = 0; i < this.assertions.length; i++ ) { - var assertion = this.assertions[i]; - - var 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-" + this.module + "-" + this.testName, bad); - } else { - sessionStorage.removeItem("qunit-" + this.module + "-" + this.testName); - } - } - - if (bad == 0) { - ol.style.display = "none"; - } - - var b = document.createElement("strong"); - b.innerHTML = this.name + " <b class='counts'>(<b class='failed'>" + bad + "</b>, <b class='passed'>" + good + "</b>, " + this.assertions.length + ")</b>"; - - var a = document.createElement("a"); - a.innerHTML = "Rerun"; - a.href = QUnit.url({ filter: getText([b]).replace(/\([^)]+\)$/, "").replace(/(^\s*|\s*$)/g, "") }); - - addEvent(b, "click", function() { - var next = b.nextSibling.nextSibling, - display = next.style.display; - next.style.display = display === "none" ? "block" : "none"; - }); - - 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({ filter: getText([target]).replace(/\([^)]+\)$/, "").replace(/(^\s*|\s*$)/g, "") }); - } - }); - - var li = id(this.id); - li.className = bad ? "fail" : "pass"; - li.removeChild( li.firstChild ); - li.appendChild( b ); - li.appendChild( a ); - li.appendChild( ol ); - - } else { - for ( var i = 0; i < this.assertions.length; i++ ) { - if ( !this.assertions[i].result ) { - bad++; - config.stats.bad++; - config.moduleStats.bad++; - } - } - } - - try { - QUnit.reset(); - } catch(e) { - fail("reset() failed, following Test " + this.testName + ", exception and reset fn follows", e, QUnit.reset); - } - - QUnit.testDone( { - name: this.testName, - failed: bad, - passed: this.assertions.length - bad, - total: this.assertions.length - } ); - }, - - queue: function() { - var 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(); - }); - } - // defer when previous test run passed, if storage is available - var bad = QUnit.config.reorder && defined.sessionStorage && +sessionStorage.getItem("qunit-" + this.module + "-" + this.testName); - if (bad) { - run(); - } else { - synchronize(run); - }; - } - -}; - -var QUnit = { - - // call on start of module test to prepend name to all tests - module: function(name, testEnvironment) { - config.currentModule = name; - config.currentModuleTestEnviroment = testEnvironment; - }, - - asyncTest: function(testName, expected, callback) { - if ( arguments.length === 2 ) { - callback = expected; - expected = 0; - } - - QUnit.test(testName, expected, callback, true); - }, - - test: function(testName, expected, callback, async) { - var name = '<span class="test-name">' + testName + '</span>', testEnvironmentArg; - - if ( arguments.length === 2 ) { - callback = expected; - expected = null; - } - // is 2nd argument a testEnvironment? - if ( expected && typeof expected === 'object') { - testEnvironmentArg = expected; - expected = null; - } - - if ( config.currentModule ) { - name = '<span class="module-name">' + config.currentModule + "</span>: " + name; - } - - if ( !validTest(config.currentModule + ": " + testName) ) { - return; - } - - var test = new Test(name, testName, expected, testEnvironmentArg, async, callback); - test.module = config.currentModule; - test.moduleTestEnvironment = config.currentModuleTestEnviroment; - 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) { - config.current.expected = asserts; - }, - - /** - * Asserts true. - * @example ok( "asdfasdf".length > 5, "There must be at least 5 chars" ); - */ - ok: function(a, msg) { - a = !!a; - var details = { - result: a, - message: msg - }; - msg = escapeHtml(msg); - QUnit.log(details); - config.current.assertions.push({ - result: a, - message: msg - }); - }, - - /** - * Checks that the first two arguments are equal, with an optional message. - * Prints out both actual and expected values. - * - * Prefered to ok( actual == expected, message ) - * - * @example equal( format("Received {0} bytes.", 2), "Received 2 bytes." ); - * - * @param Object actual - * @param Object expected - * @param String message (optional) - */ - equal: function(actual, expected, message) { - QUnit.push(expected == actual, actual, expected, message); - }, - - notEqual: function(actual, expected, message) { - QUnit.push(expected != actual, actual, expected, message); - }, - - deepEqual: function(actual, expected, message) { - QUnit.push(QUnit.equiv(actual, expected), actual, expected, message); - }, - - notDeepEqual: function(actual, expected, message) { - QUnit.push(!QUnit.equiv(actual, expected), actual, expected, message); - }, - - strictEqual: function(actual, expected, message) { - QUnit.push(expected === actual, actual, expected, message); - }, - - notStrictEqual: function(actual, expected, message) { - QUnit.push(expected !== actual, actual, expected, message); - }, - - raises: function(block, expected, message) { - var actual, ok = false; - - if (typeof expected === 'string') { - message = expected; - expected = null; - } - - try { - block(); - } catch (e) { - actual = e; - } - - if (actual) { - // we don't want to validate thrown error - if (!expected) { - ok = true; - // expected is a regexp - } else if (QUnit.objectType(expected) === "regexp") { - ok = expected.test(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) { - ok = true; - } - } - - QUnit.ok(ok, message); - }, - - start: function() { - config.semaphore--; - if (config.semaphore > 0) { - // don't start until equal number of stop-calls - return; - } - if (config.semaphore < 0) { - // ignore if start is called more often then stop - config.semaphore = 0; - } - // 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(); - }, 13); - } else { - config.blocking = false; - process(); - } - }, - - stop: function(timeout) { - config.semaphore++; - config.blocking = true; - - if ( timeout && defined.setTimeout ) { - clearTimeout(config.timeout); - config.timeout = window.setTimeout(function() { - QUnit.ok( false, "Test timed out" ); - QUnit.start(); - }, timeout); - } - } -}; - -// Backwards compatibility, deprecated -QUnit.equals = QUnit.equal; -QUnit.same = QUnit.deepEqual; - -// Maintain internal state -var 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, - - urlConfig: ['noglobals', 'notrycatch'] -}; - -// Load paramaters -(function() { - var location = window.location || { search: "", protocol: "file:" }, - params = location.search.slice( 1 ).split( "&" ), - length = params.length, - urlParams = {}, - current; - - if ( params[ 0 ] ) { - for ( var 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; - config.filter = urlParams.filter; - - // Figure out if we're running the tests from a server or not - QUnit.isLocal = !!(location.protocol === 'file:'); -})(); - -// Expose the API as global variables, unless an 'exports' -// object exists, in that case we assume we're in CommonJS -if ( typeof exports === "undefined" || typeof require === "undefined" ) { - extend(window, QUnit); - window.QUnit = QUnit; -} else { - extend(exports, QUnit); - exports.QUnit = QUnit; -} - -// define these after exposing globals to keep them in these QUnit namespace only -extend(QUnit, { - 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: 0 - }); - - var 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...<br/> '; - } - }, - - /** - * Resets the test setup. Useful for tests that modify the DOM. - * - * If jQuery is available, uses jQuery's html(), otherwise just innerHTML. - */ - reset: function() { - if ( window.jQuery ) { - jQuery( "#qunit-fixture" ).html( config.fixture ); - } else { - var main = id( 'qunit-fixture' ); - if ( main ) { - main.innerHTML = config.fixture; - } - } - }, - - /** - * Trigger an event on an element. - * - * @example triggerEvent( document.body, "click" ); - * - * @param DOMElement elem - * @param String type - */ - 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 type = Object.prototype.toString.call( obj ) - .match(/^\[object\s(.*)\]$/)[1] || ''; - - switch (type) { - case 'Number': - if (isNaN(obj)) { - return "nan"; - } else { - 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) { - var details = { - result: result, - message: message, - actual: actual, - expected: expected - }; - - message = escapeHtml(message) || (result ? "okay" : "failed"); - message = '<span class="test-message">' + message + "</span>"; - expected = escapeHtml(QUnit.jsDump.parse(expected)); - actual = escapeHtml(QUnit.jsDump.parse(actual)); - var output = message + '<table><tr class="test-expected"><th>Expected: </th><td><pre>' + expected + '</pre></td></tr>'; - if (actual != expected) { - output += '<tr class="test-actual"><th>Result: </th><td><pre>' + actual + '</pre></td></tr>'; - output += '<tr class="test-diff"><th>Diff: </th><td><pre>' + QUnit.diff(expected, actual) +'</pre></td></tr>'; - } - if (!result) { - var source = sourceFromStacktrace(); - if (source) { - details.source = source; - output += '<tr class="test-source"><th>Source: </th><td><pre>' + escapeHtml(source) + '</pre></td></tr>'; - } - } - output += "</table>"; - - QUnit.log(details); - - config.current.assertions.push({ - result: !!result, - message: output - }); - }, - - url: function( params ) { - params = extend( extend( {}, QUnit.urlParams ), params ); - var querystring = "?", - key; - for ( key in params ) { - querystring += encodeURIComponent( key ) + "=" + - encodeURIComponent( params[ key ] ) + "&"; - } - return window.location.pathname + querystring.slice( 0, -1 ); - }, - - extend: extend, - id: id, - addEvent: addEvent, - - // Logging callbacks; all receive a single argument with the listed properties - // run test/logs.html for any related changes - begin: function() {}, - // done: { failed, passed, total, runtime } - done: function() {}, - // log: { result, actual, expected, message } - log: function() {}, - // testStart: { name } - testStart: function() {}, - // testDone: { name, failed, passed, total } - testDone: function() {}, - // moduleStart: { name } - moduleStart: function() {}, - // moduleDone: { name, failed, passed, total } - moduleDone: function() {} -}); - -if ( typeof document === "undefined" || document.readyState === "complete" ) { - config.autorun = true; -} - -QUnit.load = function() { - QUnit.begin({}); - - // Initialize the config, saving the execution queue - var oldconfig = extend({}, config); - QUnit.init(); - extend(config, oldconfig); - - config.blocking = false; - - var urlConfigHtml = '', len = config.urlConfig.length; - for ( var i = 0, val; i < len, val = config.urlConfig[i]; i++ ) { - config[val] = QUnit.urlParams[val]; - urlConfigHtml += '<label><input name="' + val + '" type="checkbox"' + ( config[val] ? ' checked="checked"' : '' ) + '>' + val + '</label>'; - } - - var userAgent = id("qunit-userAgent"); - if ( userAgent ) { - userAgent.innerHTML = navigator.userAgent; - } - var banner = id("qunit-header"); - if ( banner ) { - banner.innerHTML = '<a href="' + QUnit.url({ filter: undefined }) + '"> ' + banner.innerHTML + '</a> ' + urlConfigHtml; - addEvent( banner, "change", function( event ) { - var params = {}; - params[ event.target.name ] = event.target.checked ? true : undefined; - window.location = QUnit.url( params ); - }); - } - - var toolbar = id("qunit-testrunner-toolbar"); - if ( toolbar ) { - var filter = document.createElement("input"); - filter.type = "checkbox"; - filter.id = "qunit-filter-pass"; - addEvent( filter, "click", function() { - var ol = document.getElementById("qunit-tests"); - if ( filter.checked ) { - ol.className = ol.className + " hidepass"; - } else { - var 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; - var ol = document.getElementById("qunit-tests"); - ol.className = ol.className + " hidepass"; - } - toolbar.appendChild( filter ); - - var label = document.createElement("label"); - label.setAttribute("for", "qunit-filter-pass"); - label.innerHTML = "Hide passed tests"; - toolbar.appendChild( label ); - } - - var main = id('qunit-fixture'); - if ( main ) { - config.fixture = main.innerHTML; - } - - if (config.autostart) { - QUnit.start(); - } -}; - -addEvent(window, "load", QUnit.load); - -function done() { - config.autorun = true; - - // Log the last module results - if ( config.currentModule ) { - QUnit.moduleDone( { - name: config.currentModule, - failed: config.moduleStats.bad, - passed: config.moduleStats.all - config.moduleStats.bad, - total: config.moduleStats.all - } ); - } - - var 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.<br/>', - '<span class="passed">', - passed, - '</span> tests of <span class="total">', - config.stats.all, - '</span> passed, <span class="failed">', - config.stats.bad, - '</span> 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(" "); - } - - QUnit.done( { - failed: config.stats.bad, - passed: passed, - total: config.stats.all, - runtime: runtime - } ); -} - -function validTest( name ) { - var filter = config.filter, - run = false; - - if ( !filter ) { - return true; - } - - var not = filter.charAt( 0 ) === "!"; - if ( not ) { - filter = filter.slice( 1 ); - } - - if ( name.indexOf( filter ) !== -1 ) { - return !not; - } - - if ( not ) { - run = true; - } - - return run; -} - -// so far supports only Firefox, Chrome and Opera (buggy) -// could be extended in the future to use something like https://github.com/csnover/TraceKit -function sourceFromStacktrace() { - try { - throw new Error(); - } catch ( e ) { - if (e.stacktrace) { - // Opera - return e.stacktrace.split("\n")[6]; - } else if (e.stack) { - // Firefox, Chrome - return e.stack.split("\n")[4]; - } else if (e.sourceURL) { - // Safari, PhantomJS - // TODO sourceURL points at the 'throw new Error' line above, useless - //return e.sourceURL + ":" + e.line; - } - } -} - -function escapeHtml(s) { - if (!s) { - return ""; - } - s = s + ""; - return s.replace(/[\&"<>\\]/g, function(s) { - switch(s) { - case "&": return "&"; - case "\\": return "\\\\"; - case '"': return '\"'; - case "<": return "<"; - case ">": return ">"; - default: return s; - } - }); -} - -function synchronize( callback ) { - config.queue.push( callback ); - - if ( config.autorun && !config.blocking ) { - process(); - } -} - -function process() { - var start = (new Date()).getTime(); - - while ( config.queue.length && !config.blocking ) { - if ( config.updateRate <= 0 || (((new Date()).getTime() - start) < config.updateRate) ) { - config.queue.shift()(); - } else { - window.setTimeout( process, 13 ); - break; - } - } - if (!config.blocking && !config.queue.length) { - done(); - } -} - -function saveGlobal() { - config.pollution = []; - - if ( config.noglobals ) { - for ( var key in window ) { - config.pollution.push( key ); - } - } -} - -function checkPollution( name ) { - var old = config.pollution; - saveGlobal(); - - var newGlobals = diff( config.pollution, old ); - if ( newGlobals.length > 0 ) { - ok( false, "Introduced global variable(s): " + newGlobals.join(", ") ); - } - - var deletedGlobals = diff( old, config.pollution ); - if ( deletedGlobals.length > 0 ) { - ok( false, "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 result = a.slice(); - for ( var i = 0; i < result.length; i++ ) { - for ( var j = 0; j < b.length; j++ ) { - if ( result[i] === b[j] ) { - result.splice(i, 1); - i--; - break; - } - } - } - return result; -} - -function fail(message, exception, callback) { - if ( typeof console !== "undefined" && console.error && console.warn ) { - console.error(message); - console.error(exception); - console.warn(callback.toString()); - - } else if ( window.opera && opera.postError ) { - opera.postError(message, exception, callback.toString); - } -} - -function extend(a, b) { - for ( var prop in b ) { - if ( b[prop] === undefined ) { - delete a[prop]; - } else { - a[prop] = b[prop]; - } - } - - return a; -} - -function addEvent(elem, type, fn) { - if ( elem.addEventListener ) { - elem.addEventListener( type, fn, false ); - } else if ( elem.attachEvent ) { - elem.attachEvent( "on" + type, fn ); - } else { - fn(); - } -} - -function id(name) { - return !!(typeof document !== "undefined" && document && document.getElementById) && - document.getElementById( name ); -} - -// Test for equality any JavaScript type. -// Discussions and reference: http://philrathe.com/articles/equiv -// Test suites: http://philrathe.com/tests/equiv -// Author: Philippe Rathé <prathe@gmail.com> -QUnit.equiv = function () { - - var innerEquiv; // the real equiv function - var callers = []; // stack to decide between skip/abort functions - var parents = []; // stack to avoiding loops from circular referencing - - // 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 - } - } - } - - var callbacks = function () { - - // for string, boolean, number and null - function useStrictEquality(b, a) { - 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" - && a.source === b.source && // the regex itself - a.global === b.global && // and its modifers - // (gmi) ... - a.ignoreCase === b.ignoreCase - && a.multiline === b.multiline; - }, - - // - 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, loop; - var len; - - // 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; - var eq = true; // unless we can proove it - var aProperties = [], bProperties = []; // collection of - // strings - - // comparing constructors is more strict than using - // instanceof - if (a.constructor !== b.constructor) { - 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]) - loop = true; // don't go down the same path - // twice - } - 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 = Array.prototype.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 = Array(i); - this.up(); - while ( i-- ) - ret[i] = this.parse( arr[i] , undefined , stack); - this.down(); - return join( '[', ret, ']' ); - }; - - var reName = /^function (\w+)/; - - var jsDump = { - parse:function( obj, type, stack ) { //type is used mostly internally, you can fix a (custom)type in advance - stack = stack || [ ]; - var parser = this.parsers[ type || this.typeOf(obj) ]; - type = typeof parser; - var inStack = inArray(obj, stack); - if (inStack != -1) { - return 'recursion('+(inStack - stack.length)+')'; - } - //else - if (type == 'function') { - stack.push(obj); - var res = parser.call( this, obj, stack ); - stack.pop(); - return res; - } - // else - 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 (typeof obj === "object" && typeof obj.length === "number" && obj.length >= 0) { - type = "array"; - } else { - type = typeof obj; - } - return type; - }, - separator:function() { - return this.multiline ? this.HTML ? '<br />' : '\n' : this.HTML ? ' ' : ' '; - }, - indent:function( extra ) {// extra can be a number, shortcut for increasing-calling-decreasing - if ( !this.multiline ) - return ''; - var chr = this.indentChar; - if ( this.HTML ) - chr = chr.replace(/\t/g,' ').replace(/ /g,' '); - return 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:'[ERROR]', //when no parser is found, shouldn't happen - unknown: '[Unknown]', - 'null':'null', - 'undefined':'undefined', - 'function':function( fn ) { - var ret = 'function', - name = 'name' in fn ? fn.name : (reName.exec(fn)||[])[1];//functions never have name in IE - 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 = [ ]; - QUnit.jsDump.up(); - for ( var key in map ) { - var 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 open = QUnit.jsDump.HTML ? '<' : '<', - close = QUnit.jsDump.HTML ? '>' : '>'; - - var tag = node.nodeName.toLowerCase(), - ret = open + tag; - - for ( var a in QUnit.jsDump.DOMAttrs ) { - var val = node[QUnit.jsDump.DOMAttrs[a]]; - if ( val ) - ret += ' ' + a + '=' + QUnit.jsDump.parse( val, 'attribute' ); - } - return ret + close + open + '/' + tag + close; - }, - functionArgs:function( fn ) {//function calls it internally, it's the arguments part of the function - var l = fn.length; - if ( !l ) return ''; - - var args = Array(l); - while ( l-- ) - args[l] = String.fromCharCode(97+l);//97 is 'a' - return ' ' + args.join(', ') + ' '; - }, - key:quote, //object calls it internally, the key part of an item in a map - functionCode:'[code]', //function calls it internally, it's the content of the function - attribute:quote, //node calls it internally, it's an html attribute value - string:quote, - date:quote, - regexp:literal, //regex - number:literal, - 'boolean':literal - }, - DOMAttrs:{//attributes to dump from nodes, name=>realName - id:'id', - name:'name', - 'class':'className' - }, - HTML:false,//if true, entities are escaped ( <, >, \t, space and \n ) - indentChar:' ',//indentation unit - multiline:true //if true, items in a collection, are separated by a \n, else just a space. - }; - - return jsDump; -})(); - -// from Sizzle.js -function getText( elems ) { - var ret = "", elem; - - for ( var i = 0; elems[i]; i++ ) { - elem = elems[i]; - - // Get the text from text nodes and CDATA nodes - if ( elem.nodeType === 3 || elem.nodeType === 4 ) { - ret += elem.nodeValue; - - // Traverse everything else, except comment nodes - } else if ( elem.nodeType !== 8 ) { - ret += getText( elem.childNodes ); - } - } - - return ret; -}; - -//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 <del>brown </del> fox <del>jumped </del><ins>jumps </ins> over" - */ -QUnit.diff = (function() { - function diff(o, n) { - var ns = {}; - var os = {}; - - for (var i = 0; i < n.length; i++) { - if (ns[n[i]] == null) - ns[n[i]] = { - rows: [], - o: null - }; - ns[n[i]].rows.push(i); - } - - for (var i = 0; i < o.length; i++) { - if (os[o[i]] == null) - os[o[i]] = { - rows: [], - n: null - }; - os[o[i]].rows.push(i); - } - - for (var i in ns) { - if (ns[i].rows.length == 1 && typeof(os[i]) != "undefined" && 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 (var 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 (var 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 out = diff(o == "" ? [] : o.split(/\s+/), n == "" ? [] : n.split(/\s+/)); - - var str = ""; - - var oSpace = o.match(/\s+/g); - if (oSpace == null) { - oSpace = [" "]; - } - else { - oSpace.push(" "); - } - var nSpace = n.match(/\s+/g); - if (nSpace == null) { - nSpace = [" "]; - } - else { - nSpace.push(" "); - } - - if (out.n.length == 0) { - for (var i = 0; i < out.o.length; i++) { - str += '<del>' + out.o[i] + oSpace[i] + "</del>"; - } - } - else { - if (out.n[0].text == null) { - for (n = 0; n < out.o.length && out.o[n].text == null; n++) { - str += '<del>' + out.o[n] + oSpace[n] + "</del>"; - } - } - - for (var i = 0; i < out.n.length; i++) { - if (out.n[i].text == null) { - str += '<ins>' + out.n[i] + nSpace[i] + "</ins>"; - } - else { - var pre = ""; - - for (n = out.n[i].row + 1; n < out.o.length && out.o[n].text == null; n++) { - pre += '<del>' + out.o[n] + oSpace[n] + "</del>"; - } - str += " " + out.n[i].text + nSpace[i] + pre; - } - } - } - - return str; - }; -})(); - -})(this); \ No newline at end of file diff --git a/src/main/webapp/bower_components/bootstrap/less/accordion.less b/src/main/webapp/bower_components/bootstrap/less/accordion.less deleted file mode 100644 index d63523bc..00000000 --- a/src/main/webapp/bower_components/bootstrap/less/accordion.less +++ /dev/null @@ -1,34 +0,0 @@ -// -// Accordion -// -------------------------------------------------- - - -// Parent container -.accordion { - margin-bottom: @baseLineHeight; -} - -// Group == heading + body -.accordion-group { - margin-bottom: 2px; - border: 1px solid #e5e5e5; - .border-radius(@baseBorderRadius); -} -.accordion-heading { - border-bottom: 0; -} -.accordion-heading .accordion-toggle { - display: block; - padding: 8px 15px; -} - -// General toggle styles -.accordion-toggle { - cursor: pointer; -} - -// Inner needs the styles because you can't animate properly with any styles on the element -.accordion-inner { - padding: 9px 15px; - border-top: 1px solid #e5e5e5; -} diff --git a/src/main/webapp/bower_components/bootstrap/less/alerts.less b/src/main/webapp/bower_components/bootstrap/less/alerts.less deleted file mode 100644 index 0116b191..00000000 --- a/src/main/webapp/bower_components/bootstrap/less/alerts.less +++ /dev/null @@ -1,79 +0,0 @@ -// -// Alerts -// -------------------------------------------------- - - -// Base styles -// ------------------------- - -.alert { - padding: 8px 35px 8px 14px; - margin-bottom: @baseLineHeight; - text-shadow: 0 1px 0 rgba(255,255,255,.5); - background-color: @warningBackground; - border: 1px solid @warningBorder; - .border-radius(@baseBorderRadius); -} -.alert, -.alert h4 { - // Specified for the h4 to prevent conflicts of changing @headingsColor - color: @warningText; -} -.alert h4 { - margin: 0; -} - -// Adjust close link position -.alert .close { - position: relative; - top: -2px; - right: -21px; - line-height: @baseLineHeight; -} - - -// Alternate styles -// ------------------------- - -.alert-success { - background-color: @successBackground; - border-color: @successBorder; - color: @successText; -} -.alert-success h4 { - color: @successText; -} -.alert-danger, -.alert-error { - background-color: @errorBackground; - border-color: @errorBorder; - color: @errorText; -} -.alert-danger h4, -.alert-error h4 { - color: @errorText; -} -.alert-info { - background-color: @infoBackground; - border-color: @infoBorder; - color: @infoText; -} -.alert-info h4 { - color: @infoText; -} - - -// Block alerts -// ------------------------- - -.alert-block { - padding-top: 14px; - padding-bottom: 14px; -} -.alert-block > p, -.alert-block > ul { - margin-bottom: 0; -} -.alert-block p + p { - margin-top: 5px; -} diff --git a/src/main/webapp/bower_components/bootstrap/less/bootstrap.less b/src/main/webapp/bower_components/bootstrap/less/bootstrap.less deleted file mode 100644 index 47af2c4e..00000000 --- a/src/main/webapp/bower_components/bootstrap/less/bootstrap.less +++ /dev/null @@ -1,63 +0,0 @@ -/*! - * Bootstrap v2.3.0 - * - * Copyright 2012 Twitter, Inc - * Licensed under the Apache License v2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Designed and built with all the love in the world @twitter by @mdo and @fat. - */ - -// Core variables and mixins -@import "variables.less"; // Modify this for custom colors, font-sizes, etc -@import "mixins.less"; - -// CSS Reset -@import "reset.less"; - -// Grid system and page structure -@import "scaffolding.less"; -@import "grid.less"; -@import "layouts.less"; - -// Base CSS -@import "type.less"; -@import "code.less"; -@import "forms.less"; -@import "tables.less"; - -// Components: common -@import "sprites.less"; -@import "dropdowns.less"; -@import "wells.less"; -@import "component-animations.less"; -@import "close.less"; - -// Components: Buttons & Alerts -@import "buttons.less"; -@import "button-groups.less"; -@import "alerts.less"; // Note: alerts share common CSS with buttons and thus have styles in buttons.less - -// Components: Nav -@import "navs.less"; -@import "navbar.less"; -@import "breadcrumbs.less"; -@import "pagination.less"; -@import "pager.less"; - -// Components: Popovers -@import "modals.less"; -@import "tooltip.less"; -@import "popovers.less"; - -// Components: Misc -@import "thumbnails.less"; -@import "media.less"; -@import "labels-badges.less"; -@import "progress-bars.less"; -@import "accordion.less"; -@import "carousel.less"; -@import "hero-unit.less"; - -// Utility classes -@import "utilities.less"; // Has to be last to override when necessary diff --git a/src/main/webapp/bower_components/bootstrap/less/breadcrumbs.less b/src/main/webapp/bower_components/bootstrap/less/breadcrumbs.less deleted file mode 100644 index f753df6b..00000000 --- a/src/main/webapp/bower_components/bootstrap/less/breadcrumbs.less +++ /dev/null @@ -1,24 +0,0 @@ -// -// Breadcrumbs -// -------------------------------------------------- - - -.breadcrumb { - padding: 8px 15px; - margin: 0 0 @baseLineHeight; - list-style: none; - background-color: #f5f5f5; - .border-radius(@baseBorderRadius); - > li { - display: inline-block; - .ie7-inline-block(); - text-shadow: 0 1px 0 @white; - > .divider { - padding: 0 5px; - color: #ccc; - } - } - > .active { - color: @grayLight; - } -} diff --git a/src/main/webapp/bower_components/bootstrap/less/button-groups.less b/src/main/webapp/bower_components/bootstrap/less/button-groups.less deleted file mode 100644 index 55cdc603..00000000 --- a/src/main/webapp/bower_components/bootstrap/less/button-groups.less +++ /dev/null @@ -1,229 +0,0 @@ -// -// Button groups -// -------------------------------------------------- - - -// Make the div behave like a button -.btn-group { - position: relative; - display: inline-block; - .ie7-inline-block(); - font-size: 0; // remove as part 1 of font-size inline-block hack - vertical-align: middle; // match .btn alignment given font-size hack above - white-space: nowrap; // prevent buttons from wrapping when in tight spaces (e.g., the table on the tests page) - .ie7-restore-left-whitespace(); -} - -// Space out series of button groups -.btn-group + .btn-group { - margin-left: 5px; -} - -// Optional: Group multiple button groups together for a toolbar -.btn-toolbar { - font-size: 0; // Hack to remove whitespace that results from using inline-block - margin-top: @baseLineHeight / 2; - margin-bottom: @baseLineHeight / 2; - > .btn + .btn, - > .btn-group + .btn, - > .btn + .btn-group { - margin-left: 5px; - } -} - -// Float them, remove border radius, then re-add to first and last elements -.btn-group > .btn { - position: relative; - .border-radius(0); -} -.btn-group > .btn + .btn { - margin-left: -1px; -} -.btn-group > .btn, -.btn-group > .dropdown-menu, -.btn-group > .popover { - font-size: @baseFontSize; // redeclare as part 2 of font-size inline-block hack -} - -// Reset fonts for other sizes -.btn-group > .btn-mini { - font-size: @fontSizeMini; -} -.btn-group > .btn-small { - font-size: @fontSizeSmall; -} -.btn-group > .btn-large { - font-size: @fontSizeLarge; -} - -// Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match -.btn-group > .btn:first-child { - margin-left: 0; - .border-top-left-radius(@baseBorderRadius); - .border-bottom-left-radius(@baseBorderRadius); -} -// Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it -.btn-group > .btn:last-child, -.btn-group > .dropdown-toggle { - .border-top-right-radius(@baseBorderRadius); - .border-bottom-right-radius(@baseBorderRadius); -} -// Reset corners for large buttons -.btn-group > .btn.large:first-child { - margin-left: 0; - .border-top-left-radius(@borderRadiusLarge); - .border-bottom-left-radius(@borderRadiusLarge); -} -.btn-group > .btn.large:last-child, -.btn-group > .large.dropdown-toggle { - .border-top-right-radius(@borderRadiusLarge); - .border-bottom-right-radius(@borderRadiusLarge); -} - -// On hover/focus/active, bring the proper btn to front -.btn-group > .btn:hover, -.btn-group > .btn:focus, -.btn-group > .btn:active, -.btn-group > .btn.active { - z-index: 2; -} - -// On active and open, don't show outline -.btn-group .dropdown-toggle:active, -.btn-group.open .dropdown-toggle { - outline: 0; -} - - - -// Split button dropdowns -// ---------------------- - -// Give the line between buttons some depth -.btn-group > .btn + .dropdown-toggle { - padding-left: 8px; - padding-right: 8px; - .box-shadow(~"inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05)"); - *padding-top: 5px; - *padding-bottom: 5px; -} -.btn-group > .btn-mini + .dropdown-toggle { - padding-left: 5px; - padding-right: 5px; - *padding-top: 2px; - *padding-bottom: 2px; -} -.btn-group > .btn-small + .dropdown-toggle { - *padding-top: 5px; - *padding-bottom: 4px; -} -.btn-group > .btn-large + .dropdown-toggle { - padding-left: 12px; - padding-right: 12px; - *padding-top: 7px; - *padding-bottom: 7px; -} - -.btn-group.open { - - // The clickable button for toggling the menu - // Remove the gradient and set the same inset shadow as the :active state - .dropdown-toggle { - background-image: none; - .box-shadow(~"inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05)"); - } - - // Keep the hover's background when dropdown is open - .btn.dropdown-toggle { - background-color: @btnBackgroundHighlight; - } - .btn-primary.dropdown-toggle { - background-color: @btnPrimaryBackgroundHighlight; - } - .btn-warning.dropdown-toggle { - background-color: @btnWarningBackgroundHighlight; - } - .btn-danger.dropdown-toggle { - background-color: @btnDangerBackgroundHighlight; - } - .btn-success.dropdown-toggle { - background-color: @btnSuccessBackgroundHighlight; - } - .btn-info.dropdown-toggle { - background-color: @btnInfoBackgroundHighlight; - } - .btn-inverse.dropdown-toggle { - background-color: @btnInverseBackgroundHighlight; - } -} - - -// Reposition the caret -.btn .caret { - margin-top: 8px; - margin-left: 0; -} -// Carets in other button sizes -.btn-large .caret { - margin-top: 6px; -} -.btn-large .caret { - border-left-width: 5px; - border-right-width: 5px; - border-top-width: 5px; -} -.btn-mini .caret, -.btn-small .caret { - margin-top: 8px; -} -// Upside down carets for .dropup -.dropup .btn-large .caret { - border-bottom-width: 5px; -} - - - -// Account for other colors -.btn-primary, -.btn-warning, -.btn-danger, -.btn-info, -.btn-success, -.btn-inverse { - .caret { - border-top-color: @white; - border-bottom-color: @white; - } -} - - - -// Vertical button groups -// ---------------------- - -.btn-group-vertical { - display: inline-block; // makes buttons only take up the width they need - .ie7-inline-block(); -} -.btn-group-vertical > .btn { - display: block; - float: none; - max-width: 100%; - .border-radius(0); -} -.btn-group-vertical > .btn + .btn { - margin-left: 0; - margin-top: -1px; -} -.btn-group-vertical > .btn:first-child { - .border-radius(@baseBorderRadius @baseBorderRadius 0 0); -} -.btn-group-vertical > .btn:last-child { - .border-radius(0 0 @baseBorderRadius @baseBorderRadius); -} -.btn-group-vertical > .btn-large:first-child { - .border-radius(@borderRadiusLarge @borderRadiusLarge 0 0); -} -.btn-group-vertical > .btn-large:last-child { - .border-radius(0 0 @borderRadiusLarge @borderRadiusLarge); -} diff --git a/src/main/webapp/bower_components/bootstrap/less/buttons.less b/src/main/webapp/bower_components/bootstrap/less/buttons.less deleted file mode 100644 index 4cd4d862..00000000 --- a/src/main/webapp/bower_components/bootstrap/less/buttons.less +++ /dev/null @@ -1,228 +0,0 @@ -// -// Buttons -// -------------------------------------------------- - - -// Base styles -// -------------------------------------------------- - -// Core -.btn { - display: inline-block; - .ie7-inline-block(); - padding: 4px 12px; - margin-bottom: 0; // For input.btn - font-size: @baseFontSize; - line-height: @baseLineHeight; - text-align: center; - vertical-align: middle; - cursor: pointer; - .buttonBackground(@btnBackground, @btnBackgroundHighlight, @grayDark, 0 1px 1px rgba(255,255,255,.75)); - border: 1px solid @btnBorder; - *border: 0; // Remove the border to prevent IE7's black border on input:focus - border-bottom-color: darken(@btnBorder, 10%); - .border-radius(@baseBorderRadius); - .ie7-restore-left-whitespace(); // Give IE7 some love - .box-shadow(~"inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05)"); - - // Hover/focus state - &:hover, - &:focus { - color: @grayDark; - text-decoration: none; - background-position: 0 -15px; - - // transition is only when going to hover/focus, otherwise the background - // behind the gradient (there for IE<=9 fallback) gets mismatched - .transition(background-position .1s linear); - } - - // Focus state for keyboard and accessibility - &:focus { - .tab-focus(); - } - - // Active state - &.active, - &:active { - background-image: none; - outline: 0; - .box-shadow(~"inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05)"); - } - - // Disabled state - &.disabled, - &[disabled] { - cursor: default; - background-image: none; - .opacity(65); - .box-shadow(none); - } - -} - - - -// Button Sizes -// -------------------------------------------------- - -// Large -.btn-large { - padding: @paddingLarge; - font-size: @fontSizeLarge; - .border-radius(@borderRadiusLarge); -} -.btn-large [class^="icon-"], -.btn-large [class*=" icon-"] { - margin-top: 4px; -} - -// Small -.btn-small { - padding: @paddingSmall; - font-size: @fontSizeSmall; - .border-radius(@borderRadiusSmall); -} -.btn-small [class^="icon-"], -.btn-small [class*=" icon-"] { - margin-top: 0; -} -.btn-mini [class^="icon-"], -.btn-mini [class*=" icon-"] { - margin-top: -1px; -} - -// Mini -.btn-mini { - padding: @paddingMini; - font-size: @fontSizeMini; - .border-radius(@borderRadiusSmall); -} - - -// Block button -// ------------------------- - -.btn-block { - display: block; - width: 100%; - padding-left: 0; - padding-right: 0; - .box-sizing(border-box); -} - -// Vertically space out multiple block buttons -.btn-block + .btn-block { - margin-top: 5px; -} - -// Specificity overrides -input[type="submit"], -input[type="reset"], -input[type="button"] { - &.btn-block { - width: 100%; - } -} - - - -// Alternate buttons -// -------------------------------------------------- - -// Provide *some* extra contrast for those who can get it -.btn-primary.active, -.btn-warning.active, -.btn-danger.active, -.btn-success.active, -.btn-info.active, -.btn-inverse.active { - color: rgba(255,255,255,.75); -} - -// Set the backgrounds -// ------------------------- -.btn-primary { - .buttonBackground(@btnPrimaryBackground, @btnPrimaryBackgroundHighlight); -} -// Warning appears are orange -.btn-warning { - .buttonBackground(@btnWarningBackground, @btnWarningBackgroundHighlight); -} -// Danger and error appear as red -.btn-danger { - .buttonBackground(@btnDangerBackground, @btnDangerBackgroundHighlight); -} -// Success appears as green -.btn-success { - .buttonBackground(@btnSuccessBackground, @btnSuccessBackgroundHighlight); -} -// Info appears as a neutral blue -.btn-info { - .buttonBackground(@btnInfoBackground, @btnInfoBackgroundHighlight); -} -// Inverse appears as dark gray -.btn-inverse { - .buttonBackground(@btnInverseBackground, @btnInverseBackgroundHighlight); -} - - -// Cross-browser Jank -// -------------------------------------------------- - -button.btn, -input[type="submit"].btn { - - // Firefox 3.6 only I believe - &::-moz-focus-inner { - padding: 0; - border: 0; - } - - // IE7 has some default padding on button controls - *padding-top: 3px; - *padding-bottom: 3px; - - &.btn-large { - *padding-top: 7px; - *padding-bottom: 7px; - } - &.btn-small { - *padding-top: 3px; - *padding-bottom: 3px; - } - &.btn-mini { - *padding-top: 1px; - *padding-bottom: 1px; - } -} - - -// Link buttons -// -------------------------------------------------- - -// Make a button look and behave like a link -.btn-link, -.btn-link:active, -.btn-link[disabled] { - background-color: transparent; - background-image: none; - .box-shadow(none); -} -.btn-link { - border-color: transparent; - cursor: pointer; - color: @linkColor; - .border-radius(0); -} -.btn-link:hover, -.btn-link:focus { - color: @linkColorHover; - text-decoration: underline; - background-color: transparent; -} -.btn-link[disabled]:hover, -.btn-link[disabled]:focus { - color: @grayDark; - text-decoration: none; -} diff --git a/src/main/webapp/bower_components/bootstrap/less/carousel.less b/src/main/webapp/bower_components/bootstrap/less/carousel.less deleted file mode 100644 index 55bc0501..00000000 --- a/src/main/webapp/bower_components/bootstrap/less/carousel.less +++ /dev/null @@ -1,158 +0,0 @@ -// -// Carousel -// -------------------------------------------------- - - -.carousel { - position: relative; - margin-bottom: @baseLineHeight; - line-height: 1; -} - -.carousel-inner { - overflow: hidden; - width: 100%; - position: relative; -} - -.carousel-inner { - - > .item { - display: none; - position: relative; - .transition(.6s ease-in-out left); - - // Account for jankitude on images - > img, - > a > img { - display: block; - line-height: 1; - } - } - - > .active, - > .next, - > .prev { display: block; } - - > .active { - left: 0; - } - - > .next, - > .prev { - position: absolute; - top: 0; - width: 100%; - } - - > .next { - left: 100%; - } - > .prev { - left: -100%; - } - > .next.left, - > .prev.right { - left: 0; - } - - > .active.left { - left: -100%; - } - > .active.right { - left: 100%; - } - -} - -// Left/right controls for nav -// --------------------------- - -.carousel-control { - position: absolute; - top: 40%; - left: 15px; - width: 40px; - height: 40px; - margin-top: -20px; - font-size: 60px; - font-weight: 100; - line-height: 30px; - color: @white; - text-align: center; - background: @grayDarker; - border: 3px solid @white; - .border-radius(23px); - .opacity(50); - - // we can't have this transition here - // because webkit cancels the carousel - // animation if you trip this while - // in the middle of another animation - // ;_; - // .transition(opacity .2s linear); - - // Reposition the right one - &.right { - left: auto; - right: 15px; - } - - // Hover/focus state - &:hover, - &:focus { - color: @white; - text-decoration: none; - .opacity(90); - } -} - -// Carousel indicator pips -// ----------------------------- -.carousel-indicators { - position: absolute; - top: 15px; - right: 15px; - z-index: 5; - margin: 0; - list-style: none; - - li { - display: block; - float: left; - width: 10px; - height: 10px; - margin-left: 5px; - text-indent: -999px; - background-color: #ccc; - background-color: rgba(255,255,255,.25); - border-radius: 5px; - } - .active { - background-color: #fff; - } -} - -// Caption for text below images -// ----------------------------- - -.carousel-caption { - position: absolute; - left: 0; - right: 0; - bottom: 0; - padding: 15px; - background: @grayDark; - background: rgba(0,0,0,.75); -} -.carousel-caption h4, -.carousel-caption p { - color: @white; - line-height: @baseLineHeight; -} -.carousel-caption h4 { - margin: 0 0 5px; -} -.carousel-caption p { - margin-bottom: 0; -} diff --git a/src/main/webapp/bower_components/bootstrap/less/close.less b/src/main/webapp/bower_components/bootstrap/less/close.less deleted file mode 100644 index 4c626bda..00000000 --- a/src/main/webapp/bower_components/bootstrap/less/close.less +++ /dev/null @@ -1,32 +0,0 @@ -// -// Close icons -// -------------------------------------------------- - - -.close { - float: right; - font-size: 20px; - font-weight: bold; - line-height: @baseLineHeight; - color: @black; - text-shadow: 0 1px 0 rgba(255,255,255,1); - .opacity(20); - &:hover, - &:focus { - color: @black; - text-decoration: none; - cursor: pointer; - .opacity(40); - } -} - -// Additional properties for button version -// iOS requires the button element instead of an anchor tag. -// If you want the anchor version, it requires `href="#"`. -button.close { - padding: 0; - cursor: pointer; - background: transparent; - border: 0; - -webkit-appearance: none; -} \ No newline at end of file diff --git a/src/main/webapp/bower_components/bootstrap/less/code.less b/src/main/webapp/bower_components/bootstrap/less/code.less deleted file mode 100644 index 266a926e..00000000 --- a/src/main/webapp/bower_components/bootstrap/less/code.less +++ /dev/null @@ -1,61 +0,0 @@ -// -// Code (inline and blocK) -// -------------------------------------------------- - - -// Inline and block code styles -code, -pre { - padding: 0 3px 2px; - #font > #family > .monospace; - font-size: @baseFontSize - 2; - color: @grayDark; - .border-radius(3px); -} - -// Inline code -code { - padding: 2px 4px; - color: #d14; - background-color: #f7f7f9; - border: 1px solid #e1e1e8; - white-space: nowrap; -} - -// Blocks of code -pre { - display: block; - padding: (@baseLineHeight - 1) / 2; - margin: 0 0 @baseLineHeight / 2; - font-size: @baseFontSize - 1; // 14px to 13px - line-height: @baseLineHeight; - word-break: break-all; - word-wrap: break-word; - white-space: pre; - white-space: pre-wrap; - background-color: #f5f5f5; - border: 1px solid #ccc; // fallback for IE7-8 - border: 1px solid rgba(0,0,0,.15); - .border-radius(@baseBorderRadius); - - // Make prettyprint styles more spaced out for readability - &.prettyprint { - margin-bottom: @baseLineHeight; - } - - // Account for some code outputs that place code tags in pre tags - code { - padding: 0; - color: inherit; - white-space: pre; - white-space: pre-wrap; - background-color: transparent; - border: 0; - } -} - -// Enable scrollable blocks of code -.pre-scrollable { - max-height: 340px; - overflow-y: scroll; -} \ No newline at end of file diff --git a/src/main/webapp/bower_components/bootstrap/less/component-animations.less b/src/main/webapp/bower_components/bootstrap/less/component-animations.less deleted file mode 100644 index d614263a..00000000 --- a/src/main/webapp/bower_components/bootstrap/less/component-animations.less +++ /dev/null @@ -1,22 +0,0 @@ -// -// Component animations -// -------------------------------------------------- - - -.fade { - opacity: 0; - .transition(opacity .15s linear); - &.in { - opacity: 1; - } -} - -.collapse { - position: relative; - height: 0; - overflow: hidden; - .transition(height .35s ease); - &.in { - height: auto; - } -} diff --git a/src/main/webapp/bower_components/bootstrap/less/dropdowns.less b/src/main/webapp/bower_components/bootstrap/less/dropdowns.less deleted file mode 100644 index bbfe3fd3..00000000 --- a/src/main/webapp/bower_components/bootstrap/less/dropdowns.less +++ /dev/null @@ -1,237 +0,0 @@ -// -// Dropdown menus -// -------------------------------------------------- - - -// Use the .menu class on any <li> element within the topbar or ul.tabs and you'll get some superfancy dropdowns -.dropup, -.dropdown { - position: relative; -} -.dropdown-toggle { - // The caret makes the toggle a bit too tall in IE7 - *margin-bottom: -3px; -} -.dropdown-toggle:active, -.open .dropdown-toggle { - outline: 0; -} - -// Dropdown arrow/caret -// -------------------- -.caret { - display: inline-block; - width: 0; - height: 0; - vertical-align: top; - border-top: 4px solid @black; - border-right: 4px solid transparent; - border-left: 4px solid transparent; - content: ""; -} - -// Place the caret -.dropdown .caret { - margin-top: 8px; - margin-left: 2px; -} - -// The dropdown menu (ul) -// ---------------------- -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: @zindexDropdown; - display: none; // none by default, but block on "open" of the menu - float: left; - min-width: 160px; - padding: 5px 0; - margin: 2px 0 0; // override default ul - list-style: none; - background-color: @dropdownBackground; - border: 1px solid #ccc; // Fallback for IE7-8 - border: 1px solid @dropdownBorder; - *border-right-width: 2px; - *border-bottom-width: 2px; - .border-radius(6px); - .box-shadow(0 5px 10px rgba(0,0,0,.2)); - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; - - // Aligns the dropdown menu to right - &.pull-right { - right: 0; - left: auto; - } - - // Dividers (basically an hr) within the dropdown - .divider { - .nav-divider(@dropdownDividerTop, @dropdownDividerBottom); - } - - // Links within the dropdown menu - > li > a { - display: block; - padding: 3px 20px; - clear: both; - font-weight: normal; - line-height: @baseLineHeight; - color: @dropdownLinkColor; - white-space: nowrap; - } -} - -// Hover/Focus state -// ----------- -.dropdown-menu > li > a:hover, -.dropdown-menu > li > a:focus, -.dropdown-submenu:hover > a, -.dropdown-submenu:focus > a { - text-decoration: none; - color: @dropdownLinkColorHover; - #gradient > .vertical(@dropdownLinkBackgroundHover, darken(@dropdownLinkBackgroundHover, 5%)); -} - -// Active state -// ------------ -.dropdown-menu > .active > a, -.dropdown-menu > .active > a:hover, -.dropdown-menu > .active > a:focus { - color: @dropdownLinkColorActive; - text-decoration: none; - outline: 0; - #gradient > .vertical(@dropdownLinkBackgroundActive, darken(@dropdownLinkBackgroundActive, 5%)); -} - -// Disabled state -// -------------- -// Gray out text and ensure the hover/focus state remains gray -.dropdown-menu > .disabled > a, -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - color: @grayLight; -} -// Nuke hover/focus effects -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - text-decoration: none; - background-color: transparent; - background-image: none; // Remove CSS gradient - .reset-filter(); - cursor: default; -} - -// Open state for the dropdown -// --------------------------- -.open { - // IE7's z-index only goes to the nearest positioned ancestor, which would - // make the menu appear below buttons that appeared later on the page - *z-index: @zindexDropdown; - - & > .dropdown-menu { - display: block; - } -} - -// Right aligned dropdowns -// --------------------------- -.pull-right > .dropdown-menu { - right: 0; - left: auto; -} - -// Allow for dropdowns to go bottom up (aka, dropup-menu) -// ------------------------------------------------------ -// Just add .dropup after the standard .dropdown class and you're set, bro. -// TODO: abstract this so that the navbar fixed styles are not placed here? -.dropup, -.navbar-fixed-bottom .dropdown { - // Reverse the caret - .caret { - border-top: 0; - border-bottom: 4px solid @black; - content: ""; - } - // Different positioning for bottom up menu - .dropdown-menu { - top: auto; - bottom: 100%; - margin-bottom: 1px; - } -} - -// Sub menus -// --------------------------- -.dropdown-submenu { - position: relative; -} -// Default dropdowns -.dropdown-submenu > .dropdown-menu { - top: 0; - left: 100%; - margin-top: -6px; - margin-left: -1px; - .border-radius(0 6px 6px 6px); -} -.dropdown-submenu:hover > .dropdown-menu { - display: block; -} - -// Dropups -.dropup .dropdown-submenu > .dropdown-menu { - top: auto; - bottom: 0; - margin-top: 0; - margin-bottom: -2px; - .border-radius(5px 5px 5px 0); -} - -// Caret to indicate there is a submenu -.dropdown-submenu > a:after { - display: block; - content: " "; - float: right; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; - border-width: 5px 0 5px 5px; - border-left-color: darken(@dropdownBackground, 20%); - margin-top: 5px; - margin-right: -10px; -} -.dropdown-submenu:hover > a:after { - border-left-color: @dropdownLinkColorHover; -} - -// Left aligned submenus -.dropdown-submenu.pull-left { - // Undo the float - // Yes, this is awkward since .pull-left adds a float, but it sticks to our conventions elsewhere. - float: none; - - // Positioning the submenu - > .dropdown-menu { - left: -100%; - margin-left: 10px; - .border-radius(6px 0 6px 6px); - } -} - -// Tweak nav headers -// ----------------- -// Increase padding from 15px to 20px on sides -.dropdown .dropdown-menu .nav-header { - padding-left: 20px; - padding-right: 20px; -} - -// Typeahead -// --------- -.typeahead { - z-index: 1051; - margin-top: 2px; // give it some space to breathe - .border-radius(@baseBorderRadius); -} diff --git a/src/main/webapp/bower_components/bootstrap/less/forms.less b/src/main/webapp/bower_components/bootstrap/less/forms.less deleted file mode 100644 index 06767bdd..00000000 --- a/src/main/webapp/bower_components/bootstrap/less/forms.less +++ /dev/null @@ -1,690 +0,0 @@ -// -// Forms -// -------------------------------------------------- - - -// GENERAL STYLES -// -------------- - -// Make all forms have space below them -form { - margin: 0 0 @baseLineHeight; -} - -fieldset { - padding: 0; - margin: 0; - border: 0; -} - -// Groups of fields with labels on top (legends) -legend { - display: block; - width: 100%; - padding: 0; - margin-bottom: @baseLineHeight; - font-size: @baseFontSize * 1.5; - line-height: @baseLineHeight * 2; - color: @grayDark; - border: 0; - border-bottom: 1px solid #e5e5e5; - - // Small - small { - font-size: @baseLineHeight * .75; - color: @grayLight; - } -} - -// Set font for forms -label, -input, -button, -select, -textarea { - #font > .shorthand(@baseFontSize,normal,@baseLineHeight); // Set size, weight, line-height here -} -input, -button, -select, -textarea { - font-family: @baseFontFamily; // And only set font-family here for those that need it (note the missing label element) -} - -// Identify controls by their labels -label { - display: block; - margin-bottom: 5px; -} - -// Form controls -// ------------------------- - -// Shared size and type resets -select, -textarea, -input[type="text"], -input[type="password"], -input[type="datetime"], -input[type="datetime-local"], -input[type="date"], -input[type="month"], -input[type="time"], -input[type="week"], -input[type="number"], -input[type="email"], -input[type="url"], -input[type="search"], -input[type="tel"], -input[type="color"], -.uneditable-input { - display: inline-block; - height: @baseLineHeight; - padding: 4px 6px; - margin-bottom: @baseLineHeight / 2; - font-size: @baseFontSize; - line-height: @baseLineHeight; - color: @gray; - .border-radius(@inputBorderRadius); - vertical-align: middle; -} - -// Reset appearance properties for textual inputs and textarea -// Declare width for legacy (can't be on input[type=*] selectors or it's too specific) -input, -textarea, -.uneditable-input { - width: 206px; // plus 12px padding and 2px border -} -// Reset height since textareas have rows -textarea { - height: auto; -} -// Everything else -textarea, -input[type="text"], -input[type="password"], -input[type="datetime"], -input[type="datetime-local"], -input[type="date"], -input[type="month"], -input[type="time"], -input[type="week"], -input[type="number"], -input[type="email"], -input[type="url"], -input[type="search"], -input[type="tel"], -input[type="color"], -.uneditable-input { - background-color: @inputBackground; - border: 1px solid @inputBorder; - .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); - .transition(~"border linear .2s, box-shadow linear .2s"); - - // Focus state - &:focus { - border-color: rgba(82,168,236,.8); - outline: 0; - outline: thin dotted \9; /* IE6-9 */ - .box-shadow(~"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6)"); - } -} - -// Position radios and checkboxes better -input[type="radio"], -input[type="checkbox"] { - margin: 4px 0 0; - *margin-top: 0; /* IE7 */ - margin-top: 1px \9; /* IE8-9 */ - line-height: normal; -} - -// Reset width of input images, buttons, radios, checkboxes -input[type="file"], -input[type="image"], -input[type="submit"], -input[type="reset"], -input[type="button"], -input[type="radio"], -input[type="checkbox"] { - width: auto; // Override of generic input selector -} - -// Set the height of select and file controls to match text inputs -select, -input[type="file"] { - height: @inputHeight; /* In IE7, the height of the select element cannot be changed by height, only font-size */ - *margin-top: 4px; /* For IE7, add top margin to align select with labels */ - line-height: @inputHeight; -} - -// Make select elements obey height by applying a border -select { - width: 220px; // default input width + 10px of padding that doesn't get applied - border: 1px solid @inputBorder; - background-color: @inputBackground; // Chrome on Linux and Mobile Safari need background-color -} - -// Make multiple select elements height not fixed -select[multiple], -select[size] { - height: auto; -} - -// Focus for select, file, radio, and checkbox -select:focus, -input[type="file"]:focus, -input[type="radio"]:focus, -input[type="checkbox"]:focus { - .tab-focus(); -} - - -// Uneditable inputs -// ------------------------- - -// Make uneditable inputs look inactive -.uneditable-input, -.uneditable-textarea { - color: @grayLight; - background-color: darken(@inputBackground, 1%); - border-color: @inputBorder; - .box-shadow(inset 0 1px 2px rgba(0,0,0,.025)); - cursor: not-allowed; -} - -// For text that needs to appear as an input but should not be an input -.uneditable-input { - overflow: hidden; // prevent text from wrapping, but still cut it off like an input does - white-space: nowrap; -} - -// Make uneditable textareas behave like a textarea -.uneditable-textarea { - width: auto; - height: auto; -} - - -// Placeholder -// ------------------------- - -// Placeholder text gets special styles because when browsers invalidate entire lines if it doesn't understand a selector -input, -textarea { - .placeholder(); -} - - -// CHECKBOXES & RADIOS -// ------------------- - -// Indent the labels to position radios/checkboxes as hanging -.radio, -.checkbox { - min-height: @baseLineHeight; // clear the floating input if there is no label text - padding-left: 20px; -} -.radio input[type="radio"], -.checkbox input[type="checkbox"] { - float: left; - margin-left: -20px; -} - -// Move the options list down to align with labels -.controls > .radio:first-child, -.controls > .checkbox:first-child { - padding-top: 5px; // has to be padding because margin collaspes -} - -// Radios and checkboxes on same line -// TODO v3: Convert .inline to .control-inline -.radio.inline, -.checkbox.inline { - display: inline-block; - padding-top: 5px; - margin-bottom: 0; - vertical-align: middle; -} -.radio.inline + .radio.inline, -.checkbox.inline + .checkbox.inline { - margin-left: 10px; // space out consecutive inline controls -} - - - -// INPUT SIZES -// ----------- - -// General classes for quick sizes -.input-mini { width: 60px; } -.input-small { width: 90px; } -.input-medium { width: 150px; } -.input-large { width: 210px; } -.input-xlarge { width: 270px; } -.input-xxlarge { width: 530px; } - -// Grid style input sizes -input[class*="span"], -select[class*="span"], -textarea[class*="span"], -.uneditable-input[class*="span"], -// Redeclare since the fluid row class is more specific -.row-fluid input[class*="span"], -.row-fluid select[class*="span"], -.row-fluid textarea[class*="span"], -.row-fluid .uneditable-input[class*="span"] { - float: none; - margin-left: 0; -} -// Ensure input-prepend/append never wraps -.input-append input[class*="span"], -.input-append .uneditable-input[class*="span"], -.input-prepend input[class*="span"], -.input-prepend .uneditable-input[class*="span"], -.row-fluid input[class*="span"], -.row-fluid select[class*="span"], -.row-fluid textarea[class*="span"], -.row-fluid .uneditable-input[class*="span"], -.row-fluid .input-prepend [class*="span"], -.row-fluid .input-append [class*="span"] { - display: inline-block; -} - - - -// GRID SIZING FOR INPUTS -// ---------------------- - -// Grid sizes -#grid > .input(@gridColumnWidth, @gridGutterWidth); - -// Control row for multiple inputs per line -.controls-row { - .clearfix(); // Clear the float from controls -} - -// Float to collapse white-space for proper grid alignment -.controls-row [class*="span"], -// Redeclare the fluid grid collapse since we undo the float for inputs -.row-fluid .controls-row [class*="span"] { - float: left; -} -// Explicity set top padding on all checkboxes/radios, not just first-child -.controls-row .checkbox[class*="span"], -.controls-row .radio[class*="span"] { - padding-top: 5px; -} - - - - -// DISABLED STATE -// -------------- - -// Disabled and read-only inputs -input[disabled], -select[disabled], -textarea[disabled], -input[readonly], -select[readonly], -textarea[readonly] { - cursor: not-allowed; - background-color: @inputDisabledBackground; -} -// Explicitly reset the colors here -input[type="radio"][disabled], -input[type="checkbox"][disabled], -input[type="radio"][readonly], -input[type="checkbox"][readonly] { - background-color: transparent; -} - - - - -// FORM FIELD FEEDBACK STATES -// -------------------------- - -// Warning -.control-group.warning { - .formFieldState(@warningText, @warningText, @warningBackground); -} -// Error -.control-group.error { - .formFieldState(@errorText, @errorText, @errorBackground); -} -// Success -.control-group.success { - .formFieldState(@successText, @successText, @successBackground); -} -// Success -.control-group.info { - .formFieldState(@infoText, @infoText, @infoBackground); -} - -// HTML5 invalid states -// Shares styles with the .control-group.error above -input:focus:invalid, -textarea:focus:invalid, -select:focus:invalid { - color: #b94a48; - border-color: #ee5f5b; - &:focus { - border-color: darken(#ee5f5b, 10%); - @shadow: 0 0 6px lighten(#ee5f5b, 20%); - .box-shadow(@shadow); - } -} - - - -// FORM ACTIONS -// ------------ - -.form-actions { - padding: (@baseLineHeight - 1) 20px @baseLineHeight; - margin-top: @baseLineHeight; - margin-bottom: @baseLineHeight; - background-color: @formActionsBackground; - border-top: 1px solid #e5e5e5; - .clearfix(); // Adding clearfix to allow for .pull-right button containers -} - - - -// HELP TEXT -// --------- - -.help-block, -.help-inline { - color: lighten(@textColor, 15%); // lighten the text some for contrast -} - -.help-block { - display: block; // account for any element using help-block - margin-bottom: @baseLineHeight / 2; -} - -.help-inline { - display: inline-block; - .ie7-inline-block(); - vertical-align: middle; - padding-left: 5px; -} - - - -// INPUT GROUPS -// ------------ - -// Allow us to put symbols and text within the input field for a cleaner look -.input-append, -.input-prepend { - display: inline-block; - margin-bottom: @baseLineHeight / 2; - vertical-align: middle; - font-size: 0; // white space collapse hack - white-space: nowrap; // Prevent span and input from separating - - // Reset the white space collapse hack - input, - select, - .uneditable-input, - .dropdown-menu, - .popover { - font-size: @baseFontSize; - } - - input, - select, - .uneditable-input { - position: relative; // placed here by default so that on :focus we can place the input above the .add-on for full border and box-shadow goodness - margin-bottom: 0; // prevent bottom margin from screwing up alignment in stacked forms - *margin-left: 0; - vertical-align: top; - .border-radius(0 @inputBorderRadius @inputBorderRadius 0); - // Make input on top when focused so blue border and shadow always show - &:focus { - z-index: 2; - } - } - .add-on { - display: inline-block; - width: auto; - height: @baseLineHeight; - min-width: 16px; - padding: 4px 5px; - font-size: @baseFontSize; - font-weight: normal; - line-height: @baseLineHeight; - text-align: center; - text-shadow: 0 1px 0 @white; - background-color: @grayLighter; - border: 1px solid #ccc; - } - .add-on, - .btn, - .btn-group > .dropdown-toggle { - vertical-align: top; - .border-radius(0); - } - .active { - background-color: lighten(@green, 30); - border-color: @green; - } -} - -.input-prepend { - .add-on, - .btn { - margin-right: -1px; - } - .add-on:first-child, - .btn:first-child { - // FYI, `.btn:first-child` accounts for a button group that's prepended - .border-radius(@inputBorderRadius 0 0 @inputBorderRadius); - } -} - -.input-append { - input, - select, - .uneditable-input { - .border-radius(@inputBorderRadius 0 0 @inputBorderRadius); - + .btn-group .btn:last-child { - .border-radius(0 @inputBorderRadius @inputBorderRadius 0); - } - } - .add-on, - .btn, - .btn-group { - margin-left: -1px; - } - .add-on:last-child, - .btn:last-child, - .btn-group:last-child > .dropdown-toggle { - .border-radius(0 @inputBorderRadius @inputBorderRadius 0); - } -} - -// Remove all border-radius for inputs with both prepend and append -.input-prepend.input-append { - input, - select, - .uneditable-input { - .border-radius(0); - + .btn-group .btn { - .border-radius(0 @inputBorderRadius @inputBorderRadius 0); - } - } - .add-on:first-child, - .btn:first-child { - margin-right: -1px; - .border-radius(@inputBorderRadius 0 0 @inputBorderRadius); - } - .add-on:last-child, - .btn:last-child { - margin-left: -1px; - .border-radius(0 @inputBorderRadius @inputBorderRadius 0); - } - .btn-group:first-child { - margin-left: 0; - } -} - - - - -// SEARCH FORM -// ----------- - -input.search-query { - padding-right: 14px; - padding-right: 4px \9; - padding-left: 14px; - padding-left: 4px \9; /* IE7-8 doesn't have border-radius, so don't indent the padding */ - margin-bottom: 0; // Remove the default margin on all inputs - .border-radius(15px); -} - -/* Allow for input prepend/append in search forms */ -.form-search .input-append .search-query, -.form-search .input-prepend .search-query { - .border-radius(0); // Override due to specificity -} -.form-search .input-append .search-query { - .border-radius(14px 0 0 14px); -} -.form-search .input-append .btn { - .border-radius(0 14px 14px 0); -} -.form-search .input-prepend .search-query { - .border-radius(0 14px 14px 0); -} -.form-search .input-prepend .btn { - .border-radius(14px 0 0 14px); -} - - - - -// HORIZONTAL & VERTICAL FORMS -// --------------------------- - -// Common properties -// ----------------- - -.form-search, -.form-inline, -.form-horizontal { - input, - textarea, - select, - .help-inline, - .uneditable-input, - .input-prepend, - .input-append { - display: inline-block; - .ie7-inline-block(); - margin-bottom: 0; - vertical-align: middle; - } - // Re-hide hidden elements due to specifity - .hide { - display: none; - } -} -.form-search label, -.form-inline label, -.form-search .btn-group, -.form-inline .btn-group { - display: inline-block; -} -// Remove margin for input-prepend/-append -.form-search .input-append, -.form-inline .input-append, -.form-search .input-prepend, -.form-inline .input-prepend { - margin-bottom: 0; -} -// Inline checkbox/radio labels (remove padding on left) -.form-search .radio, -.form-search .checkbox, -.form-inline .radio, -.form-inline .checkbox { - padding-left: 0; - margin-bottom: 0; - vertical-align: middle; -} -// Remove float and margin, set to inline-block -.form-search .radio input[type="radio"], -.form-search .checkbox input[type="checkbox"], -.form-inline .radio input[type="radio"], -.form-inline .checkbox input[type="checkbox"] { - float: left; - margin-right: 3px; - margin-left: 0; -} - - -// Margin to space out fieldsets -.control-group { - margin-bottom: @baseLineHeight / 2; -} - -// Legend collapses margin, so next element is responsible for spacing -legend + .control-group { - margin-top: @baseLineHeight; - -webkit-margin-top-collapse: separate; -} - -// Horizontal-specific styles -// -------------------------- - -.form-horizontal { - // Increase spacing between groups - .control-group { - margin-bottom: @baseLineHeight; - .clearfix(); - } - // Float the labels left - .control-label { - float: left; - width: @horizontalComponentOffset - 20; - padding-top: 5px; - text-align: right; - } - // Move over all input controls and content - .controls { - // Super jank IE7 fix to ensure the inputs in .input-append and input-prepend - // don't inherit the margin of the parent, in this case .controls - *display: inline-block; - *padding-left: 20px; - margin-left: @horizontalComponentOffset; - *margin-left: 0; - &:first-child { - *padding-left: @horizontalComponentOffset; - } - } - // Remove bottom margin on block level help text since that's accounted for on .control-group - .help-block { - margin-bottom: 0; - } - // And apply it only to .help-block instances that follow a form control - input, - select, - textarea, - .uneditable-input, - .input-prepend, - .input-append { - + .help-block { - margin-top: @baseLineHeight / 2; - } - } - // Move over buttons in .form-actions to align with .controls - .form-actions { - padding-left: @horizontalComponentOffset; - } -} diff --git a/src/main/webapp/bower_components/bootstrap/less/grid.less b/src/main/webapp/bower_components/bootstrap/less/grid.less deleted file mode 100644 index 750d2035..00000000 --- a/src/main/webapp/bower_components/bootstrap/less/grid.less +++ /dev/null @@ -1,21 +0,0 @@ -// -// Grid system -// -------------------------------------------------- - - -// Fixed (940px) -#grid > .core(@gridColumnWidth, @gridGutterWidth); - -// Fluid (940px) -#grid > .fluid(@fluidGridColumnWidth, @fluidGridGutterWidth); - -// Reset utility classes due to specificity -[class*="span"].hide, -.row-fluid [class*="span"].hide { - display: none; -} - -[class*="span"].pull-right, -.row-fluid [class*="span"].pull-right { - float: right; -} diff --git a/src/main/webapp/bower_components/bootstrap/less/hero-unit.less b/src/main/webapp/bower_components/bootstrap/less/hero-unit.less deleted file mode 100644 index 763d86ae..00000000 --- a/src/main/webapp/bower_components/bootstrap/less/hero-unit.less +++ /dev/null @@ -1,25 +0,0 @@ -// -// Hero unit -// -------------------------------------------------- - - -.hero-unit { - padding: 60px; - margin-bottom: 30px; - font-size: 18px; - font-weight: 200; - line-height: @baseLineHeight * 1.5; - color: @heroUnitLeadColor; - background-color: @heroUnitBackground; - .border-radius(6px); - h1 { - margin-bottom: 0; - font-size: 60px; - line-height: 1; - color: @heroUnitHeadingColor; - letter-spacing: -1px; - } - li { - line-height: @baseLineHeight * 1.5; // Reset since we specify in type.less - } -} diff --git a/src/main/webapp/bower_components/bootstrap/less/labels-badges.less b/src/main/webapp/bower_components/bootstrap/less/labels-badges.less deleted file mode 100644 index bc321fe5..00000000 --- a/src/main/webapp/bower_components/bootstrap/less/labels-badges.less +++ /dev/null @@ -1,84 +0,0 @@ -// -// Labels and badges -// -------------------------------------------------- - - -// Base classes -.label, -.badge { - display: inline-block; - padding: 2px 4px; - font-size: @baseFontSize * .846; - font-weight: bold; - line-height: 14px; // ensure proper line-height if floated - color: @white; - vertical-align: baseline; - white-space: nowrap; - text-shadow: 0 -1px 0 rgba(0,0,0,.25); - background-color: @grayLight; -} -// Set unique padding and border-radii -.label { - .border-radius(3px); -} -.badge { - padding-left: 9px; - padding-right: 9px; - .border-radius(9px); -} - -// Empty labels/badges collapse -.label, -.badge { - &:empty { - display: none; - } -} - -// Hover/focus state, but only for links -a { - &.label:hover, - &.label:focus, - &.badge:hover, - &.badge:focus { - color: @white; - text-decoration: none; - cursor: pointer; - } -} - -// Colors -// Only give background-color difference to links (and to simplify, we don't qualifty with `a` but [href] attribute) -.label, -.badge { - // Important (red) - &-important { background-color: @errorText; } - &-important[href] { background-color: darken(@errorText, 10%); } - // Warnings (orange) - &-warning { background-color: @orange; } - &-warning[href] { background-color: darken(@orange, 10%); } - // Success (green) - &-success { background-color: @successText; } - &-success[href] { background-color: darken(@successText, 10%); } - // Info (turquoise) - &-info { background-color: @infoText; } - &-info[href] { background-color: darken(@infoText, 10%); } - // Inverse (black) - &-inverse { background-color: @grayDark; } - &-inverse[href] { background-color: darken(@grayDark, 10%); } -} - -// Quick fix for labels/badges in buttons -.btn { - .label, - .badge { - position: relative; - top: -1px; - } -} -.btn-mini { - .label, - .badge { - top: 0; - } -} diff --git a/src/main/webapp/bower_components/bootstrap/less/layouts.less b/src/main/webapp/bower_components/bootstrap/less/layouts.less deleted file mode 100644 index 24a20621..00000000 --- a/src/main/webapp/bower_components/bootstrap/less/layouts.less +++ /dev/null @@ -1,16 +0,0 @@ -// -// Layouts -// -------------------------------------------------- - - -// Container (centered, fixed-width layouts) -.container { - .container-fixed(); -} - -// Fluid layouts (left aligned, with sidebar, min- & max-width content) -.container-fluid { - padding-right: @gridGutterWidth; - padding-left: @gridGutterWidth; - .clearfix(); -} \ No newline at end of file diff --git a/src/main/webapp/bower_components/bootstrap/less/media.less b/src/main/webapp/bower_components/bootstrap/less/media.less deleted file mode 100644 index e461e446..00000000 --- a/src/main/webapp/bower_components/bootstrap/less/media.less +++ /dev/null @@ -1,55 +0,0 @@ -// Media objects -// Source: http://stubbornella.org/content/?p=497 -// -------------------------------------------------- - - -// Common styles -// ------------------------- - -// Clear the floats -.media, -.media-body { - overflow: hidden; - *overflow: visible; - zoom: 1; -} - -// Proper spacing between instances of .media -.media, -.media .media { - margin-top: 15px; -} -.media:first-child { - margin-top: 0; -} - -// For images and videos, set to block -.media-object { - display: block; -} - -// Reset margins on headings for tighter default spacing -.media-heading { - margin: 0 0 5px; -} - - -// Media image alignment -// ------------------------- - -.media > .pull-left { - margin-right: 10px; -} -.media > .pull-right { - margin-left: 10px; -} - - -// Media list variation -// ------------------------- - -// Undo default ul/ol styles -.media-list { - margin-left: 0; - list-style: none; -} diff --git a/src/main/webapp/bower_components/bootstrap/less/mixins.less b/src/main/webapp/bower_components/bootstrap/less/mixins.less deleted file mode 100644 index 79d88921..00000000 --- a/src/main/webapp/bower_components/bootstrap/less/mixins.less +++ /dev/null @@ -1,702 +0,0 @@ -// -// Mixins -// -------------------------------------------------- - - -// UTILITY MIXINS -// -------------------------------------------------- - -// Clearfix -// -------- -// For clearing floats like a boss h5bp.com/q -.clearfix { - *zoom: 1; - &:before, - &:after { - display: table; - content: ""; - // Fixes Opera/contenteditable bug: - // http://nicolasgallagher.com/micro-clearfix-hack/#comment-36952 - line-height: 0; - } - &:after { - clear: both; - } -} - -// Webkit-style focus -// ------------------ -.tab-focus() { - // Default - outline: thin dotted #333; - // Webkit - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} - -// Center-align a block level element -// ---------------------------------- -.center-block() { - display: block; - margin-left: auto; - margin-right: auto; -} - -// IE7 inline-block -// ---------------- -.ie7-inline-block() { - *display: inline; /* IE7 inline-block hack */ - *zoom: 1; -} - -// IE7 likes to collapse whitespace on either side of the inline-block elements. -// Ems because we're attempting to match the width of a space character. Left -// version is for form buttons, which typically come after other elements, and -// right version is for icons, which come before. Applying both is ok, but it will -// mean that space between those elements will be .6em (~2 space characters) in IE7, -// instead of the 1 space in other browsers. -.ie7-restore-left-whitespace() { - *margin-left: .3em; - - &:first-child { - *margin-left: 0; - } -} - -.ie7-restore-right-whitespace() { - *margin-right: .3em; -} - -// Sizing shortcuts -// ------------------------- -.size(@height, @width) { - width: @width; - height: @height; -} -.square(@size) { - .size(@size, @size); -} - -// Placeholder text -// ------------------------- -.placeholder(@color: @placeholderText) { - &:-moz-placeholder { - color: @color; - } - &:-ms-input-placeholder { - color: @color; - } - &::-webkit-input-placeholder { - color: @color; - } -} - -// Text overflow -// ------------------------- -// Requires inline-block or block for proper styling -.text-overflow() { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -// CSS image replacement -// ------------------------- -// Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757 -.hide-text { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; -} - - -// FONTS -// -------------------------------------------------- - -#font { - #family { - .serif() { - font-family: @serifFontFamily; - } - .sans-serif() { - font-family: @sansFontFamily; - } - .monospace() { - font-family: @monoFontFamily; - } - } - .shorthand(@size: @baseFontSize, @weight: normal, @lineHeight: @baseLineHeight) { - font-size: @size; - font-weight: @weight; - line-height: @lineHeight; - } - .serif(@size: @baseFontSize, @weight: normal, @lineHeight: @baseLineHeight) { - #font > #family > .serif; - #font > .shorthand(@size, @weight, @lineHeight); - } - .sans-serif(@size: @baseFontSize, @weight: normal, @lineHeight: @baseLineHeight) { - #font > #family > .sans-serif; - #font > .shorthand(@size, @weight, @lineHeight); - } - .monospace(@size: @baseFontSize, @weight: normal, @lineHeight: @baseLineHeight) { - #font > #family > .monospace; - #font > .shorthand(@size, @weight, @lineHeight); - } -} - - -// FORMS -// -------------------------------------------------- - -// Block level inputs -.input-block-level { - display: block; - width: 100%; - min-height: @inputHeight; // Make inputs at least the height of their button counterpart (base line-height + padding + border) - .box-sizing(border-box); // Makes inputs behave like true block-level elements -} - - - -// Mixin for form field states -.formFieldState(@textColor: #555, @borderColor: #ccc, @backgroundColor: #f5f5f5) { - // Set the text color - .control-label, - .help-block, - .help-inline { - color: @textColor; - } - // Style inputs accordingly - .checkbox, - .radio, - input, - select, - textarea { - color: @textColor; - } - input, - select, - textarea { - border-color: @borderColor; - .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work - &:focus { - border-color: darken(@borderColor, 10%); - @shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@borderColor, 20%); - .box-shadow(@shadow); - } - } - // Give a small background color for input-prepend/-append - .input-prepend .add-on, - .input-append .add-on { - color: @textColor; - background-color: @backgroundColor; - border-color: @textColor; - } -} - - - -// CSS3 PROPERTIES -// -------------------------------------------------- - -// Border Radius -.border-radius(@radius) { - -webkit-border-radius: @radius; - -moz-border-radius: @radius; - border-radius: @radius; -} - -// Single Corner Border Radius -.border-top-left-radius(@radius) { - -webkit-border-top-left-radius: @radius; - -moz-border-radius-topleft: @radius; - border-top-left-radius: @radius; -} -.border-top-right-radius(@radius) { - -webkit-border-top-right-radius: @radius; - -moz-border-radius-topright: @radius; - border-top-right-radius: @radius; -} -.border-bottom-right-radius(@radius) { - -webkit-border-bottom-right-radius: @radius; - -moz-border-radius-bottomright: @radius; - border-bottom-right-radius: @radius; -} -.border-bottom-left-radius(@radius) { - -webkit-border-bottom-left-radius: @radius; - -moz-border-radius-bottomleft: @radius; - border-bottom-left-radius: @radius; -} - -// Single Side Border Radius -.border-top-radius(@radius) { - .border-top-right-radius(@radius); - .border-top-left-radius(@radius); -} -.border-right-radius(@radius) { - .border-top-right-radius(@radius); - .border-bottom-right-radius(@radius); -} -.border-bottom-radius(@radius) { - .border-bottom-right-radius(@radius); - .border-bottom-left-radius(@radius); -} -.border-left-radius(@radius) { - .border-top-left-radius(@radius); - .border-bottom-left-radius(@radius); -} - -// Drop shadows -.box-shadow(@shadow) { - -webkit-box-shadow: @shadow; - -moz-box-shadow: @shadow; - box-shadow: @shadow; -} - -// Transitions -.transition(@transition) { - -webkit-transition: @transition; - -moz-transition: @transition; - -o-transition: @transition; - transition: @transition; -} -.transition-delay(@transition-delay) { - -webkit-transition-delay: @transition-delay; - -moz-transition-delay: @transition-delay; - -o-transition-delay: @transition-delay; - transition-delay: @transition-delay; -} -.transition-duration(@transition-duration) { - -webkit-transition-duration: @transition-duration; - -moz-transition-duration: @transition-duration; - -o-transition-duration: @transition-duration; - transition-duration: @transition-duration; -} - -// Transformations -.rotate(@degrees) { - -webkit-transform: rotate(@degrees); - -moz-transform: rotate(@degrees); - -ms-transform: rotate(@degrees); - -o-transform: rotate(@degrees); - transform: rotate(@degrees); -} -.scale(@ratio) { - -webkit-transform: scale(@ratio); - -moz-transform: scale(@ratio); - -ms-transform: scale(@ratio); - -o-transform: scale(@ratio); - transform: scale(@ratio); -} -.translate(@x, @y) { - -webkit-transform: translate(@x, @y); - -moz-transform: translate(@x, @y); - -ms-transform: translate(@x, @y); - -o-transform: translate(@x, @y); - transform: translate(@x, @y); -} -.skew(@x, @y) { - -webkit-transform: skew(@x, @y); - -moz-transform: skew(@x, @y); - -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twitter/bootstrap/issues/4885 - -o-transform: skew(@x, @y); - transform: skew(@x, @y); - -webkit-backface-visibility: hidden; // See https://github.com/twitter/bootstrap/issues/5319 -} -.translate3d(@x, @y, @z) { - -webkit-transform: translate3d(@x, @y, @z); - -moz-transform: translate3d(@x, @y, @z); - -o-transform: translate3d(@x, @y, @z); - transform: translate3d(@x, @y, @z); -} - -// Backface visibility -// Prevent browsers from flickering when using CSS 3D transforms. -// Default value is `visible`, but can be changed to `hidden -// See git pull https://github.com/dannykeane/bootstrap.git backface-visibility for examples -.backface-visibility(@visibility){ - -webkit-backface-visibility: @visibility; - -moz-backface-visibility: @visibility; - backface-visibility: @visibility; -} - -// Background clipping -// Heads up: FF 3.6 and under need "padding" instead of "padding-box" -.background-clip(@clip) { - -webkit-background-clip: @clip; - -moz-background-clip: @clip; - background-clip: @clip; -} - -// Background sizing -.background-size(@size) { - -webkit-background-size: @size; - -moz-background-size: @size; - -o-background-size: @size; - background-size: @size; -} - - -// Box sizing -.box-sizing(@boxmodel) { - -webkit-box-sizing: @boxmodel; - -moz-box-sizing: @boxmodel; - box-sizing: @boxmodel; -} - -// User select -// For selecting text on the page -.user-select(@select) { - -webkit-user-select: @select; - -moz-user-select: @select; - -ms-user-select: @select; - -o-user-select: @select; - user-select: @select; -} - -// Resize anything -.resizable(@direction) { - resize: @direction; // Options: horizontal, vertical, both - overflow: auto; // Safari fix -} - -// CSS3 Content Columns -.content-columns(@columnCount, @columnGap: @gridGutterWidth) { - -webkit-column-count: @columnCount; - -moz-column-count: @columnCount; - column-count: @columnCount; - -webkit-column-gap: @columnGap; - -moz-column-gap: @columnGap; - column-gap: @columnGap; -} - -// Optional hyphenation -.hyphens(@mode: auto) { - word-wrap: break-word; - -webkit-hyphens: @mode; - -moz-hyphens: @mode; - -ms-hyphens: @mode; - -o-hyphens: @mode; - hyphens: @mode; -} - -// Opacity -.opacity(@opacity) { - opacity: @opacity / 100; - filter: ~"alpha(opacity=@{opacity})"; -} - - - -// BACKGROUNDS -// -------------------------------------------------- - -// Add an alphatransparency value to any background or border color (via Elyse Holladay) -#translucent { - .background(@color: @white, @alpha: 1) { - background-color: hsla(hue(@color), saturation(@color), lightness(@color), @alpha); - } - .border(@color: @white, @alpha: 1) { - border-color: hsla(hue(@color), saturation(@color), lightness(@color), @alpha); - .background-clip(padding-box); - } -} - -// Gradient Bar Colors for buttons and alerts -.gradientBar(@primaryColor, @secondaryColor, @textColor: #fff, @textShadow: 0 -1px 0 rgba(0,0,0,.25)) { - color: @textColor; - text-shadow: @textShadow; - #gradient > .vertical(@primaryColor, @secondaryColor); - border-color: @secondaryColor @secondaryColor darken(@secondaryColor, 15%); - border-color: rgba(0,0,0,.1) rgba(0,0,0,.1) fadein(rgba(0,0,0,.1), 15%); -} - -// Gradients -#gradient { - .horizontal(@startColor: #555, @endColor: #333) { - background-color: @endColor; - background-image: -moz-linear-gradient(left, @startColor, @endColor); // FF 3.6+ - background-image: -webkit-gradient(linear, 0 0, 100% 0, from(@startColor), to(@endColor)); // Safari 4+, Chrome 2+ - background-image: -webkit-linear-gradient(left, @startColor, @endColor); // Safari 5.1+, Chrome 10+ - background-image: -o-linear-gradient(left, @startColor, @endColor); // Opera 11.10 - background-image: linear-gradient(to right, @startColor, @endColor); // Standard, IE10 - background-repeat: repeat-x; - filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",argb(@startColor),argb(@endColor))); // IE9 and down - } - .vertical(@startColor: #555, @endColor: #333) { - background-color: mix(@startColor, @endColor, 60%); - background-image: -moz-linear-gradient(top, @startColor, @endColor); // FF 3.6+ - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@startColor), to(@endColor)); // Safari 4+, Chrome 2+ - background-image: -webkit-linear-gradient(top, @startColor, @endColor); // Safari 5.1+, Chrome 10+ - background-image: -o-linear-gradient(top, @startColor, @endColor); // Opera 11.10 - background-image: linear-gradient(to bottom, @startColor, @endColor); // Standard, IE10 - background-repeat: repeat-x; - filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@startColor),argb(@endColor))); // IE9 and down - } - .directional(@startColor: #555, @endColor: #333, @deg: 45deg) { - background-color: @endColor; - background-repeat: repeat-x; - background-image: -moz-linear-gradient(@deg, @startColor, @endColor); // FF 3.6+ - background-image: -webkit-linear-gradient(@deg, @startColor, @endColor); // Safari 5.1+, Chrome 10+ - background-image: -o-linear-gradient(@deg, @startColor, @endColor); // Opera 11.10 - background-image: linear-gradient(@deg, @startColor, @endColor); // Standard, IE10 - } - .horizontal-three-colors(@startColor: #00b3ee, @midColor: #7a43b6, @colorStop: 50%, @endColor: #c3325f) { - background-color: mix(@midColor, @endColor, 80%); - background-image: -webkit-gradient(left, linear, 0 0, 0 100%, from(@startColor), color-stop(@colorStop, @midColor), to(@endColor)); - background-image: -webkit-linear-gradient(left, @startColor, @midColor @colorStop, @endColor); - background-image: -moz-linear-gradient(left, @startColor, @midColor @colorStop, @endColor); - background-image: -o-linear-gradient(left, @startColor, @midColor @colorStop, @endColor); - background-image: linear-gradient(to right, @startColor, @midColor @colorStop, @endColor); - background-repeat: no-repeat; - filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@startColor),argb(@endColor))); // IE9 and down, gets no color-stop at all for proper fallback - } - - .vertical-three-colors(@startColor: #00b3ee, @midColor: #7a43b6, @colorStop: 50%, @endColor: #c3325f) { - background-color: mix(@midColor, @endColor, 80%); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@startColor), color-stop(@colorStop, @midColor), to(@endColor)); - background-image: -webkit-linear-gradient(@startColor, @midColor @colorStop, @endColor); - background-image: -moz-linear-gradient(top, @startColor, @midColor @colorStop, @endColor); - background-image: -o-linear-gradient(@startColor, @midColor @colorStop, @endColor); - background-image: linear-gradient(@startColor, @midColor @colorStop, @endColor); - background-repeat: no-repeat; - filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@startColor),argb(@endColor))); // IE9 and down, gets no color-stop at all for proper fallback - } - .radial(@innerColor: #555, @outerColor: #333) { - background-color: @outerColor; - background-image: -webkit-gradient(radial, center center, 0, center center, 460, from(@innerColor), to(@outerColor)); - background-image: -webkit-radial-gradient(circle, @innerColor, @outerColor); - background-image: -moz-radial-gradient(circle, @innerColor, @outerColor); - background-image: -o-radial-gradient(circle, @innerColor, @outerColor); - background-repeat: no-repeat; - } - .striped(@color: #555, @angle: 45deg) { - background-color: @color; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(.25, rgba(255,255,255,.15)), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, rgba(255,255,255,.15)), color-stop(.75, rgba(255,255,255,.15)), color-stop(.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(@angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(@angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(@angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(@angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent); - } -} -// Reset filters for IE -.reset-filter() { - filter: e(%("progid:DXImageTransform.Microsoft.gradient(enabled = false)")); -} - - - -// COMPONENT MIXINS -// -------------------------------------------------- - -// Horizontal dividers -// ------------------------- -// Dividers (basically an hr) within dropdowns and nav lists -.nav-divider(@top: #e5e5e5, @bottom: @white) { - // IE7 needs a set width since we gave a height. Restricting just - // to IE7 to keep the 1px left/right space in other browsers. - // It is unclear where IE is getting the extra space that we need - // to negative-margin away, but so it goes. - *width: 100%; - height: 1px; - margin: ((@baseLineHeight / 2) - 1) 1px; // 8px 1px - *margin: -5px 0 5px; - overflow: hidden; - background-color: @top; - border-bottom: 1px solid @bottom; -} - -// Button backgrounds -// ------------------ -.buttonBackground(@startColor, @endColor, @textColor: #fff, @textShadow: 0 -1px 0 rgba(0,0,0,.25)) { - // gradientBar will set the background to a pleasing blend of these, to support IE<=9 - .gradientBar(@startColor, @endColor, @textColor, @textShadow); - *background-color: @endColor; /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - .reset-filter(); - - // in these cases the gradient won't cover the background, so we override - &:hover, &:focus, &:active, &.active, &.disabled, &[disabled] { - color: @textColor; - background-color: @endColor; - *background-color: darken(@endColor, 5%); - } - - // IE 7 + 8 can't handle box-shadow to show active, so we darken a bit ourselves - &:active, - &.active { - background-color: darken(@endColor, 10%) e("\9"); - } -} - -// Navbar vertical align -// ------------------------- -// Vertically center elements in the navbar. -// Example: an element has a height of 30px, so write out `.navbarVerticalAlign(30px);` to calculate the appropriate top margin. -.navbarVerticalAlign(@elementHeight) { - margin-top: (@navbarHeight - @elementHeight) / 2; -} - - - -// Grid System -// ----------- - -// Centered container element -.container-fixed() { - margin-right: auto; - margin-left: auto; - .clearfix(); -} - -// Table columns -.tableColumns(@columnSpan: 1) { - float: none; // undo default grid column styles - width: ((@gridColumnWidth) * @columnSpan) + (@gridGutterWidth * (@columnSpan - 1)) - 16; // 16 is total padding on left and right of table cells - margin-left: 0; // undo default grid column styles -} - -// Make a Grid -// Use .makeRow and .makeColumn to assign semantic layouts grid system behavior -.makeRow() { - margin-left: @gridGutterWidth * -1; - .clearfix(); -} -.makeColumn(@columns: 1, @offset: 0) { - float: left; - margin-left: (@gridColumnWidth * @offset) + (@gridGutterWidth * (@offset - 1)) + (@gridGutterWidth * 2); - width: (@gridColumnWidth * @columns) + (@gridGutterWidth * (@columns - 1)); -} - -// The Grid -#grid { - - .core (@gridColumnWidth, @gridGutterWidth) { - - .spanX (@index) when (@index > 0) { - .span@{index} { .span(@index); } - .spanX(@index - 1); - } - .spanX (0) {} - - .offsetX (@index) when (@index > 0) { - .offset@{index} { .offset(@index); } - .offsetX(@index - 1); - } - .offsetX (0) {} - - .offset (@columns) { - margin-left: (@gridColumnWidth * @columns) + (@gridGutterWidth * (@columns + 1)); - } - - .span (@columns) { - width: (@gridColumnWidth * @columns) + (@gridGutterWidth * (@columns - 1)); - } - - .row { - margin-left: @gridGutterWidth * -1; - .clearfix(); - } - - [class*="span"] { - float: left; - min-height: 1px; // prevent collapsing columns - margin-left: @gridGutterWidth; - } - - // Set the container width, and override it for fixed navbars in media queries - .container, - .navbar-static-top .container, - .navbar-fixed-top .container, - .navbar-fixed-bottom .container { .span(@gridColumns); } - - // generate .spanX and .offsetX - .spanX (@gridColumns); - .offsetX (@gridColumns); - - } - - .fluid (@fluidGridColumnWidth, @fluidGridGutterWidth) { - - .spanX (@index) when (@index > 0) { - .span@{index} { .span(@index); } - .spanX(@index - 1); - } - .spanX (0) {} - - .offsetX (@index) when (@index > 0) { - .offset@{index} { .offset(@index); } - .offset@{index}:first-child { .offsetFirstChild(@index); } - .offsetX(@index - 1); - } - .offsetX (0) {} - - .offset (@columns) { - margin-left: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) + (@fluidGridGutterWidth*2); - *margin-left: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) - (.5 / @gridRowWidth * 100 * 1%) + (@fluidGridGutterWidth*2) - (.5 / @gridRowWidth * 100 * 1%); - } - - .offsetFirstChild (@columns) { - margin-left: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) + (@fluidGridGutterWidth); - *margin-left: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) - (.5 / @gridRowWidth * 100 * 1%) + @fluidGridGutterWidth - (.5 / @gridRowWidth * 100 * 1%); - } - - .span (@columns) { - width: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)); - *width: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) - (.5 / @gridRowWidth * 100 * 1%); - } - - .row-fluid { - width: 100%; - .clearfix(); - [class*="span"] { - .input-block-level(); - float: left; - margin-left: @fluidGridGutterWidth; - *margin-left: @fluidGridGutterWidth - (.5 / @gridRowWidth * 100 * 1%); - } - [class*="span"]:first-child { - margin-left: 0; - } - - // Space grid-sized controls properly if multiple per line - .controls-row [class*="span"] + [class*="span"] { - margin-left: @fluidGridGutterWidth; - } - - // generate .spanX and .offsetX - .spanX (@gridColumns); - .offsetX (@gridColumns); - } - - } - - .input(@gridColumnWidth, @gridGutterWidth) { - - .spanX (@index) when (@index > 0) { - input.span@{index}, textarea.span@{index}, .uneditable-input.span@{index} { .span(@index); } - .spanX(@index - 1); - } - .spanX (0) {} - - .span(@columns) { - width: ((@gridColumnWidth) * @columns) + (@gridGutterWidth * (@columns - 1)) - 14; - } - - input, - textarea, - .uneditable-input { - margin-left: 0; // override margin-left from core grid system - } - - // Space grid-sized controls properly if multiple per line - .controls-row [class*="span"] + [class*="span"] { - margin-left: @gridGutterWidth; - } - - // generate .spanX - .spanX (@gridColumns); - - } -} diff --git a/src/main/webapp/bower_components/bootstrap/less/modals.less b/src/main/webapp/bower_components/bootstrap/less/modals.less deleted file mode 100644 index 8e272d40..00000000 --- a/src/main/webapp/bower_components/bootstrap/less/modals.less +++ /dev/null @@ -1,95 +0,0 @@ -// -// Modals -// -------------------------------------------------- - -// Background -.modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: @zindexModalBackdrop; - background-color: @black; - // Fade for backdrop - &.fade { opacity: 0; } -} - -.modal-backdrop, -.modal-backdrop.fade.in { - .opacity(80); -} - -// Base modal -.modal { - position: fixed; - top: 10%; - left: 50%; - z-index: @zindexModal; - width: 560px; - margin-left: -280px; - background-color: @white; - border: 1px solid #999; - border: 1px solid rgba(0,0,0,.3); - *border: 1px solid #999; /* IE6-7 */ - .border-radius(6px); - .box-shadow(0 3px 7px rgba(0,0,0,0.3)); - .background-clip(padding-box); - // Remove focus outline from opened modal - outline: none; - - &.fade { - .transition(e('opacity .3s linear, top .3s ease-out')); - top: -25%; - } - &.fade.in { top: 10%; } -} -.modal-header { - padding: 9px 15px; - border-bottom: 1px solid #eee; - // Close icon - .close { margin-top: 2px; } - // Heading - h3 { - margin: 0; - line-height: 30px; - } -} - -// Body (where all modal content resides) -.modal-body { - position: relative; - overflow-y: auto; - max-height: 400px; - padding: 15px; -} -// Remove bottom margin if need be -.modal-form { - margin-bottom: 0; -} - -// Footer (for actions) -.modal-footer { - padding: 14px 15px 15px; - margin-bottom: 0; - text-align: right; // right align buttons - background-color: #f5f5f5; - border-top: 1px solid #ddd; - .border-radius(0 0 6px 6px); - .box-shadow(inset 0 1px 0 @white); - .clearfix(); // clear it in case folks use .pull-* classes on buttons - - // Properly space out buttons - .btn + .btn { - margin-left: 5px; - margin-bottom: 0; // account for input[type="submit"] which gets the bottom margin like all other inputs - } - // but override that for button groups - .btn-group .btn + .btn { - margin-left: -1px; - } - // and override it for block buttons as well - .btn-block + .btn-block { - margin-left: 0; - } -} diff --git a/src/main/webapp/bower_components/bootstrap/less/navbar.less b/src/main/webapp/bower_components/bootstrap/less/navbar.less deleted file mode 100644 index 93d09bca..00000000 --- a/src/main/webapp/bower_components/bootstrap/less/navbar.less +++ /dev/null @@ -1,497 +0,0 @@ -// -// Navbars (Redux) -// -------------------------------------------------- - - -// COMMON STYLES -// ------------- - -// Base class and wrapper -.navbar { - overflow: visible; - margin-bottom: @baseLineHeight; - - // Fix for IE7's bad z-indexing so dropdowns don't appear below content that follows the navbar - *position: relative; - *z-index: 2; -} - -// Inner for background effects -// Gradient is applied to its own element because overflow visible is not honored by IE when filter is present -.navbar-inner { - min-height: @navbarHeight; - padding-left: 20px; - padding-right: 20px; - #gradient > .vertical(@navbarBackgroundHighlight, @navbarBackground); - border: 1px solid @navbarBorder; - .border-radius(@baseBorderRadius); - .box-shadow(0 1px 4px rgba(0,0,0,.065)); - - // Prevent floats from breaking the navbar - .clearfix(); -} - -// Set width to auto for default container -// We then reset it for fixed navbars in the #gridSystem mixin -.navbar .container { - width: auto; -} - -// Override the default collapsed state -.nav-collapse.collapse { - height: auto; - overflow: visible; -} - - -// Brand: website or project name -// ------------------------- -.navbar .brand { - float: left; - display: block; - // Vertically center the text given @navbarHeight - padding: ((@navbarHeight - @baseLineHeight) / 2) 20px ((@navbarHeight - @baseLineHeight) / 2); - margin-left: -20px; // negative indent to left-align the text down the page - font-size: 20px; - font-weight: 200; - color: @navbarBrandColor; - text-shadow: 0 1px 0 @navbarBackgroundHighlight; - &:hover, - &:focus { - text-decoration: none; - } -} - -// Plain text in topbar -// ------------------------- -.navbar-text { - margin-bottom: 0; - line-height: @navbarHeight; - color: @navbarText; -} - -// Janky solution for now to account for links outside the .nav -// ------------------------- -.navbar-link { - color: @navbarLinkColor; - &:hover, - &:focus { - color: @navbarLinkColorHover; - } -} - -// Dividers in navbar -// ------------------------- -.navbar .divider-vertical { - height: @navbarHeight; - margin: 0 9px; - border-left: 1px solid @navbarBackground; - border-right: 1px solid @navbarBackgroundHighlight; -} - -// Buttons in navbar -// ------------------------- -.navbar .btn, -.navbar .btn-group { - .navbarVerticalAlign(30px); // Vertically center in navbar -} -.navbar .btn-group .btn, -.navbar .input-prepend .btn, -.navbar .input-append .btn, -.navbar .input-prepend .btn-group, -.navbar .input-append .btn-group { - margin-top: 0; // then undo the margin here so we don't accidentally double it -} - -// Navbar forms -// ------------------------- -.navbar-form { - margin-bottom: 0; // remove default bottom margin - .clearfix(); - input, - select, - .radio, - .checkbox { - .navbarVerticalAlign(30px); // Vertically center in navbar - } - input, - select, - .btn { - display: inline-block; - margin-bottom: 0; - } - input[type="image"], - input[type="checkbox"], - input[type="radio"] { - margin-top: 3px; - } - .input-append, - .input-prepend { - margin-top: 5px; - white-space: nowrap; // preven two items from separating within a .navbar-form that has .pull-left - input { - margin-top: 0; // remove the margin on top since it's on the parent - } - } -} - -// Navbar search -// ------------------------- -.navbar-search { - position: relative; - float: left; - .navbarVerticalAlign(30px); // Vertically center in navbar - margin-bottom: 0; - .search-query { - margin-bottom: 0; - padding: 4px 14px; - #font > .sans-serif(13px, normal, 1); - .border-radius(15px); // redeclare because of specificity of the type attribute - } -} - - - -// Static navbar -// ------------------------- - -.navbar-static-top { - position: static; - margin-bottom: 0; // remove 18px margin for default navbar - .navbar-inner { - .border-radius(0); - } -} - - - -// Fixed navbar -// ------------------------- - -// Shared (top/bottom) styles -.navbar-fixed-top, -.navbar-fixed-bottom { - position: fixed; - right: 0; - left: 0; - z-index: @zindexFixedNavbar; - margin-bottom: 0; // remove 18px margin for default navbar -} -.navbar-fixed-top .navbar-inner, -.navbar-static-top .navbar-inner { - border-width: 0 0 1px; -} -.navbar-fixed-bottom .navbar-inner { - border-width: 1px 0 0; -} -.navbar-fixed-top .navbar-inner, -.navbar-fixed-bottom .navbar-inner { - padding-left: 0; - padding-right: 0; - .border-radius(0); -} - -// Reset container width -// Required here as we reset the width earlier on and the grid mixins don't override early enough -.navbar-static-top .container, -.navbar-fixed-top .container, -.navbar-fixed-bottom .container { - #grid > .core > .span(@gridColumns); -} - -// Fixed to top -.navbar-fixed-top { - top: 0; -} -.navbar-fixed-top, -.navbar-static-top { - .navbar-inner { - .box-shadow(~"0 1px 10px rgba(0,0,0,.1)"); - } -} - -// Fixed to bottom -.navbar-fixed-bottom { - bottom: 0; - .navbar-inner { - .box-shadow(~"0 -1px 10px rgba(0,0,0,.1)"); - } -} - - - -// NAVIGATION -// ---------- - -.navbar .nav { - position: relative; - left: 0; - display: block; - float: left; - margin: 0 10px 0 0; -} -.navbar .nav.pull-right { - float: right; // redeclare due to specificity - margin-right: 0; // remove margin on float right nav -} -.navbar .nav > li { - float: left; -} - -// Links -.navbar .nav > li > a { - float: none; - // Vertically center the text given @navbarHeight - padding: ((@navbarHeight - @baseLineHeight) / 2) 15px ((@navbarHeight - @baseLineHeight) / 2); - color: @navbarLinkColor; - text-decoration: none; - text-shadow: 0 1px 0 @navbarBackgroundHighlight; -} -.navbar .nav .dropdown-toggle .caret { - margin-top: 8px; -} - -// Hover/focus -.navbar .nav > li > a:focus, -.navbar .nav > li > a:hover { - background-color: @navbarLinkBackgroundHover; // "transparent" is default to differentiate :hover/:focus from .active - color: @navbarLinkColorHover; - text-decoration: none; -} - -// Active nav items -.navbar .nav > .active > a, -.navbar .nav > .active > a:hover, -.navbar .nav > .active > a:focus { - color: @navbarLinkColorActive; - text-decoration: none; - background-color: @navbarLinkBackgroundActive; - .box-shadow(inset 0 3px 8px rgba(0,0,0,.125)); -} - -// Navbar button for toggling navbar items in responsive layouts -// These definitions need to come after '.navbar .btn' -.navbar .btn-navbar { - display: none; - float: right; - padding: 7px 10px; - margin-left: 5px; - margin-right: 5px; - .buttonBackground(darken(@navbarBackgroundHighlight, 5%), darken(@navbarBackground, 5%)); - .box-shadow(~"inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075)"); -} -.navbar .btn-navbar .icon-bar { - display: block; - width: 18px; - height: 2px; - background-color: #f5f5f5; - .border-radius(1px); - .box-shadow(0 1px 0 rgba(0,0,0,.25)); -} -.btn-navbar .icon-bar + .icon-bar { - margin-top: 3px; -} - - - -// Dropdown menus -// -------------- - -// Menu position and menu carets -.navbar .nav > li > .dropdown-menu { - &:before { - content: ''; - display: inline-block; - border-left: 7px solid transparent; - border-right: 7px solid transparent; - border-bottom: 7px solid #ccc; - border-bottom-color: @dropdownBorder; - position: absolute; - top: -7px; - left: 9px; - } - &:after { - content: ''; - display: inline-block; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-bottom: 6px solid @dropdownBackground; - position: absolute; - top: -6px; - left: 10px; - } -} -// Menu position and menu caret support for dropups via extra dropup class -.navbar-fixed-bottom .nav > li > .dropdown-menu { - &:before { - border-top: 7px solid #ccc; - border-top-color: @dropdownBorder; - border-bottom: 0; - bottom: -7px; - top: auto; - } - &:after { - border-top: 6px solid @dropdownBackground; - border-bottom: 0; - bottom: -6px; - top: auto; - } -} - -// Caret should match text color on hover/focus -.navbar .nav li.dropdown > a:hover .caret, -.navbar .nav li.dropdown > a:focus .caret { - border-top-color: @navbarLinkColorHover; - border-bottom-color: @navbarLinkColorHover; -} - -// Remove background color from open dropdown -.navbar .nav li.dropdown.open > .dropdown-toggle, -.navbar .nav li.dropdown.active > .dropdown-toggle, -.navbar .nav li.dropdown.open.active > .dropdown-toggle { - background-color: @navbarLinkBackgroundActive; - color: @navbarLinkColorActive; -} -.navbar .nav li.dropdown > .dropdown-toggle .caret { - border-top-color: @navbarLinkColor; - border-bottom-color: @navbarLinkColor; -} -.navbar .nav li.dropdown.open > .dropdown-toggle .caret, -.navbar .nav li.dropdown.active > .dropdown-toggle .caret, -.navbar .nav li.dropdown.open.active > .dropdown-toggle .caret { - border-top-color: @navbarLinkColorActive; - border-bottom-color: @navbarLinkColorActive; -} - -// Right aligned menus need alt position -.navbar .pull-right > li > .dropdown-menu, -.navbar .nav > li > .dropdown-menu.pull-right { - left: auto; - right: 0; - &:before { - left: auto; - right: 12px; - } - &:after { - left: auto; - right: 13px; - } - .dropdown-menu { - left: auto; - right: 100%; - margin-left: 0; - margin-right: -1px; - .border-radius(6px 0 6px 6px); - } -} - - -// Inverted navbar -// ------------------------- - -.navbar-inverse { - - .navbar-inner { - #gradient > .vertical(@navbarInverseBackgroundHighlight, @navbarInverseBackground); - border-color: @navbarInverseBorder; - } - - .brand, - .nav > li > a { - color: @navbarInverseLinkColor; - text-shadow: 0 -1px 0 rgba(0,0,0,.25); - &:hover, - &:focus { - color: @navbarInverseLinkColorHover; - } - } - - .brand { - color: @navbarInverseBrandColor; - } - - .navbar-text { - color: @navbarInverseText; - } - - .nav > li > a:focus, - .nav > li > a:hover { - background-color: @navbarInverseLinkBackgroundHover; - color: @navbarInverseLinkColorHover; - } - - .nav .active > a, - .nav .active > a:hover, - .nav .active > a:focus { - color: @navbarInverseLinkColorActive; - background-color: @navbarInverseLinkBackgroundActive; - } - - // Inline text links - .navbar-link { - color: @navbarInverseLinkColor; - &:hover, - &:focus { - color: @navbarInverseLinkColorHover; - } - } - - // Dividers in navbar - .divider-vertical { - border-left-color: @navbarInverseBackground; - border-right-color: @navbarInverseBackgroundHighlight; - } - - // Dropdowns - .nav li.dropdown.open > .dropdown-toggle, - .nav li.dropdown.active > .dropdown-toggle, - .nav li.dropdown.open.active > .dropdown-toggle { - background-color: @navbarInverseLinkBackgroundActive; - color: @navbarInverseLinkColorActive; - } - .nav li.dropdown > a:hover .caret, - .nav li.dropdown > a:focus .caret { - border-top-color: @navbarInverseLinkColorActive; - border-bottom-color: @navbarInverseLinkColorActive; - } - .nav li.dropdown > .dropdown-toggle .caret { - border-top-color: @navbarInverseLinkColor; - border-bottom-color: @navbarInverseLinkColor; - } - .nav li.dropdown.open > .dropdown-toggle .caret, - .nav li.dropdown.active > .dropdown-toggle .caret, - .nav li.dropdown.open.active > .dropdown-toggle .caret { - border-top-color: @navbarInverseLinkColorActive; - border-bottom-color: @navbarInverseLinkColorActive; - } - - // Navbar search - .navbar-search { - .search-query { - color: @white; - background-color: @navbarInverseSearchBackground; - border-color: @navbarInverseSearchBorder; - .box-shadow(~"inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15)"); - .transition(none); - .placeholder(@navbarInverseSearchPlaceholderColor); - - // Focus states (we use .focused since IE7-8 and down doesn't support :focus) - &:focus, - &.focused { - padding: 5px 15px; - color: @grayDark; - text-shadow: 0 1px 0 @white; - background-color: @navbarInverseSearchBackgroundFocus; - border: 0; - .box-shadow(0 0 3px rgba(0,0,0,.15)); - outline: 0; - } - } - } - - // Navbar collapse button - .btn-navbar { - .buttonBackground(darken(@navbarInverseBackgroundHighlight, 5%), darken(@navbarInverseBackground, 5%)); - } - -} diff --git a/src/main/webapp/bower_components/bootstrap/less/navs.less b/src/main/webapp/bower_components/bootstrap/less/navs.less deleted file mode 100644 index 01cd805b..00000000 --- a/src/main/webapp/bower_components/bootstrap/less/navs.less +++ /dev/null @@ -1,409 +0,0 @@ -// -// Navs -// -------------------------------------------------- - - -// BASE CLASS -// ---------- - -.nav { - margin-left: 0; - margin-bottom: @baseLineHeight; - list-style: none; -} - -// Make links block level -.nav > li > a { - display: block; -} -.nav > li > a:hover, -.nav > li > a:focus { - text-decoration: none; - background-color: @grayLighter; -} - -// Prevent IE8 from misplacing imgs -// See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989 -.nav > li > a > img { - max-width: none; -} - -// Redeclare pull classes because of specifity -.nav > .pull-right { - float: right; -} - -// Nav headers (for dropdowns and lists) -.nav-header { - display: block; - padding: 3px 15px; - font-size: 11px; - font-weight: bold; - line-height: @baseLineHeight; - color: @grayLight; - text-shadow: 0 1px 0 rgba(255,255,255,.5); - text-transform: uppercase; -} -// Space them out when they follow another list item (link) -.nav li + .nav-header { - margin-top: 9px; -} - - - -// NAV LIST -// -------- - -.nav-list { - padding-left: 15px; - padding-right: 15px; - margin-bottom: 0; -} -.nav-list > li > a, -.nav-list .nav-header { - margin-left: -15px; - margin-right: -15px; - text-shadow: 0 1px 0 rgba(255,255,255,.5); -} -.nav-list > li > a { - padding: 3px 15px; -} -.nav-list > .active > a, -.nav-list > .active > a:hover, -.nav-list > .active > a:focus { - color: @white; - text-shadow: 0 -1px 0 rgba(0,0,0,.2); - background-color: @linkColor; -} -.nav-list [class^="icon-"], -.nav-list [class*=" icon-"] { - margin-right: 2px; -} -// Dividers (basically an hr) within the dropdown -.nav-list .divider { - .nav-divider(); -} - - - -// TABS AND PILLS -// ------------- - -// Common styles -.nav-tabs, -.nav-pills { - .clearfix(); -} -.nav-tabs > li, -.nav-pills > li { - float: left; -} -.nav-tabs > li > a, -.nav-pills > li > a { - padding-right: 12px; - padding-left: 12px; - margin-right: 2px; - line-height: 14px; // keeps the overall height an even number -} - -// TABS -// ---- - -// Give the tabs something to sit on -.nav-tabs { - border-bottom: 1px solid #ddd; -} -// Make the list-items overlay the bottom border -.nav-tabs > li { - margin-bottom: -1px; -} -// Actual tabs (as links) -.nav-tabs > li > a { - padding-top: 8px; - padding-bottom: 8px; - line-height: @baseLineHeight; - border: 1px solid transparent; - .border-radius(4px 4px 0 0); - &:hover, - &:focus { - border-color: @grayLighter @grayLighter #ddd; - } -} -// Active state, and it's :hover/:focus to override normal :hover/:focus -.nav-tabs > .active > a, -.nav-tabs > .active > a:hover, -.nav-tabs > .active > a:focus { - color: @gray; - background-color: @bodyBackground; - border: 1px solid #ddd; - border-bottom-color: transparent; - cursor: default; -} - - -// PILLS -// ----- - -// Links rendered as pills -.nav-pills > li > a { - padding-top: 8px; - padding-bottom: 8px; - margin-top: 2px; - margin-bottom: 2px; - .border-radius(5px); -} - -// Active state -.nav-pills > .active > a, -.nav-pills > .active > a:hover, -.nav-pills > .active > a:focus { - color: @white; - background-color: @linkColor; -} - - - -// STACKED NAV -// ----------- - -// Stacked tabs and pills -.nav-stacked > li { - float: none; -} -.nav-stacked > li > a { - margin-right: 0; // no need for the gap between nav items -} - -// Tabs -.nav-tabs.nav-stacked { - border-bottom: 0; -} -.nav-tabs.nav-stacked > li > a { - border: 1px solid #ddd; - .border-radius(0); -} -.nav-tabs.nav-stacked > li:first-child > a { - .border-top-radius(4px); -} -.nav-tabs.nav-stacked > li:last-child > a { - .border-bottom-radius(4px); -} -.nav-tabs.nav-stacked > li > a:hover, -.nav-tabs.nav-stacked > li > a:focus { - border-color: #ddd; - z-index: 2; -} - -// Pills -.nav-pills.nav-stacked > li > a { - margin-bottom: 3px; -} -.nav-pills.nav-stacked > li:last-child > a { - margin-bottom: 1px; // decrease margin to match sizing of stacked tabs -} - - - -// DROPDOWNS -// --------- - -.nav-tabs .dropdown-menu { - .border-radius(0 0 6px 6px); // remove the top rounded corners here since there is a hard edge above the menu -} -.nav-pills .dropdown-menu { - .border-radius(6px); // make rounded corners match the pills -} - -// Default dropdown links -// ------------------------- -// Make carets use linkColor to start -.nav .dropdown-toggle .caret { - border-top-color: @linkColor; - border-bottom-color: @linkColor; - margin-top: 6px; -} -.nav .dropdown-toggle:hover .caret, -.nav .dropdown-toggle:focus .caret { - border-top-color: @linkColorHover; - border-bottom-color: @linkColorHover; -} -/* move down carets for tabs */ -.nav-tabs .dropdown-toggle .caret { - margin-top: 8px; -} - -// Active dropdown links -// ------------------------- -.nav .active .dropdown-toggle .caret { - border-top-color: #fff; - border-bottom-color: #fff; -} -.nav-tabs .active .dropdown-toggle .caret { - border-top-color: @gray; - border-bottom-color: @gray; -} - -// Active:hover/:focus dropdown links -// ------------------------- -.nav > .dropdown.active > a:hover, -.nav > .dropdown.active > a:focus { - cursor: pointer; -} - -// Open dropdowns -// ------------------------- -.nav-tabs .open .dropdown-toggle, -.nav-pills .open .dropdown-toggle, -.nav > li.dropdown.open.active > a:hover, -.nav > li.dropdown.open.active > a:focus { - color: @white; - background-color: @grayLight; - border-color: @grayLight; -} -.nav li.dropdown.open .caret, -.nav li.dropdown.open.active .caret, -.nav li.dropdown.open a:hover .caret, -.nav li.dropdown.open a:focus .caret { - border-top-color: @white; - border-bottom-color: @white; - .opacity(100); -} - -// Dropdowns in stacked tabs -.tabs-stacked .open > a:hover, -.tabs-stacked .open > a:focus { - border-color: @grayLight; -} - - - -// TABBABLE -// -------- - - -// COMMON STYLES -// ------------- - -// Clear any floats -.tabbable { - .clearfix(); -} -.tab-content { - overflow: auto; // prevent content from running below tabs -} - -// Remove border on bottom, left, right -.tabs-below > .nav-tabs, -.tabs-right > .nav-tabs, -.tabs-left > .nav-tabs { - border-bottom: 0; -} - -// Show/hide tabbable areas -.tab-content > .tab-pane, -.pill-content > .pill-pane { - display: none; -} -.tab-content > .active, -.pill-content > .active { - display: block; -} - - -// BOTTOM -// ------ - -.tabs-below > .nav-tabs { - border-top: 1px solid #ddd; -} -.tabs-below > .nav-tabs > li { - margin-top: -1px; - margin-bottom: 0; -} -.tabs-below > .nav-tabs > li > a { - .border-radius(0 0 4px 4px); - &:hover, - &:focus { - border-bottom-color: transparent; - border-top-color: #ddd; - } -} -.tabs-below > .nav-tabs > .active > a, -.tabs-below > .nav-tabs > .active > a:hover, -.tabs-below > .nav-tabs > .active > a:focus { - border-color: transparent #ddd #ddd #ddd; -} - -// LEFT & RIGHT -// ------------ - -// Common styles -.tabs-left > .nav-tabs > li, -.tabs-right > .nav-tabs > li { - float: none; -} -.tabs-left > .nav-tabs > li > a, -.tabs-right > .nav-tabs > li > a { - min-width: 74px; - margin-right: 0; - margin-bottom: 3px; -} - -// Tabs on the left -.tabs-left > .nav-tabs { - float: left; - margin-right: 19px; - border-right: 1px solid #ddd; -} -.tabs-left > .nav-tabs > li > a { - margin-right: -1px; - .border-radius(4px 0 0 4px); -} -.tabs-left > .nav-tabs > li > a:hover, -.tabs-left > .nav-tabs > li > a:focus { - border-color: @grayLighter #ddd @grayLighter @grayLighter; -} -.tabs-left > .nav-tabs .active > a, -.tabs-left > .nav-tabs .active > a:hover, -.tabs-left > .nav-tabs .active > a:focus { - border-color: #ddd transparent #ddd #ddd; - *border-right-color: @white; -} - -// Tabs on the right -.tabs-right > .nav-tabs { - float: right; - margin-left: 19px; - border-left: 1px solid #ddd; -} -.tabs-right > .nav-tabs > li > a { - margin-left: -1px; - .border-radius(0 4px 4px 0); -} -.tabs-right > .nav-tabs > li > a:hover, -.tabs-right > .nav-tabs > li > a:focus { - border-color: @grayLighter @grayLighter @grayLighter #ddd; -} -.tabs-right > .nav-tabs .active > a, -.tabs-right > .nav-tabs .active > a:hover, -.tabs-right > .nav-tabs .active > a:focus { - border-color: #ddd #ddd #ddd transparent; - *border-left-color: @white; -} - - - -// DISABLED STATES -// --------------- - -// Gray out text -.nav > .disabled > a { - color: @grayLight; -} -// Nuke hover/focus effects -.nav > .disabled > a:hover, -.nav > .disabled > a:focus { - text-decoration: none; - background-color: transparent; - cursor: default; -} diff --git a/src/main/webapp/bower_components/bootstrap/less/pager.less b/src/main/webapp/bower_components/bootstrap/less/pager.less deleted file mode 100644 index 14761882..00000000 --- a/src/main/webapp/bower_components/bootstrap/less/pager.less +++ /dev/null @@ -1,43 +0,0 @@ -// -// Pager pagination -// -------------------------------------------------- - - -.pager { - margin: @baseLineHeight 0; - list-style: none; - text-align: center; - .clearfix(); -} -.pager li { - display: inline; -} -.pager li > a, -.pager li > span { - display: inline-block; - padding: 5px 14px; - background-color: #fff; - border: 1px solid #ddd; - .border-radius(15px); -} -.pager li > a:hover, -.pager li > a:focus { - text-decoration: none; - background-color: #f5f5f5; -} -.pager .next > a, -.pager .next > span { - float: right; -} -.pager .previous > a, -.pager .previous > span { - float: left; -} -.pager .disabled > a, -.pager .disabled > a:hover, -.pager .disabled > a:focus, -.pager .disabled > span { - color: @grayLight; - background-color: #fff; - cursor: default; -} \ No newline at end of file diff --git a/src/main/webapp/bower_components/bootstrap/less/pagination.less b/src/main/webapp/bower_components/bootstrap/less/pagination.less deleted file mode 100644 index a789db2d..00000000 --- a/src/main/webapp/bower_components/bootstrap/less/pagination.less +++ /dev/null @@ -1,123 +0,0 @@ -// -// Pagination (multiple pages) -// -------------------------------------------------- - -// Space out pagination from surrounding content -.pagination { - margin: @baseLineHeight 0; -} - -.pagination ul { - // Allow for text-based alignment - display: inline-block; - .ie7-inline-block(); - // Reset default ul styles - margin-left: 0; - margin-bottom: 0; - // Visuals - .border-radius(@baseBorderRadius); - .box-shadow(0 1px 2px rgba(0,0,0,.05)); -} -.pagination ul > li { - display: inline; // Remove list-style and block-level defaults -} -.pagination ul > li > a, -.pagination ul > li > span { - float: left; // Collapse white-space - padding: 4px 12px; - line-height: @baseLineHeight; - text-decoration: none; - background-color: @paginationBackground; - border: 1px solid @paginationBorder; - border-left-width: 0; -} -.pagination ul > li > a:hover, -.pagination ul > li > a:focus, -.pagination ul > .active > a, -.pagination ul > .active > span { - background-color: @paginationActiveBackground; -} -.pagination ul > .active > a, -.pagination ul > .active > span { - color: @grayLight; - cursor: default; -} -.pagination ul > .disabled > span, -.pagination ul > .disabled > a, -.pagination ul > .disabled > a:hover, -.pagination ul > .disabled > a:focus { - color: @grayLight; - background-color: transparent; - cursor: default; -} -.pagination ul > li:first-child > a, -.pagination ul > li:first-child > span { - border-left-width: 1px; - .border-left-radius(@baseBorderRadius); -} -.pagination ul > li:last-child > a, -.pagination ul > li:last-child > span { - .border-right-radius(@baseBorderRadius); -} - - -// Alignment -// -------------------------------------------------- - -.pagination-centered { - text-align: center; -} -.pagination-right { - text-align: right; -} - - -// Sizing -// -------------------------------------------------- - -// Large -.pagination-large { - ul > li > a, - ul > li > span { - padding: @paddingLarge; - font-size: @fontSizeLarge; - } - ul > li:first-child > a, - ul > li:first-child > span { - .border-left-radius(@borderRadiusLarge); - } - ul > li:last-child > a, - ul > li:last-child > span { - .border-right-radius(@borderRadiusLarge); - } -} - -// Small and mini -.pagination-mini, -.pagination-small { - ul > li:first-child > a, - ul > li:first-child > span { - .border-left-radius(@borderRadiusSmall); - } - ul > li:last-child > a, - ul > li:last-child > span { - .border-right-radius(@borderRadiusSmall); - } -} - -// Small -.pagination-small { - ul > li > a, - ul > li > span { - padding: @paddingSmall; - font-size: @fontSizeSmall; - } -} -// Mini -.pagination-mini { - ul > li > a, - ul > li > span { - padding: @paddingMini; - font-size: @fontSizeMini; - } -} diff --git a/src/main/webapp/bower_components/bootstrap/less/popovers.less b/src/main/webapp/bower_components/bootstrap/less/popovers.less deleted file mode 100644 index aae35c8c..00000000 --- a/src/main/webapp/bower_components/bootstrap/less/popovers.less +++ /dev/null @@ -1,133 +0,0 @@ -// -// Popovers -// -------------------------------------------------- - - -.popover { - position: absolute; - top: 0; - left: 0; - z-index: @zindexPopover; - display: none; - max-width: 276px; - padding: 1px; - text-align: left; // Reset given new insertion method - background-color: @popoverBackground; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; - border: 1px solid #ccc; - border: 1px solid rgba(0,0,0,.2); - .border-radius(6px); - .box-shadow(0 5px 10px rgba(0,0,0,.2)); - - // Overrides for proper insertion - white-space: normal; - - // Offset the popover to account for the popover arrow - &.top { margin-top: -10px; } - &.right { margin-left: 10px; } - &.bottom { margin-top: 10px; } - &.left { margin-left: -10px; } -} - -.popover-title { - margin: 0; // reset heading margin - padding: 8px 14px; - font-size: 14px; - font-weight: normal; - line-height: 18px; - background-color: @popoverTitleBackground; - border-bottom: 1px solid darken(@popoverTitleBackground, 5%); - .border-radius(5px 5px 0 0); - - &:empty { - display: none; - } -} - -.popover-content { - padding: 9px 14px; -} - -// Arrows -// -// .arrow is outer, .arrow:after is inner - -.popover .arrow, -.popover .arrow:after { - position: absolute; - display: block; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.popover .arrow { - border-width: @popoverArrowOuterWidth; -} -.popover .arrow:after { - border-width: @popoverArrowWidth; - content: ""; -} - -.popover { - &.top .arrow { - left: 50%; - margin-left: -@popoverArrowOuterWidth; - border-bottom-width: 0; - border-top-color: #999; // IE8 fallback - border-top-color: @popoverArrowOuterColor; - bottom: -@popoverArrowOuterWidth; - &:after { - bottom: 1px; - margin-left: -@popoverArrowWidth; - border-bottom-width: 0; - border-top-color: @popoverArrowColor; - } - } - &.right .arrow { - top: 50%; - left: -@popoverArrowOuterWidth; - margin-top: -@popoverArrowOuterWidth; - border-left-width: 0; - border-right-color: #999; // IE8 fallback - border-right-color: @popoverArrowOuterColor; - &:after { - left: 1px; - bottom: -@popoverArrowWidth; - border-left-width: 0; - border-right-color: @popoverArrowColor; - } - } - &.bottom .arrow { - left: 50%; - margin-left: -@popoverArrowOuterWidth; - border-top-width: 0; - border-bottom-color: #999; // IE8 fallback - border-bottom-color: @popoverArrowOuterColor; - top: -@popoverArrowOuterWidth; - &:after { - top: 1px; - margin-left: -@popoverArrowWidth; - border-top-width: 0; - border-bottom-color: @popoverArrowColor; - } - } - - &.left .arrow { - top: 50%; - right: -@popoverArrowOuterWidth; - margin-top: -@popoverArrowOuterWidth; - border-right-width: 0; - border-left-color: #999; // IE8 fallback - border-left-color: @popoverArrowOuterColor; - &:after { - right: 1px; - border-right-width: 0; - border-left-color: @popoverArrowColor; - bottom: -@popoverArrowWidth; - } - } - -} diff --git a/src/main/webapp/bower_components/bootstrap/less/progress-bars.less b/src/main/webapp/bower_components/bootstrap/less/progress-bars.less deleted file mode 100644 index 5e0c3dda..00000000 --- a/src/main/webapp/bower_components/bootstrap/less/progress-bars.less +++ /dev/null @@ -1,122 +0,0 @@ -// -// Progress bars -// -------------------------------------------------- - - -// ANIMATIONS -// ---------- - -// Webkit -@-webkit-keyframes progress-bar-stripes { - from { background-position: 40px 0; } - to { background-position: 0 0; } -} - -// Firefox -@-moz-keyframes progress-bar-stripes { - from { background-position: 40px 0; } - to { background-position: 0 0; } -} - -// IE9 -@-ms-keyframes progress-bar-stripes { - from { background-position: 40px 0; } - to { background-position: 0 0; } -} - -// Opera -@-o-keyframes progress-bar-stripes { - from { background-position: 0 0; } - to { background-position: 40px 0; } -} - -// Spec -@keyframes progress-bar-stripes { - from { background-position: 40px 0; } - to { background-position: 0 0; } -} - - - -// THE BARS -// -------- - -// Outer container -.progress { - overflow: hidden; - height: @baseLineHeight; - margin-bottom: @baseLineHeight; - #gradient > .vertical(#f5f5f5, #f9f9f9); - .box-shadow(inset 0 1px 2px rgba(0,0,0,.1)); - .border-radius(@baseBorderRadius); -} - -// Bar of progress -.progress .bar { - width: 0%; - height: 100%; - color: @white; - float: left; - font-size: 12px; - text-align: center; - text-shadow: 0 -1px 0 rgba(0,0,0,.25); - #gradient > .vertical(#149bdf, #0480be); - .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15)); - .box-sizing(border-box); - .transition(width .6s ease); -} -.progress .bar + .bar { - .box-shadow(~"inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15)"); -} - -// Striped bars -.progress-striped .bar { - #gradient > .striped(#149bdf); - .background-size(40px 40px); -} - -// Call animation for the active one -.progress.active .bar { - -webkit-animation: progress-bar-stripes 2s linear infinite; - -moz-animation: progress-bar-stripes 2s linear infinite; - -ms-animation: progress-bar-stripes 2s linear infinite; - -o-animation: progress-bar-stripes 2s linear infinite; - animation: progress-bar-stripes 2s linear infinite; -} - - - -// COLORS -// ------ - -// Danger (red) -.progress-danger .bar, .progress .bar-danger { - #gradient > .vertical(#ee5f5b, #c43c35); -} -.progress-danger.progress-striped .bar, .progress-striped .bar-danger { - #gradient > .striped(#ee5f5b); -} - -// Success (green) -.progress-success .bar, .progress .bar-success { - #gradient > .vertical(#62c462, #57a957); -} -.progress-success.progress-striped .bar, .progress-striped .bar-success { - #gradient > .striped(#62c462); -} - -// Info (teal) -.progress-info .bar, .progress .bar-info { - #gradient > .vertical(#5bc0de, #339bb9); -} -.progress-info.progress-striped .bar, .progress-striped .bar-info { - #gradient > .striped(#5bc0de); -} - -// Warning (orange) -.progress-warning .bar, .progress .bar-warning { - #gradient > .vertical(lighten(@orange, 15%), @orange); -} -.progress-warning.progress-striped .bar, .progress-striped .bar-warning { - #gradient > .striped(lighten(@orange, 15%)); -} diff --git a/src/main/webapp/bower_components/bootstrap/less/reset.less b/src/main/webapp/bower_components/bootstrap/less/reset.less deleted file mode 100644 index 4806bd5e..00000000 --- a/src/main/webapp/bower_components/bootstrap/less/reset.less +++ /dev/null @@ -1,216 +0,0 @@ -// -// Reset CSS -// Adapted from http://github.com/necolas/normalize.css -// -------------------------------------------------- - - -// Display in IE6-9 and FF3 -// ------------------------- - -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -nav, -section { - display: block; -} - -// Display block in IE6-9 and FF3 -// ------------------------- - -audio, -canvas, -video { - display: inline-block; - *display: inline; - *zoom: 1; -} - -// Prevents modern browsers from displaying 'audio' without controls -// ------------------------- - -audio:not([controls]) { - display: none; -} - -// Base settings -// ------------------------- - -html { - font-size: 100%; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; -} -// Focus states -a:focus { - .tab-focus(); -} -// Hover & Active -a:hover, -a:active { - outline: 0; -} - -// Prevents sub and sup affecting line-height in all browsers -// ------------------------- - -sub, -sup { - position: relative; - font-size: 75%; - line-height: 0; - vertical-align: baseline; -} -sup { - top: -0.5em; -} -sub { - bottom: -0.25em; -} - -// Img border in a's and image quality -// ------------------------- - -img { - /* Responsive images (ensure images don't scale beyond their parents) */ - max-width: 100%; /* Part 1: Set a maxium relative to the parent */ - width: auto\9; /* IE7-8 need help adjusting responsive images */ - height: auto; /* Part 2: Scale the height according to the width, otherwise you get stretching */ - - vertical-align: middle; - border: 0; - -ms-interpolation-mode: bicubic; -} - -// Prevent max-width from affecting Google Maps -#map_canvas img, -.google-maps img { - max-width: none; -} - -// Forms -// ------------------------- - -// Font size in all browsers, margin changes, misc consistency -button, -input, -select, -textarea { - margin: 0; - font-size: 100%; - vertical-align: middle; -} -button, -input { - *overflow: visible; // Inner spacing ie IE6/7 - line-height: normal; // FF3/4 have !important on line-height in UA stylesheet -} -button::-moz-focus-inner, -input::-moz-focus-inner { // Inner padding and border oddities in FF3/4 - padding: 0; - border: 0; -} -button, -html input[type="button"], // Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` and `video` controls. -input[type="reset"], -input[type="submit"] { - -webkit-appearance: button; // Corrects inability to style clickable `input` types in iOS. - cursor: pointer; // Improves usability and consistency of cursor style between image-type `input` and others. -} -label, -select, -button, -input[type="button"], -input[type="reset"], -input[type="submit"], -input[type="radio"], -input[type="checkbox"] { - cursor: pointer; // Improves usability and consistency of cursor style between image-type `input` and others. -} -input[type="search"] { // Appearance in Safari/Chrome - .box-sizing(content-box); - -webkit-appearance: textfield; -} -input[type="search"]::-webkit-search-decoration, -input[type="search"]::-webkit-search-cancel-button { - -webkit-appearance: none; // Inner-padding issues in Chrome OSX, Safari 5 -} -textarea { - overflow: auto; // Remove vertical scrollbar in IE6-9 - vertical-align: top; // Readability and alignment cross-browser -} - - -// Printing -// ------------------------- -// Source: https://github.com/h5bp/html5-boilerplate/blob/master/css/main.css - -@media print { - - * { - text-shadow: none !important; - color: #000 !important; // Black prints faster: h5bp.com/s - background: transparent !important; - box-shadow: none !important; - } - - a, - a:visited { - text-decoration: underline; - } - - a[href]:after { - content: " (" attr(href) ")"; - } - - abbr[title]:after { - content: " (" attr(title) ")"; - } - - // Don't show links for images, or javascript/internal links - .ir a:after, - a[href^="javascript:"]:after, - a[href^="#"]:after { - content: ""; - } - - pre, - blockquote { - border: 1px solid #999; - page-break-inside: avoid; - } - - thead { - display: table-header-group; // h5bp.com/t - } - - tr, - img { - page-break-inside: avoid; - } - - img { - max-width: 100% !important; - } - - @page { - margin: 0.5cm; - } - - p, - h2, - h3 { - orphans: 3; - widows: 3; - } - - h2, - h3 { - page-break-after: avoid; - } -} diff --git a/src/main/webapp/bower_components/bootstrap/less/responsive-1200px-min.less b/src/main/webapp/bower_components/bootstrap/less/responsive-1200px-min.less deleted file mode 100644 index 4f35ba6c..00000000 --- a/src/main/webapp/bower_components/bootstrap/less/responsive-1200px-min.less +++ /dev/null @@ -1,28 +0,0 @@ -// -// Responsive: Large desktop and up -// -------------------------------------------------- - - -@media (min-width: 1200px) { - - // Fixed grid - #grid > .core(@gridColumnWidth1200, @gridGutterWidth1200); - - // Fluid grid - #grid > .fluid(@fluidGridColumnWidth1200, @fluidGridGutterWidth1200); - - // Input grid - #grid > .input(@gridColumnWidth1200, @gridGutterWidth1200); - - // Thumbnails - .thumbnails { - margin-left: -@gridGutterWidth1200; - } - .thumbnails > li { - margin-left: @gridGutterWidth1200; - } - .row-fluid .thumbnails { - margin-left: 0; - } - -} diff --git a/src/main/webapp/bower_components/bootstrap/less/responsive-767px-max.less b/src/main/webapp/bower_components/bootstrap/less/responsive-767px-max.less deleted file mode 100644 index 128f4ce3..00000000 --- a/src/main/webapp/bower_components/bootstrap/less/responsive-767px-max.less +++ /dev/null @@ -1,193 +0,0 @@ -// -// Responsive: Landscape phone to desktop/tablet -// -------------------------------------------------- - - -@media (max-width: 767px) { - - // Padding to set content in a bit - body { - padding-left: 20px; - padding-right: 20px; - } - // Negative indent the now static "fixed" navbar - .navbar-fixed-top, - .navbar-fixed-bottom, - .navbar-static-top { - margin-left: -20px; - margin-right: -20px; - } - // Remove padding on container given explicit padding set on body - .container-fluid { - padding: 0; - } - - // TYPOGRAPHY - // ---------- - // Reset horizontal dl - .dl-horizontal { - dt { - float: none; - clear: none; - width: auto; - text-align: left; - } - dd { - margin-left: 0; - } - } - - // GRID & CONTAINERS - // ----------------- - // Remove width from containers - .container { - width: auto; - } - // Fluid rows - .row-fluid { - width: 100%; - } - // Undo negative margin on rows and thumbnails - .row, - .thumbnails { - margin-left: 0; - } - .thumbnails > li { - float: none; - margin-left: 0; // Reset the default margin for all li elements when no .span* classes are present - } - // Make all grid-sized elements block level again - [class*="span"], - .uneditable-input[class*="span"], // Makes uneditable inputs full-width when using grid sizing - .row-fluid [class*="span"] { - float: none; - display: block; - width: 100%; - margin-left: 0; - .box-sizing(border-box); - } - .span12, - .row-fluid .span12 { - width: 100%; - .box-sizing(border-box); - } - .row-fluid [class*="offset"]:first-child { - margin-left: 0; - } - - // FORM FIELDS - // ----------- - // Make span* classes full width - .input-large, - .input-xlarge, - .input-xxlarge, - input[class*="span"], - select[class*="span"], - textarea[class*="span"], - .uneditable-input { - .input-block-level(); - } - // But don't let it screw up prepend/append inputs - .input-prepend input, - .input-append input, - .input-prepend input[class*="span"], - .input-append input[class*="span"] { - display: inline-block; // redeclare so they don't wrap to new lines - width: auto; - } - .controls-row [class*="span"] + [class*="span"] { - margin-left: 0; - } - - // Modals - .modal { - position: fixed; - top: 20px; - left: 20px; - right: 20px; - width: auto; - margin: 0; - &.fade { top: -100px; } - &.fade.in { top: 20px; } - } - -} - - - -// UP TO LANDSCAPE PHONE -// --------------------- - -@media (max-width: 480px) { - - // Smooth out the collapsing/expanding nav - .nav-collapse { - -webkit-transform: translate3d(0, 0, 0); // activate the GPU - } - - // Block level the page header small tag for readability - .page-header h1 small { - display: block; - line-height: @baseLineHeight; - } - - // Update checkboxes for iOS - input[type="checkbox"], - input[type="radio"] { - border: 1px solid #ccc; - } - - // Remove the horizontal form styles - .form-horizontal { - .control-label { - float: none; - width: auto; - padding-top: 0; - text-align: left; - } - // Move over all input controls and content - .controls { - margin-left: 0; - } - // Move the options list down to align with labels - .control-list { - padding-top: 0; // has to be padding because margin collaspes - } - // Move over buttons in .form-actions to align with .controls - .form-actions { - padding-left: 10px; - padding-right: 10px; - } - } - - // Medias - // Reset float and spacing to stack - .media .pull-left, - .media .pull-right { - float: none; - display: block; - margin-bottom: 10px; - } - // Remove side margins since we stack instead of indent - .media-object { - margin-right: 0; - margin-left: 0; - } - - // Modals - .modal { - top: 10px; - left: 10px; - right: 10px; - } - .modal-header .close { - padding: 10px; - margin: -10px; - } - - // Carousel - .carousel-caption { - position: static; - } - -} diff --git a/src/main/webapp/bower_components/bootstrap/less/responsive-768px-979px.less b/src/main/webapp/bower_components/bootstrap/less/responsive-768px-979px.less deleted file mode 100644 index 8e8c486a..00000000 --- a/src/main/webapp/bower_components/bootstrap/less/responsive-768px-979px.less +++ /dev/null @@ -1,19 +0,0 @@ -// -// Responsive: Tablet to desktop -// -------------------------------------------------- - - -@media (min-width: 768px) and (max-width: 979px) { - - // Fixed grid - #grid > .core(@gridColumnWidth768, @gridGutterWidth768); - - // Fluid grid - #grid > .fluid(@fluidGridColumnWidth768, @fluidGridGutterWidth768); - - // Input grid - #grid > .input(@gridColumnWidth768, @gridGutterWidth768); - - // No need to reset .thumbnails here since it's the same @gridGutterWidth - -} diff --git a/src/main/webapp/bower_components/bootstrap/less/responsive-navbar.less b/src/main/webapp/bower_components/bootstrap/less/responsive-navbar.less deleted file mode 100644 index 21cd3ba6..00000000 --- a/src/main/webapp/bower_components/bootstrap/less/responsive-navbar.less +++ /dev/null @@ -1,189 +0,0 @@ -// -// Responsive: Navbar -// -------------------------------------------------- - - -// TABLETS AND BELOW -// ----------------- -@media (max-width: @navbarCollapseWidth) { - - // UNFIX THE TOPBAR - // ---------------- - // Remove any padding from the body - body { - padding-top: 0; - } - // Unfix the navbars - .navbar-fixed-top, - .navbar-fixed-bottom { - position: static; - } - .navbar-fixed-top { - margin-bottom: @baseLineHeight; - } - .navbar-fixed-bottom { - margin-top: @baseLineHeight; - } - .navbar-fixed-top .navbar-inner, - .navbar-fixed-bottom .navbar-inner { - padding: 5px; - } - .navbar .container { - width: auto; - padding: 0; - } - // Account for brand name - .navbar .brand { - padding-left: 10px; - padding-right: 10px; - margin: 0 0 0 -5px; - } - - // COLLAPSIBLE NAVBAR - // ------------------ - // Nav collapse clears brand - .nav-collapse { - clear: both; - } - // Block-level the nav - .nav-collapse .nav { - float: none; - margin: 0 0 (@baseLineHeight / 2); - } - .nav-collapse .nav > li { - float: none; - } - .nav-collapse .nav > li > a { - margin-bottom: 2px; - } - .nav-collapse .nav > .divider-vertical { - display: none; - } - .nav-collapse .nav .nav-header { - color: @navbarText; - text-shadow: none; - } - // Nav and dropdown links in navbar - .nav-collapse .nav > li > a, - .nav-collapse .dropdown-menu a { - padding: 9px 15px; - font-weight: bold; - color: @navbarLinkColor; - .border-radius(3px); - } - // Buttons - .nav-collapse .btn { - padding: 4px 10px 4px; - font-weight: normal; - .border-radius(@baseBorderRadius); - } - .nav-collapse .dropdown-menu li + li a { - margin-bottom: 2px; - } - .nav-collapse .nav > li > a:hover, - .nav-collapse .nav > li > a:focus, - .nav-collapse .dropdown-menu a:hover, - .nav-collapse .dropdown-menu a:focus { - background-color: @navbarBackground; - } - .navbar-inverse .nav-collapse .nav > li > a, - .navbar-inverse .nav-collapse .dropdown-menu a { - color: @navbarInverseLinkColor; - } - .navbar-inverse .nav-collapse .nav > li > a:hover, - .navbar-inverse .nav-collapse .nav > li > a:focus, - .navbar-inverse .nav-collapse .dropdown-menu a:hover, - .navbar-inverse .nav-collapse .dropdown-menu a:focus { - background-color: @navbarInverseBackground; - } - // Buttons in the navbar - .nav-collapse.in .btn-group { - margin-top: 5px; - padding: 0; - } - // Dropdowns in the navbar - .nav-collapse .dropdown-menu { - position: static; - top: auto; - left: auto; - float: none; - display: none; - max-width: none; - margin: 0 15px; - padding: 0; - background-color: transparent; - border: none; - .border-radius(0); - .box-shadow(none); - } - .nav-collapse .open > .dropdown-menu { - display: block; - } - - .nav-collapse .dropdown-menu:before, - .nav-collapse .dropdown-menu:after { - display: none; - } - .nav-collapse .dropdown-menu .divider { - display: none; - } - .nav-collapse .nav > li > .dropdown-menu { - &:before, - &:after { - display: none; - } - } - // Forms in navbar - .nav-collapse .navbar-form, - .nav-collapse .navbar-search { - float: none; - padding: (@baseLineHeight / 2) 15px; - margin: (@baseLineHeight / 2) 0; - border-top: 1px solid @navbarBackground; - border-bottom: 1px solid @navbarBackground; - .box-shadow(~"inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1)"); - } - .navbar-inverse .nav-collapse .navbar-form, - .navbar-inverse .nav-collapse .navbar-search { - border-top-color: @navbarInverseBackground; - border-bottom-color: @navbarInverseBackground; - } - // Pull right (secondary) nav content - .navbar .nav-collapse .nav.pull-right { - float: none; - margin-left: 0; - } - // Hide everything in the navbar save .brand and toggle button */ - .nav-collapse, - .nav-collapse.collapse { - overflow: hidden; - height: 0; - } - // Navbar button - .navbar .btn-navbar { - display: block; - } - - // STATIC NAVBAR - // ------------- - .navbar-static .navbar-inner { - padding-left: 10px; - padding-right: 10px; - } - - -} - - -// DEFAULT DESKTOP -// --------------- - -@media (min-width: @navbarCollapseDesktopWidth) { - - // Required to make the collapsing navbar work on regular desktops - .nav-collapse.collapse { - height: auto !important; - overflow: visible !important; - } - -} diff --git a/src/main/webapp/bower_components/bootstrap/less/responsive-utilities.less b/src/main/webapp/bower_components/bootstrap/less/responsive-utilities.less deleted file mode 100644 index bf43e8ef..00000000 --- a/src/main/webapp/bower_components/bootstrap/less/responsive-utilities.less +++ /dev/null @@ -1,59 +0,0 @@ -// -// Responsive: Utility classes -// -------------------------------------------------- - - -// IE10 Metro responsive -// Required for Windows 8 Metro split-screen snapping with IE10 -// Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/ -@-ms-viewport{ - width: device-width; -} - -// Hide from screenreaders and browsers -// Credit: HTML5 Boilerplate -.hidden { - display: none; - visibility: hidden; -} - -// Visibility utilities - -// For desktops -.visible-phone { display: none !important; } -.visible-tablet { display: none !important; } -.hidden-phone { } -.hidden-tablet { } -.hidden-desktop { display: none !important; } -.visible-desktop { display: inherit !important; } - -// Tablets & small desktops only -@media (min-width: 768px) and (max-width: 979px) { - // Hide everything else - .hidden-desktop { display: inherit !important; } - .visible-desktop { display: none !important ; } - // Show - .visible-tablet { display: inherit !important; } - // Hide - .hidden-tablet { display: none !important; } -} - -// Phones only -@media (max-width: 767px) { - // Hide everything else - .hidden-desktop { display: inherit !important; } - .visible-desktop { display: none !important; } - // Show - .visible-phone { display: inherit !important; } // Use inherit to restore previous behavior - // Hide - .hidden-phone { display: none !important; } -} - -// Print utilities -.visible-print { display: none !important; } -.hidden-print { } - -@media print { - .visible-print { display: inherit !important; } - .hidden-print { display: none !important; } -} diff --git a/src/main/webapp/bower_components/bootstrap/less/responsive.less b/src/main/webapp/bower_components/bootstrap/less/responsive.less deleted file mode 100644 index df633406..00000000 --- a/src/main/webapp/bower_components/bootstrap/less/responsive.less +++ /dev/null @@ -1,48 +0,0 @@ -/*! - * Bootstrap Responsive v2.3.0 - * - * Copyright 2012 Twitter, Inc - * Licensed under the Apache License v2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Designed and built with all the love in the world @twitter by @mdo and @fat. - */ - - -// Responsive.less -// For phone and tablet devices -// ------------------------------------------------------------- - - -// REPEAT VARIABLES & MIXINS -// ------------------------- -// Required since we compile the responsive stuff separately - -@import "variables.less"; // Modify this for custom colors, font-sizes, etc -@import "mixins.less"; - - -// RESPONSIVE CLASSES -// ------------------ - -@import "responsive-utilities.less"; - - -// MEDIA QUERIES -// ------------------ - -// Large desktops -@import "responsive-1200px-min.less"; - -// Tablets to regular desktops -@import "responsive-768px-979px.less"; - -// Phones to portrait tablets and narrow desktops -@import "responsive-767px-max.less"; - - -// RESPONSIVE NAVBAR -// ------------------ - -// From 979px and below, show a button to toggle navbar contents -@import "responsive-navbar.less"; diff --git a/src/main/webapp/bower_components/bootstrap/less/scaffolding.less b/src/main/webapp/bower_components/bootstrap/less/scaffolding.less deleted file mode 100644 index f17e8cad..00000000 --- a/src/main/webapp/bower_components/bootstrap/less/scaffolding.less +++ /dev/null @@ -1,53 +0,0 @@ -// -// Scaffolding -// -------------------------------------------------- - - -// Body reset -// ------------------------- - -body { - margin: 0; - font-family: @baseFontFamily; - font-size: @baseFontSize; - line-height: @baseLineHeight; - color: @textColor; - background-color: @bodyBackground; -} - - -// Links -// ------------------------- - -a { - color: @linkColor; - text-decoration: none; -} -a:hover, -a:focus { - color: @linkColorHover; - text-decoration: underline; -} - - -// Images -// ------------------------- - -// Rounded corners -.img-rounded { - .border-radius(6px); -} - -// Add polaroid-esque trim -.img-polaroid { - padding: 4px; - background-color: #fff; - border: 1px solid #ccc; - border: 1px solid rgba(0,0,0,.2); - .box-shadow(0 1px 3px rgba(0,0,0,.1)); -} - -// Perfect circle -.img-circle { - .border-radius(500px); // crank the border-radius so it works with most reasonably sized images -} diff --git a/src/main/webapp/bower_components/bootstrap/less/sprites.less b/src/main/webapp/bower_components/bootstrap/less/sprites.less deleted file mode 100644 index 1812bf71..00000000 --- a/src/main/webapp/bower_components/bootstrap/less/sprites.less +++ /dev/null @@ -1,197 +0,0 @@ -// -// Sprites -// -------------------------------------------------- - - -// ICONS -// ----- - -// All icons receive the styles of the <i> tag with a base class -// of .i and are then given a unique class to add width, height, -// and background-position. Your resulting HTML will look like -// <i class="icon-inbox"></i>. - -// For the white version of the icons, just add the .icon-white class: -// <i class="icon-inbox icon-white"></i> - -[class^="icon-"], -[class*=" icon-"] { - display: inline-block; - width: 14px; - height: 14px; - .ie7-restore-right-whitespace(); - line-height: 14px; - vertical-align: text-top; - background-image: url("@{iconSpritePath}"); - background-position: 14px 14px; - background-repeat: no-repeat; - margin-top: 1px; -} - -/* White icons with optional class, or on hover/focus/active states of certain elements */ -.icon-white, -.nav-pills > .active > a > [class^="icon-"], -.nav-pills > .active > a > [class*=" icon-"], -.nav-list > .active > a > [class^="icon-"], -.nav-list > .active > a > [class*=" icon-"], -.navbar-inverse .nav > .active > a > [class^="icon-"], -.navbar-inverse .nav > .active > a > [class*=" icon-"], -.dropdown-menu > li > a:hover > [class^="icon-"], -.dropdown-menu > li > a:focus > [class^="icon-"], -.dropdown-menu > li > a:hover > [class*=" icon-"], -.dropdown-menu > li > a:focus > [class*=" icon-"], -.dropdown-menu > .active > a > [class^="icon-"], -.dropdown-menu > .active > a > [class*=" icon-"], -.dropdown-submenu:hover > a > [class^="icon-"], -.dropdown-submenu:focus > a > [class^="icon-"], -.dropdown-submenu:hover > a > [class*=" icon-"], -.dropdown-submenu:focus > a > [class*=" icon-"] { - background-image: url("@{iconWhiteSpritePath}"); -} - -.icon-glass { background-position: 0 0; } -.icon-music { background-position: -24px 0; } -.icon-search { background-position: -48px 0; } -.icon-envelope { background-position: -72px 0; } -.icon-heart { background-position: -96px 0; } -.icon-star { background-position: -120px 0; } -.icon-star-empty { background-position: -144px 0; } -.icon-user { background-position: -168px 0; } -.icon-film { background-position: -192px 0; } -.icon-th-large { background-position: -216px 0; } -.icon-th { background-position: -240px 0; } -.icon-th-list { background-position: -264px 0; } -.icon-ok { background-position: -288px 0; } -.icon-remove { background-position: -312px 0; } -.icon-zoom-in { background-position: -336px 0; } -.icon-zoom-out { background-position: -360px 0; } -.icon-off { background-position: -384px 0; } -.icon-signal { background-position: -408px 0; } -.icon-cog { background-position: -432px 0; } -.icon-trash { background-position: -456px 0; } - -.icon-home { background-position: 0 -24px; } -.icon-file { background-position: -24px -24px; } -.icon-time { background-position: -48px -24px; } -.icon-road { background-position: -72px -24px; } -.icon-download-alt { background-position: -96px -24px; } -.icon-download { background-position: -120px -24px; } -.icon-upload { background-position: -144px -24px; } -.icon-inbox { background-position: -168px -24px; } -.icon-play-circle { background-position: -192px -24px; } -.icon-repeat { background-position: -216px -24px; } -.icon-refresh { background-position: -240px -24px; } -.icon-list-alt { background-position: -264px -24px; } -.icon-lock { background-position: -287px -24px; } // 1px off -.icon-flag { background-position: -312px -24px; } -.icon-headphones { background-position: -336px -24px; } -.icon-volume-off { background-position: -360px -24px; } -.icon-volume-down { background-position: -384px -24px; } -.icon-volume-up { background-position: -408px -24px; } -.icon-qrcode { background-position: -432px -24px; } -.icon-barcode { background-position: -456px -24px; } - -.icon-tag { background-position: 0 -48px; } -.icon-tags { background-position: -25px -48px; } // 1px off -.icon-book { background-position: -48px -48px; } -.icon-bookmark { background-position: -72px -48px; } -.icon-print { background-position: -96px -48px; } -.icon-camera { background-position: -120px -48px; } -.icon-font { background-position: -144px -48px; } -.icon-bold { background-position: -167px -48px; } // 1px off -.icon-italic { background-position: -192px -48px; } -.icon-text-height { background-position: -216px -48px; } -.icon-text-width { background-position: -240px -48px; } -.icon-align-left { background-position: -264px -48px; } -.icon-align-center { background-position: -288px -48px; } -.icon-align-right { background-position: -312px -48px; } -.icon-align-justify { background-position: -336px -48px; } -.icon-list { background-position: -360px -48px; } -.icon-indent-left { background-position: -384px -48px; } -.icon-indent-right { background-position: -408px -48px; } -.icon-facetime-video { background-position: -432px -48px; } -.icon-picture { background-position: -456px -48px; } - -.icon-pencil { background-position: 0 -72px; } -.icon-map-marker { background-position: -24px -72px; } -.icon-adjust { background-position: -48px -72px; } -.icon-tint { background-position: -72px -72px; } -.icon-edit { background-position: -96px -72px; } -.icon-share { background-position: -120px -72px; } -.icon-check { background-position: -144px -72px; } -.icon-move { background-position: -168px -72px; } -.icon-step-backward { background-position: -192px -72px; } -.icon-fast-backward { background-position: -216px -72px; } -.icon-backward { background-position: -240px -72px; } -.icon-play { background-position: -264px -72px; } -.icon-pause { background-position: -288px -72px; } -.icon-stop { background-position: -312px -72px; } -.icon-forward { background-position: -336px -72px; } -.icon-fast-forward { background-position: -360px -72px; } -.icon-step-forward { background-position: -384px -72px; } -.icon-eject { background-position: -408px -72px; } -.icon-chevron-left { background-position: -432px -72px; } -.icon-chevron-right { background-position: -456px -72px; } - -.icon-plus-sign { background-position: 0 -96px; } -.icon-minus-sign { background-position: -24px -96px; } -.icon-remove-sign { background-position: -48px -96px; } -.icon-ok-sign { background-position: -72px -96px; } -.icon-question-sign { background-position: -96px -96px; } -.icon-info-sign { background-position: -120px -96px; } -.icon-screenshot { background-position: -144px -96px; } -.icon-remove-circle { background-position: -168px -96px; } -.icon-ok-circle { background-position: -192px -96px; } -.icon-ban-circle { background-position: -216px -96px; } -.icon-arrow-left { background-position: -240px -96px; } -.icon-arrow-right { background-position: -264px -96px; } -.icon-arrow-up { background-position: -289px -96px; } // 1px off -.icon-arrow-down { background-position: -312px -96px; } -.icon-share-alt { background-position: -336px -96px; } -.icon-resize-full { background-position: -360px -96px; } -.icon-resize-small { background-position: -384px -96px; } -.icon-plus { background-position: -408px -96px; } -.icon-minus { background-position: -433px -96px; } -.icon-asterisk { background-position: -456px -96px; } - -.icon-exclamation-sign { background-position: 0 -120px; } -.icon-gift { background-position: -24px -120px; } -.icon-leaf { background-position: -48px -120px; } -.icon-fire { background-position: -72px -120px; } -.icon-eye-open { background-position: -96px -120px; } -.icon-eye-close { background-position: -120px -120px; } -.icon-warning-sign { background-position: -144px -120px; } -.icon-plane { background-position: -168px -120px; } -.icon-calendar { background-position: -192px -120px; } -.icon-random { background-position: -216px -120px; width: 16px; } -.icon-comment { background-position: -240px -120px; } -.icon-magnet { background-position: -264px -120px; } -.icon-chevron-up { background-position: -288px -120px; } -.icon-chevron-down { background-position: -313px -119px; } // 1px, 1px off -.icon-retweet { background-position: -336px -120px; } -.icon-shopping-cart { background-position: -360px -120px; } -.icon-folder-close { background-position: -384px -120px; width: 16px; } -.icon-folder-open { background-position: -408px -120px; width: 16px; } -.icon-resize-vertical { background-position: -432px -119px; } // 1px, 1px off -.icon-resize-horizontal { background-position: -456px -118px; } // 1px, 2px off - -.icon-hdd { background-position: 0 -144px; } -.icon-bullhorn { background-position: -24px -144px; } -.icon-bell { background-position: -48px -144px; } -.icon-certificate { background-position: -72px -144px; } -.icon-thumbs-up { background-position: -96px -144px; } -.icon-thumbs-down { background-position: -120px -144px; } -.icon-hand-right { background-position: -144px -144px; } -.icon-hand-left { background-position: -168px -144px; } -.icon-hand-up { background-position: -192px -144px; } -.icon-hand-down { background-position: -216px -144px; } -.icon-circle-arrow-right { background-position: -240px -144px; } -.icon-circle-arrow-left { background-position: -264px -144px; } -.icon-circle-arrow-up { background-position: -288px -144px; } -.icon-circle-arrow-down { background-position: -312px -144px; } -.icon-globe { background-position: -336px -144px; } -.icon-wrench { background-position: -360px -144px; } -.icon-tasks { background-position: -384px -144px; } -.icon-filter { background-position: -408px -144px; } -.icon-briefcase { background-position: -432px -144px; } -.icon-fullscreen { background-position: -456px -144px; } diff --git a/src/main/webapp/bower_components/bootstrap/less/tables.less b/src/main/webapp/bower_components/bootstrap/less/tables.less deleted file mode 100644 index 0e35271e..00000000 --- a/src/main/webapp/bower_components/bootstrap/less/tables.less +++ /dev/null @@ -1,244 +0,0 @@ -// -// Tables -// -------------------------------------------------- - - -// BASE TABLES -// ----------------- - -table { - max-width: 100%; - background-color: @tableBackground; - border-collapse: collapse; - border-spacing: 0; -} - -// BASELINE STYLES -// --------------- - -.table { - width: 100%; - margin-bottom: @baseLineHeight; - // Cells - th, - td { - padding: 8px; - line-height: @baseLineHeight; - text-align: left; - vertical-align: top; - border-top: 1px solid @tableBorder; - } - th { - font-weight: bold; - } - // Bottom align for column headings - thead th { - vertical-align: bottom; - } - // Remove top border from thead by default - caption + thead tr:first-child th, - caption + thead tr:first-child td, - colgroup + thead tr:first-child th, - colgroup + thead tr:first-child td, - thead:first-child tr:first-child th, - thead:first-child tr:first-child td { - border-top: 0; - } - // Account for multiple tbody instances - tbody + tbody { - border-top: 2px solid @tableBorder; - } - - // Nesting - .table { - background-color: @bodyBackground; - } -} - - - -// CONDENSED TABLE W/ HALF PADDING -// ------------------------------- - -.table-condensed { - th, - td { - padding: 4px 5px; - } -} - - -// BORDERED VERSION -// ---------------- - -.table-bordered { - border: 1px solid @tableBorder; - border-collapse: separate; // Done so we can round those corners! - *border-collapse: collapse; // IE7 can't round corners anyway - border-left: 0; - .border-radius(@baseBorderRadius); - th, - td { - border-left: 1px solid @tableBorder; - } - // Prevent a double border - caption + thead tr:first-child th, - caption + tbody tr:first-child th, - caption + tbody tr:first-child td, - colgroup + thead tr:first-child th, - colgroup + tbody tr:first-child th, - colgroup + tbody tr:first-child td, - thead:first-child tr:first-child th, - tbody:first-child tr:first-child th, - tbody:first-child tr:first-child td { - border-top: 0; - } - // For first th/td in the first row in the first thead or tbody - thead:first-child tr:first-child > th:first-child, - tbody:first-child tr:first-child > td:first-child, - tbody:first-child tr:first-child > th:first-child { - .border-top-left-radius(@baseBorderRadius); - } - // For last th/td in the first row in the first thead or tbody - thead:first-child tr:first-child > th:last-child, - tbody:first-child tr:first-child > td:last-child, - tbody:first-child tr:first-child > th:last-child { - .border-top-right-radius(@baseBorderRadius); - } - // For first th/td (can be either) in the last row in the last thead, tbody, and tfoot - thead:last-child tr:last-child > th:first-child, - tbody:last-child tr:last-child > td:first-child, - tbody:last-child tr:last-child > th:first-child, - tfoot:last-child tr:last-child > td:first-child, - tfoot:last-child tr:last-child > th:first-child { - .border-bottom-left-radius(@baseBorderRadius); - } - // For last th/td (can be either) in the last row in the last thead, tbody, and tfoot - thead:last-child tr:last-child > th:last-child, - tbody:last-child tr:last-child > td:last-child, - tbody:last-child tr:last-child > th:last-child, - tfoot:last-child tr:last-child > td:last-child, - tfoot:last-child tr:last-child > th:last-child { - .border-bottom-right-radius(@baseBorderRadius); - } - - // Clear border-radius for first and last td in the last row in the last tbody for table with tfoot - tfoot + tbody:last-child tr:last-child td:first-child { - .border-bottom-left-radius(0); - } - tfoot + tbody:last-child tr:last-child td:last-child { - .border-bottom-right-radius(0); - } - - // Special fixes to round the left border on the first td/th - caption + thead tr:first-child th:first-child, - caption + tbody tr:first-child td:first-child, - colgroup + thead tr:first-child th:first-child, - colgroup + tbody tr:first-child td:first-child { - .border-top-left-radius(@baseBorderRadius); - } - caption + thead tr:first-child th:last-child, - caption + tbody tr:first-child td:last-child, - colgroup + thead tr:first-child th:last-child, - colgroup + tbody tr:first-child td:last-child { - .border-top-right-radius(@baseBorderRadius); - } - -} - - - - -// ZEBRA-STRIPING -// -------------- - -// Default zebra-stripe styles (alternating gray and transparent backgrounds) -.table-striped { - tbody { - > tr:nth-child(odd) > td, - > tr:nth-child(odd) > th { - background-color: @tableBackgroundAccent; - } - } -} - - -// HOVER EFFECT -// ------------ -// Placed here since it has to come after the potential zebra striping -.table-hover { - tbody { - tr:hover > td, - tr:hover > th { - background-color: @tableBackgroundHover; - } - } -} - - -// TABLE CELL SIZING -// ----------------- - -// Reset default grid behavior -table td[class*="span"], -table th[class*="span"], -.row-fluid table td[class*="span"], -.row-fluid table th[class*="span"] { - display: table-cell; - float: none; // undo default grid column styles - margin-left: 0; // undo default grid column styles -} - -// Change the column widths to account for td/th padding -.table td, -.table th { - &.span1 { .tableColumns(1); } - &.span2 { .tableColumns(2); } - &.span3 { .tableColumns(3); } - &.span4 { .tableColumns(4); } - &.span5 { .tableColumns(5); } - &.span6 { .tableColumns(6); } - &.span7 { .tableColumns(7); } - &.span8 { .tableColumns(8); } - &.span9 { .tableColumns(9); } - &.span10 { .tableColumns(10); } - &.span11 { .tableColumns(11); } - &.span12 { .tableColumns(12); } -} - - - -// TABLE BACKGROUNDS -// ----------------- -// Exact selectors below required to override .table-striped - -.table tbody tr { - &.success > td { - background-color: @successBackground; - } - &.error > td { - background-color: @errorBackground; - } - &.warning > td { - background-color: @warningBackground; - } - &.info > td { - background-color: @infoBackground; - } -} - -// Hover states for .table-hover -.table-hover tbody tr { - &.success:hover > td { - background-color: darken(@successBackground, 5%); - } - &.error:hover > td { - background-color: darken(@errorBackground, 5%); - } - &.warning:hover > td { - background-color: darken(@warningBackground, 5%); - } - &.info:hover > td { - background-color: darken(@infoBackground, 5%); - } -} diff --git a/src/main/webapp/bower_components/bootstrap/less/tests/buttons.html b/src/main/webapp/bower_components/bootstrap/less/tests/buttons.html deleted file mode 100644 index 9b3c2c57..00000000 --- a/src/main/webapp/bower_components/bootstrap/less/tests/buttons.html +++ /dev/null @@ -1,139 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <title>Buttons · Bootstrap</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta name="description" content=""> - <meta name="author" content=""> - - <!-- Le styles --> - <link href="../../docs/assets/css/bootstrap.css" rel="stylesheet"> - <style> - body { - padding-top: 30px; - padding-bottom: 30px; - } - </style> - <link href="../../docs/assets/css/bootstrap-responsive.css" rel="stylesheet"> - - <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements --> - <!--[if lt IE 9]> - <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script> - <![endif]--> - - <!-- Le fav and touch icons --> - <link rel="apple-touch-icon-precomposed" sizes="144x144" href="../../docs/assets/ico/apple-touch-icon-144-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="114x114" href="../../docs/assets/ico/apple-touch-icon-114-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="72x72" href="../../docs/assets/ico/apple-touch-icon-72-precomposed.png"> - <link rel="apple-touch-icon-precomposed" href="../../docs/assets/ico/apple-touch-icon-57-precomposed.png"> - <link rel="shortcut icon" href="../../docs/assets/ico/favicon.png"> - </head> - - <body> - - <div class="container"> - - <h2>Dropups</h2> - <div class="btn-toolbar"> - <div class="btn-group dropup"> - <button class="btn">Dropup</button> - <button class="btn dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group dropup"> - <button class="btn btn-primary">Dropup</button> - <button class="btn btn-primary dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group dropup"> - <button class="btn btn-danger">Dropup</button> - <button class="btn btn-danger dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group dropup"> - <button class="btn btn-warning">Dropup</button> - <button class="btn btn-warning dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group dropup"> - <button class="btn btn-success">Dropup</button> - <button class="btn btn-success dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group dropup"> - <button class="btn btn-info">Dropup</button> - <button class="btn btn-info dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group dropup"> - <button class="btn btn-inverse">Dropup</button> - <button class="btn btn-inverse dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - </div><!-- /btn-toolbar --> - - - </div> <!-- /container --> - - <!-- Le javascript - ================================================== --> - <!-- Placed at the end of the document so the pages load faster --> - <script src="../../docs/assets/js/jquery.js"></script> - <script src="../../docs/assets/js/bootstrap-transition.js"></script> - <script src="../../docs/assets/js/bootstrap-alert.js"></script> - <script src="../../docs/assets/js/bootstrap-modal.js"></script> - <script src="../../docs/assets/js/bootstrap-dropdown.js"></script> - <script src="../../docs/assets/js/bootstrap-scrollspy.js"></script> - <script src="../../docs/assets/js/bootstrap-tab.js"></script> - <script src="../../docs/assets/js/bootstrap-tooltip.js"></script> - <script src="../../docs/assets/js/bootstrap-popover.js"></script> - <script src="../../docs/assets/js/bootstrap-button.js"></script> - <script src="../../docs/assets/js/bootstrap-collapse.js"></script> - <script src="../../docs/assets/js/bootstrap-carousel.js"></script> - <script src="../../docs/assets/js/bootstrap-typeahead.js"></script> - - </body> -</html> diff --git a/src/main/webapp/bower_components/bootstrap/less/tests/css-tests.css b/src/main/webapp/bower_components/bootstrap/less/tests/css-tests.css deleted file mode 100644 index 0f5604ee..00000000 --- a/src/main/webapp/bower_components/bootstrap/less/tests/css-tests.css +++ /dev/null @@ -1,150 +0,0 @@ -/*! - * Bootstrap CSS Tests - */ - - -/* Remove background image */ -body { - background-image: none; -} - -/* Space out subhead */ -.subhead { - margin-bottom: 36px; -} -/*h4 { - margin-bottom: 5px; -} -*/ - -.type-test { - margin-bottom: 20px; - padding: 0 20px 20px; - background: url(../../docs/assets/img/grid-baseline-20px.png); -} -.type-test h1, -.type-test h2, -.type-test h3, -.type-test h4, -.type-test h5, -.type-test h6 { - background-color: rgba(255,0,0,.2); -} - - -/* colgroup tests */ -.col1 { - background-color: rgba(255,0,0,.1); -} -.col2 { - background-color: rgba(0,255,0,.1); -} -.col3 { - background-color: rgba(0,0,255,.1); -} - - -/* Fluid row inputs */ -#rowInputs .row > [class*=span], -#fluidRowInputs .row-fluid > [class*=span] { - background-color: rgba(255,0,0,.1); -} - - -/* Fluid grid */ -.fluid-grid { - margin-bottom: 45px; -} -.fluid-grid .row { - height: 40px; - padding-top: 10px; - margin-top: 10px; - color: #ddd; - text-align: center; -} -.fluid-grid .span1 { - background-color: #999; -} - - -/* Gradients */ - -[class^="gradient-"] { - width: 100%; - height: 400px; - margin: 20px 0; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; - border-radius: 5px; -} - -.gradient-horizontal { - background-color: #333333; - background-image: -moz-linear-gradient(left, #555555, #333333); - background-image: -webkit-gradient(linear, 0 0, 100% 0, from(#555555), to(#333333)); - background-image: -webkit-linear-gradient(left, #555555, #333333); - background-image: -o-linear-gradient(left, #555555, #333333); - background-image: linear-gradient(to right, #555555, #333333); - background-repeat: repeat-x; - filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ff555555', endColorstr='#ff333333', GradientType=1); -} - -.gradient-vertical { - background-color: #474747; - background-image: -moz-linear-gradient(top, #555555, #333333); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#555555), to(#333333)); - background-image: -webkit-linear-gradient(top, #555555, #333333); - background-image: -o-linear-gradient(top, #555555, #333333); - background-image: linear-gradient(to bottom, #555555, #333333); - background-repeat: repeat-x; - filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ff555555', endColorstr='#ff333333', GradientType=0); -} - -.gradient-directional { - background-color: #333333; - background-image: -moz-linear-gradient(45deg, #555555, #333333); - background-image: -webkit-linear-gradient(45deg, #555555, #333333); - background-image: -o-linear-gradient(45deg, #555555, #333333); - background-image: linear-gradient(45deg, #555555, #333333); - background-repeat: repeat-x; -} - -.gradient-vertical-three { - background-color: #8940a5; - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#00b3ee), color-stop(50%, #7a43b6), to(#c3325f)); - background-image: -webkit-linear-gradient(#00b3ee, #7a43b6 50%, #c3325f); - background-image: -moz-linear-gradient(top, #00b3ee, #7a43b6 50%, #c3325f); - background-image: -o-linear-gradient(#00b3ee, #7a43b6 50%, #c3325f); - background-image: linear-gradient(#00b3ee, #7a43b6 50%, #c3325f); - background-repeat: no-repeat; - filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ff00b3ee', endColorstr='#ffc3325f', GradientType=0); -} - -.gradient-radial { - background-color: #333333; - background-image: -webkit-gradient(radial, center center, 0, center center, 460, from(#555555), to(#333333)); - background-image: -webkit-radial-gradient(circle, #555555, #333333); - background-image: -moz-radial-gradient(circle, #555555, #333333); - background-image: -o-radial-gradient(circle, #555555, #333333); - background-repeat: no-repeat; -} - -.gradient-striped { - background-color: #555555; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} - -.gradient-horizontal-three { - background-color: #00b3ee; - background-image: -webkit-gradient(left, linear, 0 0, 0 100%, from(#00b3ee), color-stop(50%, #7a43b6), to(#c3325f)); - background-image: -webkit-linear-gradient(left, #00b3ee, #7a43b6 50%, #c3325f); - background-image: -moz-linear-gradient(left, #00b3ee, #7a43b6 50%, #c3325f); - background-image: -o-linear-gradient(left, #00b3ee, #7a43b6 50%, #c3325f); - background-image: linear-gradient(to right, #00b3ee, #7a43b6 50%, #c3325f); - background-repeat: no-repeat; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00b3ee', endColorstr='#c3325f', GradientType=0); -} diff --git a/src/main/webapp/bower_components/bootstrap/less/tests/css-tests.html b/src/main/webapp/bower_components/bootstrap/less/tests/css-tests.html deleted file mode 100644 index c69688c7..00000000 --- a/src/main/webapp/bower_components/bootstrap/less/tests/css-tests.html +++ /dev/null @@ -1,1399 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <title>CSS Tests · Twitter Bootstrap</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta name="description" content=""> - <meta name="author" content=""> - - <!-- Le styles --> - <link href="../../docs/assets/css/bootstrap.css" rel="stylesheet"> - <link href="../../docs/assets/css/bootstrap-responsive.css" rel="stylesheet"> - <link href="../../docs/assets/css/docs.css" rel="stylesheet"> - <link href="../../docs/assets/js/google-code-prettify/prettify.css" rel="stylesheet"> - - <!-- CSS just for the tests page --> - <link href="css-tests.css" rel="stylesheet"> - - <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements --> - <!--[if lt IE 9]> - <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script> - <![endif]--> - - <!-- Le fav and touch icons --> - <link rel="apple-touch-icon-precomposed" sizes="144x144" href="../../docs/assets/ico/apple-touch-icon-144-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="114x114" href="../../docs/assets/ico/apple-touch-icon-114-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="72x72" href="../../docs/assets/ico/apple-touch-icon-72-precomposed.png"> - <link rel="apple-touch-icon-precomposed" href="../../docs/assets/ico/apple-touch-icon-57-precomposed.png"> - <link rel="shortcut icon" href="../../docs/assets/ico/favicon.png"> - </head> - - <body> - - - <!-- Navbar - ================================================== --> - <div class="navbar navbar-inverse navbar-fixed-top"> - <div class="navbar-inner"> - <div class="container"> - <a class="brand" href="../../docs/index.html">Bootstrap</a> - </div> - </div> - </div> - - -<!-- Masthead -================================================== --> -<header class="jumbotron subhead" id="overview"> - <div class="container"> - <h1>CSS Tests</h1> - <p class="lead">One stop shop for quick debugging and edge-case tests of CSS.</p> - </div> -</header> - - -<div class="bs-docs-canvas"> - - <div class="container"> - - - -<!-- Typography -================================================== --> - -<div class="page-header"> - <h1>Typography</h1> -</div> - -<div class="row"> - <div class="span6"> - <div class="type-test"> - <h1>h1. Heading 1</h1> - <h2>h2. Heading 2</h2> - <h3>h3. Heading 3</h3> - <h4>h4. Heading 4</h4> - <h5>h5. Heading 5</h5> - <h6>h6. Heading 6</h6> - <p>Sed posuere consectetur est at lobortis. Maecenas sed diam eget risus varius blandit sit amet non magna. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.</p> - </div> - </div> - <div class="span6"> - <div class="type-test"> - <h1>h1. Heading 1</h1> - <p>Sed posuere consectetur est at lobortis. Maecenas sed diam eget risus varius blandit sit amet non magna. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.</p> - <h2>h2. Heading 2</h2> - <p>Sed posuere consectetur est at lobortis. Maecenas sed diam eget risus varius blandit sit amet non magna. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.</p> - <h3>h3. Heading 3</h3> - <p>Sed posuere consectetur est at lobortis. Maecenas sed diam eget risus varius blandit sit amet non magna. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.</p> - <h4>h4. Heading 4</h4> - <p>Sed posuere consectetur est at lobortis. Maecenas sed diam eget risus varius blandit sit amet non magna. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.</p> - <h5>h5. Heading 5</h5> - <p>Sed posuere consectetur est at lobortis. Maecenas sed diam eget risus varius blandit sit amet non magna. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.</p> - <h6>h6. Heading 6</h6> - <p>Sed posuere consectetur est at lobortis. Maecenas sed diam eget risus varius blandit sit amet non magna. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.</p> - </div> - </div> -</div> - - - -<!-- Responsive images -================================================== --> - -<div class="page-header"> - <h1>Responsive images</h1> -</div> - -<div class="row"> - <div class="span4"> - <img data-src="holder.js/600x600" height="200"> - </div> - <div class="span4"> - <img data-src="holder.js/600x600"> - </div> - <div class="span4"> - <img data-src="holder.js/600x600"> - </div> -</div> - -<br> - -<div class="row"> - <div class="span4"> - <img data-src="holder.js/600x900" style="width: 200px;"> - </div> - <div class="span4"> - <img data-src="holder.js/200x300"> - </div> - <div class="span4"> - <img data-src="holder.js/600x600"> - </div> -</div> - -<br><br> - - - - -<!-- Fluid grid -================================================== --> - -<div class="page-header"> - <h1>Fluid grids</h1> -</div> - -<div class="fluid-grid"> - <div class="row"> - <div class="span12">12 - <div class="row-fluid"> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - </div> - </div> - </div> - <div class="row"> - <div class="span11">11 - <div class="row-fluid"> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - </div> - </div> - <div class="span1">1 - <div class="row-fluid"> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - </div> - </div> - </div> - <div class="row"> - <div class="span10">10 - <div class="row-fluid"> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - </div> - </div> - <div class="span2">2 - <div class="row-fluid"> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - </div> - </div> - </div> - <div class="row"> - <div class="span9">9 - <div class="row-fluid"> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - </div> - </div> - <div class="span3">3 - <div class="row-fluid"> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - </div> - </div> - </div> - <div class="row"> - <div class="span8">8 - <div class="row-fluid"> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - </div> - </div> - <div class="span4">4 - <div class="row-fluid"> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - </div> - </div> - </div> - <div class="row"> - <div class="span7">7 - <div class="row-fluid"> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - </div> - </div> - <div class="span5">5 - <div class="row-fluid"> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - </div> - </div> - </div> - <div class="row"> - <div class="span6">6 - <div class="row-fluid"> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - </div> - </div> - <div class="span6">6 - <div class="row-fluid"> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - </div> - </div> - </div> -</div> <!-- fluid grids --> - - - -<!-- Tables -================================================== --> - -<div class="page-header"> - <h1>Tables</h1> -</div> - -<div class="row"> - <div class="span6"> - <h4>Bordered without thead</h4> - <table class="table table-bordered"> - <tbody> - <tr> - <td>1</td> - <td>2</td> - <td>3</td> - </tr> - <tr> - <td>1</td> - <td>2</td> - <td>3</td> - </tr> - <tr> - <td>1</td> - <td>2</td> - <td>3</td> - </tr> - </tbody> - </table> - <h4>Bordered without thead, with caption</h4> - <table class="table table-bordered"> - <caption>Table caption</caption> - <tbody> - <tr> - <td>1</td> - <td>2</td> - <td>3</td> - </tr> - <tr> - <td>1</td> - <td>2</td> - <td>3</td> - </tr> - <tr> - <td>1</td> - <td>2</td> - <td>3</td> - </tr> - </tbody> - </table> - <h4>Bordered without thead, with colgroup</h4> - <table class="table table-bordered"> - <colgroup> - <col class="col1"> - <col class="col2"> - <col class="col3"> - </colgroup> - <tbody> - <tr> - <td>1</td> - <td>2</td> - <td>3</td> - </tr> - <tr> - <td>1</td> - <td>2</td> - <td>3</td> - </tr> - <tr> - <td>1</td> - <td>2</td> - <td>3</td> - </tr> - </tbody> - <tfoot> - <tr> - <td>3</td> - <td>6</td> - <td>9</td> - </tr> - </tfoot> - </table> - <h4>Bordered with thead, with colgroup</h4> - <table class="table table-bordered"> - <colgroup> - <col class="col1"> - <col class="col2"> - <col class="col3"> - </colgroup> - <thead> - <tr> - <th>A</th> - <th>B</th> - <th>C</th> - </tr> - </thead> - <tbody> - <tr> - <td>1</td> - <td>2</td> - <td>3</td> - </tr> - <tr> - <td>1</td> - <td>2</td> - <td>3</td> - </tr> - <tr> - <td>1</td> - <td>2</td> - <td>3</td> - </tr> - </tbody> - <tfoot> - <tr> - <td>3</td> - <td>6</td> - <td>9</td> - </tr> - </tfoot> - </table> - </div><!--/span--> - <div class="span6"> - <h4>Bordered with thead and caption</h4> - <table class="table table-bordered"> - <caption>Table caption</caption> - <thead> - <tr> - <th>1</th> - <th>2</th> - <th>3</th> - </tr> - </thead> - <tbody> - <tr> - <td>1</td> - <td>2</td> - <td>3</td> - </tr> - <tr> - <td>1</td> - <td>2</td> - <td>3</td> - </tr> - <tr> - <td>1</td> - <td>2</td> - <td>3</td> - </tr> - </tbody> - <tfoot> - <tr> - <td>3</td> - <td>6</td> - <td>9</td> - </tr> - </tfoot> - </table> - <h4>Bordered with rowspan and colspan</h4> - <table class="table table-bordered"> - <thead> - <tr> - <th>1</th> - <th>2</th> - <th>3</th> - </tr> - </thead> - <tbody> - <tr> - <td colspan="2">1 and 2</td> - <td>3</td> - </tr> - <tr> - <td>1</td> - <td rowspan="2">2</td> - <td>3</td> - </tr> - <tr> - <td rowspan="2">1</td> - <td>3</td> - </tr> - <tr> - <td colspan="2">2 and 3</td> - </tr> - </tbody> - </table> - </div><!--/span--> -</div><!--/row--> - - -<h4>Grid sizing</h4> -<div class="row"> - <div class="span12"> - <table class="table table-bordered"> - <thead> - <tr> - <th class="span3">1</th> - <th class="span4">2</th> - <th>3</th> - </tr> - </thead> - <tbody> - <tr> - <td colspan="2">1 and 2</td> - <td>3</td> - </tr> - <tr> - <td>1</td> - <td rowspan="2">2</td> - <td>3</td> - </tr> - <tr> - <td rowspan="2">1</td> - <td>3</td> - </tr> - <tr> - <td colspan="2">2 and 3</td> - </tr> - </tbody> - </table> - </div> -</div><!--/row--> - -<h4>Nesting and striping</h4> -<table class="table table-bordered table-striped"> - <thead> - <tr> - <th>Test</th> - </tr> - </thead> - <tbody> - <tr> - <td> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th>Test</th> - <th>Test</th> - </tr> - </thead> - <tbody> - <tr> - <td> - test - </td> - <td> - test - </td> - </tr> - <tr> - <td> - test - </td> - <td> - test - </td> - </tr> - <tr> - <td> - test - </td> - <td> - test - </td> - </tr> - </tbody> - </table> - </td> - </tr> - </tbody> -</table> - -<h4>Fluid grid sizing</h4> -<div class="row-fluid"> - <div class="span12"> - <table class="table table-bordered"> - <thead> - <tr> - <th class="span3">1</th> - <th class="span4">2</th> - <th>3</th> - </tr> - </thead> - <tbody> - <tr> - <td colspan="2">1 and 2</td> - <td>3</td> - </tr> - <tr> - <td>1</td> - <td rowspan="2">2</td> - <td>3</td> - </tr> - <tr> - <td rowspan="2">1</td> - <td>3</td> - </tr> - <tr> - <td colspan="2">2 and 3</td> - </tr> - </tbody> - </table> - </div> -</div><!--/row--> - - - -<!-- Forms -================================================== --> - -<div class="page-header"> - <h1>Forms</h1> -</div> - -<h4>Buttons and button groups</h4> -<form class="form-inline"> - <button class="btn btn-success">Save</button> - <button class="btn btn-info">Add new</button> - <div class="btn-group"> - <a class="btn dropdown-toggle" data-toggle="dropdown" href="#"> - <i class="icon-user"></i> User - <span class="caret"></span> - </a> - <ul class="dropdown-menu"> - <li><a href="#">Profile</a></li> - <li class="divider"></li> - <li><a href="#">Sign Out</a></li> - </ul> - </div> -</form> - -<h4>Horizontal form errors</h4> -<form class="form-horizontal"> - <div class="control-group error"> - <label class="control-label" for="inputError">Radio with error</label> - <div class="controls"> - <label class="radio"> - <input type="radio" id="inputError"> Oh hai - </label> - <span class="help-inline">Please correct the error</span> - </div> - </div> -</form> - -<div class="row"> - <div class="span4"> - <h4>Prepend and append on inputs</h4> - <form> - <div class="controls"> - <div class="input-prepend"> - <span class="add-on">@</span> - <input class="span2" id="prependedInput" size="16" type="text"> - </div> - </div> - <div class="controls"> - <div class="input-append"> - <input class="span2" id="prependedInput" size="16" type="text"> - <span class="add-on">@</span> - </div> - </div> - <div class="controls"> - <div class="input-prepend input-append"> - <span class="add-on">$</span> - <input class="span2" id="prependedInput" size="16" type="text"> - <span class="add-on">.00</span> - </div> - </div> - </form> - </div><!--/span--> - <div class="span4"> - <h4>Prepend and append with uneditable</h4> - <form> - <div class="input-prepend"> - <span class="add-on">$</span> - <span class="span2 uneditable-input">Some value here</span> - </div> - <div class="input-append"> - <span class="span2 uneditable-input">Some value here</span> - <span class="add-on">.00</span> - </div> - <div class="input-prepend input-append"> - <span class="add-on">$</span> - <span class="span2 uneditable-input">Some value here</span> - <span class="add-on">.00</span> - </div> - </form> - </div><!--/span--> - <div class="span4"> - <h4>Prepend with type="submit"</h4> - <form class="form-search"> - <div class="input-append"> - <input type="text" class="span2 search-query" value="" name="q"> - <input type="submit" value="Search" class="btn"> - </div> - </form> - <div class="input-append"> - <input type="text" class="span2" value="" name=""> - <input type="submit" value="Button" class="btn"> - </div> - <div class="input-append"> - <input type="text" size="16" id="appendedInputButtons" class="span2"> - <input type="submit" value="Search" class="btn"> - <button type="button" class="btn">Options</button> - </div> - </div><!--/span--> -</div><!--/row--> - -<h4>Fluid prepended and appended inputs</h4> -<div class="row-fluid"> - <div class="span6"> - <form> - <div class="controls"> - <div class="input-prepend"> - <span class="add-on">@</span><input class="span2" id="prependedInput" size="16" type="text"> - </div> - </div> - <div class="controls"> - <div class="input-append"> - <input class="span2" id="prependedInput" size="16" type="text"><span class="add-on">@</span> - </div> - </div> - <div class="controls"> - <div class="input-prepend input-append"> - <span class="add-on">$</span><input class="span2" id="prependedInput" size="16" type="text"><span class="add-on">.00</span> - </div> - </div> - </form> - </div> -</div> - -<h4>Fixed row with inputs</h4> -<p>Inputs should not extend past the light red background, set on their parent, a <code>.span*</code> column.</p> - -<div class="rowInputs"> - <div class="row"> - <div class="span12"> - <input type="text" class="span1" placeholder="span1"> - </div><!--/span--> - </div><!--/row--> - <div class="row"> - <div class="span12"> - <input type="text" class="span2" placeholder="span2"> - </div><!--/span--> - </div><!--/row--> - <div class="row"> - <div class="span12"> - <input type="text" class="span3" placeholder="span3"> - </div><!--/span--> - </div><!--/row--> - <div class="row"> - <div class="span12"> - <input type="text" class="span4" placeholder="span4"> - </div><!--/span--> - </div><!--/row--> - <div class="row"> - <div class="span12"> - <input type="text" class="span5" placeholder="span5"> - </div><!--/span--> - </div><!--/row--> - <div class="row"> - <div class="span12"> - <input type="text" class="span6" placeholder="span6"> - </div><!--/span--> - </div><!--/row--> - <div class="row"> - <div class="span12"> - <input type="text" class="span7" placeholder="span7"> - </div><!--/span--> - </div><!--/row--> - <div class="row"> - <div class="span12"> - <input type="text" class="span8" placeholder="span8"> - </div><!--/span--> - </div><!--/row--> - <div class="row"> - <div class="span12"> - <input type="text" class="span9" placeholder="span9"> - </div><!--/span--> - </div><!--/row--> - <div class="row"> - <div class="span12"> - <input type="text" class="span10" placeholder="span10"> - </div><!--/span--> - </div><!--/row--> - <div class="row"> - <div class="span12"> - <input type="text" class="span11" placeholder="span11"> - </div><!--/span--> - </div><!--/row--> - <div class="row"> - <div class="span12"> - <input type="text" class="span12" placeholder="span12"> - </div><!--/span--> - </div><!--/row--> -</div> -<br> - -<h4>Fluid row with inputs</h4> -<p>Inputs should not extend past the light red background, set on their parent, a <code>.span*</code> column.</p> -<div id="fluidRowInputs"> - <div class="row-fluid"> - <div class="span12"> - <input type="text" class="span1" placeholder="span1"> - </div><!--/span--> - </div><!--/row--> - <div class="row-fluid"> - <div class="span12"> - <input type="text" class="span2" placeholder="span2"> - </div><!--/span--> - </div><!--/row--> - <div class="row-fluid"> - <div class="span12"> - <input type="text" class="span3" placeholder="span3"> - </div><!--/span--> - </div><!--/row--> - <div class="row-fluid"> - <div class="span12"> - <input type="text" class="span4" placeholder="span4"> - </div><!--/span--> - </div><!--/row--> - <div class="row-fluid"> - <div class="span12"> - <input type="text" class="span5" placeholder="span5"> - </div><!--/span--> - </div><!--/row--> - <div class="row-fluid"> - <div class="span12"> - <input type="text" class="span6" placeholder="span6"> - </div><!--/span--> - </div><!--/row--> - <div class="row-fluid"> - <div class="span12"> - <input type="text" class="span7" placeholder="span7"> - </div><!--/span--> - </div><!--/row--> - <div class="row-fluid"> - <div class="span12"> - <input type="text" class="span8" placeholder="span8"> - </div><!--/span--> - </div><!--/row--> - <div class="row-fluid"> - <div class="span12"> - <input type="text" class="span9" placeholder="span9"> - </div><!--/span--> - </div><!--/row--> - <div class="row-fluid"> - <div class="span12"> - <input type="text" class="span10" placeholder="span10"> - </div><!--/span--> - </div><!--/row--> - <div class="row-fluid"> - <div class="span12"> - <input type="text" class="span11" placeholder="span11"> - </div><!--/span--> - </div><!--/row--> - <div class="row-fluid"> - <div class="span12"> - <input type="text" class="span12" placeholder="span12"> - </div><!--/span--> - </div><!--/row--> -</div> - -<br> - -<h4>Inline form in fluid row</h4> - -<div class="row-fluid"> - <div class="span12"> - <form class="form-inline"> - <input type="text" class="span3" placeholder="Email"> - <input type="password" class="span3" placeholder="Password"> - <label class="checkbox"> - <input type="checkbox"> Remember me - </label> - <button type="submit" class="btn">Sign in</button> - </form> - </div> -</div> - - -<br> - - -<h4>Fluid textarea at .span12</h4> -<div class="row-fluid"> - <div class="span12"> - <textarea class="span12"></textarea> - </div> -</div> - - -<br> - - -<h4>Selects</h4> -<form> - <select class="span4"> - <option>Option</option> - </select> -</form> - - -<br> - - - - -<!-- Dropdowns -================================================== --> - -<div class="page-header"> - <h1>Dropdowns</h1> -</div> - -<h4>Dropdown link with hash URL</h4> -<ul class="nav nav-pills"> - <li class="active"><a href="#">Link</a></li> - <li><a href="#">Example link</a></li> - <li class="dropdown"> - <a class="dropdown-toggle" data-toggle="dropdown" href="#"> - Dropdown <span class="caret"></span> - </a> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </li> -</ul> - -<h4>Dropdown link with custom URL and data-target</h4> -<ul class="nav nav-pills"> - <li class="active"><a href="#">Link</a></li> - <li><a href="#">Example link</a></li> - <li class="dropdown"> - <a class="dropdown-toggle" data-toggle="dropdown" data-target="#" href="path/to/page.html"> - Dropdown <span class="caret"></span> - </a> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </li> -</ul> - -<h4>Dropdown on a button</h4> -<div style="position: relative;"> - <button class="btn" type="button" data-toggle="dropdown">Dropdown <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> -</div> - -<br> - - -<!-- Thumbnails -================================================== --> - -<div class="page-header"> - <h1>Thumbnails</h1> -</div> - -<h4>Default thumbnails (no grid sizing)</h4> -<ul class="thumbnails"> - <li class="thumbnail"> - <img data-src="holder.js/260x180" alt=""> - </li> - <li class="thumbnail"> - <img data-src="holder.js/260x180" alt=""> - </li> - <li class="thumbnail"> - <img data-src="holder.js/260x180" alt=""> - </li> - <li class="thumbnail"> - <img data-src="holder.js/260x180" alt=""> - </li> -</ul> - -<!-- NOT CURRENTLY SUPPORTED -<h4>Offset thumbnails</h4> -<ul class="thumbnails"> - <li class="span3 offset3"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/260x180" alt=""> - </a> - </li> - <li class="span3"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/260x180" alt=""> - </a> - </li> - <li class="span3"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/260x180" alt=""> - </a> - </li> -</ul> ---> - -<h4>Standard grid sizing</h4> -<ul class="thumbnails"> - <li class="span3"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/260x180" alt=""> - </a> - </li> - <li class="span3 offset3"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/260x180" alt=""> - </a> - </li> - <li class="span3"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/260x180" alt=""> - </a> - </li> -</ul> - -<h4>Fluid thumbnails</h4> -<div class="row-fluid"> - <div class="span8"> - <ul class="thumbnails"> - <li class="span4"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/260x180" alt=""> - </a> - </li> - <li class="span4"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/260x180" alt=""> - </a> - </li> - <li class="span4"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/260x180" alt=""> - </a> - </li> - </ul> - </div> -</div> - - - -<!-- Tabs -================================================== --> - -<div class="page-header"> - <h1>Tabs</h1> -</div> - -<div class="tabbable tabs-left" style="margin-bottom: 18px;"> - <ul class="nav nav-tabs"> - <li class="active"><a href="#tab1" data-toggle="tab">Section 1</a></li> - <li><a href="#tab2" data-toggle="tab">Section 2</a></li> - <li><a href="#tab3" data-toggle="tab">Section 3</a></li> - </ul> - <div class="tab-content" style="padding-bottom: 9px; border-bottom: 1px solid #ddd;"> - <div class="tab-pane active" id="tab1"> - <p>I'm in Section 1.</p> - - <div class="tabbable" style="background: #f5f5f5; padding: 20px;"> - <ul class="nav nav-tabs"> - <li class="active"><a href="#tab1-1" data-toggle="tab">1.1</a></li> - <li><a href="#tab1-2" data-toggle="tab">1.2</a></li> - <li><a href="#tab1-3" data-toggle="tab">1.3</a></li> - </ul> - <div class="tab-content" style="padding-bottom: 9px; border-bottom: 1px solid #ddd;"> - <div class="tab-pane active" id="tab1-1"> - <p>I'm in Section 1.1.</p> - </div> - <div class="tab-pane" id="tab1-2"> - <p>I'm in Section 1.2.</p> - </div> - <div class="tab-pane" id="tab1-3"> - <p>I'm in Section 1.3.</p> - </div> - </div> - </div> - </div> - <div class="tab-pane" id="tab2"> - <p>Howdy, I'm in Section 2.</p> - </div> - <div class="tab-pane" id="tab3"> - <p>What up girl, this is Section 3.</p> - </div> - </div> -</div> <!-- /tabbable --> - -<br> - - -<!-- Labels -================================================== --> - -<div class="page-header"> - <h1>Labels</h1> -</div> - -<div class="row"> - <div class="span4"> - <h4>Inline label</h4> - <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Maecenas sed diam <span class="label label-warning">Label name</span> eget risus varius blandit sit amet non magna. Fusce <code>.class-name</code> dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</p> - </div><!--/span--> - <div class="span4"> - <form class="form-horizontal"> - <label>Example label</label> - <input type="text" placeholder="Input"> <span class="help-inline"><span class="label">Hey!</span> Read this.</span> - </form> - </div><!--/span--> - <div class="span4"> - <button class="btn">Action <span class="badge">2</span></button> - <button class="btn">Action <span class="label">2</span></button> - </div><!--/span--> -</div><!--/row--> - -<br> - - -<!-- Button groups -================================================== --> - -<div class="page-header"> - <h1>Buttons</h1> -</div> - -<table class="table table-bordered"> - <tbody> - <tr> - <td> - Maecenas faucibus mollis interdum. Nulla vitae elit libero, a pharetra augue. Donec ullamcorper nulla non metus auctor fringilla. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. - </td> - <td> - <div class="btn-group"> - <button class="btn">1</button> - <button class="btn">2</button> - <button class="btn">3</button> - <button class="btn">4</button> - </div> - </td> - </tr> - </tbody> -</table> - -<h4>Mini buttons: text and icon</h4> -<div class="btn-group"> - <button class="btn btn-mini">Button text</button> - <button class="btn btn-mini"><i class="icon-cog"></i></button> -</div> - -<br> - - - -<!-- Responsive utility classes -================================================== --> - -<div class="page-header"> - <h1>Responsive utility classes</h1> -</div> - -<h4>Visible on...</h4> -<ul class="responsive-utilities-test visible-on"> - <li>Phone<span class="visible-phone">✔ Phone</span></li> - <li>Tablet<span class="visible-tablet">✔ Tablet</span></li> - <li>Desktop<span class="visible-desktop">✔ Desktop</span></li> -</ul> -<ul class="responsive-utilities-test visible-on"> - <li>Phone + Tablet<span class="visible-phone visible-tablet">✔ Phone + Tablet</span></li> - <li>Tablet + Desktop<span class="visible-tablet visible-desktop">✔ Tablet + Desktop</span></li> - <li>All<span class="visible-phone visible-tablet visible-desktop">✔ All</span></li> -</ul> - -<h4>Hidden on...</h4> -<ul class="responsive-utilities-test hidden-on"> - <li>Phone<span class="hidden-phone">✔ Phone</span></li> - <li>Tablet<span class="hidden-tablet">✔ Tablet</span></li> - <li>Desktop<span class="hidden-desktop">✔ Desktop</span></li> -</ul> -<ul class="responsive-utilities-test hidden-on"> - <li>Phone + Tablet<span class="hidden-phone hidden-tablet">✔ Phone + Tablet</span></li> - <li>Tablet + Desktop<span class="hidden-tablet hidden-desktop">✔ Tablet + Desktop</span></li> - <li>All<span class="hidden-phone hidden-tablet hidden-desktop">✔ All</span></li> -</ul> - - - -<!-- Gradients -================================================== --> - -<div class="page-header"> - <h1>Gradients</h1> -</div> - -<h4>Horizontal</h4> -<div class="gradient-horizontal"></div> - -<h4>Vertical</h4> -<div class="gradient-vertical"></div> - -<h4>Directional</h4> -<div class="gradient-directional"></div> - -<h4>Three colors</h4> -<div class="gradient-vertical-three"></div> - -<h4>Radial</h4> -<div class="gradient-radial"></div> - -<h4>Striped</h4> -<div class="gradient-striped"></div> - -<h4>Horizontal three colors</h4> -<div class="gradient-horizontal-three"></div> - - - -<div class="page-header"> - <h1>Alerts</h1> -</div> - -<h4>Alert default</h4> -<div class="alert"> - <button type="button" class="close" data-dismiss="alert">×</button> - <strong>Alert!</strong> Best check yourself, you're not looking too good. -</div> -<div class="alert alert-block"> - <button type="button" class="close" data-dismiss="alert">×</button> - <p><strong>Alert!</strong> Best check yourself, you're not looking too good.</p> -</div> - -<h4>Success</h4> -<div class="alert alert-success"> - <button type="button" class="close" data-dismiss="alert">×</button> - <strong>Success!</strong> Best check yourself, you're not looking too good. -</div> -<div class="alert alert-block alert-success"> - <button type="button" class="close" data-dismiss="alert">×</button> - <p><strong>Success!</strong> Best check yourself, you're not looking too good.</p> -</div> - -<h4>Info</h4> -<div class="alert alert-info"> - <button type="button" class="close" data-dismiss="alert">×</button> - <strong>Info!</strong> Best check yourself, you're not looking too good. -</div> -<div class="alert alert-block alert-info"> - <button type="button" class="close" data-dismiss="alert">×</button> - <p><strong>Info!</strong> Best check yourself, you're not looking too good.</p> -</div> - -<h4>Warning</h4> -<div class="alert "> - <button type="button" class="close" data-dismiss="alert">×</button> - <strong>Warning!</strong> Best check yourself, you're not looking too good. -</div> -<div class="alert alert-block alert-warning"> - <button type="button" class="close" data-dismiss="alert">×</button> - <p><strong>Warning!</strong> Best check yourself, you're not looking too good.</p> -</div> - -<h4>Error</h4> -<div class="alert alert-error"> - <button type="button" class="close" data-dismiss="alert">×</button> - <strong>Error!</strong> Best check yourself, you're not looking too good. -</div> -<div class="alert alert-block alert-error"> - <button type="button" class="close" data-dismiss="alert">×</button> - <p><strong>Error!</strong> Best check yourself, you're not looking too good.</p> -</div> - - - </div><!-- /container --> - - - - <!-- Footer - ================================================== --> - <footer class="footer"> - <div class="container"> - <p class="pull-right"><a href="#">Back to top</a></p> - <p>Designed and built with all the love in the world <a href="http://twitter.com/twitter" target="_blank">@twitter</a> by <a href="http://twitter.com/mdo" target="_blank">@mdo</a> and <a href="http://twitter.com/fat" target="_blank">@fat</a>.</p> - <p>Code licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0" target="_blank">Apache License v2.0</a>. Documentation licensed under <a href="http://creativecommons.org/licenses/by/3.0/">CC BY 3.0</a>.</p> - <p>Icons from <a href="http://glyphicons.com">Glyphicons Free</a>, licensed under <a href="http://creativecommons.org/licenses/by/3.0/">CC BY 3.0</a>.</p> - <ul class="footer-links"> - <li><a href="http://blog.getbootstrap.com">Read the blog</a></li> - <li><a href="https://github.com/twitter/bootstrap/issues?state=open">Submit issues</a></li> - <li><a href="https://github.com/twitter/bootstrap/wiki">Roadmap and changelog</a></li> - </ul> - </div> - </footer> - -</div> - - - <!-- Le javascript - ================================================== --> - <!-- Placed at the end of the document so the pages load faster --> - <script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> - <script src="../../docs/assets/js/jquery.js"></script> - <script src="../../docs/assets/js/google-code-prettify/prettify.js"></script> - <script src="../../docs/assets/js/bootstrap-transition.js"></script> - <script src="../../docs/assets/js/bootstrap-alert.js"></script> - <script src="../../docs/assets/js/bootstrap-modal.js"></script> - <script src="../../docs/assets/js/bootstrap-dropdown.js"></script> - <script src="../../docs/assets/js/bootstrap-scrollspy.js"></script> - <script src="../../docs/assets/js/bootstrap-tab.js"></script> - <script src="../../docs/assets/js/bootstrap-tooltip.js"></script> - <script src="../../docs/assets/js/bootstrap-popover.js"></script> - <script src="../../docs/assets/js/bootstrap-button.js"></script> - <script src="../../docs/assets/js/bootstrap-collapse.js"></script> - <script src="../../docs/assets/js/bootstrap-carousel.js"></script> - <script src="../../docs/assets/js/bootstrap-typeahead.js"></script> - <script src="../../docs/assets/js/application.js"></script> - - - </body> -</html> diff --git a/src/main/webapp/bower_components/bootstrap/less/tests/forms-responsive.html b/src/main/webapp/bower_components/bootstrap/less/tests/forms-responsive.html deleted file mode 100644 index c3e208d0..00000000 --- a/src/main/webapp/bower_components/bootstrap/less/tests/forms-responsive.html +++ /dev/null @@ -1,71 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <title>Bootstrap, from Twitter</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta name="description" content=""> - <meta name="author" content=""> - - <!-- Le styles --> - <link href="../../docs/assets/css/bootstrap.css" rel="stylesheet"> - <link href="../../docs/assets/css/bootstrap-responsive.css" rel="stylesheet"> - <style> - body { - padding-top: 30px; - padding-bottom: 30px; - } - </style> - - <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements --> - <!--[if lt IE 9]> - <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script> - <![endif]--> - - <!-- Le fav and touch icons --> - <link rel="apple-touch-icon-precomposed" sizes="144x144" href="../../docs/assets/ico/apple-touch-icon-144-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="114x114" href="../../docs/assets/ico/apple-touch-icon-114-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="72x72" href="../../docs/assets/ico/apple-touch-icon-72-precomposed.png"> - <link rel="apple-touch-icon-precomposed" href="../../docs/assets/ico/apple-touch-icon-57-precomposed.png"> - <link rel="shortcut icon" href="../../docs/assets/ico/favicon.png"> - </head> - - <body> - - <form class="container"> - - <div class="page-header"> - <h1>Fixed grid</h1> - </div> - - <h3>Vertical alignment</h3> - <input type="text" class="span2" placeholder="span2"> - <select class="span2"><option>span2</option></select> - <span class="uneditable-input span2">span1</span> - - <h3>Width across elements</h3> - <div> - <input type="text" class="span2" placeholder="span2"> - </div> - <div> - <select class="span2"><option>span2</option></select> - </div> - <div> - <span class="uneditable-input span2">span2</span> - </div> - - - <div class="page-header"> - <h1>Fluid grid</h1> - </div> - - <div class="row-fluid"> - <input type="text" class="span2" placeholder="span2"> - <select class="span2"><option>span2</option></select> - <span class="uneditable-input span2">span1</span> - </div> - - </form> <!-- /container --> - - </body> -</html> diff --git a/src/main/webapp/bower_components/bootstrap/less/tests/forms.html b/src/main/webapp/bower_components/bootstrap/less/tests/forms.html deleted file mode 100644 index a63d728a..00000000 --- a/src/main/webapp/bower_components/bootstrap/less/tests/forms.html +++ /dev/null @@ -1,179 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <title>Bootstrap, from Twitter</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta name="description" content=""> - <meta name="author" content=""> - - <!-- Le styles --> - <link href="../../docs/assets/css/bootstrap.css" rel="stylesheet"> - <link href="../../docs/assets/css/bootstrap-responsive.css" rel="stylesheet"> - <style> - body { - padding-top: 30px; - padding-bottom: 30px; - } - </style> - - <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements --> - <!--[if lt IE 9]> - <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script> - <![endif]--> - - <!-- Le fav and touch icons --> - <link rel="shortcut icon" href="../../docs/assets/ico/favicon.ico"> - <link rel="apple-touch-icon-precomposed" sizes="144x144" href="../../docs/assets/ico/apple-touch-icon-144-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="114x114" href="../../docs/assets/ico/apple-touch-icon-114-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="72x72" href="../../docs/assets/ico/apple-touch-icon-72-precomposed.png"> - <link rel="apple-touch-icon-precomposed" href="../../docs/assets/ico/apple-touch-icon-57-precomposed.png"> - </head> - - <body> - - <form class="container"> - - <div class="page-header"> - <h1>Form controls</h1> - </div> - - <div class="row"> - <div class="span4"> - - <label>Select</label> - <select> - <option>Select</option> - <option>Option 2</option> - <option>Option 3</option> - </select> - - <hr> - - <label>textarea</label> - <textarea>Textarea</textarea> - - <hr> - - <label>text</label> - <input type="text" value="Text input"> - - <hr> - - <label>password</label> - <input type="password" value="Password input"> - - <hr> - - <label>checkbox</label> - <input type="checkbox" value=""> - - <hr> - - <label>radio</label> - <input type="radio" value=""> - - <hr> - - <label>button</label> - <input type="button" value="Button"> - - <hr> - - <label>submit</label> - <input type="submit" value="Submit"> - - <hr> - - <label>reset</label> - <input type="reset" value="Reset"> - - </div><!-- /span4 --> - <div class="span4"> - - <label>file</label> - <input type="file" value=""> - - <hr> - - <label>hidden</label> - <input type="hidden" value="hidden"> - - <hr> - - <label>image</label> - <input type="image" value=""> - - <hr> - - <label>datetime</label> - <input type="datetime" value=""> - - <hr> - - <label>datetime-local</label> - <input type="datetime-local" value=""> - - <hr> - - <label>date</label> - <input type="date" value=""> - - <hr> - - <label>month</label> - <input type="month" value=""> - - <hr> - - <label>time</label> - <input type="time" value=""> - - <hr> - - <label>week</label> - <input type="week" value=""> - - </div><!-- /span4 --> - <div class="span4"> - - <label>number</label> - <input type="number" value=""> - - <hr> - - <label>range</label> - <input type="range" value=""> - - <hr> - - <label>email</label> - <input type="email" value=""> - - <hr> - - <label>url</label> - <input type="url" value=""> - - <hr> - - <label>search</label> - <input type="search" value=""> - - <hr> - - <label>tel</label> - <input type="tel" value=""> - - <hr> - - <label>color</label> - <input type="color" value=""> - - </div><!-- /span4 --> - </div><!-- /row --> - - </form> <!-- /container --> - - </body> -</html> diff --git a/src/main/webapp/bower_components/bootstrap/less/tests/navbar-fixed-top.html b/src/main/webapp/bower_components/bootstrap/less/tests/navbar-fixed-top.html deleted file mode 100644 index 2d9a7a71..00000000 --- a/src/main/webapp/bower_components/bootstrap/less/tests/navbar-fixed-top.html +++ /dev/null @@ -1,104 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <title>Bootstrap, from Twitter</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta name="description" content=""> - <meta name="author" content=""> - - <!-- Le styles --> - <link href="../../docs/assets/css/bootstrap.css" rel="stylesheet"> - <style> - body { - padding-top: 60px; - padding-bottom: 30px; - } - </style> - <link href="../../docs/assets/css/bootstrap-responsive.css" rel="stylesheet"> - - <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements --> - <!--[if lt IE 9]> - <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script> - <![endif]--> - - <!-- Le fav and touch icons --> - <link rel="apple-touch-icon-precomposed" sizes="144x144" href="../../docs/assets/ico/apple-touch-icon-144-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="114x114" href="../../docs/assets/ico/apple-touch-icon-114-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="72x72" href="../../docs/assets/ico/apple-touch-icon-72-precomposed.png"> - <link rel="apple-touch-icon-precomposed" href="../../docs/assets/ico/apple-touch-icon-57-precomposed.png"> - <link rel="shortcut icon" href="../../docs/assets/ico/favicon.png"> - </head> - - <body> - - <!-- Fixed navbar --> - <div class="navbar navbar-fixed-top"> - <div class="navbar-inner"> - <div class="container"> - <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - </a> - <a class="brand" href="#">Project name</a> - <div class="nav-collapse collapse"> - <ul class="nav"> - <li class="active"><a href="#">Home</a></li> - <li><a href="#about">About</a></li> - <li><a href="#contact">Contact</a></li> - <li class="dropdown"> - <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li class="nav-header">Nav header</li> - <li><a href="#">Separated link</a></li> - <li><a href="#">One more separated link</a></li> - </ul> - </li> - </ul> - <ul class="nav pull-right"> - <li><a href="./navbar.html">Default</a></li> - <li><a href="./navbar-static-top.html">Static top</a></li> - <li class="active"><a href="./navbar-fixed-top.html">Fixed top</a></li> - </ul> - </div><!--/.nav-collapse --> - </div> - </div> - </div> - - <div class="container"> - - <!-- Main hero unit for a primary marketing message or call to action --> - <div class="hero-unit"> - <h1>Navbar example</h1> - <p>This example is a quick exercise to illustrate how the default, static navbar and fixed to top navbar work. It includes the responsive CSS and HTML, so it also adapts to your viewport and device.</p> - <p> - <a class="btn btn-large btn-primary" href="../components.html#navbar">View navbar docs »</a> - </p> - </div> - - </div> <!-- /container --> - - <!-- Le javascript - ================================================== --> - <!-- Placed at the end of the document so the pages load faster --> - <script src="../../docs/assets/js/jquery.js"></script> - <script src="../../docs/assets/js/bootstrap-transition.js"></script> - <script src="../../docs/assets/js/bootstrap-alert.js"></script> - <script src="../../docs/assets/js/bootstrap-modal.js"></script> - <script src="../../docs/assets/js/bootstrap-dropdown.js"></script> - <script src="../../docs/assets/js/bootstrap-scrollspy.js"></script> - <script src="../../docs/assets/js/bootstrap-tab.js"></script> - <script src="../../docs/assets/js/bootstrap-tooltip.js"></script> - <script src="../../docs/assets/js/bootstrap-popover.js"></script> - <script src="../../docs/assets/js/bootstrap-button.js"></script> - <script src="../../docs/assets/js/bootstrap-collapse.js"></script> - <script src="../../docs/assets/js/bootstrap-carousel.js"></script> - <script src="../../docs/assets/js/bootstrap-typeahead.js"></script> - - </body> -</html> diff --git a/src/main/webapp/bower_components/bootstrap/less/tests/navbar-static-top.html b/src/main/webapp/bower_components/bootstrap/less/tests/navbar-static-top.html deleted file mode 100644 index 4bead8ec..00000000 --- a/src/main/webapp/bower_components/bootstrap/less/tests/navbar-static-top.html +++ /dev/null @@ -1,107 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <title>Bootstrap, from Twitter</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta name="description" content=""> - <meta name="author" content=""> - - <!-- Le styles --> - <link href="../../docs/assets/css/bootstrap.css" rel="stylesheet"> - <style> - body { - padding-bottom: 30px; - } - .hero-unit { - margin-top: 20px; - } - </style> - <link href="../../docs/assets/css/bootstrap-responsive.css" rel="stylesheet"> - - <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements --> - <!--[if lt IE 9]> - <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script> - <![endif]--> - - <!-- Le fav and touch icons --> - <link rel="apple-touch-icon-precomposed" sizes="144x144" href="../../docs/assets/ico/apple-touch-icon-144-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="114x114" href="../../docs/assets/ico/apple-touch-icon-114-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="72x72" href="../../docs/assets/ico/apple-touch-icon-72-precomposed.png"> - <link rel="apple-touch-icon-precomposed" href="../../docs/assets/ico/apple-touch-icon-57-precomposed.png"> - <link rel="shortcut icon" href="../../docs/assets/ico/favicon.png"> - </head> - - <body> - - <!-- Static navbar --> - <div class="navbar navbar-static-top"> - <div class="navbar-inner"> - <div class="container"> - <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - </a> - <a class="brand" href="#">Project name</a> - <div class="nav-collapse collapse"> - <ul class="nav"> - <li class="active"><a href="#">Home</a></li> - <li><a href="#about">About</a></li> - <li><a href="#contact">Contact</a></li> - <li class="dropdown"> - <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li class="nav-header">Nav header</li> - <li><a href="#">Separated link</a></li> - <li><a href="#">One more separated link</a></li> - </ul> - </li> - </ul> - <ul class="nav pull-right"> - <li><a href="./navbar.html">Default</a></li> - <li class="active"><a href="./navbar-static-top.html">Static top</a></li> - <li><a href="./navbar-fixed-top.html">Fixed top</a></li> - </ul> - </div><!--/.nav-collapse --> - </div> - </div> - </div> - - - <div class="container"> - - <!-- Main hero unit for a primary marketing message or call to action --> - <div class="hero-unit"> - <h1>Navbar example</h1> - <p>This example is a quick exercise to illustrate how the default, static navbar and fixed to top navbar work. It includes the responsive CSS and HTML, so it also adapts to your viewport and device.</p> - <p> - <a class="btn btn-large btn-primary" href="../components.html#navbar">View navbar docs »</a> - </p> - </div> - - </div> <!-- /container --> - - <!-- Le javascript - ================================================== --> - <!-- Placed at the end of the document so the pages load faster --> - <script src="../../docs/assets/js/jquery.js"></script> - <script src="../../docs/assets/js/bootstrap-transition.js"></script> - <script src="../../docs/assets/js/bootstrap-alert.js"></script> - <script src="../../docs/assets/js/bootstrap-modal.js"></script> - <script src="../../docs/assets/js/bootstrap-dropdown.js"></script> - <script src="../../docs/assets/js/bootstrap-scrollspy.js"></script> - <script src="../../docs/assets/js/bootstrap-tab.js"></script> - <script src="../../docs/assets/js/bootstrap-tooltip.js"></script> - <script src="../../docs/assets/js/bootstrap-popover.js"></script> - <script src="../../docs/assets/js/bootstrap-button.js"></script> - <script src="../../docs/assets/js/bootstrap-collapse.js"></script> - <script src="../../docs/assets/js/bootstrap-carousel.js"></script> - <script src="../../docs/assets/js/bootstrap-typeahead.js"></script> - - </body> -</html> diff --git a/src/main/webapp/bower_components/bootstrap/less/tests/navbar.html b/src/main/webapp/bower_components/bootstrap/less/tests/navbar.html deleted file mode 100644 index d5ad4784..00000000 --- a/src/main/webapp/bower_components/bootstrap/less/tests/navbar.html +++ /dev/null @@ -1,107 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <title>Bootstrap, from Twitter</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta name="description" content=""> - <meta name="author" content=""> - - <!-- Le styles --> - <link href="../../docs/assets/css/bootstrap.css" rel="stylesheet"> - <style> - body { - padding-top: 0; - padding-bottom: 30px; - } - .navbar { - margin-top: 20px; - } - </style> - <link href="../../docs/assets/css/bootstrap-responsive.css" rel="stylesheet"> - - <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements --> - <!--[if lt IE 9]> - <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script> - <![endif]--> - - <!-- Le fav and touch icons --> - <link rel="apple-touch-icon-precomposed" sizes="144x144" href="../../docs/assets/ico/apple-touch-icon-144-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="114x114" href="../../docs/assets/ico/apple-touch-icon-114-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="72x72" href="../../docs/assets/ico/apple-touch-icon-72-precomposed.png"> - <link rel="apple-touch-icon-precomposed" href="../../docs/assets/ico/apple-touch-icon-57-precomposed.png"> - <link rel="shortcut icon" href="../../docs/assets/ico/favicon.png"> - </head> - - <body> - - <div class="container"> - - <!-- Static navbar --> - <div class="navbar"> - <div class="navbar-inner"> - <div class="container"> - <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - </a> - <a class="brand" href="#">Project name</a> - <div class="nav-collapse collapse"> - <ul class="nav"> - <li class="active"><a href="#">Home</a></li> - <li><a href="#about">About</a></li> - <li><a href="#contact">Contact</a></li> - <li class="dropdown"> - <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li class="nav-header">Nav header</li> - <li><a href="#">Separated link</a></li> - <li><a href="#">One more separated link</a></li> - </ul> - </li> - </ul> - <ul class="nav pull-right"> - <li class="active"><a href="./navbar.html">Default</a></li> - <li><a href="./navbar-static-top.html">Static top</a></li> - <li><a href="./navbar-fixed-top.html">Fixed top</a></li> - </ul> - </div><!--/.nav-collapse --> - </div> - </div> - </div> - - <!-- Main hero unit for a primary marketing message or call to action --> - <div class="hero-unit"> - <h1>Navbar example</h1> - <p>This example is a quick exercise to illustrate how the default, static navbar and fixed to top navbar work. It includes the responsive CSS and HTML, so it also adapts to your viewport and device.</p> - <p> - <a class="btn btn-large btn-primary" href="../components.html#navbar">View navbar docs »</a> - </p> - </div> - - </div> <!-- /container --> - - <!-- Le javascript - ================================================== --> - <!-- Placed at the end of the document so the pages load faster --> - <script src="../../docs/assets/js/jquery.js"></script> - <script src="../../docs/assets/js/bootstrap-transition.js"></script> - <script src="../../docs/assets/js/bootstrap-alert.js"></script> - <script src="../../docs/assets/js/bootstrap-modal.js"></script> - <script src="../../docs/assets/js/bootstrap-dropdown.js"></script> - <script src="../../docs/assets/js/bootstrap-scrollspy.js"></script> - <script src="../../docs/assets/js/bootstrap-tab.js"></script> - <script src="../../docs/assets/js/bootstrap-tooltip.js"></script> - <script src="../../docs/assets/js/bootstrap-popover.js"></script> - <script src="../../docs/assets/js/bootstrap-button.js"></script> - <script src="../../docs/assets/js/bootstrap-collapse.js"></script> - <script src="../../docs/assets/js/bootstrap-carousel.js"></script> - <script src="../../docs/assets/js/bootstrap-typeahead.js"></script> - - </body> -</html> diff --git a/src/main/webapp/bower_components/bootstrap/less/thumbnails.less b/src/main/webapp/bower_components/bootstrap/less/thumbnails.less deleted file mode 100644 index 4fd07d25..00000000 --- a/src/main/webapp/bower_components/bootstrap/less/thumbnails.less +++ /dev/null @@ -1,53 +0,0 @@ -// -// Thumbnails -// -------------------------------------------------- - - -// Note: `.thumbnails` and `.thumbnails > li` are overriden in responsive files - -// Make wrapper ul behave like the grid -.thumbnails { - margin-left: -@gridGutterWidth; - list-style: none; - .clearfix(); -} -// Fluid rows have no left margin -.row-fluid .thumbnails { - margin-left: 0; -} - -// Float li to make thumbnails appear in a row -.thumbnails > li { - float: left; // Explicity set the float since we don't require .span* classes - margin-bottom: @baseLineHeight; - margin-left: @gridGutterWidth; -} - -// The actual thumbnail (can be `a` or `div`) -.thumbnail { - display: block; - padding: 4px; - line-height: @baseLineHeight; - border: 1px solid #ddd; - .border-radius(@baseBorderRadius); - .box-shadow(0 1px 3px rgba(0,0,0,.055)); - .transition(all .2s ease-in-out); -} -// Add a hover/focus state for linked versions only -a.thumbnail:hover, -a.thumbnail:focus { - border-color: @linkColor; - .box-shadow(0 1px 4px rgba(0,105,214,.25)); -} - -// Images and captions -.thumbnail > img { - display: block; - max-width: 100%; - margin-left: auto; - margin-right: auto; -} -.thumbnail .caption { - padding: 9px; - color: @gray; -} diff --git a/src/main/webapp/bower_components/bootstrap/less/tooltip.less b/src/main/webapp/bower_components/bootstrap/less/tooltip.less deleted file mode 100644 index 83d5f2bd..00000000 --- a/src/main/webapp/bower_components/bootstrap/less/tooltip.less +++ /dev/null @@ -1,70 +0,0 @@ -// -// Tooltips -// -------------------------------------------------- - - -// Base class -.tooltip { - position: absolute; - z-index: @zindexTooltip; - display: block; - visibility: visible; - font-size: 11px; - line-height: 1.4; - .opacity(0); - &.in { .opacity(80); } - &.top { margin-top: -3px; padding: 5px 0; } - &.right { margin-left: 3px; padding: 0 5px; } - &.bottom { margin-top: 3px; padding: 5px 0; } - &.left { margin-left: -3px; padding: 0 5px; } -} - -// Wrapper for the tooltip content -.tooltip-inner { - max-width: 200px; - padding: 8px; - color: @tooltipColor; - text-align: center; - text-decoration: none; - background-color: @tooltipBackground; - .border-radius(@baseBorderRadius); -} - -// Arrows -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; -} -.tooltip { - &.top .tooltip-arrow { - bottom: 0; - left: 50%; - margin-left: -@tooltipArrowWidth; - border-width: @tooltipArrowWidth @tooltipArrowWidth 0; - border-top-color: @tooltipArrowColor; - } - &.right .tooltip-arrow { - top: 50%; - left: 0; - margin-top: -@tooltipArrowWidth; - border-width: @tooltipArrowWidth @tooltipArrowWidth @tooltipArrowWidth 0; - border-right-color: @tooltipArrowColor; - } - &.left .tooltip-arrow { - top: 50%; - right: 0; - margin-top: -@tooltipArrowWidth; - border-width: @tooltipArrowWidth 0 @tooltipArrowWidth @tooltipArrowWidth; - border-left-color: @tooltipArrowColor; - } - &.bottom .tooltip-arrow { - top: 0; - left: 50%; - margin-left: -@tooltipArrowWidth; - border-width: 0 @tooltipArrowWidth @tooltipArrowWidth; - border-bottom-color: @tooltipArrowColor; - } -} diff --git a/src/main/webapp/bower_components/bootstrap/less/type.less b/src/main/webapp/bower_components/bootstrap/less/type.less deleted file mode 100644 index 337138ac..00000000 --- a/src/main/webapp/bower_components/bootstrap/less/type.less +++ /dev/null @@ -1,247 +0,0 @@ -// -// Typography -// -------------------------------------------------- - - -// Body text -// ------------------------- - -p { - margin: 0 0 @baseLineHeight / 2; -} -.lead { - margin-bottom: @baseLineHeight; - font-size: @baseFontSize * 1.5; - font-weight: 200; - line-height: @baseLineHeight * 1.5; -} - - -// Emphasis & misc -// ------------------------- - -// Ex: 14px base font * 85% = about 12px -small { font-size: 85%; } - -strong { font-weight: bold; } -em { font-style: italic; } -cite { font-style: normal; } - -// Utility classes -.muted { color: @grayLight; } -a.muted:hover, -a.muted:focus { color: darken(@grayLight, 10%); } - -.text-warning { color: @warningText; } -a.text-warning:hover, -a.text-warning:focus { color: darken(@warningText, 10%); } - -.text-error { color: @errorText; } -a.text-error:hover, -a.text-error:focus { color: darken(@errorText, 10%); } - -.text-info { color: @infoText; } -a.text-info:hover, -a.text-info:focus { color: darken(@infoText, 10%); } - -.text-success { color: @successText; } -a.text-success:hover, -a.text-success:focus { color: darken(@successText, 10%); } - -.text-left { text-align: left; } -.text-right { text-align: right; } -.text-center { text-align: center; } - - -// Headings -// ------------------------- - -h1, h2, h3, h4, h5, h6 { - margin: (@baseLineHeight / 2) 0; - font-family: @headingsFontFamily; - font-weight: @headingsFontWeight; - line-height: @baseLineHeight; - color: @headingsColor; - text-rendering: optimizelegibility; // Fix the character spacing for headings - small { - font-weight: normal; - line-height: 1; - color: @grayLight; - } -} - -h1, -h2, -h3 { line-height: @baseLineHeight * 2; } - -h1 { font-size: @baseFontSize * 2.75; } // ~38px -h2 { font-size: @baseFontSize * 2.25; } // ~32px -h3 { font-size: @baseFontSize * 1.75; } // ~24px -h4 { font-size: @baseFontSize * 1.25; } // ~18px -h5 { font-size: @baseFontSize; } -h6 { font-size: @baseFontSize * 0.85; } // ~12px - -h1 small { font-size: @baseFontSize * 1.75; } // ~24px -h2 small { font-size: @baseFontSize * 1.25; } // ~18px -h3 small { font-size: @baseFontSize; } -h4 small { font-size: @baseFontSize; } - - -// Page header -// ------------------------- - -.page-header { - padding-bottom: (@baseLineHeight / 2) - 1; - margin: @baseLineHeight 0 (@baseLineHeight * 1.5); - border-bottom: 1px solid @grayLighter; -} - - - -// Lists -// -------------------------------------------------- - -// Unordered and Ordered lists -ul, ol { - padding: 0; - margin: 0 0 @baseLineHeight / 2 25px; -} -ul ul, -ul ol, -ol ol, -ol ul { - margin-bottom: 0; -} -li { - line-height: @baseLineHeight; -} - -// Remove default list styles -ul.unstyled, -ol.unstyled { - margin-left: 0; - list-style: none; -} - -// Single-line list items -ul.inline, -ol.inline { - margin-left: 0; - list-style: none; - > li { - display: inline-block; - .ie7-inline-block(); - padding-left: 5px; - padding-right: 5px; - } -} - -// Description Lists -dl { - margin-bottom: @baseLineHeight; -} -dt, -dd { - line-height: @baseLineHeight; -} -dt { - font-weight: bold; -} -dd { - margin-left: @baseLineHeight / 2; -} -// Horizontal layout (like forms) -.dl-horizontal { - .clearfix(); // Ensure dl clears floats if empty dd elements present - dt { - float: left; - width: @horizontalComponentOffset - 20; - clear: left; - text-align: right; - .text-overflow(); - } - dd { - margin-left: @horizontalComponentOffset; - } -} - -// MISC -// ---- - -// Horizontal rules -hr { - margin: @baseLineHeight 0; - border: 0; - border-top: 1px solid @hrBorder; - border-bottom: 1px solid @white; -} - -// Abbreviations and acronyms -abbr[title], -// Added data-* attribute to help out our tooltip plugin, per https://github.com/twitter/bootstrap/issues/5257 -abbr[data-original-title] { - cursor: help; - border-bottom: 1px dotted @grayLight; -} -abbr.initialism { - font-size: 90%; - text-transform: uppercase; -} - -// Blockquotes -blockquote { - padding: 0 0 0 15px; - margin: 0 0 @baseLineHeight; - border-left: 5px solid @grayLighter; - p { - margin-bottom: 0; - font-size: @baseFontSize * 1.25; - font-weight: 300; - line-height: 1.25; - } - small { - display: block; - line-height: @baseLineHeight; - color: @grayLight; - &:before { - content: '\2014 \00A0'; - } - } - - // Float right with text-align: right - &.pull-right { - float: right; - padding-right: 15px; - padding-left: 0; - border-right: 5px solid @grayLighter; - border-left: 0; - p, - small { - text-align: right; - } - small { - &:before { - content: ''; - } - &:after { - content: '\00A0 \2014'; - } - } - } -} - -// Quotes -q:before, -q:after, -blockquote:before, -blockquote:after { - content: ""; -} - -// Addresses -address { - display: block; - margin-bottom: @baseLineHeight; - font-style: normal; - line-height: @baseLineHeight; -} diff --git a/src/main/webapp/bower_components/bootstrap/less/utilities.less b/src/main/webapp/bower_components/bootstrap/less/utilities.less deleted file mode 100644 index 314b4ffd..00000000 --- a/src/main/webapp/bower_components/bootstrap/less/utilities.less +++ /dev/null @@ -1,30 +0,0 @@ -// -// Utility classes -// -------------------------------------------------- - - -// Quick floats -.pull-right { - float: right; -} -.pull-left { - float: left; -} - -// Toggling content -.hide { - display: none; -} -.show { - display: block; -} - -// Visibility -.invisible { - visibility: hidden; -} - -// For Affix plugin -.affix { - position: fixed; -} diff --git a/src/main/webapp/bower_components/bootstrap/less/variables.less b/src/main/webapp/bower_components/bootstrap/less/variables.less deleted file mode 100644 index 31c131b1..00000000 --- a/src/main/webapp/bower_components/bootstrap/less/variables.less +++ /dev/null @@ -1,301 +0,0 @@ -// -// Variables -// -------------------------------------------------- - - -// Global values -// -------------------------------------------------- - - -// Grays -// ------------------------- -@black: #000; -@grayDarker: #222; -@grayDark: #333; -@gray: #555; -@grayLight: #999; -@grayLighter: #eee; -@white: #fff; - - -// Accent colors -// ------------------------- -@blue: #049cdb; -@blueDark: #0064cd; -@green: #46a546; -@red: #9d261d; -@yellow: #ffc40d; -@orange: #f89406; -@pink: #c3325f; -@purple: #7a43b6; - - -// Scaffolding -// ------------------------- -@bodyBackground: @white; -@textColor: @grayDark; - - -// Links -// ------------------------- -@linkColor: #08c; -@linkColorHover: darken(@linkColor, 15%); - - -// Typography -// ------------------------- -@sansFontFamily: "Helvetica Neue", Helvetica, Arial, sans-serif; -@serifFontFamily: Georgia, "Times New Roman", Times, serif; -@monoFontFamily: Monaco, Menlo, Consolas, "Courier New", monospace; - -@baseFontSize: 14px; -@baseFontFamily: @sansFontFamily; -@baseLineHeight: 20px; -@altFontFamily: @serifFontFamily; - -@headingsFontFamily: inherit; // empty to use BS default, @baseFontFamily -@headingsFontWeight: bold; // instead of browser default, bold -@headingsColor: inherit; // empty to use BS default, @textColor - - -// Component sizing -// ------------------------- -// Based on 14px font-size and 20px line-height - -@fontSizeLarge: @baseFontSize * 1.25; // ~18px -@fontSizeSmall: @baseFontSize * 0.85; // ~12px -@fontSizeMini: @baseFontSize * 0.75; // ~11px - -@paddingLarge: 11px 19px; // 44px -@paddingSmall: 2px 10px; // 26px -@paddingMini: 0 6px; // 22px - -@baseBorderRadius: 4px; -@borderRadiusLarge: 6px; -@borderRadiusSmall: 3px; - - -// Tables -// ------------------------- -@tableBackground: transparent; // overall background-color -@tableBackgroundAccent: #f9f9f9; // for striping -@tableBackgroundHover: #f5f5f5; // for hover -@tableBorder: #ddd; // table and cell border - -// Buttons -// ------------------------- -@btnBackground: @white; -@btnBackgroundHighlight: darken(@white, 10%); -@btnBorder: #ccc; - -@btnPrimaryBackground: @linkColor; -@btnPrimaryBackgroundHighlight: spin(@btnPrimaryBackground, 20%); - -@btnInfoBackground: #5bc0de; -@btnInfoBackgroundHighlight: #2f96b4; - -@btnSuccessBackground: #62c462; -@btnSuccessBackgroundHighlight: #51a351; - -@btnWarningBackground: lighten(@orange, 15%); -@btnWarningBackgroundHighlight: @orange; - -@btnDangerBackground: #ee5f5b; -@btnDangerBackgroundHighlight: #bd362f; - -@btnInverseBackground: #444; -@btnInverseBackgroundHighlight: @grayDarker; - - -// Forms -// ------------------------- -@inputBackground: @white; -@inputBorder: #ccc; -@inputBorderRadius: @baseBorderRadius; -@inputDisabledBackground: @grayLighter; -@formActionsBackground: #f5f5f5; -@inputHeight: @baseLineHeight + 10px; // base line-height + 8px vertical padding + 2px top/bottom border - - -// Dropdowns -// ------------------------- -@dropdownBackground: @white; -@dropdownBorder: rgba(0,0,0,.2); -@dropdownDividerTop: #e5e5e5; -@dropdownDividerBottom: @white; - -@dropdownLinkColor: @grayDark; -@dropdownLinkColorHover: @white; -@dropdownLinkColorActive: @white; - -@dropdownLinkBackgroundActive: @linkColor; -@dropdownLinkBackgroundHover: @dropdownLinkBackgroundActive; - - - -// COMPONENT VARIABLES -// -------------------------------------------------- - - -// Z-index master list -// ------------------------- -// Used for a bird's eye view of components dependent on the z-axis -// Try to avoid customizing these :) -@zindexDropdown: 1000; -@zindexPopover: 1010; -@zindexTooltip: 1030; -@zindexFixedNavbar: 1030; -@zindexModalBackdrop: 1040; -@zindexModal: 1050; - - -// Sprite icons path -// ------------------------- -@iconSpritePath: "../img/glyphicons-halflings.png"; -@iconWhiteSpritePath: "../img/glyphicons-halflings-white.png"; - - -// Input placeholder text color -// ------------------------- -@placeholderText: @grayLight; - - -// Hr border color -// ------------------------- -@hrBorder: @grayLighter; - - -// Horizontal forms & lists -// ------------------------- -@horizontalComponentOffset: 180px; - - -// Wells -// ------------------------- -@wellBackground: #f5f5f5; - - -// Navbar -// ------------------------- -@navbarCollapseWidth: 979px; -@navbarCollapseDesktopWidth: @navbarCollapseWidth + 1; - -@navbarHeight: 40px; -@navbarBackgroundHighlight: #ffffff; -@navbarBackground: darken(@navbarBackgroundHighlight, 5%); -@navbarBorder: darken(@navbarBackground, 12%); - -@navbarText: #777; -@navbarLinkColor: #777; -@navbarLinkColorHover: @grayDark; -@navbarLinkColorActive: @gray; -@navbarLinkBackgroundHover: transparent; -@navbarLinkBackgroundActive: darken(@navbarBackground, 5%); - -@navbarBrandColor: @navbarLinkColor; - -// Inverted navbar -@navbarInverseBackground: #111111; -@navbarInverseBackgroundHighlight: #222222; -@navbarInverseBorder: #252525; - -@navbarInverseText: @grayLight; -@navbarInverseLinkColor: @grayLight; -@navbarInverseLinkColorHover: @white; -@navbarInverseLinkColorActive: @navbarInverseLinkColorHover; -@navbarInverseLinkBackgroundHover: transparent; -@navbarInverseLinkBackgroundActive: @navbarInverseBackground; - -@navbarInverseSearchBackground: lighten(@navbarInverseBackground, 25%); -@navbarInverseSearchBackgroundFocus: @white; -@navbarInverseSearchBorder: @navbarInverseBackground; -@navbarInverseSearchPlaceholderColor: #ccc; - -@navbarInverseBrandColor: @navbarInverseLinkColor; - - -// Pagination -// ------------------------- -@paginationBackground: #fff; -@paginationBorder: #ddd; -@paginationActiveBackground: #f5f5f5; - - -// Hero unit -// ------------------------- -@heroUnitBackground: @grayLighter; -@heroUnitHeadingColor: inherit; -@heroUnitLeadColor: inherit; - - -// Form states and alerts -// ------------------------- -@warningText: #c09853; -@warningBackground: #fcf8e3; -@warningBorder: darken(spin(@warningBackground, -10), 3%); - -@errorText: #b94a48; -@errorBackground: #f2dede; -@errorBorder: darken(spin(@errorBackground, -10), 3%); - -@successText: #468847; -@successBackground: #dff0d8; -@successBorder: darken(spin(@successBackground, -10), 5%); - -@infoText: #3a87ad; -@infoBackground: #d9edf7; -@infoBorder: darken(spin(@infoBackground, -10), 7%); - - -// Tooltips and popovers -// ------------------------- -@tooltipColor: #fff; -@tooltipBackground: #000; -@tooltipArrowWidth: 5px; -@tooltipArrowColor: @tooltipBackground; - -@popoverBackground: #fff; -@popoverArrowWidth: 10px; -@popoverArrowColor: #fff; -@popoverTitleBackground: darken(@popoverBackground, 3%); - -// Special enhancement for popovers -@popoverArrowOuterWidth: @popoverArrowWidth + 1; -@popoverArrowOuterColor: rgba(0,0,0,.25); - - - -// GRID -// -------------------------------------------------- - - -// Default 940px grid -// ------------------------- -@gridColumns: 12; -@gridColumnWidth: 60px; -@gridGutterWidth: 20px; -@gridRowWidth: (@gridColumns * @gridColumnWidth) + (@gridGutterWidth * (@gridColumns - 1)); - -// 1200px min -@gridColumnWidth1200: 70px; -@gridGutterWidth1200: 30px; -@gridRowWidth1200: (@gridColumns * @gridColumnWidth1200) + (@gridGutterWidth1200 * (@gridColumns - 1)); - -// 768px-979px -@gridColumnWidth768: 42px; -@gridGutterWidth768: 20px; -@gridRowWidth768: (@gridColumns * @gridColumnWidth768) + (@gridGutterWidth768 * (@gridColumns - 1)); - - -// Fluid grid -// ------------------------- -@fluidGridColumnWidth: percentage(@gridColumnWidth/@gridRowWidth); -@fluidGridGutterWidth: percentage(@gridGutterWidth/@gridRowWidth); - -// 1200px min -@fluidGridColumnWidth1200: percentage(@gridColumnWidth1200/@gridRowWidth1200); -@fluidGridGutterWidth1200: percentage(@gridGutterWidth1200/@gridRowWidth1200); - -// 768px-979px -@fluidGridColumnWidth768: percentage(@gridColumnWidth768/@gridRowWidth768); -@fluidGridGutterWidth768: percentage(@gridGutterWidth768/@gridRowWidth768); diff --git a/src/main/webapp/bower_components/bootstrap/less/wells.less b/src/main/webapp/bower_components/bootstrap/less/wells.less deleted file mode 100644 index 84a744b1..00000000 --- a/src/main/webapp/bower_components/bootstrap/less/wells.less +++ /dev/null @@ -1,29 +0,0 @@ -// -// Wells -// -------------------------------------------------- - - -// Base class -.well { - min-height: 20px; - padding: 19px; - margin-bottom: 20px; - background-color: @wellBackground; - border: 1px solid darken(@wellBackground, 7%); - .border-radius(@baseBorderRadius); - .box-shadow(inset 0 1px 1px rgba(0,0,0,.05)); - blockquote { - border-color: #ddd; - border-color: rgba(0,0,0,.15); - } -} - -// Sizes -.well-large { - padding: 24px; - .border-radius(@borderRadiusLarge); -} -.well-small { - padding: 9px; - .border-radius(@borderRadiusSmall); -} diff --git a/src/main/webapp/bower_components/bootstrap/package.json b/src/main/webapp/bower_components/bootstrap/package.json deleted file mode 100644 index c1108ab1..00000000 --- a/src/main/webapp/bower_components/bootstrap/package.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "bootstrap" - , "description": "Sleek, intuitive, and powerful front-end framework for faster and easier web development." - , "version": "2.3.0" - , "keywords": ["bootstrap", "css"] - , "homepage": "http://twitter.github.com/bootstrap/" - , "author": "Twitter Inc." - , "scripts": { "test": "make test" } - , "repository": { - "type": "git" - , "url": "https://github.com/twitter/bootstrap.git" - } - , "licenses": [ - { - "type": "Apache-2.0" - , "url": "http://www.apache.org/licenses/LICENSE-2.0" - } - ] - , "devDependencies": { - "uglify-js": "1.3.4" - , "jshint": "0.9.1" - , "recess": "1.1.6" - , "connect": "2.1.3" - , "hogan.js": "2.0.0" - } -} diff --git a/src/main/webapp/bower_components/jquery/.bower.json b/src/main/webapp/bower_components/jquery/.bower.json deleted file mode 100644 index 0fcef941..00000000 --- a/src/main/webapp/bower_components/jquery/.bower.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "jquery", - "version": "2.1.3", - "main": "dist/jquery.js", - "license": "MIT", - "ignore": [ - "**/.*", - "build", - "speed", - "test", - "*.md", - "AUTHORS.txt", - "Gruntfile.js", - "package.json" - ], - "devDependencies": { - "sizzle": "2.1.1-jquery.2.1.2", - "requirejs": "2.1.10", - "qunit": "1.14.0", - "sinon": "1.8.1" - }, - "keywords": [ - "jquery", - "javascript", - "library" - ], - "homepage": "https://github.com/jquery/jquery", - "_release": "2.1.3", - "_resolution": { - "type": "version", - "tag": "2.1.3", - "commit": "8f2a9d9272d6ed7f32d3a484740ab342c02541e0" - }, - "_source": "git://github.com/jquery/jquery.git", - "_target": "2.1.3", - "_originalSource": "jquery" -} \ No newline at end of file diff --git a/src/main/webapp/bower_components/jquery/MIT-LICENSE.txt b/src/main/webapp/bower_components/jquery/MIT-LICENSE.txt deleted file mode 100644 index cdd31b5c..00000000 --- a/src/main/webapp/bower_components/jquery/MIT-LICENSE.txt +++ /dev/null @@ -1,21 +0,0 @@ -Copyright 2014 jQuery Foundation and other contributors -http://jquery.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 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/src/main/webapp/bower_components/jquery/bower.json b/src/main/webapp/bower_components/jquery/bower.json deleted file mode 100644 index 61c94872..00000000 --- a/src/main/webapp/bower_components/jquery/bower.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "jquery", - "version": "2.1.3", - "main": "dist/jquery.js", - "license": "MIT", - "ignore": [ - "**/.*", - "build", - "speed", - "test", - "*.md", - "AUTHORS.txt", - "Gruntfile.js", - "package.json" - ], - "devDependencies": { - "sizzle": "2.1.1-jquery.2.1.2", - "requirejs": "2.1.10", - "qunit": "1.14.0", - "sinon": "1.8.1" - }, - "keywords": [ - "jquery", - "javascript", - "library" - ] -} diff --git a/src/main/webapp/bower_components/jquery/dist/jquery.js b/src/main/webapp/bower_components/jquery/dist/jquery.js deleted file mode 100644 index 79d631ff..00000000 --- a/src/main/webapp/bower_components/jquery/dist/jquery.js +++ /dev/null @@ -1,9205 +0,0 @@ -/*! - * jQuery JavaScript Library v2.1.3 - * http://jquery.com/ - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * - * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors - * Released under the MIT license - * http://jquery.org/license - * - * Date: 2014-12-18T15:11Z - */ - -(function( global, factory ) { - - if ( typeof module === "object" && typeof module.exports === "object" ) { - // For CommonJS and CommonJS-like environments where a proper `window` - // is present, execute the factory and get jQuery. - // For environments that do not have a `window` with a `document` - // (such as Node.js), expose a factory as module.exports. - // This accentuates the need for the creation of a real `window`. - // e.g. var jQuery = require("jquery")(window); - // See ticket #14549 for more info. - module.exports = global.document ? - factory( global, true ) : - function( w ) { - if ( !w.document ) { - throw new Error( "jQuery requires a window with a document" ); - } - return factory( w ); - }; - } else { - factory( global ); - } - -// Pass this if window is not defined yet -}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) { - -// Support: Firefox 18+ -// Can't be in strict mode, several libs including ASP.NET trace -// the stack via arguments.caller.callee and Firefox dies if -// you try to trace through "use strict" call chains. (#13335) -// - -var arr = []; - -var slice = arr.slice; - -var concat = arr.concat; - -var push = arr.push; - -var indexOf = arr.indexOf; - -var class2type = {}; - -var toString = class2type.toString; - -var hasOwn = class2type.hasOwnProperty; - -var support = {}; - - - -var - // Use the correct document accordingly with window argument (sandbox) - document = window.document, - - version = "2.1.3", - - // Define a local copy of jQuery - jQuery = function( selector, context ) { - // The jQuery object is actually just the init constructor 'enhanced' - // Need init if jQuery is called (just allow error to be thrown if not included) - return new jQuery.fn.init( selector, context ); - }, - - // Support: Android<4.1 - // Make sure we trim BOM and NBSP - rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/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(); - }; - -jQuery.fn = jQuery.prototype = { - // The current version of jQuery being used - jquery: version, - - constructor: jQuery, - - // Start with an empty selector - selector: "", - - // The default length of a jQuery object is 0 - length: 0, - - toArray: function() { - return 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 just the one element from the set - ( num < 0 ? this[ num + this.length ] : this[ num ] ) : - - // Return all the elements in a clean array - slice.call( this ); - }, - - // 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 ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map(this, function( elem, i ) { - return callback.call( elem, i, elem ); - })); - }, - - slice: function() { - return this.pushStack( 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] ] : [] ); - }, - - end: function() { - return this.prevObject || this.constructor(null); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: push, - sort: arr.sort, - splice: arr.splice -}; - -jQuery.extend = jQuery.fn.extend = function() { - 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; - - // Skip the boolean and the target - target = arguments[ i ] || {}; - i++; - } - - // 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 ( i === length ) { - 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({ - // Unique for each copy of jQuery on the page - expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), - - // Assume jQuery is ready without the ready module - isReady: true, - - error: function( msg ) { - throw new Error( msg ); - }, - - noop: function() {}, - - isFunction: function( obj ) { - return jQuery.type(obj) === "function"; - }, - - isArray: Array.isArray, - - isWindow: function( obj ) { - return obj != null && obj === obj.window; - }, - - isNumeric: function( obj ) { - // parseFloat NaNs numeric-cast false positives (null|true|false|"") - // ...but misinterprets leading-number strings, particularly hex literals ("0x...") - // subtraction forces infinities to NaN - // adding 1 corrects loss of precision from parseFloat (#15100) - return !jQuery.isArray( obj ) && (obj - parseFloat( obj ) + 1) >= 0; - }, - - isPlainObject: function( obj ) { - // Not plain objects: - // - Any object or value whose internal [[Class]] property is not "[object Object]" - // - DOM nodes - // - window - if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { - return false; - } - - if ( obj.constructor && - !hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) { - return false; - } - - // If the function hasn't returned already, we're confident that - // |obj| is a plain object, created by {} or constructed with new Object - return true; - }, - - isEmptyObject: function( obj ) { - var name; - for ( name in obj ) { - return false; - } - return true; - }, - - type: function( obj ) { - if ( obj == null ) { - return obj + ""; - } - // Support: Android<4.0, iOS<6 (functionish RegExp) - return typeof obj === "object" || typeof obj === "function" ? - class2type[ toString.call(obj) ] || "object" : - typeof obj; - }, - - // Evaluates a script in a global context - globalEval: function( code ) { - var script, - indirect = eval; - - code = jQuery.trim( code ); - - if ( code ) { - // If the code includes a valid, prologue position - // strict mode pragma, execute code by injecting a - // script tag into the document. - if ( code.indexOf("use strict") === 1 ) { - script = document.createElement("script"); - script.text = code; - document.head.appendChild( script ).parentNode.removeChild( script ); - } else { - // Otherwise, avoid the DOM node creation, insertion - // and removal by using an indirect global eval - indirect( code ); - } - } - }, - - // Convert dashed to camelCase; used by the css and data modules - // Support: IE9-11+ - // 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; - }, - - // Support: Android<4.1 - trim: 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 { - push.call( ret, arr ); - } - } - - return ret; - }, - - inArray: function( elem, arr, i ) { - return arr == null ? -1 : indexOf.call( arr, elem, i ); - }, - - merge: function( first, second ) { - var len = +second.length, - j = 0, - i = first.length; - - for ( ; j < len; j++ ) { - first[ i++ ] = second[ j ]; - } - - first.length = i; - - return first; - }, - - grep: function( elems, callback, invert ) { - var callbackInverse, - matches = [], - i = 0, - length = elems.length, - callbackExpect = !invert; - - // Go through the array, only saving the items - // that pass the validator function - for ( ; i < length; i++ ) { - callbackInverse = !callback( elems[ i ], i ); - if ( callbackInverse !== callbackExpect ) { - matches.push( elems[ i ] ); - } - } - - return matches; - }, - - // 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 new values - if ( isArray ) { - for ( ; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - - // Go through every key on the object, - } else { - for ( i in elems ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - } - - // Flatten any nested arrays - return 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 tmp, args, proxy; - - 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 = slice.call( arguments, 2 ); - proxy = function() { - return fn.apply( context || this, args.concat( 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; - }, - - now: Date.now, - - // jQuery.support is not used in Core but other projects attach their - // properties to it so it needs to exist. - support: support -}); - -// 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 ( type === "function" || jQuery.isWindow( obj ) ) { - return false; - } - - if ( obj.nodeType === 1 && length ) { - return true; - } - - return type === "array" || length === 0 || - typeof length === "number" && length > 0 && ( length - 1 ) in obj; -} -var Sizzle = -/*! - * Sizzle CSS Selector Engine v2.2.0-pre - * http://sizzlejs.com/ - * - * Copyright 2008, 2014 jQuery Foundation, Inc. and other contributors - * Released under the MIT license - * http://jquery.org/license - * - * Date: 2014-12-16 - */ -(function( window ) { - -var i, - support, - Expr, - getText, - isXML, - tokenize, - compile, - select, - outermostContext, - sortInput, - hasDuplicate, - - // Local document vars - setDocument, - document, - docElem, - documentIsHTML, - rbuggyQSA, - rbuggyMatches, - matches, - contains, - - // Instance-specific data - expando = "sizzle" + 1 * new Date(), - preferredDoc = window.document, - dirruns = 0, - done = 0, - classCache = createCache(), - tokenCache = createCache(), - compilerCache = createCache(), - sortOrder = function( a, b ) { - if ( a === b ) { - hasDuplicate = true; - } - return 0; - }, - - // General-purpose constants - MAX_NEGATIVE = 1 << 31, - - // Instance methods - hasOwn = ({}).hasOwnProperty, - arr = [], - pop = arr.pop, - push_native = arr.push, - push = arr.push, - slice = arr.slice, - // Use a stripped-down indexOf as it's faster than native - // http://jsperf.com/thor-indexof-vs-for/5 - indexOf = function( list, elem ) { - var i = 0, - len = list.length; - for ( ; i < len; i++ ) { - if ( list[i] === elem ) { - return i; - } - } - return -1; - }, - - booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", - - // 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#" ), - - // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors - attributes = "\\[" + whitespace + "*(" + characterEncoding + ")(?:" + whitespace + - // Operator (capture 2) - "*([*^$|!~]?=)" + whitespace + - // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" - "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + - "*\\]", - - pseudos = ":(" + characterEncoding + ")(?:\\((" + - // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: - // 1. quoted (capture 3; capture 4 or capture 5) - "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + - // 2. simple (capture 6) - "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + - // 3. anything else (capture 2) - ".*" + - ")\\)|)", - - // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter - rwhitespace = new RegExp( whitespace + "+", "g" ), - rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), - - rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), - rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), - - rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), - - rpseudo = new RegExp( pseudos ), - ridentifier = new RegExp( "^" + identifier + "$" ), - - matchExpr = { - "ID": new RegExp( "^#(" + characterEncoding + ")" ), - "CLASS": new RegExp( "^\\.(" + 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" ), - "bool": new RegExp( "^(?:" + booleans + ")$", "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" ) - }, - - rinputs = /^(?:input|select|textarea|button)$/i, - rheader = /^h\d$/i, - - rnative = /^[^{]+\{\s*\[native \w/, - - // Easily-parseable/retrievable ID or TAG or CLASS selectors - rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, - - rsibling = /[+~]/, - rescape = /'|\\/g, - - // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters - runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), - funescape = function( _, escaped, escapedWhitespace ) { - var high = "0x" + escaped - 0x10000; - // NaN means non-codepoint - // Support: Firefox<24 - // Workaround erroneous numeric interpretation of +"0x" - return high !== high || escapedWhitespace ? - escaped : - high < 0 ? - // BMP codepoint - String.fromCharCode( high + 0x10000 ) : - // Supplemental Plane codepoint (surrogate pair) - String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); - }, - - // Used for iframes - // See setDocument() - // Removing the function wrapper causes a "Permission Denied" - // error in IE - unloadHandler = function() { - setDocument(); - }; - -// Optimize for push.apply( _, NodeList ) -try { - push.apply( - (arr = slice.call( preferredDoc.childNodes )), - preferredDoc.childNodes - ); - // Support: Android<4.0 - // Detect silently failing push.apply - arr[ preferredDoc.childNodes.length ].nodeType; -} catch ( e ) { - push = { apply: arr.length ? - - // Leverage slice if possible - function( target, els ) { - push_native.apply( target, slice.call(els) ); - } : - - // Support: IE<9 - // Otherwise append directly - function( target, els ) { - var j = target.length, - i = 0; - // Can't trust NodeList.length - while ( (target[j++] = els[i++]) ) {} - target.length = j - 1; - } - }; -} - -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 || []; - nodeType = context.nodeType; - - if ( typeof selector !== "string" || !selector || - nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { - - return results; - } - - if ( !seed && documentIsHTML ) { - - // Try to shortcut find operations when possible (e.g., not under DocumentFragment) - if ( nodeType !== 11 && (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 (jQuery #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, context.getElementsByTagName( selector ) ); - return results; - - // Speed-up: Sizzle(".CLASS") - } else if ( (m = match[3]) && support.getElementsByClassName ) { - push.apply( results, context.getElementsByClassName( m ) ); - return results; - } - } - - // QSA path - if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { - nid = old = expando; - newContext = context; - newSelector = nodeType !== 1 && 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 ) && testContext( context.parentNode ) || context; - newSelector = groups.join(","); - } - - if ( newSelector ) { - try { - push.apply( results, - newContext.querySelectorAll( newSelector ) - ); - return results; - } catch(qsaError) { - } finally { - if ( !old ) { - context.removeAttribute("id"); - } - } - } - } - } - - // All others - return select( selector.replace( rtrim, "$1" ), context, results, seed ); -} - -/** - * 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 keys = []; - - function cache( 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); - } - return cache; -} - -/** - * 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 { - // Remove from its parent by default - if ( div.parentNode ) { - div.parentNode.removeChild( div ); - } - // release memory in IE - div = null; - } -} - -/** - * Adds the same handler for all of the specified attrs - * @param {String} attrs Pipe-separated list of attributes - * @param {Function} handler The method that will be applied - */ -function addHandle( attrs, handler ) { - var arr = attrs.split("|"), - i = attrs.length; - - while ( i-- ) { - Expr.attrHandle[ arr[i] ] = handler; - } -} - -/** - * Checks document order of two siblings - * @param {Element} a - * @param {Element} b - * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b - */ -function siblingCheck( a, b ) { - var cur = b && a, - diff = cur && a.nodeType === 1 && b.nodeType === 1 && - ( ~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 - * @param {String} type - */ -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 - * @param {String} type - */ -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 - * @param {Function} fn - */ -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]); - } - } - }); - }); -} - -/** - * Checks a node for validity as a Sizzle context - * @param {Element|Object=} context - * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value - */ -function testContext( context ) { - return context && typeof context.getElementsByTagName !== "undefined" && context; -} - -// Expose support vars for convenience -support = Sizzle.support = {}; - -/** - * Detects XML nodes - * @param {Element|Object} elem An element or a document - * @returns {Boolean} True iff elem is a non-HTML XML node - */ -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 hasCompare, parent, - 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; - parent = doc.defaultView; - - // Support: IE>8 - // If iframe document is assigned to "document" variable and if iframe has been reloaded, - // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936 - // IE6-8 do not support the defaultView property so parent will be undefined - if ( parent && parent !== parent.top ) { - // IE11 does not have attachEvent, so all must suffer - if ( parent.addEventListener ) { - parent.addEventListener( "unload", unloadHandler, false ); - } else if ( parent.attachEvent ) { - parent.attachEvent( "onunload", unloadHandler ); - } - } - - /* Support tests - ---------------------------------------------------------------------- */ - documentIsHTML = !isXML( doc ); - - /* Attributes - ---------------------------------------------------------------------- */ - - // Support: IE<8 - // Verify that getAttribute really returns attributes and not properties - // (excepting IE8 booleans) - support.attributes = assert(function( div ) { - div.className = "i"; - return !div.getAttribute("className"); - }); - - /* getElement(s)By* - ---------------------------------------------------------------------- */ - - // Check if getElementsByTagName("*") returns only elements - support.getElementsByTagName = assert(function( div ) { - div.appendChild( doc.createComment("") ); - return !div.getElementsByTagName("*").length; - }); - - // Support: IE<9 - support.getElementsByClassName = rnative.test( doc.getElementsByClassName ); - - // Support: IE<10 - // Check if getElementById returns elements by name - // The broken getElementById methods don't pick up programatically-set names, - // so use a roundabout getElementsByName test - support.getById = assert(function( div ) { - docElem.appendChild( div ).id = expando; - return !doc.getElementsByName || !doc.getElementsByName( expando ).length; - }); - - // ID find and filter - if ( support.getById ) { - Expr.find["ID"] = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - 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 { - // Support: IE6/7 - // getElementById is not reliable as a find shortcut - delete Expr.find["ID"]; - - Expr.filter["ID"] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); - return node && node.value === attrId; - }; - }; - } - - // Tag - Expr.find["TAG"] = support.getElementsByTagName ? - function( tag, context ) { - if ( typeof context.getElementsByTagName !== "undefined" ) { - return context.getElementsByTagName( tag ); - - // DocumentFragment nodes don't have gEBTN - } else if ( support.qsa ) { - return context.querySelectorAll( tag ); - } - } : - - function( tag, context ) { - var elem, - tmp = [], - i = 0, - // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too - 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; - }; - - // Class - Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { - if ( documentIsHTML ) { - return context.getElementsByClassName( className ); - } - }; - - /* QSA/matchesSelector - ---------------------------------------------------------------------- */ - - // QSA and matchesSelector support - - // matchesSelector(:active) reports false when true (IE9/Opera 11.5) - rbuggyMatches = []; - - // qSa(:focus) reports false when true (Chrome 21) - // We allow this because of a bug in IE8/9 that throws an error - // whenever `document.activeElement` is accessed on an iframe - // So, we allow :focus to pass through QSA all the time to avoid the IE error - // See http://bugs.jquery.com/ticket/13378 - rbuggyQSA = []; - - if ( (support.qsa = rnative.test( 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 explicitly - // setting a boolean content attribute, - // since its presence should be enough - // http://bugs.jquery.com/ticket/12359 - docElem.appendChild( div ).innerHTML = "<a id='" + expando + "'></a>" + - "<select id='" + expando + "-\f]' msallowcapture=''>" + - "<option selected=''></option></select>"; - - // Support: IE8, Opera 11-12.16 - // Nothing should be selected when empty strings follow ^= or $= or *= - // The test attribute must be unknown in Opera but "safe" for WinRT - // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section - if ( div.querySelectorAll("[msallowcapture^='']").length ) { - rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); - } - - // Support: IE8 - // Boolean attributes and "value" are not treated correctly - if ( !div.querySelectorAll("[selected]").length ) { - rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); - } - - // Support: Chrome<29, Android<4.2+, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.7+ - if ( !div.querySelectorAll( "[id~=" + expando + "-]" ).length ) { - rbuggyQSA.push("~="); - } - - // 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"); - } - - // Support: Safari 8+, iOS 8+ - // https://bugs.webkit.org/show_bug.cgi?id=136851 - // In-page `selector#id sibing-combinator selector` fails - if ( !div.querySelectorAll( "a#" + expando + "+*" ).length ) { - rbuggyQSA.push(".#.+[+~]"); - } - }); - - assert(function( div ) { - // Support: Windows 8 Native Apps - // The type and name attributes are restricted during .innerHTML assignment - var input = doc.createElement("input"); - input.setAttribute( "type", "hidden" ); - div.appendChild( input ).setAttribute( "name", "D" ); - - // Support: IE8 - // Enforce case-sensitivity of name attribute - if ( div.querySelectorAll("[name=d]").length ) { - rbuggyQSA.push( "name" + 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 = rnative.test( (matches = docElem.matches || - docElem.webkitMatchesSelector || - docElem.mozMatchesSelector || - 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 = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); - rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); - - /* Contains - ---------------------------------------------------------------------- */ - hasCompare = rnative.test( docElem.compareDocumentPosition ); - - // Element contains another - // Purposefully does not implement inclusive descendent - // As in, an element does not contain itself - contains = hasCompare || rnative.test( docElem.contains ) ? - 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; - }; - - /* Sorting - ---------------------------------------------------------------------- */ - - // Document order sorting - sortOrder = hasCompare ? - function( a, b ) { - - // Flag for duplicate removal - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - // Sort on method existence if only one input has compareDocumentPosition - var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; - if ( compare ) { - return compare; - } - - // Calculate position if both inputs belong to the same document - compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? - a.compareDocumentPosition( b ) : - - // Otherwise we know they are disconnected - 1; - - // Disconnected nodes - if ( compare & 1 || - (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { - - // Choose the first element that is related to our preferred document - if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { - return -1; - } - if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { - return 1; - } - - // Maintain original order - return sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - } - - return compare & 4 ? -1 : 1; - } : - function( a, b ) { - // Exit early if the nodes are identical - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - var cur, - i = 0, - aup = a.parentNode, - bup = b.parentNode, - ap = [ a ], - bp = [ b ]; - - // Parentless nodes are either documents or disconnected - if ( !aup || !bup ) { - return a === doc ? -1 : - b === doc ? 1 : - aup ? -1 : - bup ? 1 : - sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 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; - }; - - return doc; -}; - -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']" ); - - if ( support.matchesSelector && documentIsHTML && - ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && - ( !rbuggyQSA || !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 ) { - // Set document vars if needed - if ( ( elem.ownerDocument || elem ) !== document ) { - setDocument( elem ); - } - - var fn = Expr.attrHandle[ name.toLowerCase() ], - // Don't get fooled by Object.prototype properties (jQuery #13807) - val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? - fn( elem, name, !documentIsHTML ) : - undefined; - - return val !== undefined ? - val : - support.attributes || !documentIsHTML ? - elem.getAttribute( name ) : - (val = elem.getAttributeNode(name)) && val.specified ? - val.value : - null; -}; - -Sizzle.error = function( msg ) { - throw new Error( "Syntax error, unrecognized expression: " + msg ); -}; - -/** - * Document sorting and removing duplicates - * @param {ArrayLike} results - */ -Sizzle.uniqueSort = function( results ) { - var elem, - duplicates = [], - j = 0, - i = 0; - - // Unless we *know* we can detect duplicates, assume their presence - hasDuplicate = !support.detectDuplicates; - sortInput = !support.sortStable && results.slice( 0 ); - results.sort( sortOrder ); - - if ( hasDuplicate ) { - while ( (elem = results[i++]) ) { - if ( elem === results[ i ] ) { - j = duplicates.push( i ); - } - } - while ( j-- ) { - results.splice( duplicates[ j ], 1 ); - } - } - - // Clear input after sorting to release objects - // See https://github.com/jquery/sizzle/pull/225 - sortInput = null; - - return results; -}; - -/** - * 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 - while ( (node = elem[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 (jQuery #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, - - attrHandle: {}, - - 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[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[6] && match[2]; - - if ( matchExpr["CHILD"].test( match[0] ) ) { - return null; - } - - // Accept quoted arguments as-is - if ( match[3] ) { - match[2] = match[4] || match[5] || ""; - - // 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( nodeNameSelector ) { - var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); - return nodeNameSelector === "*" ? - function() { return true; } : - 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( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && 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.replace( rwhitespace, " " ) + " " ).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( 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 ); - // Don't keep the element (issue #299) - input[0] = null; - return !results.pop(); - }; - }), - - "has": markFunction(function( selector ) { - return function( elem ) { - return Sizzle( selector, elem ).length > 0; - }; - }), - - "contains": markFunction(function( text ) { - text = text.replace( runescape, funescape ); - 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 identifier - if ( !ridentifier.test(lang || "") ) { - Sizzle.error( "unsupported lang: " + lang ); - } - lang = lang.replace( runescape, funescape ).toLowerCase(); - return function( elem ) { - var elemLang; - do { - if ( (elemLang = documentIsHTML ? - elem.lang : - elem.getAttribute("xml:lang") || elem.getAttribute("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 negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), - // but not by others (comment: 8; processing instruction: 7; etc.) - // nodeType < 6 works because attributes (2) do not appear as children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - if ( elem.nodeType < 6 ) { - 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; - return elem.nodeName.toLowerCase() === "input" && - elem.type === "text" && - - // Support: IE<8 - // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" - ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); - }, - - // 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; - }) - } -}; - -Expr.pseudos["nth"] = Expr.pseudos["eq"]; - -// 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 ); -} - -// Easy API for creating new setFilters -function setFilters() {} -setFilters.prototype = Expr.filters = Expr.pseudos; -Expr.setFilters = new setFilters(); - -tokenize = Sizzle.tokenize = function( 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 oldCache, outerCache, - newCache = [ 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 ( (oldCache = outerCache[ dir ]) && - oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { - - // Assign to newCache so results back-propagate to previous elements - return (newCache[ 2 ] = oldCache[ 2 ]); - } else { - // Reuse newcache so results back-propagate to previous elements - outerCache[ dir ] = newCache; - - // A match means we're done; a fail means we have to keep checking - if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { - 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 multipleContexts( selector, contexts, results ) { - var i = 0, - len = contexts.length; - for ( ; i < len; i++ ) { - Sizzle( selector, contexts[i], results ); - } - return results; -} - -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( 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( checkContext, elem ) > -1; - }, implicitRelative, true ), - matchers = [ function( elem, context, xml ) { - var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( - (checkContext = context).nodeType ? - matchContext( elem, context, xml ) : - matchAnyContext( elem, context, xml ) ); - // Avoid hanging onto element (issue #299) - checkContext = null; - return ret; - } ]; - - 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( - // If the preceding token was a descendant combinator, insert an implicit any-element `*` - tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) - ).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 ) { - var bySet = setMatchers.length > 0, - byElement = elementMatchers.length > 0, - superMatcher = function( seed, context, xml, results, outermost ) { - var elem, j, matcher, - matchedCount = 0, - i = "0", - unmatched = seed && [], - setMatched = [], - contextBackup = outermostContext, - // We must always have either seed elements or outermost context - elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), - // Use integer dirruns iff this is the outermost matcher - dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), - len = elems.length; - - if ( outermost ) { - outermostContext = context !== document && context; - } - - // Add elements passing elementMatchers directly to results - // Keep `i` a string if there are no elements so `matchedCount` will be "00" below - // Support: IE<9, Safari - // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id - for ( ; i !== len && (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; - } - } - - // 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, match /* 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 ( !match ) { - match = tokenize( selector ); - } - i = match.length; - while ( i-- ) { - cached = matcherFromTokens( match[i] ); - if ( cached[ expando ] ) { - setMatchers.push( cached ); - } else { - elementMatchers.push( cached ); - } - } - - // Cache the compiled function - cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); - - // Save selector and tokenization - cached.selector = selector; - } - return cached; -}; - -/** - * A low-level selection function that works with Sizzle's compiled - * selector functions - * @param {String|Function} selector A selector or a pre-compiled - * selector function built with Sizzle.compile - * @param {Element} context - * @param {Array} [results] - * @param {Array} [seed] A set of elements to match against - */ -select = Sizzle.select = function( selector, context, results, seed ) { - var i, tokens, token, type, find, - compiled = typeof selector === "function" && selector, - match = !seed && tokenize( (selector = compiled.selector || selector) ); - - results = results || []; - - // Try to minimize operations if there is no seed and 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" && - support.getById && context.nodeType === 9 && documentIsHTML && - Expr.relative[ tokens[1].type ] ) { - - context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; - if ( !context ) { - return results; - - // Precompiled matchers will still verify ancestry, so step up a level - } else if ( compiled ) { - context = context.parentNode; - } - - 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 ) && testContext( 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, seed ); - return results; - } - - break; - } - } - } - } - - // Compile and execute a filtering function if one is not provided - // Provide `match` to avoid retokenization if we modified the selector above - ( compiled || compile( selector, match ) )( - seed, - context, - !documentIsHTML, - results, - rsibling.test( selector ) && testContext( context.parentNode ) || context - ); - return results; -}; - -// One-time assignments - -// Sort stability -support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; - -// Support: Chrome 14-35+ -// Always assume duplicates if they aren't passed to the comparison function -support.detectDuplicates = !!hasDuplicate; - -// Initialize against the default document -setDocument(); - -// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) -// Detached nodes confoundingly follow *each other* -support.sortDetached = assert(function( div1 ) { - // Should return 1, but returns 4 (following) - return div1.compareDocumentPosition( document.createElement("div") ) & 1; -}); - -// Support: IE<8 -// Prevent attribute/property "interpolation" -// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx -if ( !assert(function( div ) { - div.innerHTML = "<a href='#'></a>"; - return div.firstChild.getAttribute("href") === "#" ; -}) ) { - addHandle( "type|href|height|width", function( elem, name, isXML ) { - if ( !isXML ) { - return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); - } - }); -} - -// Support: IE<9 -// Use defaultValue in place of getAttribute("value") -if ( !support.attributes || !assert(function( div ) { - div.innerHTML = "<input/>"; - div.firstChild.setAttribute( "value", "" ); - return div.firstChild.getAttribute( "value" ) === ""; -}) ) { - addHandle( "value", function( elem, name, isXML ) { - if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { - return elem.defaultValue; - } - }); -} - -// Support: IE<9 -// Use getAttributeNode to fetch booleans when getAttribute lies -if ( !assert(function( div ) { - return div.getAttribute("disabled") == null; -}) ) { - addHandle( booleans, function( elem, name, isXML ) { - var val; - if ( !isXML ) { - return elem[ name ] === true ? name.toLowerCase() : - (val = elem.getAttributeNode( name )) && val.specified ? - val.value : - null; - } - }); -} - -return Sizzle; - -})( window ); - - - -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; - - - -var rneedsContext = jQuery.expr.match.needsContext; - -var rsingleTag = (/^<(\w+)\s*\/?>(?:<\/\1>|)$/); - - - -var risSimple = /^.[^:#\[\.,]*$/; - -// Implement the identical functionality for filter and not -function winnow( elements, qualifier, not ) { - if ( jQuery.isFunction( qualifier ) ) { - return jQuery.grep( elements, function( elem, i ) { - /* jshint -W018 */ - return !!qualifier.call( elem, i, elem ) !== not; - }); - - } - - if ( qualifier.nodeType ) { - return jQuery.grep( elements, function( elem ) { - return ( elem === qualifier ) !== not; - }); - - } - - if ( typeof qualifier === "string" ) { - if ( risSimple.test( qualifier ) ) { - return jQuery.filter( qualifier, elements, not ); - } - - qualifier = jQuery.filter( qualifier, elements ); - } - - return jQuery.grep( elements, function( elem ) { - return ( indexOf.call( qualifier, elem ) >= 0 ) !== not; - }); -} - -jQuery.filter = function( expr, elems, not ) { - var elem = elems[ 0 ]; - - if ( not ) { - expr = ":not(" + expr + ")"; - } - - return elems.length === 1 && elem.nodeType === 1 ? - jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] : - jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { - return elem.nodeType === 1; - })); -}; - -jQuery.fn.extend({ - find: function( selector ) { - var i, - len = this.length, - ret = [], - self = this; - - if ( typeof selector !== "string" ) { - return this.pushStack( jQuery( selector ).filter(function() { - for ( i = 0; i < len; i++ ) { - if ( jQuery.contains( self[ i ], this ) ) { - return true; - } - } - }) ); - } - - for ( i = 0; i < len; i++ ) { - jQuery.find( selector, self[ 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 : selector; - return ret; - }, - filter: function( selector ) { - return this.pushStack( winnow(this, selector || [], false) ); - }, - not: function( selector ) { - return this.pushStack( winnow(this, selector || [], true) ); - }, - is: function( selector ) { - return !!winnow( - this, - - // 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". - typeof selector === "string" && rneedsContext.test( selector ) ? - jQuery( selector ) : - selector || [], - false - ).length; - } -}); - - -// Initialize a jQuery object - - -// A central reference to the root jQuery(document) -var rootjQuery, - - // A simple way to check for HTML strings - // Prioritize #id over <tag> to avoid XSS via location.hash (#9521) - // Strict HTML recognition (#11290: must start with <) - rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, - - init = jQuery.fn.init = function( selector, context ) { - var match, elem; - - // HANDLE: $(""), $(null), $(undefined), $(false) - if ( !selector ) { - return this; - } - - // Handle HTML strings - if ( typeof selector === "string" ) { - if ( selector[0] === "<" && selector[ 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; - - // Option to run scripts is true for back-compat - // Intentionally let the error be thrown if parseHTML is not present - 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] ); - - // Support: Blackberry 4.6 - // gEBID returns nodes no longer in the document (#6963) - if ( elem && elem.parentNode ) { - // 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 typeof rootjQuery.ready !== "undefined" ? - rootjQuery.ready( selector ) : - // Execute immediately if ready is not present - selector( jQuery ); - } - - if ( selector.selector !== undefined ) { - this.selector = selector.selector; - this.context = selector.context; - } - - return jQuery.makeArray( selector, this ); - }; - -// Give the init function the jQuery prototype for later instantiation -init.prototype = jQuery.fn; - -// Initialize central reference -rootjQuery = jQuery( document ); - - -var rparentsprev = /^(?:parents|prev(?:Until|All))/, - // Methods guaranteed to produce a unique set when starting from a unique set - guaranteedUnique = { - children: true, - contents: true, - next: true, - prev: true - }; - -jQuery.extend({ - dir: function( elem, dir, until ) { - var matched = [], - truncate = until !== undefined; - - while ( (elem = elem[ dir ]) && elem.nodeType !== 9 ) { - if ( elem.nodeType === 1 ) { - if ( truncate && jQuery( elem ).is( until ) ) { - break; - } - matched.push( elem ); - } - } - return matched; - }, - - sibling: function( n, elem ) { - var matched = []; - - for ( ; n; n = n.nextSibling ) { - if ( n.nodeType === 1 && n !== elem ) { - matched.push( n ); - } - } - - return matched; - } -}); - -jQuery.fn.extend({ - has: function( target ) { - var targets = jQuery( target, this ), - l = targets.length; - - return this.filter(function() { - var i = 0; - for ( ; i < l; i++ ) { - if ( jQuery.contains( this, targets[i] ) ) { - return true; - } - } - }); - }, - - closest: function( selectors, context ) { - var cur, - i = 0, - l = this.length, - matched = [], - pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? - jQuery( selectors, context || this.context ) : - 0; - - for ( ; i < l; i++ ) { - for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) { - // Always skip document fragments - if ( cur.nodeType < 11 && (pos ? - pos.index(cur) > -1 : - - // Don't pass non-elements to Sizzle - cur.nodeType === 1 && - jQuery.find.matchesSelector(cur, selectors)) ) { - - matched.push( cur ); - break; - } - } - } - - return this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched ); - }, - - // Determine the position of an element within the set - 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 indexOf.call( jQuery( elem ), this[ 0 ] ); - } - - // Locate the position of the desired element - return indexOf.call( this, - - // If it receives a jQuery object, the first element is used - elem.jquery ? elem[ 0 ] : elem - ); - }, - - add: function( selector, context ) { - return this.pushStack( - jQuery.unique( - jQuery.merge( this.get(), jQuery( selector, context ) ) - ) - ); - }, - - addBack: function( selector ) { - return this.add( selector == null ? - this.prevObject : this.prevObject.filter(selector) - ); - } -}); - -function sibling( cur, dir ) { - while ( (cur = cur[dir]) && 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 elem.contentDocument || jQuery.merge( [], elem.childNodes ); - } -}, function( name, fn ) { - jQuery.fn[ name ] = function( until, selector ) { - var matched = jQuery.map( this, fn, until ); - - if ( name.slice( -5 ) !== "Until" ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - matched = jQuery.filter( selector, matched ); - } - - if ( this.length > 1 ) { - // Remove duplicates - if ( !guaranteedUnique[ name ] ) { - jQuery.unique( matched ); - } - - // Reverse order for parents* and prev-derivatives - if ( rparentsprev.test( name ) ) { - matched.reverse(); - } - } - - return this.pushStack( matched ); - }; -}); -var rnotwhite = (/\S+/g); - - - -// 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( 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 // Last fire value (for non-forgettable lists) - memory, - // Flag to know if list was already fired - fired, - // Flag to know if list is currently firing - firing, - // First callback to fire (used internally by add and fireWith) - firingStart, - // End of the loop when firing - firingLength, - // Index of currently firing callback (modified by remove if needed) - firingIndex, - // 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 = []; - firingLength = 0; - 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 ) { - if ( list && ( !fired || stack ) ) { - args = args || []; - args = [ context, args.slice ? args.slice() : args ]; - 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 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[ tuple[ 0 ] + "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 = 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 ? 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(); - } -}); - - -// The deferred used on DOM ready -var readyList; - -jQuery.fn.ready = function( fn ) { - // Add the callback - jQuery.ready.promise().done( fn ); - - return this; -}; - -jQuery.extend({ - // 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; - } - - // 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.triggerHandler ) { - jQuery( document ).triggerHandler( "ready" ); - jQuery( document ).off( "ready" ); - } - } -}); - -/** - * The ready event handler and self cleanup method - */ -function completed() { - document.removeEventListener( "DOMContentLoaded", completed, false ); - window.removeEventListener( "load", completed, false ); - jQuery.ready(); -} - -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 ); - - } else { - - // Use the handy event callback - document.addEventListener( "DOMContentLoaded", completed, false ); - - // A fallback to window.onload, that will always work - window.addEventListener( "load", completed, false ); - } - } - return readyList.promise( obj ); -}; - -// Kick off the DOM ready check even if the user does not -jQuery.ready.promise(); - - - - -// Multifunctional method to get and set values of a collection -// The value/s can optionally be executed if it's a function -var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) { - var i = 0, - len = 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 < len; i++ ) { - fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) ); - } - } - } - - return chainable ? - elems : - - // Gets - bulk ? - fn.call( elems ) : - len ? fn( elems[0], key ) : emptyGet; -}; - - -/** - * Determines whether an object can have data - */ -jQuery.acceptData = function( owner ) { - // Accepts only: - // - Node - // - Node.ELEMENT_NODE - // - Node.DOCUMENT_NODE - // - Object - // - Any - /* jshint -W018 */ - return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); -}; - - -function Data() { - // Support: Android<4, - // Old WebKit does not have Object.preventExtensions/freeze method, - // return new empty object instead with no [[set]] accessor - Object.defineProperty( this.cache = {}, 0, { - get: function() { - return {}; - } - }); - - this.expando = jQuery.expando + Data.uid++; -} - -Data.uid = 1; -Data.accepts = jQuery.acceptData; - -Data.prototype = { - key: function( owner ) { - // We can accept data for non-element nodes in modern browsers, - // but we should not, see #8335. - // Always return the key for a frozen object. - if ( !Data.accepts( owner ) ) { - return 0; - } - - var descriptor = {}, - // Check if the owner object already has a cache key - unlock = owner[ this.expando ]; - - // If not, create one - if ( !unlock ) { - unlock = Data.uid++; - - // Secure it in a non-enumerable, non-writable property - try { - descriptor[ this.expando ] = { value: unlock }; - Object.defineProperties( owner, descriptor ); - - // Support: Android<4 - // Fallback to a less secure definition - } catch ( e ) { - descriptor[ this.expando ] = unlock; - jQuery.extend( owner, descriptor ); - } - } - - // Ensure the cache object - if ( !this.cache[ unlock ] ) { - this.cache[ unlock ] = {}; - } - - return unlock; - }, - set: function( owner, data, value ) { - var prop, - // There may be an unlock assigned to this node, - // if there is no entry for this "owner", create one inline - // and set the unlock as though an owner entry had always existed - unlock = this.key( owner ), - cache = this.cache[ unlock ]; - - // Handle: [ owner, key, value ] args - if ( typeof data === "string" ) { - cache[ data ] = value; - - // Handle: [ owner, { properties } ] args - } else { - // Fresh assignments by object are shallow copied - if ( jQuery.isEmptyObject( cache ) ) { - jQuery.extend( this.cache[ unlock ], data ); - // Otherwise, copy the properties one-by-one to the cache object - } else { - for ( prop in data ) { - cache[ prop ] = data[ prop ]; - } - } - } - return cache; - }, - get: function( owner, key ) { - // Either a valid cache is found, or will be created. - // New caches will be created and the unlock returned, - // allowing direct access to the newly created - // empty data object. A valid owner object must be provided. - var cache = this.cache[ this.key( owner ) ]; - - return key === undefined ? - cache : cache[ key ]; - }, - access: function( owner, key, value ) { - var stored; - // In cases where either: - // - // 1. No key was specified - // 2. A string key was specified, but no value provided - // - // Take the "read" path and allow the get method to determine - // which value to return, respectively either: - // - // 1. The entire cache object - // 2. The data stored at the key - // - if ( key === undefined || - ((key && typeof key === "string") && value === undefined) ) { - - stored = this.get( owner, key ); - - return stored !== undefined ? - stored : this.get( owner, jQuery.camelCase(key) ); - } - - // [*]When the key is not a string, or both a key and value - // are specified, set or extend (existing objects) with either: - // - // 1. An object of properties - // 2. A key and value - // - this.set( owner, key, value ); - - // Since the "set" path can have two possible entry points - // return the expected data based on which path was taken[*] - return value !== undefined ? value : key; - }, - remove: function( owner, key ) { - var i, name, camel, - unlock = this.key( owner ), - cache = this.cache[ unlock ]; - - if ( key === undefined ) { - this.cache[ unlock ] = {}; - - } else { - // Support array or space separated string of keys - if ( jQuery.isArray( key ) ) { - // 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 = key.concat( key.map( jQuery.camelCase ) ); - } else { - camel = jQuery.camelCase( key ); - // Try the string as a key before any manipulation - if ( key in cache ) { - name = [ key, camel ]; - } else { - // If a key with the spaces exists, use it. - // Otherwise, create an array by matching non-whitespace - name = camel; - name = name in cache ? - [ name ] : ( name.match( rnotwhite ) || [] ); - } - } - - i = name.length; - while ( i-- ) { - delete cache[ name[ i ] ]; - } - } - }, - hasData: function( owner ) { - return !jQuery.isEmptyObject( - this.cache[ owner[ this.expando ] ] || {} - ); - }, - discard: function( owner ) { - if ( owner[ this.expando ] ) { - delete this.cache[ owner[ this.expando ] ]; - } - } -}; -var data_priv = new Data(); - -var data_user = new Data(); - - - -// Implementation Summary -// -// 1. Enforce API surface and semantic compatibility with 1.9.x branch -// 2. Improve the module's maintainability by reducing the storage -// paths to a single mechanism. -// 3. Use the same single mechanism to support "private" and "user" data. -// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) -// 5. Avoid exposing implementation details on user objects (eg. expando properties) -// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 - -var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, - rmultiDash = /([A-Z])/g; - -function dataAttr( elem, key, data ) { - var name; - - // If nothing was found internally, try to fetch any - // data from the HTML5 data-* attribute - if ( data === undefined && elem.nodeType === 1 ) { - 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 - data_user.set( elem, key, data ); - } else { - data = undefined; - } - } - return data; -} - -jQuery.extend({ - hasData: function( elem ) { - return data_user.hasData( elem ) || data_priv.hasData( elem ); - }, - - data: function( elem, name, data ) { - return data_user.access( elem, name, data ); - }, - - removeData: function( elem, name ) { - data_user.remove( elem, name ); - }, - - // TODO: Now that all calls to _data and _removeData have been replaced - // with direct calls to data_priv methods, these can be deprecated. - _data: function( elem, name, data ) { - return data_priv.access( elem, name, data ); - }, - - _removeData: function( elem, name ) { - data_priv.remove( elem, name ); - } -}); - -jQuery.fn.extend({ - data: function( key, value ) { - var i, name, data, - elem = this[ 0 ], - attrs = elem && elem.attributes; - - // Gets all values - if ( key === undefined ) { - if ( this.length ) { - data = data_user.get( elem ); - - if ( elem.nodeType === 1 && !data_priv.get( elem, "hasDataAttrs" ) ) { - i = attrs.length; - while ( i-- ) { - - // Support: IE11+ - // The attrs elements can be null (#14894) - if ( attrs[ i ] ) { - name = attrs[ i ].name; - if ( name.indexOf( "data-" ) === 0 ) { - name = jQuery.camelCase( name.slice(5) ); - dataAttr( elem, name, data[ name ] ); - } - } - } - data_priv.set( elem, "hasDataAttrs", true ); - } - } - - return data; - } - - // Sets multiple values - if ( typeof key === "object" ) { - return this.each(function() { - data_user.set( this, key ); - }); - } - - return access( this, function( value ) { - var data, - camelKey = jQuery.camelCase( key ); - - // The calling jQuery object (element matches) is not empty - // (and therefore has an element appears at this[ 0 ]) and the - // `value` parameter was not undefined. An empty jQuery object - // will result in `undefined` for elem = this[ 0 ] which will - // throw an exception if an attempt to read a data cache is made. - if ( elem && value === undefined ) { - // Attempt to get data from the cache - // with the key as-is - data = data_user.get( elem, key ); - if ( data !== undefined ) { - return data; - } - - // Attempt to get data from the cache - // with the key camelized - data = data_user.get( elem, camelKey ); - if ( data !== undefined ) { - return data; - } - - // Attempt to "discover" the data in - // HTML5 custom data-* attrs - data = dataAttr( elem, camelKey, undefined ); - if ( data !== undefined ) { - return data; - } - - // We tried really hard, but the data doesn't exist. - return; - } - - // Set the data... - this.each(function() { - // First, attempt to store a copy or reference of any - // data that might've been store with a camelCased key. - var data = data_user.get( this, camelKey ); - - // For HTML5 data-* attribute interop, we have to - // store property names with dashes in a camelCase form. - // This might not apply to all properties...* - data_user.set( this, camelKey, value ); - - // *... In the case of properties that might _actually_ - // have dashes, we need to also store a copy of that - // unchanged property. - if ( key.indexOf("-") !== -1 && data !== undefined ) { - data_user.set( this, key, value ); - } - }); - }, null, value, arguments.length > 1, null, true ); - }, - - removeData: function( key ) { - return this.each(function() { - data_user.remove( this, key ); - }); - } -}); - - -jQuery.extend({ - queue: function( elem, type, data ) { - var queue; - - if ( elem ) { - type = ( type || "fx" ) + "queue"; - queue = data_priv.get( elem, type ); - - // Speed up dequeue by getting out quickly if this is just a lookup - if ( data ) { - if ( !queue || jQuery.isArray( data ) ) { - queue = data_priv.access( 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--; - } - - 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 public - generate a queueHooks object, or return the current one - _queueHooks: function( elem, type ) { - var key = type + "queueHooks"; - return data_priv.get( elem, key ) || data_priv.access( elem, key, { - empty: jQuery.Callbacks("once memory").add(function() { - data_priv.remove( elem, [ type + "queue", 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 ); - }); - }, - 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 = data_priv.get( elements[ i ], type + "queueHooks" ); - if ( tmp && tmp.empty ) { - count++; - tmp.empty.add( resolve ); - } - } - resolve(); - return defer.promise( obj ); - } -}); -var pnum = (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source; - -var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; - -var isHidden = function( 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 ); - }; - -var rcheckableType = (/^(?:checkbox|radio)$/i); - - - -(function() { - var fragment = document.createDocumentFragment(), - div = fragment.appendChild( document.createElement( "div" ) ), - input = document.createElement( "input" ); - - // Support: Safari<=5.1 - // Check state lost if the name is set (#11217) - // Support: Windows Web Apps (WWA) - // `name` and `type` must use .setAttribute for WWA (#14901) - input.setAttribute( "type", "radio" ); - input.setAttribute( "checked", "checked" ); - input.setAttribute( "name", "t" ); - - div.appendChild( input ); - - // Support: Safari<=5.1, Android<4.2 - // Older WebKit doesn't clone checked state correctly in fragments - support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; - - // Support: IE<=11+ - // Make sure textarea (and checkbox) defaultValue is properly cloned - div.innerHTML = "<textarea>x</textarea>"; - support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; -})(); -var strundefined = typeof undefined; - - - -support.focusinBubbles = "onfocusin" in window; - - -var - rkeyEvent = /^key/, - rmouseEvent = /^(?:mouse|pointer|contextmenu)|click/, - rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, - rtypenamespace = /^([^.]*)(?:\.(.+)|)$/; - -function returnTrue() { - return true; -} - -function returnFalse() { - return false; -} - -function safeActiveElement() { - try { - return document.activeElement; - } catch ( err ) { } -} - -/* - * 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 handleObjIn, eventHandle, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = data_priv.get( 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 !== strundefined && jQuery.event.triggered !== e.type ? - jQuery.event.dispatch.apply( elem, arguments ) : undefined; - }; - } - - // Handle multiple events separated by a space - types = ( types || "" ).match( rnotwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[t] ) || []; - type = origType = tmp[1]; - namespaces = ( tmp[2] || "" ).split( "." ).sort(); - - // There *must* be a type, no attaching namespace-only handlers - if ( !type ) { - continue; - } - - // 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 if the special events handler returns false - if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - if ( elem.addEventListener ) { - elem.addEventListener( type, eventHandle, false ); - } - } - } - - 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; - } - - }, - - // Detach an event or set of events from an element - remove: function( elem, types, handler, selector, mappedTypes ) { - - var j, origCount, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = data_priv.hasData( elem ) && data_priv.get( elem ); - - if ( !elemData || !(events = elemData.events) ) { - return; - } - - // Once for each type.namespace in types; type may be omitted - types = ( types || "" ).match( 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; - data_priv.remove( elem, "events" ); - } - }, - - trigger: function( event, data, elem, onlyHandlers ) { - - var i, cur, tmp, bubbleType, ontype, handle, special, - eventPath = [ elem || document ], - type = hasOwn.call( event, "type" ) ? event.type : event, - namespaces = 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 ); - - // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) - event.isTrigger = onlyHandlers ? 2 : 3; - 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 = ( data_priv.get( cur, "events" ) || {} )[ event.type ] && data_priv.get( cur, "handle" ); - if ( handle ) { - handle.apply( cur, data ); - } - - // Native handler - handle = ontype && cur[ ontype ]; - if ( handle && handle.apply && jQuery.acceptData( cur ) ) { - event.result = handle.apply( cur, data ); - if ( event.result === 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( eventPath.pop(), data ) === false) && - jQuery.acceptData( elem ) ) { - - // Call a native DOM method on the target with the same name name as the event. - // Don't do default actions on window, that's where global variables be (#6170) - if ( ontype && jQuery.isFunction( 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; - elem[ type ](); - 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, j, ret, matched, handleObj, - handlerQueue = [], - args = slice.call( arguments ), - handlers = ( data_priv.get( 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 i, matches, sel, handleObj, - handlerQueue = [], - delegateCount = handlers.delegateCount, - cur = event.target; - - // Find delegate handlers - // Black-hole SVG <use> 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 process clicks on disabled elements (#6911, #8165, #11382, #11764) - if ( 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; - }, - - // 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 offsetX offsetY pageX pageY screenX screenY toElement".split(" "), - filter: function( event, original ) { - var eventDoc, doc, body, - button = original.button; - - // 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 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; - } - }, - - 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: Cordova 2.5 (WebKit) (#13255) - // All events should have a target; Cordova deviceready doesn't - if ( !event.target ) { - event.target = document; - } - - // Support: Safari 6.0+, Chrome<28 - // Target should not be a text node (#504, #13143) - if ( event.target.nodeType === 3 ) { - event.target = event.target.parentNode; - } - - return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; - }, - - special: { - load: { - // Prevent triggered image.load events from bubbling to window.load - noBubble: true - }, - focus: { - // Fire native event if possible so blur/focus sequence is correct - trigger: function() { - if ( this !== safeActiveElement() && this.focus ) { - this.focus(); - return false; - } - }, - delegateType: "focusin" - }, - blur: { - trigger: function() { - if ( this === safeActiveElement() && this.blur ) { - this.blur(); - return false; - } - }, - delegateType: "focusout" - }, - click: { - // For checkbox, fire native event so checked state will be right - trigger: function() { - if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) { - this.click(); - return false; - } - }, - - // For cross-browser consistency, don't fire native .click() on links - _default: function( event ) { - return jQuery.nodeName( event.target, "a" ); - } - }, - - beforeunload: { - postDispatch: function( event ) { - - // Support: Firefox 20+ - // Firefox doesn't alert if the returnValue field is not set. - if ( event.result !== undefined && event.originalEvent ) { - 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 = function( elem, type, handle ) { - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle, false ); - } -}; - -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.defaultPrevented === undefined && - // Support: Android<4.0 - src.returnValue === false ? - 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 && e.preventDefault ) { - e.preventDefault(); - } - }, - stopPropagation: function() { - var e = this.originalEvent; - - this.isPropagationStopped = returnTrue; - - if ( e && e.stopPropagation ) { - e.stopPropagation(); - } - }, - stopImmediatePropagation: function() { - var e = this.originalEvent; - - this.isImmediatePropagationStopped = returnTrue; - - if ( e && e.stopImmediatePropagation ) { - e.stopImmediatePropagation(); - } - - this.stopPropagation(); - } -}; - -// Create mouseenter/leave events using mouseover/out and event-time checks -// Support: Chrome 15+ -jQuery.each({ - mouseenter: "mouseover", - mouseleave: "mouseout", - pointerenter: "pointerover", - pointerleave: "pointerout" -}, 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; - } - }; -}); - -// Support: Firefox, Chrome, Safari -// Create "bubbling" focus and blur events -if ( !support.focusinBubbles ) { - jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { - - // Attach a single capturing handler on the document while someone wants focusin/focusout - var handler = function( event ) { - jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); - }; - - jQuery.event.special[ fix ] = { - setup: function() { - var doc = this.ownerDocument || this, - attaches = data_priv.access( doc, fix ); - - if ( !attaches ) { - doc.addEventListener( orig, handler, true ); - } - data_priv.access( doc, fix, ( attaches || 0 ) + 1 ); - }, - teardown: function() { - var doc = this.ownerDocument || this, - attaches = data_priv.access( doc, fix ) - 1; - - if ( !attaches ) { - doc.removeEventListener( orig, handler, true ); - data_priv.remove( doc, fix ); - - } else { - data_priv.access( doc, fix, attaches ); - } - } - }; - }); -} - -jQuery.fn.extend({ - - on: function( types, selector, data, fn, /*INTERNAL*/ one ) { - var origFn, type; - - // 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 ); - }); - }, - - 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 ); - } - } -}); - - -var - rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, - rtagName = /<([\w:]+)/, - rhtml = /<|&#?\w+;/, - rnoInnerhtml = /<(?:script|style|link)/i, - // checked="checked" or checked - rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, - rscriptType = /^$|\/(?:java|ecma)script/i, - rscriptTypeMasked = /^true\/(.*)/, - rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g, - - // We have to close these tags to support XHTML (#13200) - wrapMap = { - - // Support: IE9 - option: [ 1, "<select multiple='multiple'>", "</select>" ], - - thead: [ 1, "<table>", "</table>" ], - col: [ 2, "<table><colgroup>", "</colgroup></table>" ], - tr: [ 2, "<table><tbody>", "</tbody></table>" ], - td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ], - - _default: [ 0, "", "" ] - }; - -// Support: IE9 -wrapMap.optgroup = wrapMap.option; - -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - -// Support: 1.x compatibility -// Manipulating tables requires a tbody -function manipulationTarget( elem, content ) { - return jQuery.nodeName( elem, "table" ) && - jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ? - - elem.getElementsByTagName("tbody")[0] || - elem.appendChild( elem.ownerDocument.createElement("tbody") ) : - elem; -} - -// Replace/restore the type attribute of script elements for safe DOM manipulation -function disableScript( elem ) { - elem.type = (elem.getAttribute("type") !== null) + "/" + 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 i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - data_priv.set( - elems[ i ], "globalEval", !refElements || data_priv.get( refElements[ i ], "globalEval" ) - ); - } -} - -function cloneCopyEvent( src, dest ) { - var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; - - if ( dest.nodeType !== 1 ) { - return; - } - - // 1. Copy private data: events, handlers, etc. - if ( data_priv.hasData( src ) ) { - pdataOld = data_priv.access( src ); - pdataCur = data_priv.set( dest, pdataOld ); - events = pdataOld.events; - - if ( events ) { - delete pdataCur.handle; - pdataCur.events = {}; - - for ( type in events ) { - for ( i = 0, l = events[ type ].length; i < l; i++ ) { - jQuery.event.add( dest, type, events[ type ][ i ] ); - } - } - } - } - - // 2. Copy user data - if ( data_user.hasData( src ) ) { - udataOld = data_user.access( src ); - udataCur = jQuery.extend( {}, udataOld ); - - data_user.set( dest, udataCur ); - } -} - -function getAll( context, tag ) { - var ret = context.getElementsByTagName ? context.getElementsByTagName( tag || "*" ) : - context.querySelectorAll ? context.querySelectorAll( tag || "*" ) : - []; - - return tag === undefined || tag && jQuery.nodeName( context, tag ) ? - jQuery.merge( [ context ], ret ) : - ret; -} - -// Fix IE bugs, see support tests -function fixInput( src, dest ) { - var nodeName = dest.nodeName.toLowerCase(); - - // Fails to persist the checked state of a cloned checkbox or radio button. - if ( nodeName === "input" && rcheckableType.test( src.type ) ) { - dest.checked = src.checked; - - // Fails to return the selected option to the default selected state when cloning options - } else if ( nodeName === "input" || nodeName === "textarea" ) { - dest.defaultValue = src.defaultValue; - } -} - -jQuery.extend({ - clone: function( elem, dataAndEvents, deepDataAndEvents ) { - var i, l, srcElements, destElements, - clone = elem.cloneNode( true ), - inPage = jQuery.contains( elem.ownerDocument, elem ); - - // Fix IE cloning issues - if ( !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 ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - fixInput( srcElements[ i ], 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, l = srcElements.length; i < l; i++ ) { - cloneCopyEvent( srcElements[ i ], destElements[ i ] ); - } - } else { - cloneCopyEvent( elem, clone ); - } - } - - // Preserve script evaluation history - destElements = getAll( clone, "script" ); - if ( destElements.length > 0 ) { - setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); - } - - // Return the cloned set - return clone; - }, - - buildFragment: function( elems, context, scripts, selection ) { - var elem, tmp, tag, wrap, contains, j, - fragment = context.createDocumentFragment(), - nodes = [], - i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - elem = elems[ i ]; - - if ( elem || elem === 0 ) { - - // Add nodes directly - if ( jQuery.type( elem ) === "object" ) { - // Support: QtWebKit, PhantomJS - // push.apply(_, arraylike) throws on ancient WebKit - 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 || fragment.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></$2>" ) + wrap[ 2 ]; - - // Descend through wrappers to the right content - j = wrap[ 0 ]; - while ( j-- ) { - tmp = tmp.lastChild; - } - - // Support: QtWebKit, PhantomJS - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, tmp.childNodes ); - - // Remember the top-level container - tmp = fragment.firstChild; - - // Ensure the created nodes are orphaned (#12392) - tmp.textContent = ""; - } - } - } - - // Remove wrapper from fragment - fragment.textContent = ""; - - 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( fragment.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 ); - } - } - } - } - - return fragment; - }, - - cleanData: function( elems ) { - var data, elem, type, key, - special = jQuery.event.special, - i = 0; - - for ( ; (elem = elems[ i ]) !== undefined; i++ ) { - if ( jQuery.acceptData( elem ) ) { - key = elem[ data_priv.expando ]; - - if ( key && (data = data_priv.cache[ key ]) ) { - 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 ); - } - } - } - if ( data_priv.cache[ key ] ) { - // Discard any remaining `private` data - delete data_priv.cache[ key ]; - } - } - } - // Discard any remaining `user` data - delete data_user.cache[ elem[ data_user.expando ] ]; - } - } -}); - -jQuery.fn.extend({ - text: function( value ) { - return access( this, function( value ) { - return value === undefined ? - jQuery.text( this ) : - this.empty().each(function() { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - this.textContent = value; - } - }); - }, null, value, arguments.length ); - }, - - append: function() { - return this.domManip( arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.appendChild( elem ); - } - }); - }, - - prepend: function() { - return this.domManip( arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.insertBefore( elem, target.firstChild ); - } - }); - }, - - before: function() { - return this.domManip( arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this ); - } - }); - }, - - after: function() { - return this.domManip( arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this.nextSibling ); - } - }); - }, - - remove: function( selector, keepData /* Internal Use Only */ ) { - var elem, - elems = selector ? jQuery.filter( selector, this ) : this, - i = 0; - - for ( ; (elem = elems[i]) != null; i++ ) { - 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++ ) { - if ( elem.nodeType === 1 ) { - - // Prevent memory leaks - jQuery.cleanData( getAll( elem, false ) ); - - // Remove any remaining nodes - elem.textContent = ""; - } - } - - 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 access( this, function( value ) { - var elem = this[ 0 ] || {}, - i = 0, - l = this.length; - - if ( value === undefined && elem.nodeType === 1 ) { - return elem.innerHTML; - } - - // See if we can take a shortcut and just use innerHTML - if ( typeof value === "string" && !rnoInnerhtml.test( value ) && - !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { - - value = value.replace( rxhtmlTag, "<$1></$2>" ); - - try { - for ( ; i < l; i++ ) { - elem = this[ i ] || {}; - - // Remove element nodes and prevent memory leaks - 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() { - var arg = arguments[ 0 ]; - - // Make the changes, replacing each context element with the new content - this.domManip( arguments, function( elem ) { - arg = this.parentNode; - - jQuery.cleanData( getAll( this ) ); - - if ( arg ) { - arg.replaceChild( elem, this ); - } - }); - - // Force removal if there was no new content (e.g., from empty arguments) - return arg && (arg.length || arg.nodeType) ? this : this.remove(); - }, - - detach: function( selector ) { - return this.remove( selector, true ); - }, - - domManip: function( args, callback ) { - - // Flatten any nested arrays - args = concat.apply( [], args ); - - var fragment, first, scripts, hasScripts, node, doc, - 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" && - !support.checkClone && rchecked.test( value ) ) ) { - return this.each(function( index ) { - var self = set.eq( index ); - if ( isFunction ) { - args[ 0 ] = value.call( this, index, self.html() ); - } - self.domManip( args, callback ); - }); - } - - if ( l ) { - fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this ); - first = fragment.firstChild; - - if ( fragment.childNodes.length === 1 ) { - fragment = first; - } - - if ( first ) { - 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 ) { - // Support: QtWebKit - // jQuery.merge because push.apply(_, arraylike) throws - jQuery.merge( scripts, getAll( node, "script" ) ); - } - } - - callback.call( 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 || "" ) && - !data_priv.access( node, "globalEval" ) && jQuery.contains( doc, node ) ) { - - if ( node.src ) { - // Optional AJAX dependency, but won't run scripts if not present - if ( jQuery._evalUrl ) { - jQuery._evalUrl( node.src ); - } - } else { - jQuery.globalEval( node.textContent.replace( rcleanScript, "" ) ); - } - } - } - } - } - } - - return this; - } -}); - -jQuery.each({ - appendTo: "append", - prependTo: "prepend", - insertBefore: "before", - insertAfter: "after", - replaceAll: "replaceWith" -}, function( name, original ) { - jQuery.fn[ name ] = function( selector ) { - var elems, - ret = [], - insert = jQuery( selector ), - last = insert.length - 1, - i = 0; - - for ( ; i <= last; i++ ) { - elems = i === last ? this : this.clone( true ); - jQuery( insert[ i ] )[ original ]( elems ); - - // Support: QtWebKit - // .get() because push.apply(_, arraylike) throws - push.apply( ret, elems.get() ); - } - - return this.pushStack( ret ); - }; -}); - - -var iframe, - elemdisplay = {}; - -/** - * Retrieve the actual display of a element - * @param {String} name nodeName of the element - * @param {Object} doc Document object - */ -// Called only from within defaultDisplay -function actualDisplay( name, doc ) { - var style, - elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ), - - // getDefaultComputedStyle might be reliably used only on attached element - display = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ? - - // Use of this method is a temporary fix (more like optimization) until something better comes along, - // since it was removed from specification and supported only in FF - style.display : jQuery.css( elem[ 0 ], "display" ); - - // We don't have any data stored on the element, - // so use "detach" method as fast way to get rid of the element - elem.detach(); - - return display; -} - -/** - * Try to determine the default display value of an element - * @param {String} nodeName - */ -function 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( "<iframe frameborder='0' width='0' height='0'/>" )).appendTo( doc.documentElement ); - - // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse - doc = iframe[ 0 ].contentDocument; - - // Support: IE - doc.write(); - doc.close(); - - display = actualDisplay( nodeName, doc ); - iframe.detach(); - } - - // Store the correct default display - elemdisplay[ nodeName ] = display; - } - - return display; -} -var rmargin = (/^margin/); - -var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); - -var getStyles = function( elem ) { - // Support: IE<=11+, Firefox<=30+ (#15098, #14150) - // IE throws on elements created in popups - // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" - if ( elem.ownerDocument.defaultView.opener ) { - return elem.ownerDocument.defaultView.getComputedStyle( elem, null ); - } - - return window.getComputedStyle( elem, null ); - }; - - - -function curCSS( elem, name, computed ) { - var width, minWidth, maxWidth, ret, - style = elem.style; - - computed = computed || getStyles( elem ); - - // Support: IE9 - // getPropertyValue is only needed for .css('filter') (#12537) - if ( computed ) { - ret = computed.getPropertyValue( name ) || computed[ name ]; - } - - if ( computed ) { - - if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { - ret = jQuery.style( elem, name ); - } - - // Support: iOS < 6 - // A tribute to the "awesome hack by Dean Edwards" - // iOS < 6 (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 !== undefined ? - // Support: IE - // IE returns zIndex value as an integer. - ret + "" : - ret; -} - - -function addGetHookIf( conditionFn, hookFn ) { - // Define the hook, we'll check on the first run if it's really needed. - return { - get: function() { - if ( conditionFn() ) { - // Hook not needed (or it's not possible to use it due - // to missing dependency), remove it. - delete this.get; - return; - } - - // Hook needed; redefine it so that the support test is not executed again. - return (this.get = hookFn).apply( this, arguments ); - } - }; -} - - -(function() { - var pixelPositionVal, boxSizingReliableVal, - docElem = document.documentElement, - container = document.createElement( "div" ), - div = document.createElement( "div" ); - - if ( !div.style ) { - return; - } - - // Support: IE9-11+ - // Style of cloned element affects source element cloned (#8908) - div.style.backgroundClip = "content-box"; - div.cloneNode( true ).style.backgroundClip = ""; - support.clearCloneStyle = div.style.backgroundClip === "content-box"; - - container.style.cssText = "border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;" + - "position:absolute"; - container.appendChild( div ); - - // Executing both pixelPosition & boxSizingReliable tests require only one layout - // so they're executed at the same time to save the second computation. - function computePixelPositionAndBoxSizingReliable() { - div.style.cssText = - // Support: Firefox<29, Android 2.3 - // Vendor-prefix box-sizing - "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;" + - "box-sizing:border-box;display:block;margin-top:1%;top:1%;" + - "border:1px;padding:1px;width:4px;position:absolute"; - div.innerHTML = ""; - docElem.appendChild( container ); - - var divStyle = window.getComputedStyle( div, null ); - pixelPositionVal = divStyle.top !== "1%"; - boxSizingReliableVal = divStyle.width === "4px"; - - docElem.removeChild( container ); - } - - // Support: node.js jsdom - // Don't assume that getComputedStyle is a property of the global object - if ( window.getComputedStyle ) { - jQuery.extend( support, { - pixelPosition: function() { - - // This test is executed only once but we still do memoizing - // since we can use the boxSizingReliable pre-computing. - // No need to check if the test was already performed, though. - computePixelPositionAndBoxSizingReliable(); - return pixelPositionVal; - }, - boxSizingReliable: function() { - if ( boxSizingReliableVal == null ) { - computePixelPositionAndBoxSizingReliable(); - } - return boxSizingReliableVal; - }, - reliableMarginRight: function() { - - // Support: Android 2.3 - // Check if div with explicit width and no margin-right incorrectly - // gets computed margin-right based on width of container. (#3333) - // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right - // This support function is only executed once so no memoizing is needed. - var ret, - marginDiv = div.appendChild( document.createElement( "div" ) ); - - // Reset CSS: box-sizing; display; margin; border; padding - marginDiv.style.cssText = div.style.cssText = - // Support: Firefox<29, Android 2.3 - // Vendor-prefix box-sizing - "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" + - "box-sizing:content-box;display:block;margin:0;border:0;padding:0"; - marginDiv.style.marginRight = marginDiv.style.width = "0"; - div.style.width = "1px"; - docElem.appendChild( container ); - - ret = !parseFloat( window.getComputedStyle( marginDiv, null ).marginRight ); - - docElem.removeChild( container ); - div.removeChild( marginDiv ); - - return ret; - } - }); - } -})(); - - -// A method for quickly swapping in/out CSS properties to get correct calculations. -jQuery.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; -}; - - -var - // 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]).+)/, - rnumsplit = new RegExp( "^(" + pnum + ")(.*)$", "i" ), - rrelNum = new RegExp( "^([+-])=(" + pnum + ")", "i" ), - - cssShow = { position: "absolute", visibility: "hidden", display: "block" }, - cssNormalTransform = { - letterSpacing: "0", - fontWeight: "400" - }, - - 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[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 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.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; - } - - // Check for style in case a browser which returns unreliable values - // for getComputedStyle silently falls back to the reliable elem.style - valueIsBorderBox = isBorderBox && - ( 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"; -} - -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 ] = data_priv.get( 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 ] = data_priv.access( elem, "olddisplay", defaultDisplay(elem.nodeName) ); - } - } else { - hidden = isHidden( elem ); - - if ( display !== "none" || !hidden ) { - data_priv.set( 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.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; - } - } - } - }, - - // Don't automatically add "px" to these possibly-unitless properties - cssNumber: { - "columnCount": true, - "fillOpacity": true, - "flexGrow": true, - "flexShrink": true, - "fontWeight": true, - "lineHeight": true, - "opacity": true, - "order": 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: { - "float": "cssFloat" - }, - - // 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, then unprefixed version - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // Check if we're setting a value - if ( value !== undefined ) { - type = typeof value; - - // Convert "+=" 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 null and NaN values aren't set (#7116) - if ( value == null || value !== value ) { - return; - } - - // If a number, add 'px' to the (except for certain CSS properties) - if ( type === "number" && !jQuery.cssNumber[ origName ] ) { - value += "px"; - } - - // Support: IE9-11+ - // background-* props affect original clone's values - if ( !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 ) { - style[ name ] = value; - } - - } 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 val, num, 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 ) ); - - // Try prefixed name followed by the unprefixed name - 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 ]; - } - - // Make numeric 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; - } -}); - -jQuery.each([ "height", "width" ], function( i, name ) { - jQuery.cssHooks[ name ] = { - get: function( elem, computed, extra ) { - if ( computed ) { - - // Certain elements can have dimension info if we invisibly show them - // but it must have a current display style that would benefit - return rdisplayswap.test( jQuery.css( elem, "display" ) ) && elem.offsetWidth === 0 ? - jQuery.swap( elem, cssShow, function() { - return getWidthOrHeight( elem, name, extra ); - }) : - getWidthOrHeight( elem, name, extra ); - } - }, - - set: function( elem, value, extra ) { - var styles = extra && getStyles( elem ); - return setPositiveNumber( elem, value, extra ? - augmentWidthOrHeight( - elem, - name, - extra, - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - styles - ) : 0 - ); - } - }; -}); - -// Support: Android 2.3 -jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight, - function( elem, computed ) { - if ( computed ) { - return jQuery.swap( elem, { "display": "inline-block" }, - curCSS, [ elem, "marginRight" ] ); - } - } -); - -// These hooks are used by animate to expand properties -jQuery.each({ - margin: "", - padding: "", - border: "Width" -}, function( prefix, suffix ) { - jQuery.cssHooks[ prefix + suffix ] = { - expand: function( value ) { - var i = 0, - expanded = {}, - - // Assumes a single number if not a string - parts = typeof value === "string" ? value.split(" ") : [ value ]; - - for ( ; i < 4; i++ ) { - expanded[ prefix + cssExpand[ i ] + suffix ] = - parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; - } - - return expanded; - } - }; - - if ( !rmargin.test( prefix ) ) { - jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; - } -}); - -jQuery.fn.extend({ - css: function( name, value ) { - return access( this, function( elem, name, value ) { - var styles, len, - 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 ) { - if ( typeof state === "boolean" ) { - return state ? this.show() : this.hide(); - } - - return this.each(function() { - if ( isHidden( this ) ) { - jQuery( this ).show(); - } else { - jQuery( this ).hide(); - } - }); - } -}); - - -function Tween( elem, options, prop, end, easing ) { - return new Tween.prototype.init( elem, options, prop, end, easing ); -} -jQuery.Tween = Tween; - -Tween.prototype = { - constructor: Tween, - init: function( elem, options, prop, end, easing, unit ) { - this.elem = elem; - this.prop = prop; - this.easing = easing || "swing"; - this.options = options; - this.start = this.now = this.cur(); - this.end = end; - this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); - }, - cur: function() { - var hooks = Tween.propHooks[ this.prop ]; - - return hooks && hooks.get ? - hooks.get( this ) : - Tween.propHooks._default.get( this ); - }, - run: function( percent ) { - var eased, - hooks = Tween.propHooks[ this.prop ]; - - if ( this.options.duration ) { - this.pos = eased = jQuery.easing[ this.easing ]( - percent, this.options.duration * percent, 0, 1, this.options.duration - ); - } else { - this.pos = eased = percent; - } - this.now = ( this.end - this.start ) * eased + this.start; - - if ( this.options.step ) { - this.options.step.call( this.elem, this.now, this ); - } - - if ( hooks && hooks.set ) { - hooks.set( this ); - } else { - Tween.propHooks._default.set( this ); - } - return this; - } -}; - -Tween.prototype.init.prototype = Tween.prototype; - -Tween.propHooks = { - _default: { - get: function( tween ) { - var result; - - if ( tween.elem[ tween.prop ] != null && - (!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) { - return tween.elem[ tween.prop ]; - } - - // Passing an empty string as a 3rd parameter to .css will automatically - // attempt a parseFloat and fallback to a string if the parse fails. - // Simple values such as "10px" are parsed to Float; - // complex values such as "rotate(1rad)" are returned as-is. - result = jQuery.css( tween.elem, tween.prop, "" ); - // Empty strings, null, undefined and "auto" are converted to 0. - return !result || result === "auto" ? 0 : result; - }, - set: function( tween ) { - // Use step hook for back compat. - // Use cssHook if its there. - // Use .style if available and use plain properties where available. - if ( jQuery.fx.step[ tween.prop ] ) { - jQuery.fx.step[ tween.prop ]( tween ); - } else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) { - jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); - } else { - tween.elem[ tween.prop ] = tween.now; - } - } - } -}; - -// Support: IE9 -// Panic based approach to setting things on disconnected nodes -Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { - set: function( tween ) { - if ( tween.elem.nodeType && tween.elem.parentNode ) { - tween.elem[ tween.prop ] = tween.now; - } - } -}; - -jQuery.easing = { - linear: function( p ) { - return p; - }, - swing: function( p ) { - return 0.5 - Math.cos( p * Math.PI ) / 2; - } -}; - -jQuery.fx = Tween.prototype.init; - -// Back Compat <1.8 extension point -jQuery.fx.step = {}; - - - - -var - fxNow, timerId, - rfxtypes = /^(?:toggle|show|hide)$/, - rfxnum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ), - rrun = /queueHooks$/, - animationPrefilters = [ defaultPrefilter ], - tweeners = { - "*": [ function( prop, value ) { - var tween = this.createTween( prop, value ), - target = tween.cur(), - parts = rfxnum.exec( value ), - unit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), - - // Starting value computation is required for potential unit mismatches - start = ( jQuery.cssNumber[ prop ] || unit !== "px" && +target ) && - rfxnum.exec( jQuery.css( tween.elem, prop ) ), - scale = 1, - maxIterations = 20; - - if ( start && start[ 3 ] !== unit ) { - // Trust units reported by jQuery.css - unit = unit || start[ 3 ]; - - // Make sure we update the tween properties later on - parts = parts || []; - - // Iteratively approximate from a nonzero starting point - start = +target || 1; - - do { - // If previous iteration zeroed out, double until we get *something*. - // Use string for doubling so we don't accidentally see scale as unchanged below - scale = scale || ".5"; - - // Adjust and apply - start = start / scale; - jQuery.style( tween.elem, prop, start + unit ); - - // Update scale, tolerating zero or NaN from tween.cur(), - // break the loop if scale is unchanged or perfect, or if we've just had enough - } while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations ); - } - - // Update tween properties - if ( parts ) { - start = tween.start = +start || +target || 0; - tween.unit = unit; - // If a +=/-= token was provided, we're doing a relative animation - tween.end = parts[ 1 ] ? - start + ( parts[ 1 ] + 1 ) * parts[ 2 ] : - +parts[ 2 ]; - } - - return tween; - } ] - }; - -// Animations created synchronously will run synchronously -function createFxNow() { - setTimeout(function() { - fxNow = undefined; - }); - return ( fxNow = jQuery.now() ); -} - -// Generate parameters to create a standard animation -function genFx( type, includeWidth ) { - var which, - i = 0, - attrs = { height: type }; - - // If we include width, step value is 1 to do all cssExpand values, - // otherwise step value is 2 to skip over Left and Right - includeWidth = includeWidth ? 1 : 0; - for ( ; i < 4 ; i += 2 - includeWidth ) { - which = cssExpand[ i ]; - attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; - } - - if ( includeWidth ) { - attrs.opacity = attrs.width = type; - } - - return attrs; -} - -function createTween( value, prop, animation ) { - var tween, - collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ), - index = 0, - length = collection.length; - for ( ; index < length; index++ ) { - if ( (tween = collection[ index ].call( animation, prop, value )) ) { - - // We're done with this property - return tween; - } - } -} - -function defaultPrefilter( elem, props, opts ) { - /* jshint validthis: true */ - var prop, value, toggle, tween, hooks, oldfire, display, checkDisplay, - anim = this, - orig = {}, - style = elem.style, - hidden = elem.nodeType && isHidden( elem ), - dataShow = data_priv.get( elem, "fxshow" ); - - // Handle queue: false promises - if ( !opts.queue ) { - hooks = jQuery._queueHooks( elem, "fx" ); - if ( hooks.unqueued == null ) { - hooks.unqueued = 0; - oldfire = hooks.empty.fire; - hooks.empty.fire = function() { - if ( !hooks.unqueued ) { - oldfire(); - } - }; - } - hooks.unqueued++; - - anim.always(function() { - // Ensure the complete handler is called before this completes - anim.always(function() { - hooks.unqueued--; - if ( !jQuery.queue( elem, "fx" ).length ) { - hooks.empty.fire(); - } - }); - }); - } - - // Height/width overflow pass - if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) { - // Make sure that nothing sneaks out - // Record all 3 overflow attributes because IE9-10 do not - // change the overflow attribute when overflowX and - // overflowY are set to the same value - opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; - - // Set display property to inline-block for height/width - // animations on inline elements that are having width/height animated - display = jQuery.css( elem, "display" ); - - // Test default display if display is currently "none" - checkDisplay = display === "none" ? - data_priv.get( elem, "olddisplay" ) || defaultDisplay( elem.nodeName ) : display; - - if ( checkDisplay === "inline" && jQuery.css( elem, "float" ) === "none" ) { - style.display = "inline-block"; - } - } - - if ( opts.overflow ) { - style.overflow = "hidden"; - anim.always(function() { - style.overflow = opts.overflow[ 0 ]; - style.overflowX = opts.overflow[ 1 ]; - style.overflowY = opts.overflow[ 2 ]; - }); - } - - // show/hide pass - for ( prop in props ) { - value = props[ prop ]; - if ( rfxtypes.exec( value ) ) { - delete props[ prop ]; - toggle = toggle || value === "toggle"; - if ( value === ( hidden ? "hide" : "show" ) ) { - - // If there is dataShow left over from a stopped hide or show and we are going to proceed with show, we should pretend to be hidden - if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { - hidden = true; - } else { - continue; - } - } - orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); - - // Any non-fx value stops us from restoring the original display value - } else { - display = undefined; - } - } - - if ( !jQuery.isEmptyObject( orig ) ) { - if ( dataShow ) { - if ( "hidden" in dataShow ) { - hidden = dataShow.hidden; - } - } else { - dataShow = data_priv.access( elem, "fxshow", {} ); - } - - // Store state if its toggle - enables .stop().toggle() to "reverse" - if ( toggle ) { - dataShow.hidden = !hidden; - } - if ( hidden ) { - jQuery( elem ).show(); - } else { - anim.done(function() { - jQuery( elem ).hide(); - }); - } - anim.done(function() { - var prop; - - data_priv.remove( elem, "fxshow" ); - for ( prop in orig ) { - jQuery.style( elem, prop, orig[ prop ] ); - } - }); - for ( prop in orig ) { - tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); - - if ( !( prop in dataShow ) ) { - dataShow[ prop ] = tween.start; - if ( hidden ) { - tween.end = tween.start; - tween.start = prop === "width" || prop === "height" ? 1 : 0; - } - } - } - - // If this is a noop like .hide().hide(), restore an overwritten display value - } else if ( (display === "none" ? defaultDisplay( elem.nodeName ) : display) === "inline" ) { - style.display = display; - } -} - -function propFilter( props, specialEasing ) { - var index, name, easing, value, hooks; - - // camelCase, specialEasing and expand cssHook pass - for ( index in props ) { - name = jQuery.camelCase( index ); - easing = specialEasing[ name ]; - value = props[ index ]; - if ( jQuery.isArray( value ) ) { - easing = value[ 1 ]; - value = props[ index ] = value[ 0 ]; - } - - if ( index !== name ) { - props[ name ] = value; - delete props[ index ]; - } - - hooks = jQuery.cssHooks[ name ]; - if ( hooks && "expand" in hooks ) { - value = hooks.expand( value ); - delete props[ name ]; - - // Not quite $.extend, this won't overwrite existing keys. - // Reusing 'index' because we have the correct "name" - for ( index in value ) { - if ( !( index in props ) ) { - props[ index ] = value[ index ]; - specialEasing[ index ] = easing; - } - } - } else { - specialEasing[ name ] = easing; - } - } -} - -function Animation( elem, properties, options ) { - var result, - stopped, - index = 0, - length = animationPrefilters.length, - deferred = jQuery.Deferred().always( function() { - // Don't match elem in the :animated selector - delete tick.elem; - }), - tick = function() { - if ( stopped ) { - return false; - } - var currentTime = fxNow || createFxNow(), - remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), - // Support: Android 2.3 - // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) - temp = remaining / animation.duration || 0, - percent = 1 - temp, - index = 0, - length = animation.tweens.length; - - for ( ; index < length ; index++ ) { - animation.tweens[ index ].run( percent ); - } - - deferred.notifyWith( elem, [ animation, percent, remaining ]); - - if ( percent < 1 && length ) { - return remaining; - } else { - deferred.resolveWith( elem, [ animation ] ); - return false; - } - }, - animation = deferred.promise({ - elem: elem, - props: jQuery.extend( {}, properties ), - opts: jQuery.extend( true, { specialEasing: {} }, options ), - originalProperties: properties, - originalOptions: options, - startTime: fxNow || createFxNow(), - duration: options.duration, - tweens: [], - createTween: function( prop, end ) { - var tween = jQuery.Tween( elem, animation.opts, prop, end, - animation.opts.specialEasing[ prop ] || animation.opts.easing ); - animation.tweens.push( tween ); - return tween; - }, - stop: function( gotoEnd ) { - var index = 0, - // If we are going to the end, we want to run all the tweens - // otherwise we skip this part - length = gotoEnd ? animation.tweens.length : 0; - if ( stopped ) { - return this; - } - stopped = true; - for ( ; index < length ; index++ ) { - animation.tweens[ index ].run( 1 ); - } - - // Resolve when we played the last frame; otherwise, reject - if ( gotoEnd ) { - deferred.resolveWith( elem, [ animation, gotoEnd ] ); - } else { - deferred.rejectWith( elem, [ animation, gotoEnd ] ); - } - return this; - } - }), - props = animation.props; - - propFilter( props, animation.opts.specialEasing ); - - for ( ; index < length ; index++ ) { - result = animationPrefilters[ index ].call( animation, elem, props, animation.opts ); - if ( result ) { - return result; - } - } - - jQuery.map( props, createTween, animation ); - - if ( jQuery.isFunction( animation.opts.start ) ) { - animation.opts.start.call( elem, animation ); - } - - jQuery.fx.timer( - jQuery.extend( tick, { - elem: elem, - anim: animation, - queue: animation.opts.queue - }) - ); - - // attach callbacks from options - return animation.progress( animation.opts.progress ) - .done( animation.opts.done, animation.opts.complete ) - .fail( animation.opts.fail ) - .always( animation.opts.always ); -} - -jQuery.Animation = jQuery.extend( Animation, { - - tweener: function( props, callback ) { - if ( jQuery.isFunction( props ) ) { - callback = props; - props = [ "*" ]; - } else { - props = props.split(" "); - } - - var prop, - index = 0, - length = props.length; - - for ( ; index < length ; index++ ) { - prop = props[ index ]; - tweeners[ prop ] = tweeners[ prop ] || []; - tweeners[ prop ].unshift( callback ); - } - }, - - prefilter: function( callback, prepend ) { - if ( prepend ) { - animationPrefilters.unshift( callback ); - } else { - animationPrefilters.push( callback ); - } - } -}); - -jQuery.speed = function( speed, easing, fn ) { - var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { - complete: fn || !fn && easing || - jQuery.isFunction( speed ) && speed, - duration: speed, - easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing - }; - - opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration : - opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default; - - // Normalize opt.queue - true/undefined/null -> "fx" - if ( opt.queue == null || opt.queue === true ) { - opt.queue = "fx"; - } - - // Queueing - opt.old = opt.complete; - - opt.complete = function() { - if ( jQuery.isFunction( opt.old ) ) { - opt.old.call( this ); - } - - if ( opt.queue ) { - jQuery.dequeue( this, opt.queue ); - } - }; - - return opt; -}; - -jQuery.fn.extend({ - fadeTo: function( speed, to, easing, callback ) { - - // Show any hidden elements after setting opacity to 0 - return this.filter( isHidden ).css( "opacity", 0 ).show() - - // Animate to the value specified - .end().animate({ opacity: to }, speed, easing, callback ); - }, - animate: function( prop, speed, easing, callback ) { - var empty = jQuery.isEmptyObject( prop ), - optall = jQuery.speed( speed, easing, callback ), - doAnimation = function() { - // Operate on a copy of prop so per-property easing won't be lost - var anim = Animation( this, jQuery.extend( {}, prop ), optall ); - - // Empty animations, or finishing resolves immediately - if ( empty || data_priv.get( this, "finish" ) ) { - anim.stop( true ); - } - }; - doAnimation.finish = doAnimation; - - return empty || optall.queue === false ? - this.each( doAnimation ) : - this.queue( optall.queue, doAnimation ); - }, - stop: function( type, clearQueue, gotoEnd ) { - var stopQueue = function( hooks ) { - var stop = hooks.stop; - delete hooks.stop; - stop( gotoEnd ); - }; - - if ( typeof type !== "string" ) { - gotoEnd = clearQueue; - clearQueue = type; - type = undefined; - } - if ( clearQueue && type !== false ) { - this.queue( type || "fx", [] ); - } - - return this.each(function() { - var dequeue = true, - index = type != null && type + "queueHooks", - timers = jQuery.timers, - data = data_priv.get( this ); - - if ( index ) { - if ( data[ index ] && data[ index ].stop ) { - stopQueue( data[ index ] ); - } - } else { - for ( index in data ) { - if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { - stopQueue( data[ index ] ); - } - } - } - - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) { - timers[ index ].anim.stop( gotoEnd ); - dequeue = false; - timers.splice( index, 1 ); - } - } - - // Start the next in the queue if the last step wasn't forced. - // Timers currently will call their complete callbacks, which - // will dequeue but only if they were gotoEnd. - if ( dequeue || !gotoEnd ) { - jQuery.dequeue( this, type ); - } - }); - }, - finish: function( type ) { - if ( type !== false ) { - type = type || "fx"; - } - return this.each(function() { - var index, - data = data_priv.get( this ), - queue = data[ type + "queue" ], - hooks = data[ type + "queueHooks" ], - timers = jQuery.timers, - length = queue ? queue.length : 0; - - // Enable finishing flag on private data - data.finish = true; - - // Empty the queue first - jQuery.queue( this, type, [] ); - - if ( hooks && hooks.stop ) { - hooks.stop.call( this, true ); - } - - // Look for any active animations, and finish them - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && timers[ index ].queue === type ) { - timers[ index ].anim.stop( true ); - timers.splice( index, 1 ); - } - } - - // Look for any animations in the old queue and finish them - for ( index = 0; index < length; index++ ) { - if ( queue[ index ] && queue[ index ].finish ) { - queue[ index ].finish.call( this ); - } - } - - // Turn off finishing flag - delete data.finish; - }); - } -}); - -jQuery.each([ "toggle", "show", "hide" ], function( i, name ) { - var cssFn = jQuery.fn[ name ]; - jQuery.fn[ name ] = function( speed, easing, callback ) { - return speed == null || typeof speed === "boolean" ? - cssFn.apply( this, arguments ) : - this.animate( genFx( name, true ), speed, easing, callback ); - }; -}); - -// Generate shortcuts for custom animations -jQuery.each({ - slideDown: genFx("show"), - slideUp: genFx("hide"), - slideToggle: genFx("toggle"), - fadeIn: { opacity: "show" }, - fadeOut: { opacity: "hide" }, - fadeToggle: { opacity: "toggle" } -}, function( name, props ) { - jQuery.fn[ name ] = function( speed, easing, callback ) { - return this.animate( props, speed, easing, callback ); - }; -}); - -jQuery.timers = []; -jQuery.fx.tick = function() { - var timer, - i = 0, - timers = jQuery.timers; - - fxNow = jQuery.now(); - - for ( ; i < timers.length; i++ ) { - timer = timers[ i ]; - // Checks the timer has not already been removed - if ( !timer() && timers[ i ] === timer ) { - timers.splice( i--, 1 ); - } - } - - if ( !timers.length ) { - jQuery.fx.stop(); - } - fxNow = undefined; -}; - -jQuery.fx.timer = function( timer ) { - jQuery.timers.push( timer ); - if ( timer() ) { - jQuery.fx.start(); - } else { - jQuery.timers.pop(); - } -}; - -jQuery.fx.interval = 13; - -jQuery.fx.start = function() { - if ( !timerId ) { - timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval ); - } -}; - -jQuery.fx.stop = function() { - clearInterval( timerId ); - timerId = null; -}; - -jQuery.fx.speeds = { - slow: 600, - fast: 200, - // Default speed - _default: 400 -}; - - -// Based off of the plugin by Clint Helfers, with permission. -// http://blindsignals.com/index.php/2009/07/jquery-delay/ -jQuery.fn.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 ); - }; - }); -}; - - -(function() { - var input = document.createElement( "input" ), - select = document.createElement( "select" ), - opt = select.appendChild( document.createElement( "option" ) ); - - input.type = "checkbox"; - - // Support: iOS<=5.1, Android<=4.2+ - // Default value for a checkbox should be "on" - support.checkOn = input.value !== ""; - - // Support: IE<=11+ - // Must access selectedIndex to make default options select - support.optSelected = opt.selected; - - // Support: Android<=2.3 - // Options inside disabled selects are incorrectly marked as disabled - select.disabled = true; - support.optDisabled = !opt.disabled; - - // Support: IE<=11+ - // An input loses its value after becoming a radio - input = document.createElement( "input" ); - input.value = "t"; - input.type = "radio"; - support.radioValue = input.value === "t"; -})(); - - -var nodeHook, boolHook, - attrHandle = jQuery.expr.attrHandle; - -jQuery.fn.extend({ - attr: function( name, value ) { - return access( this, jQuery.attr, name, value, arguments.length > 1 ); - }, - - removeAttr: function( name ) { - return this.each(function() { - jQuery.removeAttr( this, name ); - }); - } -}); - -jQuery.extend({ - attr: function( elem, name, value ) { - var hooks, 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 === strundefined ) { - return jQuery.prop( elem, name, value ); - } - - // All attributes are lowercase - // Grab necessary hook if one is defined - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - name = name.toLowerCase(); - hooks = jQuery.attrHooks[ name ] || - ( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook ); - } - - if ( value !== undefined ) { - - if ( value === null ) { - jQuery.removeAttr( elem, name ); - - } else if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { - return ret; - - } else { - elem.setAttribute( name, value + "" ); - return value; - } - - } else if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { - return ret; - - } else { - ret = jQuery.find.attr( elem, 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( rnotwhite ); - - if ( attrNames && elem.nodeType === 1 ) { - while ( (name = attrNames[i++]) ) { - propName = jQuery.propFix[ name ] || name; - - // Boolean attributes get special treatment (#10870) - if ( jQuery.expr.match.bool.test( name ) ) { - // Set corresponding property to false - elem[ propName ] = false; - } - - elem.removeAttribute( name ); - } - } - }, - - attrHooks: { - type: { - set: function( elem, value ) { - if ( !support.radioValue && value === "radio" && - jQuery.nodeName( elem, "input" ) ) { - var val = elem.value; - elem.setAttribute( "type", value ); - if ( val ) { - elem.value = val; - } - return value; - } - } - } - } -}); - -// Hooks for boolean attributes -boolHook = { - set: function( elem, value, name ) { - if ( value === false ) { - // Remove boolean attributes when set to false - jQuery.removeAttr( elem, name ); - } else { - elem.setAttribute( name, name ); - } - return name; - } -}; -jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { - var getter = attrHandle[ name ] || jQuery.find.attr; - - attrHandle[ name ] = function( elem, name, isXML ) { - var ret, handle; - if ( !isXML ) { - // Avoid an infinite loop by temporarily removing this function from the getter - handle = attrHandle[ name ]; - attrHandle[ name ] = ret; - ret = getter( elem, name, isXML ) != null ? - name.toLowerCase() : - null; - attrHandle[ name ] = handle; - } - return ret; - }; -}); - - - - -var rfocusable = /^(?:input|select|textarea|button)$/i; - -jQuery.fn.extend({ - prop: function( name, value ) { - return access( this, jQuery.prop, name, value, arguments.length > 1 ); - }, - - removeProp: function( name ) { - return this.each(function() { - delete this[ jQuery.propFix[ name ] || name ]; - }); - } -}); - -jQuery.extend({ - propFix: { - "for": "htmlFor", - "class": "className" - }, - - 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 ) { - return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ? - ret : - ( elem[ name ] = value ); - - } else { - return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ? - ret : - elem[ name ]; - } - }, - - propHooks: { - tabIndex: { - get: function( elem ) { - return elem.hasAttribute( "tabindex" ) || rfocusable.test( elem.nodeName ) || elem.href ? - elem.tabIndex : - -1; - } - } - } -}); - -if ( !support.optSelected ) { - jQuery.propHooks.selected = { - get: function( elem ) { - var parent = elem.parentNode; - if ( parent && parent.parentNode ) { - parent.parentNode.selectedIndex; - } - return null; - } - }; -} - -jQuery.each([ - "tabIndex", - "readOnly", - "maxLength", - "cellSpacing", - "cellPadding", - "rowSpan", - "colSpan", - "useMap", - "frameBorder", - "contentEditable" -], function() { - jQuery.propFix[ this.toLowerCase() ] = this; -}); - - - - -var rclass = /[\t\r\n\f]/g; - -jQuery.fn.extend({ - addClass: function( value ) { - var classes, elem, cur, clazz, j, finalValue, - proceed = typeof value === "string" && value, - i = 0, - len = this.length; - - 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( 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 + " "; - } - } - - // only assign if different to avoid unneeded rendering. - finalValue = jQuery.trim( cur ); - if ( elem.className !== finalValue ) { - elem.className = finalValue; - } - } - } - } - - return this; - }, - - removeClass: function( value ) { - var classes, elem, cur, clazz, j, finalValue, - proceed = arguments.length === 0 || typeof value === "string" && value, - i = 0, - len = this.length; - - if ( jQuery.isFunction( value ) ) { - return this.each(function( j ) { - jQuery( this ).removeClass( value.call( this, j, this.className ) ); - }); - } - if ( proceed ) { - classes = ( value || "" ).match( 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 + " ", " " ); - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = value ? jQuery.trim( cur ) : ""; - if ( elem.className !== finalValue ) { - elem.className = finalValue; - } - } - } - } - - return this; - }, - - toggleClass: function( value, stateVal ) { - var type = typeof value; - - if ( typeof stateVal === "boolean" && type === "string" ) { - return stateVal ? this.addClass( value ) : this.removeClass( value ); - } - - 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 ), - classNames = value.match( rnotwhite ) || []; - - while ( (className = classNames[ i++ ]) ) { - // Check each className given, space separated list - if ( self.hasClass( className ) ) { - self.removeClass( className ); - } else { - self.addClass( className ); - } - } - - // Toggle whole class name - } else if ( type === strundefined || type === "boolean" ) { - if ( this.className ) { - // store className if set - data_priv.set( 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 ? "" : data_priv.get( 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; - } -}); - - - - -var rreturn = /\r/g; - -jQuery.fn.extend({ - val: function( value ) { - var hooks, ret, 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; - - if ( this.nodeType !== 1 ) { - return; - } - - if ( isFunction ) { - val = value.call( this, i, jQuery( this ).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 ) { - var val = jQuery.find.attr( elem, "value" ); - return val != null ? - val : - // Support: IE10-11+ - // option.text throws exceptions (#14686, #14858) - jQuery.trim( jQuery.text( elem ) ); - } - }, - 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 ]; - - // IE6-9 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 - ( 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 optionSet, option, - options = elem.options, - values = jQuery.makeArray( value ), - i = options.length; - - while ( i-- ) { - option = options[ i ]; - if ( (option.selected = jQuery.inArray( option.value, values ) >= 0) ) { - optionSet = true; - } - } - - // Force browsers to behave consistently when non-matching value is set - if ( !optionSet ) { - elem.selectedIndex = -1; - } - return values; - } - } - } -}); - -// Radios and checkboxes getter/setter -jQuery.each([ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = { - set: function( elem, value ) { - if ( jQuery.isArray( value ) ) { - return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 ); - } - } - }; - if ( !support.checkOn ) { - jQuery.valHooks[ this ].get = function( elem ) { - return elem.getAttribute("value") === null ? "on" : elem.value; - }; - } -}); - - - - -// Return jQuery for attributes-only inclusion - - -jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + - "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + - "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) { - - // Handle event binding - jQuery.fn[ name ] = function( data, fn ) { - return arguments.length > 0 ? - this.on( name, null, data, fn ) : - this.trigger( name ); - }; -}); - -jQuery.fn.extend({ - hover: function( fnOver, fnOut ) { - return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); - }, - - 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 ); - } -}); - - -var nonce = jQuery.now(); - -var rquery = (/\?/); - - - -// Support: Android 2.3 -// Workaround failure to string-cast null input -jQuery.parseJSON = function( data ) { - return JSON.parse( data + "" ); -}; - - -// Cross-browser xml parsing -jQuery.parseXML = function( data ) { - var xml, tmp; - if ( !data || typeof data !== "string" ) { - return null; - } - - // Support: IE9 - try { - tmp = new DOMParser(); - xml = tmp.parseFromString( data, "text/xml" ); - } catch ( e ) { - xml = undefined; - } - - if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { - jQuery.error( "Invalid XML: " + data ); - } - return xml; -}; - - -var - rhash = /#.*$/, - rts = /([?&])_=[^&]*/, - rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, - // #7653, #8125, #8152: local protocol detection - rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, - rnoContent = /^(?:GET|HEAD)$/, - rprotocol = /^\/\//, - rurl = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/, - - /* Prefilters - * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) - * 2) These are called: - * - BEFORE asking for a transport - * - AFTER param serialization (s.data is a string if s.processData is true) - * 3) key is the dataType - * 4) the catchall symbol "*" can be used - * 5) execution will start with transport dataType and THEN continue down to "*" if needed - */ - prefilters = {}, - - /* Transports bindings - * 1) key is the dataType - * 2) the catchall symbol "*" can be used - * 3) selection will start with transport dataType and THEN go to "*" if needed - */ - transports = {}, - - // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression - allTypes = "*/".concat( "*" ), - - // Document location - ajaxLocation = window.location.href, - - // Segment location into parts - ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || []; - -// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport -function addToPrefiltersOrTransports( structure ) { - - // dataTypeExpression is optional and defaults to "*" - return function( dataTypeExpression, func ) { - - if ( typeof dataTypeExpression !== "string" ) { - func = dataTypeExpression; - dataTypeExpression = "*"; - } - - var dataType, - i = 0, - dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || []; - - if ( jQuery.isFunction( func ) ) { - // For each dataType in the dataTypeExpression - while ( (dataType = dataTypes[i++]) ) { - // Prepend if requested - if ( dataType[0] === "+" ) { - dataType = dataType.slice( 1 ) || "*"; - (structure[ dataType ] = structure[ dataType ] || []).unshift( func ); - - // Otherwise append - } else { - (structure[ dataType ] = structure[ dataType ] || []).push( func ); - } - } - } - }; -} - -// Base inspection function for prefilters and transports -function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { - - var inspected = {}, - seekingTransport = ( structure === transports ); - - function inspect( dataType ) { - var selected; - inspected[ dataType ] = true; - jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { - var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); - if ( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) { - options.dataTypes.unshift( dataTypeOrTransport ); - inspect( dataTypeOrTransport ); - return false; - } else if ( seekingTransport ) { - return !( selected = dataTypeOrTransport ); - } - }); - return selected; - } - - return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); -} - -// A special extend for ajax options -// that takes "flat" options (not to be deep extended) -// Fixes #9887 -function ajaxExtend( target, src ) { - var key, deep, - flatOptions = jQuery.ajaxSettings.flatOptions || {}; - - for ( key in src ) { - if ( src[ key ] !== undefined ) { - ( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ]; - } - } - if ( deep ) { - jQuery.extend( true, target, deep ); - } - - return target; -} - -/* Handles responses to an ajax request: - * - finds the right dataType (mediates between content-type and expected dataType) - * - returns the corresponding response - */ -function ajaxHandleResponses( s, jqXHR, responses ) { - - var ct, type, finalDataType, firstDataType, - contents = s.contents, - dataTypes = s.dataTypes; - - // Remove auto dataType and get content-type in the process - while ( dataTypes[ 0 ] === "*" ) { - dataTypes.shift(); - if ( ct === undefined ) { - ct = s.mimeType || jqXHR.getResponseHeader("Content-Type"); - } - } - - // Check if we're dealing with a known content-type - if ( ct ) { - for ( type in contents ) { - if ( contents[ type ] && contents[ type ].test( ct ) ) { - dataTypes.unshift( type ); - break; - } - } - } - - // Check to see if we have a response for the expected dataType - if ( dataTypes[ 0 ] in responses ) { - finalDataType = dataTypes[ 0 ]; - } else { - // Try convertible dataTypes - for ( type in responses ) { - if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) { - finalDataType = type; - break; - } - if ( !firstDataType ) { - firstDataType = type; - } - } - // Or just use first one - finalDataType = finalDataType || firstDataType; - } - - // If we found a dataType - // We add the dataType to the list if needed - // and return the corresponding response - if ( finalDataType ) { - if ( finalDataType !== dataTypes[ 0 ] ) { - dataTypes.unshift( finalDataType ); - } - return responses[ finalDataType ]; - } -} - -/* Chain conversions given the request and the original response - * Also sets the responseXXX fields on the jqXHR instance - */ -function ajaxConvert( s, response, jqXHR, isSuccess ) { - var conv2, current, conv, tmp, prev, - converters = {}, - // Work with a copy of dataTypes in case we need to modify it for conversion - dataTypes = s.dataTypes.slice(); - - // Create converters map with lowercased keys - if ( dataTypes[ 1 ] ) { - for ( conv in s.converters ) { - converters[ conv.toLowerCase() ] = s.converters[ conv ]; - } - } - - current = dataTypes.shift(); - - // Convert to each sequential dataType - while ( current ) { - - if ( s.responseFields[ current ] ) { - jqXHR[ s.responseFields[ current ] ] = response; - } - - // Apply the dataFilter if provided - if ( !prev && isSuccess && s.dataFilter ) { - response = s.dataFilter( response, s.dataType ); - } - - prev = current; - current = dataTypes.shift(); - - if ( current ) { - - // There's only work to do if current dataType is non-auto - if ( current === "*" ) { - - current = prev; - - // Convert response if prev dataType is non-auto and differs from current - } else if ( prev !== "*" && prev !== current ) { - - // Seek a direct converter - conv = converters[ prev + " " + current ] || converters[ "* " + current ]; - - // If none found, seek a pair - if ( !conv ) { - for ( conv2 in converters ) { - - // If conv2 outputs current - tmp = conv2.split( " " ); - if ( tmp[ 1 ] === current ) { - - // If prev can be converted to accepted input - conv = converters[ prev + " " + tmp[ 0 ] ] || - converters[ "* " + tmp[ 0 ] ]; - if ( conv ) { - // Condense equivalence converters - if ( conv === true ) { - conv = converters[ conv2 ]; - - // Otherwise, insert the intermediate dataType - } else if ( converters[ conv2 ] !== true ) { - current = tmp[ 0 ]; - dataTypes.unshift( tmp[ 1 ] ); - } - break; - } - } - } - } - - // Apply converter (if not an equivalence) - if ( conv !== true ) { - - // Unless errors are allowed to bubble, catch and return them - if ( conv && s[ "throws" ] ) { - response = conv( response ); - } else { - try { - response = conv( response ); - } catch ( e ) { - return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current }; - } - } - } - } - } - } - - return { state: "success", data: response }; -} - -jQuery.extend({ - - // Counter for holding the number of active queries - active: 0, - - // Last-Modified header cache for next request - lastModified: {}, - etag: {}, - - ajaxSettings: { - url: ajaxLocation, - type: "GET", - isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ), - global: true, - processData: true, - async: true, - contentType: "application/x-www-form-urlencoded; charset=UTF-8", - /* - timeout: 0, - data: null, - dataType: null, - username: null, - password: null, - cache: null, - throws: false, - traditional: false, - headers: {}, - */ - - accepts: { - "*": allTypes, - text: "text/plain", - html: "text/html", - xml: "application/xml, text/xml", - json: "application/json, text/javascript" - }, - - contents: { - xml: /xml/, - html: /html/, - json: /json/ - }, - - responseFields: { - xml: "responseXML", - text: "responseText", - json: "responseJSON" - }, - - // Data converters - // Keys separate source (or catchall "*") and destination types with a single space - converters: { - - // Convert anything to text - "* text": String, - - // Text to html (true = no transformation) - "text html": true, - - // Evaluate text as a json expression - "text json": jQuery.parseJSON, - - // Parse text as xml - "text xml": jQuery.parseXML - }, - - // For options that shouldn't be deep extended: - // you can add your own custom options here if - // and when you create one that shouldn't be - // deep extended (see ajaxExtend) - flatOptions: { - url: true, - context: true - } - }, - - // Creates a full fledged settings object into target - // with both ajaxSettings and settings fields. - // If target is omitted, writes into ajaxSettings. - ajaxSetup: function( target, settings ) { - return settings ? - - // Building a settings object - ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : - - // Extending ajaxSettings - ajaxExtend( jQuery.ajaxSettings, target ); - }, - - ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), - ajaxTransport: addToPrefiltersOrTransports( transports ), - - // Main method - ajax: function( url, options ) { - - // If url is an object, simulate pre-1.5 signature - if ( typeof url === "object" ) { - options = url; - url = undefined; - } - - // Force options to be an object - options = options || {}; - - var transport, - // URL without anti-cache param - cacheURL, - // Response headers - responseHeadersString, - responseHeaders, - // timeout handle - timeoutTimer, - // Cross-domain detection vars - parts, - // To know if global events are to be dispatched - fireGlobals, - // Loop variable - i, - // Create the final options object - s = jQuery.ajaxSetup( {}, options ), - // Callbacks context - callbackContext = s.context || s, - // Context for global events is callbackContext if it is a DOM node or jQuery collection - globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ? - jQuery( callbackContext ) : - jQuery.event, - // Deferreds - deferred = jQuery.Deferred(), - completeDeferred = jQuery.Callbacks("once memory"), - // Status-dependent callbacks - statusCode = s.statusCode || {}, - // Headers (they are sent all at once) - requestHeaders = {}, - requestHeadersNames = {}, - // The jqXHR state - state = 0, - // Default abort message - strAbort = "canceled", - // Fake xhr - jqXHR = { - readyState: 0, - - // Builds headers hashtable if needed - getResponseHeader: function( key ) { - var match; - if ( state === 2 ) { - if ( !responseHeaders ) { - responseHeaders = {}; - while ( (match = rheaders.exec( responseHeadersString )) ) { - responseHeaders[ match[1].toLowerCase() ] = match[ 2 ]; - } - } - match = responseHeaders[ key.toLowerCase() ]; - } - return match == null ? null : match; - }, - - // Raw string - getAllResponseHeaders: function() { - return state === 2 ? responseHeadersString : null; - }, - - // Caches the header - setRequestHeader: function( name, value ) { - var lname = name.toLowerCase(); - if ( !state ) { - name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name; - requestHeaders[ name ] = value; - } - return this; - }, - - // Overrides response content-type header - overrideMimeType: function( type ) { - if ( !state ) { - s.mimeType = type; - } - return this; - }, - - // Status-dependent callbacks - statusCode: function( map ) { - var code; - if ( map ) { - if ( state < 2 ) { - for ( code in map ) { - // Lazy-add the new callback in a way that preserves old ones - statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; - } - } else { - // Execute the appropriate callbacks - jqXHR.always( map[ jqXHR.status ] ); - } - } - return this; - }, - - // Cancel the request - abort: function( statusText ) { - var finalText = statusText || strAbort; - if ( transport ) { - transport.abort( finalText ); - } - done( 0, finalText ); - return this; - } - }; - - // Attach deferreds - deferred.promise( jqXHR ).complete = completeDeferred.add; - jqXHR.success = jqXHR.done; - jqXHR.error = jqXHR.fail; - - // Remove hash character (#7531: and string promotion) - // Add protocol if not provided (prefilters might expect it) - // Handle falsy url in the settings object (#10093: consistency with old signature) - // We also use the url parameter if available - s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" ) - .replace( rprotocol, ajaxLocParts[ 1 ] + "//" ); - - // Alias method option to type as per ticket #12004 - s.type = options.method || options.type || s.method || s.type; - - // Extract dataTypes list - s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ]; - - // A cross-domain request is in order when we have a protocol:host:port mismatch - if ( s.crossDomain == null ) { - parts = rurl.exec( s.url.toLowerCase() ); - s.crossDomain = !!( parts && - ( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] || - ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? "80" : "443" ) ) !== - ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? "80" : "443" ) ) ) - ); - } - - // Convert data if not already a string - if ( s.data && s.processData && typeof s.data !== "string" ) { - s.data = jQuery.param( s.data, s.traditional ); - } - - // Apply prefilters - inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); - - // If request was aborted inside a prefilter, stop there - if ( state === 2 ) { - return jqXHR; - } - - // We can fire global events as of now if asked to - // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) - fireGlobals = jQuery.event && s.global; - - // Watch for a new set of requests - if ( fireGlobals && jQuery.active++ === 0 ) { - jQuery.event.trigger("ajaxStart"); - } - - // Uppercase the type - s.type = s.type.toUpperCase(); - - // Determine if request has content - s.hasContent = !rnoContent.test( s.type ); - - // Save the URL in case we're toying with the If-Modified-Since - // and/or If-None-Match header later on - cacheURL = s.url; - - // More options handling for requests with no content - if ( !s.hasContent ) { - - // If data is available, append data to url - if ( s.data ) { - cacheURL = ( s.url += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data ); - // #9682: remove data so that it's not used in an eventual retry - delete s.data; - } - - // Add anti-cache in url if needed - if ( s.cache === false ) { - s.url = rts.test( cacheURL ) ? - - // If there is already a '_' parameter, set its value - cacheURL.replace( rts, "$1_=" + nonce++ ) : - - // Otherwise add one to the end - cacheURL + ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + nonce++; - } - } - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - if ( jQuery.lastModified[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); - } - if ( jQuery.etag[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); - } - } - - // Set the correct header, if data is being sent - if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { - jqXHR.setRequestHeader( "Content-Type", s.contentType ); - } - - // Set the Accepts header for the server, depending on the dataType - jqXHR.setRequestHeader( - "Accept", - s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ? - s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : - s.accepts[ "*" ] - ); - - // Check for headers option - for ( i in s.headers ) { - jqXHR.setRequestHeader( i, s.headers[ i ] ); - } - - // Allow custom headers/mimetypes and early abort - if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) { - // Abort if not done already and return - return jqXHR.abort(); - } - - // Aborting is no longer a cancellation - strAbort = "abort"; - - // Install callbacks on deferreds - for ( i in { success: 1, error: 1, complete: 1 } ) { - jqXHR[ i ]( s[ i ] ); - } - - // Get transport - transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); - - // If no transport, we auto-abort - if ( !transport ) { - done( -1, "No Transport" ); - } else { - jqXHR.readyState = 1; - - // Send global event - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); - } - // Timeout - if ( s.async && s.timeout > 0 ) { - timeoutTimer = setTimeout(function() { - jqXHR.abort("timeout"); - }, s.timeout ); - } - - try { - state = 1; - transport.send( requestHeaders, done ); - } catch ( e ) { - // Propagate exception as error if not done - if ( state < 2 ) { - done( -1, e ); - // Simply rethrow otherwise - } else { - throw e; - } - } - } - - // Callback for when everything is done - function done( status, nativeStatusText, responses, headers ) { - var isSuccess, success, error, response, modified, - statusText = nativeStatusText; - - // Called once - if ( state === 2 ) { - return; - } - - // State is "done" now - state = 2; - - // Clear timeout if it exists - if ( timeoutTimer ) { - clearTimeout( timeoutTimer ); - } - - // Dereference transport for early garbage collection - // (no matter how long the jqXHR object will be used) - transport = undefined; - - // Cache response headers - responseHeadersString = headers || ""; - - // Set readyState - jqXHR.readyState = status > 0 ? 4 : 0; - - // Determine if successful - isSuccess = status >= 200 && status < 300 || status === 304; - - // Get response data - if ( responses ) { - response = ajaxHandleResponses( s, jqXHR, responses ); - } - - // Convert no matter what (that way responseXXX fields are always set) - response = ajaxConvert( s, response, jqXHR, isSuccess ); - - // If successful, handle type chaining - if ( isSuccess ) { - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - modified = jqXHR.getResponseHeader("Last-Modified"); - if ( modified ) { - jQuery.lastModified[ cacheURL ] = modified; - } - modified = jqXHR.getResponseHeader("etag"); - if ( modified ) { - jQuery.etag[ cacheURL ] = modified; - } - } - - // if no content - if ( status === 204 || s.type === "HEAD" ) { - statusText = "nocontent"; - - // if not modified - } else if ( status === 304 ) { - statusText = "notmodified"; - - // If we have data, let's convert it - } else { - statusText = response.state; - success = response.data; - error = response.error; - isSuccess = !error; - } - } else { - // Extract error from statusText and normalize for non-aborts - error = statusText; - if ( status || !statusText ) { - statusText = "error"; - if ( status < 0 ) { - status = 0; - } - } - } - - // Set data for the fake xhr object - jqXHR.status = status; - jqXHR.statusText = ( nativeStatusText || statusText ) + ""; - - // Success/Error - if ( isSuccess ) { - deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); - } else { - deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); - } - - // Status-dependent callbacks - jqXHR.statusCode( statusCode ); - statusCode = undefined; - - if ( fireGlobals ) { - globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", - [ jqXHR, s, isSuccess ? success : error ] ); - } - - // Complete - completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); - - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); - // Handle the global AJAX counter - if ( !( --jQuery.active ) ) { - jQuery.event.trigger("ajaxStop"); - } - } - } - - return jqXHR; - }, - - getJSON: function( url, data, callback ) { - return jQuery.get( url, data, callback, "json" ); - }, - - getScript: function( url, callback ) { - return jQuery.get( url, undefined, callback, "script" ); - } -}); - -jQuery.each( [ "get", "post" ], function( i, method ) { - jQuery[ method ] = function( url, data, callback, type ) { - // Shift arguments if data argument was omitted - if ( jQuery.isFunction( data ) ) { - type = type || callback; - callback = data; - data = undefined; - } - - return jQuery.ajax({ - url: url, - type: method, - dataType: type, - data: data, - success: callback - }); - }; -}); - - -jQuery._evalUrl = function( url ) { - return jQuery.ajax({ - url: url, - type: "GET", - dataType: "script", - async: false, - global: false, - "throws": true - }); -}; - - -jQuery.fn.extend({ - wrapAll: function( html ) { - var wrap; - - 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 - 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.firstElementChild ) { - elem = elem.firstElementChild; - } - - 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(); - } -}); - - -jQuery.expr.filters.hidden = function( elem ) { - // Support: Opera <= 12.12 - // Opera reports offsetWidths and offsetHeights less than zero on some elements - return elem.offsetWidth <= 0 && elem.offsetHeight <= 0; -}; -jQuery.expr.filters.visible = function( elem ) { - return !jQuery.expr.filters.hidden( elem ); -}; - - - - -var r20 = /%20/g, - rbracket = /\[\]$/, - rCRLF = /\r?\n/g, - rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, - rsubmittable = /^(?:input|select|textarea|keygen)/i; - -function buildParams( prefix, obj, traditional, add ) { - var name; - - if ( jQuery.isArray( obj ) ) { - // Serialize array item. - jQuery.each( obj, function( i, v ) { - if ( traditional || rbracket.test( prefix ) ) { - // Treat each array item as a scalar. - add( prefix, v ); - - } else { - // Item is non-scalar (array or object), encode its numeric index. - buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add ); - } - }); - - } else if ( !traditional && jQuery.type( obj ) === "object" ) { - // Serialize object item. - for ( name in obj ) { - buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); - } - - } else { - // Serialize scalar item. - add( prefix, obj ); - } -} - -// Serialize an array of form elements or a set of -// key/values into a query string -jQuery.param = function( a, traditional ) { - var prefix, - s = [], - add = function( key, value ) { - // If value is a function, invoke it and return its value - value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value ); - s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value ); - }; - - // Set traditional to true for jQuery <= 1.3.2 behavior. - if ( traditional === undefined ) { - traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional; - } - - // If an array was passed in, assume that it is an array of form elements. - if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { - // Serialize the form elements - jQuery.each( a, function() { - add( this.name, this.value ); - }); - - } else { - // If traditional, encode the "old" way (the way 1.3.2 or older - // did it), otherwise encode params recursively. - for ( prefix in a ) { - buildParams( prefix, a[ prefix ], traditional, add ); - } - } - - // Return the resulting serialization - return s.join( "&" ).replace( r20, "+" ); -}; - -jQuery.fn.extend({ - serialize: function() { - return jQuery.param( this.serializeArray() ); - }, - serializeArray: function() { - return this.map(function() { - // Can add propHook for "elements" to filter or add form elements - var elements = jQuery.prop( this, "elements" ); - return elements ? jQuery.makeArray( elements ) : this; - }) - .filter(function() { - var type = this.type; - - // Use .is( ":disabled" ) so that fieldset[disabled] works - return this.name && !jQuery( this ).is( ":disabled" ) && - rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && - ( this.checked || !rcheckableType.test( type ) ); - }) - .map(function( i, elem ) { - var val = jQuery( this ).val(); - - return val == null ? - null : - jQuery.isArray( val ) ? - jQuery.map( val, function( val ) { - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - }) : - { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - }).get(); - } -}); - - -jQuery.ajaxSettings.xhr = function() { - try { - return new XMLHttpRequest(); - } catch( e ) {} -}; - -var xhrId = 0, - xhrCallbacks = {}, - xhrSuccessStatus = { - // file protocol always yields status code 0, assume 200 - 0: 200, - // Support: IE9 - // #1450: sometimes IE returns 1223 when it should be 204 - 1223: 204 - }, - xhrSupported = jQuery.ajaxSettings.xhr(); - -// Support: IE9 -// Open requests must be manually aborted on unload (#5280) -// See https://support.microsoft.com/kb/2856746 for more info -if ( window.attachEvent ) { - window.attachEvent( "onunload", function() { - for ( var key in xhrCallbacks ) { - xhrCallbacks[ key ](); - } - }); -} - -support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); -support.ajax = xhrSupported = !!xhrSupported; - -jQuery.ajaxTransport(function( options ) { - var callback; - - // Cross domain only allowed if supported through XMLHttpRequest - if ( support.cors || xhrSupported && !options.crossDomain ) { - return { - send: function( headers, complete ) { - var i, - xhr = options.xhr(), - id = ++xhrId; - - xhr.open( options.type, options.url, options.async, options.username, options.password ); - - // Apply custom fields if provided - if ( options.xhrFields ) { - for ( i in options.xhrFields ) { - xhr[ i ] = options.xhrFields[ i ]; - } - } - - // Override mime type if needed - if ( options.mimeType && xhr.overrideMimeType ) { - xhr.overrideMimeType( options.mimeType ); - } - - // X-Requested-With header - // For cross-domain requests, seeing as conditions for a preflight are - // akin to a jigsaw puzzle, we simply never set it to be sure. - // (it can always be set on a per-request basis or even using ajaxSetup) - // For same-domain requests, won't change header if already provided. - if ( !options.crossDomain && !headers["X-Requested-With"] ) { - headers["X-Requested-With"] = "XMLHttpRequest"; - } - - // Set headers - for ( i in headers ) { - xhr.setRequestHeader( i, headers[ i ] ); - } - - // Callback - callback = function( type ) { - return function() { - if ( callback ) { - delete xhrCallbacks[ id ]; - callback = xhr.onload = xhr.onerror = null; - - if ( type === "abort" ) { - xhr.abort(); - } else if ( type === "error" ) { - complete( - // file: protocol always yields status 0; see #8605, #14207 - xhr.status, - xhr.statusText - ); - } else { - complete( - xhrSuccessStatus[ xhr.status ] || xhr.status, - xhr.statusText, - // Support: IE9 - // Accessing binary-data responseText throws an exception - // (#11426) - typeof xhr.responseText === "string" ? { - text: xhr.responseText - } : undefined, - xhr.getAllResponseHeaders() - ); - } - } - }; - }; - - // Listen to events - xhr.onload = callback(); - xhr.onerror = callback("error"); - - // Create the abort callback - callback = xhrCallbacks[ id ] = callback("abort"); - - try { - // Do send the request (this may raise an exception) - xhr.send( options.hasContent && options.data || null ); - } catch ( e ) { - // #14683: Only rethrow if this hasn't been notified as an error yet - if ( callback ) { - throw e; - } - } - }, - - abort: function() { - if ( callback ) { - callback(); - } - } - }; - } -}); - - - - -// Install script dataType -jQuery.ajaxSetup({ - accepts: { - script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript" - }, - contents: { - script: /(?:java|ecma)script/ - }, - converters: { - "text script": function( text ) { - jQuery.globalEval( text ); - return text; - } - } -}); - -// Handle cache's special case and crossDomain -jQuery.ajaxPrefilter( "script", function( s ) { - if ( s.cache === undefined ) { - s.cache = false; - } - if ( s.crossDomain ) { - s.type = "GET"; - } -}); - -// Bind script tag hack transport -jQuery.ajaxTransport( "script", function( s ) { - // This transport only deals with cross domain requests - if ( s.crossDomain ) { - var script, callback; - return { - send: function( _, complete ) { - script = jQuery("<script>").prop({ - async: true, - charset: s.scriptCharset, - src: s.url - }).on( - "load error", - callback = function( evt ) { - script.remove(); - callback = null; - if ( evt ) { - complete( evt.type === "error" ? 404 : 200, evt.type ); - } - } - ); - document.head.appendChild( script[ 0 ] ); - }, - abort: function() { - if ( callback ) { - callback(); - } - } - }; - } -}); - - - - -var oldCallbacks = [], - rjsonp = /(=)\?(?=&|$)|\?\?/; - -// Default jsonp settings -jQuery.ajaxSetup({ - jsonp: "callback", - jsonpCallback: function() { - var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) ); - this[ callback ] = true; - return callback; - } -}); - -// Detect, normalize options and install callbacks for jsonp requests -jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { - - var callbackName, overwritten, responseContainer, - jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ? - "url" : - typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data" - ); - - // Handle iff the expected data type is "jsonp" or we have a parameter to set - if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) { - - // Get callback name, remembering preexisting value associated with it - callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ? - s.jsonpCallback() : - s.jsonpCallback; - - // Insert callback into url or form data - if ( jsonProp ) { - s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName ); - } else if ( s.jsonp !== false ) { - s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; - } - - // Use data converter to retrieve json after script execution - s.converters["script json"] = function() { - if ( !responseContainer ) { - jQuery.error( callbackName + " was not called" ); - } - return responseContainer[ 0 ]; - }; - - // force json dataType - s.dataTypes[ 0 ] = "json"; - - // Install callback - overwritten = window[ callbackName ]; - window[ callbackName ] = function() { - responseContainer = arguments; - }; - - // Clean-up function (fires after converters) - jqXHR.always(function() { - // Restore preexisting value - window[ callbackName ] = overwritten; - - // Save back as free - if ( s[ callbackName ] ) { - // make sure that re-using the options doesn't screw things around - s.jsonpCallback = originalSettings.jsonpCallback; - - // save the callback name for future use - oldCallbacks.push( callbackName ); - } - - // Call if it was a function and we have a response - if ( responseContainer && jQuery.isFunction( overwritten ) ) { - overwritten( responseContainer[ 0 ] ); - } - - responseContainer = overwritten = undefined; - }); - - // Delegate to script - return "script"; - } -}); - - - - -// 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 -jQuery.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 && scripts.length ) { - jQuery( scripts ).remove(); - } - - return jQuery.merge( [], parsed.childNodes ); -}; - - -// Keep a copy of the old load method -var _load = jQuery.fn.load; - -/** - * Load a url into a page - */ -jQuery.fn.load = function( url, params, callback ) { - if ( typeof url !== "string" && _load ) { - return _load.apply( this, arguments ); - } - - var selector, type, response, - self = this, - off = url.indexOf(" "); - - if ( off >= 0 ) { - selector = jQuery.trim( url.slice( off ) ); - url = url.slice( 0, off ); - } - - // If it's a function - if ( jQuery.isFunction( params ) ) { - - // We assume that it's the callback - callback = params; - params = undefined; - - // Otherwise, build a param string - } else if ( params && typeof params === "object" ) { - type = "POST"; - } - - // If we have elements to modify, make the request - if ( self.length > 0 ) { - jQuery.ajax({ - url: url, - - // if "type" variable is undefined, then "GET" method will be used - type: type, - dataType: "html", - data: params - }).done(function( responseText ) { - - // Save response for use in complete callback - response = arguments; - - self.html( selector ? - - // If a selector was specified, locate the right elements in a dummy div - // Exclude scripts to avoid IE 'Permission Denied' errors - jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) : - - // Otherwise use the full result - responseText ); - - }).complete( callback && function( jqXHR, status ) { - self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] ); - }); - } - - return this; -}; - - - - -// Attach a bunch of functions for handling common AJAX events -jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ) { - jQuery.fn[ type ] = function( fn ) { - return this.on( type, fn ); - }; -}); - - - - -jQuery.expr.filters.animated = function( elem ) { - return jQuery.grep(jQuery.timers, function( fn ) { - return elem === fn.elem; - }).length; -}; - - - - -var docElem = window.document.documentElement; - -/** - * Gets a window from an element - */ -function getWindow( elem ) { - return jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView; -} - -jQuery.offset = { - setOffset: function( elem, options, i ) { - var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition, - position = jQuery.css( elem, "position" ), - curElem = jQuery( elem ), - props = {}; - - // Set position first, in-case top/left are set even on static elem - if ( position === "static" ) { - elem.style.position = "relative"; - } - - curOffset = curElem.offset(); - curCSSTop = jQuery.css( elem, "top" ); - curCSSLeft = jQuery.css( elem, "left" ); - calculatePosition = ( position === "absolute" || position === "fixed" ) && - ( curCSSTop + curCSSLeft ).indexOf("auto") > -1; - - // Need to be able to calculate position if either - // top or left is auto and position is either absolute or fixed - if ( calculatePosition ) { - curPosition = curElem.position(); - curTop = curPosition.top; - curLeft = curPosition.left; - - } else { - curTop = parseFloat( curCSSTop ) || 0; - curLeft = parseFloat( curCSSLeft ) || 0; - } - - if ( jQuery.isFunction( options ) ) { - options = options.call( elem, i, curOffset ); - } - - if ( options.top != null ) { - props.top = ( options.top - curOffset.top ) + curTop; - } - if ( options.left != null ) { - props.left = ( options.left - curOffset.left ) + curLeft; - } - - if ( "using" in options ) { - options.using.call( elem, props ); - - } else { - curElem.css( props ); - } - } -}; - -jQuery.fn.extend({ - offset: function( options ) { - if ( arguments.length ) { - return options === undefined ? - this : - this.each(function( i ) { - jQuery.offset.setOffset( this, options, i ); - }); - } - - var docElem, win, - elem = this[ 0 ], - box = { top: 0, left: 0 }, - doc = elem && elem.ownerDocument; - - if ( !doc ) { - return; - } - - docElem = doc.documentElement; - - // Make sure it's not a disconnected DOM node - if ( !jQuery.contains( docElem, elem ) ) { - return box; - } - - // Support: BlackBerry 5, iOS 3 (original iPhone) - // If we don't have gBCR, just use 0,0 rather than error - if ( typeof elem.getBoundingClientRect !== strundefined ) { - box = elem.getBoundingClientRect(); - } - win = getWindow( doc ); - return { - top: box.top + win.pageYOffset - docElem.clientTop, - left: box.left + win.pageXOffset - docElem.clientLeft - }; - }, - - position: function() { - if ( !this[ 0 ] ) { - return; - } - - var offsetParent, offset, - elem = this[ 0 ], - parentOffset = { top: 0, left: 0 }; - - // Fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is its only offset parent - if ( jQuery.css( elem, "position" ) === "fixed" ) { - // Assume getBoundingClientRect is there when computed position is fixed - offset = elem.getBoundingClientRect(); - - } else { - // Get *real* offsetParent - offsetParent = this.offsetParent(); - - // Get correct offsets - offset = this.offset(); - if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) { - parentOffset = offsetParent.offset(); - } - - // Add offsetParent borders - parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ); - parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true ); - } - - // Subtract parent offsets and element margins - return { - top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ), - left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true ) - }; - }, - - offsetParent: function() { - return this.map(function() { - var offsetParent = this.offsetParent || docElem; - - while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position" ) === "static" ) ) { - offsetParent = offsetParent.offsetParent; - } - - return offsetParent || docElem; - }); - } -}); - -// Create scrollLeft and scrollTop methods -jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) { - var top = "pageYOffset" === prop; - - jQuery.fn[ method ] = function( val ) { - return access( this, function( elem, method, val ) { - var win = getWindow( elem ); - - if ( val === undefined ) { - return win ? win[ prop ] : elem[ method ]; - } - - if ( win ) { - win.scrollTo( - !top ? val : window.pageXOffset, - top ? val : window.pageYOffset - ); - - } else { - elem[ method ] = val; - } - }, method, val, arguments.length, null ); - }; -}); - -// Support: Safari<7+, Chrome<37+ -// Add the top/left cssHooks using jQuery.fn.position -// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 -// Blink bug: https://code.google.com/p/chromium/issues/detail?id=229280 -// getComputedStyle returns percent when specified for top/left/bottom/right; -// rather than make the css module depend on the offset module, just check for it here -jQuery.each( [ "top", "left" ], function( i, prop ) { - jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition, - function( elem, computed ) { - if ( computed ) { - computed = curCSS( elem, prop ); - // If curCSS returns percentage, fallback to offset - return rnumnonpx.test( computed ) ? - jQuery( elem ).position()[ prop ] + "px" : - computed; - } - } - ); -}); - - -// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods -jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { - jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) { - // Margin is only for outerHeight, outerWidth - jQuery.fn[ funcName ] = function( margin, value ) { - var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ), - extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ); - - return access( this, function( elem, type, value ) { - var doc; - - if ( jQuery.isWindow( elem ) ) { - // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there - // isn't a whole lot we can do. See pull request at this URL for discussion: - // https://github.com/jquery/jquery/pull/764 - return elem.document.documentElement[ "client" + name ]; - } - - // Get document width or height - if ( elem.nodeType === 9 ) { - doc = elem.documentElement; - - // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], - // whichever is greatest - return Math.max( - elem.body[ "scroll" + name ], doc[ "scroll" + name ], - elem.body[ "offset" + name ], doc[ "offset" + name ], - doc[ "client" + name ] - ); - } - - return value === undefined ? - // Get width or height on the element, requesting but not forcing parseFloat - jQuery.css( elem, type, extra ) : - - // Set width or height on the element - jQuery.style( elem, type, value, extra ); - }, type, chainable ? margin : undefined, chainable, null ); - }; - }); -}); - - -// The number of elements contained in the matched element set -jQuery.fn.size = function() { - return this.length; -}; - -jQuery.fn.andSelf = jQuery.fn.addBack; - - - - -// Register as a named AMD module, since jQuery can be concatenated with other -// files that may use define, but not via a proper concatenation script that -// understands anonymous AMD modules. A named AMD is safest and most robust -// way to register. Lowercase jquery is used because AMD module names are -// derived from file names, and jQuery is normally delivered in a lowercase -// file name. Do this after creating the global so that if an AMD module wants -// to call noConflict to hide this version of jQuery, it will work. - -// Note that for maximum portability, libraries that are not jQuery should -// declare themselves as anonymous modules, and avoid setting a global if an -// AMD loader is present. jQuery is a special case. For more information, see -// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon - -if ( typeof define === "function" && define.amd ) { - define( "jquery", [], function() { - return jQuery; - }); -} - - - - -var - // Map over jQuery in case of overwrite - _jQuery = window.jQuery, - - // Map over the $ in case of overwrite - _$ = window.$; - -jQuery.noConflict = function( deep ) { - if ( window.$ === jQuery ) { - window.$ = _$; - } - - if ( deep && window.jQuery === jQuery ) { - window.jQuery = _jQuery; - } - - return jQuery; -}; - -// Expose jQuery and $ identifiers, even in AMD -// (#7102#comment:10, https://github.com/jquery/jquery/pull/557) -// and CommonJS for browser emulators (#13566) -if ( typeof noGlobal === strundefined ) { - window.jQuery = window.$ = jQuery; -} - - - - -return jQuery; - -})); diff --git a/src/main/webapp/bower_components/jquery/dist/jquery.min.js b/src/main/webapp/bower_components/jquery/dist/jquery.min.js deleted file mode 100644 index 18bdbed7..00000000 --- a/src/main/webapp/bower_components/jquery/dist/jquery.min.js +++ /dev/null @@ -1,5 +0,0 @@ -/*! jQuery v2.1.3 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ -!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.3",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)+1>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=hb(),z=hb(),A=hb(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},eb=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fb){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function gb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+rb(o[l]);w=ab.test(a)&&pb(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function hb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ib(a){return a[u]=!0,a}function jb(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function kb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function lb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function nb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function ob(a){return ib(function(b){return b=+b,ib(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pb(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=gb.support={},f=gb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=gb.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",eb,!1):e.attachEvent&&e.attachEvent("onunload",eb)),p=!f(g),c.attributes=jb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=jb(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=jb(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(jb(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\f]' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),jb(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&jb(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return lb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?lb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},gb.matches=function(a,b){return gb(a,null,null,b)},gb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return gb(b,n,null,[a]).length>0},gb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},gb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},gb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},gb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=gb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=gb.selectors={cacheLength:50,createPseudo:ib,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||gb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&gb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=gb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||gb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ib(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ib(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ib(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ib(function(a){return function(b){return gb(a,b).length>0}}),contains:ib(function(a){return a=a.replace(cb,db),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ib(function(a){return W.test(a||"")||gb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:ob(function(){return[0]}),last:ob(function(a,b){return[b-1]}),eq:ob(function(a,b,c){return[0>c?c+b:c]}),even:ob(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:ob(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:ob(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:ob(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=mb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=nb(b);function qb(){}qb.prototype=d.filters=d.pseudos,d.setFilters=new qb,g=gb.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?gb.error(a):z(a,i).slice(0)};function rb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function sb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function tb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ub(a,b,c){for(var d=0,e=b.length;e>d;d++)gb(a,b[d],c);return c}function vb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wb(a,b,c,d,e,f){return d&&!d[u]&&(d=wb(d)),e&&!e[u]&&(e=wb(e,f)),ib(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ub(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:vb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=vb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=vb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sb(function(a){return a===b},h,!0),l=sb(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sb(tb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wb(i>1&&tb(m),i>1&&rb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xb(a.slice(i,e)),f>e&&xb(a=a.slice(e)),f>e&&rb(a))}m.push(c)}return tb(m)}function yb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=vb(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&gb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ib(f):f}return h=gb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,yb(e,d)),f.selector=a}return f},i=gb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&pb(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&rb(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&pb(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=jb(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),jb(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||kb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&jb(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||kb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),jb(function(a){return null==a.getAttribute("disabled")})||kb(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),gb}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+K.uid++}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c) -},removeData:function(a,b){M.remove(a,b)},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=L.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var Q=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,R=["Top","Right","Bottom","Left"],S=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)},T=/^(?:checkbox|radio)$/i;!function(){var a=l.createDocumentFragment(),b=a.appendChild(l.createElement("div")),c=l.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},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(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button;return null==a.pageX&&null!=b.clientX&&(c=a.target.ownerDocument||l,d=c.documentElement,e=c.body,a.pageX=b.clientX+(d&&d.scrollLeft||e&&e.scrollLeft||0)-(d&&d.clientLeft||e&&e.clientLeft||0),a.pageY=b.clientY+(d&&d.scrollTop||e&&e.scrollTop||0)-(d&&d.clientTop||e&&e.clientTop||0)),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},fix:function(a){if(a[n.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=W.test(e)?this.mouseHooks:V.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new n.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=l),3===a.target.nodeType&&(a.target=a.target.parentNode),g.filter?g.filter(a,f):a},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==_()&&this.focus?(this.focus(),!1):void 0},delegateType:"focusin"},blur:{trigger:function(){return this===_()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&n.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=n.extend(new n.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?n.event.trigger(e,null,b):n.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?Z:$):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={isDefaultPrevented:$,isPropagationStopped:$,isImmediatePropagationStopped:$,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=Z,a&&a.preventDefault&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=Z,a&&a.stopPropagation&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=Z,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.focusinBubbles||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a),!0)};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=L.access(d,b);e||d.addEventListener(a,c,!0),L.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=L.access(d,b)-1;e?L.access(d,b,e):(d.removeEventListener(a,c,!0),L.remove(d,b))}}}),n.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(g in a)this.on(g,b,c,a[g],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=$;else if(!d)return this;return 1===e&&(f=d,d=function(a){return n().off(a),f.apply(this,arguments)},d.guid=f.guid||(f.guid=n.guid++)),this.each(function(){n.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=$),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var ab=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bb=/<([\w:]+)/,cb=/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ib={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1></$2>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(ob(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(ob(c,"script"),kb),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(hb,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=qb[0].contentDocument,b.write(),b.close(),c=sb(a,b),qb.detach()),rb[a]=c),c}var ub=/^margin/,vb=new RegExp("^("+Q+")(?!px)[a-z%]+$","i"),wb=function(b){return b.ownerDocument.defaultView.opener?b.ownerDocument.defaultView.getComputedStyle(b,null):a.getComputedStyle(b,null)};function xb(a,b,c){var d,e,f,g,h=a.style;return c=c||wb(a),c&&(g=c.getPropertyValue(b)||c[b]),c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),vb.test(g)&&ub.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function yb(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d=l.documentElement,e=l.createElement("div"),f=l.createElement("div");if(f.style){f.style.backgroundClip="content-box",f.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===f.style.backgroundClip,e.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",e.appendChild(f);function g(){f.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",f.innerHTML="",d.appendChild(e);var g=a.getComputedStyle(f,null);b="1%"!==g.top,c="4px"===g.width,d.removeChild(e)}a.getComputedStyle&&n.extend(k,{pixelPosition:function(){return g(),b},boxSizingReliable:function(){return null==c&&g(),c},reliableMarginRight:function(){var b,c=f.appendChild(l.createElement("div"));return c.style.cssText=f.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",c.style.marginRight=c.style.width="0",f.style.width="1px",d.appendChild(e),b=!parseFloat(a.getComputedStyle(c,null).marginRight),d.removeChild(e),f.removeChild(c),b}})}}(),n.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var zb=/^(none|table(?!-c[ea]).+)/,Ab=new RegExp("^("+Q+")(.*)$","i"),Bb=new RegExp("^([+-])=("+Q+")","i"),Cb={position:"absolute",visibility:"hidden",display:"block"},Db={letterSpacing:"0",fontWeight:"400"},Eb=["Webkit","O","Moz","ms"];function Fb(a,b){if(b in a)return b;var c=b[0].toUpperCase()+b.slice(1),d=b,e=Eb.length;while(e--)if(b=Eb[e]+c,b in a)return b;return d}function Gb(a,b,c){var d=Ab.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Hb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+R[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+R[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+R[f]+"Width",!0,e))):(g+=n.css(a,"padding"+R[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+R[f]+"Width",!0,e)));return g}function Ib(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=wb(a),g="border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=xb(a,b,f),(0>e||null==e)&&(e=a.style[b]),vb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Hb(a,b,c||(g?"border":"content"),d,f)+"px"}function Jb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=L.get(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&S(d)&&(f[g]=L.access(d,"olddisplay",tb(d.nodeName)))):(e=S(d),"none"===c&&e||L.set(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=xb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;return b=n.cssProps[h]||(n.cssProps[h]=Fb(i,h)),g=n.cssHooks[b]||n.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=Bb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(n.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||n.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Fb(a.style,h)),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=xb(a,b,d)),"normal"===e&&b in Db&&(e=Db[b]),""===c||c?(f=parseFloat(e),c===!0||n.isNumeric(f)?f||0:e):e}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?zb.test(n.css(a,"display"))&&0===a.offsetWidth?n.swap(a,Cb,function(){return Ib(a,b,d)}):Ib(a,b,d):void 0},set:function(a,c,d){var e=d&&wb(a);return Gb(a,c,d?Hb(a,b,d,"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),n.cssHooks.marginRight=yb(k.reliableMarginRight,function(a,b){return b?n.swap(a,{display:"inline-block"},xb,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+R[d]+b]=f[d]||f[d-2]||f[0];return e}},ub.test(a)||(n.cssHooks[a+b].set=Gb)}),n.fn.extend({css:function(a,b){return J(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=wb(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return Jb(this,!0)},hide:function(){return Jb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){S(this)?n(this).show():n(this).hide()})}});function Kb(a,b,c,d,e){return new Kb.prototype.init(a,b,c,d,e)}n.Tween=Kb,Kb.prototype={constructor:Kb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=Kb.propHooks[this.prop];return a&&a.get?a.get(this):Kb.propHooks._default.get(this)},run:function(a){var b,c=Kb.propHooks[this.prop];return this.pos=b=this.options.duration?n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Kb.propHooks._default.set(this),this}},Kb.prototype.init.prototype=Kb.prototype,Kb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Kb.propHooks.scrollTop=Kb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},n.fx=Kb.prototype.init,n.fx.step={};var Lb,Mb,Nb=/^(?:toggle|show|hide)$/,Ob=new RegExp("^(?:([+-])=|)("+Q+")([a-z%]*)$","i"),Pb=/queueHooks$/,Qb=[Vb],Rb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=Ob.exec(b),f=e&&e[3]||(n.cssNumber[a]?"":"px"),g=(n.cssNumber[a]||"px"!==f&&+d)&&Ob.exec(n.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,n.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function Sb(){return setTimeout(function(){Lb=void 0}),Lb=n.now()}function Tb(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=R[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function Ub(a,b,c){for(var d,e=(Rb[b]||[]).concat(Rb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function Vb(a,b,c){var d,e,f,g,h,i,j,k,l=this,m={},o=a.style,p=a.nodeType&&S(a),q=L.get(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,l.always(function(){l.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=n.css(a,"display"),k="none"===j?L.get(a,"olddisplay")||tb(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(o.display="inline-block")),c.overflow&&(o.overflow="hidden",l.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],Nb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}m[d]=q&&q[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(m))"inline"===("none"===j?tb(a.nodeName):j)&&(o.display=j);else{q?"hidden"in q&&(p=q.hidden):q=L.access(a,"fxshow",{}),f&&(q.hidden=!p),p?n(a).show():l.done(function(){n(a).hide()}),l.done(function(){var b;L.remove(a,"fxshow");for(b in m)n.style(a,b,m[b])});for(d in m)g=Ub(p?q[d]:0,d,l),d in q||(q[d]=g.start,p&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function Wb(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function Xb(a,b,c){var d,e,f=0,g=Qb.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=Lb||Sb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:Lb||Sb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(Wb(k,j.opts.specialEasing);g>f;f++)if(d=Qb[f].call(j,a,k,j.opts))return d;return n.map(k,Ub,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(Xb,{tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],Rb[c]=Rb[c]||[],Rb[c].unshift(b)},prefilter:function(a,b){b?Qb.unshift(a):Qb.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(S).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=Xb(this,n.extend({},a),f);(e||L.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=L.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&Pb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=L.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(Tb(b,!0),a,d,e)}}),n.each({slideDown:Tb("show"),slideUp:Tb("hide"),slideToggle:Tb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=0,c=n.timers;for(Lb=n.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||n.fx.stop(),Lb=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){Mb||(Mb=setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){clearInterval(Mb),Mb=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(a,b){return a=n.fx?n.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a=l.createElement("input"),b=l.createElement("select"),c=b.appendChild(l.createElement("option"));a.type="checkbox",k.checkOn=""!==a.value,k.optSelected=c.selected,b.disabled=!0,k.optDisabled=!c.disabled,a=l.createElement("input"),a.value="t",a.type="radio",k.radioValue="t"===a.value}();var Yb,Zb,$b=n.expr.attrHandle;n.fn.extend({attr:function(a,b){return J(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===U?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?Zb:Yb)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void n.removeAttr(a,b)) -},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),Zb={set:function(a,b,c){return b===!1?n.removeAttr(a,c):a.setAttribute(c,c),c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=$b[b]||n.find.attr;$b[b]=function(a,b,d){var e,f;return d||(f=$b[b],$b[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,$b[b]=f),e}});var _b=/^(?:input|select|textarea|button)$/i;n.fn.extend({prop:function(a,b){return J(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[n.propFix[a]||a]})}}),n.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!n.isXMLDoc(a),f&&(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){return a.hasAttribute("tabindex")||_b.test(a.nodeName)||a.href?a.tabIndex:-1}}}}),k.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this});var ac=/[\t\r\n\f]/g;n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h="string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=n.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0===arguments.length||"string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?n.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(n.isFunction(a)?function(c){n(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=n(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===U||"boolean"===c)&&(this.className&&L.set(this,"__className__",this.className),this.className=this.className||a===!1?"":L.get(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ac," ").indexOf(b)>=0)return!0;return!1}});var bc=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(bc,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=n.inArray(d.value,f)>=0)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>=0:void 0}},k.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var cc=n.now(),dc=/\?/;n.parseJSON=function(a){return JSON.parse(a+"")},n.parseXML=function(a){var b,c;if(!a||"string"!=typeof a)return null;try{c=new DOMParser,b=c.parseFromString(a,"text/xml")}catch(d){b=void 0}return(!b||b.getElementsByTagName("parsererror").length)&&n.error("Invalid XML: "+a),b};var ec=/#.*$/,fc=/([?&])_=[^&]*/,gc=/^(.*?):[ \t]*([^\r\n]*)$/gm,hc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,ic=/^(?:GET|HEAD)$/,jc=/^\/\//,kc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,lc={},mc={},nc="*/".concat("*"),oc=a.location.href,pc=kc.exec(oc.toLowerCase())||[];function qc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(n.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function rc(a,b,c,d){var e={},f=a===mc;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function sc(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&n.extend(!0,a,d),a}function tc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function uc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:oc,type:"GET",isLocal:hc.test(pc[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":nc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?sc(sc(a,n.ajaxSettings),b):sc(n.ajaxSettings,a)},ajaxPrefilter:qc(lc),ajaxTransport:qc(mc),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=n.ajaxSetup({},b),l=k.context||k,m=k.context&&(l.nodeType||l.jquery)?n(l):n.event,o=n.Deferred(),p=n.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!f){f={};while(b=gc.exec(e))f[b[1].toLowerCase()]=b[2]}b=f[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?e:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return c&&c.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||oc)+"").replace(ec,"").replace(jc,pc[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=n.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(h=kc.exec(k.url.toLowerCase()),k.crossDomain=!(!h||h[1]===pc[1]&&h[2]===pc[2]&&(h[3]||("http:"===h[1]?"80":"443"))===(pc[3]||("http:"===pc[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=n.param(k.data,k.traditional)),rc(lc,k,b,v),2===t)return v;i=n.event&&k.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!ic.test(k.type),d=k.url,k.hasContent||(k.data&&(d=k.url+=(dc.test(d)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=fc.test(d)?d.replace(fc,"$1_="+cc++):d+(dc.test(d)?"&":"?")+"_="+cc++)),k.ifModified&&(n.lastModified[d]&&v.setRequestHeader("If-Modified-Since",n.lastModified[d]),n.etag[d]&&v.setRequestHeader("If-None-Match",n.etag[d])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+nc+"; q=0.01":""):k.accepts["*"]);for(j in k.headers)v.setRequestHeader(j,k.headers[j]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(j in{success:1,error:1,complete:1})v[j](k[j]);if(c=rc(mc,k,b,v)){v.readyState=1,i&&m.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,c.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,f,h){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),c=void 0,e=h||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,f&&(u=tc(k,v,f)),u=uc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(n.lastModified[d]=w),w=v.getResponseHeader("etag"),w&&(n.etag[d]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,i&&m.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),i&&(m.trigger("ajaxComplete",[v,k]),--n.active||n.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){var b;return n.isFunction(a)?this.each(function(b){n(this).wrapAll(a.call(this,b))}):(this[0]&&(b=n(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this)},wrapInner:function(a){return this.each(n.isFunction(a)?function(b){n(this).wrapInner(a.call(this,b))}:function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}}),n.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var vc=/%20/g,wc=/\[\]$/,xc=/\r?\n/g,yc=/^(?:submit|button|image|reset|file)$/i,zc=/^(?:input|select|textarea|keygen)/i;function Ac(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||wc.test(a)?d(a,e):Ac(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)Ac(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)Ac(c,a[c],b,e);return d.join("&").replace(vc,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&zc.test(this.nodeName)&&!yc.test(a)&&(this.checked||!T.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(xc,"\r\n")}}):{name:b.name,value:c.replace(xc,"\r\n")}}).get()}}),n.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(a){}};var Bc=0,Cc={},Dc={0:200,1223:204},Ec=n.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in Cc)Cc[a]()}),k.cors=!!Ec&&"withCredentials"in Ec,k.ajax=Ec=!!Ec,n.ajaxTransport(function(a){var b;return k.cors||Ec&&!a.crossDomain?{send:function(c,d){var e,f=a.xhr(),g=++Bc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)f.setRequestHeader(e,c[e]);b=function(a){return function(){b&&(delete Cc[g],b=f.onload=f.onerror=null,"abort"===a?f.abort():"error"===a?d(f.status,f.statusText):d(Dc[f.status]||f.status,f.statusText,"string"==typeof f.responseText?{text:f.responseText}:void 0,f.getAllResponseHeaders()))}},f.onload=b(),f.onerror=b("error"),b=Cc[g]=b("abort");try{f.send(a.hasContent&&a.data||null)}catch(h){if(b)throw h}},abort:function(){b&&b()}}:void 0}),n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(d,e){b=n("<script>").prop({async:!0,charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&e("error"===a.type?404:200,a.type)}),l.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Fc=[],Gc=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Fc.pop()||n.expando+"_"+cc++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Gc.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Gc.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Gc,"$1"+e):b.jsonp!==!1&&(b.url+=(dc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Fc.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||l;var d=v.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=n.buildFragment([a],b,e),e&&e.length&&n(e).remove(),n.merge([],d.childNodes))};var Hc=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&Hc)return Hc.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=n.trim(a.slice(h)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e,dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,f||[a.responseText,b,a])}),this},n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};var Ic=a.document.documentElement;function Jc(a){return n.isWindow(a)?a:9===a.nodeType&&a.defaultView}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d=this[0],e={top:0,left:0},f=d&&d.ownerDocument;if(f)return b=f.documentElement,n.contains(b,d)?(typeof d.getBoundingClientRect!==U&&(e=d.getBoundingClientRect()),c=Jc(f),{top:e.top+c.pageYOffset-b.clientTop,left:e.left+c.pageXOffset-b.clientLeft}):e},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===n.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(d=a.offset()),d.top+=n.css(a[0],"borderTopWidth",!0),d.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-d.top-n.css(c,"marginTop",!0),left:b.left-d.left-n.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||Ic;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Ic})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(b,c){var d="pageYOffset"===c;n.fn[b]=function(e){return J(this,function(b,e,f){var g=Jc(b);return void 0===f?g?g[c]:b[e]:void(g?g.scrollTo(d?a.pageXOffset:f,d?f:a.pageYOffset):b[e]=f)},b,e,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=yb(k.pixelPosition,function(a,c){return c?(c=xb(a,b),vb.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return J(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var Kc=a.jQuery,Lc=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=Lc),b&&a.jQuery===n&&(a.jQuery=Kc),n},typeof b===U&&(a.jQuery=a.$=n),n}); -//# sourceMappingURL=jquery.min.map \ No newline at end of file diff --git a/src/main/webapp/bower_components/jquery/dist/jquery.min.map b/src/main/webapp/bower_components/jquery/dist/jquery.min.map deleted file mode 100644 index f8c5cdbe..00000000 --- a/src/main/webapp/bower_components/jquery/dist/jquery.min.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"jquery.min.js","sources":["jquery.js"],"names":["global","factory","module","exports","document","w","Error","window","this","noGlobal","arr","slice","concat","push","indexOf","class2type","toString","hasOwn","hasOwnProperty","support","version","jQuery","selector","context","fn","init","rtrim","rmsPrefix","rdashAlpha","fcamelCase","all","letter","toUpperCase","prototype","jquery","constructor","length","toArray","call","get","num","pushStack","elems","ret","merge","prevObject","each","callback","args","map","elem","i","apply","arguments","first","eq","last","len","j","end","sort","splice","extend","options","name","src","copy","copyIsArray","clone","target","deep","isFunction","isPlainObject","isArray","undefined","expando","Math","random","replace","isReady","error","msg","noop","obj","type","Array","isWindow","isNumeric","parseFloat","nodeType","isEmptyObject","globalEval","code","script","indirect","eval","trim","createElement","text","head","appendChild","parentNode","removeChild","camelCase","string","nodeName","toLowerCase","value","isArraylike","makeArray","results","Object","inArray","second","grep","invert","callbackInverse","matches","callbackExpect","arg","guid","proxy","tmp","now","Date","split","Sizzle","Expr","getText","isXML","tokenize","compile","select","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","contains","preferredDoc","dirruns","done","classCache","createCache","tokenCache","compilerCache","sortOrder","a","b","MAX_NEGATIVE","pop","push_native","list","booleans","whitespace","characterEncoding","identifier","attributes","pseudos","rwhitespace","RegExp","rcomma","rcombinators","rattributeQuotes","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rnative","rquickExpr","rsibling","rescape","runescape","funescape","_","escaped","escapedWhitespace","high","String","fromCharCode","unloadHandler","childNodes","e","els","seed","match","m","groups","old","nid","newContext","newSelector","ownerDocument","exec","getElementById","id","getElementsByTagName","getElementsByClassName","qsa","test","getAttribute","setAttribute","toSelector","testContext","join","querySelectorAll","qsaError","removeAttribute","keys","cache","key","cacheLength","shift","markFunction","assert","div","addHandle","attrs","handler","attrHandle","siblingCheck","cur","diff","sourceIndex","nextSibling","createInputPseudo","createButtonPseudo","createPositionalPseudo","argument","matchIndexes","documentElement","node","hasCompare","parent","doc","defaultView","top","addEventListener","attachEvent","className","createComment","getById","getElementsByName","find","filter","attrId","getAttributeNode","tag","innerHTML","input","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","unshift","expr","elements","attr","val","specified","uniqueSort","duplicates","detectDuplicates","sortStable","textContent","firstChild","nodeValue","selectors","createPseudo","relative",">","dir"," ","+","~","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","check","result","what","simple","forward","ofType","xml","outerCache","nodeIndex","start","useCache","lastChild","pseudo","setFilters","idx","matched","not","matcher","unmatched","has","innerText","lang","elemLang","hash","location","root","focus","activeElement","hasFocus","href","tabIndex","enabled","disabled","checked","selected","selectedIndex","empty","header","button","even","odd","lt","gt","radio","checkbox","file","password","image","submit","reset","filters","parseOnly","tokens","soFar","preFilters","cached","addCombinator","combinator","base","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","multipleContexts","contexts","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","matcherFromGroupMatchers","elementMatchers","setMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","token","compiled","div1","defaultValue","unique","isXMLDoc","rneedsContext","rsingleTag","risSimple","winnow","qualifier","self","is","rootjQuery","parseHTML","ready","rparentsprev","guaranteedUnique","children","contents","next","prev","until","truncate","sibling","n","targets","l","closest","pos","index","prevAll","add","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","siblings","contentDocument","reverse","rnotwhite","optionsCache","createOptions","object","flag","Callbacks","memory","fired","firing","firingStart","firingLength","firingIndex","stack","once","fire","data","stopOnFalse","disable","remove","lock","locked","fireWith","Deferred","func","tuples","state","promise","always","deferred","fail","then","fns","newDefer","tuple","returned","resolve","reject","progress","notify","pipe","stateString","when","subordinate","resolveValues","remaining","updateFunc","values","progressValues","notifyWith","resolveWith","progressContexts","resolveContexts","readyList","readyWait","holdReady","hold","wait","triggerHandler","off","completed","removeEventListener","readyState","setTimeout","access","chainable","emptyGet","raw","bulk","acceptData","owner","Data","defineProperty","uid","accepts","descriptor","unlock","defineProperties","set","prop","stored","camel","hasData","discard","data_priv","data_user","rbrace","rmultiDash","dataAttr","parseJSON","removeData","_data","_removeData","camelKey","queue","dequeue","startLength","hooks","_queueHooks","stop","setter","clearQueue","count","defer","pnum","source","cssExpand","isHidden","el","css","rcheckableType","fragment","createDocumentFragment","checkClone","cloneNode","noCloneChecked","strundefined","focusinBubbles","rkeyEvent","rmouseEvent","rfocusMorph","rtypenamespace","returnTrue","returnFalse","safeActiveElement","err","event","types","handleObjIn","eventHandle","events","t","handleObj","special","handlers","namespaces","origType","elemData","handle","triggered","dispatch","delegateType","bindType","namespace","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","trigger","onlyHandlers","bubbleType","ontype","eventPath","Event","isTrigger","namespace_re","noBubble","parentWindow","isPropagationStopped","preventDefault","isDefaultPrevented","_default","fix","handlerQueue","delegateTarget","preDispatch","currentTarget","isImmediatePropagationStopped","stopPropagation","postDispatch","sel","props","fixHooks","keyHooks","original","which","charCode","keyCode","mouseHooks","eventDoc","body","pageX","clientX","scrollLeft","clientLeft","pageY","clientY","scrollTop","clientTop","originalEvent","fixHook","load","blur","click","beforeunload","returnValue","simulate","bubble","isSimulated","defaultPrevented","timeStamp","stopImmediatePropagation","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","relatedTarget","attaches","on","one","origFn","rxhtmlTag","rtagName","rhtml","rnoInnerhtml","rchecked","rscriptType","rscriptTypeMasked","rcleanScript","wrapMap","option","thead","col","tr","td","optgroup","tbody","tfoot","colgroup","caption","th","manipulationTarget","content","disableScript","restoreScript","setGlobalEval","refElements","cloneCopyEvent","dest","pdataOld","pdataCur","udataOld","udataCur","getAll","fixInput","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","buildFragment","scripts","selection","wrap","nodes","createTextNode","cleanData","append","domManip","prepend","insertBefore","before","after","keepData","html","replaceWith","replaceChild","detach","hasScripts","iNoClone","_evalUrl","appendTo","prependTo","insertAfter","replaceAll","insert","iframe","elemdisplay","actualDisplay","style","display","getDefaultComputedStyle","defaultDisplay","write","close","rmargin","rnumnonpx","getStyles","opener","getComputedStyle","curCSS","computed","width","minWidth","maxWidth","getPropertyValue","addGetHookIf","conditionFn","hookFn","pixelPositionVal","boxSizingReliableVal","container","backgroundClip","clearCloneStyle","cssText","computePixelPositionAndBoxSizingReliable","divStyle","pixelPosition","boxSizingReliable","reliableMarginRight","marginDiv","marginRight","swap","rdisplayswap","rnumsplit","rrelNum","cssShow","position","visibility","cssNormalTransform","letterSpacing","fontWeight","cssPrefixes","vendorPropName","capName","origName","setPositiveNumber","subtract","max","augmentWidthOrHeight","extra","isBorderBox","styles","getWidthOrHeight","valueIsBorderBox","offsetWidth","offsetHeight","showHide","show","hidden","cssHooks","opacity","cssNumber","columnCount","fillOpacity","flexGrow","flexShrink","lineHeight","order","orphans","widows","zIndex","zoom","cssProps","float","margin","padding","border","prefix","suffix","expand","expanded","parts","hide","toggle","Tween","easing","unit","propHooks","run","percent","eased","duration","step","tween","fx","linear","p","swing","cos","PI","fxNow","timerId","rfxtypes","rfxnum","rrun","animationPrefilters","defaultPrefilter","tweeners","*","createTween","scale","maxIterations","createFxNow","genFx","includeWidth","height","animation","collection","opts","oldfire","checkDisplay","anim","dataShow","unqueued","overflow","overflowX","overflowY","propFilter","specialEasing","Animation","properties","stopped","tick","currentTime","startTime","tweens","originalProperties","originalOptions","gotoEnd","rejectWith","timer","complete","tweener","prefilter","speed","opt","speeds","fadeTo","to","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","interval","setInterval","clearInterval","slow","fast","delay","time","timeout","clearTimeout","checkOn","optSelected","optDisabled","radioValue","nodeHook","boolHook","removeAttr","nType","attrHooks","propName","attrNames","propFix","getter","rfocusable","removeProp","for","class","notxml","hasAttribute","rclass","addClass","classes","clazz","finalValue","proceed","removeClass","toggleClass","stateVal","classNames","hasClass","rreturn","valHooks","optionSet","hover","fnOver","fnOut","bind","unbind","delegate","undelegate","nonce","rquery","JSON","parse","parseXML","DOMParser","parseFromString","rhash","rts","rheaders","rlocalProtocol","rnoContent","rprotocol","rurl","prefilters","transports","allTypes","ajaxLocation","ajaxLocParts","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","ajaxHandleResponses","s","responses","ct","finalDataType","firstDataType","mimeType","getResponseHeader","converters","ajaxConvert","response","isSuccess","conv2","current","conv","responseFields","dataFilter","active","lastModified","etag","url","isLocal","processData","async","contentType","json","* text","text html","text json","text xml","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","fireGlobals","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getAllResponseHeaders","setRequestHeader","lname","overrideMimeType","status","abort","statusText","finalText","success","method","crossDomain","param","traditional","hasContent","ifModified","headers","beforeSend","send","nativeStatusText","modified","getJSON","getScript","throws","wrapAll","firstElementChild","wrapInner","unwrap","visible","r20","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","v","encodeURIComponent","serialize","serializeArray","xhr","XMLHttpRequest","xhrId","xhrCallbacks","xhrSuccessStatus",1223,"xhrSupported","cors","open","username","xhrFields","onload","onerror","responseText","text script","charset","scriptCharset","evt","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","keepScripts","parsed","_load","params","animated","getWindow","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","calculatePosition","curElem","left","using","win","box","getBoundingClientRect","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","defaultExtra","funcName","size","andSelf","define","amd","_jQuery","_$","$","noConflict"],"mappings":"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"} \ No newline at end of file diff --git a/src/main/webapp/bower_components/jquery/src/ajax.js b/src/main/webapp/bower_components/jquery/src/ajax.js deleted file mode 100644 index 5c7b4add..00000000 --- a/src/main/webapp/bower_components/jquery/src/ajax.js +++ /dev/null @@ -1,786 +0,0 @@ -define([ - "./core", - "./var/rnotwhite", - "./ajax/var/nonce", - "./ajax/var/rquery", - "./core/init", - "./ajax/parseJSON", - "./ajax/parseXML", - "./deferred" -], function( jQuery, rnotwhite, nonce, rquery ) { - -var - rhash = /#.*$/, - rts = /([?&])_=[^&]*/, - rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, - // #7653, #8125, #8152: local protocol detection - rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, - rnoContent = /^(?:GET|HEAD)$/, - rprotocol = /^\/\//, - rurl = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/, - - /* Prefilters - * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) - * 2) These are called: - * - BEFORE asking for a transport - * - AFTER param serialization (s.data is a string if s.processData is true) - * 3) key is the dataType - * 4) the catchall symbol "*" can be used - * 5) execution will start with transport dataType and THEN continue down to "*" if needed - */ - prefilters = {}, - - /* Transports bindings - * 1) key is the dataType - * 2) the catchall symbol "*" can be used - * 3) selection will start with transport dataType and THEN go to "*" if needed - */ - transports = {}, - - // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression - allTypes = "*/".concat( "*" ), - - // Document location - ajaxLocation = window.location.href, - - // Segment location into parts - ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || []; - -// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport -function addToPrefiltersOrTransports( structure ) { - - // dataTypeExpression is optional and defaults to "*" - return function( dataTypeExpression, func ) { - - if ( typeof dataTypeExpression !== "string" ) { - func = dataTypeExpression; - dataTypeExpression = "*"; - } - - var dataType, - i = 0, - dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || []; - - if ( jQuery.isFunction( func ) ) { - // For each dataType in the dataTypeExpression - while ( (dataType = dataTypes[i++]) ) { - // Prepend if requested - if ( dataType[0] === "+" ) { - dataType = dataType.slice( 1 ) || "*"; - (structure[ dataType ] = structure[ dataType ] || []).unshift( func ); - - // Otherwise append - } else { - (structure[ dataType ] = structure[ dataType ] || []).push( func ); - } - } - } - }; -} - -// Base inspection function for prefilters and transports -function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { - - var inspected = {}, - seekingTransport = ( structure === transports ); - - function inspect( dataType ) { - var selected; - inspected[ dataType ] = true; - jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { - var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); - if ( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) { - options.dataTypes.unshift( dataTypeOrTransport ); - inspect( dataTypeOrTransport ); - return false; - } else if ( seekingTransport ) { - return !( selected = dataTypeOrTransport ); - } - }); - return selected; - } - - return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); -} - -// A special extend for ajax options -// that takes "flat" options (not to be deep extended) -// Fixes #9887 -function ajaxExtend( target, src ) { - var key, deep, - flatOptions = jQuery.ajaxSettings.flatOptions || {}; - - for ( key in src ) { - if ( src[ key ] !== undefined ) { - ( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ]; - } - } - if ( deep ) { - jQuery.extend( true, target, deep ); - } - - return target; -} - -/* Handles responses to an ajax request: - * - finds the right dataType (mediates between content-type and expected dataType) - * - returns the corresponding response - */ -function ajaxHandleResponses( s, jqXHR, responses ) { - - var ct, type, finalDataType, firstDataType, - contents = s.contents, - dataTypes = s.dataTypes; - - // Remove auto dataType and get content-type in the process - while ( dataTypes[ 0 ] === "*" ) { - dataTypes.shift(); - if ( ct === undefined ) { - ct = s.mimeType || jqXHR.getResponseHeader("Content-Type"); - } - } - - // Check if we're dealing with a known content-type - if ( ct ) { - for ( type in contents ) { - if ( contents[ type ] && contents[ type ].test( ct ) ) { - dataTypes.unshift( type ); - break; - } - } - } - - // Check to see if we have a response for the expected dataType - if ( dataTypes[ 0 ] in responses ) { - finalDataType = dataTypes[ 0 ]; - } else { - // Try convertible dataTypes - for ( type in responses ) { - if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) { - finalDataType = type; - break; - } - if ( !firstDataType ) { - firstDataType = type; - } - } - // Or just use first one - finalDataType = finalDataType || firstDataType; - } - - // If we found a dataType - // We add the dataType to the list if needed - // and return the corresponding response - if ( finalDataType ) { - if ( finalDataType !== dataTypes[ 0 ] ) { - dataTypes.unshift( finalDataType ); - } - return responses[ finalDataType ]; - } -} - -/* Chain conversions given the request and the original response - * Also sets the responseXXX fields on the jqXHR instance - */ -function ajaxConvert( s, response, jqXHR, isSuccess ) { - var conv2, current, conv, tmp, prev, - converters = {}, - // Work with a copy of dataTypes in case we need to modify it for conversion - dataTypes = s.dataTypes.slice(); - - // Create converters map with lowercased keys - if ( dataTypes[ 1 ] ) { - for ( conv in s.converters ) { - converters[ conv.toLowerCase() ] = s.converters[ conv ]; - } - } - - current = dataTypes.shift(); - - // Convert to each sequential dataType - while ( current ) { - - if ( s.responseFields[ current ] ) { - jqXHR[ s.responseFields[ current ] ] = response; - } - - // Apply the dataFilter if provided - if ( !prev && isSuccess && s.dataFilter ) { - response = s.dataFilter( response, s.dataType ); - } - - prev = current; - current = dataTypes.shift(); - - if ( current ) { - - // There's only work to do if current dataType is non-auto - if ( current === "*" ) { - - current = prev; - - // Convert response if prev dataType is non-auto and differs from current - } else if ( prev !== "*" && prev !== current ) { - - // Seek a direct converter - conv = converters[ prev + " " + current ] || converters[ "* " + current ]; - - // If none found, seek a pair - if ( !conv ) { - for ( conv2 in converters ) { - - // If conv2 outputs current - tmp = conv2.split( " " ); - if ( tmp[ 1 ] === current ) { - - // If prev can be converted to accepted input - conv = converters[ prev + " " + tmp[ 0 ] ] || - converters[ "* " + tmp[ 0 ] ]; - if ( conv ) { - // Condense equivalence converters - if ( conv === true ) { - conv = converters[ conv2 ]; - - // Otherwise, insert the intermediate dataType - } else if ( converters[ conv2 ] !== true ) { - current = tmp[ 0 ]; - dataTypes.unshift( tmp[ 1 ] ); - } - break; - } - } - } - } - - // Apply converter (if not an equivalence) - if ( conv !== true ) { - - // Unless errors are allowed to bubble, catch and return them - if ( conv && s[ "throws" ] ) { - response = conv( response ); - } else { - try { - response = conv( response ); - } catch ( e ) { - return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current }; - } - } - } - } - } - } - - return { state: "success", data: response }; -} - -jQuery.extend({ - - // Counter for holding the number of active queries - active: 0, - - // Last-Modified header cache for next request - lastModified: {}, - etag: {}, - - ajaxSettings: { - url: ajaxLocation, - type: "GET", - isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ), - global: true, - processData: true, - async: true, - contentType: "application/x-www-form-urlencoded; charset=UTF-8", - /* - timeout: 0, - data: null, - dataType: null, - username: null, - password: null, - cache: null, - throws: false, - traditional: false, - headers: {}, - */ - - accepts: { - "*": allTypes, - text: "text/plain", - html: "text/html", - xml: "application/xml, text/xml", - json: "application/json, text/javascript" - }, - - contents: { - xml: /xml/, - html: /html/, - json: /json/ - }, - - responseFields: { - xml: "responseXML", - text: "responseText", - json: "responseJSON" - }, - - // Data converters - // Keys separate source (or catchall "*") and destination types with a single space - converters: { - - // Convert anything to text - "* text": String, - - // Text to html (true = no transformation) - "text html": true, - - // Evaluate text as a json expression - "text json": jQuery.parseJSON, - - // Parse text as xml - "text xml": jQuery.parseXML - }, - - // For options that shouldn't be deep extended: - // you can add your own custom options here if - // and when you create one that shouldn't be - // deep extended (see ajaxExtend) - flatOptions: { - url: true, - context: true - } - }, - - // Creates a full fledged settings object into target - // with both ajaxSettings and settings fields. - // If target is omitted, writes into ajaxSettings. - ajaxSetup: function( target, settings ) { - return settings ? - - // Building a settings object - ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : - - // Extending ajaxSettings - ajaxExtend( jQuery.ajaxSettings, target ); - }, - - ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), - ajaxTransport: addToPrefiltersOrTransports( transports ), - - // Main method - ajax: function( url, options ) { - - // If url is an object, simulate pre-1.5 signature - if ( typeof url === "object" ) { - options = url; - url = undefined; - } - - // Force options to be an object - options = options || {}; - - var transport, - // URL without anti-cache param - cacheURL, - // Response headers - responseHeadersString, - responseHeaders, - // timeout handle - timeoutTimer, - // Cross-domain detection vars - parts, - // To know if global events are to be dispatched - fireGlobals, - // Loop variable - i, - // Create the final options object - s = jQuery.ajaxSetup( {}, options ), - // Callbacks context - callbackContext = s.context || s, - // Context for global events is callbackContext if it is a DOM node or jQuery collection - globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ? - jQuery( callbackContext ) : - jQuery.event, - // Deferreds - deferred = jQuery.Deferred(), - completeDeferred = jQuery.Callbacks("once memory"), - // Status-dependent callbacks - statusCode = s.statusCode || {}, - // Headers (they are sent all at once) - requestHeaders = {}, - requestHeadersNames = {}, - // The jqXHR state - state = 0, - // Default abort message - strAbort = "canceled", - // Fake xhr - jqXHR = { - readyState: 0, - - // Builds headers hashtable if needed - getResponseHeader: function( key ) { - var match; - if ( state === 2 ) { - if ( !responseHeaders ) { - responseHeaders = {}; - while ( (match = rheaders.exec( responseHeadersString )) ) { - responseHeaders[ match[1].toLowerCase() ] = match[ 2 ]; - } - } - match = responseHeaders[ key.toLowerCase() ]; - } - return match == null ? null : match; - }, - - // Raw string - getAllResponseHeaders: function() { - return state === 2 ? responseHeadersString : null; - }, - - // Caches the header - setRequestHeader: function( name, value ) { - var lname = name.toLowerCase(); - if ( !state ) { - name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name; - requestHeaders[ name ] = value; - } - return this; - }, - - // Overrides response content-type header - overrideMimeType: function( type ) { - if ( !state ) { - s.mimeType = type; - } - return this; - }, - - // Status-dependent callbacks - statusCode: function( map ) { - var code; - if ( map ) { - if ( state < 2 ) { - for ( code in map ) { - // Lazy-add the new callback in a way that preserves old ones - statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; - } - } else { - // Execute the appropriate callbacks - jqXHR.always( map[ jqXHR.status ] ); - } - } - return this; - }, - - // Cancel the request - abort: function( statusText ) { - var finalText = statusText || strAbort; - if ( transport ) { - transport.abort( finalText ); - } - done( 0, finalText ); - return this; - } - }; - - // Attach deferreds - deferred.promise( jqXHR ).complete = completeDeferred.add; - jqXHR.success = jqXHR.done; - jqXHR.error = jqXHR.fail; - - // Remove hash character (#7531: and string promotion) - // Add protocol if not provided (prefilters might expect it) - // Handle falsy url in the settings object (#10093: consistency with old signature) - // We also use the url parameter if available - s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" ) - .replace( rprotocol, ajaxLocParts[ 1 ] + "//" ); - - // Alias method option to type as per ticket #12004 - s.type = options.method || options.type || s.method || s.type; - - // Extract dataTypes list - s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ]; - - // A cross-domain request is in order when we have a protocol:host:port mismatch - if ( s.crossDomain == null ) { - parts = rurl.exec( s.url.toLowerCase() ); - s.crossDomain = !!( parts && - ( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] || - ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? "80" : "443" ) ) !== - ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? "80" : "443" ) ) ) - ); - } - - // Convert data if not already a string - if ( s.data && s.processData && typeof s.data !== "string" ) { - s.data = jQuery.param( s.data, s.traditional ); - } - - // Apply prefilters - inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); - - // If request was aborted inside a prefilter, stop there - if ( state === 2 ) { - return jqXHR; - } - - // We can fire global events as of now if asked to - // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) - fireGlobals = jQuery.event && s.global; - - // Watch for a new set of requests - if ( fireGlobals && jQuery.active++ === 0 ) { - jQuery.event.trigger("ajaxStart"); - } - - // Uppercase the type - s.type = s.type.toUpperCase(); - - // Determine if request has content - s.hasContent = !rnoContent.test( s.type ); - - // Save the URL in case we're toying with the If-Modified-Since - // and/or If-None-Match header later on - cacheURL = s.url; - - // More options handling for requests with no content - if ( !s.hasContent ) { - - // If data is available, append data to url - if ( s.data ) { - cacheURL = ( s.url += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data ); - // #9682: remove data so that it's not used in an eventual retry - delete s.data; - } - - // Add anti-cache in url if needed - if ( s.cache === false ) { - s.url = rts.test( cacheURL ) ? - - // If there is already a '_' parameter, set its value - cacheURL.replace( rts, "$1_=" + nonce++ ) : - - // Otherwise add one to the end - cacheURL + ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + nonce++; - } - } - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - if ( jQuery.lastModified[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); - } - if ( jQuery.etag[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); - } - } - - // Set the correct header, if data is being sent - if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { - jqXHR.setRequestHeader( "Content-Type", s.contentType ); - } - - // Set the Accepts header for the server, depending on the dataType - jqXHR.setRequestHeader( - "Accept", - s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ? - s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : - s.accepts[ "*" ] - ); - - // Check for headers option - for ( i in s.headers ) { - jqXHR.setRequestHeader( i, s.headers[ i ] ); - } - - // Allow custom headers/mimetypes and early abort - if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) { - // Abort if not done already and return - return jqXHR.abort(); - } - - // Aborting is no longer a cancellation - strAbort = "abort"; - - // Install callbacks on deferreds - for ( i in { success: 1, error: 1, complete: 1 } ) { - jqXHR[ i ]( s[ i ] ); - } - - // Get transport - transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); - - // If no transport, we auto-abort - if ( !transport ) { - done( -1, "No Transport" ); - } else { - jqXHR.readyState = 1; - - // Send global event - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); - } - // Timeout - if ( s.async && s.timeout > 0 ) { - timeoutTimer = setTimeout(function() { - jqXHR.abort("timeout"); - }, s.timeout ); - } - - try { - state = 1; - transport.send( requestHeaders, done ); - } catch ( e ) { - // Propagate exception as error if not done - if ( state < 2 ) { - done( -1, e ); - // Simply rethrow otherwise - } else { - throw e; - } - } - } - - // Callback for when everything is done - function done( status, nativeStatusText, responses, headers ) { - var isSuccess, success, error, response, modified, - statusText = nativeStatusText; - - // Called once - if ( state === 2 ) { - return; - } - - // State is "done" now - state = 2; - - // Clear timeout if it exists - if ( timeoutTimer ) { - clearTimeout( timeoutTimer ); - } - - // Dereference transport for early garbage collection - // (no matter how long the jqXHR object will be used) - transport = undefined; - - // Cache response headers - responseHeadersString = headers || ""; - - // Set readyState - jqXHR.readyState = status > 0 ? 4 : 0; - - // Determine if successful - isSuccess = status >= 200 && status < 300 || status === 304; - - // Get response data - if ( responses ) { - response = ajaxHandleResponses( s, jqXHR, responses ); - } - - // Convert no matter what (that way responseXXX fields are always set) - response = ajaxConvert( s, response, jqXHR, isSuccess ); - - // If successful, handle type chaining - if ( isSuccess ) { - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - modified = jqXHR.getResponseHeader("Last-Modified"); - if ( modified ) { - jQuery.lastModified[ cacheURL ] = modified; - } - modified = jqXHR.getResponseHeader("etag"); - if ( modified ) { - jQuery.etag[ cacheURL ] = modified; - } - } - - // if no content - if ( status === 204 || s.type === "HEAD" ) { - statusText = "nocontent"; - - // if not modified - } else if ( status === 304 ) { - statusText = "notmodified"; - - // If we have data, let's convert it - } else { - statusText = response.state; - success = response.data; - error = response.error; - isSuccess = !error; - } - } else { - // Extract error from statusText and normalize for non-aborts - error = statusText; - if ( status || !statusText ) { - statusText = "error"; - if ( status < 0 ) { - status = 0; - } - } - } - - // Set data for the fake xhr object - jqXHR.status = status; - jqXHR.statusText = ( nativeStatusText || statusText ) + ""; - - // Success/Error - if ( isSuccess ) { - deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); - } else { - deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); - } - - // Status-dependent callbacks - jqXHR.statusCode( statusCode ); - statusCode = undefined; - - if ( fireGlobals ) { - globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", - [ jqXHR, s, isSuccess ? success : error ] ); - } - - // Complete - completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); - - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); - // Handle the global AJAX counter - if ( !( --jQuery.active ) ) { - jQuery.event.trigger("ajaxStop"); - } - } - } - - return jqXHR; - }, - - getJSON: function( url, data, callback ) { - return jQuery.get( url, data, callback, "json" ); - }, - - getScript: function( url, callback ) { - return jQuery.get( url, undefined, callback, "script" ); - } -}); - -jQuery.each( [ "get", "post" ], function( i, method ) { - jQuery[ method ] = function( url, data, callback, type ) { - // Shift arguments if data argument was omitted - if ( jQuery.isFunction( data ) ) { - type = type || callback; - callback = data; - data = undefined; - } - - return jQuery.ajax({ - url: url, - type: method, - dataType: type, - data: data, - success: callback - }); - }; -}); - -return jQuery; -}); diff --git a/src/main/webapp/bower_components/jquery/src/ajax/jsonp.js b/src/main/webapp/bower_components/jquery/src/ajax/jsonp.js deleted file mode 100644 index ff0d5389..00000000 --- a/src/main/webapp/bower_components/jquery/src/ajax/jsonp.js +++ /dev/null @@ -1,89 +0,0 @@ -define([ - "../core", - "./var/nonce", - "./var/rquery", - "../ajax" -], function( jQuery, nonce, rquery ) { - -var oldCallbacks = [], - rjsonp = /(=)\?(?=&|$)|\?\?/; - -// Default jsonp settings -jQuery.ajaxSetup({ - jsonp: "callback", - jsonpCallback: function() { - var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) ); - this[ callback ] = true; - return callback; - } -}); - -// Detect, normalize options and install callbacks for jsonp requests -jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { - - var callbackName, overwritten, responseContainer, - jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ? - "url" : - typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data" - ); - - // Handle iff the expected data type is "jsonp" or we have a parameter to set - if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) { - - // Get callback name, remembering preexisting value associated with it - callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ? - s.jsonpCallback() : - s.jsonpCallback; - - // Insert callback into url or form data - if ( jsonProp ) { - s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName ); - } else if ( s.jsonp !== false ) { - s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; - } - - // Use data converter to retrieve json after script execution - s.converters["script json"] = function() { - if ( !responseContainer ) { - jQuery.error( callbackName + " was not called" ); - } - return responseContainer[ 0 ]; - }; - - // force json dataType - s.dataTypes[ 0 ] = "json"; - - // Install callback - overwritten = window[ callbackName ]; - window[ callbackName ] = function() { - responseContainer = arguments; - }; - - // Clean-up function (fires after converters) - jqXHR.always(function() { - // Restore preexisting value - window[ callbackName ] = overwritten; - - // Save back as free - if ( s[ callbackName ] ) { - // make sure that re-using the options doesn't screw things around - s.jsonpCallback = originalSettings.jsonpCallback; - - // save the callback name for future use - oldCallbacks.push( callbackName ); - } - - // Call if it was a function and we have a response - if ( responseContainer && jQuery.isFunction( overwritten ) ) { - overwritten( responseContainer[ 0 ] ); - } - - responseContainer = overwritten = undefined; - }); - - // Delegate to script - return "script"; - } -}); - -}); diff --git a/src/main/webapp/bower_components/jquery/src/ajax/load.js b/src/main/webapp/bower_components/jquery/src/ajax/load.js deleted file mode 100644 index bff25b1a..00000000 --- a/src/main/webapp/bower_components/jquery/src/ajax/load.js +++ /dev/null @@ -1,75 +0,0 @@ -define([ - "../core", - "../core/parseHTML", - "../ajax", - "../traversing", - "../manipulation", - "../selector", - // Optional event/alias dependency - "../event/alias" -], function( jQuery ) { - -// Keep a copy of the old load method -var _load = jQuery.fn.load; - -/** - * Load a url into a page - */ -jQuery.fn.load = function( url, params, callback ) { - if ( typeof url !== "string" && _load ) { - return _load.apply( this, arguments ); - } - - var selector, type, response, - self = this, - off = url.indexOf(" "); - - if ( off >= 0 ) { - selector = jQuery.trim( url.slice( off ) ); - url = url.slice( 0, off ); - } - - // If it's a function - if ( jQuery.isFunction( params ) ) { - - // We assume that it's the callback - callback = params; - params = undefined; - - // Otherwise, build a param string - } else if ( params && typeof params === "object" ) { - type = "POST"; - } - - // If we have elements to modify, make the request - if ( self.length > 0 ) { - jQuery.ajax({ - url: url, - - // if "type" variable is undefined, then "GET" method will be used - type: type, - dataType: "html", - data: params - }).done(function( responseText ) { - - // Save response for use in complete callback - response = arguments; - - self.html( selector ? - - // If a selector was specified, locate the right elements in a dummy div - // Exclude scripts to avoid IE 'Permission Denied' errors - jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) : - - // Otherwise use the full result - responseText ); - - }).complete( callback && function( jqXHR, status ) { - self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] ); - }); - } - - return this; -}; - -}); diff --git a/src/main/webapp/bower_components/jquery/src/ajax/parseJSON.js b/src/main/webapp/bower_components/jquery/src/ajax/parseJSON.js deleted file mode 100644 index 3a96d15b..00000000 --- a/src/main/webapp/bower_components/jquery/src/ajax/parseJSON.js +++ /dev/null @@ -1,13 +0,0 @@ -define([ - "../core" -], function( jQuery ) { - -// Support: Android 2.3 -// Workaround failure to string-cast null input -jQuery.parseJSON = function( data ) { - return JSON.parse( data + "" ); -}; - -return jQuery.parseJSON; - -}); diff --git a/src/main/webapp/bower_components/jquery/src/ajax/parseXML.js b/src/main/webapp/bower_components/jquery/src/ajax/parseXML.js deleted file mode 100644 index 9eeb625f..00000000 --- a/src/main/webapp/bower_components/jquery/src/ajax/parseXML.js +++ /dev/null @@ -1,28 +0,0 @@ -define([ - "../core" -], function( jQuery ) { - -// Cross-browser xml parsing -jQuery.parseXML = function( data ) { - var xml, tmp; - if ( !data || typeof data !== "string" ) { - return null; - } - - // Support: IE9 - try { - tmp = new DOMParser(); - xml = tmp.parseFromString( data, "text/xml" ); - } catch ( e ) { - xml = undefined; - } - - if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { - jQuery.error( "Invalid XML: " + data ); - } - return xml; -}; - -return jQuery.parseXML; - -}); diff --git a/src/main/webapp/bower_components/jquery/src/ajax/script.js b/src/main/webapp/bower_components/jquery/src/ajax/script.js deleted file mode 100644 index f44329d4..00000000 --- a/src/main/webapp/bower_components/jquery/src/ajax/script.js +++ /dev/null @@ -1,64 +0,0 @@ -define([ - "../core", - "../ajax" -], function( jQuery ) { - -// Install script dataType -jQuery.ajaxSetup({ - accepts: { - script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript" - }, - contents: { - script: /(?:java|ecma)script/ - }, - converters: { - "text script": function( text ) { - jQuery.globalEval( text ); - return text; - } - } -}); - -// Handle cache's special case and crossDomain -jQuery.ajaxPrefilter( "script", function( s ) { - if ( s.cache === undefined ) { - s.cache = false; - } - if ( s.crossDomain ) { - s.type = "GET"; - } -}); - -// Bind script tag hack transport -jQuery.ajaxTransport( "script", function( s ) { - // This transport only deals with cross domain requests - if ( s.crossDomain ) { - var script, callback; - return { - send: function( _, complete ) { - script = jQuery("<script>").prop({ - async: true, - charset: s.scriptCharset, - src: s.url - }).on( - "load error", - callback = function( evt ) { - script.remove(); - callback = null; - if ( evt ) { - complete( evt.type === "error" ? 404 : 200, evt.type ); - } - } - ); - document.head.appendChild( script[ 0 ] ); - }, - abort: function() { - if ( callback ) { - callback(); - } - } - }; - } -}); - -}); diff --git a/src/main/webapp/bower_components/jquery/src/ajax/var/nonce.js b/src/main/webapp/bower_components/jquery/src/ajax/var/nonce.js deleted file mode 100644 index 0871aae8..00000000 --- a/src/main/webapp/bower_components/jquery/src/ajax/var/nonce.js +++ /dev/null @@ -1,5 +0,0 @@ -define([ - "../../core" -], function( jQuery ) { - return jQuery.now(); -}); diff --git a/src/main/webapp/bower_components/jquery/src/ajax/var/rquery.js b/src/main/webapp/bower_components/jquery/src/ajax/var/rquery.js deleted file mode 100644 index 500a77a0..00000000 --- a/src/main/webapp/bower_components/jquery/src/ajax/var/rquery.js +++ /dev/null @@ -1,3 +0,0 @@ -define(function() { - return (/\?/); -}); diff --git a/src/main/webapp/bower_components/jquery/src/ajax/xhr.js b/src/main/webapp/bower_components/jquery/src/ajax/xhr.js deleted file mode 100644 index c2b43c92..00000000 --- a/src/main/webapp/bower_components/jquery/src/ajax/xhr.js +++ /dev/null @@ -1,136 +0,0 @@ -define([ - "../core", - "../var/support", - "../ajax" -], function( jQuery, support ) { - -jQuery.ajaxSettings.xhr = function() { - try { - return new XMLHttpRequest(); - } catch( e ) {} -}; - -var xhrId = 0, - xhrCallbacks = {}, - xhrSuccessStatus = { - // file protocol always yields status code 0, assume 200 - 0: 200, - // Support: IE9 - // #1450: sometimes IE returns 1223 when it should be 204 - 1223: 204 - }, - xhrSupported = jQuery.ajaxSettings.xhr(); - -// Support: IE9 -// Open requests must be manually aborted on unload (#5280) -// See https://support.microsoft.com/kb/2856746 for more info -if ( window.attachEvent ) { - window.attachEvent( "onunload", function() { - for ( var key in xhrCallbacks ) { - xhrCallbacks[ key ](); - } - }); -} - -support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); -support.ajax = xhrSupported = !!xhrSupported; - -jQuery.ajaxTransport(function( options ) { - var callback; - - // Cross domain only allowed if supported through XMLHttpRequest - if ( support.cors || xhrSupported && !options.crossDomain ) { - return { - send: function( headers, complete ) { - var i, - xhr = options.xhr(), - id = ++xhrId; - - xhr.open( options.type, options.url, options.async, options.username, options.password ); - - // Apply custom fields if provided - if ( options.xhrFields ) { - for ( i in options.xhrFields ) { - xhr[ i ] = options.xhrFields[ i ]; - } - } - - // Override mime type if needed - if ( options.mimeType && xhr.overrideMimeType ) { - xhr.overrideMimeType( options.mimeType ); - } - - // X-Requested-With header - // For cross-domain requests, seeing as conditions for a preflight are - // akin to a jigsaw puzzle, we simply never set it to be sure. - // (it can always be set on a per-request basis or even using ajaxSetup) - // For same-domain requests, won't change header if already provided. - if ( !options.crossDomain && !headers["X-Requested-With"] ) { - headers["X-Requested-With"] = "XMLHttpRequest"; - } - - // Set headers - for ( i in headers ) { - xhr.setRequestHeader( i, headers[ i ] ); - } - - // Callback - callback = function( type ) { - return function() { - if ( callback ) { - delete xhrCallbacks[ id ]; - callback = xhr.onload = xhr.onerror = null; - - if ( type === "abort" ) { - xhr.abort(); - } else if ( type === "error" ) { - complete( - // file: protocol always yields status 0; see #8605, #14207 - xhr.status, - xhr.statusText - ); - } else { - complete( - xhrSuccessStatus[ xhr.status ] || xhr.status, - xhr.statusText, - // Support: IE9 - // Accessing binary-data responseText throws an exception - // (#11426) - typeof xhr.responseText === "string" ? { - text: xhr.responseText - } : undefined, - xhr.getAllResponseHeaders() - ); - } - } - }; - }; - - // Listen to events - xhr.onload = callback(); - xhr.onerror = callback("error"); - - // Create the abort callback - callback = xhrCallbacks[ id ] = callback("abort"); - - try { - // Do send the request (this may raise an exception) - xhr.send( options.hasContent && options.data || null ); - } catch ( e ) { - // #14683: Only rethrow if this hasn't been notified as an error yet - if ( callback ) { - throw e; - } - } - }, - - abort: function() { - if ( callback ) { - callback(); - } - } - }; - } -}); - -}); diff --git a/src/main/webapp/bower_components/jquery/src/attributes.js b/src/main/webapp/bower_components/jquery/src/attributes.js deleted file mode 100644 index fa2ef1ed..00000000 --- a/src/main/webapp/bower_components/jquery/src/attributes.js +++ /dev/null @@ -1,11 +0,0 @@ -define([ - "./core", - "./attributes/attr", - "./attributes/prop", - "./attributes/classes", - "./attributes/val" -], function( jQuery ) { - -// Return jQuery for attributes-only inclusion -return jQuery; -}); diff --git a/src/main/webapp/bower_components/jquery/src/attributes/attr.js b/src/main/webapp/bower_components/jquery/src/attributes/attr.js deleted file mode 100644 index a4414d11..00000000 --- a/src/main/webapp/bower_components/jquery/src/attributes/attr.js +++ /dev/null @@ -1,141 +0,0 @@ -define([ - "../core", - "../var/rnotwhite", - "../var/strundefined", - "../core/access", - "./support", - "../selector" -], function( jQuery, rnotwhite, strundefined, access, support ) { - -var nodeHook, boolHook, - attrHandle = jQuery.expr.attrHandle; - -jQuery.fn.extend({ - attr: function( name, value ) { - return access( this, jQuery.attr, name, value, arguments.length > 1 ); - }, - - removeAttr: function( name ) { - return this.each(function() { - jQuery.removeAttr( this, name ); - }); - } -}); - -jQuery.extend({ - attr: function( elem, name, value ) { - var hooks, 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 === strundefined ) { - return jQuery.prop( elem, name, value ); - } - - // All attributes are lowercase - // Grab necessary hook if one is defined - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - name = name.toLowerCase(); - hooks = jQuery.attrHooks[ name ] || - ( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook ); - } - - if ( value !== undefined ) { - - if ( value === null ) { - jQuery.removeAttr( elem, name ); - - } else if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { - return ret; - - } else { - elem.setAttribute( name, value + "" ); - return value; - } - - } else if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { - return ret; - - } else { - ret = jQuery.find.attr( elem, 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( rnotwhite ); - - if ( attrNames && elem.nodeType === 1 ) { - while ( (name = attrNames[i++]) ) { - propName = jQuery.propFix[ name ] || name; - - // Boolean attributes get special treatment (#10870) - if ( jQuery.expr.match.bool.test( name ) ) { - // Set corresponding property to false - elem[ propName ] = false; - } - - elem.removeAttribute( name ); - } - } - }, - - attrHooks: { - type: { - set: function( elem, value ) { - if ( !support.radioValue && value === "radio" && - jQuery.nodeName( elem, "input" ) ) { - var val = elem.value; - elem.setAttribute( "type", value ); - if ( val ) { - elem.value = val; - } - return value; - } - } - } - } -}); - -// Hooks for boolean attributes -boolHook = { - set: function( elem, value, name ) { - if ( value === false ) { - // Remove boolean attributes when set to false - jQuery.removeAttr( elem, name ); - } else { - elem.setAttribute( name, name ); - } - return name; - } -}; -jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { - var getter = attrHandle[ name ] || jQuery.find.attr; - - attrHandle[ name ] = function( elem, name, isXML ) { - var ret, handle; - if ( !isXML ) { - // Avoid an infinite loop by temporarily removing this function from the getter - handle = attrHandle[ name ]; - attrHandle[ name ] = ret; - ret = getter( elem, name, isXML ) != null ? - name.toLowerCase() : - null; - attrHandle[ name ] = handle; - } - return ret; - }; -}); - -}); diff --git a/src/main/webapp/bower_components/jquery/src/attributes/classes.js b/src/main/webapp/bower_components/jquery/src/attributes/classes.js deleted file mode 100644 index 10113841..00000000 --- a/src/main/webapp/bower_components/jquery/src/attributes/classes.js +++ /dev/null @@ -1,158 +0,0 @@ -define([ - "../core", - "../var/rnotwhite", - "../var/strundefined", - "../data/var/data_priv", - "../core/init" -], function( jQuery, rnotwhite, strundefined, data_priv ) { - -var rclass = /[\t\r\n\f]/g; - -jQuery.fn.extend({ - addClass: function( value ) { - var classes, elem, cur, clazz, j, finalValue, - proceed = typeof value === "string" && value, - i = 0, - len = this.length; - - 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( 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 + " "; - } - } - - // only assign if different to avoid unneeded rendering. - finalValue = jQuery.trim( cur ); - if ( elem.className !== finalValue ) { - elem.className = finalValue; - } - } - } - } - - return this; - }, - - removeClass: function( value ) { - var classes, elem, cur, clazz, j, finalValue, - proceed = arguments.length === 0 || typeof value === "string" && value, - i = 0, - len = this.length; - - if ( jQuery.isFunction( value ) ) { - return this.each(function( j ) { - jQuery( this ).removeClass( value.call( this, j, this.className ) ); - }); - } - if ( proceed ) { - classes = ( value || "" ).match( 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 + " ", " " ); - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = value ? jQuery.trim( cur ) : ""; - if ( elem.className !== finalValue ) { - elem.className = finalValue; - } - } - } - } - - return this; - }, - - toggleClass: function( value, stateVal ) { - var type = typeof value; - - if ( typeof stateVal === "boolean" && type === "string" ) { - return stateVal ? this.addClass( value ) : this.removeClass( value ); - } - - 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 ), - classNames = value.match( rnotwhite ) || []; - - while ( (className = classNames[ i++ ]) ) { - // Check each className given, space separated list - if ( self.hasClass( className ) ) { - self.removeClass( className ); - } else { - self.addClass( className ); - } - } - - // Toggle whole class name - } else if ( type === strundefined || type === "boolean" ) { - if ( this.className ) { - // store className if set - data_priv.set( 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 ? "" : data_priv.get( 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; - } -}); - -}); diff --git a/src/main/webapp/bower_components/jquery/src/attributes/prop.js b/src/main/webapp/bower_components/jquery/src/attributes/prop.js deleted file mode 100644 index d4ee8b6b..00000000 --- a/src/main/webapp/bower_components/jquery/src/attributes/prop.js +++ /dev/null @@ -1,94 +0,0 @@ -define([ - "../core", - "../core/access", - "./support" -], function( jQuery, access, support ) { - -var rfocusable = /^(?:input|select|textarea|button)$/i; - -jQuery.fn.extend({ - prop: function( name, value ) { - return access( this, jQuery.prop, name, value, arguments.length > 1 ); - }, - - removeProp: function( name ) { - return this.each(function() { - delete this[ jQuery.propFix[ name ] || name ]; - }); - } -}); - -jQuery.extend({ - propFix: { - "for": "htmlFor", - "class": "className" - }, - - 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 ) { - return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ? - ret : - ( elem[ name ] = value ); - - } else { - return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ? - ret : - elem[ name ]; - } - }, - - propHooks: { - tabIndex: { - get: function( elem ) { - return elem.hasAttribute( "tabindex" ) || rfocusable.test( elem.nodeName ) || elem.href ? - elem.tabIndex : - -1; - } - } - } -}); - -if ( !support.optSelected ) { - jQuery.propHooks.selected = { - get: function( elem ) { - var parent = elem.parentNode; - if ( parent && parent.parentNode ) { - parent.parentNode.selectedIndex; - } - return null; - } - }; -} - -jQuery.each([ - "tabIndex", - "readOnly", - "maxLength", - "cellSpacing", - "cellPadding", - "rowSpan", - "colSpan", - "useMap", - "frameBorder", - "contentEditable" -], function() { - jQuery.propFix[ this.toLowerCase() ] = this; -}); - -}); diff --git a/src/main/webapp/bower_components/jquery/src/attributes/support.js b/src/main/webapp/bower_components/jquery/src/attributes/support.js deleted file mode 100644 index 5db5c521..00000000 --- a/src/main/webapp/bower_components/jquery/src/attributes/support.js +++ /dev/null @@ -1,35 +0,0 @@ -define([ - "../var/support" -], function( support ) { - -(function() { - var input = document.createElement( "input" ), - select = document.createElement( "select" ), - opt = select.appendChild( document.createElement( "option" ) ); - - input.type = "checkbox"; - - // Support: iOS<=5.1, Android<=4.2+ - // Default value for a checkbox should be "on" - support.checkOn = input.value !== ""; - - // Support: IE<=11+ - // Must access selectedIndex to make default options select - support.optSelected = opt.selected; - - // Support: Android<=2.3 - // Options inside disabled selects are incorrectly marked as disabled - select.disabled = true; - support.optDisabled = !opt.disabled; - - // Support: IE<=11+ - // An input loses its value after becoming a radio - input = document.createElement( "input" ); - input.value = "t"; - input.type = "radio"; - support.radioValue = input.value === "t"; -})(); - -return support; - -}); diff --git a/src/main/webapp/bower_components/jquery/src/attributes/val.js b/src/main/webapp/bower_components/jquery/src/attributes/val.js deleted file mode 100644 index 4a1358a6..00000000 --- a/src/main/webapp/bower_components/jquery/src/attributes/val.js +++ /dev/null @@ -1,161 +0,0 @@ -define([ - "../core", - "./support", - "../core/init" -], function( jQuery, support ) { - -var rreturn = /\r/g; - -jQuery.fn.extend({ - val: function( value ) { - var hooks, ret, 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; - - if ( this.nodeType !== 1 ) { - return; - } - - if ( isFunction ) { - val = value.call( this, i, jQuery( this ).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 ) { - var val = jQuery.find.attr( elem, "value" ); - return val != null ? - val : - // Support: IE10-11+ - // option.text throws exceptions (#14686, #14858) - jQuery.trim( jQuery.text( elem ) ); - } - }, - 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 ]; - - // IE6-9 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 - ( 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 optionSet, option, - options = elem.options, - values = jQuery.makeArray( value ), - i = options.length; - - while ( i-- ) { - option = options[ i ]; - if ( (option.selected = jQuery.inArray( option.value, values ) >= 0) ) { - optionSet = true; - } - } - - // Force browsers to behave consistently when non-matching value is set - if ( !optionSet ) { - elem.selectedIndex = -1; - } - return values; - } - } - } -}); - -// Radios and checkboxes getter/setter -jQuery.each([ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = { - set: function( elem, value ) { - if ( jQuery.isArray( value ) ) { - return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 ); - } - } - }; - if ( !support.checkOn ) { - jQuery.valHooks[ this ].get = function( elem ) { - return elem.getAttribute("value") === null ? "on" : elem.value; - }; - } -}); - -}); diff --git a/src/main/webapp/bower_components/jquery/src/callbacks.js b/src/main/webapp/bower_components/jquery/src/callbacks.js deleted file mode 100644 index 17572bb9..00000000 --- a/src/main/webapp/bower_components/jquery/src/callbacks.js +++ /dev/null @@ -1,205 +0,0 @@ -define([ - "./core", - "./var/rnotwhite" -], function( jQuery, rnotwhite ) { - -// 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( 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 // Last fire value (for non-forgettable lists) - memory, - // Flag to know if list was already fired - fired, - // Flag to know if list is currently firing - firing, - // First callback to fire (used internally by add and fireWith) - firingStart, - // End of the loop when firing - firingLength, - // Index of currently firing callback (modified by remove if needed) - firingIndex, - // 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 = []; - firingLength = 0; - 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 ) { - if ( list && ( !fired || stack ) ) { - args = args || []; - args = [ context, args.slice ? args.slice() : args ]; - 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; -}; - -return jQuery; -}); diff --git a/src/main/webapp/bower_components/jquery/src/core.js b/src/main/webapp/bower_components/jquery/src/core.js deleted file mode 100644 index da6aa833..00000000 --- a/src/main/webapp/bower_components/jquery/src/core.js +++ /dev/null @@ -1,497 +0,0 @@ -define([ - "./var/arr", - "./var/slice", - "./var/concat", - "./var/push", - "./var/indexOf", - "./var/class2type", - "./var/toString", - "./var/hasOwn", - "./var/support" -], function( arr, slice, concat, push, indexOf, class2type, toString, hasOwn, support ) { - -var - // Use the correct document accordingly with window argument (sandbox) - document = window.document, - - version = "@VERSION", - - // Define a local copy of jQuery - jQuery = function( selector, context ) { - // The jQuery object is actually just the init constructor 'enhanced' - // Need init if jQuery is called (just allow error to be thrown if not included) - return new jQuery.fn.init( selector, context ); - }, - - // Support: Android<4.1 - // Make sure we trim BOM and NBSP - rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/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(); - }; - -jQuery.fn = jQuery.prototype = { - // The current version of jQuery being used - jquery: version, - - constructor: jQuery, - - // Start with an empty selector - selector: "", - - // The default length of a jQuery object is 0 - length: 0, - - toArray: function() { - return 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 just the one element from the set - ( num < 0 ? this[ num + this.length ] : this[ num ] ) : - - // Return all the elements in a clean array - slice.call( this ); - }, - - // 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 ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map(this, function( elem, i ) { - return callback.call( elem, i, elem ); - })); - }, - - slice: function() { - return this.pushStack( 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] ] : [] ); - }, - - end: function() { - return this.prevObject || this.constructor(null); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: push, - sort: arr.sort, - splice: arr.splice -}; - -jQuery.extend = jQuery.fn.extend = function() { - 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; - - // Skip the boolean and the target - target = arguments[ i ] || {}; - i++; - } - - // 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 ( i === length ) { - 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({ - // Unique for each copy of jQuery on the page - expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), - - // Assume jQuery is ready without the ready module - isReady: true, - - error: function( msg ) { - throw new Error( msg ); - }, - - noop: function() {}, - - isFunction: function( obj ) { - return jQuery.type(obj) === "function"; - }, - - isArray: Array.isArray, - - isWindow: function( obj ) { - return obj != null && obj === obj.window; - }, - - isNumeric: function( obj ) { - // parseFloat NaNs numeric-cast false positives (null|true|false|"") - // ...but misinterprets leading-number strings, particularly hex literals ("0x...") - // subtraction forces infinities to NaN - // adding 1 corrects loss of precision from parseFloat (#15100) - return !jQuery.isArray( obj ) && (obj - parseFloat( obj ) + 1) >= 0; - }, - - isPlainObject: function( obj ) { - // Not plain objects: - // - Any object or value whose internal [[Class]] property is not "[object Object]" - // - DOM nodes - // - window - if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { - return false; - } - - if ( obj.constructor && - !hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) { - return false; - } - - // If the function hasn't returned already, we're confident that - // |obj| is a plain object, created by {} or constructed with new Object - return true; - }, - - isEmptyObject: function( obj ) { - var name; - for ( name in obj ) { - return false; - } - return true; - }, - - type: function( obj ) { - if ( obj == null ) { - return obj + ""; - } - // Support: Android<4.0, iOS<6 (functionish RegExp) - return typeof obj === "object" || typeof obj === "function" ? - class2type[ toString.call(obj) ] || "object" : - typeof obj; - }, - - // Evaluates a script in a global context - globalEval: function( code ) { - var script, - indirect = eval; - - code = jQuery.trim( code ); - - if ( code ) { - // If the code includes a valid, prologue position - // strict mode pragma, execute code by injecting a - // script tag into the document. - if ( code.indexOf("use strict") === 1 ) { - script = document.createElement("script"); - script.text = code; - document.head.appendChild( script ).parentNode.removeChild( script ); - } else { - // Otherwise, avoid the DOM node creation, insertion - // and removal by using an indirect global eval - indirect( code ); - } - } - }, - - // Convert dashed to camelCase; used by the css and data modules - // Support: IE9-11+ - // 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; - }, - - // Support: Android<4.1 - trim: 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 { - push.call( ret, arr ); - } - } - - return ret; - }, - - inArray: function( elem, arr, i ) { - return arr == null ? -1 : indexOf.call( arr, elem, i ); - }, - - merge: function( first, second ) { - var len = +second.length, - j = 0, - i = first.length; - - for ( ; j < len; j++ ) { - first[ i++ ] = second[ j ]; - } - - first.length = i; - - return first; - }, - - grep: function( elems, callback, invert ) { - var callbackInverse, - matches = [], - i = 0, - length = elems.length, - callbackExpect = !invert; - - // Go through the array, only saving the items - // that pass the validator function - for ( ; i < length; i++ ) { - callbackInverse = !callback( elems[ i ], i ); - if ( callbackInverse !== callbackExpect ) { - matches.push( elems[ i ] ); - } - } - - return matches; - }, - - // 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 new values - if ( isArray ) { - for ( ; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - - // Go through every key on the object, - } else { - for ( i in elems ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - } - - // Flatten any nested arrays - return 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 tmp, args, proxy; - - 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 = slice.call( arguments, 2 ); - proxy = function() { - return fn.apply( context || this, args.concat( 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; - }, - - now: Date.now, - - // jQuery.support is not used in Core but other projects attach their - // properties to it so it needs to exist. - support: support -}); - -// 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 ( type === "function" || jQuery.isWindow( obj ) ) { - return false; - } - - if ( obj.nodeType === 1 && length ) { - return true; - } - - return type === "array" || length === 0 || - typeof length === "number" && length > 0 && ( length - 1 ) in obj; -} - -return jQuery; -}); diff --git a/src/main/webapp/bower_components/jquery/src/core/access.js b/src/main/webapp/bower_components/jquery/src/core/access.js deleted file mode 100644 index b6110c8f..00000000 --- a/src/main/webapp/bower_components/jquery/src/core/access.js +++ /dev/null @@ -1,60 +0,0 @@ -define([ - "../core" -], function( jQuery ) { - -// Multifunctional method to get and set values of a collection -// The value/s can optionally be executed if it's a function -var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) { - var i = 0, - len = 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 < len; i++ ) { - fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) ); - } - } - } - - return chainable ? - elems : - - // Gets - bulk ? - fn.call( elems ) : - len ? fn( elems[0], key ) : emptyGet; -}; - -return access; - -}); diff --git a/src/main/webapp/bower_components/jquery/src/core/init.js b/src/main/webapp/bower_components/jquery/src/core/init.js deleted file mode 100644 index 7e83a049..00000000 --- a/src/main/webapp/bower_components/jquery/src/core/init.js +++ /dev/null @@ -1,123 +0,0 @@ -// Initialize a jQuery object -define([ - "../core", - "./var/rsingleTag", - "../traversing/findFilter" -], function( jQuery, rsingleTag ) { - -// A central reference to the root jQuery(document) -var rootjQuery, - - // A simple way to check for HTML strings - // Prioritize #id over <tag> to avoid XSS via location.hash (#9521) - // Strict HTML recognition (#11290: must start with <) - rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, - - init = jQuery.fn.init = function( selector, context ) { - var match, elem; - - // HANDLE: $(""), $(null), $(undefined), $(false) - if ( !selector ) { - return this; - } - - // Handle HTML strings - if ( typeof selector === "string" ) { - if ( selector[0] === "<" && selector[ 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; - - // Option to run scripts is true for back-compat - // Intentionally let the error be thrown if parseHTML is not present - 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] ); - - // Support: Blackberry 4.6 - // gEBID returns nodes no longer in the document (#6963) - if ( elem && elem.parentNode ) { - // 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 typeof rootjQuery.ready !== "undefined" ? - rootjQuery.ready( selector ) : - // Execute immediately if ready is not present - selector( jQuery ); - } - - if ( selector.selector !== undefined ) { - this.selector = selector.selector; - this.context = selector.context; - } - - return jQuery.makeArray( selector, this ); - }; - -// Give the init function the jQuery prototype for later instantiation -init.prototype = jQuery.fn; - -// Initialize central reference -rootjQuery = jQuery( document ); - -return init; - -}); diff --git a/src/main/webapp/bower_components/jquery/src/core/parseHTML.js b/src/main/webapp/bower_components/jquery/src/core/parseHTML.js deleted file mode 100644 index 64cf2a18..00000000 --- a/src/main/webapp/bower_components/jquery/src/core/parseHTML.js +++ /dev/null @@ -1,39 +0,0 @@ -define([ - "../core", - "./var/rsingleTag", - "../manipulation" // buildFragment -], function( jQuery, rsingleTag ) { - -// 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 -jQuery.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 && scripts.length ) { - jQuery( scripts ).remove(); - } - - return jQuery.merge( [], parsed.childNodes ); -}; - -return jQuery.parseHTML; - -}); diff --git a/src/main/webapp/bower_components/jquery/src/core/ready.js b/src/main/webapp/bower_components/jquery/src/core/ready.js deleted file mode 100644 index db1a6e60..00000000 --- a/src/main/webapp/bower_components/jquery/src/core/ready.js +++ /dev/null @@ -1,97 +0,0 @@ -define([ - "../core", - "../core/init", - "../deferred" -], function( jQuery ) { - -// The deferred used on DOM ready -var readyList; - -jQuery.fn.ready = function( fn ) { - // Add the callback - jQuery.ready.promise().done( fn ); - - return this; -}; - -jQuery.extend({ - // 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; - } - - // 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.triggerHandler ) { - jQuery( document ).triggerHandler( "ready" ); - jQuery( document ).off( "ready" ); - } - } -}); - -/** - * The ready event handler and self cleanup method - */ -function completed() { - document.removeEventListener( "DOMContentLoaded", completed, false ); - window.removeEventListener( "load", completed, false ); - jQuery.ready(); -} - -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 ); - - } else { - - // Use the handy event callback - document.addEventListener( "DOMContentLoaded", completed, false ); - - // A fallback to window.onload, that will always work - window.addEventListener( "load", completed, false ); - } - } - return readyList.promise( obj ); -}; - -// Kick off the DOM ready check even if the user does not -jQuery.ready.promise(); - -}); diff --git a/src/main/webapp/bower_components/jquery/src/core/var/rsingleTag.js b/src/main/webapp/bower_components/jquery/src/core/var/rsingleTag.js deleted file mode 100644 index 7e7090b7..00000000 --- a/src/main/webapp/bower_components/jquery/src/core/var/rsingleTag.js +++ /dev/null @@ -1,4 +0,0 @@ -define(function() { - // Match a standalone tag - return (/^<(\w+)\s*\/?>(?:<\/\1>|)$/); -}); diff --git a/src/main/webapp/bower_components/jquery/src/css.js b/src/main/webapp/bower_components/jquery/src/css.js deleted file mode 100644 index d4816175..00000000 --- a/src/main/webapp/bower_components/jquery/src/css.js +++ /dev/null @@ -1,450 +0,0 @@ -define([ - "./core", - "./var/pnum", - "./core/access", - "./css/var/rmargin", - "./css/var/rnumnonpx", - "./css/var/cssExpand", - "./css/var/isHidden", - "./css/var/getStyles", - "./css/curCSS", - "./css/defaultDisplay", - "./css/addGetHookIf", - "./css/support", - "./data/var/data_priv", - - "./core/init", - "./css/swap", - "./core/ready", - "./selector" // contains -], function( jQuery, pnum, access, rmargin, rnumnonpx, cssExpand, isHidden, - getStyles, curCSS, defaultDisplay, addGetHookIf, support, data_priv ) { - -var - // 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]).+)/, - rnumsplit = new RegExp( "^(" + pnum + ")(.*)$", "i" ), - rrelNum = new RegExp( "^([+-])=(" + pnum + ")", "i" ), - - cssShow = { position: "absolute", visibility: "hidden", display: "block" }, - cssNormalTransform = { - letterSpacing: "0", - fontWeight: "400" - }, - - 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[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 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.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; - } - - // Check for style in case a browser which returns unreliable values - // for getComputedStyle silently falls back to the reliable elem.style - valueIsBorderBox = isBorderBox && - ( 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"; -} - -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 ] = data_priv.get( 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 ] = data_priv.access( elem, "olddisplay", defaultDisplay(elem.nodeName) ); - } - } else { - hidden = isHidden( elem ); - - if ( display !== "none" || !hidden ) { - data_priv.set( 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.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; - } - } - } - }, - - // Don't automatically add "px" to these possibly-unitless properties - cssNumber: { - "columnCount": true, - "fillOpacity": true, - "flexGrow": true, - "flexShrink": true, - "fontWeight": true, - "lineHeight": true, - "opacity": true, - "order": 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: { - "float": "cssFloat" - }, - - // 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, then unprefixed version - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // Check if we're setting a value - if ( value !== undefined ) { - type = typeof value; - - // Convert "+=" 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 null and NaN values aren't set (#7116) - if ( value == null || value !== value ) { - return; - } - - // If a number, add 'px' to the (except for certain CSS properties) - if ( type === "number" && !jQuery.cssNumber[ origName ] ) { - value += "px"; - } - - // Support: IE9-11+ - // background-* props affect original clone's values - if ( !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 ) { - style[ name ] = value; - } - - } 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 val, num, 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 ) ); - - // Try prefixed name followed by the unprefixed name - 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 ]; - } - - // Make numeric 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; - } -}); - -jQuery.each([ "height", "width" ], function( i, name ) { - jQuery.cssHooks[ name ] = { - get: function( elem, computed, extra ) { - if ( computed ) { - - // Certain elements can have dimension info if we invisibly show them - // but it must have a current display style that would benefit - return rdisplayswap.test( jQuery.css( elem, "display" ) ) && elem.offsetWidth === 0 ? - jQuery.swap( elem, cssShow, function() { - return getWidthOrHeight( elem, name, extra ); - }) : - getWidthOrHeight( elem, name, extra ); - } - }, - - set: function( elem, value, extra ) { - var styles = extra && getStyles( elem ); - return setPositiveNumber( elem, value, extra ? - augmentWidthOrHeight( - elem, - name, - extra, - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - styles - ) : 0 - ); - } - }; -}); - -// Support: Android 2.3 -jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight, - function( elem, computed ) { - if ( computed ) { - return jQuery.swap( elem, { "display": "inline-block" }, - curCSS, [ elem, "marginRight" ] ); - } - } -); - -// These hooks are used by animate to expand properties -jQuery.each({ - margin: "", - padding: "", - border: "Width" -}, function( prefix, suffix ) { - jQuery.cssHooks[ prefix + suffix ] = { - expand: function( value ) { - var i = 0, - expanded = {}, - - // Assumes a single number if not a string - parts = typeof value === "string" ? value.split(" ") : [ value ]; - - for ( ; i < 4; i++ ) { - expanded[ prefix + cssExpand[ i ] + suffix ] = - parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; - } - - return expanded; - } - }; - - if ( !rmargin.test( prefix ) ) { - jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; - } -}); - -jQuery.fn.extend({ - css: function( name, value ) { - return access( this, function( elem, name, value ) { - var styles, len, - 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 ) { - if ( typeof state === "boolean" ) { - return state ? this.show() : this.hide(); - } - - return this.each(function() { - if ( isHidden( this ) ) { - jQuery( this ).show(); - } else { - jQuery( this ).hide(); - } - }); - } -}); - -return jQuery; -}); diff --git a/src/main/webapp/bower_components/jquery/src/css/addGetHookIf.js b/src/main/webapp/bower_components/jquery/src/css/addGetHookIf.js deleted file mode 100644 index e12f3598..00000000 --- a/src/main/webapp/bower_components/jquery/src/css/addGetHookIf.js +++ /dev/null @@ -1,22 +0,0 @@ -define(function() { - -function addGetHookIf( conditionFn, hookFn ) { - // Define the hook, we'll check on the first run if it's really needed. - return { - get: function() { - if ( conditionFn() ) { - // Hook not needed (or it's not possible to use it due - // to missing dependency), remove it. - delete this.get; - return; - } - - // Hook needed; redefine it so that the support test is not executed again. - return (this.get = hookFn).apply( this, arguments ); - } - }; -} - -return addGetHookIf; - -}); diff --git a/src/main/webapp/bower_components/jquery/src/css/curCSS.js b/src/main/webapp/bower_components/jquery/src/css/curCSS.js deleted file mode 100644 index 90e508cb..00000000 --- a/src/main/webapp/bower_components/jquery/src/css/curCSS.js +++ /dev/null @@ -1,57 +0,0 @@ -define([ - "../core", - "./var/rnumnonpx", - "./var/rmargin", - "./var/getStyles", - "../selector" // contains -], function( jQuery, rnumnonpx, rmargin, getStyles ) { - -function curCSS( elem, name, computed ) { - var width, minWidth, maxWidth, ret, - style = elem.style; - - computed = computed || getStyles( elem ); - - // Support: IE9 - // getPropertyValue is only needed for .css('filter') (#12537) - if ( computed ) { - ret = computed.getPropertyValue( name ) || computed[ name ]; - } - - if ( computed ) { - - if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { - ret = jQuery.style( elem, name ); - } - - // Support: iOS < 6 - // A tribute to the "awesome hack by Dean Edwards" - // iOS < 6 (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 !== undefined ? - // Support: IE - // IE returns zIndex value as an integer. - ret + "" : - ret; -} - -return curCSS; -}); diff --git a/src/main/webapp/bower_components/jquery/src/css/defaultDisplay.js b/src/main/webapp/bower_components/jquery/src/css/defaultDisplay.js deleted file mode 100644 index 046ae91b..00000000 --- a/src/main/webapp/bower_components/jquery/src/css/defaultDisplay.js +++ /dev/null @@ -1,70 +0,0 @@ -define([ - "../core", - "../manipulation" // appendTo -], function( jQuery ) { - -var iframe, - elemdisplay = {}; - -/** - * Retrieve the actual display of a element - * @param {String} name nodeName of the element - * @param {Object} doc Document object - */ -// Called only from within defaultDisplay -function actualDisplay( name, doc ) { - var style, - elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ), - - // getDefaultComputedStyle might be reliably used only on attached element - display = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ? - - // Use of this method is a temporary fix (more like optimization) until something better comes along, - // since it was removed from specification and supported only in FF - style.display : jQuery.css( elem[ 0 ], "display" ); - - // We don't have any data stored on the element, - // so use "detach" method as fast way to get rid of the element - elem.detach(); - - return display; -} - -/** - * Try to determine the default display value of an element - * @param {String} nodeName - */ -function 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( "<iframe frameborder='0' width='0' height='0'/>" )).appendTo( doc.documentElement ); - - // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse - doc = iframe[ 0 ].contentDocument; - - // Support: IE - doc.write(); - doc.close(); - - display = actualDisplay( nodeName, doc ); - iframe.detach(); - } - - // Store the correct default display - elemdisplay[ nodeName ] = display; - } - - return display; -} - -return defaultDisplay; - -}); diff --git a/src/main/webapp/bower_components/jquery/src/css/hiddenVisibleSelectors.js b/src/main/webapp/bower_components/jquery/src/css/hiddenVisibleSelectors.js deleted file mode 100644 index c7f1c7ee..00000000 --- a/src/main/webapp/bower_components/jquery/src/css/hiddenVisibleSelectors.js +++ /dev/null @@ -1,15 +0,0 @@ -define([ - "../core", - "../selector" -], function( jQuery ) { - -jQuery.expr.filters.hidden = function( elem ) { - // Support: Opera <= 12.12 - // Opera reports offsetWidths and offsetHeights less than zero on some elements - return elem.offsetWidth <= 0 && elem.offsetHeight <= 0; -}; -jQuery.expr.filters.visible = function( elem ) { - return !jQuery.expr.filters.hidden( elem ); -}; - -}); diff --git a/src/main/webapp/bower_components/jquery/src/css/support.js b/src/main/webapp/bower_components/jquery/src/css/support.js deleted file mode 100644 index b9eaf140..00000000 --- a/src/main/webapp/bower_components/jquery/src/css/support.js +++ /dev/null @@ -1,96 +0,0 @@ -define([ - "../core", - "../var/support" -], function( jQuery, support ) { - -(function() { - var pixelPositionVal, boxSizingReliableVal, - docElem = document.documentElement, - container = document.createElement( "div" ), - div = document.createElement( "div" ); - - if ( !div.style ) { - return; - } - - // Support: IE9-11+ - // Style of cloned element affects source element cloned (#8908) - div.style.backgroundClip = "content-box"; - div.cloneNode( true ).style.backgroundClip = ""; - support.clearCloneStyle = div.style.backgroundClip === "content-box"; - - container.style.cssText = "border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;" + - "position:absolute"; - container.appendChild( div ); - - // Executing both pixelPosition & boxSizingReliable tests require only one layout - // so they're executed at the same time to save the second computation. - function computePixelPositionAndBoxSizingReliable() { - div.style.cssText = - // Support: Firefox<29, Android 2.3 - // Vendor-prefix box-sizing - "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;" + - "box-sizing:border-box;display:block;margin-top:1%;top:1%;" + - "border:1px;padding:1px;width:4px;position:absolute"; - div.innerHTML = ""; - docElem.appendChild( container ); - - var divStyle = window.getComputedStyle( div, null ); - pixelPositionVal = divStyle.top !== "1%"; - boxSizingReliableVal = divStyle.width === "4px"; - - docElem.removeChild( container ); - } - - // Support: node.js jsdom - // Don't assume that getComputedStyle is a property of the global object - if ( window.getComputedStyle ) { - jQuery.extend( support, { - pixelPosition: function() { - - // This test is executed only once but we still do memoizing - // since we can use the boxSizingReliable pre-computing. - // No need to check if the test was already performed, though. - computePixelPositionAndBoxSizingReliable(); - return pixelPositionVal; - }, - boxSizingReliable: function() { - if ( boxSizingReliableVal == null ) { - computePixelPositionAndBoxSizingReliable(); - } - return boxSizingReliableVal; - }, - reliableMarginRight: function() { - - // Support: Android 2.3 - // Check if div with explicit width and no margin-right incorrectly - // gets computed margin-right based on width of container. (#3333) - // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right - // This support function is only executed once so no memoizing is needed. - var ret, - marginDiv = div.appendChild( document.createElement( "div" ) ); - - // Reset CSS: box-sizing; display; margin; border; padding - marginDiv.style.cssText = div.style.cssText = - // Support: Firefox<29, Android 2.3 - // Vendor-prefix box-sizing - "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" + - "box-sizing:content-box;display:block;margin:0;border:0;padding:0"; - marginDiv.style.marginRight = marginDiv.style.width = "0"; - div.style.width = "1px"; - docElem.appendChild( container ); - - ret = !parseFloat( window.getComputedStyle( marginDiv, null ).marginRight ); - - docElem.removeChild( container ); - div.removeChild( marginDiv ); - - return ret; - } - }); - } -})(); - -return support; - -}); diff --git a/src/main/webapp/bower_components/jquery/src/css/swap.js b/src/main/webapp/bower_components/jquery/src/css/swap.js deleted file mode 100644 index ce164353..00000000 --- a/src/main/webapp/bower_components/jquery/src/css/swap.js +++ /dev/null @@ -1,28 +0,0 @@ -define([ - "../core" -], function( jQuery ) { - -// A method for quickly swapping in/out CSS properties to get correct calculations. -jQuery.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; -}; - -return jQuery.swap; - -}); diff --git a/src/main/webapp/bower_components/jquery/src/css/var/cssExpand.js b/src/main/webapp/bower_components/jquery/src/css/var/cssExpand.js deleted file mode 100644 index 91e90a88..00000000 --- a/src/main/webapp/bower_components/jquery/src/css/var/cssExpand.js +++ /dev/null @@ -1,3 +0,0 @@ -define(function() { - return [ "Top", "Right", "Bottom", "Left" ]; -}); diff --git a/src/main/webapp/bower_components/jquery/src/css/var/getStyles.js b/src/main/webapp/bower_components/jquery/src/css/var/getStyles.js deleted file mode 100644 index 413acd04..00000000 --- a/src/main/webapp/bower_components/jquery/src/css/var/getStyles.js +++ /dev/null @@ -1,12 +0,0 @@ -define(function() { - return function( elem ) { - // Support: IE<=11+, Firefox<=30+ (#15098, #14150) - // IE throws on elements created in popups - // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" - if ( elem.ownerDocument.defaultView.opener ) { - return elem.ownerDocument.defaultView.getComputedStyle( elem, null ); - } - - return window.getComputedStyle( elem, null ); - }; -}); diff --git a/src/main/webapp/bower_components/jquery/src/css/var/isHidden.js b/src/main/webapp/bower_components/jquery/src/css/var/isHidden.js deleted file mode 100644 index 15ab81a9..00000000 --- a/src/main/webapp/bower_components/jquery/src/css/var/isHidden.js +++ /dev/null @@ -1,13 +0,0 @@ -define([ - "../../core", - "../../selector" - // css is assumed -], function( jQuery ) { - - return function( 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 ); - }; -}); diff --git a/src/main/webapp/bower_components/jquery/src/css/var/rmargin.js b/src/main/webapp/bower_components/jquery/src/css/var/rmargin.js deleted file mode 100644 index da0438db..00000000 --- a/src/main/webapp/bower_components/jquery/src/css/var/rmargin.js +++ /dev/null @@ -1,3 +0,0 @@ -define(function() { - return (/^margin/); -}); diff --git a/src/main/webapp/bower_components/jquery/src/css/var/rnumnonpx.js b/src/main/webapp/bower_components/jquery/src/css/var/rnumnonpx.js deleted file mode 100644 index c93be285..00000000 --- a/src/main/webapp/bower_components/jquery/src/css/var/rnumnonpx.js +++ /dev/null @@ -1,5 +0,0 @@ -define([ - "../../var/pnum" -], function( pnum ) { - return new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); -}); diff --git a/src/main/webapp/bower_components/jquery/src/data.js b/src/main/webapp/bower_components/jquery/src/data.js deleted file mode 100644 index f9af9ae6..00000000 --- a/src/main/webapp/bower_components/jquery/src/data.js +++ /dev/null @@ -1,178 +0,0 @@ -define([ - "./core", - "./var/rnotwhite", - "./core/access", - "./data/var/data_priv", - "./data/var/data_user" -], function( jQuery, rnotwhite, access, data_priv, data_user ) { - -// Implementation Summary -// -// 1. Enforce API surface and semantic compatibility with 1.9.x branch -// 2. Improve the module's maintainability by reducing the storage -// paths to a single mechanism. -// 3. Use the same single mechanism to support "private" and "user" data. -// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) -// 5. Avoid exposing implementation details on user objects (eg. expando properties) -// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 - -var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, - rmultiDash = /([A-Z])/g; - -function dataAttr( elem, key, data ) { - var name; - - // If nothing was found internally, try to fetch any - // data from the HTML5 data-* attribute - if ( data === undefined && elem.nodeType === 1 ) { - 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 - data_user.set( elem, key, data ); - } else { - data = undefined; - } - } - return data; -} - -jQuery.extend({ - hasData: function( elem ) { - return data_user.hasData( elem ) || data_priv.hasData( elem ); - }, - - data: function( elem, name, data ) { - return data_user.access( elem, name, data ); - }, - - removeData: function( elem, name ) { - data_user.remove( elem, name ); - }, - - // TODO: Now that all calls to _data and _removeData have been replaced - // with direct calls to data_priv methods, these can be deprecated. - _data: function( elem, name, data ) { - return data_priv.access( elem, name, data ); - }, - - _removeData: function( elem, name ) { - data_priv.remove( elem, name ); - } -}); - -jQuery.fn.extend({ - data: function( key, value ) { - var i, name, data, - elem = this[ 0 ], - attrs = elem && elem.attributes; - - // Gets all values - if ( key === undefined ) { - if ( this.length ) { - data = data_user.get( elem ); - - if ( elem.nodeType === 1 && !data_priv.get( elem, "hasDataAttrs" ) ) { - i = attrs.length; - while ( i-- ) { - - // Support: IE11+ - // The attrs elements can be null (#14894) - if ( attrs[ i ] ) { - name = attrs[ i ].name; - if ( name.indexOf( "data-" ) === 0 ) { - name = jQuery.camelCase( name.slice(5) ); - dataAttr( elem, name, data[ name ] ); - } - } - } - data_priv.set( elem, "hasDataAttrs", true ); - } - } - - return data; - } - - // Sets multiple values - if ( typeof key === "object" ) { - return this.each(function() { - data_user.set( this, key ); - }); - } - - return access( this, function( value ) { - var data, - camelKey = jQuery.camelCase( key ); - - // The calling jQuery object (element matches) is not empty - // (and therefore has an element appears at this[ 0 ]) and the - // `value` parameter was not undefined. An empty jQuery object - // will result in `undefined` for elem = this[ 0 ] which will - // throw an exception if an attempt to read a data cache is made. - if ( elem && value === undefined ) { - // Attempt to get data from the cache - // with the key as-is - data = data_user.get( elem, key ); - if ( data !== undefined ) { - return data; - } - - // Attempt to get data from the cache - // with the key camelized - data = data_user.get( elem, camelKey ); - if ( data !== undefined ) { - return data; - } - - // Attempt to "discover" the data in - // HTML5 custom data-* attrs - data = dataAttr( elem, camelKey, undefined ); - if ( data !== undefined ) { - return data; - } - - // We tried really hard, but the data doesn't exist. - return; - } - - // Set the data... - this.each(function() { - // First, attempt to store a copy or reference of any - // data that might've been store with a camelCased key. - var data = data_user.get( this, camelKey ); - - // For HTML5 data-* attribute interop, we have to - // store property names with dashes in a camelCase form. - // This might not apply to all properties...* - data_user.set( this, camelKey, value ); - - // *... In the case of properties that might _actually_ - // have dashes, we need to also store a copy of that - // unchanged property. - if ( key.indexOf("-") !== -1 && data !== undefined ) { - data_user.set( this, key, value ); - } - }); - }, null, value, arguments.length > 1, null, true ); - }, - - removeData: function( key ) { - return this.each(function() { - data_user.remove( this, key ); - }); - } -}); - -return jQuery; -}); diff --git a/src/main/webapp/bower_components/jquery/src/data/Data.js b/src/main/webapp/bower_components/jquery/src/data/Data.js deleted file mode 100644 index 85afd64f..00000000 --- a/src/main/webapp/bower_components/jquery/src/data/Data.js +++ /dev/null @@ -1,181 +0,0 @@ -define([ - "../core", - "../var/rnotwhite", - "./accepts" -], function( jQuery, rnotwhite ) { - -function Data() { - // Support: Android<4, - // Old WebKit does not have Object.preventExtensions/freeze method, - // return new empty object instead with no [[set]] accessor - Object.defineProperty( this.cache = {}, 0, { - get: function() { - return {}; - } - }); - - this.expando = jQuery.expando + Data.uid++; -} - -Data.uid = 1; -Data.accepts = jQuery.acceptData; - -Data.prototype = { - key: function( owner ) { - // We can accept data for non-element nodes in modern browsers, - // but we should not, see #8335. - // Always return the key for a frozen object. - if ( !Data.accepts( owner ) ) { - return 0; - } - - var descriptor = {}, - // Check if the owner object already has a cache key - unlock = owner[ this.expando ]; - - // If not, create one - if ( !unlock ) { - unlock = Data.uid++; - - // Secure it in a non-enumerable, non-writable property - try { - descriptor[ this.expando ] = { value: unlock }; - Object.defineProperties( owner, descriptor ); - - // Support: Android<4 - // Fallback to a less secure definition - } catch ( e ) { - descriptor[ this.expando ] = unlock; - jQuery.extend( owner, descriptor ); - } - } - - // Ensure the cache object - if ( !this.cache[ unlock ] ) { - this.cache[ unlock ] = {}; - } - - return unlock; - }, - set: function( owner, data, value ) { - var prop, - // There may be an unlock assigned to this node, - // if there is no entry for this "owner", create one inline - // and set the unlock as though an owner entry had always existed - unlock = this.key( owner ), - cache = this.cache[ unlock ]; - - // Handle: [ owner, key, value ] args - if ( typeof data === "string" ) { - cache[ data ] = value; - - // Handle: [ owner, { properties } ] args - } else { - // Fresh assignments by object are shallow copied - if ( jQuery.isEmptyObject( cache ) ) { - jQuery.extend( this.cache[ unlock ], data ); - // Otherwise, copy the properties one-by-one to the cache object - } else { - for ( prop in data ) { - cache[ prop ] = data[ prop ]; - } - } - } - return cache; - }, - get: function( owner, key ) { - // Either a valid cache is found, or will be created. - // New caches will be created and the unlock returned, - // allowing direct access to the newly created - // empty data object. A valid owner object must be provided. - var cache = this.cache[ this.key( owner ) ]; - - return key === undefined ? - cache : cache[ key ]; - }, - access: function( owner, key, value ) { - var stored; - // In cases where either: - // - // 1. No key was specified - // 2. A string key was specified, but no value provided - // - // Take the "read" path and allow the get method to determine - // which value to return, respectively either: - // - // 1. The entire cache object - // 2. The data stored at the key - // - if ( key === undefined || - ((key && typeof key === "string") && value === undefined) ) { - - stored = this.get( owner, key ); - - return stored !== undefined ? - stored : this.get( owner, jQuery.camelCase(key) ); - } - - // [*]When the key is not a string, or both a key and value - // are specified, set or extend (existing objects) with either: - // - // 1. An object of properties - // 2. A key and value - // - this.set( owner, key, value ); - - // Since the "set" path can have two possible entry points - // return the expected data based on which path was taken[*] - return value !== undefined ? value : key; - }, - remove: function( owner, key ) { - var i, name, camel, - unlock = this.key( owner ), - cache = this.cache[ unlock ]; - - if ( key === undefined ) { - this.cache[ unlock ] = {}; - - } else { - // Support array or space separated string of keys - if ( jQuery.isArray( key ) ) { - // 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 = key.concat( key.map( jQuery.camelCase ) ); - } else { - camel = jQuery.camelCase( key ); - // Try the string as a key before any manipulation - if ( key in cache ) { - name = [ key, camel ]; - } else { - // If a key with the spaces exists, use it. - // Otherwise, create an array by matching non-whitespace - name = camel; - name = name in cache ? - [ name ] : ( name.match( rnotwhite ) || [] ); - } - } - - i = name.length; - while ( i-- ) { - delete cache[ name[ i ] ]; - } - } - }, - hasData: function( owner ) { - return !jQuery.isEmptyObject( - this.cache[ owner[ this.expando ] ] || {} - ); - }, - discard: function( owner ) { - if ( owner[ this.expando ] ) { - delete this.cache[ owner[ this.expando ] ]; - } - } -}; - -return Data; -}); diff --git a/src/main/webapp/bower_components/jquery/src/data/accepts.js b/src/main/webapp/bower_components/jquery/src/data/accepts.js deleted file mode 100644 index 291c7b47..00000000 --- a/src/main/webapp/bower_components/jquery/src/data/accepts.js +++ /dev/null @@ -1,20 +0,0 @@ -define([ - "../core" -], function( jQuery ) { - -/** - * Determines whether an object can have data - */ -jQuery.acceptData = function( owner ) { - // Accepts only: - // - Node - // - Node.ELEMENT_NODE - // - Node.DOCUMENT_NODE - // - Object - // - Any - /* jshint -W018 */ - return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); -}; - -return jQuery.acceptData; -}); diff --git a/src/main/webapp/bower_components/jquery/src/data/var/data_priv.js b/src/main/webapp/bower_components/jquery/src/data/var/data_priv.js deleted file mode 100644 index 24399e46..00000000 --- a/src/main/webapp/bower_components/jquery/src/data/var/data_priv.js +++ /dev/null @@ -1,5 +0,0 @@ -define([ - "../Data" -], function( Data ) { - return new Data(); -}); diff --git a/src/main/webapp/bower_components/jquery/src/data/var/data_user.js b/src/main/webapp/bower_components/jquery/src/data/var/data_user.js deleted file mode 100644 index 24399e46..00000000 --- a/src/main/webapp/bower_components/jquery/src/data/var/data_user.js +++ /dev/null @@ -1,5 +0,0 @@ -define([ - "../Data" -], function( Data ) { - return new Data(); -}); diff --git a/src/main/webapp/bower_components/jquery/src/deferred.js b/src/main/webapp/bower_components/jquery/src/deferred.js deleted file mode 100644 index 98f9c313..00000000 --- a/src/main/webapp/bower_components/jquery/src/deferred.js +++ /dev/null @@ -1,149 +0,0 @@ -define([ - "./core", - "./var/slice", - "./callbacks" -], function( jQuery, slice ) { - -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 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[ tuple[ 0 ] + "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 = 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 ? 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(); - } -}); - -return jQuery; -}); diff --git a/src/main/webapp/bower_components/jquery/src/deprecated.js b/src/main/webapp/bower_components/jquery/src/deprecated.js deleted file mode 100644 index 1b068bc3..00000000 --- a/src/main/webapp/bower_components/jquery/src/deprecated.js +++ /dev/null @@ -1,13 +0,0 @@ -define([ - "./core", - "./traversing" -], function( jQuery ) { - -// The number of elements contained in the matched element set -jQuery.fn.size = function() { - return this.length; -}; - -jQuery.fn.andSelf = jQuery.fn.addBack; - -}); diff --git a/src/main/webapp/bower_components/jquery/src/dimensions.js b/src/main/webapp/bower_components/jquery/src/dimensions.js deleted file mode 100644 index e6cb04c0..00000000 --- a/src/main/webapp/bower_components/jquery/src/dimensions.js +++ /dev/null @@ -1,50 +0,0 @@ -define([ - "./core", - "./core/access", - "./css" -], function( jQuery, access ) { - -// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods -jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { - jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) { - // Margin is only for outerHeight, outerWidth - jQuery.fn[ funcName ] = function( margin, value ) { - var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ), - extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ); - - return access( this, function( elem, type, value ) { - var doc; - - if ( jQuery.isWindow( elem ) ) { - // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there - // isn't a whole lot we can do. See pull request at this URL for discussion: - // https://github.com/jquery/jquery/pull/764 - return elem.document.documentElement[ "client" + name ]; - } - - // Get document width or height - if ( elem.nodeType === 9 ) { - doc = elem.documentElement; - - // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], - // whichever is greatest - return Math.max( - elem.body[ "scroll" + name ], doc[ "scroll" + name ], - elem.body[ "offset" + name ], doc[ "offset" + name ], - doc[ "client" + name ] - ); - } - - return value === undefined ? - // Get width or height on the element, requesting but not forcing parseFloat - jQuery.css( elem, type, extra ) : - - // Set width or height on the element - jQuery.style( elem, type, value, extra ); - }, type, chainable ? margin : undefined, chainable, null ); - }; - }); -}); - -return jQuery; -}); diff --git a/src/main/webapp/bower_components/jquery/src/effects.js b/src/main/webapp/bower_components/jquery/src/effects.js deleted file mode 100644 index 90226bd4..00000000 --- a/src/main/webapp/bower_components/jquery/src/effects.js +++ /dev/null @@ -1,648 +0,0 @@ -define([ - "./core", - "./var/pnum", - "./css/var/cssExpand", - "./css/var/isHidden", - "./css/defaultDisplay", - "./data/var/data_priv", - - "./core/init", - "./effects/Tween", - "./queue", - "./css", - "./deferred", - "./traversing" -], function( jQuery, pnum, cssExpand, isHidden, defaultDisplay, data_priv ) { - -var - fxNow, timerId, - rfxtypes = /^(?:toggle|show|hide)$/, - rfxnum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ), - rrun = /queueHooks$/, - animationPrefilters = [ defaultPrefilter ], - tweeners = { - "*": [ function( prop, value ) { - var tween = this.createTween( prop, value ), - target = tween.cur(), - parts = rfxnum.exec( value ), - unit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), - - // Starting value computation is required for potential unit mismatches - start = ( jQuery.cssNumber[ prop ] || unit !== "px" && +target ) && - rfxnum.exec( jQuery.css( tween.elem, prop ) ), - scale = 1, - maxIterations = 20; - - if ( start && start[ 3 ] !== unit ) { - // Trust units reported by jQuery.css - unit = unit || start[ 3 ]; - - // Make sure we update the tween properties later on - parts = parts || []; - - // Iteratively approximate from a nonzero starting point - start = +target || 1; - - do { - // If previous iteration zeroed out, double until we get *something*. - // Use string for doubling so we don't accidentally see scale as unchanged below - scale = scale || ".5"; - - // Adjust and apply - start = start / scale; - jQuery.style( tween.elem, prop, start + unit ); - - // Update scale, tolerating zero or NaN from tween.cur(), - // break the loop if scale is unchanged or perfect, or if we've just had enough - } while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations ); - } - - // Update tween properties - if ( parts ) { - start = tween.start = +start || +target || 0; - tween.unit = unit; - // If a +=/-= token was provided, we're doing a relative animation - tween.end = parts[ 1 ] ? - start + ( parts[ 1 ] + 1 ) * parts[ 2 ] : - +parts[ 2 ]; - } - - return tween; - } ] - }; - -// Animations created synchronously will run synchronously -function createFxNow() { - setTimeout(function() { - fxNow = undefined; - }); - return ( fxNow = jQuery.now() ); -} - -// Generate parameters to create a standard animation -function genFx( type, includeWidth ) { - var which, - i = 0, - attrs = { height: type }; - - // If we include width, step value is 1 to do all cssExpand values, - // otherwise step value is 2 to skip over Left and Right - includeWidth = includeWidth ? 1 : 0; - for ( ; i < 4 ; i += 2 - includeWidth ) { - which = cssExpand[ i ]; - attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; - } - - if ( includeWidth ) { - attrs.opacity = attrs.width = type; - } - - return attrs; -} - -function createTween( value, prop, animation ) { - var tween, - collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ), - index = 0, - length = collection.length; - for ( ; index < length; index++ ) { - if ( (tween = collection[ index ].call( animation, prop, value )) ) { - - // We're done with this property - return tween; - } - } -} - -function defaultPrefilter( elem, props, opts ) { - /* jshint validthis: true */ - var prop, value, toggle, tween, hooks, oldfire, display, checkDisplay, - anim = this, - orig = {}, - style = elem.style, - hidden = elem.nodeType && isHidden( elem ), - dataShow = data_priv.get( elem, "fxshow" ); - - // Handle queue: false promises - if ( !opts.queue ) { - hooks = jQuery._queueHooks( elem, "fx" ); - if ( hooks.unqueued == null ) { - hooks.unqueued = 0; - oldfire = hooks.empty.fire; - hooks.empty.fire = function() { - if ( !hooks.unqueued ) { - oldfire(); - } - }; - } - hooks.unqueued++; - - anim.always(function() { - // Ensure the complete handler is called before this completes - anim.always(function() { - hooks.unqueued--; - if ( !jQuery.queue( elem, "fx" ).length ) { - hooks.empty.fire(); - } - }); - }); - } - - // Height/width overflow pass - if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) { - // Make sure that nothing sneaks out - // Record all 3 overflow attributes because IE9-10 do not - // change the overflow attribute when overflowX and - // overflowY are set to the same value - opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; - - // Set display property to inline-block for height/width - // animations on inline elements that are having width/height animated - display = jQuery.css( elem, "display" ); - - // Test default display if display is currently "none" - checkDisplay = display === "none" ? - data_priv.get( elem, "olddisplay" ) || defaultDisplay( elem.nodeName ) : display; - - if ( checkDisplay === "inline" && jQuery.css( elem, "float" ) === "none" ) { - style.display = "inline-block"; - } - } - - if ( opts.overflow ) { - style.overflow = "hidden"; - anim.always(function() { - style.overflow = opts.overflow[ 0 ]; - style.overflowX = opts.overflow[ 1 ]; - style.overflowY = opts.overflow[ 2 ]; - }); - } - - // show/hide pass - for ( prop in props ) { - value = props[ prop ]; - if ( rfxtypes.exec( value ) ) { - delete props[ prop ]; - toggle = toggle || value === "toggle"; - if ( value === ( hidden ? "hide" : "show" ) ) { - - // If there is dataShow left over from a stopped hide or show and we are going to proceed with show, we should pretend to be hidden - if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { - hidden = true; - } else { - continue; - } - } - orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); - - // Any non-fx value stops us from restoring the original display value - } else { - display = undefined; - } - } - - if ( !jQuery.isEmptyObject( orig ) ) { - if ( dataShow ) { - if ( "hidden" in dataShow ) { - hidden = dataShow.hidden; - } - } else { - dataShow = data_priv.access( elem, "fxshow", {} ); - } - - // Store state if its toggle - enables .stop().toggle() to "reverse" - if ( toggle ) { - dataShow.hidden = !hidden; - } - if ( hidden ) { - jQuery( elem ).show(); - } else { - anim.done(function() { - jQuery( elem ).hide(); - }); - } - anim.done(function() { - var prop; - - data_priv.remove( elem, "fxshow" ); - for ( prop in orig ) { - jQuery.style( elem, prop, orig[ prop ] ); - } - }); - for ( prop in orig ) { - tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); - - if ( !( prop in dataShow ) ) { - dataShow[ prop ] = tween.start; - if ( hidden ) { - tween.end = tween.start; - tween.start = prop === "width" || prop === "height" ? 1 : 0; - } - } - } - - // If this is a noop like .hide().hide(), restore an overwritten display value - } else if ( (display === "none" ? defaultDisplay( elem.nodeName ) : display) === "inline" ) { - style.display = display; - } -} - -function propFilter( props, specialEasing ) { - var index, name, easing, value, hooks; - - // camelCase, specialEasing and expand cssHook pass - for ( index in props ) { - name = jQuery.camelCase( index ); - easing = specialEasing[ name ]; - value = props[ index ]; - if ( jQuery.isArray( value ) ) { - easing = value[ 1 ]; - value = props[ index ] = value[ 0 ]; - } - - if ( index !== name ) { - props[ name ] = value; - delete props[ index ]; - } - - hooks = jQuery.cssHooks[ name ]; - if ( hooks && "expand" in hooks ) { - value = hooks.expand( value ); - delete props[ name ]; - - // Not quite $.extend, this won't overwrite existing keys. - // Reusing 'index' because we have the correct "name" - for ( index in value ) { - if ( !( index in props ) ) { - props[ index ] = value[ index ]; - specialEasing[ index ] = easing; - } - } - } else { - specialEasing[ name ] = easing; - } - } -} - -function Animation( elem, properties, options ) { - var result, - stopped, - index = 0, - length = animationPrefilters.length, - deferred = jQuery.Deferred().always( function() { - // Don't match elem in the :animated selector - delete tick.elem; - }), - tick = function() { - if ( stopped ) { - return false; - } - var currentTime = fxNow || createFxNow(), - remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), - // Support: Android 2.3 - // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) - temp = remaining / animation.duration || 0, - percent = 1 - temp, - index = 0, - length = animation.tweens.length; - - for ( ; index < length ; index++ ) { - animation.tweens[ index ].run( percent ); - } - - deferred.notifyWith( elem, [ animation, percent, remaining ]); - - if ( percent < 1 && length ) { - return remaining; - } else { - deferred.resolveWith( elem, [ animation ] ); - return false; - } - }, - animation = deferred.promise({ - elem: elem, - props: jQuery.extend( {}, properties ), - opts: jQuery.extend( true, { specialEasing: {} }, options ), - originalProperties: properties, - originalOptions: options, - startTime: fxNow || createFxNow(), - duration: options.duration, - tweens: [], - createTween: function( prop, end ) { - var tween = jQuery.Tween( elem, animation.opts, prop, end, - animation.opts.specialEasing[ prop ] || animation.opts.easing ); - animation.tweens.push( tween ); - return tween; - }, - stop: function( gotoEnd ) { - var index = 0, - // If we are going to the end, we want to run all the tweens - // otherwise we skip this part - length = gotoEnd ? animation.tweens.length : 0; - if ( stopped ) { - return this; - } - stopped = true; - for ( ; index < length ; index++ ) { - animation.tweens[ index ].run( 1 ); - } - - // Resolve when we played the last frame; otherwise, reject - if ( gotoEnd ) { - deferred.resolveWith( elem, [ animation, gotoEnd ] ); - } else { - deferred.rejectWith( elem, [ animation, gotoEnd ] ); - } - return this; - } - }), - props = animation.props; - - propFilter( props, animation.opts.specialEasing ); - - for ( ; index < length ; index++ ) { - result = animationPrefilters[ index ].call( animation, elem, props, animation.opts ); - if ( result ) { - return result; - } - } - - jQuery.map( props, createTween, animation ); - - if ( jQuery.isFunction( animation.opts.start ) ) { - animation.opts.start.call( elem, animation ); - } - - jQuery.fx.timer( - jQuery.extend( tick, { - elem: elem, - anim: animation, - queue: animation.opts.queue - }) - ); - - // attach callbacks from options - return animation.progress( animation.opts.progress ) - .done( animation.opts.done, animation.opts.complete ) - .fail( animation.opts.fail ) - .always( animation.opts.always ); -} - -jQuery.Animation = jQuery.extend( Animation, { - - tweener: function( props, callback ) { - if ( jQuery.isFunction( props ) ) { - callback = props; - props = [ "*" ]; - } else { - props = props.split(" "); - } - - var prop, - index = 0, - length = props.length; - - for ( ; index < length ; index++ ) { - prop = props[ index ]; - tweeners[ prop ] = tweeners[ prop ] || []; - tweeners[ prop ].unshift( callback ); - } - }, - - prefilter: function( callback, prepend ) { - if ( prepend ) { - animationPrefilters.unshift( callback ); - } else { - animationPrefilters.push( callback ); - } - } -}); - -jQuery.speed = function( speed, easing, fn ) { - var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { - complete: fn || !fn && easing || - jQuery.isFunction( speed ) && speed, - duration: speed, - easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing - }; - - opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration : - opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default; - - // Normalize opt.queue - true/undefined/null -> "fx" - if ( opt.queue == null || opt.queue === true ) { - opt.queue = "fx"; - } - - // Queueing - opt.old = opt.complete; - - opt.complete = function() { - if ( jQuery.isFunction( opt.old ) ) { - opt.old.call( this ); - } - - if ( opt.queue ) { - jQuery.dequeue( this, opt.queue ); - } - }; - - return opt; -}; - -jQuery.fn.extend({ - fadeTo: function( speed, to, easing, callback ) { - - // Show any hidden elements after setting opacity to 0 - return this.filter( isHidden ).css( "opacity", 0 ).show() - - // Animate to the value specified - .end().animate({ opacity: to }, speed, easing, callback ); - }, - animate: function( prop, speed, easing, callback ) { - var empty = jQuery.isEmptyObject( prop ), - optall = jQuery.speed( speed, easing, callback ), - doAnimation = function() { - // Operate on a copy of prop so per-property easing won't be lost - var anim = Animation( this, jQuery.extend( {}, prop ), optall ); - - // Empty animations, or finishing resolves immediately - if ( empty || data_priv.get( this, "finish" ) ) { - anim.stop( true ); - } - }; - doAnimation.finish = doAnimation; - - return empty || optall.queue === false ? - this.each( doAnimation ) : - this.queue( optall.queue, doAnimation ); - }, - stop: function( type, clearQueue, gotoEnd ) { - var stopQueue = function( hooks ) { - var stop = hooks.stop; - delete hooks.stop; - stop( gotoEnd ); - }; - - if ( typeof type !== "string" ) { - gotoEnd = clearQueue; - clearQueue = type; - type = undefined; - } - if ( clearQueue && type !== false ) { - this.queue( type || "fx", [] ); - } - - return this.each(function() { - var dequeue = true, - index = type != null && type + "queueHooks", - timers = jQuery.timers, - data = data_priv.get( this ); - - if ( index ) { - if ( data[ index ] && data[ index ].stop ) { - stopQueue( data[ index ] ); - } - } else { - for ( index in data ) { - if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { - stopQueue( data[ index ] ); - } - } - } - - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) { - timers[ index ].anim.stop( gotoEnd ); - dequeue = false; - timers.splice( index, 1 ); - } - } - - // Start the next in the queue if the last step wasn't forced. - // Timers currently will call their complete callbacks, which - // will dequeue but only if they were gotoEnd. - if ( dequeue || !gotoEnd ) { - jQuery.dequeue( this, type ); - } - }); - }, - finish: function( type ) { - if ( type !== false ) { - type = type || "fx"; - } - return this.each(function() { - var index, - data = data_priv.get( this ), - queue = data[ type + "queue" ], - hooks = data[ type + "queueHooks" ], - timers = jQuery.timers, - length = queue ? queue.length : 0; - - // Enable finishing flag on private data - data.finish = true; - - // Empty the queue first - jQuery.queue( this, type, [] ); - - if ( hooks && hooks.stop ) { - hooks.stop.call( this, true ); - } - - // Look for any active animations, and finish them - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && timers[ index ].queue === type ) { - timers[ index ].anim.stop( true ); - timers.splice( index, 1 ); - } - } - - // Look for any animations in the old queue and finish them - for ( index = 0; index < length; index++ ) { - if ( queue[ index ] && queue[ index ].finish ) { - queue[ index ].finish.call( this ); - } - } - - // Turn off finishing flag - delete data.finish; - }); - } -}); - -jQuery.each([ "toggle", "show", "hide" ], function( i, name ) { - var cssFn = jQuery.fn[ name ]; - jQuery.fn[ name ] = function( speed, easing, callback ) { - return speed == null || typeof speed === "boolean" ? - cssFn.apply( this, arguments ) : - this.animate( genFx( name, true ), speed, easing, callback ); - }; -}); - -// Generate shortcuts for custom animations -jQuery.each({ - slideDown: genFx("show"), - slideUp: genFx("hide"), - slideToggle: genFx("toggle"), - fadeIn: { opacity: "show" }, - fadeOut: { opacity: "hide" }, - fadeToggle: { opacity: "toggle" } -}, function( name, props ) { - jQuery.fn[ name ] = function( speed, easing, callback ) { - return this.animate( props, speed, easing, callback ); - }; -}); - -jQuery.timers = []; -jQuery.fx.tick = function() { - var timer, - i = 0, - timers = jQuery.timers; - - fxNow = jQuery.now(); - - for ( ; i < timers.length; i++ ) { - timer = timers[ i ]; - // Checks the timer has not already been removed - if ( !timer() && timers[ i ] === timer ) { - timers.splice( i--, 1 ); - } - } - - if ( !timers.length ) { - jQuery.fx.stop(); - } - fxNow = undefined; -}; - -jQuery.fx.timer = function( timer ) { - jQuery.timers.push( timer ); - if ( timer() ) { - jQuery.fx.start(); - } else { - jQuery.timers.pop(); - } -}; - -jQuery.fx.interval = 13; - -jQuery.fx.start = function() { - if ( !timerId ) { - timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval ); - } -}; - -jQuery.fx.stop = function() { - clearInterval( timerId ); - timerId = null; -}; - -jQuery.fx.speeds = { - slow: 600, - fast: 200, - // Default speed - _default: 400 -}; - -return jQuery; -}); diff --git a/src/main/webapp/bower_components/jquery/src/effects/Tween.js b/src/main/webapp/bower_components/jquery/src/effects/Tween.js deleted file mode 100644 index 9acd8d0c..00000000 --- a/src/main/webapp/bower_components/jquery/src/effects/Tween.js +++ /dev/null @@ -1,114 +0,0 @@ -define([ - "../core", - "../css" -], function( jQuery ) { - -function Tween( elem, options, prop, end, easing ) { - return new Tween.prototype.init( elem, options, prop, end, easing ); -} -jQuery.Tween = Tween; - -Tween.prototype = { - constructor: Tween, - init: function( elem, options, prop, end, easing, unit ) { - this.elem = elem; - this.prop = prop; - this.easing = easing || "swing"; - this.options = options; - this.start = this.now = this.cur(); - this.end = end; - this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); - }, - cur: function() { - var hooks = Tween.propHooks[ this.prop ]; - - return hooks && hooks.get ? - hooks.get( this ) : - Tween.propHooks._default.get( this ); - }, - run: function( percent ) { - var eased, - hooks = Tween.propHooks[ this.prop ]; - - if ( this.options.duration ) { - this.pos = eased = jQuery.easing[ this.easing ]( - percent, this.options.duration * percent, 0, 1, this.options.duration - ); - } else { - this.pos = eased = percent; - } - this.now = ( this.end - this.start ) * eased + this.start; - - if ( this.options.step ) { - this.options.step.call( this.elem, this.now, this ); - } - - if ( hooks && hooks.set ) { - hooks.set( this ); - } else { - Tween.propHooks._default.set( this ); - } - return this; - } -}; - -Tween.prototype.init.prototype = Tween.prototype; - -Tween.propHooks = { - _default: { - get: function( tween ) { - var result; - - if ( tween.elem[ tween.prop ] != null && - (!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) { - return tween.elem[ tween.prop ]; - } - - // Passing an empty string as a 3rd parameter to .css will automatically - // attempt a parseFloat and fallback to a string if the parse fails. - // Simple values such as "10px" are parsed to Float; - // complex values such as "rotate(1rad)" are returned as-is. - result = jQuery.css( tween.elem, tween.prop, "" ); - // Empty strings, null, undefined and "auto" are converted to 0. - return !result || result === "auto" ? 0 : result; - }, - set: function( tween ) { - // Use step hook for back compat. - // Use cssHook if its there. - // Use .style if available and use plain properties where available. - if ( jQuery.fx.step[ tween.prop ] ) { - jQuery.fx.step[ tween.prop ]( tween ); - } else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) { - jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); - } else { - tween.elem[ tween.prop ] = tween.now; - } - } - } -}; - -// Support: IE9 -// Panic based approach to setting things on disconnected nodes -Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { - set: function( tween ) { - if ( tween.elem.nodeType && tween.elem.parentNode ) { - tween.elem[ tween.prop ] = tween.now; - } - } -}; - -jQuery.easing = { - linear: function( p ) { - return p; - }, - swing: function( p ) { - return 0.5 - Math.cos( p * Math.PI ) / 2; - } -}; - -jQuery.fx = Tween.prototype.init; - -// Back Compat <1.8 extension point -jQuery.fx.step = {}; - -}); diff --git a/src/main/webapp/bower_components/jquery/src/effects/animatedSelector.js b/src/main/webapp/bower_components/jquery/src/effects/animatedSelector.js deleted file mode 100644 index bc5a3d6c..00000000 --- a/src/main/webapp/bower_components/jquery/src/effects/animatedSelector.js +++ /dev/null @@ -1,13 +0,0 @@ -define([ - "../core", - "../selector", - "../effects" -], function( jQuery ) { - -jQuery.expr.filters.animated = function( elem ) { - return jQuery.grep(jQuery.timers, function( fn ) { - return elem === fn.elem; - }).length; -}; - -}); diff --git a/src/main/webapp/bower_components/jquery/src/event.js b/src/main/webapp/bower_components/jquery/src/event.js deleted file mode 100644 index 8f04b89c..00000000 --- a/src/main/webapp/bower_components/jquery/src/event.js +++ /dev/null @@ -1,868 +0,0 @@ -define([ - "./core", - "./var/strundefined", - "./var/rnotwhite", - "./var/hasOwn", - "./var/slice", - "./event/support", - "./data/var/data_priv", - - "./core/init", - "./data/accepts", - "./selector" -], function( jQuery, strundefined, rnotwhite, hasOwn, slice, support, data_priv ) { - -var - rkeyEvent = /^key/, - rmouseEvent = /^(?:mouse|pointer|contextmenu)|click/, - rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, - rtypenamespace = /^([^.]*)(?:\.(.+)|)$/; - -function returnTrue() { - return true; -} - -function returnFalse() { - return false; -} - -function safeActiveElement() { - try { - return document.activeElement; - } catch ( err ) { } -} - -/* - * 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 handleObjIn, eventHandle, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = data_priv.get( 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 !== strundefined && jQuery.event.triggered !== e.type ? - jQuery.event.dispatch.apply( elem, arguments ) : undefined; - }; - } - - // Handle multiple events separated by a space - types = ( types || "" ).match( rnotwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[t] ) || []; - type = origType = tmp[1]; - namespaces = ( tmp[2] || "" ).split( "." ).sort(); - - // There *must* be a type, no attaching namespace-only handlers - if ( !type ) { - continue; - } - - // 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 if the special events handler returns false - if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - if ( elem.addEventListener ) { - elem.addEventListener( type, eventHandle, false ); - } - } - } - - 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; - } - - }, - - // Detach an event or set of events from an element - remove: function( elem, types, handler, selector, mappedTypes ) { - - var j, origCount, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = data_priv.hasData( elem ) && data_priv.get( elem ); - - if ( !elemData || !(events = elemData.events) ) { - return; - } - - // Once for each type.namespace in types; type may be omitted - types = ( types || "" ).match( 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; - data_priv.remove( elem, "events" ); - } - }, - - trigger: function( event, data, elem, onlyHandlers ) { - - var i, cur, tmp, bubbleType, ontype, handle, special, - eventPath = [ elem || document ], - type = hasOwn.call( event, "type" ) ? event.type : event, - namespaces = 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 ); - - // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) - event.isTrigger = onlyHandlers ? 2 : 3; - 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 = ( data_priv.get( cur, "events" ) || {} )[ event.type ] && data_priv.get( cur, "handle" ); - if ( handle ) { - handle.apply( cur, data ); - } - - // Native handler - handle = ontype && cur[ ontype ]; - if ( handle && handle.apply && jQuery.acceptData( cur ) ) { - event.result = handle.apply( cur, data ); - if ( event.result === 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( eventPath.pop(), data ) === false) && - jQuery.acceptData( elem ) ) { - - // Call a native DOM method on the target with the same name name as the event. - // Don't do default actions on window, that's where global variables be (#6170) - if ( ontype && jQuery.isFunction( 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; - elem[ type ](); - 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, j, ret, matched, handleObj, - handlerQueue = [], - args = slice.call( arguments ), - handlers = ( data_priv.get( 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 i, matches, sel, handleObj, - handlerQueue = [], - delegateCount = handlers.delegateCount, - cur = event.target; - - // Find delegate handlers - // Black-hole SVG <use> 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 process clicks on disabled elements (#6911, #8165, #11382, #11764) - if ( 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; - }, - - // 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 offsetX offsetY pageX pageY screenX screenY toElement".split(" "), - filter: function( event, original ) { - var eventDoc, doc, body, - button = original.button; - - // 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 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; - } - }, - - 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: Cordova 2.5 (WebKit) (#13255) - // All events should have a target; Cordova deviceready doesn't - if ( !event.target ) { - event.target = document; - } - - // Support: Safari 6.0+, Chrome<28 - // Target should not be a text node (#504, #13143) - if ( event.target.nodeType === 3 ) { - event.target = event.target.parentNode; - } - - return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; - }, - - special: { - load: { - // Prevent triggered image.load events from bubbling to window.load - noBubble: true - }, - focus: { - // Fire native event if possible so blur/focus sequence is correct - trigger: function() { - if ( this !== safeActiveElement() && this.focus ) { - this.focus(); - return false; - } - }, - delegateType: "focusin" - }, - blur: { - trigger: function() { - if ( this === safeActiveElement() && this.blur ) { - this.blur(); - return false; - } - }, - delegateType: "focusout" - }, - click: { - // For checkbox, fire native event so checked state will be right - trigger: function() { - if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) { - this.click(); - return false; - } - }, - - // For cross-browser consistency, don't fire native .click() on links - _default: function( event ) { - return jQuery.nodeName( event.target, "a" ); - } - }, - - beforeunload: { - postDispatch: function( event ) { - - // Support: Firefox 20+ - // Firefox doesn't alert if the returnValue field is not set. - if ( event.result !== undefined && event.originalEvent ) { - 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 = function( elem, type, handle ) { - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle, false ); - } -}; - -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.defaultPrevented === undefined && - // Support: Android<4.0 - src.returnValue === false ? - 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 && e.preventDefault ) { - e.preventDefault(); - } - }, - stopPropagation: function() { - var e = this.originalEvent; - - this.isPropagationStopped = returnTrue; - - if ( e && e.stopPropagation ) { - e.stopPropagation(); - } - }, - stopImmediatePropagation: function() { - var e = this.originalEvent; - - this.isImmediatePropagationStopped = returnTrue; - - if ( e && e.stopImmediatePropagation ) { - e.stopImmediatePropagation(); - } - - this.stopPropagation(); - } -}; - -// Create mouseenter/leave events using mouseover/out and event-time checks -// Support: Chrome 15+ -jQuery.each({ - mouseenter: "mouseover", - mouseleave: "mouseout", - pointerenter: "pointerover", - pointerleave: "pointerout" -}, 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; - } - }; -}); - -// Support: Firefox, Chrome, Safari -// Create "bubbling" focus and blur events -if ( !support.focusinBubbles ) { - jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { - - // Attach a single capturing handler on the document while someone wants focusin/focusout - var handler = function( event ) { - jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); - }; - - jQuery.event.special[ fix ] = { - setup: function() { - var doc = this.ownerDocument || this, - attaches = data_priv.access( doc, fix ); - - if ( !attaches ) { - doc.addEventListener( orig, handler, true ); - } - data_priv.access( doc, fix, ( attaches || 0 ) + 1 ); - }, - teardown: function() { - var doc = this.ownerDocument || this, - attaches = data_priv.access( doc, fix ) - 1; - - if ( !attaches ) { - doc.removeEventListener( orig, handler, true ); - data_priv.remove( doc, fix ); - - } else { - data_priv.access( doc, fix, attaches ); - } - } - }; - }); -} - -jQuery.fn.extend({ - - on: function( types, selector, data, fn, /*INTERNAL*/ one ) { - var origFn, type; - - // 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 ); - }); - }, - - 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 ); - } - } -}); - -return jQuery; -}); diff --git a/src/main/webapp/bower_components/jquery/src/event/ajax.js b/src/main/webapp/bower_components/jquery/src/event/ajax.js deleted file mode 100644 index 278c403e..00000000 --- a/src/main/webapp/bower_components/jquery/src/event/ajax.js +++ /dev/null @@ -1,13 +0,0 @@ -define([ - "../core", - "../event" -], function( jQuery ) { - -// Attach a bunch of functions for handling common AJAX events -jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ) { - jQuery.fn[ type ] = function( fn ) { - return this.on( type, fn ); - }; -}); - -}); diff --git a/src/main/webapp/bower_components/jquery/src/event/alias.js b/src/main/webapp/bower_components/jquery/src/event/alias.js deleted file mode 100644 index 7e791750..00000000 --- a/src/main/webapp/bower_components/jquery/src/event/alias.js +++ /dev/null @@ -1,39 +0,0 @@ -define([ - "../core", - "../event" -], function( jQuery ) { - -jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + - "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + - "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) { - - // Handle event binding - jQuery.fn[ name ] = function( data, fn ) { - return arguments.length > 0 ? - this.on( name, null, data, fn ) : - this.trigger( name ); - }; -}); - -jQuery.fn.extend({ - hover: function( fnOver, fnOut ) { - return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); - }, - - 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 ); - } -}); - -}); diff --git a/src/main/webapp/bower_components/jquery/src/event/support.js b/src/main/webapp/bower_components/jquery/src/event/support.js deleted file mode 100644 index 85060db7..00000000 --- a/src/main/webapp/bower_components/jquery/src/event/support.js +++ /dev/null @@ -1,9 +0,0 @@ -define([ - "../var/support" -], function( support ) { - -support.focusinBubbles = "onfocusin" in window; - -return support; - -}); diff --git a/src/main/webapp/bower_components/jquery/src/exports/amd.js b/src/main/webapp/bower_components/jquery/src/exports/amd.js deleted file mode 100644 index 9a9846f9..00000000 --- a/src/main/webapp/bower_components/jquery/src/exports/amd.js +++ /dev/null @@ -1,24 +0,0 @@ -define([ - "../core" -], function( jQuery ) { - -// Register as a named AMD module, since jQuery can be concatenated with other -// files that may use define, but not via a proper concatenation script that -// understands anonymous AMD modules. A named AMD is safest and most robust -// way to register. Lowercase jquery is used because AMD module names are -// derived from file names, and jQuery is normally delivered in a lowercase -// file name. Do this after creating the global so that if an AMD module wants -// to call noConflict to hide this version of jQuery, it will work. - -// Note that for maximum portability, libraries that are not jQuery should -// declare themselves as anonymous modules, and avoid setting a global if an -// AMD loader is present. jQuery is a special case. For more information, see -// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon - -if ( typeof define === "function" && define.amd ) { - define( "jquery", [], function() { - return jQuery; - }); -} - -}); diff --git a/src/main/webapp/bower_components/jquery/src/exports/global.js b/src/main/webapp/bower_components/jquery/src/exports/global.js deleted file mode 100644 index 6513287c..00000000 --- a/src/main/webapp/bower_components/jquery/src/exports/global.js +++ /dev/null @@ -1,32 +0,0 @@ -define([ - "../core", - "../var/strundefined" -], function( jQuery, strundefined ) { - -var - // Map over jQuery in case of overwrite - _jQuery = window.jQuery, - - // Map over the $ in case of overwrite - _$ = window.$; - -jQuery.noConflict = function( deep ) { - if ( window.$ === jQuery ) { - window.$ = _$; - } - - if ( deep && window.jQuery === jQuery ) { - window.jQuery = _jQuery; - } - - return jQuery; -}; - -// Expose jQuery and $ identifiers, even in AMD -// (#7102#comment:10, https://github.com/jquery/jquery/pull/557) -// and CommonJS for browser emulators (#13566) -if ( typeof noGlobal === strundefined ) { - window.jQuery = window.$ = jQuery; -} - -}); diff --git a/src/main/webapp/bower_components/jquery/src/intro.js b/src/main/webapp/bower_components/jquery/src/intro.js deleted file mode 100644 index d7d43680..00000000 --- a/src/main/webapp/bower_components/jquery/src/intro.js +++ /dev/null @@ -1,44 +0,0 @@ -/*! - * jQuery JavaScript Library v@VERSION - * http://jquery.com/ - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * - * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors - * Released under the MIT license - * http://jquery.org/license - * - * Date: @DATE - */ - -(function( global, factory ) { - - if ( typeof module === "object" && typeof module.exports === "object" ) { - // For CommonJS and CommonJS-like environments where a proper `window` - // is present, execute the factory and get jQuery. - // For environments that do not have a `window` with a `document` - // (such as Node.js), expose a factory as module.exports. - // This accentuates the need for the creation of a real `window`. - // e.g. var jQuery = require("jquery")(window); - // See ticket #14549 for more info. - module.exports = global.document ? - factory( global, true ) : - function( w ) { - if ( !w.document ) { - throw new Error( "jQuery requires a window with a document" ); - } - return factory( w ); - }; - } else { - factory( global ); - } - -// Pass this if window is not defined yet -}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) { - -// Support: Firefox 18+ -// Can't be in strict mode, several libs including ASP.NET trace -// the stack via arguments.caller.callee and Firefox dies if -// you try to trace through "use strict" call chains. (#13335) -//"use strict"; diff --git a/src/main/webapp/bower_components/jquery/src/jquery.js b/src/main/webapp/bower_components/jquery/src/jquery.js deleted file mode 100644 index d3857e95..00000000 --- a/src/main/webapp/bower_components/jquery/src/jquery.js +++ /dev/null @@ -1,37 +0,0 @@ -define([ - "./core", - "./selector", - "./traversing", - "./callbacks", - "./deferred", - "./core/ready", - "./data", - "./queue", - "./queue/delay", - "./attributes", - "./event", - "./event/alias", - "./manipulation", - "./manipulation/_evalUrl", - "./wrap", - "./css", - "./css/hiddenVisibleSelectors", - "./serialize", - "./ajax", - "./ajax/xhr", - "./ajax/script", - "./ajax/jsonp", - "./ajax/load", - "./event/ajax", - "./effects", - "./effects/animatedSelector", - "./offset", - "./dimensions", - "./deprecated", - "./exports/amd", - "./exports/global" -], function( jQuery ) { - -return jQuery; - -}); diff --git a/src/main/webapp/bower_components/jquery/src/manipulation.js b/src/main/webapp/bower_components/jquery/src/manipulation.js deleted file mode 100644 index c6279626..00000000 --- a/src/main/webapp/bower_components/jquery/src/manipulation.js +++ /dev/null @@ -1,580 +0,0 @@ -define([ - "./core", - "./var/concat", - "./var/push", - "./core/access", - "./manipulation/var/rcheckableType", - "./manipulation/support", - "./data/var/data_priv", - "./data/var/data_user", - - "./core/init", - "./data/accepts", - "./traversing", - "./selector", - "./event" -], function( jQuery, concat, push, access, rcheckableType, support, data_priv, data_user ) { - -var - rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, - rtagName = /<([\w:]+)/, - rhtml = /<|&#?\w+;/, - rnoInnerhtml = /<(?:script|style|link)/i, - // checked="checked" or checked - rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, - rscriptType = /^$|\/(?:java|ecma)script/i, - rscriptTypeMasked = /^true\/(.*)/, - rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g, - - // We have to close these tags to support XHTML (#13200) - wrapMap = { - - // Support: IE9 - option: [ 1, "<select multiple='multiple'>", "</select>" ], - - thead: [ 1, "<table>", "</table>" ], - col: [ 2, "<table><colgroup>", "</colgroup></table>" ], - tr: [ 2, "<table><tbody>", "</tbody></table>" ], - td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ], - - _default: [ 0, "", "" ] - }; - -// Support: IE9 -wrapMap.optgroup = wrapMap.option; - -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - -// Support: 1.x compatibility -// Manipulating tables requires a tbody -function manipulationTarget( elem, content ) { - return jQuery.nodeName( elem, "table" ) && - jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ? - - elem.getElementsByTagName("tbody")[0] || - elem.appendChild( elem.ownerDocument.createElement("tbody") ) : - elem; -} - -// Replace/restore the type attribute of script elements for safe DOM manipulation -function disableScript( elem ) { - elem.type = (elem.getAttribute("type") !== null) + "/" + 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 i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - data_priv.set( - elems[ i ], "globalEval", !refElements || data_priv.get( refElements[ i ], "globalEval" ) - ); - } -} - -function cloneCopyEvent( src, dest ) { - var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; - - if ( dest.nodeType !== 1 ) { - return; - } - - // 1. Copy private data: events, handlers, etc. - if ( data_priv.hasData( src ) ) { - pdataOld = data_priv.access( src ); - pdataCur = data_priv.set( dest, pdataOld ); - events = pdataOld.events; - - if ( events ) { - delete pdataCur.handle; - pdataCur.events = {}; - - for ( type in events ) { - for ( i = 0, l = events[ type ].length; i < l; i++ ) { - jQuery.event.add( dest, type, events[ type ][ i ] ); - } - } - } - } - - // 2. Copy user data - if ( data_user.hasData( src ) ) { - udataOld = data_user.access( src ); - udataCur = jQuery.extend( {}, udataOld ); - - data_user.set( dest, udataCur ); - } -} - -function getAll( context, tag ) { - var ret = context.getElementsByTagName ? context.getElementsByTagName( tag || "*" ) : - context.querySelectorAll ? context.querySelectorAll( tag || "*" ) : - []; - - return tag === undefined || tag && jQuery.nodeName( context, tag ) ? - jQuery.merge( [ context ], ret ) : - ret; -} - -// Fix IE bugs, see support tests -function fixInput( src, dest ) { - var nodeName = dest.nodeName.toLowerCase(); - - // Fails to persist the checked state of a cloned checkbox or radio button. - if ( nodeName === "input" && rcheckableType.test( src.type ) ) { - dest.checked = src.checked; - - // Fails to return the selected option to the default selected state when cloning options - } else if ( nodeName === "input" || nodeName === "textarea" ) { - dest.defaultValue = src.defaultValue; - } -} - -jQuery.extend({ - clone: function( elem, dataAndEvents, deepDataAndEvents ) { - var i, l, srcElements, destElements, - clone = elem.cloneNode( true ), - inPage = jQuery.contains( elem.ownerDocument, elem ); - - // Fix IE cloning issues - if ( !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 ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - fixInput( srcElements[ i ], 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, l = srcElements.length; i < l; i++ ) { - cloneCopyEvent( srcElements[ i ], destElements[ i ] ); - } - } else { - cloneCopyEvent( elem, clone ); - } - } - - // Preserve script evaluation history - destElements = getAll( clone, "script" ); - if ( destElements.length > 0 ) { - setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); - } - - // Return the cloned set - return clone; - }, - - buildFragment: function( elems, context, scripts, selection ) { - var elem, tmp, tag, wrap, contains, j, - fragment = context.createDocumentFragment(), - nodes = [], - i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - elem = elems[ i ]; - - if ( elem || elem === 0 ) { - - // Add nodes directly - if ( jQuery.type( elem ) === "object" ) { - // Support: QtWebKit, PhantomJS - // push.apply(_, arraylike) throws on ancient WebKit - 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 || fragment.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></$2>" ) + wrap[ 2 ]; - - // Descend through wrappers to the right content - j = wrap[ 0 ]; - while ( j-- ) { - tmp = tmp.lastChild; - } - - // Support: QtWebKit, PhantomJS - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, tmp.childNodes ); - - // Remember the top-level container - tmp = fragment.firstChild; - - // Ensure the created nodes are orphaned (#12392) - tmp.textContent = ""; - } - } - } - - // Remove wrapper from fragment - fragment.textContent = ""; - - 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( fragment.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 ); - } - } - } - } - - return fragment; - }, - - cleanData: function( elems ) { - var data, elem, type, key, - special = jQuery.event.special, - i = 0; - - for ( ; (elem = elems[ i ]) !== undefined; i++ ) { - if ( jQuery.acceptData( elem ) ) { - key = elem[ data_priv.expando ]; - - if ( key && (data = data_priv.cache[ key ]) ) { - 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 ); - } - } - } - if ( data_priv.cache[ key ] ) { - // Discard any remaining `private` data - delete data_priv.cache[ key ]; - } - } - } - // Discard any remaining `user` data - delete data_user.cache[ elem[ data_user.expando ] ]; - } - } -}); - -jQuery.fn.extend({ - text: function( value ) { - return access( this, function( value ) { - return value === undefined ? - jQuery.text( this ) : - this.empty().each(function() { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - this.textContent = value; - } - }); - }, null, value, arguments.length ); - }, - - append: function() { - return this.domManip( arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.appendChild( elem ); - } - }); - }, - - prepend: function() { - return this.domManip( arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.insertBefore( elem, target.firstChild ); - } - }); - }, - - before: function() { - return this.domManip( arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this ); - } - }); - }, - - after: function() { - return this.domManip( arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this.nextSibling ); - } - }); - }, - - remove: function( selector, keepData /* Internal Use Only */ ) { - var elem, - elems = selector ? jQuery.filter( selector, this ) : this, - i = 0; - - for ( ; (elem = elems[i]) != null; i++ ) { - 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++ ) { - if ( elem.nodeType === 1 ) { - - // Prevent memory leaks - jQuery.cleanData( getAll( elem, false ) ); - - // Remove any remaining nodes - elem.textContent = ""; - } - } - - 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 access( this, function( value ) { - var elem = this[ 0 ] || {}, - i = 0, - l = this.length; - - if ( value === undefined && elem.nodeType === 1 ) { - return elem.innerHTML; - } - - // See if we can take a shortcut and just use innerHTML - if ( typeof value === "string" && !rnoInnerhtml.test( value ) && - !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { - - value = value.replace( rxhtmlTag, "<$1></$2>" ); - - try { - for ( ; i < l; i++ ) { - elem = this[ i ] || {}; - - // Remove element nodes and prevent memory leaks - 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() { - var arg = arguments[ 0 ]; - - // Make the changes, replacing each context element with the new content - this.domManip( arguments, function( elem ) { - arg = this.parentNode; - - jQuery.cleanData( getAll( this ) ); - - if ( arg ) { - arg.replaceChild( elem, this ); - } - }); - - // Force removal if there was no new content (e.g., from empty arguments) - return arg && (arg.length || arg.nodeType) ? this : this.remove(); - }, - - detach: function( selector ) { - return this.remove( selector, true ); - }, - - domManip: function( args, callback ) { - - // Flatten any nested arrays - args = concat.apply( [], args ); - - var fragment, first, scripts, hasScripts, node, doc, - 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" && - !support.checkClone && rchecked.test( value ) ) ) { - return this.each(function( index ) { - var self = set.eq( index ); - if ( isFunction ) { - args[ 0 ] = value.call( this, index, self.html() ); - } - self.domManip( args, callback ); - }); - } - - if ( l ) { - fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this ); - first = fragment.firstChild; - - if ( fragment.childNodes.length === 1 ) { - fragment = first; - } - - if ( first ) { - 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 ) { - // Support: QtWebKit - // jQuery.merge because push.apply(_, arraylike) throws - jQuery.merge( scripts, getAll( node, "script" ) ); - } - } - - callback.call( 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 || "" ) && - !data_priv.access( node, "globalEval" ) && jQuery.contains( doc, node ) ) { - - if ( node.src ) { - // Optional AJAX dependency, but won't run scripts if not present - if ( jQuery._evalUrl ) { - jQuery._evalUrl( node.src ); - } - } else { - jQuery.globalEval( node.textContent.replace( rcleanScript, "" ) ); - } - } - } - } - } - } - - return this; - } -}); - -jQuery.each({ - appendTo: "append", - prependTo: "prepend", - insertBefore: "before", - insertAfter: "after", - replaceAll: "replaceWith" -}, function( name, original ) { - jQuery.fn[ name ] = function( selector ) { - var elems, - ret = [], - insert = jQuery( selector ), - last = insert.length - 1, - i = 0; - - for ( ; i <= last; i++ ) { - elems = i === last ? this : this.clone( true ); - jQuery( insert[ i ] )[ original ]( elems ); - - // Support: QtWebKit - // .get() because push.apply(_, arraylike) throws - push.apply( ret, elems.get() ); - } - - return this.pushStack( ret ); - }; -}); - -return jQuery; -}); diff --git a/src/main/webapp/bower_components/jquery/src/manipulation/_evalUrl.js b/src/main/webapp/bower_components/jquery/src/manipulation/_evalUrl.js deleted file mode 100644 index 6704749a..00000000 --- a/src/main/webapp/bower_components/jquery/src/manipulation/_evalUrl.js +++ /dev/null @@ -1,18 +0,0 @@ -define([ - "../ajax" -], function( jQuery ) { - -jQuery._evalUrl = function( url ) { - return jQuery.ajax({ - url: url, - type: "GET", - dataType: "script", - async: false, - global: false, - "throws": true - }); -}; - -return jQuery._evalUrl; - -}); diff --git a/src/main/webapp/bower_components/jquery/src/manipulation/support.js b/src/main/webapp/bower_components/jquery/src/manipulation/support.js deleted file mode 100644 index 822a014f..00000000 --- a/src/main/webapp/bower_components/jquery/src/manipulation/support.js +++ /dev/null @@ -1,32 +0,0 @@ -define([ - "../var/support" -], function( support ) { - -(function() { - var fragment = document.createDocumentFragment(), - div = fragment.appendChild( document.createElement( "div" ) ), - input = document.createElement( "input" ); - - // Support: Safari<=5.1 - // Check state lost if the name is set (#11217) - // Support: Windows Web Apps (WWA) - // `name` and `type` must use .setAttribute for WWA (#14901) - input.setAttribute( "type", "radio" ); - input.setAttribute( "checked", "checked" ); - input.setAttribute( "name", "t" ); - - div.appendChild( input ); - - // Support: Safari<=5.1, Android<4.2 - // Older WebKit doesn't clone checked state correctly in fragments - support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; - - // Support: IE<=11+ - // Make sure textarea (and checkbox) defaultValue is properly cloned - div.innerHTML = "<textarea>x</textarea>"; - support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; -})(); - -return support; - -}); diff --git a/src/main/webapp/bower_components/jquery/src/manipulation/var/rcheckableType.js b/src/main/webapp/bower_components/jquery/src/manipulation/var/rcheckableType.js deleted file mode 100644 index c27a15dc..00000000 --- a/src/main/webapp/bower_components/jquery/src/manipulation/var/rcheckableType.js +++ /dev/null @@ -1,3 +0,0 @@ -define(function() { - return (/^(?:checkbox|radio)$/i); -}); diff --git a/src/main/webapp/bower_components/jquery/src/offset.js b/src/main/webapp/bower_components/jquery/src/offset.js deleted file mode 100644 index 4c34fd0e..00000000 --- a/src/main/webapp/bower_components/jquery/src/offset.js +++ /dev/null @@ -1,207 +0,0 @@ -define([ - "./core", - "./var/strundefined", - "./core/access", - "./css/var/rnumnonpx", - "./css/curCSS", - "./css/addGetHookIf", - "./css/support", - - "./core/init", - "./css", - "./selector" // contains -], function( jQuery, strundefined, access, rnumnonpx, curCSS, addGetHookIf, support ) { - -var docElem = window.document.documentElement; - -/** - * Gets a window from an element - */ -function getWindow( elem ) { - return jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView; -} - -jQuery.offset = { - setOffset: function( elem, options, i ) { - var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition, - position = jQuery.css( elem, "position" ), - curElem = jQuery( elem ), - props = {}; - - // Set position first, in-case top/left are set even on static elem - if ( position === "static" ) { - elem.style.position = "relative"; - } - - curOffset = curElem.offset(); - curCSSTop = jQuery.css( elem, "top" ); - curCSSLeft = jQuery.css( elem, "left" ); - calculatePosition = ( position === "absolute" || position === "fixed" ) && - ( curCSSTop + curCSSLeft ).indexOf("auto") > -1; - - // Need to be able to calculate position if either - // top or left is auto and position is either absolute or fixed - if ( calculatePosition ) { - curPosition = curElem.position(); - curTop = curPosition.top; - curLeft = curPosition.left; - - } else { - curTop = parseFloat( curCSSTop ) || 0; - curLeft = parseFloat( curCSSLeft ) || 0; - } - - if ( jQuery.isFunction( options ) ) { - options = options.call( elem, i, curOffset ); - } - - if ( options.top != null ) { - props.top = ( options.top - curOffset.top ) + curTop; - } - if ( options.left != null ) { - props.left = ( options.left - curOffset.left ) + curLeft; - } - - if ( "using" in options ) { - options.using.call( elem, props ); - - } else { - curElem.css( props ); - } - } -}; - -jQuery.fn.extend({ - offset: function( options ) { - if ( arguments.length ) { - return options === undefined ? - this : - this.each(function( i ) { - jQuery.offset.setOffset( this, options, i ); - }); - } - - var docElem, win, - elem = this[ 0 ], - box = { top: 0, left: 0 }, - doc = elem && elem.ownerDocument; - - if ( !doc ) { - return; - } - - docElem = doc.documentElement; - - // Make sure it's not a disconnected DOM node - if ( !jQuery.contains( docElem, elem ) ) { - return box; - } - - // Support: BlackBerry 5, iOS 3 (original iPhone) - // If we don't have gBCR, just use 0,0 rather than error - if ( typeof elem.getBoundingClientRect !== strundefined ) { - box = elem.getBoundingClientRect(); - } - win = getWindow( doc ); - return { - top: box.top + win.pageYOffset - docElem.clientTop, - left: box.left + win.pageXOffset - docElem.clientLeft - }; - }, - - position: function() { - if ( !this[ 0 ] ) { - return; - } - - var offsetParent, offset, - elem = this[ 0 ], - parentOffset = { top: 0, left: 0 }; - - // Fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is its only offset parent - if ( jQuery.css( elem, "position" ) === "fixed" ) { - // Assume getBoundingClientRect is there when computed position is fixed - offset = elem.getBoundingClientRect(); - - } else { - // Get *real* offsetParent - offsetParent = this.offsetParent(); - - // Get correct offsets - offset = this.offset(); - if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) { - parentOffset = offsetParent.offset(); - } - - // Add offsetParent borders - parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ); - parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true ); - } - - // Subtract parent offsets and element margins - return { - top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ), - left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true ) - }; - }, - - offsetParent: function() { - return this.map(function() { - var offsetParent = this.offsetParent || docElem; - - while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position" ) === "static" ) ) { - offsetParent = offsetParent.offsetParent; - } - - return offsetParent || docElem; - }); - } -}); - -// Create scrollLeft and scrollTop methods -jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) { - var top = "pageYOffset" === prop; - - jQuery.fn[ method ] = function( val ) { - return access( this, function( elem, method, val ) { - var win = getWindow( elem ); - - if ( val === undefined ) { - return win ? win[ prop ] : elem[ method ]; - } - - if ( win ) { - win.scrollTo( - !top ? val : window.pageXOffset, - top ? val : window.pageYOffset - ); - - } else { - elem[ method ] = val; - } - }, method, val, arguments.length, null ); - }; -}); - -// Support: Safari<7+, Chrome<37+ -// Add the top/left cssHooks using jQuery.fn.position -// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 -// Blink bug: https://code.google.com/p/chromium/issues/detail?id=229280 -// getComputedStyle returns percent when specified for top/left/bottom/right; -// rather than make the css module depend on the offset module, just check for it here -jQuery.each( [ "top", "left" ], function( i, prop ) { - jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition, - function( elem, computed ) { - if ( computed ) { - computed = curCSS( elem, prop ); - // If curCSS returns percentage, fallback to offset - return rnumnonpx.test( computed ) ? - jQuery( elem ).position()[ prop ] + "px" : - computed; - } - } - ); -}); - -return jQuery; -}); diff --git a/src/main/webapp/bower_components/jquery/src/outro.js b/src/main/webapp/bower_components/jquery/src/outro.js deleted file mode 100644 index be4600a5..00000000 --- a/src/main/webapp/bower_components/jquery/src/outro.js +++ /dev/null @@ -1 +0,0 @@ -})); diff --git a/src/main/webapp/bower_components/jquery/src/queue.js b/src/main/webapp/bower_components/jquery/src/queue.js deleted file mode 100644 index 199c56d3..00000000 --- a/src/main/webapp/bower_components/jquery/src/queue.js +++ /dev/null @@ -1,142 +0,0 @@ -define([ - "./core", - "./data/var/data_priv", - "./deferred", - "./callbacks" -], function( jQuery, data_priv ) { - -jQuery.extend({ - queue: function( elem, type, data ) { - var queue; - - if ( elem ) { - type = ( type || "fx" ) + "queue"; - queue = data_priv.get( elem, type ); - - // Speed up dequeue by getting out quickly if this is just a lookup - if ( data ) { - if ( !queue || jQuery.isArray( data ) ) { - queue = data_priv.access( 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--; - } - - 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 public - generate a queueHooks object, or return the current one - _queueHooks: function( elem, type ) { - var key = type + "queueHooks"; - return data_priv.get( elem, key ) || data_priv.access( elem, key, { - empty: jQuery.Callbacks("once memory").add(function() { - data_priv.remove( elem, [ type + "queue", 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 ); - }); - }, - 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 = data_priv.get( elements[ i ], type + "queueHooks" ); - if ( tmp && tmp.empty ) { - count++; - tmp.empty.add( resolve ); - } - } - resolve(); - return defer.promise( obj ); - } -}); - -return jQuery; -}); diff --git a/src/main/webapp/bower_components/jquery/src/queue/delay.js b/src/main/webapp/bower_components/jquery/src/queue/delay.js deleted file mode 100644 index 4b4498ce..00000000 --- a/src/main/webapp/bower_components/jquery/src/queue/delay.js +++ /dev/null @@ -1,22 +0,0 @@ -define([ - "../core", - "../queue", - "../effects" // Delay is optional because of this dependency -], function( jQuery ) { - -// Based off of the plugin by Clint Helfers, with permission. -// http://blindsignals.com/index.php/2009/07/jquery-delay/ -jQuery.fn.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 ); - }; - }); -}; - -return jQuery.fn.delay; -}); diff --git a/src/main/webapp/bower_components/jquery/src/selector-native.js b/src/main/webapp/bower_components/jquery/src/selector-native.js deleted file mode 100644 index d8163c2f..00000000 --- a/src/main/webapp/bower_components/jquery/src/selector-native.js +++ /dev/null @@ -1,172 +0,0 @@ -define([ - "./core" -], function( jQuery ) { - -/* - * Optional (non-Sizzle) selector module for custom builds. - * - * Note that this DOES NOT SUPPORT many documented jQuery - * features in exchange for its smaller size: - * - * Attribute not equal selector - * Positional selectors (:first; :eq(n); :odd; etc.) - * Type selectors (:input; :checkbox; :button; etc.) - * State-based selectors (:animated; :visible; :hidden; etc.) - * :has(selector) - * :not(complex selector) - * custom selectors via Sizzle extensions - * Leading combinators (e.g., $collection.find("> *")) - * Reliable functionality on XML fragments - * Requiring all parts of a selector to match elements under context - * (e.g., $div.find("div > *") now matches children of $div) - * Matching against non-elements - * Reliable sorting of disconnected nodes - * querySelectorAll bug fixes (e.g., unreliable :focus on WebKit) - * - * If any of these are unacceptable tradeoffs, either use Sizzle or - * customize this stub for the project's specific needs. - */ - -var docElem = window.document.documentElement, - selector_hasDuplicate, - matches = docElem.matches || - docElem.webkitMatchesSelector || - docElem.mozMatchesSelector || - docElem.oMatchesSelector || - docElem.msMatchesSelector, - selector_sortOrder = function( a, b ) { - // Flag for duplicate removal - if ( a === b ) { - selector_hasDuplicate = true; - return 0; - } - - var compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b ); - - if ( compare ) { - // Disconnected nodes - if ( compare & 1 ) { - - // Choose the first element that is related to our document - if ( a === document || jQuery.contains(document, a) ) { - return -1; - } - if ( b === document || jQuery.contains(document, b) ) { - return 1; - } - - // Maintain original order - return 0; - } - - return compare & 4 ? -1 : 1; - } - - // Not directly comparable, sort on existence of method - return a.compareDocumentPosition ? -1 : 1; - }; - -jQuery.extend({ - find: function( selector, context, results, seed ) { - var elem, nodeType, - i = 0; - - results = results || []; - context = context || document; - - // Same basic safeguard as Sizzle - if ( !selector || typeof selector !== "string" ) { - return results; - } - - // Early return if context is not an element or document - if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) { - return []; - } - - if ( seed ) { - while ( (elem = seed[i++]) ) { - if ( jQuery.find.matchesSelector(elem, selector) ) { - results.push( elem ); - } - } - } else { - jQuery.merge( results, context.querySelectorAll(selector) ); - } - - return results; - }, - unique: function( results ) { - var elem, - duplicates = [], - i = 0, - j = 0; - - selector_hasDuplicate = false; - results.sort( selector_sortOrder ); - - if ( selector_hasDuplicate ) { - while ( (elem = results[i++]) ) { - if ( elem === results[ i ] ) { - j = duplicates.push( i ); - } - } - while ( j-- ) { - results.splice( duplicates[ j ], 1 ); - } - } - - return results; - }, - text: function( elem ) { - var node, - ret = "", - i = 0, - nodeType = elem.nodeType; - - if ( !nodeType ) { - // If no nodeType, this is expected to be an array - while ( (node = elem[i++]) ) { - // Do not traverse comment nodes - ret += jQuery.text( node ); - } - } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { - // Use textContent for elements - return elem.textContent; - } else if ( nodeType === 3 || nodeType === 4 ) { - return elem.nodeValue; - } - // Do not include comment or processing instruction nodes - - return ret; - }, - contains: function( a, b ) { - var adown = a.nodeType === 9 ? a.documentElement : a, - bup = b && b.parentNode; - return a === bup || !!( bup && bup.nodeType === 1 && adown.contains(bup) ); - }, - isXMLDoc: function( elem ) { - return (elem.ownerDocument || elem).documentElement.nodeName !== "HTML"; - }, - expr: { - attrHandle: {}, - match: { - bool: /^(?:checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped)$/i, - needsContext: /^[\x20\t\r\n\f]*[>+~]/ - } - } -}); - -jQuery.extend( jQuery.find, { - matches: function( expr, elements ) { - return jQuery.find( expr, null, null, elements ); - }, - matchesSelector: function( elem, expr ) { - return matches.call( elem, expr ); - }, - attr: function( elem, name ) { - return elem.getAttribute( name ); - } -}); - -}); diff --git a/src/main/webapp/bower_components/jquery/src/selector-sizzle.js b/src/main/webapp/bower_components/jquery/src/selector-sizzle.js deleted file mode 100644 index 7d3926b1..00000000 --- a/src/main/webapp/bower_components/jquery/src/selector-sizzle.js +++ /dev/null @@ -1,14 +0,0 @@ -define([ - "./core", - "sizzle" -], function( jQuery, Sizzle ) { - -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; - -}); diff --git a/src/main/webapp/bower_components/jquery/src/selector.js b/src/main/webapp/bower_components/jquery/src/selector.js deleted file mode 100644 index 01e9733b..00000000 --- a/src/main/webapp/bower_components/jquery/src/selector.js +++ /dev/null @@ -1 +0,0 @@ -define([ "./selector-sizzle" ]); diff --git a/src/main/webapp/bower_components/jquery/src/serialize.js b/src/main/webapp/bower_components/jquery/src/serialize.js deleted file mode 100644 index 0d6dfec6..00000000 --- a/src/main/webapp/bower_components/jquery/src/serialize.js +++ /dev/null @@ -1,111 +0,0 @@ -define([ - "./core", - "./manipulation/var/rcheckableType", - "./core/init", - "./traversing", // filter - "./attributes/prop" -], function( jQuery, rcheckableType ) { - -var r20 = /%20/g, - rbracket = /\[\]$/, - rCRLF = /\r?\n/g, - rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, - rsubmittable = /^(?:input|select|textarea|keygen)/i; - -function buildParams( prefix, obj, traditional, add ) { - var name; - - if ( jQuery.isArray( obj ) ) { - // Serialize array item. - jQuery.each( obj, function( i, v ) { - if ( traditional || rbracket.test( prefix ) ) { - // Treat each array item as a scalar. - add( prefix, v ); - - } else { - // Item is non-scalar (array or object), encode its numeric index. - buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add ); - } - }); - - } else if ( !traditional && jQuery.type( obj ) === "object" ) { - // Serialize object item. - for ( name in obj ) { - buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); - } - - } else { - // Serialize scalar item. - add( prefix, obj ); - } -} - -// Serialize an array of form elements or a set of -// key/values into a query string -jQuery.param = function( a, traditional ) { - var prefix, - s = [], - add = function( key, value ) { - // If value is a function, invoke it and return its value - value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value ); - s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value ); - }; - - // Set traditional to true for jQuery <= 1.3.2 behavior. - if ( traditional === undefined ) { - traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional; - } - - // If an array was passed in, assume that it is an array of form elements. - if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { - // Serialize the form elements - jQuery.each( a, function() { - add( this.name, this.value ); - }); - - } else { - // If traditional, encode the "old" way (the way 1.3.2 or older - // did it), otherwise encode params recursively. - for ( prefix in a ) { - buildParams( prefix, a[ prefix ], traditional, add ); - } - } - - // Return the resulting serialization - return s.join( "&" ).replace( r20, "+" ); -}; - -jQuery.fn.extend({ - serialize: function() { - return jQuery.param( this.serializeArray() ); - }, - serializeArray: function() { - return this.map(function() { - // Can add propHook for "elements" to filter or add form elements - var elements = jQuery.prop( this, "elements" ); - return elements ? jQuery.makeArray( elements ) : this; - }) - .filter(function() { - var type = this.type; - - // Use .is( ":disabled" ) so that fieldset[disabled] works - return this.name && !jQuery( this ).is( ":disabled" ) && - rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && - ( this.checked || !rcheckableType.test( type ) ); - }) - .map(function( i, elem ) { - var val = jQuery( this ).val(); - - return val == null ? - null : - jQuery.isArray( val ) ? - jQuery.map( val, function( val ) { - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - }) : - { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - }).get(); - } -}); - -return jQuery; -}); diff --git a/src/main/webapp/bower_components/jquery/src/sizzle/dist/sizzle.js b/src/main/webapp/bower_components/jquery/src/sizzle/dist/sizzle.js deleted file mode 100644 index 89aecbc2..00000000 --- a/src/main/webapp/bower_components/jquery/src/sizzle/dist/sizzle.js +++ /dev/null @@ -1,2067 +0,0 @@ -/*! - * Sizzle CSS Selector Engine v2.2.0-pre - * http://sizzlejs.com/ - * - * Copyright 2008, 2014 jQuery Foundation, Inc. and other contributors - * Released under the MIT license - * http://jquery.org/license - * - * Date: 2014-12-16 - */ -(function( window ) { - -var i, - support, - Expr, - getText, - isXML, - tokenize, - compile, - select, - outermostContext, - sortInput, - hasDuplicate, - - // Local document vars - setDocument, - document, - docElem, - documentIsHTML, - rbuggyQSA, - rbuggyMatches, - matches, - contains, - - // Instance-specific data - expando = "sizzle" + 1 * new Date(), - preferredDoc = window.document, - dirruns = 0, - done = 0, - classCache = createCache(), - tokenCache = createCache(), - compilerCache = createCache(), - sortOrder = function( a, b ) { - if ( a === b ) { - hasDuplicate = true; - } - return 0; - }, - - // General-purpose constants - MAX_NEGATIVE = 1 << 31, - - // Instance methods - hasOwn = ({}).hasOwnProperty, - arr = [], - pop = arr.pop, - push_native = arr.push, - push = arr.push, - slice = arr.slice, - // Use a stripped-down indexOf as it's faster than native - // http://jsperf.com/thor-indexof-vs-for/5 - indexOf = function( list, elem ) { - var i = 0, - len = list.length; - for ( ; i < len; i++ ) { - if ( list[i] === elem ) { - return i; - } - } - return -1; - }, - - booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", - - // 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#" ), - - // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors - attributes = "\\[" + whitespace + "*(" + characterEncoding + ")(?:" + whitespace + - // Operator (capture 2) - "*([*^$|!~]?=)" + whitespace + - // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" - "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + - "*\\]", - - pseudos = ":(" + characterEncoding + ")(?:\\((" + - // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: - // 1. quoted (capture 3; capture 4 or capture 5) - "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + - // 2. simple (capture 6) - "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + - // 3. anything else (capture 2) - ".*" + - ")\\)|)", - - // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter - rwhitespace = new RegExp( whitespace + "+", "g" ), - rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), - - rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), - rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), - - rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), - - rpseudo = new RegExp( pseudos ), - ridentifier = new RegExp( "^" + identifier + "$" ), - - matchExpr = { - "ID": new RegExp( "^#(" + characterEncoding + ")" ), - "CLASS": new RegExp( "^\\.(" + 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" ), - "bool": new RegExp( "^(?:" + booleans + ")$", "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" ) - }, - - rinputs = /^(?:input|select|textarea|button)$/i, - rheader = /^h\d$/i, - - rnative = /^[^{]+\{\s*\[native \w/, - - // Easily-parseable/retrievable ID or TAG or CLASS selectors - rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, - - rsibling = /[+~]/, - rescape = /'|\\/g, - - // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters - runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), - funescape = function( _, escaped, escapedWhitespace ) { - var high = "0x" + escaped - 0x10000; - // NaN means non-codepoint - // Support: Firefox<24 - // Workaround erroneous numeric interpretation of +"0x" - return high !== high || escapedWhitespace ? - escaped : - high < 0 ? - // BMP codepoint - String.fromCharCode( high + 0x10000 ) : - // Supplemental Plane codepoint (surrogate pair) - String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); - }, - - // Used for iframes - // See setDocument() - // Removing the function wrapper causes a "Permission Denied" - // error in IE - unloadHandler = function() { - setDocument(); - }; - -// Optimize for push.apply( _, NodeList ) -try { - push.apply( - (arr = slice.call( preferredDoc.childNodes )), - preferredDoc.childNodes - ); - // Support: Android<4.0 - // Detect silently failing push.apply - arr[ preferredDoc.childNodes.length ].nodeType; -} catch ( e ) { - push = { apply: arr.length ? - - // Leverage slice if possible - function( target, els ) { - push_native.apply( target, slice.call(els) ); - } : - - // Support: IE<9 - // Otherwise append directly - function( target, els ) { - var j = target.length, - i = 0; - // Can't trust NodeList.length - while ( (target[j++] = els[i++]) ) {} - target.length = j - 1; - } - }; -} - -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 || []; - nodeType = context.nodeType; - - if ( typeof selector !== "string" || !selector || - nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { - - return results; - } - - if ( !seed && documentIsHTML ) { - - // Try to shortcut find operations when possible (e.g., not under DocumentFragment) - if ( nodeType !== 11 && (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 (jQuery #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, context.getElementsByTagName( selector ) ); - return results; - - // Speed-up: Sizzle(".CLASS") - } else if ( (m = match[3]) && support.getElementsByClassName ) { - push.apply( results, context.getElementsByClassName( m ) ); - return results; - } - } - - // QSA path - if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { - nid = old = expando; - newContext = context; - newSelector = nodeType !== 1 && 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 ) && testContext( context.parentNode ) || context; - newSelector = groups.join(","); - } - - if ( newSelector ) { - try { - push.apply( results, - newContext.querySelectorAll( newSelector ) - ); - return results; - } catch(qsaError) { - } finally { - if ( !old ) { - context.removeAttribute("id"); - } - } - } - } - } - - // All others - return select( selector.replace( rtrim, "$1" ), context, results, seed ); -} - -/** - * 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 keys = []; - - function cache( 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); - } - return cache; -} - -/** - * 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 { - // Remove from its parent by default - if ( div.parentNode ) { - div.parentNode.removeChild( div ); - } - // release memory in IE - div = null; - } -} - -/** - * Adds the same handler for all of the specified attrs - * @param {String} attrs Pipe-separated list of attributes - * @param {Function} handler The method that will be applied - */ -function addHandle( attrs, handler ) { - var arr = attrs.split("|"), - i = attrs.length; - - while ( i-- ) { - Expr.attrHandle[ arr[i] ] = handler; - } -} - -/** - * Checks document order of two siblings - * @param {Element} a - * @param {Element} b - * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b - */ -function siblingCheck( a, b ) { - var cur = b && a, - diff = cur && a.nodeType === 1 && b.nodeType === 1 && - ( ~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 - * @param {String} type - */ -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 - * @param {String} type - */ -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 - * @param {Function} fn - */ -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]); - } - } - }); - }); -} - -/** - * Checks a node for validity as a Sizzle context - * @param {Element|Object=} context - * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value - */ -function testContext( context ) { - return context && typeof context.getElementsByTagName !== "undefined" && context; -} - -// Expose support vars for convenience -support = Sizzle.support = {}; - -/** - * Detects XML nodes - * @param {Element|Object} elem An element or a document - * @returns {Boolean} True iff elem is a non-HTML XML node - */ -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 hasCompare, parent, - 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; - parent = doc.defaultView; - - // Support: IE>8 - // If iframe document is assigned to "document" variable and if iframe has been reloaded, - // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936 - // IE6-8 do not support the defaultView property so parent will be undefined - if ( parent && parent !== parent.top ) { - // IE11 does not have attachEvent, so all must suffer - if ( parent.addEventListener ) { - parent.addEventListener( "unload", unloadHandler, false ); - } else if ( parent.attachEvent ) { - parent.attachEvent( "onunload", unloadHandler ); - } - } - - /* Support tests - ---------------------------------------------------------------------- */ - documentIsHTML = !isXML( doc ); - - /* Attributes - ---------------------------------------------------------------------- */ - - // Support: IE<8 - // Verify that getAttribute really returns attributes and not properties - // (excepting IE8 booleans) - support.attributes = assert(function( div ) { - div.className = "i"; - return !div.getAttribute("className"); - }); - - /* getElement(s)By* - ---------------------------------------------------------------------- */ - - // Check if getElementsByTagName("*") returns only elements - support.getElementsByTagName = assert(function( div ) { - div.appendChild( doc.createComment("") ); - return !div.getElementsByTagName("*").length; - }); - - // Support: IE<9 - support.getElementsByClassName = rnative.test( doc.getElementsByClassName ); - - // Support: IE<10 - // Check if getElementById returns elements by name - // The broken getElementById methods don't pick up programatically-set names, - // so use a roundabout getElementsByName test - support.getById = assert(function( div ) { - docElem.appendChild( div ).id = expando; - return !doc.getElementsByName || !doc.getElementsByName( expando ).length; - }); - - // ID find and filter - if ( support.getById ) { - Expr.find["ID"] = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - 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 { - // Support: IE6/7 - // getElementById is not reliable as a find shortcut - delete Expr.find["ID"]; - - Expr.filter["ID"] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); - return node && node.value === attrId; - }; - }; - } - - // Tag - Expr.find["TAG"] = support.getElementsByTagName ? - function( tag, context ) { - if ( typeof context.getElementsByTagName !== "undefined" ) { - return context.getElementsByTagName( tag ); - - // DocumentFragment nodes don't have gEBTN - } else if ( support.qsa ) { - return context.querySelectorAll( tag ); - } - } : - - function( tag, context ) { - var elem, - tmp = [], - i = 0, - // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too - 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; - }; - - // Class - Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { - if ( documentIsHTML ) { - return context.getElementsByClassName( className ); - } - }; - - /* QSA/matchesSelector - ---------------------------------------------------------------------- */ - - // QSA and matchesSelector support - - // matchesSelector(:active) reports false when true (IE9/Opera 11.5) - rbuggyMatches = []; - - // qSa(:focus) reports false when true (Chrome 21) - // We allow this because of a bug in IE8/9 that throws an error - // whenever `document.activeElement` is accessed on an iframe - // So, we allow :focus to pass through QSA all the time to avoid the IE error - // See http://bugs.jquery.com/ticket/13378 - rbuggyQSA = []; - - if ( (support.qsa = rnative.test( 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 explicitly - // setting a boolean content attribute, - // since its presence should be enough - // http://bugs.jquery.com/ticket/12359 - docElem.appendChild( div ).innerHTML = "<a id='" + expando + "'></a>" + - "<select id='" + expando + "-\f]' msallowcapture=''>" + - "<option selected=''></option></select>"; - - // Support: IE8, Opera 11-12.16 - // Nothing should be selected when empty strings follow ^= or $= or *= - // The test attribute must be unknown in Opera but "safe" for WinRT - // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section - if ( div.querySelectorAll("[msallowcapture^='']").length ) { - rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); - } - - // Support: IE8 - // Boolean attributes and "value" are not treated correctly - if ( !div.querySelectorAll("[selected]").length ) { - rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); - } - - // Support: Chrome<29, Android<4.2+, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.7+ - if ( !div.querySelectorAll( "[id~=" + expando + "-]" ).length ) { - rbuggyQSA.push("~="); - } - - // 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"); - } - - // Support: Safari 8+, iOS 8+ - // https://bugs.webkit.org/show_bug.cgi?id=136851 - // In-page `selector#id sibing-combinator selector` fails - if ( !div.querySelectorAll( "a#" + expando + "+*" ).length ) { - rbuggyQSA.push(".#.+[+~]"); - } - }); - - assert(function( div ) { - // Support: Windows 8 Native Apps - // The type and name attributes are restricted during .innerHTML assignment - var input = doc.createElement("input"); - input.setAttribute( "type", "hidden" ); - div.appendChild( input ).setAttribute( "name", "D" ); - - // Support: IE8 - // Enforce case-sensitivity of name attribute - if ( div.querySelectorAll("[name=d]").length ) { - rbuggyQSA.push( "name" + 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 = rnative.test( (matches = docElem.matches || - docElem.webkitMatchesSelector || - docElem.mozMatchesSelector || - 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 = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); - rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); - - /* Contains - ---------------------------------------------------------------------- */ - hasCompare = rnative.test( docElem.compareDocumentPosition ); - - // Element contains another - // Purposefully does not implement inclusive descendent - // As in, an element does not contain itself - contains = hasCompare || rnative.test( docElem.contains ) ? - 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; - }; - - /* Sorting - ---------------------------------------------------------------------- */ - - // Document order sorting - sortOrder = hasCompare ? - function( a, b ) { - - // Flag for duplicate removal - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - // Sort on method existence if only one input has compareDocumentPosition - var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; - if ( compare ) { - return compare; - } - - // Calculate position if both inputs belong to the same document - compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? - a.compareDocumentPosition( b ) : - - // Otherwise we know they are disconnected - 1; - - // Disconnected nodes - if ( compare & 1 || - (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { - - // Choose the first element that is related to our preferred document - if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { - return -1; - } - if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { - return 1; - } - - // Maintain original order - return sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - } - - return compare & 4 ? -1 : 1; - } : - function( a, b ) { - // Exit early if the nodes are identical - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - var cur, - i = 0, - aup = a.parentNode, - bup = b.parentNode, - ap = [ a ], - bp = [ b ]; - - // Parentless nodes are either documents or disconnected - if ( !aup || !bup ) { - return a === doc ? -1 : - b === doc ? 1 : - aup ? -1 : - bup ? 1 : - sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 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; - }; - - return doc; -}; - -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']" ); - - if ( support.matchesSelector && documentIsHTML && - ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && - ( !rbuggyQSA || !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 ) { - // Set document vars if needed - if ( ( elem.ownerDocument || elem ) !== document ) { - setDocument( elem ); - } - - var fn = Expr.attrHandle[ name.toLowerCase() ], - // Don't get fooled by Object.prototype properties (jQuery #13807) - val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? - fn( elem, name, !documentIsHTML ) : - undefined; - - return val !== undefined ? - val : - support.attributes || !documentIsHTML ? - elem.getAttribute( name ) : - (val = elem.getAttributeNode(name)) && val.specified ? - val.value : - null; -}; - -Sizzle.error = function( msg ) { - throw new Error( "Syntax error, unrecognized expression: " + msg ); -}; - -/** - * Document sorting and removing duplicates - * @param {ArrayLike} results - */ -Sizzle.uniqueSort = function( results ) { - var elem, - duplicates = [], - j = 0, - i = 0; - - // Unless we *know* we can detect duplicates, assume their presence - hasDuplicate = !support.detectDuplicates; - sortInput = !support.sortStable && results.slice( 0 ); - results.sort( sortOrder ); - - if ( hasDuplicate ) { - while ( (elem = results[i++]) ) { - if ( elem === results[ i ] ) { - j = duplicates.push( i ); - } - } - while ( j-- ) { - results.splice( duplicates[ j ], 1 ); - } - } - - // Clear input after sorting to release objects - // See https://github.com/jquery/sizzle/pull/225 - sortInput = null; - - return results; -}; - -/** - * 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 - while ( (node = elem[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 (jQuery #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, - - attrHandle: {}, - - 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[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[6] && match[2]; - - if ( matchExpr["CHILD"].test( match[0] ) ) { - return null; - } - - // Accept quoted arguments as-is - if ( match[3] ) { - match[2] = match[4] || match[5] || ""; - - // 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( nodeNameSelector ) { - var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); - return nodeNameSelector === "*" ? - function() { return true; } : - 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( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && 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.replace( rwhitespace, " " ) + " " ).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( 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 ); - // Don't keep the element (issue #299) - input[0] = null; - return !results.pop(); - }; - }), - - "has": markFunction(function( selector ) { - return function( elem ) { - return Sizzle( selector, elem ).length > 0; - }; - }), - - "contains": markFunction(function( text ) { - text = text.replace( runescape, funescape ); - 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 identifier - if ( !ridentifier.test(lang || "") ) { - Sizzle.error( "unsupported lang: " + lang ); - } - lang = lang.replace( runescape, funescape ).toLowerCase(); - return function( elem ) { - var elemLang; - do { - if ( (elemLang = documentIsHTML ? - elem.lang : - elem.getAttribute("xml:lang") || elem.getAttribute("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 negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), - // but not by others (comment: 8; processing instruction: 7; etc.) - // nodeType < 6 works because attributes (2) do not appear as children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - if ( elem.nodeType < 6 ) { - 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; - return elem.nodeName.toLowerCase() === "input" && - elem.type === "text" && - - // Support: IE<8 - // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" - ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); - }, - - // 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; - }) - } -}; - -Expr.pseudos["nth"] = Expr.pseudos["eq"]; - -// 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 ); -} - -// Easy API for creating new setFilters -function setFilters() {} -setFilters.prototype = Expr.filters = Expr.pseudos; -Expr.setFilters = new setFilters(); - -tokenize = Sizzle.tokenize = function( 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 oldCache, outerCache, - newCache = [ 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 ( (oldCache = outerCache[ dir ]) && - oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { - - // Assign to newCache so results back-propagate to previous elements - return (newCache[ 2 ] = oldCache[ 2 ]); - } else { - // Reuse newcache so results back-propagate to previous elements - outerCache[ dir ] = newCache; - - // A match means we're done; a fail means we have to keep checking - if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { - 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 multipleContexts( selector, contexts, results ) { - var i = 0, - len = contexts.length; - for ( ; i < len; i++ ) { - Sizzle( selector, contexts[i], results ); - } - return results; -} - -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( 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( checkContext, elem ) > -1; - }, implicitRelative, true ), - matchers = [ function( elem, context, xml ) { - var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( - (checkContext = context).nodeType ? - matchContext( elem, context, xml ) : - matchAnyContext( elem, context, xml ) ); - // Avoid hanging onto element (issue #299) - checkContext = null; - return ret; - } ]; - - 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( - // If the preceding token was a descendant combinator, insert an implicit any-element `*` - tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) - ).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 ) { - var bySet = setMatchers.length > 0, - byElement = elementMatchers.length > 0, - superMatcher = function( seed, context, xml, results, outermost ) { - var elem, j, matcher, - matchedCount = 0, - i = "0", - unmatched = seed && [], - setMatched = [], - contextBackup = outermostContext, - // We must always have either seed elements or outermost context - elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), - // Use integer dirruns iff this is the outermost matcher - dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), - len = elems.length; - - if ( outermost ) { - outermostContext = context !== document && context; - } - - // Add elements passing elementMatchers directly to results - // Keep `i` a string if there are no elements so `matchedCount` will be "00" below - // Support: IE<9, Safari - // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id - for ( ; i !== len && (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; - } - } - - // 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, match /* 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 ( !match ) { - match = tokenize( selector ); - } - i = match.length; - while ( i-- ) { - cached = matcherFromTokens( match[i] ); - if ( cached[ expando ] ) { - setMatchers.push( cached ); - } else { - elementMatchers.push( cached ); - } - } - - // Cache the compiled function - cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); - - // Save selector and tokenization - cached.selector = selector; - } - return cached; -}; - -/** - * A low-level selection function that works with Sizzle's compiled - * selector functions - * @param {String|Function} selector A selector or a pre-compiled - * selector function built with Sizzle.compile - * @param {Element} context - * @param {Array} [results] - * @param {Array} [seed] A set of elements to match against - */ -select = Sizzle.select = function( selector, context, results, seed ) { - var i, tokens, token, type, find, - compiled = typeof selector === "function" && selector, - match = !seed && tokenize( (selector = compiled.selector || selector) ); - - results = results || []; - - // Try to minimize operations if there is no seed and 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" && - support.getById && context.nodeType === 9 && documentIsHTML && - Expr.relative[ tokens[1].type ] ) { - - context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; - if ( !context ) { - return results; - - // Precompiled matchers will still verify ancestry, so step up a level - } else if ( compiled ) { - context = context.parentNode; - } - - 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 ) && testContext( 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, seed ); - return results; - } - - break; - } - } - } - } - - // Compile and execute a filtering function if one is not provided - // Provide `match` to avoid retokenization if we modified the selector above - ( compiled || compile( selector, match ) )( - seed, - context, - !documentIsHTML, - results, - rsibling.test( selector ) && testContext( context.parentNode ) || context - ); - return results; -}; - -// One-time assignments - -// Sort stability -support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; - -// Support: Chrome 14-35+ -// Always assume duplicates if they aren't passed to the comparison function -support.detectDuplicates = !!hasDuplicate; - -// Initialize against the default document -setDocument(); - -// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) -// Detached nodes confoundingly follow *each other* -support.sortDetached = assert(function( div1 ) { - // Should return 1, but returns 4 (following) - return div1.compareDocumentPosition( document.createElement("div") ) & 1; -}); - -// Support: IE<8 -// Prevent attribute/property "interpolation" -// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx -if ( !assert(function( div ) { - div.innerHTML = "<a href='#'></a>"; - return div.firstChild.getAttribute("href") === "#" ; -}) ) { - addHandle( "type|href|height|width", function( elem, name, isXML ) { - if ( !isXML ) { - return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); - } - }); -} - -// Support: IE<9 -// Use defaultValue in place of getAttribute("value") -if ( !support.attributes || !assert(function( div ) { - div.innerHTML = "<input/>"; - div.firstChild.setAttribute( "value", "" ); - return div.firstChild.getAttribute( "value" ) === ""; -}) ) { - addHandle( "value", function( elem, name, isXML ) { - if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { - return elem.defaultValue; - } - }); -} - -// Support: IE<9 -// Use getAttributeNode to fetch booleans when getAttribute lies -if ( !assert(function( div ) { - return div.getAttribute("disabled") == null; -}) ) { - addHandle( booleans, function( elem, name, isXML ) { - var val; - if ( !isXML ) { - return elem[ name ] === true ? name.toLowerCase() : - (val = elem.getAttributeNode( name )) && val.specified ? - val.value : - null; - } - }); -} - -// EXPOSE -if ( typeof define === "function" && define.amd ) { - define(function() { return Sizzle; }); -// Sizzle requires that there be a global window in Common-JS like environments -} else if ( typeof module !== "undefined" && module.exports ) { - module.exports = Sizzle; -} else { - window.Sizzle = Sizzle; -} -// EXPOSE - -})( window ); diff --git a/src/main/webapp/bower_components/jquery/src/sizzle/dist/sizzle.min.js b/src/main/webapp/bower_components/jquery/src/sizzle/dist/sizzle.min.js deleted file mode 100644 index cf4d1a66..00000000 --- a/src/main/webapp/bower_components/jquery/src/sizzle/dist/sizzle.min.js +++ /dev/null @@ -1,3 +0,0 @@ -/*! Sizzle v2.2.0-pre | (c) 2008, 2014 jQuery Foundation, Inc. | jquery.org/license */ -!function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=hb(),z=hb(),A=hb(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},eb=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fb){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function gb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+rb(o[l]);w=ab.test(a)&&pb(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function hb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ib(a){return a[u]=!0,a}function jb(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function kb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function lb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function nb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function ob(a){return ib(function(b){return b=+b,ib(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pb(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=gb.support={},f=gb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=gb.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",eb,!1):e.attachEvent&&e.attachEvent("onunload",eb)),p=!f(g),c.attributes=jb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=jb(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=jb(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(jb(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\f]' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),jb(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&jb(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return lb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?lb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},gb.matches=function(a,b){return gb(a,null,null,b)},gb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return gb(b,n,null,[a]).length>0},gb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},gb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},gb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},gb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=gb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=gb.selectors={cacheLength:50,createPseudo:ib,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||gb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&gb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=gb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||gb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ib(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ib(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ib(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ib(function(a){return function(b){return gb(a,b).length>0}}),contains:ib(function(a){return a=a.replace(cb,db),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ib(function(a){return W.test(a||"")||gb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:ob(function(){return[0]}),last:ob(function(a,b){return[b-1]}),eq:ob(function(a,b,c){return[0>c?c+b:c]}),even:ob(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:ob(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:ob(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:ob(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=mb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=nb(b);function qb(){}qb.prototype=d.filters=d.pseudos,d.setFilters=new qb,g=gb.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?gb.error(a):z(a,i).slice(0)};function rb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function sb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function tb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ub(a,b,c){for(var d=0,e=b.length;e>d;d++)gb(a,b[d],c);return c}function vb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wb(a,b,c,d,e,f){return d&&!d[u]&&(d=wb(d)),e&&!e[u]&&(e=wb(e,f)),ib(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ub(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:vb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=vb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=vb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sb(function(a){return a===b},h,!0),l=sb(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sb(tb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wb(i>1&&tb(m),i>1&&rb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xb(a.slice(i,e)),f>e&&xb(a=a.slice(e)),f>e&&rb(a))}m.push(c)}return tb(m)}function yb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=vb(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&gb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ib(f):f}h=gb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,yb(e,d)),f.selector=a}return f},i=gb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&pb(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&rb(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&pb(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=jb(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),jb(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||kb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&jb(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||kb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),jb(function(a){return null==a.getAttribute("disabled")})||kb(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),"function"==typeof define&&define.amd?define(function(){return gb}):"undefined"!=typeof module&&module.exports?module.exports=gb:a.Sizzle=gb}(window); -//# sourceMappingURL=sizzle.min.map \ No newline at end of file diff --git a/src/main/webapp/bower_components/jquery/src/sizzle/dist/sizzle.min.map b/src/main/webapp/bower_components/jquery/src/sizzle/dist/sizzle.min.map deleted file mode 100644 index e39754eb..00000000 --- a/src/main/webapp/bower_components/jquery/src/sizzle/dist/sizzle.min.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"sizzle.min.js","sources":["sizzle.js"],"names":["window","i","support","Expr","getText","isXML","tokenize","compile","select","outermostContext","sortInput","hasDuplicate","setDocument","document","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","matches","contains","expando","Date","preferredDoc","dirruns","done","classCache","createCache","tokenCache","compilerCache","sortOrder","a","b","MAX_NEGATIVE","hasOwn","hasOwnProperty","arr","pop","push_native","push","slice","indexOf","list","elem","len","length","booleans","whitespace","characterEncoding","identifier","replace","attributes","pseudos","rwhitespace","RegExp","rtrim","rcomma","rcombinators","rattributeQuotes","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rnative","rquickExpr","rsibling","rescape","runescape","funescape","_","escaped","escapedWhitespace","high","String","fromCharCode","unloadHandler","apply","call","childNodes","nodeType","e","target","els","j","Sizzle","selector","context","results","seed","match","m","groups","old","nid","newContext","newSelector","ownerDocument","exec","getElementById","parentNode","id","getElementsByTagName","getElementsByClassName","qsa","test","nodeName","toLowerCase","getAttribute","setAttribute","toSelector","testContext","join","querySelectorAll","qsaError","removeAttribute","keys","cache","key","value","cacheLength","shift","markFunction","fn","assert","div","createElement","removeChild","addHandle","attrs","handler","split","attrHandle","siblingCheck","cur","diff","sourceIndex","nextSibling","createInputPseudo","type","name","createButtonPseudo","createPositionalPseudo","argument","matchIndexes","documentElement","node","hasCompare","parent","doc","defaultView","top","addEventListener","attachEvent","className","appendChild","createComment","getById","getElementsByName","find","filter","attrId","getAttributeNode","tag","tmp","innerHTML","input","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","unshift","expr","elements","ret","attr","val","undefined","specified","error","msg","Error","uniqueSort","duplicates","detectDuplicates","sortStable","sort","splice","textContent","firstChild","nodeValue","selectors","createPseudo","relative",">","dir","first"," ","+","~","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","check","result","what","last","simple","forward","ofType","xml","outerCache","nodeIndex","start","useCache","lastChild","pseudo","args","setFilters","idx","matched","not","matcher","unmatched","has","text","innerText","lang","elemLang","hash","location","root","focus","activeElement","hasFocus","href","tabIndex","enabled","disabled","checked","selected","selectedIndex","empty","header","button","eq","even","odd","lt","gt","radio","checkbox","file","password","image","submit","reset","prototype","filters","parseOnly","tokens","soFar","preFilters","cached","addCombinator","combinator","base","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","multipleContexts","contexts","condense","map","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","elems","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","concat","matcherFromGroupMatchers","elementMatchers","setMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","Math","random","token","compiled","div1","defaultValue","define","amd","module","exports"],"mappings":"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"} \ No newline at end of file diff --git a/src/main/webapp/bower_components/jquery/src/traversing.js b/src/main/webapp/bower_components/jquery/src/traversing.js deleted file mode 100644 index d9ff0aea..00000000 --- a/src/main/webapp/bower_components/jquery/src/traversing.js +++ /dev/null @@ -1,199 +0,0 @@ -define([ - "./core", - "./var/indexOf", - "./traversing/var/rneedsContext", - "./core/init", - "./traversing/findFilter", - "./selector" -], function( jQuery, indexOf, rneedsContext ) { - -var rparentsprev = /^(?:parents|prev(?:Until|All))/, - // Methods guaranteed to produce a unique set when starting from a unique set - guaranteedUnique = { - children: true, - contents: true, - next: true, - prev: true - }; - -jQuery.extend({ - dir: function( elem, dir, until ) { - var matched = [], - truncate = until !== undefined; - - while ( (elem = elem[ dir ]) && elem.nodeType !== 9 ) { - if ( elem.nodeType === 1 ) { - if ( truncate && jQuery( elem ).is( until ) ) { - break; - } - matched.push( elem ); - } - } - return matched; - }, - - sibling: function( n, elem ) { - var matched = []; - - for ( ; n; n = n.nextSibling ) { - if ( n.nodeType === 1 && n !== elem ) { - matched.push( n ); - } - } - - return matched; - } -}); - -jQuery.fn.extend({ - has: function( target ) { - var targets = jQuery( target, this ), - l = targets.length; - - return this.filter(function() { - var i = 0; - for ( ; i < l; i++ ) { - if ( jQuery.contains( this, targets[i] ) ) { - return true; - } - } - }); - }, - - closest: function( selectors, context ) { - var cur, - i = 0, - l = this.length, - matched = [], - pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? - jQuery( selectors, context || this.context ) : - 0; - - for ( ; i < l; i++ ) { - for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) { - // Always skip document fragments - if ( cur.nodeType < 11 && (pos ? - pos.index(cur) > -1 : - - // Don't pass non-elements to Sizzle - cur.nodeType === 1 && - jQuery.find.matchesSelector(cur, selectors)) ) { - - matched.push( cur ); - break; - } - } - } - - return this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched ); - }, - - // Determine the position of an element within the set - 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 indexOf.call( jQuery( elem ), this[ 0 ] ); - } - - // Locate the position of the desired element - return indexOf.call( this, - - // If it receives a jQuery object, the first element is used - elem.jquery ? elem[ 0 ] : elem - ); - }, - - add: function( selector, context ) { - return this.pushStack( - jQuery.unique( - jQuery.merge( this.get(), jQuery( selector, context ) ) - ) - ); - }, - - addBack: function( selector ) { - return this.add( selector == null ? - this.prevObject : this.prevObject.filter(selector) - ); - } -}); - -function sibling( cur, dir ) { - while ( (cur = cur[dir]) && 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 elem.contentDocument || jQuery.merge( [], elem.childNodes ); - } -}, function( name, fn ) { - jQuery.fn[ name ] = function( until, selector ) { - var matched = jQuery.map( this, fn, until ); - - if ( name.slice( -5 ) !== "Until" ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - matched = jQuery.filter( selector, matched ); - } - - if ( this.length > 1 ) { - // Remove duplicates - if ( !guaranteedUnique[ name ] ) { - jQuery.unique( matched ); - } - - // Reverse order for parents* and prev-derivatives - if ( rparentsprev.test( name ) ) { - matched.reverse(); - } - } - - return this.pushStack( matched ); - }; -}); - -return jQuery; -}); diff --git a/src/main/webapp/bower_components/jquery/src/traversing/findFilter.js b/src/main/webapp/bower_components/jquery/src/traversing/findFilter.js deleted file mode 100644 index dd70a73f..00000000 --- a/src/main/webapp/bower_components/jquery/src/traversing/findFilter.js +++ /dev/null @@ -1,100 +0,0 @@ -define([ - "../core", - "../var/indexOf", - "./var/rneedsContext", - "../selector" -], function( jQuery, indexOf, rneedsContext ) { - -var risSimple = /^.[^:#\[\.,]*$/; - -// Implement the identical functionality for filter and not -function winnow( elements, qualifier, not ) { - if ( jQuery.isFunction( qualifier ) ) { - return jQuery.grep( elements, function( elem, i ) { - /* jshint -W018 */ - return !!qualifier.call( elem, i, elem ) !== not; - }); - - } - - if ( qualifier.nodeType ) { - return jQuery.grep( elements, function( elem ) { - return ( elem === qualifier ) !== not; - }); - - } - - if ( typeof qualifier === "string" ) { - if ( risSimple.test( qualifier ) ) { - return jQuery.filter( qualifier, elements, not ); - } - - qualifier = jQuery.filter( qualifier, elements ); - } - - return jQuery.grep( elements, function( elem ) { - return ( indexOf.call( qualifier, elem ) >= 0 ) !== not; - }); -} - -jQuery.filter = function( expr, elems, not ) { - var elem = elems[ 0 ]; - - if ( not ) { - expr = ":not(" + expr + ")"; - } - - return elems.length === 1 && elem.nodeType === 1 ? - jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] : - jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { - return elem.nodeType === 1; - })); -}; - -jQuery.fn.extend({ - find: function( selector ) { - var i, - len = this.length, - ret = [], - self = this; - - if ( typeof selector !== "string" ) { - return this.pushStack( jQuery( selector ).filter(function() { - for ( i = 0; i < len; i++ ) { - if ( jQuery.contains( self[ i ], this ) ) { - return true; - } - } - }) ); - } - - for ( i = 0; i < len; i++ ) { - jQuery.find( selector, self[ 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 : selector; - return ret; - }, - filter: function( selector ) { - return this.pushStack( winnow(this, selector || [], false) ); - }, - not: function( selector ) { - return this.pushStack( winnow(this, selector || [], true) ); - }, - is: function( selector ) { - return !!winnow( - this, - - // 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". - typeof selector === "string" && rneedsContext.test( selector ) ? - jQuery( selector ) : - selector || [], - false - ).length; - } -}); - -}); diff --git a/src/main/webapp/bower_components/jquery/src/traversing/var/rneedsContext.js b/src/main/webapp/bower_components/jquery/src/traversing/var/rneedsContext.js deleted file mode 100644 index 3d6ae403..00000000 --- a/src/main/webapp/bower_components/jquery/src/traversing/var/rneedsContext.js +++ /dev/null @@ -1,6 +0,0 @@ -define([ - "../../core", - "../../selector" -], function( jQuery ) { - return jQuery.expr.match.needsContext; -}); diff --git a/src/main/webapp/bower_components/jquery/src/var/arr.js b/src/main/webapp/bower_components/jquery/src/var/arr.js deleted file mode 100644 index b18fc9ce..00000000 --- a/src/main/webapp/bower_components/jquery/src/var/arr.js +++ /dev/null @@ -1,3 +0,0 @@ -define(function() { - return []; -}); diff --git a/src/main/webapp/bower_components/jquery/src/var/class2type.js b/src/main/webapp/bower_components/jquery/src/var/class2type.js deleted file mode 100644 index e674c3ba..00000000 --- a/src/main/webapp/bower_components/jquery/src/var/class2type.js +++ /dev/null @@ -1,4 +0,0 @@ -define(function() { - // [[Class]] -> type pairs - return {}; -}); diff --git a/src/main/webapp/bower_components/jquery/src/var/concat.js b/src/main/webapp/bower_components/jquery/src/var/concat.js deleted file mode 100644 index 7dcf77e3..00000000 --- a/src/main/webapp/bower_components/jquery/src/var/concat.js +++ /dev/null @@ -1,5 +0,0 @@ -define([ - "./arr" -], function( arr ) { - return arr.concat; -}); diff --git a/src/main/webapp/bower_components/jquery/src/var/hasOwn.js b/src/main/webapp/bower_components/jquery/src/var/hasOwn.js deleted file mode 100644 index 32c002af..00000000 --- a/src/main/webapp/bower_components/jquery/src/var/hasOwn.js +++ /dev/null @@ -1,5 +0,0 @@ -define([ - "./class2type" -], function( class2type ) { - return class2type.hasOwnProperty; -}); diff --git a/src/main/webapp/bower_components/jquery/src/var/indexOf.js b/src/main/webapp/bower_components/jquery/src/var/indexOf.js deleted file mode 100644 index cdbe3c74..00000000 --- a/src/main/webapp/bower_components/jquery/src/var/indexOf.js +++ /dev/null @@ -1,5 +0,0 @@ -define([ - "./arr" -], function( arr ) { - return arr.indexOf; -}); diff --git a/src/main/webapp/bower_components/jquery/src/var/pnum.js b/src/main/webapp/bower_components/jquery/src/var/pnum.js deleted file mode 100644 index 40704472..00000000 --- a/src/main/webapp/bower_components/jquery/src/var/pnum.js +++ /dev/null @@ -1,3 +0,0 @@ -define(function() { - return (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source; -}); diff --git a/src/main/webapp/bower_components/jquery/src/var/push.js b/src/main/webapp/bower_components/jquery/src/var/push.js deleted file mode 100644 index ad6f0a17..00000000 --- a/src/main/webapp/bower_components/jquery/src/var/push.js +++ /dev/null @@ -1,5 +0,0 @@ -define([ - "./arr" -], function( arr ) { - return arr.push; -}); diff --git a/src/main/webapp/bower_components/jquery/src/var/rnotwhite.js b/src/main/webapp/bower_components/jquery/src/var/rnotwhite.js deleted file mode 100644 index 7c69bec5..00000000 --- a/src/main/webapp/bower_components/jquery/src/var/rnotwhite.js +++ /dev/null @@ -1,3 +0,0 @@ -define(function() { - return (/\S+/g); -}); diff --git a/src/main/webapp/bower_components/jquery/src/var/slice.js b/src/main/webapp/bower_components/jquery/src/var/slice.js deleted file mode 100644 index 614d46ca..00000000 --- a/src/main/webapp/bower_components/jquery/src/var/slice.js +++ /dev/null @@ -1,5 +0,0 @@ -define([ - "./arr" -], function( arr ) { - return arr.slice; -}); diff --git a/src/main/webapp/bower_components/jquery/src/var/strundefined.js b/src/main/webapp/bower_components/jquery/src/var/strundefined.js deleted file mode 100644 index 04e16b03..00000000 --- a/src/main/webapp/bower_components/jquery/src/var/strundefined.js +++ /dev/null @@ -1,3 +0,0 @@ -define(function() { - return typeof undefined; -}); diff --git a/src/main/webapp/bower_components/jquery/src/var/support.js b/src/main/webapp/bower_components/jquery/src/var/support.js deleted file mode 100644 index b25dbc74..00000000 --- a/src/main/webapp/bower_components/jquery/src/var/support.js +++ /dev/null @@ -1,4 +0,0 @@ -define(function() { - // All support tests are defined in their respective modules. - return {}; -}); diff --git a/src/main/webapp/bower_components/jquery/src/var/toString.js b/src/main/webapp/bower_components/jquery/src/var/toString.js deleted file mode 100644 index ca92d222..00000000 --- a/src/main/webapp/bower_components/jquery/src/var/toString.js +++ /dev/null @@ -1,5 +0,0 @@ -define([ - "./class2type" -], function( class2type ) { - return class2type.toString; -}); diff --git a/src/main/webapp/bower_components/jquery/src/wrap.js b/src/main/webapp/bower_components/jquery/src/wrap.js deleted file mode 100644 index 4958251d..00000000 --- a/src/main/webapp/bower_components/jquery/src/wrap.js +++ /dev/null @@ -1,79 +0,0 @@ -define([ - "./core", - "./core/init", - "./manipulation", // clone - "./traversing" // parent, contents -], function( jQuery ) { - -jQuery.fn.extend({ - wrapAll: function( html ) { - var wrap; - - 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 - 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.firstElementChild ) { - elem = elem.firstElementChild; - } - - 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(); - } -}); - -return jQuery; -}); diff --git a/src/main/webapp/bower_components/json3/.bower.json b/src/main/webapp/bower_components/json3/.bower.json deleted file mode 100644 index 3f37b89d..00000000 --- a/src/main/webapp/bower_components/json3/.bower.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "json3", - "version": "3.3.2", - "main": "lib/json3.js", - "repository": { - "type": "git", - "url": "git://github.com/bestiejs/json3.git" - }, - "ignore": [ - ".*", - "**/.*", - "build.js", - "index.html", - "index.js", - "component.json", - "package.json", - "benchmark", - "page", - "test", - "vendor", - "tests" - ], - "homepage": "https://github.com/bestiejs/json3", - "description": "A modern JSON implementation compatible with nearly all JavaScript platforms", - "keywords": [ - "json", - "spec", - "ecma", - "es5", - "lexer", - "parser", - "stringify" - ], - "authors": [ - "Kit Cambridge <github@kitcambridge.be>" - ], - "license": "MIT", - "_release": "3.3.2", - "_resolution": { - "type": "version", - "tag": "v3.3.2", - "commit": "dec5c2a5dc723ff867caa32a81ed93ab814f7426" - }, - "_source": "git://github.com/bestiejs/json3.git", - "_target": "3.3.2", - "_originalSource": "json3" -} \ No newline at end of file diff --git a/src/main/webapp/bower_components/json3/CHANGELOG.md b/src/main/webapp/bower_components/json3/CHANGELOG.md deleted file mode 100644 index e93fa399..00000000 --- a/src/main/webapp/bower_components/json3/CHANGELOG.md +++ /dev/null @@ -1,44 +0,0 @@ -# JSON3 Changelog - -## 3.1.0 - - * Switched to `bestiejs` organisation - * Added support for a list of properties as the `filter` argument for `JSON.stringify` - * Fixed Firefox 4 and 4.0.1 allowing non-standard extensions to `JSON.parse` - -## 3.0.0 - - * Renamed `JSON3` to `JSON` - * Removed `JSON3.Version` - * Added minified version of library - * Created a [GitHub Project Page](http://bestiejs.github.io/json3) - * Preserved alphanumeric order when iterating over shadowed properties on objects - -## 0.8.5 - - * Avoided relying on native functions `Math.abs`, and `isFinite`, and native constructors `String`, `Number`, `Object`, and `Array` - * Fixed AMD export logic - -## 0.8.0 - - * Renamed `Prim` to `JSON3` - * Added `JSON3.Version` - * Added support for AMD lodaers as the `"json"` module - * Added feature tests for native `JSON` implementations - * Added string coercion for the `source` argument in `JSON3.parse` - * Fixed the date serialization routine in `JSON3.stringify` - -## 0.5.0 - - * Fixed `Prim.stringify`'s handling of the `width` argument - * Added Microsoft's ES5 Conformance Tests to the test suite - -## 0.2.0 - - * Added `Prim.stringify` for serializing values - * Renamed `Prim.Escapes` to `Prim.Unescapes` - * Disallowed unescaped tab characters in strings passed to `Prim.parse` - -## 0.1.0 - - * Initial release of Prim diff --git a/src/main/webapp/bower_components/json3/CONTRIBUTING.md b/src/main/webapp/bower_components/json3/CONTRIBUTING.md deleted file mode 100644 index b0cb8579..00000000 --- a/src/main/webapp/bower_components/json3/CONTRIBUTING.md +++ /dev/null @@ -1,3 +0,0 @@ -# Contributing to JSON3 - -If you'd like to contribute to JSON3, please review our [contributing guidelines](http://bestiejs.github.io/json3/#section_5). Thanks! diff --git a/src/main/webapp/bower_components/json3/LICENSE b/src/main/webapp/bower_components/json3/LICENSE deleted file mode 100644 index c0de33a8..00000000 --- a/src/main/webapp/bower_components/json3/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2012-2014 Kit Cambridge. -http://kitcambridge.be/ - -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. \ No newline at end of file diff --git a/src/main/webapp/bower_components/json3/README.md b/src/main/webapp/bower_components/json3/README.md deleted file mode 100644 index 9aa7935d..00000000 --- a/src/main/webapp/bower_components/json3/README.md +++ /dev/null @@ -1,152 +0,0 @@ -# JSON 3 # - - - -[](http://travis-ci.org/bestiejs/json3) - -**JSON 3** is a modern JSON implementation compatible with a variety of JavaScript platforms, including Internet Explorer 6, Opera 7, Safari 2, and Netscape 6. The current version is **3.3.2**. - -- [Development Version](http://cdnjs.cloudflare.com/ajax/libs/json3/3.3.2/json3.js) *(43 KB; uncompressed with comments)* -- [Production Version](http://cdnjs.cloudflare.com/ajax/libs/json3/3.3.2/json3.min.js) *(3.5 KB; compressed and `gzip`-ped)* - -Special thanks to [cdnjs](http://cdnjs.com/libraries/json3/) and [jsDelivr](http://www.jsdelivr.com/#!json3) for hosting CDN copies of JSON 3. - -[JSON](http://json.org/) is a language-independent data interchange format based on a loose subset of the JavaScript grammar. Originally popularized by [Douglas Crockford](http://www.crockford.com/), the format was standardized in the [fifth edition](http://es5.github.com/) of the ECMAScript specification. The 5.1 edition, ratified in June 2011, incorporates several modifications to the grammar pertaining to the serialization of dates. - -JSON 3 exposes two functions: `stringify()` for [serializing](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/JSON/stringify) a JavaScript value to JSON, and `parse()` for [producing](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/JSON/parse) a JavaScript value from a JSON source string. It is a **drop-in replacement** for [JSON 2](http://json.org/js). The functions behave exactly as described in the ECMAScript spec, **except** for the date serialization discrepancy noted below. - -The JSON 3 parser does **not** use `eval` or regular expressions. This provides security and performance benefits in obsolete and mobile environments, where the margin is particularly significant. The complete [benchmark suite](http://jsperf.com/json3) is available on [jsPerf](http://jsperf.com/). - -The project is [hosted on GitHub](http://git.io/json3), along with the [unit tests](http://bestiejs.github.io/json3/test/test_browser.html). It is part of the [BestieJS](https://github.com/bestiejs) family, a collection of best-in-class JavaScript libraries that promote cross-platform support, specification precedents, unit testing, and plenty of documentation. - -# Changes from JSON 2 # - -JSON 3... - -* Correctly serializes primitive wrapper objects. -* Throws a `TypeError` when serializing cyclic structures (JSON 2 recurses until the call stack overflows). -* Utilizes **feature tests** to detect broken or incomplete *native* JSON implementations (JSON 2 only checks for the presence of the native functions). The tests are only executed once at runtime, so there is no additional performance cost when parsing or serializing values. - -**As of v3.2.3**, JSON 3 is compatible with [Prototype](http://prototypejs.org) 1.6.1 and older. - -In contrast to JSON 2, JSON 3 **does not**... - -* Add `toJSON()` methods to the `Boolean`, `Number`, and `String` prototypes. These are not part of any standard, and are made redundant by the design of the `stringify()` implementation. -* Add `toJSON()` or `toISOString()` methods to `Date.prototype`. See the note about date serialization below. - -## Date Serialization - -**JSON 3 deviates from the specification in one important way**: it does not define `Date#toISOString()` or `Date#toJSON()`. This preserves CommonJS compatibility and avoids polluting native prototypes. Instead, date serialization is performed internally by the `stringify()` implementation: if a date object does not define a custom `toJSON()` method, it is serialized as a [simplified ISO 8601 date-time string](http://es5.github.com/#x15.9.1.15). - -**Several native `Date#toJSON()` implementations produce date time strings that do *not* conform to the grammar outlined in the spec**. For instance, all versions of Safari 4, as well as JSON 2, fail to serialize extended years correctly. Furthermore, JSON 2 and older implementations omit the milliseconds from the date-time string (optional in ES 5, but required in 5.1). Finally, in all versions of Safari 4 and 5, serializing an invalid date will produce the string `"Invalid Date"`, rather than `null`. Because these environments exhibit other serialization bugs, however, JSON 3 will override the native `stringify()` implementation. - -Portions of the date serialization code are adapted from the [`date-shim`](https://github.com/Yaffle/date-shim) project. - -# Usage # - -## Web Browsers - - <script src="//cdnjs.cloudflare.com/ajax/libs/json3/3.3.2/json3.min.js"></script> - <script> - JSON.stringify({"Hello": 123}); - // => '{"Hello":123}' - JSON.parse("[[1, 2, 3], 1, 2, 3, 4]", function (key, value) { - if (typeof value == "number") { - value = value % 2 ? "Odd" : "Even"; - } - return value; - }); - // => [["Odd", "Even", "Odd"], "Odd", "Even", "Odd", "Even"] - </script> - -**When used in a web browser**, JSON 3 exposes an additional `JSON3` object containing the `noConflict()` and `runInContext()` functions, as well as aliases to the `stringify()` and `parse()` functions. - -### `noConflict` and `runInContext` - -* `JSON3.noConflict()` restores the original value of the global `JSON` object and returns a reference to the `JSON3` object. -* `JSON3.runInContext([context, exports])` initializes JSON 3 using the given `context` object (e.g., `window`, `global`, etc.), or the global object if omitted. If an `exports` object is specified, the `stringify()`, `parse()`, and `runInContext()` functions will be attached to it instead of a new object. - -### Asynchronous Module Loaders - -JSON 3 is defined as an [anonymous module](https://github.com/amdjs/amdjs-api/wiki/AMD#define-function-) for compatibility with [RequireJS](http://requirejs.org/), [`curl.js`](https://github.com/cujojs/curl), and other asynchronous module loaders. - - <script src="//cdnjs.cloudflare.com/ajax/libs/require.js/2.1.10/require.js"></script> - <script> - require({ - "paths": { - "json3": "./path/to/json3" - } - }, ["json3"], function (JSON) { - JSON.parse("[1, 2, 3]"); - // => [1, 2, 3] - }); - </script> - -To avoid issues with third-party scripts, **JSON 3 is exported to the global scope even when used with a module loader**. If this behavior is undesired, `JSON3.noConflict()` can be used to restore the global `JSON` object to its original value. - -## CommonJS Environments - - var JSON3 = require("./path/to/json3"); - JSON3.parse("[1, 2, 3]"); - // => [1, 2, 3] - -## JavaScript Engines - - load("path/to/json3.js"); - JSON.stringify({"Hello": 123, "Good-bye": 456}, ["Hello"], "\t"); - // => '{\n\t"Hello": 123\n}' - -# Compatibility # - -JSON 3 has been **tested** with the following web browsers, CommonJS environments, and JavaScript engines. - -## Web Browsers - -- Windows [Internet Explorer](http://www.microsoft.com/windows/internet-explorer), version 6.0 and higher -- Mozilla [Firefox](http://www.mozilla.com/firefox), version 1.0 and higher -- Apple [Safari](http://www.apple.com/safari), version 2.0 and higher -- [Opera](http://www.opera.com) 7.02 and higher -- [Mozilla](http://sillydog.org/narchive/gecko.php) 1.0, [Netscape](http://sillydog.org/narchive/) 6.2.3, and [SeaMonkey](http://www.seamonkey-project.org/) 1.0 and higher - -## CommonJS Environments - -- [Node](http://nodejs.org/) 0.2.6 and higher -- [RingoJS](http://ringojs.org/) 0.4 and higher -- [Narwhal](http://narwhaljs.org/) 0.3.2 and higher - -## JavaScript Engines - -- Mozilla [Rhino](http://www.mozilla.org/rhino) 1.5R5 and higher -- WebKit [JSC](https://trac.webkit.org/wiki/JSC) -- Google [V8](http://code.google.com/p/v8) - -## Known Incompatibilities - -* Attempting to serialize the `arguments` object may produce inconsistent results across environments due to specification version differences. As a workaround, please convert the `arguments` object to an array first: `JSON.stringify([].slice.call(arguments, 0))`. - -## Required Native Methods - -JSON 3 assumes that the following methods exist and function as described in the ECMAScript specification: - -- The `Number`, `String`, `Array`, `Object`, `Date`, `SyntaxError`, and `TypeError` constructors. -- `String.fromCharCode` -- `Object#toString` -- `Function#call` -- `Math.floor` -- `Number#toString` -- `Date#valueOf` -- `String.prototype`: `indexOf`, `charCodeAt`, `charAt`, `slice`. -- `Array.prototype`: `push`, `pop`, `join`. - -# Contribute # - -Check out a working copy of the JSON 3 source code with [Git](http://git-scm.com/): - - $ git clone git://github.com/bestiejs/json3.git - $ cd json3 - -If you'd like to contribute a feature or bug fix, you can [fork](http://help.github.com/fork-a-repo/) JSON 3, commit your changes, and [send a pull request](http://help.github.com/send-pull-requests/). Please make sure to update the unit tests in the `test` directory as well. - -Alternatively, you can use the [GitHub issue tracker](https://github.com/bestiejs/json3/issues) to submit bug reports, feature requests, and questions, or send tweets to [@kitcambridge](http://twitter.com/kitcambridge). - -JSON 3 is released under the [MIT License](http://kit.mit-license.org/). diff --git a/src/main/webapp/bower_components/json3/bower.json b/src/main/webapp/bower_components/json3/bower.json deleted file mode 100644 index 7215dada..00000000 --- a/src/main/webapp/bower_components/json3/bower.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "json3", - "version": "3.3.2", - "main": "lib/json3.js", - "repository": { - "type": "git", - "url": "git://github.com/bestiejs/json3.git" - }, - "ignore": [ - ".*", - "**/.*", - "build.js", - "index.html", - "index.js", - "component.json", - "package.json", - "benchmark", - "page", - "test", - "vendor", - "tests" - ], - "homepage": "https://github.com/bestiejs/json3", - "description": "A modern JSON implementation compatible with nearly all JavaScript platforms", - "keywords": [ - "json", - "spec", - "ecma", - "es5", - "lexer", - "parser", - "stringify" - ], - "authors": [ - "Kit Cambridge <github@kitcambridge.be>" - ], - "license": "MIT" -} diff --git a/src/main/webapp/bower_components/json3/lib/json3.js b/src/main/webapp/bower_components/json3/lib/json3.js deleted file mode 100644 index 4817c9e7..00000000 --- a/src/main/webapp/bower_components/json3/lib/json3.js +++ /dev/null @@ -1,902 +0,0 @@ -/*! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */ -;(function () { - // Detect the `define` function exposed by asynchronous module loaders. The - // strict `define` check is necessary for compatibility with `r.js`. - var isLoader = typeof define === "function" && define.amd; - - // A set of types used to distinguish objects from primitives. - var objectTypes = { - "function": true, - "object": true - }; - - // Detect the `exports` object exposed by CommonJS implementations. - var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports; - - // Use the `global` object exposed by Node (including Browserify via - // `insert-module-globals`), Narwhal, and Ringo as the default context, - // and the `window` object in browsers. Rhino exports a `global` function - // instead. - var root = objectTypes[typeof window] && window || this, - freeGlobal = freeExports && objectTypes[typeof module] && module && !module.nodeType && typeof global == "object" && global; - - if (freeGlobal && (freeGlobal["global"] === freeGlobal || freeGlobal["window"] === freeGlobal || freeGlobal["self"] === freeGlobal)) { - root = freeGlobal; - } - - // Public: Initializes JSON 3 using the given `context` object, attaching the - // `stringify` and `parse` functions to the specified `exports` object. - function runInContext(context, exports) { - context || (context = root["Object"]()); - exports || (exports = root["Object"]()); - - // Native constructor aliases. - var Number = context["Number"] || root["Number"], - String = context["String"] || root["String"], - Object = context["Object"] || root["Object"], - Date = context["Date"] || root["Date"], - SyntaxError = context["SyntaxError"] || root["SyntaxError"], - TypeError = context["TypeError"] || root["TypeError"], - Math = context["Math"] || root["Math"], - nativeJSON = context["JSON"] || root["JSON"]; - - // Delegate to the native `stringify` and `parse` implementations. - if (typeof nativeJSON == "object" && nativeJSON) { - exports.stringify = nativeJSON.stringify; - exports.parse = nativeJSON.parse; - } - - // Convenience aliases. - var objectProto = Object.prototype, - getClass = objectProto.toString, - isProperty, forEach, undef; - - // Test the `Date#getUTC*` methods. Based on work by @Yaffle. - var isExtended = new Date(-3509827334573292); - try { - // The `getUTCFullYear`, `Month`, and `Date` methods return nonsensical - // results for certain dates in Opera >= 10.53. - isExtended = isExtended.getUTCFullYear() == -109252 && isExtended.getUTCMonth() === 0 && isExtended.getUTCDate() === 1 && - // Safari < 2.0.2 stores the internal millisecond time value correctly, - // but clips the values returned by the date methods to the range of - // signed 32-bit integers ([-2 ** 31, 2 ** 31 - 1]). - isExtended.getUTCHours() == 10 && isExtended.getUTCMinutes() == 37 && isExtended.getUTCSeconds() == 6 && isExtended.getUTCMilliseconds() == 708; - } catch (exception) {} - - // Internal: Determines whether the native `JSON.stringify` and `parse` - // implementations are spec-compliant. Based on work by Ken Snyder. - function has(name) { - if (has[name] !== undef) { - // Return cached feature test result. - return has[name]; - } - var isSupported; - if (name == "bug-string-char-index") { - // IE <= 7 doesn't support accessing string characters using square - // bracket notation. IE 8 only supports this for primitives. - isSupported = "a"[0] != "a"; - } else if (name == "json") { - // Indicates whether both `JSON.stringify` and `JSON.parse` are - // supported. - isSupported = has("json-stringify") && has("json-parse"); - } else { - var value, serialized = '{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}'; - // Test `JSON.stringify`. - if (name == "json-stringify") { - var stringify = exports.stringify, stringifySupported = typeof stringify == "function" && isExtended; - if (stringifySupported) { - // A test function object with a custom `toJSON` method. - (value = function () { - return 1; - }).toJSON = value; - try { - stringifySupported = - // Firefox 3.1b1 and b2 serialize string, number, and boolean - // primitives as object literals. - stringify(0) === "0" && - // FF 3.1b1, b2, and JSON 2 serialize wrapped primitives as object - // literals. - stringify(new Number()) === "0" && - stringify(new String()) == '""' && - // FF 3.1b1, 2 throw an error if the value is `null`, `undefined`, or - // does not define a canonical JSON representation (this applies to - // objects with `toJSON` properties as well, *unless* they are nested - // within an object or array). - stringify(getClass) === undef && - // IE 8 serializes `undefined` as `"undefined"`. Safari <= 5.1.7 and - // FF 3.1b3 pass this test. - stringify(undef) === undef && - // Safari <= 5.1.7 and FF 3.1b3 throw `Error`s and `TypeError`s, - // respectively, if the value is omitted entirely. - stringify() === undef && - // FF 3.1b1, 2 throw an error if the given value is not a number, - // string, array, object, Boolean, or `null` literal. This applies to - // objects with custom `toJSON` methods as well, unless they are nested - // inside object or array literals. YUI 3.0.0b1 ignores custom `toJSON` - // methods entirely. - stringify(value) === "1" && - stringify([value]) == "[1]" && - // Prototype <= 1.6.1 serializes `[undefined]` as `"[]"` instead of - // `"[null]"`. - stringify([undef]) == "[null]" && - // YUI 3.0.0b1 fails to serialize `null` literals. - stringify(null) == "null" && - // FF 3.1b1, 2 halts serialization if an array contains a function: - // `[1, true, getClass, 1]` serializes as "[1,true,],". FF 3.1b3 - // elides non-JSON values from objects and arrays, unless they - // define custom `toJSON` methods. - stringify([undef, getClass, null]) == "[null,null,null]" && - // Simple serialization test. FF 3.1b1 uses Unicode escape sequences - // where character escape codes are expected (e.g., `\b` => `\u0008`). - stringify({ "a": [value, true, false, null, "\x00\b\n\f\r\t"] }) == serialized && - // FF 3.1b1 and b2 ignore the `filter` and `width` arguments. - stringify(null, value) === "1" && - stringify([1, 2], null, 1) == "[\n 1,\n 2\n]" && - // JSON 2, Prototype <= 1.7, and older WebKit builds incorrectly - // serialize extended years. - stringify(new Date(-8.64e15)) == '"-271821-04-20T00:00:00.000Z"' && - // The milliseconds are optional in ES 5, but required in 5.1. - stringify(new Date(8.64e15)) == '"+275760-09-13T00:00:00.000Z"' && - // Firefox <= 11.0 incorrectly serializes years prior to 0 as negative - // four-digit years instead of six-digit years. Credits: @Yaffle. - stringify(new Date(-621987552e5)) == '"-000001-01-01T00:00:00.000Z"' && - // Safari <= 5.1.5 and Opera >= 10.53 incorrectly serialize millisecond - // values less than 1000. Credits: @Yaffle. - stringify(new Date(-1)) == '"1969-12-31T23:59:59.999Z"'; - } catch (exception) { - stringifySupported = false; - } - } - isSupported = stringifySupported; - } - // Test `JSON.parse`. - if (name == "json-parse") { - var parse = exports.parse; - if (typeof parse == "function") { - try { - // FF 3.1b1, b2 will throw an exception if a bare literal is provided. - // Conforming implementations should also coerce the initial argument to - // a string prior to parsing. - if (parse("0") === 0 && !parse(false)) { - // Simple parsing test. - value = parse(serialized); - var parseSupported = value["a"].length == 5 && value["a"][0] === 1; - if (parseSupported) { - try { - // Safari <= 5.1.2 and FF 3.1b1 allow unescaped tabs in strings. - parseSupported = !parse('"\t"'); - } catch (exception) {} - if (parseSupported) { - try { - // FF 4.0 and 4.0.1 allow leading `+` signs and leading - // decimal points. FF 4.0, 4.0.1, and IE 9-10 also allow - // certain octal literals. - parseSupported = parse("01") !== 1; - } catch (exception) {} - } - if (parseSupported) { - try { - // FF 4.0, 4.0.1, and Rhino 1.7R3-R4 allow trailing decimal - // points. These environments, along with FF 3.1b1 and 2, - // also allow trailing commas in JSON objects and arrays. - parseSupported = parse("1.") !== 1; - } catch (exception) {} - } - } - } - } catch (exception) { - parseSupported = false; - } - } - isSupported = parseSupported; - } - } - return has[name] = !!isSupported; - } - - if (!has("json")) { - // Common `[[Class]]` name aliases. - var functionClass = "[object Function]", - dateClass = "[object Date]", - numberClass = "[object Number]", - stringClass = "[object String]", - arrayClass = "[object Array]", - booleanClass = "[object Boolean]"; - - // Detect incomplete support for accessing string characters by index. - var charIndexBuggy = has("bug-string-char-index"); - - // Define additional utility methods if the `Date` methods are buggy. - if (!isExtended) { - var floor = Math.floor; - // A mapping between the months of the year and the number of days between - // January 1st and the first of the respective month. - var Months = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334]; - // Internal: Calculates the number of days between the Unix epoch and the - // first day of the given month. - var getDay = function (year, month) { - return Months[month] + 365 * (year - 1970) + floor((year - 1969 + (month = +(month > 1))) / 4) - floor((year - 1901 + month) / 100) + floor((year - 1601 + month) / 400); - }; - } - - // Internal: Determines if a property is a direct property of the given - // object. Delegates to the native `Object#hasOwnProperty` method. - if (!(isProperty = objectProto.hasOwnProperty)) { - isProperty = function (property) { - var members = {}, constructor; - if ((members.__proto__ = null, members.__proto__ = { - // The *proto* property cannot be set multiple times in recent - // versions of Firefox and SeaMonkey. - "toString": 1 - }, members).toString != getClass) { - // Safari <= 2.0.3 doesn't implement `Object#hasOwnProperty`, but - // supports the mutable *proto* property. - isProperty = function (property) { - // Capture and break the object's prototype chain (see section 8.6.2 - // of the ES 5.1 spec). The parenthesized expression prevents an - // unsafe transformation by the Closure Compiler. - var original = this.__proto__, result = property in (this.__proto__ = null, this); - // Restore the original prototype chain. - this.__proto__ = original; - return result; - }; - } else { - // Capture a reference to the top-level `Object` constructor. - constructor = members.constructor; - // Use the `constructor` property to simulate `Object#hasOwnProperty` in - // other environments. - isProperty = function (property) { - var parent = (this.constructor || constructor).prototype; - return property in this && !(property in parent && this[property] === parent[property]); - }; - } - members = null; - return isProperty.call(this, property); - }; - } - - // Internal: Normalizes the `for...in` iteration algorithm across - // environments. Each enumerated key is yielded to a `callback` function. - forEach = function (object, callback) { - var size = 0, Properties, members, property; - - // Tests for bugs in the current environment's `for...in` algorithm. The - // `valueOf` property inherits the non-enumerable flag from - // `Object.prototype` in older versions of IE, Netscape, and Mozilla. - (Properties = function () { - this.valueOf = 0; - }).prototype.valueOf = 0; - - // Iterate over a new instance of the `Properties` class. - members = new Properties(); - for (property in members) { - // Ignore all properties inherited from `Object.prototype`. - if (isProperty.call(members, property)) { - size++; - } - } - Properties = members = null; - - // Normalize the iteration algorithm. - if (!size) { - // A list of non-enumerable properties inherited from `Object.prototype`. - members = ["valueOf", "toString", "toLocaleString", "propertyIsEnumerable", "isPrototypeOf", "hasOwnProperty", "constructor"]; - // IE <= 8, Mozilla 1.0, and Netscape 6.2 ignore shadowed non-enumerable - // properties. - forEach = function (object, callback) { - var isFunction = getClass.call(object) == functionClass, property, length; - var hasProperty = !isFunction && typeof object.constructor != "function" && objectTypes[typeof object.hasOwnProperty] && object.hasOwnProperty || isProperty; - for (property in object) { - // Gecko <= 1.0 enumerates the `prototype` property of functions under - // certain conditions; IE does not. - if (!(isFunction && property == "prototype") && hasProperty.call(object, property)) { - callback(property); - } - } - // Manually invoke the callback for each non-enumerable property. - for (length = members.length; property = members[--length]; hasProperty.call(object, property) && callback(property)); - }; - } else if (size == 2) { - // Safari <= 2.0.4 enumerates shadowed properties twice. - forEach = function (object, callback) { - // Create a set of iterated properties. - var members = {}, isFunction = getClass.call(object) == functionClass, property; - for (property in object) { - // Store each property name to prevent double enumeration. The - // `prototype` property of functions is not enumerated due to cross- - // environment inconsistencies. - if (!(isFunction && property == "prototype") && !isProperty.call(members, property) && (members[property] = 1) && isProperty.call(object, property)) { - callback(property); - } - } - }; - } else { - // No bugs detected; use the standard `for...in` algorithm. - forEach = function (object, callback) { - var isFunction = getClass.call(object) == functionClass, property, isConstructor; - for (property in object) { - if (!(isFunction && property == "prototype") && isProperty.call(object, property) && !(isConstructor = property === "constructor")) { - callback(property); - } - } - // Manually invoke the callback for the `constructor` property due to - // cross-environment inconsistencies. - if (isConstructor || isProperty.call(object, (property = "constructor"))) { - callback(property); - } - }; - } - return forEach(object, callback); - }; - - // Public: Serializes a JavaScript `value` as a JSON string. The optional - // `filter` argument may specify either a function that alters how object and - // array members are serialized, or an array of strings and numbers that - // indicates which properties should be serialized. The optional `width` - // argument may be either a string or number that specifies the indentation - // level of the output. - if (!has("json-stringify")) { - // Internal: A map of control characters and their escaped equivalents. - var Escapes = { - 92: "\\\\", - 34: '\\"', - 8: "\\b", - 12: "\\f", - 10: "\\n", - 13: "\\r", - 9: "\\t" - }; - - // Internal: Converts `value` into a zero-padded string such that its - // length is at least equal to `width`. The `width` must be <= 6. - var leadingZeroes = "000000"; - var toPaddedString = function (width, value) { - // The `|| 0` expression is necessary to work around a bug in - // Opera <= 7.54u2 where `0 == -0`, but `String(-0) !== "0"`. - return (leadingZeroes + (value || 0)).slice(-width); - }; - - // Internal: Double-quotes a string `value`, replacing all ASCII control - // characters (characters with code unit values between 0 and 31) with - // their escaped equivalents. This is an implementation of the - // `Quote(value)` operation defined in ES 5.1 section 15.12.3. - var unicodePrefix = "\\u00"; - var quote = function (value) { - var result = '"', index = 0, length = value.length, useCharIndex = !charIndexBuggy || length > 10; - var symbols = useCharIndex && (charIndexBuggy ? value.split("") : value); - for (; index < length; index++) { - var charCode = value.charCodeAt(index); - // If the character is a control character, append its Unicode or - // shorthand escape sequence; otherwise, append the character as-is. - switch (charCode) { - case 8: case 9: case 10: case 12: case 13: case 34: case 92: - result += Escapes[charCode]; - break; - default: - if (charCode < 32) { - result += unicodePrefix + toPaddedString(2, charCode.toString(16)); - break; - } - result += useCharIndex ? symbols[index] : value.charAt(index); - } - } - return result + '"'; - }; - - // Internal: Recursively serializes an object. Implements the - // `Str(key, holder)`, `JO(value)`, and `JA(value)` operations. - var serialize = function (property, object, callback, properties, whitespace, indentation, stack) { - var value, className, year, month, date, time, hours, minutes, seconds, milliseconds, results, element, index, length, prefix, result; - try { - // Necessary for host object support. - value = object[property]; - } catch (exception) {} - if (typeof value == "object" && value) { - className = getClass.call(value); - if (className == dateClass && !isProperty.call(value, "toJSON")) { - if (value > -1 / 0 && value < 1 / 0) { - // Dates are serialized according to the `Date#toJSON` method - // specified in ES 5.1 section 15.9.5.44. See section 15.9.1.15 - // for the ISO 8601 date time string format. - if (getDay) { - // Manually compute the year, month, date, hours, minutes, - // seconds, and milliseconds if the `getUTC*` methods are - // buggy. Adapted from @Yaffle's `date-shim` project. - date = floor(value / 864e5); - for (year = floor(date / 365.2425) + 1970 - 1; getDay(year + 1, 0) <= date; year++); - for (month = floor((date - getDay(year, 0)) / 30.42); getDay(year, month + 1) <= date; month++); - date = 1 + date - getDay(year, month); - // The `time` value specifies the time within the day (see ES - // 5.1 section 15.9.1.2). The formula `(A % B + B) % B` is used - // to compute `A modulo B`, as the `%` operator does not - // correspond to the `modulo` operation for negative numbers. - time = (value % 864e5 + 864e5) % 864e5; - // The hours, minutes, seconds, and milliseconds are obtained by - // decomposing the time within the day. See section 15.9.1.10. - hours = floor(time / 36e5) % 24; - minutes = floor(time / 6e4) % 60; - seconds = floor(time / 1e3) % 60; - milliseconds = time % 1e3; - } else { - year = value.getUTCFullYear(); - month = value.getUTCMonth(); - date = value.getUTCDate(); - hours = value.getUTCHours(); - minutes = value.getUTCMinutes(); - seconds = value.getUTCSeconds(); - milliseconds = value.getUTCMilliseconds(); - } - // Serialize extended years correctly. - value = (year <= 0 || year >= 1e4 ? (year < 0 ? "-" : "+") + toPaddedString(6, year < 0 ? -year : year) : toPaddedString(4, year)) + - "-" + toPaddedString(2, month + 1) + "-" + toPaddedString(2, date) + - // Months, dates, hours, minutes, and seconds should have two - // digits; milliseconds should have three. - "T" + toPaddedString(2, hours) + ":" + toPaddedString(2, minutes) + ":" + toPaddedString(2, seconds) + - // Milliseconds are optional in ES 5.0, but required in 5.1. - "." + toPaddedString(3, milliseconds) + "Z"; - } else { - value = null; - } - } else if (typeof value.toJSON == "function" && ((className != numberClass && className != stringClass && className != arrayClass) || isProperty.call(value, "toJSON"))) { - // Prototype <= 1.6.1 adds non-standard `toJSON` methods to the - // `Number`, `String`, `Date`, and `Array` prototypes. JSON 3 - // ignores all `toJSON` methods on these objects unless they are - // defined directly on an instance. - value = value.toJSON(property); - } - } - if (callback) { - // If a replacement function was provided, call it to obtain the value - // for serialization. - value = callback.call(object, property, value); - } - if (value === null) { - return "null"; - } - className = getClass.call(value); - if (className == booleanClass) { - // Booleans are represented literally. - return "" + value; - } else if (className == numberClass) { - // JSON numbers must be finite. `Infinity` and `NaN` are serialized as - // `"null"`. - return value > -1 / 0 && value < 1 / 0 ? "" + value : "null"; - } else if (className == stringClass) { - // Strings are double-quoted and escaped. - return quote("" + value); - } - // Recursively serialize objects and arrays. - if (typeof value == "object") { - // Check for cyclic structures. This is a linear search; performance - // is inversely proportional to the number of unique nested objects. - for (length = stack.length; length--;) { - if (stack[length] === value) { - // Cyclic structures cannot be serialized by `JSON.stringify`. - throw TypeError(); - } - } - // Add the object to the stack of traversed objects. - stack.push(value); - results = []; - // Save the current indentation level and indent one additional level. - prefix = indentation; - indentation += whitespace; - if (className == arrayClass) { - // Recursively serialize array elements. - for (index = 0, length = value.length; index < length; index++) { - element = serialize(index, value, callback, properties, whitespace, indentation, stack); - results.push(element === undef ? "null" : element); - } - result = results.length ? (whitespace ? "[\n" + indentation + results.join(",\n" + indentation) + "\n" + prefix + "]" : ("[" + results.join(",") + "]")) : "[]"; - } else { - // Recursively serialize object members. Members are selected from - // either a user-specified list of property names, or the object - // itself. - forEach(properties || value, function (property) { - var element = serialize(property, value, callback, properties, whitespace, indentation, stack); - if (element !== undef) { - // According to ES 5.1 section 15.12.3: "If `gap` {whitespace} - // is not the empty string, let `member` {quote(property) + ":"} - // be the concatenation of `member` and the `space` character." - // The "`space` character" refers to the literal space - // character, not the `space` {width} argument provided to - // `JSON.stringify`. - results.push(quote(property) + ":" + (whitespace ? " " : "") + element); - } - }); - result = results.length ? (whitespace ? "{\n" + indentation + results.join(",\n" + indentation) + "\n" + prefix + "}" : ("{" + results.join(",") + "}")) : "{}"; - } - // Remove the object from the traversed object stack. - stack.pop(); - return result; - } - }; - - // Public: `JSON.stringify`. See ES 5.1 section 15.12.3. - exports.stringify = function (source, filter, width) { - var whitespace, callback, properties, className; - if (objectTypes[typeof filter] && filter) { - if ((className = getClass.call(filter)) == functionClass) { - callback = filter; - } else if (className == arrayClass) { - // Convert the property names array into a makeshift set. - properties = {}; - for (var index = 0, length = filter.length, value; index < length; value = filter[index++], ((className = getClass.call(value)), className == stringClass || className == numberClass) && (properties[value] = 1)); - } - } - if (width) { - if ((className = getClass.call(width)) == numberClass) { - // Convert the `width` to an integer and create a string containing - // `width` number of space characters. - if ((width -= width % 1) > 0) { - for (whitespace = "", width > 10 && (width = 10); whitespace.length < width; whitespace += " "); - } - } else if (className == stringClass) { - whitespace = width.length <= 10 ? width : width.slice(0, 10); - } - } - // Opera <= 7.54u2 discards the values associated with empty string keys - // (`""`) only if they are used directly within an object member list - // (e.g., `!("" in { "": 1})`). - return serialize("", (value = {}, value[""] = source, value), callback, properties, whitespace, "", []); - }; - } - - // Public: Parses a JSON source string. - if (!has("json-parse")) { - var fromCharCode = String.fromCharCode; - - // Internal: A map of escaped control characters and their unescaped - // equivalents. - var Unescapes = { - 92: "\\", - 34: '"', - 47: "/", - 98: "\b", - 116: "\t", - 110: "\n", - 102: "\f", - 114: "\r" - }; - - // Internal: Stores the parser state. - var Index, Source; - - // Internal: Resets the parser state and throws a `SyntaxError`. - var abort = function () { - Index = Source = null; - throw SyntaxError(); - }; - - // Internal: Returns the next token, or `"$"` if the parser has reached - // the end of the source string. A token may be a string, number, `null` - // literal, or Boolean literal. - var lex = function () { - var source = Source, length = source.length, value, begin, position, isSigned, charCode; - while (Index < length) { - charCode = source.charCodeAt(Index); - switch (charCode) { - case 9: case 10: case 13: case 32: - // Skip whitespace tokens, including tabs, carriage returns, line - // feeds, and space characters. - Index++; - break; - case 123: case 125: case 91: case 93: case 58: case 44: - // Parse a punctuator token (`{`, `}`, `[`, `]`, `:`, or `,`) at - // the current position. - value = charIndexBuggy ? source.charAt(Index) : source[Index]; - Index++; - return value; - case 34: - // `"` delimits a JSON string; advance to the next character and - // begin parsing the string. String tokens are prefixed with the - // sentinel `@` character to distinguish them from punctuators and - // end-of-string tokens. - for (value = "@", Index++; Index < length;) { - charCode = source.charCodeAt(Index); - if (charCode < 32) { - // Unescaped ASCII control characters (those with a code unit - // less than the space character) are not permitted. - abort(); - } else if (charCode == 92) { - // A reverse solidus (`\`) marks the beginning of an escaped - // control character (including `"`, `\`, and `/`) or Unicode - // escape sequence. - charCode = source.charCodeAt(++Index); - switch (charCode) { - case 92: case 34: case 47: case 98: case 116: case 110: case 102: case 114: - // Revive escaped control characters. - value += Unescapes[charCode]; - Index++; - break; - case 117: - // `\u` marks the beginning of a Unicode escape sequence. - // Advance to the first character and validate the - // four-digit code point. - begin = ++Index; - for (position = Index + 4; Index < position; Index++) { - charCode = source.charCodeAt(Index); - // A valid sequence comprises four hexdigits (case- - // insensitive) that form a single hexadecimal value. - if (!(charCode >= 48 && charCode <= 57 || charCode >= 97 && charCode <= 102 || charCode >= 65 && charCode <= 70)) { - // Invalid Unicode escape sequence. - abort(); - } - } - // Revive the escaped character. - value += fromCharCode("0x" + source.slice(begin, Index)); - break; - default: - // Invalid escape sequence. - abort(); - } - } else { - if (charCode == 34) { - // An unescaped double-quote character marks the end of the - // string. - break; - } - charCode = source.charCodeAt(Index); - begin = Index; - // Optimize for the common case where a string is valid. - while (charCode >= 32 && charCode != 92 && charCode != 34) { - charCode = source.charCodeAt(++Index); - } - // Append the string as-is. - value += source.slice(begin, Index); - } - } - if (source.charCodeAt(Index) == 34) { - // Advance to the next character and return the revived string. - Index++; - return value; - } - // Unterminated string. - abort(); - default: - // Parse numbers and literals. - begin = Index; - // Advance past the negative sign, if one is specified. - if (charCode == 45) { - isSigned = true; - charCode = source.charCodeAt(++Index); - } - // Parse an integer or floating-point value. - if (charCode >= 48 && charCode <= 57) { - // Leading zeroes are interpreted as octal literals. - if (charCode == 48 && ((charCode = source.charCodeAt(Index + 1)), charCode >= 48 && charCode <= 57)) { - // Illegal octal literal. - abort(); - } - isSigned = false; - // Parse the integer component. - for (; Index < length && ((charCode = source.charCodeAt(Index)), charCode >= 48 && charCode <= 57); Index++); - // Floats cannot contain a leading decimal point; however, this - // case is already accounted for by the parser. - if (source.charCodeAt(Index) == 46) { - position = ++Index; - // Parse the decimal component. - for (; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++); - if (position == Index) { - // Illegal trailing decimal. - abort(); - } - Index = position; - } - // Parse exponents. The `e` denoting the exponent is - // case-insensitive. - charCode = source.charCodeAt(Index); - if (charCode == 101 || charCode == 69) { - charCode = source.charCodeAt(++Index); - // Skip past the sign following the exponent, if one is - // specified. - if (charCode == 43 || charCode == 45) { - Index++; - } - // Parse the exponential component. - for (position = Index; position < length && ((charCode = source.charCodeAt(position)), charCode >= 48 && charCode <= 57); position++); - if (position == Index) { - // Illegal empty exponent. - abort(); - } - Index = position; - } - // Coerce the parsed value to a JavaScript number. - return +source.slice(begin, Index); - } - // A negative sign may only precede numbers. - if (isSigned) { - abort(); - } - // `true`, `false`, and `null` literals. - if (source.slice(Index, Index + 4) == "true") { - Index += 4; - return true; - } else if (source.slice(Index, Index + 5) == "false") { - Index += 5; - return false; - } else if (source.slice(Index, Index + 4) == "null") { - Index += 4; - return null; - } - // Unrecognized token. - abort(); - } - } - // Return the sentinel `$` character if the parser has reached the end - // of the source string. - return "$"; - }; - - // Internal: Parses a JSON `value` token. - var get = function (value) { - var results, hasMembers; - if (value == "$") { - // Unexpected end of input. - abort(); - } - if (typeof value == "string") { - if ((charIndexBuggy ? value.charAt(0) : value[0]) == "@") { - // Remove the sentinel `@` character. - return value.slice(1); - } - // Parse object and array literals. - if (value == "[") { - // Parses a JSON array, returning a new JavaScript array. - results = []; - for (;; hasMembers || (hasMembers = true)) { - value = lex(); - // A closing square bracket marks the end of the array literal. - if (value == "]") { - break; - } - // If the array literal contains elements, the current token - // should be a comma separating the previous element from the - // next. - if (hasMembers) { - if (value == ",") { - value = lex(); - if (value == "]") { - // Unexpected trailing `,` in array literal. - abort(); - } - } else { - // A `,` must separate each array element. - abort(); - } - } - // Elisions and leading commas are not permitted. - if (value == ",") { - abort(); - } - results.push(get(value)); - } - return results; - } else if (value == "{") { - // Parses a JSON object, returning a new JavaScript object. - results = {}; - for (;; hasMembers || (hasMembers = true)) { - value = lex(); - // A closing curly brace marks the end of the object literal. - if (value == "}") { - break; - } - // If the object literal contains members, the current token - // should be a comma separator. - if (hasMembers) { - if (value == ",") { - value = lex(); - if (value == "}") { - // Unexpected trailing `,` in object literal. - abort(); - } - } else { - // A `,` must separate each object member. - abort(); - } - } - // Leading commas are not permitted, object property names must be - // double-quoted strings, and a `:` must separate each property - // name and value. - if (value == "," || typeof value != "string" || (charIndexBuggy ? value.charAt(0) : value[0]) != "@" || lex() != ":") { - abort(); - } - results[value.slice(1)] = get(lex()); - } - return results; - } - // Unexpected token encountered. - abort(); - } - return value; - }; - - // Internal: Updates a traversed object member. - var update = function (source, property, callback) { - var element = walk(source, property, callback); - if (element === undef) { - delete source[property]; - } else { - source[property] = element; - } - }; - - // Internal: Recursively traverses a parsed JSON object, invoking the - // `callback` function for each value. This is an implementation of the - // `Walk(holder, name)` operation defined in ES 5.1 section 15.12.2. - var walk = function (source, property, callback) { - var value = source[property], length; - if (typeof value == "object" && value) { - // `forEach` can't be used to traverse an array in Opera <= 8.54 - // because its `Object#hasOwnProperty` implementation returns `false` - // for array indices (e.g., `![1, 2, 3].hasOwnProperty("0")`). - if (getClass.call(value) == arrayClass) { - for (length = value.length; length--;) { - update(value, length, callback); - } - } else { - forEach(value, function (property) { - update(value, property, callback); - }); - } - } - return callback.call(source, property, value); - }; - - // Public: `JSON.parse`. See ES 5.1 section 15.12.2. - exports.parse = function (source, callback) { - var result, value; - Index = 0; - Source = "" + source; - result = get(lex()); - // If a JSON string contains multiple tokens, it is invalid. - if (lex() != "$") { - abort(); - } - // Reset the parser state. - Index = Source = null; - return callback && getClass.call(callback) == functionClass ? walk((value = {}, value[""] = result, value), "", callback) : result; - }; - } - } - - exports["runInContext"] = runInContext; - return exports; - } - - if (freeExports && !isLoader) { - // Export for CommonJS environments. - runInContext(root, freeExports); - } else { - // Export for web browsers and JavaScript engines. - var nativeJSON = root.JSON, - previousJSON = root["JSON3"], - isRestored = false; - - var JSON3 = runInContext(root, (root["JSON3"] = { - // Public: Restores the original value of the global `JSON` object and - // returns a reference to the `JSON3` object. - "noConflict": function () { - if (!isRestored) { - isRestored = true; - root.JSON = nativeJSON; - root["JSON3"] = previousJSON; - nativeJSON = previousJSON = null; - } - return JSON3; - } - })); - - root.JSON = { - "parse": JSON3.parse, - "stringify": JSON3.stringify - }; - } - - // Export for asynchronous module loaders. - if (isLoader) { - define(function () { - return JSON3; - }); - } -}).call(this); diff --git a/src/main/webapp/bower_components/json3/lib/json3.min.js b/src/main/webapp/bower_components/json3/lib/json3.min.js deleted file mode 100644 index 5f896fa0..00000000 --- a/src/main/webapp/bower_components/json3/lib/json3.min.js +++ /dev/null @@ -1,17 +0,0 @@ -/*! JSON v3.3.2 | http://bestiejs.github.io/json3 | Copyright 2012-2014, Kit Cambridge | http://kit.mit-license.org */ -(function(){function N(p,r){function q(a){if(q[a]!==w)return q[a];var c;if("bug-string-char-index"==a)c="a"!="a"[0];else if("json"==a)c=q("json-stringify")&&q("json-parse");else{var e;if("json-stringify"==a){c=r.stringify;var b="function"==typeof c&&s;if(b){(e=function(){return 1}).toJSON=e;try{b="0"===c(0)&&"0"===c(new t)&&'""'==c(new A)&&c(u)===w&&c(w)===w&&c()===w&&"1"===c(e)&&"[1]"==c([e])&&"[null]"==c([w])&&"null"==c(null)&&"[null,null,null]"==c([w,u,null])&&'{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}'== -c({a:[e,!0,!1,null,"\x00\b\n\f\r\t"]})&&"1"===c(null,e)&&"[\n 1,\n 2\n]"==c([1,2],null,1)&&'"-271821-04-20T00:00:00.000Z"'==c(new C(-864E13))&&'"+275760-09-13T00:00:00.000Z"'==c(new C(864E13))&&'"-000001-01-01T00:00:00.000Z"'==c(new C(-621987552E5))&&'"1969-12-31T23:59:59.999Z"'==c(new C(-1))}catch(f){b=!1}}c=b}if("json-parse"==a){c=r.parse;if("function"==typeof c)try{if(0===c("0")&&!c(!1)){e=c('{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}');var n=5==e.a.length&&1===e.a[0];if(n){try{n=!c('"\t"')}catch(d){}if(n)try{n= -1!==c("01")}catch(g){}if(n)try{n=1!==c("1.")}catch(m){}}}}catch(X){n=!1}c=n}}return q[a]=!!c}p||(p=k.Object());r||(r=k.Object());var t=p.Number||k.Number,A=p.String||k.String,H=p.Object||k.Object,C=p.Date||k.Date,G=p.SyntaxError||k.SyntaxError,K=p.TypeError||k.TypeError,L=p.Math||k.Math,I=p.JSON||k.JSON;"object"==typeof I&&I&&(r.stringify=I.stringify,r.parse=I.parse);var H=H.prototype,u=H.toString,v,B,w,s=new C(-0xc782b5b800cec);try{s=-109252==s.getUTCFullYear()&&0===s.getUTCMonth()&&1===s.getUTCDate()&& -10==s.getUTCHours()&&37==s.getUTCMinutes()&&6==s.getUTCSeconds()&&708==s.getUTCMilliseconds()}catch(Q){}if(!q("json")){var D=q("bug-string-char-index");if(!s)var x=L.floor,M=[0,31,59,90,120,151,181,212,243,273,304,334],E=function(a,c){return M[c]+365*(a-1970)+x((a-1969+(c=+(1<c)))/4)-x((a-1901+c)/100)+x((a-1601+c)/400)};(v=H.hasOwnProperty)||(v=function(a){var c={},e;(c.__proto__=null,c.__proto__={toString:1},c).toString!=u?v=function(a){var c=this.__proto__;a=a in(this.__proto__=null,this);this.__proto__= -c;return a}:(e=c.constructor,v=function(a){var c=(this.constructor||e).prototype;return a in this&&!(a in c&&this[a]===c[a])});c=null;return v.call(this,a)});B=function(a,c){var e=0,b,f,n;(b=function(){this.valueOf=0}).prototype.valueOf=0;f=new b;for(n in f)v.call(f,n)&&e++;b=f=null;e?B=2==e?function(a,c){var e={},b="[object Function]"==u.call(a),f;for(f in a)b&&"prototype"==f||v.call(e,f)||!(e[f]=1)||!v.call(a,f)||c(f)}:function(a,c){var e="[object Function]"==u.call(a),b,f;for(b in a)e&&"prototype"== -b||!v.call(a,b)||(f="constructor"===b)||c(b);(f||v.call(a,b="constructor"))&&c(b)}:(f="valueOf toString toLocaleString propertyIsEnumerable isPrototypeOf hasOwnProperty constructor".split(" "),B=function(a,c){var e="[object Function]"==u.call(a),b,h=!e&&"function"!=typeof a.constructor&&F[typeof a.hasOwnProperty]&&a.hasOwnProperty||v;for(b in a)e&&"prototype"==b||!h.call(a,b)||c(b);for(e=f.length;b=f[--e];h.call(a,b)&&c(b));});return B(a,c)};if(!q("json-stringify")){var U={92:"\\\\",34:'\\"',8:"\\b", -12:"\\f",10:"\\n",13:"\\r",9:"\\t"},y=function(a,c){return("000000"+(c||0)).slice(-a)},R=function(a){for(var c='"',b=0,h=a.length,f=!D||10<h,n=f&&(D?a.split(""):a);b<h;b++){var d=a.charCodeAt(b);switch(d){case 8:case 9:case 10:case 12:case 13:case 34:case 92:c+=U[d];break;default:if(32>d){c+="\\u00"+y(2,d.toString(16));break}c+=f?n[b]:a.charAt(b)}}return c+'"'},O=function(a,c,b,h,f,n,d){var g,m,k,l,p,r,s,t,q;try{g=c[a]}catch(z){}if("object"==typeof g&&g)if(m=u.call(g),"[object Date]"!=m||v.call(g, -"toJSON"))"function"==typeof g.toJSON&&("[object Number]"!=m&&"[object String]"!=m&&"[object Array]"!=m||v.call(g,"toJSON"))&&(g=g.toJSON(a));else if(g>-1/0&&g<1/0){if(E){l=x(g/864E5);for(m=x(l/365.2425)+1970-1;E(m+1,0)<=l;m++);for(k=x((l-E(m,0))/30.42);E(m,k+1)<=l;k++);l=1+l-E(m,k);p=(g%864E5+864E5)%864E5;r=x(p/36E5)%24;s=x(p/6E4)%60;t=x(p/1E3)%60;p%=1E3}else m=g.getUTCFullYear(),k=g.getUTCMonth(),l=g.getUTCDate(),r=g.getUTCHours(),s=g.getUTCMinutes(),t=g.getUTCSeconds(),p=g.getUTCMilliseconds(); -g=(0>=m||1E4<=m?(0>m?"-":"+")+y(6,0>m?-m:m):y(4,m))+"-"+y(2,k+1)+"-"+y(2,l)+"T"+y(2,r)+":"+y(2,s)+":"+y(2,t)+"."+y(3,p)+"Z"}else g=null;b&&(g=b.call(c,a,g));if(null===g)return"null";m=u.call(g);if("[object Boolean]"==m)return""+g;if("[object Number]"==m)return g>-1/0&&g<1/0?""+g:"null";if("[object String]"==m)return R(""+g);if("object"==typeof g){for(a=d.length;a--;)if(d[a]===g)throw K();d.push(g);q=[];c=n;n+=f;if("[object Array]"==m){k=0;for(a=g.length;k<a;k++)m=O(k,g,b,h,f,n,d),q.push(m===w?"null": -m);a=q.length?f?"[\n"+n+q.join(",\n"+n)+"\n"+c+"]":"["+q.join(",")+"]":"[]"}else B(h||g,function(a){var c=O(a,g,b,h,f,n,d);c!==w&&q.push(R(a)+":"+(f?" ":"")+c)}),a=q.length?f?"{\n"+n+q.join(",\n"+n)+"\n"+c+"}":"{"+q.join(",")+"}":"{}";d.pop();return a}};r.stringify=function(a,c,b){var h,f,n,d;if(F[typeof c]&&c)if("[object Function]"==(d=u.call(c)))f=c;else if("[object Array]"==d){n={};for(var g=0,k=c.length,l;g<k;l=c[g++],(d=u.call(l),"[object String]"==d||"[object Number]"==d)&&(n[l]=1));}if(b)if("[object Number]"== -(d=u.call(b))){if(0<(b-=b%1))for(h="",10<b&&(b=10);h.length<b;h+=" ");}else"[object String]"==d&&(h=10>=b.length?b:b.slice(0,10));return O("",(l={},l[""]=a,l),f,n,h,"",[])}}if(!q("json-parse")){var V=A.fromCharCode,W={92:"\\",34:'"',47:"/",98:"\b",116:"\t",110:"\n",102:"\f",114:"\r"},b,J,l=function(){b=J=null;throw G();},z=function(){for(var a=J,c=a.length,e,h,f,k,d;b<c;)switch(d=a.charCodeAt(b),d){case 9:case 10:case 13:case 32:b++;break;case 123:case 125:case 91:case 93:case 58:case 44:return e= -D?a.charAt(b):a[b],b++,e;case 34:e="@";for(b++;b<c;)if(d=a.charCodeAt(b),32>d)l();else if(92==d)switch(d=a.charCodeAt(++b),d){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:e+=W[d];b++;break;case 117:h=++b;for(f=b+4;b<f;b++)d=a.charCodeAt(b),48<=d&&57>=d||97<=d&&102>=d||65<=d&&70>=d||l();e+=V("0x"+a.slice(h,b));break;default:l()}else{if(34==d)break;d=a.charCodeAt(b);for(h=b;32<=d&&92!=d&&34!=d;)d=a.charCodeAt(++b);e+=a.slice(h,b)}if(34==a.charCodeAt(b))return b++,e;l();default:h= -b;45==d&&(k=!0,d=a.charCodeAt(++b));if(48<=d&&57>=d){for(48==d&&(d=a.charCodeAt(b+1),48<=d&&57>=d)&&l();b<c&&(d=a.charCodeAt(b),48<=d&&57>=d);b++);if(46==a.charCodeAt(b)){for(f=++b;f<c&&(d=a.charCodeAt(f),48<=d&&57>=d);f++);f==b&&l();b=f}d=a.charCodeAt(b);if(101==d||69==d){d=a.charCodeAt(++b);43!=d&&45!=d||b++;for(f=b;f<c&&(d=a.charCodeAt(f),48<=d&&57>=d);f++);f==b&&l();b=f}return+a.slice(h,b)}k&&l();if("true"==a.slice(b,b+4))return b+=4,!0;if("false"==a.slice(b,b+5))return b+=5,!1;if("null"==a.slice(b, -b+4))return b+=4,null;l()}return"$"},P=function(a){var c,b;"$"==a&&l();if("string"==typeof a){if("@"==(D?a.charAt(0):a[0]))return a.slice(1);if("["==a){for(c=[];;b||(b=!0)){a=z();if("]"==a)break;b&&(","==a?(a=z(),"]"==a&&l()):l());","==a&&l();c.push(P(a))}return c}if("{"==a){for(c={};;b||(b=!0)){a=z();if("}"==a)break;b&&(","==a?(a=z(),"}"==a&&l()):l());","!=a&&"string"==typeof a&&"@"==(D?a.charAt(0):a[0])&&":"==z()||l();c[a.slice(1)]=P(z())}return c}l()}return a},T=function(a,b,e){e=S(a,b,e);e=== -w?delete a[b]:a[b]=e},S=function(a,b,e){var h=a[b],f;if("object"==typeof h&&h)if("[object Array]"==u.call(h))for(f=h.length;f--;)T(h,f,e);else B(h,function(a){T(h,a,e)});return e.call(a,b,h)};r.parse=function(a,c){var e,h;b=0;J=""+a;e=P(z());"$"!=z()&&l();b=J=null;return c&&"[object Function]"==u.call(c)?S((h={},h[""]=e,h),"",c):e}}}r.runInContext=N;return r}var K=typeof define==="function"&&define.amd,F={"function":!0,object:!0},G=F[typeof exports]&&exports&&!exports.nodeType&&exports,k=F[typeof window]&& -window||this,t=G&&F[typeof module]&&module&&!module.nodeType&&"object"==typeof global&&global;!t||t.global!==t&&t.window!==t&&t.self!==t||(k=t);if(G&&!K)N(k,G);else{var L=k.JSON,Q=k.JSON3,M=!1,A=N(k,k.JSON3={noConflict:function(){M||(M=!0,k.JSON=L,k.JSON3=Q,L=Q=null);return A}});k.JSON={parse:A.parse,stringify:A.stringify}}K&&define(function(){return A})}).call(this); diff --git a/src/main/webapp/index.html b/src/main/webapp/index.html index e98ef1fe..63775e3c 100644 --- a/src/main/webapp/index.html +++ b/src/main/webapp/index.html @@ -2,25 +2,31 @@ <html ng-app="petClinicApp"> - <head> - <title>PetClinic :: a Spring Framework demonstration</title> - - <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" /> - <link href="resources/css/petclinic.css" rel="stylesheet"/> - <script src="bower_components/angular/angular.js"></script> - <script src="bower_components/angular-ui-router/release/angular-ui-router.js"></script> - <script src="bower_components/angular-resource/angular-resource.js"></script> - <script src="scripts/app/app.js"></script> - <script src="scripts/app/main/MainController.js"></script> - <script src="scripts/app/vet/VetController.js"></script> - <script src="scripts/app/owner/OwnerController.js"></script> - <script src="scripts/app/pet/PetController.js"></script> - </head> - - <body class="container"> - <div ui-view="header"></div> - <div ui-view="content"></div> - <div ui-view="footer"></div> - </body> +<head> + <title>PetClinic :: a Spring Framework demonstration</title> + <link rel="stylesheet" href="webjars/bootstrap/3.3.7/css/bootstrap.min.css"/> + <link rel="stylesheet" href="resources/css/petclinic.css"/> + + <script src="webjars/jquery/3.1.0/jquery.min.js"></script> + <script src="webjars/bootstrap/3.3.7/js/bootstrap.min.js"></script> + + <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.8/angular.min.js"></script> + <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.8/angular-route.min.js"></script> + <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.8/angular-resource.min.js"></script> + + <script src="scripts/app/app.js"></script> + <script src="scripts/app/owner-list/owner-list.component.js"></script> + <script src="scripts/app/owner-details/owner-details.component.js"></script> + <script src="scripts/app/owner-form/owner-form.component.js"></script> + <script src="scripts/app/pet-form/pet-form.component.js"></script> + <script src="scripts/app/vet-list/vet-list.component.js"></script> + +</head> + +<body class="container"> +<layout-nav></layout-nav> +<div ng-view></div> +<layout-footer></layout-footer> +</body> </html> diff --git a/src/main/webapp/scripts/app/app.js b/src/main/webapp/scripts/app/app.js index 671bb041..b9245802 100644 --- a/src/main/webapp/scripts/app/app.js +++ b/src/main/webapp/scripts/app/app.js @@ -1,113 +1,47 @@ 'use strict'; - -//Square brackets should only be defined once below (and not in other JS files) -angular.module('controllers', ['services', 'ngResource']); -angular.module('services', ['ngResource']); - - /* App Module */ var petClinicApp = angular.module('petClinicApp', [ - 'ui.router', 'controllers', 'services' -]); - - - -petClinicApp.config(['$stateProvider', '$urlRouterProvider', function($stateProvider, $urlRouterProvider) { - $urlRouterProvider.otherwise('/'); - - $stateProvider - .state('app', { - url: '/', - controller: 'mainController', - views: { - 'header': { templateUrl: 'scripts/app/fragments/bodyHeader.html'}, - 'content': { templateUrl: 'scripts/app/main/main.html'}, - 'footer': { templateUrl: 'scripts/app/fragments/footer.html'} - } - }). - state('app.ownersearch', { - url: 'owner/search', - views: { - 'content@': { - controller: 'ownerSearchController', - templateUrl: 'scripts/app/owner/ownerSearchForm.html' - } - } - - }). - state('app.ownerlist', { - url: 'owner/list?lastName', - views: { - 'content@': { - controller: 'ownerListController', - templateUrl: 'scripts/app/owner/ownerList.html' - } - } - - }). - state('app.ownerdetail', { - url: 'owner/:id', - views: { - 'content@': { - controller: 'ownerDetailController', - templateUrl: 'scripts/app/owner/ownerDetail.html' - } - } - - }). - state('app.ownercreate', { - url: 'owner', - views: { - 'content@': { - controller: 'ownerFormController', - templateUrl: 'scripts/app/owner/ownerForm.html' - } - } - - }). - state('app.owneredit', { - url: 'owner/:id/edit', - views: { - 'content@': { - controller: 'ownerFormController', - templateUrl: 'scripts/app/owner/ownerForm.html' - } - } - - }). - state('app.vets', { - url: 'vets', - views: { - 'content@': { - controller: 'vetController', - templateUrl: 'scripts/app/vet/vetList.html' - } - } - - }). - state('app.petedit', { - url: 'owner/:ownerid/pet/:petid', - views: { - 'content@': { - controller: 'petFormController', - templateUrl: 'scripts/app/pet/petForm.html' - } - } - - }). - state('app.petcreate', { - url: 'owner/:ownerid/pet', - views: { - 'content@': { - controller: 'petFormController', - templateUrl: 'scripts/app/pet/petForm.html' - } - } - - }); - }]); - - - - - + 'ngRoute', 'layoutNav', 'layoutFooter', 'layoutWelcome', + 'ownerList', 'ownerDetails', 'ownerForm','petForm', 'vetList']); + +petClinicApp.config(['$locationProvider', '$routeProvider', function ($locationProvider, $routeProvider) { + + $locationProvider.hashPrefix('!'); + + $routeProvider.when('/welcome', { + template: '<layout-welcome></layout-welcome>' + }).when('/owners/:ownerId', { + template: '<owner-details></owner-details>' + }).when('/owners', { + template: '<owner-list></owner-list>' + }).when('/owners/:ownerId/edit', { + template: '<owner-form></owner-form>' + }).when('/new-owner', { + template: '<owner-form></owner-form>' + }).when('/owners/:ownerId/new-pet', { + template: '<pet-form></pet-form>' + }).when('/owners/:ownerId/pets/:petId', { + template: '<pet-form></pet-form>' + }).when('/vets', { + template: '<vet-list></vet-list>' + }).otherwise('/welcome'); + +}]); + +angular.module('layoutWelcome', []); + +angular.module("layoutWelcome").component("layoutWelcome", { + templateUrl: "scripts/app/fragments/welcome.html" +}); + +angular.module('layoutNav', []); + +angular.module("layoutNav").component("layoutNav", { + templateUrl: "scripts/app/fragments/nav.html" +}); + +angular.module('layoutFooter', []); + +angular.module("layoutFooter").component("layoutFooter", { + templateUrl: "scripts/app/fragments/footer.html" +}); \ No newline at end of file diff --git a/src/main/webapp/scripts/app/fragments/bodyHeader.html b/src/main/webapp/scripts/app/fragments/bodyHeader.html deleted file mode 100644 index 43faefce..00000000 --- a/src/main/webapp/scripts/app/fragments/bodyHeader.html +++ /dev/null @@ -1,24 +0,0 @@ -<nav class="navbar navbar-default"> - <div class="container-fluid"> - <!-- Brand and toggle get grouped for better mobile display --> - <div class="navbar-header"> - <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" - data-target="#bs-example-navbar-collapse-1" aria-expanded="false"> - <span class="sr-only">Toggle navigation</span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - </button> - <a class="navbar-brand" ui-sref="app">Pet Clinic</a> - - </div> - - <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> - <ul class="nav navbar-nav"> - <li><a ui-sref="app">Home</a></li> - <li><a ui-sref="app.ownersearch">Owner</a></li> - <li><a ui-sref="app.vets">Vets</a></li> - </ul> - </div> - </div> -</nav> \ No newline at end of file diff --git a/src/main/webapp/scripts/app/fragments/footer.html b/src/main/webapp/scripts/app/fragments/footer.html index 7a64bc41..5d554e8d 100644 --- a/src/main/webapp/scripts/app/fragments/footer.html +++ b/src/main/webapp/scripts/app/fragments/footer.html @@ -1,4 +1,4 @@ -<div style="text-align: right"> +<div style="text-align: right; padding-top: 3em;"> <img src="resources/images/spring-pivotal-logo.png" alt="Sponsored by Pivotal"/> </div> diff --git a/src/main/webapp/scripts/app/fragments/nav.html b/src/main/webapp/scripts/app/fragments/nav.html new file mode 100644 index 00000000..f6722423 --- /dev/null +++ b/src/main/webapp/scripts/app/fragments/nav.html @@ -0,0 +1,30 @@ +<nav class="navbar navbar-default"> + <div class="container-fluid"> + <div class="navbar-header"> + <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" + data-target="#main-navbar" aria-expanded="false"> + <span class="sr-only">Toggle navigation</span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="#">Pet Clinic</a> + </div> + + <div class="collapse navbar-collapse" id="main-navbar"> + <ul class="nav navbar-nav"> + <li><a href="#!/welcome">Home</a></li> + + <li class="dropdown"> + <a href="javascript:void(0)" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Owners <span class="caret"></span></a> + <ul class="dropdown-menu"> + <li><a href="#!/owners">All</a></li> + <li><a href="#!/new-owner">New</a></li> + </ul> + </li> + + <li><a href="#!/vets">Vets</a></li> + </ul> + </div> + </div> +</nav> \ No newline at end of file diff --git a/src/main/webapp/scripts/app/fragments/welcome.html b/src/main/webapp/scripts/app/fragments/welcome.html new file mode 100644 index 00000000..a91aa92e --- /dev/null +++ b/src/main/webapp/scripts/app/fragments/welcome.html @@ -0,0 +1 @@ + <p>Welcome to Petclinic </p> diff --git a/src/main/webapp/scripts/app/main/MainController.js b/src/main/webapp/scripts/app/main/MainController.js deleted file mode 100644 index 19c6c11d..00000000 --- a/src/main/webapp/scripts/app/main/MainController.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -/* Controllers */ - -angular.module('controllers').controller('mainController', ['$scope', - function($scope) { - }]); - - diff --git a/src/main/webapp/scripts/app/main/main.html b/src/main/webapp/scripts/app/main/main.html deleted file mode 100644 index 84cc02ea..00000000 --- a/src/main/webapp/scripts/app/main/main.html +++ /dev/null @@ -1,3 +0,0 @@ -<div ng-controller="mainController"> - <p>Welcome to Petclinic </p> -</div> diff --git a/src/main/webapp/scripts/app/owner-details/owner-details.component.js b/src/main/webapp/scripts/app/owner-details/owner-details.component.js new file mode 100644 index 00000000..36629b61 --- /dev/null +++ b/src/main/webapp/scripts/app/owner-details/owner-details.component.js @@ -0,0 +1,16 @@ +'use strict'; + +angular.module('ownerDetails', [ + 'ngRoute' +]); + +angular.module("ownerDetails").component("ownerDetails", { + templateUrl: "scripts/app/owner-details/owner-details.template.html", + controller: ["$http", '$routeParams', function($http, $routeParams) { + var self = this; + + $http.get('owner/' + $routeParams.ownerId).then(function(resp) { + self.owner = resp.data; + }); + }] +}); \ No newline at end of file diff --git a/src/main/webapp/scripts/app/owner-details/owner-details.template.html b/src/main/webapp/scripts/app/owner-details/owner-details.template.html new file mode 100644 index 00000000..293ce831 --- /dev/null +++ b/src/main/webapp/scripts/app/owner-details/owner-details.template.html @@ -0,0 +1,69 @@ +<h2>Owner Information</h2> + +<table class="table table-striped"> + <tr> + <th class="col-sm-3">Name</th> + <td><b>{{$ctrl.owner.firstName}} {{$ctrl.owner.lastName}}</b></td> + </tr> + <tr> + <th>Address</th> + <td>{{$ctrl.owner.address}}</td> + </tr> + <tr> + <th>City</th> + <td>{{$ctrl.owner.city}}</td> + </tr> + <tr> + <th>Telephone</th> + <td>{{$ctrl.owner.telephone}}</td> + </tr> + <tr> + <td> + <a class="btn btn-info" href="#!/owners/{{$ctrl.owner.id}}/edit">Edit Owner</a> + </td> + <td> + <a href="#!/owners/{{$ctrl.owner.id}}/new-pet" class="btn btn-success">Add New Pet</a> + </td> + </tr> +</table> + +<h2>Pets and Visits</h2> + +<table class="table" style="width:600px;"> + <tr ng-repeat="pet in $ctrl.owner.pets"> + <td valign="top" style="width: 120px;"> + <dl class="dl-horizontal"> + <dt>Name</dt> + <dd>{{pet.name}}</dd> + <dt>Birth Date</dt> + <dd>{{pet.birthDate | date:'MM/dd/yyyy'}}</dd> + <dt>Type</dt> + <dd>{{pet.type.name}}</dd> + </dl> + </td> + <td valign="top"> + <table class="table-condensed"> + <thead> + <tr> + <th>Visit Date</th> + <th>Description</th> + </tr> + </thead> + <tr ng-repeat="visit in pet.visits"> + <td>{{visit.date | date:'MM/dd/yyyy'}}</td> + <td>{{visit.description}}</td> + </tr> + <tr> + <td> + <a href="#!/owners/{{$ctrl.owner.id}}/pets/{{pet.id}}">Edit Pet</a> + </td> + <td> + <a href="...">Add Visit</a> + </td> + </tr> + </table> + </td> + </tr> +</table> + + diff --git a/src/main/webapp/scripts/app/owner-form/owner-form.component.js b/src/main/webapp/scripts/app/owner-form/owner-form.component.js new file mode 100644 index 00000000..3baf9d5f --- /dev/null +++ b/src/main/webapp/scripts/app/owner-form/owner-form.component.js @@ -0,0 +1,41 @@ +'use strict'; + +angular.module('ownerForm', [ + 'ngRoute' +]); + +angular.module("ownerForm").component("ownerForm", { + templateUrl: "/petclinic/scripts/app/owner-form/owner-form.template.html", + controller: ["$http", '$routeParams', '$location', function ($http, $routeParams, $location) { + var self = this; + + var ownerId = $routeParams.ownerId || 0; + + if (!ownerId) { + self.owner = {}; + } else { + $http.get("owner/" + ownerId).then(function(resp) { + self.owner = resp.data; + }); + } + + self.submitOwnerForm = function() { + var id = self.owner.id; + var req; + if (id) { + req = $http.put("owner/" + id, self.owner); + } else { + req = $http.post("owner", self.owner); + } + + req.then(function () { + $location.url("/owners"); + }, function (response) { + var error = response.data; + alert(error.error + "\r\n" + error.errors.map(function (e) { + return e.field + ": " + e.defaultMessage; + }).join("\r\n")); + }); + }; + }] +}); \ No newline at end of file diff --git a/src/main/webapp/scripts/app/owner-form/owner-form.template.html b/src/main/webapp/scripts/app/owner-form/owner-form.template.html new file mode 100644 index 00000000..9354af59 --- /dev/null +++ b/src/main/webapp/scripts/app/owner-form/owner-form.template.html @@ -0,0 +1,44 @@ +<h2>Owner</h2> +<form class="form-horizontal" name="ownerForm"> + <div class="form-group"> + <label class="col-sm-2 control-label">First name</label> + <div class="col-sm-4"> + <input class="form-control" ng-model="$ctrl.owner.firstName" name="firstName" required/> + <span ng-show="ownerForm.firstName.$error.required" class="help-inline">First name is required.</span> + </div> + </div> + <div class="form-group"> + <label class="col-sm-2 control-label">Last name</label> + <div class="col-sm-4"> + <input class="form-control" ng-model="$ctrl.owner.lastName" name="lastName" required/> + <span ng-show="ownerForm.lastName.$error.required" class="help-inline">Last name is required.</span> + </div> + </div> + <div class="form-group"> + <label class="col-sm-2 control-label">Address</label> + <div class="col-sm-4"> + <input class="form-control" ng-model="$ctrl.owner.address" name="address" required/> + <span ng-show="ownerForm.address.$error.required" class="help-inline">Address is required.</span> + </div> + </div> + <div class="form-group"> + <label class="col-sm-2 control-label">City</label> + <div class="col-sm-4"> + <input class="form-control" ng-model="$ctrl.owner.city" name="city" required/> + <span ng-show="ownerForm.city.$error.required" class="help-inline">City is required.</span> + </div> + </div> + <div class="form-group"> + <label class="col-sm-2 control-label">Telephone</label> + <div class="col-sm-4"> + <input class="form-control" ng-model="$ctrl.owner.telephone" name="telephone" required/> + <span ng-show="ownerForm.telephone.$error.required" class="help-inline">Telephone is required.</span> + </div> + </div> + <div class="form-group"> + <div class="col-sm-offset-2 col-sm-4"> + <button class="btn btn-primary" type="submit" ng-click="$ctrl.submitOwnerForm()">Submit</button> + </div> + </div> +</form> + diff --git a/src/main/webapp/scripts/app/owner/OwnerController.js b/src/main/webapp/scripts/app/owner-list/OwnerController.js similarity index 99% rename from src/main/webapp/scripts/app/owner/OwnerController.js rename to src/main/webapp/scripts/app/owner-list/OwnerController.js index 75284f07..6f2cddc0 100644 --- a/src/main/webapp/scripts/app/owner/OwnerController.js +++ b/src/main/webapp/scripts/app/owner-list/OwnerController.js @@ -5,8 +5,6 @@ function loadOwner($scope, $resource, $stateParams) { $scope.owner = ownerResource.get(); } - - /* * Owner Search */ diff --git a/src/main/webapp/scripts/app/owner-list/owner-list.component.js b/src/main/webapp/scripts/app/owner-list/owner-list.component.js new file mode 100644 index 00000000..aeb61b9e --- /dev/null +++ b/src/main/webapp/scripts/app/owner-list/owner-list.component.js @@ -0,0 +1,15 @@ +'use strict'; + +angular.module('ownerList', [ + 'ngRoute' +]); + +angular.module("ownerList").component("ownerList", { + templateUrl: "/petclinic/scripts/app/owner-list/owner-list.template.html", + controller: ["$http", function ($http) { + var self = this; + $http.get('/petclinic/owner/list').then(function(resp) { + self.owners = resp.data; + }); + }] +}); \ No newline at end of file diff --git a/src/main/webapp/scripts/app/owner-list/owner-list.template.html b/src/main/webapp/scripts/app/owner-list/owner-list.template.html new file mode 100644 index 00000000..178b1a86 --- /dev/null +++ b/src/main/webapp/scripts/app/owner-list/owner-list.template.html @@ -0,0 +1,24 @@ +<h2>Owners</h2> +<table class="table table-striped"> + <thead> + <tr> + <th>Name</th> + <th>Address</th> + <th>City</th> + <th>Telephone</th> + <th>Pets</th> + </tr> + </thead> + + <tr ng-repeat="owner in $ctrl.owners"> + <td> + <a href="#!/owners/{{owner.id}}"> + {{owner.firstName}} {{owner.lastName}} + </a> + </td> + <td>{{owner.address}}</td> + <td>{{owner.city}}</td> + <td>{{owner.telephone}}</td> + <td><span ng-repeat="pet in owner.pets">{{pet.name + ' '}}</span></td> + </tr> +</table> \ No newline at end of file diff --git a/src/main/webapp/scripts/app/owner/ownerDetail.html b/src/main/webapp/scripts/app/owner-list/ownerDetail.html similarity index 100% rename from src/main/webapp/scripts/app/owner/ownerDetail.html rename to src/main/webapp/scripts/app/owner-list/ownerDetail.html diff --git a/src/main/webapp/scripts/app/owner/ownerForm.html b/src/main/webapp/scripts/app/owner-list/ownerForm.html similarity index 100% rename from src/main/webapp/scripts/app/owner/ownerForm.html rename to src/main/webapp/scripts/app/owner-list/ownerForm.html diff --git a/src/main/webapp/scripts/app/owner/ownerSearchForm.html b/src/main/webapp/scripts/app/owner-list/ownerSearchForm.html similarity index 100% rename from src/main/webapp/scripts/app/owner/ownerSearchForm.html rename to src/main/webapp/scripts/app/owner-list/ownerSearchForm.html diff --git a/src/main/webapp/scripts/app/owner/ownerList.html b/src/main/webapp/scripts/app/owner/ownerList.html deleted file mode 100644 index 9a66b6ad..00000000 --- a/src/main/webapp/scripts/app/owner/ownerList.html +++ /dev/null @@ -1,26 +0,0 @@ -<div ng-controller="ownerListController"> - <table class="table table-striped"> - <thead> - <tr> - <th>Name</th> - <th>Address</th> - <th>City</th> - <th>Telephone</th> - <th>Pets</th> - </tr> - </thead> - - <tr ng-repeat="owner in ownerList"> - <td> - <a ui-sref="app.ownerdetail({id: owner.id})"> - {{owner.firstName}} {{owner.lastName}} - </a> - </td> - <td>{{owner.address}} </td> - <td>{{owner.city}} </td> - <td>{{owner.telephone}} </td> - <td><span ng-repeat="pet in owner.pets">{{pet.name + ' '}}</span></td> - - </tr> - </table> -</div> diff --git a/src/main/webapp/scripts/app/pet-form/pet-form.component.js b/src/main/webapp/scripts/app/pet-form/pet-form.component.js new file mode 100644 index 00000000..36b766ba --- /dev/null +++ b/src/main/webapp/scripts/app/pet-form/pet-form.component.js @@ -0,0 +1,63 @@ +'use strict'; + +angular.module('petForm', [ + 'ngRoute' +]); + +angular.module("petForm").component("petForm", { + templateUrl: "/petclinic/scripts/app/pet-form/pet-form.template.html", + controller: ["$http", '$routeParams', '$location', function ($http, $routeParams, $location) { + var self = this; + var ownerId = $routeParams.ownerId || 0; + + $http.get('petTypes').then(function(resp) { + self.types = resp.data; + }).then(function () { + + var petId = $routeParams.petId || 0; + + if (petId) { + $http.get("owner/" + ownerId + "/pet/" + petId).then(function(resp) { + self.pet = resp.data; + self.petTypeId = "" + self.pet.type.id; + }); + } else { + $http.get('owner/' + ownerId).then(function(resp) { + self.pet = { + owner: resp.data.firstName + " " + resp.data.lastName + }; + }) + + } + }); + + self.submit = function() { + console.log(this.pet); + + var id = self.pet.id || 0; + + var data = { + id : id, + name : self.pet.name, + birthDate : self.pet.birthDate, + typeId: self.petTypeId + }; + + var req; + if (id) { + req = $http.put("owners/" + ownerId + "/pets/" + id, data); + } else { + req = $http.post("owners/" + ownerId + "/pets", data); + } + + req.then(function () { + $location.url("owners/" + ownerId); + }, function (response) { + var error = response.data; + alert(error.error + "\r\n" + error.errors.map(function (e) { + return e.field + ": " + e.defaultMessage; + }).join("\r\n")); + }); + }; + }] +}); \ No newline at end of file diff --git a/src/main/webapp/scripts/app/pet-form/pet-form.template.html b/src/main/webapp/scripts/app/pet-form/pet-form.template.html new file mode 100644 index 00000000..8811960a --- /dev/null +++ b/src/main/webapp/scripts/app/pet-form/pet-form.template.html @@ -0,0 +1,43 @@ +<h2>Pet</h2> + +<form class="form-horizontal"> + <div class="form-group"> + <label class="col-sm-2 control-label">Owner</label> + <div class="col-sm-6"> + <p class="form-control-static">{{$ctrl.pet.owner}}</p> + </div> + </div> + + <div class="form-group"> + <label class="col-sm-2 control-label">Name </label> + <div class="col-sm-6"> + <input class="form-control col-sm-4" ng-model="$ctrl.pet.name" name="name" required type="text"/> + <span ng-show="petForm.name.$error.required" class="help-inline">Name is required.</span> + </div> + </div> + + <div class="form-group"> + <label class="col-sm-2 control-label">Birth date</label> + <div class="col-sm-6"> + <input class="form-control" ng-model="$ctrl.pet.birthDate" value="{{pet.birthDate}}" required type="text"/> + <span ng-show="petForm.name.$error.required" class="help-inline"> birth date is required.</span> + </div> + </div> + + <div class="form-group"> + <label class="col-sm-2 control-label">Type</label> + <div class="col-sm-6"> + <select class="form-control" ng-model="$ctrl.petTypeId"> + <option ng-repeat="t in $ctrl.types" value="{{t.id}}">{{t.name}}</option> + </select> + </div> + </div> + + <div class="form-group"> + <div class="col-sm-6 col-sm-offset-2"> + <button class="btn btn-primary" type="submit" ng-click="$ctrl.submit()"> + Submit + </button> + </div> + </div> +</form> diff --git a/src/main/webapp/scripts/app/vet-list/vet-list.component.js b/src/main/webapp/scripts/app/vet-list/vet-list.component.js new file mode 100644 index 00000000..80551758 --- /dev/null +++ b/src/main/webapp/scripts/app/vet-list/vet-list.component.js @@ -0,0 +1,16 @@ +'use strict'; + +angular.module('vetList', [ + 'ngRoute' +]); + +angular.module("vetList").component("vetList", { + templateUrl: "scripts/app/vet-list/vet-list.template.html", + controller: ["$http", '$routeParams', function($http) { + var self = this; + + $http.get('vets').then(function(resp) { + self.vetList = resp.data; + }); + }] +}); \ No newline at end of file diff --git a/src/main/webapp/scripts/app/vet-list/vet-list.template.html b/src/main/webapp/scripts/app/vet-list/vet-list.template.html new file mode 100644 index 00000000..e705f050 --- /dev/null +++ b/src/main/webapp/scripts/app/vet-list/vet-list.template.html @@ -0,0 +1,15 @@ +<h2>Veterinarians</h2> +<table class="table table-striped"> + <thead> + <tr> + <th>Name</th> + <th>Specialties</th> + </tr> + </thead> + + <tr ng-repeat="vet in $ctrl.vetList"> + <td>{{vet.firstName}} {{vet.lastName}}</td> + <td><span ng-repeat="specialty in vet.specialties">{{specialty.name + ' '}}</span></td> + + </tr> +</table> diff --git a/src/main/webapp/scripts/app/vet/VetController.js b/src/main/webapp/scripts/app/vet/VetController.js deleted file mode 100644 index a68f7ec1..00000000 --- a/src/main/webapp/scripts/app/vet/VetController.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict'; - -/* Controllers */ - -angular.module('controllers').controller('vetController', ['$scope', '$resource', - function($scope, $resource) { - var vetResource = $resource('vets'); - - $scope.vetList = vetResource.query(); - $scope.orderProp = 'name'; - }]); - - diff --git a/src/main/webapp/scripts/app/vet/vetList.html b/src/main/webapp/scripts/app/vet/vetList.html deleted file mode 100644 index 7d582a7f..00000000 --- a/src/main/webapp/scripts/app/vet/vetList.html +++ /dev/null @@ -1,16 +0,0 @@ -<div data-ng-controller="vetController"> - <table class="table table-striped"> - <thead> - <tr> - <th>Name</th> - <th>Specialties</th> - </tr> - </thead> - - <tr ng-repeat="vet in vetList"> - <td>{{vet.firstName}} {{vet.lastName}}</td> - <td><span ng-repeat="specialty in vet.specialties">{{specialty.name + ' '}}</span></td> - - </tr> - </table> -</div> diff --git a/src/test/java/org/springframework/samples/petclinic/service/AbstractClinicServiceTests.java b/src/test/java/org/springframework/samples/petclinic/service/AbstractClinicServiceTests.java index 330247ba..50758829 100644 --- a/src/test/java/org/springframework/samples/petclinic/service/AbstractClinicServiceTests.java +++ b/src/test/java/org/springframework/samples/petclinic/service/AbstractClinicServiceTests.java @@ -36,8 +36,7 @@ import static org.assertj.core.api.Assertions.assertThat; * AbstractclinicServiceTests and its subclasses benefit from the following services provided by the Spring * TestContext Framework: </p> <ul> <li><strong>Spring IoC container caching</strong> which spares us unnecessary set up * time between test execution.</li> <li><strong>Dependency Injection</strong> of test fixture instances, meaning that - * we don't need to perform application context lookups. See the use of {@link Autowired @Autowired} on the <code>{@link - * AbstractclinicServiceTests#clinicService clinicService}</code> instance variable, which uses autowiring <em>by + * we don't need to perform application context lookups. See the use of {@link Autowired @Autowired} on the <code></code> instance variable, which uses autowiring <em>by * type</em>. <li><strong>Transaction management</strong>, meaning each test method is executed in its own transaction, * which is automatically rolled back by default. Thus, even if tests insert or otherwise change database state, there * is no need for a teardown or cleanup script. <li> An {@link org.springframework.context.ApplicationContext @@ -54,15 +53,6 @@ public abstract class AbstractClinicServiceTests { @Autowired protected ClinicService clinicService; - @Test - public void shouldFindOwnersByLastName() { - Collection<Owner> owners = this.clinicService.findOwnerByLastName("Davis"); - assertThat(owners.size()).isEqualTo(2); - - owners = this.clinicService.findOwnerByLastName("Daviss"); - assertThat(owners.isEmpty()); - } - @Test public void shouldFindSingleOwnerWithPet() { Owner owner = this.clinicService.findOwnerById(1); @@ -72,14 +62,14 @@ public abstract class AbstractClinicServiceTests { @Test public void shouldReturnAllOwnersInCaseLastNameIsEmpty() { - Collection<Owner> owners = this.clinicService.findOwnerByLastName(""); + Collection<Owner> owners = this.clinicService.findAll(); assertThat(owners).extracting("lastName").contains("Davis", "Franklin"); } @Test @Transactional public void shouldInsertOwner() { - Collection<Owner> owners = this.clinicService.findOwnerByLastName("Schultz"); + Collection<Owner> owners = this.clinicService.findAll(); int found = owners.size(); Owner owner = new Owner(); @@ -91,7 +81,7 @@ public abstract class AbstractClinicServiceTests { this.clinicService.saveOwner(owner); assertThat(owner.getId().longValue()).isNotEqualTo(0); - owners = this.clinicService.findOwnerByLastName("Schultz"); + owners = this.clinicService.findAll(); assertThat(owners.size()).isEqualTo(found + 1); } -- GitLab