first
This commit is contained in:
202
node_modules/table/dist/src/drawBorder.js
generated
vendored
Normal file
202
node_modules/table/dist/src/drawBorder.js
generated
vendored
Normal file
@ -0,0 +1,202 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.createTableBorderGetter = exports.drawBorderBottom = exports.drawBorderJoin = exports.drawBorderTop = exports.drawBorder = exports.createSeparatorGetter = exports.drawBorderSegments = void 0;
|
||||
const drawContent_1 = require("./drawContent");
|
||||
const drawBorderSegments = (columnWidths, parameters) => {
|
||||
const { separator, horizontalBorderIndex, spanningCellManager } = parameters;
|
||||
return columnWidths.map((columnWidth, columnIndex) => {
|
||||
const normalSegment = separator.body.repeat(columnWidth);
|
||||
if (horizontalBorderIndex === undefined) {
|
||||
return normalSegment;
|
||||
}
|
||||
/* istanbul ignore next */
|
||||
const range = spanningCellManager === null || spanningCellManager === void 0 ? void 0 : spanningCellManager.getContainingRange({ col: columnIndex,
|
||||
row: horizontalBorderIndex });
|
||||
if (!range) {
|
||||
return normalSegment;
|
||||
}
|
||||
const { topLeft } = range;
|
||||
// draw border segments as usual for top border of spanning cell
|
||||
if (horizontalBorderIndex === topLeft.row) {
|
||||
return normalSegment;
|
||||
}
|
||||
// if for first column/row of spanning cell, just skip
|
||||
if (columnIndex !== topLeft.col) {
|
||||
return '';
|
||||
}
|
||||
return range.extractBorderContent(horizontalBorderIndex);
|
||||
});
|
||||
};
|
||||
exports.drawBorderSegments = drawBorderSegments;
|
||||
const createSeparatorGetter = (dependencies) => {
|
||||
const { separator, spanningCellManager, horizontalBorderIndex, rowCount } = dependencies;
|
||||
// eslint-disable-next-line complexity
|
||||
return (verticalBorderIndex, columnCount) => {
|
||||
const inSameRange = spanningCellManager === null || spanningCellManager === void 0 ? void 0 : spanningCellManager.inSameRange;
|
||||
if (horizontalBorderIndex !== undefined && inSameRange) {
|
||||
const topCell = { col: verticalBorderIndex,
|
||||
row: horizontalBorderIndex - 1 };
|
||||
const leftCell = { col: verticalBorderIndex - 1,
|
||||
row: horizontalBorderIndex };
|
||||
const oppositeCell = { col: verticalBorderIndex - 1,
|
||||
row: horizontalBorderIndex - 1 };
|
||||
const currentCell = { col: verticalBorderIndex,
|
||||
row: horizontalBorderIndex };
|
||||
const pairs = [
|
||||
[oppositeCell, topCell],
|
||||
[topCell, currentCell],
|
||||
[currentCell, leftCell],
|
||||
[leftCell, oppositeCell],
|
||||
];
|
||||
// left side of horizontal border
|
||||
if (verticalBorderIndex === 0) {
|
||||
if (inSameRange(currentCell, topCell) && separator.bodyJoinOuter) {
|
||||
return separator.bodyJoinOuter;
|
||||
}
|
||||
return separator.left;
|
||||
}
|
||||
// right side of horizontal border
|
||||
if (verticalBorderIndex === columnCount) {
|
||||
if (inSameRange(oppositeCell, leftCell) && separator.bodyJoinOuter) {
|
||||
return separator.bodyJoinOuter;
|
||||
}
|
||||
return separator.right;
|
||||
}
|
||||
// top horizontal border
|
||||
if (horizontalBorderIndex === 0) {
|
||||
if (inSameRange(currentCell, leftCell)) {
|
||||
return separator.body;
|
||||
}
|
||||
return separator.join;
|
||||
}
|
||||
// bottom horizontal border
|
||||
if (horizontalBorderIndex === rowCount) {
|
||||
if (inSameRange(topCell, oppositeCell)) {
|
||||
return separator.body;
|
||||
}
|
||||
return separator.join;
|
||||
}
|
||||
const sameRangeCount = pairs.map((pair) => {
|
||||
return inSameRange(...pair);
|
||||
}).filter(Boolean).length;
|
||||
// four cells are belongs to different spanning cells
|
||||
if (sameRangeCount === 0) {
|
||||
return separator.join;
|
||||
}
|
||||
// belong to one spanning cell
|
||||
if (sameRangeCount === 4) {
|
||||
return '';
|
||||
}
|
||||
// belongs to two spanning cell
|
||||
if (sameRangeCount === 2) {
|
||||
if (inSameRange(...pairs[1]) && inSameRange(...pairs[3]) && separator.bodyJoinInner) {
|
||||
return separator.bodyJoinInner;
|
||||
}
|
||||
return separator.body;
|
||||
}
|
||||
/* istanbul ignore next */
|
||||
if (sameRangeCount === 1) {
|
||||
if (!separator.joinRight || !separator.joinLeft || !separator.joinUp || !separator.joinDown) {
|
||||
throw new Error(`Can not get border separator for position [${horizontalBorderIndex}, ${verticalBorderIndex}]`);
|
||||
}
|
||||
if (inSameRange(...pairs[0])) {
|
||||
return separator.joinDown;
|
||||
}
|
||||
if (inSameRange(...pairs[1])) {
|
||||
return separator.joinLeft;
|
||||
}
|
||||
if (inSameRange(...pairs[2])) {
|
||||
return separator.joinUp;
|
||||
}
|
||||
return separator.joinRight;
|
||||
}
|
||||
/* istanbul ignore next */
|
||||
throw new Error('Invalid case');
|
||||
}
|
||||
if (verticalBorderIndex === 0) {
|
||||
return separator.left;
|
||||
}
|
||||
if (verticalBorderIndex === columnCount) {
|
||||
return separator.right;
|
||||
}
|
||||
return separator.join;
|
||||
};
|
||||
};
|
||||
exports.createSeparatorGetter = createSeparatorGetter;
|
||||
const drawBorder = (columnWidths, parameters) => {
|
||||
const borderSegments = (0, exports.drawBorderSegments)(columnWidths, parameters);
|
||||
const { drawVerticalLine, horizontalBorderIndex, spanningCellManager } = parameters;
|
||||
return (0, drawContent_1.drawContent)({
|
||||
contents: borderSegments,
|
||||
drawSeparator: drawVerticalLine,
|
||||
elementType: 'border',
|
||||
rowIndex: horizontalBorderIndex,
|
||||
separatorGetter: (0, exports.createSeparatorGetter)(parameters),
|
||||
spanningCellManager,
|
||||
}) + '\n';
|
||||
};
|
||||
exports.drawBorder = drawBorder;
|
||||
const drawBorderTop = (columnWidths, parameters) => {
|
||||
const { border } = parameters;
|
||||
const result = (0, exports.drawBorder)(columnWidths, {
|
||||
...parameters,
|
||||
separator: {
|
||||
body: border.topBody,
|
||||
join: border.topJoin,
|
||||
left: border.topLeft,
|
||||
right: border.topRight,
|
||||
},
|
||||
});
|
||||
if (result === '\n') {
|
||||
return '';
|
||||
}
|
||||
return result;
|
||||
};
|
||||
exports.drawBorderTop = drawBorderTop;
|
||||
const drawBorderJoin = (columnWidths, parameters) => {
|
||||
const { border } = parameters;
|
||||
return (0, exports.drawBorder)(columnWidths, {
|
||||
...parameters,
|
||||
separator: {
|
||||
body: border.joinBody,
|
||||
bodyJoinInner: border.bodyJoin,
|
||||
bodyJoinOuter: border.bodyLeft,
|
||||
join: border.joinJoin,
|
||||
joinDown: border.joinMiddleDown,
|
||||
joinLeft: border.joinMiddleLeft,
|
||||
joinRight: border.joinMiddleRight,
|
||||
joinUp: border.joinMiddleUp,
|
||||
left: border.joinLeft,
|
||||
right: border.joinRight,
|
||||
},
|
||||
});
|
||||
};
|
||||
exports.drawBorderJoin = drawBorderJoin;
|
||||
const drawBorderBottom = (columnWidths, parameters) => {
|
||||
const { border } = parameters;
|
||||
return (0, exports.drawBorder)(columnWidths, {
|
||||
...parameters,
|
||||
separator: {
|
||||
body: border.bottomBody,
|
||||
join: border.bottomJoin,
|
||||
left: border.bottomLeft,
|
||||
right: border.bottomRight,
|
||||
},
|
||||
});
|
||||
};
|
||||
exports.drawBorderBottom = drawBorderBottom;
|
||||
const createTableBorderGetter = (columnWidths, parameters) => {
|
||||
return (index, size) => {
|
||||
const drawBorderParameters = { ...parameters,
|
||||
horizontalBorderIndex: index };
|
||||
if (index === 0) {
|
||||
return (0, exports.drawBorderTop)(columnWidths, drawBorderParameters);
|
||||
}
|
||||
else if (index === size) {
|
||||
return (0, exports.drawBorderBottom)(columnWidths, drawBorderParameters);
|
||||
}
|
||||
return (0, exports.drawBorderJoin)(columnWidths, drawBorderParameters);
|
||||
};
|
||||
};
|
||||
exports.createTableBorderGetter = createTableBorderGetter;
|
||||
//# sourceMappingURL=drawBorder.js.map
|
Reference in New Issue
Block a user