Salut @RBoy, merci pour vos commentaires et votre suggestion !
Un plugin d’éditeur serait formidable, mais cela demanderait beaucoup d’efforts pour lire le code source de Discourse afin de comprendre la logique de gestion des emojis et de définition du texte/ancre de l’en-tête, et de créer un dépôt pour le plugin.
Un plugin (apparemment) simple comme Spoiler Alert est un gros dépôt et je n’ai pas la bande passante pour m’engager pleinement dans le développement. J’espère donc que Discourse pourra prioriser les demandes de fonctionnalités comme Automatic Table of Contents generation et développer une fonctionnalité native en attendant ![]()
Ci-dessous se trouve la version avec les puces. Les espaces entre <ul> et </ul> sont plutôt trop grands, j’ai donc préféré la version originale sans puces.
Capture d’écran :
Code :
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();
})();
