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

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 (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));