lbry.tech/app/components/glossary-toc.js
ポール ウェッブ 38c09ce24e Well this was fun
2019-04-12 15:08:35 -04:00

57 lines
1.1 KiB
JavaScript

"use strict";
// U T I L S
const idRegex = /(".*")/g;
const numberRegex = /^[0-9]/g;
const renderedHeaderRegex = /(<h\d\sid.*h\d>)/g;
const titleRegex = /(>.*<)/g;
// E X P O R T
export default (state, emit, markdown) => {
const collectionOfTocElements = [];
const tocElements = markdown.match(renderedHeaderRegex);
for (const item of tocElements) {
const id = item.match(idRegex)[0].replace(/"/g, "");
const title = item.match(titleRegex)[0].replace(">", "").replace("<", "");
collectionOfTocElements.push(`
<li>
<a href="${slugify(id)}" title="Go to '${title}'">${title}</a>
</li>
`);
}
return `
<ul class="component--glossary-toc">
${collectionOfTocElements.join("")}
</ul>
`;
};
// H E L P E R
function slugify(stringToSlugify) {
let finalString = stringToSlugify
.toLowerCase()
.replace(/###\s/g, "")
.replace(/\s\/\s/g, "-")
.replace(/\s/g, "-")
.replace(/%/g, "")
.replace(/\(/g, "")
.replace(/\)/g, "")
.replace(/,/g, "");
if (finalString.match(numberRegex))
finalString = `_${finalString}`;
return `#${finalString}`;
}