CINXE.COM
List of Groups
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US"> <script> var jsPageName = "List of Groups"; // pass strPageName to JavaScript, used in function setPageName() [accessibility.js] var jsAjaxRequest = ('0' === '1') ? true : false; </script> <!-- AX != 1 --> <script> var url = new URL(location.href); history.replaceState({type: "website"} , '', url.pathname + url.search); </script> <head> <!-- META TAGS --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1,requiresActiveX=true"> <meta name="apple-itunes-app" content="app-id=566688504, affiliate-data=myAffiliateData, app-argument=myURL"> <title>List of Groups</title> <meta name="description" content="The campus engagement platform for UC San Francisco - Powered by CampusGroups."> <meta name="title" content="UC San Francisco"> <!-- Google Tag Manager --> <script> dataLayer = [{ 'signedIn': false }]; </script> <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-548G27F');</script> <!-- End Google Tag Manager --> <!-- CSS IMPORT --> <!-- FONT FOR DEV --> <link href="css/fonts/open-sans.css" rel="stylesheet" type="text/css" > <!-- FAVICON --> <link rel="icon" type="images/x-icon" href="/upload/ucsf/2019/s1_image_upload_34747_ucsffavicon_123105452.png"> <link rel="shortcut icon" type="images/x-icon" href="/upload/ucsf/2019/s1_image_upload_34747_ucsffavicon_123105452.png"> <!-- JQUERY UI --> <link rel="stylesheet" type="text/css" href="/bower_components/jquery-ui/themes/base/jquery-ui.min.css"> <!-- AUTOCOMPLETE --> <link rel="stylesheet" type="text/css" href="/js/jquery/jquery.autocomplete.css"> <!-- BOOTSTRAP & GLYPHICONS --> <link rel="stylesheet" type="text/css" href="/bower_components/bootstrap/dist/css/bootstrap.min.css"> <link rel="stylesheet" type="text/css" href="/static/plugins/bootstrap-multiselect/dist/css/bootstrap-multiselect.css"> <link rel="stylesheet" type="text/css" href="/glyphicons-pro/css/glyphicons-filetypes.css"> <!-- THICKBOX --> <link rel="stylesheet" type="text/css" href="/js/thickbox/thickbox.css"> <!-- JQUERY & FONT --> <script src="/bower_components/jquery/dist/jquery.min.js"></script> <script src="/bower_components/jquery-ui/jquery-ui.min.js"></script> <!-- BOOTSTRAP --> <script src="/bower_components/bootstrap/dist/js/bootstrap.min.js"></script> <script src="/static/plugins/bootstrap-multiselect/dist/js/bootstrap-multiselect.js"></script> <script type="text/javascript" src="/js/accessibility.js?v=20240514.1"></script> <script type="text/javascript" src="/js/scripts.js?v=20230316.1"></script> <link rel="stylesheet" type="text/css" href="/bower_components/mdi/css/materialdesignicons.min.css"> <link rel="stylesheet" type="text/css" href="/static/css/materialdesigniconscustom.css"> <link rel="stylesheet" type="text/css" href="/static/css/header.css?v=20220425.1"> <link rel="stylesheet" type="text/css" href="/css/bootstrap-customV.css?v=20241007.1"> </head> <body class="body-background " data-menu=""> <!-- SKIP links - skip to top of main content --> <div id="div-skip-links" class="skip-link-container-mobile"> <span style="padding: 5px"><a id="a-skip-to-main-content" href="javascript:" class="skip-link" onclick="setFocusToContent(true);" aria-label="Skip to Main Content">Skip to Main Content</a></span> <span id="span-skip-to-left-navigation" style="padding: 5px; display: none;"><a id="a-skip-to-left-navigation" href="javascript:" class="skip-link" onclick="setFocusToSidebar();" aria-label="Skip to Navigation">Skip to Navigation</a></span> <!-- ACCESSIBILITY --> <script> // if we're on mobile we will not enable the skip links const isMobileDevice = /Mobi/i.test(window.navigator.userAgent); // console.log('> isMobileDevice=' + isMobileDevice); $(window).on('load', function () { if (!isMobileDevice) { var elem = document.getElementById('div-skip-links'); if (typeof elem !== undefined) { elem.classList.remove('skip-link-container-mobile'); elem.classList.add('skip-link-container'); } } }); </script> </div> <!-- School custom code --> <!-- End school custom code --> <!-- Google Tag Manager (noscript) --> <!-- <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-548G27F" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> --> <!-- End Google Tag Manager (noscript) --> <!-- Modal --> <div id="primary-modal" class="modal fade" role="dialog"> <div class="modal-dialog" role="document"> <div class="modal-content"> <p class="loader"> <img alt="Loading" src="/images/loader-big.gif"> <br> Loading... </p> </div> </div> </div> <div id="secondary-modal" class="modal fade" role="dialog"> <div class="modal-dialog" role="document"> <div class="modal-content"> <p class="loader"> <img alt="Loading" src="/images/loader-big.gif"> <br> Loading... </p> </div> </div> </div> <script> $("#primary-modal").on("hide.bs.modal", function (e) { $("#primary-modal .modal-content").html(writeLoading("Loading")); }); $("#secondary-modal").on("hide.bs.modal", function (e) { $("#secondary-modal .modal-content").html(writeLoading("Loading")); }); </script> <!-- End Modal --> <script src="/static/js/modernizr.min.js"></script> <script src="/js/jquery-validate/jquery.validate.js"></script> <script src="/static/js/polyfill.js"></script> <!-- HEADER --> <style> .btn--school { background-color: #052049; color: #fff; } .btn--school:hover { background-color: #052049; color: #fff; } .btn--school:focus { background-color: #052049; color: #fff; } .topbar { background: #052049; border-color: #052049; } .topbar ul.nav > li > a:hover, .topbar ul.nav > li > button:hover { background-color: #ffffff !important; } .topbar ul.nav > li > a:focus, .topbar ul.nav > li > button:focus { background-color: #ffffff !important; outline: none; } .topbar .topbar__sidebar-toggle:hover { background-color: #ffffff !important; } .topbar .topbar__sidebar-toggle:focus { background-color: #ffffff !important; outline: none; } .topbar .open:not(.topbar__left) > a, .topbar .open:not(.topbar__left) > a:focus, .topbar > .open:not(.topbar__left) > a:hover, .topbar .open:not(.topbar__left) > button, .topbar .open:not(.topbar__left) > button:focus, .topbar > .open:not(.topbar__left) > button:hover { background-color: #ffffff !important; } .topbar li:focus-within > button.mdi-menu { background-color: #ffffff !important; } .topbar li.active > a, .topbar li.active > button { background-color: #ffffff !important; } </style> <div id="generic">Loading</div> <div id="outer-shell" class="outer-shell "> <!-- Impersonate --> <!-- /.Impersonate --> <!-- Message / Maintenance --> <!-- /.Message --> <div id="topbar" class="topbar topbar-website topbar--reverse" role="navigation" aria-label="Topbar"> <div class="topbar__left"> <div role="banner"> <a id="a-top-bar-logo" aria-label="UC San Francisco Logo. Opens the members homepage." role="button" class="logo" href="/groups"> <img class="topbar__icon-large" src="/upload/ucsf/2021/image_upload_34747_UCSF_Logo_21_White_RGB_5_122151121.png" alt="UC San Francisco Logo Image." aria-label="UC San Francisco Logo Image. Clicking opens the members home page." style="max-height: 50px; max-width: 165px;"> <img class="topbar__icon-small" src="/upload/ucsf/2019/image_upload_34747_ucsflogo_123105857.png" alt="UC San Francisco Logo Image." aria-label="UC San Francisco Logo Image. Clicking opens the members home page." style="max-height: 35px; max-width: 35px; margin: 0 5px;"> </a> </div> </div> <div class="topbar__center"> <nav aria-label="Topbar"> <ul class="nav"> <li> <a href="/assm/" style="display:flex; padding-top: 1rem; max-width: 100%;" role="button" aria-label="Associated Students of the School of Medicine"> <span class="mdi mdi-chevron-left" style="margin-top: 1.2rem;"></span> <img class="media-object--bordered" src="/upload/ucsf/2021/s2_image_upload_1349869_ASSM_Logo_JPG_75211653.png" alt="Associated Students of the School of Medicine's logo" style="background:#fff; height: 40px; width: 40px; margin-right: 5px;"> <span class="hidden-xs" style="margin-top: 1.2rem;">Associated Students of the School of Medicine</span> </a> </li> <li class="spacer" role="presentation"></li> <!-- Login Button --> <li class=""> <a class="topbar__menu topbar__menu--row" href="/login_only" aria-label="Sign In Section" role="button"> <span class="mdi mdi-login-variant mdi-24px"></span> <span class="hidden-xs hidden-sm topbar__menu-text" style="overflow: initial;"> Sign In </span> </a> </li> <!-- /.Login Button --> <style> #a-top-bar-logo:focus > i { outline: 2px solid #ffffff; } </style> </ul> </nav> </div><!-- /.navbar-collapse --> </div><!-- /.topbar --> <div id="inner-shell" class="inner-shell"> <!-- END HEADER --> <div id="content-cont" class="content-cont container"> <div id="page-cont" class="content" role="main" aria-label="Main Content."> <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> <!-- Used in email_form --> <!-- END AX != 1 --> <style> @media(max-width:500px){ .row > div{ padding-left:10px !important; padding-right:10px !important; } #list-group-item_header{ display:none; } .container{ padding:0px !important; } #groups-cont{ margin-top: 30px !important; } #listing__header-cont h2 { margin-top: 0px; } .badge { font-size: 12px; } .media-left > a > img{ width:60px; height:60px; } .info_hidden_xxs{ display:none } #info_showed_xxs{ display:inline !important; } .listing-element__title-block{ margin-bottom:10px } .membership_type{ margin:0px !important; } .list-group-item{ padding-bottom:10px !important; } .row > .desc-block{ padding-left:30px !important; } } </style> <div id="listing__header-cont" class="row"> <div class="col-xs-12 col-sm-12 col-md-8 col-lg-8"> <h1 class="header-cg--h2"> <span id="listing__header--icon" class="mdi mdi-account-arrow-right color-cg--group"></span> <span id="listing__header--title">Join Group</span> <small id="clubsCount"></small> </h1> </div> </div> <div class="card-border border-cg--group"></div> <div> <div class="visually-hidden" role="region">This region is just before the group list results. Press Tab to continue.</div> <ul class="list-group" style="margin-bottom: 80px;"> <form action="club_signup_form" method="post" name="form_clubs" id="form_clubs"> <input type="hidden" name="_csrf" value="iS8dj0+dwxMy6N8JB+Q7q1DR+hYwOvYql+PhIJ2MQbI9"> <li class="list-group-item" style="padding: 20px 15px;"> <div class="row"> <div class="col-xxs-2_5 col-xs-2 col-sm-5 col-md-1 text-center"> <div class="checkbox checkbox-cg--group" style="margin-left:15px;margin-top:0px"> <input id="cb_club_24028" onclick="toggle_ecg('email_restriction_24028');toggle_ecg('div_waiver_24028', 'cb_club_24028', 'div_waiver_24028');onSelectClubToJoin(this);" type="checkbox" class="nb" name="clubs" value="24028" /> <label for="cb_club_24028"> <span class="visually-hidden">Select Associated Students of the School of Medicine's group. Select the group and click on the Join button at the bottom of the page to register for this group</span> </label> </div> </div> <div class="listing-element__title-block col-xxs-9_5 col-xs-19 col-sm-10_5 col-md-5_5"> <div class="media"> <div class="media-left"> <a target="_blank" href="https://moodle.ucsf.edu/course/view.php?id=2583"> <img class="media-object media-object--bordered" width="80px" height="80px" alt="Associated Students of the School of Medicine's logo" src="/upload/ucsf/2021/s2_image_upload_1349869_ASSM_Logo_JPG_75211653.png" onError="this.onerror=null;this.src='/images/listing-default.png';"> </a> </div> <div class="media-body"> <h2 class="media-heading header-cg--h4"> <a target="_blank" href="https://moodle.ucsf.edu/course/view.php?id=2583"> Associated Students of the School of Medicine </a> </h4> <p class="h5 media-heading grey-element"> Student Government - Academic & Professional </p> <div style="word-break: break-word;"> <p class="h5 media-heading" style="margin-top: 10px;"> <a aria-label="Associated Students of the School of Medicine Website. Website will open in a new tab." style="margin-right: 15px;" target="_blank" href="https://moodle.ucsf.edu/course/view.php?id=2583"><span class="mdi mdi-web"></span>Website</a> <a id="a-mission_24028" aria-label="Associated Students of the School of Medicine mission" style="margin-right: 15px;" href="javascript:toggle_ecg('club_24028', 'a-mission_24028', 'club_24028');"><span class="mdi mdi-checkbox-marked-circle-outline"></span>Mission</a> <div style="border-top:1px solid #ccc; margin-top:15px"> <p style="margin-top:10px"> <span class='mdi mdi-comment-text-outline' style='color: #337ab7;'></span> Contact: <a title='Send a message to the group:' href="javascript:;" onClick="openModal('/send_message_boot?club_uid=33da3826-8ef6-11e9-b822-0a85c368333a&club_id=24028&ax=1&async=1&modal=true');">Email group officers</a></p> </div> </p> <p style="display:none" class="noOutlineOnFocus" tabindex="0" id="club_24028" onclick="toggle_ecg('club_24028', 'a-mission_24028', 'a-mission_24028');"> <strong>Mission</strong><br> We are a group of medical students elected by our peers to represent the student body and act as liaisons to the School of Medicine faculty and administration. We are your student government!<br /><br />To ensure that medical students have the best possible experience during their years at UCSF, we organize social events to promote inter-class mentorship, we distribute funding to student groups, and we communicate your concerns to the deans and faculty. </p> <script> $("#club_24028").on('focus', function() { $("#club_24028").keyup(null); setTimeout(function() { var isActive = false; $("#club_24028").keyup(function(event) { if (isActive) { return; } isActive = true; if (event.which === 13) { $("#club_24028").keyup(null); $("#club_24028").click(); } else { isActive = false; } }); }, 250); }); </script> <p style="display:none" class="noOutlineOnFocus" tabindex="0" id="club_whatwedo_24028" onclick="toggle_ecg('club_whatwedo_24028', 'a-member-benefits_24028', 'a-member-benefits_24028');"><strong>Membership Benefits</strong><br></p> <script> $("#club_whatwedo_24028").on('focus', function() { $("#club_whatwedo_24028").keyup(null); setTimeout(function() { var isActive = false; $("#club_whatwedo_24028").keyup(function(event) { if (isActive) { return; } isActive = true; if (event.which === 13) { $("#club_whatwedo_24028").keyup(null); $("#club_whatwedo_24028").click(); } else { isActive = false; } }); }, 250); }); </script> </div> </div> </div> <div> </div> </div> <div class="desc-block col-xxs-10 col-xxs-offset-2 col-xs-10 col-xs-offset-2 col-sm-10_5 col-sm-offset-1_5 col-md-offset-0 col-md-3_5 text-left"> <strong></strong><p><span style="color:#686868;"> Lifetime membership</span></p> </div> </div> </li> <script> $('document').ready(function(){ document.getElementById("cb_club_24028").click(); }); </script> <div class="visually-hidden" role="region">This region is just before the bottom page controls. Press Tab to continue.</div> <div class=" text-center"> <script type="text/javascript"> function check_more_details() { var arr_ids = []; $('input[name=clubs]:checked').map(function() { arr_ids.push($(this).val()); }); var submit = 1; for (x = 0; x < arr_ids.length; x++) { if ( document.getElementById("cb_club_" + arr_ids[x]).checked ) { if (document.getElementById("more_details_" + arr_ids[x]).value == "") { submit = 0; } } } if (submit == 0) { alert("You must fill out the More Details text boxes of the selected groups."); return false; } else { return true; } } function check_waiver() { var arr_ids = []; $('input[name=clubs]:checked').map(function() { arr_ids.push($(this).val()); }); var submit = 1; for (x = 0; x < arr_ids.length; x++) { if ( document.getElementById("cb_club_" + arr_ids[x]).checked && document.getElementById("waiver_" + arr_ids[x])) { if ((!document.getElementById("waiver_" + arr_ids[x]).checked && $("#waiver_" + arr_ids[x]).is(":visible")) || ($("#waiver_signature_" + arr_ids[x]).val() === "" && $("#waiver_signature_" + arr_ids[x]).is(":visible"))) { submit = 0; } } } if (submit == 0) { alert("You must agree and sign all the waivers of the groups you selected."); return false; } else { return true; } } function check_membership_option() { var arr_ids = []; $('input[name=clubs]:checked').map(function() { arr_ids.push($(this).val()); }); var submit = 1; for (x = 0; x < arr_ids.length; x++) { if ( document.getElementById("cb_club_" + arr_ids[x]).checked ) { if (document.getElementById("club_options_" + arr_ids[x])) { if (document.getElementById("club_options_" + arr_ids[x]).value == "") { submit = 0; } } } } if (submit == 0) { alert("You must select a Membership Option for each of the applicable selected groups."); return false; } else { return true; } } </script> <input onclick="javascript: var waiver = check_waiver(); var membership_option = check_membership_option(); if (waiver && membership_option) {return check_more_details();} else {return false;}" class="btn btn-cg--group" type="submit" role="button" name="Submit" value=" Join " style="margin-top: 10px;"/> </div> </form> </ul> </div> <script> function onSelectClubToJoin(checkbox) { if( $(checkbox).prop('checked') ) { $(checkbox).closest(".list-group-item").addClass("list-group-item--selected").addClass("border-cg--group") } else { $(checkbox).closest(".list-group-item").removeClass("list-group-item--selected").removeClass("border-cg--group") } } </script> <!-- LL - 10/03/2017: Moved up here so ckeditor can work in popups --> <script> //YT Viewer if (typeof arrYoutubePlayerObjects != "undefined") { $("#youtubeScript").remove(); $("#www-widgetapi-script").remove(); if (window['YT'] != undefined) { window.YT.loading = 0; window.YT.loaded = 0; } var youtubeTag = document.createElement('script'); youtubeTag.id = "youtubeScript"; youtubeTag.src = "https://www.youtube.com/iframe_api"; youtubeTag.async = false; // Get First Script Tag & Insert Vimeo Script before that. var firstScriptTag = document.getElementsByTagName('script')[0]; firstScriptTag.parentNode.insertBefore(youtubeTag, firstScriptTag); // Array of Players var arrYoutubePlayers = []; // Functions to work on Youtube Players function onYoutubePlayerReady(event) { var player = event.target; $(window).blur(function() { player.pauseVideo(); }); $(window).scroll(function() { if ( !isInViewport(document.getElementById("player--" + player.youtubeObject.cgID))) { player.pauseVideo(); } }); var startTime = new Date(player.youtubeObject.startTime * 1000).toISOString(); var totalTime = new Date(player.getDuration() * 1000).toISOString(); if (player.getDuration() >= 3600) { startTime = startTime.substr(11, 8); totalTime = totalTime.substr(11, 8); } else { startTime = startTime.substr(14, 5); totalTime = totalTime.substr(14, 5); } $("#player-btn--" + player.youtubeObject.cgID + " div.timer").html("<span id='player-time--" + player.youtubeObject.cgID + "'>" + startTime + "</span> / " + totalTime); } function onYoutubePlayerStateChange(event) { var player = event.target; if (event.data == YT.PlayerState.PLAYING) { // Change Buttons $("#player-btn--" + player.youtubeObject.cgID + " button.playpause").attr("data-status", "pause").attr("aria-label", "Pause"); $("#player-btn--" + player.youtubeObject.cgID + " button.playpause span.mdi").removeClass("mdi-play").addClass("mdi-pause"); } if (event.data == YT.PlayerState.PLAYING && player.intervalFunction == null) { // HACK For Window BLUR window.focus(); // AJAX Recurring Call player.intervalFunction = setInterval(function() { postVideoViews(player.youtubeObject.cgUID, player.youtubeObject.cgUID_s, player.getCurrentTime()); }, 10000); // Timer player.intervalTimerFunction = setInterval(function() { var currentTime = new Date(player.getCurrentTime() * 1000).toISOString(); if (player.getDuration() >= 3600) { currentTime = currentTime.substr(11, 8); } else { currentTime = currentTime.substr(14, 5); } $("#player-time--" + player.youtubeObject.cgID).html(currentTime); }, 1000) } else if (event.data == YT.PlayerState.PAUSED || event.data == YT.PlayerState.ENDED) { // Change Buttons $("#player-btn--" + player.youtubeObject.cgID + " button.playpause").attr("data-status", "play").attr("aria-label", "Play"); $("#player-btn--" + player.youtubeObject.cgID + " button.playpause span.mdi").removeClass("mdi-pause").addClass("mdi-play"); clearInterval(player.intervalFunction); clearInterval(player.intervalTimerFunction); player.intervalFunction = null; player.intervalTimerFunction = null; postVideoViews(player.youtubeObject.cgUID, player.youtubeObject.cgUID_s, player.getCurrentTime(), (event.data == YT.PlayerState.ENDED ? 'true' : '')); //if (event.data == YT.PlayerState.ENDED) { //if (typeof refreshTrackChecklist !== "undefined") { refreshTrackChecklist(); } //else if (typeof parent.refreshTrackChecklist !== "undefined") { parent.refreshTrackChecklist(); } //} } } function youtubePlayerPlayPause(player) { var currentStatus = $("#player-btn--" + player.youtubeObject.cgID + " button.playpause").attr("data-status"); if (currentStatus == "play") { player.playVideo(); } else if (currentStatus == "pause") { player.pauseVideo(); } } /* Function that checks localStorage for the Vimeo/YouTube closed captions load policy. Returns number values: * 0 - closed captions should be be disabled (do not load closed captions) * 1 - closed captions should be loaded when video loads * If the local storage key is not defined we return 0 (as a number). */ function getVideoPlayerCCLoadPolicy() { try { const lsKey = 'cg-video-player-cc-load-policy'; const ccLoadPolicy = localStorage.getItem(lsKey); return (ccLoadPolicy === '1') ? 1 : 0; } catch(e) { return 0; } } /* Function that toggles the video player CC load policy stored in local storage. Toggled values are (strings values): * '0' - closed captions should be be disabled (do not load closed captions) * '1' - closed captions should be loaded when video loads * If the local storage key is not defined it is treated as though the value were '0' and toggles to '1'. * */ function toggleVideoPlayerCCLoadPolicy() { try { const lsKey = 'cg-video-player-cc-load-policy'; const ccLoadPolicy = localStorage.getItem(lsKey); if (ccLoadPolicy === '1') { localStorage.setItem(lsKey, '0'); } else { localStorage.setItem(lsKey, '1'); } } catch(e) { return; } } /* Function that prompts the user for confirmation before toggling the video player closed caption load policy. * - If closed captions are currently turned off, the user will be prompted to confirm before turning them on (and vice versa) * - Video player CC load policy setting is stored in local storage (see above functions) * - Vimeo and YouTube video players require reload of the associated IFrames to change the setting, * if user confirms yes to reload, the page will be reloaded. */ function toggleClosedCaptionsAndReloadVideoIframes() { const turnClosedCaptionsOnOff = (typeof getVideoPlayerCCLoadPolicy !== 'undefined' && getVideoPlayerCCLoadPolicy() === 1) ? 'off' : 'on'; 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 + '?'; if (confirm(message)) { toggleVideoPlayerCCLoadPolicy(); location.reload(); } else { return false; } } // Called when the script is fully loaded. function onYouTubeIframeAPIReady() { // Loop through players arrYoutubePlayerObjects.forEach(function (youtubeObject, index) { arrYoutubePlayers[index] = new YT.Player("player--" + youtubeObject.cgID, { height: youtubeObject.height, width: youtubeObject.width, videoId: youtubeObject.videoID, playerVars: { modestbranding: 1, rel: 0, disablekb: 1, playsinline: 1, controls: 0, start: youtubeObject.startTime, cc_load_policy: (typeof getVideoPlayerCCLoadPolicy !== 'undefined') ? getVideoPlayerCCLoadPolicy() : 0 }, events: { 'onStateChange': onYoutubePlayerStateChange, 'onReady': onYoutubePlayerReady } }); arrYoutubePlayers[index].youtubeObject = youtubeObject; arrYoutubePlayers[index].intervalFunction = null; $("#player-btn--" + youtubeObject.cgID + " button.playpause").on('click', function() { youtubePlayerPlayPause(arrYoutubePlayers[index]); }); $("#player-btn--" + youtubeObject.cgID + " button.replay").on('click', function() { arrYoutubePlayers[index].seekTo(0); }); $("#player-btn--" + youtubeObject.cgID + " button.rewind").on('click', function() { arrYoutubePlayers[index].seekTo(arrYoutubePlayers[index].getCurrentTime() - 10); }); const turnClosedCaptionsOnOff = (typeof getVideoPlayerCCLoadPolicy !== 'undefined' && getVideoPlayerCCLoadPolicy() === 1) ? 'off' : 'on'; $("#player-btn--" + youtubeObject.cgID + " button.closedcaption").attr('aria-label', 'Turn ' + turnClosedCaptionsOnOff + ' closed captions. Note, this requires a reload of the current page.'); $("#player-btn--" + youtubeObject.cgID + " button.closedcaption").on('click', function() { toggleClosedCaptionsAndReloadVideoIframes(); }); $("#player-btn--" + youtubeObject.cgID + " button.fullscreen").on('click', function() { arrYoutubePlayers[index].pauseVideo(); tb_show("", "/video_player?embed=1&uid=" + youtubeObject.cgUID + "&width=995&height=680&modal=true&TB_iframe=1", ""); }); }); arrYoutubePlayerObjects = undefined; } } //Vimeo Viewer if (typeof arrVimeoPlayerObjects != "undefined") { $("#vimeoScript").remove(); var vimeoTag = document.createElement('script'); vimeoTag.id = "vimeoScript"; vimeoTag.src = "https://player.vimeo.com/api/player.js"; vimeoTag.async = false; // Get First Script Tag & Insert Vimeo Script before that. var firstScriptTag = document.getElementsByTagName('script')[0]; firstScriptTag.parentNode.insertBefore(vimeoTag, firstScriptTag); // Array of Players var arrVimeoPlayers = []; // Functions to work on Vimeo Players function vimeoPlayerPlay(player) { // Change Buttons $("#player-btn--" + player.vimeoObject.cgID + " button.playpause").attr("data-status", "pause").attr("aria-label", "Pause"); $("#player-btn--" + player.vimeoObject.cgID + " button.playpause span.mdi").removeClass("mdi-play").addClass("mdi-pause"); // AJAX Recurring Call player.intervalFunction = setInterval( function() { player.getCurrentTime().then( function(seconds) { postVideoViews(player.vimeoObject.cgUID, player.vimeoObject.cgUID_s, seconds); }) }, 10000) // Timer player.intervalTimerFunction = setInterval(function() { player.getCurrentTime().then( function(seconds) { var currentTime = new Date(seconds * 1000).toISOString(); if (player.totalDuration >= 3600) { currentTime = currentTime.substr(11, 8); } else { currentTime = currentTime.substr(14, 5); } $("#player-time--" + player.vimeoObject.cgID).html(currentTime); }) }, 1000) } function vimeoPlayerPause(player) { // Change Buttons $("#player-btn--" + player.vimeoObject.cgID + " button.playpause").attr("data-status", "play").attr("aria-label", "Play"); $("#player-btn--" + player.vimeoObject.cgID + " button.playpause span.mdi").removeClass("mdi-pause").addClass("mdi-play"); // Clear AJAX Recurring Call clearInterval(player.intervalFunction); clearInterval(player.intervalTimerFunction); player.intervalFunction = null; player.intervalTimerFunction = null; player.getCurrentTime().then( function(seconds) { postVideoViews(player.vimeoObject.cgUID, player.vimeoObject.cgUID_s, seconds); }); } function vimeoPlayerEnded(player) { // Change Buttons $("#player-btn--" + player.vimeoObject.cgID + " button.playpause").attr("data-status", "play").attr("aria-label", "Play"); $("#player-btn--" + player.vimeoObject.cgID + " button.playpause span.mdi").removeClass("mdi-pause").addClass("mdi-play"); // Clear AJAX Recurring Call clearInterval(player.intervalFunction); clearInterval(player.intervalTimerFunction); player.intervalFunction = null; player.intervalTimerFunction = null; player.getCurrentTime().then( function(seconds) { postVideoViews(player.vimeoObject.cgUID, player.vimeoObject.cgUID_s, seconds, 'true'); }); //if (typeof refreshTrackChecklist !== "undefined") { refreshTrackChecklist(); } //else if (typeof parent.refreshTrackChecklist !== "undefined") { parent.refreshTrackChecklist(); } } function vimeoPlayerPlayPause(player) { var currentStatus = $("#player-btn--" + player.vimeoObject.cgID + " button.playpause").attr("data-status"); if (currentStatus == "play") { player.play(); } else if (currentStatus == "pause") { player.pause(); } } // We wait until the script is fully loaded. $("#vimeoScript").on('load', function() { // Loop through players arrVimeoPlayerObjects.forEach(function (vimeoObject, index) { if (typeof getVideoPlayerCCLoadPolicy !== 'undefined' && getVideoPlayerCCLoadPolicy() === 1) { // load with closed captions enabled (set texttrack to 'en') arrVimeoPlayers[index] = new Vimeo.Player("player--" + vimeoObject.cgID, { url: vimeoObject.URL , height: vimeoObject.height, width: vimeoObject.width, controls: false, texttrack: 'en' }); } else { arrVimeoPlayers[index] = new Vimeo.Player("player--" + vimeoObject.cgID, { url: vimeoObject.URL , height: vimeoObject.height, width: vimeoObject.width, controls: false }); } arrVimeoPlayers[index].vimeoObject = vimeoObject; arrVimeoPlayers[index].intervalFunction = null; if (vimeoObject.startTime != 0) { arrVimeoPlayers[index].setCurrentTime(vimeoObject.startTime); } arrVimeoPlayers[index].on('play', function() { vimeoPlayerPlay(this) } ); arrVimeoPlayers[index].on('pause', function() { vimeoPlayerPause(this) } ); arrVimeoPlayers[index].on('ended', function() { vimeoPlayerEnded(this) } ); $("#player-btn--" + vimeoObject.cgID + " button.playpause").on('click', function() { vimeoPlayerPlayPause(arrVimeoPlayers[index]); }); $("#player-btn--" + vimeoObject.cgID + " button.replay").on('click', function() { arrVimeoPlayers[index].setCurrentTime(0) }); $("#player-btn--" + vimeoObject.cgID + " button.rewind").on('click', function() { arrVimeoPlayers[index].getCurrentTime().then(function(seconds) { arrVimeoPlayers[index].setCurrentTime(Math.max(0, seconds - 10)); }) }); const turnClosedCaptionsOnOff = (typeof getVideoPlayerCCLoadPolicy !== 'undefined' && getVideoPlayerCCLoadPolicy() === 1) ? 'off' : 'on'; $("#player-btn--" + vimeoObject.cgID + " button.closedcaption").attr('aria-label', 'Turn ' + turnClosedCaptionsOnOff + ' closed captions. Note, this requires a reload of the current page.'); $("#player-btn--" + vimeoObject.cgID + " button.closedcaption").on('click', function() { toggleClosedCaptionsAndReloadVideoIframes(); }); $("#player-btn--" + vimeoObject.cgID + " button.fullscreen").on('click', function() { arrVimeoPlayers[index].pause(); tb_show("", "/video_player?embed=1&uid=" + vimeoObject.cgUID + "&width=995&height=680&modal=true&TB_iframe=1", ""); }); $(window).blur(function() { arrVimeoPlayers[index].pause(); }); $(window).scroll(function() { if ( !isInViewport(document.getElementById("player--" + vimeoObject.cgID))) { arrVimeoPlayers[index].pause(); } }); var startTime = new Date(vimeoObject.startTime * 1000).toISOString(); var totalTime = 0; arrVimeoPlayers[index].getDuration().then(function(seconds) { arrVimeoPlayers[index].totalDuration = seconds; totalTime = new Date(seconds * 1000).toISOString(); if (seconds >= 3600) { startTime = startTime.substr(11, 8); totalTime = totalTime.substr(11, 8); } else { startTime = startTime.substr(14, 5); totalTime = totalTime.substr(14, 5); } $("#player-btn--" + vimeoObject.cgID + " div.timer").html("<span id='player-time--" + vimeoObject.cgID + "'>" + startTime + "</span> / " + totalTime); }); }); arrVimeoPlayerObjects = undefined; }); } </script> <script> $(document).ready(function(){ $("[data-toggle='tooltip']").tooltip(); $(".btn--loader").click(function() { loadButton($(this)); }); tb_init('a.thickbox, area.thickbox, input.thickbox'); // fix for the non editable input in ckeditor (ex: URL...) $(".modal").removeAttr("tabindex"); setupAjaxAccessibility(); }); </script> <!-- AX != 1 --> </div><!--/.content --> </div><!--/.content-page --> </div><!--/.inner-shell --> <script type="text/javascript" src="/js/jquery-migrate-1.2.1.js"></script> <!-- THICKBOX --> <script src="/js/thickbox/thickbox.js"></script> <script type="text/javascript" src="/static/js/metisMenuCustom.js?v=1"></script> <script type="text/javascript" src="/static/js/jquery.slimscroll.js"></script> <!--<link href="/static/css/scrollbar.css" rel="stylesheet"> <script type="text/javascript" src="/static/js/scrollbar.js"></script>--> <script type="text/javascript">function $$(strId) { return document.getElementById(strId); }</script> <script type="text/javascript" src="/static/plugins/clamp/clamp.min.js"></script> <script type="text/javascript" src="/static/js/core.js"></script> <script type="text/javascript" src="/static/js/menu.js"></script> <script type="text/javascript" src="/static/js/routing.js"></script> <script type="text/javascript">$.ajaxSetup({cache:true})</script> <!-- @TODO: This is for jPrompt. We might to see if an update is available or give it a better style --> <link href="/js/jquery-alerts/jquery.alerts.css" rel="stylesheet" type="text/css"> <script src="/js/jquery-alerts/jquery.alerts.js" type="text/javascript"></script> <!-- @TODO: Check if used : put directly on /r and student_password--> <script> </script> <!-- Google Analytics --> <script> var _customTask = function() { return function(model){ var piiRegex = [ { name: 'Email', regex: /.{4}@.{4}/g}, { name: 'Phone_Number', regex: /^(\+|\d)[0-9]{7,16}$/g}, { name: 'SSN', regex: /^\d{3}-\d{2}-\d{4}$}/g}, { name: 'Address', regex: /^\d+\s[A-z]+\s[A-z]+/g}]; var globalSendTaskName = '_' + model.get('trackingId') + '_sendHitTask'; // Fetch reference to the original sendHitTask var originalSendTask = window[globalSendTaskName] = window[globalSendTaskName] || model.get('sendHitTask'); var i, hitPayload, parts, val; // Overwrite sendHitTask with PII purger model.set('sendHitTask', function(sendModel) { hitPayload = sendModel.get('hitPayload').split('&'); for (i = 0; i < hitPayload.length; i++) { parts = hitPayload[i].split('='); // Double-decode, to account for web server encode + analytics.js encode try { val = decodeURIComponent(decodeURIComponent(parts[1])); } catch(e) { val = decodeURIComponent(parts[1]); } piiRegex.forEach(function(pii) { val = val.replace(pii.regex, '[REDACTED ' + pii.name + ']'); }); parts[1] = encodeURIComponent(val); hitPayload[i] = parts.join('='); } sendModel.set('hitPayload', hitPayload.join('&'), true); originalSendTask(sendModel); }); }; } </script> <!-- End Google Analytics --> <!-- Help --> <!-- End Help --> </body> <!-- END AX != 1 --> <style> /* Accessibility Mode OFF - Default outline on :focus (none) */ :focus { outline: none; } a:focus { outline: none; } button.close:focus { outline: none; } .button:focus { outline: none; } .button.focus { outline: none; } .btn.active.focus, .btn.active:focus, .btn.focus, .btn:active.focus, .btn:active:focus, .btn:focus { outline: none; } .dropdown-toggle:focus { outline: none; } #header__btn-cont--manage:focus, #header__btn-cont--manage:focus-within { outline: none; } /* no outline/focus on the following (various reasons including hover style on focus, other focus styles applied, etc.) */ h2:focus { outline: none; outline-offset: 0px; border: none; } /* .page__header--btns .btn:focus { outline: none !important; outline-offset: 0px !important; } */ /* a.btn--rounded:focus { outline: none !important; outline-offset: 0px !important; } */ </style> <!-- should always be last stylesheet loaded, version=yyyymmddx --> <link href="/static/css/accessibility.css?v=20220717.1" rel="stylesheet" /> </html>