Skip to content

Commit 129c987

Browse files
committed
refactor: improve heading styles implementation
- Extract defaultHeadingConfig constant to reduce duplication - Fix headingConfig parameter default value consistency - Simplify styles generation with single utility function - Add TypeScript definitions for heading configuration - Fix spacing logic to use !== undefined checks
1 parent 100e23d commit 129c987

File tree

3 files changed

+143
-279
lines changed

3 files changed

+143
-279
lines changed

index.d.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,30 @@ declare namespace HTMLtoDOCX {
3636
restart: "continuous" | "newPage" | "newSection";
3737
}
3838

39+
interface HeadingSpacing {
40+
before?: number;
41+
after?: number;
42+
}
43+
44+
interface HeadingStyle {
45+
font?: string | null;
46+
fontSize?: number | null;
47+
bold?: boolean;
48+
spacing?: HeadingSpacing;
49+
keepLines?: boolean;
50+
keepNext?: boolean;
51+
outlineLevel?: number;
52+
}
53+
54+
interface HeadingConfig {
55+
heading1?: HeadingStyle;
56+
heading2?: HeadingStyle;
57+
heading3?: HeadingStyle;
58+
heading4?: HeadingStyle;
59+
heading5?: HeadingStyle;
60+
heading6?: HeadingStyle;
61+
}
62+
3963
interface DocumentOptions {
4064
orientation?: "portrait" | "landscape";
4165
pageSize?: PageSize;
@@ -64,6 +88,7 @@ declare namespace HTMLtoDOCX {
6488
numbering?: {
6589
defaultOrderedListStyleType?: string;
6690
};
91+
heading?: HeadingConfig;
6792
decodeUnicode?: boolean;
6893
lang?: string;
6994
direction?: "ltr" | "rtl";

src/constants.js

Lines changed: 59 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,63 @@ const defaultTableBorderAttributeOptions = {
3535
size: 1,
3636
stroke: 'single',
3737
};
38+
const defaultHeadingConfig = {
39+
heading1: {
40+
font: defaultFont,
41+
fontSize: 48,
42+
bold: true,
43+
spacing: { before: 480, after: 0 },
44+
keepLines: true,
45+
keepNext: true,
46+
outlineLevel: 0,
47+
},
48+
heading2: {
49+
font: defaultFont,
50+
fontSize: 36,
51+
bold: true,
52+
spacing: { before: 360, after: 80 },
53+
keepLines: true,
54+
keepNext: true,
55+
outlineLevel: 1,
56+
},
57+
heading3: {
58+
font: defaultFont,
59+
fontSize: 28,
60+
bold: true,
61+
spacing: { before: 280, after: 80 },
62+
keepLines: true,
63+
keepNext: true,
64+
outlineLevel: 2,
65+
},
66+
heading4: {
67+
font: defaultFont,
68+
fontSize: 24,
69+
bold: true,
70+
spacing: { before: 240, after: 40 },
71+
keepLines: true,
72+
keepNext: true,
73+
outlineLevel: 3,
74+
},
75+
heading5: {
76+
font: defaultFont,
77+
fontSize: defaultFontSize,
78+
bold: true,
79+
spacing: { before: 220, after: 40 },
80+
keepLines: true,
81+
keepNext: true,
82+
outlineLevel: 4,
83+
},
84+
heading6: {
85+
font: defaultFont,
86+
fontSize: 20,
87+
bold: true,
88+
spacing: { before: 200, after: 40 },
89+
keepLines: true,
90+
keepNext: true,
91+
outlineLevel: 5,
92+
},
93+
};
94+
3895
const defaultDocumentOptions = {
3996
orientation: defaultOrientation,
4097
margins: cloneDeep(portraitMargins),
@@ -76,62 +133,7 @@ const defaultDocumentOptions = {
76133
numbering: {
77134
defaultOrderedListStyleType: 'decimal',
78135
},
79-
heading: {
80-
heading1: {
81-
font: null, // use default font
82-
fontSize: 48,
83-
bold: true,
84-
spacing: { before: 480, after: 0 },
85-
keepLines: true,
86-
keepNext: true,
87-
outlineLevel: 0,
88-
},
89-
heading2: {
90-
font: null, // use default font
91-
fontSize: 36,
92-
bold: true,
93-
spacing: { before: 360, after: 80 },
94-
keepLines: true,
95-
keepNext: true,
96-
outlineLevel: 1,
97-
},
98-
heading3: {
99-
font: null, // use default font
100-
fontSize: 28,
101-
bold: true,
102-
spacing: { before: 280, after: 80 },
103-
keepLines: true,
104-
keepNext: true,
105-
outlineLevel: 2,
106-
},
107-
heading4: {
108-
font: null, // use default font
109-
fontSize: 24,
110-
bold: true,
111-
spacing: { before: 240, after: 40 },
112-
keepLines: true,
113-
keepNext: true,
114-
outlineLevel: 3,
115-
},
116-
heading5: {
117-
font: null, // use default font
118-
fontSize: null, // use default font size
119-
bold: true,
120-
spacing: { before: 220, after: 40 },
121-
keepLines: true,
122-
keepNext: true,
123-
outlineLevel: 4,
124-
},
125-
heading6: {
126-
font: null, // use default font
127-
fontSize: 20,
128-
bold: true,
129-
spacing: { before: 200, after: 40 },
130-
keepLines: true,
131-
keepNext: true,
132-
outlineLevel: 5,
133-
},
134-
},
136+
heading: defaultHeadingConfig,
135137
decodeUnicode: false,
136138
defaultLang,
137139
direction: defaultDirection,
@@ -181,6 +183,7 @@ const defaultPercentageMarginValue = 0;
181183

182184
export {
183185
defaultDocumentOptions,
186+
defaultHeadingConfig,
184187
defaultTableBorderOptions,
185188
defaultHTMLString,
186189
relsFolderName,

0 commit comments

Comments
 (0)