Skip to content

Commit 4631098

Browse files
committed
テンプレートファイルの最新化
1 parent 46a6c71 commit 4631098

3 files changed

Lines changed: 127 additions & 118 deletions

File tree

tool-generate-htmls/index.js

Lines changed: 48 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@ const fs = require('fs');
22
const marked = require('marked');
33
const mkdirp = require('mkdirp');
44
const highlightJs = require('highlight.js');
5-
6-
const IGNORE_LIST = ['.DS_Store'];
5+
const htmlMinifier = require('html-minifier');
76

87
let promises = [];
98
let samplesUrl = 'https://ics-creative.github.io/tutorial-three/';
@@ -19,21 +18,19 @@ let templateHtml;
1918
*/
2019
const template = (text, values) => {
2120
if (!text) {
22-
console.error('template-error!');
21+
console.log('template-error!');
2322
return '';
2423
}
25-
return text.replace(/\$\{(.*?)\}/g, function (all, key) {
26-
return Object.prototype.hasOwnProperty.call(values, key) ? values[key] : '';
27-
});
24+
return text.replace(/\$\{(.*?)\}/g, (all, key) =>
25+
Object.prototype.hasOwnProperty.call(values, key) ? values[key] : '');
2826
};
2927

30-
3128
const renderer = new marked.Renderer();
3229

3330
renderer.link = (href, title, text) => {
3431
//console.log("href:" + href);
35-
let sampledIndex = href.indexOf('samples/');
36-
let absolutePass = href.indexOf('http') == 0;
32+
const sampledIndex = href.indexOf('samples/');
33+
const absolutePass = href.indexOf('http') === 0;
3734
if (!absolutePass && sampledIndex >= 0) {
3835
href = samplesHtmlUrl + href.slice(sampledIndex);
3936
}
@@ -42,38 +39,48 @@ renderer.link = (href, title, text) => {
4239
href = href.replace('md', 'html');
4340
}
4441
}
45-
let htmlHref = (href != null && href != '') ? ` href="${href}"` : '';
46-
let htmlTitle = (title != null && title != '') ? ` title=${title}` : '';
47-
return `<a${htmlHref}${htmlTitle}>${text}</a>`;
42+
const htmlHref = (href != null && href != '') ? `href="${href}"` : '';
43+
const htmlTitle = (title != null && title != '') ? `title=${title}` : '';
44+
return `<a ${htmlHref}${htmlTitle}>${text}</a>`;
4845
};
46+
4947
renderer.image = (href, title, text) => {
5048
//console.log("imgs:" + href);
51-
let absolutePass = href.indexOf('http') == 0;
52-
let sampledIndex = href.indexOf('../imgs/');
49+
const absolutePass = href.indexOf('http') === 0;
50+
const sampledIndex = href.indexOf('../imgs/');
5351
if (!absolutePass && sampledIndex >= 0) {
5452
href = samplesUrl + href.slice(sampledIndex + ('../').length);
5553
}
56-
let htmlHref = (href != null && href != '') ? ` src="${href}"` : '';
57-
let htmlTitle = (title != null && title != '') ? ` title=${title}` : '';
58-
return `<img${htmlHref}${htmlTitle} />`;
54+
const htmlHref = (href != null && href != '') ? `src="${href}"` : '';
55+
56+
// Marked でサイズを指定する方法
57+
// https://github.com/markedjs/marked/issues/339
58+
let size = '';
59+
if (title) {
60+
sizes = title.split('x');
61+
if (sizes.length === 2) {
62+
size = 'width=' + sizes[0] + ' height=' + sizes[1];
63+
} else {
64+
size = 'width=' + sizes[0];
65+
}
66+
}
67+
68+
return `<img ${htmlHref} ${size} />`;
5969
};
6070
renderer.heading = function (text, level) {
6171
return `<h${level}>${text}</h${level}>`;
6272
};
6373

64-
6574
marked.setOptions({
6675
highlight: function (code) {
6776
return highlightJs.highlightAuto(code).value;
6877
},
6978
renderer: renderer
7079
});
7180

72-
7381
const generateHTML = (dirName, fileName, resolve) => {
7482
fs.readFile('../docs/' + dirName + fileName, 'utf8', (error, text) => {
7583
if (error) {
76-
console.error(error);
7784
return;
7885
}
7986
let articleMarkdown = marked(text);
@@ -134,7 +141,7 @@ const generateHTML = (dirName, fileName, resolve) => {
134141
// テンプレートへの適用
135142
// --------------------------------
136143
articleMarkdown = articleMarkdown.replace(/\<code class\=\"lang-/g, '<code class="hljs ');
137-
const url = `https://ics.media/tutorial-three/${fileRawName}.html`;
144+
const url = `https://ics.media/tutorial-createjs/${fileRawName}.html`;
138145
const values = {
139146
'article-title': articleTitle,
140147
'article-markdown': articleMarkdown,
@@ -145,16 +152,26 @@ const generateHTML = (dirName, fileName, resolve) => {
145152
'article-dateModified-locale': articleModifiedStrLocale,
146153
'url': url
147154
};
148-
149155
if (!templateHtml) {
150-
console.log(templateHtml);
151-
console.error(`Error : ${fileName}`);
156+
console.log(fileName + ' generate error!');
152157
return;
153158
}
154159

155-
156160
const textValue = template(templateHtml, values);
157-
fs.writeFile('../html/' + dirName + fileName.replace('md', 'html'), textValue, (error) => {
161+
162+
// HTMLのminifyを実行
163+
const minifiedHtml = htmlMinifier.minify(textValue, {
164+
sortAttributes: false,
165+
sortClassName: true,
166+
removeComments: true,
167+
removeScriptTypeAttributes: true,
168+
removeStyleLinkTypeAttributes: true,
169+
keepClosingSlash: true,
170+
collapseInlineTagWhitespace: true,
171+
collapseWhitespace: true
172+
});
173+
174+
fs.writeFile('../html/' + dirName + fileName.replace('md', 'html'), minifiedHtml, (error) => {
158175
//console.log(fileName + "- maked");
159176
if (error) {
160177
return;
@@ -164,7 +181,6 @@ const generateHTML = (dirName, fileName, resolve) => {
164181
});
165182
};
166183

167-
168184
fs.readdir('../docs', (err, files) => {
169185
promises.push(new Promise((resolve) => {
170186
mkdirp('../html/', function (err) {
@@ -182,17 +198,12 @@ fs.readdir('../docs', (err, files) => {
182198
resolve();
183199
});
184200
}));
185-
186-
187201
for (let i = 0; i < files.length; i++) {
188-
189-
let filename = files[i];
190-
if (IGNORE_LIST.includes(filename) === false) {
191-
let childPromise = new Promise((resolve) => {
192-
generateHTML('', filename, resolve);
193-
});
194-
promises.push(childPromise);
195-
}
202+
const filename = files[i];
203+
const childPromise = new Promise((resolve) => {
204+
generateHTML('', filename, resolve);
205+
});
206+
promises.push(childPromise);
196207
}
197208
Promise
198209
.all(promises)

tool-generate-htmls/package.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@
44
},
55
"devDependencies": {
66
"highlight.js": "^9.12.0",
7-
"marked": "^0.3.6",
7+
"html-minifier": "^3.5.9",
8+
"marked": "^0.3.16",
89
"mkdirp": "^0.5.1"
910
},
10-
"dependencies": {}
11+
"dependencies": {},
12+
"private": true
1113
}

tool-generate-htmls/template-html.html

Lines changed: 75 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -26,53 +26,49 @@
2626
<meta name="date" content="${article-dateModified}T00:00:00+09:00"/>
2727

2828
<link rel="icon" sizes="16x16 32x32 48x48 128x128 256x256" href="https://ics.media/wp-content/themes/icslab/img/favicon.ico"/>
29-
<link rel="stylesheet" type='text/css' href="styles/css/style.css"/>
30-
<link rel='stylesheet' type='text/css' href='https://fonts.googleapis.com/css?family=Source+Code+Pro'/>
31-
<script src="js/main.js" defer></script>
29+
<script src="js/bundle.js?v=2018-02-23"></script>
3230
</head>
33-
<body class="tutorial">
34-
<div id="container">
35-
<div id="header-always">
36-
<div id="header-wrap">
37-
<h1>
38-
<a href="https://ics.media/"><span class="logoBlog"><img src="imgs/logo-blog.png" alt="ICS MEDIA - インタラクションデザイン×ウェブテクノロジー" width="477" height="26"/></span></a>
39-
</h1>
40-
<nav>
41-
<ul>
42-
<li><a href="https://ics.media/feed/atom" target="_blank"><i class="fa fa-rss"></i></a></li>
43-
<li><a href="https://www.facebook.com/icswebjp" target="_blank"><i class="fa fa-facebook"></i></a></li>
44-
<li><a href="https://twitter.com/icsweb" target="_blank"><i class="fa fa-twitter"></i></a></li>
45-
</ul>
46-
</nav>
47-
</div>
31+
<body class="tutorial theme-light">
4832

49-
<!-- ================================== -->
50-
<!-- パンくず -->
51-
<!-- ================================== -->
52-
<div id="header-breadcrumb">
53-
<div class="wrap">
54-
<ul class="breadcrumb">
55-
<!-- 第1階層 -->
56-
<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb">
57-
<a href="https://ics.media" itemprop="url">
58-
<i class="fa fa-homze"></i> <span itemprop="title">ICS MEDIA</span>
59-
</a>
60-
</li>
61-
62-
<!-- 第2階層 -->
63-
<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb">
64-
<a href="index.html" itemprop="url">
65-
<i class="fa fa-folder-open"></i> <span itemprop="title">WebGL と JavaScript で学ぶ3D表現</span>
66-
</a>
67-
</li>
68-
69-
<!-- 第3階層 -->
70-
<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb">
71-
<i class="fa fa-pencil-square-o"></i> <span itemprop="title">${article-title}</span>
72-
</li>
73-
</ul>
74-
</div>
75-
</div>
33+
<div class="header-title">
34+
<div class="header-title__inner">
35+
<h1>
36+
<a href="https://ics.media/"><span class="logoBlog">ICS MEDIA - インタラクションデザイン×ウェブテクノロジー</span></a>
37+
</h1>
38+
</div>
39+
</div>
40+
41+
<div class="header-breadcrumb">
42+
<!-- ================================== -->
43+
<!-- パンくず -->
44+
<!-- ================================== -->
45+
<div class="header-breadcrumb__inner">
46+
<ul>
47+
<!-- 第1階層 -->
48+
<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb">
49+
<a href="https://ics.media" itemprop="url">
50+
<i class="fa fa-homze"></i> <span itemprop="title">ICS MEDIA</span>
51+
</a>
52+
</li>
53+
54+
<!-- 第2階層 -->
55+
<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb">
56+
<a href="index.html" itemprop="url">
57+
<i class="fa fa-folder-open"></i> <span itemprop="title">WebGL と JavaScript で学ぶ3D表現</span>
58+
</a>
59+
</li>
60+
61+
<!-- 第3階層 -->
62+
<li itemscope itemtype="http://data-vocabulary.org/Breadcrumb">
63+
<i class="fa fa-pencil-square-o"></i> <span itemprop="title">${article-title}</span>
64+
</li>
65+
</ul>
66+
67+
<nav>
68+
<span class="header-breadcrumb__theme">配色を選択</span>
69+
<button id="btn-theme-light" class="btn-theme" aria-checked="true" aria-label="明るい配色"></button>
70+
<button id="btn-theme-dark" class="btn-theme" aria-checked="false" aria-label="暗めの配色"></button>
71+
</nav>
7672
</div>
7773
</div>
7874

@@ -162,66 +158,66 @@ <h1 itemprop="name">${article-title}</h1>
162158

163159
</article>
164160

165-
<div id="footer-bottom" class="cf">
166-
<div id="footer-menu-container" class="default">
167-
<div class="footer-menu">
168-
<div id="footer-menu-inside">
169-
<nav>
170-
<ul id="footer-menu">
171-
<li><a href="https://ics.media/feed/atom" target="_blank"><i class="fa fa-rss fa-3"></i> RSS</a> </li>
172-
<li><a href="https://www.facebook.com/icswebjp" target="_blank"><i class="fa fa-facebook-square fa-3"></i> Facebook</a></li>
173-
<li><a href="https://twitter.com/icsweb" target="_blank"><i class="fa fa-twitter-square fa-3"></i> Twitter</a></li>
174-
<li><a href="http://ics-web.jp/blog/recruit" target="_blank">採用情報</a></li>
175-
<li><a href="http://ics-web.jp/blog/contact" target="_blank">お問い合わせ</a></li>
176-
</ul>
177-
</nav>
178-
</div>
179-
</div>
161+
162+
<div class="footer-message">
163+
<div class="footer-message__inner">
164+
<p>CreateJS 入門サイトは ICS MEDIA が運営しています</p>
165+
<ul>
166+
<li><a target="_blank" href="https://www.facebook.com/icswebjp"><i class="fa fa-facebook-square fa-3"></i>
167+
Facebook</a></li>
168+
<li><a target="_blank" href="https://twitter.com/icsweb"><i class="fa fa-twitter-square fa-3"></i>
169+
Twitter</a>
170+
</li>
171+
<li><a target="_blank" href="http://ics-web.jp/blog/recruit">採用情報</a></li>
172+
<li><a target="_blank" href="http://ics-web.jp/blog/contact">お問い合わせ</a></li>
173+
</ul>
180174
</div>
175+
</div>
181176

182-
<div class="footer-sections cf">
177+
<div class="footer-detail">
178+
<div class="footer-detail__sections">
183179

184-
<div class="footer-section large">
185-
<p class="widget_title">Three.jsのサンプル/事例</p>
180+
<div class="footer-detail__section">
181+
<h2>Three.jsのサンプル/事例</h2>
186182

187183
<p>作例をみてThree.jsで実現可能な表現のインスピレーションを得ましょう。</p>
188184
<ul>
189-
<li><a target="_blank" href="https://threejs.org/examples/"><i class="fa fa-external-link"></i> examples</a></li>
185+
<li><a target="_blank" rel="noopener" href="https://threejs.org/examples/">examples</a></li>
190186
</ul>
191187

192-
<p class="widget_title">Three.jsの公式リファレンス</p>
188+
<h2>Three.jsの公式リファレンス</h2>
193189
<ul>
194-
<li><a target="_blank" href="https://threejs.org/docs/"><i class="fa fa-external-link"></i>
195-
Three.js docs (英語)</a></li>
190+
<li><a target="_blank" rel="noopener" href="https://threejs.org/docs/"> Three.js docs (英語)</a></li>
196191
</ul>
197192
</div>
198193

199-
<div class="footer-section large">
200-
<p class="widget_title">Three.jsの情報源</p>
194+
<div class="footer-detail__section">
195+
<h2>Three.jsの情報源</h2>
201196
<p>わからないことがあれば、フォーラムや勉強会を調べてみましょう。</p>
202197
<ul>
203-
<li><a target="_blank" href="https://qiita.com/tags/three.js/items"><i class="fa fa-external-link"></i> Qiita 技術情報共有サービス</a></li>
204-
<li><a target="_blank" href="http://eventdots.jp/event/search?keyword=three.js&amp;pref=&amp;from=&amp;to=&amp;sort=started_desc"><i class="fa fa-external-link"></i> 勉強会・イベント一覧 (dots)</a></li>
198+
<li><a target="_blank" rel="noopener" href="https://qiita.com/tags/three.js/items">Qiita 技術情報共有サービス</a></li>
199+
<li><a target="_blank" rel="noopener" href="http://eventdots.jp/event/search?keyword=three.js&amp;pref=&amp;from=&amp;to=&amp;sort=started_desc">勉強会・イベント一覧 (dots)</a></li>
205200
</ul>
206201
</div>
207202

208-
<div class="footer-section large">
209-
<p class="widget_title">WebGLのオススメサイト</p>
203+
<div class="footer-detail__section">
204+
<h2>WebGLのオススメサイト</h2>
210205
<ul>
211-
<li><a target="_blank" href="https://webgl.souhonzan.org/"><i class="fa fa-external-link"></i> WebGL 総本山</a></li>
212-
<li><a target="_blank" href="https://wgld.org/"><i class="fa fa-external-link"></i> WebGL 開発支援サイト wgld.org</a></li>
213-
<li><a target="_blank" href="https://www.lynda.jp/courses/learning-three-js"><i class="fa fa-external-link"></i> three.js 入門 - Lynda.com</a></li>
206+
<li><a target="_blank" rel="noopener" href="https://webgl.souhonzan.org/">WebGL 総本山</a></li>
207+
<li><a target="_blank" rel="noopener" href="https://wgld.org/">WebGL 開発支援サイト wgld.org</a></li>
208+
<li><a target="_blank" rel="noopener" href="https://www.lynda.jp/courses/learning-three-js">three.js 入門 - Lynda.com</a></li>
214209
</ul>
215210

216-
<p class="widget_title">姉妹サイト</p>
211+
<h2>姉妹サイト</h2>
217212
<ul>
218-
<li><a target="_blank" href="https://ics.media/tutorial-createjs/index.html"><i class="fa fa-external-link"></i> CreateJS入門サイト</a></li>
213+
<li><a target="_blank" rel="noopener" href="https://ics.media/tutorial-createjs/index.html">CreateJS入門サイト</a></li>
219214
</ul>
215+
220216
</div>
221217

222218
</div>
223219

224-
<div id="copyright">Copyright &copy; 2017 ICS INC. All Rights Reserved.</div>
220+
<address class="footer-detail__copyright">Copyright &copy; 2018 ICS INC. All Rights Reserved.</address>
225221
</div>
226222
</body>
227223
</html>

0 commit comments

Comments
 (0)