kcc-gem-theme-slim 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE.txt +21 -0
- data/README.md +138 -0
- data/_data/cache_bust_css.yml +1 -0
- data/_data/navigation.yml +154 -0
- data/_includes/accordion.html +36 -0
- data/_includes/accordion_path-sorting.html +29 -0
- data/_includes/benefits.html +98 -0
- data/_includes/body.html +10 -0
- data/_includes/breadcrumbs.html +44 -0
- data/_includes/card-section.html +26 -0
- data/_includes/chat-now.html +8 -0
- data/_includes/check-mark.svg +17 -0
- data/_includes/contacts-tan.html +94 -0
- data/_includes/contacts.html +80 -0
- data/_includes/document-head.html +22 -0
- data/_includes/emergency-alerts.html +29 -0
- data/_includes/foot.html +3 -0
- data/_includes/footer.html +271 -0
- data/_includes/hash/theme_hash.yml +1 -0
- data/_includes/header-global.html +49 -0
- data/_includes/hero-slider.html +23 -0
- data/_includes/main-call-to-action.html +32 -0
- data/_includes/nav-global-bottom.html +44 -0
- data/_includes/nav-global-local.html +29 -0
- data/_includes/nav-global-top.html +19 -0
- data/_includes/preconnect.html +14 -0
- data/_includes/scripts/custom.html +2 -0
- data/_includes/scripts/emergency-alerts.html +2 -0
- data/_includes/scripts/google-api.html +2 -0
- data/_includes/scripts/google-noscript.html +9 -0
- data/_includes/scripts/google-tag.html +23 -0
- data/_includes/scripts/kcc-alerts.html +2 -0
- data/_includes/scripts/kcc-mega-nav.html +2 -0
- data/_includes/scripts/kcc-nav.html +2 -0
- data/_includes/scripts/kcc-theme-landing.html +2 -0
- data/_includes/scripts/kcc-theme.html +2 -0
- data/_includes/scripts/table-cdn.html +6 -0
- data/_includes/scripts/translate.html +11 -0
- data/_includes/scripts/vendor-cdn.html +5 -0
- data/_includes/styles/fonts.html +4 -0
- data/_includes/styles/main.html +8 -0
- data/_includes/styles/vendor.html +6 -0
- data/_includes/svg/check.html +20 -0
- data/_includes/svg/check_circle-24px.html +13 -0
- data/_includes/svg/email-24px.html +13 -0
- data/_includes/svg/goals.html +22 -0
- data/_includes/svg/kcc-copy.html +62 -0
- data/_includes/svg/kcc.html +65 -0
- data/_includes/svg/kcc.svg +59 -0
- data/_includes/svg/love.html +13 -0
- data/_includes/svg/place-24px.html +13 -0
- data/_includes/svg/save-money.html +72 -0
- data/_includes/tabbed-content.html +27 -0
- data/_includes/translate.html +3 -0
- data/_layouts/default.html +31 -0
- data/_layouts/hero-banner.html +17 -0
- data/_layouts/hero-slider.html +17 -0
- data/_layouts/markdown.html +13 -0
- data/assets/css/content.css +1 -0
- data/assets/css/kcc-theme.css +1 -0
- data/assets/css/main.css +1 -0
- data/assets/css/translate.css +1 -0
- data/assets/img/ATEC-DSC_1033.jpeg +0 -0
- data/assets/img/DSC_5650_helpful.jpg +0 -0
- data/assets/img/admissions-navigation-menu.jpg +0 -0
- data/assets/img/alert.svg +1 -0
- data/assets/img/arrow-right.svg +1 -0
- data/assets/img/arrow_right_alt.svg +1 -0
- data/assets/img/cavaliers-16x9-thumb.png +0 -0
- data/assets/img/cavaliers-logo.png +0 -0
- data/assets/img/cavaliers-logo_white.png +0 -0
- data/assets/img/d-daun2.jpg +0 -0
- data/assets/img/dbl-next.svg +1 -0
- data/assets/img/dbl-next_mobile.svg +1 -0
- data/assets/img/dbl-prev.svg +1 -0
- data/assets/img/dbl-prev_mobile.svg +1 -0
- data/assets/img/e-tech_a-roberts_mar2016_D41_6690.jpg +0 -0
- data/assets/img/facebook-f_white.svg +1 -0
- data/assets/img/fafsa-early-bird-banner-18.jpg +0 -0
- data/assets/img/go_cavs_20171002_193828-web.jpg +0 -0
- data/assets/img/heading-bg-underline-tan.png +0 -0
- data/assets/img/heading-bg-underline-transparent.png +0 -0
- data/assets/img/heading-bg-underline.png +0 -0
- data/assets/img/home.svg +8 -0
- data/assets/img/instagram-white.svg +1 -0
- data/assets/img/itransfer.png +0 -0
- data/assets/img/kankakee-community-college-word-logo.svg +1 -0
- data/assets/img/kcc-logo-inverse.svg +1 -0
- data/assets/img/kcc-logo.svg +1 -0
- data/assets/img/kcc-placeholder-square.png +0 -0
- data/assets/img/kcc-placeholder.png +0 -0
- data/assets/img/kcc-text-logo.svg +1 -0
- data/assets/img/keyboard_arrow_right.svg +1 -0
- data/assets/img/linkedin-white.svg +1 -0
- data/assets/img/loader.gif +0 -0
- data/assets/img/miguel2.jpg +0 -0
- data/assets/img/news.svg +1 -0
- data/assets/img/pause.svg +1 -0
- data/assets/img/pause_mobile.svg +1 -0
- data/assets/img/pinterest-p_white.svg +1 -0
- data/assets/img/placeholder_16to9.jpg +0 -0
- data/assets/img/placeholder_4by3.jpg +0 -0
- data/assets/img/placeholder_square-1by1.jpg +0 -0
- data/assets/img/placeholder_square.jpg +0 -0
- data/assets/img/play.svg +1 -0
- data/assets/img/play_mobile.svg +1 -0
- data/assets/img/search.svg +1 -0
- data/assets/img/social-icon.svg +1 -0
- data/assets/img/twitter-white.svg +1 -0
- data/assets/img/video.svg +1 -0
- data/assets/img/x.svg +1 -0
- data/assets/img/youtube-white.svg +1 -0
- data/assets/img/yt-loading.png +0 -0
- data/assets/img/zippia.png +0 -0
- data/assets/js/dist/main.bundle.js +1 -0
- data/assets/js/theme/alerts/alerts.js +32 -0
- data/assets/js/theme/alerts/cacheResponse.js +23 -0
- data/assets/js/theme/alerts/campusAlertsSheetsAPI.js +50 -0
- data/assets/js/theme/alerts/checkForPrefersReducedMotion.js +19 -0
- data/assets/js/theme/alerts/contentHashLink.js +97 -0
- data/assets/js/theme/alerts/createAlertsHtml.js +47 -0
- data/assets/js/theme/alerts/getCachedResponse.js +41 -0
- data/assets/js/theme/alerts/parseMarkdownToHTML.js +85 -0
- data/assets/js/theme/alerts/simpleSetSheetParameters.js +23 -0
- data/assets/js/theme/dist/addClassToOpenNavbar.bundle.js +1 -0
- data/assets/js/theme/dist/alerts.bundle.js +1 -0
- data/assets/js/theme/dist/campusAlertsSheetsAPI.bundle.js +1 -0
- data/assets/js/theme/dist/checkForPrefersReducedMotion.bundle.js +1 -0
- data/assets/js/theme/dist/closeMegaNavOnClick.bundle.js +1 -0
- data/assets/js/theme/dist/footerDate.bundle.js +1 -0
- data/assets/js/theme/dist/getCachedResponse.bundle.js +1 -0
- data/assets/js/theme/dist/googleCustomSearch.bundle.js +1 -0
- data/assets/js/theme/dist/kcc-mega-nav.bundle.js +1 -0
- data/assets/js/theme/dist/kcc-theme.bundle.js +1 -0
- data/assets/js/theme/dist/lazyLoad.bundle.js +1 -0
- data/assets/js/theme/dist/sliders.bundle.js +1 -0
- data/assets/js/theme/dist/toggleMenuOnWindowResize.bundle.js +1 -0
- data/assets/js/theme/dist/translate.bundle.js +1 -0
- data/assets/js/theme/dist/underlineCurrentSite.bundle.js +1 -0
- data/assets/js/theme/dist/vendors~campusAlertsSheetsAPI~getCachedResponse.bundle.js +1 -0
- data/assets/js/theme/dist/walkTex.bundle.js +1 -0
- data/assets/js/theme/dist/wrapPowerText.bundle.js +1 -0
- data/assets/js/theme/nav/megaNav/closeMegaNavOnClick.js +50 -0
- data/assets/js/theme/nav/megaNav/googleCustomSearch.js +66 -0
- data/assets/js/theme/nav/megaNav/megaNav.js +26 -0
- data/assets/js/theme/nav/megaNav/searchToggleMegaNav.js +87 -0
- data/assets/js/theme/nav/megaNav/toggleDropdownOnWindowResizeTwo.js +54 -0
- data/assets/js/theme/nav/megaNav/toggleMenuOnWindowResize.js +26 -0
- data/assets/js/theme/nav/megaNav/underlineCurrentSite.js +22 -0
- data/assets/js/theme/src/addClassToOpenNavbar.js +20 -0
- data/assets/js/theme/src/all.js +55 -0
- data/assets/js/theme/src/footerDate.js +7 -0
- data/assets/js/theme/src/lazyLoad.js +13 -0
- data/assets/js/theme/src/sliders.js +75 -0
- data/assets/js/theme/src/test.js +7 -0
- data/assets/js/theme/src/translate.js +58 -0
- data/assets/js/theme/src/walkText.js +27 -0
- data/assets/js/theme/src/wrapPowerText.js +21 -0
- data/assets/js/theme/src/ytEmbed.js +30 -0
- data/assets/scss/0-tools/_bootstrap-overrides.scss +36 -0
- data/assets/scss/0-tools/_cloudcannon.scss +16 -0
- data/assets/scss/0-tools/_google-translate-overrides.scss +114 -0
- data/assets/scss/0-tools/_gsc-overrides.scss +79 -0
- data/assets/scss/0-tools/_vars.scss +72 -0
- data/assets/scss/1-base/_background.scss +5 -0
- data/assets/scss/1-base/_buttons.scss +82 -0
- data/assets/scss/1-base/_header-global.scss +477 -0
- data/assets/scss/1-base/_html.scss +4 -0
- data/assets/scss/1-base/_img.scss +13 -0
- data/assets/scss/1-base/_links.scss +45 -0
- data/assets/scss/1-base/_svg.scss +57 -0
- data/assets/scss/1-base/_typography.scss +304 -0
- data/assets/scss/2-modules/_accordion.scss +43 -0
- data/assets/scss/2-modules/_benefits.scss +251 -0
- data/assets/scss/2-modules/_breadcrumbs.scss +32 -0
- data/assets/scss/2-modules/_card-section.scss +9 -0
- data/assets/scss/2-modules/_contacts.scss +46 -0
- data/assets/scss/2-modules/_footer.scss +83 -0
- data/assets/scss/2-modules/_hero-slider.scss +330 -0
- data/assets/scss/2-modules/_yt-embed.scss +14 -0
- data/assets/scss/3-layout/_background.scss +3 -0
- data/assets/scss/3-layout/_content.scss +37 -0
- data/assets/scss/3-layout/_margins.scss +3 -0
- data/assets/scss/3-layout/_positioning.scss +136 -0
- data/assets/scss/3-layout/_section.scss +22 -0
- data/assets/scss/4-pages/index/_home.scss +15 -0
- data/assets/scss/kcc-theme.scss +37 -0
- data/assets/scss/translate.scss +5 -0
- metadata +273 -0
Binary file
|
Binary file
|
@@ -0,0 +1 @@
|
|
1
|
+
<svg enable-background="new 0 0 416.394 28.682" height="28.682" viewBox="0 0 416.394 28.682" width="416.394" xmlns="http://www.w3.org/2000/svg"><g fill="#0f3b63"><path d="m6.913 9.049h1.943l9.136-8.875h5.133l-11.072 10.615 7.348 11.135h-5.278l-6.025-9.309h-1.943l-1.979 9.309h-4.176l4.623-21.75h4.176z"/><path d="m30.973 20.01h-.087c-1.157 2.031-3.402 2.088-5.171 2.088-3.451 0-5.53-.725-4.655-4.842.777-3.654 2.907-4.67 6.676-4.67 1.856 0 3.677.029 4.184 1.74h.116l.419-1.973c.524-2.465.506-3.334-2.54-3.334-1.595 0-2.901.145-3.321 2.117h-3.654c.943-4.438 4.025-4.611 7.505-4.611 4.872 0 6.742.754 5.657 5.857l-2.028 9.541h-3.654zm-6.259-2.754c-.457 2.145.371 2.348 2.835 2.348 1.943 0 3.401-.174 3.863-2.348.45-2.117-1.104-2.176-2.902-2.176-1.855 0-3.334 0-3.796 2.176z"/><path d="m44.589 6.699-.486 2.291h.116c1.286-2.232 3.163-2.465 5.309-2.465 4.002 0 4.869 1.652 4.08 5.365l-2.133 10.033h-3.655l2.053-9.656c.468-2.205.136-2.959-2.213-2.959-3.19 0-3.945 1.508-4.525 4.234l-1.781 8.381h-3.654l3.236-15.225h3.653z"/><path d="m60.645 12.615h.899l5.52-5.916h4.118l-6.916 7.164 4.782 8.061h-4.408l-3.626-6.815h-.899l-1.449 6.815h-3.654l4.623-21.75h3.654z"/><path d="m81.026 20.01h-.087c-1.157 2.031-3.402 2.088-5.171 2.088-3.451 0-5.53-.725-4.655-4.842.777-3.654 2.907-4.67 6.677-4.67 1.856 0 3.677.029 4.183 1.74h.116l.419-1.973c.524-2.465.506-3.334-2.54-3.334-1.595 0-2.901.145-3.321 2.117h-3.654c.943-4.438 4.025-4.611 7.505-4.611 4.872 0 6.742.754 5.657 5.857l-2.028 9.541h-3.654zm-6.258-2.754c-.457 2.145.371 2.348 2.835 2.348 1.943 0 3.401-.174 3.863-2.348.45-2.117-1.104-2.176-2.902-2.176-1.856 0-3.335 0-3.796 2.176z"/><path d="m93.356 12.615h.899l5.521-5.916h4.118l-6.917 7.164 4.782 8.061h-4.407l-3.627-6.815h-.899l-1.449 6.815h-3.653l4.623-21.75h3.653z"/><path d="m117.955 17.082c-1.018 4.785-3.821 5.016-8.171 5.016-5.829 0-6.623-1.855-5.372-7.742 1.159-5.451 2.535-7.83 8.683-7.83 6.263 0 6.716 1.826 5.304 8.469h-10.469c-.697 3.275-.832 4.32 2.445 4.32 2.03 0 3.445.029 3.926-2.232h3.654zm-2.717-4.408c.666-3.133.251-3.365-2.736-3.365-3.161 0-3.506.668-4.079 3.365z"/><path d="m134.484 17.082c-1.017 4.785-3.82 5.016-8.171 5.016-5.829 0-6.623-1.855-5.372-7.742 1.159-5.451 2.535-7.83 8.683-7.83 6.264 0 6.716 1.826 5.305 8.469h-10.469c-.696 3.275-.831 4.32 2.445 4.32 2.03 0 3.444.029 3.926-2.232h3.653zm-2.716-4.408c.666-3.133.252-3.365-2.735-3.365-3.161 0-3.506.668-4.079 3.365z"/><path d="m162.747 7.453.253-1.189c.536-2.521-.412-2.695-4.066-2.695-4.205 0-5.078.695-5.984 4.959l-1.023 4.812c-.896 4.35-.553 5.191 3.826 5.191 3.365 0 4.897-.115 5.557-3.219l.253-1.189h4.176l-.302 1.422c-1.307 6.553-4.998 6.322-10.441 6.553-7.717.291-8.544-2.232-7.281-8.584l1.061-4.986c1.477-6.962 4.507-8.528 10.915-8.528 5.423 0 8.52.029 7.484 6.264l-.252 1.189z"/><path d="m182.254 14.326c-1.252 5.887-2.465 7.771-8.815 7.771s-6.763-1.885-5.511-7.771c1.258-5.916 2.471-7.801 8.82-7.801 6.352 0 6.763 1.885 5.506 7.801zm-10.679.029c-.862 4.061-.793 4.959 2.455 4.959s3.7-.898 4.563-4.959c.875-4.117.811-5.047-2.438-5.047-3.246.001-3.704.93-4.58 5.047z"/><path d="m190.516 6.699-.469 2.205h.115c1.226-1.943 3.377-2.379 5.291-2.379s4.014.492 3.951 2.697h.115c1.146-2.117 3.357-2.697 5.389-2.697 3.943 0 4.959 1.363 4.164 5.104l-2.189 10.295h-3.654l2.115-9.947c.32-1.914.016-2.668-1.984-2.668-2.959 0-3.822 1.334-4.396 4.031l-1.824 8.584h-3.654l2.115-9.947c.319-1.914.016-2.668-1.985-2.668-2.958 0-3.821 1.334-4.395 4.031l-1.825 8.584h-3.653l3.235-15.225z"/><path d="m217.312 6.699-.469 2.205h.115c1.225-1.943 3.377-2.379 5.291-2.379s4.012.492 3.951 2.697h.115c1.146-2.117 3.357-2.697 5.387-2.697 3.943 0 4.959 1.363 4.164 5.104l-2.188 10.295h-3.654l2.113-9.947c.32-1.914.018-2.668-1.984-2.668-2.957 0-3.82 1.334-4.395 4.031l-1.824 8.584h-3.654l2.115-9.947c.318-1.914.016-2.668-1.986-2.668-2.957 0-3.82 1.334-4.395 4.031l-1.824 8.584h-3.654l3.236-15.225z"/><path d="m247.338 21.924.5-2.348h-.117c-1.271 2.029-3.262 2.521-5.35 2.521-3.045 0-4.854-1.043-4.174-4.379l2.344-11.02h3.654l-2.041 9.6c-.463 2.174-.438 3.016 1.91 3.016 2.814 0 3.965-1.189 4.525-3.828l1.869-8.787h3.654l-3.236 15.225z"/><path d="m261.391 6.699-.486 2.291h.115c1.287-2.232 3.164-2.465 5.309-2.465 4.002 0 4.869 1.652 4.08 5.365l-2.133 10.033h-3.654l2.053-9.656c.469-2.205.137-2.959-2.213-2.959-3.189 0-3.945 1.508-4.525 4.234l-1.781 8.381h-3.656l3.236-15.225h3.655z"/><path d="m275.293 21.924h-3.654l3.236-15.225h3.654zm3.965-18.647h-3.654l.658-3.104h3.654z"/><path d="m280.066 6.699h1.914l.732-3.451h3.654l-.732 3.451h5.828l-.592 2.783h-5.828l-1.658 7.803c-.268 1.391-.402 2.029 1.135 2.029 2.059 0 2.172-1.625 2.51-3.219h3.221c-.924 4.611-2.379 6.002-6.322 6.002-4.002 0-5.023-.928-4.203-4.785l1.664-7.83h-1.914z"/><path d="m299.35 22.533c-1.574 3.451-2.844 6.148-7.107 6.148-.521 0-1.025-.088-1.541-.117l.586-2.754c.256.029.504.086.766.086 2.291 0 3.107-2.203 3.801-3.973h-1.768l-1.781-15.225h3.77l1.102 12.963h.059l5.713-12.963h3.713z"/><path d="m331.379 7.453.254-1.189c.535-2.521-.414-2.695-4.066-2.695-4.205 0-5.078.695-5.984 4.959l-1.023 4.812c-.896 4.35-.553 5.191 3.826 5.191 3.363 0 4.896-.115 5.557-3.219l.252-1.189h4.176l-.301 1.422c-1.307 6.553-4.998 6.322-10.441 6.553-7.717.291-8.545-2.232-7.281-8.584l1.061-4.986c1.476-6.962 4.505-8.528 10.915-8.528 5.422 0 8.52.029 7.484 6.264l-.254 1.189z"/><path d="m350.887 14.326c-1.252 5.887-2.465 7.771-8.814 7.771-6.352 0-6.764-1.885-5.512-7.771 1.258-5.916 2.471-7.801 8.82-7.801 6.351 0 6.764 1.885 5.506 7.801zm-10.678.029c-.863 4.061-.793 4.959 2.455 4.959 3.246 0 3.699-.898 4.562-4.959.875-4.117.811-5.047-2.438-5.047s-3.704.93-4.579 5.047z"/><path d="m356.027 21.924h-3.652l4.623-21.75h3.652z"/><path d="m363.336 21.924h-3.654l4.623-21.75h3.654z"/><path d="m381.533 17.082c-1.018 4.785-3.822 5.016-8.172 5.016-5.828 0-6.623-1.855-5.371-7.742 1.158-5.451 2.533-7.83 8.682-7.83 6.264 0 6.717 1.826 5.305 8.469h-10.469c-.697 3.275-.832 4.32 2.445 4.32 2.029 0 3.445.029 3.926-2.232h3.654zm-2.717-4.408c.666-3.133.25-3.365-2.736-3.365-3.162 0-3.506.668-4.08 3.365z"/><path d="m394.045 19.75h-.086c-1.383 2-3.4 2.348-5.256 2.348-5.221 0-5.219-2.871-4.27-7.336.992-4.67 1.924-8.236 7.58-8.236 2.145 0 3.729.465 4.23 2.465h.117l.342-2.291h3.654l-3.23 15.195c-1.166 5.482-3.182 6.787-8.75 6.787-3.713 0-6.361-.639-5.16-5.191h3.422c-.445 2.088.271 2.406 2.33 2.406 3.104 0 3.904-.637 4.459-3.248zm-5.766-5.887c-.734 3.449-1.16 5.451 2.088 5.451 3.654 0 4.043-1.826 4.812-5.451.691-3.248.475-4.555-2.686-4.555-2.522.001-3.401.727-4.214 4.555z"/><path d="m415.289 17.082c-1.018 4.785-3.822 5.016-8.172 5.016-5.828 0-6.623-1.855-5.371-7.742 1.158-5.451 2.533-7.83 8.682-7.83 6.264 0 6.717 1.826 5.305 8.469h-10.469c-.697 3.275-.832 4.32 2.445 4.32 2.029 0 3.445.029 3.926-2.232h3.654zm-2.717-4.408c.666-3.133.25-3.365-2.736-3.365-3.162 0-3.506.668-4.08 3.365z"/></g></svg>
|
@@ -0,0 +1 @@
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24"><path d="M0 0h24v24H0V0z" fill="none"/><path fill="#666" d="M8.59 16.59L13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.41z"/></svg>
|
@@ -0,0 +1 @@
|
|
1
|
+
<svg enable-background="new 0 0 512 512" height="512" viewBox="0 0 512 512" width="512" xmlns="http://www.w3.org/2000/svg"><g fill="#fff"><path d="m142.394 216.601h48.7v156.684h-48.7zm24.361-77.885c15.567 0 28.219 12.651 28.219 28.226 0 15.588-12.651 28.24-28.219 28.24-15.608 0-28.242-12.652-28.242-28.24 0-15.574 12.633-28.226 28.242-28.226"/><path d="m221.638 216.601h46.707v21.408h.65c6.502-12.316 22.385-25.305 46.076-25.305 49.314 0 58.416 32.454 58.416 74.639v85.941h-48.664v-76.199c0-18.168-.334-41.54-25.302-41.54-25.339 0-29.23 19.792-29.23 40.227v77.512h-48.653z"/></g></svg>
|
Binary file
|
Binary file
|
data/assets/img/news.svg
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
<svg enable-background="new 0 0 30 30" height="30" viewBox="0 0 30 30" width="30" xmlns="http://www.w3.org/2000/svg"><path d="m19.062 15.574v-1.149c0-.316.255-.574.574-.574h4.983c.316 0 .572.258.572.574v1.149c0 .317-.256.575-.572.575h-4.983c-.32 0-.574-.257-.574-.575zm0-4.445v-1.15c0-.317.255-.574.574-.574h4.983c.316 0 .572.257.572.574v1.149c0 .317-.256.577-.572.577h-4.983c-.32.001-.574-.259-.574-.576zm0 8.891v-1.148c0-.319.255-.577.574-.577h4.983c.316 0 .572.258.572.577v1.148c0 .316-.256.575-.572.575h-4.983c-.32 0-.574-.259-.574-.575zm-9.196 0v-1.148c0-.319.256-.577.574-.577h6.513c.318 0 .573.258.573.577v1.148c0 .316-.255.575-.573.575h-6.513c-.317 0-.574-.259-.574-.575zm1.915-8.7h3.833v2.913h-3.833zm-1.341 4.829h6.513c.318 0 .573-.258.573-.575v-5.595c0-.317-.255-.574-.573-.574h-6.513c-.318 0-.574.257-.574.574v5.595c0 .318.257.575.574.575zm17.05 6.744h-19.951c.017-.126.028-.252.028-.383v-15.403h19.923zm-24.982-.383v-13.871h2.76v13.871c-.015.706-2.166.383-2.377.383-.212 0-.383-.171-.383-.383zm26.133-17.701h-21.074c-.999 0-1.851.639-2.167 1.531h-4.04c-.635 0-1.149.516-1.149 1.15v15.02c0 1.483 1.2 2.682 2.681 2.682h25.75c.634 0 1.149-.514 1.149-1.148v-18.087c-.001-.635-.517-1.148-1.15-1.148z" fill="#c61f48"/></svg>
|
@@ -0,0 +1 @@
|
|
1
|
+
<svg enable-background="new 0 0 40 40" viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg"><ellipse cx="20" cy="20" fill="#231f20" opacity=".75" rx="19.56" ry="19.54"/><g fill="#fff"><path d="m26.14 30.11h-3.21c-.34 0-.61-.27-.61-.61v-19c0-.34.27-.61.61-.61h3.21c.34 0 .61.27.61.61v19c0 .34-.27.61-.61.61z"/><path d="m17.07 30.11h-3.21c-.34 0-.61-.27-.61-.61v-19c0-.34.27-.61.61-.61h3.21c.34 0 .61.27.61.61v19c0 .34-.28.61-.61.61z"/></g></svg>
|
@@ -0,0 +1 @@
|
|
1
|
+
<svg enable-background="new 0 0 25 25" viewBox="0 0 25 25" xmlns="http://www.w3.org/2000/svg"><ellipse cx="12.5" cy="12.5" fill="#231f20" opacity=".75" rx="12.06" ry="12.05"/><g fill="#fff"><path d="m16.06 18.74h-1.51c-.34 0-.61-.27-.61-.61v-11.26c0-.34.27-.61.61-.61h1.51c.34 0 .61.27.61.61v11.25c0 .34-.28.62-.61.62z"/><path d="m10.46 18.74h-1.52c-.34 0-.61-.27-.61-.61v-11.26c0-.34.27-.61.61-.61h1.51c.34 0 .61.27.61.61v11.25c.01.34-.27.62-.6.62z"/></g></svg>
|
@@ -0,0 +1 @@
|
|
1
|
+
<svg enable-background="new 0 0 512 512" height="512" viewBox="0 0 512 512" width="512" xmlns="http://www.w3.org/2000/svg"><path d="m256.005 105.086c-83.343 0-150.915 67.566-150.915 150.912 0 61.795 37.159 114.882 90.332 138.223-.425-10.538-.076-23.188 2.627-34.653 2.901-12.252 19.418-82.231 19.418-82.231s-4.821-9.636-4.821-23.878c0-22.363 12.962-39.066 29.104-39.066 13.727 0 20.357 10.311 20.357 22.656 0 13.8-8.8 34.439-13.326 53.557-3.781 16.008 8.026 29.065 23.819 29.065 28.593 0 47.85-36.724 47.85-80.234 0-33.075-22.276-57.832-62.794-57.832-45.778 0-74.297 34.139-74.297 72.271 0 13.147 3.877 22.42 9.949 29.599 2.791 3.298 3.18 4.625 2.168 8.411-.723 2.777-2.386 9.462-3.074 12.111-1.005 3.821-4.102 5.188-7.556 3.776-21.085-8.607-30.905-31.698-30.905-57.654 0-42.869 36.155-94.272 107.856-94.272 57.617 0 95.537 41.693 95.537 86.449 0 59.2-32.912 103.428-81.427 103.428-16.293 0-31.618-8.808-36.868-18.811 0 0-8.761 34.771-10.617 41.484-3.198 11.636-9.462 23.264-15.188 32.328 13.573 4.007 27.91 6.188 42.771 6.188 83.336 0 150.904-67.565 150.904-150.915 0-83.346-67.568-150.912-150.904-150.912z" fill="#fff"/></svg>
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/assets/img/play.svg
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
<svg enable-background="new 0 0 40 40" viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg"><ellipse cx="20" cy="20" fill="#231f20" opacity=".75" rx="19.56" ry="19.54"/><path d="m33.63 19.46-20.02-11.12c-.41-.22-.91.07-.91.54v22.24c0 .47.5.76.91.54l20.02-11.12c.42-.24.42-.84 0-1.08z" fill="#fff"/></svg>
|
@@ -0,0 +1 @@
|
|
1
|
+
<svg enable-background="new 0 0 25 25" viewBox="0 0 25 25" xmlns="http://www.w3.org/2000/svg"><ellipse cx="12.5" cy="12.5" fill="#231f20" opacity=".75" rx="12.06" ry="12.05"/><path d="m20.54 11.96-11.63-6.45c-.41-.23-.91.06-.91.53v12.92c0 .47.5.76.91.54l11.63-6.46c.42-.24.42-.84 0-1.08z" fill="#fff"/></svg>
|
@@ -0,0 +1 @@
|
|
1
|
+
<svg enable-background="new 0 0 128 128" height="128" viewBox="0 0 128 128" width="128" xmlns="http://www.w3.org/2000/svg"><path d="m125.393 115.948c0 2.557-.936 4.771-2.805 6.641-1.87 1.868-4.082 2.804-6.639 2.804-2.657 0-4.871-.936-6.643-2.804l-25.31-25.235c-8.807 6.101-18.62 9.15-29.441 9.15-7.035 0-13.762-1.365-20.182-4.096-6.419-2.732-11.953-6.422-16.602-11.068-4.648-4.65-8.338-10.184-11.068-16.604-2.731-6.42-4.096-13.146-4.096-20.182 0-7.034 1.365-13.761 4.096-20.181 2.73-6.419 6.419-11.954 11.068-16.602 4.649-4.649 10.183-8.338 16.602-11.069 6.42-2.73 13.147-4.095 20.182-4.095 7.034 0 13.761 1.365 20.181 4.095s11.953 6.42 16.603 11.069c4.647 4.648 8.338 10.183 11.069 16.602 2.729 6.42 4.095 13.147 4.095 20.181 0 10.822-3.051 20.637-9.149 29.442l25.312 25.311c1.816 1.818 2.727 4.033 2.727 6.641zm-47.484-38.038c6.468-6.469 9.704-14.254 9.704-23.355 0-9.1-3.236-16.885-9.704-23.354-6.47-6.469-14.253-9.704-23.354-9.704-9.102 0-16.886 3.235-23.355 9.704s-9.703 14.253-9.703 23.354c0 9.102 3.234 16.888 9.703 23.355 6.469 6.468 14.253 9.701 23.355 9.701 9.101 0 16.884-3.233 23.354-9.701z" fill="#fff"/></svg>
|
@@ -0,0 +1 @@
|
|
1
|
+
<svg enable-background="new 0 0 30 30" height="30" viewBox="0 0 30 30" width="30" xmlns="http://www.w3.org/2000/svg"><path d="m25.085 3.863c0-.654-.562-1.181-1.252-1.181h-22.42c-.69 0-1.25.526-1.25 1.181v16.426c0 .654.561 1.184 1.25 1.184h1.251v-16.431h22.421zm.509 19.212h-16.039v-3.75l4.868-4.867c.139-.137.366-.137.505 0l2.745 2.745c.14.138.365.138.504 0l2.046-2.046c.139-.136.365-.139.504 0l4.868 4.866v3.052zm1.009-12.9c.558 0 1.008.45 1.008 1.007v12.902c0 .556-.45 1.008-1.008 1.008h-18.057c-.558 0-1.008-.452-1.008-1.008v-12.902c0-.557.45-1.007 1.008-1.007zm0-2.227h-18.057c-1.784 0-3.236 1.45-3.236 3.233v12.902c0 1.782 1.452 3.233 3.236 3.233h18.056c1.783 0 3.235-1.451 3.235-3.233v-12.901c.001-1.784-1.451-3.234-3.234-3.234z" fill="#c61f48"/></svg>
|
@@ -0,0 +1 @@
|
|
1
|
+
<svg enable-background="new 0 0 512 512" height="512" viewBox="0 0 512 512" width="512" xmlns="http://www.w3.org/2000/svg"><path d="m393.859 170.531c-10.142 4.498-21.039 7.539-32.479 8.905 11.677-6.998 20.642-18.081 24.865-31.286-10.925 6.48-23.028 11.187-35.91 13.723-10.315-10.991-25.015-17.858-41.278-17.858-31.234 0-56.554 25.32-56.554 56.55 0 4.433.501 8.749 1.465 12.888-47-2.358-88.67-24.873-116.562-59.087-4.868 8.354-7.656 18.067-7.656 28.432 0 19.618 9.984 36.929 25.158 47.069-9.271-.293-17.99-2.837-25.615-7.073-.004.236-.005.473-.005.712 0 27.399 19.493 50.256 45.364 55.451-4.746 1.292-9.742 1.982-14.899 1.982-3.645 0-7.187-.354-10.64-1.014 7.196 22.467 28.081 38.816 52.827 39.274-19.354 15.166-43.738 24.208-70.233 24.208-4.564 0-9.066-.269-13.489-.79 25.026 16.045 54.751 25.406 86.688 25.406 104.021 0 160.9-86.171 160.9-160.901 0-2.452-.054-4.891-.163-7.315 11.046-7.974 20.635-17.934 28.216-29.276z" fill="#fff"/></svg>
|
@@ -0,0 +1 @@
|
|
1
|
+
<svg enable-background="new 0 0 32 21.52" height="21.52" viewBox="0 0 32 21.52" width="32" xmlns="http://www.w3.org/2000/svg"><path d="m29.046 18.585h-.659l-7.169-7.167v-1.317l7.169-7.169h.659zm-10.439 0h-15.652v-15.653h15.653v15.653zm10.439-18.261h-.659c-.72 0-1.336.255-1.846.765l-5.323 5.323v-3.48c0-1.44-1.168-2.607-2.61-2.607h-15.653c-1.44 0-2.608 1.167-2.608 2.607v15.653c0 1.444 1.167 2.61 2.608 2.61h15.653c1.442 0 2.61-1.166 2.61-2.61v-3.479l5.323 5.325c.51.509 1.126.764 1.846.764h.659c1.439 0 2.607-1.166 2.607-2.61v-15.653c0-1.441-1.168-2.608-2.607-2.608z" fill="#c61f48"/></svg>
|
data/assets/img/x.svg
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
<svg enable-background="new 0 0 128 128" height="128" viewBox="0 0 128 128" width="128" xmlns="http://www.w3.org/2000/svg"><path d="m114.572 98.99-34.99-34.99 34.99-34.991c4.304-4.303 4.304-11.279.001-15.582s-11.279-4.303-15.583 0l-34.99 34.991-34.992-34.991c-4.303-4.303-11.278-4.303-15.581 0s-4.303 11.278 0 15.581l34.991 34.992-34.992 34.99c-4.303 4.304-4.302 11.28.001 15.583s11.278 4.303 15.581 0l34.992-34.991 34.99 34.99c4.304 4.304 11.28 4.304 15.583.001s4.303-11.279-.001-15.583z" fill="#fff"/></svg>
|
@@ -0,0 +1 @@
|
|
1
|
+
<svg enable-background="new 0 0 512 512" height="512" viewBox="0 0 512 512" width="512" xmlns="http://www.w3.org/2000/svg"><path d="m339.306 134.92h-166.615c-91.187 0-91.187 25.977-91.187 89.865v62.432c0 60.757 12.915 89.864 91.187 89.864h166.614c70.7 0 91.19-17.012 91.19-89.864v-62.432c.001-67.248-3.442-89.865-91.189-89.865zm-118.959 168.537v-98.009l94.064 48.846z" fill="#fff"/></svg>
|
Binary file
|
Binary file
|
@@ -0,0 +1 @@
|
|
1
|
+
/* This is just a placeholder file to prevent 404 errors during development */
|
@@ -0,0 +1,32 @@
|
|
1
|
+
/*
|
2
|
+
// Custom JS | written by https://github.com/wdzajicek
|
3
|
+
// © 2020 Kankakee Community College
|
4
|
+
// =================================================== */
|
5
|
+
// See https://webpack.js.org/guides/code-splitting/ and https://webpack.js.org/guides/lazy-loading/ for info on
|
6
|
+
// Dynamic imports in Webpack 5
|
7
|
+
document.addEventListener('DOMContentLoaded', () => {
|
8
|
+
import(/* webpackChunkName: 'checkForPrefersReducedMotion' */'./checkForPrefersReducedMotion')
|
9
|
+
.then(({ default: checkForPrefersReducedMotion }) => { // Webpack returns the module so the default function must be specified!
|
10
|
+
checkForPrefersReducedMotion();
|
11
|
+
}).then(() => {
|
12
|
+
import(/* webpackChunkName: 'getCachedResponse' */ './getCachedResponse')
|
13
|
+
.then(({ default: getCachedResponse }) => {
|
14
|
+
return getCachedResponse;
|
15
|
+
}).then(getCachedResponse => {
|
16
|
+
import(/* webpackChunkName: 'campusAlertsSheetsAPI' */ './campusAlertsSheetsAPI')
|
17
|
+
.then(({ default: start }) => {
|
18
|
+
! window.sessionStorage.getItem('Alert-Content') ? // Checks if our cached alert is already in sessionStorage
|
19
|
+
gapi.load('client', start) // If not, build the alert from a new Google API response
|
20
|
+
: getCachedResponse(); // Otherwise, build the alert from our cached response
|
21
|
+
});
|
22
|
+
})
|
23
|
+
}).catch(err => {
|
24
|
+
throw new Error(`ERROR!!! \n${err.message}`)
|
25
|
+
});
|
26
|
+
|
27
|
+
//checkForPrefersReducedMotion();
|
28
|
+
|
29
|
+
// ! window.sessionStorage.getItem('Alert-Content') ? // Checks if our cached alert is already in sessionStorage
|
30
|
+
// gapi.load('client', start) // If not, build the alert from a new Google API response
|
31
|
+
// : getCachedResponse(); // Otherwise, build the alert from our cached response
|
32
|
+
});
|
@@ -0,0 +1,23 @@
|
|
1
|
+
/*
|
2
|
+
// Custom JS | written by https://github.com/wdzajicek
|
3
|
+
// © 2020 Kankakee Community College
|
4
|
+
// =================================================== */
|
5
|
+
// Modules' default function stores our Google Sheet response in sessionStorage to be retrieved later
|
6
|
+
// Each key gets set to a column in our data
|
7
|
+
// Each key's value gets set to the corresponding cell in the row below
|
8
|
+
// ====================================================================
|
9
|
+
function cacheResponse(response) { // response from Google API's spreadsheet.values.get() method
|
10
|
+
const VALUES = response.result.values; // This is where the table's data is in a Sheets response in Sheets API V4
|
11
|
+
const TABLE_HEADER_ROW = VALUES[1]; // 2nd row in the sheet (first row is instructions to the user)
|
12
|
+
const TABLE_BODY_ROW = VALUES[2]; // The only row of data in our table
|
13
|
+
|
14
|
+
for (let i = 0, len = TABLE_BODY_ROW.length; i < len; i++ ) {
|
15
|
+
const cell = TABLE_BODY_ROW[i];
|
16
|
+
const column = TABLE_HEADER_ROW[i];
|
17
|
+
|
18
|
+
window.sessionStorage.setItem(column.replace(' ', '-'), cell);
|
19
|
+
}
|
20
|
+
//window.sessionStorage.clear();
|
21
|
+
}
|
22
|
+
|
23
|
+
export default cacheResponse;
|
@@ -0,0 +1,50 @@
|
|
1
|
+
/*
|
2
|
+
// Custom JS | written by https://github.com/wdzajicek
|
3
|
+
// © 2020 Kankakee Community College
|
4
|
+
// =================================================== */
|
5
|
+
// 1. Execute Google API call to grab Google Sheet data from:
|
6
|
+
// https://docs.google.com/spreadsheets/d/1plXBiZY5pVbhNT-mszxEuqCl4zy8wMnz9gXXbbT_yLs/edit#gid=0
|
7
|
+
// 2. Build & inject the alert message into the page
|
8
|
+
// 3. Run the `contentHashLink` module after alert has painted into DOM (and altered documents hight)
|
9
|
+
// 4. Cache the API response in sessionStorage
|
10
|
+
// =================================================== //
|
11
|
+
import setSheetParameters from './simpleSetSheetParameters.js';
|
12
|
+
import createAlertsHtml from './createAlertsHtml.js';
|
13
|
+
import contentHashLink from './contentHashLink.js';
|
14
|
+
import cacheResponse from './cacheResponse.js';
|
15
|
+
|
16
|
+
const SHEET_KEY = '1plXBiZY5pVbhNT-mszxEuqCl4zy8wMnz9gXXbbT_yLs'; // Corresponds to the ID of the Google Sheet
|
17
|
+
const SHEET_TAB = 'Alerts'; // Corresponds to the tab of workbook: either 'Alerts' or 'Alerts Testing' unless you make a new one.
|
18
|
+
const EMERGENCY_ALERT_DIV_ID = 'emergencyAlerts'
|
19
|
+
const SHEET_PARAMS = setSheetParameters(SHEET_KEY, SHEET_TAB); // Configures the Object used for `sheets.spreadsheets.values.get()` parameters
|
20
|
+
const API_PARAMS = { // This is configuration for API call with spreadsheets that are setup as readonly
|
21
|
+
'apiKey': 'AIzaSyCEBsbXfFcdbkASlg-PodD1rT_Fe3Nw62A',
|
22
|
+
'discoveryDocs': ['https://www.googleapis.com/discovery/v1/apis/sheets/v4/rest']
|
23
|
+
};
|
24
|
+
|
25
|
+
function init() {
|
26
|
+
gapi.client.init(API_PARAMS).then(() => { // Executes an API request, and returns a Promise.
|
27
|
+
return gapi.client.sheets.spreadsheets.values.get(SHEET_PARAMS)
|
28
|
+
}).then((response) => {
|
29
|
+
createAlertsHtml(response); // Build the html & inject it into the DOM
|
30
|
+
return response;
|
31
|
+
}).then((response) => {
|
32
|
+
cacheResponse(response); // Cache the Google API response for subsequent page loads in the site
|
33
|
+
}, (err)=> {
|
34
|
+
console.error("Execute error", err);
|
35
|
+
contentHashLink();
|
36
|
+
});
|
37
|
+
}
|
38
|
+
|
39
|
+
function start() {
|
40
|
+
if ( ! document.getElementById(EMERGENCY_ALERT_DIV_ID) )
|
41
|
+
return contentHashLink();
|
42
|
+
|
43
|
+
init();
|
44
|
+
//var t1 = performance.now();
|
45
|
+
//console.info("Call to 'init' took " + (t1 - t0) + " milliseconds.");
|
46
|
+
}
|
47
|
+
// Loads the JavaScript client library and invokes `start` afterwards.
|
48
|
+
// Usage:
|
49
|
+
// gapi.load('client', start);
|
50
|
+
export default start;
|
@@ -0,0 +1,19 @@
|
|
1
|
+
function checkForPrefersReduceMotion() {
|
2
|
+
const reducedMotionMediaQuery = window.matchMedia('(prefers-reduced-motion: reduce)');
|
3
|
+
const userAgent = window.navigator.userAgent;
|
4
|
+
const msExplorer = (userAgent.search(/MSIE/g) !== -1)
|
5
|
+
let reducedMotion;
|
6
|
+
|
7
|
+
reducedMotionMediaQuery.matches ? reducedMotion = true : reducedMotion = false;
|
8
|
+
localStorage.setItem('userPrefersReducedMotion', reducedMotion);
|
9
|
+
|
10
|
+
if (msExplorer) // Bail out at this point if user is in IE
|
11
|
+
return; // IE does NOT support `mediaQueryList.onchange`
|
12
|
+
|
13
|
+
reducedMotionMediaQuery.addEventListener('change', (e) => {
|
14
|
+
reducedMotionMediaQuery.matches ? reducedMotion = true : reducedMotion = false;
|
15
|
+
localStorage.setItem('userPrefersReducedMotion', reducedMotion);
|
16
|
+
});
|
17
|
+
}
|
18
|
+
|
19
|
+
export default checkForPrefersReduceMotion;
|
@@ -0,0 +1,97 @@
|
|
1
|
+
// Custom JS to do cool stuff with BS accordions and tabs by manipulating URL hashes and query's
|
2
|
+
// EXAMPLE:
|
3
|
+
// https://<ORIGIN>/?id=course-withdrawals#tuition-payment-and-deadlines
|
4
|
+
// The above URL will:
|
5
|
+
// 1. Open the #tuition-payment-and-deadlines accordion if it exists
|
6
|
+
// 2. The ?id=course-withdrawals query will:
|
7
|
+
// - look inside the opened accordion for an element with the id 'course-withdrawals', and
|
8
|
+
// - scroll that matching element into the user's viewport (in this case it's a heading within that accordion card)
|
9
|
+
//
|
10
|
+
// This JS will allow us to link to a specific area of content in a page where a traditional hash link wouldn't work
|
11
|
+
// In this case hash links won't work because the element with he matching ID is "stuck" in a closed accordion or tab.
|
12
|
+
//
|
13
|
+
const idRegex = /^id=/g; // Lets just cache these reused regex's here
|
14
|
+
const queryStartRegex = /^\?/g;
|
15
|
+
const endingSlashRegex = /\/$/g;
|
16
|
+
const PREFERS_REDUCED_MOTION_LOCALSTORAGE_KEY = 'userPrefersReducedMotion'; // This localStorage key is set by module: './checkForPrefersReducedMotion.js'
|
17
|
+
const scrollIntoViewOptionsObject = {
|
18
|
+
behavior: 'smooth',
|
19
|
+
block: 'center'
|
20
|
+
}
|
21
|
+
const reducedMotionscrollIntoViewOptionsObject = {
|
22
|
+
block: 'center'
|
23
|
+
}
|
24
|
+
|
25
|
+
function focusElement(el) {
|
26
|
+
const prefersReducedMotion = window.localStorage.getItem(PREFERS_REDUCED_MOTION_LOCALSTORAGE_KEY);
|
27
|
+
|
28
|
+
prefersReducedMotion == 'true' ? el.scrollIntoView(reducedMotionscrollIntoViewOptionsObject) : el.scrollIntoView(scrollIntoViewOptionsObject);
|
29
|
+
return el.focus();
|
30
|
+
}
|
31
|
+
|
32
|
+
function processIdQuery(query, hash) {
|
33
|
+
let id = query.replace(idRegex, '');
|
34
|
+
const parentEl = document.querySelector(hash);
|
35
|
+
const heading = parentEl.querySelector(`#${id}`);
|
36
|
+
|
37
|
+
focusElement(heading);
|
38
|
+
}
|
39
|
+
|
40
|
+
function checkForQuery(query, hash) {
|
41
|
+
query.search(idRegex) !== -1 ?
|
42
|
+
processIdQuery(query, hash)
|
43
|
+
: null;
|
44
|
+
}
|
45
|
+
|
46
|
+
function findContentTarget(hash) {
|
47
|
+
const target = document.querySelector(hash);
|
48
|
+
|
49
|
+
focusElement(target);
|
50
|
+
}
|
51
|
+
|
52
|
+
function checkForMatchingTabOrAccordion(hash) {
|
53
|
+
if ( document.querySelector(`.nav-tabs a[href="${hash}"]`) ) { // Looks for a matching BS4 tab element
|
54
|
+
let tab = $(`.nav-tabs a[href="${hash}"]`); // **SIGH**, BS4 requires JQuery
|
55
|
+
|
56
|
+
tab
|
57
|
+
.on('shown.bs.tab', () => { // Bootstrap 4 method for tab events // Must be defined before the tab is activated
|
58
|
+
window.location.search ?
|
59
|
+
checkForQuery(window.location.search.replace(queryStartRegex, ''), hash)
|
60
|
+
: null; })
|
61
|
+
.tab('show'); // Bootstrap 4 Tab method
|
62
|
+
findContentTarget(`${hash}-label`); // You need to .scrollIntoView() & .focus() on the tab-label which is an <a href="...">. It won't work to do .scrollIntoView() and .focus() on the div
|
63
|
+
} else if ( document.querySelector(`${hash}.collapse`) ) { // Looks for a matching BS4 collapse element
|
64
|
+
let card = $(hash); // **SIGH**, BS4 requires JQuery
|
65
|
+
|
66
|
+
card
|
67
|
+
.on('shown.bs.collapse', () => { // Bootstrap 4 Collapse method // Must be defined before the collapse is activated
|
68
|
+
window.location.search ?
|
69
|
+
checkForQuery(window.location.search.replace(queryStartRegex, ''), hash)
|
70
|
+
: null; })
|
71
|
+
.collapse('show'); // Bootstrap 4 Collapse method
|
72
|
+
findContentTarget(hash);
|
73
|
+
}
|
74
|
+
}
|
75
|
+
|
76
|
+
function checkForHash(e) {
|
77
|
+
if (window.location.hash) {
|
78
|
+
let hash = window.location.hash.replace(endingSlashRegex, '');
|
79
|
+
|
80
|
+
checkForMatchingTabOrAccordion(hash);
|
81
|
+
}
|
82
|
+
return;
|
83
|
+
}
|
84
|
+
|
85
|
+
function initContentHashLink() {
|
86
|
+
checkForHash();
|
87
|
+
window.addEventListener('hashchange', checkForHash, false);
|
88
|
+
}
|
89
|
+
|
90
|
+
function contentHashLink() {
|
91
|
+
if (!document.querySelector('#accordion') && !document.querySelector('.nav.nav-tabs'))
|
92
|
+
return;
|
93
|
+
|
94
|
+
initContentHashLink();
|
95
|
+
}
|
96
|
+
|
97
|
+
export default contentHashLink;
|
@@ -0,0 +1,47 @@
|
|
1
|
+
/*
|
2
|
+
// Custom JS | written by https://github.com/wdzajicek
|
3
|
+
// © 2020 Kankakee Community College
|
4
|
+
// =================================================== */
|
5
|
+
// JS module to build alert message using data from Google Sheets API v4
|
6
|
+
//
|
7
|
+
// This exported module requires you pass it's default-function the `response` object from the API call, as the only argument
|
8
|
+
import contentHashLink from './contentHashLink.js';
|
9
|
+
import parseMarkdownToHTML from './parseMarkdownToHTML.js'; // Parses a simplified markdown into html & creates the paragraph el's with appropriate class
|
10
|
+
//
|
11
|
+
const CAMPUS_ALERTS_DIV_ID_STRING = 'emergencyAlerts'; // ID of the div to house campus alerts - already built into the page.
|
12
|
+
const ALERTS_VISIBLE_CLASS = 'position__offset-alert--visible';
|
13
|
+
|
14
|
+
function injectAlert(target, alert) {
|
15
|
+
target.innerHTML = alert;
|
16
|
+
return target.classList.add(ALERTS_VISIBLE_CLASS);
|
17
|
+
}
|
18
|
+
|
19
|
+
function createAlertsHtml(response) { // Incoming response from our Google Sheet via the Sheets API
|
20
|
+
// This is where the cell values hide in the response object from the Google API.
|
21
|
+
|
22
|
+
let [visibility, allPages, content, expire, start, end] = response.result.values[2]; // The 3rd row has our table's data
|
23
|
+
if (visibility === 'FALSE') return contentHashLink(); // Predefined dropdown options in the Sheet are `'TRUE'` & `'FALSE'`
|
24
|
+
|
25
|
+
const TARGET = document.getElementById(CAMPUS_ALERTS_DIV_ID_STRING); // This targets an element built into the DOM that we inject everything into.
|
26
|
+
let d = new Date;
|
27
|
+
let s = new Date(start);
|
28
|
+
let e = new Date(end);
|
29
|
+
const alertIsActive = expire === 'FALSE' || expire === 'TRUE' && s.getTime() <= d.getTime() && e.getTime() > d.getTime();
|
30
|
+
const indexPageOnly = allPages === 'TRUE' || allPages === 'FALSE' && window.location.pathname == '/';
|
31
|
+
let alert = `
|
32
|
+
<div class="container">
|
33
|
+
<div class="row">
|
34
|
+
<div class="col">
|
35
|
+
<div class="alert alert-warning">
|
36
|
+
${parseMarkdownToHTML(content)}
|
37
|
+
</div>
|
38
|
+
</div>
|
39
|
+
</div>
|
40
|
+
</div>`;
|
41
|
+
|
42
|
+
[d,s,e].map(d => d.setHours(0, 0, 0, 0));
|
43
|
+
alertIsActive && indexPageOnly ? injectAlert(TARGET, alert) : null;
|
44
|
+
return contentHashLink();
|
45
|
+
}
|
46
|
+
|
47
|
+
export default createAlertsHtml;
|
@@ -0,0 +1,41 @@
|
|
1
|
+
/*
|
2
|
+
// Custom JS | written by https://github.com/wdzajicek
|
3
|
+
// © 2020 Kankakee Community College
|
4
|
+
// =================================================== */
|
5
|
+
// Module to retrieve our cached Google Sheet response from sessionStorage
|
6
|
+
// 1. Create an object that replicates an API response where `response.result.values`
|
7
|
+
// is an array containing an array representing each row in the sheet.
|
8
|
+
// 2. Then we pass our mock-sheet response object to the `createAlertsHtml` module to
|
9
|
+
// build and inject the alert into the DOM.
|
10
|
+
import createAlertsHtml from './createAlertsHtml.js';
|
11
|
+
import contentHashLink from './contentHashLink.js';
|
12
|
+
const cache = window.sessionStorage;
|
13
|
+
|
14
|
+
function processCachedResponse(response, callback) {
|
15
|
+
createAlertsHtml(response);
|
16
|
+
return callback();
|
17
|
+
}
|
18
|
+
|
19
|
+
function createCachedResponseObject() {
|
20
|
+
let cachedResponse = { // Reconstructing our own Google Sheet-like response from the sessionStorage items
|
21
|
+
result: {
|
22
|
+
values: [
|
23
|
+
0, // First two rows aren't used by the `createAlertsHtml()` function
|
24
|
+
0,
|
25
|
+
[ cache.Visible, cache.getItem('All-Pages'), cache.getItem('Alert-Content'), cache.getItem('Alert-Expiration'), cache.Start, cache.End ]
|
26
|
+
]
|
27
|
+
}
|
28
|
+
}
|
29
|
+
processCachedResponse(cachedResponse, contentHashLink);
|
30
|
+
}
|
31
|
+
|
32
|
+
function getCachedResponse() {
|
33
|
+
try {
|
34
|
+
createCachedResponseObject();
|
35
|
+
} catch (error) {
|
36
|
+
contentHashLink();
|
37
|
+
console.error(`Error retrieving cached response in sessionStorage:\nName: ${error.name}\nMessage: ${error.message}\n${error}`);
|
38
|
+
}
|
39
|
+
}
|
40
|
+
|
41
|
+
export default getCachedResponse;
|
@@ -0,0 +1,85 @@
|
|
1
|
+
const INLINE_MARKDOWN_ELEMENTS_OBJECT = {
|
2
|
+
'strong': /\*\*([^\*]*)\*\*/g,
|
3
|
+
'em': /_([^_]*)_/g
|
4
|
+
}
|
5
|
+
|
6
|
+
function replaceRegex(string, regex, replacement) {
|
7
|
+
const newString = string.replace(regex, replacement);
|
8
|
+
return newString;
|
9
|
+
}
|
10
|
+
|
11
|
+
function escapeCharacters(string, escapeOption) {
|
12
|
+
const escapedCharactersObject = {
|
13
|
+
'\\*': '__asterisk__',
|
14
|
+
'\\_': '__underscore__',
|
15
|
+
'\\[': '__openBracket__',
|
16
|
+
'\\]': '__closeBracket__',
|
17
|
+
'\\(': '__openParenthesis__',
|
18
|
+
'\\)': '__closeParenthesis__'
|
19
|
+
}
|
20
|
+
|
21
|
+
for (let char in escapedCharactersObject) {
|
22
|
+
if (escapedCharactersObject.hasOwnProperty(char)) {
|
23
|
+
escapeOption === true ? string = replaceRegex(string, char, escapedCharactersObject[char])
|
24
|
+
: escapeOption === false ? string = replaceRegex(string, escapedCharactersObject[char], char.replace(/^\\/g, ''))
|
25
|
+
: null;
|
26
|
+
}
|
27
|
+
}
|
28
|
+
return string;
|
29
|
+
}
|
30
|
+
|
31
|
+
function createAnchorElements(string) {
|
32
|
+
return string = string.replace(/\[(?<linkText>[^\]]*)\]\((?<linkHref>[^\)]*)\)/g, '<a href="$<linkHref>" target="_blank" rel="noopener noreferrer">$<linkText></a>');
|
33
|
+
}
|
34
|
+
|
35
|
+
function replacer(match, p1) {
|
36
|
+
if ( p1 === '' ) { // Filters out the '__' (double underscore) matches.
|
37
|
+
return match;
|
38
|
+
} else {
|
39
|
+
for (var el in INLINE_MARKDOWN_ELEMENTS_OBJECT) {
|
40
|
+
if (INLINE_MARKDOWN_ELEMENTS_OBJECT.hasOwnProperty(el)) {
|
41
|
+
match = match.replace(INLINE_MARKDOWN_ELEMENTS_OBJECT[el], '<' + el + '>$1</' + el + '>' );
|
42
|
+
}
|
43
|
+
}
|
44
|
+
return match;
|
45
|
+
}
|
46
|
+
}
|
47
|
+
|
48
|
+
function createInlineElements(string) {
|
49
|
+
for (var el in INLINE_MARKDOWN_ELEMENTS_OBJECT) {
|
50
|
+
if (INLINE_MARKDOWN_ELEMENTS_OBJECT.hasOwnProperty(el)) {
|
51
|
+
string = string.replace(INLINE_MARKDOWN_ELEMENTS_OBJECT[el], replacer);
|
52
|
+
}
|
53
|
+
}
|
54
|
+
return string;
|
55
|
+
}
|
56
|
+
|
57
|
+
function paragraphReplacer(match, p1) {
|
58
|
+
if ( p1 === '' ) { // Filters out blank lines
|
59
|
+
return match;
|
60
|
+
} else {
|
61
|
+
return match.replace(/^(.*)$/gm, '<p class="typography__alert">$1</p>');
|
62
|
+
}
|
63
|
+
}
|
64
|
+
|
65
|
+
function createParagraphElements(string) {
|
66
|
+
return string = string.replace(/^(.*)$/gm, paragraphReplacer);
|
67
|
+
}
|
68
|
+
|
69
|
+
function parseMarkdownToHTML(string) {
|
70
|
+
const escapedString = escapeCharacters(string, true);
|
71
|
+
const stringWithInlineElements = createInlineElements(escapedString);
|
72
|
+
const stringWithAnchorElements = createAnchorElements(stringWithInlineElements);
|
73
|
+
const stringWithParagraphElements = createParagraphElements(stringWithAnchorElements);
|
74
|
+
const unescapedString = escapeCharacters(stringWithParagraphElements, false);
|
75
|
+
//console.log(unescapedString);
|
76
|
+
return unescapedString;
|
77
|
+
}
|
78
|
+
|
79
|
+
//
|
80
|
+
// USAGE:
|
81
|
+
// import parseMarkdownToHTML from './parseMarkdownToHTML.js';
|
82
|
+
//
|
83
|
+
// parseMarkdownToHTML(stringContainingSimplifiedMarkdown);
|
84
|
+
|
85
|
+
export default parseMarkdownToHTML;
|