Skip to content

Commit 3e9b368

Browse files
author
Codex Test
committed
Merge branch 'fix-importer-evenoddheaders'
2 parents 102fe55 + 5f98b58 commit 3e9b368

2 files changed

Lines changed: 22 additions & 1 deletion

File tree

packages/super-editor/src/editors/v1/core/super-converter/v2/importer/docxImporter.js

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1241,11 +1241,22 @@ function getNumberingDefinitions(docx, converter) {
12411241
* @param {Object} docx The parsed docx object
12421242
* @returns {Boolean} True if the document has alternating headers and footers, false otherwise
12431243
*/
1244+
const ST_ON_OFF_TRUE_VALUES = new Set(['1', 'true', 'on']);
1245+
1246+
const isStOnOffEnabled = (element) => {
1247+
if (!element) return false;
1248+
1249+
const rawValue = element.attributes?.['w:val'];
1250+
if (rawValue == null) return true;
1251+
1252+
return ST_ON_OFF_TRUE_VALUES.has(String(rawValue).trim().toLowerCase());
1253+
};
1254+
12441255
export const isAlternatingHeadersOddEven = (docx) => {
12451256
const settings = docx['word/settings.xml'];
12461257
if (!settings || !settings.elements?.length) return false;
12471258

12481259
const { elements = [] } = settings.elements[0];
12491260
const evenOdd = elements.find((el) => el.name === 'w:evenAndOddHeaders');
1250-
return !!evenOdd;
1261+
return isStOnOffEnabled(evenOdd);
12511262
};

packages/super-editor/src/editors/v1/core/super-converter/v2/importer/docxImporter.test.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -505,6 +505,16 @@ describe('isAlternatingHeadersOddEven', () => {
505505
expect(isAlternatingHeadersOddEven(docx)).toBe(true);
506506
});
507507

508+
it.each([['1'], ['true'], ['on']])('returns true when <w:evenAndOddHeaders> uses truthy w:val=%s', (value) => {
509+
const docx = makeSettingsDocx([{ type: 'element', name: 'w:evenAndOddHeaders', attributes: { 'w:val': value } }]);
510+
expect(isAlternatingHeadersOddEven(docx)).toBe(true);
511+
});
512+
513+
it.each([['0'], ['false'], ['off']])('returns false when <w:evenAndOddHeaders> uses falsy w:val=%s', (value) => {
514+
const docx = makeSettingsDocx([{ type: 'element', name: 'w:evenAndOddHeaders', attributes: { 'w:val': value } }]);
515+
expect(isAlternatingHeadersOddEven(docx)).toBe(false);
516+
});
517+
508518
it('returns false when <w:evenAndOddHeaders/> is absent', () => {
509519
const docx = makeSettingsDocx([
510520
{ type: 'element', name: 'w:zoom', attributes: { 'w:percent': '100' } },

0 commit comments

Comments
 (0)