CINXE.COM
Library Events and Classes - LibCal - University of California, San Francisco
<!DOCTYPE html> <html lang="en"> <head> <!-- iid: 138 --> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=Edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link href="https://static-assets-us.libcal.com/bootstrap_13/bootstrap3.min.css" rel="stylesheet"> <link href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"> <link href="https://static-assets-us.libcal.com/css_708/LibCal_public.min.css" rel="stylesheet"> <link href="https://static-assets-us.libcal.com/css_708/print.min.css" rel="stylesheet" media="print"> <script src="https://static-assets-us.libcal.com/jquery_16/jquery.min.js"></script> <script src="https://static-assets-us.libcal.com/bootstrap_13/bootstrap3.min.js"></script> <script src="https://static-assets-us.libcal.com/js_708/LibCal_public.min.js"></script> <script> springSpace.dateFormat = "dddd, MMM D YYYY"; springSpace.dateShortFormat = "MMMM D, YYYY"; springSpace.timeFormat = "h:mma"; springSpace.timezone = 'America/Los_Angeles'; springSpace.currency = "USD"; springSpace.currencySymbol = "$"; springSpace.language = 'en'; // en springSpace.locale = 'en-US'; // en-US springSpace.phpTimeFormat = 'g:ia'; springSpace.bootstrapAsset = 'https://static-assets-us.libcal.com/bootstrap_13/bootstrap3_16.min.css'; springSpace.publicCssAsset = 'https://static-assets-us.libcal.com/css_708/LibCal_public.min.css'; springSpace.adminCssAsset = 'https://static-assets-us.libcal.com/css_708/LibCal_admin.min.css'; </script> <title> Library Events and Classes - LibCal - University of California, San Francisco </title> <style> #s-lc-public-banner { padding: 0; margin: 0; } .s-lc-public-footer { margin: 0; } </style> <link rel="alternate" type="application/rss+xml" title="Latest Events" href="/rss.php?iid=138&m=month&cid=928"/> <link rel="stylesheet" href="https://static-assets-us.libcal.com/css_708/datepicker.min.css"/> <style> .bs-placeholder { color: #333 !important; } .s-lc-c-erh { margin-top: 6px; } .datepicker-inline { width: 100%; } .datepicker table { width: 100%; } .s-lc-c-ical-link-vert { float: right; } .s-lc-c-ical-description-vert { text-align: right; } .s-lc-c-list-cont-horiz { clear: both; } #cal-form .bootstrap-select { width: 100%; } #cal-form .bootstrap-select .btn { font-size: 12px; } /* This CSS controls: */ /* Public and Admin System Calendar */ /* Public Full and Mini Calendar Widget */ /*Embeddable mini-calendar - from Widgets/API section */ #mini-calendar { border: 3px solid #066A9E; padding: 2px; -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px;} .cal-mini {width: 100%; font-family: Arial, Verdana, sans-serif; } .cal-mini td { border-right: 1px solid #f2f2f2; } .cal-mini-day-head, .cal-mini-title-row td {border: 0px!important; background-color: #f2f2f2;} .cal-mini-title {text-align: center; color: #362E2C; font: bold 14px Arial, Verdana, sans-serif;} .cal-mini-day-head { color: #7F7F7F; text-align: center; font-size: 12px; font-weight: bold; } .cal-mini-arrow { text-align: center!important; font-size: 16px;} .cal-mini-day-num, .cal-mini-day-pad { text-align: center; color: #362E2C; margin:1px;} .cal-mini-hasevent a { -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; background-color: #FF972F; border: 1px solid #fff; display: block; color: #fff; text-decoration: none; } .cal-mini-hasevent a:hover { background-color: #fff; color: #FF972F; text-decoration: none; border: 1px solid #FF972F; } #calevent-mini-list-h { padding: 3px 0px 3px 5px; color: #362E2C; border-top: 1px solid #f2f2f2; border-bottom: 1px solid #066A9E; background-color: #f2f2f2; font: bold 12px Arial, Verdana, sans-serif; } .calevent-mini { list-style-type: none; padding: 0px; margin:0px; overflow: auto; } .calevent-mini-time { padding: 0px; margin: 0px; color: #4A4A4A; font-size: 11px;} .calevent-mini li a{ font-weight: bold; } .calevent-mini li{ padding: 0px 5px; margin: 0px; border-bottom: 1px solid #f2f2f2; } .calevent-mini li:hover{ background-color: #f2f2f2; } </style> <!-- Start of ucsflibrary Zendesk Widget script --> <script id="ze-snippet" src="https://static.zdassets.com/ekr/snippet.js?key=adf68403-a4fd-4dfb-8db7-26bd8920eef0"> </script> <!-- End of ucsflibrary Zendesk Widget script --> <!-- Library Cost Study tracking script--> <script defer src="https://librarystudy.ucsf.edu/gsurvey.js"></script> <style> /*Remove empty bullet point from calendar home page*/ #s-lc-content-eqlist-26122 > ul > li.divider { display: none; } /*Change color of tentative blocks*/ .lc_rm_t { background-color: #999; } /* UCSF banner & library logo styles */ body { padding: 0; margin: 0; } #ucsf-banner-nav .top-header-container, #ucsf-headers { margin-right: auto; margin-left: auto; max-width: 100%; } #ucsf-banner-nav { height: 40px; overflow: visible; font-family: "Helvetica Neue", arial, sans-serif; background: #052049; } #ucsf-banner-nav.no-logo .top-header-container ul.menu li.first { background: 0 0; text-indent: 0; padding-left: 0; } #ucsf-banner-nav .top-header-container { padding-left: 15px; padding-right: 15px; } #ucsf-banner-nav .top-header-container ul.menu { padding: 0; margin: 0; } #ucsf-banner-nav .top-header-container ul.menu li.first { display: inline-block; float: left; padding: 12px 0 12px 58px; background: url(ucsf-logo-banner.png) 0 35% no-repeat; background-position-x: 0; background-position-y: 35%; } #ucsf-banner-nav .top-header-container ul.menu li { display: inline-block; float: right; font-size: 14px; padding: 12px 10px; } @media (max-width: 830px) { #ucsf-banner-nav .top-header-container ul.menu li { display: none; } } @media (max-width: 600px) { #ucsf-banner-nav .top-header-container ul.menu li.first { text-indent: 100%; white-space: nowrap; overflow: visible; } #ucsf-banner-nav .top-header-container ul.menu li { display: none; } } #ucsf-banner-nav .top-header-container ul.menu li a { text-decoration: none; color: #fff; } #ucsf-banner-nav .top-header-container ul.menu li a:hover { text-decoration: underline; } #ucsf-banner-nav.arial { font-family: arial, sans-serif; } #ucsf-banner-nav.bluetint { background: #506380; } :root #ucsf-banner-nav .top-header-container ul.menu li.first { background: 0 35%; background-size: 45px 22px; background-position-x: 0; background-position-y: 35%; } header { background: #052049; padding: 1.25em; margin: 0 0 0.5em; border-radius: 0; } /* footer feedback button styles */ .ucsf-footer { width: 100%; margin: 15px auto 0; max-width: 1230px; padding: 5px 15px; border-top: 1px solid #aaa; } #s-lc-public-footer { background-color: #052049; color: white; } #s-lc-public-footer a { color: white; } .inline-list { margin: 0 0 1.0625rem -1.375rem; padding: 0; list-style: none; overflow: visible; } .inline-list > li { list-style: none; float: left; margin-left: 1.375rem; margin-top: 5px; display: block; } .inline-list > li > * { display: block; } #feedback-link { background-color: #007cbe; color: #fff; font-weight: 700; padding: 0 4px; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; } #feedback-link:hover { cursor: pointer; background-color: #052429; } /* Overrides Equipment image fixed height and makes equipment images responsive */ .col-item .photo img { height: auto; } /* Makes equipment cards consistently sized */ @media (min-width: 992px) { .col-item .info { position: absolute; bottom: 20px; width: 90%; } .col-item { min-height: 400px; } } @media (min-width: 768px) and (max-width: 991px) { .col-item .info { position: absolute; bottom: 20px; width: 90%; } .col-item { min-height: 300px; } } /*Adds title to LibCal landing page in Book a Consultation dropdown*/ /*Anneliese Taylor*/ #s-lc-content-mysched-494243953:after { content: ' - Publishing and Open Access Expert'; } /*Ariel Deardorff*/ #s-lc-content-mysched-4942410642::after { content: ' - Data Science Services Librarian'; } /*Evans Whiteaker*/ #s-lc-content-mysched-49424921::after { content: ' - Medicine and Pharmacy Research Librarian'; } /*Geoff Boushey*/ #s-lc-content-mysched-4942415596::after { content: ' - Data Science Expert'; } /*Karla Lindquist*/ #s-lc-content-mysched-4942434278::after { content: ' - Data Science Expert'; } /*Min-Lin Fang*/ #s-lc-content-mysched-494243941::after { content: ' - Nursing and Social and Behavioral Sciences Research Librarian'; } /*Peggy Tahir*/ #s-lc-content-mysched-494243950::after { content: ' - Research and Copyright Librarian'; } /*Stephen Fernandez*/ #s-lc-content-mysched-4942411486::after { content: ' - Student IT Support'; } /*Lisa Leiva*/ #s-lc-content-mysched-494249794::after { content: ' - Instructional Designer'; } /*Angelo Pelonero*/ #s-lc-content-mysched-4942451469::after { content: ' - Data Science Instructional Designer'; } /* Adds color to Next Available button */ #eq-time-grid > div.fc-toolbar.fc-header-toolbar > div.fc-left > button.fc-goToNextAvailable-button.btn.btn-default { background-color: #5bc0de; Border-color: #46b8da; color: #ffffff; } /* Equipment module increasing card height #cat_cont .col-sm-3 { height: 350px; }*/ </style> </head> <body id="calendar_928" class="s-lc-public s-lc-public-page-5"> <a id="s-lc-public-skiplink" class="s-lc-skiplink alert-info" href="#s-lc-public-title-area">Skip to Main Content</a> <div id="s-lc-public-cust-header" role="banner"><body> <div id="ucsf-headers container"> <div id="ucsf-banner-nav" class="bluetint no-logo"> <div class="top-header-container row"> <ul class="menu"> <li class="first"><a href="http://www.ucsf.edu">University of California San Francisco</a></li> <li><a href="http://www.ucsfhealth.org/">UCSF Medical Center</a></li> <li><a href="http://www.ucsf.edu/about">About UCSF</a></li> </ul> </div> </div> <header> <div class="container"><a href="http://library.ucsf.edu/"><img alt="" src="https://ucsf-ckm.github.io/assets/ucsf_library_logo2015.svg"></a></div> </header> </div> </body></div> <div class="container"> <div id="s-lc-public-bc" class="row"> <div class="col-md-12"> <nav aria-label="Breadcrumb"> <ol class="breadcrumb"> <li><a href="http://www.library.ucsf.edu/">University of California, San Francisco</a></li> <li class="s-lc-desktop-only"><a href="https://calendars.library.ucsf.edu">LibCal</a></li> <li class="active s-lc-desktop-only">Library Events and Classes</li> </ol> </nav> </div> </div> <noscript> <div class="alert alert-danger" id="noscript">Your browser has javascript disabled. Without javascript some functions will not work.</div> </noscript> <div id="s-lc-public-title-area"> <div id="s-lc-public-title" class="row"> <div class="col-md-12"> <h1 id="s-lc-public-pt">Library Events and Classes</h1> </div> </div> <div id="s-lc-public-pd" class="row"><div class="col-md-12"><strong>Free workshops and events brought to you by UCSF Library staff. We can help with a wide range of topics from literature searching to programming to 3D printing.</strong><p><br></p> </div></div> </div> <main> <div id="s-lc-public-main" class="s-lc-public-main"> <section> <div id="s-lc-public-page-content" class="row"> <div id="col1" class="col-md-12 center"> <button class="btn btn-default btn-small s-lc-nav-tab s-lc-mobile-only margin-bottom-med" data-toggle="collapse" data-target="#cal-form"> <i class="fa fa-search fa-lg" aria-hidden="true"></i> <span class="sr-only icon-label">Filter by</span> </button> <form id="cal-form" class="form-inline margin-bottom-med collapse in" role="search"> <span class="sr-only">Filter results by...</span> <div class="form-group" id="s-lc-c-sc"> <label for="s-lc-c-search" class="sr-only">Search</label> <input type="text" class="form-control input-sm" name="q" id="s-lc-c-search" value="" aria-required="false" placeholder="Search for event..." aria-label="Search for event..." role="searchbox"> </div> <div class="form-group"> <input class="form-control input-sm s-lc-datepicker-readonly" type="text" name="date" id="s-lc-filter-date" readonly="readonly" placeholder="Date"> </div> <div class="form-group"> <span class="sr-only"><label for="cal-dd">Calendar</label></span> <select name="cal[]" id="cal-dd" class="selectpicker" multiple title="Calendar" aria-required="true" data-size="15" data-selected-text-format="static"> <option value="-1" data-cal_id="-1">All Calendars</option> <option data-divider="true"></option> <option value="928" selected="selected" data-cal_id="928">Library Events and Classes</option> </select> </div> <div class="form-group" id="s-lc-c-catf"> <span class="sr-only"><label for="cat-dd">Category</label></span> <select name="ct[]" id="cat-dd" aria-required="false" class="selectpicker" multiple title="Category" data-size="15" data-selected-text-format="static"> </select> </div> <div class="form-group" id="s-lc-c-audiencef"> <span class="sr-only"><label for="audience-dd">Audience</label></span> <select name="audience[]" id="audience-dd" aria-required="false" class="selectpicker" multiple title="Audience" data-size="15" data-selected-text-format="static"> <option value="7980" data-cal_id="7980" data-bgcolor="#777777" data-content="<span class='label' style='background-color:#777777'> </span> Faculty</span>"> Faculty </option> <option value="7984" data-cal_id="7984" data-bgcolor="#777777" data-content="<span class='label' style='background-color:#777777'> </span> Local community</span>"> Local community </option> <option value="7983" data-cal_id="7983" data-bgcolor="#777777" data-content="<span class='label' style='background-color:#777777'> </span> Postdocs</span>"> Postdocs </option> <option value="7981" data-cal_id="7981" data-bgcolor="#777777" data-content="<span class='label' style='background-color:#777777'> </span> Staff</span>"> Staff </option> <option value="7982" data-cal_id="7982" data-bgcolor="#777777" data-content="<span class='label' style='background-color:#777777'> </span> Students</span>"> Students </option> </select> </div> <div class="form-group" id="s-lc-c-camf"> <span class="sr-only"><label for="cam-dd">Campus</label></span> <select name="cm[]" id="cam-dd" aria-required="false" class="selectpicker" multiple title="Campus" data-size="15" data-selected-text-format="static"> <option value="2459" data-cal_id="2459">Laurel Heights</option> <option value="579" data-cal_id="579">Mission Bay</option> <option value="6064" data-cal_id="6064">Online</option> <option value="578" data-cal_id="578">Parnassus</option> <option value="1330" data-cal_id="1330">TBA</option> <option value="580" data-cal_id="580">ZSFG</option> </select> </div> <div class="form-group" id="s-lc-c-online-filter"> <label class="sr-only" for="include-events-dd"> Include Events </label> <select name="include-events" id="include-events-dd" aria-required="false" class="selectpicker"> <option selected="selected" value="0"> Show All Events </option> <option value="1"> Online Events </option> <option value="2"> In-Person Events </option> </select> </div> <button type="button" class="btn btn-info btn-sm" id="s-lc-c-sbtn">Search</button> <a href="#" id="s-lc-c-clear-filters" class="s-lc-filters-clear"> Clear All </a> </form> <div id="s-lc-c-filters-used" class="alert alert-success margin-bottom-med" display="style: none;"></div> <div id="s-lc-c-tz-modes" class="pad-bottom-med"> <div id="s-lc-c-view-modes" class="s-lc-c-view-modes"> Change View: <div class="btn-group"> <button class="btn btn-default btn-small s-lc-nav-tab s-lc-nav-card"> <i class="fa fa-th fa-lg" aria-hidden="true"></i> <span class="sr-only icon-label">Card View</span> </button> <button class="btn btn-default btn-small s-lc-nav-tab s-lc-nav-list"> <i class="fa fa-align-justify fa-lg" aria-hidden="true"></i> <span class="sr-only icon-label">Day/List View</span> </button> <button class="btn btn-default btn-small s-lc-nav-tab s-lc-nav-monthly"> <i class="fa fa-calendar fa-lg" aria-hidden="true"></i> <span class="sr-only icon-label">Monthly View</span> </button> <button class="btn btn-default btn-small s-lc-nav-tab s-lc-nav-weekly"> <i class="fa fa-calendar-o fa-lg" aria-hidden="true"></i> <span class="sr-only icon-label">Weekly View</span> </button> </div> </div> <div class="s-lc-c-ical-and-timezone-horiz"> <div class="s-lc-timezone-container s-lc-c-timezone-horiz s-lc-c-timezone"> Time Zone: Pacific Time - US & Canada (<a href="#" class="s-lc-c-timezone-change">change</a>) </div> <div class="s-lc-desktop-only"> <div id="s-lc-ical-link" class="s-lc-c-ical-link-horiz" style="display: none;"> <a href="javascript:void(0)" id="s-lc-c-ical-toggle"> <i class="fa fa-calendar" aria-hidden="true"></i> iCal </a> </div> </div> <div id="s-lc-ical-details" class="s-lc-c-ical-description-horiz" style="display: none;"> To subscribe to this calendar, copy the link below into any application that supports the iCal format. <br> <span id="s-lc-c-ical-url"> </span> </div> </div> </div> <div id="s-lc-c-list-results" role="region" aria-live="polite"> <h2 class="sr-only" tabindex="0">Search Results</h2> <div id="s-lc-c-list-cont" class="s-lc-c-list-cont-horiz"></div> </div> </div> </div> </section> </div> </main> <footer id="s-lc-public-footer" class="row s-lc-public-footer"> <div id="s-lc-public-footer-brand"> <span title="libcal-us-1">Powered by</span> <a href="https://www.springshare.com">Springshare</a>. </div> <div id="s-lc-public-footer-rights"> All rights reserved. </div> <div id="s-lc-footer-support-link"> <a href="https://ucsflibrary.zendesk.com/hc/en-us/requests/new">Report a tech support issue.</a> </div> <div id="s-lc-public-footer-admin-links" role="navigation" aria-label="Admin Footer"> <a id="s-lc-sign-in" href="https://ucsf.libapps.com/libapps/login.php?site_id=4237&target=">Login to LibApps</a> </div> <div class="s-lc-public-footer-actions"> <div id="s-lc-language"> <select id="s-lc-language-selector" aria-label="Select Language"> <option value="ca" >català</option> <option value="cy" >Cymraeg</option> <option value="en" selected>English</option> <option value="es" >español</option> <option value="fr" >français</option> <option value="ga" >Irish</option> <option value="ja" >日本語 Nihongo</option> <option value="nl" >Nederlands</option> <option value="sl" >slovenski jezik</option> <option value="vi" >Tiếng Việt</option> <option value="zh" >中文 Zhōngwén</option> </select> </div> </div> </footer> <!-- Google Analytics tracking script--> <script> (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); ga('create', 'UA-552286-50', 'auto'); ga('send', 'pageview'); </script> <!-- SiteImprove tracking script--> <script type="text/javascript"> /*<![CDATA[*/ (function() { var sz = document.createElement('script'); sz.type = 'text/javascript'; sz.async = true; sz.src = '//siteimproveanalytics.com/js/siteanalyze_8343.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(sz, s); })(); /*]]>*/ </script> <!-- Crazy Egg heatmap tracking --> <script type="text/javascript" src="//script.crazyegg.com/pages/scripts/0014/1423.js" async="async"></script> </div> <div id="s-lc-public-cust-footer"><div class="ucsf-footer"> <ul class="inline-list"> <li><a href="https://www.library.ucsf.edu/about">About the Library</a></li> <li><a href="https://www.library.ucsf.edu/contact">Contact Us</a></li> </ul> </div></div> <script defer src="https://static-assets-us.libcal.com/js_708/datepicker.min.js"></script> <script defer src="https://static-assets-us.libcal.com/js_708/selectpicker.min.js"></script> <script defer src="https://static-assets-us.libcal.com/js_708/direct/pagination.min.js"></script> <script defer src="https://static-assets-us.libcal.com/js_708/direct/public/events/calendar.min.js"></script> <script> function addEventDataTextTranslations(eventData) { eventData.textAddCalendar = 'Add\u0020to\u0020Calendar\u0020using\u0020iCal'; eventData.textAddGoogleCalendar = 'Add\u0020to\u0020Google\u0020Calendar'; eventData.textAudience = 'Audience'; eventData.textCampus = 'Campus'; eventData.textCategories = 'Categories'; eventData.textChange = 'change'; eventData.textDate = 'Date'; eventData.textDateAndTimes = 'Dates\u0020\u0026\u0020Times\u003A'; eventData.textDescription = 'Description'; eventData.textEventCost = 'Event\u0020Cost'; eventData.textFeaturedImage = 'Event\u0020featured\u0020image'; eventData.textFrom = 'From'; eventData.textGoToEvent = 'Go\u0020to\u0020event\u0020page'; eventData.textLocation = 'Location'; eventData.textMore = 'More'; eventData.textInPersonEvent = 'In\u002DPerson'; eventData.textOnlineEvent = 'Online'; eventData.textOnlineRegistration = 'Online\u0020Registration'; eventData.textInPersonRegistration = 'In\u002DPerson\u0020Registration'; eventData.textPresenter = 'Presenter'; eventData.textPrintPage = 'Print\u0020page'; eventData.textRegister = 'Register'; eventData.textRegistrationFull = 'Registrations\u0020are\u0020fully\u0020booked\u0021'; eventData.textRegistrationType = 'Registration\u0020Type'; eventData.textSearchEvents = 'Browse\/Search\u0020for\u0020more\u0020events'; eventData.textSeats = 'Seats'; eventData.textShareFacebook = 'Share\u0020on\u0020Facebook'; eventData.textShareTwitter = 'Share\u0020on\u0020Twitter'; eventData.textShowMoreDates = 'Show\u0020more\u0020dates'; eventData.textShowMoreDatesHeader = 'Future\u0020Dates'; eventData.textTime = 'Time'; eventData.textTimeZone = 'Time\u0020Zone\u003A'; eventData.textTo = 'To'; eventData.textViewMoreInfo = 'View\u0020More\u0020Information'; } </script> <script> var activeSearch = false; var activeView = "g"; var activePage = 1; var activeDate = moment("2025\u002D02\u002D16", springSpace.phpDateFormat).locale('en'); var haveChosenSpecificDate = 0; var resultsPerPageViewMap = { "g": 48, "d": 20, }; var momentWeekFormat = 'isoWeek'; var datePickerTemplates = { leftArrow: '<span class="sr-only">Previous</span>«', rightArrow: '<span class="sr-only">Next</span>»' }; var template = " <div class=\"media s-lc-c-evt\">\n <div class=\"media-body\"><h3 class=\"media-heading\"><a href=\"{{url}}\">{{title}}<\/a><\/h3>\n <div class=\"s-lc-c-evt-des\">{{{shortdesc}}}<\/div>\n <dl class=\"dl-horizontal\">\n <dt>Date:<\/dt>\n <dd>{{date}}\n {{#future_dates.0}}\n <i class=\"fa fa-calendar pad-left-med\" aria-hidden=\"true\"><\/i>\n <a href=\"#\" onclick=\"jQuery('#future_{{id}}').toggle(); return false;\"> Show more dates<\/a>\n <p id=\"future_{{id}}\" style=\"display:none\">\n {{#future_dates}}\n <a href=\"\/event\/{{event_id}}\">{{start}}<\/a><br>\n {{\/future_dates}}\n <\/p>\n {{\/future_dates.0}}\n <\/dd>\n\n <dt>Time:<\/dt>\n <dd>{{start}}{{#end}} - {{end}}{{\/end}}<\/dd>\n\n <dt>Location:<\/dt>\n <dd>{{#location}}{{location}}{{#campus}}, {{\/campus}}{{\/location}}{{#campus}}{{campus}}{{\/campus}}<\/dd>\n\n {{#audiences.0}}\n <dt>Audience:<\/dt>\n <dd>{{#audiences}}\n <span class=\"s-lc-event-category-color\" style=\"background-color:{{color}}\"> <\/span>\n <span class=\"s-lc-event-category-link\">\n <a href=\"{{calendar_url}}&t=d&cal%5B%5D={{calendar_id}}&audience%5B%5D={{id}}\">{{name}}<\/a>\n <\/span> \u00a0\n {{\/audiences}}\n <\/dd>\n {{\/audiences.0}}\n\n {{#categories_arr.0}}\n <dt>Categories:<\/dt>\n <dd>{{#categories_arr}}\n <span class=\"s-lc-event-category-color\" style=\"background-color:{{color}}\"> <\/span>\n <span class=\"s-lc-event-category-link\">\n <a href=\"{{calendar_url}}&t=d&d=0000-00-00&cal%5B%5D={{calendar_id}}&ct%5B%5D={{cat_id}}\">{{name}}<\/a>\n <\/span> \u00a0\n {{\/categories_arr}}\n <\/dd>\n {{\/categories_arr.0}}\n\n <dt><\/dt>\n <dd>\n {{#seats}}\n <dt><\/dt>\n <dd><a href=\"{{url}}\" class=\"btn btn-success btn-sm margin-top-med\">Register! {{#seatsleft}} - {{seatsleft}} seats left{{\/seatsleft}}<\/a><\/dd>\n {{\/seats}}\n\n {{#registration_msg}}\n <dt><\/dt>\n <dd><a href=\"{{url}}\" class=\"btn {{class}} btn-sm margin-top-med\">{{msg}}<\/a><\/dd>\n {{\/registration_msg}}\n <\/dd>\n <\/dl>\n <\/div>\n {{#featured_image}}\n <div class=\"media-right\"><a href=\"{{url}}\"> <img class=\"media-object img-thumbnail s-lc-c-evt-fi\" src=\"{{featured_image}}\" alt=\"{{title}}\"> <\/a><\/div>\n {{\/featured_image}}\n<\/div>\n "; var cardViewTemplate = "<div class=\"s-lc-eventcard\">\n <div class=\"s-lc-eventcard-content\">\n <div class=\"s-lc-eventcard-heading\">\n <div class=\"s-lc-eventcard-heading-content\">\n <div class=\"s-lc-evt-date\">\n <div class=\"s-lc-evt-date-m\">{{monthshort}}<\/div>\n <div class=\"s-lc-evt-date-d\">{{day}}<\/div>\n <\/div>\n\n <div class=\"s-lc-eventcard-heading-text-group\">\n <div class=\"s-lc-eventcard-heading-text s-lc-hide-long-text\">\n {{^multi_day_event}}\n {{dayshort}}, {{start}}{{#end}} - {{end}}{{\/end}}\n {{\/multi_day_event}}\n\n {{#multi_day_event}}\n {{monthshort}} {{day}} -\n {{#multi_day_end}}\n {{monthshort}} {{day}}\n {{\/multi_day_end}}\n {{\/multi_day_event}}\n\n {{^registration_enabled}}{{^external_event}}\n {{#location}}\n {{#online_event}}\n <span class=\"label label-info s-lc-eventcard-pill\">\n {{textInPersonEvent}} \/ {{textOnlineEvent}}\n <\/span>\n {{\/online_event}}\n {{^online_event}}\n <span class=\"label label-info s-lc-eventcard-pill\">\n {{textInPersonEvent}}\n <\/span>\n {{\/online_event}}\n {{\/location}}\n {{^location}}\n {{#online_event}}\n <span class=\"label label-info s-lc-eventcard-pill\">\n {{textOnlineEvent}}\n <\/span>\n {{\/online_event}}\n {{\/location}}\n {{\/external_event}}{{\/registration_enabled}}\n\n {{#registration_enabled}}\n {{#online_event}}\n {{#in_person_registration}}\n <span class=\"label label-info s-lc-eventcard-pill\">\n {{textInPersonEvent}} \/ {{textOnlineEvent}}\n <\/span>\n {{\/in_person_registration}}\n {{^in_person_registration}}\n <span class=\"label label-info s-lc-eventcard-pill\">\n {{textOnlineEvent}}\n <\/span>\n {{\/in_person_registration}}\n {{\/online_event}}\n {{^online_event}}\n <span class=\"label label-info s-lc-eventcard-pill\">\n {{textInPersonEvent}}\n <\/span>\n {{\/online_event}}\n {{\/registration_enabled}}\n <\/div>\n\n <div class=\"s-lc-eventcard-heading-text s-lc-hide-long-text\">{{campusAndLocation}}<\/div>\n\n {{#recurring_event}}\n <div class=\"s-lc-eventcard-more-dates s-lc-hide-long-text\">\n <a tabindex=\"0\" data-event=\"{{id}}\" data-toggle=\"popover\" data-placement=\"bottom\" data-container=\"body\" data-html=\"true\" data-trigger=\"focus\" data-content=\"\n <h5>{{textShowMoreDatesHeader}}: {{title}}<\/h5>\n <p id='future_loading_{{id}}' style='display:none'><i class='fa fa-spinner fa-spin fa-lg' aria-hidden='true'><\/i><\/p>\n <p id='future_{{id}}' style='display:none' class='pad-left-med'><\/p>\"\n aria-label=\"{{textShowMoreDates}}\"\n >{{textShowMoreDates}} ››<\/a>\n <\/div>\n {{\/recurring_event}}\n <\/div>\n <\/div>\n <\/div>\n\n <div class=\"s-lc-eventcard-event-color-bar\" style=\"background-color: {{color}}\">\n <\/div>\n\n <div class=\"s-lc-eventcard-body\">\n {{#seatsleft}}\n <div class=\"s-lc-ribbon s-lc-ribbon-top-right\">\n <span>\n {{seatsleft_text}}\n <\/span>\n <\/div>\n {{\/seatsleft}}\n\n {{#ribbonWarning}}\n <div class=\"s-lc-ribbon s-lc-ribbon-top-right s-lc-ribbon-warning\">\n <span>\n {{ribbonWarning}}\n <\/span>\n <\/div>\n {{\/ribbonWarning}}\n\n <h2 class=\"s-lc-eventcard-title\">\n {{#url}}<a title=\"{{title}}\" href=\"{{url}}\">{{\/url}}\n {{title}}\n {{#url}}<\/a>{{\/url}}\n <\/h2>\n\n {{#shortdesc}}\n <div class=\"s-lc-eventcard-description\">\n {{{shortdesc}}}\n {{#shortdesc_was_truncated}}{{#url}}\n <a href=\"{{url}}\" aria-label=\"{{textViewMoreInfo}}\">{{textMore}}<\/a><br>\n {{\/url}}{{\/shortdesc_was_truncated}}\n <\/div>\n {{\/shortdesc}}\n\n {{#registration_cost}}\n <br>\n <div class=\"s-lc-eventcard-registration-cost\">\n {{textEventCost}}: {{registration_cost}}\n <\/div>\n {{\/registration_cost}}\n <\/div>\n\n <div class=\"s-lc-eventcard-tags\">\n <ul>\n {{#categoriesToShowInFull}}\n <li class=\"s-lc-eventcard-tag\">\n <span class=\"s-lc-event-category-color\" style=\"background-color:{{color}}\"> <\/span>\n <span class=\"s-lc-event-category-link\" data-toggle=\"tooltip\" title=\"{{name}}\">\n <a href=\"{{calendar_url}}&t=g&cal%5B%5D={{calendar_id}}{{#isCategory}}&ct={{id}}{{\/isCategory}}{{#isAudience}}&audience={{id}}{{\/isAudience}}\">\n {{name}}\n <\/a>\n <\/span>\n <\/li>\n {{\/categoriesToShowInFull}}\n\n {{#categoriesTooltip}}\n <li class=\"s-lc-eventcard-tag-more\">\n <a href=\"#\" data-toggle=\"tooltip\" title=\"{{categoriesTooltip}}\" aria-label=\"{{categoriesTooltip}}\">…<\/a>\n <\/li>\n {{\/categoriesTooltip}}\n <\/ul>\n <\/div>\n <\/div>\n<\/div>\n"; var cardViewDefaultImage = 'https\u003A\/\/d68g328n4ug0e.cloudfront.net\/event\u002Ddefault.png'; var categoriesMappedByCalendar = { 928: [] }; var tempCategoryName = "Archives\u0020and\u0020Special\u0020Collections"; if (!(928 in categoriesMappedByCalendar)) { categoriesMappedByCalendar[928] = []; } categoriesMappedByCalendar[928].push({ id: 6331, name: tempCategoryName, color: '\u0023F26D04', }); var tempCategoryName = "Archives\u0020and\u0020Special\u0020Collections\u0020\u003E\u0020Artist\u0020in\u0020Residence"; if (!(928 in categoriesMappedByCalendar)) { categoriesMappedByCalendar[928] = []; } categoriesMappedByCalendar[928].push({ id: 50900, name: tempCategoryName, color: '\u0023F26D04', }); var tempCategoryName = "Archives\u0020and\u0020Special\u0020Collections\u0020\u003E\u0020Industry\u0020Documents\u0020Library"; if (!(928 in categoriesMappedByCalendar)) { categoriesMappedByCalendar[928] = []; } categoriesMappedByCalendar[928].push({ id: 41466, name: tempCategoryName, color: '\u0023F26D04', }); var tempCategoryName = "Copyright"; if (!(928 in categoriesMappedByCalendar)) { categoriesMappedByCalendar[928] = []; } categoriesMappedByCalendar[928].push({ id: 28752, name: tempCategoryName, color: '\u0023007CBE', }); var tempCategoryName = "Curriculum\u002DIntegrated"; if (!(928 in categoriesMappedByCalendar)) { categoriesMappedByCalendar[928] = []; } categoriesMappedByCalendar[928].push({ id: 23841, name: tempCategoryName, color: '\u0023A2D1EA', }); var tempCategoryName = "Data\u0020Science"; if (!(928 in categoriesMappedByCalendar)) { categoriesMappedByCalendar[928] = []; } categoriesMappedByCalendar[928].push({ id: 27094, name: tempCategoryName, color: '\u0023058488', }); var tempCategoryName = "Data\u0020Science\u0020\u003E\u0020Bioinformatics\u0020and\u0020Statistics"; if (!(928 in categoriesMappedByCalendar)) { categoriesMappedByCalendar[928] = []; } categoriesMappedByCalendar[928].push({ id: 46318, name: tempCategoryName, color: '\u0023058488', }); var tempCategoryName = "Data\u0020Science\u0020\u003E\u0020Data\u0020Management"; if (!(928 in categoriesMappedByCalendar)) { categoriesMappedByCalendar[928] = []; } categoriesMappedByCalendar[928].push({ id: 46341, name: tempCategoryName, color: '\u0023058488', }); var tempCategoryName = "Data\u0020Science\u0020\u003E\u0020Hacky\u0020Hour"; if (!(928 in categoriesMappedByCalendar)) { categoriesMappedByCalendar[928] = []; } categoriesMappedByCalendar[928].push({ id: 45158, name: tempCategoryName, color: '\u0023058488', }); var tempCategoryName = "Data\u0020Science\u0020\u003E\u0020Help\u0020Desk"; if (!(928 in categoriesMappedByCalendar)) { categoriesMappedByCalendar[928] = []; } categoriesMappedByCalendar[928].push({ id: 57369, name: tempCategoryName, color: '\u0023058488', }); var tempCategoryName = "Data\u0020Science\u0020\u003E\u0020Programming"; if (!(928 in categoriesMappedByCalendar)) { categoriesMappedByCalendar[928] = []; } categoriesMappedByCalendar[928].push({ id: 46333, name: tempCategoryName, color: '\u0023058488', }); var tempCategoryName = "Database\u0020and\u0020Searching"; if (!(928 in categoriesMappedByCalendar)) { categoriesMappedByCalendar[928] = []; } categoriesMappedByCalendar[928].push({ id: 409, name: tempCategoryName, color: '\u00236EA400', }); var tempCategoryName = "Education\u0020and\u0020Research"; if (!(928 in categoriesMappedByCalendar)) { categoriesMappedByCalendar[928] = []; } categoriesMappedByCalendar[928].push({ id: 37580, name: tempCategoryName, color: '\u00236EA400', }); var tempCategoryName = "Education\u0020and\u0020Research\u0020\u003E\u0020Continuing\u0020Medical\u0020Education"; if (!(928 in categoriesMappedByCalendar)) { categoriesMappedByCalendar[928] = []; } categoriesMappedByCalendar[928].push({ id: 47533, name: tempCategoryName, color: '\u00236EA400', }); var tempCategoryName = "Educational\u0020Technology"; if (!(928 in categoriesMappedByCalendar)) { categoriesMappedByCalendar[928] = []; } categoriesMappedByCalendar[928].push({ id: 958, name: tempCategoryName, color: '\u0023506380', }); var tempCategoryName = "Embase"; if (!(928 in categoriesMappedByCalendar)) { categoriesMappedByCalendar[928] = []; } categoriesMappedByCalendar[928].push({ id: 28750, name: tempCategoryName, color: '\u00236EA400', }); var tempCategoryName = "Funding\u0020Opportunities"; if (!(928 in categoriesMappedByCalendar)) { categoriesMappedByCalendar[928] = []; } categoriesMappedByCalendar[928].push({ id: 21499, name: tempCategoryName, color: '\u00236EA400', }); var tempCategoryName = "Library\u0020Drop\u002DIn\u0020Series"; if (!(928 in categoriesMappedByCalendar)) { categoriesMappedByCalendar[928] = []; } categoriesMappedByCalendar[928].push({ id: 49227, name: tempCategoryName, color: '\u0023FFE30C', }); var tempCategoryName = "Makers\u0020Lab"; if (!(928 in categoriesMappedByCalendar)) { categoriesMappedByCalendar[928] = []; } categoriesMappedByCalendar[928].push({ id: 25201, name: tempCategoryName, color: '\u0023EB093C', }); var tempCategoryName = "Needlecraft"; if (!(928 in categoriesMappedByCalendar)) { categoriesMappedByCalendar[928] = []; } categoriesMappedByCalendar[928].push({ id: 57276, name: tempCategoryName, color: '\u0023B3C8EF', }); var tempCategoryName = "Nursing"; if (!(928 in categoriesMappedByCalendar)) { categoriesMappedByCalendar[928] = []; } categoriesMappedByCalendar[928].push({ id: 30190, name: tempCategoryName, color: '\u0023B3C8EF', }); var tempCategoryName = "Open\u0020Access"; if (!(928 in categoriesMappedByCalendar)) { categoriesMappedByCalendar[928] = []; } categoriesMappedByCalendar[928].push({ id: 21497, name: tempCategoryName, color: '\u0023007CBE', }); var tempCategoryName = "PubMed"; if (!(928 in categoriesMappedByCalendar)) { categoriesMappedByCalendar[928] = []; } categoriesMappedByCalendar[928].push({ id: 21498, name: tempCategoryName, color: '\u00236EA400', }); var tempCategoryName = "Reference\u0020Management\u0020Tools"; if (!(928 in categoriesMappedByCalendar)) { categoriesMappedByCalendar[928] = []; } categoriesMappedByCalendar[928].push({ id: 591, name: tempCategoryName, color: '\u0023716FB2', }); var tempCategoryName = "Scholarly\u0020Communication"; if (!(928 in categoriesMappedByCalendar)) { categoriesMappedByCalendar[928] = []; } categoriesMappedByCalendar[928].push({ id: 33523, name: tempCategoryName, color: '\u0023B3C8EF', }); var tempCategoryName = "Special\u0020Event"; if (!(928 in categoriesMappedByCalendar)) { categoriesMappedByCalendar[928] = []; } categoriesMappedByCalendar[928].push({ id: 22444, name: tempCategoryName, color: '\u0023FFDD00', }); var tempCategoryName = "Systematic\u0020Review"; if (!(928 in categoriesMappedByCalendar)) { categoriesMappedByCalendar[928] = []; } categoriesMappedByCalendar[928].push({ id: 26019, name: tempCategoryName, color: '\u00236EA400', }); var tempCategoryName = "ZSFG"; if (!(928 in categoriesMappedByCalendar)) { categoriesMappedByCalendar[928] = []; } categoriesMappedByCalendar[928].push({ id: 29165, name: tempCategoryName, color: '\u0023D61CC6', }); var calendarNameMap = {}; calendarNameMap[-1] = "All\u0020Calendars"; calendarNameMap[928] = "Library\u0020Events\u0020and\u0020Classes"; var audienceNameMap = {}; audienceNameMap[7980] = "Faculty"; audienceNameMap[7984] = "Local\u0020community"; audienceNameMap[7983] = "Postdocs"; audienceNameMap[7981] = "Staff"; audienceNameMap[7982] = "Students"; var categoryNameMap = {}; categoryNameMap[6331] = "Archives\u0020and\u0020Special\u0020Collections"; categoryNameMap[50900] = "Archives\u0020and\u0020Special\u0020Collections\u0020\u003E\u0020Artist\u0020in\u0020Residence"; categoryNameMap[41466] = "Archives\u0020and\u0020Special\u0020Collections\u0020\u003E\u0020Industry\u0020Documents\u0020Library"; categoryNameMap[28752] = "Copyright"; categoryNameMap[23841] = "Curriculum\u002DIntegrated"; categoryNameMap[27094] = "Data\u0020Science"; categoryNameMap[46318] = "Data\u0020Science\u0020\u003E\u0020Bioinformatics\u0020and\u0020Statistics"; categoryNameMap[46341] = "Data\u0020Science\u0020\u003E\u0020Data\u0020Management"; categoryNameMap[45158] = "Data\u0020Science\u0020\u003E\u0020Hacky\u0020Hour"; categoryNameMap[57369] = "Data\u0020Science\u0020\u003E\u0020Help\u0020Desk"; categoryNameMap[46333] = "Data\u0020Science\u0020\u003E\u0020Programming"; categoryNameMap[409] = "Database\u0020and\u0020Searching"; categoryNameMap[37580] = "Education\u0020and\u0020Research"; categoryNameMap[47533] = "Education\u0020and\u0020Research\u0020\u003E\u0020Continuing\u0020Medical\u0020Education"; categoryNameMap[958] = "Educational\u0020Technology"; categoryNameMap[28750] = "Embase"; categoryNameMap[21499] = "Funding\u0020Opportunities"; categoryNameMap[49227] = "Library\u0020Drop\u002DIn\u0020Series"; categoryNameMap[25201] = "Makers\u0020Lab"; categoryNameMap[57276] = "Needlecraft"; categoryNameMap[30190] = "Nursing"; categoryNameMap[21497] = "Open\u0020Access"; categoryNameMap[21498] = "PubMed"; categoryNameMap[591] = "Reference\u0020Management\u0020Tools"; categoryNameMap[33523] = "Scholarly\u0020Communication"; categoryNameMap[22444] = "Special\u0020Event"; categoryNameMap[26019] = "Systematic\u0020Review"; categoryNameMap[29165] = "ZSFG"; var feedArray = []; var campusNameMap = {}; campusNameMap[2459] = "Laurel\u0020Heights"; campusNameMap[579] = "Mission\u0020Bay"; campusNameMap[6064] = "Online"; campusNameMap[578] = "Parnassus"; campusNameMap[1330] = "TBA"; campusNameMap[580] = "ZSFG"; var selectPickerCountSelectText = '{0} selected'; var selectPickerHeaderText = { calendar: 'Filter\u0020by Calendar:', audience: 'Filter\u0020by Audience:', category: 'Filter\u0020by Category:', campus: 'Filter\u0020by Campus:', include: 'Include\u0020Events:', }; var defaultIncludeEvents = 0; var includeEventsLabel = 'Include\u0020Events'; var springyPage = { iid: 138, baseCalendarId: 928, isFullCalendarView: 0, showAllCalendars: -1, calendarStartDay: 1, iCalUrlBase: 'https\u003A\/\/calendars.library.ucsf.edu\/ical_subscribe.php\u003Fsrc\u003Dp', fullyBooked: 2, waitlistOpen: 'Wait\u0020list', EXTERNAL_EVENT_COLOR: '', EXTERNAL_EVENT_PREFIX: 'f_', lang: { category: 'Category', campus: 'Campus', location: 'Location', presenter: 'Presenter', audiences: 'Audiences', categories: 'Categories', seats: 'Seats', shortDesc: 'Description', allDay: 'All\u0020Day', time: 'Time', registrationType: 'Registration\u0020Type', inPersonRegistration: 'In\u002DPerson\u0020Registration', onlineRegistration: 'Online\u0020Registration', fullyBooked: 'Fully\u0020Booked\u0021', waitlistOpen: 'Waitlist\u0020Open', }, }; function addCalendarCategories(categoryArray, calendarCategories) { for (var i = 0; i < calendarCategories.length; i++) { categoryArray.push(calendarCategories[i]); } } function getCategoriesForCalendarIds(calendarIds) { var categoryArray = []; if (0 in categoriesMappedByCalendar) { addCalendarCategories(categoryArray, categoriesMappedByCalendar[0]); } for (var i = 0; i < calendarIds.length; i++) { var calendarId = calendarIds[i]; if (calendarId == -1) { addCalendarCategories(categoryArray, categoriesMappedByCalendar[928]); break; } addCalendarCategories(categoryArray, categoriesMappedByCalendar[calendarId]); } return categoryArray; } function sortCategories(a, b) { const nameA = a.name.toUpperCase(); const nameB = b.name.toUpperCase(); if (nameA < nameB) { return -1; } if (nameA > nameB) { return 1; } return a.id - b.id; } function isFeedsWanted(calendarIds) { for (let i = 0; i < calendarIds.length; i++) { let calendarId = Number(calendarIds[i]); if (calendarId === springyPage.baseCalendarId) { return true; } if (calendarId === springyPage.showAllCalendars) { return true; } } return false; } function updateCategoryFilters(calendarIds, selectedValues) { let categoryArray = getCategoriesForCalendarIds(calendarIds); if (isFeedsWanted(calendarIds)) { categoryArray = categoryArray.concat(feedArray); } let sortedArray = categoryArray.sort(sortCategories); let element = jQuery('#cat-dd'); element.empty(); for (let i = 0; i < sortedArray.length; i++) { let categoryInfo = sortedArray[i]; let categoryName = categoryInfo.name; let categoryColor = categoryInfo.color; let selected = selectedValues.indexOf(categoryName) >= 0; let value = categoryInfo.id; if (categoryInfo.isFeed === true) { value = springyPage.EXTERNAL_EVENT_PREFIX + categoryInfo.id; } let option = new Option(categoryName, value, selected, selected); option.setAttribute('data-bgcolor', categoryColor); option.setAttribute('data-content', '<span class="label" style="background-color:' + categoryColor + '"> </span> ' + categoryName + '</span>'); element.append(option); } element.selectpicker('refresh'); } function runFiltersDueToOptionChange(event, clickedIndex, newValue, oldValue) { activePage = 1; return runFilters(); } var calendarFilterInProgress = false; function ensureValidCalendarSelection(element, clickedIndex) { if (clickedIndex == 0) { // if the show all option is selected - make it the only option selected element.selectpicker('deselectAll').val(-1).selectpicker("refresh"); } else { // ensure the select all option is not selected if we pick a different option element.find("[value=-1]").prop("selected", false); element.selectpicker("refresh"); } } function runCalendarSelectionValidation(event, clickedIndex, newValue, oldValue) { var element = jQuery(this); ensureValidCalendarSelection(element, clickedIndex); } function runFiltersDueToCalendarChange(event, clickedIndex, newValue, oldValue) { if (calendarFilterInProgress) { return false; } calendarFilterInProgress = true; var element = jQuery(this); ensureValidCalendarSelection(element, clickedIndex); calendarFilterInProgress = false; // if no options are selected - reset the select picker back to the original value var calendarIds = element.val(); if (calendarIds.length == 0) { element.val(928).selectpicker("refresh"); calendarIds = [928]; } // toggle the categories display to only show those valid for these calendars updateCategoryFilters(calendarIds, jQuery("#cat-dd").val()); activePage = 1; return runFilters(); } function createDatePicker() { var minViewMode = (activeView == "m") ? 1 : 0; var displayDateFormat = (activeView == "m") ? "MMMM YYYY" : springSpace.dateFormat; var element = jQuery("#s-lc-filter-date"); element.off('changeDate'); element.datepicker("destroy"); element.datepicker({ language: "en", format: { toDisplay: function (date, format, language) { return moment.utc(date).locale("en").format(displayDateFormat); }, toValue: function (date, format, language) { return new Date(date); } }, minViewMode: minViewMode, weekStart: springyPage.calendarStartDay, autoclose: true, todayHighlight: 0, defaultViewDate: {"year": 2025, "month": 1, "day": 16}, templates: datePickerTemplates }); if (haveChosenSpecificDate) { springyDatepicker.setDate(element, activeDate.toDate()); } datePickerAccessibilityFix(element); element.on("changeDate", function () { haveChosenSpecificDate = true; activeDate = moment(jQuery(this).datepicker("getDate")); return false; }); } function setActiveViewMode(viewMode) { activeView = viewMode; activePage = 1; createDatePicker(); return runFilters(); } function setActiveViewModeToSearch() { var searchString = jQuery("#s-lc-c-search").val(); if (searchString.length < 2) { errorAlert("Search\u0020string\u0020must\u0020be\u0020at\u0020least\u00202\u0020characters."); return false; } activeSearch = true; activePage = 1; // keep people on their current view mode, with the exception of the monthly/weekly // view modes as they do not yet support searches if ((activeView === 'm') || (activeView === 'w')) { activeView = 'd'; createDatePicker(); } } function getDateToPassToPhp() { if (!haveChosenSpecificDate) { return "0000-00-00"; } if (activeView == "m") { return activeDate.format("YYYY-MM"); } return activeDate.format("YYYY-MM-DD"); } function getListOfNames(idNameMap, ids) { var names = []; for (var i=0; i < ids.length; i++) { var id = ids[i]; var name = idNameMap[id]; if (name === undefined) { continue; } names.push(name); } return names.join(", "); } function gatherFilterOptionsInUse() { var categoryIds = jQuery("#cat-dd").val(); var campusIds = jQuery("#cam-dd").val(); var audienceIds = jQuery("#audience-dd").val(); var calendarIds = jQuery("#cal-dd").val(); var search = jQuery("#s-lc-c-search").val(); var filterOptions = []; if (search.length > 0) { filterOptions.push(["Keywords", escapeHtml(search)]); } if (haveChosenSpecificDate) { var displayDateFormat = (activeView == "m") ? "MMMM YYYY" : springSpace.dateFormat; filterOptions.push(["Date", activeDate.locale("en").format(displayDateFormat)]); } if (calendarIds.length > 0) { filterOptions.push(["Calendar", getListOfNames(calendarNameMap, calendarIds)]); } if ((audienceIds !== undefined) && (audienceIds.length > 0)) { filterOptions.push(["Audience", getListOfNames(audienceNameMap, audienceIds)]); } if ((categoryIds !== undefined) && (categoryIds.length > 0)) { filterOptions.push(["Category", getListOfNames(categoryNameMap, categoryIds)]); } if ((campusIds !== undefined) && (campusIds.length > 0)) { filterOptions.push(["Campus", getListOfNames(campusNameMap, campusIds)]); } filterOptions.push([includeEventsLabel, jQuery('#include-events-dd option:selected').text()]); return filterOptions; } function showFiltersUsedOnScreen() { var filterOptions = gatherFilterOptionsInUse(); var html = "Filters\u0020applied\u003A\u0020"; for (var i=0; i < filterOptions.length; i++) { var filterOption = filterOptions[i]; var name = filterOption[0]; var value = filterOption[1]; if (value.length === 0) { continue; } html += "<strong>" + name + "</strong>: <em>" + value + "</em>"; if (i < (filterOptions.length - 1)) { html += "; "; } } jQuery("#s-lc-c-filters-used").html(html).show(); } function getCurrentQueryString() { var queryStringIndex = window.location.href.indexOf('?'); if (queryStringIndex < 0) { return ''; } return window.location.href.substr(queryStringIndex); } function runFilters() { jQuery(".s-lc-nav-tab").removeClass("active"); calendarUtils.hideICalDetails(); var newQueryString = determineQueryString(); if (newQueryString !== getCurrentQueryString()) { history.pushState(null, document.title, newQueryString); } showFiltersUsedOnScreen(); var searchString = jQuery("#s-lc-c-search").val(); if (searchString.length > 0) { if (!activeSearch) { setActiveViewModeToSearch(); } } else { activeSearch = false; } if (activeView == 'm') { jQuery('.s-lc-nav-monthly').addClass('active'); if (springyPage.isFullCalendarView) { return runFullCalendarMonthlyOrWeekly(true); } return runMonthlyOrWeekly(true); } if (activeView === 'w') { jQuery('.s-lc-nav-weekly').addClass('active'); if (springyPage.isFullCalendarView) { return runFullCalendarMonthlyOrWeekly(false); } return runMonthlyOrWeekly(false); } if (activeView == "g") { jQuery(".s-lc-nav-card").addClass("active"); } else { jQuery(".s-lc-nav-list").addClass("active"); } if (activeSearch) { return runSearch(); } if (activeView == "g") { return runCardView(); } return runDaily(); } function beginBusyWait() { workingAlert(); jQuery("#s-lc-c-sbtn, .s-lc-filters-clear").prop("disabled", true); } function endBusyWait() { stopAlert(); jQuery("#s-lc-c-sbtn, .s-lc-filters-clear").prop("disabled", false); } function formatResultsHeader(subTitle, header) { return false; } function runMonthlyOrWeekly(isMonthly) { var cals = jQuery('#cal-dd').val(); var cats = jQuery("#cat-dd").val(); var camp = jQuery('#cam-dd').val(); var audience = jQuery('#audience-dd').val(); var includeEvents = jQuery('#include-events-dd').val(); var date = activeDate.format(springSpace.phpDateFormat); var cal_cont = jQuery('#s-lc-c-list-cont'); beginBusyWait(); var headerSubTitle = calendarUtils.getDateHeading(activeDate, isMonthly, momentWeekFormat); jQuery.ajax({ url: "/ajax/calendar/monthly?c=" + cals + '&date=' + date + '&monthly=' + isMonthly + "&audience=" + audience + "&cats=" + cats + "&camps=" + camp + '&inc=' + includeEvents, dataType: 'html', cache: true, }) .always(endBusyWait) .done(function (html) { formatResultsHeader(headerSubTitle); cal_cont.html(html); var screenWidth = jQuery(window).width(); if (screenWidth > springSpace.smallScreenSize) { jQuery('[data-toggle="popover"]').popover(); } formatLabels(); }) .fail(ajaxErrorHandler); return false; } function runDaily() { var cals = jQuery("#cal-dd").val(); var cats = jQuery("#cat-dd").val(); var camp = jQuery("#cam-dd").val(); var audience = jQuery("#audience-dd").val(); var includeEvents = jQuery('#include-events-dd').val(); var perPage = resultsPerPageViewMap[activeView]; beginBusyWait(); if (haveChosenSpecificDate) { var day = activeDate.locale("en").format("LL"); } else { var day = "Upcoming\u0020Events"; } jQuery.ajax({ url: "/ajax/calendar/list?c=" + cals + "&date=" + getDateToPassToPhp() + "&perpage=" + perPage + "&page=" + activePage + "&audience=" + audience + "&cats=" + cats + "&camps=" + camp + '&inc=' + includeEvents, dataType: 'json', cache: true, }) .always(endBusyWait) .done(function(data) { formatResultsHeader(day); var output = formatResultsInListViewStyle(data); jQuery("#s-lc-c-list-cont").html(output); jQuery('#s-lc-c-list-results h2').focus(); paginate(data.total_results, data.perpage); formatLabels(); }) .fail(ajaxErrorHandler); return false; } function runCardView() { var cals = jQuery("#cal-dd").val(); var cats = jQuery("#cat-dd").val(); var camp = jQuery("#cam-dd").val(); var audience = jQuery("#audience-dd").val(); var includeEvents = jQuery('#include-events-dd').val(); var perPage = resultsPerPageViewMap[activeView]; beginBusyWait(); if (haveChosenSpecificDate) { var day = activeDate.locale("en").format("LL"); } else { var day = "Upcoming\u0020Events"; } jQuery.ajax({ url: "/ajax/calendar/list?c=" + cals + "&date=" + getDateToPassToPhp() + "&perpage=" + perPage + "&page=" + activePage + "&audience=" + audience + "&cats=" + cats + "&camps=" + camp + '&inc=' + includeEvents, dataType: 'json', cache: true, }) .always(endBusyWait) .done(function(data) { formatResultsHeader(day); var output = formatResultsInCardViewStyle(data); jQuery("#s-lc-c-list-cont").html(output); jQuery('#s-lc-c-list-results h2').focus(); paginate(data.total_results, data.perpage); formatLabels(); accessibleIcons(); jQuery(".s-lc-eventcard-tag-more").on("click", doNothing); jQuery('.s-lc-eventcard-more-dates a').on('click', function() { var eventId = jQuery(this).data('event'); return springyPublic.getFutureEventDates(eventId); }); }) .fail(ajaxErrorHandler); return false; } function doNothing() { return false; } function runSearch() { var q = jQuery("#s-lc-c-search").val(); if (q.length < 2) { errorAlert("Search\u0020string\u0020must\u0020be\u0020at\u0020least\u00202\u0020characters."); return false; } calendarUtils.hideICalDetails(true); beginBusyWait(); var cals = jQuery("#cal-dd").val(); var cats = jQuery("#cat-dd").val(); var camp = jQuery("#cam-dd").val(); var audience = jQuery("#audience-dd").val(); var includeEvents = jQuery('#include-events-dd').val(); var perPage = resultsPerPageViewMap[activeView]; var t = q.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">"); jQuery.ajax({ url: "/process_search.php?site_id=4237&cals=" + cals + "&perpage=" + perPage + "&page=" + activePage + "&q=" + encodeURIComponent(q) + "&audience=" + audience + "&cats=" + cats + "&camps=" + camp + '&inc=' + includeEvents, dataType: 'json', }) .always(endBusyWait) .done(function(data) { formatResultsHeader(t, 'Search\u0020Results'); if (activeView === "g") { var output = formatResultsInCardViewStyle(data); } else { var output = formatResultsInListViewStyle(data); } jQuery("#s-lc-c-list-cont").html(output); jQuery('#s-lc-c-list-results h2').focus(); paginate(data.total_results, data.perpage); formatLabels(); accessibleIcons(); jQuery('.s-lc-eventcard-more-dates a').on('click', function() { var eventId = jQuery(this).data('event'); return springyPublic.getFutureEventDates(eventId); }); }) .fail(ajaxErrorHandler); return false; } function formatResultsInListViewStyle(data) { if (data.error) { return "<p>" + eventData.error + "</p>"; } var results = data.results.length; if (results < 1) { return "<div class=\"alert alert-info s-lc-c-s-nores\">No\u0020events\u0020are\u0020scheduled.</div>"; } var output = ""; for (var i = 0; i < results; i++) { var eventData = data.results[i]; addEventDataTextTranslations(eventData); output += Mustache.render(template, eventData); } output += "<div id=\"pag\"></div>"; return output; } function formatResultsInCardViewStyle(data) { if (data.error) { return "<p>" + data.error + "</p>"; } var resultCount = data.results.length; if (resultCount < 1) { return "<div class=\"alert alert-info s-lc-c-s-nores\">No\u0020events\u0020are\u0020scheduled.</div>"; } var output = '<div class="s-lc-eventcard-outer-container"><div class="s-lc-eventcard-inner-container">'; for (var i = 0; i < resultCount; i++) { var eventData = data.results[i]; decorateEventDataWithCategoryDisplayInfo(eventData); addEventDataTextTranslations(eventData); eventData.ribbonWarning = getRibbonWarning(eventData); eventData.campusAndLocation = getCampusAndLocationData(eventData); // if the event does not have a featured image then use the default card view image if (eventData.featured_image.length === 0) { eventData.featured_image = cardViewDefaultImage; } output += Mustache.render(cardViewTemplate, eventData); } output += "</div></div>"; output += "<div id=\"pag\"></div>"; return output; } function paginate(totalResults, perPage) { var paginationElement = formatPaginationElement(activePage, perPage, totalResults); if (paginationElement === null) { return; } jQuery('#pag').append(paginationElement); jQuery('#pag li a').on('click', function () { activePage = jQuery(this).data('page'); return runFilters(); }); } function decorateEventDataWithCategoryDisplayInfo(eventData) { var audienceCount = eventData.audiences.length; var categoryCount = eventData.categories_arr.length; var audiencesToShowInFull = 0; var categoriesToShowInFull = 1; if ((audienceCount > 0) && categoryCount > 0) { audiencesToShowInFull = 1; categoriesToShowInFull = 1; } else if (audienceCount > 0) { audiencesToShowInFull = Math.min(2, audienceCount); } else { categoriesToShowInFull = Math.min(2, categoryCount); } var toShowInFull = []; var toShowAsTooltip = []; for (var i=0; i < audienceCount; i++) { var audienceData = eventData.audiences[i]; if (i < audiencesToShowInFull) { toShowInFull.push({ isAudience: true, id: audienceData.id, name: audienceData.name, color: audienceData.color, }); } else { toShowAsTooltip.push(audienceData.name); } } for (var i=0; i < categoryCount; i++) { var categoryData = eventData.categories_arr[i]; if (i < categoriesToShowInFull) { toShowInFull.push({ isCategory: true, id: categoryData.cat_id, name: categoryData.name, color: categoryData.color, }); } else { toShowAsTooltip.push(categoryData.name); } } eventData.categoriesToShowInFull = toShowInFull; eventData.categoriesTooltip = toShowAsTooltip.join(", "); } function getCampusAndLocationData(eventData) { var maxLocationsToShow = 2; var campusString = eventData.campus; var campusCount = campusString.length > 0 ? 1 : 0; var locationString = eventData.location; var locationCount = eventData.locationCount; if ((locationCount + campusCount) > maxLocationsToShow) { return "Multiple\u0020Locations"; } var locations = []; if (campusCount > 0) { locations.push(campusString); } if (locationCount > 0) { locations.push(locationString); } return locations.join(", "); } function getRibbonWarning(eventData) { var registrationEnabled = eventData.registration_enabled; var registrationMessage = eventData.registration_msg; var registrationWaitlist = eventData.waitlist; if (registrationEnabled && (registrationWaitlist === springyPage.waitlistOpen)) { return springyPage.lang.waitlistOpen; } if (typeof registrationMessage === 'undefined') { return ''; } var registrationStatus = registrationMessage.status; if (!registrationEnabled && (registrationStatus === springyPage.fullyBooked)) { return springyPage.lang.fullyBooked; } return ''; } function setupAudienceLabel() { var audienceHtml = ""; jQuery("#audience-dd :selected").each(function (i, selected) { var value = jQuery(selected).val(); audienceHtml += '<a href="#" class="no-deco" onclick="removeAudience(\'' + value + '\');" aria-label="remove audience filter">'; audienceHtml += '<span class="label" style="background-color:' + jQuery(selected).data("bgcolor") + '">'; audienceHtml += jQuery(selected).text(); audienceHtml += ' <i class="fa fa-times fa-lg" style="color:#fff" aria-hidden="true"></i></span></a> '; }); if (audienceHtml != "") { audienceHtml = '<span class="s-lc-c-e-audience-lab">Audience:</span> ' + audienceHtml; } jQuery("#s-lc-c-e-audience").html(audienceHtml); } function formatLabels() { } function removeFilter(id, value) { var element = jQuery(id); var list = element.val(); var index = list.indexOf(value); if (index > -1) { list.splice(index, 1); } element.val(list); element.selectpicker("refresh"); return runFilters(); } function removeAudience(value) { return removeFilter("#audience-dd", value); } function removeCat(value) { return removeFilter("#cat-dd", value); } function removeCam(value) { return removeFilter("#cam-dd", value); } function determineQueryString() { var categoryIds = jQuery("#cat-dd").val(); var campusIds = jQuery("#cam-dd").val(); var audienceIds = jQuery("#audience-dd").val(); var calendarId = jQuery("#cal-dd").find(":selected").data("cal_id"); var calendarIds = jQuery("#cal-dd").val(); var qs = ""; if (activeSearch) { var q = encodeURIComponent(jQuery("#s-lc-c-search").val()); var caqs = ""; if (calendarId != null) { caqs = "&cid=" + calendarId; } qs = "?t=" + activeView + "&q=" + q + caqs; } else { qs = "?cid=" + calendarId + "&t=" + activeView + "&d=" + getDateToPassToPhp(); } if (calendarIds.length) { qs = qs + "&cal=" + calendarIds; } if ((audienceIds !== undefined) && (audienceIds.length)) { qs = qs + "&audience=" + audienceIds; } if ((categoryIds !== undefined) && (categoryIds.length)) { qs = qs + "&ct=" + categoryIds; } if ((campusIds !== undefined) && (campusIds.length)) { qs = qs + "&cm=" + campusIds; } if (activePage > 1) { qs = qs + "&page=" + activePage; } var includeEvents = jQuery('#include-events-dd').val(); if (includeEvents !== undefined) { qs += '&inc=' + includeEvents; } return qs; } function listenForFilterChanges() { jQuery("#cal-dd").on("changed.bs.select", runCalendarSelectionValidation); } function stopListeningForFilterChanges() { jQuery("#audience-dd, #cat-dd, #cam-dd, #include-events-dd, #cal-dd").off("changed.bs.select"); } function clearFilters() { stopListeningForFilterChanges(); jQuery("#cal-dd").selectpicker("deselectAll").val(928).selectpicker("refresh"); jQuery("#cam-dd, #audience-dd").selectpicker("deselectAll").selectpicker("refresh"); jQuery("#cat-dd").selectpicker("deselectAll").selectpicker("refresh"); jQuery('#include-events-dd').val(defaultIncludeEvents).selectpicker('refresh'); activeSearch = false; jQuery("#s-lc-c-search").val(""); activeDate = moment("2025\u002D02\u002D16", springSpace.phpDateFormat); haveChosenSpecificDate = false; jQuery("#s-lc-filter-date").val(""); createDatePicker(); listenForFilterChanges(); jQuery(".s-lc-nav-tab").removeClass("active"); activePage = 1; return runFilters(); } jQuery(function () { jQuery("#cal-dd").selectpicker({ countSelectedText: selectPickerCountSelectText, header: selectPickerHeaderText.calendar, style: "btn-default btn-sm" }); jQuery("#audience-dd").selectpicker({ countSelectedText: selectPickerCountSelectText, header: selectPickerHeaderText.audience, style: "btn-default btn-sm" }); jQuery("#cat-dd").selectpicker({ countSelectedText: selectPickerCountSelectText, header: selectPickerHeaderText.category, style: "btn-default btn-sm" }); jQuery("#cam-dd").selectpicker({ countSelectedText: selectPickerCountSelectText, header: selectPickerHeaderText.campus, style: "btn-default btn-sm" }); jQuery('#include-events-dd').selectpicker({ header: selectPickerHeaderText.include, style: 'btn-default btn-sm' }); jQuery(".s-lc-nav-list").on("click", function (e) { return setActiveViewMode("d"); }); jQuery(".s-lc-nav-monthly").on("click", function (e) { return setActiveViewMode("m"); }); jQuery('.s-lc-nav-weekly').on('click', function () { return setActiveViewMode('w'); }); jQuery(".s-lc-nav-card").on("click", function (e) { return setActiveViewMode("g"); }); jQuery("#s-lc-c-sbtn").click(function () { return runFilters(); }); jQuery("#s-lc-c-search").keyup(function (e) { if (e.keyCode == 13) { setActiveViewModeToSearch(); return runFilters(); } return true; }); jQuery(".s-lc-filters-clear").click(clearFilters); jQuery("#cal-form").on("submit", function (e) { e.preventDefault(); }); jQuery('.s-lc-c-timezone-change').off('click').on('click', springyPublic.showTimezoneModal); updateCategoryFilters( [928,], [] ); var cals = jQuery("#cal-dd").val(); if (cals == null) { } else { jQuery("#s-lc-c-catf .bootstrap-select").prop("title", ""); } jQuery('#s-lc-c-ical-toggle').on('click', calendarUtils.showICalDetails); jQuery('.selectpicker').prop('tabindex', 0); // for "show more dates" hover text jQuery('.popover-dismiss').popover({ trigger: 'focus' }) listenForFilterChanges(); accessibleIcons(); activeView = "g"; activeSearch = false; createDatePicker(); runFilters(); // reload the page with previous query string when user click on Back window.addEventListener('popstate', function() { location.reload(); }); }); </script> </body> </html>