
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
remark-table-cell-titles
Advanced tools
Remark plugin that adds data-title attributes to table cells for responsive tables
A remark plugin that adds data-title attributes to table cells in Markdown tables. This makes tables more accessible for responsive designs where table headers can be displayed as labels on small screens.
npm install remark-table-cell-titles
import { remark } from "remark";
import remarkParse from "remark-parse";
import remarkGfm from "remark-gfm";
import remarkHtml from "remark-html";
import remarkTableCellTitles from "remark-table-cell-titles";
const markdown = `
| Header 1 | Header 2 |
| -------- | -------- |
| Cell 1 | Cell 2 |
| Cell 3 | Cell 4 |
`;
// Basic usage
const result = await remark()
.use(remarkParse)
.use(remarkGfm)
.use(remarkTableCellTitles)
.use(remarkHtml, { sanitize: false })
.process(markdown);
console.log(result.toString());
// Output will contain:
// <td data-title="Header 1">Cell 1</td>
// <td data-title="Header 2">Cell 2</td>
// <td data-title="Header 1">Cell 3</td>
// <td data-title="Header 2">Cell 4</td>
The plugin accepts several configuration options:
remark().use(remarkTableCellTitles, {
attributeName: "data-title", // Custom attribute name
skipEmptyHeaders: false, // Skip adding attributes for empty headers
headerTransform: (node) => toString(node), // Transform header node before using as attribute
});
Type: string
Default: 'data-title'
Custom attribute name to use instead of data-title.
remark().use(remarkTableCellTitles, { attributeName: "data-header" });
This will generate: <td data-header="Header 1">Cell 1</td>
Type: boolean
Default: false
Skip adding attributes for cells that correspond to empty headers.
remark().use(remarkTableCellTitles, { skipEmptyHeaders: true });
Type: Function
Default: (node) => toString(node)
Transform header node before using it as an attribute value.
remark().use(remarkTableCellTitles, {
headerTransform: (node) =>
node.children[0].value.toLowerCase().replace(/\s+/g, "-"),
});
This will generate: <td data-title="header-1">Cell 1</td>
The plugin properly handles complex header content including:
For example, with this markdown:
| **Bold Header** | [Link Header](https://example.com) |
| --------------- | ---------------------------------- |
| Cell 1 | Cell 2 |
The plugin will extract the text content from the complex header elements:
<td data-title="Bold Header">Cell 1</td>
<td data-title="Link Header">Cell 2</td>
This plugin is particularly useful for responsive tables. Here's an example CSS implementation:
@media screen and (max-width: 600px) {
table {
border: 0;
}
table thead {
display: none;
}
table tr {
display: block;
margin-bottom: 0.5em;
border: 1px solid #ddd;
}
table td {
display: block;
text-align: right;
border-bottom: 1px solid #ddd;
padding-left: 50%;
position: relative;
}
table td:before {
content: attr(data-title);
position: absolute;
left: 6px;
font-weight: bold;
}
}
MIT
FAQs
Remark plugin that adds data-title attributes to table cells for responsive tables
We found that remark-table-cell-titles demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.