0
0
Fork 0
mirror of https://github.com/BookStackApp/BookStack.git synced 2025-04-15 17:24:11 +00:00

Dropdowns: Fixed bad direction logic, added dynmaic height

Changes since adding notifications would cause direction to be assessed
upon max height of 80vh, which caused large dropdowns like the audit log
dropdown to drop up and/or go offscreen.
This restores the default assessment of 500px, and adds dynamic
max-height adjustment to provide more room for large dropdowns.

For 
This commit is contained in:
Dan Brown 2023-11-07 15:07:11 +00:00
parent ea0469e61a
commit fa6ac211b6
No known key found for this signature in database
GPG key ID: 46D9F943C24A2EF9
3 changed files with 8 additions and 2 deletions
resources
js/components
sass
views/settings

View file

@ -34,6 +34,7 @@ export class Dropdown extends Component {
let heightOffset = 0;
const toggleHeight = this.toggle.getBoundingClientRect().height;
const dropUpwards = menuOriginalRect.bottom > window.innerHeight;
const containerRect = this.container.getBoundingClientRect();
// If enabled, Move to body to prevent being trapped within scrollable sections
if (this.moveMenu) {
@ -52,9 +53,13 @@ export class Dropdown extends Component {
if (dropUpwards) {
this.menu.style.top = 'initial';
this.menu.style.bottom = `${heightOffset}px`;
const maxHeight = (window.innerHeight - 40) - (window.innerHeight - containerRect.bottom);
this.menu.style.maxHeight = `${Math.floor(maxHeight)}px`;
} else {
this.menu.style.top = `${heightOffset}px`;
this.menu.style.bottom = 'initial';
const maxHeight = (window.innerHeight - 40) - containerRect.top;
this.menu.style.maxHeight = `${Math.floor(maxHeight)}px`;
}
// Set listener to hide on mouse leave or window click
@ -91,6 +96,7 @@ export class Dropdown extends Component {
this.toggle.setAttribute('aria-expanded', 'false');
this.menu.style.top = '';
this.menu.style.bottom = '';
this.menu.style.maxHeight = '';
if (this.moveMenu) {
this.menu.style.position = '';

View file

@ -672,7 +672,7 @@ ul.pagination {
@include lightDark(color, #555, #eee);
fill: currentColor;
text-align: start !important;
max-height: 80vh;
max-height: 500px;
overflow-y: auto;
&.anchor-left {
inset-inline-end: auto;

View file

@ -16,7 +16,7 @@
<input type="hidden" name="{{ $key }}" value="{{ $val }}">
@endforeach
<div component="dropdown" class="list-sort-type dropdown-container">
<div component="dropdown" class="list-sort-type dropdown-container relative">
<label for="">{{ trans('settings.audit_event_filter') }}</label>
<button refs="dropdown@toggle"
type="button"