Ciao @RBoy, grazie per il feedback e il suggerimento!
Un plugin per l’editor sarebbe fantastico, ma richiederebbe molto impegno per leggere il codice sorgente di discourse per capire la logica di gestione delle emoji e la definizione del testo/ancora dell’intestazione e creare un repository del plugin.
Un plugin (apparentemente) semplice come Spoiler Alert è un grande repository e non ho la larghezza di banda per impegnarmi completamente nello sviluppo. Quindi, spero che Discourse possa dare priorità alle richieste di funzionalità come Automatic Table of Contents generation e sviluppare una funzionalità nativa nel frattempo ![]()
Di seguito è riportata la versione con i punti elenco. Gli spazi tra <ul> e </ul> sono piuttosto grandi, quindi ho preferito la versione originale senza punti elenco.
Screenshot:
Codice:
javascript:(function() {
const copyForumTocToClipboard = function() {
const urlMatch = window.location.href.match(/\/t\/[^\/]*\/\d+\/?(\d*)/);
if (!urlMatch) return;
const postIndex = 1;
const anchors = document.querySelectorAll('#post_' + postIndex + ' div.cooked h6 a.anchor,h5 a.anchor,h4 a.anchor,h3 a.anchor,h2 a.anchor,h1 a.anchor');
let toc = '';
let currentLevel = 1;
anchors.forEach(anchor => {
newLevel = anchor.parentNode.nodeName[1];
levelChange = newLevel - currentLevel;
toc +=
((levelChange >= 0) ? '<ul>'.repeat(levelChange) : '</ul>'.repeat(levelChange * -1)) +
`<li><a href="${anchor.href}">${anchor.parentNode.textContent}</a></li>`;
currentLevel = newLevel;
});
if (newLevel > 1) toc += '</ul>'.repeat(newLevel - 1);
toc = '<details open><summary>Table of contents: </summary><ul>\n' + toc + '</ul></details>';
navigator.clipboard.writeText(toc);
};
copyForumTocToClipboard();
})();
