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.
Files changed (484) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +11 -0
  3. data/.rspec +3 -0
  4. data/.ruby-version +1 -0
  5. data/.simplecov +7 -0
  6. data/.travis.yml +4 -0
  7. data/CONTRIBUTING.md +183 -0
  8. data/Gemfile +3 -0
  9. data/Guardfile +8 -0
  10. data/LICENSE +22 -0
  11. data/MAINTAINERS +2 -0
  12. data/MAINTAINERS.md +86 -0
  13. data/README.md +69 -3
  14. data/Rakefile +18 -0
  15. data/bin/praxis +10 -0
  16. data/lib/api_browser/.bowerrc +3 -0
  17. data/lib/api_browser/.editorconfig +21 -0
  18. data/lib/api_browser/Gruntfile.js +264 -0
  19. data/lib/api_browser/app/bower_components/angular/.bower.json +16 -0
  20. data/lib/api_browser/app/bower_components/angular/README.md +48 -0
  21. data/lib/api_browser/app/bower_components/angular/angular-csp.css +18 -0
  22. data/lib/api_browser/app/bower_components/angular/angular.js +21464 -0
  23. data/lib/api_browser/app/bower_components/angular/angular.min.js +210 -0
  24. data/lib/api_browser/app/bower_components/angular/angular.min.js.gzip +0 -0
  25. data/lib/api_browser/app/bower_components/angular/angular.min.js.map +8 -0
  26. data/lib/api_browser/app/bower_components/angular/bower.json +7 -0
  27. data/lib/api_browser/app/bower_components/angular-sanitize/.bower.json +19 -0
  28. data/lib/api_browser/app/bower_components/angular-sanitize/README.md +54 -0
  29. data/lib/api_browser/app/bower_components/angular-sanitize/angular-sanitize.js +624 -0
  30. data/lib/api_browser/app/bower_components/angular-sanitize/angular-sanitize.min.js +14 -0
  31. data/lib/api_browser/app/bower_components/angular-sanitize/angular-sanitize.min.js.map +8 -0
  32. data/lib/api_browser/app/bower_components/angular-sanitize/bower.json +8 -0
  33. data/lib/api_browser/app/bower_components/angular-ui-bootstrap-bower/.bower.json +24 -0
  34. data/lib/api_browser/app/bower_components/angular-ui-bootstrap-bower/bower.json +11 -0
  35. data/lib/api_browser/app/bower_components/angular-ui-bootstrap-bower/ui-bootstrap-tpls.js +4116 -0
  36. data/lib/api_browser/app/bower_components/angular-ui-bootstrap-bower/ui-bootstrap-tpls.min.js +10 -0
  37. data/lib/api_browser/app/bower_components/angular-ui-bootstrap-bower/ui-bootstrap.js +3799 -0
  38. data/lib/api_browser/app/bower_components/angular-ui-bootstrap-bower/ui-bootstrap.min.js +9 -0
  39. data/lib/api_browser/app/bower_components/angular-ui-router/.bower.json +34 -0
  40. data/lib/api_browser/app/bower_components/angular-ui-router/CHANGELOG.md +23 -0
  41. data/lib/api_browser/app/bower_components/angular-ui-router/LICENSE +21 -0
  42. data/lib/api_browser/app/bower_components/angular-ui-router/README.md +280 -0
  43. data/lib/api_browser/app/bower_components/angular-ui-router/bower.json +23 -0
  44. data/lib/api_browser/app/bower_components/angular-ui-router/release/angular-ui-router.js +3223 -0
  45. data/lib/api_browser/app/bower_components/angular-ui-router/release/angular-ui-router.min.js +7 -0
  46. data/lib/api_browser/app/bower_components/angular-ui-router/src/common.js +246 -0
  47. data/lib/api_browser/app/bower_components/angular-ui-router/src/compat.js +146 -0
  48. data/lib/api_browser/app/bower_components/angular-ui-router/src/resolve.js +242 -0
  49. data/lib/api_browser/app/bower_components/angular-ui-router/src/state.js +1204 -0
  50. data/lib/api_browser/app/bower_components/angular-ui-router/src/stateDirectives.js +226 -0
  51. data/lib/api_browser/app/bower_components/angular-ui-router/src/stateFilters.js +35 -0
  52. data/lib/api_browser/app/bower_components/angular-ui-router/src/templateFactory.js +110 -0
  53. data/lib/api_browser/app/bower_components/angular-ui-router/src/urlMatcherFactory.js +325 -0
  54. data/lib/api_browser/app/bower_components/angular-ui-router/src/urlRouter.js +273 -0
  55. data/lib/api_browser/app/bower_components/angular-ui-router/src/view.js +71 -0
  56. data/lib/api_browser/app/bower_components/angular-ui-router/src/viewDirective.js +290 -0
  57. data/lib/api_browser/app/bower_components/angular-ui-router/src/viewScroll.js +52 -0
  58. data/lib/api_browser/app/bower_components/bootstrap-sass/.bower.json +26 -0
  59. data/lib/api_browser/app/bower_components/bootstrap-sass/CNAME +1 -0
  60. data/lib/api_browser/app/bower_components/bootstrap-sass/CONTRIBUTING.md +61 -0
  61. data/lib/api_browser/app/bower_components/bootstrap-sass/DOCS-LICENSE +319 -0
  62. data/lib/api_browser/app/bower_components/bootstrap-sass/Gemfile +5 -0
  63. data/lib/api_browser/app/bower_components/bootstrap-sass/Gemfile.lock +14 -0
  64. data/lib/api_browser/app/bower_components/bootstrap-sass/Gruntfile.js +244 -0
  65. data/lib/api_browser/app/bower_components/bootstrap-sass/LICENSE +176 -0
  66. data/lib/api_browser/app/bower_components/bootstrap-sass/LICENSE-MIT +21 -0
  67. data/lib/api_browser/app/bower_components/bootstrap-sass/README.md +277 -0
  68. data/lib/api_browser/app/bower_components/bootstrap-sass/Rakefile +44 -0
  69. data/lib/api_browser/app/bower_components/bootstrap-sass/_config.yml +25 -0
  70. data/lib/api_browser/app/bower_components/bootstrap-sass/_includes/ads.html +1 -0
  71. data/lib/api_browser/app/bower_components/bootstrap-sass/_includes/footer.html +34 -0
  72. data/lib/api_browser/app/bower_components/bootstrap-sass/_includes/header.html +42 -0
  73. data/lib/api_browser/app/bower_components/bootstrap-sass/_includes/nav-about.html +12 -0
  74. data/lib/api_browser/app/bower_components/bootstrap-sass/_includes/nav-components.html +137 -0
  75. data/lib/api_browser/app/bower_components/bootstrap-sass/_includes/nav-css.html +99 -0
  76. data/lib/api_browser/app/bower_components/bootstrap-sass/_includes/nav-customize.html +40 -0
  77. data/lib/api_browser/app/bower_components/bootstrap-sass/_includes/nav-getting-started.html +44 -0
  78. data/lib/api_browser/app/bower_components/bootstrap-sass/_includes/nav-javascript.html +88 -0
  79. data/lib/api_browser/app/bower_components/bootstrap-sass/_includes/nav-main.html +37 -0
  80. data/lib/api_browser/app/bower_components/bootstrap-sass/_includes/old-bs-docs.html +8 -0
  81. data/lib/api_browser/app/bower_components/bootstrap-sass/_includes/social-buttons.html +16 -0
  82. data/lib/api_browser/app/bower_components/bootstrap-sass/_layouts/default.html +79 -0
  83. data/lib/api_browser/app/bower_components/bootstrap-sass/_layouts/home.html +47 -0
  84. data/lib/api_browser/app/bower_components/bootstrap-sass/about.html +93 -0
  85. data/lib/api_browser/app/bower_components/bootstrap-sass/bower.json +11 -0
  86. data/lib/api_browser/app/bower_components/bootstrap-sass/browserstack.json +37 -0
  87. data/lib/api_browser/app/bower_components/bootstrap-sass/components.html +3689 -0
  88. data/lib/api_browser/app/bower_components/bootstrap-sass/composer.json +28 -0
  89. data/lib/api_browser/app/bower_components/bootstrap-sass/css.html +2674 -0
  90. data/lib/api_browser/app/bower_components/bootstrap-sass/customize.html +1715 -0
  91. data/lib/api_browser/app/bower_components/bootstrap-sass/dist/css/bootstrap-theme.css +427 -0
  92. data/lib/api_browser/app/bower_components/bootstrap-sass/dist/css/bootstrap-theme.min.css +1 -0
  93. data/lib/api_browser/app/bower_components/bootstrap-sass/dist/css/bootstrap.css +6350 -0
  94. data/lib/api_browser/app/bower_components/bootstrap-sass/dist/css/bootstrap.min.css +1 -0
  95. data/lib/api_browser/app/bower_components/bootstrap-sass/dist/fonts/glyphicons-halflings-regular.eot +0 -0
  96. data/lib/api_browser/app/bower_components/bootstrap-sass/dist/fonts/glyphicons-halflings-regular.svg +229 -0
  97. data/lib/api_browser/app/bower_components/bootstrap-sass/dist/fonts/glyphicons-halflings-regular.ttf +0 -0
  98. data/lib/api_browser/app/bower_components/bootstrap-sass/dist/fonts/glyphicons-halflings-regular.woff +0 -0
  99. data/lib/api_browser/app/bower_components/bootstrap-sass/dist/js/bootstrap.js +2002 -0
  100. data/lib/api_browser/app/bower_components/bootstrap-sass/dist/js/bootstrap.min.js +9 -0
  101. data/lib/api_browser/app/bower_components/bootstrap-sass/docs-assets/css/docs.css +1195 -0
  102. data/lib/api_browser/app/bower_components/bootstrap-sass/docs-assets/css/pygments-manni.css +66 -0
  103. data/lib/api_browser/app/bower_components/bootstrap-sass/docs-assets/ico/apple-touch-icon-144-precomposed.png +0 -0
  104. data/lib/api_browser/app/bower_components/bootstrap-sass/docs-assets/ico/favicon.png +0 -0
  105. data/lib/api_browser/app/bower_components/bootstrap-sass/docs-assets/js/application.js +103 -0
  106. data/lib/api_browser/app/bower_components/bootstrap-sass/docs-assets/js/customizer.js +332 -0
  107. data/lib/api_browser/app/bower_components/bootstrap-sass/docs-assets/js/filesaver.js +169 -0
  108. data/lib/api_browser/app/bower_components/bootstrap-sass/docs-assets/js/holder.js +404 -0
  109. data/lib/api_browser/app/bower_components/bootstrap-sass/docs-assets/js/ie8-responsive-file-warning.js +12 -0
  110. data/lib/api_browser/app/bower_components/bootstrap-sass/docs-assets/js/jszip.js +1467 -0
  111. data/lib/api_browser/app/bower_components/bootstrap-sass/docs-assets/js/less.js +9 -0
  112. data/lib/api_browser/app/bower_components/bootstrap-sass/docs-assets/js/raw-files.js +3 -0
  113. data/lib/api_browser/app/bower_components/bootstrap-sass/docs-assets/js/uglify.js +14 -0
  114. data/lib/api_browser/app/bower_components/bootstrap-sass/examples/carousel/carousel.css +148 -0
  115. data/lib/api_browser/app/bower_components/bootstrap-sass/examples/carousel/index.html +206 -0
  116. data/lib/api_browser/app/bower_components/bootstrap-sass/examples/grid/grid.css +28 -0
  117. data/lib/api_browser/app/bower_components/bootstrap-sass/examples/grid/index.html +148 -0
  118. data/lib/api_browser/app/bower_components/bootstrap-sass/examples/jumbotron/index.html +99 -0
  119. data/lib/api_browser/app/bower_components/bootstrap-sass/examples/jumbotron/jumbotron.css +5 -0
  120. data/lib/api_browser/app/bower_components/bootstrap-sass/examples/jumbotron-narrow/index.html +82 -0
  121. data/lib/api_browser/app/bower_components/bootstrap-sass/examples/jumbotron-narrow/jumbotron-narrow.css +79 -0
  122. data/lib/api_browser/app/bower_components/bootstrap-sass/examples/justified-nav/index.html +83 -0
  123. data/lib/api_browser/app/bower_components/bootstrap-sass/examples/justified-nav/justified-nav.css +88 -0
  124. data/lib/api_browser/app/bower_components/bootstrap-sass/examples/navbar/index.html +88 -0
  125. data/lib/api_browser/app/bower_components/bootstrap-sass/examples/navbar/navbar.css +8 -0
  126. data/lib/api_browser/app/bower_components/bootstrap-sass/examples/navbar-fixed-top/index.html +91 -0
  127. data/lib/api_browser/app/bower_components/bootstrap-sass/examples/navbar-fixed-top/navbar-fixed-top.css +4 -0
  128. data/lib/api_browser/app/bower_components/bootstrap-sass/examples/navbar-static-top/index.html +92 -0
  129. data/lib/api_browser/app/bower_components/bootstrap-sass/examples/navbar-static-top/navbar-static-top.css +7 -0
  130. data/lib/api_browser/app/bower_components/bootstrap-sass/examples/non-responsive/index.html +101 -0
  131. data/lib/api_browser/app/bower_components/bootstrap-sass/examples/non-responsive/non-responsive.css +116 -0
  132. data/lib/api_browser/app/bower_components/bootstrap-sass/examples/offcanvas/index.html +130 -0
  133. data/lib/api_browser/app/bower_components/bootstrap-sass/examples/offcanvas/offcanvas.css +50 -0
  134. data/lib/api_browser/app/bower_components/bootstrap-sass/examples/offcanvas/offcanvas.js +5 -0
  135. data/lib/api_browser/app/bower_components/bootstrap-sass/examples/screenshots/carousel.jpg +0 -0
  136. data/lib/api_browser/app/bower_components/bootstrap-sass/examples/screenshots/grid.jpg +0 -0
  137. data/lib/api_browser/app/bower_components/bootstrap-sass/examples/screenshots/jumbotron-narrow.jpg +0 -0
  138. data/lib/api_browser/app/bower_components/bootstrap-sass/examples/screenshots/jumbotron.jpg +0 -0
  139. data/lib/api_browser/app/bower_components/bootstrap-sass/examples/screenshots/justified-nav.jpg +0 -0
  140. data/lib/api_browser/app/bower_components/bootstrap-sass/examples/screenshots/navbar-fixed.jpg +0 -0
  141. data/lib/api_browser/app/bower_components/bootstrap-sass/examples/screenshots/navbar-static.jpg +0 -0
  142. data/lib/api_browser/app/bower_components/bootstrap-sass/examples/screenshots/navbar.jpg +0 -0
  143. data/lib/api_browser/app/bower_components/bootstrap-sass/examples/screenshots/non-responsive.jpg +0 -0
  144. data/lib/api_browser/app/bower_components/bootstrap-sass/examples/screenshots/offcanvas.jpg +0 -0
  145. data/lib/api_browser/app/bower_components/bootstrap-sass/examples/screenshots/sign-in.jpg +0 -0
  146. data/lib/api_browser/app/bower_components/bootstrap-sass/examples/screenshots/starter-template.jpg +0 -0
  147. data/lib/api_browser/app/bower_components/bootstrap-sass/examples/screenshots/sticky-footer-navbar.jpg +0 -0
  148. data/lib/api_browser/app/bower_components/bootstrap-sass/examples/screenshots/sticky-footer.jpg +0 -0
  149. data/lib/api_browser/app/bower_components/bootstrap-sass/examples/screenshots/theme.jpg +0 -0
  150. data/lib/api_browser/app/bower_components/bootstrap-sass/examples/signin/index.html +50 -0
  151. data/lib/api_browser/app/bower_components/bootstrap-sass/examples/signin/signin.css +40 -0
  152. data/lib/api_browser/app/bower_components/bootstrap-sass/examples/starter-template/index.html +68 -0
  153. data/lib/api_browser/app/bower_components/bootstrap-sass/examples/starter-template/starter-template.css +7 -0
  154. data/lib/api_browser/app/bower_components/bootstrap-sass/examples/sticky-footer/index.html +55 -0
  155. data/lib/api_browser/app/bower_components/bootstrap-sass/examples/sticky-footer/sticky-footer.css +38 -0
  156. data/lib/api_browser/app/bower_components/bootstrap-sass/examples/sticky-footer-navbar/index.html +91 -0
  157. data/lib/api_browser/app/bower_components/bootstrap-sass/examples/sticky-footer-navbar/sticky-footer-navbar.css +45 -0
  158. data/lib/api_browser/app/bower_components/bootstrap-sass/examples/theme/index.html +384 -0
  159. data/lib/api_browser/app/bower_components/bootstrap-sass/examples/theme/theme.css +14 -0
  160. data/lib/api_browser/app/bower_components/bootstrap-sass/fonts/glyphicons-halflings-regular.eot +0 -0
  161. data/lib/api_browser/app/bower_components/bootstrap-sass/fonts/glyphicons-halflings-regular.svg +229 -0
  162. data/lib/api_browser/app/bower_components/bootstrap-sass/fonts/glyphicons-halflings-regular.ttf +0 -0
  163. data/lib/api_browser/app/bower_components/bootstrap-sass/fonts/glyphicons-halflings-regular.woff +0 -0
  164. data/lib/api_browser/app/bower_components/bootstrap-sass/getting-started.html +1021 -0
  165. data/lib/api_browser/app/bower_components/bootstrap-sass/index.html +16 -0
  166. data/lib/api_browser/app/bower_components/bootstrap-sass/javascript.html +1983 -0
  167. data/lib/api_browser/app/bower_components/bootstrap-sass/js/affix.js +126 -0
  168. data/lib/api_browser/app/bower_components/bootstrap-sass/js/alert.js +98 -0
  169. data/lib/api_browser/app/bower_components/bootstrap-sass/js/button.js +109 -0
  170. data/lib/api_browser/app/bower_components/bootstrap-sass/js/carousel.js +217 -0
  171. data/lib/api_browser/app/bower_components/bootstrap-sass/js/collapse.js +179 -0
  172. data/lib/api_browser/app/bower_components/bootstrap-sass/js/dropdown.js +154 -0
  173. data/lib/api_browser/app/bower_components/bootstrap-sass/js/modal.js +246 -0
  174. data/lib/api_browser/app/bower_components/bootstrap-sass/js/popover.js +117 -0
  175. data/lib/api_browser/app/bower_components/bootstrap-sass/js/scrollspy.js +158 -0
  176. data/lib/api_browser/app/bower_components/bootstrap-sass/js/tab.js +135 -0
  177. data/lib/api_browser/app/bower_components/bootstrap-sass/js/tests/index.html +52 -0
  178. data/lib/api_browser/app/bower_components/bootstrap-sass/js/tests/unit/affix.js +25 -0
  179. data/lib/api_browser/app/bower_components/bootstrap-sass/js/tests/unit/alert.js +62 -0
  180. data/lib/api_browser/app/bower_components/bootstrap-sass/js/tests/unit/button.js +116 -0
  181. data/lib/api_browser/app/bower_components/bootstrap-sass/js/tests/unit/carousel.js +87 -0
  182. data/lib/api_browser/app/bower_components/bootstrap-sass/js/tests/unit/collapse.js +164 -0
  183. data/lib/api_browser/app/bower_components/bootstrap-sass/js/tests/unit/dropdown.js +219 -0
  184. data/lib/api_browser/app/bower_components/bootstrap-sass/js/tests/unit/modal.js +196 -0
  185. data/lib/api_browser/app/bower_components/bootstrap-sass/js/tests/unit/phantom.js +69 -0
  186. data/lib/api_browser/app/bower_components/bootstrap-sass/js/tests/unit/popover.js +133 -0
  187. data/lib/api_browser/app/bower_components/bootstrap-sass/js/tests/unit/scrollspy.js +37 -0
  188. data/lib/api_browser/app/bower_components/bootstrap-sass/js/tests/unit/tab.js +86 -0
  189. data/lib/api_browser/app/bower_components/bootstrap-sass/js/tests/unit/tooltip.js +437 -0
  190. data/lib/api_browser/app/bower_components/bootstrap-sass/js/tests/unit/transition.js +13 -0
  191. data/lib/api_browser/app/bower_components/bootstrap-sass/js/tests/vendor/jquery.js +6 -0
  192. data/lib/api_browser/app/bower_components/bootstrap-sass/js/tests/vendor/qunit.css +232 -0
  193. data/lib/api_browser/app/bower_components/bootstrap-sass/js/tests/vendor/qunit.js +1510 -0
  194. data/lib/api_browser/app/bower_components/bootstrap-sass/js/tooltip.js +386 -0
  195. data/lib/api_browser/app/bower_components/bootstrap-sass/js/transition.js +56 -0
  196. data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_alerts.scss +67 -0
  197. data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_badges.scss +51 -0
  198. data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_breadcrumbs.scss +23 -0
  199. data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_button-groups.scss +253 -0
  200. data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_buttons.scss +158 -0
  201. data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_carousel.scss +231 -0
  202. data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_close.scss +35 -0
  203. data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_code.scss +53 -0
  204. data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_component-animations.scss +29 -0
  205. data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_dropdowns.scss +193 -0
  206. data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_forms.scss +363 -0
  207. data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_glyphicons.scss +237 -0
  208. data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_grid.scss +93 -0
  209. data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_input-groups.scss +136 -0
  210. data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_jumbotron.scss +40 -0
  211. data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_labels.scss +58 -0
  212. data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_list-group.scss +88 -0
  213. data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_media.scss +56 -0
  214. data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_mixins.scss +861 -0
  215. data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_modals.scss +132 -0
  216. data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_navbar.scss +628 -0
  217. data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_navs.scss +262 -0
  218. data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_normalize.scss +406 -0
  219. data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_pager.scss +55 -0
  220. data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_pagination.scss +85 -0
  221. data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_panels.scss +172 -0
  222. data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_popovers.scss +133 -0
  223. data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_print.scss +105 -0
  224. data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_progress-bars.scss +92 -0
  225. data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_responsive-utilities.scss +198 -0
  226. data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_scaffolding.scss +119 -0
  227. data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_tables.scss +244 -0
  228. data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_theme.scss +247 -0
  229. data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_thumbnails.scss +32 -0
  230. data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_tooltip.scss +95 -0
  231. data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_type.scss +279 -0
  232. data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_utilities.scss +56 -0
  233. data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_variables.scss +637 -0
  234. data/lib/api_browser/app/bower_components/bootstrap-sass/lib/_wells.scss +29 -0
  235. data/lib/api_browser/app/bower_components/bootstrap-sass/lib/bootstrap.scss +49 -0
  236. data/lib/api_browser/app/bower_components/bootstrap-sass/package.json +40 -0
  237. data/lib/api_browser/app/bower_components/jquery/.bower.json +38 -0
  238. data/lib/api_browser/app/bower_components/jquery/MIT-LICENSE.txt +21 -0
  239. data/lib/api_browser/app/bower_components/jquery/bower.json +27 -0
  240. data/lib/api_browser/app/bower_components/jquery/dist/jquery.js +9190 -0
  241. data/lib/api_browser/app/bower_components/jquery/dist/jquery.min.js +5 -0
  242. data/lib/api_browser/app/bower_components/jquery/dist/jquery.min.map +1 -0
  243. data/lib/api_browser/app/bower_components/jquery/src/ajax/jsonp.js +89 -0
  244. data/lib/api_browser/app/bower_components/jquery/src/ajax/load.js +75 -0
  245. data/lib/api_browser/app/bower_components/jquery/src/ajax/parseJSON.js +13 -0
  246. data/lib/api_browser/app/bower_components/jquery/src/ajax/parseXML.js +28 -0
  247. data/lib/api_browser/app/bower_components/jquery/src/ajax/script.js +64 -0
  248. data/lib/api_browser/app/bower_components/jquery/src/ajax/var/nonce.js +5 -0
  249. data/lib/api_browser/app/bower_components/jquery/src/ajax/var/rquery.js +3 -0
  250. data/lib/api_browser/app/bower_components/jquery/src/ajax/xhr.js +135 -0
  251. data/lib/api_browser/app/bower_components/jquery/src/ajax.js +806 -0
  252. data/lib/api_browser/app/bower_components/jquery/src/attributes/attr.js +143 -0
  253. data/lib/api_browser/app/bower_components/jquery/src/attributes/classes.js +158 -0
  254. data/lib/api_browser/app/bower_components/jquery/src/attributes/prop.js +96 -0
  255. data/lib/api_browser/app/bower_components/jquery/src/attributes/support.js +35 -0
  256. data/lib/api_browser/app/bower_components/jquery/src/attributes/val.js +163 -0
  257. data/lib/api_browser/app/bower_components/jquery/src/attributes.js +11 -0
  258. data/lib/api_browser/app/bower_components/jquery/src/callbacks.js +205 -0
  259. data/lib/api_browser/app/bower_components/jquery/src/core/access.js +60 -0
  260. data/lib/api_browser/app/bower_components/jquery/src/core/init.js +123 -0
  261. data/lib/api_browser/app/bower_components/jquery/src/core/parseHTML.js +39 -0
  262. data/lib/api_browser/app/bower_components/jquery/src/core/ready.js +97 -0
  263. data/lib/api_browser/app/bower_components/jquery/src/core/var/rsingleTag.js +4 -0
  264. data/lib/api_browser/app/bower_components/jquery/src/core.js +498 -0
  265. data/lib/api_browser/app/bower_components/jquery/src/css/addGetHookIf.js +24 -0
  266. data/lib/api_browser/app/bower_components/jquery/src/css/curCSS.js +57 -0
  267. data/lib/api_browser/app/bower_components/jquery/src/css/defaultDisplay.js +70 -0
  268. data/lib/api_browser/app/bower_components/jquery/src/css/hiddenVisibleSelectors.js +15 -0
  269. data/lib/api_browser/app/bower_components/jquery/src/css/support.js +91 -0
  270. data/lib/api_browser/app/bower_components/jquery/src/css/swap.js +28 -0
  271. data/lib/api_browser/app/bower_components/jquery/src/css/var/cssExpand.js +3 -0
  272. data/lib/api_browser/app/bower_components/jquery/src/css/var/getStyles.js +5 -0
  273. data/lib/api_browser/app/bower_components/jquery/src/css/var/isHidden.js +13 -0
  274. data/lib/api_browser/app/bower_components/jquery/src/css/var/rmargin.js +3 -0
  275. data/lib/api_browser/app/bower_components/jquery/src/css/var/rnumnonpx.js +5 -0
  276. data/lib/api_browser/app/bower_components/jquery/src/css.js +451 -0
  277. data/lib/api_browser/app/bower_components/jquery/src/data/Data.js +181 -0
  278. data/lib/api_browser/app/bower_components/jquery/src/data/accepts.js +20 -0
  279. data/lib/api_browser/app/bower_components/jquery/src/data/var/data_priv.js +5 -0
  280. data/lib/api_browser/app/bower_components/jquery/src/data/var/data_user.js +5 -0
  281. data/lib/api_browser/app/bower_components/jquery/src/data.js +179 -0
  282. data/lib/api_browser/app/bower_components/jquery/src/deferred.js +149 -0
  283. data/lib/api_browser/app/bower_components/jquery/src/deprecated.js +13 -0
  284. data/lib/api_browser/app/bower_components/jquery/src/dimensions.js +50 -0
  285. data/lib/api_browser/app/bower_components/jquery/src/effects/Tween.js +114 -0
  286. data/lib/api_browser/app/bower_components/jquery/src/effects/animatedSelector.js +13 -0
  287. data/lib/api_browser/app/bower_components/jquery/src/effects.js +649 -0
  288. data/lib/api_browser/app/bower_components/jquery/src/event/alias.js +39 -0
  289. data/lib/api_browser/app/bower_components/jquery/src/event/support.js +9 -0
  290. data/lib/api_browser/app/bower_components/jquery/src/event.js +868 -0
  291. data/lib/api_browser/app/bower_components/jquery/src/exports/amd.js +24 -0
  292. data/lib/api_browser/app/bower_components/jquery/src/exports/global.js +32 -0
  293. data/lib/api_browser/app/bower_components/jquery/src/intro.js +44 -0
  294. data/lib/api_browser/app/bower_components/jquery/src/jquery.js +36 -0
  295. data/lib/api_browser/app/bower_components/jquery/src/manipulation/_evalUrl.js +18 -0
  296. data/lib/api_browser/app/bower_components/jquery/src/manipulation/support.js +31 -0
  297. data/lib/api_browser/app/bower_components/jquery/src/manipulation/var/rcheckableType.js +3 -0
  298. data/lib/api_browser/app/bower_components/jquery/src/manipulation.js +582 -0
  299. data/lib/api_browser/app/bower_components/jquery/src/offset.js +204 -0
  300. data/lib/api_browser/app/bower_components/jquery/src/outro.js +1 -0
  301. data/lib/api_browser/app/bower_components/jquery/src/queue/delay.js +22 -0
  302. data/lib/api_browser/app/bower_components/jquery/src/queue.js +142 -0
  303. data/lib/api_browser/app/bower_components/jquery/src/selector-native.js +172 -0
  304. data/lib/api_browser/app/bower_components/jquery/src/selector-sizzle.js +14 -0
  305. data/lib/api_browser/app/bower_components/jquery/src/selector.js +1 -0
  306. data/lib/api_browser/app/bower_components/jquery/src/serialize.js +111 -0
  307. data/lib/api_browser/app/bower_components/jquery/src/sizzle/dist/sizzle.js +2044 -0
  308. data/lib/api_browser/app/bower_components/jquery/src/sizzle/dist/sizzle.min.js +3 -0
  309. data/lib/api_browser/app/bower_components/jquery/src/sizzle/dist/sizzle.min.map +1 -0
  310. data/lib/api_browser/app/bower_components/jquery/src/traversing/findFilter.js +100 -0
  311. data/lib/api_browser/app/bower_components/jquery/src/traversing/var/rneedsContext.js +6 -0
  312. data/lib/api_browser/app/bower_components/jquery/src/traversing.js +200 -0
  313. data/lib/api_browser/app/bower_components/jquery/src/var/arr.js +3 -0
  314. data/lib/api_browser/app/bower_components/jquery/src/var/class2type.js +4 -0
  315. data/lib/api_browser/app/bower_components/jquery/src/var/concat.js +5 -0
  316. data/lib/api_browser/app/bower_components/jquery/src/var/hasOwn.js +5 -0
  317. data/lib/api_browser/app/bower_components/jquery/src/var/indexOf.js +5 -0
  318. data/lib/api_browser/app/bower_components/jquery/src/var/pnum.js +3 -0
  319. data/lib/api_browser/app/bower_components/jquery/src/var/push.js +5 -0
  320. data/lib/api_browser/app/bower_components/jquery/src/var/rnotwhite.js +3 -0
  321. data/lib/api_browser/app/bower_components/jquery/src/var/slice.js +5 -0
  322. data/lib/api_browser/app/bower_components/jquery/src/var/strundefined.js +3 -0
  323. data/lib/api_browser/app/bower_components/jquery/src/var/support.js +4 -0
  324. data/lib/api_browser/app/bower_components/jquery/src/var/toString.js +5 -0
  325. data/lib/api_browser/app/bower_components/jquery/src/wrap.js +78 -0
  326. data/lib/api_browser/app/bower_components/lodash/.bower.json +34 -0
  327. data/lib/api_browser/app/bower_components/lodash/LICENSE.txt +22 -0
  328. data/lib/api_browser/app/bower_components/lodash/bower.json +23 -0
  329. data/lib/api_browser/app/bower_components/lodash/dist/lodash.compat.js +7157 -0
  330. data/lib/api_browser/app/bower_components/lodash/dist/lodash.compat.min.js +61 -0
  331. data/lib/api_browser/app/bower_components/lodash/dist/lodash.js +6785 -0
  332. data/lib/api_browser/app/bower_components/lodash/dist/lodash.min.js +56 -0
  333. data/lib/api_browser/app/bower_components/lodash/dist/lodash.underscore.js +4979 -0
  334. data/lib/api_browser/app/bower_components/lodash/dist/lodash.underscore.min.js +39 -0
  335. data/lib/api_browser/app/css/main.css +4510 -0
  336. data/lib/api_browser/app/index.html +51 -0
  337. data/lib/api_browser/app/js/app.js +32 -0
  338. data/lib/api_browser/app/js/controllers/action.js +51 -0
  339. data/lib/api_browser/app/js/controllers/controller.js +10 -0
  340. data/lib/api_browser/app/js/controllers/menu.js +49 -0
  341. data/lib/api_browser/app/js/controllers/type.js +28 -0
  342. data/lib/api_browser/app/js/directives/attribute_description.js +43 -0
  343. data/lib/api_browser/app/js/directives/attribute_table.js +27 -0
  344. data/lib/api_browser/app/js/directives/attribute_table_row.js +17 -0
  345. data/lib/api_browser/app/js/directives/no_container.js +8 -0
  346. data/lib/api_browser/app/js/directives/request_body.js +25 -0
  347. data/lib/api_browser/app/js/directives/request_headers.js +20 -0
  348. data/lib/api_browser/app/js/directives/request_parameters.js +20 -0
  349. data/lib/api_browser/app/js/directives/type_label.js +53 -0
  350. data/lib/api_browser/app/js/factories/Documentation.js +16 -0
  351. data/lib/api_browser/app/js/factories/PayloadTemplates.js +10 -0
  352. data/lib/api_browser/app/js/factories/TemplateProvider.js +45 -0
  353. data/lib/api_browser/app/js/factories/TypeTemplates.js +11 -0
  354. data/lib/api_browser/app/js/filters/attribute_name.js +9 -0
  355. data/lib/api_browser/app/js/filters/friendly_json.js +5 -0
  356. data/lib/api_browser/app/js/filters/is_empty.js +8 -0
  357. data/lib/api_browser/app/js/filters/resource_name.js +5 -0
  358. data/lib/api_browser/app/sass/main.scss +59 -0
  359. data/lib/api_browser/app/sass/modules/_body.scss +11 -0
  360. data/lib/api_browser/app/sass/modules/_cloke.scss +8 -0
  361. data/lib/api_browser/app/sass/modules/_header.scss +15 -0
  362. data/lib/api_browser/app/sass/modules/_nav.scss +7 -0
  363. data/lib/api_browser/app/sass/modules/_sidebar.scss +26 -0
  364. data/lib/api_browser/app/sass/modules/_switch.scss +55 -0
  365. data/lib/api_browser/app/sass/modules/_table.scss +13 -0
  366. data/lib/api_browser/app/sass/variables/_bootstrap-variables.scss +762 -0
  367. data/lib/api_browser/app/views/action.html +83 -0
  368. data/lib/api_browser/app/views/controller.html +24 -0
  369. data/lib/api_browser/app/views/directives/attribute_description/_default.html +2 -0
  370. data/lib/api_browser/app/views/directives/attribute_description/_example.html +8 -0
  371. data/lib/api_browser/app/views/directives/attribute_description/_headers.html +8 -0
  372. data/lib/api_browser/app/views/directives/attribute_description.html +2 -0
  373. data/lib/api_browser/app/views/directives/attribute_table.html +23 -0
  374. data/lib/api_browser/app/views/directives/attribute_table_row/_default.html +10 -0
  375. data/lib/api_browser/app/views/directives/attribute_table_row/_links.html +10 -0
  376. data/lib/api_browser/app/views/directives/attribute_table_row/_struct.html +2 -0
  377. data/lib/api_browser/app/views/directives/request_body/_default.html +20 -0
  378. data/lib/api_browser/app/views/directives/request_body/_struct.html +1 -0
  379. data/lib/api_browser/app/views/home.html +7 -0
  380. data/lib/api_browser/app/views/layout.html +50 -0
  381. data/lib/api_browser/app/views/resource/_actions.html +23 -0
  382. data/lib/api_browser/app/views/type/_details.html +29 -0
  383. data/lib/api_browser/app/views/type.html +25 -0
  384. data/lib/api_browser/bower.json +26 -0
  385. data/lib/api_browser/package.json +30 -0
  386. data/lib/praxis/action_definition/headers_dsl_compiler.rb +36 -0
  387. data/lib/praxis/action_definition.rb +153 -0
  388. data/lib/praxis/api_definition.rb +59 -0
  389. data/lib/praxis/application.rb +65 -0
  390. data/lib/praxis/bootloader.rb +91 -0
  391. data/lib/praxis/bootloader_stages/environment.rb +57 -0
  392. data/lib/praxis/bootloader_stages/file_loader.rb +31 -0
  393. data/lib/praxis/bootloader_stages/routing.rb +34 -0
  394. data/lib/praxis/bootloader_stages/subgroup_loader.rb +27 -0
  395. data/lib/praxis/bootloader_stages/warn_unloaded_files.rb +40 -0
  396. data/lib/praxis/config.rb +92 -0
  397. data/lib/praxis/content_type_parser.rb +62 -0
  398. data/lib/praxis/controller.rb +59 -0
  399. data/lib/praxis/dispatcher.rb +102 -0
  400. data/lib/praxis/exception.rb +4 -0
  401. data/lib/praxis/exceptions/config.rb +6 -0
  402. data/lib/praxis/exceptions/config_load.rb +9 -0
  403. data/lib/praxis/exceptions/config_validation.rb +9 -0
  404. data/lib/praxis/exceptions/invalid_configuration.rb +6 -0
  405. data/lib/praxis/exceptions/invalid_response.rb +6 -0
  406. data/lib/praxis/exceptions/invalid_trait.rb +6 -0
  407. data/lib/praxis/exceptions/stage_not_found.rb +6 -0
  408. data/lib/praxis/exceptions/validation.rb +6 -0
  409. data/lib/praxis/file_group.rb +39 -0
  410. data/lib/praxis/links.rb +110 -0
  411. data/lib/praxis/media_type.rb +40 -0
  412. data/lib/praxis/media_type_collection.rb +120 -0
  413. data/lib/praxis/multipart/parser.rb +213 -0
  414. data/lib/praxis/multipart/part.rb +26 -0
  415. data/lib/praxis/plugin.rb +30 -0
  416. data/lib/praxis/request.rb +131 -0
  417. data/lib/praxis/request_stages/action.rb +20 -0
  418. data/lib/praxis/request_stages/load_request.rb +13 -0
  419. data/lib/praxis/request_stages/request_stage.rb +52 -0
  420. data/lib/praxis/request_stages/response.rb +26 -0
  421. data/lib/praxis/request_stages/validate.rb +20 -0
  422. data/lib/praxis/request_stages/validate_params_and_headers.rb +38 -0
  423. data/lib/praxis/request_stages/validate_payload.rb +32 -0
  424. data/lib/praxis/resource_definition.rb +89 -0
  425. data/lib/praxis/response.rb +107 -0
  426. data/lib/praxis/response_definition.rb +264 -0
  427. data/lib/praxis/response_template.rb +34 -0
  428. data/lib/praxis/responses/http.rb +166 -0
  429. data/lib/praxis/responses/validation_error.rb +36 -0
  430. data/lib/praxis/route.rb +27 -0
  431. data/lib/praxis/router.rb +89 -0
  432. data/lib/praxis/simple_media_type.rb +24 -0
  433. data/lib/praxis/skeletor/restful_routing_config.rb +45 -0
  434. data/lib/praxis/stage.rb +94 -0
  435. data/lib/praxis/tasks/api_docs.rb +336 -0
  436. data/lib/praxis/tasks/console.rb +11 -0
  437. data/lib/praxis/tasks/environment.rb +5 -0
  438. data/lib/praxis/tasks/routes.rb +45 -0
  439. data/lib/praxis/tasks.rb +4 -0
  440. data/lib/praxis/types/collection.rb +17 -0
  441. data/lib/praxis/types/multipart.rb +69 -0
  442. data/lib/praxis/version.rb +3 -0
  443. data/lib/praxis.rb +119 -1
  444. data/praxis.gemspec +50 -0
  445. data/spec/functional_spec.rb +186 -0
  446. data/spec/praxis/action_definition_spec.rb +134 -0
  447. data/spec/praxis/api_resource_spec.rb +0 -0
  448. data/spec/praxis/application_spec.rb +46 -0
  449. data/spec/praxis/bootloader_spec.rb +58 -0
  450. data/spec/praxis/config_spec.rb +118 -0
  451. data/spec/praxis/content_type_parser_spec.rb +91 -0
  452. data/spec/praxis/controller_spec.rb +73 -0
  453. data/spec/praxis/dispatcher_spec.rb +0 -0
  454. data/spec/praxis/file_group_spec.rb +34 -0
  455. data/spec/praxis/links_spec.rb +45 -0
  456. data/spec/praxis/media_type_collection_spec.rb +145 -0
  457. data/spec/praxis/media_type_spec.rb +80 -0
  458. data/spec/praxis/multipart/parser_spec.rb +54 -0
  459. data/spec/praxis/request_spec.rb +109 -0
  460. data/spec/praxis/request_stages_validate_spec.rb +34 -0
  461. data/spec/praxis/resource_definition_spec.rb +116 -0
  462. data/spec/praxis/response_definition_spec.rb +500 -0
  463. data/spec/praxis/response_spec.rb +166 -0
  464. data/spec/praxis/restful_routing_config_spec.rb +88 -0
  465. data/spec/praxis/route_spec.rb +42 -0
  466. data/spec/praxis/router_spec.rb +148 -0
  467. data/spec/praxis/stage_spec.rb +110 -0
  468. data/spec/praxis/types/multipart_spec.rb +81 -0
  469. data/spec/spec_app/app/controllers/instances.rb +63 -0
  470. data/spec/spec_app/app/responses/bulk_response.rb +6 -0
  471. data/spec/spec_app/app/responses/multipart.rb +10 -0
  472. data/spec/spec_app/app/responses/other_response.rb +6 -0
  473. data/spec/spec_app/config/environment.rb +17 -0
  474. data/spec/spec_app/config.ru +17 -0
  475. data/spec/spec_app/design/api.rb +27 -0
  476. data/spec/spec_app/design/media_types/instance.rb +35 -0
  477. data/spec/spec_app/design/media_types/volume.rb +34 -0
  478. data/spec/spec_app/design/media_types/volume_snapshot.rb +38 -0
  479. data/spec/spec_app/design/resources/instances.rb +161 -0
  480. data/spec/spec_helper.rb +39 -0
  481. data/spec/support/spec_media_types.rb +46 -0
  482. data/spec/support/spec_resource_definitions.rb +33 -0
  483. data/tasks/praxis_app_generator.thor +307 -0
  484. metadata +847 -12
@@ -0,0 +1,226 @@
1
+ function parseStateRef(ref) {
2
+ var parsed = ref.replace(/\n/g, " ").match(/^([^(]+?)\s*(\((.*)\))?$/);
3
+ if (!parsed || parsed.length !== 4) throw new Error("Invalid state ref '" + ref + "'");
4
+ return { state: parsed[1], paramExpr: parsed[3] || null };
5
+ }
6
+
7
+ function stateContext(el) {
8
+ var stateData = el.parent().inheritedData('$uiView');
9
+
10
+ if (stateData && stateData.state && stateData.state.name) {
11
+ return stateData.state;
12
+ }
13
+ }
14
+
15
+ /**
16
+ * @ngdoc directive
17
+ * @name ui.router.state.directive:ui-sref
18
+ *
19
+ * @requires ui.router.state.$state
20
+ * @requires $timeout
21
+ *
22
+ * @restrict A
23
+ *
24
+ * @description
25
+ * A directive that binds a link (`<a>` tag) to a state. If the state has an associated
26
+ * URL, the directive will automatically generate & update the `href` attribute via
27
+ * the {@link ui.router.state.$state#methods_href $state.href()} method. Clicking
28
+ * the link will trigger a state transition with optional parameters.
29
+ *
30
+ * Also middle-clicking, right-clicking, and ctrl-clicking on the link will be
31
+ * handled natively by the browser.
32
+ *
33
+ * You can also use relative state paths within ui-sref, just like the relative
34
+ * paths passed to `$state.go()`. You just need to be aware that the path is relative
35
+ * to the state that the link lives in, in other words the state that loaded the
36
+ * template containing the link.
37
+ *
38
+ * You can specify options to pass to {@link ui.router.state.$state#go $state.go()}
39
+ * using the `ui-sref-opts` attribute. Options are restricted to `location`, `inherit`,
40
+ * and `reload`.
41
+ *
42
+ * @example
43
+ * Here's an example of how you'd use ui-sref and how it would compile. If you have the
44
+ * following template:
45
+ * <pre>
46
+ * <a ui-sref="home">Home</a> | <a ui-sref="about">About</a>
47
+ *
48
+ * <ul>
49
+ * <li ng-repeat="contact in contacts">
50
+ * <a ui-sref="contacts.detail({ id: contact.id })">{{ contact.name }}</a>
51
+ * </li>
52
+ * </ul>
53
+ * </pre>
54
+ *
55
+ * Then the compiled html would be (assuming Html5Mode is off):
56
+ * <pre>
57
+ * <a href="#/home" ui-sref="home">Home</a> | <a href="#/about" ui-sref="about">About</a>
58
+ *
59
+ * <ul>
60
+ * <li ng-repeat="contact in contacts">
61
+ * <a href="#/contacts/1" ui-sref="contacts.detail({ id: contact.id })">Joe</a>
62
+ * </li>
63
+ * <li ng-repeat="contact in contacts">
64
+ * <a href="#/contacts/2" ui-sref="contacts.detail({ id: contact.id })">Alice</a>
65
+ * </li>
66
+ * <li ng-repeat="contact in contacts">
67
+ * <a href="#/contacts/3" ui-sref="contacts.detail({ id: contact.id })">Bob</a>
68
+ * </li>
69
+ * </ul>
70
+ *
71
+ * <a ui-sref="home" ui-sref-opts="{reload: true}">Home</a>
72
+ * </pre>
73
+ *
74
+ * @param {string} ui-sref 'stateName' can be any valid absolute or relative state
75
+ * @param {Object} ui-sref-opts options to pass to {@link ui.router.state.$state#go $state.go()}
76
+ */
77
+ $StateRefDirective.$inject = ['$state', '$timeout'];
78
+ function $StateRefDirective($state, $timeout) {
79
+ var allowedOptions = ['location', 'inherit', 'reload'];
80
+
81
+ return {
82
+ restrict: 'A',
83
+ require: '?^uiSrefActive',
84
+ link: function(scope, element, attrs, uiSrefActive) {
85
+ var ref = parseStateRef(attrs.uiSref);
86
+ var params = null, url = null, base = stateContext(element) || $state.$current;
87
+ var isForm = element[0].nodeName === "FORM";
88
+ var attr = isForm ? "action" : "href", nav = true;
89
+
90
+ var options = {
91
+ relative: base
92
+ };
93
+ var optionsOverride = scope.$eval(attrs.uiSrefOpts) || {};
94
+ angular.forEach(allowedOptions, function(option) {
95
+ if (option in optionsOverride) {
96
+ options[option] = optionsOverride[option];
97
+ }
98
+ });
99
+
100
+ var update = function(newVal) {
101
+ if (newVal) params = newVal;
102
+ if (!nav) return;
103
+
104
+ var newHref = $state.href(ref.state, params, options);
105
+
106
+ if (uiSrefActive) {
107
+ uiSrefActive.$$setStateInfo(ref.state, params);
108
+ }
109
+ if (!newHref) {
110
+ nav = false;
111
+ return false;
112
+ }
113
+ element[0][attr] = newHref;
114
+ };
115
+
116
+ if (ref.paramExpr) {
117
+ scope.$watch(ref.paramExpr, function(newVal, oldVal) {
118
+ if (newVal !== params) update(newVal);
119
+ }, true);
120
+ params = scope.$eval(ref.paramExpr);
121
+ }
122
+ update();
123
+
124
+ if (isForm) return;
125
+
126
+ element.bind("click", function(e) {
127
+ var button = e.which || e.button;
128
+ if ( !(button > 1 || e.ctrlKey || e.metaKey || e.shiftKey || element.attr('target')) ) {
129
+ // HACK: This is to allow ng-clicks to be processed before the transition is initiated:
130
+ $timeout(function() {
131
+ $state.go(ref.state, params, options);
132
+ });
133
+ e.preventDefault();
134
+ }
135
+ });
136
+ }
137
+ };
138
+ }
139
+
140
+ /**
141
+ * @ngdoc directive
142
+ * @name ui.router.state.directive:ui-sref-active
143
+ *
144
+ * @requires ui.router.state.$state
145
+ * @requires ui.router.state.$stateParams
146
+ * @requires $interpolate
147
+ *
148
+ * @restrict A
149
+ *
150
+ * @description
151
+ * A directive working alongside ui-sref to add classes to an element when the
152
+ * related ui-sref directive's state is active, and removing them when it is inactive.
153
+ * The primary use-case is to simplify the special appearance of navigation menus
154
+ * relying on `ui-sref`, by having the "active" state's menu button appear different,
155
+ * distinguishing it from the inactive menu items.
156
+ *
157
+ * @example
158
+ * Given the following template:
159
+ * <pre>
160
+ * <ul>
161
+ * <li ui-sref-active="active" class="item">
162
+ * <a href ui-sref="app.user({user: 'bilbobaggins'})">@bilbobaggins</a>
163
+ * </li>
164
+ * </ul>
165
+ * </pre>
166
+ *
167
+ * When the app state is "app.user", and contains the state parameter "user" with value "bilbobaggins",
168
+ * the resulting HTML will appear as (note the 'active' class):
169
+ * <pre>
170
+ * <ul>
171
+ * <li ui-sref-active="active" class="item active">
172
+ * <a ui-sref="app.user({user: 'bilbobaggins'})" href="/users/bilbobaggins">@bilbobaggins</a>
173
+ * </li>
174
+ * </ul>
175
+ * </pre>
176
+ *
177
+ * The class name is interpolated **once** during the directives link time (any further changes to the
178
+ * interpolated value are ignored).
179
+ *
180
+ * Multiple classes may be specified in a space-separated format:
181
+ * <pre>
182
+ * <ul>
183
+ * <li ui-sref-active='class1 class2 class3'>
184
+ * <a ui-sref="app.user">link</a>
185
+ * </li>
186
+ * </ul>
187
+ * </pre>
188
+ */
189
+ $StateActiveDirective.$inject = ['$state', '$stateParams', '$interpolate'];
190
+ function $StateActiveDirective($state, $stateParams, $interpolate) {
191
+ return {
192
+ restrict: "A",
193
+ controller: ['$scope', '$element', '$attrs', function($scope, $element, $attrs) {
194
+ var state, params, activeClass;
195
+
196
+ // There probably isn't much point in $observing this
197
+ activeClass = $interpolate($attrs.uiSrefActive || '', false)($scope);
198
+
199
+ // Allow uiSref to communicate with uiSrefActive
200
+ this.$$setStateInfo = function(newState, newParams) {
201
+ state = $state.get(newState, stateContext($element));
202
+ params = newParams;
203
+ update();
204
+ };
205
+
206
+ $scope.$on('$stateChangeSuccess', update);
207
+
208
+ // Update route state
209
+ function update() {
210
+ if ($state.$current.self === state && matchesParams()) {
211
+ $element.addClass(activeClass);
212
+ } else {
213
+ $element.removeClass(activeClass);
214
+ }
215
+ }
216
+
217
+ function matchesParams() {
218
+ return !params || equalForKeys(params, $stateParams);
219
+ }
220
+ }]
221
+ };
222
+ }
223
+
224
+ angular.module('ui.router.state')
225
+ .directive('uiSref', $StateRefDirective)
226
+ .directive('uiSrefActive', $StateActiveDirective);
@@ -0,0 +1,35 @@
1
+ /**
2
+ * @ngdoc filter
3
+ * @name ui.router.state.filter:isState
4
+ *
5
+ * @requires ui.router.state.$state
6
+ *
7
+ * @description
8
+ * Translates to {@link ui.router.state.$state#methods_is $state.is("stateName")}.
9
+ */
10
+ $IsStateFilter.$inject = ['$state'];
11
+ function $IsStateFilter($state) {
12
+ return function(state) {
13
+ return $state.is(state);
14
+ };
15
+ }
16
+
17
+ /**
18
+ * @ngdoc filter
19
+ * @name ui.router.state.filter:includedByState
20
+ *
21
+ * @requires ui.router.state.$state
22
+ *
23
+ * @description
24
+ * Translates to {@link ui.router.state.$state#methods_includes $state.includes('fullOrPartialStateName')}.
25
+ */
26
+ $IncludedByStateFilter.$inject = ['$state'];
27
+ function $IncludedByStateFilter($state) {
28
+ return function(state) {
29
+ return $state.includes(state);
30
+ };
31
+ }
32
+
33
+ angular.module('ui.router.state')
34
+ .filter('isState', $IsStateFilter)
35
+ .filter('includedByState', $IncludedByStateFilter);
@@ -0,0 +1,110 @@
1
+ /**
2
+ * @ngdoc object
3
+ * @name ui.router.util.$templateFactory
4
+ *
5
+ * @requires $http
6
+ * @requires $templateCache
7
+ * @requires $injector
8
+ *
9
+ * @description
10
+ * Service. Manages loading of templates.
11
+ */
12
+ $TemplateFactory.$inject = ['$http', '$templateCache', '$injector'];
13
+ function $TemplateFactory( $http, $templateCache, $injector) {
14
+
15
+ /**
16
+ * @ngdoc function
17
+ * @name ui.router.util.$templateFactory#fromConfig
18
+ * @methodOf ui.router.util.$templateFactory
19
+ *
20
+ * @description
21
+ * Creates a template from a configuration object.
22
+ *
23
+ * @param {object} config Configuration object for which to load a template.
24
+ * The following properties are search in the specified order, and the first one
25
+ * that is defined is used to create the template:
26
+ *
27
+ * @param {string|object} config.template html string template or function to
28
+ * load via {@link ui.router.util.$templateFactory#fromString fromString}.
29
+ * @param {string|object} config.templateUrl url to load or a function returning
30
+ * the url to load via {@link ui.router.util.$templateFactory#fromUrl fromUrl}.
31
+ * @param {Function} config.templateProvider function to invoke via
32
+ * {@link ui.router.util.$templateFactory#fromProvider fromProvider}.
33
+ * @param {object} params Parameters to pass to the template function.
34
+ * @param {object} locals Locals to pass to `invoke` if the template is loaded
35
+ * via a `templateProvider`. Defaults to `{ params: params }`.
36
+ *
37
+ * @return {string|object} The template html as a string, or a promise for
38
+ * that string,or `null` if no template is configured.
39
+ */
40
+ this.fromConfig = function (config, params, locals) {
41
+ return (
42
+ isDefined(config.template) ? this.fromString(config.template, params) :
43
+ isDefined(config.templateUrl) ? this.fromUrl(config.templateUrl, params) :
44
+ isDefined(config.templateProvider) ? this.fromProvider(config.templateProvider, params, locals) :
45
+ null
46
+ );
47
+ };
48
+
49
+ /**
50
+ * @ngdoc function
51
+ * @name ui.router.util.$templateFactory#fromString
52
+ * @methodOf ui.router.util.$templateFactory
53
+ *
54
+ * @description
55
+ * Creates a template from a string or a function returning a string.
56
+ *
57
+ * @param {string|object} template html template as a string or function that
58
+ * returns an html template as a string.
59
+ * @param {object} params Parameters to pass to the template function.
60
+ *
61
+ * @return {string|object} The template html as a string, or a promise for that
62
+ * string.
63
+ */
64
+ this.fromString = function (template, params) {
65
+ return isFunction(template) ? template(params) : template;
66
+ };
67
+
68
+ /**
69
+ * @ngdoc function
70
+ * @name ui.router.util.$templateFactory#fromUrl
71
+ * @methodOf ui.router.util.$templateFactory
72
+ *
73
+ * @description
74
+ * Loads a template from the a URL via `$http` and `$templateCache`.
75
+ *
76
+ * @param {string|Function} url url of the template to load, or a function
77
+ * that returns a url.
78
+ * @param {Object} params Parameters to pass to the url function.
79
+ * @return {string|Promise.<string>} The template html as a string, or a promise
80
+ * for that string.
81
+ */
82
+ this.fromUrl = function (url, params) {
83
+ if (isFunction(url)) url = url(params);
84
+ if (url == null) return null;
85
+ else return $http
86
+ .get(url, { cache: $templateCache })
87
+ .then(function(response) { return response.data; });
88
+ };
89
+
90
+ /**
91
+ * @ngdoc function
92
+ * @name ui.router.util.$templateFactory#fromUrl
93
+ * @methodOf ui.router.util.$templateFactory
94
+ *
95
+ * @description
96
+ * Creates a template by invoking an injectable provider function.
97
+ *
98
+ * @param {Function} provider Function to invoke via `$injector.invoke`
99
+ * @param {Object} params Parameters for the template.
100
+ * @param {Object} locals Locals to pass to `invoke`. Defaults to
101
+ * `{ params: params }`.
102
+ * @return {string|Promise.<string>} The template html as a string, or a promise
103
+ * for that string.
104
+ */
105
+ this.fromProvider = function (provider, params, locals) {
106
+ return $injector.invoke(provider, null, locals || { params: params });
107
+ };
108
+ }
109
+
110
+ angular.module('ui.router.util').service('$templateFactory', $TemplateFactory);
@@ -0,0 +1,325 @@
1
+ /**
2
+ * @ngdoc object
3
+ * @name ui.router.util.type:UrlMatcher
4
+ *
5
+ * @description
6
+ * Matches URLs against patterns and extracts named parameters from the path or the search
7
+ * part of the URL. A URL pattern consists of a path pattern, optionally followed by '?' and a list
8
+ * of search parameters. Multiple search parameter names are separated by '&'. Search parameters
9
+ * do not influence whether or not a URL is matched, but their values are passed through into
10
+ * the matched parameters returned by {@link ui.router.util.type:UrlMatcher#methods_exec exec}.
11
+ *
12
+ * Path parameter placeholders can be specified using simple colon/catch-all syntax or curly brace
13
+ * syntax, which optionally allows a regular expression for the parameter to be specified:
14
+ *
15
+ * * `':'` name - colon placeholder
16
+ * * `'*'` name - catch-all placeholder
17
+ * * `'{' name '}'` - curly placeholder
18
+ * * `'{' name ':' regexp '}'` - curly placeholder with regexp. Should the regexp itself contain
19
+ * curly braces, they must be in matched pairs or escaped with a backslash.
20
+ *
21
+ * Parameter names may contain only word characters (latin letters, digits, and underscore) and
22
+ * must be unique within the pattern (across both path and search parameters). For colon
23
+ * placeholders or curly placeholders without an explicit regexp, a path parameter matches any
24
+ * number of characters other than '/'. For catch-all placeholders the path parameter matches
25
+ * any number of characters.
26
+ *
27
+ * Examples:
28
+ *
29
+ * * `'/hello/'` - Matches only if the path is exactly '/hello/'. There is no special treatment for
30
+ * trailing slashes, and patterns have to match the entire path, not just a prefix.
31
+ * * `'/user/:id'` - Matches '/user/bob' or '/user/1234!!!' or even '/user/' but not '/user' or
32
+ * '/user/bob/details'. The second path segment will be captured as the parameter 'id'.
33
+ * * `'/user/{id}'` - Same as the previous example, but using curly brace syntax.
34
+ * * `'/user/{id:[^/]*}'` - Same as the previous example.
35
+ * * `'/user/{id:[0-9a-fA-F]{1,8}}'` - Similar to the previous example, but only matches if the id
36
+ * parameter consists of 1 to 8 hex digits.
37
+ * * `'/files/{path:.*}'` - Matches any URL starting with '/files/' and captures the rest of the
38
+ * path into the parameter 'path'.
39
+ * * `'/files/*path'` - ditto.
40
+ *
41
+ * @param {string} pattern the pattern to compile into a matcher.
42
+ * @param {bool} caseInsensitiveMatch true if url matching should be case insensitive, otherwise false, the default value (for backward compatibility) is false.
43
+ *
44
+ * @property {string} prefix A static prefix of this pattern. The matcher guarantees that any
45
+ * URL matching this matcher (i.e. any string for which {@link ui.router.util.type:UrlMatcher#methods_exec exec()} returns
46
+ * non-null) will start with this prefix.
47
+ *
48
+ * @property {string} source The pattern that was passed into the contructor
49
+ *
50
+ * @property {string} sourcePath The path portion of the source property
51
+ *
52
+ * @property {string} sourceSearch The search portion of the source property
53
+ *
54
+ * @property {string} regex The constructed regex that will be used to match against the url when
55
+ * it is time to determine which url will match.
56
+ *
57
+ * @returns {Object} New UrlMatcher object
58
+ */
59
+ function UrlMatcher(pattern, caseInsensitiveMatch) {
60
+
61
+ // Find all placeholders and create a compiled pattern, using either classic or curly syntax:
62
+ // '*' name
63
+ // ':' name
64
+ // '{' name '}'
65
+ // '{' name ':' regexp '}'
66
+ // The regular expression is somewhat complicated due to the need to allow curly braces
67
+ // inside the regular expression. The placeholder regexp breaks down as follows:
68
+ // ([:*])(\w+) classic placeholder ($1 / $2)
69
+ // \{(\w+)(?:\:( ... ))?\} curly brace placeholder ($3) with optional regexp ... ($4)
70
+ // (?: ... | ... | ... )+ the regexp consists of any number of atoms, an atom being either
71
+ // [^{}\\]+ - anything other than curly braces or backslash
72
+ // \\. - a backslash escape
73
+ // \{(?:[^{}\\]+|\\.)*\} - a matched set of curly braces containing other atoms
74
+ var placeholder = /([:*])(\w+)|\{(\w+)(?:\:((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,
75
+ names = {}, compiled = '^', last = 0, m,
76
+ segments = this.segments = [],
77
+ params = this.params = [];
78
+
79
+ function addParameter(id) {
80
+ if (!/^\w+(-+\w+)*$/.test(id)) throw new Error("Invalid parameter name '" + id + "' in pattern '" + pattern + "'");
81
+ if (names[id]) throw new Error("Duplicate parameter name '" + id + "' in pattern '" + pattern + "'");
82
+ names[id] = true;
83
+ params.push(id);
84
+ }
85
+
86
+ function quoteRegExp(string) {
87
+ return string.replace(/[\\\[\]\^$*+?.()|{}]/g, "\\$&");
88
+ }
89
+
90
+ this.source = pattern;
91
+
92
+ // Split into static segments separated by path parameter placeholders.
93
+ // The number of segments is always 1 more than the number of parameters.
94
+ var id, regexp, segment;
95
+ while ((m = placeholder.exec(pattern))) {
96
+ id = m[2] || m[3]; // IE[78] returns '' for unmatched groups instead of null
97
+ regexp = m[4] || (m[1] == '*' ? '.*' : '[^/]*');
98
+ segment = pattern.substring(last, m.index);
99
+ if (segment.indexOf('?') >= 0) break; // we're into the search part
100
+ compiled += quoteRegExp(segment) + '(' + regexp + ')';
101
+ addParameter(id);
102
+ segments.push(segment);
103
+ last = placeholder.lastIndex;
104
+ }
105
+ segment = pattern.substring(last);
106
+
107
+ // Find any search parameter names and remove them from the last segment
108
+ var i = segment.indexOf('?');
109
+ if (i >= 0) {
110
+ var search = this.sourceSearch = segment.substring(i);
111
+ segment = segment.substring(0, i);
112
+ this.sourcePath = pattern.substring(0, last+i);
113
+
114
+ // Allow parameters to be separated by '?' as well as '&' to make concat() easier
115
+ forEach(search.substring(1).split(/[&?]/), addParameter);
116
+ } else {
117
+ this.sourcePath = pattern;
118
+ this.sourceSearch = '';
119
+ }
120
+
121
+ compiled += quoteRegExp(segment) + '$';
122
+ segments.push(segment);
123
+ if(caseInsensitiveMatch){
124
+ this.regexp = new RegExp(compiled, 'i');
125
+ }else{
126
+ this.regexp = new RegExp(compiled);
127
+ }
128
+
129
+ this.prefix = segments[0];
130
+ }
131
+
132
+ /**
133
+ * @ngdoc function
134
+ * @name ui.router.util.type:UrlMatcher#concat
135
+ * @methodOf ui.router.util.type:UrlMatcher
136
+ *
137
+ * @description
138
+ * Returns a new matcher for a pattern constructed by appending the path part and adding the
139
+ * search parameters of the specified pattern to this pattern. The current pattern is not
140
+ * modified. This can be understood as creating a pattern for URLs that are relative to (or
141
+ * suffixes of) the current pattern.
142
+ *
143
+ * @example
144
+ * The following two matchers are equivalent:
145
+ * ```
146
+ * new UrlMatcher('/user/{id}?q').concat('/details?date');
147
+ * new UrlMatcher('/user/{id}/details?q&date');
148
+ * ```
149
+ *
150
+ * @param {string} pattern The pattern to append.
151
+ * @returns {ui.router.util.type:UrlMatcher} A matcher for the concatenated pattern.
152
+ */
153
+ UrlMatcher.prototype.concat = function (pattern) {
154
+ // Because order of search parameters is irrelevant, we can add our own search
155
+ // parameters to the end of the new pattern. Parse the new pattern by itself
156
+ // and then join the bits together, but it's much easier to do this on a string level.
157
+ return new UrlMatcher(this.sourcePath + pattern + this.sourceSearch);
158
+ };
159
+
160
+ UrlMatcher.prototype.toString = function () {
161
+ return this.source;
162
+ };
163
+
164
+ /**
165
+ * @ngdoc function
166
+ * @name ui.router.util.type:UrlMatcher#exec
167
+ * @methodOf ui.router.util.type:UrlMatcher
168
+ *
169
+ * @description
170
+ * Tests the specified path against this matcher, and returns an object containing the captured
171
+ * parameter values, or null if the path does not match. The returned object contains the values
172
+ * of any search parameters that are mentioned in the pattern, but their value may be null if
173
+ * they are not present in `searchParams`. This means that search parameters are always treated
174
+ * as optional.
175
+ *
176
+ * @example
177
+ * ```
178
+ * new UrlMatcher('/user/{id}?q&r').exec('/user/bob', { x:'1', q:'hello' });
179
+ * // returns { id:'bob', q:'hello', r:null }
180
+ * ```
181
+ *
182
+ * @param {string} path The URL path to match, e.g. `$location.path()`.
183
+ * @param {Object} searchParams URL search parameters, e.g. `$location.search()`.
184
+ * @returns {Object} The captured parameter values.
185
+ */
186
+ UrlMatcher.prototype.exec = function (path, searchParams) {
187
+ var m = this.regexp.exec(path);
188
+ if (!m) return null;
189
+
190
+ var params = this.params, nTotal = params.length,
191
+ nPath = this.segments.length-1,
192
+ values = {}, i;
193
+
194
+ if (nPath !== m.length - 1) throw new Error("Unbalanced capture group in route '" + this.source + "'");
195
+
196
+ for (i=0; i<nPath; i++) values[params[i]] = m[i+1];
197
+ for (/**/; i<nTotal; i++) values[params[i]] = searchParams[params[i]];
198
+
199
+ return values;
200
+ };
201
+
202
+ /**
203
+ * @ngdoc function
204
+ * @name ui.router.util.type:UrlMatcher#parameters
205
+ * @methodOf ui.router.util.type:UrlMatcher
206
+ *
207
+ * @description
208
+ * Returns the names of all path and search parameters of this pattern in an unspecified order.
209
+ *
210
+ * @returns {Array.<string>} An array of parameter names. Must be treated as read-only. If the
211
+ * pattern has no parameters, an empty array is returned.
212
+ */
213
+ UrlMatcher.prototype.parameters = function () {
214
+ return this.params;
215
+ };
216
+
217
+ /**
218
+ * @ngdoc function
219
+ * @name ui.router.util.type:UrlMatcher#format
220
+ * @methodOf ui.router.util.type:UrlMatcher
221
+ *
222
+ * @description
223
+ * Creates a URL that matches this pattern by substituting the specified values
224
+ * for the path and search parameters. Null values for path parameters are
225
+ * treated as empty strings.
226
+ *
227
+ * @example
228
+ * ```
229
+ * new UrlMatcher('/user/{id}?q').format({ id:'bob', q:'yes' });
230
+ * // returns '/user/bob?q=yes'
231
+ * ```
232
+ *
233
+ * @param {Object} values the values to substitute for the parameters in this pattern.
234
+ * @returns {string} the formatted URL (path and optionally search part).
235
+ */
236
+ UrlMatcher.prototype.format = function (values) {
237
+ var segments = this.segments, params = this.params;
238
+ if (!values) return segments.join('');
239
+
240
+ var nPath = segments.length-1, nTotal = params.length,
241
+ result = segments[0], i, search, value;
242
+
243
+ for (i=0; i<nPath; i++) {
244
+ value = values[params[i]];
245
+ // TODO: Maybe we should throw on null here? It's not really good style to use '' and null interchangeabley
246
+ if (value != null) result += encodeURIComponent(value);
247
+ result += segments[i+1];
248
+ }
249
+ for (/**/; i<nTotal; i++) {
250
+ value = values[params[i]];
251
+ if (value != null) {
252
+ result += (search ? '&' : '?') + params[i] + '=' + encodeURIComponent(value);
253
+ search = true;
254
+ }
255
+ }
256
+
257
+ return result;
258
+ };
259
+
260
+
261
+
262
+ /**
263
+ * @ngdoc object
264
+ * @name ui.router.util.$urlMatcherFactory
265
+ *
266
+ * @description
267
+ * Factory for {@link ui.router.util.type:UrlMatcher} instances. The factory is also available to providers
268
+ * under the name `$urlMatcherFactoryProvider`.
269
+ */
270
+ function $UrlMatcherFactory() {
271
+
272
+ var useCaseInsensitiveMatch = false;
273
+
274
+ /**
275
+ * @ngdoc function
276
+ * @name ui.router.util.$urlMatcherFactory#caseInsensitiveMatch
277
+ * @methodOf ui.router.util.$urlMatcherFactory
278
+ *
279
+ * @description
280
+ * Define if url matching should be case sensistive, the default behavior, or not.
281
+ *
282
+ * @param {bool} value false to match URL in a case sensitive manner; otherwise true;
283
+ */
284
+ this.caseInsensitiveMatch = function(value){
285
+ useCaseInsensitiveMatch = value;
286
+ };
287
+
288
+ /**
289
+ * @ngdoc function
290
+ * @name ui.router.util.$urlMatcherFactory#compile
291
+ * @methodOf ui.router.util.$urlMatcherFactory
292
+ *
293
+ * @description
294
+ * Creates a {@link ui.router.util.type:UrlMatcher} for the specified pattern.
295
+ *
296
+ * @param {string} pattern The URL pattern.
297
+ * @returns {ui.router.util.type:UrlMatcher} The UrlMatcher.
298
+ */
299
+ this.compile = function (pattern) {
300
+ return new UrlMatcher(pattern, useCaseInsensitiveMatch);
301
+ };
302
+
303
+ /**
304
+ * @ngdoc function
305
+ * @name ui.router.util.$urlMatcherFactory#isMatcher
306
+ * @methodOf ui.router.util.$urlMatcherFactory
307
+ *
308
+ * @description
309
+ * Returns true if the specified object is a UrlMatcher, or false otherwise.
310
+ *
311
+ * @param {Object} object The object to perform the type check against.
312
+ * @returns {Boolean} Returns `true` if the object has the following functions: `exec`, `format`, and `concat`.
313
+ */
314
+ this.isMatcher = function (o) {
315
+ return isObject(o) && isFunction(o.exec) && isFunction(o.format) && isFunction(o.concat);
316
+ };
317
+
318
+ /* No need to document $get, since it returns this */
319
+ this.$get = function () {
320
+ return this;
321
+ };
322
+ }
323
+
324
+ // Register as a provider so it's available to other providers
325
+ angular.module('ui.router.util').provider('$urlMatcherFactory', $UrlMatcherFactory);