feat(creator-studio): two-row masthead with site logo and user avatar
顶栏改为知乎式两行结构:第一行左侧站点 LOGO、右侧当前用户头像, 第二行只保留正文工具条并居中,同时移除「Jio / 写文章」字样。 - bootstrap payload 新增 site/viewer 身份字段(复用 jio_get_site_logo_url 与 jio_get_avatar_url,前端不拼 URL、不做权限判断) - 拆分 draft 类型、TinyMCE 块运行时、顶栏组件,index.tsx 1065 → 735 行 - 清理死代码:未调用的 keepCaretInsideCode、永远无法打开的代码语言弹窗 (setCodeLanguage 只会收到 null,codeTargetRef 从未赋值)及其样式, 以及顶栏移除后失效的 bar-left/brand/mode/save-draft/ghost/primary 规则 - 契约测试、本地预览与截图脚本同步到新 DOM Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
5f31c58df2
commit
1970db0b56
17 files changed
+602
-580
No files matched your search
@@ -214,7 +214,8 @@ test('fixed top toolbar has TinyMCE formatting, media, and extension actions', (
|
||||
assert.match(blocks, /function append_footnotes/);
|
||||
assert.match(blocks, /<sup>\$1\$2<\/sup>/);
|
||||
// 删除键必须能移除相邻的块级元素。
|
||||
assert.match(appSource, /function removeAdjacentBlock/);
|
||||
const editorRuntime = read('assets/creator-studio/src/editor-runtime.ts');
|
||||
assert.match(editorRuntime, /function removeAdjacentBlock/);
|
||||
assert.match(appSource, /removeAdjacentBlock\(editor, event\)/);
|
||||
// 工具栏按钮统一为「图标在上、文字在下」。
|
||||
assert.match(editorToolbar, /jio-creator__tool-label/);
|
||||
@@ -231,8 +232,37 @@ test('fixed top toolbar has TinyMCE formatting, media, and extension actions', (
|
||||
assert.match(barStyles, /\.jio-creator__status\s*\{[\s\S]*?position:\s*fixed/);
|
||||
assert.match(barStyles, /\.jio-creator__status\s*\{[\s\S]*?bottom:\s*0/);
|
||||
assert.match(editorToolbar, /role="toolbar"/);
|
||||
assert.match(read('assets/creator-studio/src/styles/studio.scss'), /\.jio-creator__bar\s*\{[^}]*position:\s*fixed/);
|
||||
assert.match(read('assets/creator-studio/src/styles/studio.scss'), /\.jio-creator\s*\{[\s\S]*?padding-top:\s*var\(--jc-bar\)/);
|
||||
assert.match(read('assets/creator-studio/src/styles/studio.scss'), /\.jio-creator__top\s*\{[^}]*position:\s*fixed/);
|
||||
assert.match(read('assets/creator-studio/src/styles/studio.scss'), /\.jio-creator\s*\{[\s\S]*?padding-top:\s*var\(--jc-top\)/);
|
||||
});
|
||||
|
||||
test('top bar is masthead + centered toolbar, with no brand text in the toolbar row', () => {
|
||||
const masthead = read('assets/creator-studio/src/components/studio-masthead.tsx');
|
||||
const styles = read('assets/creator-studio/src/styles/studio.scss');
|
||||
const rest = read('src/Core/CreatorRest.php');
|
||||
|
||||
// 第一行:左站点 LOGO、右用户头像。
|
||||
assert.match(appSource, /<StudioMasthead/);
|
||||
assert.match(masthead, /jio-creator__masthead/);
|
||||
assert.match(masthead, /jio-creator__brand-logo/);
|
||||
assert.match(masthead, /jio-creator__me-avatar/);
|
||||
assert.match(masthead, /site\.logo/);
|
||||
assert.match(masthead, /viewer\.avatar/);
|
||||
// 工具条行不再有品牌字 / 模式文案。
|
||||
assert.doesNotMatch(appSource, /jio-creator__bar-brand/);
|
||||
assert.doesNotMatch(appSource, /jio-creator__bar-mode/);
|
||||
assert.doesNotMatch(appSource, /jio-creator__bar-left/);
|
||||
// 工具条居中。
|
||||
assert.match(styles, /\.jio-creator__bar\s*\{[^}]*justify-content:\s*center/);
|
||||
// Logo 与头像由服务端 bootstrap 提供,不在前端拼 URL。
|
||||
assert.match(rest, /private function identity_payload/);
|
||||
assert.match(rest, /'site'\s*=>\s*\$ident\['site'\]/);
|
||||
assert.match(rest, /'viewer'\s*=>\s*\$ident\['viewer'\]/);
|
||||
assert.match(rest, /jio_get_site_logo_url/);
|
||||
assert.match(rest, /jio_get_avatar_url/);
|
||||
// 顶栏身份字段与前端读取保持一致,避免悬空字段。
|
||||
assert.doesNotMatch(read('assets/creator-studio/src/components/studio-masthead.tsx'), /viewer\.home/);
|
||||
assert.doesNotMatch(rest, /'home'\s*=>\s*esc_url_raw\(\$home\)/);
|
||||
});
|
||||
|
||||
test('creator studio build artifacts and contracts exist', () => {
|
||||
|
||||
Reference in new issue
Block a user