BookStackApp/BookStack

View on GitHub
resources/js/wysiwyg/ui/framework/blocks/overflow-container.ts

Summary

Maintainability
A
0 mins
Test Coverage
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);
    }


}