kcc-gem-theme 1.65.57

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 (221) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +21 -0
  3. data/README.md +138 -0
  4. data/_data/cache_bust_css.yml +1 -0
  5. data/_data/navigation.yml +96 -0
  6. data/_data/theme_hash.yml +1 -0
  7. data/_includes/accordion.html +28 -0
  8. data/_includes/alerts.html +2 -0
  9. data/_includes/benefits.html +98 -0
  10. data/_includes/body.html +8 -0
  11. data/_includes/bottom-action-call.html +10 -0
  12. data/_includes/card-section.html +27 -0
  13. data/_includes/chat-now.html +8 -0
  14. data/_includes/check-mark.svg +17 -0
  15. data/_includes/contacts-tan.html +69 -0
  16. data/_includes/contacts.html +67 -0
  17. data/_includes/document-head.html +13 -0
  18. data/_includes/emergency-alert.html +9 -0
  19. data/_includes/emergency-alerts.html +29 -0
  20. data/_includes/foot.html +3 -0
  21. data/_includes/footer.html +168 -0
  22. data/_includes/header-global.html +25 -0
  23. data/_includes/header.html +28 -0
  24. data/_includes/hero-slider.html +23 -0
  25. data/_includes/image-slider.html +23 -0
  26. data/_includes/nav-global-bottom.html +30 -0
  27. data/_includes/nav-global-local.html +29 -0
  28. data/_includes/nav-global-top.html +14 -0
  29. data/_includes/nav-global.html +117 -0
  30. data/_includes/nav-landing.html +111 -0
  31. data/_includes/nav-local.html +34 -0
  32. data/_includes/nav-sub.html +19 -0
  33. data/_includes/old-head.html +28 -0
  34. data/_includes/scripts/custom.html +2 -0
  35. data/_includes/scripts/emergency-alerts.html +2 -0
  36. data/_includes/scripts/google-api.html +2 -0
  37. data/_includes/scripts/google-noscript.html +6 -0
  38. data/_includes/scripts/google-tag.html +24 -0
  39. data/_includes/scripts/kcc-alerts.html +2 -0
  40. data/_includes/scripts/kcc-mega-nav.html +2 -0
  41. data/_includes/scripts/kcc-nav.html +2 -0
  42. data/_includes/scripts/kcc-theme-landing.html +2 -0
  43. data/_includes/scripts/kcc-theme.html +2 -0
  44. data/_includes/scripts/table-cdn.html +6 -0
  45. data/_includes/scripts/translate.html +11 -0
  46. data/_includes/scripts/vendor-cdn.html +6 -0
  47. data/_includes/styles/fonts.html +11 -0
  48. data/_includes/styles/main.html +8 -0
  49. data/_includes/styles/vendor.html +6 -0
  50. data/_includes/svg/check.html +11 -0
  51. data/_includes/svg/goals.html +17 -0
  52. data/_includes/svg/kcc-copy.html +62 -0
  53. data/_includes/svg/kcc.html +59 -0
  54. data/_includes/svg/kcc.svg +59 -0
  55. data/_includes/svg/love.html +6 -0
  56. data/_includes/svg/save-money.html +40 -0
  57. data/_includes/tabbed-content.html +21 -0
  58. data/_includes/targetx-form.html +370 -0
  59. data/_includes/targetx-head.html +48 -0
  60. data/_includes/translate.html +3 -0
  61. data/_layouts/default-core.html +31 -0
  62. data/_layouts/default-landing.html +31 -0
  63. data/_layouts/default.html +32 -0
  64. data/_layouts/landing-page.html +8 -0
  65. data/_layouts/landing-simple.html +29 -0
  66. data/_layouts/markdown.html +13 -0
  67. data/_layouts/page.html +8 -0
  68. data/_layouts/sub-nav.html +6 -0
  69. data/_layouts/thank-you.html +18 -0
  70. data/assets/css/content.css +1 -0
  71. data/assets/css/kcc-theme.css +1 -0
  72. data/assets/css/main.css +1 -0
  73. data/assets/css/translate.css +1 -0
  74. data/assets/img/2016-senior-viewbook.jpg +0 -0
  75. data/assets/img/ATEC-DSC_1033.jpeg +0 -0
  76. data/assets/img/DSC_5650_helpful.jpg +0 -0
  77. data/assets/img/DSC_8724_4x3.jpg +0 -0
  78. data/assets/img/alert.svg +13 -0
  79. data/assets/img/baseball.svg +40 -0
  80. data/assets/img/basketball.svg +17 -0
  81. data/assets/img/blank-contact.svg +10 -0
  82. data/assets/img/blue-next.svg +9 -0
  83. data/assets/img/blue-prev.svg +9 -0
  84. data/assets/img/calendar.svg +24 -0
  85. data/assets/img/cavaliers-16x9-thumb.png +0 -0
  86. data/assets/img/cavaliers-logo.png +0 -0
  87. data/assets/img/cavaliers-logo_white.png +0 -0
  88. data/assets/img/d-daun2.jpg +0 -0
  89. data/assets/img/dbl-next.svg +16 -0
  90. data/assets/img/dbl-next_mobile.svg +16 -0
  91. data/assets/img/dbl-prev.svg +16 -0
  92. data/assets/img/dbl-prev_mobile.svg +16 -0
  93. data/assets/img/e-tech_a-roberts_mar2016_D41_6690.jpg +0 -0
  94. data/assets/img/facebook-f_white.svg +9 -0
  95. data/assets/img/fafsa-early-bird-banner-18.jpg +0 -0
  96. data/assets/img/go_cavs_20171002_193828-web.jpg +0 -0
  97. data/assets/img/heading-bg-underline-tan.png +0 -0
  98. data/assets/img/heading-bg-underline-transparent.png +0 -0
  99. data/assets/img/heading-bg-underline.png +0 -0
  100. data/assets/img/instagram-white.svg +20 -0
  101. data/assets/img/itransfer.png +0 -0
  102. data/assets/img/kankakee-community-college-word-logo.svg +88 -0
  103. data/assets/img/kcc-logo-inverse.svg +21 -0
  104. data/assets/img/kcc-logo.svg +74 -0
  105. data/assets/img/kcc-placeholder-square.png +0 -0
  106. data/assets/img/kcc-placeholder.png +0 -0
  107. data/assets/img/kcc-text-logo.svg +89 -0
  108. data/assets/img/linkedin-white.svg +13 -0
  109. data/assets/img/loader.gif +0 -0
  110. data/assets/img/menu-bg.png +0 -0
  111. data/assets/img/miguel2.jpg +0 -0
  112. data/assets/img/news.svg +19 -0
  113. data/assets/img/pause.svg +20 -0
  114. data/assets/img/pause_mobile.svg +20 -0
  115. data/assets/img/pinterest-p_white.svg +16 -0
  116. data/assets/img/placeholder.png +0 -0
  117. data/assets/img/play.svg +12 -0
  118. data/assets/img/play_mobile.svg +12 -0
  119. data/assets/img/riverfrontcampus.jpg +0 -0
  120. data/assets/img/search.svg +18 -0
  121. data/assets/img/soccer.svg +17 -0
  122. data/assets/img/social-icon.svg +13 -0
  123. data/assets/img/twitter-white.svg +14 -0
  124. data/assets/img/video.svg +10 -0
  125. data/assets/img/volleyball.svg +15 -0
  126. data/assets/img/x.svg +10 -0
  127. data/assets/img/youtube-white.svg +9 -0
  128. data/assets/img/yt-loading.png +0 -0
  129. data/assets/img/zippia.png +0 -0
  130. data/assets/js/dist/main.bundle.js +1 -0
  131. data/assets/js/theme/alerts/alerts.js +5 -0
  132. data/assets/js/theme/alerts/campusAlertsSheetsAPI.js +41 -0
  133. data/assets/js/theme/alerts/createAlertsHtml.js +93 -0
  134. data/assets/js/theme/alerts/parseMarkdownToHTML.js +85 -0
  135. data/assets/js/theme/alerts/simpleSetSheetParameters.js +23 -0
  136. data/assets/js/theme/dist/alerts.bundle.js +1 -0
  137. data/assets/js/theme/dist/kcc-mega-nav.bundle.js +1 -0
  138. data/assets/js/theme/dist/kcc-nav.bundle.js +1 -0
  139. data/assets/js/theme/dist/kcc-theme-landing.bundle.js +1 -0
  140. data/assets/js/theme/dist/kcc-theme.bundle.js +1 -0
  141. data/assets/js/theme/landing/landing.js +5 -0
  142. data/assets/js/theme/landing/landingPage.js +49 -0
  143. data/assets/js/theme/nav/megaNav/closeMegaNavOnClick.js +50 -0
  144. data/assets/js/theme/nav/megaNav/googleCustomSearch.js +112 -0
  145. data/assets/js/theme/nav/megaNav/megaNav.js +13 -0
  146. data/assets/js/theme/nav/megaNav/searchToggleMegaNav.js +96 -0
  147. data/assets/js/theme/nav/megaNav/toggleDropdownOnWindowResize.js +78 -0
  148. data/assets/js/theme/nav/megaNav/toggleDropdownOnWindowResizeTwo.js +54 -0
  149. data/assets/js/theme/nav/megaNav/toggleMenuOnWindowResize.js +26 -0
  150. data/assets/js/theme/nav/megaNav/underlineCurrentSite.js +22 -0
  151. data/assets/js/theme/nav/nav/closeNavOnClick.js +50 -0
  152. data/assets/js/theme/nav/nav/highlightCurrentNav.js +56 -0
  153. data/assets/js/theme/nav/nav/moveSearchIcon.js +94 -0
  154. data/assets/js/theme/nav/nav/nav.js +13 -0
  155. data/assets/js/theme/nav/nav/searchToggleNav.js +40 -0
  156. data/assets/js/theme/nav/nav/toggleNavSearchDropdownOnWindowResize.js +57 -0
  157. data/assets/js/theme/src/all.js +34 -0
  158. data/assets/js/theme/src/babelTest.js +18 -0
  159. data/assets/js/theme/src/footerDate.js +7 -0
  160. data/assets/js/theme/src/lazyLoad.js +13 -0
  161. data/assets/js/theme/src/sliders.js +88 -0
  162. data/assets/js/theme/src/test.js +5 -0
  163. data/assets/js/theme/src/translate.js +56 -0
  164. data/assets/js/theme/src/walkText.js +16 -0
  165. data/assets/js/theme/src/wrapPowerText.js +21 -0
  166. data/assets/js/theme/src/ytEmbed.js +30 -0
  167. data/assets/scss/0-tools/_bootstrap-overrides.scss +72 -0
  168. data/assets/scss/0-tools/_cloudcannon.scss +16 -0
  169. data/assets/scss/0-tools/_google-translate-overrides.scss +114 -0
  170. data/assets/scss/0-tools/_gsc-overrides.scss +144 -0
  171. data/assets/scss/0-tools/_targetx-overrides.scss +76 -0
  172. data/assets/scss/0-tools/_vars.scss +67 -0
  173. data/assets/scss/1-base/_background.scss +5 -0
  174. data/assets/scss/1-base/_buttons.scss +83 -0
  175. data/assets/scss/1-base/_header-global.scss +454 -0
  176. data/assets/scss/1-base/_img.scss +17 -0
  177. data/assets/scss/1-base/_links.scss +120 -0
  178. data/assets/scss/1-base/_typography.scss +641 -0
  179. data/assets/scss/2-modules/_accordion.scss +34 -0
  180. data/assets/scss/2-modules/_benefits.scss +371 -0
  181. data/assets/scss/2-modules/_campus-alerts.scss +3 -0
  182. data/assets/scss/2-modules/_card-section.scss +9 -0
  183. data/assets/scss/2-modules/_contacts.scss +46 -0
  184. data/assets/scss/2-modules/_error.scss +10 -0
  185. data/assets/scss/2-modules/_footer.scss +80 -0
  186. data/assets/scss/2-modules/_header.scss +21 -0
  187. data/assets/scss/2-modules/_hero-slider.scss +330 -0
  188. data/assets/scss/2-modules/_img-hover.scss +70 -0
  189. data/assets/scss/2-modules/_loader.scss +9 -0
  190. data/assets/scss/2-modules/_nav-global.scss +315 -0
  191. data/assets/scss/2-modules/_nav-landing.scss +203 -0
  192. data/assets/scss/2-modules/_nav-local.scss +45 -0
  193. data/assets/scss/2-modules/_sliders.scss +191 -0
  194. data/assets/scss/2-modules/_social-icons.scss +36 -0
  195. data/assets/scss/2-modules/_sub-nav.scss +32 -0
  196. data/assets/scss/2-modules/_yt-embed.scss +14 -0
  197. data/assets/scss/3-layout/_background.scss +3 -0
  198. data/assets/scss/3-layout/_content.scss +37 -0
  199. data/assets/scss/3-layout/_margins.scss +22 -0
  200. data/assets/scss/3-layout/_padding.scss +19 -0
  201. data/assets/scss/3-layout/_positioning.scss +341 -0
  202. data/assets/scss/3-layout/_section.scss +22 -0
  203. data/assets/scss/3-layout/_tables.scss +8 -0
  204. data/assets/scss/3-layout/_thank-you.scss +5 -0
  205. data/assets/scss/4-pages/index/_home.scss +15 -0
  206. data/assets/scss/kcc-theme.scss +49 -0
  207. data/assets/scss/translate.scss +5 -0
  208. data/assets/vendor/css/ajax-loader.gif +0 -0
  209. data/assets/vendor/css/bootstrap.min.css +7 -0
  210. data/assets/vendor/css/fonts/slick.eot +0 -0
  211. data/assets/vendor/css/fonts/slick.ttf +0 -0
  212. data/assets/vendor/css/fonts/slick.woff +0 -0
  213. data/assets/vendor/css/mli7lsm.css +22 -0
  214. data/assets/vendor/css/slick-theme.min.css +8 -0
  215. data/assets/vendor/css/slick.min.css +8 -0
  216. data/assets/vendor/font/slick.woff +0 -0
  217. data/assets/vendor/js/bootstrap.min.js +7 -0
  218. data/assets/vendor/js/jquery.min.js +2 -0
  219. data/assets/vendor/js/popper.min.js +5 -0
  220. data/assets/vendor/js/slick.min.js +1 -0
  221. metadata +304 -0
@@ -0,0 +1,50 @@
1
+ const NAV_LINKS_SELECTOR = '.nav-link:not(.dropdown-toggle)'; // Bootstrap 4 class
2
+ const MENU_COLLAPSE_JQUERY = $('#headerGlobalNavbarContent'); // Bootstrap 4 crap that requires $() w/ an ID from the HTML
3
+ const MENU_COLLAPSE = 'headerGlobalNavbarContent'; // ID from the HTML
4
+ const HIDE = 'hide'; // Bootstrap 4 class
5
+ const SHOW = 'show'; // Bootstrap 4 class
6
+
7
+ function hideBootstrapMenu() {
8
+ MENU_COLLAPSE_JQUERY.collapse(HIDE);
9
+ }
10
+
11
+ function checkIfMenuIsOpen() {
12
+ if ( document.getElementById(MENU_COLLAPSE).classList.contains(SHOW) ) {
13
+ return true;
14
+ }
15
+ return false;
16
+ }
17
+
18
+ function hideMenuIfOpen(menuIsOpen) {
19
+ if ( menuIsOpen ) {
20
+ hideBootstrapMenu();
21
+ } else {
22
+ return;
23
+ }
24
+ }
25
+
26
+ function clickHandlerFunction(e) {
27
+ if ( !e.target.matches(NAV_LINKS_SELECTOR) ) // Bail out of the rest of the code if the click event's target is not what we want!
28
+ return;
29
+
30
+ if ( e.target.classList.contains('dropdown-toggle') )
31
+ return;
32
+
33
+
34
+ const menuIsOpen = checkIfMenuIsOpen();
35
+
36
+ hideMenuIfOpen(menuIsOpen);
37
+ }
38
+
39
+ function addEventListenerFunction(element, clickEvent) {
40
+ element.addEventListener(clickEvent, clickHandlerFunction, false);
41
+ }
42
+
43
+ function closeMenuOnClick() {
44
+ const clickEvent = 'click';
45
+ const element = document;
46
+
47
+ addEventListenerFunction(element, clickEvent);
48
+ }
49
+
50
+ export default closeMenuOnClick;
@@ -0,0 +1,112 @@
1
+ import initSearchToggle from './searchToggleMegaNav.js';
2
+
3
+ const FOCUSABLE_GOOGLE_CUSTOM_SEARCH_SELECTORS_ARR = [
4
+ '#gsc-i-id1',
5
+ '#gs_st50 .gsst_a',
6
+ '.gsc-search-button .gsc-search-button.gsc-search-button-v2'
7
+ ];
8
+ const SEARCH_INPUT_ID = 'gsc-i-id1'; // ID OF THE GOOGLE CUSTOM SEARCH (GCS) INPUT ELEMENT // Not in the DOM until the GCS JS fires `gcsInit()`
9
+ const SEARCH_DIV_WRAPPER_ID = 'searchCollapse'; // ID OF THE DIV BUILT INTO THE SITES HTML WHICH WRAPS THE GCS
10
+
11
+ function checkXIcon() {
12
+ const checkXIconOnLoad = (function() {
13
+ let executed = false;
14
+ return function() {
15
+ if (!executed) {
16
+ executed = true;
17
+ // do checkXIconOnLoad
18
+ const icon = document.getElementById('xIcon');
19
+ const xIsHidden = icon.getAttribute('style') === 'display: none;';
20
+ xIsHidden ? removeClear() : clearXIcon();
21
+ }
22
+ };
23
+ })();
24
+ checkXIconOnLoad(); // "do checkXIconOnLoad" happens
25
+ }
26
+
27
+ function clearXIcon() {
28
+ const targetEl = document.querySelector('button.gsc-search-button-v2');
29
+ targetEl.classList.add('gsc-overrides__clear-x');
30
+ }
31
+
32
+ function removeClear() {
33
+ const targetEl = document.querySelector('button.gsc-search-button-v2');
34
+ targetEl.classList.remove('gsc-overrides__clear-x');
35
+ }
36
+
37
+ function addId() {
38
+ const xIcon = document.querySelector('.gsst_a');
39
+ xIcon.setAttribute('id', 'xIcon');
40
+ }
41
+
42
+ function addAttribute(selector, attr, val) {
43
+ const el = document.querySelector(selector);
44
+
45
+ el.setAttribute(attr, val);
46
+ }
47
+
48
+ function gcsInit() { // Init The GCS JS
49
+ var cx = '006320264078644364913:sy48bet-lr8';
50
+ var gcse = document.createElement('script');
51
+ gcse.type = 'text/javascript';
52
+ gcse.async = true;
53
+ gcse.src = 'https://cse.google.com/cse.js?cx=' + cx;
54
+ var s = document.getElementsByTagName('script')[0];
55
+ s.parentNode.insertBefore(gcse, s);
56
+ }
57
+
58
+ function googleCustomSearchInit() {
59
+ if ( document.getElementById(SEARCH_DIV_WRAPPER_ID) ) {
60
+ let initSearchPromise = new Promise((resolve, reject) => {
61
+ gcsInit();
62
+ resolve();
63
+ });
64
+ initSearchPromise.then(() => {
65
+ let addIdPromise = new Promise((resolve, reject) => {
66
+
67
+ const targetNode = document.getElementById('searchCollapse');
68
+ const config = { attributes: true, childList: true, subtree: true };
69
+ const callback = function(mutationsList, observer) {
70
+ for(const mutation of mutationsList) {
71
+ if (mutation.type == 'childList') {
72
+ addId();
73
+ let len = FOCUSABLE_GOOGLE_CUSTOM_SEARCH_SELECTORS_ARR.length;
74
+ for (var i = 0; i < len; i++) {
75
+ addAttribute(FOCUSABLE_GOOGLE_CUSTOM_SEARCH_SELECTORS_ARR[i], 'tabindex', '-1'); // Make Elements initially unfocusable, so that screen readers don't pick up the hidden GCS
76
+ }
77
+ resolve();
78
+ }
79
+ }
80
+ };
81
+ const observer = new MutationObserver(callback); // Using a MutationObserver to watch for changes in the Google Custom Search Elements that got built into the page from `gcsInit()`
82
+ observer.observe(targetNode, config);
83
+ // Later, you can stop observing
84
+ //observer.disconnect();
85
+ });
86
+ addIdPromise.then(() => {
87
+ checkXIcon();
88
+ const targetNode = document.getElementById('xIcon');
89
+ const config = { attributes: true, childList: true, subtree: true };
90
+ const callback = function(mutationsList, observer) {
91
+ for(const mutation of mutationsList) {
92
+ if (mutation.type == 'attributes') {
93
+ const xIsHidden = targetNode.getAttribute('style') === 'display: none;';
94
+ if (xIsHidden) {
95
+ removeClear();
96
+ } else {
97
+ clearXIcon();
98
+ }
99
+ }
100
+ }
101
+ };
102
+ const observer = new MutationObserver(callback);
103
+ observer.observe(targetNode, config);
104
+ // Later, you can stop observing
105
+ //observer.disconnect();
106
+ initSearchToggle();
107
+ });
108
+ });
109
+ }
110
+ }
111
+
112
+ export default googleCustomSearchInit;
@@ -0,0 +1,13 @@
1
+ import toggleMenuOnWindowResize from './toggleMenuOnWindowResize.js';
2
+ import toggleDropdownOnWindowResize from './toggleDropdownOnWindowResizeTwo.js';
3
+ import googleCustomSearchInit from './googleCustomSearch.js';
4
+ import closeMenuOnClick from './closeMegaNavOnClick.js';
5
+ import underlineCurrentSite from './underlineCurrentSite.js';
6
+
7
+ document.addEventListener('DOMContentLoaded', function() {
8
+ googleCustomSearchInit();
9
+ underlineCurrentSite();
10
+ toggleMenuOnWindowResize();
11
+ toggleDropdownOnWindowResize();
12
+ closeMenuOnClick();
13
+ });
@@ -0,0 +1,96 @@
1
+ // Custom JS to toggle the search form
2
+ const FOCUSABLE_GOOGLE_CUSTOM_SEARCH_SELECTORS_ARR = [
3
+ '#gsc-i-id1',
4
+ '#gs_st50 .gsst_a',
5
+ '.gsc-search-button .gsc-search-button.gsc-search-button-v2'
6
+ ]; // Elements that Google Custom Search builds into the page
7
+ const OPEN_SEARCH_BUTTON_ID = 'openSearchButton';
8
+ const OPEN_SEARCH_BUTTON_CLASS = 'header-global__search-icon';
9
+ const CLOSE_SEARCH_BUTTON_ID = 'closeSearchButton';
10
+ const CLOSE_SEARCH_BUTTON_CLASS = 'header-global__close-icon';
11
+ const SEARCH_INPUT_ID = 'gsc-i-id1'; // An element that Google Custom Search builds into the page
12
+ const HEADER_GLOBAL_NAV_ID = 'headerGlobalNavbar';
13
+ const SEARCH_COLLAPSE_ID = 'searchCollapse';
14
+
15
+ function setElementAttribute(selector, attr, val) {
16
+ const el = document.querySelector(selector);
17
+
18
+ el.setAttribute(attr, val);
19
+ }
20
+
21
+ function toggleButtonAttributes(button, removeButtonOption, buttonClass) {
22
+ if ( removeButtonOption ) {
23
+ button.classList.add(buttonClass + '--hidden');
24
+ button.setAttribute('aria-hidden', 'true');
25
+ button.setAttribute('tabindex', '-1');
26
+ } else {
27
+ button.classList.remove(buttonClass + '--hidden');
28
+ button.setAttribute('aria-hidden', 'false');
29
+ button.setAttribute('tabindex', '0');
30
+ }
31
+ }
32
+
33
+ function handleSearchToggle(searchButtonWasClicked) {
34
+ const searchButtonEl = document.getElementById(OPEN_SEARCH_BUTTON_ID);
35
+ const closeButtonEl = document.getElementById(CLOSE_SEARCH_BUTTON_ID);
36
+ const searchInputField = document.getElementById(SEARCH_INPUT_ID);
37
+ let len = FOCUSABLE_GOOGLE_CUSTOM_SEARCH_SELECTORS_ARR.length;
38
+
39
+ if ( searchButtonWasClicked ) {
40
+ toggleButtonAttributes(searchButtonEl, true, OPEN_SEARCH_BUTTON_CLASS);
41
+ toggleButtonAttributes(closeButtonEl, false, CLOSE_SEARCH_BUTTON_CLASS);
42
+ for (var i = 0; i < len; i++) {
43
+ setElementAttribute(FOCUSABLE_GOOGLE_CUSTOM_SEARCH_SELECTORS_ARR[i], 'tabindex', '0');
44
+ }
45
+ searchInputField.focus();
46
+ } else {
47
+ toggleButtonAttributes(searchButtonEl, false, OPEN_SEARCH_BUTTON_CLASS);
48
+ toggleButtonAttributes(closeButtonEl, true, CLOSE_SEARCH_BUTTON_CLASS);
49
+ for (var i = 0; i < len; i++) {
50
+ setElementAttribute(FOCUSABLE_GOOGLE_CUSTOM_SEARCH_SELECTORS_ARR[i], 'tabindex', '-1');
51
+ }
52
+ }
53
+ }
54
+
55
+ function toggleOtherElements() {
56
+ const searchCollapse = document.getElementById(SEARCH_COLLAPSE_ID);
57
+ const headerGlobalNavbar = document.getElementById(HEADER_GLOBAL_NAV_ID);
58
+ const collapseAria = searchCollapse.getAttribute('aria-hidden');
59
+
60
+ searchCollapse.classList.toggle('header-global__search-collapse--visible');
61
+ (collapseAria === "true") ? searchCollapse.setAttribute('aria-hidden', 'false') : searchCollapse.setAttribute('aria-hidden', 'true');
62
+ headerGlobalNavbar.classList.toggle('header-global__navbar--search-toggle');
63
+ }
64
+
65
+ function checkClickedButton(event) {
66
+ let openSearchButtonWasClicked;
67
+
68
+ if ( event.target.closest('#openSearchButton') ) {
69
+ openSearchButtonWasClicked = true;
70
+ } else if ( event.target.closest('#closeSearchButton') ) {
71
+ openSearchButtonWasClicked = false;
72
+ }
73
+ handleSearchToggle(openSearchButtonWasClicked);
74
+ toggleOtherElements();
75
+ }
76
+
77
+ function clickEventHandler(event) {
78
+ if ( event.target.closest('#openSearchButton') || event.target.closest('#closeSearchButton') ) {
79
+ checkClickedButton(event);
80
+ } else {
81
+ return; // Bail-out
82
+ }
83
+ }
84
+
85
+ function addClickEventListener() {
86
+ document.addEventListener('click', clickEventHandler);
87
+ }
88
+
89
+ function initSearchToggle() {
90
+ if ( ! document.getElementById('openSearchButton') )
91
+ return;
92
+
93
+ addClickEventListener();
94
+ }
95
+
96
+ export default initSearchToggle;
@@ -0,0 +1,78 @@
1
+ //
2
+ //
3
+ //
4
+ // TODO: Combine method bellow with a class added to the nav when it is desktop size and above
5
+ //
6
+ //
7
+ //
8
+ //
9
+ //
10
+ // Custom JS to Close the Navigation menu, if its open, & if the screen goes above 992px wide (Bootstrap 4 'lg' devices)
11
+ const NAV_ELEMENT_ID_STRING = 'headerGlobalNavbar';
12
+ const NAVBAR_COLLAPSE_ID = 'headerGlobalNavbarContent'; // ID built into the sites' HTML
13
+ const NAVBAR_IS_DESKTOP = 'header-global__navbar--lg';
14
+ const NAVBAR_ELEMENT = document.getElementById(NAV_ELEMENT_ID_STRING);
15
+
16
+ function removeClassFromElement(el, classString) {
17
+ el.classList.remove(classString);
18
+ }
19
+
20
+ function collapseElement(dropdownToggle) {
21
+ //console.log( $(dropdownToggle) );
22
+ $(dropdownToggle).collapse('hide'); // Bootstrap 4 `.collapse()` method.
23
+ removeClassFromElement(NAVBAR_ELEMENT, NAVBAR_IS_DESKTOP);
24
+
25
+ }
26
+
27
+ function checkDropdownCollapseState(el) {
28
+ let dropdownToggle = el.parentElement
29
+ //console.log(el.parentElement.classList);
30
+ if ( dropdownToggle.classList.contains('show') ) { // 'show' is a Bootstrap 4 class that makes `.collapse` items visible. // Checking to see if the Menu is open
31
+ //console.log(el);
32
+ collapseElement(dropdownToggle);
33
+ }
34
+ }
35
+
36
+ function loopOverNodeList(nodeList) {
37
+ //console.log(nodeList);
38
+ let len = nodeList.length;
39
+
40
+ for (var i = 0; i < len; i++) {
41
+ const dropdownMenu = nodeList[i];
42
+
43
+ checkDropdownCollapseState(dropdownMenu);
44
+ }
45
+ }
46
+
47
+ function windowResizeHandler() {
48
+ const navbarEl = windowResizeHandler.element;
49
+
50
+ if ( window.innerWidth <= 992 && navbarEl.classList.contains(NAVBAR_IS_DESKTOP) ) {
51
+ const menuCollapseElement = document.getElementById(NAVBAR_COLLAPSE_ID);
52
+ const dropdownMenuNodeList = menuCollapseElement.querySelectorAll('.dropdown-toggle');
53
+
54
+ loopOverNodeList(dropdownMenuNodeList);
55
+ //checkNavbarCollapseState(menuCollapseElement);
56
+ }
57
+ }
58
+
59
+ function addClassToElement(el, classString) {
60
+ el.classList.add(classString);
61
+ }
62
+
63
+ function checkWindowWidth() {
64
+ const windowIsWiderThanBootStrapLarge = window.innerWidth >= 992;
65
+
66
+ windowIsWiderThanBootStrapLarge ?
67
+ addClassToElement(NAVBAR_ELEMENT, NAVBAR_IS_DESKTOP)
68
+ : null;
69
+ }
70
+
71
+ function toggleDropdownOnWindowResize() {
72
+
73
+ windowResizeHandler.element = NAVBAR_ELEMENT;
74
+ checkWindowWidth();
75
+ window.addEventListener('resize', windowResizeHandler);
76
+ }
77
+
78
+ export default toggleDropdownOnWindowResize;
@@ -0,0 +1,54 @@
1
+ // Custom JS to make the site look pretty while ITS shrinks and expands the window with the menu open
2
+ const NAV_ELEMENT_ID_STRING = 'headerGlobalNavbar'; // ID built into the site's HMTL
3
+ const NAVBAR_COLLAPSE_ID = 'headerGlobalNavbarContent'; // ID built into the sites' HTML
4
+ const GLOBAL_NAVIGATION_ITEMS = 'navGlobalBottom'; // ID built into the site's HMTL
5
+ const NAVBAR_ELEMENT = document.getElementById(NAV_ELEMENT_ID_STRING); // The <nav> element built into the site's HMTL
6
+ const BOOTSTRAP_COLLAPSE_SHOW_CLASS_STRING = 'show';
7
+ const BOOTSTRAP_DROPDOWN_TOGGLER_CLASS = '.dropdown-toggle'; // Class specific to Bootstrap 4 code
8
+
9
+ function openNavigationCollapse() {
10
+
11
+ if ( NAVBAR_ELEMENT.navbar_toggled === true ) // Track if the navbar has already been toggled
12
+ return; // Bail-out to prevent repetitive calls to the code below (without this the code is called many, many, many times while the screen is resizing)
13
+
14
+ const menuCollapseElement = document.getElementById(NAVBAR_COLLAPSE_ID);
15
+
16
+ NAVBAR_ELEMENT.navbar_toggled = true;
17
+ $(menuCollapseElement).collapse(BOOTSTRAP_COLLAPSE_SHOW_CLASS_STRING); // BOOTSTRAP 4 METHOD (requires jQuery (yuck!).)!!! Official BS4 docs on `.collapse()` https://getbootstrap.com/docs/4.4/components/collapse/#via-javascript
18
+ }
19
+
20
+ function checkForOpenDropdownMenus(menuItem) {
21
+ const dropdown = menuItem.parentElement;
22
+
23
+ if ( dropdown.classList.contains(BOOTSTRAP_COLLAPSE_SHOW_CLASS_STRING) ) {
24
+ openNavigationCollapse();
25
+ }
26
+ }
27
+
28
+ function loopOverDropdownItems(nodeList) {
29
+ let len = nodeList.length;
30
+
31
+ for (var i = 0; i < len; i++) {
32
+ checkForOpenDropdownMenus(nodeList[i]);
33
+ }
34
+ }
35
+
36
+ function windowResizeHandler() {
37
+ const dropdownToggleNodeList = document.getElementById(GLOBAL_NAVIGATION_ITEMS).querySelectorAll(BOOTSTRAP_DROPDOWN_TOGGLER_CLASS);
38
+
39
+ if ( window.innerWidth <= 992 ) {
40
+ loopOverDropdownItems(dropdownToggleNodeList);
41
+ } else {
42
+ NAVBAR_ELEMENT.navbar_toggled = false;
43
+ }
44
+ }
45
+
46
+ function toggleDropdownOnWindowResize() {
47
+
48
+ if ( ! NAVBAR_ELEMENT )
49
+ return;
50
+
51
+ window.addEventListener('resize', windowResizeHandler);
52
+ }
53
+
54
+ export default toggleDropdownOnWindowResize;
@@ -0,0 +1,26 @@
1
+ // Custom JS to Close the Navigation menu, if its open, & if the screen goes above 992px wide (Bootstrap 4 'lg' devices)
2
+ const NAVBAR_COLLAPSE_ID = 'headerGlobalNavbarContent'; // ID built into the sites' HTML
3
+
4
+ function collapseElement(el) {
5
+ $(el).collapse('hide'); // Bootstrap 4 `.collapse()` method.
6
+ }
7
+
8
+ function checkNavbarCollapseState(menuEl) {
9
+ if ( menuEl.classList.contains('show') ) { // 'show' is a Bootstrap 4 class that makes `.collapse` items visible. // Checking to see if the Menu is open
10
+ collapseElement(menuEl);
11
+ }
12
+ }
13
+
14
+ function windowResizeHandler() {
15
+ if ( window.innerWidth >= 992 ) {
16
+ const menuCollapseElement = document.getElementById(NAVBAR_COLLAPSE_ID);
17
+
18
+ checkNavbarCollapseState(menuCollapseElement);
19
+ }
20
+ }
21
+
22
+ function toggleMenuOnWindowResize() {
23
+ window.addEventListener('resize', windowResizeHandler);
24
+ }
25
+
26
+ export default toggleMenuOnWindowResize;
@@ -0,0 +1,22 @@
1
+ const NAV_GLOBAL_BOTTOM_NAV_ITEMS = document.getElementById('navGlobalBottom'); // ID from the HTML
2
+
3
+ function underlineCurrentSite() {
4
+ // JS is fun!
5
+ if (window.location.pathname === '/') // YOU DON'T NEED TO RUN THIS ON THE HOMEPAGE!!
6
+ return;
7
+ //console.log('execution of further functions has ceased.');
8
+ const NAV_ITEMS = NAV_GLOBAL_BOTTOM_NAV_ITEMS.querySelectorAll('li'); // Navigation HTML structure uses <ul><li>...</li><li>...</li></ul> which is common markup for a Bootrap's nav (from their documentation)
9
+ const url = window.location.pathname.replace(/(^\/|\/$)/g, '');
10
+ //console.log(url);
11
+
12
+ for (let i = 0, len = NAV_ITEMS.length; i < len; i++) {
13
+ let NAV_CATEGORIES = NAV_ITEMS[i].dataset.nav; // Comes from data-set attributes built into the HTML
14
+
15
+ if ( url.search(NAV_CATEGORIES) !== -1 ) {
16
+ let NAV_LINK = NAV_ITEMS[i].querySelector('a'); // Again, pretty standard bootstrap navigation HTML struture to have anchors in the <li>
17
+
18
+ return NAV_LINK.classList.add('header-global__nav-bottom--underlined'); // return breaks the loop and this is the class to underline stuff with
19
+ }
20
+ }
21
+ }
22
+ export default underlineCurrentSite;