mirror of
https://github.com/Snigdha-OS/documentation.git
synced 2025-09-09 19:44:56 +02:00
57 lines
2.7 KiB
JavaScript
57 lines
2.7 KiB
JavaScript
"use strict";
|
|
/**
|
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
/* Based on remark-slug (https://github.com/remarkjs/remark-slug) and gatsby-remark-autolink-headers (https://github.com/gatsbyjs/gatsby/blob/master/packages/gatsby-remark-autolink-headers) */
|
|
const utils_1 = require("@docusaurus/utils");
|
|
function plugin() {
|
|
return async (root) => {
|
|
const { toString } = await import('mdast-util-to-string');
|
|
const { visit } = await import('unist-util-visit');
|
|
const slugs = (0, utils_1.createSlugger)();
|
|
visit(root, 'heading', (headingNode) => {
|
|
const data = headingNode.data ?? (headingNode.data = {});
|
|
const properties = (data.hProperties || (data.hProperties = {}));
|
|
let { id } = properties;
|
|
if (id) {
|
|
id = slugs.slug(id, { maintainCase: true });
|
|
}
|
|
else {
|
|
const headingTextNodes = headingNode.children.filter(({ type }) => !['html', 'jsx'].includes(type));
|
|
const heading = toString(headingTextNodes.length > 0 ? headingTextNodes : headingNode);
|
|
// Support explicit heading IDs
|
|
const parsedHeading = (0, utils_1.parseMarkdownHeadingId)(heading);
|
|
id = parsedHeading.id ?? slugs.slug(heading);
|
|
if (parsedHeading.id) {
|
|
// When there's an id, it is always in the last child node
|
|
// Sometimes heading is in multiple "parts" (** syntax creates a child
|
|
// node):
|
|
// ## part1 *part2* part3 {#id}
|
|
const lastNode = headingNode.children[headingNode.children.length - 1];
|
|
if (headingNode.children.length > 1) {
|
|
const lastNodeText = (0, utils_1.parseMarkdownHeadingId)(lastNode.value).text;
|
|
// When last part contains test+id, remove the id
|
|
if (lastNodeText) {
|
|
lastNode.value = lastNodeText;
|
|
}
|
|
// When last part contains only the id: completely remove that node
|
|
else {
|
|
headingNode.children.pop();
|
|
}
|
|
}
|
|
else {
|
|
lastNode.value = parsedHeading.text;
|
|
}
|
|
}
|
|
}
|
|
data.id = id;
|
|
properties.id = id;
|
|
});
|
|
};
|
|
}
|
|
exports.default = plugin;
|
|
//# sourceMappingURL=index.js.map
|