Skip to content

Commit 86dd2b2

Browse files
Integrate week-view timezone handling with changes to main agenda page. Commit ready for merge.
- Legacy-Id: 18803
1 parent ce0f749 commit 86dd2b2

5 files changed

Lines changed: 59 additions & 45 deletions

File tree

ietf/meeting/tests_js.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -917,7 +917,7 @@ def get_expected_items(self):
917917
return expected_items
918918

919919
def test_timezone_default(self):
920-
"""Week view should show local times by default"""
920+
"""Week view should show UTC times by default"""
921921
self.assertNotEqual(self.meeting.time_zone.lower(), 'utc',
922922
'Cannot test local time weekview because meeting is using UTC time.')
923923
self.login()
@@ -929,8 +929,8 @@ def test_timezone_default(self):
929929
expected_name = item.timeslot.name
930930
else:
931931
expected_name = item.session.group.name
932-
expected_time = '-'.join([item.timeslot.local_start_time().strftime('%H%M'),
933-
item.timeslot.local_end_time().strftime('%H%M')])
932+
expected_time = '-'.join([item.timeslot.utc_start_time().strftime('%H%M'),
933+
item.timeslot.utc_end_time().strftime('%H%M')])
934934
WebDriverWait(self.driver, 2).until(
935935
expected_conditions.presence_of_element_located(
936936
(By.XPATH,
@@ -974,7 +974,7 @@ def test_timezone_selection(self):
974974
def test_event_wrapping(self):
975975
"""Events that overlap midnight should be shown on both days
976976
977-
This assumes that the meeting is in America/New_York timezone.
977+
This assumes that the meeting is in US/Eastern timezone.
978978
"""
979979
def _assert_wrapped(displayed, expected_time_string):
980980
self.assertEqual(len(displayed), 2)
@@ -995,6 +995,9 @@ def _assert_not_wrapped(displayed, expected_time_string):
995995
self.assertIn(expected_time_string, first_parent.text)
996996

997997
duration = datetime.timedelta(minutes=120) # minutes
998+
local_tz = self.meeting.time_zone
999+
self.assertEqual(local_tz.lower(), 'us/eastern',
1000+
'Test logic error - meeting local time zone must be US/Eastern')
9981001

9991002
# Session during a single day in meeting local time but multi-day UTC
10001003
# Compute a time that overlaps midnight, UTC, but won't when shifted to a local time zone
@@ -1046,7 +1049,7 @@ def _assert_not_wrapped(displayed, expected_time_string):
10461049
self.login()
10471050

10481051
# Test in meeting local time
1049-
self.driver.get(self.absreverse('ietf.meeting.views.week_view'))
1052+
self.driver.get(self.absreverse('ietf.meeting.views.week_view') + '?tz=%s' % local_tz.lower())
10501053

10511054
time_string = '-'.join([daytime_timeslot.local_start_time().strftime('%H%M'),
10521055
daytime_timeslot.local_end_time().strftime('%H%M')])

ietf/meeting/views.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1765,7 +1765,6 @@ def week_view(request, num=None, name=None, owner=None):
17651765

17661766
return render(request, "meeting/week-view.html", {
17671767
"items": json.dumps(items),
1768-
"timezone": meeting.time_zone,
17691768
})
17701769

17711770
@role_required('Area Director','Secretariat','IAB')

ietf/static/ietf/js/agenda/timezone.js

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
// Callback for timezone change - called after current_timezone is updated
2+
var timezone_change_callback;
3+
14
// Initialize moments
25
function initialize_moments() {
36
var times=$('span.time')
@@ -195,7 +198,9 @@ function update_times(newtz) {
195198
});
196199
update_tooltips_all();
197200
update_clock();
198-
// update_calendar(agenda_filter.get_filter())
201+
if (timezone_change_callback) {
202+
timezone_change_callback(newtz);
203+
}
199204
}
200205

201206
// Highlight ongoing based on the current time
@@ -253,3 +258,7 @@ function init_timers() {
253258
setInterval(function() { update_tooltips_all(); }, 3600000 / speedup);
254259
}
255260

261+
// Register a callback for timezone change
262+
function set_tz_change_callback(cb) {
263+
timezone_change_callback = cb;
264+
}

ietf/templates/meeting/agenda.html

Lines changed: 39 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -342,7 +342,9 @@ <h2>
342342

343343
<script src="{% static 'ietf/js/agenda/agenda_filter.js' %}"></script>
344344
<script>
345-
// Update the agenda display with specified filters
345+
var current_timezone = 'UTC';
346+
347+
// Update the agenda display with specified filters
346348
function update_agenda_display(filter_params) {
347349
var agenda_rows=$('[id^="row-"]')
348350

@@ -380,46 +382,44 @@ <h2>
380382
}
381383
}
382384

383-
function update_weekview(filter_params) {
384-
var weekview = $("#weekview");
385-
386-
if (!agenda_filter.filtering_is_enabled(filter_params)) {
387-
weekview.addClass("hidden");
388-
return;
389-
}
390-
391-
// Filtering is enabled
392-
weekview.removeClass("hidden");
393-
394-
var wv_iframe = document.getElementById('weekview');
395-
var wv_window = wv_iframe.contentWindow;
396-
var queryparams = window.location.search;
397-
{% if "-utc" in request.path %}
398-
if (queryparams) {
399-
queryparams += '&tz=utc';
400-
} else {
401-
queryparams = '?tz=utc';
402-
}
403-
{% endif %}
404-
var new_url = 'week-view.html' + queryparams;
405-
if (wv_iframe.src && wv_window.history && wv_window.history.replaceState) {
406-
wv_window.history.replaceState({}, '', new_url);
407-
wv_window.redraw_weekview();
408-
} else {
409-
// either have not yet loaded the iframe or we do not support history replacement
410-
wv_iframe.src = new_url;
411-
}
412-
}
413-
385+
function update_weekview(filter_params) {
386+
var weekview = $("#weekview");
387+
if (agenda_filter.filtering_is_enabled(filter_params)) {
388+
weekview.removeClass("hidden");
389+
} else {
390+
weekview.addClass("hidden");
391+
}
392+
update_weekview_display();
393+
}
394+
395+
function update_weekview_display() {
396+
var weekview = $("#weekview");
397+
if (!weekview.hasClass('hidden')) {
398+
var queryparams = window.location.search;
399+
if (queryparams) {
400+
queryparams += '&tz=' + current_timezone.toLowerCase();
401+
} else {
402+
queryparams = '?tz=' + current_timezone.toLowerCase();
403+
}
404+
var new_url = 'week-view.html' + queryparams;
405+
var wv_iframe = document.getElementById('weekview');
406+
var wv_window = wv_iframe.contentWindow;
407+
if (wv_iframe.src && wv_window.history && wv_window.history.replaceState) {
408+
wv_window.history.replaceState({}, '', new_url);
409+
wv_window.redraw_weekview();
410+
} else {
411+
// either have not yet loaded the iframe or we do not support history replacement
412+
wv_iframe.src = new_url;
413+
}
414+
}
415+
}
416+
414417
function update_view(filter_params) {
415418
update_agenda_display(filter_params);
416419
update_weekview(filter_params)
417420
update_ical_links(filter_params)
418421
}
419422

420-
agenda_filter.set_update_callback(update_view);
421-
agenda_filter.enable();
422-
423423
/**
424424
* Retrieve and display materials for a session
425425
*
@@ -519,7 +519,6 @@ <h2>
519519
// Get meeting and local times, initialize timezone system
520520
meeting_timezone = "{{timezone}}";
521521
local_timezone = moment.tz.guess();
522-
current_timezone = 'UTC';
523522
{% if "-utc" in request.path %}
524523
timezone_init('UTC');
525524
{% else %}
@@ -528,5 +527,9 @@ <h2>
528527

529528
init_timers();
530529

530+
set_tz_change_callback(update_weekview_display);
531+
agenda_filter.set_update_callback(update_view);
532+
agenda_filter.enable();
533+
531534
</script>
532535
{% endblock %}

ietf/templates/meeting/week-view.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -601,8 +601,8 @@
601601
// Set up events for drawing the calendar
602602
function redraw_weekview() {
603603
var query_params = agenda_filter.parse_query_params(window.location.search);
604-
var timezone_name = query_params.tz || '{{ timezone }}';
605-
604+
var timezone_name = query_params.tz || 'utc';
605+
606606
items = prepare_items(all_items, timezone_name);
607607
draw_calendar(items, agenda_filter.get_filter_params(query_params));
608608
}

0 commit comments

Comments
 (0)