feat: 帖子全局/板块置顶支持权重排序,优化列表与详情渲染

This commit is contained in:
2026-09-08 23:54:03 +08:00
parent de2f5e8be8
commit 711cd8b759
16 changed files with 362 additions and 64 deletions

View File

@@ -101,28 +101,22 @@ export function enhanceCodeBlocks(root: ParentNode): void {
const raw = code.textContent || '';
const display = readDisplayOptions(pre);
// 作者写了语言标签则以标注为准,绝不被自动识别覆盖
// 作者写了语言标签则以标注为准,绝不被自动识别覆盖;纯文本不做自动检测
const declaredLang = detectLang(code, pre);
let label = formatLangLabel(declaredLang || 'code');
let label = declaredLang ? formatLangLabel(declaredLang) : '';
try {
if (declaredLang && hljs.getLanguage(declaredLang)) {
// 作者标注且 hljs 收录 → 语法高亮
const result = hljs.highlight(raw, { language: declaredLang, ignoreIllegals: true });
code.innerHTML = wrapCodeLines(result.value, display.lineNumbers);
code.classList.add('hljs', `language-${declaredLang}`);
} else if (declaredLang) {
// 未收录语言:保留原文与标签,不做自动猜测
// 作者标注但 hljs 未收录 → 保留原文与标签,不做自动猜测
code.innerHTML = wrapCodeLines(escapeHtml(raw), display.lineNumbers);
code.classList.add('hljs', `language-${declaredLang}`);
} else if (raw.length >= 24) {
const result = hljs.highlightAuto(raw);
code.innerHTML = wrapCodeLines(result.value, display.lineNumbers);
code.classList.add('hljs');
if (result.language) {
label = formatLangLabel(result.language);
code.classList.add(`language-${result.language}`);
}
} else {
// 纯文本(无语言标注)→ 不做自动检测,保持纯文本显示
code.innerHTML = wrapCodeLines(escapeHtml(raw), display.lineNumbers);
code.classList.add('hljs');
}
@@ -146,7 +140,7 @@ export function enhanceCodeBlocks(root: ParentNode): void {
initiallyCollapsed ? 'md-codeblock--collapsed' : '',
initiallyCollapsed && lineCount <= CODE_FOLD_MIN_LINES ? 'md-codeblock--short' : '',
].filter(Boolean).join(' ');
wrap.setAttribute('data-lang', label);
if (label) wrap.setAttribute('data-lang', label);
if (display.lineNumbers) wrap.setAttribute('data-line-numbers', 'true');
if (display.collapsed) wrap.setAttribute('data-collapsed', 'true');
wrap.setAttribute('data-line-count', String(lineCount));
@@ -165,8 +159,9 @@ export function enhanceCodeBlocks(root: ParentNode): void {
}
actions.push('<button type="button" class="md-codeblock__copy" data-code-copy>复制</button>');
const langHtml = label ? `<span class="md-codeblock__lang">${escapeHtml(label)}</span>` : '';
head.innerHTML = `
<span class="md-codeblock__lang">${escapeHtml(label)}</span>
${langHtml}
<span class="md-codeblock__actions">${actions.join('')}</span>
`;