45 lines
1 KiB
JavaScript
45 lines
1 KiB
JavaScript
/* eslint-disable class-methods-use-this */
|
|
|
|
import TableRow from './table_row';
|
|
import { HIGHER_PARSE_RULE_PRIORITY } from '../constants';
|
|
|
|
const CENTER_ALIGN = 'center';
|
|
|
|
// Transforms generated HTML back to GFM for Banzai::Filter::MarkdownFilter
|
|
export default class TableHeaderRow extends TableRow {
|
|
get name() {
|
|
return 'table_header_row';
|
|
}
|
|
|
|
get schema() {
|
|
return {
|
|
content: 'table_cell+',
|
|
parseDOM: [
|
|
{
|
|
tag: 'thead tr',
|
|
priority: HIGHER_PARSE_RULE_PRIORITY,
|
|
},
|
|
],
|
|
toDOM: () => ['tr', 0],
|
|
};
|
|
}
|
|
|
|
toMarkdown(state, node) {
|
|
const cellWidths = super.toMarkdown(state, node);
|
|
|
|
state.flushClose(1);
|
|
|
|
state.write('|');
|
|
node.forEach((cell, _, i) => {
|
|
if (i) state.write('|');
|
|
|
|
state.write(cell.attrs.align === CENTER_ALIGN ? ':' : '-');
|
|
state.write(state.repeat('-', cellWidths[i]));
|
|
state.write(cell.attrs.align === CENTER_ALIGN || cell.attrs.align === 'right' ? ':' : '-');
|
|
});
|
|
state.write('|');
|
|
|
|
state.closeBlock(node);
|
|
}
|
|
}
|