UNPKG

@paperbits/core

Version:
94 lines (74 loc) 3.31 kB
import * as ko from "knockout"; import template from "./tableCellEditor.html"; import { Component, OnMounted, Param, Event } from "@paperbits/common/ko/decorators"; import { TableCellModel } from "../tableCellModel"; import { ContainerStylePluginConfig, BoxStylePluginConfig, BorderStylePluginConfig, BackgroundStylePluginConfig } from "@paperbits/styles/plugins"; import { StyleHelper } from "@paperbits/styles"; import { TableCellStylePluginConfig } from "@paperbits/styles/plugins/table/tableCellStylePluginConfig"; import { PaddingStylePluginConfig } from "@paperbits/styles/plugins/padding"; @Component({ selector: "table-cell-editor", template: template }) export class TableCellEditor { public readonly container: ko.Observable<ContainerStylePluginConfig>; public readonly box: ko.Observable<BoxStylePluginConfig>; public readonly background: ko.Observable<BackgroundStylePluginConfig>; constructor() { this.container = ko.observable<ContainerStylePluginConfig>(); this.box = ko.observable<BoxStylePluginConfig>(); this.background = ko.observable<BackgroundStylePluginConfig>(); } @Param() public model: TableCellModel; @Event() public onChange: (model: TableCellModel) => void; @OnMounted() public initialize(): void { const tableCellStyleConfig = StyleHelper .style(this.model.styles) .plugin("table-cell") .getConfig<TableCellStylePluginConfig>(); if (!tableCellStyleConfig) { return; } const containerConfig: ContainerStylePluginConfig = { alignment: tableCellStyleConfig.alignment, overflow: tableCellStyleConfig.overflow }; this.container(containerConfig); const paddingConfig = StyleHelper .style(this.model.styles) .plugin("padding") .getConfig<PaddingStylePluginConfig>(); const borderConfig = StyleHelper .style(this.model.styles) .plugin("border") .getConfig<BorderStylePluginConfig>(); this.box({ padding: paddingConfig, border: borderConfig }); const backgroundStyles = <BackgroundStylePluginConfig>StyleHelper.getPluginConfigForLocalStyles(this.model.styles, "background"); this.background(backgroundStyles); } public onContainerUpdate(containerConfig: ContainerStylePluginConfig): void { StyleHelper .style(this.model.styles) .plugin("table-cell") .setConfig(containerConfig); this.onChange(this.model); } public onBoxUpdate(boxConfig: BoxStylePluginConfig): void { StyleHelper .style(this.model.styles) .plugin("border") .setConfig(boxConfig.border); StyleHelper .style(this.model.styles) .plugin("padding") .setConfig(boxConfig.padding); this.onChange(this.model); } public onBackgroundUpdate(backgroundStyles: BackgroundStylePluginConfig): void { StyleHelper.setPluginConfigForLocalStyles(this.model.styles, "background", backgroundStyles); this.onChange(this.model); } }