Files
zulip/zephyr/static/js/narrow.js
Keegan McAllister 37f8445318 Split more files out of zephyr.js
I would like to have split this into several commits, but it's hard to do
incrementally, because functions need to be defined before their use in global
data.

(imported from commit 31533396b236f3b657950b073982c317256f082a)
2012-10-03 18:25:59 -04:00

111 lines
3.4 KiB
JavaScript

// Narrowing predicate, or 'false' for the home view.
var narrowed = false;
function do_narrow(description, filter_function) {
narrowed = filter_function;
// Your pointer isn't changed when narrowed.
persistent_zephyr_id = selected_zephyr_id;
// We want the zephyr on which the narrow happened to stay in the same place if possible.
var old_top = $("#main_div").offset().top - selected_zephyr.offset().top;
var parent;
// Empty the filtered table right before we fill it again
clear_table('zfilt');
add_to_table(zephyr_array, 'zfilt', filter_function, 'bottom');
// Show the new set of messages.
$("#zfilt").addClass("focused_table");
$("#show_all_messages").removeAttr("disabled");
$("#narrowbox").show();
$("#main_div").addClass("narrowed_view");
$("#currently_narrowed_to").html(description);
$("#zhome").removeClass("focused_table");
select_and_show_by_id(selected_zephyr_id);
scroll_to_selected();
}
function narrow_huddle() {
var original = zephyr_dict[selected_zephyr_id];
do_narrow("Group chats with " + original.reply_to, function (other) {
return other.reply_to === original.reply_to;
});
}
function narrow_all_personals() {
do_narrow("All huddles with you", function (other) {
return other.type === "personal" || other.type === "huddle";
});
}
function narrow_personals() {
// Narrow to personals with a specific user
var original = zephyr_dict[selected_zephyr_id];
var other_party;
if (original.display_recipient === email) {
other_party = original.sender_email;
} else {
other_party = original.display_recipient;
}
do_narrow("Huddles with " + other_party, function (other) {
return (other.type === 'personal') &&
(((other.display_recipient === original.display_recipient) && (other.sender_email === original.sender_email)) ||
((other.display_recipient === original.sender_email) && (other.sender_email === original.display_recipient)));
});
}
function narrow_class() {
var original = zephyr_dict[selected_zephyr_id];
var message = original.display_recipient;
do_narrow(message, function (other) {
return (other.type === 'class' &&
original.recipient_id === other.recipient_id);
});
}
function narrow_instance() {
var original = zephyr_dict[selected_zephyr_id];
if (original.type !== 'class')
return;
var message = original.display_recipient + " | " + original.instance;
do_narrow(message, function (other) {
return (other.type === 'class' &&
original.recipient_id === other.recipient_id &&
original.instance === other.instance);
});
}
// Called for the 'narrow by class' hotkey.
function narrow_by_recipient() {
switch (zephyr_dict[selected_zephyr_id].type) {
case 'personal': narrow_personals(); break;
case 'huddle': narrow_huddle(); break;
case 'class': narrow_class(); break;
}
}
function show_all_messages() {
if (!narrowed) {
return;
}
narrowed = false;
$("#zfilt").removeClass('focused_table');
$("#zhome").addClass('focused_table');
$("#narrowbox").hide();
$("#main_div").removeClass('narrowed_view');
$("#show_all_messages").attr("disabled", "disabled");
$("#currently_narrowed_to").html("");
// Includes scrolling.
select_and_show_by_id(persistent_zephyr_id);
scroll_to_selected();
}