1 2 3 4 5 6<!DOCTYPE html> 7<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US"> 8 9
10<script> 11 var jsPageName = "Login"; // pass strPageName to JavaScript, used in function setPageName() [accessibility.js] 12 var jsAjaxRequest = ('0' === '1') ? true : false; 13</script>
13 14 15 <!-- AX != 1 --> 16 17
17<script> 18 var url = new URL(location.href); 19 history.replaceState({type: ""} , '', url.pathname + url.search); 20 </script>
20 21 22 23 24 <head> 25 <!-- META TAGS --> 26 <meta charset="utf-8"> 27 <meta name="viewport" content="width=device-width, initial-scale=1"> 28 29 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1,requiresActiveX=true"> 30 <meta name="apple-itunes-app" content="app-id=566688504, affiliate-data=myAffiliateData, app-argument=myURL"> 31 32 <title>Login</title> 33 <meta name="description" content="The campus engagement platform for Springfield College - Powered by CampusGroups."> 34 <meta name="title" content="Springfield College"> 35 36 37 38 <!-- CSS IMPORT --> 39 40 41 <!-- FONT FOR DEV --> 42 <link href="/css/fonts/open-sans.css" rel="stylesheet" type="text/css" > 43 44 <!-- FAVICON --> 45 <link rel="icon" type="images/x-icon" href="/upload/springfield/2024/s1_image_upload_599692_Gulick_Triangle25x25px_102310142.png"> 46 <link rel="shortcut icon" type="images/x-icon" href="/upload/springfield/2024/s1_image_upload_599692_Gulick_Triangle25x25px_102310142.png"> 47 48 <!-- JQUERY UI --> 49 <link rel="stylesheet" type="text/css" href="/bower_components/jquery-ui/themes/base/jquery-ui.min.css"> 50 51 <!-- AUTOCOMPLETE --> 52 <link rel="stylesheet" type="text/css" href="/js/jquery/jquery.autocomplete.css"> 53 54 <!-- BOOTSTRAP & GLYPHICONS --> 55 <link rel="stylesheet" type="text/css" href="/bower_components/bootstrap/dist/css/bootstrap.min.css"> 56 <link rel="stylesheet" type="text/css" href="/static/plugins/bootstrap-multiselect/dist/css/bootstrap-multiselect.css"> 57 <link rel="stylesheet" type="text/css" href="/glyphicons-pro/css/glyphicons-filetypes.css"> 58 59 <!-- THICKBOX --> 60 <link rel="stylesheet" type="text/css" href="/js/thickbox/thickbox.css"> 61 62 63 <!-- JQUERY & FONT --> 64
64<script src="/bower_components/jquery/dist/jquery.min.js"></script>
64 65
65<script src="/bower_components/jquery-ui/jquery-ui.min.js"></script>
65 66 67 <!-- BOOTSTRAP --> 68
68<script src="/bower_components/bootstrap/dist/js/bootstrap.min.js"></script>
68 69
69<script src="/static/plugins/bootstrap-multiselect/dist/js/bootstrap-multiselect.js"></script>
69 70
70<script src="/static/js/bootstrap.cg.js"></script>
70 71 72
72<script type="text/javascript" src="/js/accessibility.js?v=20251112.1"></script>
72 73
73<script type="text/javascript" src="/js/scripts.js?v=20251007.1"></script>
73 74 75 <link rel="stylesheet" type="text/css" href="/bower_components/mdi/css/materialdesignicons.min.css"> 76 <link rel="stylesheet" type="text/css" href="/static/css/materialdesigniconscustom.css"> 77 78 <link rel="stylesheet" type="text/css" href="/static/css/header.css?v=20220425.1"> 79 <link rel="stylesheet" type="text/css" href="/css/bootstrap-customV.css?v=20250729.1"> 80 81 82 </head> 83 84 <body class="body-background " data-menu=""> 85 86 <!-- SKIP links - skip to top of main content --> 87 <div id="div-skip-links" class="skip-link-container-mobile"> 88 89 <span style="padding: 5px"><a id="a-skip-to-main-content" href="javascript:void('skip-to-main-content');" class="skip-link" onclick="setFocusToContent(true);" aria-label="Skip to Main Content">Skip to Main Content</a></span> 90 91 <span id="span-skip-to-left-navigation" style="padding: 5px; display: none;"><a id="a-skip-to-left-navigation" href="javascript:void('skip-to-navigation');" class="skip-link" onclick="setFocusToSidebar();" aria-label="Skip to Navigation">Skip to Navigation</a></span> 92 93 <!-- ACCESSIBILITY --> 94 95 96
96<script> 97 // if we're on mobile we will not enable the skip links 98 const isMobileDevice = /Mobi/i.test(window.navigator.userAgent); 99 // console.log('> isMobileDevice=' + isMobileDevice); 100 101 $(window).on('load', function () { 102 if (!isMobileDevice) { 103 var elem = document.getElementById('div-skip-links'); 104 if (typeof elem !== undefined) { 105 elem.classList.remove('skip-link-container-mobile'); 106 elem.classList.add('skip-link-container'); 107 } 108 } 109 }); 110 </script>
110 111 </div> 112 113 <!-- School custom code --> 114
114<script> 115// START: Put Arrow On Reservation Form Submit Button 116$(document).ready(function(){ 117 // Only run on pages with the URL "/survey?answerer_uid=" 118 if(window.location.pathname === "/survey" && window.location.search.indexOf("answerer_uid=") !== -1){ 119 // Find the Submit button using its name attribute 120 var $submitButton = $('input[name="Submit"]'); 121 122 // Only proceed if the button exists 123 if ($submitButton.length) { 124 // Create an arrow element with a downward arrow Unicode character 125 var $arrow = $('<div id="animated-arrow">↓</div>'); 126 127 // Basic arrow styles: adjust font size, position, and z-index as needed 128 $arrow.css({ 129 'position': 'absolute', 130 'font-size': '40px', 131 'z-index': 1000, 132 'color': '#f00' // adjust color as needed 133 }); 134 135 // Variable to store the base top position of the arrow 136 var baseTop = 0; 137 138 // Function to position the arrow relative to the Submit button 139 function positionArrow() { 140 var offset = $submitButton.offset(); 141 var arrowLeft = offset.left + ($submitButton.outerWidth() / 2) - 10; 142 baseTop = offset.top - 50; // adjust to position above the button 143 $arrow.css({ 144 'left': arrowLeft, 145 'top': baseTop 146 }); 147 } 148 149 // Initially position the arrow 150 positionArrow(); 151 152 // Append the arrow to the body 153 $('body').append($arrow); 154 155 // Animate the arrow: a simple up and down loop 156 (function animateArrow() { 157 $arrow.animate({ top: baseTop - 10 }, 500) 158 .animate({ top: baseTop }, 500, animateArrow); 159 })(); 160 161 // Reposition the arrow when the window is resized or scrolled 162 $(window).on('resize scroll', function() { 163 positionArrow(); 164 }); 165 } 166 } 167}); 168// END: Put Arrow On Reservation Form Submit Button 169 170// Wait until all the CG processing is done (this is after load is complete) 171$(window).ajaxComplete(function() { 172 173 //============================================= 174 // START: REMOVE UNWANTED NAVIGATION 175 //============================================= 176 // Remove Change Password from menu 177 $("ul.dropdown-menu.dropdown-menu-right > li > a").remove(":contains('Password')"); 178 // Remove CG Communities from menu 179 $("ul.dropdown-menu.dropdown-menu-right > li > a").remove(":contains('Users Community')"); 180 // Remove Change Password from profile menu 181 $("#side-menu > li > a").remove(":contains('Password')"); 182 // Remove "My Schedule" from navigation 183 $('li a[data-pendo="my_schedule"]').closest('li').remove(); 184 // Remove More from navigation (contains inbox and my transactions) 185 $('li a#a-left-nav-more').closest('li').remove(); 186 //============================================= 187 // END: REMOVE UNWANTED NAVIGATION 188 //============================================= 189 190 //============================================= 191 // START: FIX CALENDAR WEEK VIEW 192 //============================================= 193 // Create a function so it can be re-called when the window changes size 194 function adjustSidebarRows() { 195 // Check if we are on the "web_app" page and the URL contains "view=day" so only applies to this page 196 if (window.location.pathname === '/web_app' && window.location.search.includes('view=day')) { 197 // Select all div elements with the room names using the specified classes (even or odd) 198 $('.rct-sidebar-row.rct-sidebar-row-even, .rct-sidebar-row.rct-sidebar-row-odd').each(function() { 199 // Check the room text length in the anchor tags and add ellipsis if necessary 200 $(this).find('a').each(function() { 201 var text = $(this).text(); 202 if (text.length > 20) { 203 var start = text.slice(0, 12); // Get the first 12 characters 204 var end = text.slice(-5); // Get the last 5 characters 205 var newText = start + '...' + end; // Combine with ellipsis in the middle 206 $(this).text(newText); // Set the new shortened text 207 } 208 }); 209 }); 210 } 211 } 212 213 // Apply adjustments on page load 214 adjustSidebarRows(); 215 216 // Reapply adjustments when the window is resized 217 $(window).resize(function() { 218 setTimeout(function() { 219 adjustSidebarRows(); 220 }, 100); // Delay of 100ms to allow other resize events to finish 221 });
222 //============================================= 223 // END: FIX CALENDAR WEEK VIEW 224 //============================================= 225 226 //============================================= 227 // START: MAKE FIRST PAGE IN WEBSITE TEMPLATE ONLY DUPLICATABLE & REMOVE CREATE PAGE BUTTON 228 //============================================= 229 230 // Check if the current URL contains "web_site" and has the URL variable "edittemplate=true" 231 if (window.location.href.indexOf("web_site") !== -1 && window.location.href.indexOf("edittemplate=true") === -1) { 232 233 // Remove Create Page From Website 234 $("a[onclick=\"openModal('/create_web_page?ax=1&theme_id=1194');\"]").remove(); 235 236 // Remove Create Page from the Menu item on the page 237 $('a.btn.btn-grey[onclick*="createWebPageForMenu"]').remove(); 238 239 // Find all 'li' children in the 'ul' with ID 'divAllItems' that contain an anchor tag 240 // with text equal to or starting with "Site Template" 241 $('#divAllItems li').filter(function() { 242 return $(this).find('a').filter(function() { 243 var linkText = $(this).text() 244 .replace(/\u00a0/g, ' ') 245 .replace(/\s+/g, ' ') 246 .trim(); 247 248 return linkText.indexOf("Site Template") === 0; 249 }).length > 0; 250 }).each(function() { 251 252 // Change the background color to yellow so I know what I've selected 253 $(this).css('background-color', 'yellow'); 254 255 // Remove all dropdown options except the one that contains "Duplicate" 256 $(this).find('.dropdown-menu li').each(function() { 257 if ($(this).text().trim().toLowerCase().indexOf('duplicate') === -1) { 258 $(this).remove(); 259 } 260 }); 261 262 // Remove the 'Edit' node based on text content 263 $(this).find('a.btn.btn-grey').filter(function() { 264 return $(this).text().trim() === "Edit"; 265 }).remove(); 266 267 // Remove the specified 'Drag' node 268 $(this).find('a.btn.btn-grey.handle[href="javascript:void(0);"]').remove(); 269 270 // Uncheck and disable the checkbox with the label "Publish" 271 $(this).find('input[type="checkbox"]').filter(function() { 272 return $(this).next('label').text().trim() === "Publish"; 273 }).prop('checked', false).prop('disabled', true); 274 275 // Check and disable the checkbox with the label "Hide in Menu" 276 $(this).find('input[type="checkbox"]').filter(function() { 277 return $(this).next('label').text().trim() === "Hide in Menu"; 278 }).prop('checked', true).prop('disabled', true); 279 280 // Remove all the links on the page title so you can't change the name 281 $(this).find('h4.media-heading a').each(function() { 282 $(this).contents().unwrap(); 283 }); 284 285 // Remove the edit pencil near the name 286 $(this).find('h4.media-heading span.small.mdi.mdi-pencil.aria-decorative').remove(); 287 288 // Disable the checkbox on the left under the page name 289 $(this).find('input[type="checkbox"][name="checkbox_listing"]').prop('disabled', true); 290 291 // Disable the home radio button 292 $(this).find('input[type="radio"][name="home"]').prop('disabled', true); 293 294 // Disable the menu selection Select menu 295 $(this).find('select[name="web_menus"]').prop('disabled', true); 296 }); 297 } 298 299 //============================================= 300 // END: MAKE FIRST PAGE IN WEBSITE TEMPLATE ONLY DUPLICATABLE 301 //============================================= 302 303 //============================================= 304 // START: HIDE SECTIONS & FILTER ACCOUNT TYPE CHECKBOXES INSIDE DIRECTORY IFRAME 305 //============================================= 306 var $iframe = $("iframe"); 307 if ($iframe.length && !$iframe.data("iframeObserverAttached")) { 308 // Mark that the observer has been attached so it's not reattached on subsequent ajaxComplete events. 309 $iframe.data("iframeObserverAttached", true); 310 $iframe.one("load", function() { 311 try { 312 var iframeUrl = $iframe.prop("contentWindow").location.href; 313 // Build the target URL dynamically using the current subdomain. 314 var currentSubdomain = window.location.hostname; 315 var targetUrl = "https://" + currentSubdomain + "/webapp/directory"; 316 317 // Ensure the iframe URL starts with our target URL. 318 if (iframeUrl.indexOf(targetUrl) === 0) { 319 var $iframeDoc = $($iframe.prop("contentWindow").document); 320 321 // Define your modification functions. 322 function hideUnwantedSections() { 323 var hideStrings = [ 324 "Job Title", 325 "Year of Graduation", 326 "Looking For", 327 "City", 328 "State", 329 "Company" 330 ]; 331 $iframeDoc.find("div.section.bordered").each(function() { 332 var text = $(this).text(); 333 for (var i = 0; i < hideStrings.length; i++) { 334 if (text.indexOf(hideStrings[i]) !== -1) { 335 $(this).hide(); 336 console.log("Hid section containing: " + hideStrings[i]); 337 break; 338 } 339 } 340 }); 341 } 342 343 function filterAccountType() { 344 var allowedAccountTypes = ["Student", "Staff", "Faculty", "Emeritus"]; 345 // Locate the container that includes "Account Type" 346 var $accountTypeContainer = $iframeDoc.find("div.section.bordered").filter(function() { 347 return $(this).text().indexOf("Account Type") !== -1; 348 }); 349 if ($accountTypeContainer.length) { 350 // If the "See more" button is visible, click it. 351 var $seeMoreButton = $accountTypeContainer.find("button.see-more-button"); 352 if ($seeMoreButton.length && $seeMoreButton.is(":visible")) { 353 $seeMoreButton.trigger("click"); 354 console.log("Triggered 'See more' button."); 355 } 356 // Allow time for the list to expand, then filter the checkboxes. 357 setTimeout(function() { 358 $accountTypeContainer.find("ul.default > li").each(function() { 359 var labelText = $(this).find("label").text().trim(); 360 if (allowedAccountTypes.indexOf(labelText) === -1) { 361 $(this).hide(); 362 console.log("Hid account type: " + labelText); 363 } 364 }); 365 // Remove the "See more" button. 366 $accountTypeContainer.find("button.see-more-button").remove(); 367 }, 500); 368 } 369 } 370 371 // Create a function to apply your changes with the observer temporarily disconnected. 372 function applyModifications() { 373 observer.disconnect(); // Temporarily disconnect to prevent infinite loops. 374 hideUnwantedSections(); 375 filterAccountType(); 376 // Reattach the observer after a short delay. 377 setTimeout(function() { 378 observer.observe($iframeDoc[0].body, { 379 childList: true, 380 subtree: true 381 }); 382 }, 500); 383 } 384 385 // Run the modifications initially. 386 hideUnwantedSections(); 387 filterAccountType(); 388 389 // Set up the MutationObserver.
390 var observer = new MutationObserver(function(mutations) { 391 applyModifications(); 392 }); 393 394 observer.observe($iframeDoc[0].body, { 395 childList: true, 396 subtree: true 397 }); 398 399 console.log("MutationObserver attached to iframe content."); 400 } else { 401 console.log("Iframe URL does not match target: " + iframeUrl); 402 } 403 } catch (err) { 404 console.error("Error accessing iframe content: ", err); 405 } 406 }); 407 } 408 //============================================= 409 // END: HIDE SECTIONS & FILTER ACCOUNT TYPE CHECKBOXES INSIDE DIRECTORY IFRAME 410 //============================================= 411}); 412</script>
412 413 414<style> 415.card-header h2.h4.header-cg--h4.cg-custom-content{margin-top:1px !important;margin-bottom:1px !important;} 416.card-header{ 417border-radius:6px 6px 0 0; 418box-shadow: 0 2px 2px rgba(204, 197, 185, 0.5); 419-webkit-box-shadow: 0 2px 2px rgba(204, 197, 185, 0.5); 420 -moz-box-shadow: 0 2px 2px rgba(204, 197, 185, 0.5); 421 background-color: #9e2f35; 422 font-family: 'raleway'; 423 background: linear-gradient(-90deg, rgba(1, 1, 1, 0.01) 0%, rgba(1, 1, 1, 0.01) 55%, transparent 55%, transparent 100%), linear-gradient(90deg, rgba(1, 1, 1, 0.07) 0%, rgba(1, 1, 1, 0.07) 19%, transparent 19%, transparent 100%), linear-gradient(112.5deg, rgba(0, 0, 0, 0.04) 0%, rgba(0, 0, 0, 0.04) 37%, transparent 37%, transparent 100%), linear-gradient(67.5deg, rgba(1, 1, 1, 0.05) 0%, rgba(1, 1, 1, 0.05) 81%, transparent 81%, transparent 100%), linear-gradient(22.5deg, rgba(0, 0, 0, 0.02) 0%, rgba(0, 0, 0, 0.02) 16%, transparent 16%, transparent 100%), linear-gradient(45deg, transparent 0%, transparent 31%, transparent 31%, transparent 100%), linear-gradient(135deg, rgba(1, 1, 1, 0.04) 0%, rgba(1, 1, 1, 0.04) 8%, transparent 8%, transparent 100%), linear-gradient(112.5deg, rgba(0, 0, 0, 0.03) 0%, rgba(0, 0, 0, 0.03) 81%, transparent 81%, transparent 100%), linear-gradient(157.5deg, rgba(0, 0, 0, 0.05) 0%, rgba(0, 0, 0, 0.05) 17%, transparent 17%, transparent 100%), linear-gradient(157.5deg, rgba(1, 1, 1, 0.02) 0%, rgba(1, 1, 1, 0.02) 76%, transparent 76%, transparent 100%), linear-gradient(22.5deg, rgba(1, 1, 1, 0.06) 0%, rgba(1, 1, 1, 0.06) 38%, transparent 38%, transparent 100%), linear-gradient(135deg, rgba(1, 1, 1, 0.01) 0%, rgba(1, 1, 1, 0.01) 92%, transparent 92%, transparent 100%), linear-gradient(157.5deg, rgba(1, 1, 1, 0.03) 0%, rgba(1, 1, 1, 0.03) 95%, transparent 95%, transparent 100%), linear-gradient(135deg, rgba(1, 1, 1, 0.05) 0%, rgba(1, 1, 1, 0.05) 95%, transparent 95%, transparent 100%), linear-gradient(0deg, rgba(1, 1, 1, 0.01) 0%, rgba(1, 1, 1, 0.01) 91%, transparent 91%, transparent 100%), linear-gradient(90deg, rgba(0, 0, 0, 0.04) 0%, rgba(0, 0, 0, 0.04) 5%, transparent 5%, transparent 100%), linear-gradient(22.5deg, rgba(0, 0, 0, 0.03) 0%, rgba(0, 0, 0, 0.03) 36%, transparent 36%, transparent 100%), linear-gradient(45deg, rgba(1, 1, 1, 0.01) 0%, rgba(1, 1, 1, 0.01) 20%, transparent 20%, transparent 100%), linear-gradient(0deg, rgba(1, 1, 1, 0) 0%, rgba(1, 1, 1, 0) 41%, transparent 41%, transparent 100%), linear-gradient(157.5deg, rgba(0, 0, 0, 0.02) 0%, rgba(0, 0, 0, 0.02) 93%, transparent 93%, transparent 100%), linear-gradient(90deg, rgba(1, 1, 1, 0.06) 0%, rgba(1, 1, 1, 0.06) 18%, transparent 18%, transparent 100%), linear-gradient(67.5deg, rgba(1, 1, 1, 0.04) 0%, rgba(1, 1, 1, 0.04) 10%, transparent 10%, transparent 100%), linear-gradient(22.5deg, rgba(0, 0, 0, 0.02) 0%, rgba(0, 0, 0, 0.02) 47%, transparent 47%, transparent 100%), linear-gradient(112.5deg, rgba(0, 0, 0, 0.06) 0%, rgba(0, 0, 0, 0.06) 49%, transparent 49%, transparent 100%), linear-gradient(67.5deg, rgba(1, 1, 1, 0.03) 0%, rgba(1, 1, 1, 0.03) 30%, transparent 30%, transparent 100%), linear-gradient(112.5deg, rgba(0, 0, 0, 0.07) 0%, rgba(0, 0, 0, 0.07) 26%, transparent 26%, transparent 100%), linear-gradient(45deg, rgba(0, 0, 0, 0.03) 0%, rgba(0, 0, 0, 0.03) 24%, transparent 24%, transparent 100%), linear-gradient(135deg, rgba(0, 0, 0, 0.04) 0%, rgba(0, 0, 0, 0.04) 93%, transparent 93%, transparent 100%), linear-gradient(45deg, rgba(1, 1, 1, 0.03) 0%, rgba(1, 1, 1, 0.03) 82%, transparent 82%, transparent 100%), linear-gradient(90deg, rgba(1, 1, 1, 0) 0%, rgba(1, 1, 1, 0) 4%, transparent 4%, transparent 100%), linear-gradient(157.5deg, rgba(1, 1, 1, 0.05) 0%, rgba(1, 1, 1, 0.05) 22%, transparent 22%, transparent 100%), linear-gradient(45deg, rgba(0, 0, 0, 0.05) 0%, rgba(0, 0, 0, 0.05) 19%, transparent 19%, transparent 100%), linear-gradient(45deg, rgba(1, 1, 1, 0.04) 0%, rgba(1, 1, 1, 0.04) 14%, transparent 14%, transparent 100%), linear-gradient(157.5deg, rgba(0, 0, 0, 0.01) 0%, rgba(0, 0, 0, 0.01) 21%, transparent 21%, transparent 100%), linear-gradient(-20deg, #c5002e, #ff325f);} 424 425/**! 01. Reset **/ 426body { 427 -webkit-font-smoothing: antialiased; 428 -moz-osx-font-smoothing: grayscale; 429 font-family: 'Open Sans', 'Helvetica', 'Arial', sans-serif; 430 font-weight: 400; 431} 432h1, 433h2, 434h3, 435h4, 436h5, 437h6, 438.h1, 439.h2, 440.h3, 441.h4, 442.h5, 443.h6 { 444 font-family: 'Open Sans', 'Helvetica', 'Arial', sans-serif; 445 font-weight: 300; 446 font-variant-ligatures: common-ligatures; 447 margin-top: 0;
448 margin-bottom: 0; 449} 450h1, 451.h1 { 452 font-size: 3.14285714em; 453 line-height: 1.31818182em; 454} 455h2, 456.h2 { 457 font-size: 2.35714286em; 458 line-height: 1.36363636em; 459} 460h3, 461.h3 { 462 font-size: 1.78571429em; 463 line-height: 1.5em; 464} 465h4, 466.h4 { 467 font-size: 1.35714286em; 468 line-height: 1.36842105em; 469} 470h5, 471.h5 { 472 font-size: 1em; 473 line-height: 1.85714286em; 474} 475h6, 476.h6 { 477 font-size: 0.85714286em; 478 line-height: 2.16666667em; 479} 480 481 482strong { 483 font-weight: 600; 484} 485hr { 486 margin: 1.85714286em 0; 487 border-color: #fafafa; 488} 489 490h2.card-header, h3.card-header, h4.card-header{color:white;} 491 492/**! 06. Buttons **/ 493.btn { 494 font-family: 'Open Sans', 'Helvetica', 'Arial', sans-serif; 495 transition: 0.1s linear; 496 -webkit-transition: 0.1s linear; 497 -moz-transition: 0.1s linear; 498 border-radius: 6px; 499 padding-top: 0.46428571em; 500 padding-bottom: 0.46428571em; 501 padding-right: 2.78571429em; 502 padding-left: 2.78571429em; 503 border: 1px solid #252525; 504 border-width: 1px; 505 font-size: inherit; 506 line-height: 1.85714286em; 507} 508.btn .btn__text, 509.btn i { 510 color: #252525; 511 border-color: #252525; 512 font-weight: 700; 513 font-size: 0.85714286em; 514} 515.btn[class*='col-'] { 516 margin-left: 0; 517 margin-right: 0; 518} 519.btn:active { 520 box-shadow: none; 521 -webkit-box-shadow: none; 522} 523.btn.bg--facebook, 524.btn.bg--twitter, 525.btn.bg--instagram, 526.btn.bg--googleplus, 527.btn.bg--pinterest, 528.btn.bg--dribbble, 529.btn.bg--behance, 530.btn.bg--dark { 531 border-color: rgba(0, 0, 0, 0) !important; 532} 533.btn.bg--facebook .btn__text, 534.btn.bg--twitter .btn__text, 535.btn.bg--instagram .btn__text, 536.btn.bg--googleplus .btn__text, 537.btn.bg--pinterest .btn__text, 538.btn.bg--dribbble .btn__text, 539.btn.bg--behance .btn__text, 540.btn.bg--dark .btn__text { 541 color: #fff; 542} 543.btn.bg--facebook .btn__text i, 544.btn.bg--twitter .btn__text i, 545.btn.bg--instagram .btn__text i, 546.btn.bg--googleplus .btn__text i, 547.btn.bg--pinterest .btn__text i, 548.btn.bg--dribbble .btn__text i, 549.btn.bg--behance .btn__text i, 550.btn.bg--dark .btn__text i { 551 color: #fff; 552} 553.btn.bg--facebook:hover, 554.btn.bg--twitter:hover, 555.btn.bg--instagram:hover, 556.btn.bg--googleplus:hover, 557.btn.bg--pinterest:hover, 558.btn.bg--dribbble:hover, 559.btn.bg--behance:hover, 560.btn.bg--dark:hover { 561 opacity: .9; 562}
563.btn.bg--error { 564 background: #e23636; 565 border-color: #e23636 !important; 566} 567.btn.bg--error:hover { 568 background: #e54c4c; 569 border-color: #e54c4c !important; 570 color: #fff !important; 571} 572.btn.bg--error .btn__text { 573 color: #fff; 574} 575.btn.bg--error .btn__text i { 576 color: #fff; 577} 578@media all and (min-width: 768px) { 579 .btn + .btn { 580 margin-left: 1.85714286em; 581 } 582} 583.btn:first-child { 584 margin-left: 0; 585} 586.btn:last-child { 587 margin-right: 0; 588} 589.btn--xs { 590 padding-top: 0; 591 padding-bottom: 0; 592 padding-right: 1.39285714em; 593 padding-left: 1.39285714em; 594} 595.btn--sm { 596 padding-top: 0.30952381em; 597 padding-bottom: 0.30952381em; 598 padding-right: 1.85714286em; 599 padding-left: 1.85714286em; 600} 601.btn--lg { 602 padding-top: 0.58035714em; 603 padding-bottom: 0.58035714em; 604 padding-right: 3.48214286em; 605 padding-left: 3.48214286em; 606} 607.btn--lg .btn__text { 608 font-size: 1.07142857em; 609} 610.btn--primary, 611.btn--primary:visited { 612 background: #4a90e2; 613 border-color: #4a90e2; 614} 615.btn--primary .btn__text, 616.btn--primary:visited .btn__text { 617 color: #fff; 618} 619.btn--primary .btn__text i, 620.btn--primary:visited .btn__text i { 621 color: #fff; 622} 623.btn--primary:hover { 624 background: #609de6; 625} 626.btn--primary:active { 627 background: #3483de; 628} 629.btn--primary-1, 630.btn--primary-1:visited { 631 background: #31639c; 632 border-color: #31639c; 633} 634.btn--primary-1 .btn__text, 635.btn--primary-1:visited .btn__text { 636 color: #fff; 637} 638.btn--primary-1:hover { 639 background: #376faf; 640} 641.btn--primary-1:active { 642 background: #2b5789; 643}
644.btn--primary-2, 645.btn--primary-2:visited { 646 background: #465773; 647 border-color: #465773; 648} 649.btn--primary-2 .btn__text, 650.btn--primary-2:visited .btn__text { 651 color: #fff; 652} 653.btn--primary-2:hover { 654 background: #506383; 655} 656.btn--primary-2:active { 657 background: #3c4b63; 658} 659.btn--secondary { 660 background: #fafafa; 661 border-color: #fafafa; 662} 663.btn--secondary:hover { 664 background: #ffffff; 665} 666.btn--secondary:active { 667 background: #f5f5f5; 668} 669.btn--white { 670 background: #fff; 671 color: #252525; 672 border-color: #fff; 673} 674.btn--white i { 675 color: #252525; 676} 677.btn--transparent { 678 background: none; 679 border-color: rgba(0, 0, 0, 0); 680 padding-left: 0; 681 padding-right: 0; 682} 683.btn--transparent.btn--white .btn__text { 684 color: #fff; 685} 686.btn--unfilled { 687 background: none; 688} 689.btn--unfilled.btn--white .btn__text { 690 color: #fff; 691} 692.btn--unfilled.btn--white i { 693 color: #fff; 694} 695.btn--floating { 696 position: fixed; 697 bottom: 3.71428571em; 698 right: 3.71428571em; 699 z-index: 10; 700} 701.dark-blue-btn span, .dark-blue-btn .btn--primary { 702background: #862633; 703border-color: #862633; 704 705} 706 707/*START: Fix for Survey Submit buttons */ 708.btn-large{font-size: 0.85em !important;} 709 710/*END: Fix for Survey Submit buttons */ 711 712#web_white_bkgrnd_wrapper{background-color:white;margin:-2em;padding:2em;margin-top:-0.8em;} 713#a-sign-in-button_1 {font-size:14pt !important;} 714 715/* Safari Day Room Schedule Fix*/ 716.tui-full-calendar-vlayout-container { 717position: relative; 718overflow: visible; 719height: auto !important; 720} 721 722/*Hide Logo in footer on homepage */ 723footer.footer__home .col-md-offset-1_5 img { 724 display: none; 725} 726 727/* BETA: Hide Campus Groups Ad Lightboxes 728#pendo-base._pendo-step-container { 729 display: none !important; 730}*/ 731 732</style> 733 734 <!-- End school custom code --> 735 736 737 <!-- Modal --> 738 <div id="primary-modal" class="modal fade" role="dialog"> 739 <div class="modal-dialog" role="document"> 740 <div class="modal-content"> 741 <p class="loader"> 742 <img alt="" aria-hidden="true" src="/images/loader-big.gif"> 743 <br> Loading... 744 </p> 745 </div> 746 </div> 747 </div> 748 <div id="secondary-modal" class="modal fade" role="dialog"> 749 <div class="modal-dialog" role="document"> 750 <div class="modal-content"> 751 <p class="loader"> 752 <img alt="" aria-hidden="true" src="/images/loader-big.gif"> 753 <br> Loading... 754 </p> 755 </div> 756 </div> 757 </div> 758
758<script> 759 $("#primary-modal").on("hide.bs.modal", function (e) { 760 $("#primary-modal .modal-content").html(writeLoading("Loading")); 761 }); 762 $("#secondary-modal").on("hide.bs.modal", function (e) { 763 $("#secondary-modal .modal-content").html(writeLoading("Loading")); 764 }); 765 </script>
765 766 <!-- End Modal --> 767 768 769 770
770<script src="/static/js/modernizr.min.js"></script>
770 771 772
772<script src="/js/jquery-validate/jquery.validate.min.js"></script>
772 773 774
774<script src="/static/js/polyfill.js"></script>
774 775 776 777 778 <!-- HEADER --> 779 780 <style> 781 .btn--school { background-color: #862633; color: #fff; } 782 .btn--school:hover { background-color: #862633; color: #fff; } 783 .btn--school:focus { background-color: #862633; color: #fff; } 784 785 .topbar { background: #862633; border-color: #862633; } 786 .topbar ul.nav > li > a:hover, .topbar ul.nav > li > button:hover { background-color: #ffffff !important; } 787 .topbar ul.nav > li > a:focus, .topbar ul.nav > li > button:focus { background-color: #ffffff !important; outline: none; } 788 .topbar .topbar__sidebar-toggle:hover { background-color: #ffffff !important; } 789 .topbar .topbar__sidebar-toggle:focus { background-color: #ffffff !important; outline: none; } 790 .topbar.topbar-fair .topbar__left button:hover, .topbar.topbar-fair .topbar__left button:focus { background-color: #ffffff !important; color: #000000 !important; } 791 792 .topbar .open:not(.topbar__left) > a, 793 .topbar .open:not(.topbar__left) > a:focus, 794 .topbar > .open:not(.topbar__left) > a:hover, 795 .topbar .open:not(.topbar__left) > button, 796 .topbar .open:not(.topbar__left) > button:focus, 797 .topbar > .open:not(.topbar__left) > button:hover { background-color: #ffffff !important; } 798 .topbar li:focus-within > button.mdi-menu { background-color: #ffffff !important; } 799 .topbar li.active > a, .topbar li.active > button { background-color: #ffffff !important; } 800 </style> 801 802 <div id="generic"></div> 803 804 805 <div id="outer-shell" class="outer-shell "> 806 807 <!-- Impersonate --> 808 809 <!-- /.Impersonate --> 810 811 <!-- Message / Maintenance --> 812 813 <!-- /.Message --> 814 815 816 <style> 817 nav.topbar { 818 display: block; height: inherit; --navbar-height: 5.8rem; 819 align-items: center; 820 display: grid; 821 grid-template-rows: repeat(2, auto); 822 grid-template-columns: 1fr auto; 823 grid-auto-flow: column; 824 } 825 @media (min-width: 768px) { 826 nav.topbar { display: flex; } 827 } 828 .topbar.topbar--has-toggle .logo { margin-left: 0; padding-right: 1.2rem; padding-left: 1.2rem; display: flex; align-items: center;} 829 nav.topbar .topbar__sidebar-toggle { 830 padding: 0; width: var(--navbar-height); height: var(--navbar-height); display: flex; align-items: center; justify-content: center; 831 } 832 nav.topbar .navbar-header .logo:not(.dropdown-toggle) { margin-right: 10px; } 833 nav.topbar #header__switch { height: var(--navbar-height); } 834 .topbar__sidebar-toggle .mdi, 835 .topbar__menu .topbar__menu-icon > .mdi { display: block; } 836 .topbar__sidebar-toggle .mdi:before, 837 .topbar__menu .topbar__menu-icon > .mdi::before, 838 nav.topbar .navbar-toggle .mdi::before { display: block; line-height: 1; } 839 nav.topbar .navbar-toggle { height: var(--navbar-height); align-items: center; justify-content: center; margin-left: 15px; 840 float: none; margin-top: 0; margin-right: 0; margin-bottom: 0; padding-left: 15px; padding-right: 15px;} 841 842 843 /* Shared backgrounds */ 844 nav.topbar .navbar-toggle.collapsed { 845 background-color: #862633; 846 } 847 nav.topbar .navbar-toggle:not(.collapsed), 848 nav.topbar .navbar-toggle:focus, 849 nav.topbar .navbar-toggle:hover { 850 background-color: #ffffff; 851 } 852 853 nav.topbar,
854 nav.topbar.topbar--light.topbar--reverse { --btn-text-color: white; } 855 nav.topbar.topbar--light, nav.topbar.topbar--reverse { --btn-text-color: #333; } 856 857 nav.topbar #button-menu-mobile:focus-visible, 858 nav.topbar #header__switch:focus-visible, 859 nav.topbar .navbar-toggle:focus-visible, 860 nav.topbar ul.nav.nav-right > li > .topbar__menu:focus-visible, 861 .acc-keyboard-mode nav.topbar #header__switch:focus { 862 outline: 2px solid var(--btn-text-color) !important; 863 outline-offset: -2px; 864 } 865 @media (min-width: 768px) { 866 nav.topbar #main-navbar-collapse ul.nav > li > .topbar__menu:focus-visible { 867 outline: 2px solid var(--btn-text-color); 868 outline-offset: -2px; 869 } 870 } 871 872 /* Default text color (dark theme) */ 873 nav.topbar .navbar-toggle { color: white; } 874 875 /* Light: text becomes #333 */ 876 nav.topbar.topbar--light .navbar-toggle { color: #333; } 877 878 /* Reverse: hover flips to #333 */ 879 nav.topbar.topbar--light .navbar-toggle, 880 nav.topbar.topbar--reverse .navbar-toggle:not(.collapsed), 881 nav.topbar.topbar--reverse .navbar-toggle:focus, 882 nav.topbar.topbar--reverse .navbar-toggle:hover { color: #333; } 883 884 /* Light + Reverse: hover flips back to white */ 885 nav.topbar.topbar--light.topbar--reverse .navbar-toggle:not(.collapsed), 886 nav.topbar.topbar--light.topbar--reverse .navbar-toggle:focus, 887 nav.topbar.topbar--light.topbar--reverse .navbar-toggle:hover { color: white; } 888 889 @media (max-width: 767px) { 890 nav.topbar .navbar-toggle { display: flex; } 891 nav.topbar .navbar-collapse { background-color: #f0f2f5; border-bottom: 1px solid gray; max-height: calc(100vh - 5.8rem - 1.5rem); } 892 nav.topbar .navbar-collapse ul.navbar-nav { flex-wrap: wrap; gap: 1.5rem; padding: 1.5rem; } 893 nav.topbar .navbar-collapse ul.nav::before { content: initial; } 894 nav.topbar .navbar-collapse ul.nav > li > .topbar__menu { height: 75px; border-radius: 15px; min-width: 8rem; } 895 nav.topbar .navbar-collapse ul.nav > li:not(.active) > .topbar__menu:not(:hover):not(:focus) { background-color: white !important; color: #333333 !important; } 896 nav.topbar .navbar-collapse ul.nav > li.active > .topbar__menu, 897 nav.topbar .navbar-collapse ul.nav > li > .topbar__menu:hover, 898 nav.topbar .navbar-collapse ul.nav > li > .topbar__menu:focus { border: 2px solid #862633; } 899 nav.topbar ul.nav.nav-right > li .topbar__menu { padding-left: 0.5rem; padding-right: 0.5rem; min-width: 3rem; } 900 } 901 nav.topbar ul.nav > li { height: inherit; } 902 nav.topbar ul.nav > li .topbar__menu { height: var(--navbar-height); } 903 </style> 904 905 <nav 906 id="topbar" 907 class=" 908 topbar topbar- 909 topbar--reverse 910 " 911 role="navigation" aria-label="Topbar" 912 style="align-items: center;" 913 > 914 <div class="navbar-header topbar__left" style="float: none; display: flex; align-items: center;"> 915 916 <div role="banner"> 917 <a id="a-top-bar-logo" aria-label="Springfield College Logo. Opens the members homepage." role="button" class="logo" href="/groups"> 918 <img class="topbar__icon-large" src="/upload/springfield/2024/image_upload_599692_pridenetlogoinversebkgrnd_91714182.png" alt="Springfield College Logo Image." aria-label="Springfield College Logo Image. Clicking opens the members home page." style="max-height: 50px; max-width: 165px;"> 919 <img class="topbar__icon-small" src="/upload/springfield/2024/image_upload_599694_highresseal_72694523.png" alt="Springfield College Logo Image." aria-label="Springfield College Logo Image. Clicking opens the members home page." style="max-height: 35px; max-width: 35px; margin: 0 5px;"> 920 </a> 921 </div> 922 923 <button id="main-navbar-toggler" type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#main-navbar-collapse" aria-expanded="false"> 924 <div> 925 <div>
926 <span class="mdi mdi-apps mdi-24px"></span> 927 </div> 928 <div>Menu</div> 929 </div> 930 <div> 931 <span class="caret aria-decorative" role="presentation" aria-hidden="true"></span> 932 </div> 933 </button> 934 935 </div> 936 937 938 939 940<div style="grid-column: span 2 / span 2"> 941 <div class="collapse navbar-collapse" id="main-navbar-collapse" style="padding: 0;"> 942 <ul class="nav navbar-nav"> 943 944 <!-- Not Logged Buttons --> 945 946 <!-- Home Website Buttons --> 947 948 <li class="active"> 949 <a class="topbar__menu topbar__menu--large" href="/home_login" aria-label="Home" role="button">Home</a> 950 </li> 951 <li class="hidden-xs dropdown hasNoSubMenu"> 952 <a class="topbar__menu topbar__menu--large" href="/home/admissions/" style="max-width: inherit"> 953 Admissions 954 </a> 955 956 <ul class="dropdown-menu dropdown-menu-left arrow-dropdown-menu arrow-menu-right user-list notify-list" style="overflow-y: auto;max-height: 80vh;"> 957 958 </ul> 959 </li> <li class="hidden-xs dropdown hasNoSubMenu"> 960 <a class="topbar__menu topbar__menu--large" href="/home/pride-card/" style="max-width: inherit"> 961 Pride Card 962 </a> 963 964 <ul class="dropdown-menu dropdown-menu-left arrow-dropdown-menu arrow-menu-right user-list notify-list" style="overflow-y: auto;max-height: 80vh;"> 965 966 </ul> 967 </li> <li class="hidden-xs dropdown hasNoSubMenu"> 968 <a class="topbar__menu topbar__menu--large" href="/home/techhelp/" style="max-width: inherit"> 969 TechHelp 970 </a> 971 972 <ul class="dropdown-menu dropdown-menu-left arrow-dropdown-menu arrow-menu-right user-list notify-list" style="overflow-y: auto;max-height: 80vh;"> 973 974 </ul> 975 </li> <li class="hidden-xs dropdown hasNoSubMenu"> 976 <a class="topbar__menu topbar__menu--large" href="/home/parent-portal/" style="max-width: inherit"> 977 Parent Portal 978 </a> 979 980 <ul class="dropdown-menu dropdown-menu-left arrow-dropdown-menu arrow-menu-right user-list notify-list" style="overflow-y: auto;max-height: 80vh;"> 981 982 </ul> 983 </li> 984 985 <li> 986 <a 987 class="topbar__menu topbar__menu--large hidden-sm hidden-md hidden-lg" 988 href="/home/admissions/" 989 aria-label="Admissions Section" 990 role="button" 991 tabindex="0" 992 >Admissions</a> 993 </li> 994 995 <li> 996 <a 997 class="topbar__menu topbar__menu--large hidden-sm hidden-md hidden-lg" 998 href="/home/pride-card/" 999 aria-label="Pride Card Section" 1000 role="button" 1001 tabindex="0" 1002 >Pride Card</a> 1003 </li> 1004 1005 <li> 1006 <a 1007 class="topbar__menu topbar__menu--large hidden-sm hidden-md hidden-lg" 1008 href="/home/techhelp/" 1009 aria-label="TechHelp Section" 1010 role="button" 1011 tabindex="0" 1012 >TechHelp</a> 1013 </li> 1014 1015 <li> 1016 <a 1017 class="topbar__menu topbar__menu--large hidden-sm hidden-md hidden-lg" 1018 href="/home/parent-portal/" 1019 aria-label="Parent Portal Section" 1020 role="button" 1021 tabindex="0" 1022 >Parent Portal</a> 1023 </li> 1024 1025 <!-- /.Home Website Buttons --> 1026 1027 <!-- Group & Event Buttons --> 1028 1029 <!-- /.Group & Event Buttons --> 1030 1031 <!-- /.Not Logged Buttons --> 1032 1033 <!-- Home Button --> 1034 1035 <!-- /.Home Button --> 1036 1037 <!-- Group Button --> 1038 1039 <!-- /.Group Button --> 1040 1041 <!-- Manage Button --> 1042 1043 1044 <!-- Event Button --> 1045 1046 <!-- /.Event Button --> 1047 1048 <!-- Chat Button --> 1049 1050 <!-- /.Chat Button --> 1051 1052 1053 <!-- Admin / Setup Button --> 1054 1055 <!-- /.Admin Button --> 1056 1057 </ul> 1058 </div> 1059</div> 1060<div style="color: white; margin-left: auto;"> 1061 <ul class="nav nav-right"> 1062 1063 <!-- Login Button --> 1064 <li class=""> 1065 <a class="topbar__menu topbar__menu--row" href="/webapp/auth/login" aria-label="Sign In Section" role="button">
1066 <span class="mdi mdi-login-variant mdi-24px"></span> 1067 <span class="hidden-xs hidden-sm topbar__menu-text" style="overflow: initial;"> Sign In </span> 1068 </a> 1069 </li> 1070 <!-- /.Login Button --> 1071 1072 </ul> 1073 <style> 1074 #a-top-bar-logo:focus > i { outline: 2px solid #ffffff; } 1075 </style> 1076</div> 1077 1078 1079 </nav> 1080
1080<script> 1081 $('#topbar').on('focusout', '.dropdown-menu, .navbar-collapse', function (ev) { 1082 if (!ev.currentTarget.contains(ev.relatedTarget)) { 1083 if ($(ev.currentTarget).hasClass('dropdown-menu')) { 1084 $(ev.currentTarget).parent().find('[data-toggle="dropdown"]').dropdown('close'); 1085 } else if ($(ev.currentTarget).hasClass('navbar-collapse')) { 1086 $(ev.currentTarget).collapse('hide'); 1087 } 1088 } 1089 }); 1090 $(document).on('click', function (e) { 1091 var $navbar = $('#main-navbar-collapse'); 1092 if ($navbar.hasClass('in') && !$(e.target).closest('#main-navbar-collapse, #main-navbar-toggler').length) { 1093 $navbar.collapse('hide'); 1094 } 1095 }); 1096 $('#topbar').on('show.bs.dropdown', function () { 1097 $('#main-navbar-collapse').collapse('hide'); 1098 }); 1099 </script>
1099 1100 1101 1102 <div id="inner-shell" class="inner-shell"> 1103 1104 1105 1106 <!-- END HEADER --> 1107 1108 1109 <div id="content-cont" class="content-cont container-fluid"> 1110 1111 <div id="page-cont" class="content" role="main" aria-label="Main Content."> 1112 <div style="position: relative;"><span id="span-top-of-main-content--0" class="content__top-element" tabindex="0" aria-label="Top of Main Content." style="display: none;">Top of Main Content</span></div> 1113 1114 1115 1116 <!-- Used in email_form --> 1117 1118<!-- END AX != 1 --> 1119 1120 1121 1122 1123 <div class="login__slideshow-container"> 1124 1125 <div class="login__slideshow"> 1126 1127 <div class="login__cover-container" aria-label="PrideNET."> 1128 <img class="login__cover-img" style="height:calc(100vh - 70px);" alt="No image description provided" tabindex="-1" src="/upload/springfield/2024/image_upload_599694_04202023campus44JPG_101192648.jpeg" > 1129 <div class="login__cover-overlay"></div> 1130 <div class="login__cover-text"> 1131 <div> 1132 1133 <h1 class="ufocus" style="font-size:50px;color:white">PrideNET</h1> 1134 <div class="text__subtitle"></div> 1135 <div class="btn-container"> 1136 1137
1137<script> 1138 function addSignInButtonClass() { 1139 var style = document.createElement('style'); 1140 style.type = 'text/css'; 1141 var mainColor = '#862633'; 1142 var hoverColor = '#' + generateColor('', '#862633', 20)[0]; 1143 // console.log('> addSignInButtonClass() begins...'); 1144 // console.log('> mainColor=' + mainColor); 1145 // console.log('> hoverColor=' + hoverColor); 1146 var cssText = '#a-sign-in-button_1 {background-color: ' + mainColor + ';} '; 1147 cssText += '#a-sign-in-button_1:hover, #a-sign-in-button_1:focus {background-color: ' + hoverColor + ';} '; 1148 style.innerHTML = cssText; 1149 document.getElementsByTagName('head')[0].appendChild(style); 1150 // console.log('addSignInButtonClass() added #a-sign-in-button_1 class info'); 1151 } 1152 addSignInButtonClass(); 1153 </script>
1153 1154 <a id="a-sign-in-button_1" class="btn btn--rounded action-btn" onclick="loadButton($(this))" href="/login_only?redirect=" aria-label="Sign In. PrideNET. Click to go to Sign In."><div style="padding: 0 20px;"><span class="mdi mdi-login"></span> Sign In</div></a> 1155 1156 </div> 1157 </div> 1158 </div> 1159 1160 <span class="mdi mdi-chevron-down discover-btn" onclick="$('html, body').animate({ scrollTop: $('.login__slideshow-container').height() }, 700);" tabindex="-1" role="presentation" aria-hidden="true"></span> 1161 1162 </div> 1163 1164 1165 </div> 1166 1167 </div> 1168 1169 <div class="login__event-container"> 1170 <div class="login__event-slider"> 1171 <div class="row"> 1172 <div class="col-xs-6 col-sm-6 col-md-6"> 1173 <h2 class="header-cg--h3" style="margin-top:0;margin-left:20px">Upcoming Events <small>(1570)</small></h2> 1174 </div> 1175 <div class="col-xs-6 col-sm-6 col-md-6 text-right"> 1176 1177 </div> 1178 </div> 1179 <div id="event_slider_container" style="padding: 0px 30px 0px 30px;" role="region" aria-label="Upcoming Events Carousel"><div class="text-center"><span style="position:absolute;top:45%" class="glyphicon glyphicon-refresh mdi-custom_spin grey-element"></span></div></div> 1180 </div> 1181 </div> 1182 1183 1184<div height="50px"></div> 1185
1186<script> 1187// Home Page JS Logic after Group Pinned 1188$(document).ready(function() { 1189 clampText('text-clamp', true); 1190 getContent('event_slider_container', 'ajax_event_slider2?nb_events=4'); 1191 $('.login__slideshow').slick({ 1192 dots: false, 1193 arrows:false, 1194 infinite: true, 1195 fade: true, 1196 adaptiveHeight: true, 1197 autoplay: false, 1198 speed:700, 1199 autoplaySpeed: 900000, 1200 slidesToScroll: 1, 1201 cssEase: 'linear', 1202 slidesToShow: 1, 1203 initialSlide: 0 1204 }); 1205}); 1206</script>
1206 1207 1208<style> 1209 1210 .outer-shell > .container,.container-fluid {width: 100%;margin-left:0;margin-right:0} 1211 .groups_preview-container { 1212 width: 100%; 1213 } 1214 @media (min-width: 1200px) { 1215 .news-container, .groups_preview-container { 1216 padding: 0 35px; 1217 width: 1200px; 1218 margin: auto; 1219 } 1220 } 1221 1222 1223 .discover-btn { 1224 position: absolute; 1225 bottom: 0.5vh; 1226 color: #F5F5F8; 1227 cursor: pointer; 1228 transition-duration: 0.4s; 1229 } 1230 .discover-btn:before { 1231 font-size: 90px; 1232 } 1233 .discover-btn:hover { 1234 bottom:0vh; 1235 } 1236 .list-group-item:hover { 1237 border-color: #d0d0d0; 1238 background-color: #f9f9f9; 1239 -webkit-transition: background-color 150ms ease-out; 1240 -ms-transition: background-color 150ms ease-out; 1241 transition: background-color 150ms ease-out; 1242 } 1243 .action-btn { 1244 color:white; 1245 background-color:#862633; 1246 box-shadow: 0px 0px 0px 1px rgba(255,255,255, 0.5); 1247 display:block; 1248 } 1249 .action-btn:hover, .action-btn:focus { 1250 color:white; 1251 } 1252 .btn-container { 1253 margin-top:5%; 1254 display: flex; 1255 justify-content: center; 1256 } 1257 1258 .login__slideshow--next-arrow :before, .login__slideshow--previous-arrow :before { 1259 background-color: #862633; 1260 color:#d2d2d2; 1261 } 1262 1263 .login__slideshow--next-arrow:focus :before, .login__slideshow--previous-arrow:focus :before { 1264 background-color: #ffffff; 1265 color: #862633 !important; 1266 } 1267 1268 .acc-keyboard-mode a.btn--rounded:focus { text-decoration: underline; text-decoration-style: solid; } 1269 .acc-keyboard-mode div.login__cover-container:focus h1.ufocus { text-decoration: underline; text-decoration-style: solid; } 1270 .acc-keyboard-mode a.a-slick-card-link:focus h3 { text-decoration: underline; text-decoration-style: solid; } 1271 .acc-keyboard-mode a.group-card:focus h3, a.badge:focus { text-decoration: underline; text-decoration-style: solid; } 1272 1273</style> 1274 1275<link rel="stylesheet" type="text/css" href="/static/plugins/slick/slick.css"/> 1276<link rel="stylesheet" type="text/css" href="/static/plugins/slick/slick-theme.css"/>
1277<script type="text/javascript" src="static/plugins/slick/slick.min.js"></script>
1277 1278 1279 1280<!-- Rich text editor: CKEditor (default) or Lexical (feature flag) --> 1281 1282
1283<script> 1284 //YT Viewer 1285 if (typeof arrYoutubePlayerObjects != "undefined") { 1286 1287 $("#youtubeScript").remove(); 1288 $("#www-widgetapi-script").remove(); 1289 if (window['YT'] != undefined) { window.YT.loading = 0; window.YT.loaded = 0; } 1290 1291 var youtubeTag = document.createElement('script'); 1292 youtubeTag.id = "youtubeScript"; 1293 youtubeTag.src = "https://www.youtube.com/iframe_api"; 1294 youtubeTag.async = false; 1295 1296 // Get First Script Tag & Insert Vimeo Script before that. 1297 var firstScriptTag = document.getElementsByTagName('script')[0]; 1298 firstScriptTag.parentNode.insertBefore(youtubeTag, firstScriptTag); 1299 1300 // Array of Players 1301 var arrYoutubePlayers = []; 1302 1303 // Functions to work on Youtube Players 1304 function onYoutubePlayerReady(event) { 1305 var player = event.target; 1306 $(window).blur(function() { player.pauseVideo(); }); 1307 $(window).scroll(function() { 1308 if ( !isInViewport(document.getElementById("player--" + player.youtubeObject.cgID))) { 1309 player.pauseVideo(); 1310 } 1311 }); 1312 1313 var startTime = new Date(player.youtubeObject.startTime * 1000).toISOString(); 1314 var totalTime = new Date(player.getDuration() * 1000).toISOString(); 1315 if (player.getDuration() >= 3600) { 1316 startTime = startTime.substr(11, 8); 1317 totalTime = totalTime.substr(11, 8); 1318 } 1319 else { 1320 startTime = startTime.substr(14, 5); 1321 totalTime = totalTime.substr(14, 5); 1322 } 1323 $("#player-btn--" + player.youtubeObject.cgID + " div.timer").html("<span id='player-time--" + player.youtubeObject.cgID + "'>" + startTime + "</span> / " + totalTime); 1324 } 1325 1326 function onYoutubePlayerStateChange(event) { 1327 var player = event.target; 1328 1329 if (event.data == YT.PlayerState.PLAYING) { 1330 // Change Buttons 1331 $("#player-btn--" + player.youtubeObject.cgID + " button.playpause").attr("data-status", "pause").attr("aria-label", "Pause"); 1332 $("#player-btn--" + player.youtubeObject.cgID + " button.playpause span.mdi").removeClass("mdi-play").addClass("mdi-pause"); 1333 } 1334 1335 if (event.data == YT.PlayerState.PLAYING && player.intervalFunction == null) { 1336 // HACK For Window BLUR 1337 window.focus(); 1338 1339 // AJAX Recurring Call 1340 player.intervalFunction = setInterval(function() { 1341 postVideoViews(player.youtubeObject.cgUID, player.youtubeObject.cgUID_s, player.getCurrentTime()); 1342 }, 10000); 1343 1344 // Timer 1345 player.intervalTimerFunction = setInterval(function() { 1346 var currentTime = new Date(player.getCurrentTime() * 1000).toISOString(); 1347 if (player.getDuration() >= 3600) { 1348 currentTime = currentTime.substr(11, 8); 1349 } 1350 else { 1351 currentTime = currentTime.substr(14, 5); 1352 } 1353 $("#player-time--" + player.youtubeObject.cgID).html(currentTime); 1354 }, 1000) 1355 } 1356 else if (event.data == YT.PlayerState.PAUSED || event.data == YT.PlayerState.ENDED) { 1357 // Change Buttons 1358 $("#player-btn--" + player.youtubeObject.cgID + " button.playpause").attr("data-status", "play").attr("aria-label", "Play"); 1359 $("#player-btn--" + player.youtubeObject.cgID + " button.playpause span.mdi").removeClass("mdi-pause").addClass("mdi-play"); 1360 1361 clearInterval(player.intervalFunction); 1362 clearInterval(player.intervalTimerFunction); 1363 player.intervalFunction = null; 1364 player.intervalTimerFunction = null; 1365 postVideoViews(player.youtubeObject.cgUID, player.youtubeObject.cgUID_s, player.getCurrentTime(), (event.data == YT.PlayerState.ENDED ? 'true' : '')); 1366 //if (event.data == YT.PlayerState.ENDED) { 1367 //if (typeof refreshTrackChecklist !== "undefined") { refreshTrackChecklist(); } 1368 //else if (typeof parent.refreshTrackChecklist !== "undefined") { parent.refreshTrackChecklist(); } 1369 //} 1370 } 1371 } 1372 1373 function youtubePlayerPlayPause(player) { 1374 var currentStatus = $("#player-btn--" + player.youtubeObject.cgID + " button.playpause").attr("data-status"); 1375 if (currentStatus == "play") { player.playVideo(); } 1376 else if (currentStatus == "pause") { player.pauseVideo(); } 1377 } 1378 1379 /* Function that checks localStorage for the Vimeo/YouTube closed captions load policy. Returns number values: 1380 * 0 - closed captions should be be disabled (do not load closed captions) 1381 * 1 - closed captions should be loaded when video loads 1382 * If the local storage key is not defined we return 0 (as a number). 1383 */ 1384 function getVideoPlayerCCLoadPolicy() { 1385 try { 1386 const lsKey = 'cg-video-player-cc-load-policy'; 1387 const ccLoadPolicy = localStorage.getItem(lsKey); 1388 return (ccLoadPolicy === '1') ? 1 : 0; 1389 } catch(e) { 1390 return 0; 1391 } 1392 } 1393 1394 /* Function that toggles the video player CC load policy stored in local storage. Toggled values are (strings values): 1395 * '0' - closed captions should be be disabled (do not load closed captions) 1396 * '1' - closed captions should be loaded when video loads 1397 * If the local storage key is not defined it is treated as though the value were '0' and toggles to '1'. 1398 * */ 1399 function toggleVideoPlayerCCLoadPolicy() { 1400 try { 1401 const lsKey = 'cg-video-player-cc-load-policy'; 1402 const ccLoadPolicy = localStorage.getItem(lsKey); 1403 if (ccLoadPolicy === '1') { 1404 localStorage.setItem(lsKey, '0'); 1405 } else { 1406 localStorage.setItem(lsKey, '1'); 1407 } 1408 } catch(e) { 1409 return; 1410 } 1411 } 1412 1413 /* Function that prompts the user for confirmation before toggling the video player closed caption load policy. 1414 * - If closed captions are currently turned off, the user will be prompted to confirm before turning them on (and vice versa) 1415 * - Video player CC load policy setting is stored in local storage (see above functions) 1416 * - Vimeo and YouTube video players require reload of the associated IFrames to change the setting, 1417 * if user confirms yes to reload, the page will be reloaded. 1418 */ 1419 function toggleClosedCaptionsAndReloadVideoIframes() { 1420 const turnClosedCaptionsOnOff = (typeof getVideoPlayerCCLoadPolicy !== 'undefined' && getVideoPlayerCCLoadPolicy() === 1) ? 'off' : 'on'; 1421 const message = 'Turning ' + turnClosedCaptionsOnOff + ' closed captions will reload this page, please save any outstanding changes before you choose to turn closed captions ' + turnClosedCaptionsOnOff + '. Are you sure you want to turn closed captions ' + turnClosedCaptionsOnOff + '?'; 1422 if (confirm(message)) { 1423 toggleVideoPlayerCCLoadPolicy(); 1424 location.reload(); 1425 } else { 1426 return false; 1427 } 1428 } 1429 1430 // Called when the script is fully loaded. 1431 function onYouTubeIframeAPIReady() { 1432 1433 // Loop through players
1434 arrYoutubePlayerObjects.forEach(function (youtubeObject, index) { 1435 arrYoutubePlayers[index] = new YT.Player("player--" + youtubeObject.cgID, { 1436 height: youtubeObject.height, 1437 width: youtubeObject.width, 1438 videoId: youtubeObject.videoID, 1439 playerVars: { 1440 modestbranding: 1, 1441 rel: 0, 1442 disablekb: 1, 1443 playsinline: 1, 1444 controls: 0, 1445 start: youtubeObject.startTime, 1446 cc_load_policy: (typeof getVideoPlayerCCLoadPolicy !== 'undefined') ? getVideoPlayerCCLoadPolicy() : 0 1447 }, 1448 events: { 1449 'onStateChange': onYoutubePlayerStateChange, 1450 'onReady': onYoutubePlayerReady 1451 } 1452 }); 1453 arrYoutubePlayers[index].youtubeObject = youtubeObject; 1454 arrYoutubePlayers[index].intervalFunction = null; 1455 1456 $("#player-btn--" + youtubeObject.cgID + " button.playpause").on('click', function() { 1457 youtubePlayerPlayPause(arrYoutubePlayers[index]); 1458 }); 1459 $("#player-btn--" + youtubeObject.cgID + " button.replay").on('click', function() { 1460 arrYoutubePlayers[index].seekTo(0); 1461 }); 1462 $("#player-btn--" + youtubeObject.cgID + " button.rewind").on('click', function() { 1463 arrYoutubePlayers[index].seekTo(arrYoutubePlayers[index].getCurrentTime() - 10); 1464 }); 1465 const turnClosedCaptionsOnOff = (typeof getVideoPlayerCCLoadPolicy !== 'undefined' && getVideoPlayerCCLoadPolicy() === 1) ? 'off' : 'on'; 1466 $("#player-btn--" + youtubeObject.cgID + " button.closedcaption").attr('aria-label', 'Turn ' + turnClosedCaptionsOnOff + ' closed captions. Note, this requires a reload of the current page.'); 1467 $("#player-btn--" + youtubeObject.cgID + " button.closedcaption").on('click', function() { 1468 toggleClosedCaptionsAndReloadVideoIframes(); 1469 }); 1470 $("#player-btn--" + youtubeObject.cgID + " button.fullscreen").on('click', function() { 1471 arrYoutubePlayers[index].pauseVideo(); 1472 tb_show("", "/video_player?embed=1&uid=" + youtubeObject.cgUID + "&width=995&height=680&modal=true&TB_iframe=1", ""); 1473 }); 1474 1475 }); 1476 1477 arrYoutubePlayerObjects = undefined; 1478 } 1479 } 1480 1481 1482 //Vimeo Viewer 1483 if (typeof arrVimeoPlayerObjects != "undefined") { 1484 1485 $("#vimeoScript").remove(); 1486 1487 var vimeoTag = document.createElement('script'); 1488 vimeoTag.id = "vimeoScript"; 1489 vimeoTag.src = "https://player.vimeo.com/api/player.js"; 1490 vimeoTag.async = false; 1491 1492 // Get First Script Tag & Insert Vimeo Script before that. 1493 var firstScriptTag = document.getElementsByTagName('script')[0]; 1494 firstScriptTag.parentNode.insertBefore(vimeoTag, firstScriptTag); 1495 1496 // Array of Players 1497 var arrVimeoPlayers = []; 1498 1499 // Functions to work on Vimeo Players 1500 function vimeoPlayerPlay(player) { 1501 // Change Buttons 1502 $("#player-btn--" + player.vimeoObject.cgID + " button.playpause").attr("data-status", "pause").attr("aria-label", "Pause"); 1503 $("#player-btn--" + player.vimeoObject.cgID + " button.playpause span.mdi").removeClass("mdi-play").addClass("mdi-pause"); 1504 1505 // AJAX Recurring Call 1506 player.intervalFunction = setInterval( function() { 1507 player.getCurrentTime().then( function(seconds) { 1508 postVideoViews(player.vimeoObject.cgUID, player.vimeoObject.cgUID_s, seconds); 1509 })
1510 }, 10000) 1511 1512 // Timer 1513 player.intervalTimerFunction = setInterval(function() { 1514 player.getCurrentTime().then( function(seconds) { 1515 var currentTime = new Date(seconds * 1000).toISOString(); 1516 if (player.totalDuration >= 3600) { 1517 currentTime = currentTime.substr(11, 8); 1518 } 1519 else { 1520 currentTime = currentTime.substr(14, 5); 1521 } 1522 $("#player-time--" + player.vimeoObject.cgID).html(currentTime); 1523 }) 1524 }, 1000) 1525 } 1526 1527 function vimeoPlayerPause(player) { 1528 // Change Buttons 1529 $("#player-btn--" + player.vimeoObject.cgID + " button.playpause").attr("data-status", "play").attr("aria-label", "Play"); 1530 $("#player-btn--" + player.vimeoObject.cgID + " button.playpause span.mdi").removeClass("mdi-pause").addClass("mdi-play"); 1531 1532 // Clear AJAX Recurring Call 1533 clearInterval(player.intervalFunction); 1534 clearInterval(player.intervalTimerFunction); 1535 player.intervalFunction = null; 1536 player.intervalTimerFunction = null; 1537 1538 player.getCurrentTime().then( function(seconds) { 1539 postVideoViews(player.vimeoObject.cgUID, player.vimeoObject.cgUID_s, seconds); 1540 }); 1541 } 1542 1543 function vimeoPlayerEnded(player) { 1544 // Change Buttons 1545 $("#player-btn--" + player.vimeoObject.cgID + " button.playpause").attr("data-status", "play").attr("aria-label", "Play"); 1546 $("#player-btn--" + player.vimeoObject.cgID + " button.playpause span.mdi").removeClass("mdi-pause").addClass("mdi-play"); 1547 1548 // Clear AJAX Recurring Call 1549 clearInterval(player.intervalFunction); 1550 clearInterval(player.intervalTimerFunction); 1551 player.intervalFunction = null; 1552 player.intervalTimerFunction = null; 1553 1554 player.getCurrentTime().then( function(seconds) { 1555 postVideoViews(player.vimeoObject.cgUID, player.vimeoObject.cgUID_s, seconds, 'true'); 1556 }); 1557 1558 //if (typeof refreshTrackChecklist !== "undefined") { refreshTrackChecklist(); } 1559 //else if (typeof parent.refreshTrackChecklist !== "undefined") { parent.refreshTrackChecklist(); } 1560 } 1561 1562 function vimeoPlayerPlayPause(player) { 1563 var currentStatus = $("#player-btn--" + player.vimeoObject.cgID + " button.playpause").attr("data-status"); 1564 if (currentStatus == "play") { 1565 player.play(); 1566 } 1567 else if (currentStatus == "pause") { 1568 player.pause(); 1569 } 1570 } 1571 1572 // We wait until the script is fully loaded. 1573 $("#vimeoScript").on('load', function() { 1574 1575 // Loop through players 1576 arrVimeoPlayerObjects.forEach(function (vimeoObject, index) { 1577 1578 if (typeof getVideoPlayerCCLoadPolicy !== 'undefined' && getVideoPlayerCCLoadPolicy() === 1) { 1579 // load with closed captions enabled (set texttrack to 'en') 1580 arrVimeoPlayers[index] = new Vimeo.Player("player--" + vimeoObject.cgID, { url: vimeoObject.URL , height: vimeoObject.height, width: vimeoObject.width, controls: false, texttrack: 'en' }); 1581 } else { 1582 arrVimeoPlayers[index] = new Vimeo.Player("player--" + vimeoObject.cgID, { url: vimeoObject.URL , height: vimeoObject.height, width: vimeoObject.width, controls: false }); 1583 } 1584 arrVimeoPlayers[index].vimeoObject = vimeoObject; 1585 arrVimeoPlayers[index].intervalFunction = null; 1586 1587 if (vimeoObject.startTime != 0) { 1588 arrVimeoPlayers[index].setCurrentTime(vimeoObject.startTime); 1589 } 1590 1591 arrVimeoPlayers[index].on('play', function() { vimeoPlayerPlay(this) } ); 1592 arrVimeoPlayers[index].on('pause', function() { vimeoPlayerPause(this) } ); 1593 arrVimeoPlayers[index].on('ended', function() { vimeoPlayerEnded(this) } ); 1594 1595 $("#player-btn--" + vimeoObject.cgID + " button.playpause").on('click', function() { 1596 vimeoPlayerPlayPause(arrVimeoPlayers[index]); 1597 }); 1598 $("#player-btn--" + vimeoObject.cgID + " button.replay").on('click', function() { 1599 arrVimeoPlayers[index].setCurrentTime(0) 1600 }); 1601 $("#player-btn--" + vimeoObject.cgID + " button.rewind").on('click', function() { 1602 arrVimeoPlayers[index].getCurrentTime().then(function(seconds) { 1603 arrVimeoPlayers[index].setCurrentTime(Math.max(0, seconds - 10)); 1604 }) 1605 }); 1606 const turnClosedCaptionsOnOff = (typeof getVideoPlayerCCLoadPolicy !== 'undefined' && getVideoPlayerCCLoadPolicy() === 1) ? 'off' : 'on'; 1607 $("#player-btn--" + vimeoObject.cgID + " button.closedcaption").attr('aria-label', 'Turn ' + turnClosedCaptionsOnOff + ' closed captions. Note, this requires a reload of the current page.'); 1608 $("#player-btn--" + vimeoObject.cgID + " button.closedcaption").on('click', function() { 1609 toggleClosedCaptionsAndReloadVideoIframes(); 1610 }); 1611 $("#player-btn--" + vimeoObject.cgID + " button.fullscreen").on('click', function() { 1612 arrVimeoPlayers[index].pause(); 1613 tb_show("", "/video_player?embed=1&uid=" + vimeoObject.cgUID + "&width=995&height=680&modal=true&TB_iframe=1", ""); 1614 }); 1615 1616 $(window).blur(function() { 1617 arrVimeoPlayers[index].pause(); 1618 }); 1619 $(window).scroll(function() { 1620 if ( !isInViewport(document.getElementById("player--" + vimeoObject.cgID))) { 1621 arrVimeoPlayers[index].pause(); 1622 } 1623 }); 1624 1625
1626 var startTime = new Date(vimeoObject.startTime * 1000).toISOString(); 1627 var totalTime = 0; 1628 arrVimeoPlayers[index].getDuration().then(function(seconds) { 1629 arrVimeoPlayers[index].totalDuration = seconds; 1630 1631 totalTime = new Date(seconds * 1000).toISOString(); 1632 if (seconds >= 3600) { 1633 startTime = startTime.substr(11, 8); 1634 totalTime = totalTime.substr(11, 8); 1635 } 1636 else { 1637 startTime = startTime.substr(14, 5); 1638 totalTime = totalTime.substr(14, 5); 1639 } 1640 $("#player-btn--" + vimeoObject.cgID + " div.timer").html("<span id='player-time--" + vimeoObject.cgID + "'>" + startTime + "</span> / " + totalTime); 1641 }); 1642 }); 1643 1644 arrVimeoPlayerObjects = undefined; 1645 1646 }); 1647 1648 } 1649</script>
1649 1650
1651<script> 1652 $(document).ready(function(){ 1653 $("[data-toggle='tooltip']").tooltip(); 1654 $(".btn--loader").click(function() { 1655 loadButton($(this)); 1656 }); 1657 tb_init('a.thickbox, area.thickbox, input.thickbox'); 1658 1659 // fix for the non editable input in ckeditor (ex: URL...) 1660 $(".modal").removeAttr("tabindex"); 1661 // second hack to fix ckeditor links, especially the 'edit link' option 1662 if ($.fn.modal && $.fn.modal.Constructor && $.fn.modal.Constructor.prototype) { 1663 $.fn.modal.Constructor.prototype.enforceFocus = function() { 1664 modal_this = this 1665 $(document).on('focusin.modal', function (e) { 1666 if (modal_this.$element[0] !== e.target && !modal_this.$element.has(e.target).length 1667 && !$(e.target.parentNode).hasClass('cke_dialog_ui_input_select') 1668 && !$(e.target.parentNode).hasClass('cke_dialog_ui_input_text') 1669 && !$(e.target).closest('.cg-le-image-dialog-overlay, .cg-le-raw-html-dialog-overlay').length 1670 // the calendar sits on <body>, not in the modal: iOS throws it off screen inside a -webkit-overflow-scrolling:touch scroller (CGPES-4806) 1671 && !$(e.target).closest('#ui-datepicker-div').length) { 1672 modal_this.$element.focus() 1673 } 1674 }) 1675 }; 1676 } 1677 1678 setupAjaxAccessibility(); 1679 }); 1680</script>
1680 1681 1682 <!-- AX != 1 --> 1683 1684 </div><!--/.content --> 1685 </div><!--/.content-page --> 1686 </div><!--/.inner-shell --> 1687 1688 1689 <style> 1690 .outer-shell { display:flex; flex-direction:column; min-height: 100vh; } 1691 @-moz-document url-prefix() { 1692 .inner-shell {flex:1; } 1693 } 1694 @media screen and (-webkit-min-device-pixel-ratio:0) { 1695 .inner-shell { flex:1; } 1696 } 1697 body.enlarged { min-height:initial; position:relative; } 1698 body.enlarged > .outer-shell { display:flex; flex-direction:column; min-height: 100vh; } 1699 </style> 1700 <footer class="footer__home"> 1701 <div> 1702 1703 <div id="footer-links" class="row footer__cont" style="background: transparent;"> 1704 <div class="col-md-offset-1_5 col-md-3 col-sm-12 col-xs-12 text-center" style="padding-top:10px;"> 1705 <img alt="Springfield College Website Logo" src="/upload/springfield/2024/image_upload_599692_pridenetlogoinversebkgrnd_91714182.png" style="max-width:150px;max-height:50px;border-radius:6px;"> 1706 </div> 1707 <div class="text-xs-center text-sm-left text-md-left col-md-3 col-sm-6 col-xs-12" style="display:flex;padding: 10px 10px;"> 1708 <div style="margin:auto" role="group" aria-label="Contact information."> 1709 <h2 class="footer__home--title" style="margin-top: 0; margin-bottom: 10px;">Contact</h2> 1710 <span>Springfield College</span><br> 1711 <span style="line-height:1.7">263 Alden Street<br>Springfield, Massachusetts 01109<br>United States</span><br> 1712 1713 </div> 1714 </div> 1715 <div class="text-xs-center text-sm-left text-md-left col-md-3 col-sm-6 col-xs-12" style="display:flex;vertical-align:top;padding: 10px 10px;"> 1716 <div style="margin:auto" role="group" aria-label="Links"> 1717 <h2 class="footer__home--title" style="margin-top: 0; margin-bottom: 10px;">Links</h2> 1718 <a class="a-footer-contact-links" href="/home_login">Home</a><br> 1719 1720 <a class="a-footer-contact-links" href="/home/admissions/">Admissions</a><br> 1721 1722 <a class="a-footer-contact-links" href="/home/pride-card/">Pride Card</a><br> 1723 1724 <a class="a-footer-contact-links" href="/home/techhelp/">TechHelp</a><br> 1725 1726 <a class="a-footer-contact-links" href="/home/parent-portal/">Parent Portal</a><br> 1727 1728 <a class="a-footer-contact-links" target="_blank" href="https://helpcenter.readyeducation.com/migration/knowledge" aria-describedby="desc--new-tab">Support Center</a> 1729 </div> 1730 </div> 1731 1732 </div> 1733 <div class="row" style="padding:15px 20px 0 20px;border-top:1px solid #5a5a5a;margin-top: 10px;" role="group" aria-label="Footer Bar Links"> 1734 <div class="col-sm-6 col-xs-12 text-xs-center text-sm-left"></div> 1735 <div class="col-sm-6 col-xs-12 text-xs-center text-sm-right"> 1736 <a class="a-footer-contact-links" href="https://www.readyeducation.com/">©2026 Ready Education</a> 1737 </div> 1738 </div> 1739 </div> 1740 </footer> 1741 1742 1743
1743<script type="text/javascript" src="/js/jquery-migrate-1.2.1.js"></script>
1743 1744 1745 <!-- THICKBOX --> 1746
1746<script src="/js/thickbox/thickbox.js"></script>
1746 1747 1748
1748<script type="text/javascript" src="/static/js/metisMenuCustom.js?v=1"></script>
1748 1749
1749<script type="text/javascript" src="/static/js/jquery.slimscroll.js"></script>
1749 1750 <!--<link href="/static/css/scrollbar.css" rel="stylesheet"> 1751
1751<script type="text/javascript" src="/static/js/scrollbar.js"></script>
1751--> 1752 1753
1753<script type="text/javascript">function $$(strId) { return document.getElementById(strId); }</script>
1753 1754
1754<script type="text/javascript" src="/static/plugins/clamp/clamp.min.js"></script>
1754 1755
1755<script type="text/javascript" src="/static/js/core.js"></script>
1755 1756
1756<script type="text/javascript" src="/static/js/menu.js"></script>
1756 1757
1757<script type="text/javascript" src="/static/js/routing.js"></script>
1757 1758 1759 1760 1761
1761<script type="text/javascript">$.ajaxSetup({cache:true})</script>
1761 1762 1763 1764 <!-- @TODO: This is for jPrompt. We might to see if an update is available or give it a better style --> 1765 1766 <link href="/js/jquery-alerts/jquery.alerts.css" rel="stylesheet" type="text/css"> 1767
1767<script src="/js/jquery-alerts/jquery.alerts.js" type="text/javascript"></script>
1767 1768 1769 1770 <!-- @TODO: Check if used : put directly on /r and student_password--> 1771 1772
1772<script> 1773 1774 </script>
1774 1775 1776 1777 <!-- Google Analytics --> 1778
1778<script> 1779 var _customTask = function() { 1780 return function(model){ 1781 var piiRegex = [ 1782 { name: 'Email', regex: /.{4}@.{4}/g}, 1783 { name: 'Phone_Number', regex: /^(\+|\d)[0-9]{7,16}$/g}, 1784 { name: 'SSN', regex: /^\d{3}-\d{2}-\d{4}$}/g}, 1785 { name: 'Address', regex: /^\d+\s[A-z]+\s[A-z]+/g}]; 1786 1787 var globalSendTaskName = '_' + model.get('trackingId') + '_sendHitTask'; 1788 1789 // Fetch reference to the original sendHitTask 1790 var originalSendTask = window[globalSendTaskName] = window[globalSendTaskName] || model.get('sendHitTask'); 1791 var i, hitPayload, parts, val; 1792 1793 // Overwrite sendHitTask with PII purger 1794 model.set('sendHitTask', function(sendModel) { 1795 1796 hitPayload = sendModel.get('hitPayload').split('&'); 1797 1798 for (i = 0; i < hitPayload.length; i++) { 1799 parts = hitPayload[i].split('='); 1800 1801 // Double-decode, to account for web server encode + analytics.js encode 1802 try { 1803 val = decodeURIComponent(decodeURIComponent(parts[1])); 1804 } catch(e) { 1805 val = decodeURIComponent(parts[1]); 1806 } 1807 1808 piiRegex.forEach(function(pii) { 1809 val = val.replace(pii.regex, '[REDACTED ' + pii.name + ']'); 1810 }); 1811 1812 parts[1] = encodeURIComponent(val); 1813 hitPayload[i] = parts.join('='); 1814 } 1815 1816 sendModel.set('hitPayload', hitPayload.join('&'), true); 1817 originalSendTask(sendModel); 1818 }); 1819 }; 1820 } 1821 </script>
1821 1822 1823 1824 <!-- End Google Analytics --> 1825 1826 1827 1828 <!-- Help --> 1829 1830 <!-- End Help --> 1831 1832 <!-- A11Y Descriptions --> 1833 <div id="a11y-description-blocks" style="position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);clip-path:inset(50%);white-space:nowrap;border:0;"> 1834 <div id="desc--archive-record">Archived records can be found by switching the status filter from Active to Archived.</div> 1835 <div id="desc--auto-submit">Auto submit on change.</div> 1836 <div id="desc--changing-end-time">Note: changing the start time may automatically update other time fields on the page</div> 1837 <div id="desc--changing-start-time">Note: changing the end time may automatically update other time fields on the page</div> 1838 <div id="desc--changing-timezone">Note: changing the timezone may automatically update other time fields on the page</div> 1839 <div id="desc--chat">Chat</div> 1840 <div id="desc--club-website">Open the group website in a new tab.</div> 1841 <div id="desc--delete-cannot-be-undone">This action permanently removes the record and cannot be undone.</div> 1842 <div id="desc--download">Download</div> 1843 <div id="desc--drag-drop">Press Enter or Space to grab or drop items, arrow keys to move, escape to restore original position, and Ctrl plus Enter or Space to add items to top of active menu.</div> 1844 <div id="desc--duplicate-record-with-copy">Creates a duplicate record and adds COPY to the title in parentheses.</div> 1845 <div id="desc--edit-delete-options">Enables edit and delete options</div> 1846 <div id="desc--escape-to-exit-dropdown">Press escape to collapse and exit the dropdown.</div> 1847 <div id="desc--expandable-sub-menu">Expandable sub-menu.</div> 1848 <div id="desc--immediate-action-reload">This will take immediate action and reload the page.</div> 1849 <div id="desc--making-selection-auto-save">Making a selection will automatically save the new status.</div> 1850 <div id="desc--making-selection-auto-save-tag">Making a selection will automatically add the tag.</div> 1851 <div id="desc--new-tab">New tab</div> 1852 <div id="desc--opens-email-builder">Opens the email builder for the selected groups.</div> 1853 <div id="desc--opens-email-client">Opens the default email client.</div> 1854 <div id="desc--paste-emails">Paste emails in the text box separated by a line or a comma.</div> 1855 <div id="desc--reload-page-filter-by">Reloads page and filters by this entry</div> 1856 <div id="desc--no-delete--group-registration">This checklist cannot be deleted because it is used for a Group Registration or Group Re-Registration approval process.</div> 1857 <div id="desc--selecting-will-reload-page">Changing the selection will reload the page</div> 1858 <div id="desc--selecting-will-update-form">Changing the selection will update the form</div> 1859 <div id="desc--selecting-will-update-page">Changing the selection will update the page</div> 1860 <div id="desc--selecting-will-update-row">Changing the selection will update the row</div> 1861 <div id="desc--slider-next">Click to get the next slides then shift-tab back to the slide deck.</div> 1862 <div id="desc--slider-prev">Click to get the previous slides then tab forward.</div> 1863 <div id="desc--stop-following">Stop following</div> 1864 <div id="desc--unarchive-record">Moves this record back into the Active status.</div> 1865 <div id="desc--use-arrow-keys">Use arrow keys</div> 1866 <div id="desc--video-conference-link">Video conferencing link, new tab.</div> 1867 <div id="desc--view-my-calendar">View my entire calendar or schedule.</div> 1868 <div id="desc--view-profile">Opens member profile</div> 1869 <div id="desc--you-are-attending-event">You are attending this event.</div> 1870 </div> 1871 1872
1872<script> 1873 const messagesToAnnounce = ["#div-top-warning-msg", "#div-top-ok-msg", "#div-top-info-msg"] 1874 .map(s => document.querySelector(`${s} > span[role="status"]`)) 1875 .filter(Boolean) 1876 .map(node => node.innerText); 1877 if(messagesToAnnounce.length > 0){ 1878 a11yAnnounceToScreenReader(messagesToAnnounce.join(". ")) 1879 } 1880 </script>
1880 1881 1882</body> 1883 1884 <!-- END AX != 1 --> 1885 1886 <style> 1887 1888 /* acc-keyboard-mode (OFF) - Default outline on :focus (none) */ 1889 body:not(.acc-keyboard-mode) :focus { outline: none; } 1890 body:not(.acc-keyboard-mode) a:focus { outline: none; } 1891 1892 body:not(.acc-keyboard-mode) button.close:focus { outline: none; } 1893 1894 body:not(.acc-keyboard-mode) .button:focus { outline: none; } 1895 body:not(.acc-keyboard-mode) .button.focus { outline: none; } 1896 1897 body:not(.acc-keyboard-mode) .btn.active.focus, 1898 body:not(.acc-keyboard-mode) .btn.active:focus, 1899 body:not(.acc-keyboard-mode) .btn.focus, 1900 body:not(.acc-keyboard-mode) .btn:active.focus, 1901 body:not(.acc-keyboard-mode) .btn:active:focus, 1902 body:not(.acc-keyboard-mode) .btn:focus { outline: none; } 1903 1904 body:not(.acc-keyboard-mode) .dropdown-toggle:focus { outline: none; } 1905 #header__btn-cont--manage:focus, #header__btn-cont--manage:focus-within { outline: none; } 1906 1907 /* no outline/focus on the following (various reasons including hover style on focus, other focus styles applied, etc.) */ 1908 body:not(.acc-keyboard-mode) h2:focus { outline: none; outline-offset: 0px; border: none; } 1909 /* .page__header--btns .btn:focus { outline: none !important; outline-offset: 0px !important; } */ 1910 /* a.btn--rounded:focus { outline: none !important; outline-offset: 0px !important; } */ 1911 1912 /* acc-keyboard-mode (ON) - Default outline on :focus (2px solid #000000) */ 1913 .acc-keyboard-mode a:focus { 1914 outline: 2px solid #000000; 1915 outline-offset: 2px; 1916 } 1917 1918 </style> 1919 1920 <!-- should always be last stylesheet loaded --> 1921 <link href="/static/css/accessibility.css?v=20251008.3" rel="stylesheet" /> 1922 1923</html> 1924
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.