Integrate week-view timezone handling with changes to main agenda page. Commit ready for merge.
- Legacy-Id: 18803
This commit is contained in:
parent
ce0f749293
commit
86dd2b2e67
|
@ -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')])
|
||||||
|
|
|
@ -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')
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
|
@ -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 %}
|
||||||
|
|
|
@ -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));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue