mirror of
https://github.com/BookStackApp/BookStack.git
synced 2024-12-04 14:53:37 +08:00
44 lines
1.5 KiB
TypeScript
44 lines
1.5 KiB
TypeScript
import {EditorContainerUiElement, EditorUiElement} from "../core";
|
|
import {EditorDropdownButton} from "./dropdown-button";
|
|
import moreHorizontal from "@icons/editor/more-horizontal.svg"
|
|
import {el} from "../../../utils/dom";
|
|
|
|
|
|
export class EditorOverflowContainer extends EditorContainerUiElement {
|
|
|
|
protected size: number;
|
|
protected overflowButton: EditorDropdownButton;
|
|
protected content: EditorUiElement[];
|
|
|
|
constructor(size: number, children: EditorUiElement[]) {
|
|
super(children);
|
|
this.size = size;
|
|
this.content = children;
|
|
this.overflowButton = new EditorDropdownButton({
|
|
button: {
|
|
label: 'More',
|
|
icon: moreHorizontal,
|
|
},
|
|
}, []);
|
|
this.addChildren(this.overflowButton);
|
|
}
|
|
|
|
protected buildDOM(): HTMLElement {
|
|
const slicePosition = this.content.length > this.size ? this.size - 1 : this.size;
|
|
const visibleChildren = this.content.slice(0, slicePosition);
|
|
const invisibleChildren = this.content.slice(slicePosition);
|
|
|
|
const visibleElements = visibleChildren.map(child => child.getDOMElement());
|
|
if (invisibleChildren.length > 0) {
|
|
this.removeChildren(...invisibleChildren);
|
|
this.overflowButton.insertItems(...invisibleChildren);
|
|
visibleElements.push(this.overflowButton.getDOMElement());
|
|
}
|
|
|
|
return el('div', {
|
|
class: 'editor-overflow-container',
|
|
}, visibleElements);
|
|
}
|
|
|
|
|
|
} |