UNPKG

@govbr-ds/webcomponents

Version:

Biblioteca de Web Components baseado no GovBR-DS

125 lines (124 loc) 3.65 kB
/*! * Construído por SERPRO * © https://serpro.gov.br/ - MIT License. */ // Classe para gerar tabelas no formato Markdown export class MarkdownTable { rows = []; // Adiciona um cabeçalho à tabela addHeader(data) { this.addRow(data, true); } // Adiciona uma linha à tabela, pode ser um cabeçalho ou uma linha comum addRow(data, isHeader = false) { const colData = []; data.forEach((text) => { const col = { text: escapeMarkdownTableColumn(text), width: text.length, }; colData.push(col); }); this.rows.push({ columns: colData, isHeader: isHeader, }); } // Converte a tabela para formato Markdown toMarkdown() { return createTable(this.rows); } } // Escapa caracteres especiais em colunas de uma tabela Markdown const escapeMarkdownTableColumn = (text) => { text = text.replace(/\r?\n/g, ' '); text = text.replace(/\|/g, '\\|'); return text; }; // Cria uma tabela a partir das linhas fornecidas const createTable = (rows) => { const content = []; if (rows.length === 0) { return content; } normalizeColumCount(rows); normalizeColumnWidth(rows); const th = rows.find((r) => r.isHeader); if (th !== undefined) { const headerRow = createRow(th); content.push(headerRow); content.push(createBorder(th)); } const tds = rows.filter((r) => !r.isHeader); tds.forEach((td) => { content.push(createRow(td)); }); return content; }; // Cria a borda (linha separadora) de uma tabela const createBorder = (th) => { const border = { columns: [], isHeader: false, }; th.columns.forEach((c) => { const borderCol = { text: '', width: c.width, }; while (borderCol.text.length < borderCol.width) { borderCol.text += '-'; } border.columns.push(borderCol); }); return createRow(border); }; // Cria uma linha da tabela a partir dos dados fornecidos const createRow = (row) => { const content = ['| ']; row.columns.forEach((c) => { content.push(c.text); content.push(' | '); }); return content.join('').trim(); }; // Normaliza a contagem de colunas em todas as linhas da tabela const normalizeColumCount = (rows) => { let columnCount = 0; rows.forEach((r) => { if (r.columns.length > columnCount) { columnCount = r.columns.length; } }); rows.forEach((r) => { while (r.columns.length < columnCount) { r.columns.push({ text: ``, width: 0, }); } }); }; // Normaliza a largura das colunas com base no maior texto em cada coluna const normalizeColumnWidth = (rows) => { const columnCount = rows[0].columns.length; for (let columnIndex = 0; columnIndex < columnCount; columnIndex++) { let longestText = 0; rows.forEach((r) => { const col = r.columns[columnIndex]; if (col.text.length > longestText) { longestText = col.text.length; } }); rows.forEach((r) => { const col = r.columns[columnIndex]; col.width = longestText; while (col.text.length < longestText) { col.text += ' '; } }); } }; // Capitaliza a primeira letra de uma string export const toTitleCase = (str) => str.charAt(0).toUpperCase() + str.slice(1); //# sourceMappingURL=docs-utils.js.map