Files
zulip/static/js/gear_menu.js
Tim Abbott 34a8e6c3a2 gear_menu: Eliminate scrollTop for non-home tabs.
We should be able to eventually further clean this up to do nothing,
since we now don't have tabs over than the home tab.  But I'm leaving
that for a future issue.
2017-05-16 20:37:00 -07:00

60 lines
1.9 KiB
JavaScript

var gear_menu = (function () {
var exports = {};
// We want to remember how far we were scrolled on each 'tab'.
// To do so, we need to save away the old position of the
// scrollbar when we switch to a new tab (and restore it
// when we switch back.)
var scroll_positions = {};
exports.initialize = function () {
admin.show_or_hide_menu_item();
$('#gear-menu a[data-toggle="tab"]').on('show', function (e) {
// Save the position of our old tab away, before we switch
var old_tab = $(e.relatedTarget).attr('href');
scroll_positions[old_tab] = message_viewport.scrollTop();
});
$('#gear-menu a[data-toggle="tab"]').on('shown', function (e) {
var target_tab = $(e.target).attr('href');
resize.resize_bottom_whitespace();
// Hide all our error messages when switching tabs
$('.alert').removeClass("show");
// Set the URL bar title to show the sub-page you're currently on.
var browser_url = target_tab;
if (browser_url === "#home") {
browser_url = "";
}
hashchange.changehash(browser_url);
// After we show the new tab, restore its old scroll position
// (we apparently have to do this after setting the hash,
// because otherwise that action may scroll us somewhere.)
if (target_tab === '#home') {
if (scroll_positions.hasOwnProperty(target_tab)) {
message_viewport.scrollTop(scroll_positions[target_tab]);
} else {
navigate.scroll_to_selected();
}
}
});
// The admin and settings pages are generated client-side through
// templates.
};
exports.open = function () {
$("#settings-dropdown").click();
// there are invisible li tabs, which should not be clicked.f
$("#gear-menu").find("li:not(.invisible) a").eq(0).focus();
};
return exports;
}());
if (typeof module !== 'undefined') {
module.exports = gear_menu;
}