diff --git a/src/octoprint/static/js/app/viewmodels/settings.js b/src/octoprint/static/js/app/viewmodels/settings.js index 79c6d526..c9b0036d 100644 --- a/src/octoprint/static/js/app/viewmodels/settings.js +++ b/src/octoprint/static/js/app/viewmodels/settings.js @@ -247,9 +247,20 @@ $(function() { } }); }); + + // reset scroll position on tab change + $('ul.nav-list a[data-toggle="tab"]', self.settingsDialog).on("show", function() { + self._resetScrollPosition(); + }); }; - self.show = function() { + self.show = function(tab) { + // select first or specified tab + self.selectTab(tab); + + // reset scroll position + self._resetScrollPosition(); + // show settings, ensure centered position self.settingsDialog.modal({ minHeight: function() { return Math.max($.fn.modal.defaults.maxHeight() - 80, 250); } @@ -584,6 +595,21 @@ $(function() { self.onEventSettingsUpdated = function() { self.requestData(); }; + + self._resetScrollPosition = function() { + $('.scrollable', self.settingsDialog).scrollTop(0); + }; + + self.selectTab = function(tab) { + if (tab != undefined) { + if (!_.startsWith(tab, "#")) { + tab = "#" + tab; + } + $('ul.nav-list a[href="' + tab + '"]', self.settingsDialog).tab("show"); + } else { + $('ul.nav-list a:first', self.settingsDialog).tab("show"); + } + }; } OCTOPRINT_VIEWMODELS.push([ diff --git a/src/octoprint/templates/navbar/settings.jinja2 b/src/octoprint/templates/navbar/settings.jinja2 index fb0a6c31..27605710 100644 --- a/src/octoprint/templates/navbar/settings.jinja2 +++ b/src/octoprint/templates/navbar/settings.jinja2 @@ -1,3 +1,3 @@ - + {{ _('Settings') }}