mirror of
https://github.com/zulip/zulip.git
synced 2025-11-03 21:43:21 +00:00
This is a major change to the /#subscriptions page, converting it to by a side-by-side list of streams and their settings in an overlay. There are no new features added/removed, but it's a huge changeset, because it replaces the old navigation logic and moves the stream creation modal to appear in the right side of this overlay.
65 lines
2.1 KiB
JavaScript
65 lines
2.1 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] = 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-error').hide();
|
|
$('.alert-success').hide();
|
|
$('.alert-info').hide();
|
|
$('.alert').hide();
|
|
|
|
// 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 (scroll_positions.hasOwnProperty(target_tab)) {
|
|
viewport.scrollTop(scroll_positions[target_tab]);
|
|
} else {
|
|
if (target_tab === '#home') {
|
|
navigate.scroll_to_selected();
|
|
} else {
|
|
viewport.scrollTop(0);
|
|
}
|
|
}
|
|
});
|
|
|
|
// The admin and settings pages are generated client-side through
|
|
// templates.
|
|
|
|
var admin_link = $('#gear-menu a[href="#administration"]');
|
|
admin_link.on('shown', admin.setup_page);
|
|
|
|
var settings_link = $('#gear-menu a[href="#settings"]');
|
|
settings_link.on('shown', settings.setup_page);
|
|
};
|
|
|
|
return exports;
|
|
}());
|
|
|
|
if (typeof module !== 'undefined') {
|
|
module.exports = gear_menu;
|
|
}
|