Skip to content

Commit d6aded5

Browse files
committed
Center language list manually
1 parent a355456 commit d6aded5

File tree

1 file changed

+17
-2
lines changed

1 file changed

+17
-2
lines changed

src/components/menu-bar/language-menu.jsx

+17-2
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class LanguageMenu extends React.PureComponent {
2828
componentDidUpdate (prevProps) {
2929
// If the submenu has been toggled open, try scrolling the selected option into view.
3030
if (!prevProps.menuOpen && this.props.menuOpen && this.selectedRef) {
31-
this.selectedRef.scrollIntoView({block: 'center'});
31+
this.scrollSelectedIntoView();
3232
}
3333
}
3434

@@ -39,10 +39,25 @@ class LanguageMenu extends React.PureComponent {
3939
handleMouseOver () {
4040
// If we are using hover rather than clicks for submenus, scroll the selected option into view
4141
if (!this.props.menuOpen && this.selectedRef) {
42-
this.selectedRef.scrollIntoView({block: 'center'});
42+
this.scrollSelectedIntoView();
4343
}
4444
}
4545

46+
scrollSelectedIntoView () {
47+
// the native scrollIntoView() scrolls the entire page when used outside the editor,
48+
// so we do this manually instead.
49+
// selectedRef is the checkmark <img>, its parent is a <div> from <MenuItem>, then a <div> from <SubMenu>
50+
51+
const menuItem = this.selectedRef.parentNode;
52+
const scrollContainer = menuItem.parentNode;
53+
54+
const itemHeight = menuItem.offsetHeight;
55+
const selectedItemPosition = menuItem.offsetTop;
56+
const visibleHeight = scrollContainer.offsetHeight;
57+
58+
scrollContainer.scrollTop = selectedItemPosition - (visibleHeight / 2) + (itemHeight / 2);
59+
}
60+
4661
render () {
4762
return (
4863
<MenuItem

0 commit comments

Comments
 (0)