@apprun/shiqu 0.7.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/NOTICE +2 -2
- package/README.md +71 -163
- package/dist/client/assets/{es-DlNSYSrl.js → es-uh-GOicn.js} +1 -1
- package/dist/client/assets/index-BIsu-Bxs.js +17 -0
- package/dist/client/assets/{index-BOFTbC7e.css → index-DRwygcbT.css} +1 -1
- package/dist/client/assets/{reader-pdf-Dcx6AQ3i.js → reader-pdf-B-dCuB6F.js} +3 -3
- package/dist/client/assets/reader-png-B1iE7LNk.js +1 -0
- package/dist/client/assets/{reader-zip-hDWZbXX9.js → reader-zip-kwzPi4VM.js} +5 -5
- package/dist/client/index.html +2 -2
- package/dist/client/offline.html +3 -1
- package/dist/client/sw.js +1 -1
- package/dist/server/cli.js +1422 -1307
- package/docker/seed.sql +1 -5
- package/drizzle/0018_consolidate_story_storage.sql +13 -0
- package/drizzle/0019_refuse_pre_consolidation_apps.sql +9 -0
- package/package.json +1 -1
- package/dist/client/assets/index-BBpP1F_U.js +0 -17
- package/dist/client/assets/reader-png-B6Cj2Di0.js +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as e,i as t,l as n}from"./index-BBpP1F_U.js";import{a as r,i,t as a}from"./reader-pdf-Dcx6AQ3i.js";var o=36,s=24,c=420,l=630,u=42,d=`"Noto Serif SC", "Songti SC", "STSong", "SimSun", serif`;function f(e){return a(e).replace(/\.pdf$/,`-一页.png`)}function p(e){if(!e.pages.length||e.pages.some(e=>!e.image))throw Error(`等所有画面生成完成后,就能一页输出 PNG。`)}function m(r,a){p(r);let d=r.pages.length,f=d<=4?d:d<=8?4:d<=10?5:4,m=2*o+f*c+(f-1)*s,h=(e,t,n)=>i(e,n,e=>a(e,t)),g=h(`${r.title} · ${d}幅故事总览`,52,m-2*o),_=`generated`in r&&r.generated===!0?r:null,v=h([t.find(e=>e.id===r.bookId)?.title||e(r.bookId)||`自选故事`,_?.artStyleLabel,r.theme].filter(Boolean).join(` · `),26,m-2*o),y=o+g.length*70+12,b=y+v.length*40+30,x=[];for(let e=0;e<d;e+=f){let t=r.pages.slice(e,e+f).map((t,n)=>({index:e+n,x:o+n*(c+s),y:b,caption:h(t.caption,26,c)}));x.push(...t),b+=l+58+Math.max(...t.map(e=>e.caption.length))*u+s}let S=b+6,C=h(r.reflection?`余味:${r.reflection}`:`故事到这里,余味留给你。`,36,m-2*o),w=h(n(r),22,m-2*o);return{width:m,height:S+32+C.length*56+30+w.length*32+24,columns:f,title:g,subtitle:v,subtitleY:y,cells:x,footerY:S,reflection:C,credit:w}}async function h(e,t=()=>{},n=r()){p(e),await n.ready();let i=n.canvas(),a=i.getContext(`2d`);if(!a)throw Error(`当前浏览器暂不支持 PNG 导出,请换个浏览器试试。`);let s=a,f=e=>{s.font=`${e}px ${d}`,s.textBaseline=`top`},h=m(e,(e,t)=>(f(t),s.measureText(e).width));i.width=h.width,i.height=h.height;try{s.fillStyle=`#f6f2e8`,s.fillRect(0,0,i.width,i.height);function r(e,t,n,r,i,a){f(r),s.fillStyle=a,e.forEach((e,r)=>s.fillText(e,t,n+r*i))}r(h.title,o,o,52,70,`#263a2e`),r(h.subtitle,o,h.subtitleY,26,40,`#6b7465`);for(let i of h.cells){t(`正在整理第 ${i.index+1} / ${e.pages.length} 幅`);let a=await n.read(e.pages[i.index].image,i.index);await n.image(a,e=>{let t=Math.min(c/e.width,l/e.height),n=e.width*t,r=e.height*t;s.drawImage(e.value,i.x+(c-n)/2,i.y+(l-r)/2,n,r)}),r([String(i.index+1).padStart(2,`0`)],i.x,i.y+l+14,28,40,`#263a2e`),r(i.caption,i.x,i.y+l+58,26,u,`#4b5148`)}return s.strokeStyle=`#c9cbbb`,s.lineWidth=2,s.beginPath(),s.moveTo(o,h.footerY),s.lineTo(h.width-o,h.footerY),s.stroke(),r(h.reflection,o,h.footerY+32,36,56,`#263a2e`),r(h.credit,o,h.height-24-h.credit.length*32,22,32,`#6b7465`),t(`正在保存一页 PNG`),await new Promise((e,t)=>i.toBlob(n=>n?e(n):t(Error(`PNG 排版失败,请重试。`)),`image/png`))}finally{i.width=0,i.height=0}}async function g(e,t){let n=await h(e,t),r=URL.createObjectURL(n),i=document.createElement(`a`);return i.href=r,i.download=f(e.title),(document.querySelector(`dialog[open]`)||document.body).appendChild(i),i.click(),i.remove(),{url:r,filename:i.download}}export{g as downloadStoryPng};
|