UNPKG

cedro

Version:

Javascript library to build user interfece based on widgets.

193 lines (174 loc) 7.78 kB
import { UID } from "../core/uid"; import { Widget } from "./widget.ui"; import { addNewWidget } from "./widget.collection"; import { createTextbox } from "./Textbox.ui"; import { createButton } from "./button.ui"; import { createLabel } from "./label.ui"; import { createContainer } from "./container.ui"; import { createIconButton } from "./IconButton.ui"; import { createImage } from "./image.ui"; import { createCheckbox } from "./checkbox.ui"; import { createRadioButton } from "./radiobutton.ui"; import { createToolbar } from "./toolbar.ui"; import { createProgressBar } from "./progressbar.ui"; import { createValueBar } from "./valuebar.ui"; import { VPanel, createVPanel } from "./vpanel.ui"; import { HPanel, createHPanel } from "./hpanel.ui"; import { Tabs, createTab } from "./tabs.ui"; import { createSwitch } from "./switch.ui"; import { Accordion, createAccordion } from "./accordion.ui"; import { createButtonStack } from "./buttonstack.ui"; import { createButtonColor } from "./buttonColor.ui"; import { createButtonMenu } from "./buttonmenu.ui"; import { createIconButtonMenu } from "./iconButtonMenu.ui"; import { createIcon } from "./Icon.ui"; import { createTextarea } from "./textarea.ui"; import { createSelect } from "./select.ui"; import { createDialog, Dialog } from "./dialog"; import { createDataGrid, DataGrid } from "./datagrid.ui"; import { WidgetAlignTypes, WidgetProps, WidgetTypes } from "./widget.types"; export function createWidget( content: any, parent: Widget | null = null, freedom: boolean = false ): Widget | null { if (!content.tagName) { return null; } let widget: Widget | null = null; let widgetProps: WidgetProps = { id: content.id ? content.id : UID(), type: content.getAttribute("w-type") === null ? WidgetTypes.FILL : parseInt(content.getAttribute("w-type")), orientation: content.getAttribute("w-orientation") === null ? "horizontal" : content.getAttribute("w-orientation"), hidden: content.getAttribute("w-hidden") !== null ? true : false, padding: content.getAttribute("w-padding") === null ? 0 : parseInt(content.getAttribute("w-padding")), fixedSize: content.getAttribute("w-fixed-size") === null ? null : parseInt(content.getAttribute("w-fixed-size")), classNames: content.getAttribute("w-classes") === null ? null : content.getAttribute("w-classes"), }; if (!widgetProps.id) { widgetProps.id = UID(); } if (content.getAttribute("w-textbox")) { widget = createTextbox(widgetProps.id, content, parent); } else if (content.getAttribute("w-textarea")) { widget = createTextarea(widgetProps.id, content, parent); } else if (content.getAttribute("w-button")) { widget = createButton(widgetProps.id, content, parent); } else if (content.getAttribute("w-icon-button")) { widget = createIconButton(widgetProps.id, content, parent); } else if (content.getAttribute("w-button-stack")) { widget = createButtonStack(widgetProps.id, content, parent); } else if (content.getAttribute("w-button-color")) { widget = createButtonColor(widgetProps.id, content, parent); } else if (content.getAttribute("w-button-menu")) { widget = createButtonMenu(widgetProps.id, content, parent); } else if (content.getAttribute("w-icon-button-menu")) { widget = createIconButtonMenu(widgetProps.id, content, parent); } else if (content.getAttribute("w-label")) { widget = createLabel(widgetProps.id, content, parent); } else if (content.getAttribute("w-image")) { widget = createImage(widgetProps.id, content, parent); } else if (content.getAttribute("w-icon")) { widget = createIcon(widgetProps.id, content, parent); } else if (content.getAttribute("w-checkbox")) { widget = createCheckbox(widgetProps.id, content, parent); } else if (content.getAttribute("w-radiobutton")) { widget = createRadioButton(widgetProps.id, content, parent); } else if (content.getAttribute("w-switch")) { widget = createSwitch(widgetProps.id, content, parent); } else if (content.getAttribute("w-toolbar")) { widget = createToolbar(widgetProps.id, content, parent); } else if (content.getAttribute("w-progressbar")) { widget = createProgressBar(widgetProps.id, content, parent); } else if (content.getAttribute("w-valuebar")) { widget = createValueBar(widgetProps.id, content, parent); } else if (content.getAttribute("w-tab")) { widget = createTab(widgetProps.id, content, parent); } else if (content.getAttribute("w-accordion")) { widget = createAccordion(widgetProps.id, content, parent); } else if (content.getAttribute("w-vpanel")) { widget = createVPanel(widgetProps.id, content, parent); } else if (content.getAttribute("w-hpanel")) { widget = createHPanel(widgetProps.id, content, parent); } else if (content.getAttribute("w-container")) { widget = createContainer(content, parent); } else if (content.getAttribute("w-select")) { widget = createSelect(widgetProps.id, content, parent); } else if (content.getAttribute("w-dialog")) { widget = createDialog(widgetProps.id, content, null); } else if (content.getAttribute("w-data-grid")) { widget = createDataGrid(widgetProps.id, content, parent); } else { widget = new Widget(widgetProps.id, content.tagName, parent); if (widgetProps.type === WidgetTypes.FREE) { freedom = true; } content.getAttributeNames().forEach((key: string) => { if (widget) widget.getBody().setAttribute(key, content.getAttribute(key)); }); (content as HTMLElement).childNodes.forEach((child) => { if (child.hasChildNodes() == true) { createWidget(child, widget, freedom); } else { if (widget) widget.getBody().appendChild(child); } }); } if (widget) { if (!freedom && widgetProps.type) { widget.setType(widgetProps.type); } else { widget.setType(WidgetTypes.FREE); } if (widget instanceof Dialog) { widget.setType(WidgetTypes.CUSTOM); } if ( widgetProps.orientation && !(widget instanceof VPanel) && !(widget instanceof HPanel) && !(widget instanceof Dialog) && !(widget instanceof DataGrid) && !(widget instanceof Tabs) ) { if (widgetProps.orientation === "vertical") { widget.setAlign(WidgetAlignTypes.VERTICAL); } else { widget.setAlign(WidgetAlignTypes.HORIZONTAL); } } if (widget instanceof Accordion) { widget.setAlign(WidgetAlignTypes.VERTICAL); } if (widget instanceof DataGrid) { widget.setAlign(WidgetAlignTypes.VERTICAL); } if (widgetProps.padding) widget.setPadding(widgetProps.padding); if (widgetProps.fixedSize) widget.setFixedSize(widgetProps.fixedSize); if (widgetProps.classNames) { const clases = widgetProps.classNames.split(" "); for (const clase of clases) { widget.addClass(clase); } } if (widgetProps.hidden) { widget.setVisible(false); } addNewWidget(widgetProps.id, widget); return widget; } return null; }