diff --git a/frontend_tests/node_tests/templates.js b/frontend_tests/node_tests/templates.js index 05928ca117..c3b5a15bb8 100644 --- a/frontend_tests/node_tests/templates.js +++ b/frontend_tests/node_tests/templates.js @@ -648,7 +648,7 @@ function render(template_name, args) { is_stream: true, message_ids: [1, 2], message_containers: messages, - show_date: '"Jan 07"', + show_date: '"Jan 07"', show_date_separator: true, subject: 'two messages', match_subject: 'two messages', diff --git a/frontend_tests/node_tests/timerender.js b/frontend_tests/node_tests/timerender.js index 314d138938..c3f3d2c93d 100644 --- a/frontend_tests/node_tests/timerender.js +++ b/frontend_tests/node_tests/timerender.js @@ -99,7 +99,7 @@ var timerender = require('js/timerender.js'); var actual = timerender.render_date(message_time, undefined, today); assert.equal(expected_html, actual.html()); assert.equal(attrs.get('title'), 'Friday, April 12, 2019'); - assert.equal(attrs.get('id'), 'timerender0'); + assert.equal(attrs.get('class'), 'timerender0'); }()); (function test_render_date_renders_time_above_html() { diff --git a/static/js/timerender.js b/static/js/timerender.js index b7d28241bb..d6740f4d49 100644 --- a/static/js/timerender.js +++ b/static/js/timerender.js @@ -113,50 +113,53 @@ function render_date_span(elem, rendered_time, rendered_time_above) { // of this DOM node as HTML, so effectively a copy of the node. That's // okay since to update the time later we look up the node by its id.) exports.render_date = function (time, time_above, today) { - var id = "timerender" + next_timerender_id; + var className = "timerender" + next_timerender_id; next_timerender_id += 1; var rendered_time = exports.render_now(time, today); - var node = $("").attr('id', id); + var node = $("").attr('class', className); if (time_above !== undefined) { var rendered_time_above = exports.render_now(time_above, today); node = render_date_span(node, rendered_time, rendered_time_above); } else { node = render_date_span(node, rendered_time); } - maybe_add_update_list_entry(rendered_time.needs_update, id, time, time_above); + maybe_add_update_list_entry(rendered_time.needs_update, className, time, time_above); return node; }; // This isn't expected to be called externally except manually for // testing purposes. exports.update_timestamps = function () { - var time = new XDate(); - if (time >= next_update) { + var now = new XDate(); + if (now >= next_update) { var to_process = update_list; update_list = []; - _.each(to_process, function (elem) { - var id = elem[0]; - var element = document.getElementById(id); + _.each(to_process, function (entry) { + var className = entry[0]; + var elements = $('.' + className); // The element might not exist any more (because it // was in the zfilt table, or because we added // messages above it and re-collapsed). - if (element !== null) { - var time = elem[1]; - var time_above; - var rendered_time = exports.render_now(time); - if (elem.length === 3) { - time_above = elem[2]; - var rendered_time_above = exports.render_now(time_above); - render_date_span($(element), rendered_time, rendered_time_above); - } else { - render_date_span($(element), rendered_time); - } - maybe_add_update_list_entry(rendered_time.needs_update, id, time, time_above); + if (elements !== null) { + _.each(elements, function (element) { + var time = entry[1]; + var time_above; + var rendered_time = exports.render_now(time); + if (entry.length === 3) { + time_above = entry[2]; + var rendered_time_above = exports.render_now(time_above); + render_date_span($(element), rendered_time, rendered_time_above); + } else { + render_date_span($(element), rendered_time); + } + maybe_add_update_list_entry( + rendered_time.needs_update, className, time, time_above); + }); } }); - next_update = set_to_start_of_day(time.clone().addDays(1)); + next_update = set_to_start_of_day(now.clone().addDays(1)); } };