Fix issue where dropdown position is incorrect with page scroll gr-textarea did not take into account scroll position when positioning the emoji dropdown. This fixes it by adding scrollTop to non-fixed position textareas. Change-Id: I490d03443b4ca910602ab0636f3dfc19957fdd89
diff --git a/polygerrit-ui/app/elements/shared/gr-textarea/gr-textarea.js b/polygerrit-ui/app/elements/shared/gr-textarea/gr-textarea.js index 955f75d..9158a57 100644 --- a/polygerrit-ui/app/elements/shared/gr-textarea/gr-textarea.js +++ b/polygerrit-ui/app/elements/shared/gr-textarea/gr-textarea.js
@@ -206,6 +206,10 @@ 10); }, + _getScrollTop() { + return document.body.scrollTop; + }, + /** * This positions the dropdown to be just below the cursor position. It is * calculated by having a hidden element with the same width and styling of @@ -219,7 +223,12 @@ const caratPosition = this._getPositionOfCursor(); const fontSize = this._getFontSize(); - const top = caratPosition.top + fontSize + VERTICAL_OFFSET + 'px'; + let top = caratPosition.top + fontSize + VERTICAL_OFFSET; + + if (!this.fixedPositionDropdown) { + top += this._getScrollTop(); + } + top += 'px'; const left = caratPosition.left + 'px'; this.$.emojiSuggestions.setPosition(top, left); },
diff --git a/polygerrit-ui/app/elements/shared/gr-textarea/gr-textarea_test.html b/polygerrit-ui/app/elements/shared/gr-textarea/gr-textarea_test.html index c92a479..1c5dea3 100644 --- a/polygerrit-ui/app/elements/shared/gr-textarea/gr-textarea_test.html +++ b/polygerrit-ui/app/elements/shared/gr-textarea/gr-textarea_test.html
@@ -181,9 +181,12 @@ sandbox.stub(element, '_getPositionOfCursor', () => { return {top: 100, left: 30}; }); - sandbox.stub(element, '_getFontSize', () => { - return 12; - }); + sandbox.stub(element, '_getFontSize', () => 12); + sandbox.stub(element, '_getScrollTop', () => 100); + element._updateSelectorPosition(); + assert.isTrue(setPositionSpy.lastCall.calledWithExactly('219px', '30px')); + + element.fixedPositionDropdown = true; element._updateSelectorPosition(); assert.isTrue(setPositionSpy.lastCall.calledWithExactly('119px', '30px')); });