spec/frontend/shared/toc_helper.js (27 lines of code) (raw):

export const createItem = (text, items = []) => ({ text, href: `#${text.replace(/[^a-zA-Z-]+/g, '-').toLowerCase()}`, id: `${text}-anchor`, items, }); export const buildHTML = (list) => list .map( ({ text, href, id, items }) => `<li> ${text ? `<a href="${href}" id="${id}">${text}</a>` : ''} ${items?.length ? `<ul>${buildHTML(items)}</ul>` : ''} </li>`, ) .join(''); export const createTOCElement = (list) => { const ul = document.createElement('ul'); ul.innerHTML = buildHTML(list); return ul; }; export const createExampleToc = () => [ createItem('Lorem', [createItem('Lorem 2')]), createItem('Ipsum', [ createItem('Dolar', [createItem('Sit'), createItem('Amit'), createItem('Test')]), ]), ];