@hanology/cham-browser 0.3.9 → 0.4.1

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/dist/cli.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
- import { readFileSync, writeFileSync, readdirSync, existsSync, mkdirSync, statSync, cpSync } from 'fs';
3
- import { join, resolve, dirname, basename } from 'path';
2
+ import { readFileSync, writeFileSync, readdirSync, existsSync, mkdirSync, statSync, cpSync, symlinkSync, rmSync } from 'fs';
3
+ import { join, resolve, dirname, basename, sep } from 'path';
4
4
  import { fileURLToPath } from 'url';
5
5
  import { parse as parseYaml } from 'yaml';
6
6
  import { buildPieceFromCham, buildBookData, buildLibraryIndex, buildAuthorsJson, buildDynastiesJson, } from './pipeline.js';
@@ -13,6 +13,7 @@ function loadConfig(configPath) {
13
13
  subtitleEn: raw.subtitleEn,
14
14
  logo: raw.logo,
15
15
  logoDark: raw.logoDark,
16
+ aboutFile: raw.aboutFile,
16
17
  libraryDir: raw.libraryDir || 'library/content',
17
18
  authorsFile: raw.authorsFile,
18
19
  outputDir: raw.outputDir || 'dist',
@@ -47,6 +48,22 @@ function loadAuthors(config, configDir) {
47
48
  return {};
48
49
  return parseYaml(readFileSync(authorsPath, 'utf-8'));
49
50
  }
51
+ function loadAboutHtml(config, configDir) {
52
+ const candidates = [
53
+ config.aboutFile ? resolve(configDir, config.aboutFile) : null,
54
+ join(configDir, 'about.html'),
55
+ join(configDir, 'about.md'),
56
+ ].filter(Boolean);
57
+ for (const p of candidates) {
58
+ if (existsSync(p)) {
59
+ const content = readFileSync(p, 'utf-8');
60
+ if (p.endsWith('.html'))
61
+ return content;
62
+ return content;
63
+ }
64
+ }
65
+ return '';
66
+ }
50
67
  function readPieceFiles(pieceDir) {
51
68
  let chamSource = null;
52
69
  const proseFiles = new Map();
@@ -128,11 +145,11 @@ function generateData(config, configDir) {
128
145
  console.log(`Data: ${bookMetas.length} book(s), ${allPieces.length} piece(s)`);
129
146
  return { bookMetas, allPieces };
130
147
  }
131
- // ─── SSG Build ────────────────────────────────────────────────
132
- async function buildSite(config, configDir) {
133
- const templateDir = resolve(dirname(fileURLToPath(import.meta.url)), '..', 'template');
134
- const outputDir = resolve(configDir, config.outputDir || 'dist');
135
- // Copy logos to dist if configured
148
+ // ─── Shared Vite Config ───────────────────────────────────────
149
+ function getTemplateDir() {
150
+ return resolve(dirname(fileURLToPath(import.meta.url)), '..', 'template');
151
+ }
152
+ function copyLogos(config, configDir, outputDir) {
136
153
  function copyLogo(key, rawPath) {
137
154
  if (!rawPath)
138
155
  return undefined;
@@ -152,16 +169,109 @@ async function buildSite(config, configDir) {
152
169
  }
153
170
  const logoUrl = copyLogo('light', config.logo);
154
171
  const logoDarkUrl = copyLogo('dark', config.logoDark);
172
+ return { logoUrl, logoDarkUrl };
173
+ }
174
+ function getSiteMeta(config, configDir) {
175
+ return {
176
+ siteTitle: config.subtitle || config.name,
177
+ siteSubtitle: config.subtitleEn || config.nameEn || '',
178
+ aboutHtml: loadAboutHtml(config, configDir),
179
+ };
180
+ }
181
+ function chamHtmlPlugin(siteTitle, logoUrl) {
182
+ return {
183
+ name: 'cham-html-transform',
184
+ transformIndexHtml(html) {
185
+ let result = html.replace(/<title>CHAM<\/title>/, `<title>${siteTitle}</title>`);
186
+ if (logoUrl) {
187
+ result = result.replace('id="loading-logo"></div>', `id="loading-logo"><img src="${logoUrl}" alt="" /></div>`);
188
+ }
189
+ return result;
190
+ },
191
+ };
192
+ }
193
+ // ─── Dev Server ───────────────────────────────────────────────
194
+ async function devServer(config, configDir) {
195
+ const templateDir = getTemplateDir();
196
+ const outputDir = resolve(configDir, config.outputDir || 'dist');
197
+ // Step 1: Generate data
198
+ generateData(config, configDir);
199
+ const { logoUrl, logoDarkUrl } = copyLogos(config, configDir, outputDir);
200
+ const { siteTitle, siteSubtitle, aboutHtml } = getSiteMeta(config, configDir);
201
+ // Symlink data dir into template's public so vite dev serves it
202
+ const templatePublicData = join(templateDir, 'public', 'data');
203
+ const dataDir = join(outputDir, 'data');
204
+ rmSync(templatePublicData, { recursive: true, force: true });
205
+ mkdirSync(dirname(templatePublicData), { recursive: true });
206
+ symlinkSync(dataDir, templatePublicData);
207
+ console.log(`Data: ${dataDir} → ${templatePublicData}`);
208
+ // Symlink public assets (favicons etc.) into template's public
209
+ const publicDir = config.publicDir
210
+ ? resolve(configDir, config.publicDir)
211
+ : resolve(configDir, 'public');
212
+ if (existsSync(publicDir)) {
213
+ for (const f of readdirSync(publicDir).sort()) {
214
+ if (f === 'data')
215
+ continue;
216
+ const src = join(publicDir, f);
217
+ const dest = join(templateDir, 'public', f);
218
+ rmSync(dest, { recursive: true, force: true });
219
+ symlinkSync(src, dest);
220
+ }
221
+ console.log(`Public assets linked from ${publicDir}`);
222
+ }
223
+ // Symlink logo assets into template's public/assets
224
+ const templatePublicAssets = join(templateDir, 'public', 'assets');
225
+ const distAssets = join(outputDir, 'assets');
226
+ if (existsSync(distAssets)) {
227
+ mkdirSync(templatePublicAssets, { recursive: true });
228
+ for (const f of readdirSync(distAssets)) {
229
+ const src = join(distAssets, f);
230
+ const dest = join(templatePublicAssets, f);
231
+ rmSync(dest, { force: true });
232
+ symlinkSync(src, dest);
233
+ }
234
+ }
235
+ process.env.CHAM_DATA_DIR = dataDir;
236
+ const vite = await import('vite');
237
+ const vue = (await import('@vitejs/plugin-vue')).default;
238
+ const server = await vite.createServer({
239
+ root: templateDir,
240
+ plugins: [vue(), chamHtmlPlugin(siteTitle, logoUrl)],
241
+ resolve: {
242
+ alias: {
243
+ '@': resolve(templateDir, 'src'),
244
+ },
245
+ },
246
+ define: {
247
+ 'import.meta.env.CHAM_LOGO_URL': JSON.stringify(logoUrl || ''),
248
+ 'import.meta.env.CHAM_LOGO_DARK_URL': JSON.stringify(logoDarkUrl || ''),
249
+ 'import.meta.env.CHAM_SITE_TITLE': JSON.stringify(siteTitle),
250
+ 'import.meta.env.CHAM_SITE_SUBTITLE': JSON.stringify(siteSubtitle),
251
+ 'import.meta.env.CHAM_ABOUT_HTML': JSON.stringify(aboutHtml),
252
+ },
253
+ server: {
254
+ port: 3000,
255
+ open: true,
256
+ },
257
+ });
258
+ await server.listen();
259
+ server.printUrls();
260
+ }
261
+ // ─── SSG Build ────────────────────────────────────────────────
262
+ async function buildSite(config, configDir) {
263
+ const templateDir = getTemplateDir();
264
+ const outputDir = resolve(configDir, config.outputDir || 'dist');
265
+ const { logoUrl, logoDarkUrl } = copyLogos(config, configDir, outputDir);
266
+ const { siteTitle, siteSubtitle, aboutHtml } = getSiteMeta(config, configDir);
155
267
  const { build: ssgBuild } = await import('vite-ssg/node');
156
268
  const vue = (await import('@vitejs/plugin-vue')).default;
157
269
  process.env.CHAM_DATA_DIR = join(outputDir, 'data');
158
- process.env.CHAM_LOGO_URL = logoUrl || '';
159
- process.env.CHAM_LOGO_DARK_URL = logoDarkUrl || '';
160
270
  await ssgBuild({
161
271
  script: 'async',
162
272
  formatting: 'minify',
163
273
  includedRoutes(paths, routes) {
164
- const result = ['/', '/about'];
274
+ const result = ['/'];
165
275
  const library = JSON.parse(readFileSync(join(outputDir, 'data', 'library.json'), 'utf-8'));
166
276
  const authors = JSON.parse(readFileSync(join(outputDir, 'data', 'authors.json'), 'utf-8'));
167
277
  for (const book of library.books) {
@@ -178,7 +288,7 @@ async function buildSite(config, configDir) {
178
288
  },
179
289
  }, {
180
290
  root: templateDir,
181
- plugins: [vue()],
291
+ plugins: [vue(), chamHtmlPlugin(siteTitle, logoUrl)],
182
292
  resolve: {
183
293
  alias: {
184
294
  '@': resolve(templateDir, 'src'),
@@ -187,6 +297,9 @@ async function buildSite(config, configDir) {
187
297
  define: {
188
298
  'import.meta.env.CHAM_LOGO_URL': JSON.stringify(logoUrl || ''),
189
299
  'import.meta.env.CHAM_LOGO_DARK_URL': JSON.stringify(logoDarkUrl || ''),
300
+ 'import.meta.env.CHAM_SITE_TITLE': JSON.stringify(siteTitle),
301
+ 'import.meta.env.CHAM_SITE_SUBTITLE': JSON.stringify(siteSubtitle),
302
+ 'import.meta.env.CHAM_ABOUT_HTML': JSON.stringify(aboutHtml),
190
303
  },
191
304
  build: {
192
305
  outDir: outputDir,
@@ -197,9 +310,9 @@ async function buildSite(config, configDir) {
197
310
  // Copy public dir assets (favicons, manifest, etc.) to output
198
311
  const publicDir = config.publicDir
199
312
  ? resolve(configDir, config.publicDir)
200
- : resolve(configDir, 'site', 'public');
313
+ : resolve(configDir, 'public');
201
314
  if (existsSync(publicDir)) {
202
- cpSync(publicDir, outputDir, { recursive: true, filter: (src) => !src.endsWith('.html') });
315
+ cpSync(publicDir, outputDir, { recursive: true, filter: (src) => !src.endsWith('.html') && !src.includes(`${sep}data`) });
203
316
  console.log(`Public: ${publicDir} → ${outputDir}`);
204
317
  }
205
318
  }
@@ -207,6 +320,10 @@ async function buildSite(config, configDir) {
207
320
  async function main() {
208
321
  const args = process.argv.slice(2);
209
322
  let configPath = 'config.yaml';
323
+ let command = 'build';
324
+ if (args[0] === 'dev' || args[0] === 'build') {
325
+ command = args.shift();
326
+ }
210
327
  for (let i = 0; i < args.length; i++) {
211
328
  if (args[i] === '--config' && args[i + 1]) {
212
329
  configPath = args[i + 1];
@@ -219,11 +336,17 @@ async function main() {
219
336
  }
220
337
  const configDir = dirname(resolve(configPath));
221
338
  const config = loadConfig(configPath);
222
- console.log(`Building site: ${config.name} (${config.nameEn || ''})`);
223
- // Step 1: Generate JSON data
224
- generateData(config, configDir);
225
- // Step 2: Build static site
226
- await buildSite(config, configDir);
339
+ console.log(`Site: ${config.name} (${config.nameEn || ''})`);
340
+ if (command === 'dev') {
341
+ await devServer(config, configDir);
342
+ }
343
+ else {
344
+ console.log(`Building site: ${config.name} (${config.nameEn || ''})`);
345
+ // Step 1: Generate JSON data
346
+ generateData(config, configDir);
347
+ // Step 2: Build static site
348
+ await buildSite(config, configDir);
349
+ }
227
350
  }
228
351
  main().catch(err => {
229
352
  console.error(err);
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hanology/cham-browser",
3
- "version": "0.3.9",
3
+ "version": "0.4.1",
4
4
  "description": "CHAM — browser-compatible parser, serializer, and site generator for Classical Han Annotated Markdown",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -3,8 +3,7 @@
3
3
  <head>
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
- <title>古典詩文圖書館</title>
7
- <meta name="description" content="教育局古典詩文誦讀材料數位圖書館,收錄多篇經典詩文。" />
6
+ <title>CHAM</title>
8
7
  <link rel="preconnect" href="https://fonts.googleapis.com" />
9
8
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
10
9
  <link href="https://fonts.googleapis.com/css2?family=Noto+Serif+TC:wght@200;300;400;500;600;700;900&family=Noto+Sans+TC:wght@300;400;500;700&display=swap" rel="stylesheet" />
@@ -17,20 +16,17 @@
17
16
  <style>
18
17
  #app-loading{position:fixed;inset:0;background:var(--paper,#faf6ee);display:flex;flex-direction:column;align-items:center;justify-content:center;z-index:9999;font-family:'Noto Serif TC',serif;transition:opacity .4s ease}
19
18
  #app-loading.fade-out{opacity:0;pointer-events:none}
20
- #app-loading .seal{width:72px;height:72px;border:2px solid var(--vermillion,#c23a2b);border-radius:4px;display:flex;align-items:center;justify-content:center;animation:sealReveal .8s cubic-bezier(.16,1,.3,1) forwards;opacity:0}
21
- #app-loading .char{font-size:36px;font-weight:900;color:var(--vermillion,#c23a2b);line-height:1}
19
+ #app-loading .seal{width:72px;height:72px;border:2px solid var(--vermillion,#c23a2b);border-radius:4px;display:flex;align-items:center;justify-content:center;animation:sealReveal .8s cubic-bezier(.16,1,.3,1) forwards;opacity:0;overflow:hidden}
20
+ #app-loading .seal img{height:56px;width:auto;object-fit:contain}
22
21
  #app-loading .line{width:1px;height:40px;background:linear-gradient(180deg,var(--vermillion,#c23a2b),transparent);margin-top:24px;animation:lineGrow .6s .3s cubic-bezier(.16,1,.3,1) forwards;transform:scaleY(0);transform-origin:top}
23
- #app-loading .text{font-size:11px;color:var(--ink-faint,#a89b8a);letter-spacing:6px;margin-top:16px;animation:fadeIn .5s .5s ease forwards;opacity:0;font-family:'Noto Sans TC',sans-serif}
24
22
  @keyframes sealReveal{from{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}
25
23
  @keyframes lineGrow{to{transform:scaleY(1)}}
26
- @keyframes fadeIn{to{opacity:1}}
27
24
  </style>
28
25
  </head>
29
26
  <body>
30
27
  <div id="app-loading">
31
- <div class="seal"><div class="char">詩</div></div>
28
+ <div class="seal" id="loading-logo"></div>
32
29
  <div class="line"></div>
33
- <div class="text">載 入 中</div>
34
30
  </div>
35
31
  <div id="app"></div>
36
32
  <script type="module" src="/src/main.ts"></script>
@@ -1,16 +1,26 @@
1
1
  <script setup lang="ts">
2
2
  import { useRouter } from 'vue-router'
3
3
  import { useReadingMode } from './composables/useReadingMode'
4
+ import { useSiteConfig } from './composables/useSiteConfig'
4
5
  import ReadingToolbar from './components/ReadingToolbar.vue'
5
- import { computed, ref } from 'vue'
6
+ import { computed, ref, provide } from 'vue'
6
7
 
7
8
  const router = useRouter()
8
9
  const { toggleLayout, cycleTheme, layout } = useReadingMode()
10
+ const { logoUrl, aboutHtml } = useSiteConfig()
9
11
  const isVertical = computed(() => layout.value === 'vertical')
10
12
 
13
+ const aboutOpen = ref(false)
14
+ function toggleAbout() { aboutOpen.value = !aboutOpen.value }
15
+ function closeAbout() { aboutOpen.value = false }
16
+ provide('aboutPane', { toggleAbout, closeAbout })
17
+
11
18
  function onKey(event: KeyboardEvent) {
12
19
  if (event.target instanceof HTMLInputElement || event.target instanceof HTMLTextAreaElement) return
13
- if (event.key === 'Escape') router.push('/')
20
+ if (event.key === 'Escape') {
21
+ if (aboutOpen.value) { closeAbout(); return }
22
+ router.push('/')
23
+ }
14
24
  if (event.key === 'v' || event.key === 'V') toggleLayout()
15
25
  if (event.key === 't' || event.key === 'T') cycleTheme()
16
26
  }
@@ -18,29 +28,103 @@ function onKey(event: KeyboardEvent) {
18
28
 
19
29
  <template>
20
30
  <div @keydown="onKey">
21
- <router-view v-slot="{ Component }">
22
- <Transition name="page" mode="out-in">
23
- <Suspense>
24
- <component :is="Component" :key="$route.fullPath" />
25
- </Suspense>
26
- </Transition>
31
+ <router-view v-slot="{ Component, route }">
32
+ <Suspense :key="route.fullPath">
33
+ <component :is="Component" />
34
+ <template #fallback>
35
+ <div class="route-loading"></div>
36
+ </template>
37
+ </Suspense>
27
38
  </router-view>
28
39
  <!-- 橫排模式才顯示浮動設定鈕 -->
29
40
  <ReadingToolbar v-if="!isVertical" />
41
+
42
+ <!-- About overlay (only if about content is configured) -->
43
+ <Teleport v-if="aboutHtml" to="body">
44
+ <div v-if="aboutOpen" class="about-overlay" @click="closeAbout">
45
+ <div v-if="isVertical" class="about-pane-v" @click.stop>
46
+ <button class="about-close" @click="closeAbout">✕</button>
47
+ <div class="about-v-body" v-html="aboutHtml" />
48
+ </div>
49
+
50
+ <div v-else class="about-pane-h" @click.stop>
51
+ <button class="about-close" @click="closeAbout">✕</button>
52
+ <img v-if="logoUrl" :src="logoUrl" alt="" class="about-logo" />
53
+ <div class="about-h-body" v-html="aboutHtml" />
54
+ </div>
55
+ </div>
56
+ </Teleport>
30
57
  </div>
31
58
  </template>
32
59
 
33
60
  <style>
34
- .page-enter-active,
35
- .page-leave-active {
36
- transition: opacity 0.25s ease, transform 0.25s ease;
61
+ .about-overlay {
62
+ position: fixed; inset: 0;
63
+ background: rgba(var(--shadow-rgb), 0.3);
64
+ z-index: 200;
65
+ display: flex; justify-content: center; align-items: center;
66
+ animation: aboutFadeIn 0.2s ease;
67
+ }
68
+ @keyframes aboutFadeIn { from { opacity: 0 } to { opacity: 1 } }
69
+
70
+ .about-close {
71
+ position: absolute; top: 16px; right: 16px;
72
+ width: 36px; height: 36px;
73
+ border: 1px solid var(--border); border-radius: 4px;
74
+ background: none; font-size: 16px;
75
+ color: var(--ink-light); cursor: pointer;
76
+ transition: all 0.15s; z-index: 1;
77
+ }
78
+ .about-close:hover { background: var(--ink); color: var(--paper); border-color: var(--ink) }
79
+
80
+ /* Horizontal pane */
81
+ .about-pane-h {
82
+ position: relative;
83
+ width: min(600px, 90vw);
84
+ max-height: 85vh;
85
+ background: var(--paper);
86
+ border-radius: 12px;
87
+ padding: 40px;
88
+ overflow-y: auto;
89
+ box-shadow: 0 16px 48px rgba(var(--shadow-rgb), 0.15);
90
+ animation: aboutSlideUp 0.25s cubic-bezier(0.16, 1, 0.3, 1);
37
91
  }
38
- .page-enter-from {
39
- opacity: 0;
40
- transform: translateY(8px);
92
+ @keyframes aboutSlideUp { from { opacity: 0; transform: translateY(16px) } to { opacity: 1; transform: translateY(0) } }
93
+
94
+ .about-logo { height: 64px; width: auto; object-fit: contain; margin: 0 auto 32px; display: block }
95
+ .about-h-body {
96
+ font-size: 15px; line-height: 2.2; color: var(--ink-mid);
97
+ }
98
+ .about-h-body :deep(h2) {
99
+ font-size: 18px; font-weight: 700; letter-spacing: 3px; color: var(--ink);
100
+ margin-bottom: 12px; padding-bottom: 10px; border-bottom: 1px solid var(--border);
101
+ }
102
+ .about-h-body :deep(p) {
103
+ text-align: justify; text-indent: 2em; margin-bottom: 10px;
104
+ }
105
+ .about-h-body :deep(p:last-child) { margin-bottom: 0 }
106
+ .about-h-body :deep(.about-block) {
107
+ margin-bottom: 32px; padding: 28px;
108
+ background: var(--surface); border: 1px solid var(--border-light); border-radius: 8px;
109
+ }
110
+ .about-h-body :deep(.about-block:last-child) { margin-bottom: 0 }
111
+
112
+ /* Vertical pane */
113
+ .about-pane-v {
114
+ writing-mode: vertical-rl; text-orientation: mixed;
115
+ position: relative;
116
+ height: 100vh;
117
+ background: var(--paper);
118
+ padding: 32px 28px;
119
+ overflow-x: auto;
120
+ box-shadow: 8px 0 32px rgba(var(--shadow-rgb), 0.1);
121
+ animation: aboutSlideInV 0.25s cubic-bezier(0.16, 1, 0.3, 1);
41
122
  }
42
- .page-leave-to {
43
- opacity: 0;
44
- transform: translateY(-4px);
123
+ @keyframes aboutSlideInV { from { transform: translateX(-100%) } to { transform: translateX(0) } }
124
+ .about-pane-v .about-close { position: static; margin-bottom: 20px }
125
+ .about-v-body {
126
+ font-size: 16px; line-height: 2.4; color: var(--ink-mid);
127
+ max-height: 80vh; overflow-x: auto;
45
128
  }
129
+ .about-v-body :deep(p) { margin-left: 16px; text-indent: 0 }
46
130
  </style>