我创建了一个书签脚本,用于生成论坛帖子目录

你好 @RBoy,感谢您的反馈和建议!

创建一个编辑器插件会很棒,但要阅读 Discourse 的源代码 来理解处理表情符号和定义标题/锚文本的逻辑,并创建一个插件存储库,这将需要大量工作。

Spoiler Alert 这样(看似)简单的插件,其存储库就很大,我没有足够的时间来完全投入开发。所以,我希望 Discourse 能优先处理类似 Automatic Table of Contents generation 的功能请求,并在此期间开发一个原生功能 :folded_hands:


下面是带有项目符号的版本。<ul></ul> 之间的空格有点太大了,所以我更喜欢原始的非项目符号版本。

截图:

代码:

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 个赞