Ich habe ein Bookmarklet erstellt, um die Inhaltsübersicht für Forum-Posts zu erstellen

Hallo @RBoy, danke für das Feedback und den Vorschlag!

Ein Editor-Plugin wäre großartig, aber es wäre viel Aufwand, den Quellcode von Discourse zu lesen, um die Logik der Emoji-Verarbeitung und der Definition des Überschriften-/Ankertextes zu verstehen und ein Repository für das Plugin zu erstellen.

Ein (scheinbar) einfaches Plugin wie Spoiler Alert ist ein großes Repository und ich habe nicht die Bandbreite, um mich voll und ganz der Entwicklung zu widmen. Daher hoffe ich, dass Discourse Feature-Anfragen wie Automatic Table of Contents generation priorisiert und in der Zwischenzeit eine native Funktion entwickelt :folded_hands:


Unten ist die Version mit den Aufzählungspunkten. Die Abstände zwischen <ul> und </ul> sind eher zu groß, daher habe ich die ursprüngliche, nicht mit Aufzählungspunkten versehene Version bevorzugt.

Screenshot:

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();
})();
5 „Gefällt mir“