@paperbits/core
Version:
Paperbits core components.
94 lines (74 loc) • 3.31 kB
text/typescript
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";
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>();
}
public model: TableCellModel;
public onChange: (model: TableCellModel) => void;
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);
}
}