feat(markdown): allow disabling table `tabindex` attribute

Moves the inline table_open rule into its own plugin file and adds a
`markdown.tableTabIndex` option (default true) to disable it.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
pull/5335/head
Divyansh Singh 2 months ago
parent 6bbd04e0bf
commit bffe1e1412

@ -38,6 +38,7 @@ import { linkPlugin } from './plugins/link'
import { preWrapperPlugin } from './plugins/preWrapper'
import { restoreEntities } from './plugins/restoreEntities'
import { snippetPlugin } from './plugins/snippet'
import { tablePlugin } from './plugins/table'
export type { Header } from '../shared'
@ -216,6 +217,11 @@ export interface MarkdownOptions extends MarkdownItAsyncOptions {
* @see https://vitepress.dev/guide/markdown#github-flavored-alerts
*/
gfmAlerts?: boolean
/**
* Add `tabindex="0"` to tables so keyboard users can focus and scroll them.
* @default true
*/
tableTabIndex?: boolean
/**
* Allows disabling the CJK-friendly plugin.
* This plugin adds support for emphasis marks (**bold**) in Japanese, Chinese, and Korean text.
@ -291,13 +297,8 @@ export async function createMarkdownRenderer(
)
lineNumberPlugin(md, options.lineNumbers)
const tableOpen = md.renderer.rules.table_open
md.renderer.rules.table_open = function (tokens, idx, options, env, self) {
const token = tokens[idx]
if (token.attrIndex('tabindex') < 0) token.attrPush(['tabindex', '0'])
return tableOpen
? tableOpen(tokens, idx, options, env, self)
: self.renderToken(tokens, idx, options)
if (options.tableTabIndex !== false) {
tablePlugin(md)
}
if (options.gfmAlerts !== false) {

@ -0,0 +1,14 @@
import type { MarkdownItAsync } from 'markdown-it-async'
// adds tabindex="0" to tables so they are focusable and can be
// scrolled with the keyboard when they overflow horizontally
export const tablePlugin = (md: MarkdownItAsync) => {
const tableOpen = md.renderer.rules.table_open
md.renderer.rules.table_open = function (tokens, idx, options, env, self) {
const token = tokens[idx]
if (token.attrIndex('tabindex') < 0) token.attrPush(['tabindex', '0'])
return tableOpen
? tableOpen(tokens, idx, options, env, self)
: self.renderToken(tokens, idx, options)
}
}
Loading…
Cancel
Save