prosemirror-docx-web
Version:
Export from a prosemirror document to Microsoft word forked from curvenote/prosemirror-docx
105 lines • 3.35 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createNumbering = void 0;
const docx_1 = require("docx");
function basicIndentStyle(indent) {
return {
alignment: docx_1.AlignmentType.START,
style: {
paragraph: {
indent: { left: (0, docx_1.convertInchesToTwip)(indent), hanging: (0, docx_1.convertInchesToTwip)(0.18) },
},
},
};
}
const numbered = Array(3)
.fill([docx_1.LevelFormat.DECIMAL, docx_1.LevelFormat.DECIMAL, docx_1.LevelFormat.DECIMAL])
.flat()
.map((format, level) => ({
level,
format,
text: `${new Array(level + 1).fill(1).reduce((res, _, idx) => `${res}%${idx + 1}.`, '')}`,
...basicIndentStyle((level + 1) / 2),
}));
const bullets = Array(3)
// .fill(['●', '○', '■'])
.fill(['●', '●', '●'])
.flat()
.map((text, level) => ({
level,
format: docx_1.LevelFormat.BULLET,
text,
...basicIndentStyle((level + 1) / 2),
}));
const styles = {
numbered,
bullets,
};
const NumberedListTypes = {
decimal: docx_1.LevelFormat.DECIMAL,
'lower-alpha': docx_1.LevelFormat.LOWER_LETTER,
'lower-roman': docx_1.LevelFormat.LOWER_ROMAN,
'upper-roman': docx_1.LevelFormat.UPPER_ROMAN,
};
const BulletListTypes = {
disc: '●',
circle: '○',
square: '■',
};
function makeLevels(type, extraStyles) {
if (type === 'numbered') {
const listStyleType = styles
? NumberedListTypes[extraStyles.listStyleType] || docx_1.LevelFormat.DECIMAL
: docx_1.LevelFormat.DECIMAL;
return new Array(6).fill(listStyleType).map((format, level) => ({
level,
format,
text: `${new Array(level + 1).fill(1).reduce((res, _, idx) => `${res}%${idx + 1}.`, '')}`,
alignment: docx_1.AlignmentType.START,
style: {
run: {
size: extraStyles?.size || 18,
color: extraStyles?.listStyleColor || 'auto',
},
paragraph: {
indent: {
left: (0, docx_1.convertInchesToTwip)((level + 1) / 2),
hanging: (0, docx_1.convertInchesToTwip)(0.18),
},
},
},
}));
}
return new Array(6).fill(docx_1.LevelFormat.BULLET).map((format, level) => ({
level,
format,
text: BulletListTypes[extraStyles?.listStyleType] || '●',
alignment: docx_1.AlignmentType.START,
style: {
run: {
size: '18',
color: extraStyles?.listStyleColor || 'auto',
},
paragraph: {
indent: {
left: (0, docx_1.convertInchesToTwip)(0.25 * (level + 1)),
hanging: (0, docx_1.convertInchesToTwip)(0.25),
},
},
},
}));
}
function createNumbering(reference, style, extraStyles = null) {
let numbering = styles?.[style];
if (extraStyles) {
const levels = makeLevels(style, extraStyles);
if (levels)
numbering = levels;
}
return {
reference,
levels: numbering,
};
}
exports.createNumbering = createNumbering;
//# sourceMappingURL=numbering.js.map