patternfly-sass 0.0.0.pre.semantically.pre.released

Sign up to get free protection for your applications and to get access to all the features.
Files changed (361) hide show
  1. checksums.yaml +7 -0
  2. data/CODE_OF_CONDUCT.md +4 -0
  3. data/LICENSE.txt +205 -0
  4. data/OPEN_SOURCE_LICENCES.txt +1366 -0
  5. data/QUICKSTART.md +210 -0
  6. data/README.md +438 -0
  7. data/dist/fonts/FontAwesome.otf +0 -0
  8. data/dist/fonts/OpenSans-Bold-webfont.eot +0 -0
  9. data/dist/fonts/OpenSans-Bold-webfont.svg +19028 -0
  10. data/dist/fonts/OpenSans-Bold-webfont.ttf +0 -0
  11. data/dist/fonts/OpenSans-Bold-webfont.woff +0 -0
  12. data/dist/fonts/OpenSans-Bold-webfont.woff2 +0 -0
  13. data/dist/fonts/OpenSans-BoldItalic-webfont.eot +0 -0
  14. data/dist/fonts/OpenSans-BoldItalic-webfont.svg +19036 -0
  15. data/dist/fonts/OpenSans-BoldItalic-webfont.ttf +0 -0
  16. data/dist/fonts/OpenSans-BoldItalic-webfont.woff +0 -0
  17. data/dist/fonts/OpenSans-BoldItalic-webfont.woff2 +0 -0
  18. data/dist/fonts/OpenSans-ExtraBold-webfont.eot +0 -0
  19. data/dist/fonts/OpenSans-ExtraBold-webfont.svg +19030 -0
  20. data/dist/fonts/OpenSans-ExtraBold-webfont.ttf +0 -0
  21. data/dist/fonts/OpenSans-ExtraBold-webfont.woff +0 -0
  22. data/dist/fonts/OpenSans-ExtraBold-webfont.woff2 +0 -0
  23. data/dist/fonts/OpenSans-ExtraBoldItalic-webfont.eot +0 -0
  24. data/dist/fonts/OpenSans-ExtraBoldItalic-webfont.svg +19036 -0
  25. data/dist/fonts/OpenSans-ExtraBoldItalic-webfont.ttf +0 -0
  26. data/dist/fonts/OpenSans-ExtraBoldItalic-webfont.woff +0 -0
  27. data/dist/fonts/OpenSans-ExtraBoldItalic-webfont.woff2 +0 -0
  28. data/dist/fonts/OpenSans-Italic-webfont.eot +0 -0
  29. data/dist/fonts/OpenSans-Italic-webfont.svg +19043 -0
  30. data/dist/fonts/OpenSans-Italic-webfont.ttf +0 -0
  31. data/dist/fonts/OpenSans-Italic-webfont.woff +0 -0
  32. data/dist/fonts/OpenSans-Italic-webfont.woff2 +0 -0
  33. data/dist/fonts/OpenSans-Light-webfont.eot +0 -0
  34. data/dist/fonts/OpenSans-Light-webfont.svg +19026 -0
  35. data/dist/fonts/OpenSans-Light-webfont.ttf +0 -0
  36. data/dist/fonts/OpenSans-Light-webfont.woff +0 -0
  37. data/dist/fonts/OpenSans-Light-webfont.woff2 +0 -0
  38. data/dist/fonts/OpenSans-LightItalic-webfont.eot +0 -0
  39. data/dist/fonts/OpenSans-LightItalic-webfont.svg +19039 -0
  40. data/dist/fonts/OpenSans-LightItalic-webfont.ttf +0 -0
  41. data/dist/fonts/OpenSans-LightItalic-webfont.woff +0 -0
  42. data/dist/fonts/OpenSans-LightItalic-webfont.woff2 +0 -0
  43. data/dist/fonts/OpenSans-Regular-webfont.eot +0 -0
  44. data/dist/fonts/OpenSans-Regular-webfont.svg +19030 -0
  45. data/dist/fonts/OpenSans-Regular-webfont.ttf +0 -0
  46. data/dist/fonts/OpenSans-Regular-webfont.woff +0 -0
  47. data/dist/fonts/OpenSans-Regular-webfont.woff2 +0 -0
  48. data/dist/fonts/OpenSans-Semibold-webfont.eot +0 -0
  49. data/dist/fonts/OpenSans-Semibold-webfont.svg +19030 -0
  50. data/dist/fonts/OpenSans-Semibold-webfont.ttf +0 -0
  51. data/dist/fonts/OpenSans-Semibold-webfont.woff +0 -0
  52. data/dist/fonts/OpenSans-Semibold-webfont.woff2 +0 -0
  53. data/dist/fonts/OpenSans-SemiboldItalic-webfont.eot +0 -0
  54. data/dist/fonts/OpenSans-SemiboldItalic-webfont.svg +19043 -0
  55. data/dist/fonts/OpenSans-SemiboldItalic-webfont.ttf +0 -0
  56. data/dist/fonts/OpenSans-SemiboldItalic-webfont.woff +0 -0
  57. data/dist/fonts/OpenSans-SemiboldItalic-webfont.woff2 +0 -0
  58. data/dist/fonts/PatternFlyIcons-webfont.eot +0 -0
  59. data/dist/fonts/PatternFlyIcons-webfont.svg +140 -0
  60. data/dist/fonts/PatternFlyIcons-webfont.ttf +0 -0
  61. data/dist/fonts/PatternFlyIcons-webfont.woff +0 -0
  62. data/dist/fonts/fontawesome-webfont.eot +0 -0
  63. data/dist/fonts/fontawesome-webfont.svg +2671 -0
  64. data/dist/fonts/fontawesome-webfont.ttf +0 -0
  65. data/dist/fonts/fontawesome-webfont.woff +0 -0
  66. data/dist/fonts/fontawesome-webfont.woff2 +0 -0
  67. data/dist/fonts/glyphicons-halflings-regular.eot +0 -0
  68. data/dist/fonts/glyphicons-halflings-regular.svg +288 -0
  69. data/dist/fonts/glyphicons-halflings-regular.ttf +0 -0
  70. data/dist/fonts/glyphicons-halflings-regular.woff +0 -0
  71. data/dist/fonts/glyphicons-halflings-regular.woff2 +0 -0
  72. data/dist/img/Logo_Horizontal_Reversed.svg +49 -0
  73. data/dist/img/OpenShift-Logo-NoText.svg +51 -0
  74. data/dist/img/OpenShift-Logo-Text.svg +95 -0
  75. data/dist/img/OpenShift-logo.svg +69 -0
  76. data/dist/img/RH_Atomic-Logo-NoText.svg +53 -0
  77. data/dist/img/RH_Atomic-Logo-Text.svg +91 -0
  78. data/dist/img/RH_atomic.svg +88 -0
  79. data/dist/img/apple-touch-icon-precomposed-114.png +0 -0
  80. data/dist/img/apple-touch-icon-precomposed-144.png +0 -0
  81. data/dist/img/apple-touch-icon-precomposed-152.png +0 -0
  82. data/dist/img/apple-touch-icon-precomposed-180.png +0 -0
  83. data/dist/img/apple-touch-icon-precomposed-57.png +0 -0
  84. data/dist/img/apple-touch-icon-precomposed-72.png +0 -0
  85. data/dist/img/apple-touch-icon-precomposed-76.png +0 -0
  86. data/dist/img/bg-login-2.png +0 -0
  87. data/dist/img/bg-login.jpg +0 -0
  88. data/dist/img/bg-login.png +0 -0
  89. data/dist/img/bg-modal-about-pf.png +0 -0
  90. data/dist/img/bg-navbar-pf-alt.svg +9 -0
  91. data/dist/img/brand-alt.svg +88 -0
  92. data/dist/img/brand.svg +87 -0
  93. data/dist/img/dropbox-logo.svg +15 -0
  94. data/dist/img/facebook-logo.svg +12 -0
  95. data/dist/img/favicon.ico +0 -0
  96. data/dist/img/fedora-logo.png +0 -0
  97. data/dist/img/git-logo.svg +21 -0
  98. data/dist/img/github-logo.svg +17 -0
  99. data/dist/img/gmail.svg +23 -0
  100. data/dist/img/google-calendar.svg +26 -0
  101. data/dist/img/google-drive.svg +17 -0
  102. data/dist/img/google-logo.svg +19 -0
  103. data/dist/img/instagram-logo.png +0 -0
  104. data/dist/img/kubernetes-Logo.svg +60 -0
  105. data/dist/img/kubernetes.svg +8 -0
  106. data/dist/img/linkedin-logo.svg +13 -0
  107. data/dist/img/logo-alt.svg +18 -0
  108. data/dist/img/logo.svg +22 -0
  109. data/dist/img/open-id-logo.svg +19 -0
  110. data/dist/img/rcue-full.svg +221 -0
  111. data/dist/img/rcue.svg +92 -0
  112. data/dist/img/redhat_reverse.png +0 -0
  113. data/dist/img/skype-logo.svg +23 -0
  114. data/dist/img/spinner-inverse-lg.gif +0 -0
  115. data/dist/img/spinner-inverse-sm.gif +0 -0
  116. data/dist/img/spinner-inverse-xs.gif +0 -0
  117. data/dist/img/spinner-inverse.gif +0 -0
  118. data/dist/img/spinner-lg.gif +0 -0
  119. data/dist/img/spinner-sm.gif +0 -0
  120. data/dist/img/spinner-xs.gif +0 -0
  121. data/dist/img/spinner.gif +0 -0
  122. data/dist/img/stack-exchange-logo.svg +21 -0
  123. data/dist/img/twitter-logo.svg +19 -0
  124. data/dist/js/patternfly-functions-base.js +7 -0
  125. data/dist/js/patternfly-functions-charts.js +13 -0
  126. data/dist/js/patternfly-functions-colors.js +8 -0
  127. data/dist/js/patternfly-functions-count-chars.js +59 -0
  128. data/dist/js/patternfly-functions-data-tables.js +149 -0
  129. data/dist/js/patternfly-functions-fixed-heights.js +109 -0
  130. data/dist/js/patternfly-functions-list.js +79 -0
  131. data/dist/js/patternfly-functions-navigation.js +113 -0
  132. data/dist/js/patternfly-functions-popovers.js +37 -0
  133. data/dist/js/patternfly-functions-sidebar.js +31 -0
  134. data/dist/js/patternfly-functions-tree-grid.js +82 -0
  135. data/dist/js/patternfly-functions-vertical-nav.js +610 -0
  136. data/dist/js/patternfly-functions.js +1307 -0
  137. data/dist/js/patternfly-functions.min.js +1 -0
  138. data/dist/js/patternfly-settings-base.d.ts +9 -0
  139. data/dist/js/patternfly-settings-base.js +16 -0
  140. data/dist/js/patternfly-settings-charts.d.ts +92 -0
  141. data/dist/js/patternfly-settings-charts.js +449 -0
  142. data/dist/js/patternfly-settings-colors.d.ts +88 -0
  143. data/dist/js/patternfly-settings-colors.js +91 -0
  144. data/dist/js/patternfly-settings.d.ts +3 -0
  145. data/dist/js/patternfly-settings.js +558 -0
  146. data/dist/js/patternfly-settings.min.js +1 -0
  147. data/dist/js/patternfly.dataTables.pfColVis.js +151 -0
  148. data/dist/js/patternfly.dataTables.pfEmpty.js +253 -0
  149. data/dist/js/patternfly.dataTables.pfEmpty.min.js +1 -0
  150. data/dist/js/patternfly.dataTables.pfFilter.js +429 -0
  151. data/dist/js/patternfly.dataTables.pfFilter.min.js +1 -0
  152. data/dist/js/patternfly.dataTables.pfPagination.js +401 -0
  153. data/dist/js/patternfly.dataTables.pfPagination.min.js +1 -0
  154. data/dist/js/patternfly.dataTables.pfResize.js +214 -0
  155. data/dist/js/patternfly.dataTables.pfResize.min.js +1 -0
  156. data/dist/js/patternfly.dataTables.pfSelect.js +281 -0
  157. data/dist/js/patternfly.dataTables.pfSelect.min.js +1 -0
  158. data/dist/js/patternfly.js +1866 -0
  159. data/dist/js/patternfly.min.js +2 -0
  160. data/dist/sass/_patternfly-compass.scss +3 -0
  161. data/dist/sass/_patternfly-sprockets.scss +3 -0
  162. data/dist/sass/_patternfly.scss +147 -0
  163. data/dist/sass/patternfly/_about-modal.scss +44 -0
  164. data/dist/sass/patternfly/_accordion.scss +18 -0
  165. data/dist/sass/patternfly/_alerts.scss +44 -0
  166. data/dist/sass/patternfly/_application-launcher.scss +213 -0
  167. data/dist/sass/patternfly/_badges.scss +11 -0
  168. data/dist/sass/patternfly/_blank-slate.scss +52 -0
  169. data/dist/sass/patternfly/_bootstrap-combobox.scss +35 -0
  170. data/dist/sass/patternfly/_bootstrap-datepicker.scss +132 -0
  171. data/dist/sass/patternfly/_bootstrap-mixin-overrides.scss +33 -0
  172. data/dist/sass/patternfly/_bootstrap-select.scss +108 -0
  173. data/dist/sass/patternfly/_bootstrap-slider.scss +66 -0
  174. data/dist/sass/patternfly/_bootstrap-switch.scss +19 -0
  175. data/dist/sass/patternfly/_bootstrap-touchspin.scss +31 -0
  176. data/dist/sass/patternfly/_bootstrap-treeview.scss +89 -0
  177. data/dist/sass/patternfly/_breadcrumbs.scss +20 -0
  178. data/dist/sass/patternfly/_buttons.scss +50 -0
  179. data/dist/sass/patternfly/_card-view.scss +105 -0
  180. data/dist/sass/patternfly/_cards.scss +238 -0
  181. data/dist/sass/patternfly/_charts.scss +388 -0
  182. data/dist/sass/patternfly/_close.scss +16 -0
  183. data/dist/sass/patternfly/_color-variables.scss +85 -0
  184. data/dist/sass/patternfly/_context-selector.scss +125 -0
  185. data/dist/sass/patternfly/_datatables.scss +186 -0
  186. data/dist/sass/patternfly/_date-and-time.scss +35 -0
  187. data/dist/sass/patternfly/_dropdowns.scss +235 -0
  188. data/dist/sass/patternfly/_experimental-features.scss +48 -0
  189. data/dist/sass/patternfly/_filter.scss +42 -0
  190. data/dist/sass/patternfly/_fonts.scss +124 -0
  191. data/dist/sass/patternfly/_footer.scss +19 -0
  192. data/dist/sass/patternfly/_forms.scss +192 -0
  193. data/dist/sass/patternfly/_icons.scss +371 -0
  194. data/dist/sass/patternfly/_infotip.scss +145 -0
  195. data/dist/sass/patternfly/_labels.scss +17 -0
  196. data/dist/sass/patternfly/_layouts.scss +140 -0
  197. data/dist/sass/patternfly/_links.scss +5 -0
  198. data/dist/sass/patternfly/_list-group.scss +23 -0
  199. data/dist/sass/patternfly/_list-pf.scss +178 -0
  200. data/dist/sass/patternfly/_list-view-dnd.scss +53 -0
  201. data/dist/sass/patternfly/_list-view.scss +390 -0
  202. data/dist/sass/patternfly/_login.scss +341 -0
  203. data/dist/sass/patternfly/_mixins.scss +81 -0
  204. data/dist/sass/patternfly/_modals.scss +49 -0
  205. data/dist/sass/patternfly/_nav-vertical-alt.scss +168 -0
  206. data/dist/sass/patternfly/_navbar-alt.scss +141 -0
  207. data/dist/sass/patternfly/_navbar-vertical.scss +168 -0
  208. data/dist/sass/patternfly/_navbar.scss +579 -0
  209. data/dist/sass/patternfly/_notifications-drawer.scss +250 -0
  210. data/dist/sass/patternfly/_pager.scss +68 -0
  211. data/dist/sass/patternfly/_pagination.scss +121 -0
  212. data/dist/sass/patternfly/_panels.scss +134 -0
  213. data/dist/sass/patternfly/_popovers.scss +52 -0
  214. data/dist/sass/patternfly/_progress-bars.scss +121 -0
  215. data/dist/sass/patternfly/_rcue-about-modal.scss +45 -0
  216. data/dist/sass/patternfly/_rcue-additions.scss +11 -0
  217. data/dist/sass/patternfly/_rcue-login.scss +75 -0
  218. data/dist/sass/patternfly/_rcue-variables.scss +57 -0
  219. data/dist/sass/patternfly/_rcue.scss +6 -0
  220. data/dist/sass/patternfly/_search.scss +64 -0
  221. data/dist/sass/patternfly/_sidebar.scss +176 -0
  222. data/dist/sass/patternfly/_skip-to-content.scss +12 -0
  223. data/dist/sass/patternfly/_spinner.scss +72 -0
  224. data/dist/sass/patternfly/_syntax-highlighting.scss +36 -0
  225. data/dist/sass/patternfly/_table-view.scss +188 -0
  226. data/dist/sass/patternfly/_tables.scss +90 -0
  227. data/dist/sass/patternfly/_tabs.scss +118 -0
  228. data/dist/sass/patternfly/_time-picker.scss +98 -0
  229. data/dist/sass/patternfly/_toast.scss +75 -0
  230. data/dist/sass/patternfly/_toolbar.scss +190 -0
  231. data/dist/sass/patternfly/_tooltip.scss +15 -0
  232. data/dist/sass/patternfly/_tree-list-view.scss +83 -0
  233. data/dist/sass/patternfly/_type.scss +29 -0
  234. data/dist/sass/patternfly/_variables.scss +595 -0
  235. data/dist/sass/patternfly/_vertical-nav.scss +944 -0
  236. data/dist/sass/patternfly/_wizard.scss +665 -0
  237. data/dist/sass/patternfly/dependencies/bootstrap-combobox/combobox.scss +57 -0
  238. data/dist/sass/patternfly/dependencies/bootstrap-datepicker/datepicker.scss +242 -0
  239. data/dist/sass/patternfly/dependencies/bootstrap-datepicker/datepicker3.scss +257 -0
  240. data/dist/sass/patternfly/dependencies/bootstrap-select/bootstrap-select.scss +389 -0
  241. data/dist/sass/patternfly/dependencies/bootstrap-select/variables.scss +9 -0
  242. data/dist/sass/patternfly/dependencies/bootstrap-slider/_mixins.scss +25 -0
  243. data/dist/sass/patternfly/dependencies/bootstrap-slider/_rules.scss +246 -0
  244. data/dist/sass/patternfly/dependencies/bootstrap-slider/_variables.scss +28 -0
  245. data/dist/sass/patternfly/dependencies/bootstrap-slider/bootstrap-slider.scss +42 -0
  246. data/dist/sass/patternfly/dependencies/bootstrap-switch/bootstrap-switch.scss +195 -0
  247. data/dist/sass/patternfly/dependencies/bootstrap-switch/build.scss +3 -0
  248. data/dist/sass/patternfly/dependencies/bootstrap-switch/mixins/alerts.scss +14 -0
  249. data/dist/sass/patternfly/dependencies/bootstrap-switch/mixins/background-variant.scss +9 -0
  250. data/dist/sass/patternfly/dependencies/bootstrap-switch/mixins/border-radius.scss +18 -0
  251. data/dist/sass/patternfly/dependencies/bootstrap-switch/mixins/buttons.scss +68 -0
  252. data/dist/sass/patternfly/dependencies/bootstrap-switch/mixins/center-block.scss +7 -0
  253. data/dist/sass/patternfly/dependencies/bootstrap-switch/mixins/clearfix.scss +22 -0
  254. data/dist/sass/patternfly/dependencies/bootstrap-switch/mixins/forms.scss +85 -0
  255. data/dist/sass/patternfly/dependencies/bootstrap-switch/mixins/gradients.scss +59 -0
  256. data/dist/sass/patternfly/dependencies/bootstrap-switch/mixins/grid-framework.scss +98 -0
  257. data/dist/sass/patternfly/dependencies/bootstrap-switch/mixins/grid.scss +122 -0
  258. data/dist/sass/patternfly/dependencies/bootstrap-switch/mixins/hide-text.scss +21 -0
  259. data/dist/sass/patternfly/dependencies/bootstrap-switch/mixins/image.scss +33 -0
  260. data/dist/sass/patternfly/dependencies/bootstrap-switch/mixins/labels.scss +12 -0
  261. data/dist/sass/patternfly/dependencies/bootstrap-switch/mixins/list-group.scss +29 -0
  262. data/dist/sass/patternfly/dependencies/bootstrap-switch/mixins/nav-divider.scss +10 -0
  263. data/dist/sass/patternfly/dependencies/bootstrap-switch/mixins/nav-vertical-align.scss +9 -0
  264. data/dist/sass/patternfly/dependencies/bootstrap-switch/mixins/opacity.scss +8 -0
  265. data/dist/sass/patternfly/dependencies/bootstrap-switch/mixins/pagination.scss +23 -0
  266. data/dist/sass/patternfly/dependencies/bootstrap-switch/mixins/panels.scss +24 -0
  267. data/dist/sass/patternfly/dependencies/bootstrap-switch/mixins/progress-bar.scss +10 -0
  268. data/dist/sass/patternfly/dependencies/bootstrap-switch/mixins/reset-filter.scss +8 -0
  269. data/dist/sass/patternfly/dependencies/bootstrap-switch/mixins/reset-text.scss +18 -0
  270. data/dist/sass/patternfly/dependencies/bootstrap-switch/mixins/resize.scss +6 -0
  271. data/dist/sass/patternfly/dependencies/bootstrap-switch/mixins/responsive-visibility.scss +15 -0
  272. data/dist/sass/patternfly/dependencies/bootstrap-switch/mixins/size.scss +10 -0
  273. data/dist/sass/patternfly/dependencies/bootstrap-switch/mixins/tab-focus.scss +9 -0
  274. data/dist/sass/patternfly/dependencies/bootstrap-switch/mixins/table-row.scss +28 -0
  275. data/dist/sass/patternfly/dependencies/bootstrap-switch/mixins/text-emphasis.scss +9 -0
  276. data/dist/sass/patternfly/dependencies/bootstrap-switch/mixins/text-overflow.scss +8 -0
  277. data/dist/sass/patternfly/dependencies/bootstrap-switch/mixins/vendor-prefixes.scss +227 -0
  278. data/dist/sass/patternfly/dependencies/bootstrap-switch/mixins.scss +40 -0
  279. data/dist/sass/patternfly/dependencies/bootstrap-switch/variables.scss +862 -0
  280. data/dist/sass/patternfly/dependencies/bootstrap-touchspin/_jquery.bootstrap-touchspin.scss +45 -0
  281. data/dist/sass/patternfly/dependencies/c3/_c3.scss +178 -0
  282. data/dist/sass/patternfly/dependencies/eonasdan-bootstrap-datetimepicker/_bootstrap-datetimepicker.scss +344 -0
  283. data/dist/sass/patternfly/dependencies/eonasdan-bootstrap-datetimepicker/bootstrap-datetimepicker-build.scss +16 -0
  284. data/dist/sass/rcue/_about-modal.scss +44 -0
  285. data/dist/sass/rcue/_accordion.scss +18 -0
  286. data/dist/sass/rcue/_alerts.scss +44 -0
  287. data/dist/sass/rcue/_badges.scss +11 -0
  288. data/dist/sass/rcue/_blank-slate.scss +52 -0
  289. data/dist/sass/rcue/_bootstrap-combobox.scss +35 -0
  290. data/dist/sass/rcue/_bootstrap-datepicker.scss +132 -0
  291. data/dist/sass/rcue/_bootstrap-mixin-overrides.scss +33 -0
  292. data/dist/sass/rcue/_bootstrap-select.scss +108 -0
  293. data/dist/sass/rcue/_bootstrap-slider.scss +66 -0
  294. data/dist/sass/rcue/_bootstrap-switch.scss +19 -0
  295. data/dist/sass/rcue/_bootstrap-touchspin.scss +31 -0
  296. data/dist/sass/rcue/_bootstrap-treeview.scss +89 -0
  297. data/dist/sass/rcue/_breadcrumbs.scss +20 -0
  298. data/dist/sass/rcue/_buttons.scss +50 -0
  299. data/dist/sass/rcue/_card-view.scss +105 -0
  300. data/dist/sass/rcue/_cards.scss +238 -0
  301. data/dist/sass/rcue/_charts.scss +388 -0
  302. data/dist/sass/rcue/_close.scss +16 -0
  303. data/dist/sass/rcue/_color-variables.scss +85 -0
  304. data/dist/sass/rcue/_context-selector.scss +125 -0
  305. data/dist/sass/rcue/_datatables.scss +186 -0
  306. data/dist/sass/rcue/_date-and-time.scss +35 -0
  307. data/dist/sass/rcue/_dropdowns.scss +235 -0
  308. data/dist/sass/rcue/_experimental-features.scss +48 -0
  309. data/dist/sass/rcue/_filter.scss +42 -0
  310. data/dist/sass/rcue/_fonts.scss +124 -0
  311. data/dist/sass/rcue/_footer.scss +19 -0
  312. data/dist/sass/rcue/_forms.scss +192 -0
  313. data/dist/sass/rcue/_icons.scss +371 -0
  314. data/dist/sass/rcue/_infotip.scss +145 -0
  315. data/dist/sass/rcue/_labels.scss +17 -0
  316. data/dist/sass/rcue/_layouts.scss +140 -0
  317. data/dist/sass/rcue/_links.scss +5 -0
  318. data/dist/sass/rcue/_list-group.scss +23 -0
  319. data/dist/sass/rcue/_list-pf.scss +178 -0
  320. data/dist/sass/rcue/_list-view-dnd.scss +53 -0
  321. data/dist/sass/rcue/_list-view.scss +390 -0
  322. data/dist/sass/rcue/_login.scss +341 -0
  323. data/dist/sass/rcue/_mixins.scss +81 -0
  324. data/dist/sass/rcue/_modals.scss +49 -0
  325. data/dist/sass/rcue/_nav-vertical-alt.scss +168 -0
  326. data/dist/sass/rcue/_navbar-alt.scss +141 -0
  327. data/dist/sass/rcue/_navbar-vertical.scss +168 -0
  328. data/dist/sass/rcue/_navbar.scss +579 -0
  329. data/dist/sass/rcue/_notifications-drawer.scss +250 -0
  330. data/dist/sass/rcue/_pager.scss +68 -0
  331. data/dist/sass/rcue/_pagination.scss +121 -0
  332. data/dist/sass/rcue/_panels.scss +134 -0
  333. data/dist/sass/rcue/_patternfly-additions.scss +76 -0
  334. data/dist/sass/rcue/_patternfly.scss +31 -0
  335. data/dist/sass/rcue/_popovers.scss +52 -0
  336. data/dist/sass/rcue/_progress-bars.scss +121 -0
  337. data/dist/sass/rcue/_rcue-about-modal.scss +45 -0
  338. data/dist/sass/rcue/_rcue-login.scss +75 -0
  339. data/dist/sass/rcue/_rcue-variables.scss +57 -0
  340. data/dist/sass/rcue/_search.scss +64 -0
  341. data/dist/sass/rcue/_sidebar.scss +176 -0
  342. data/dist/sass/rcue/_skip-to-content.scss +12 -0
  343. data/dist/sass/rcue/_spinner.scss +72 -0
  344. data/dist/sass/rcue/_syntax-highlighting.scss +36 -0
  345. data/dist/sass/rcue/_table-view.scss +188 -0
  346. data/dist/sass/rcue/_tables.scss +90 -0
  347. data/dist/sass/rcue/_tabs.scss +118 -0
  348. data/dist/sass/rcue/_time-picker.scss +98 -0
  349. data/dist/sass/rcue/_toast.scss +75 -0
  350. data/dist/sass/rcue/_toolbar.scss +190 -0
  351. data/dist/sass/rcue/_tooltip.scss +15 -0
  352. data/dist/sass/rcue/_tree-list-view.scss +83 -0
  353. data/dist/sass/rcue/_type.scss +29 -0
  354. data/dist/sass/rcue/_variables.scss +595 -0
  355. data/dist/sass/rcue/_vertical-nav.scss +944 -0
  356. data/dist/sass/rcue/_wizard.scss +665 -0
  357. data/lib/patternfly-sass/engine.rb +11 -0
  358. data/lib/patternfly-sass/version.rb +3 -0
  359. data/lib/patternfly-sass.rb +92 -0
  360. data/patternfly-sass.gemspec +31 -0
  361. metadata +445 -0
@@ -0,0 +1,1307 @@
1
+ // Util: definition of breakpoint sizes for tablet and desktop modes
2
+ (function ($) {
3
+ 'use strict';
4
+ if (patternfly !== undefined) {
5
+ $.pfBreakpoints = patternfly.pfBreakpoints;
6
+ }
7
+ }(jQuery));
8
+ // PatternFly pf-list
9
+ (function ($) {
10
+ 'use strict';
11
+
12
+ $.fn.pfList = function () {
13
+ function init (list) {
14
+ // Ensure the state of the expansion elements is consistent
15
+ list.find('[data-list=expansion], .list-pf-item, .list-pf-expansion').each(function (index, element) {
16
+ var $expansion = $(element),
17
+ $collapse = $expansion.find('.collapse').first(),
18
+ expanded = $collapse.hasClass('in');
19
+ updateChevron($expansion, expanded);
20
+ if ($expansion.hasClass('list-pf-item')) {
21
+ updateActive($expansion, expanded);
22
+ }
23
+ });
24
+ list.find('.list-pf-container').each(function (index, element) {
25
+ var $element = $(element);
26
+ // The toggle element is the element with the data-list=toggle attribute
27
+ // or the entire .list-pf-container as a fallback
28
+ var $toggles = $element.find('[data-list=toggle]');
29
+ $toggles.length || ($toggles = $element);
30
+ $toggles.on('keydown', function (event) {
31
+ if (event.keyCode === 13 || event.keyCode === 32) {
32
+ toggleCollapse(this);
33
+ event.stopPropagation();
34
+ event.preventDefault();
35
+ }
36
+ });
37
+ $toggles.on('click', function (event) {
38
+ toggleCollapse(this);
39
+ event.stopPropagation();
40
+ event.preventDefault();
41
+ });
42
+ });
43
+ }
44
+
45
+ function toggleCollapse (toggle) {
46
+ var $toggle, $expansion, $collapse, expanded, $listItem;
47
+ $toggle = $(toggle);
48
+ // Find the parent expansion of the toggle
49
+ $expansion = $toggle.parentsUntil('.list-pf', '[data-list=expansion]').first();
50
+ $expansion.length || ($expansion = $toggle.closest('.list-pf-item, .list-pf-expansion'));
51
+
52
+ // toggle the "in" class of its first .collapse child
53
+ $collapse = $expansion.find('.collapse').first();
54
+ $collapse.toggleClass('in');
55
+
56
+ // update the state of the expansion element
57
+ updateChevron($expansion, $collapse.hasClass('in'));
58
+ $listItem = $expansion.closest('.list-pf-item');
59
+ updateActive($listItem, $listItem.find('.collapse').first().hasClass('in'));
60
+ }
61
+
62
+ function updateActive ($listItem, expanded) {
63
+ // Find the closest .list-pf-item of the expansion, and set its "active" class
64
+ if (expanded) {
65
+ $listItem.addClass('active');
66
+ } else {
67
+ $listItem.removeClass('active');
68
+ }
69
+ }
70
+
71
+ function updateChevron ($expansion, expanded) {
72
+ var $chevron = $expansion.find('.list-pf-chevron .fa').first();
73
+ if (expanded) {
74
+ $chevron.removeClass('fa-angle-right');
75
+ $chevron.addClass('fa-angle-down');
76
+ } else {
77
+ $chevron.addClass('fa-angle-right');
78
+ $chevron.removeClass('fa-angle-down');
79
+ }
80
+ }
81
+
82
+ init(this);
83
+
84
+ return this;
85
+ };
86
+ }(jQuery));
87
+
88
+ // Util: PatternFly Sidebar
89
+ // Set height of sidebar-pf to height of document minus height of navbar-pf if not mobile
90
+ (function ($) {
91
+ 'use strict';
92
+ $.fn.sidebar = function () {
93
+ var documentHeight = 0,
94
+ navbarpfHeight = 0,
95
+ colHeight = 0;
96
+
97
+ if ($('.navbar-pf .navbar-toggle').is(':hidden')) {
98
+ documentHeight = $(document).height();
99
+ navbarpfHeight = $('.navbar-pf').outerHeight();
100
+ colHeight = documentHeight - navbarpfHeight;
101
+ }
102
+ $('.sidebar-pf').parent('.row').children('[class*="col-"]').css({"min-height" : colHeight});
103
+ };
104
+
105
+ $(document).ready(function () {
106
+ // Call sidebar() on ready if .sidebar-pf exists and .datatable does not exist
107
+ if ($('.sidebar-pf').length > 0 && $('.datatable').length === 0) {
108
+ $.fn.sidebar();
109
+ }
110
+ });
111
+
112
+ $(window).on('resize', function () {
113
+ // Call sidebar() on resize if .sidebar-pf exists
114
+ if ($('.sidebar-pf').length > 0) {
115
+ $.fn.sidebar();
116
+ }
117
+ });
118
+ }(jQuery));
119
+
120
+ // Util: PatternFly Popovers
121
+ // Add data-close="true" to insert close X icon
122
+ (function ($) {
123
+ 'use strict';
124
+
125
+ $.fn.popovers = function () {
126
+ // Initialize
127
+ this.popover();
128
+
129
+ // Add close icons
130
+ this.filter('[data-close=true]').each(function (index, element) {
131
+ var $this = $(element),
132
+ title = $this.attr('data-original-title') + '<button type="button" class="close" aria-hidden="true"><span class="pficon pficon-close"></span></button>';
133
+
134
+ $this.attr('data-original-title', title);
135
+ });
136
+
137
+ // Bind Close Icon to Toggle Display
138
+ this.on('click', function (e) {
139
+ var $this = $(this),
140
+ $title = $this.next('.popover').find('.popover-title');
141
+
142
+ // Only if data-close is true add class "x" to title for right padding
143
+ $title.find('.close').parent('.popover-title').addClass('closable');
144
+
145
+ // Bind x icon to close popover
146
+ $title.find('.close').on('click', function () {
147
+ $this.popover('hide');
148
+ });
149
+
150
+ // Prevent href="#" page scroll to top
151
+ e.preventDefault();
152
+ });
153
+
154
+ return this;
155
+ };
156
+ }(jQuery));
157
+
158
+ // Util: DataTables Settings
159
+ (function ($) {
160
+ 'use strict';
161
+ if ($.fn.dataTableExt) {
162
+ /* Set the defaults for DataTables initialisation */
163
+ $.extend(true, $.fn.dataTable.defaults, {
164
+ "bDestroy": true,
165
+ "bAutoWidth": false,
166
+ "iDisplayLength": 20,
167
+ "sDom":
168
+ "<'dataTables_header' f i r >" +
169
+ "<'table-responsive' t >" +
170
+ "<'dataTables_footer' p >",
171
+ "oLanguage": {
172
+ "sInfo": "Showing <b>_START_</b> to <b>_END_</b> of <b>_TOTAL_</b> Items",
173
+ "sInfoFiltered" : "(of <b>_MAX_</b>)",
174
+ "sInfoEmpty" : "Showing <b>0</b> Results",
175
+ "sZeroRecords":
176
+ "<p>Suggestions</p>" +
177
+ "<ul>" +
178
+ "<li>Check the javascript regular expression syntax of the search term.</li>" +
179
+ "<li>Check that the correct menu option is chosen (token ID vs. user ID).</li>" +
180
+ "<li>Use wildcards (* to match 0 or more characters, + to match 1 or more characters, ? to match 0 or 1 character).</li>" +
181
+ "<li>Clear the search field, then click Search to return to the 20 most recent records.</li>" +
182
+ "</ul>",
183
+ "sSearch": ""
184
+ },
185
+ "sPaginationType": "bootstrap_input",
186
+ "oSearch": {
187
+ "sSearch": "",
188
+ "bRegex": true,
189
+ "bSmart": false
190
+ }
191
+ });
192
+
193
+ /* Default class modification */
194
+ $.extend($.fn.dataTableExt.oStdClasses, {
195
+ "sWrapper": "dataTables_wrapper"
196
+ });
197
+
198
+ /* API method to get paging information */
199
+ $.fn.dataTableExt.oApi.fnPagingInfo = function (oSettings) {
200
+ return {
201
+ "iStart": oSettings._iDisplayStart,
202
+ "iEnd": oSettings.fnDisplayEnd(),
203
+ "iLength": oSettings._iDisplayLength,
204
+ "iTotal": oSettings.fnRecordsTotal(),
205
+ "iFilteredTotal": oSettings.fnRecordsDisplay(),
206
+ "iPage": oSettings._iDisplayLength === -1 ? 0 : Math.ceil(oSettings._iDisplayStart / oSettings._iDisplayLength),
207
+ "iTotalPages": oSettings._iDisplayLength === -1 ? 0 : Math.ceil(oSettings.fnRecordsDisplay() / oSettings._iDisplayLength)
208
+ };
209
+ };
210
+
211
+ /* Combination of Bootstrap + Input Text style pagination control */
212
+ $.extend($.fn.dataTableExt.oPagination, {
213
+ "bootstrap_input": {
214
+ "fnInit": function (oSettings, nPaging, fnDraw) {
215
+ var fnClickHandler = function (e) {
216
+ e.preventDefault();
217
+ if (oSettings.oApi._fnPageChange(oSettings, e.data.action)) {
218
+ fnDraw(oSettings);
219
+ }
220
+ },
221
+ els,
222
+ nInput;
223
+
224
+ $(nPaging).append(
225
+ '<ul class="pagination">' +
226
+ ' <li class="first disabled"><span class="i fa fa-angle-double-left"></span></li>' +
227
+ ' <li class="prev disabled"><span class="i fa fa-angle-left"></span></li>' +
228
+ '</ul>' +
229
+ '<div class="pagination-input">' +
230
+ ' <input type="text" class="paginate_input">' +
231
+ ' <span class="paginate_of">of <b>3</b></span>' +
232
+ '</div>' +
233
+ '<ul class="pagination">' +
234
+ ' <li class="next disabled"><span class="i fa fa-angle-right"></span></li>' +
235
+ ' <li class="last disabled"><span class="i fa fa-angle-double-right"></span></li>' +
236
+ '</ul>'
237
+ );
238
+
239
+ els = $('li', nPaging);
240
+ $(els[0]).bind('click.DT', { action: "first" }, fnClickHandler);
241
+ $(els[1]).bind('click.DT', { action: "previous" }, fnClickHandler);
242
+ $(els[2]).bind('click.DT', { action: "next" }, fnClickHandler);
243
+ $(els[3]).bind('click.DT', { action: "last" }, fnClickHandler);
244
+
245
+ nInput = $('input', nPaging);
246
+ $(nInput).keyup(function (e) {
247
+ var iNewStart;
248
+ if (e.which === 38 || e.which === 39) {
249
+ this.value += 1;
250
+ } else if ((e.which === 37 || e.which === 40) && this.value > 1) {
251
+ this.value -= 1;
252
+ }
253
+
254
+ if (this.value === "" || !this.value.match(/[0-9]/)) {
255
+ /* Nothing entered or non-numeric character */
256
+ return;
257
+ }
258
+
259
+ iNewStart = oSettings._iDisplayLength * (this.value - 1);
260
+ if (iNewStart >= oSettings.fnRecordsDisplay()) {
261
+ /* Display overrun */
262
+ oSettings._iDisplayStart = (Math.ceil((oSettings.fnRecordsDisplay() - 1) /
263
+ oSettings._iDisplayLength) - 1) * oSettings._iDisplayLength;
264
+ fnDraw(oSettings);
265
+ return;
266
+ }
267
+
268
+ oSettings._iDisplayStart = iNewStart;
269
+ fnDraw(oSettings);
270
+ });
271
+ },
272
+
273
+ "fnUpdate": function (oSettings, fnDraw) {
274
+ var oPaging = oSettings.oInstance.fnPagingInfo(),
275
+ an = oSettings.aanFeatures.p,
276
+ ien = an.length,
277
+ iPages = Math.ceil((oSettings.fnRecordsDisplay()) / oSettings._iDisplayLength),
278
+ iCurrentPage = Math.ceil(oSettings._iDisplayStart / oSettings._iDisplayLength) + 1,
279
+ i;
280
+
281
+ for (i = 0; i < ien; i += 1) {
282
+ $('.paginate_input', an[i]).val(iCurrentPage)
283
+ .siblings('.paginate_of').find('b').html(iPages);
284
+
285
+ // Add / remove disabled classes from the static elements
286
+ if (oPaging.iPage === 0) {
287
+ $('li.first', an[i]).addClass('disabled');
288
+ $('li.prev', an[i]).addClass('disabled');
289
+ } else {
290
+ $('li.first', an[i]).removeClass('disabled');
291
+ $('li.prev', an[i]).removeClass('disabled');
292
+ }
293
+
294
+ if (oPaging.iPage === oPaging.iTotalPages - 1 || oPaging.iTotalPages === 0) {
295
+ $('li.next', an[i]).addClass('disabled');
296
+ $('li.last', an[i]).addClass('disabled');
297
+ } else {
298
+ $('li.next', an[i]).removeClass('disabled');
299
+ $('li.last', an[i]).removeClass('disabled');
300
+ }
301
+ }
302
+ }
303
+ }
304
+ });
305
+ }
306
+ }(jQuery));
307
+
308
+ // Util: PatternFly Collapsible Left Hand Navigation
309
+ // Must have navbar-toggle in navbar-pf-alt for expand/collapse
310
+ (function ($) {
311
+
312
+ 'use strict';
313
+
314
+ $.fn.navigation = function () {
315
+
316
+ var navElement = $('.layout-pf-alt-fixed .nav-pf-vertical-alt'),
317
+ bodyContentElement = $('.container-pf-alt-nav-pf-vertical-alt'),
318
+ toggleNavBarButton = $('.navbar-toggle'),
319
+ explicitCollapse = false,
320
+ checkNavState = function () {
321
+ var width = $(window).width();
322
+
323
+ //Always remove the hidden & peek class
324
+ navElement.removeClass('hidden show-mobile-nav collapsed');
325
+
326
+ //Set the body class back to the default
327
+ bodyContentElement.removeClass('collapsed-nav hidden-nav');
328
+
329
+ // Check to see if the nav needs to collapse
330
+ if (width < $.pfBreakpoints.desktop || explicitCollapse) {
331
+ navElement.addClass('collapsed');
332
+ bodyContentElement.addClass('collapsed-nav');
333
+ }
334
+
335
+ // Check to see if we need to move down to the mobile state
336
+ if (width < $.pfBreakpoints.tablet) {
337
+ //Set the nav to being hidden
338
+ navElement.addClass('hidden');
339
+
340
+ //Make sure this is expanded
341
+ navElement.removeClass('collapsed');
342
+
343
+ //Set the body class to the correct state
344
+ bodyContentElement.removeClass('collapsed-nav');
345
+ bodyContentElement.addClass('hidden-nav');
346
+ }
347
+ },
348
+ collapseMenu = function () {
349
+ //Make sure this is expanded
350
+ navElement.addClass('collapsed');
351
+ //Set the body class to the correct state
352
+ bodyContentElement.addClass('collapsed-nav');
353
+
354
+ explicitCollapse = true;
355
+ },
356
+ enableTransitions = function () {
357
+ // enable transitions only when toggleNavBarButton is clicked or window is resized
358
+ $('html').addClass('transitions');
359
+ },
360
+ expandMenu = function () {
361
+ //Make sure this is expanded
362
+ navElement.removeClass('collapsed');
363
+ //Set the body class to the correct state
364
+ bodyContentElement.removeClass('collapsed-nav');
365
+
366
+ explicitCollapse = false;
367
+ },
368
+ bindMenuBehavior = function () {
369
+ toggleNavBarButton.on('click', function (e) {
370
+ var inMobileState = bodyContentElement.hasClass('hidden-nav');
371
+ enableTransitions();
372
+
373
+ if (inMobileState && navElement.hasClass('show-mobile-nav')) {
374
+ //In mobile state just need to hide the nav
375
+ navElement.removeClass('show-mobile-nav');
376
+ } else if (inMobileState) {
377
+ navElement.addClass('show-mobile-nav');
378
+ } else if (navElement.hasClass('collapsed')) {
379
+ expandMenu();
380
+ } else {
381
+ collapseMenu();
382
+ }
383
+ });
384
+ },
385
+ setTooltips = function () {
386
+ $('.nav-pf-vertical-alt [data-toggle="tooltip"]').tooltip({'container': 'body', 'delay': { 'show': '500', 'hide': '200' }});
387
+
388
+ $(".nav-pf-vertical-alt").on("show.bs.tooltip", function (e) {
389
+ return $(this).hasClass("collapsed");
390
+ });
391
+
392
+ },
393
+ init = function () {
394
+ //Set correct state on load
395
+ checkNavState();
396
+
397
+ // Bind Top level hamburger menu with menu behavior;
398
+ bindMenuBehavior();
399
+
400
+ //Set tooltips
401
+ setTooltips();
402
+ };
403
+
404
+ //Listen for the window resize event and collapse/hide as needed
405
+ $(window).on('resize', function () {
406
+ checkNavState();
407
+ enableTransitions();
408
+ });
409
+
410
+ init();
411
+
412
+ };
413
+
414
+ $(document).ready(function () {
415
+ if ($('.nav-pf-vertical-alt').length > 0) {
416
+ $.fn.navigation();
417
+ }
418
+ });
419
+
420
+ }(jQuery));
421
+
422
+ // Count and Display Remaining Characters
423
+ (function ($) {
424
+
425
+ 'use strict';
426
+
427
+ $.fn.countRemainingChars = function (options) {
428
+
429
+ var settings = $.extend({
430
+ // These are the defaults.
431
+ charsMaxLimit: 100,
432
+ charsWarnRemaining: 5,
433
+ blockInputAtMaxLimit: false
434
+ }, options),
435
+ $taFld = this,
436
+ $countFld = $('#' + settings.countFld).text(settings.charsMaxLimit),
437
+ charsRemainingFn = function (charsLength) {
438
+ var charsRemaining = settings.charsMaxLimit - charsLength;
439
+ $countFld.text(charsRemaining);
440
+ $countFld.toggleClass('chars-warn-remaining-pf', charsRemaining <= settings.charsWarnRemaining);
441
+ if (charsRemaining < 0) {
442
+ $taFld.trigger("overCharsMaxLimitEvent", $taFld.attr('id'));
443
+ } else {
444
+ $taFld.trigger("underCharsMaxLimitEvent", $taFld.attr('id'));
445
+ }
446
+ };
447
+
448
+ this.on('paste', function (event) {
449
+ setTimeout(function () {
450
+ var charsLength = $taFld.val().length, maxTxt;
451
+
452
+ if (settings.blockInputAtMaxLimit && charsLength > settings.charsMaxLimit) {
453
+ maxTxt = $taFld.val();
454
+ maxTxt = maxTxt.substring(0, settings.charsMaxLimit);
455
+ $taFld.val(maxTxt);
456
+ charsLength = $taFld.val().length;
457
+ }
458
+
459
+ charsRemainingFn(charsLength);
460
+ }, 100);
461
+ });
462
+
463
+ this.keyup(function (event) {
464
+ charsRemainingFn($taFld.val().length);
465
+ });
466
+
467
+ this.keydown(function (event) {
468
+ var charsLength = $taFld.val().length;
469
+
470
+ if (settings.blockInputAtMaxLimit && charsLength >= settings.charsMaxLimit) {
471
+ // Except backspace
472
+ if (event.keyCode !== 8) {
473
+ event.preventDefault();
474
+ }
475
+ }
476
+ });
477
+
478
+ return this;
479
+ };
480
+ }(jQuery));
481
+
482
+ // Util: PatternFly Palette colors
483
+ (function ($) {
484
+ 'use strict';
485
+
486
+ if (patternfly !== undefined) {
487
+ $.pfPaletteColors = patternfly.pfPaletteColors;
488
+ }
489
+ }(jQuery));
490
+
491
+ // Util: PatternFly C3 Chart Defaults
492
+ (function ($) {
493
+ 'use strict';
494
+ if (patternfly !== undefined) {
495
+ $.fn.pfSetDonutChartTitle = patternfly.pfSetDonutChartTitle;
496
+ $.fn.pfDonutTooltipContents = patternfly.pfDonutTooltipContents;
497
+ $.fn.pfGetUtilizationDonutTooltipContentsFn = patternfly.pfGetUtilizationDonutTooltipContentsFn;
498
+ $.fn.pfGetBarChartTooltipContentsFn = patternfly.pfGetBarChartTooltipContentsFn;
499
+ $.fn.pfSingleLineChartTooltipContentsFn = patternfly.pfSingleLineChartTooltipContentsFn;
500
+ $.fn.pfPieTooltipContents = patternfly.pfPieTooltipContents;
501
+ $.fn.c3ChartDefaults = patternfly.c3ChartDefaults;
502
+ }
503
+ }(jQuery));
504
+
505
+ // Util: PatternFly Collapse with fixed heights
506
+ // Update the max-height of collapse elements based on the parent container's height.
507
+ (function ($) {
508
+ 'use strict';
509
+
510
+ $.fn.initCollapseHeights = function (scrollSelector) {
511
+ var parentElement = this, setCollapseHeights, targetScrollSelector = scrollSelector;
512
+
513
+ setCollapseHeights = function () {
514
+ var height, openPanel, contentHeight, bodyHeight, overflowY = 'hidden';
515
+
516
+ height = parentElement.height();
517
+
518
+ // Close any open panel
519
+ openPanel = parentElement.find('.collapse.in');
520
+ if (openPanel && openPanel.length > 0) {
521
+ openPanel.removeClass('in');
522
+ }
523
+
524
+ // Determine the necessary height for the closed content
525
+ contentHeight = 0;
526
+ parentElement.children().each($.proxy(function (i, element) {
527
+ var $element = $(element);
528
+ contentHeight += $element.outerHeight(true);
529
+ }, parentElement)).end();
530
+
531
+ // Determine the height remaining for opened collapse panels
532
+ bodyHeight = height - contentHeight;
533
+
534
+ // Make sure we have enough height to be able to scroll the contents if necessary
535
+ if (bodyHeight < 25) {
536
+ bodyHeight = 25;
537
+
538
+ // Allow the parent to scroll so the child elements are accessible
539
+ overflowY = 'auto';
540
+ }
541
+
542
+ // Reopen the initially opened panel
543
+ if (openPanel && openPanel.length > 0) {
544
+ openPanel.addClass("in");
545
+ }
546
+
547
+ setTimeout(function () {
548
+ // Set the max-height for the collapse panels
549
+ parentElement.find('[data-toggle="collapse"]').each($.proxy(function (i, element) {
550
+ var $element, selector, $target, scrollElement, innerHeight = 0;
551
+ $element = $(element);
552
+
553
+ // Determine the selector to find the target
554
+ selector = $element.attr('data-target');
555
+ if (!selector) {
556
+ selector = $element.attr('href');
557
+ }
558
+
559
+ // Determine the scroll element (either the target or the child of the target based on the given selector)
560
+ $target = $(selector);
561
+ scrollElement = $target;
562
+ if (targetScrollSelector) {
563
+ scrollElement = $target.find(targetScrollSelector);
564
+ if (scrollElement.length === 1) {
565
+ innerHeight = 0;
566
+ $target.children().each($.proxy(function (j, sibling) {
567
+ var $sibling = $(sibling);
568
+ if (sibling !== scrollElement[0]) {
569
+ innerHeight += $sibling.outerHeight(true);
570
+ }
571
+ }, $target)).end();
572
+ bodyHeight -= innerHeight;
573
+ } else {
574
+ scrollElement = $target;
575
+ }
576
+ }
577
+ // Set the max-height and vertical scroll of the scroll element
578
+ scrollElement.css({'max-height': (bodyHeight - innerHeight) + 'px', 'overflow-y': 'auto'});
579
+ }, parentElement)).end();
580
+
581
+ parentElement.css({'overflow-y': overflowY});
582
+ }, 100);
583
+ };
584
+
585
+ setCollapseHeights();
586
+
587
+ // Update on window resizing
588
+ $(window).on('resize', setCollapseHeights);
589
+
590
+ };
591
+
592
+ $.fn.initFixedAccordion = function () {
593
+ var fixedAccordion = this, initOpen;
594
+
595
+ fixedAccordion.on('show.bs.collapse','.collapse', function (event) {
596
+ $(event.target.parentNode).addClass('panel-open');
597
+ });
598
+
599
+ fixedAccordion.on('hide.bs.collapse','.collapse', function (event) {
600
+ $(event.target.parentNode).removeClass('panel-open');
601
+ });
602
+
603
+ fixedAccordion.find('.panel').each(function (index, item) {
604
+ $(item).removeClass('panel-open');
605
+ });
606
+
607
+ initOpen = $(fixedAccordion.find('.collapse.in'))[0];
608
+ if (initOpen) {
609
+ $(initOpen.parentNode).addClass('panel-open');
610
+ }
611
+ };
612
+
613
+ }(jQuery));
614
+
615
+ // Util: PatternFly TreeGrid Tables
616
+ (function ($) {
617
+ 'use strict';
618
+
619
+ function getParent (rows, node) {
620
+ var parent = node.attr('data-parent');
621
+
622
+ if (typeof parent === "string") {
623
+ if (isNaN(parent)) {
624
+ parent = $(parent);
625
+ if (parent.length > 1) {
626
+ parent = rows.closest(parent);
627
+ }
628
+ } else {
629
+ parent = $(rows[parseInt(parent, 10)]);
630
+ }
631
+ return parent;
632
+ }
633
+ return undefined;
634
+ }
635
+
636
+ function renderItem (item, parent) {
637
+ if (parent) {
638
+ parent.find('.treegrid-node > span.expand-icon')
639
+ .toggleClass('fa-angle-right', parent.hasClass('collapsed'))
640
+ .toggleClass('fa-angle-down', !parent.hasClass('collapsed'));
641
+ item.toggleClass('hidden', parent.hasClass('collapsed'));
642
+ if (parent.hasClass('collapsed')) {
643
+ item.addClass('collapsed');
644
+ }
645
+ }
646
+ }
647
+
648
+ function reStripe (tree) {
649
+ tree.find('tbody > tr').removeClass('odd');
650
+ tree.find('tbody > tr:not(.hidden):odd').addClass('odd');
651
+ }
652
+
653
+ $.fn.treegrid = function (options) {
654
+ var i, rows, _this;
655
+ rows = this.find('tbody > tr');
656
+ _this = this;
657
+ $.each(rows, function () {
658
+ var node, parent;
659
+ node = $(this);
660
+ parent = getParent(rows, node);
661
+ // Append expand icon dummies
662
+ node.children('.treegrid-node').prepend('<span class="icon expand-icon fa"/>');
663
+
664
+ // Set up an event listener for the node
665
+ node.children('.treegrid-node').on('click', function (e) {
666
+ var icon = node.find('span.expand-icon');
667
+
668
+ if (options && typeof options.callback === 'function') {
669
+ options.callback(e);
670
+ }
671
+
672
+ if (icon.hasClass('fa-angle-right')) {
673
+ node.removeClass('collapsed');
674
+ }
675
+ if (icon.hasClass('fa-angle-down')) {
676
+ node.addClass('collapsed');
677
+ }
678
+ $.each(rows.slice(rows.index(node) + 1), function () {
679
+ renderItem($(this), getParent(rows, $(this)));
680
+ });
681
+ reStripe(_this);
682
+ });
683
+
684
+ if (parent) {
685
+ // Calculate indentation depth
686
+ i = parent.find('.treegrid-node > span.indent').length + 1;
687
+ for (; i > 0; i -= 1) {
688
+ node.children('.treegrid-node').prepend('<span class="indent"/>');
689
+ }
690
+ // Render expand/collapse icons
691
+ renderItem(node, parent);
692
+ }
693
+ });
694
+ reStripe(_this);
695
+ };
696
+ }(jQuery));
697
+
698
+ // Util: PatternFly Vertical Navigation
699
+ // Must have navbar-toggle in navbar-pf-vertical for expand/collapse
700
+ (function ($) {
701
+ 'use strict';
702
+
703
+ $.fn.setupVerticalNavigation = function (handleItemSelections, ignoreDrawer, userOptions) {
704
+
705
+ var options = $.extend({
706
+ hoverDelay: 500,
707
+ hideDelay: 700,
708
+ rememberOpenState: true,
709
+ storage: 'localStorage',
710
+ }, userOptions || {}),
711
+
712
+ navElement = $('.nav-pf-vertical'),
713
+ bodyContentElement = $('.container-pf-nav-pf-vertical'),
714
+ toggleNavBarButton = $('.navbar-toggle'),
715
+ handleResize = true,
716
+ explicitCollapse = false,
717
+ subDesktop = false,
718
+ storageLocation = options.storage === 'sessionStorage' ? 'sessionStorage' : 'localStorage',
719
+
720
+ inMobileState = function () {
721
+ return bodyContentElement.hasClass('hidden-nav');
722
+ },
723
+
724
+ forceResize = function (delay) {
725
+ setTimeout(function () {
726
+ $(window).trigger('resize');
727
+ }, delay);
728
+ },
729
+
730
+ showSecondaryMenu = function () {
731
+ if (inMobileState() || !subDesktop) {
732
+ navElement.addClass('secondary-visible-pf');
733
+ bodyContentElement.addClass('secondary-visible-pf');
734
+ }
735
+
736
+ // Dispatch a resize event when showing the secondary menu in non-subdesktop state to
737
+ // allow content to adjust to the secondary menu sizing
738
+ if (!subDesktop) {
739
+ forceResize(100);
740
+ }
741
+ },
742
+
743
+ hideSecondaryMenu = function () {
744
+ navElement.removeClass('secondary-visible-pf');
745
+ bodyContentElement.removeClass('secondary-visible-pf');
746
+
747
+ if (navElement.find('.secondary-nav-item-pf.is-hover').length <= 1) {
748
+ navElement.removeClass('hover-secondary-nav-pf');
749
+ }
750
+
751
+ navElement.find('.mobile-nav-item-pf').each(function (index, item) {
752
+ $(item).removeClass('mobile-nav-item-pf');
753
+ });
754
+
755
+ navElement.find('.is-hover').each(function (index, item) {
756
+ $(item).removeClass('is-hover');
757
+ });
758
+ },
759
+
760
+ hideTertiaryMenu = function () {
761
+ navElement.removeClass('tertiary-visible-pf');
762
+ bodyContentElement.removeClass('tertiary-visible-pf');
763
+
764
+ if (navElement.find('.tertiary-nav-item-pf.is-hover').length <= 1) {
765
+ navElement.removeClass('hover-tertiary-nav-pf');
766
+ }
767
+
768
+ navElement.find('.mobile-nav-item-pf').each(function (index, item) {
769
+ $(item).removeClass('mobile-nav-item-pf');
770
+ });
771
+
772
+ navElement.find('.is-hover').each(function (index, item) {
773
+ $(item).removeClass('is-hover');
774
+ });
775
+ },
776
+
777
+ setActiveItem = function (item) {
778
+ // remove all .active
779
+ $('.nav-pf-vertical .list-group-item.active').removeClass('active');
780
+
781
+ // add .active to item and its parents
782
+ item.addClass('active').parents('.list-group-item').addClass('active');
783
+ },
784
+
785
+ updateSecondaryMenuDisplayAfterSelection = function () {
786
+ if (inMobileState()) {
787
+ navElement.removeClass('show-mobile-nav');
788
+ hideSecondaryMenu();
789
+ navElement.find('.mobile-nav-item-pf').each(function (index, item) {
790
+ $(item).removeClass('mobile-nav-item-pf');
791
+ });
792
+ } else {
793
+ showSecondaryMenu();
794
+ }
795
+ },
796
+
797
+ updateSecondaryCollapsedState = function (setCollapsed, collapsedItem) {
798
+ if (setCollapsed) {
799
+ collapsedItem.addClass('collapsed');
800
+ navElement.addClass('collapsed-secondary-nav-pf');
801
+ bodyContentElement.addClass('collapsed-secondary-nav-pf');
802
+ } else {
803
+ if (collapsedItem) {
804
+ collapsedItem.removeClass('collapsed');
805
+ } else {
806
+ // Remove any collapsed secondary menus
807
+ navElement.find('[data-toggle="collapse-secondary-nav"]').each(function (index, element) {
808
+ var $e = $(element);
809
+ $e.removeClass('collapsed');
810
+ });
811
+ }
812
+ navElement.removeClass('collapsed-secondary-nav-pf');
813
+ bodyContentElement.removeClass('collapsed-secondary-nav-pf');
814
+ }
815
+ },
816
+
817
+ updateTertiaryCollapsedState = function (setCollapsed, collapsedItem) {
818
+ if (setCollapsed) {
819
+ collapsedItem.addClass('collapsed');
820
+ navElement.addClass('collapsed-tertiary-nav-pf');
821
+ bodyContentElement.addClass('collapsed-tertiary-nav-pf');
822
+ updateSecondaryCollapsedState(false);
823
+ } else {
824
+ if (collapsedItem) {
825
+ collapsedItem.removeClass('collapsed');
826
+ } else {
827
+ // Remove any collapsed tertiary menus
828
+ navElement.find('[data-toggle="collapse-tertiary-nav"]').each(function (index, element) {
829
+ var $e = $(element);
830
+ $e.removeClass('collapsed');
831
+ });
832
+ }
833
+ navElement.removeClass('collapsed-tertiary-nav-pf');
834
+ bodyContentElement.removeClass('collapsed-tertiary-nav-pf');
835
+ }
836
+ },
837
+
838
+ updateMobileMenu = function (selected, secondaryItem) {
839
+ $(document).find('.list-group-item.mobile-nav-item-pf').each(function (index, item) {
840
+ $(item).removeClass('mobile-nav-item-pf');
841
+ });
842
+ $(document).find('.list-group-item.mobile-secondary-item-pf').each(function (index, item) {
843
+ $(item).removeClass('mobile-secondary-item-pf');
844
+ });
845
+ if (selected) {
846
+ selected.addClass('mobile-nav-item-pf');
847
+ if (secondaryItem) {
848
+ secondaryItem.addClass('mobile-secondary-item-pf');
849
+ navElement.removeClass('show-mobile-secondary');
850
+ navElement.addClass('show-mobile-tertiary');
851
+ } else {
852
+ navElement.addClass('show-mobile-secondary');
853
+ navElement.removeClass('show-mobile-tertiary');
854
+ }
855
+ } else {
856
+ navElement.removeClass('show-mobile-secondary');
857
+ navElement.removeClass('show-mobile-tertiary');
858
+ }
859
+ },
860
+
861
+ enterMobileState = function () {
862
+ if (!navElement.hasClass('hidden')) {
863
+ //Set the nav to being hidden
864
+ navElement.addClass('hidden');
865
+ navElement.removeClass('collapsed');
866
+
867
+ //Set the body class to the correct state
868
+ bodyContentElement.removeClass('collapsed-nav');
869
+ bodyContentElement.addClass('hidden-nav');
870
+
871
+ // Reset the collapsed states
872
+ updateSecondaryCollapsedState(false);
873
+ updateTertiaryCollapsedState(false);
874
+
875
+ explicitCollapse = false;
876
+ }
877
+ },
878
+
879
+ exitMobileState = function () {
880
+ // Always remove the hidden & peek class
881
+ navElement.removeClass('hidden show-mobile-nav');
882
+
883
+ // Set the body class back to the default
884
+ bodyContentElement.removeClass('hidden-nav');
885
+ },
886
+
887
+ checkNavState = function () {
888
+ var width = $(window).width(), makeSecondaryVisible;
889
+ if (!handleResize) {
890
+ return;
891
+ }
892
+ // Check to see if we need to enter/exit the mobile state
893
+ if (width < $.pfBreakpoints.tablet && !explicitCollapse) {
894
+ enterMobileState();
895
+ } else if (navElement.hasClass('hidden')) {
896
+ exitMobileState();
897
+ }
898
+
899
+ // Check to see if we need to enter/exit the sub desktop state
900
+ if (width < $.pfBreakpoints.desktop) {
901
+ if (!subDesktop) {
902
+ // Collapse the navigation bars when entering sub desktop mode
903
+ navElement.addClass('collapsed');
904
+ bodyContentElement.addClass('collapsed-nav');
905
+ }
906
+ if (width >= $.pfBreakpoints.tablet) {
907
+ hideSecondaryMenu();
908
+ }
909
+ subDesktop = true;
910
+ } else {
911
+ makeSecondaryVisible = subDesktop && (navElement.find('.secondary-nav-item-pf.active').length > 0);
912
+ subDesktop = false;
913
+ if (makeSecondaryVisible) {
914
+
915
+ showSecondaryMenu();
916
+ }
917
+ }
918
+
919
+ if (explicitCollapse) {
920
+ navElement.addClass('collapsed');
921
+ bodyContentElement.addClass('collapsed-nav');
922
+ } else {
923
+ navElement.removeClass('collapsed');
924
+ bodyContentElement.removeClass('collapsed-nav');
925
+ }
926
+ },
927
+
928
+ collapseMenu = function () {
929
+ //Make sure this is expanded
930
+ navElement.addClass('collapsed');
931
+ //Set the body class to the correct state
932
+ bodyContentElement.addClass('collapsed-nav');
933
+
934
+ if (subDesktop) {
935
+ hideSecondaryMenu();
936
+ }
937
+
938
+ explicitCollapse = true;
939
+ },
940
+
941
+ enableTransitions = function () {
942
+ // enable transitions only when toggleNavBarButton is clicked or window is resized
943
+ $('html').addClass('transitions');
944
+ },
945
+
946
+ expandMenu = function () {
947
+ //Make sure this is expanded
948
+ navElement.removeClass('collapsed');
949
+ //Set the body class to the correct state
950
+ bodyContentElement.removeClass('collapsed-nav');
951
+
952
+ explicitCollapse = false;
953
+
954
+ // Dispatch a resize event when showing the expanding then menu to
955
+ // allow content to adjust to the menu sizing
956
+ if (!subDesktop) {
957
+ forceResize(100);
958
+ }
959
+ },
960
+
961
+ bindMenuBehavior = function () {
962
+ toggleNavBarButton.on('click', function (e) {
963
+ var $drawer;
964
+
965
+ enableTransitions();
966
+
967
+ if (inMobileState()) {
968
+ // Toggle the mobile nav
969
+ if (navElement.hasClass('show-mobile-nav')) {
970
+ navElement.removeClass('show-mobile-nav');
971
+ } else {
972
+ // Always start at the primary menu
973
+ updateMobileMenu();
974
+ navElement.addClass('show-mobile-nav');
975
+
976
+ // If the notification drawer is shown, hide it
977
+ if (!ignoreDrawer) {
978
+ $drawer = $('.drawer-pf');
979
+ if ($drawer.length) {
980
+ $('.drawer-pf-trigger').removeClass('open');
981
+ $drawer.addClass('hide');
982
+ }
983
+ }
984
+ }
985
+ } else if (navElement.hasClass('collapsed')) {
986
+ if (options.rememberOpenState) {
987
+ window[storageLocation].setItem('patternfly-navigation-primary', 'expanded');
988
+ }
989
+ expandMenu();
990
+ } else {
991
+ if (options.rememberOpenState) {
992
+ window[storageLocation].setItem('patternfly-navigation-primary', 'collapsed');
993
+ }
994
+ collapseMenu();
995
+ }
996
+ });
997
+ },
998
+
999
+ forceHideSecondaryMenu = function () {
1000
+ navElement.addClass('force-hide-secondary-nav-pf');
1001
+ setTimeout(function () {
1002
+ navElement.removeClass('force-hide-secondary-nav-pf');
1003
+ }, 500);
1004
+ },
1005
+
1006
+ bindMenuItemsBehavior = function (handleSelection) {
1007
+ $(document).find('.nav-pf-vertical .list-group-item').each(function (index, item) {
1008
+ var onClickFn,
1009
+ $item = $(item),
1010
+ $nav = $item.closest('[class*="nav-pf-"]');
1011
+
1012
+ if ($nav.hasClass('nav-pf-vertical')) {
1013
+ // Set main nav active item on click or show secondary nav if it has a secondary nav bar and we are in the mobile state
1014
+ onClickFn = function (event) {
1015
+ var $this = $(this), $secondaryItem, $tertiaryItem, $activeItem;
1016
+
1017
+ if (!$this.hasClass('secondary-nav-item-pf')) {
1018
+ hideSecondaryMenu();
1019
+ if (inMobileState()) {
1020
+ updateMobileMenu();
1021
+ navElement.removeClass('show-mobile-nav');
1022
+ }
1023
+ if (handleSelection) {
1024
+ setActiveItem($this);
1025
+ // Don't process the click on the item
1026
+ event.stopImmediatePropagation();
1027
+ }
1028
+ } else if (inMobileState()) {
1029
+ updateMobileMenu($this);
1030
+ } else if (handleSelection) {
1031
+ $activeItem = $secondaryItem = $item.find('.nav-pf-secondary-nav > .list-group > .list-group-item').eq(0);
1032
+
1033
+ if ($secondaryItem.hasClass('tertiary-nav-item-pf')) {
1034
+ $activeItem = $secondaryItem.find('.nav-pf-tertiary-nav > .list-group > .list-group-item').eq(0);
1035
+ }
1036
+
1037
+ setActiveItem($activeItem);
1038
+ event.stopImmediatePropagation();
1039
+ }
1040
+ };
1041
+
1042
+ } else if ($nav.hasClass('nav-pf-secondary-nav')) {
1043
+ // Set secondary nav active item on click or show tertiary nav if it has a tertiary nav bar and we are in the mobile state
1044
+ onClickFn = function (event) {
1045
+ var $this = $(this), $tertiaryItem, $primaryItem;
1046
+ if (!$this.hasClass('tertiary-nav-item-pf')) {
1047
+ if (inMobileState()) {
1048
+ updateMobileMenu();
1049
+ navElement.removeClass('show-mobile-nav');
1050
+ }
1051
+ updateSecondaryMenuDisplayAfterSelection();
1052
+ if (handleSelection) {
1053
+ setActiveItem($item);
1054
+ hideSecondaryMenu();
1055
+ event.stopImmediatePropagation();
1056
+ }
1057
+ } else if (inMobileState()) {
1058
+ $primaryItem = $item.parents('.list-group-item');
1059
+ updateMobileMenu($this, $primaryItem);
1060
+ event.stopImmediatePropagation();
1061
+ } else if (handleSelection) {
1062
+ $tertiaryItem = $item.find('.nav-pf-tertiary-nav > .list-group > .list-group-item').eq(0);
1063
+ setActiveItem($tertiaryItem);
1064
+ event.stopImmediatePropagation();
1065
+ }
1066
+ };
1067
+
1068
+ } else if ($nav.hasClass('nav-pf-tertiary-nav')) {
1069
+ // Set tertiary nav active item on click
1070
+ onClickFn = function (event) {
1071
+ if (inMobileState()) {
1072
+ updateMobileMenu();
1073
+ navElement.removeClass('show-mobile-nav');
1074
+ }
1075
+ updateSecondaryMenuDisplayAfterSelection();
1076
+ if (handleSelection) {
1077
+ setActiveItem($item);
1078
+ hideTertiaryMenu();
1079
+ hideSecondaryMenu();
1080
+ event.stopImmediatePropagation();
1081
+ }
1082
+ };
1083
+ }
1084
+
1085
+ // register event handler
1086
+ $item.on('click.pf.secondarynav.data-api', onClickFn);
1087
+ });
1088
+
1089
+ $(document).find('.secondary-nav-item-pf').each(function (index, secondaryItem) {
1090
+ var $secondaryItem = $(secondaryItem);
1091
+
1092
+ // Collapse the secondary nav bar when the toggle is clicked
1093
+ $secondaryItem.on('click.pf.secondarynav.data-api', '[data-toggle="collapse-secondary-nav"]', function (e) {
1094
+ var $this = $(this);
1095
+ if (inMobileState()) {
1096
+ updateMobileMenu();
1097
+ e.stopImmediatePropagation();
1098
+ } else {
1099
+ if ($this.hasClass('collapsed')) {
1100
+ if (options.rememberOpenState) {
1101
+ window[storageLocation].setItem('patternfly-navigation-secondary', 'expanded');
1102
+ window[storageLocation].setItem('patternfly-navigation-tertiary', 'expanded');
1103
+ }
1104
+ updateSecondaryCollapsedState(false, $this);
1105
+ forceHideSecondaryMenu();
1106
+ } else {
1107
+ if (options.rememberOpenState) {
1108
+ window[storageLocation].setItem('patternfly-navigation-secondary', 'collapsed');
1109
+ }
1110
+ updateSecondaryCollapsedState(true, $this);
1111
+ }
1112
+ }
1113
+ navElement.removeClass('hover-secondary-nav-pf');
1114
+ if (handleSelection) {
1115
+ // Don't process the click on the parent item
1116
+ e.stopImmediatePropagation();
1117
+ }
1118
+ });
1119
+
1120
+ $secondaryItem.find('.tertiary-nav-item-pf').each(function (index, primaryItem) {
1121
+ var $primaryItem = $(primaryItem);
1122
+ // Collapse the tertiary nav bar when the toggle is clicked
1123
+ $primaryItem.on('click.pf.tertiarynav.data-api', '[data-toggle="collapse-tertiary-nav"]', function (e) {
1124
+ var $this = $(this);
1125
+ if (inMobileState()) {
1126
+ updateMobileMenu($secondaryItem);
1127
+ e.stopImmediatePropagation();
1128
+ } else {
1129
+ if ($this.hasClass('collapsed')) {
1130
+ if (options.rememberOpenState) {
1131
+ window[storageLocation].setItem('patternfly-navigation-secondary', 'expanded');
1132
+ window[storageLocation].setItem('patternfly-navigation-tertiary', 'expanded');
1133
+ }
1134
+ updateTertiaryCollapsedState(false, $this);
1135
+ forceHideSecondaryMenu();
1136
+ } else {
1137
+ if (options.rememberOpenState) {
1138
+ window[storageLocation].setItem('patternfly-navigation-tertiary', 'collapsed');
1139
+ }
1140
+ updateTertiaryCollapsedState(true, $this);
1141
+ }
1142
+ }
1143
+ navElement.removeClass('hover-secondary-nav-pf');
1144
+ navElement.removeClass('hover-tertiary-nav-pf');
1145
+ if (handleSelection) {
1146
+ // Don't process the click on the parent item
1147
+ e.stopImmediatePropagation();
1148
+ }
1149
+ });
1150
+ });
1151
+ });
1152
+
1153
+ // Show secondary nav bar on hover of secondary nav items
1154
+ $(document).on('mouseenter.pf.tertiarynav.data-api', '.secondary-nav-item-pf', function (e) {
1155
+ var $this = $(this);
1156
+ if (!inMobileState()) {
1157
+ if ($this[0].navUnHoverTimeout !== undefined) {
1158
+ clearTimeout($this[0].navUnHoverTimeout);
1159
+ $this[0].navUnHoverTimeout = undefined;
1160
+ } else if ($this[0].navHoverTimeout === undefined) {
1161
+ $this[0].navHoverTimeout = setTimeout(function () {
1162
+ navElement.addClass('hover-secondary-nav-pf');
1163
+ $this.addClass('is-hover');
1164
+ $this[0].navHoverTimeout = undefined;
1165
+ }, options.hoverDelay);
1166
+ }
1167
+ }
1168
+ });
1169
+
1170
+ $(document).on('mouseleave.pf.tertiarynav.data-api', '.secondary-nav-item-pf', function (e) {
1171
+ var $this = $(this);
1172
+ if ($this[0].navHoverTimeout !== undefined) {
1173
+ clearTimeout($this[0].navHoverTimeout);
1174
+ $this[0].navHoverTimeout = undefined;
1175
+ } else if ($this[0].navUnHoverTimeout === undefined &&
1176
+ navElement.find('.secondary-nav-item-pf.is-hover').length > 0) {
1177
+ $this[0].navUnHoverTimeout = setTimeout(function () {
1178
+ if (navElement.find('.secondary-nav-item-pf.is-hover').length <= 1) {
1179
+ navElement.removeClass('hover-secondary-nav-pf');
1180
+ }
1181
+ $this.removeClass('is-hover');
1182
+ $this[0].navUnHoverTimeout = undefined;
1183
+ }, options.hideDelay);
1184
+ }
1185
+ });
1186
+
1187
+ // Show tertiary nav bar on hover of secondary nav items
1188
+ $(document).on('mouseover.pf.tertiarynav.data-api', '.tertiary-nav-item-pf', function (e) {
1189
+ var $this = $(this);
1190
+ if (!inMobileState()) {
1191
+ if ($this[0].navUnHoverTimeout !== undefined) {
1192
+ clearTimeout($this[0].navUnHoverTimeout);
1193
+ $this[0].navUnHoverTimeout = undefined;
1194
+ } else if ($this[0].navHoverTimeout === undefined) {
1195
+ $this[0].navHoverTimeout = setTimeout(function () {
1196
+ navElement.addClass('hover-tertiary-nav-pf');
1197
+ $this.addClass('is-hover');
1198
+ $this[0].navHoverTimeout = undefined;
1199
+ }, options.hoverDelay);
1200
+ }
1201
+ }
1202
+ });
1203
+ $(document).on('mouseout.pf.tertiarynav.data-api', '.tertiary-nav-item-pf', function (e) {
1204
+ var $this = $(this);
1205
+ if ($this[0].navHoverTimeout !== undefined) {
1206
+ clearTimeout($this[0].navHoverTimeout);
1207
+ $this[0].navHoverTimeout = undefined;
1208
+ } else if ($this[0].navUnHoverTimeout === undefined) {
1209
+ $this[0].navUnHoverTimeout = setTimeout(function () {
1210
+ if (navElement.find('.tertiary-nav-item-pf.is-hover').length <= 1) {
1211
+ navElement.removeClass('hover-tertiary-nav-pf');
1212
+ }
1213
+ $this.removeClass('is-hover');
1214
+ $this[0].navUnHoverTimeout = undefined;
1215
+ }, options.hideDelay);
1216
+ }
1217
+ });
1218
+ },
1219
+
1220
+ loadFromLocalStorage = function () {
1221
+ if (inMobileState()) {
1222
+ return;
1223
+ }
1224
+
1225
+ if (window[storageLocation].getItem('patternfly-navigation-primary') === 'collapsed') {
1226
+ collapseMenu();
1227
+ }
1228
+
1229
+ if ($('.nav-pf-vertical.nav-pf-vertical-collapsible-menus').length > 0) {
1230
+ if (window[storageLocation].getItem('patternfly-navigation-secondary') === 'collapsed') {
1231
+ updateSecondaryCollapsedState(true, $('.secondary-nav-item-pf.active [data-toggle=collapse-secondary-nav]'));
1232
+ }
1233
+
1234
+ if (window[storageLocation].getItem('patternfly-navigation-tertiary') === 'collapsed') {
1235
+ updateTertiaryCollapsedState(true, $('.tertiary-nav-item-pf.active [data-toggle=collapse-tertiary-nav]'));
1236
+ }
1237
+ }
1238
+ },
1239
+
1240
+ setTooltips = function () {
1241
+ var tooltipOptions = {
1242
+ container: 'body',
1243
+ placement: 'bottom',
1244
+ delay: { 'show': '500', 'hide': '200' },
1245
+ template: '<div class="nav-pf-vertical-tooltip tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'
1246
+ };
1247
+ $('.nav-pf-vertical [data-toggle="tooltip"]').tooltip(tooltipOptions);
1248
+
1249
+ $('.nav-pf-vertical').on("show.bs.tooltip", function (e) {
1250
+ return $(this).hasClass("collapsed");
1251
+ });
1252
+ },
1253
+
1254
+ init = function (handleItemSelections) {
1255
+ // Hide the nav menus during initialization
1256
+ navElement.addClass('hide-nav-pf');
1257
+ bodyContentElement.addClass('hide-nav-pf');
1258
+
1259
+ //Set correct state on load
1260
+ checkNavState();
1261
+
1262
+ // Bind Top level hamburger menu with menu behavior;
1263
+ bindMenuBehavior();
1264
+
1265
+ // Bind menu items
1266
+ bindMenuItemsBehavior(handleItemSelections);
1267
+
1268
+ //Set tooltips
1269
+ setTooltips();
1270
+
1271
+ if (options.rememberOpenState) {
1272
+ loadFromLocalStorage();
1273
+ }
1274
+
1275
+ // Show the nav menus
1276
+ navElement.removeClass('hide-nav-pf');
1277
+ bodyContentElement.removeClass('hide-nav-pf');
1278
+ forceResize(250);
1279
+ },
1280
+
1281
+ self = {
1282
+ hideMenu: function () {
1283
+ handleResize = false;
1284
+ enterMobileState();
1285
+ },
1286
+ showMenu: function () {
1287
+ handleResize = true;
1288
+ exitMobileState();
1289
+ },
1290
+ isVisible: function () {
1291
+ return handleResize;
1292
+ }
1293
+ };
1294
+
1295
+ if (!$.fn.setupVerticalNavigation.self) {
1296
+ $.fn.setupVerticalNavigation.self = self;
1297
+ //Listen for the window resize event and collapse/hide as needed
1298
+ $(window).on('resize', function () {
1299
+ checkNavState();
1300
+ enableTransitions();
1301
+ });
1302
+
1303
+ init(handleItemSelections);
1304
+ }
1305
+ return $.fn.setupVerticalNavigation.self;
1306
+ };
1307
+ }(jQuery));