Improve API for check boxes

This commit is contained in:
Dolan Miu
2023-06-25 03:09:29 +01:00
parent db85c3dd2f
commit 210d9c58f2
5 changed files with 54 additions and 6 deletions

44
demo/90-check-boxes.ts Normal file
View File

@ -0,0 +1,44 @@
// Simple example to add check boxes to a document
import * as fs from "fs";
import { Document, Packer, Paragraph, TextRun, CheckBox } from "docx";
const doc = new Document({
sections: [
{
properties: {},
children: [
new Paragraph({
children: [
new TextRun("Hello World"),
new TextRun({ break: 1 }),
new CheckBox(),
new TextRun({ break: 1 }),
new CheckBox({ checked: true }),
new TextRun({ break: 1 }),
new CheckBox({ checked: true, checkedState: { value: "2611" } }),
new TextRun({ break: 1 }),
new CheckBox({ checked: true, checkedState: { value: "2611", font: "MS Gothic" } }),
new TextRun({ break: 1 }),
new CheckBox({
checked: true,
checkedState: { value: "2611", font: "MS Gothic" },
uncheckedState: { value: "2610", font: "MS Gothic" },
}),
new TextRun({ break: 1 }),
new CheckBox({
checked: true,
checkedState: { value: "2611", font: "MS Gothic" },
uncheckedState: { value: "2610", font: "MS Gothic" },
}),
new TextRun({ text: "Are you ok?", break: 1 }),
new CheckBox({ checked: true, alias: "Are you ok?" }),
],
}),
],
},
],
});
Packer.toBuffer(doc).then((buffer) => {
fs.writeFileSync("My Document.docx", buffer);
});

View File

@ -16,6 +16,7 @@ export interface ICheckboxSymbolProperties {
}
export interface ICheckboxSymbolOptions {
readonly alias?: string;
readonly checked?: boolean;
readonly checkedState?: ICheckboxSymbolProperties;
readonly uncheckedState?: ICheckboxSymbolProperties;

View File

@ -1,6 +1,7 @@
import { describe, expect, it } from "vitest";
import { Formatter } from "@export/formatter";
import { CheckBox } from ".";
import { CheckBox } from "./checkbox";
describe("CheckBox", () => {
describe("#constructor()", () => {
@ -66,7 +67,8 @@ describe("CheckBox", () => {
["2713", "Segoe UI Symbol", "2713", "Segoe UI Symbol"],
[undefined, undefined, "2612", "MS Gothic"],
])("should create a CheckBox with proper root and custom values", (inputChar, inputFont, actualChar, actualFont) => {
const checkBox = new CheckBox("Custom Checkbox", {
const checkBox = new CheckBox({
alias: "Custom Checkbox",
checked: true,
checkedState: {
value: inputChar,
@ -141,7 +143,7 @@ describe("CheckBox", () => {
});
it("should create a CheckBox with proper root, custom state, and no alias", () => {
const checkBox = new CheckBox(undefined, {
const checkBox = new CheckBox({
checked: false,
checkedState: {
value: "2713",

View File

@ -9,10 +9,10 @@ export class CheckBox extends XmlComponent {
private readonly DEFAULT_UNCHECKED_SYMBOL: string = "2610";
private readonly DEFAULT_CHECKED_SYMBOL: string = "2612";
private readonly DEFAULT_FONT: string = "MS Gothic";
public constructor(alias?: string, options?: ICheckboxSymbolOptions) {
public constructor(options?: ICheckboxSymbolOptions) {
super("w:sdt");
const properties = new StructuredDocumentTagProperties(alias);
const properties = new StructuredDocumentTagProperties(options?.alias);
properties.addChildElement(new CheckBoxUtil(options));
this.root.push(properties);

View File

@ -4,7 +4,8 @@ import { StringValueElement, XmlComponent } from "@file/xml-components";
export class StructuredDocumentTagProperties extends XmlComponent {
public constructor(alias?: string) {
super("w:sdtPr");
if (typeof alias === "string") {
if (alias) {
this.root.push(new StringValueElement("w:alias", alias));
}
}