"use strict"; // V A R I A B L E 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 module.exports = exports = (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> <button class="component--glossary-toc-toggle" data-action="toggle glossary sidebar" type="button">Toggle</button> `; }; // 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}`; }