Files
docx-js/src/file/drawing/drawing.ts

57 lines
1.5 KiB
TypeScript
Raw Normal View History

import { IMediaData } from "file/media";
import { XmlComponent } from "file/xml-components";
import { Anchor } from "./anchor";
2018-06-09 23:49:01 +01:00
import { IFloating } from "./floating";
import { Inline } from "./inline";
import { ITextWrapping } from "./text-wrap";
export enum PlacementPosition {
INLINE,
FLOATING,
}
2018-06-09 23:49:01 +01:00
export interface IDistance {
distT?: number;
distB?: number;
distL?: number;
distR?: number;
}
2018-06-09 23:49:01 +01:00
export interface IDrawingOptions {
position?: PlacementPosition;
2018-06-09 23:49:01 +01:00
textWrapping?: ITextWrapping;
floating?: IFloating;
}
2018-06-09 23:49:01 +01:00
const defaultDrawingOptions: IDrawingOptions = {
position: PlacementPosition.INLINE,
};
export class Drawing extends XmlComponent {
2018-06-09 23:33:52 +01:00
private inline: Inline;
2018-06-09 23:49:01 +01:00
constructor(imageData: IMediaData, drawingOptions?: IDrawingOptions) {
super("w:drawing");
if (imageData === undefined) {
throw new Error("imageData cannot be undefined");
}
const mergedOptions = {
...defaultDrawingOptions,
...drawingOptions,
};
if (mergedOptions.position === PlacementPosition.INLINE) {
2018-06-09 23:33:52 +01:00
this.inline = new Inline(imageData.referenceId, imageData.dimensions);
this.root.push(this.inline);
} else if (mergedOptions.position === PlacementPosition.FLOATING) {
this.root.push(new Anchor(imageData.referenceId, imageData.dimensions, mergedOptions));
}
}
2018-06-09 23:33:52 +01:00
public scale(factorX: number, factorY: number): void {
this.inline.scale(factorX, factorY);
}
}