12 lines
2.8 KiB
TypeScript
12 lines
2.8 KiB
TypeScript
export const namespaces=['Main','File','Category','Template','Draft','Help'] as const;
|
|
export type Namespace=typeof namespaces[number];
|
|
export type WikiPage={namespace:Namespace;slug:string;title:string;summary:string;body:string;categories:string[];color:string};
|
|
export const wikiPages:WikiPage[]=[
|
|
{namespace:'Main',slug:'welcome',title:'让灵感有处可寻',summary:'像翻阅笔记一样,发现和连接知识。',body:'这里是 PROMPT Wiki。每个条目都有一个稳定的页面地址,以及对应的 Markdown 正文。\n\n名字空间决定页面的用途,分类把不同用途的内容连接起来。素材可以被多篇条目引用,草稿也可以在成熟后成为正式条目。',categories:['创作方法'],color:'#f5ddd2'},
|
|
{namespace:'Help',slug:'namespaces',title:'名字空间,内容的不同房间',summary:'条目、文件、分类、模板与草稿,各有自己的位置。',body:'Main:正式知识条目。\nFile:图片、视频、音频的说明页,现有素材包位于 /wiki/File:slug,同时保留 /p/ 兼容地址。\nCategory:跨名字空间的分类索引。\nTemplate:可复用的内容结构说明。\nDraft:待完善的草稿(当前内容公开,不用于私密信息)。\nHelp:使用指南。\n\n在 src/content/wiki.ts 添加内容,即可生成网页与 AI 正文。现有素材包也提供 /api/wiki-post/slug 的 Markdown。',categories:['使用指南'],color:'#dde8df'},
|
|
{namespace:'Template',slug:'idea',title:'一个想法的骨架',summary:'从问题、观察到表达,让创作有迹可循。',body:'## 问题\n你想回答什么?\n\n## 观察\n收集具体场景与可信来源。\n\n## 表达\n把结论写成独立的页面,再交给创作站制作。',categories:['创作方法'],color:'#e6def0'},
|
|
{namespace:'Draft',slug:'inbox',title:'还没成形,也值得留下',summary:'给正在生长的想法留一个位置。',body:'草稿用于公开孵化内容。补充来源、结构和分类后,可以迁移到 Main 名字空间。',categories:['创作方法'],color:'#f0e7ca'}];
|
|
export function wikiPath(p:Pick<WikiPage,'namespace'|'slug'>){return '/wiki/'+encodeURIComponent(p.namespace+':'+p.slug);}
|
|
export function wikiMarkdown(p:WikiPage){return '# '+p.title+'\n\nNamespace: '+p.namespace+'\nCategories: '+p.categories.join(', ')+'\n\n'+p.summary+'\n\n'+p.body+'\n';}
|
|
export function findWikiPage(key:string):WikiPage|undefined{if(key.startsWith('Category:')){const name=key.slice(9);const members=wikiPages.filter(p=>p.categories.includes(name));if(!members.length)return;return {namespace:'Category',slug:name,title:name,summary:'分类中的相关页面',body:members.map(p=>'['+p.namespace+':'+p.title+']('+wikiPath(p)+')').join('\n\n'),categories:[],color:'#e6e9ef'};}return wikiPages.find(p=>p.namespace+':'+p.slug===key);}
|