1 import {EditorUiContext, EditorUiElement, EditorUiStateUpdate} from "./base-elements";
2 import {el} from "../../helpers";
4 export class EditorContainerUiElement extends EditorUiElement {
5 protected children : EditorUiElement[];
7 constructor(children: EditorUiElement[]) {
9 this.children = children;
12 protected buildDOM(): HTMLElement {
13 return el('div', {}, this.getChildren().map(child => child.getDOMElement()));
16 getChildren(): EditorUiElement[] {
20 updateState(state: EditorUiStateUpdate): void {
21 for (const child of this.children) {
22 child.updateState(state);
26 setContext(context: EditorUiContext) {
27 for (const child of this.getChildren()) {
28 child.setContext(context);
33 export class EditorSimpleClassContainer extends EditorContainerUiElement {
36 constructor(className: string, children: EditorUiElement[]) {
38 this.className = className;
41 protected buildDOM(): HTMLElement {
43 class: this.className,
44 }, this.getChildren().map(child => child.getDOMElement()));
48 export class EditorFormatMenu extends EditorContainerUiElement {
49 buildDOM(): HTMLElement {
50 const childElements: HTMLElement[] = this.getChildren().map(child => child.getDOMElement());
51 const menu = el('div', {
52 class: 'editor-format-menu-dropdown editor-dropdown-menu editor-menu-list',
56 const toggle = el('button', {
57 class: 'editor-format-menu-toggle',
61 const wrapper = el('div', {
62 class: 'editor-format-menu editor-dropdown-menu-container',
65 let clickListener: Function|null = null;
70 window.removeEventListener('click', clickListener as EventListener);
76 clickListener = (event: MouseEvent) => {
77 if (!wrapper.contains(event.target as HTMLElement)) {
81 window.addEventListener('click', clickListener as EventListener);
84 toggle.addEventListener('click', event => {
85 menu.hasAttribute('hidden') ? show() : hide();
87 menu.addEventListener('mouseleave', hide);