fix(creator-studio): render math/footnote shortcodes, inline code blocks, block deletion

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
kate522andClaude Opus 5 committed 2026-11-06 23:52:39 +08:00
1 parent 7885f42cff
commit 6928127bfa
11 files changed
+235 -202

No files matched your search

@@ -54,8 +54,11 @@ export function codeLabel(language: string): string {
/** 代码块:语言写在 data 属性里,前台 enlighter 与编辑器标签共用。 */
export function codeBlockMarkup(language = 'generic', code = ''): string {
const body = code !== '' ? escapeHtml(code) : escapeHtml(__('在此输入代码', 'jio'));
// data-jio-code-label 供编辑器角标直接显示,避免在 CSS 里映射语言标识。
const label = escapeHtml(codeLabel(language));
return (
`<pre class="enlighter-pre" data-enlighter-language="${escapeHtml(language)}"><code class="gl" data-enlighter-language="${escapeHtml(language)}">` +
`<pre class="enlighter-pre" data-enlighter-language="${escapeHtml(language)}" data-jio-code-label="${label}">` +
`<code class="gl" data-enlighter-language="${escapeHtml(language)}">` +
body +
'</code></pre><p></p>'
);
@@ -93,25 +96,27 @@ export function tableMarkup({ rows, cols, header, striped }: TableOptions): stri
/**
* 目录:文章页的目录树由前台 section-navs 依据 [data-nav] 生成,
* 因此这里只放一个占位标记,读者端不会看到裸露的标记文本。
* 短代码在服务端替换成目录卡片,编辑器里保留可识别的占位。
*/
export function tocMarkup(): string {
return '<div class="jio-toc-placeholder"></div><p></p>';
return '<p>[jio_toc]</p><p></p>';
}
/** 注释:Markdown 脚注语法,前台渲染成编号脚注列表。 */
/** 注释:用短代码落库,服务端生成上标序号与文末注释列表。 */
export function footnoteMarkup(note: string): string {
const text = note.trim() || __('注释内容', 'jio');
return `<p>[^1]<br>[^1]: ${escapeHtml(text)}</p>`;
// 短代码属性里再放 HTML 会被 kses 改写,这里只允许纯文本内容。
return `<p>[jio_footnote]${escapeHtml(text)}[/jio_footnote]</p>`;
}
export type MathOptions = { formula: string; display: boolean };
/** 公式:行内或独占一行,数据保存在 .jio-math 容器里。 */
/** 公式:用短代码落库,服务端统一做上标 / 下标排版。 */
export function mathMarkup({ formula, display }: MathOptions): string {
const className = display ? 'jio-math jio-math--block' : 'jio-math';
const body = `<span class="${className}">${escapeHtml(formula.trim())}</span>`;
return display ? `<p>${body}</p>` : body;
const body = escapeHtml(formula.trim());
return display
? `<p>[jio_math display="1"]${body}[/jio_math]</p>`
: `<p>[jio_math display="0"]${body}[/jio_math]</p>`;
}
export type QuoteColor = '' | 'qe_wzk_c-red' | 'qe_wzk_lan' | 'qe_wzk_lv';