diff --git a/zephyr/static/js/zephyr.js b/zephyr/static/js/zephyr.js index 592f89a584..4646306c91 100644 --- a/zephyr/static/js/zephyr.js +++ b/zephyr/static/js/zephyr.js @@ -480,13 +480,7 @@ function do_narrow(description, filter_function) { // Empty the filtered table right before we fill it again $("#zfilt").empty(); - $.each(zephyr_array, function (dummy, zephyr) { - if (filter_function(zephyr)) { - // It matched the filter, push it on to the array. - add_to_tables(zephyr, parent, 'zfilt'); - parent = zephyr; - } - }); + add_to_tables(zephyr_array, 'zfilt', filter_function); // Show the new set of messages. $("#zfilt").addClass("focused_table"); @@ -631,37 +625,41 @@ function same_sender(a, b) { (a.sender_email === b.sender_email)); } -function add_to_tables(zephyr, parent, table_name) { +function add_to_tables(zephyrs, table_name, filter_function) { var table = $('#' + table_name); + var prev = zephyr_dict[table.find('tr:last-child').attr('zid')]; - if (same_recipient(parent, zephyr)) { - zephyr.include_recipient = false; - } else { - zephyr.include_recipient = true; - if (parent !== undefined) { - // add a space to the table, but not if we have no parent because - // we don't want a bookend as the first element. - table.append(''); + $.each(zephyrs, function (index, zephyr) { + if (! filter_function(zephyr)) + return; + + if (same_recipient(prev, zephyr)) { + zephyr.include_recipient = false; + } else { + zephyr.include_recipient = true; + if (prev !== undefined) + // add a space to the table, but not for the first element. + table.append(''); } - } - if (same_sender(parent, zephyr) && !zephyr.include_recipient) { - zephyr.include_sender = false; + if (same_sender(prev, zephyr) && !zephyr.include_recipient) { + zephyr.include_sender = false; + table.find('tr:last-child td:last-child').addClass("collapsed_parent"); + } else { + zephyr.include_sender = true; + } - table.find('tr:last-child td:last-child').addClass("collapsed_parent"); - } else { - zephyr.include_sender = true; - } + zephyr.dom_id = table_name + zephyr.id; - zephyr.dom_id = table_name + zephyr.id; + var new_tr = $(templates.zephyr(zephyr)); + table.append(new_tr); + register_huddle_onclick(new_tr, zephyr.sender_email); - var new_tr = $(templates.zephyr(zephyr)); - table.append(new_tr); - register_huddle_onclick(new_tr, zephyr.sender_email); + prev = zephyr; + }); } - -function add_message(index, zephyr) { +function add_zephyr_metadata(dummy, zephyr) { last_received = Math.max(last_received, zephyr.id); if (zephyr.type === 'class') { @@ -693,31 +691,23 @@ function add_message(index, zephyr) { } } - var time = new Date(zephyr.timestamp * 1000); var two_digits = function (x) { return ('0' + x).slice(-2); }; zephyr.timestr = two_digits(time.getHours()) + ':' + two_digits(time.getMinutes()); zephyr.full_date_str = time.toLocaleString(); - var parent = zephyr_dict[$('#zhome tr:last-child').attr('zid')]; - - add_to_tables(zephyr, parent, 'zhome'); - - // now lets see if the filter applies to the message - var parent_filtered = zephyr_dict[$('#zfilt tr:last-child').attr('zid')]; - - if (current_view_predicate(zephyr)) { - add_to_tables(zephyr, parent_filtered, 'zfilt'); - } - - - // save the zephyr object, with computed values for various is_* zephyr_dict[zephyr.id] = zephyr; } +function add_messages(zephyrs) { + $.each(zephyrs, add_zephyr_metadata); + add_to_tables(zephyrs, 'zhome', home_view); + add_to_tables(zephyrs, 'zfilt', current_view_predicate); +} + $(function () { - $(zephyr_array).each(add_message); + add_messages(zephyr_array); select_and_show_by_id(initial_pointer); get_updates_longpoll(); }); @@ -741,9 +731,9 @@ function get_updates_longpoll() { $('#connection-error').hide(); if (data && data.zephyrs) { - $.each(data.zephyrs, function (dummy, zephyr) { - add_message(dummy, zephyr); - zephyr_array.push(zephyr); + add_messages(data.zephyrs); + $.each(data.zephyrs, function () { + zephyr_array.push(this); }); } setTimeout(get_updates_longpoll, 0);