Make the back button work for the settings and subscriptions pages

(imported from commit 650c884abc9514cdfc934ae01e0a490f5f681292)
This commit is contained in:
Jeff Arnold 2012-12-19 15:19:29 -05:00
parent f4ddf4412b
commit 4feae6b202
3 changed files with 36 additions and 10 deletions

View File

@ -73,7 +73,7 @@ exports.start = function (msg_type, opts) {
compose.message_content(opts.message); compose.message_content(opts.message);
} }
$('#sidebar a[href="#home"]').tab('show'); ui.change_tab_to("#home");
var focus_area; var focus_area;
if (opts.stream && ! opts.subject) { if (opts.stream && ! opts.subject) {

View File

@ -6,7 +6,18 @@ var expected_hash = false;
exports.changehash = function (newhash) { exports.changehash = function (newhash) {
expected_hash = newhash; expected_hash = newhash;
// Some browsers reset scrollTop when changing the hash to "",
// so we save and restore it.
// http://stackoverflow.com/questions/4715073/window-location-hash-prevent-scrolling-to-the-top
var scrolltop;
if (newhash === "") {
scrolltop = viewport.scrollTop();
}
window.location.hash = newhash; window.location.hash = newhash;
util.reset_favicon();
if (newhash === "") {
viewport.scrollTop(scrolltop);
}
}; };
function hashchanged() { function hashchanged() {
@ -19,13 +30,24 @@ function hashchanged() {
} }
var hash = window.location.hash.split("/"); var hash = window.location.hash.split("/");
if (hash[0] === "#narrow") { switch (hash[0]) {
case "#narrow":
ui.change_tab_to("#home");
narrow.hashchanged(hash); narrow.hashchanged(hash);
ui.update_floating_recipient_bar(); ui.update_floating_recipient_bar();
} break;
else if (narrow.active()) { case "":
case "#":
ui.change_tab_to("#home");
narrow.show_all_messages(); narrow.show_all_messages();
ui.update_floating_recipient_bar(); ui.update_floating_recipient_bar();
break;
case "#subscriptions":
ui.change_tab_to("#subscriptions");
break;
case "#settings":
ui.change_tab_to("#settings");
break;
} }
} }

View File

@ -18,6 +18,10 @@ exports.home_tab_obscured = function () {
var scroll_positions = {}; var scroll_positions = {};
var gravatar_stamp = 1; var gravatar_stamp = 1;
exports.change_tab_to = function (tabname) {
$('#sidebar a[href="' + tabname + '"]').tab('show');
};
exports.focus_on = function (field_id) { exports.focus_on = function (field_id) {
// Call after autocompleting on a field, to advance the focus to // Call after autocompleting on a field, to advance the focus to
// the next input field. // the next input field.
@ -505,9 +509,9 @@ $(function () {
// Set the URL bar title to show the sub-page you're currently on. // Set the URL bar title to show the sub-page you're currently on.
var browser_url = target_tab; var browser_url = target_tab;
if (browser_url === "#home") { if (browser_url === "#home") {
browser_url = "#"; browser_url = "";
} }
window.history.pushState("object or string", "Title", browser_url); hashchange.changehash(browser_url);
}); });
$('#sidebar a[href="#subscriptions"]').click(subs.fetch); $('#sidebar a[href="#subscriptions"]').click(subs.fetch);