Merge remote-tracking branch 'github.com/master'
This commit is contained in:
@ -82,5 +82,75 @@ describe("FrameProperties", () => {
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
it("should create without x and y", () => {
|
||||
const currentFrameProperties = new FrameProperties({
|
||||
width: 4000,
|
||||
height: 1000,
|
||||
anchor: {
|
||||
horizontal: FrameAnchorType.MARGIN,
|
||||
vertical: FrameAnchorType.MARGIN,
|
||||
},
|
||||
alignment: {
|
||||
x: HorizontalPositionAlign.CENTER,
|
||||
y: VerticalPositionAlign.TOP,
|
||||
},
|
||||
space: {
|
||||
horizontal: 100,
|
||||
vertical: 200,
|
||||
},
|
||||
});
|
||||
|
||||
const tree = new Formatter().format(currentFrameProperties);
|
||||
expect(tree).to.deep.equal({
|
||||
"w:framePr": {
|
||||
_attr: {
|
||||
"w:h": 1000,
|
||||
"w:hAnchor": "margin",
|
||||
"w:vAnchor": "margin",
|
||||
"w:w": 4000,
|
||||
"w:xAlign": "center",
|
||||
"w:yAlign": "top",
|
||||
"w:hSpace": 100,
|
||||
"w:vSpace": 200,
|
||||
},
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
it("should create without alignments", () => {
|
||||
const currentFrameProperties = new FrameProperties({
|
||||
position: {
|
||||
x: 1000,
|
||||
y: 3000,
|
||||
},
|
||||
width: 4000,
|
||||
height: 1000,
|
||||
anchor: {
|
||||
horizontal: FrameAnchorType.MARGIN,
|
||||
vertical: FrameAnchorType.MARGIN,
|
||||
},
|
||||
space: {
|
||||
horizontal: 100,
|
||||
vertical: 200,
|
||||
},
|
||||
});
|
||||
|
||||
const tree = new Formatter().format(currentFrameProperties);
|
||||
expect(tree).to.deep.equal({
|
||||
"w:framePr": {
|
||||
_attr: {
|
||||
"w:h": 1000,
|
||||
"w:hAnchor": "margin",
|
||||
"w:vAnchor": "margin",
|
||||
"w:w": 4000,
|
||||
"w:x": 1000,
|
||||
"w:y": 3000,
|
||||
"w:hSpace": 100,
|
||||
"w:vSpace": 200,
|
||||
},
|
||||
},
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@ -24,15 +24,11 @@ export enum FrameWrap {
|
||||
TIGHT = "tight",
|
||||
}
|
||||
|
||||
export interface IFrameOptions {
|
||||
interface IBaseFrameOptions {
|
||||
readonly anchorLock?: boolean;
|
||||
readonly dropCap?: DropCapType;
|
||||
readonly width: number;
|
||||
readonly height: number;
|
||||
readonly position: {
|
||||
readonly x: number;
|
||||
readonly y: number;
|
||||
};
|
||||
readonly wrap?: FrameWrap;
|
||||
readonly lines?: number;
|
||||
readonly anchor: {
|
||||
@ -44,19 +40,33 @@ export interface IFrameOptions {
|
||||
readonly vertical: number;
|
||||
};
|
||||
readonly rule?: HeightRule;
|
||||
}
|
||||
|
||||
export interface IXYFrameOptions extends IBaseFrameOptions {
|
||||
readonly position: {
|
||||
readonly x: number;
|
||||
readonly y: number;
|
||||
};
|
||||
}
|
||||
|
||||
export interface IAlignmentFrameOptions extends IBaseFrameOptions {
|
||||
readonly alignment: {
|
||||
readonly x: HorizontalPositionAlign;
|
||||
readonly y: VerticalPositionAlign;
|
||||
};
|
||||
}
|
||||
|
||||
// Be wary of Typescript's Open types:
|
||||
// https://stackoverflow.com/q/46370222/3481582
|
||||
export type IFrameOptions = IXYFrameOptions | IAlignmentFrameOptions;
|
||||
|
||||
export class FramePropertiesAttributes extends XmlAttributeComponent<{
|
||||
readonly anchorLock?: boolean;
|
||||
readonly dropCap?: DropCapType;
|
||||
readonly width: number;
|
||||
readonly height: number;
|
||||
readonly x: number;
|
||||
readonly y: number;
|
||||
readonly x?: number;
|
||||
readonly y?: number;
|
||||
readonly wrap?: FrameWrap;
|
||||
readonly lines?: number;
|
||||
readonly anchorHorizontal?: FrameAnchorType;
|
||||
@ -95,15 +105,15 @@ export class FrameProperties extends XmlComponent {
|
||||
dropCap: options.dropCap,
|
||||
width: options.width,
|
||||
height: options.height,
|
||||
x: options.position.x,
|
||||
y: options.position.y,
|
||||
x: (options as IXYFrameOptions).position ? (options as IXYFrameOptions).position.x : undefined,
|
||||
y: (options as IXYFrameOptions).position ? (options as IXYFrameOptions).position.y : undefined,
|
||||
anchorHorizontal: options.anchor.horizontal,
|
||||
anchorVertical: options.anchor.vertical,
|
||||
spaceHorizontal: options.space?.horizontal,
|
||||
spaceVertical: options.space?.vertical,
|
||||
rule: options.rule,
|
||||
alignmentX: options.alignment.x,
|
||||
alignmentY: options.alignment.y,
|
||||
alignmentX: (options as IAlignmentFrameOptions).alignment ? (options as IAlignmentFrameOptions).alignment.x : undefined,
|
||||
alignmentY: (options as IAlignmentFrameOptions).alignment ? (options as IAlignmentFrameOptions).alignment.y : undefined,
|
||||
lines: options.lines,
|
||||
wrap: options.wrap,
|
||||
}),
|
||||
|
@ -1,10 +1,8 @@
|
||||
import { SpaceType } from "file/space-type";
|
||||
import { XmlAttributeComponent, XmlComponent } from "file/xml-components";
|
||||
import { IPageReferenceOptions } from "./pageref-properties";
|
||||
import { XmlComponent } from "file/xml-components";
|
||||
|
||||
class TextAttributes extends XmlAttributeComponent<{ readonly space: SpaceType }> {
|
||||
protected readonly xmlKeys = { space: "xml:space" };
|
||||
}
|
||||
import { TextAttributes } from "../run/text-attributes";
|
||||
import { IPageReferenceOptions } from "./pageref-properties";
|
||||
|
||||
export class PageReferenceFieldInstruction extends XmlComponent {
|
||||
constructor(bookmarkId: string, options: IPageReferenceOptions = {}) {
|
||||
|
@ -1,9 +1,7 @@
|
||||
import { SpaceType } from "file/space-type";
|
||||
import { XmlAttributeComponent, XmlComponent } from "file/xml-components";
|
||||
import { XmlComponent } from "file/xml-components";
|
||||
|
||||
class TextAttributes extends XmlAttributeComponent<{ readonly space: SpaceType }> {
|
||||
protected readonly xmlKeys = { space: "xml:space" };
|
||||
}
|
||||
import { TextAttributes } from "./text-attributes";
|
||||
|
||||
export class Page extends XmlComponent {
|
||||
constructor() {
|
||||
|
@ -1,8 +1,9 @@
|
||||
import { ChangeAttributes, IChangedAttributesProperties } from "../../track-revision/track-revision";
|
||||
|
||||
import { BorderElement, IBorderOptions } from "file/border";
|
||||
import { IShadingAttributesProperties, Shading } from "file/shading";
|
||||
import { SpaceType } from "file/space-type";
|
||||
import { ChangeAttributes, IChangedAttributesProperties } from "file/track-revision/track-revision";
|
||||
import { HpsMeasureElement, IgnoreIfEmptyXmlComponent, OnOffElement, StringValueElement, XmlComponent } from "file/xml-components";
|
||||
|
||||
import { EmphasisMark, EmphasisMarkType } from "./emphasis-mark";
|
||||
import { CharacterSpacing, Color, Highlight, HighlightComplexScript } from "./formatting";
|
||||
import { IFontAttributesProperties, RunFonts } from "./run-fonts";
|
||||
@ -45,6 +46,7 @@ export interface IRunStylePropertiesOptions {
|
||||
readonly imprint?: boolean;
|
||||
readonly revision?: IRunPropertiesChangeOptions;
|
||||
readonly border?: IBorderOptions;
|
||||
readonly space?: SpaceType;
|
||||
}
|
||||
|
||||
export interface IRunPropertiesOptions extends IRunStylePropertiesOptions {
|
||||
|
@ -1,9 +1,7 @@
|
||||
import { SpaceType } from "file/space-type";
|
||||
import { XmlAttributeComponent, XmlComponent } from "file/xml-components";
|
||||
import { XmlComponent } from "file/xml-components";
|
||||
|
||||
class TextAttributes extends XmlAttributeComponent<{ readonly space: SpaceType }> {
|
||||
protected readonly xmlKeys = { space: "xml:space" };
|
||||
}
|
||||
import { TextAttributes } from "../text-attributes";
|
||||
|
||||
export class Text extends XmlComponent {
|
||||
constructor(text: string) {
|
||||
|
@ -4,6 +4,7 @@ import { Formatter } from "export/formatter";
|
||||
import { BorderStyle } from "file/border";
|
||||
// import { FootnoteReferenceRun } from "file/footnotes/footnote/run/reference-run";
|
||||
import { ShadingType } from "file/shading";
|
||||
import { SpaceType } from "file/space-type";
|
||||
|
||||
import { Run } from "./";
|
||||
import { EmphasisMarkType } from "./emphasis-mark";
|
||||
@ -521,4 +522,20 @@ describe("Run", () => {
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe("#space", () => {
|
||||
it("should correctly set the border", () => {
|
||||
const run = new Run({
|
||||
space: SpaceType.PRESERVE,
|
||||
});
|
||||
const tree = new Formatter().format(run);
|
||||
expect(tree).to.deep.equal({
|
||||
"w:r": {
|
||||
_attr: {
|
||||
"xml:space": "preserve",
|
||||
},
|
||||
},
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
@ -3,11 +3,13 @@ import { XmlComponent } from "file/xml-components";
|
||||
|
||||
import { FootnoteReferenceRun } from "file/footnotes/footnote/run/reference-run";
|
||||
import { FieldInstruction } from "file/table-of-contents/field-instruction";
|
||||
|
||||
import { Break } from "./break";
|
||||
import { Begin, End, Separate } from "./field";
|
||||
import { NumberOfPages, NumberOfPagesSection, Page } from "./page-number";
|
||||
import { IRunPropertiesOptions, RunProperties } from "./properties";
|
||||
import { Text } from "./run-components/text";
|
||||
import { TextAttributes } from "./text-attributes";
|
||||
|
||||
export interface IRunOptions extends IRunPropertiesOptions {
|
||||
readonly children?: (Begin | FieldInstruction | Separate | End | PageNumber | FootnoteReferenceRun | string)[];
|
||||
@ -35,6 +37,10 @@ export class Run extends XmlComponent {
|
||||
}
|
||||
}
|
||||
|
||||
if (options.space) {
|
||||
this.root.push(new TextAttributes({ space: options.space }));
|
||||
}
|
||||
|
||||
if (options.children) {
|
||||
for (const child of options.children) {
|
||||
if (typeof child === "string") {
|
||||
|
@ -1,10 +1,8 @@
|
||||
// http://officeopenxml.com/WPfieldInstructions.php
|
||||
import { SpaceType } from "file/space-type";
|
||||
import { XmlAttributeComponent, XmlComponent } from "file/xml-components";
|
||||
import { XmlComponent } from "file/xml-components";
|
||||
|
||||
class TextAttributes extends XmlAttributeComponent<{ readonly space: SpaceType }> {
|
||||
protected readonly xmlKeys = { space: "xml:space" };
|
||||
}
|
||||
import { TextAttributes } from "./text-attributes";
|
||||
|
||||
export class SequentialIdentifierInstruction extends XmlComponent {
|
||||
constructor(identifier: string) {
|
||||
|
6
src/file/paragraph/run/text-attributes.ts
Normal file
6
src/file/paragraph/run/text-attributes.ts
Normal file
@ -0,0 +1,6 @@
|
||||
import { SpaceType } from "file/space-type";
|
||||
import { XmlAttributeComponent } from "file/xml-components";
|
||||
|
||||
export class TextAttributes extends XmlAttributeComponent<{ readonly space: SpaceType }> {
|
||||
protected readonly xmlKeys = { space: "xml:space" };
|
||||
}
|
Reference in New Issue
Block a user