-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgen.js
More file actions
103 lines (84 loc) · 2.78 KB
/
gen.js
File metadata and controls
103 lines (84 loc) · 2.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
'use strict';
const fs = require('fs');
const path = require('path');
const wFile = require('./util/wFile');
const parsePGN = require('./util/parsePGN');
const list = require('./pgn.json').list;
const pgn = {};
const args = process.argv.splice(2);
const useCDN = args.indexOf('--cdn') >= 0;
const isForce = args.indexOf('--force') >=0;
list.forEach(item => {
pgn[item.date] = item;
});
const chessTemplate = fs.readFileSync(path.join(__dirname, 'template', useCDN ? 'chess.cdn.html' : 'chess.html'), 'utf-8');
const indexTemplate = fs.readFileSync(path.join(__dirname, 'template', 'index.html'), 'utf-8');
const genIndexHTML = require('./util/genIndexHTML');
const eco = require('./eco.json');
const strIndexHTML = genIndexHTML(list);
const distFolder = 'docs';
if (!fs.existsSync(distFolder)) {
fs.mkdirSync(distFolder);
}
const del = require('del');
const copy = require('copy');
function copyAssets() {
// Copy assets.
copy('assets/**', './' + distFolder + '/assets', () => {
console.log('copy assets done!')
});
}
function genIndex() {
// Generate index page.
wFile(path.join(__dirname, distFolder, 'index.html'), indexTemplate.replace('${content}', strIndexHTML.replace(/href="\/(\d{4}-\d{2}-\d{2})"/g, (a, b) => {
return `href="./${b}.html"`;
})));
}
async function genPGN(force) {
// Generate static files.
const arr = list.slice().reverse();
for (let i = 0; i < arr.length; i++) {
const item = arr[i];
const pgnPath = path.join(__dirname, 'pgn', `${item.date}-${item.id}.pgn`);
const destPath = path.join(__dirname, distFolder, `${item.date}.html`);
if (fs.existsSync(destPath) && !force) {
continue;
}
if (fs.existsSync(pgnPath)) {
const pgnContent = fs.readFileSync(pgnPath);
const pgnObj = parsePGN(pgnContent.toString());
const players = item.players.split(' vs ');
const data = {
title: `${item.players} (${item.year}) ${item.note}`,
player1: players[0],
player2: players[1],
note: item.note,
date: item.date,
pgn: pgnObj.pgnText,
notes: pgnObj.notes,
opening: pgnObj.ECO,
result: pgnObj.Result,
info: `${pgnObj.Event} (${pgnObj.Date}), ${pgnObj.Site}`
};
if (eco[pgnObj.ECO]) {
data.opening = `${eco[pgnObj.ECO].name}(${pgnObj.ECO})`;
}
const ret = chessTemplate.replace(/\${([^}]*)}/g, (content, name) => {
// replace sigle quote to avoid parse error
if (name === 'pgn') return data.pgn.replace(/'/g, '’');
return data[name] || '';
});
await wFile(path.join(__dirname, distFolder, `${item.date}.html`), ret);
}
};
}
if (isForce) {
del(distFolder + '/**/*').then(() => {
genIndex();
copyAssets();
genPGN(true);
})
} else {
genIndex();
genPGN();
}