praxis 0.0.1 → 0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +11 -0
- data/.rspec +3 -0
- data/.ruby-version +1 -0
- data/.simplecov +7 -0
- data/.travis.yml +4 -0
- data/CONTRIBUTING.md +183 -0
- data/Gemfile +3 -0
- data/Guardfile +8 -0
- data/LICENSE +22 -0
- data/MAINTAINERS +2 -0
- data/MAINTAINERS.md +86 -0
- data/README.md +69 -3
- data/Rakefile +18 -0
- data/bin/praxis +10 -0
- data/lib/api_browser/.bowerrc +3 -0
- data/lib/api_browser/.editorconfig +21 -0
- data/lib/api_browser/Gruntfile.js +264 -0
- data/lib/api_browser/app/bower_components/angular/.bower.json +16 -0
- data/lib/api_browser/app/bower_components/angular/README.md +48 -0
- data/lib/api_browser/app/bower_components/angular/angular-csp.css +18 -0
- data/lib/api_browser/app/bower_components/angular/angular.js +21464 -0
- data/lib/api_browser/app/bower_components/angular/angular.min.js +210 -0
- data/lib/api_browser/app/bower_components/angular/angular.min.js.gzip +0 -0
- data/lib/api_browser/app/bower_components/angular/angular.min.js.map +8 -0
- data/lib/api_browser/app/bower_components/angular/bower.json +7 -0
- data/lib/api_browser/app/bower_components/angular-sanitize/.bower.json +19 -0
- data/lib/api_browser/app/bower_components/angular-sanitize/README.md +54 -0
- data/lib/api_browser/app/bower_components/angular-sanitize/angular-sanitize.js +624 -0
- data/lib/api_browser/app/bower_components/angular-sanitize/angular-sanitize.min.js +14 -0
- data/lib/api_browser/app/bower_components/angular-sanitize/angular-sanitize.min.js.map +8 -0
- data/lib/api_browser/app/bower_components/angular-sanitize/bower.json +8 -0
- data/lib/api_browser/app/bower_components/angular-ui-bootstrap-bower/.bower.json +24 -0
- data/lib/api_browser/app/bower_components/angular-ui-bootstrap-bower/bower.json +11 -0
- data/lib/api_browser/app/bower_components/angular-ui-bootstrap-bower/ui-bootstrap-tpls.js +4116 -0
- data/lib/api_browser/app/bower_components/angular-ui-bootstrap-bower/ui-bootstrap-tpls.min.js +10 -0
- data/lib/api_browser/app/bower_components/angular-ui-bootstrap-bower/ui-bootstrap.js +3799 -0
- data/lib/api_browser/app/bower_components/angular-ui-bootstrap-bower/ui-bootstrap.min.js +9 -0
- data/lib/api_browser/app/bower_components/angular-ui-router/.bower.json +34 -0
- data/lib/api_browser/app/bower_components/angular-ui-router/CHANGELOG.md +23 -0
- data/lib/api_browser/app/bower_components/angular-ui-router/LICENSE +21 -0
- data/lib/api_browser/app/bower_components/angular-ui-router/README.md +280 -0
- data/lib/api_browser/app/bower_components/angular-ui-router/bower.json +23 -0
- data/lib/api_browser/app/bower_components/angular-ui-router/release/angular-ui-router.js +3223 -0
- data/lib/api_browser/app/bower_components/angular-ui-router/release/angular-ui-router.min.js +7 -0
- data/lib/api_browser/app/bower_components/angular-ui-router/src/common.js +246 -0
- data/lib/api_browser/app/bower_components/angular-ui-router/src/compat.js +146 -0
- data/lib/api_browser/app/bower_components/angular-ui-router/src/resolve.js +242 -0
- data/lib/api_browser/app/bower_components/angular-ui-router/src/state.js +1204 -0
- data/lib/api_browser/app/bower_components/angular-ui-router/src/stateDirectives.js +226 -0
- data/lib/api_browser/app/bower_components/angular-ui-router/src/stateFilters.js +35 -0
- data/lib/api_browser/app/bower_components/angular-ui-router/src/templateFactory.js +110 -0
- data/lib/api_browser/app/bower_components/angular-ui-router/src/urlMatcherFactory.js +325 -0
- data/lib/api_browser/app/bower_components/angular-ui-router/src/urlRouter.js +273 -0
- data/lib/api_browser/app/bower_components/angular-ui-router/src/view.js +71 -0
- data/lib/api_browser/app/bower_components/angular-ui-router/src/viewDirective.js +290 -0
- data/lib/api_browser/app/bower_components/angular-ui-router/src/viewScroll.js +52 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/.bower.json +26 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/CNAME +1 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/CONTRIBUTING.md +61 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/DOCS-LICENSE +319 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/Gemfile +5 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/Gemfile.lock +14 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/Gruntfile.js +244 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/LICENSE +176 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/LICENSE-MIT +21 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/README.md +277 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/Rakefile +44 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/_config.yml +25 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/_includes/ads.html +1 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/_includes/footer.html +34 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/_includes/header.html +42 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/_includes/nav-about.html +12 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/_includes/nav-components.html +137 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/_includes/nav-css.html +99 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/_includes/nav-customize.html +40 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/_includes/nav-getting-started.html +44 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/_includes/nav-javascript.html +88 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/_includes/nav-main.html +37 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/_includes/old-bs-docs.html +8 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/_includes/social-buttons.html +16 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/_layouts/default.html +79 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/_layouts/home.html +47 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/about.html +93 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/bower.json +11 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/browserstack.json +37 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/components.html +3689 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/composer.json +28 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/css.html +2674 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/customize.html +1715 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/dist/css/bootstrap-theme.css +427 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/dist/css/bootstrap-theme.min.css +1 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/dist/css/bootstrap.css +6350 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/dist/css/bootstrap.min.css +1 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/dist/fonts/glyphicons-halflings-regular.eot +0 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/dist/fonts/glyphicons-halflings-regular.svg +229 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/dist/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/dist/fonts/glyphicons-halflings-regular.woff +0 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/dist/js/bootstrap.js +2002 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/dist/js/bootstrap.min.js +9 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/docs-assets/css/docs.css +1195 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/docs-assets/css/pygments-manni.css +66 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/docs-assets/ico/apple-touch-icon-144-precomposed.png +0 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/docs-assets/ico/favicon.png +0 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/docs-assets/js/application.js +103 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/docs-assets/js/customizer.js +332 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/docs-assets/js/filesaver.js +169 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/docs-assets/js/holder.js +404 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/docs-assets/js/ie8-responsive-file-warning.js +12 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/docs-assets/js/jszip.js +1467 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/docs-assets/js/less.js +9 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/docs-assets/js/raw-files.js +3 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/docs-assets/js/uglify.js +14 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/examples/carousel/carousel.css +148 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/examples/carousel/index.html +206 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/examples/grid/grid.css +28 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/examples/grid/index.html +148 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/examples/jumbotron/index.html +99 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/examples/jumbotron/jumbotron.css +5 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/examples/jumbotron-narrow/index.html +82 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/examples/jumbotron-narrow/jumbotron-narrow.css +79 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/examples/justified-nav/index.html +83 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/examples/justified-nav/justified-nav.css +88 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/examples/navbar/index.html +88 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/examples/navbar/navbar.css +8 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/examples/navbar-fixed-top/index.html +91 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/examples/navbar-fixed-top/navbar-fixed-top.css +4 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/examples/navbar-static-top/index.html +92 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/examples/navbar-static-top/navbar-static-top.css +7 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/examples/non-responsive/index.html +101 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/examples/non-responsive/non-responsive.css +116 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/examples/offcanvas/index.html +130 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/examples/offcanvas/offcanvas.css +50 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/examples/offcanvas/offcanvas.js +5 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/examples/screenshots/carousel.jpg +0 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/examples/screenshots/grid.jpg +0 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/examples/screenshots/jumbotron-narrow.jpg +0 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/examples/screenshots/jumbotron.jpg +0 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/examples/screenshots/justified-nav.jpg +0 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/examples/screenshots/navbar-fixed.jpg +0 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/examples/screenshots/navbar-static.jpg +0 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/examples/screenshots/navbar.jpg +0 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/examples/screenshots/non-responsive.jpg +0 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/examples/screenshots/offcanvas.jpg +0 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/examples/screenshots/sign-in.jpg +0 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/examples/screenshots/starter-template.jpg +0 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/examples/screenshots/sticky-footer-navbar.jpg +0 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/examples/screenshots/sticky-footer.jpg +0 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/examples/screenshots/theme.jpg +0 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/examples/signin/index.html +50 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/examples/signin/signin.css +40 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/examples/starter-template/index.html +68 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/examples/starter-template/starter-template.css +7 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/examples/sticky-footer/index.html +55 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/examples/sticky-footer/sticky-footer.css +38 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/examples/sticky-footer-navbar/index.html +91 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/examples/sticky-footer-navbar/sticky-footer-navbar.css +45 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/examples/theme/index.html +384 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/examples/theme/theme.css +14 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/fonts/glyphicons-halflings-regular.eot +0 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/fonts/glyphicons-halflings-regular.svg +229 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/fonts/glyphicons-halflings-regular.woff +0 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/getting-started.html +1021 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/index.html +16 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/javascript.html +1983 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/js/affix.js +126 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/js/alert.js +98 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/js/button.js +109 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/js/carousel.js +217 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/js/collapse.js +179 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/js/dropdown.js +154 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/js/modal.js +246 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/js/popover.js +117 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/js/scrollspy.js +158 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/js/tab.js +135 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/js/tests/index.html +52 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/js/tests/unit/affix.js +25 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/js/tests/unit/alert.js +62 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/js/tests/unit/button.js +116 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/js/tests/unit/carousel.js +87 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/js/tests/unit/collapse.js +164 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/js/tests/unit/dropdown.js +219 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/js/tests/unit/modal.js +196 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/js/tests/unit/phantom.js +69 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/js/tests/unit/popover.js +133 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/js/tests/unit/scrollspy.js +37 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/js/tests/unit/tab.js +86 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/js/tests/unit/tooltip.js +437 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/js/tests/unit/transition.js +13 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/js/tests/vendor/jquery.js +6 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/js/tests/vendor/qunit.css +232 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/js/tests/vendor/qunit.js +1510 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/js/tooltip.js +386 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/js/transition.js +56 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_alerts.scss +67 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_badges.scss +51 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_breadcrumbs.scss +23 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_button-groups.scss +253 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_buttons.scss +158 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_carousel.scss +231 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_close.scss +35 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_code.scss +53 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_component-animations.scss +29 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_dropdowns.scss +193 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_forms.scss +363 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_glyphicons.scss +237 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_grid.scss +93 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_input-groups.scss +136 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_jumbotron.scss +40 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_labels.scss +58 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_list-group.scss +88 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_media.scss +56 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_mixins.scss +861 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_modals.scss +132 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_navbar.scss +628 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_navs.scss +262 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_normalize.scss +406 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_pager.scss +55 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_pagination.scss +85 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_panels.scss +172 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_popovers.scss +133 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_print.scss +105 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_progress-bars.scss +92 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_responsive-utilities.scss +198 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_scaffolding.scss +119 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_tables.scss +244 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_theme.scss +247 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_thumbnails.scss +32 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_tooltip.scss +95 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_type.scss +279 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_utilities.scss +56 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_variables.scss +637 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_wells.scss +29 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/lib/bootstrap.scss +49 -0
- data/lib/api_browser/app/bower_components/bootstrap-sass/package.json +40 -0
- data/lib/api_browser/app/bower_components/jquery/.bower.json +38 -0
- data/lib/api_browser/app/bower_components/jquery/MIT-LICENSE.txt +21 -0
- data/lib/api_browser/app/bower_components/jquery/bower.json +27 -0
- data/lib/api_browser/app/bower_components/jquery/dist/jquery.js +9190 -0
- data/lib/api_browser/app/bower_components/jquery/dist/jquery.min.js +5 -0
- data/lib/api_browser/app/bower_components/jquery/dist/jquery.min.map +1 -0
- data/lib/api_browser/app/bower_components/jquery/src/ajax/jsonp.js +89 -0
- data/lib/api_browser/app/bower_components/jquery/src/ajax/load.js +75 -0
- data/lib/api_browser/app/bower_components/jquery/src/ajax/parseJSON.js +13 -0
- data/lib/api_browser/app/bower_components/jquery/src/ajax/parseXML.js +28 -0
- data/lib/api_browser/app/bower_components/jquery/src/ajax/script.js +64 -0
- data/lib/api_browser/app/bower_components/jquery/src/ajax/var/nonce.js +5 -0
- data/lib/api_browser/app/bower_components/jquery/src/ajax/var/rquery.js +3 -0
- data/lib/api_browser/app/bower_components/jquery/src/ajax/xhr.js +135 -0
- data/lib/api_browser/app/bower_components/jquery/src/ajax.js +806 -0
- data/lib/api_browser/app/bower_components/jquery/src/attributes/attr.js +143 -0
- data/lib/api_browser/app/bower_components/jquery/src/attributes/classes.js +158 -0
- data/lib/api_browser/app/bower_components/jquery/src/attributes/prop.js +96 -0
- data/lib/api_browser/app/bower_components/jquery/src/attributes/support.js +35 -0
- data/lib/api_browser/app/bower_components/jquery/src/attributes/val.js +163 -0
- data/lib/api_browser/app/bower_components/jquery/src/attributes.js +11 -0
- data/lib/api_browser/app/bower_components/jquery/src/callbacks.js +205 -0
- data/lib/api_browser/app/bower_components/jquery/src/core/access.js +60 -0
- data/lib/api_browser/app/bower_components/jquery/src/core/init.js +123 -0
- data/lib/api_browser/app/bower_components/jquery/src/core/parseHTML.js +39 -0
- data/lib/api_browser/app/bower_components/jquery/src/core/ready.js +97 -0
- data/lib/api_browser/app/bower_components/jquery/src/core/var/rsingleTag.js +4 -0
- data/lib/api_browser/app/bower_components/jquery/src/core.js +498 -0
- data/lib/api_browser/app/bower_components/jquery/src/css/addGetHookIf.js +24 -0
- data/lib/api_browser/app/bower_components/jquery/src/css/curCSS.js +57 -0
- data/lib/api_browser/app/bower_components/jquery/src/css/defaultDisplay.js +70 -0
- data/lib/api_browser/app/bower_components/jquery/src/css/hiddenVisibleSelectors.js +15 -0
- data/lib/api_browser/app/bower_components/jquery/src/css/support.js +91 -0
- data/lib/api_browser/app/bower_components/jquery/src/css/swap.js +28 -0
- data/lib/api_browser/app/bower_components/jquery/src/css/var/cssExpand.js +3 -0
- data/lib/api_browser/app/bower_components/jquery/src/css/var/getStyles.js +5 -0
- data/lib/api_browser/app/bower_components/jquery/src/css/var/isHidden.js +13 -0
- data/lib/api_browser/app/bower_components/jquery/src/css/var/rmargin.js +3 -0
- data/lib/api_browser/app/bower_components/jquery/src/css/var/rnumnonpx.js +5 -0
- data/lib/api_browser/app/bower_components/jquery/src/css.js +451 -0
- data/lib/api_browser/app/bower_components/jquery/src/data/Data.js +181 -0
- data/lib/api_browser/app/bower_components/jquery/src/data/accepts.js +20 -0
- data/lib/api_browser/app/bower_components/jquery/src/data/var/data_priv.js +5 -0
- data/lib/api_browser/app/bower_components/jquery/src/data/var/data_user.js +5 -0
- data/lib/api_browser/app/bower_components/jquery/src/data.js +179 -0
- data/lib/api_browser/app/bower_components/jquery/src/deferred.js +149 -0
- data/lib/api_browser/app/bower_components/jquery/src/deprecated.js +13 -0
- data/lib/api_browser/app/bower_components/jquery/src/dimensions.js +50 -0
- data/lib/api_browser/app/bower_components/jquery/src/effects/Tween.js +114 -0
- data/lib/api_browser/app/bower_components/jquery/src/effects/animatedSelector.js +13 -0
- data/lib/api_browser/app/bower_components/jquery/src/effects.js +649 -0
- data/lib/api_browser/app/bower_components/jquery/src/event/alias.js +39 -0
- data/lib/api_browser/app/bower_components/jquery/src/event/support.js +9 -0
- data/lib/api_browser/app/bower_components/jquery/src/event.js +868 -0
- data/lib/api_browser/app/bower_components/jquery/src/exports/amd.js +24 -0
- data/lib/api_browser/app/bower_components/jquery/src/exports/global.js +32 -0
- data/lib/api_browser/app/bower_components/jquery/src/intro.js +44 -0
- data/lib/api_browser/app/bower_components/jquery/src/jquery.js +36 -0
- data/lib/api_browser/app/bower_components/jquery/src/manipulation/_evalUrl.js +18 -0
- data/lib/api_browser/app/bower_components/jquery/src/manipulation/support.js +31 -0
- data/lib/api_browser/app/bower_components/jquery/src/manipulation/var/rcheckableType.js +3 -0
- data/lib/api_browser/app/bower_components/jquery/src/manipulation.js +582 -0
- data/lib/api_browser/app/bower_components/jquery/src/offset.js +204 -0
- data/lib/api_browser/app/bower_components/jquery/src/outro.js +1 -0
- data/lib/api_browser/app/bower_components/jquery/src/queue/delay.js +22 -0
- data/lib/api_browser/app/bower_components/jquery/src/queue.js +142 -0
- data/lib/api_browser/app/bower_components/jquery/src/selector-native.js +172 -0
- data/lib/api_browser/app/bower_components/jquery/src/selector-sizzle.js +14 -0
- data/lib/api_browser/app/bower_components/jquery/src/selector.js +1 -0
- data/lib/api_browser/app/bower_components/jquery/src/serialize.js +111 -0
- data/lib/api_browser/app/bower_components/jquery/src/sizzle/dist/sizzle.js +2044 -0
- data/lib/api_browser/app/bower_components/jquery/src/sizzle/dist/sizzle.min.js +3 -0
- data/lib/api_browser/app/bower_components/jquery/src/sizzle/dist/sizzle.min.map +1 -0
- data/lib/api_browser/app/bower_components/jquery/src/traversing/findFilter.js +100 -0
- data/lib/api_browser/app/bower_components/jquery/src/traversing/var/rneedsContext.js +6 -0
- data/lib/api_browser/app/bower_components/jquery/src/traversing.js +200 -0
- data/lib/api_browser/app/bower_components/jquery/src/var/arr.js +3 -0
- data/lib/api_browser/app/bower_components/jquery/src/var/class2type.js +4 -0
- data/lib/api_browser/app/bower_components/jquery/src/var/concat.js +5 -0
- data/lib/api_browser/app/bower_components/jquery/src/var/hasOwn.js +5 -0
- data/lib/api_browser/app/bower_components/jquery/src/var/indexOf.js +5 -0
- data/lib/api_browser/app/bower_components/jquery/src/var/pnum.js +3 -0
- data/lib/api_browser/app/bower_components/jquery/src/var/push.js +5 -0
- data/lib/api_browser/app/bower_components/jquery/src/var/rnotwhite.js +3 -0
- data/lib/api_browser/app/bower_components/jquery/src/var/slice.js +5 -0
- data/lib/api_browser/app/bower_components/jquery/src/var/strundefined.js +3 -0
- data/lib/api_browser/app/bower_components/jquery/src/var/support.js +4 -0
- data/lib/api_browser/app/bower_components/jquery/src/var/toString.js +5 -0
- data/lib/api_browser/app/bower_components/jquery/src/wrap.js +78 -0
- data/lib/api_browser/app/bower_components/lodash/.bower.json +34 -0
- data/lib/api_browser/app/bower_components/lodash/LICENSE.txt +22 -0
- data/lib/api_browser/app/bower_components/lodash/bower.json +23 -0
- data/lib/api_browser/app/bower_components/lodash/dist/lodash.compat.js +7157 -0
- data/lib/api_browser/app/bower_components/lodash/dist/lodash.compat.min.js +61 -0
- data/lib/api_browser/app/bower_components/lodash/dist/lodash.js +6785 -0
- data/lib/api_browser/app/bower_components/lodash/dist/lodash.min.js +56 -0
- data/lib/api_browser/app/bower_components/lodash/dist/lodash.underscore.js +4979 -0
- data/lib/api_browser/app/bower_components/lodash/dist/lodash.underscore.min.js +39 -0
- data/lib/api_browser/app/css/main.css +4510 -0
- data/lib/api_browser/app/index.html +51 -0
- data/lib/api_browser/app/js/app.js +32 -0
- data/lib/api_browser/app/js/controllers/action.js +51 -0
- data/lib/api_browser/app/js/controllers/controller.js +10 -0
- data/lib/api_browser/app/js/controllers/menu.js +49 -0
- data/lib/api_browser/app/js/controllers/type.js +28 -0
- data/lib/api_browser/app/js/directives/attribute_description.js +43 -0
- data/lib/api_browser/app/js/directives/attribute_table.js +27 -0
- data/lib/api_browser/app/js/directives/attribute_table_row.js +17 -0
- data/lib/api_browser/app/js/directives/no_container.js +8 -0
- data/lib/api_browser/app/js/directives/request_body.js +25 -0
- data/lib/api_browser/app/js/directives/request_headers.js +20 -0
- data/lib/api_browser/app/js/directives/request_parameters.js +20 -0
- data/lib/api_browser/app/js/directives/type_label.js +53 -0
- data/lib/api_browser/app/js/factories/Documentation.js +16 -0
- data/lib/api_browser/app/js/factories/PayloadTemplates.js +10 -0
- data/lib/api_browser/app/js/factories/TemplateProvider.js +45 -0
- data/lib/api_browser/app/js/factories/TypeTemplates.js +11 -0
- data/lib/api_browser/app/js/filters/attribute_name.js +9 -0
- data/lib/api_browser/app/js/filters/friendly_json.js +5 -0
- data/lib/api_browser/app/js/filters/is_empty.js +8 -0
- data/lib/api_browser/app/js/filters/resource_name.js +5 -0
- data/lib/api_browser/app/sass/main.scss +59 -0
- data/lib/api_browser/app/sass/modules/_body.scss +11 -0
- data/lib/api_browser/app/sass/modules/_cloke.scss +8 -0
- data/lib/api_browser/app/sass/modules/_header.scss +15 -0
- data/lib/api_browser/app/sass/modules/_nav.scss +7 -0
- data/lib/api_browser/app/sass/modules/_sidebar.scss +26 -0
- data/lib/api_browser/app/sass/modules/_switch.scss +55 -0
- data/lib/api_browser/app/sass/modules/_table.scss +13 -0
- data/lib/api_browser/app/sass/variables/_bootstrap-variables.scss +762 -0
- data/lib/api_browser/app/views/action.html +83 -0
- data/lib/api_browser/app/views/controller.html +24 -0
- data/lib/api_browser/app/views/directives/attribute_description/_default.html +2 -0
- data/lib/api_browser/app/views/directives/attribute_description/_example.html +8 -0
- data/lib/api_browser/app/views/directives/attribute_description/_headers.html +8 -0
- data/lib/api_browser/app/views/directives/attribute_description.html +2 -0
- data/lib/api_browser/app/views/directives/attribute_table.html +23 -0
- data/lib/api_browser/app/views/directives/attribute_table_row/_default.html +10 -0
- data/lib/api_browser/app/views/directives/attribute_table_row/_links.html +10 -0
- data/lib/api_browser/app/views/directives/attribute_table_row/_struct.html +2 -0
- data/lib/api_browser/app/views/directives/request_body/_default.html +20 -0
- data/lib/api_browser/app/views/directives/request_body/_struct.html +1 -0
- data/lib/api_browser/app/views/home.html +7 -0
- data/lib/api_browser/app/views/layout.html +50 -0
- data/lib/api_browser/app/views/resource/_actions.html +23 -0
- data/lib/api_browser/app/views/type/_details.html +29 -0
- data/lib/api_browser/app/views/type.html +25 -0
- data/lib/api_browser/bower.json +26 -0
- data/lib/api_browser/package.json +30 -0
- data/lib/praxis/action_definition/headers_dsl_compiler.rb +36 -0
- data/lib/praxis/action_definition.rb +153 -0
- data/lib/praxis/api_definition.rb +59 -0
- data/lib/praxis/application.rb +65 -0
- data/lib/praxis/bootloader.rb +91 -0
- data/lib/praxis/bootloader_stages/environment.rb +57 -0
- data/lib/praxis/bootloader_stages/file_loader.rb +31 -0
- data/lib/praxis/bootloader_stages/routing.rb +34 -0
- data/lib/praxis/bootloader_stages/subgroup_loader.rb +27 -0
- data/lib/praxis/bootloader_stages/warn_unloaded_files.rb +40 -0
- data/lib/praxis/config.rb +92 -0
- data/lib/praxis/content_type_parser.rb +62 -0
- data/lib/praxis/controller.rb +59 -0
- data/lib/praxis/dispatcher.rb +102 -0
- data/lib/praxis/exception.rb +4 -0
- data/lib/praxis/exceptions/config.rb +6 -0
- data/lib/praxis/exceptions/config_load.rb +9 -0
- data/lib/praxis/exceptions/config_validation.rb +9 -0
- data/lib/praxis/exceptions/invalid_configuration.rb +6 -0
- data/lib/praxis/exceptions/invalid_response.rb +6 -0
- data/lib/praxis/exceptions/invalid_trait.rb +6 -0
- data/lib/praxis/exceptions/stage_not_found.rb +6 -0
- data/lib/praxis/exceptions/validation.rb +6 -0
- data/lib/praxis/file_group.rb +39 -0
- data/lib/praxis/links.rb +110 -0
- data/lib/praxis/media_type.rb +40 -0
- data/lib/praxis/media_type_collection.rb +120 -0
- data/lib/praxis/multipart/parser.rb +213 -0
- data/lib/praxis/multipart/part.rb +26 -0
- data/lib/praxis/plugin.rb +30 -0
- data/lib/praxis/request.rb +131 -0
- data/lib/praxis/request_stages/action.rb +20 -0
- data/lib/praxis/request_stages/load_request.rb +13 -0
- data/lib/praxis/request_stages/request_stage.rb +52 -0
- data/lib/praxis/request_stages/response.rb +26 -0
- data/lib/praxis/request_stages/validate.rb +20 -0
- data/lib/praxis/request_stages/validate_params_and_headers.rb +38 -0
- data/lib/praxis/request_stages/validate_payload.rb +32 -0
- data/lib/praxis/resource_definition.rb +89 -0
- data/lib/praxis/response.rb +107 -0
- data/lib/praxis/response_definition.rb +264 -0
- data/lib/praxis/response_template.rb +34 -0
- data/lib/praxis/responses/http.rb +166 -0
- data/lib/praxis/responses/validation_error.rb +36 -0
- data/lib/praxis/route.rb +27 -0
- data/lib/praxis/router.rb +89 -0
- data/lib/praxis/simple_media_type.rb +24 -0
- data/lib/praxis/skeletor/restful_routing_config.rb +45 -0
- data/lib/praxis/stage.rb +94 -0
- data/lib/praxis/tasks/api_docs.rb +336 -0
- data/lib/praxis/tasks/console.rb +11 -0
- data/lib/praxis/tasks/environment.rb +5 -0
- data/lib/praxis/tasks/routes.rb +45 -0
- data/lib/praxis/tasks.rb +4 -0
- data/lib/praxis/types/collection.rb +17 -0
- data/lib/praxis/types/multipart.rb +69 -0
- data/lib/praxis/version.rb +3 -0
- data/lib/praxis.rb +119 -1
- data/praxis.gemspec +50 -0
- data/spec/functional_spec.rb +186 -0
- data/spec/praxis/action_definition_spec.rb +134 -0
- data/spec/praxis/api_resource_spec.rb +0 -0
- data/spec/praxis/application_spec.rb +46 -0
- data/spec/praxis/bootloader_spec.rb +58 -0
- data/spec/praxis/config_spec.rb +118 -0
- data/spec/praxis/content_type_parser_spec.rb +91 -0
- data/spec/praxis/controller_spec.rb +73 -0
- data/spec/praxis/dispatcher_spec.rb +0 -0
- data/spec/praxis/file_group_spec.rb +34 -0
- data/spec/praxis/links_spec.rb +45 -0
- data/spec/praxis/media_type_collection_spec.rb +145 -0
- data/spec/praxis/media_type_spec.rb +80 -0
- data/spec/praxis/multipart/parser_spec.rb +54 -0
- data/spec/praxis/request_spec.rb +109 -0
- data/spec/praxis/request_stages_validate_spec.rb +34 -0
- data/spec/praxis/resource_definition_spec.rb +116 -0
- data/spec/praxis/response_definition_spec.rb +500 -0
- data/spec/praxis/response_spec.rb +166 -0
- data/spec/praxis/restful_routing_config_spec.rb +88 -0
- data/spec/praxis/route_spec.rb +42 -0
- data/spec/praxis/router_spec.rb +148 -0
- data/spec/praxis/stage_spec.rb +110 -0
- data/spec/praxis/types/multipart_spec.rb +81 -0
- data/spec/spec_app/app/controllers/instances.rb +63 -0
- data/spec/spec_app/app/responses/bulk_response.rb +6 -0
- data/spec/spec_app/app/responses/multipart.rb +10 -0
- data/spec/spec_app/app/responses/other_response.rb +6 -0
- data/spec/spec_app/config/environment.rb +17 -0
- data/spec/spec_app/config.ru +17 -0
- data/spec/spec_app/design/api.rb +27 -0
- data/spec/spec_app/design/media_types/instance.rb +35 -0
- data/spec/spec_app/design/media_types/volume.rb +34 -0
- data/spec/spec_app/design/media_types/volume_snapshot.rb +38 -0
- data/spec/spec_app/design/resources/instances.rb +161 -0
- data/spec/spec_helper.rb +39 -0
- data/spec/support/spec_media_types.rb +46 -0
- data/spec/support/spec_resource_definitions.rb +33 -0
- data/tasks/praxis_app_generator.thor +307 -0
- metadata +847 -12
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* State-based routing for AngularJS
|
|
3
|
+
* @version v0.2.10
|
|
4
|
+
* @link http://angular-ui.github.com/
|
|
5
|
+
* @license MIT License, http://www.opensource.org/licenses/MIT
|
|
6
|
+
*/
|
|
7
|
+
"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(a,b,c){"use strict";function d(a,b){return I(new(I(function(){},{prototype:a})),b)}function e(a){return H(arguments,function(b){b!==a&&H(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,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 h(a,b,c,d){var e,h=f(c,d),i={},j=[];for(var k in h)if(h[k].params&&h[k].params.length){e=h[k].params;for(var l in e)g(j,e[l])>=0||(j.push(e[l]),i[e[l]]=a[e[l]])}return I({},i,b)}function i(a,b){var c={};return H(a,function(a){var d=b[a];c[a]=null!=d?String(d):null}),c}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 H(a,function(a){c[a]=b[a]}),c}function l(a,b){var d=1,f=2,g={},h=[],i=g,j=I(a.when(g),{$$promises:g,$$values:g});this.study=function(g){function k(a,c){if(o[c]!==f){if(n.push(c),o[c]===d)throw n.splice(0,n.indexOf(c)),new Error("Cyclic dependency: "+n.join(" -> "));if(o[c]=d,E(a))m.push(c,[function(){return b.get(a)}],h);else{var e=b.annotate(a);H(e,function(a){a!==c&&g.hasOwnProperty(a)&&k(g[a],a)}),m.push(c,a,e)}n.pop(),o[c]=f}}function l(a){return F(a)&&a.then&&a.$$promises}if(!F(g))throw new Error("'invocables' must be an object");var m=[],n=[],o={};return H(g,k),g=n=o=null,function(d,f,g){function h(){--s||(t||e(r,f.$$values),p.$$values=r,p.$$promises=!0,o.resolve(r))}function k(a){p.$$failure=a,o.reject(a)}function n(c,e,f){function i(a){l.reject(a),k(a)}function j(){if(!C(p.$$failure))try{l.resolve(b.invoke(e,g,r)),l.promise.then(function(a){r[c]=a,h()},i)}catch(a){i(a)}}var l=a.defer(),m=0;H(f,function(a){q.hasOwnProperty(a)&&!d.hasOwnProperty(a)&&(m++,q[a].then(function(b){r[a]=b,--m||j()},i))}),m||j(),q[c]=l.promise}if(l(d)&&g===c&&(g=f,f=d,d=null),d){if(!F(d))throw new Error("'locals' must be an object")}else d=i;if(f){if(!l(f))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else f=j;var o=a.defer(),p=o.promise,q=p.$$promises={},r=I({},d),s=1+m.length/3,t=!1;if(C(f.$$failure))return k(f.$$failure),p;f.$$values?(t=e(r,f.$$values),h()):(I(q,f.$$promises),f.then(h,k));for(var u=0,v=m.length;v>u;u+=3)d.hasOwnProperty(m[u])?h():n(m[u],m[u+1],m[u+2]);return p}},this.resolve=function(a,b,c,d){return this.study(a)(b,c,d)}}function m(a,b,c){this.fromConfig=function(a,b,c){return C(a.template)?this.fromString(a.template,b):C(a.templateUrl)?this.fromUrl(a.templateUrl,b):C(a.templateProvider)?this.fromProvider(a.templateProvider,b,c):null},this.fromString=function(a,b){return D(a)?a(b):a},this.fromUrl=function(c,d){return D(c)&&(c=c(d)),null==c?null:a.get(c,{cache:b}).then(function(a){return a.data})},this.fromProvider=function(a,b,d){return c.invoke(a,null,d||{params:b})}}function n(a){function b(b){if(!/^\w+(-+\w+)*$/.test(b))throw new Error("Invalid parameter name '"+b+"' in pattern '"+a+"'");if(f[b])throw new Error("Duplicate parameter name '"+b+"' in pattern '"+a+"'");f[b]=!0,j.push(b)}function c(a){return a.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&")}var d,e=/([:*])(\w+)|\{(\w+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,f={},g="^",h=0,i=this.segments=[],j=this.params=[];this.source=a;for(var k,l,m;(d=e.exec(a))&&(k=d[2]||d[3],l=d[4]||("*"==d[1]?".*":"[^/]*"),m=a.substring(h,d.index),!(m.indexOf("?")>=0));)g+=c(m)+"("+l+")",b(k),i.push(m),h=e.lastIndex;m=a.substring(h);var n=m.indexOf("?");if(n>=0){var o=this.sourceSearch=m.substring(n);m=m.substring(0,n),this.sourcePath=a.substring(0,h+n),H(o.substring(1).split(/[&?]/),b)}else this.sourcePath=a,this.sourceSearch="";g+=c(m)+"$",i.push(m),this.regexp=new RegExp(g),this.prefix=i[0]}function o(){this.compile=function(a){return new n(a)},this.isMatcher=function(a){return F(a)&&D(a.exec)&&D(a.format)&&D(a.concat)},this.$get=function(){return this}}function p(a){function b(a){var b=/^\^((?:\\[^a-zA-Z0-9]|[^\\\[\]\^$*+?.()|{}]+)*)/.exec(a.source);return null!=b?b[1].replace(/\\(.)/g,"$1"):""}function c(a,b){return a.replace(/\$(\$|\d{1,2})/,function(a,c){return b["$"===c?0:Number(c)]})}function d(a,b,c){if(!c)return!1;var d=a.invoke(b,b,{$match:c});return C(d)?d:!0}var e=[],f=null;this.rule=function(a){if(!D(a))throw new Error("'rule' must be a function");return e.push(a),this},this.otherwise=function(a){if(E(a)){var b=a;a=function(){return b}}else if(!D(a))throw new Error("'rule' must be a function");return f=a,this},this.when=function(e,f){var g,h=E(f);if(E(e)&&(e=a.compile(e)),!h&&!D(f)&&!G(f))throw new Error("invalid 'handler' in when()");var i={matcher:function(b,c){return h&&(g=a.compile(c),c=["$match",function(a){return g.format(a)}]),I(function(a,e){return d(a,c,b.exec(e.path(),e.search()))},{prefix:E(b.prefix)?b.prefix:""})},regex:function(a,e){if(a.global||a.sticky)throw new Error("when() RegExp must not be global or sticky");return h&&(g=e,e=["$match",function(a){return c(g,a)}]),I(function(b,c){return d(b,e,a.exec(c.path()))},{prefix:b(a)})}},j={matcher:a.isMatcher(e),regex:e instanceof RegExp};for(var k in j)if(j[k])return this.rule(i[k](e,f));throw new Error("invalid 'what' in when()")},this.$get=["$location","$rootScope","$injector",function(a,b,c){function d(b){function d(b){var d=b(c,a);return d?(E(d)&&a.replace().url(d),!0):!1}if(!b||!b.defaultPrevented){var g,h=e.length;for(g=0;h>g;g++)if(d(e[g]))return;f&&d(f)}}return b.$on("$locationChangeSuccess",d),{sync:function(){d()}}}]}function q(a,e,f){function g(a){return 0===a.indexOf(".")||0===a.indexOf("^")}function l(a,b){var d=E(a),e=d?a:a.name,f=g(e);if(f){if(!b)throw new Error("No reference point given for path '"+e+"'");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=w[e];return!l||!d&&(d||l!==a&&l.self!==a)?c:l}function m(a,b){x[a]||(x[a]=[]),x[a].push(b)}function n(b){b=d(b,{self:b,resolve:b.resolve||{},toString:function(){return this.name}});var c=b.name;if(!E(c)||c.indexOf("@")>=0)throw new Error("State must have a valid name");if(w.hasOwnProperty(c))throw new Error("State '"+c+"'' is already defined");var e=-1!==c.indexOf(".")?c.substring(0,c.lastIndexOf(".")):E(b.parent)?b.parent:"";if(e&&!w[e])return m(e,b.self);for(var f in z)D(z[f])&&(b[f]=z[f](b,z.$delegates[f]));if(w[c]=b,!b[y]&&b.url&&a.when(b.url,["$match","$stateParams",function(a,c){v.$current.navigable==b&&j(a,c)||v.transitionTo(b,a,{location:!1})}]),x[c])for(var g=0;g<x[c].length;g++)n(x[c][g]);return b}function o(a){return a.indexOf("*")>-1}function p(a){var b=a.split("."),c=v.$current.name.split(".");if("**"===b[0]&&(c=c.slice(c.indexOf(b[1])),c.unshift("**")),"**"===b[b.length-1]&&(c.splice(c.indexOf(b[b.length-2])+1,Number.MAX_VALUE),c.push("**")),b.length!=c.length)return!1;for(var d=0,e=b.length;e>d;d++)"*"===b[d]&&(c[d]="*");return c.join("")===b.join("")}function q(a,b){return E(a)&&!C(b)?z[a]:D(b)&&E(a)?(z[a]&&!z.$delegates[a]&&(z.$delegates[a]=z[a]),z[a]=b,this):this}function r(a,b){return F(a)?b=a:b.name=a,n(b),this}function s(a,e,g,m,n,q,r,s,x){function z(){r.url()!==M&&(r.url(M),r.replace())}function A(a,c,d,f,h){var i=d?c:k(a.params,c),j={$stateParams:i};h.resolve=n.resolve(a.resolve,j,h.resolve,a);var l=[h.resolve.then(function(a){h.globals=a})];return f&&l.push(f),H(a.views,function(c,d){var e=c.resolve&&c.resolve!==a.resolve?c.resolve:{};e.$template=[function(){return g.load(d,{view:c,locals:j,params:i,notify:!1})||""}],l.push(n.resolve(e,j,h.resolve,a).then(function(f){if(D(c.controllerProvider)||G(c.controllerProvider)){var g=b.extend({},e,j);f.$$controller=m.invoke(c.controllerProvider,null,g)}else f.$$controller=c.controller;f.$$state=a,f.$$controllerAs=c.controllerAs,h[d]=f}))}),e.all(l).then(function(){return h})}var B=e.reject(new Error("transition superseded")),F=e.reject(new Error("transition prevented")),K=e.reject(new Error("transition aborted")),L=e.reject(new Error("transition failed")),M=r.url(),N=x.baseHref();return u.locals={resolve:null,globals:{$stateParams:{}}},v={params:{},current:u.self,$current:u,transition:null},v.reload=function(){v.transitionTo(v.current,q,{reload:!0,inherit:!1,notify:!1})},v.go=function(a,b,c){return this.transitionTo(a,b,I({inherit:!0,relative:v.$current},c))},v.transitionTo=function(b,c,f){c=c||{},f=I({location:!0,inherit:!1,relative:null,notify:!0,reload:!1,$retry:!1},f||{});var g,k=v.$current,n=v.params,o=k.path,p=l(b,f.relative);if(!C(p)){var s={to:b,toParams:c,options:f};if(g=a.$broadcast("$stateNotFound",s,k.self,n),g.defaultPrevented)return z(),K;if(g.retry){if(f.$retry)return z(),L;var w=v.transition=e.when(g.retry);return w.then(function(){return w!==v.transition?B:(s.options.$retry=!0,v.transitionTo(s.to,s.toParams,s.options))},function(){return K}),z(),w}if(b=s.to,c=s.toParams,f=s.options,p=l(b,f.relative),!C(p)){if(f.relative)throw new Error("Could not resolve '"+b+"' from state '"+f.relative+"'");throw new Error("No such state '"+b+"'")}}if(p[y])throw new Error("Cannot transition to abstract state '"+b+"'");f.inherit&&(c=h(q,c||{},v.$current,p)),b=p;var x,D,E=b.path,G=u.locals,H=[];for(x=0,D=E[x];D&&D===o[x]&&j(c,n,D.ownParams)&&!f.reload;x++,D=E[x])G=H[x]=D.locals;if(t(b,k,G,f))return b.self.reloadOnSearch!==!1&&z(),v.transition=null,e.when(v.current);if(c=i(b.params,c||{}),f.notify&&(g=a.$broadcast("$stateChangeStart",b.self,c,k.self,n),g.defaultPrevented))return z(),F;for(var N=e.when(G),O=x;O<E.length;O++,D=E[O])G=H[O]=d(G),N=A(D,c,D===b,N,G);var P=v.transition=N.then(function(){var d,e,g;if(v.transition!==P)return B;for(d=o.length-1;d>=x;d--)g=o[d],g.self.onExit&&m.invoke(g.self.onExit,g.self,g.locals.globals),g.locals=null;for(d=x;d<E.length;d++)e=E[d],e.locals=H[d],e.self.onEnter&&m.invoke(e.self.onEnter,e.self,e.locals.globals);if(v.transition!==P)return B;v.$current=b,v.current=b.self,v.params=c,J(v.params,q),v.transition=null;var h=b.navigable;return f.location&&h&&(r.url(h.url.format(h.locals.globals.$stateParams)),"replace"===f.location&&r.replace()),f.notify&&a.$broadcast("$stateChangeSuccess",b.self,c,k.self,n),M=r.url(),v.current},function(d){return v.transition!==P?B:(v.transition=null,a.$broadcast("$stateChangeError",b.self,c,k.self,n,d),z(),e.reject(d))});return P},v.is=function(a,d){var e=l(a);return C(e)?v.$current!==e?!1:C(d)&&null!==d?b.equals(q,d):!0:c},v.includes=function(a,d){if(E(a)&&o(a)){if(!p(a))return!1;a=v.$current.name}var e=l(a);if(!C(e))return c;if(!C(v.$current.includes[e.name]))return!1;var f=!0;return b.forEach(d,function(a,b){C(q[b])&&q[b]===a||(f=!1)}),f},v.href=function(a,b,c){c=I({lossy:!0,inherit:!1,absolute:!1,relative:v.$current},c||{});var d=l(a,c.relative);if(!C(d))return null;b=h(q,b||{},v.$current,d);var e=d&&c.lossy?d.navigable:d,g=e&&e.url?e.url.format(i(d.params,b||{})):null;return!f.html5Mode()&&g&&(g="#"+f.hashPrefix()+g),"/"!==N&&(f.html5Mode()?g=N.slice(0,-1)+g:c.absolute&&(g=N.slice(1)+g)),c.absolute&&g&&(g=r.protocol()+"://"+r.host()+(80==r.port()||443==r.port()?"":":"+r.port())+(!f.html5Mode()&&g?"/":"")+g),g},v.get=function(a,b){if(!C(a)){var c=[];return H(w,function(a){c.push(a.self)}),c}var d=l(a,b);return d&&d.self?d.self:null},v}function t(a,b,c,d){return a!==b||(c!==b.locals||d.reload)&&a.self.reloadOnSearch!==!1?void 0:!0}var u,v,w={},x={},y="abstract",z={parent:function(a){if(C(a.parent)&&a.parent)return l(a.parent);var b=/^(.+)\.[^.]+$/.exec(a.name);return b?l(b[1]):u},data:function(a){return a.parent&&a.parent.data&&(a.data=a.self.data=I({},a.parent.data,a.data)),a.data},url:function(a){var b=a.url;if(E(b))return"^"==b.charAt(0)?e.compile(b.substring(1)):(a.parent.navigable||u).url.concat(b);if(e.isMatcher(b)||null==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},params:function(a){if(!a.params)return a.url?a.url.parameters():a.parent.params;if(!G(a.params))throw new Error("Invalid params in state '"+a+"'");if(a.url)throw new Error("Both params and url specicified in state '"+a+"'");return a.params},views:function(a){var b={};return H(C(a.views)?a.views:{"":a},function(c,d){d.indexOf("@")<0&&(d+="@"+a.parent.name),b[d]=c}),b},ownParams:function(a){if(!a.parent)return a.params;var b={};H(a.params,function(a){b[a]=!0}),H(a.parent.params,function(c){if(!b[c])throw new Error("Missing required parameter '"+c+"' in state '"+a.name+"'");b[c]=!1});var c=[];return H(b,function(a,b){a&&c.push(b)}),c},path:function(a){return a.parent?a.parent.path.concat(a):[]},includes:function(a){var b=a.parent?I({},a.parent.includes):{};return b[a.name]=!0,b},$delegates:{}};u=n({name:"",url:"^",views:null,"abstract":!0}),u.navigable=null,this.decorator=q,this.state=r,this.$get=s,s.$inject=["$rootScope","$q","$view","$injector","$resolve","$stateParams","$location","$urlRouter","$browser"]}function r(){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=I(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 s(){var a=!1;this.useAnchorScroll=function(){a=!0},this.$get=["$anchorScroll","$timeout",function(b,c){return a?b:function(a){c(function(){a[0].scrollIntoView()},0,!1)}}]}function t(a,c,d){function e(){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 f(a,b){var c=function(){return{enter:function(a,b,c){b.after(a),c()},leave:function(a,b){a.remove(),b()}}};if(i)return{enter:function(a,b,c){i.enter(a,null,b,c)},leave:function(a,b){i.leave(a,b)}};if(h){var d=h&&h(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 g=e(),h=g("$animator"),i=g("$animate"),j={restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(c,e,g){return function(c,e,h){function i(){k&&(k.remove(),k=null),m&&(m.$destroy(),m=null),l&&(q.leave(l,function(){k=null}),k=l,l=null)}function j(f){var h=c.$new(),j=l&&l.data("$uiViewName"),k=j&&a.$current&&a.$current.locals[j];if(f||k!==n){var r=g(h,function(a){q.enter(a,e,function(){(b.isDefined(p)&&!p||c.$eval(p))&&d(a)}),i()});n=a.$current.locals[r.data("$uiViewName")],l=r,m=h,m.$emit("$viewContentLoaded"),m.$eval(o)}}var k,l,m,n,o=h.onload||"",p=h.autoscroll,q=f(h,c);c.$on("$stateChangeSuccess",function(){j(!1)}),c.$on("$viewContentLoading",function(){j(!1)}),j(!0)}}};return j}function u(a,b,c){return{restrict:"ECA",priority:-400,compile:function(d){var e=d.html();return function(d,f,g){var h=g.uiView||g.name||"",i=f.inheritedData("$uiView");h.indexOf("@")<0&&(h=h+"@"+(i?i.state.name:"")),f.data("$uiViewName",h);var j=c.$current,k=j&&j.locals[h];if(k){f.data("$uiView",{name:h,state:k.$$state}),f.html(k.$template?k.$template:e);var l=a(f.contents());if(k.$$controller){k.$scope=d;var m=b(k.$$controller,k);k.$$controllerAs&&(d[k.$$controllerAs]=m),f.data("$ngControllerController",m),f.children().data("$ngControllerController",m)}l(d)}}}}}function v(a){var b=a.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/);if(!b||4!==b.length)throw new Error("Invalid state ref '"+a+"'");return{state:b[1],paramExpr:b[3]||null}}function w(a){var b=a.parent().inheritedData("$uiView");return b&&b.state&&b.state.name?b.state:void 0}function x(a,c){var d=["location","inherit","reload"];return{restrict:"A",require:"?^uiSrefActive",link:function(e,f,g,h){var i=v(g.uiSref),j=null,k=w(f)||a.$current,l="FORM"===f[0].nodeName,m=l?"action":"href",n=!0,o={relative:k},p=e.$eval(g.uiSrefOpts)||{};b.forEach(d,function(a){a in p&&(o[a]=p[a])});var q=function(b){if(b&&(j=b),n){var c=a.href(i.state,j,o);return h&&h.$$setStateInfo(i.state,j),c?void(f[0][m]=c):(n=!1,!1)}};i.paramExpr&&(e.$watch(i.paramExpr,function(a){a!==j&&q(a)},!0),j=e.$eval(i.paramExpr)),q(),l||f.bind("click",function(b){var d=b.which||b.button;d>1||b.ctrlKey||b.metaKey||b.shiftKey||f.attr("target")||(c(function(){a.go(i.state,j,o)}),b.preventDefault())})}}}function y(a,b,c){return{restrict:"A",controller:["$scope","$element","$attrs",function(d,e,f){function g(){a.$current.self===i&&h()?e.addClass(l):e.removeClass(l)}function h(){return!k||j(k,b)}var i,k,l;l=c(f.uiSrefActive||"",!1)(d),this.$$setStateInfo=function(b,c){i=a.get(b,w(e)),k=c,g()},d.$on("$stateChangeSuccess",g)}]}}function z(a){return function(b){return a.is(b)}}function A(a){return function(b){return a.includes(b)}}function B(a,b){function e(a){this.locals=a.locals.globals,this.params=this.locals.$stateParams}function f(){this.locals=null,this.params=null}function g(c,g){if(null!=g.redirectTo){var h,j=g.redirectTo;if(E(j))h=j;else{if(!D(j))throw new Error("Invalid 'redirectTo' in when()");h=function(a,b){return j(a,b.path(),b.search())}}b.when(c,h)}else a.state(d(g,{parent:null,name:"route:"+encodeURIComponent(c),url:c,onEnter:e,onExit:f}));return i.push(g),this}function h(a,b,d){function e(a){return""!==a.name?a:c}var f={routes:i,params:d,current:c};return b.$on("$stateChangeStart",function(a,c,d,f){b.$broadcast("$routeChangeStart",e(c),e(f))}),b.$on("$stateChangeSuccess",function(a,c,d,g){f.current=e(c),b.$broadcast("$routeChangeSuccess",e(c),e(g)),J(d,f.params)}),b.$on("$stateChangeError",function(a,c,d,f,g,h){b.$broadcast("$routeChangeError",e(c),e(f),h)}),f}var i=[];e.$inject=["$$state"],this.when=g,this.$get=h,h.$inject=["$state","$rootScope","$routeParams"]}var C=b.isDefined,D=b.isFunction,E=b.isString,F=b.isObject,G=b.isArray,H=b.forEach,I=b.extend,J=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"]),l.$inject=["$q","$injector"],b.module("ui.router.util").service("$resolve",l),m.$inject=["$http","$templateCache","$injector"],b.module("ui.router.util").service("$templateFactory",m),n.prototype.concat=function(a){return new n(this.sourcePath+a+this.sourceSearch)},n.prototype.toString=function(){return this.source},n.prototype.exec=function(a,b){var c=this.regexp.exec(a);if(!c)return null;var d,e=this.params,f=e.length,g=this.segments.length-1,h={};if(g!==c.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");for(d=0;g>d;d++)h[e[d]]=c[d+1];for(;f>d;d++)h[e[d]]=b[e[d]];return h},n.prototype.parameters=function(){return this.params},n.prototype.format=function(a){var b=this.segments,c=this.params;if(!a)return b.join("");var d,e,f,g=b.length-1,h=c.length,i=b[0];for(d=0;g>d;d++)f=a[c[d]],null!=f&&(i+=encodeURIComponent(f)),i+=b[d+1];for(;h>d;d++)f=a[c[d]],null!=f&&(i+=(e?"&":"?")+c[d]+"="+encodeURIComponent(f),e=!0);return i},b.module("ui.router.util").provider("$urlMatcherFactory",o),p.$inject=["$urlMatcherFactoryProvider"],b.module("ui.router.router").provider("$urlRouter",p),q.$inject=["$urlRouterProvider","$urlMatcherFactoryProvider","$locationProvider"],b.module("ui.router.state").value("$stateParams",{}).provider("$state",q),r.$inject=[],b.module("ui.router.state").provider("$view",r),b.module("ui.router.state").provider("$uiViewScroll",s),t.$inject=["$state","$injector","$uiViewScroll"],u.$inject=["$compile","$controller","$state"],b.module("ui.router.state").directive("uiView",t),b.module("ui.router.state").directive("uiView",u),x.$inject=["$state","$timeout"],y.$inject=["$state","$stateParams","$interpolate"],b.module("ui.router.state").directive("uiSref",x).directive("uiSrefActive",y),z.$inject=["$state"],A.$inject=["$state"],b.module("ui.router.state").filter("isState",z).filter("includedByState",A),B.$inject=["$stateProvider","$urlRouterProvider"],b.module("ui.router.compat").provider("$route",B).directive("ngView",t)}(window,window.angular);
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
/*jshint globalstrict:true*/
|
|
2
|
+
/*global angular:false*/
|
|
3
|
+
'use strict';
|
|
4
|
+
|
|
5
|
+
var isDefined = angular.isDefined,
|
|
6
|
+
isFunction = angular.isFunction,
|
|
7
|
+
isString = angular.isString,
|
|
8
|
+
isObject = angular.isObject,
|
|
9
|
+
isArray = angular.isArray,
|
|
10
|
+
forEach = angular.forEach,
|
|
11
|
+
extend = angular.extend,
|
|
12
|
+
copy = angular.copy;
|
|
13
|
+
|
|
14
|
+
function inherit(parent, extra) {
|
|
15
|
+
return extend(new (extend(function() {}, { prototype: parent }))(), extra);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function merge(dst) {
|
|
19
|
+
forEach(arguments, function(obj) {
|
|
20
|
+
if (obj !== dst) {
|
|
21
|
+
forEach(obj, function(value, key) {
|
|
22
|
+
if (!dst.hasOwnProperty(key)) dst[key] = value;
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
return dst;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Finds the common ancestor path between two states.
|
|
31
|
+
*
|
|
32
|
+
* @param {Object} first The first state.
|
|
33
|
+
* @param {Object} second The second state.
|
|
34
|
+
* @return {Array} Returns an array of state names in descending order, not including the root.
|
|
35
|
+
*/
|
|
36
|
+
function ancestors(first, second) {
|
|
37
|
+
var path = [];
|
|
38
|
+
|
|
39
|
+
for (var n in first.path) {
|
|
40
|
+
if (first.path[n] !== second.path[n]) break;
|
|
41
|
+
path.push(first.path[n]);
|
|
42
|
+
}
|
|
43
|
+
return path;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* IE8-safe wrapper for `Object.keys()`.
|
|
48
|
+
*
|
|
49
|
+
* @param {Object} object A JavaScript object.
|
|
50
|
+
* @return {Array} Returns the keys of the object as an array.
|
|
51
|
+
*/
|
|
52
|
+
function keys(object) {
|
|
53
|
+
if (Object.keys) {
|
|
54
|
+
return Object.keys(object);
|
|
55
|
+
}
|
|
56
|
+
var result = [];
|
|
57
|
+
|
|
58
|
+
angular.forEach(object, function(val, key) {
|
|
59
|
+
result.push(key);
|
|
60
|
+
});
|
|
61
|
+
return result;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* IE8-safe wrapper for `Array.prototype.indexOf()`.
|
|
66
|
+
*
|
|
67
|
+
* @param {Array} array A JavaScript array.
|
|
68
|
+
* @param {*} value A value to search the array for.
|
|
69
|
+
* @return {Number} Returns the array index value of `value`, or `-1` if not present.
|
|
70
|
+
*/
|
|
71
|
+
function arraySearch(array, value) {
|
|
72
|
+
if (Array.prototype.indexOf) {
|
|
73
|
+
return array.indexOf(value, Number(arguments[2]) || 0);
|
|
74
|
+
}
|
|
75
|
+
var len = array.length >>> 0, from = Number(arguments[2]) || 0;
|
|
76
|
+
from = (from < 0) ? Math.ceil(from) : Math.floor(from);
|
|
77
|
+
|
|
78
|
+
if (from < 0) from += len;
|
|
79
|
+
|
|
80
|
+
for (; from < len; from++) {
|
|
81
|
+
if (from in array && array[from] === value) return from;
|
|
82
|
+
}
|
|
83
|
+
return -1;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Merges a set of parameters with all parameters inherited between the common parents of the
|
|
88
|
+
* current state and a given destination state.
|
|
89
|
+
*
|
|
90
|
+
* @param {Object} currentParams The value of the current state parameters ($stateParams).
|
|
91
|
+
* @param {Object} newParams The set of parameters which will be composited with inherited params.
|
|
92
|
+
* @param {Object} $current Internal definition of object representing the current state.
|
|
93
|
+
* @param {Object} $to Internal definition of object representing state to transition to.
|
|
94
|
+
*/
|
|
95
|
+
function inheritParams(currentParams, newParams, $current, $to) {
|
|
96
|
+
var parents = ancestors($current, $to), parentParams, inherited = {}, inheritList = [];
|
|
97
|
+
|
|
98
|
+
for (var i in parents) {
|
|
99
|
+
if (!parents[i].params || !parents[i].params.length) continue;
|
|
100
|
+
parentParams = parents[i].params;
|
|
101
|
+
|
|
102
|
+
for (var j in parentParams) {
|
|
103
|
+
if (arraySearch(inheritList, parentParams[j]) >= 0) continue;
|
|
104
|
+
inheritList.push(parentParams[j]);
|
|
105
|
+
inherited[parentParams[j]] = currentParams[parentParams[j]];
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return extend({}, inherited, newParams);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Normalizes a set of values to string or `null`, filtering them by a list of keys.
|
|
113
|
+
*
|
|
114
|
+
* @param {Array} keys The list of keys to normalize/return.
|
|
115
|
+
* @param {Object} values An object hash of values to normalize.
|
|
116
|
+
* @return {Object} Returns an object hash of normalized string values.
|
|
117
|
+
*/
|
|
118
|
+
function normalize(keys, values) {
|
|
119
|
+
var normalized = {};
|
|
120
|
+
|
|
121
|
+
forEach(keys, function (name) {
|
|
122
|
+
var value = values[name];
|
|
123
|
+
normalized[name] = (value != null) ? String(value) : null;
|
|
124
|
+
});
|
|
125
|
+
return normalized;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Performs a non-strict comparison of the subset of two objects, defined by a list of keys.
|
|
130
|
+
*
|
|
131
|
+
* @param {Object} a The first object.
|
|
132
|
+
* @param {Object} b The second object.
|
|
133
|
+
* @param {Array} keys The list of keys within each object to compare. If the list is empty or not specified,
|
|
134
|
+
* it defaults to the list of keys in `a`.
|
|
135
|
+
* @return {Boolean} Returns `true` if the keys match, otherwise `false`.
|
|
136
|
+
*/
|
|
137
|
+
function equalForKeys(a, b, keys) {
|
|
138
|
+
if (!keys) {
|
|
139
|
+
keys = [];
|
|
140
|
+
for (var n in a) keys.push(n); // Used instead of Object.keys() for IE8 compatibility
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
for (var i=0; i<keys.length; i++) {
|
|
144
|
+
var k = keys[i];
|
|
145
|
+
if (a[k] != b[k]) return false; // Not '===', values aren't necessarily normalized
|
|
146
|
+
}
|
|
147
|
+
return true;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Returns the subset of an object, based on a list of keys.
|
|
152
|
+
*
|
|
153
|
+
* @param {Array} keys
|
|
154
|
+
* @param {Object} values
|
|
155
|
+
* @return {Boolean} Returns a subset of `values`.
|
|
156
|
+
*/
|
|
157
|
+
function filterByKeys(keys, values) {
|
|
158
|
+
var filtered = {};
|
|
159
|
+
|
|
160
|
+
forEach(keys, function (name) {
|
|
161
|
+
filtered[name] = values[name];
|
|
162
|
+
});
|
|
163
|
+
return filtered;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* @ngdoc overview
|
|
167
|
+
* @name ui.router.util
|
|
168
|
+
*
|
|
169
|
+
* @description
|
|
170
|
+
* # ui.router.util sub-module
|
|
171
|
+
*
|
|
172
|
+
* This module is a dependency of other sub-modules. Do not include this module as a dependency
|
|
173
|
+
* in your angular app (use {@link ui.router} module instead).
|
|
174
|
+
*
|
|
175
|
+
*/
|
|
176
|
+
angular.module('ui.router.util', ['ng']);
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* @ngdoc overview
|
|
180
|
+
* @name ui.router.router
|
|
181
|
+
*
|
|
182
|
+
* @requires ui.router.util
|
|
183
|
+
*
|
|
184
|
+
* @description
|
|
185
|
+
* # ui.router.router sub-module
|
|
186
|
+
*
|
|
187
|
+
* This module is a dependency of other sub-modules. Do not include this module as a dependency
|
|
188
|
+
* in your angular app (use {@link ui.router} module instead).
|
|
189
|
+
*/
|
|
190
|
+
angular.module('ui.router.router', ['ui.router.util']);
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* @ngdoc overview
|
|
194
|
+
* @name ui.router.state
|
|
195
|
+
*
|
|
196
|
+
* @requires ui.router.router
|
|
197
|
+
* @requires ui.router.util
|
|
198
|
+
*
|
|
199
|
+
* @description
|
|
200
|
+
* # ui.router.state sub-module
|
|
201
|
+
*
|
|
202
|
+
* This module is a dependency of the main ui.router module. Do not include this module as a dependency
|
|
203
|
+
* in your angular app (use {@link ui.router} module instead).
|
|
204
|
+
*
|
|
205
|
+
*/
|
|
206
|
+
angular.module('ui.router.state', ['ui.router.router', 'ui.router.util']);
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* @ngdoc overview
|
|
210
|
+
* @name ui.router
|
|
211
|
+
*
|
|
212
|
+
* @requires ui.router.state
|
|
213
|
+
*
|
|
214
|
+
* @description
|
|
215
|
+
* # ui.router
|
|
216
|
+
*
|
|
217
|
+
* ## The main module for ui.router
|
|
218
|
+
* There are several sub-modules included with the ui.router module, however only this module is needed
|
|
219
|
+
* as a dependency within your angular app. The other modules are for organization purposes.
|
|
220
|
+
*
|
|
221
|
+
* The modules are:
|
|
222
|
+
* * ui.router - the main "umbrella" module
|
|
223
|
+
* * ui.router.router -
|
|
224
|
+
*
|
|
225
|
+
* *You'll need to include **only** this module as the dependency within your angular app.*
|
|
226
|
+
*
|
|
227
|
+
* <pre>
|
|
228
|
+
* <!doctype html>
|
|
229
|
+
* <html ng-app="myApp">
|
|
230
|
+
* <head>
|
|
231
|
+
* <script src="js/angular.js"></script>
|
|
232
|
+
* <!-- Include the ui-router script -->
|
|
233
|
+
* <script src="js/angular-ui-router.min.js"></script>
|
|
234
|
+
* <script>
|
|
235
|
+
* // ...and add 'ui.router' as a dependency
|
|
236
|
+
* var myApp = angular.module('myApp', ['ui.router']);
|
|
237
|
+
* </script>
|
|
238
|
+
* </head>
|
|
239
|
+
* <body>
|
|
240
|
+
* </body>
|
|
241
|
+
* </html>
|
|
242
|
+
* </pre>
|
|
243
|
+
*/
|
|
244
|
+
angular.module('ui.router', ['ui.router.state']);
|
|
245
|
+
|
|
246
|
+
angular.module('ui.router.compat', ['ui.router']);
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* @ngdoc object
|
|
3
|
+
* @name ui.router.compat.$routeProvider
|
|
4
|
+
*
|
|
5
|
+
* @requires ui.router.state.$stateProvider
|
|
6
|
+
* @requires ui.router.router.$urlRouterProvider
|
|
7
|
+
*
|
|
8
|
+
* @description
|
|
9
|
+
* `$routeProvider` of the `ui.router.compat` module overwrites the existing
|
|
10
|
+
* `routeProvider` from the core. This is done to provide compatibility between
|
|
11
|
+
* the UI Router and the core router.
|
|
12
|
+
*
|
|
13
|
+
* It also provides a `when()` method to register routes that map to certain urls.
|
|
14
|
+
* Behind the scenes it actually delegates either to
|
|
15
|
+
* {@link ui.router.router.$urlRouterProvider $urlRouterProvider} or to the
|
|
16
|
+
* {@link ui.router.state.$stateProvider $stateProvider} to postprocess the given
|
|
17
|
+
* router definition object.
|
|
18
|
+
*/
|
|
19
|
+
$RouteProvider.$inject = ['$stateProvider', '$urlRouterProvider'];
|
|
20
|
+
function $RouteProvider( $stateProvider, $urlRouterProvider) {
|
|
21
|
+
|
|
22
|
+
var routes = [];
|
|
23
|
+
|
|
24
|
+
onEnterRoute.$inject = ['$$state'];
|
|
25
|
+
function onEnterRoute( $$state) {
|
|
26
|
+
/*jshint validthis: true */
|
|
27
|
+
this.locals = $$state.locals.globals;
|
|
28
|
+
this.params = this.locals.$stateParams;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function onExitRoute() {
|
|
32
|
+
/*jshint validthis: true */
|
|
33
|
+
this.locals = null;
|
|
34
|
+
this.params = null;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
this.when = when;
|
|
38
|
+
/*
|
|
39
|
+
* @ngdoc function
|
|
40
|
+
* @name ui.router.compat.$routeProvider#when
|
|
41
|
+
* @methodOf ui.router.compat.$routeProvider
|
|
42
|
+
*
|
|
43
|
+
* @description
|
|
44
|
+
* Registers a route with a given route definition object. The route definition
|
|
45
|
+
* object has the same interface the angular core route definition object has.
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* <pre>
|
|
49
|
+
* var app = angular.module('app', ['ui.router.compat']);
|
|
50
|
+
*
|
|
51
|
+
* app.config(function ($routeProvider) {
|
|
52
|
+
* $routeProvider.when('home', {
|
|
53
|
+
* controller: function () { ... },
|
|
54
|
+
* templateUrl: 'path/to/template'
|
|
55
|
+
* });
|
|
56
|
+
* });
|
|
57
|
+
* </pre>
|
|
58
|
+
*
|
|
59
|
+
* @param {string} url URL as string
|
|
60
|
+
* @param {object} route Route definition object
|
|
61
|
+
*
|
|
62
|
+
* @return {object} $routeProvider - $routeProvider instance
|
|
63
|
+
*/
|
|
64
|
+
function when(url, route) {
|
|
65
|
+
/*jshint validthis: true */
|
|
66
|
+
if (route.redirectTo != null) {
|
|
67
|
+
// Redirect, configure directly on $urlRouterProvider
|
|
68
|
+
var redirect = route.redirectTo, handler;
|
|
69
|
+
if (isString(redirect)) {
|
|
70
|
+
handler = redirect; // leave $urlRouterProvider to handle
|
|
71
|
+
} else if (isFunction(redirect)) {
|
|
72
|
+
// Adapt to $urlRouterProvider API
|
|
73
|
+
handler = function (params, $location) {
|
|
74
|
+
return redirect(params, $location.path(), $location.search());
|
|
75
|
+
};
|
|
76
|
+
} else {
|
|
77
|
+
throw new Error("Invalid 'redirectTo' in when()");
|
|
78
|
+
}
|
|
79
|
+
$urlRouterProvider.when(url, handler);
|
|
80
|
+
} else {
|
|
81
|
+
// Regular route, configure as state
|
|
82
|
+
$stateProvider.state(inherit(route, {
|
|
83
|
+
parent: null,
|
|
84
|
+
name: 'route:' + encodeURIComponent(url),
|
|
85
|
+
url: url,
|
|
86
|
+
onEnter: onEnterRoute,
|
|
87
|
+
onExit: onExitRoute
|
|
88
|
+
}));
|
|
89
|
+
}
|
|
90
|
+
routes.push(route);
|
|
91
|
+
return this;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/*
|
|
95
|
+
* @ngdoc object
|
|
96
|
+
* @name ui.router.compat.$route
|
|
97
|
+
*
|
|
98
|
+
* @requires ui.router.state.$state
|
|
99
|
+
* @requires $rootScope
|
|
100
|
+
* @requires $routeParams
|
|
101
|
+
*
|
|
102
|
+
* @property {object} routes - Array of registered routes.
|
|
103
|
+
* @property {object} params - Current route params as object.
|
|
104
|
+
* @property {string} current - Name of the current route.
|
|
105
|
+
*
|
|
106
|
+
* @description
|
|
107
|
+
* The `$route` service provides interfaces to access defined routes. It also let's
|
|
108
|
+
* you access route params through `$routeParams` service, so you have fully
|
|
109
|
+
* control over all the stuff you would actually get from angular's core `$route`
|
|
110
|
+
* service.
|
|
111
|
+
*/
|
|
112
|
+
this.$get = $get;
|
|
113
|
+
$get.$inject = ['$state', '$rootScope', '$routeParams'];
|
|
114
|
+
function $get( $state, $rootScope, $routeParams) {
|
|
115
|
+
|
|
116
|
+
var $route = {
|
|
117
|
+
routes: routes,
|
|
118
|
+
params: $routeParams,
|
|
119
|
+
current: undefined
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
function stateAsRoute(state) {
|
|
123
|
+
return (state.name !== '') ? state : undefined;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
$rootScope.$on('$stateChangeStart', function (ev, to, toParams, from, fromParams) {
|
|
127
|
+
$rootScope.$broadcast('$routeChangeStart', stateAsRoute(to), stateAsRoute(from));
|
|
128
|
+
});
|
|
129
|
+
|
|
130
|
+
$rootScope.$on('$stateChangeSuccess', function (ev, to, toParams, from, fromParams) {
|
|
131
|
+
$route.current = stateAsRoute(to);
|
|
132
|
+
$rootScope.$broadcast('$routeChangeSuccess', stateAsRoute(to), stateAsRoute(from));
|
|
133
|
+
copy(toParams, $route.params);
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
$rootScope.$on('$stateChangeError', function (ev, to, toParams, from, fromParams, error) {
|
|
137
|
+
$rootScope.$broadcast('$routeChangeError', stateAsRoute(to), stateAsRoute(from), error);
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
return $route;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
angular.module('ui.router.compat')
|
|
145
|
+
.provider('$route', $RouteProvider)
|
|
146
|
+
.directive('ngView', $ViewDirective);
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @ngdoc object
|
|
3
|
+
* @name ui.router.util.$resolve
|
|
4
|
+
*
|
|
5
|
+
* @requires $q
|
|
6
|
+
* @requires $injector
|
|
7
|
+
*
|
|
8
|
+
* @description
|
|
9
|
+
* Manages resolution of (acyclic) graphs of promises.
|
|
10
|
+
*/
|
|
11
|
+
$Resolve.$inject = ['$q', '$injector'];
|
|
12
|
+
function $Resolve( $q, $injector) {
|
|
13
|
+
|
|
14
|
+
var VISIT_IN_PROGRESS = 1,
|
|
15
|
+
VISIT_DONE = 2,
|
|
16
|
+
NOTHING = {},
|
|
17
|
+
NO_DEPENDENCIES = [],
|
|
18
|
+
NO_LOCALS = NOTHING,
|
|
19
|
+
NO_PARENT = extend($q.when(NOTHING), { $$promises: NOTHING, $$values: NOTHING });
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* @ngdoc function
|
|
24
|
+
* @name ui.router.util.$resolve#study
|
|
25
|
+
* @methodOf ui.router.util.$resolve
|
|
26
|
+
*
|
|
27
|
+
* @description
|
|
28
|
+
* Studies a set of invocables that are likely to be used multiple times.
|
|
29
|
+
* <pre>
|
|
30
|
+
* $resolve.study(invocables)(locals, parent, self)
|
|
31
|
+
* </pre>
|
|
32
|
+
* is equivalent to
|
|
33
|
+
* <pre>
|
|
34
|
+
* $resolve.resolve(invocables, locals, parent, self)
|
|
35
|
+
* </pre>
|
|
36
|
+
* but the former is more efficient (in fact `resolve` just calls `study`
|
|
37
|
+
* internally).
|
|
38
|
+
*
|
|
39
|
+
* @param {object} invocables Invocable objects
|
|
40
|
+
* @return {function} a function to pass in locals, parent and self
|
|
41
|
+
*/
|
|
42
|
+
this.study = function (invocables) {
|
|
43
|
+
if (!isObject(invocables)) throw new Error("'invocables' must be an object");
|
|
44
|
+
|
|
45
|
+
// Perform a topological sort of invocables to build an ordered plan
|
|
46
|
+
var plan = [], cycle = [], visited = {};
|
|
47
|
+
function visit(value, key) {
|
|
48
|
+
if (visited[key] === VISIT_DONE) return;
|
|
49
|
+
|
|
50
|
+
cycle.push(key);
|
|
51
|
+
if (visited[key] === VISIT_IN_PROGRESS) {
|
|
52
|
+
cycle.splice(0, cycle.indexOf(key));
|
|
53
|
+
throw new Error("Cyclic dependency: " + cycle.join(" -> "));
|
|
54
|
+
}
|
|
55
|
+
visited[key] = VISIT_IN_PROGRESS;
|
|
56
|
+
|
|
57
|
+
if (isString(value)) {
|
|
58
|
+
plan.push(key, [ function() { return $injector.get(value); }], NO_DEPENDENCIES);
|
|
59
|
+
} else {
|
|
60
|
+
var params = $injector.annotate(value);
|
|
61
|
+
forEach(params, function (param) {
|
|
62
|
+
if (param !== key && invocables.hasOwnProperty(param)) visit(invocables[param], param);
|
|
63
|
+
});
|
|
64
|
+
plan.push(key, value, params);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
cycle.pop();
|
|
68
|
+
visited[key] = VISIT_DONE;
|
|
69
|
+
}
|
|
70
|
+
forEach(invocables, visit);
|
|
71
|
+
invocables = cycle = visited = null; // plan is all that's required
|
|
72
|
+
|
|
73
|
+
function isResolve(value) {
|
|
74
|
+
return isObject(value) && value.then && value.$$promises;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
return function (locals, parent, self) {
|
|
78
|
+
if (isResolve(locals) && self === undefined) {
|
|
79
|
+
self = parent; parent = locals; locals = null;
|
|
80
|
+
}
|
|
81
|
+
if (!locals) locals = NO_LOCALS;
|
|
82
|
+
else if (!isObject(locals)) {
|
|
83
|
+
throw new Error("'locals' must be an object");
|
|
84
|
+
}
|
|
85
|
+
if (!parent) parent = NO_PARENT;
|
|
86
|
+
else if (!isResolve(parent)) {
|
|
87
|
+
throw new Error("'parent' must be a promise returned by $resolve.resolve()");
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// To complete the overall resolution, we have to wait for the parent
|
|
91
|
+
// promise and for the promise for each invokable in our plan.
|
|
92
|
+
var resolution = $q.defer(),
|
|
93
|
+
result = resolution.promise,
|
|
94
|
+
promises = result.$$promises = {},
|
|
95
|
+
values = extend({}, locals),
|
|
96
|
+
wait = 1 + plan.length/3,
|
|
97
|
+
merged = false;
|
|
98
|
+
|
|
99
|
+
function done() {
|
|
100
|
+
// Merge parent values we haven't got yet and publish our own $$values
|
|
101
|
+
if (!--wait) {
|
|
102
|
+
if (!merged) merge(values, parent.$$values);
|
|
103
|
+
result.$$values = values;
|
|
104
|
+
result.$$promises = true; // keep for isResolve()
|
|
105
|
+
resolution.resolve(values);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
function fail(reason) {
|
|
110
|
+
result.$$failure = reason;
|
|
111
|
+
resolution.reject(reason);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// Short-circuit if parent has already failed
|
|
115
|
+
if (isDefined(parent.$$failure)) {
|
|
116
|
+
fail(parent.$$failure);
|
|
117
|
+
return result;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// Merge parent values if the parent has already resolved, or merge
|
|
121
|
+
// parent promises and wait if the parent resolve is still in progress.
|
|
122
|
+
if (parent.$$values) {
|
|
123
|
+
merged = merge(values, parent.$$values);
|
|
124
|
+
done();
|
|
125
|
+
} else {
|
|
126
|
+
extend(promises, parent.$$promises);
|
|
127
|
+
parent.then(done, fail);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// Process each invocable in the plan, but ignore any where a local of the same name exists.
|
|
131
|
+
for (var i=0, ii=plan.length; i<ii; i+=3) {
|
|
132
|
+
if (locals.hasOwnProperty(plan[i])) done();
|
|
133
|
+
else invoke(plan[i], plan[i+1], plan[i+2]);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
function invoke(key, invocable, params) {
|
|
137
|
+
// Create a deferred for this invocation. Failures will propagate to the resolution as well.
|
|
138
|
+
var invocation = $q.defer(), waitParams = 0;
|
|
139
|
+
function onfailure(reason) {
|
|
140
|
+
invocation.reject(reason);
|
|
141
|
+
fail(reason);
|
|
142
|
+
}
|
|
143
|
+
// Wait for any parameter that we have a promise for (either from parent or from this
|
|
144
|
+
// resolve; in that case study() will have made sure it's ordered before us in the plan).
|
|
145
|
+
forEach(params, function (dep) {
|
|
146
|
+
if (promises.hasOwnProperty(dep) && !locals.hasOwnProperty(dep)) {
|
|
147
|
+
waitParams++;
|
|
148
|
+
promises[dep].then(function (result) {
|
|
149
|
+
values[dep] = result;
|
|
150
|
+
if (!(--waitParams)) proceed();
|
|
151
|
+
}, onfailure);
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
if (!waitParams) proceed();
|
|
155
|
+
function proceed() {
|
|
156
|
+
if (isDefined(result.$$failure)) return;
|
|
157
|
+
try {
|
|
158
|
+
invocation.resolve($injector.invoke(invocable, self, values));
|
|
159
|
+
invocation.promise.then(function (result) {
|
|
160
|
+
values[key] = result;
|
|
161
|
+
done();
|
|
162
|
+
}, onfailure);
|
|
163
|
+
} catch (e) {
|
|
164
|
+
onfailure(e);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
// Publish promise synchronously; invocations further down in the plan may depend on it.
|
|
168
|
+
promises[key] = invocation.promise;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
return result;
|
|
172
|
+
};
|
|
173
|
+
};
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* @ngdoc function
|
|
177
|
+
* @name ui.router.util.$resolve#resolve
|
|
178
|
+
* @methodOf ui.router.util.$resolve
|
|
179
|
+
*
|
|
180
|
+
* @description
|
|
181
|
+
* Resolves a set of invocables. An invocable is a function to be invoked via
|
|
182
|
+
* `$injector.invoke()`, and can have an arbitrary number of dependencies.
|
|
183
|
+
* An invocable can either return a value directly,
|
|
184
|
+
* or a `$q` promise. If a promise is returned it will be resolved and the
|
|
185
|
+
* resulting value will be used instead. Dependencies of invocables are resolved
|
|
186
|
+
* (in this order of precedence)
|
|
187
|
+
*
|
|
188
|
+
* - from the specified `locals`
|
|
189
|
+
* - from another invocable that is part of this `$resolve` call
|
|
190
|
+
* - from an invocable that is inherited from a `parent` call to `$resolve`
|
|
191
|
+
* (or recursively
|
|
192
|
+
* - from any ancestor `$resolve` of that parent).
|
|
193
|
+
*
|
|
194
|
+
* The return value of `$resolve` is a promise for an object that contains
|
|
195
|
+
* (in this order of precedence)
|
|
196
|
+
*
|
|
197
|
+
* - any `locals` (if specified)
|
|
198
|
+
* - the resolved return values of all injectables
|
|
199
|
+
* - any values inherited from a `parent` call to `$resolve` (if specified)
|
|
200
|
+
*
|
|
201
|
+
* The promise will resolve after the `parent` promise (if any) and all promises
|
|
202
|
+
* returned by injectables have been resolved. If any invocable
|
|
203
|
+
* (or `$injector.invoke`) throws an exception, or if a promise returned by an
|
|
204
|
+
* invocable is rejected, the `$resolve` promise is immediately rejected with the
|
|
205
|
+
* same error. A rejection of a `parent` promise (if specified) will likewise be
|
|
206
|
+
* propagated immediately. Once the `$resolve` promise has been rejected, no
|
|
207
|
+
* further invocables will be called.
|
|
208
|
+
*
|
|
209
|
+
* Cyclic dependencies between invocables are not permitted and will caues `$resolve`
|
|
210
|
+
* to throw an error. As a special case, an injectable can depend on a parameter
|
|
211
|
+
* with the same name as the injectable, which will be fulfilled from the `parent`
|
|
212
|
+
* injectable of the same name. This allows inherited values to be decorated.
|
|
213
|
+
* Note that in this case any other injectable in the same `$resolve` with the same
|
|
214
|
+
* dependency would see the decorated value, not the inherited value.
|
|
215
|
+
*
|
|
216
|
+
* Note that missing dependencies -- unlike cyclic dependencies -- will cause an
|
|
217
|
+
* (asynchronous) rejection of the `$resolve` promise rather than a (synchronous)
|
|
218
|
+
* exception.
|
|
219
|
+
*
|
|
220
|
+
* Invocables are invoked eagerly as soon as all dependencies are available.
|
|
221
|
+
* This is true even for dependencies inherited from a `parent` call to `$resolve`.
|
|
222
|
+
*
|
|
223
|
+
* As a special case, an invocable can be a string, in which case it is taken to
|
|
224
|
+
* be a service name to be passed to `$injector.get()`. This is supported primarily
|
|
225
|
+
* for backwards-compatibility with the `resolve` property of `$routeProvider`
|
|
226
|
+
* routes.
|
|
227
|
+
*
|
|
228
|
+
* @param {object} invocables functions to invoke or
|
|
229
|
+
* `$injector` services to fetch.
|
|
230
|
+
* @param {object} locals values to make available to the injectables
|
|
231
|
+
* @param {object} parent a promise returned by another call to `$resolve`.
|
|
232
|
+
* @param {object} self the `this` for the invoked methods
|
|
233
|
+
* @return {object} Promise for an object that contains the resolved return value
|
|
234
|
+
* of all invocables, as well as any inherited and local values.
|
|
235
|
+
*/
|
|
236
|
+
this.resolve = function (invocables, locals, parent, self) {
|
|
237
|
+
return this.study(invocables)(locals, parent, self);
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
angular.module('ui.router.util').service('$resolve', $Resolve);
|
|
242
|
+
|