$(function() { /* Schedule display localisation */ var showCurrentTab = function() { var fragment = window.location.hash.toLowerCase().substring(1); var dayTabs = $('#schedule-tabs .schedule-day'); if (dayTabs.length === 0) return; if (fragment) { var fragmentId = "#schedule_day_" + fragment + "-tab"; $(fragmentId).tab('show'); } else { // Show tab based on current time. var now = luxon.DateTime.local(); for (var i = 0; i < dayTabs.length; ++i) { var dayTab = $(dayTabs[i]); var tabDate = dayTab.data('date'); var scheduleDate = luxon.DateTime.fromISO(tabDate, { zone: CONF_TZ }); var startOfDay = scheduleDate.startOf('day'); var endOfDay = scheduleDate.endOf('day'); if (now >= startOfDay && now < endOfDay) { tabShown = true; dayTab.tab('show'); break; } } } } var updateScheduleGrid = function() { var rowHeaders = $('.calendar-row th.time'); for (var i = 0; i < rowHeaders.length; ++i) { var rowHeader = $(rowHeaders[i]); var rowTime = rowHeader.data('time'); var scheduleDate = luxon.DateTime.fromISO(rowTime, { zone: CONF_TZ }); var localDate = scheduleDate.toLocal(); // If the schedule date is already in the user's TZ, skip it. if (scheduleDate.offset === localDate.offset) break; var confFormatted = scheduleDate.toLocaleString({ weekday: scheduleDate.weekday === localDate.weekday ? undefined : 'short', hour: 'numeric', minute: 'numeric', timeZoneName: 'short', }); var localFormatted = localDate.toLocaleString({ weekday: scheduleDate.weekday === localDate.weekday ? undefined : 'short', hour: 'numeric', minute: 'numeric', timeZoneName: 'short', }); var timeText = rowHeader.find('p').text(); rowHeader.find('p').html(confFormatted + '
(' + localFormatted + ')'); } } var updatePresentationTimes = function() { var presentationTimes = $('span.presentation-time'); for (var i = 0; i < presentationTimes.length; ++i) { var presentationTime = $(presentationTimes[i]); var startTime = presentationTime.data('starttime'); var endTime = presentationTime.data('endtime'); var confStartTime = luxon.DateTime.fromISO(startTime, { zone: CONF_TZ }); var confEndTime = luxon.DateTime.fromISO(endTime, { zone: CONF_TZ }); var localStartTime = confStartTime.toLocal(); var localEndTime = confEndTime.toLocal(); // If the conf date is already in the user's TZ, skip it. if (confStartTime.offset === localStartTime.offset) break; var confStartTimeFormatted = confStartTime.toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: 'numeric', minute: 'numeric', }); var confEndTimeFormatted = confEndTime.toLocaleString({ hour: 'numeric', minute: 'numeric', timeZoneName: 'short', }); var localStartTimeFormatted = localStartTime.toLocaleString({ weekday: confStartTime.weekday === localStartTime.weekday ? undefined : 'short', month: confStartTime.weekday === localStartTime.weekday ? undefined : 'short', day: confStartTime.weekday === localStartTime.weekday ? undefined : '2-digit', hour: 'numeric', minute: 'numeric', }); var localEndTimeFormatted = localEndTime.toLocaleString({ weekday: localStartTime.weekday === localEndTime.weekday ? undefined : 'short', month: localStartTime.weekday === localEndTime.weekday ? undefined : 'short', day: localStartTime.weekday === localEndTime.weekday ? undefined : '2-digit', hour: 'numeric', minute: 'numeric', timeZoneName: 'short', }); presentationTime.html(confStartTimeFormatted + ' - ' + confEndTimeFormatted + ' (' + localStartTimeFormatted + ' - ' + localEndTimeFormatted + ')'); } } /* Schedule Editing */ $("a.edit-slot").click(function(e) { $("#slotEditModal").load($(this).data("action"), function() { $("#slotEditModal").modal("show"); }); e.preventDefault(); }); $("form#schedule-builder :submit").click(function(e) { var name = this.name; if(name == 'delete') { if (!confirm("Are you sure you want to delete the schedule?")) { e.preventDefault(); return; } } }); /* Update schedule display */ showCurrentTab(); updateScheduleGrid(); updatePresentationTimes(); });