Connect all 27 source layouts to parameterized Studio pages and shared design storage
This commit is contained in:
@@ -0,0 +1,10 @@
|
||||
/** Package the 27 audited layers; no new Wiki document routes or copied DB. */
|
||||
import {readFile,writeFile} from 'node:fs/promises';
|
||||
const root=new URL('../',import.meta.url),read=p=>readFile(new URL(p,root)),raw=JSON.parse(await read('content/layout-reference/manifest.json')),ids=JSON.parse(await read('content/layout-reference/post-ids.json'));
|
||||
const image=async p=>'data:image/png;base64,'+(await read('content/layout-reference/assets/'+p.replace(/^asset:/,''))).toString('base64');
|
||||
const layouts=[];
|
||||
for(const m of raw){const elements=[];for(const e of m.elements)elements.push({...e,raster:await image(e.asset),...(e.mask?{shape:await image(e.mask)}:{})});layouts.push({id:m.id,name:m.name,width:m.width,height:m.height,tutorialUrl:'/explore/'+ids[m.id],sourceSha256:m.source.sha256,source:await image(m.reference),background:await image(m.background),elements});}
|
||||
await writeFile(new URL('apps/studio/src/content/templates/layouts.json',root),JSON.stringify(layouts));
|
||||
await writeFile(new URL('apps/waterfall-wiki/src/content/studio-layouts.json',root),JSON.stringify(layouts.map(({source,background,elements,...l})=>({...l,elements:elements.map(({id,kind,role,box,direction,text,reading})=>({id,kind,role,box,direction,text,reading}))}))));
|
||||
await writeFile(new URL('apps/waterfall-wiki/src/lib/layout-parameters.ts',root),await read('apps/studio/src/lib/layout-parameters.ts'));
|
||||
console.log('Packaged '+layouts.length+' corresponding layouts');
|
||||
@@ -0,0 +1,12 @@
|
||||
/** Run only inside the Wiki container via auth-cli.cjs run. API-only editorial update. */
|
||||
import {readFile,writeFile} from 'node:fs/promises';
|
||||
const base='http://127.0.0.1:3000',id='8eb8c76500580f7a4b56ba3c',dir='/tmp/prompt-layout-studio';
|
||||
const layouts=JSON.parse(await readFile(dir+'/catalog.json','utf8'));
|
||||
let markdown=await readFile(dir+'/tutorial.md','utf8');
|
||||
markdown=markdown.replace('{{LAYOUTS}}',layouts.map(l=>`- **[${l.id} · ${l.name}](/studio/layouts/${l.id})** · [构件文档](${l.tutorialUrl}) · [API 参数](/studio/api/layouts/${l.id}?agent_mode=True)`).join('\n'));
|
||||
const response=await fetch(base+'/api/notes/'+id);if(!response.ok)throw Error('Router unavailable');const {entry}=await response.json();
|
||||
await writeFile('/tmp/prompt-layout-router-before.json',JSON.stringify(entry),{mode:0o600});
|
||||
const tags=await fetch(base+'/api/tags').then(r=>r.json()),selected=tags.filter(t=>entry.categories.includes(t.name)||(entry.systemTags||[]).some(s=>s.id===t.id)).map(t=>t.id);
|
||||
const result=await fetch(base+'/api/notes/'+id,{method:'PUT',headers:{'Content-Type':'application/json'},body:JSON.stringify({title:'27 套排版 · Studio 参数 API 与保存教程',description:'27 个原图对应效果页,按 T/I/D 构件调整参数;API 渲染、保存独立 ID 与再次编辑,和 Wiki 共用数据库。',markdown,tags:selected,assets:entry.assets,coverAssetId:entry.coverAssetId,revision:entry.revision})});
|
||||
if(!result.ok)throw Error('Router update failed: '+result.status);
|
||||
console.log(JSON.stringify({routerUpdated:true,studioPages:layouts.length,contentExported:false}));
|
||||
Reference in New Issue
Block a user