@mieweb/wikigdrive
Version:
Google Drive to MarkDown synchronization
32 lines (28 loc) • 886 B
text/typescript
import {MarkdownNodes} from '../MarkdownNodes.ts';
import {extractText, walkRecursiveSync} from '../markdownNodesUtils.ts';
export function fixIdLinks(markdownChunks: MarkdownNodes) {
let inHtml = false;
walkRecursiveSync(markdownChunks.body, (chunk) => {
if (chunk.isTag && chunk.tag === 'HTML_MODE/') {
inHtml = true;
return;
}
if (inHtml) {
return;
}
if (chunk.isTag && 'A' === chunk.tag) {
if (chunk.payload?.href && chunk.payload?.href.startsWith('#')) {
const innerTxt = extractText(chunk);
const escapedText = innerTxt.toLowerCase().replace(/[^\w]+/g, ' ').trim().replaceAll(' ', '-');
if (escapedText) {
chunk.payload.href = '#' + escapedText;
}
}
}
}, {}, (chunk) => {
if (chunk.isTag && chunk.tag === 'HTML_MODE/') {
inHtml = false;
return;
}
});
}