Files
zulip/static/js/rows.js
Leo Franchi 568c33f294 Render messages as groups of divs instead of individual rows
Now that we no longer use tables for our message list, we can
more logically group messages together.

(imported from commit 9923a092f91a45fe3ef06f2f00e23e4e3fb62a37)
2014-02-27 20:25:23 -05:00

91 lines
2.6 KiB
JavaScript

var rows = (function () {
var exports = {};
// We don't need an andSelf() here because we already know
// that our next element is *not* a message_row, so this
// isn't going to end up empty unless we're at the bottom or top.
exports.next_visible = function (message_row) {
if (message_row === undefined) {
return $();
}
var row = message_row.next('.selectable_row');
if (row.length !== 0) {
return row;
}
var recipient_row = exports.get_message_recipient_row(message_row);
var next_recipient_rows = $(recipient_row).nextAll('.recipient_row');
if (next_recipient_rows.length === 0) {
return $();
}
return $('.selectable_row:first', next_recipient_rows[0]);
};
exports.prev_visible = function (message_row) {
if (message_row === undefined) {
return $();
}
var row = message_row.prev('.selectable_row');
if (row.length !== 0) {
return row;
}
var recipient_row = exports.get_message_recipient_row(message_row);
var prev_recipient_rows = $(recipient_row).prevAll('.recipient_row');
if (prev_recipient_rows.length === 0) {
return $();
}
return $('.selectable_row:last', prev_recipient_rows[0]);
};
exports.first_visible = function () {
return $('.focused_table .selectable_row:first');
};
exports.last_visible = function () {
return $('.focused_table .selectable_row:last');
};
exports.id = function (message_row) {
return parseFloat(message_row.attr('zid'), 10);
};
var valid_table_names = {
zhome: true,
zfilt: true
};
exports.get_table = function (table_name) {
if (! valid_table_names.hasOwnProperty(table_name)) {
return $();
}
return $('#' + table_name);
};
exports.get_closest_group = function (element) {
// This gets the closest message row to an element, whether it's
// a recipient bar or message. With our current markup,
// this is the most reliable way to do it.
return $(element).closest("div.recipient_row");
};
exports.first_message_in_group = function (message_group) {
return $('div.message_row:first', message_group);
};
exports.get_message_recipient_row = function (message_row) {
return $(message_row).parent('.recipient_row').expectOne();
};
exports.get_message_recipient_header = function (message_row) {
return $(message_row).parent('.recipient_row').find('.message_header').expectOne();
};
exports.recipient_from_group = function (message_group) {
return message_store.get(exports.id($(message_group).children('.message_row').first().expectOne()));
};
return exports;
}());