mirror of
https://github.com/BookStackApp/BookStack.git
synced 2025-07-21 09:22:09 +03:00
Layout: Improved sidebar sizing, and dropdown consideration
- Updated tri-layout sidebars to have less padding and to avoid cutting off content when in single-sidebar mode. - Updated dropdown handling to consider the parent scroll container when deciding to drop upwards, to help prevent cut-off.
This commit is contained in:
@ -1,4 +1,4 @@
|
||||
import {onSelect} from '../services/dom.ts';
|
||||
import {findClosestScrollContainer, onSelect} from '../services/dom.ts';
|
||||
import {KeyboardNavigationHandler} from '../services/keyboard-navigation.ts';
|
||||
import {Component} from './component';
|
||||
|
||||
@ -33,7 +33,8 @@ export class Dropdown extends Component {
|
||||
const menuOriginalRect = this.menu.getBoundingClientRect();
|
||||
let heightOffset = 0;
|
||||
const toggleHeight = this.toggle.getBoundingClientRect().height;
|
||||
const dropUpwards = menuOriginalRect.bottom > window.innerHeight;
|
||||
const containerBounds = findClosestScrollContainer(this.menu).getBoundingClientRect();
|
||||
const dropUpwards = menuOriginalRect.bottom > containerBounds.bottom;
|
||||
const containerRect = this.container.getBoundingClientRect();
|
||||
|
||||
// If enabled, Move to body to prevent being trapped within scrollable sections
|
||||
|
@ -256,4 +256,22 @@ export function findTargetNodeAndOffset(parentNode: HTMLElement, offset: number)
|
||||
export function hashElement(element: HTMLElement): string {
|
||||
const normalisedElemText = (element.textContent || '').replace(/\s{2,}/g, '');
|
||||
return cyrb53(normalisedElemText);
|
||||
}
|
||||
|
||||
/**
|
||||
* Find the closest scroll container parent for the given element
|
||||
* otherwise will default to the body element.
|
||||
*/
|
||||
export function findClosestScrollContainer(start: HTMLElement): HTMLElement {
|
||||
let el: HTMLElement|null = start;
|
||||
do {
|
||||
const computed = window.getComputedStyle(el);
|
||||
if (computed.overflowY === 'scroll') {
|
||||
return el;
|
||||
}
|
||||
|
||||
el = el.parentElement;
|
||||
} while (el);
|
||||
|
||||
return document.body;
|
||||
}
|
@ -431,7 +431,8 @@ body.flexbox {
|
||||
grid-template-areas: "a b b";
|
||||
grid-template-columns: 1fr 3fr;
|
||||
grid-template-rows: min-content min-content 1fr;
|
||||
padding-inline-end: vars.$l;
|
||||
margin-inline-start: (vars.$m + vars.$xxs);
|
||||
margin-inline-end: (vars.$m + vars.$xxs);
|
||||
}
|
||||
.tri-layout-sides {
|
||||
grid-column-start: a;
|
||||
@ -452,6 +453,8 @@ body.flexbox {
|
||||
height: 100%;
|
||||
scrollbar-width: none;
|
||||
-ms-overflow-style: none;
|
||||
padding-inline: vars.$m;
|
||||
margin-inline: -(vars.$m);
|
||||
&::-webkit-scrollbar {
|
||||
display: none;
|
||||
}
|
||||
|
Reference in New Issue
Block a user