diff --git a/client/lib/popup.js b/client/lib/popup.js index e4292d382..0b789cc10 100644 --- a/client/lib/popup.js +++ b/client/lib/popup.js @@ -29,6 +29,13 @@ window.Popup = new (class { open(name) { const self = this; const popupName = `${name}Popup`; + const $contentWrapper = $('.content-wrapper') + if ($contentWrapper.length > 0) { + const contentWrapper = $contentWrapper[0]; + this._getTopStack().scrollTop = contentWrapper.scrollTop; + // scroll from e.g. delete comment to the top (where the confirm button is) + $contentWrapper.scrollTop(0); + } function clickFromPopup(evt) { return $(evt.target).closest('.js-pop-over').length !== 0; } @@ -129,6 +136,19 @@ window.Popup = new (class { /// steps back is greater than the popup stack size, the popup will be closed. back(n = 1) { if (this._stack.length > n) { + const $contentWrapper = $('.content-wrapper') + if ($contentWrapper.length > 0) { + const contentWrapper = $contentWrapper[0]; + const stack = this._stack[this._stack.length - 1 - n]; + if (contentWrapper.scrollTopMax && stack.scrollTop > contentWrapper.scrollTopMax) { + // sometimes scrollTopMax is lower than scrollTop, so i need this dirty hack + setTimeout(() => { + $contentWrapper.scrollTop(stack.scrollTop); + }, 6); + } + // restore the old popup scroll position + $contentWrapper.scrollTop(stack.scrollTop); + } _.times(n, () => this._stack.pop()); this._dep.changed(); } else {