bastion 0.1.0

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 (278) hide show
  1. checksums.yaml +15 -0
  2. data/.jshintrc +35 -0
  3. data/Gruntfile.js +24 -0
  4. data/LICENSE +339 -0
  5. data/README.md +8 -0
  6. data/Rakefile +53 -0
  7. data/app/assets/javascripts/bastion/auth/auth.module.js +87 -0
  8. data/app/assets/javascripts/bastion/auth/authorization.service.js +48 -0
  9. data/app/assets/javascripts/bastion/bastion-bootstrap.js +32 -0
  10. data/app/assets/javascripts/bastion/bastion-resource.factory.js +39 -0
  11. data/app/assets/javascripts/bastion/bastion.js +52 -0
  12. data/app/assets/javascripts/bastion/bastion.module.js +213 -0
  13. data/app/assets/javascripts/bastion/i18n/README +9 -0
  14. data/app/assets/javascripts/bastion/i18n/i18n.module.js +24 -0
  15. data/app/assets/javascripts/bastion/i18n/katello.pot +968 -0
  16. data/app/assets/javascripts/bastion/i18n/locale/README +1 -0
  17. data/app/assets/javascripts/bastion/i18n/translate.service.js +14 -0
  18. data/app/assets/javascripts/bastion/i18n/translations.js +3 -0
  19. data/app/assets/javascripts/bastion/i18n/zanata.xml +28 -0
  20. data/app/assets/javascripts/bastion/incubator/alch-alert.directive.js +67 -0
  21. data/app/assets/javascripts/bastion/incubator/alch-container-scroll.directive.js +44 -0
  22. data/app/assets/javascripts/bastion/incubator/alch-dropdown.directive.js +28 -0
  23. data/app/assets/javascripts/bastion/incubator/alch-edit.directive.js +361 -0
  24. data/app/assets/javascripts/bastion/incubator/alch-flyout.directive.js +19 -0
  25. data/app/assets/javascripts/bastion/incubator/alch-form-buttons.directive.js +60 -0
  26. data/app/assets/javascripts/bastion/incubator/alch-form-group.directive.js +87 -0
  27. data/app/assets/javascripts/bastion/incubator/alch-infinite-scroll.directive.js +84 -0
  28. data/app/assets/javascripts/bastion/incubator/alch-menu.directive.js +56 -0
  29. data/app/assets/javascripts/bastion/incubator/alch-modal.directive.js +80 -0
  30. data/app/assets/javascripts/bastion/incubator/alch-save-control.directive.js +42 -0
  31. data/app/assets/javascripts/bastion/incubator/alch-table.directive.js +295 -0
  32. data/app/assets/javascripts/bastion/incubator/format/alch-format.module.js +21 -0
  33. data/app/assets/javascripts/bastion/incubator/format/array-to-string.filter.js +30 -0
  34. data/app/assets/javascripts/bastion/incubator/format/boolean-to-yes-no.filter.js +34 -0
  35. data/app/assets/javascripts/bastion/incubator/format/capitalize.filter.js +32 -0
  36. data/app/assets/javascripts/bastion/incubator/format/key-value-to-string.filter.js +40 -0
  37. data/app/assets/javascripts/bastion/incubator/format/unlimitedFilter.filter.js +35 -0
  38. data/app/assets/javascripts/bastion/incubator/stylesheets/alch-edit.scss +34 -0
  39. data/app/assets/javascripts/bastion/incubator/stylesheets/header.scss +207 -0
  40. data/app/assets/javascripts/bastion/incubator/views/alch-alert.html +6 -0
  41. data/app/assets/javascripts/bastion/incubator/views/alch-dropdown.html +19 -0
  42. data/app/assets/javascripts/bastion/incubator/views/alch-edit-add-item.html +21 -0
  43. data/app/assets/javascripts/bastion/incubator/views/alch-edit-add-remove-cancel.html +28 -0
  44. data/app/assets/javascripts/bastion/incubator/views/alch-edit-checkbox.html +6 -0
  45. data/app/assets/javascripts/bastion/incubator/views/alch-edit-custom.html +8 -0
  46. data/app/assets/javascripts/bastion/incubator/views/alch-edit-multiselect.html +17 -0
  47. data/app/assets/javascripts/bastion/incubator/views/alch-edit-save-cancel.html +20 -0
  48. data/app/assets/javascripts/bastion/incubator/views/alch-edit-select.html +10 -0
  49. data/app/assets/javascripts/bastion/incubator/views/alch-edit-text.html +6 -0
  50. data/app/assets/javascripts/bastion/incubator/views/alch-edit-textarea.html +6 -0
  51. data/app/assets/javascripts/bastion/incubator/views/alch-edit.html +18 -0
  52. data/app/assets/javascripts/bastion/incubator/views/alch-flyout.html +10 -0
  53. data/app/assets/javascripts/bastion/incubator/views/alch-form-buttons.html +10 -0
  54. data/app/assets/javascripts/bastion/incubator/views/alch-form-group.html +9 -0
  55. data/app/assets/javascripts/bastion/incubator/views/alch-menu.html +18 -0
  56. data/app/assets/javascripts/bastion/incubator/views/alch-modal-remove.html +13 -0
  57. data/app/assets/javascripts/bastion/incubator/views/alch-save-control.html +18 -0
  58. data/app/assets/javascripts/bastion/layouts/details-nutupane.html +73 -0
  59. data/app/assets/javascripts/bastion/layouts/nutupane.html +63 -0
  60. data/app/assets/javascripts/bastion/layouts/select-all-results.html +9 -0
  61. data/app/assets/javascripts/bastion/menu/menu-expander.service.js +51 -0
  62. data/app/assets/javascripts/bastion/menu/menu.module.js +26 -0
  63. data/app/assets/javascripts/bastion/utils/as.filter.js +33 -0
  64. data/app/assets/javascripts/bastion/utils/form-utils.service.js +53 -0
  65. data/app/assets/javascripts/bastion/utils/utils.module.js +21 -0
  66. data/app/assets/javascripts/bastion/widgets/current-tasks.directive.js +67 -0
  67. data/app/assets/javascripts/bastion/widgets/nutupane-table.directive.js +59 -0
  68. data/app/assets/javascripts/bastion/widgets/nutupane.factory.js +316 -0
  69. data/app/assets/javascripts/bastion/widgets/page-title.directive.js +61 -0
  70. data/app/assets/javascripts/bastion/widgets/page-title.service.js +42 -0
  71. data/app/assets/javascripts/bastion/widgets/path-selector.directive.js +109 -0
  72. data/app/assets/javascripts/bastion/widgets/views/current-tasks.html +23 -0
  73. data/app/assets/javascripts/bastion/widgets/views/path-selector.html +11 -0
  74. data/app/assets/javascripts/bastion/widgets/widgets.module.js +24 -0
  75. data/app/assets/stylesheets/bastion/animations.less +15 -0
  76. data/app/assets/stylesheets/bastion/bastion.less +160 -0
  77. data/app/assets/stylesheets/bastion/forms.less +41 -0
  78. data/app/assets/stylesheets/bastion/gpg-keys.less +36 -0
  79. data/app/assets/stylesheets/bastion/helpers.less +6 -0
  80. data/app/assets/stylesheets/bastion/mixins.less +15 -0
  81. data/app/assets/stylesheets/bastion/nutupane.less +382 -0
  82. data/app/assets/stylesheets/bastion/overrides.less +54 -0
  83. data/app/assets/stylesheets/bastion/path-selector.less +123 -0
  84. data/app/assets/stylesheets/bastion/systems.less +35 -0
  85. data/app/assets/stylesheets/bastion/tasks.less +23 -0
  86. data/app/assets/stylesheets/bastion/typography.less +31 -0
  87. data/app/assets/stylesheets/bastion/variables.less +3 -0
  88. data/app/controllers/bastion/bastion_controller.rb +24 -0
  89. data/app/views/bastion/layouts/application.html.erb +32 -0
  90. data/app/views/bastion/layouts/application_ie.html.erb +5 -0
  91. data/bastion.js +26 -0
  92. data/bower.json +94 -0
  93. data/config/routes.rb +25 -0
  94. data/config/routes/mount_engine.rb +3 -0
  95. data/grunt/bower.js +20 -0
  96. data/grunt/htmlhint.js +15 -0
  97. data/grunt/jshint.js +9 -0
  98. data/grunt/karma.js +83 -0
  99. data/lib/bastion.rb +17 -0
  100. data/lib/bastion/engine.rb +37 -0
  101. data/lib/bastion/version.rb +3 -0
  102. data/package.json +29 -0
  103. data/test/auth/authorization.service.test.js +63 -0
  104. data/test/bastion/bastion-resource.factory.test.js +31 -0
  105. data/test/bastion/test-constants.js +30 -0
  106. data/test/i18n/translate.service.test.js +31 -0
  107. data/test/incubator/alch-alert.directive.test.js +84 -0
  108. data/test/incubator/alch-container-scroll.directive.test.js +68 -0
  109. data/test/incubator/alch-dropdown.directive.test.js +113 -0
  110. data/test/incubator/alch-edit.directive.test.js +320 -0
  111. data/test/incubator/alch-flyout.directive.test.js +73 -0
  112. data/test/incubator/alch-form-buttons.directive.test.js +55 -0
  113. data/test/incubator/alch-form-group.directive.test.js +76 -0
  114. data/test/incubator/alch-infinite-scroll.directive.test.js +123 -0
  115. data/test/incubator/alch-menu.directive.test.js +94 -0
  116. data/test/incubator/alch-modal.directive.test.js +81 -0
  117. data/test/incubator/alch-table.directive.test.js +270 -0
  118. data/test/incubator/format/array-to-string.filter.test.js +38 -0
  119. data/test/incubator/format/boolean-to-yes-no.filter.test.js +41 -0
  120. data/test/incubator/format/capitalize.filter.test.js +35 -0
  121. data/test/incubator/format/key-value-to-string.filter.test.js +60 -0
  122. data/test/incubator/format/unlimited-filter.filter.test.js +31 -0
  123. data/test/incubator/nutupane-table.directive.test.js +69 -0
  124. data/test/incubator/nutupane.factory.test.js +307 -0
  125. data/test/menu/menu-expander.service.test.js +74 -0
  126. data/test/test-mocks.module.js +268 -0
  127. data/test/utils/as.filter.test.js +33 -0
  128. data/test/utils/form-utils.service.test.js +52 -0
  129. data/test/widgets/page-title.directive.test.js +54 -0
  130. data/test/widgets/page-title.service.test.js +51 -0
  131. data/test/widgets/path-selector.directive.test.js +136 -0
  132. data/vendor/assets/fonts/bastion/bootstrap/glyphicons-halflings-regular.eot +0 -0
  133. data/vendor/assets/fonts/bastion/bootstrap/glyphicons-halflings-regular.svg +229 -0
  134. data/vendor/assets/fonts/bastion/bootstrap/glyphicons-halflings-regular.ttf +0 -0
  135. data/vendor/assets/fonts/bastion/bootstrap/glyphicons-halflings-regular.woff +0 -0
  136. data/vendor/assets/fonts/bastion/font-awesome/FontAwesome.otf +0 -0
  137. data/vendor/assets/fonts/bastion/font-awesome/fontawesome-webfont.eot +0 -0
  138. data/vendor/assets/fonts/bastion/font-awesome/fontawesome-webfont.svg +399 -0
  139. data/vendor/assets/fonts/bastion/font-awesome/fontawesome-webfont.ttf +0 -0
  140. data/vendor/assets/fonts/bastion/font-awesome/fontawesome-webfont.woff +0 -0
  141. data/vendor/assets/fonts/bastion/rcue/OpenSans-Bold-webfont.eot +0 -0
  142. data/vendor/assets/fonts/bastion/rcue/OpenSans-Bold-webfont.svg +146 -0
  143. data/vendor/assets/fonts/bastion/rcue/OpenSans-Bold-webfont.ttf +0 -0
  144. data/vendor/assets/fonts/bastion/rcue/OpenSans-Bold-webfont.woff +0 -0
  145. data/vendor/assets/fonts/bastion/rcue/OpenSans-BoldItalic-webfont.eot +0 -0
  146. data/vendor/assets/fonts/bastion/rcue/OpenSans-BoldItalic-webfont.svg +146 -0
  147. data/vendor/assets/fonts/bastion/rcue/OpenSans-BoldItalic-webfont.ttf +0 -0
  148. data/vendor/assets/fonts/bastion/rcue/OpenSans-BoldItalic-webfont.woff +0 -0
  149. data/vendor/assets/fonts/bastion/rcue/OpenSans-ExtraBold-webfont.eot +0 -0
  150. data/vendor/assets/fonts/bastion/rcue/OpenSans-ExtraBold-webfont.svg +146 -0
  151. data/vendor/assets/fonts/bastion/rcue/OpenSans-ExtraBold-webfont.ttf +0 -0
  152. data/vendor/assets/fonts/bastion/rcue/OpenSans-ExtraBold-webfont.woff +0 -0
  153. data/vendor/assets/fonts/bastion/rcue/OpenSans-ExtraBoldItalic-webfont.eot +0 -0
  154. data/vendor/assets/fonts/bastion/rcue/OpenSans-ExtraBoldItalic-webfont.svg +146 -0
  155. data/vendor/assets/fonts/bastion/rcue/OpenSans-ExtraBoldItalic-webfont.ttf +0 -0
  156. data/vendor/assets/fonts/bastion/rcue/OpenSans-ExtraBoldItalic-webfont.woff +0 -0
  157. data/vendor/assets/fonts/bastion/rcue/OpenSans-Italic-webfont.eot +0 -0
  158. data/vendor/assets/fonts/bastion/rcue/OpenSans-Italic-webfont.svg +146 -0
  159. data/vendor/assets/fonts/bastion/rcue/OpenSans-Italic-webfont.ttf +0 -0
  160. data/vendor/assets/fonts/bastion/rcue/OpenSans-Italic-webfont.woff +0 -0
  161. data/vendor/assets/fonts/bastion/rcue/OpenSans-Light-webfont.eot +0 -0
  162. data/vendor/assets/fonts/bastion/rcue/OpenSans-Light-webfont.svg +146 -0
  163. data/vendor/assets/fonts/bastion/rcue/OpenSans-Light-webfont.ttf +0 -0
  164. data/vendor/assets/fonts/bastion/rcue/OpenSans-Light-webfont.woff +0 -0
  165. data/vendor/assets/fonts/bastion/rcue/OpenSans-LightItalic-webfont.eot +0 -0
  166. data/vendor/assets/fonts/bastion/rcue/OpenSans-LightItalic-webfont.svg +146 -0
  167. data/vendor/assets/fonts/bastion/rcue/OpenSans-LightItalic-webfont.ttf +0 -0
  168. data/vendor/assets/fonts/bastion/rcue/OpenSans-LightItalic-webfont.woff +0 -0
  169. data/vendor/assets/fonts/bastion/rcue/OpenSans-Regular-webfont.eot +0 -0
  170. data/vendor/assets/fonts/bastion/rcue/OpenSans-Regular-webfont.svg +146 -0
  171. data/vendor/assets/fonts/bastion/rcue/OpenSans-Regular-webfont.ttf +0 -0
  172. data/vendor/assets/fonts/bastion/rcue/OpenSans-Regular-webfont.woff +0 -0
  173. data/vendor/assets/fonts/bastion/rcue/OpenSans-Semibold-webfont.eot +0 -0
  174. data/vendor/assets/fonts/bastion/rcue/OpenSans-Semibold-webfont.svg +146 -0
  175. data/vendor/assets/fonts/bastion/rcue/OpenSans-Semibold-webfont.ttf +0 -0
  176. data/vendor/assets/fonts/bastion/rcue/OpenSans-Semibold-webfont.woff +0 -0
  177. data/vendor/assets/fonts/bastion/rcue/OpenSans-SemiboldItalic-webfont.eot +0 -0
  178. data/vendor/assets/fonts/bastion/rcue/OpenSans-SemiboldItalic-webfont.svg +146 -0
  179. data/vendor/assets/fonts/bastion/rcue/OpenSans-SemiboldItalic-webfont.ttf +0 -0
  180. data/vendor/assets/fonts/bastion/rcue/OpenSans-SemiboldItalic-webfont.woff +0 -0
  181. data/vendor/assets/fonts/bastion/rcue/Overpass-Bold-webfont.eot +0 -0
  182. data/vendor/assets/fonts/bastion/rcue/Overpass-Bold-webfont.svg +454 -0
  183. data/vendor/assets/fonts/bastion/rcue/Overpass-Bold-webfont.ttf +0 -0
  184. data/vendor/assets/fonts/bastion/rcue/Overpass-Bold-webfont.woff +0 -0
  185. data/vendor/assets/fonts/bastion/rcue/Overpass-Regular-webfont.eot +0 -0
  186. data/vendor/assets/fonts/bastion/rcue/Overpass-Regular-webfont.svg +454 -0
  187. data/vendor/assets/fonts/bastion/rcue/Overpass-Regular-webfont.ttf +0 -0
  188. data/vendor/assets/fonts/bastion/rcue/Overpass-Regular-webfont.woff +0 -0
  189. data/vendor/assets/javascripts/bastion/alchemy/alchemy.js +20 -0
  190. data/vendor/assets/javascripts/bastion/angular-animate/angular-animate.js +1226 -0
  191. data/vendor/assets/javascripts/bastion/angular-blocks/angular-blocks.js +79 -0
  192. data/vendor/assets/javascripts/bastion/angular-bootstrap/ui-bootstrap-tpls.js +3677 -0
  193. data/vendor/assets/javascripts/bastion/angular-bootstrap/ui-bootstrap.js +3427 -0
  194. data/vendor/assets/javascripts/bastion/angular-gettext/angular-gettext.js +345 -0
  195. data/vendor/assets/javascripts/bastion/angular-resource/angular-resource.js +594 -0
  196. data/vendor/assets/javascripts/bastion/angular-route/angular-route.js +920 -0
  197. data/vendor/assets/javascripts/bastion/angular-sanitize/angular-sanitize.js +622 -0
  198. data/vendor/assets/javascripts/bastion/angular-ui-bootstrap/datepicker.js +447 -0
  199. data/vendor/assets/javascripts/bastion/angular-ui-bootstrap/timepicker.js +232 -0
  200. data/vendor/assets/javascripts/bastion/angular-ui-router/angular-ui-router.js +3223 -0
  201. data/vendor/assets/javascripts/bastion/angular-uuid4/angular-uuid4.js +21 -0
  202. data/vendor/assets/javascripts/bastion/angular/angular.js +20560 -0
  203. data/vendor/assets/javascripts/bastion/es5-shim/es5-shim.js +1216 -0
  204. data/vendor/assets/javascripts/bastion/json3/json3.js +861 -0
  205. data/vendor/assets/javascripts/bastion/ngUpload/ng-upload.js +205 -0
  206. data/vendor/assets/javascripts/bastion/underscore/underscore.js +1276 -0
  207. data/vendor/assets/stylesheets/bastion/alchemy/_colors.scss +99 -0
  208. data/vendor/assets/stylesheets/bastion/alchemy/_media_object.scss +22 -0
  209. data/vendor/assets/stylesheets/bastion/alchemy/_mixins.scss +24 -0
  210. data/vendor/assets/stylesheets/bastion/alchemy/_normalize.scss +396 -0
  211. data/vendor/assets/stylesheets/bastion/alchemy/_vars.scss +31 -0
  212. data/vendor/assets/stylesheets/bastion/alchemy/alchemy.scss +8 -0
  213. data/vendor/assets/stylesheets/bastion/bootstrap/alerts.less +67 -0
  214. data/vendor/assets/stylesheets/bastion/bootstrap/badges.less +51 -0
  215. data/vendor/assets/stylesheets/bastion/bootstrap/bootstrap.less +49 -0
  216. data/vendor/assets/stylesheets/bastion/bootstrap/breadcrumbs.less +23 -0
  217. data/vendor/assets/stylesheets/bastion/bootstrap/button-groups.less +227 -0
  218. data/vendor/assets/stylesheets/bastion/bootstrap/buttons.less +155 -0
  219. data/vendor/assets/stylesheets/bastion/bootstrap/carousel.less +232 -0
  220. data/vendor/assets/stylesheets/bastion/bootstrap/close.less +33 -0
  221. data/vendor/assets/stylesheets/bastion/bootstrap/code.less +53 -0
  222. data/vendor/assets/stylesheets/bastion/bootstrap/component-animations.less +29 -0
  223. data/vendor/assets/stylesheets/bastion/bootstrap/dropdowns.less +187 -0
  224. data/vendor/assets/stylesheets/bastion/bootstrap/forms.less +375 -0
  225. data/vendor/assets/stylesheets/bastion/bootstrap/glyphicons.less +237 -0
  226. data/vendor/assets/stylesheets/bastion/bootstrap/grid.less +79 -0
  227. data/vendor/assets/stylesheets/bastion/bootstrap/input-groups.less +136 -0
  228. data/vendor/assets/stylesheets/bastion/bootstrap/jumbotron.less +46 -0
  229. data/vendor/assets/stylesheets/bastion/bootstrap/labels.less +64 -0
  230. data/vendor/assets/stylesheets/bastion/bootstrap/list-group.less +88 -0
  231. data/vendor/assets/stylesheets/bastion/bootstrap/media.less +56 -0
  232. data/vendor/assets/stylesheets/bastion/bootstrap/mixins.less +845 -0
  233. data/vendor/assets/stylesheets/bastion/bootstrap/modals.less +129 -0
  234. data/vendor/assets/stylesheets/bastion/bootstrap/navbar.less +612 -0
  235. data/vendor/assets/stylesheets/bastion/bootstrap/navs.less +242 -0
  236. data/vendor/assets/stylesheets/bastion/bootstrap/normalize.less +406 -0
  237. data/vendor/assets/stylesheets/bastion/bootstrap/pager.less +55 -0
  238. data/vendor/assets/stylesheets/bastion/bootstrap/pagination.less +85 -0
  239. data/vendor/assets/stylesheets/bastion/bootstrap/panels.less +182 -0
  240. data/vendor/assets/stylesheets/bastion/bootstrap/popovers.less +133 -0
  241. data/vendor/assets/stylesheets/bastion/bootstrap/print.less +105 -0
  242. data/vendor/assets/stylesheets/bastion/bootstrap/progress-bars.less +80 -0
  243. data/vendor/assets/stylesheets/bastion/bootstrap/responsive-utilities.less +209 -0
  244. data/vendor/assets/stylesheets/bastion/bootstrap/scaffolding.less +119 -0
  245. data/vendor/assets/stylesheets/bastion/bootstrap/tables.less +231 -0
  246. data/vendor/assets/stylesheets/bastion/bootstrap/theme.less +247 -0
  247. data/vendor/assets/stylesheets/bastion/bootstrap/thumbnails.less +36 -0
  248. data/vendor/assets/stylesheets/bastion/bootstrap/tooltip.less +95 -0
  249. data/vendor/assets/stylesheets/bastion/bootstrap/type.less +281 -0
  250. data/vendor/assets/stylesheets/bastion/bootstrap/utilities.less +56 -0
  251. data/vendor/assets/stylesheets/bastion/bootstrap/variables.less +642 -0
  252. data/vendor/assets/stylesheets/bastion/bootstrap/wells.less +29 -0
  253. data/vendor/assets/stylesheets/bastion/font-awesome/less/bootstrap.less +84 -0
  254. data/vendor/assets/stylesheets/bastion/font-awesome/less/core.less +129 -0
  255. data/vendor/assets/stylesheets/bastion/font-awesome/less/extras.less +93 -0
  256. data/vendor/assets/stylesheets/bastion/font-awesome/less/font-awesome-ie7.less +1953 -0
  257. data/vendor/assets/stylesheets/bastion/font-awesome/less/font-awesome.less +33 -0
  258. data/vendor/assets/stylesheets/bastion/font-awesome/less/icons.less +381 -0
  259. data/vendor/assets/stylesheets/bastion/font-awesome/less/mixins.less +48 -0
  260. data/vendor/assets/stylesheets/bastion/font-awesome/less/path.less +14 -0
  261. data/vendor/assets/stylesheets/bastion/font-awesome/less/variables.less +735 -0
  262. data/vendor/assets/stylesheets/bastion/font-awesome/scss/_bootstrap.scss +84 -0
  263. data/vendor/assets/stylesheets/bastion/font-awesome/scss/_core.scss +129 -0
  264. data/vendor/assets/stylesheets/bastion/font-awesome/scss/_extras.scss +93 -0
  265. data/vendor/assets/stylesheets/bastion/font-awesome/scss/_icons.scss +381 -0
  266. data/vendor/assets/stylesheets/bastion/font-awesome/scss/_mixins.scss +48 -0
  267. data/vendor/assets/stylesheets/bastion/font-awesome/scss/_path.scss +14 -0
  268. data/vendor/assets/stylesheets/bastion/font-awesome/scss/_variables.scss +734 -0
  269. data/vendor/assets/stylesheets/bastion/font-awesome/scss/font-awesome-ie7.scss +1953 -0
  270. data/vendor/assets/stylesheets/bastion/font-awesome/scss/font-awesome.scss +33 -0
  271. data/vendor/assets/stylesheets/bastion/rcue/buttons.less +44 -0
  272. data/vendor/assets/stylesheets/bastion/rcue/fonts.less +52 -0
  273. data/vendor/assets/stylesheets/bastion/rcue/forms.less +19 -0
  274. data/vendor/assets/stylesheets/bastion/rcue/mixins.less +50 -0
  275. data/vendor/assets/stylesheets/bastion/rcue/navbar.less +481 -0
  276. data/vendor/assets/stylesheets/bastion/rcue/rcue.less +15 -0
  277. data/vendor/assets/stylesheets/bastion/rcue/variables.less +47 -0
  278. metadata +376 -0
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Copyright 2014 Red Hat, Inc.
3
+ *
4
+ * This software is licensed to you under the GNU General Public
5
+ * License as published by the Free Software Foundation; either version
6
+ * 2 of the License (GPLv2) or (at your option) any later version.
7
+ * There is NO WARRANTY for this software, express or implied,
8
+ * including the implied warranties of MERCHANTABILITY,
9
+ * NON-INFRINGEMENT, or FITNESS FOR A PARTICULAR PURPOSE. You should
10
+ * have received a copy of GPLv2 along with this software; if not, see
11
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
12
+ */
13
+ describe('Filter:unlimitedFilter', function() {
14
+ var unlimitedFilter;
15
+
16
+ beforeEach(module('alchemy.format'));
17
+
18
+ beforeEach(module(function($provide) {
19
+ $provide.value('translate', function(a) {return a});
20
+ }));
21
+
22
+ beforeEach(inject(function($filter) {
23
+ unlimitedFilter = $filter('unlimitedFilter');
24
+ }));
25
+
26
+ it("ensures correctly transforms limit", function() {
27
+ expect(unlimitedFilter(3, true)).toBe('Unlimited');
28
+ expect(unlimitedFilter(2)).toBe('2');
29
+ });
30
+
31
+ });
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Copyright 2014 Red Hat, Inc.
3
+ *
4
+ * This software is licensed to you under the GNU General Public
5
+ * License as published by the Free Software Foundation; either version
6
+ * 2 of the License (GPLv2) or (at your option) any later version.
7
+ * There is NO WARRANTY for this software, express or implied,
8
+ * including the implied warranties of MERCHANTABILITY,
9
+ * NON-INFRINGEMENT, or FITNESS FOR A PARTICULAR PURPOSE. You should
10
+ * have received a copy of GPLv2 along with this software; if not, see
11
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
12
+ */
13
+
14
+
15
+ describe('Directive: nutupaneTable', function() {
16
+ var scope,
17
+ compile,
18
+ tableElement;
19
+
20
+ beforeEach(module('alchemy'));
21
+
22
+ beforeEach(inject(function(_$compile_, _$rootScope_) {
23
+ compile = _$compile_;
24
+ scope = _$rootScope_;
25
+ }));
26
+
27
+ beforeEach(function() {
28
+ tableElement = angular.element(
29
+ '<div nutupane-table>' +
30
+ '<table>' +
31
+ '<thead>' +
32
+ '<tr><th>Column 1</th></tr>' +
33
+ '</thead>' +
34
+ '<tbody>' +
35
+ '<tr>' +
36
+ '<td>Row 1</td>' +
37
+ '</tr>' +
38
+ '</tbody>' +
39
+ '</table>' +
40
+ '</div>');
41
+
42
+ compile(tableElement)(scope);
43
+ scope.$digest();
44
+ scope.$broadcast("$stateChangeSuccess", {}, {}, {}, {});
45
+ });
46
+
47
+ it("should create a new table element with just the thead", function() {
48
+ var theads = tableElement.find('thead'),
49
+ tbodys = tableElement.find('tbody');
50
+
51
+ expect(theads.length).toEqual(2);
52
+ expect(tbodys.length).toEqual(1);
53
+ });
54
+
55
+ it("should hide the original table's thead", function() {
56
+ var originalTableHead = angular.element(tableElement.find('thead')[1]);
57
+
58
+ expect(originalTableHead.css('display')).toBe('none');
59
+ });
60
+
61
+ it("should remove the duplicate row select from the cloned table if present", function() {
62
+ var rowSelectTable = tableElement.clone();
63
+ rowSelectTable.find('thead').prepend("<tr><th class='row-select'></th></tr>");
64
+ compile(rowSelectTable)(scope);
65
+ scope.$digest();
66
+ scope.$broadcast("$stateChangeSuccess", {}, {}, {}, {});
67
+ expect(rowSelectTable.find('.row-select').length).toBe(1);
68
+ });
69
+ });
@@ -0,0 +1,307 @@
1
+ /**
2
+ * Copyright 2014 Red Hat, Inc.
3
+ *
4
+ * This software is licensed to you under the GNU General Public
5
+ * License as published by the Free Software Foundation; either version
6
+ * 2 of the License (GPLv2) or (at your option) any later version.
7
+ * There is NO WARRANTY for this software, express or implied,
8
+ * including the implied warranties of MERCHANTABILITY,
9
+ * NON-INFRINGEMENT, or FITNESS FOR A PARTICULAR PURPOSE. You should
10
+ * have received a copy of GPLv2 along with this software; if not, see
11
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
12
+ */
13
+
14
+ describe('Factory: Nutupane', function() {
15
+ var $timeout,
16
+ $location,
17
+ Resource,
18
+ expectedResult,
19
+ Nutupane;
20
+
21
+ beforeEach(module('Bastion.widgets'));
22
+
23
+ beforeEach(module(function() {
24
+ expectedResult = [{id: 2, value: "value2"}, {id:3, value: "value3"}];
25
+ Resource = {
26
+ queryPaged: function(params, callback) {
27
+ var result = {results: expectedResult};
28
+ if (callback) {
29
+ callback(result);
30
+ }
31
+ return result;
32
+ },
33
+ customAction: function() {},
34
+ total: 10,
35
+ subtotal: 8,
36
+ offset: 5,
37
+ sort: {
38
+ by: "description",
39
+ order: "ASC"
40
+ }
41
+ };
42
+ }));
43
+
44
+ beforeEach(inject(function(_$location_, _$timeout_, _Nutupane_) {
45
+ $location = _$location_;
46
+ $timeout = _$timeout_;
47
+ Nutupane = _Nutupane_;
48
+ }));
49
+
50
+ describe("adds additional functionality to the Nutupane table by", function() {
51
+ var nutupane;
52
+
53
+ beforeEach(function() {
54
+ nutupane = new Nutupane(Resource);
55
+ nutupane.table.working = false;
56
+ nutupane.table.selectAll = function() {};
57
+ nutupane.table.getSelected = function() {};
58
+ nutupane.table.disableSelectAll = function () { };
59
+ nutupane.table.enableSelectAll = function () { };
60
+ nutupane.table.allSelected = function () { return true; };
61
+ nutupane.table.rows = [{id: 0, value: "value0"}, {id:1, value: "value1"}];
62
+ nutupane.table.resource = Resource;
63
+ });
64
+
65
+ it("providing a method to fetch records for the table", function() {
66
+ var expected = nutupane.table.rows.concat(expectedResult);
67
+
68
+ spyOn(Resource, 'queryPaged').andCallThrough();
69
+ nutupane.query();
70
+
71
+ expect(Resource.queryPaged).toHaveBeenCalled();
72
+ expect(nutupane.table.rows.length).toBe(4);
73
+ angular.forEach(nutupane.table.rows, function(value, index) {
74
+ expect(value).toBe(expected[index]);
75
+ });
76
+ });
77
+
78
+ it("providing a method to refresh the table", function() {
79
+ spyOn(Resource, 'queryPaged').andCallThrough();
80
+ nutupane.refresh();
81
+
82
+ expect(Resource.queryPaged).toHaveBeenCalled();
83
+ expect(nutupane.table.rows).toBe(expectedResult);
84
+ });
85
+
86
+ it("providing a method to perform a search", function() {
87
+ spyOn(Resource, 'queryPaged');
88
+ nutupane.table.closeItem = function() {};
89
+
90
+ nutupane.table.search();
91
+
92
+ expect(Resource.queryPaged).toHaveBeenCalled();
93
+ });
94
+
95
+ it("refusing to perform a search if the table is currently fetching", function() {
96
+ spyOn(Resource, 'queryPaged');
97
+ nutupane.table.closeItem = function() {};
98
+ nutupane.table.working = true;
99
+
100
+ nutupane.table.search();
101
+
102
+ expect(Resource.queryPaged).not.toHaveBeenCalled();
103
+ });
104
+
105
+ it("setting the search parameter in the URL when performing a search", function() {
106
+ spyOn(Resource, 'queryPaged');
107
+ nutupane.table.closeItem = function() {};
108
+ nutupane.table.working = true;
109
+
110
+ nutupane.table.search("Find Me");
111
+
112
+ expect($location.search().search).toEqual("Find Me");
113
+ });
114
+
115
+ it("enforcing the user of this factory to define a closeItem function", function() {
116
+ expect(nutupane.table.closeItem).toThrow();
117
+ });
118
+
119
+ it("updates a single occurrence of a row within the list of rows.", function() {
120
+ var newRow = {id:0, value:"new value", anotherValue: "value"};
121
+ nutupane.query();
122
+ nutupane.table.replaceRow(newRow);
123
+ expect(nutupane.table.rows[0]).toBe(newRow);
124
+ });
125
+
126
+ it("removes a single occurrence of a row within the list of rows.", function() {
127
+ var row = {id:0, value: "value2"};
128
+ nutupane.removeRow(row.id);
129
+ expect(nutupane.table.rows.length).toBe(1);
130
+ expect(nutupane.table.rows).not.toContain(row);
131
+ });
132
+
133
+ it("decrements num selected if removed row is selected.", function() {
134
+ var row = nutupane.table.rows[0];
135
+ row.selected = true;
136
+ nutupane.table.numSelected = 1;
137
+
138
+ nutupane.removeRow(row.id);
139
+ expect(nutupane.table.rows.length).toBe(1);
140
+ expect(nutupane.table.rows).not.toContain(row);
141
+ expect(nutupane.table.numSelected).toBe(0);
142
+ });
143
+
144
+ it("providing a method that fetches more data", function() {
145
+ nutupane.table.rows = [];
146
+ spyOn(Resource, 'queryPaged');
147
+
148
+ nutupane.table.nextPage();
149
+
150
+ expect(Resource.queryPaged).toHaveBeenCalled();
151
+ });
152
+
153
+ it("refusing to fetch more data if the table is currently working", function() {
154
+ spyOn(Resource, 'queryPaged');
155
+ nutupane.table.working = true;
156
+ nutupane.table.nextPage();
157
+
158
+ expect(Resource.queryPaged).not.toHaveBeenCalled();
159
+ });
160
+
161
+ it("refusing to fetch more data if the subtotal of records equals the number of rows", function() {
162
+ spyOn(Resource, 'queryPaged');
163
+ nutupane.table.rows = new Array(8);
164
+ nutupane.table.nextPage();
165
+
166
+ expect(Resource.queryPaged).not.toHaveBeenCalled();
167
+ });
168
+
169
+ it("provides a way to add an individual row", function() {
170
+ nutupane.table.rows = new Array(8);
171
+ nutupane.table.addRow('');
172
+
173
+ expect(nutupane.table.rows.length).toBe(9);
174
+ });
175
+
176
+ it("provides a way to enable select all results", function(){
177
+ nutupane.enableSelectAllResults();
178
+ expect(nutupane.table.selectAllResultsEnabled).toBe(true);
179
+ });
180
+
181
+ it("provides a way to select all results", function() {
182
+ nutupane.enableSelectAllResults();
183
+ spyOn(nutupane.table, 'selectAll');
184
+ spyOn(nutupane.table, 'disableSelectAll');
185
+
186
+ nutupane.table.selectAllResults(true);
187
+
188
+ expect(nutupane.table.selectAll).toHaveBeenCalledWith(true);
189
+ expect(nutupane.table.disableSelectAll).toHaveBeenCalled();
190
+ expect(nutupane.table.allResultsSelected).toBe(true);
191
+ expect(nutupane.table.numSelected).toBe(nutupane.table.resource.subtotal);
192
+ });
193
+
194
+ it("provides a way to de-select all results", function(){
195
+ nutupane.enableSelectAllResults();
196
+ nutupane.table.numSelected = 0;
197
+ spyOn(nutupane.table, 'selectAll');
198
+ spyOn(nutupane.table, 'enableSelectAll');
199
+ nutupane.table.selectAllResults(false);
200
+
201
+ expect(nutupane.table.selectAll).toHaveBeenCalledWith(false);
202
+ expect(nutupane.table.enableSelectAll).toHaveBeenCalled();
203
+ expect(nutupane.table.allResultsSelected).toBe(false);
204
+ expect(nutupane.table.numSelected).toBe(0);
205
+ });
206
+
207
+ it("provides a way to get deselected items", function(){
208
+ var deselected;
209
+ nutupane.enableSelectAllResults();
210
+ nutupane.table.rows = expectedResult;
211
+ angular.forEach(nutupane.table.rows, function(item, itemIndex) {
212
+ item.selected = true;
213
+ });
214
+ nutupane.table.rows[0].selected = false
215
+ deselected = nutupane.getDeselected();
216
+
217
+ expect(deselected.length).toBe(1);
218
+ expect(deselected[0]).toBe(nutupane.table.rows[0]);
219
+ });
220
+
221
+ it("provides a way to retrieve selected result items", function(){
222
+ var results;
223
+ nutupane.enableSelectAllResults();
224
+ nutupane.table.selectAllResults(true);
225
+ nutupane.table.searchTerm = "FOO"
226
+
227
+ angular.forEach(nutupane.table.rows, function(item, itemIndex) {
228
+ item.selected = true;
229
+ });
230
+ nutupane.table.rows[0].selected = false;
231
+ results = nutupane.getAllSelectedResults('id');
232
+ expect(results.excluded.ids[0]).toBe(nutupane.table.rows[0]['id']);
233
+ expect(results.included.search).toBe("FOO");
234
+ });
235
+
236
+ describe("provides a way to sort the table", function() {
237
+ it ("defaults the sort to ascending if the previous sort does not match the new sort.", function() {
238
+ var expectedParams = {sort_by: 'name', sort_order: 'ASC', search: '', page: 1};
239
+ nutupane.table.resource.sort = {};
240
+
241
+ spyOn(Resource, 'queryPaged');
242
+ nutupane.table.sortBy({id: "name"});
243
+
244
+ expect(Resource.queryPaged).toHaveBeenCalledWith(expectedParams, jasmine.any(Function));
245
+ });
246
+
247
+ it("toggles the sort order if already sorting by that column", function() {
248
+ var expectedParams = {sort_by: 'name', sort_order: 'DESC', search: '', page: 1};
249
+ nutupane.table.resource.sort = {
250
+ by: 'name',
251
+ order: 'ASC'
252
+ };
253
+
254
+ spyOn(Resource, 'queryPaged');
255
+ nutupane.table.sortBy({id: "name"});
256
+
257
+ expect(Resource.queryPaged).toHaveBeenCalledWith(expectedParams, jasmine.any(Function));
258
+ });
259
+
260
+ it("sets the column sort order and marks it as active.", function() {
261
+ var column = {id: "name"}
262
+ nutupane.table.resource.sort = {};
263
+ nutupane.table.sortBy(column);
264
+ expect(column.sortOrder).toBe("ASC");
265
+ expect(column.active).toBe(true);
266
+ });
267
+
268
+ it("refreshes the table by calling query()", function() {
269
+ spyOn(nutupane, "query");
270
+ nutupane.table.sortBy({id: "name"});
271
+ expect(nutupane.query).toHaveBeenCalled();
272
+ });
273
+ });
274
+ });
275
+
276
+ describe("Nutupane should", function() {
277
+ beforeEach(function() {
278
+ nutupane = new Nutupane(Resource, {}, 'customAction');
279
+ nutupane.table.working = false;
280
+ nutupane.table.closeItem = function () {};
281
+ nutupane.table.allSelected = function () {};
282
+ nutupane.table.selectAll = function () {};
283
+ });
284
+
285
+ it("provide a method to fetch records for the table via a custom action", function() {
286
+ spyOn(Resource, 'customAction');
287
+ nutupane.query();
288
+
289
+ expect(Resource.customAction).toHaveBeenCalled();
290
+ });
291
+
292
+ it("naming the URL search field based off the action", function() {
293
+ spyOn(Resource, 'customAction');
294
+ nutupane.table.search('*');
295
+
296
+ expect($location.search()['customActionSearch']).toBe('*');
297
+ });
298
+
299
+ it("provide a method to add params", function () {
300
+ nutupane.addParam('test', 'ABC');
301
+
302
+ expect(nutupane.getParams()['test']).toBe('ABC');
303
+ });
304
+ });
305
+
306
+ });
307
+
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Copyright 2014 Red Hat, Inc.
3
+ *
4
+ * This software is licensed to you under the GNU General Public
5
+ * License as published by the Free Software Foundation; either version
6
+ * 2 of the License (GPLv2) or (at your option) any later version.
7
+ * There is NO WARRANTY for this software, express or implied,
8
+ * including the implied warranties of MERCHANTABILITY,
9
+ * NON-INFRINGEMENT, or FITNESS FOR A PARTICULAR PURPOSE. You should
10
+ * have received a copy of GPLv2 along with this software; if not, see
11
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
12
+ **/
13
+
14
+ describe('Service: MenuExpander', function() {
15
+ var menuExpander;
16
+
17
+ beforeEach(module('Bastion.menu'));
18
+
19
+ beforeEach(inject(function(MenuExpander) {
20
+ menuExpander = MenuExpander;
21
+ }));
22
+
23
+ describe('sets menu items', function() {
24
+ it('by adding a menu if the menu does not exist', function() {
25
+ var menu = [{'url': 'http://google.com', 'label': 'google'}];
26
+
27
+ menuExpander.setMenu('system', menu);
28
+
29
+ expect(menuExpander.getMenu('system')).toBe(menu);
30
+ });
31
+
32
+ it('by adding to the menu if it already exists', function() {
33
+ var menu1 = [{'url': 'http://google.com', 'label': 'google'}],
34
+ menu2 = [{'url': 'http://redhat.com', 'label': 'redhat'}];
35
+
36
+ menuExpander.setMenu('system', menu1);
37
+ menuExpander.setMenu('system', menu2);
38
+
39
+ expect(menuExpander.getMenu('system').length).toBe(2);
40
+ expect(menuExpander.getMenu('system')[0]).toBe(menu1[0]);
41
+ expect(menuExpander.getMenu('system')[1]).toBe(menu2[0]);
42
+ });
43
+
44
+ it('by not adding duplicate menu items', function() {
45
+ var menu1 = [{'url': 'http://google.com', 'label': 'google'}],
46
+ menu2 = [{'url': 'http://google.com', 'label': 'google'}];
47
+
48
+ menuExpander.setMenu('system', menu1);
49
+ menuExpander.setMenu('system', menu2);
50
+
51
+ expect(menuExpander.getMenu('system').length).toBe(1);
52
+ expect(menuExpander.getMenu('system')[0]).toBe(menu1[0]);
53
+ });
54
+ });
55
+
56
+ describe("gets menu items", function() {
57
+ it('by returning an empty array if the menu does not exist.', function() {
58
+ expect($.isArray(menuExpander.getMenu('system'))).toBe(true);
59
+ expect(menuExpander.getMenu('system').length).toBe(0);
60
+ });
61
+
62
+ it('by returning the menu if it exists.', function() {
63
+ var menu = [{'url': 'http://google.com', 'label': 'google'}];
64
+
65
+ expect(menuExpander.getMenu('system').length).toBe(0);
66
+
67
+ menuExpander.setMenu('system', menu);
68
+
69
+ expect(menuExpander.getMenu('system').length).toBe(1);
70
+ expect(menuExpander.getMenu('system')).toBe(menu);
71
+ });
72
+ });
73
+ });
74
+