devexpress-richedit
Version:
DevExpress Rich Text Editor is an advanced word-processing tool designed for working with rich text documents.
28 lines (27 loc) • 1.5 kB
JavaScript
import { UnitConverter } from '@devexpress/utils/lib/class/unit-converter';
import { ColumnIntervalFixed } from '../../../../../layout-formatter/table/grid-engine/calculators/column-interval';
import { Calculator } from '../../../../../layout-formatter/table/grid-engine/calculators/column-width-engine/calculator';
import { Columns } from '../../../../../layout-formatter/table/grid-engine/columns';
import { Grid } from '../../../../../layout-formatter/table/grid-engine/grid';
export function createRtfModelGrid(table) {
const grid = new Grid(table);
grid.columns = Columns.fromWidths(computeColumnWidthsFromModel(table));
return grid;
}
function computeColumnWidthsFromModel(table) {
const tableWidthPx = table.preferredWidth.asNumberNoPercentType(UnitConverter.twipsToPixelsF);
const widths = Calculator.getIntervals(table).map(interval => {
const column = new ColumnIntervalFixed(interval);
return column.isPercentBased ? tableWidthPx * column.width / 5000 : column.width;
});
const knownWidth = widths.reduce((s, w) => s + w, 0);
const zeros = widths.filter(w => w <= 0).length;
if (zeros > 0) {
const remaining = tableWidthPx > knownWidth ? tableWidthPx - knownWidth : zeros;
const fallback = remaining / zeros;
for (let i = 0; i < widths.length; i++)
if (widths[i] <= 0)
widths[i] = fallback;
}
return widths.map(w => Math.max(Math.round(w), 1));
}