Integrate week-view timezone handling with changes to main agenda page. Commit ready for merge.

- Legacy-Id: 18803
This commit is contained in:
Jennifer Richards 2021-01-26 14:51:55 +00:00
parent ce0f749293
commit 86dd2b2e67
5 changed files with 59 additions and 45 deletions

View file

@ -917,7 +917,7 @@ class WeekviewTests(MeetingTestCase):
return expected_items return expected_items
def test_timezone_default(self): def test_timezone_default(self):
"""Week view should show local times by default""" """Week view should show UTC times by default"""
self.assertNotEqual(self.meeting.time_zone.lower(), 'utc', self.assertNotEqual(self.meeting.time_zone.lower(), 'utc',
'Cannot test local time weekview because meeting is using UTC time.') 'Cannot test local time weekview because meeting is using UTC time.')
self.login() self.login()
@ -929,8 +929,8 @@ class WeekviewTests(MeetingTestCase):
expected_name = item.timeslot.name expected_name = item.timeslot.name
else: else:
expected_name = item.session.group.name expected_name = item.session.group.name
expected_time = '-'.join([item.timeslot.local_start_time().strftime('%H%M'), expected_time = '-'.join([item.timeslot.utc_start_time().strftime('%H%M'),
item.timeslot.local_end_time().strftime('%H%M')]) item.timeslot.utc_end_time().strftime('%H%M')])
WebDriverWait(self.driver, 2).until( WebDriverWait(self.driver, 2).until(
expected_conditions.presence_of_element_located( expected_conditions.presence_of_element_located(
(By.XPATH, (By.XPATH,
@ -974,7 +974,7 @@ class WeekviewTests(MeetingTestCase):
def test_event_wrapping(self): def test_event_wrapping(self):
"""Events that overlap midnight should be shown on both days """Events that overlap midnight should be shown on both days
This assumes that the meeting is in America/New_York timezone. This assumes that the meeting is in US/Eastern timezone.
""" """
def _assert_wrapped(displayed, expected_time_string): def _assert_wrapped(displayed, expected_time_string):
self.assertEqual(len(displayed), 2) self.assertEqual(len(displayed), 2)
@ -995,6 +995,9 @@ class WeekviewTests(MeetingTestCase):
self.assertIn(expected_time_string, first_parent.text) self.assertIn(expected_time_string, first_parent.text)
duration = datetime.timedelta(minutes=120) # minutes duration = datetime.timedelta(minutes=120) # minutes
local_tz = self.meeting.time_zone
self.assertEqual(local_tz.lower(), 'us/eastern',
'Test logic error - meeting local time zone must be US/Eastern')
# Session during a single day in meeting local time but multi-day UTC # Session during a single day in meeting local time but multi-day UTC
# Compute a time that overlaps midnight, UTC, but won't when shifted to a local time zone # Compute a time that overlaps midnight, UTC, but won't when shifted to a local time zone
@ -1046,7 +1049,7 @@ class WeekviewTests(MeetingTestCase):
self.login() self.login()
# Test in meeting local time # Test in meeting local time
self.driver.get(self.absreverse('ietf.meeting.views.week_view')) self.driver.get(self.absreverse('ietf.meeting.views.week_view') + '?tz=%s' % local_tz.lower())
time_string = '-'.join([daytime_timeslot.local_start_time().strftime('%H%M'), time_string = '-'.join([daytime_timeslot.local_start_time().strftime('%H%M'),
daytime_timeslot.local_end_time().strftime('%H%M')]) daytime_timeslot.local_end_time().strftime('%H%M')])

View file

@ -1765,7 +1765,6 @@ def week_view(request, num=None, name=None, owner=None):
return render(request, "meeting/week-view.html", { return render(request, "meeting/week-view.html", {
"items": json.dumps(items), "items": json.dumps(items),
"timezone": meeting.time_zone,
}) })
@role_required('Area Director','Secretariat','IAB') @role_required('Area Director','Secretariat','IAB')

View file

@ -1,3 +1,6 @@
// Callback for timezone change - called after current_timezone is updated
var timezone_change_callback;
// Initialize moments // Initialize moments
function initialize_moments() { function initialize_moments() {
var times=$('span.time') var times=$('span.time')
@ -195,7 +198,9 @@ function update_times(newtz) {
}); });
update_tooltips_all(); update_tooltips_all();
update_clock(); update_clock();
// update_calendar(agenda_filter.get_filter()) if (timezone_change_callback) {
timezone_change_callback(newtz);
}
} }
// Highlight ongoing based on the current time // Highlight ongoing based on the current time
@ -253,3 +258,7 @@ function init_timers() {
setInterval(function() { update_tooltips_all(); }, 3600000 / speedup); setInterval(function() { update_tooltips_all(); }, 3600000 / speedup);
} }
// Register a callback for timezone change
function set_tz_change_callback(cb) {
timezone_change_callback = cb;
}

View file

@ -342,7 +342,9 @@
<script src="{% static 'ietf/js/agenda/agenda_filter.js' %}"></script> <script src="{% static 'ietf/js/agenda/agenda_filter.js' %}"></script>
<script> <script>
// Update the agenda display with specified filters var current_timezone = 'UTC';
// Update the agenda display with specified filters
function update_agenda_display(filter_params) { function update_agenda_display(filter_params) {
var agenda_rows=$('[id^="row-"]') var agenda_rows=$('[id^="row-"]')
@ -380,46 +382,44 @@
} }
} }
function update_weekview(filter_params) { function update_weekview(filter_params) {
var weekview = $("#weekview"); var weekview = $("#weekview");
if (agenda_filter.filtering_is_enabled(filter_params)) {
if (!agenda_filter.filtering_is_enabled(filter_params)) { weekview.removeClass("hidden");
weekview.addClass("hidden"); } else {
return; weekview.addClass("hidden");
} }
update_weekview_display();
// Filtering is enabled }
weekview.removeClass("hidden");
function update_weekview_display() {
var wv_iframe = document.getElementById('weekview'); var weekview = $("#weekview");
var wv_window = wv_iframe.contentWindow; if (!weekview.hasClass('hidden')) {
var queryparams = window.location.search; var queryparams = window.location.search;
{% if "-utc" in request.path %} if (queryparams) {
if (queryparams) { queryparams += '&tz=' + current_timezone.toLowerCase();
queryparams += '&tz=utc'; } else {
} else { queryparams = '?tz=' + current_timezone.toLowerCase();
queryparams = '?tz=utc'; }
} var new_url = 'week-view.html' + queryparams;
{% endif %} var wv_iframe = document.getElementById('weekview');
var new_url = 'week-view.html' + queryparams; var wv_window = wv_iframe.contentWindow;
if (wv_iframe.src && wv_window.history && wv_window.history.replaceState) { if (wv_iframe.src && wv_window.history && wv_window.history.replaceState) {
wv_window.history.replaceState({}, '', new_url); wv_window.history.replaceState({}, '', new_url);
wv_window.redraw_weekview(); wv_window.redraw_weekview();
} else { } else {
// either have not yet loaded the iframe or we do not support history replacement // either have not yet loaded the iframe or we do not support history replacement
wv_iframe.src = new_url; wv_iframe.src = new_url;
} }
} }
}
function update_view(filter_params) { function update_view(filter_params) {
update_agenda_display(filter_params); update_agenda_display(filter_params);
update_weekview(filter_params) update_weekview(filter_params)
update_ical_links(filter_params) update_ical_links(filter_params)
} }
agenda_filter.set_update_callback(update_view);
agenda_filter.enable();
/** /**
* Retrieve and display materials for a session * Retrieve and display materials for a session
* *
@ -519,7 +519,6 @@
// Get meeting and local times, initialize timezone system // Get meeting and local times, initialize timezone system
meeting_timezone = "{{timezone}}"; meeting_timezone = "{{timezone}}";
local_timezone = moment.tz.guess(); local_timezone = moment.tz.guess();
current_timezone = 'UTC';
{% if "-utc" in request.path %} {% if "-utc" in request.path %}
timezone_init('UTC'); timezone_init('UTC');
{% else %} {% else %}
@ -528,5 +527,9 @@
init_timers(); init_timers();
set_tz_change_callback(update_weekview_display);
agenda_filter.set_update_callback(update_view);
agenda_filter.enable();
</script> </script>
{% endblock %} {% endblock %}

View file

@ -601,8 +601,8 @@
// Set up events for drawing the calendar // Set up events for drawing the calendar
function redraw_weekview() { function redraw_weekview() {
var query_params = agenda_filter.parse_query_params(window.location.search); var query_params = agenda_filter.parse_query_params(window.location.search);
var timezone_name = query_params.tz || '{{ timezone }}'; var timezone_name = query_params.tz || 'utc';
items = prepare_items(all_items, timezone_name); items = prepare_items(all_items, timezone_name);
draw_calendar(items, agenda_filter.get_filter_params(query_params)); draw_calendar(items, agenda_filter.get_filter_params(query_params));
} }