Files
zulip/zephyr/static/js/search.js
Waseem Daher 9274437eb5 Hide additional search buttons when not in use.
(imported from commit 074011dfe7dfa4d3cb331b32fc6cf465f98d095f)
2012-10-26 14:55:42 -04:00

117 lines
3.4 KiB
JavaScript

var cached_term = "";
var cached_matches = [];
var cached_index;
var cached_table = $('table.focused_table');
function get_zid_as_int(object) {
return parseInt(object.attr("zid"), 10);
}
function match_on_visible_text(row, search_term) {
// You can't select on :visible, since that includes hidden elements that
// take up space.
if (row.find(".message_content, .sender_name, .message_header").text().toLowerCase().indexOf(search_term) !== -1) {
return true;
}
return false;
}
function search(term, highlighted_message, reverse) {
// term: case-insensitive text to search for
// highlighted_message: the current location of the pointer. Ignored
// on cached queries
// reverse: boolean as to whether the search is forward or backwards
//
// returns a message object containing the search term.
var previous_header_matched = false;
var focused_table = $('table.focused_table');
if ((term !== cached_term) || (cached_table[0] !== focused_table[0])) {
cached_term = term;
cached_matches = [];
cached_index = null;
cached_table = focused_table;
var selected_zid = get_zid_as_int(highlighted_message);
$.each(focused_table.find('.message_row, .recipient_row'), function (index, row) {
row = $(row);
if (previous_header_matched || (match_on_visible_text(row, term))) {
previous_header_matched = false;
if (row.hasClass("recipient_row")) {
previous_header_matched = true;
} else {
cached_matches.push(row);
var zid = get_zid_as_int(row);
if ((reverse && (zid <= selected_zid)) ||
(!reverse && (zid >= selected_zid) && !cached_index)) {
// Keep track of the closest match going up or down.
cached_index = cached_matches.length - 1;
}
}
}
});
return cached_matches[cached_index];
}
if (reverse) {
if (cached_index > 0) {
cached_index--;
}
} else {
if (cached_index < cached_matches.length - 1) {
cached_index++;
}
}
return cached_matches[cached_index];
}
function highlight_match(row, search_term) {
$('table tr').removeHighlight();
row.highlight(search_term);
row = row.prev('.recipient_row');
if ((row.length !== 0) && (match_on_visible_text(row, search_term))) {
row.highlight(search_term);
}
}
function search_button_handler(reverse) {
$("#search_start").hide();
$("#search").css('width', '82%');
$(".search_nav_button").show();
var query = $('#search').val().toLowerCase();
var res = search(query, selected_message, reverse);
if (!res) {
return;
}
select_message_by_id(res.attr("zid"));
highlight_match(res, query);
scroll_to_selected();
}
function clear_search_cache() {
cached_term = "";
}
function clear_search() {
$('table tr').removeHighlight();
$('#search').val('').focus();
clear_search_cache();
$("#search_start").show();
$(".search_nav_button").hide();
$("#search").css('width', '93%');
}
function something_is_highlighted() {
return $(".highlight").length > 0;
}
function update_highlight_on_narrow() {
highlight_match(selected_message, cached_term);
clear_search_cache();
}