Merge pull request #4 from patarapolw/next

Based on Nuxt
This commit is contained in:
polv authored and GitHub committed 2020-12-16 16:42:29 +07:00
commit 6c88578fd3
90 files changed
+12420 -895

No files matched your search

+4
View File
@@ -0,0 +1,4 @@
#!/usr/bin/zsh
# current directory is always `.git/..` root
# echo $PWD
-3
View File
@@ -1,3 +0,0 @@
[submodule "template"]
path = template
url = git@github.com:patarapolw/nuxt-blog-template.git
-4
View File
@@ -1,4 +0,0 @@
{
"no-inline-html": false,
"line-length": false
}
+9
View File
@@ -0,0 +1,9 @@
{
"editor.defaultFormatter": "rvest.vs-code-prettier-eslint",
"editor.formatOnSave": true,
"files.associations": {
".env.*": "dotenv"
},
"whitespacepp.backColorWS": "",
"editor.tabSize": 4
}
File renamed without changes.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

@@ -1,6 +1,6 @@
--- ---
title: "千字文" title: "千字文"
date: "2019-08-10" date: 2019-08-10T00:00:00+07:00
tag: tag:
- 千字文 - 千字文
- 汉字 - 汉字
@@ -1,6 +1,6 @@
--- ---
title: "句子 1.1" title: "句子 1.1"
date: "2019-08-16 01:00" date: 2019-08-16T01:00:00+07:00
tag: tag:
- 千字文 - 千字文
- 句子 - 句子
@@ -1,6 +1,6 @@
--- ---
title: "句子 1.2" title: "句子 1.2"
date: "2019-08-17 01:00" date: 2019-08-17T01:00:00+07:00
tag: tag:
- 千字文 - 千字文
- 句子 - 句子
@@ -1,6 +1,6 @@
--- ---
title: "句子 1.3" title: "句子 1.3"
date: "2019-08-17 02:00" date: 2019-08-17T02:00:00+07:00
tag: tag:
- 千字文 - 千字文
- 句子 - 句子
@@ -1,6 +1,6 @@
--- ---
title: "身体1" title: "身体1"
date: "2019-08-18 01:00" date: 2019-08-18T01:00:00+07:00
tag: tag:
- 分类词汇 - 分类词汇
- 身体 - 身体
@@ -1,6 +1,6 @@
--- ---
title: "Learning Chinese using Git -- ZhLab" title: "Learning Chinese using Git -- ZhLab"
date: "2019-09-25" date: 2019-09-25T00:00:00+07:00
tag: tag:
- diary - diary
--- ---
@@ -1,6 +1,6 @@
--- ---
title: "Fruit and vegetables quiz" title: "Fruit and vegetables quiz"
date: "2019-09-30" date: 2019-09-30T00:00:00+07:00
image: https://images.chinatimes.com/newsphoto/2018-12-31/900/20181231000035.jpg image: https://images.chinatimes.com/newsphoto/2018-12-31/900/20181231000035.jpg
tag: tag:
- quiz - quiz
@@ -1,6 +1,6 @@
--- ---
title: "Move to new URL notice" title: "Move to new URL notice"
date: "2019-10-07" date: 2019-10-07T00:00:00+07:00
tag: tag:
- diary - diary
--- ---
@@ -1,6 +1,6 @@
--- ---
title: "Chinese from Emoji 1: 学习用品" title: "Chinese from Emoji 1: 学习用品"
date: 2019-11-26 date: 2019-11-26T00:00:00+07:00
image: https://encrypted-tbn0.gstatic.com/images?q=tbn%3AANd9GcQpaKJKlp3UhF_S-Q5sPWmLnKhwb8Ey0sqA7ersas1OJcAgZFzB image: https://encrypted-tbn0.gstatic.com/images?q=tbn%3AANd9GcQpaKJKlp3UhF_S-Q5sPWmLnKhwb8Ey0sqA7ersas1OJcAgZFzB
tag: tag:
- vocab - vocab
@@ -1,6 +1,6 @@
--- ---
title: "Chinese from Emoji 2: 陆地动物" title: "Chinese from Emoji 2: 陆地动物"
date: 2019-11-27 date: 2019-11-27T00:00:00+07:00
image: https://encrypted-tbn0.gstatic.com/images?q=tbn%3AANd9GcQpaKJKlp3UhF_S-Q5sPWmLnKhwb8Ey0sqA7ersas1OJcAgZFzB image: https://encrypted-tbn0.gstatic.com/images?q=tbn%3AANd9GcQpaKJKlp3UhF_S-Q5sPWmLnKhwb8Ey0sqA7ersas1OJcAgZFzB
tag: tag:
- vocab - vocab
@@ -1,6 +1,6 @@
--- ---
title: Moving to Netlify title: Moving to Netlify
date: 2019-11-25 date: 2019-11-25T00:00:00+07:00
tag: tag:
- diary - diary
--- ---
@@ -1,6 +1,6 @@
--- ---
title: Back to former glory title: Back to former glory
date: 2019-12-07 date: 2019-12-07T00:00:00+07:00
tag: tag:
- vuetify - vuetify
- resources - resources
@@ -1,6 +1,6 @@
--- ---
title: "Chinese from Emoji 3: 水生和昆虫" title: "Chinese from Emoji 3: 水生和昆虫"
date: 2019-12-08 date: 2019-12-08T00:00:00+07:00
image: https://steamuserimages-a.akamaihd.net/ugc/264973755082472713/B44953104F4F5FBB70205CCCD759E511C0E50E52/ image: https://steamuserimages-a.akamaihd.net/ugc/264973755082472713/B44953104F4F5FBB70205CCCD759E511C0E50E52/
tag: tag:
- vocab - vocab
@@ -1,12 +1,12 @@
--- ---
title: 我和你 - Another song I always hear. title: 我和你 - Another song I always hear.
date: 2020-02-26 date: 2020-02-26T00:00:00+07:00
tag: tag:
- 邓丽君 - 邓丽君
- song - song
--- ---
<iframe width="560" height="315" src="https://www.youtube.com/embed/z0tCpDY2Ong" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> <%- youtube('z0tCpDY2Ong') %>
<!-- excerpt --> <!-- excerpt -->
@@ -1,22 +1,18 @@
--- ---
title: ZhLevel Level 1 title: ZhLevel Level 1
date: 2020-03-23 date: 2020-03-23T00:00:00+07:00
tag: tag:
- zhlevel - zhlevel
--- ---
Comes from my old repository [here](https://github.com/patarapolw/zhlevel/blob/master/resources/level/hanzi.json). Comes from my old repository [here](https://github.com/patarapolw/zhlevel/blob/master/resources/level/hanzi.json).
```pug parsed <%- xCard({
a(data-make-html="card" href="https://github.com/patarapolw/zhlevel/blob/master/resources/level/hanzi.json") href: "https://github.com/patarapolw/zhlevel/blob/master/resources/level/hanzi.json",
| https://github.com/patarapolw/zhlevel/blob/master/resources/level/hanzi.json image: "https://avatars3.githubusercontent.com/u/21255931?s=400&v=4",
pre(data-template style="display: none;"). title: "patarapolw/zhlevel",
image: 'https://avatars3.githubusercontent.com/u/21255931?s=400&v=4' description: "Learn Chinese from sentences, Tatoeba, or use your own sentences - patarapolw/zhlevel - /resources/level/hanzi.json"
title: patarapolw/zhlevel })%>
description: >-
Learn Chinese from sentences, Tatoeba, or use your own sentences -
patarapolw/zhlevel - /resources/level/hanzi.json
```
Level One Level One
@@ -51,15 +47,11 @@ Level One
According to <https://github.com/patarapolw/zhlevel/blob/master/resources/level/hsk.yaml> According to <https://github.com/patarapolw/zhlevel/blob/master/resources/level/hsk.yaml>
```pug parsed <%- xCard({
a(data-make-html="card" href="https://github.com/patarapolw/zhlevel/blob/master/resources/level/hsk.yaml") href: 'https://github.com/patarapolw/zhlevel/blob/master/resources/level/hsk.yaml',
| https://github.com/patarapolw/zhlevel/blob/master/resources/level/hsk.yaml image: 'https://avatars3.githubusercontent.com/u/21255931?s=400&v=4',
pre(data-template style="display: none;"). title: 'patarapaolw/zhlevel',
image: 'https://avatars3.githubusercontent.com/u/21255931?s=400&v=4' description: 'Learn Chinese from sentences, Tatoeba, or use your own sentences - patarapolw/zhlevel - /resources/level/hsk.yaml'
title: patarapolw/zhlevel }) %>
description: >-
Learn Chinese from sentences, Tatoeba, or use your own sentences -
patarapolw/zhlevel - /resources/level/hsk.yaml
```
爱, 八, 爸爸, 杯子, 北京, 本, 不, 不客气, 菜, 茶, 吃, 出租车, 打电话, 大, 的, 点, 电脑, 电视, 电影, 东西, 都, 读, 对不起, 多, 多少, 儿子, 二, 饭店, 飞机, 分钟 爱, 八, 爸爸, 杯子, 北京, 本, 不, 不客气, 菜, 茶, 吃, 出租车, 打电话, 大, 的, 点, 电脑, 电视, 电影, 东西, 都, 读, 对不起, 多, 多少, 儿子, 二, 饭店, 飞机, 分钟
@@ -1,6 +1,6 @@
--- ---
title: ZhLevel Level 2 title: ZhLevel Level 2
date: 2020-03-23 date: 2020-03-23T01:00:00+07:00
tag: tag:
- zhlevel - zhlevel
--- ---
@@ -1,6 +1,6 @@
--- ---
title: ZhLevel Level 3 title: ZhLevel Level 3
date: 2020-03-25 date: 2020-03-25T00:00:00+07:00
tag: tag:
- zhlevel - zhlevel
--- ---
+53
View File
@@ -0,0 +1,53 @@
---
title: 千里之外
date: 2020-04-20T00:00:00+07:00
tag:
- song
---
<%- youtube('ocDo3ySyHSI') %>
<!-- excerpt -->
## 周杰伦
### 千里之外(& 费玉清)
作词:方文山 \
作曲:周杰伦
(周)屋簷如悬崖 风铃如沧海 我等燕归来 \
时间被安排 演一场意外 妳悄然走开 \
故事在城外 浓雾散不开 看不清对白 \
妳听不出来 风声不存在 是我在感慨 \
梦醒来 是谁在窗台 把结局打开 \
那薄如蝉翼的未来 禁不起谁来拆
(费)我送你离开 千里之外 你无声黑白 \
沉默年代 或许不该 太遥远的相爱 \
我送妳离开 天涯之外 妳是否还在 \
琴声何来 生死难猜 用一生 去等待
(周)闻泪声入林 寻梨花白 只得一行青苔 \
天在山之外 雨落花台 我两鬓斑白 \
闻泪声入林 寻梨花白 只得一行青苔 \
天在山之外 雨落花台 我等妳来
更多更详尽歌词 在 ※ Mojim.com 魔镜歌词网 \
(费)一身琉璃白 透明著尘埃 妳无瑕的爱 \
妳从雨中来 诗化了悲哀 我淋湿现在
(周)芙蓉水面采 船行影犹在 妳却不回来 \
被岁月覆蓋 妳说的花开 过去成空白
(费)梦醒来 是谁在窗台 把结局打开 \
(周)那薄如蝉翼的未来 \
(周)禁不起谁来拆 \
(费)我送你离开 千里之外 你无声黑白 沉默年代 或许不该 太遥远的相爱 \
(周)我送妳离开 天涯之外 妳是否还在 琴声何来 生死难猜 用一生 \
(费)我送妳离开 千里之外 妳无声黑白 沉默年代 或许不该 太遥远的相爱 \
(周)我送妳离开 天涯之外 \
(周)妳是否还在 \
(周)琴声何来 \
(费)生死难猜 \
(合)用一生去等待
@@ -1,11 +1,11 @@
--- ---
title: 祝福 title: 祝福
date: 2020-04-18 date: 2020-04-18T00:00:00+07:00
tag: tag:
- song - song
--- ---
<iframe width="560" height="315" src="https://www.youtube.com/embed/ZuJM8AOivYU" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> <%- youtube('ZuJM8AOivYU') %>
<!-- excerpt --> <!-- excerpt -->
@@ -13,31 +13,31 @@ tag:
## 祝福 ## 祝福
作词:丁晓雯 作词:丁晓雯 \
作曲:郭子 作曲:郭子 \
编曲:王豫民 编曲:王豫民 \
不要问 不要说 一切尽在不言中 不要问 不要说 一切尽在不言中 \
这一刻 偎著烛光 让我们静静的渡过 这一刻 偎著烛光 让我们静静的渡过 \
莫挥手 莫回头 当我唱起这首歌 怕只怕 泪水轻轻的滑落 莫挥手 莫回头 当我唱起这首歌 怕只怕 泪水轻轻的滑落 \
愿心中永远留着我的笑容 伴你走过每一个春夏秋冬 愿心中永远留着我的笑容 伴你走过每一个春夏秋冬
几许愁 几许忧 人生难免苦与痛 几许愁 几许忧 人生难免苦与痛 \
失去过 才能真正懂得去珍惜和拥有 失去过 才能真正懂得去珍惜和拥有 \
情难舍 人难留 今朝一别各西东 冷和热 点点滴滴在心头 情难舍 人难留 今朝一别各西东 冷和热 点点滴滴在心头 \
愿心中永远留着我的笑容 伴你走过每一个春夏秋冬 愿心中永远留着我的笑容 伴你走过每一个春夏秋冬
*伤离别 离别虽然在眼前 说再见 再见不会太遥远 *伤离别 离别虽然在眼前 说再见 再见不会太遥远 \
更多更详尽歌词 更多更详尽歌词 \
 若有缘 有缘就能期待明天 你和我重逢在灿烂的季节  若有缘 有缘就能期待明天 你和我重逢在灿烂的季节
Repeat * Repeat *
伤离别 离别虽然在眼前 说再见 再见不会太遥远 伤离别 离别虽然在眼前 说再见 再见不会太遥远 \
伤离别 离别虽然在眼前 说再见 再见不会太遥远 伤离别 离别虽然在眼前 说再见 再见不会太遥远 \
若有缘 有缘就能期待明天 你和我重逢在灿烂的季节 若有缘 有缘就能期待明天 你和我重逢在灿烂的季节
不要问 不要说 一切尽在不言中 不要问 不要说 一切尽在不言中 \
这一刻 偎著烛光 让我们静静的渡过 这一刻 偎著烛光 让我们静静的渡过 \
莫挥手 莫回头 当我唱起这首歌 莫挥手 莫回头 当我唱起这首歌 \
愿心中留着笑容 陪你度过每个春夏秋冬 愿心中留着笑容 陪你度过每个春夏秋冬
+26
View File
@@ -0,0 +1,26 @@
---
title: 虫儿飞
date: 2020-04-10T00:00:00+07:00
tag:
- song
---
<%- youtube('4CazJNOLoM0') %>
<!-- excerpt -->
黑黑的天空低垂 \
亮亮的繁星相随 \
虫儿飞 虫儿飞 \
你在思念谁
天上的星星流泪 \
地上的玫瑰枯萎 \
冷风吹 冷风吹 \
只要有你陪
虫儿飞 花儿睡 \
一双又一对才美 \
不怕天黑 只怕心碎 \
不管累不累 \
也不管东南西北
+90
View File
@@ -0,0 +1,90 @@
---
title: "千字文 - 1/1"
date: 2019-08-11T00:00:00+07:00
tag:
- 千字文
- 汉字
---
<div class="w-100 mt-3">
<h3 class="text-center">天地玄黃,宇宙洪荒。</h3>
</div>
<div class="w-100">
<figure class="d-inline-block">
<img src="https://upload.wikimedia.org/wikipedia/commons/a/ab/天-order.gif" height="100" />
<figcaption class="text-center">tian1</figcaption>
</figure>
<figure class="d-inline-block">
<img src="https://upload.wikimedia.org/wikipedia/commons/f/fb/地-order.gif" height="100" />
<figcaption class="text-center">di4</figcaption>
</figure>
<figure class="d-inline-block">
<img src="https://upload.wikimedia.org/wikipedia/commons/d/d3/玄-order.gif" height="100" />
<figcaption class="text-center">xuan2</figcaption>
</figure>
<figure class="d-inline-block">
<img src="https://upload.wikimedia.org/wikipedia/commons/e/e7/黄-order.gif" height="100" />
<figcaption class="text-center">huang2</figcaption>
</figure>
</div>
<div class="w-100">
<figure class="d-inline-block">
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/23431.gif" height="100" />
<figcaption class="text-center">yu3</figcaption>
</figure>
<figure class="d-inline-block">
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/23449.gif" height="100" />
<figcaption class="text-center">zhou4</figcaption>
</figure>
<figure class="d-inline-block">
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/27946.gif" height="100" />
<figcaption class="text-center">hong2</figcaption>
</figure>
<figure class="d-inline-block">
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/33618.gif" height="100" />
<figcaption class="text-center">huang1</figcaption>
</figure>
</div>
<style>
img[height="100"] {
height: 100px;
}
figure {
margin: 0;
}
.w-100 {
width: 100%;
}
.mt-3 {
margin-top: 0.75rem;
}
.d-inline-block {
display: inline-block;
}
.text-center {
text-align: center;
}
table td:first-child {
width: 10em;
}
</style>
<!-- excerpt_separator -->
| | | |
| --- | --- | --- |
宇宙 | yǔzhòu | universe / cosmos
宇航 | yǔháng | space flight
宇航员 | yǔhángyuán | astronaut
宇宙飞船 | yǔzhòufēichuán | spacecraft
防洪 | fánghóng | flood control / flood prevention
山洪 | shānhóng | mountain flash flood / mountain torrent
荒 | huāng | desolate / shortage / scarce / out of practice / absurd / uncultivated / to neglect
荒野 | huāngyě | wilderness
@@ -1,41 +1,50 @@
--- ---
title: "千字文 - 1/2" title: "千字文 - 1/2"
date: "2019-08-12" createdAt: 2019-08-12T00:00:00+07:00
tag: tag:
- 千字文 - 千字文
- 汉字 - 汉字
--- ---
```pug parsed <div class="w-100 mt-3">
.w-100.mt-3 <h3 class="text-center">日月盈昃,辰宿列張。</h3>
h3.text-center 日月盈昃,辰宿列張。 </div>
.w-100 <div class="w-100">
figure.d-inline-block <figure class="d-inline-block">
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/26085.gif" height=100 data-no-cache) <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/26085.gif" height="100" />
figcaption.text-center ri4 <figcaption class="text-center">ri4</figcaption>
figure.d-inline-block </figure>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/26376.gif" height=100 data-no-cache) <figure class="d-inline-block">
figcaption.text-center yue4 <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/26376.gif" height="100" />
figure.d-inline-block <figcaption class="text-center">yue4</figcaption>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/30408.gif" height=100 data-no-cache) </figure>
figcaption.text-center ying2 <figure class="d-inline-block">
figure.d-inline-block.text-center <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/30408.gif" height="100" />
.hanzi-img 昃 <figcaption class="text-center">ying2</figcaption>
figcaption ze4 </figure>
.w-100 <figure class="d-inline-block text-center">
figure.d-inline-block <div class="hanzi-img">昃</div>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/36784.gif" height=100 data-no-cache) <figcaption>ze4</figcaption>
figcaption.text-center chen2 </figure>
figure.d-inline-block </div>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/23487.gif" height=100 data-no-cache) <div class="w-100">
figcaption.text-center su4 <figure class="d-inline-block">
figure.d-inline-block <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/36784.gif" height="100" />
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/21015.gif" height=100 data-no-cache) <figcaption class="text-center">chen2</figcaption>
figcaption.text-center lie2 </figure>
figure.d-inline-block <figure class="d-inline-block">
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/24373.gif" height=100 data-no-cache) <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/23487.gif" height="100" />
figcaption.text-center zhang1 <figcaption class="text-center">su4</figcaption>
``` </figure>
<figure class="d-inline-block">
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/21015.gif" height="100" />
<figcaption class="text-center">lie2</figcaption>
</figure>
<figure class="d-inline-block">
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/24373.gif" height="100" />
<figcaption class="text-center">zhang1</figcaption>
</figure>
</div>
<style> <style>
img[height="100"] { img[height="100"] {
@@ -1,41 +1,51 @@
--- ---
title: "千字文 - 1/3" title: "千字文 - 1/3"
date: "2019-08-13" createdAt: 2019-10-08T00:00:00+07:00
tag: tag:
- 千字文 - 千字文
- 汉字 - 汉字
--- ---
```pug parsed
.w-100.mt-3 <div class="w-100 mt-3">
h3.text-center 寒來暑往,秋收冬藏。 <h3 class="text-center">寒來暑往,秋收冬藏。</h3>
.w-100 </div>
figure.d-inline-block <div class="w-100">
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/23506.gif" height=100 data-no-cache) <figure class="d-inline-block">
figcaption.text-center han2 <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/23506.gif" height="100" />
figure.d-inline-block <figcaption class="text-center">han2</figcaption>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/20358.gif" height=100 data-no-cache) </figure>
figcaption.text-center lai2 <figure class="d-inline-block">
figure.d-inline-block <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/20358.gif" height="100" />
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/26257.gif" height=100 data-no-cache) <figcaption class="text-center">lai2</figcaption>
figcaption.text-center shu3 </figure>
figure.d-inline-block <figure class="d-inline-block">
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/24448.gif" height=100 data-no-cache) <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/26257.gif" height="100" />
figcaption.text-center wang3 <figcaption class="text-center">shu3</figcaption>
.w-100 </figure>
figure.d-inline-block <figure class="d-inline-block">
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/31179.gif" height=100 data-no-cache) <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/24448.gif" height="100" />
figcaption.text-center qiu1 <figcaption class="text-center">wang3</figcaption>
figure.d-inline-block </figure>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/25910.gif" height=100 data-no-cache) </div>
figcaption.text-center shou1 <div class="w-100">
figure.d-inline-block <figure class="d-inline-block">
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/20908.gif" height=100 data-no-cache) <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/31179.gif" height="100" />
figcaption.text-center dong1 <figcaption class="text-center">qiu1</figcaption>
figure.d-inline-block </figure>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/34255.gif" height=100 data-no-cache) <figure class="d-inline-block">
figcaption.text-center cang2 <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/25910.gif" height="100" />
``` <figcaption class="text-center">shou1</figcaption>
</figure>
<figure class="d-inline-block">
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/20908.gif" height="100" />
<figcaption class="text-center">dong1</figcaption>
</figure>
<figure class="d-inline-block">
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/34255.gif" height="100" />
<figcaption class="text-center">cang2</figcaption>
</figure>
</div>
<style> <style>
img[height="100"] { img[height="100"] {
@@ -1,41 +1,51 @@
--- ---
title: "千字文 - 1/4" title: "千字文 - 1/4"
date: "2019-08-14" createdAt: 2019-08-14T00:00:00+07:00
tag: tag:
- 千字文 - 千字文
- 汉字 - 汉字
--- ---
```pug parsed
.w-100.mt-3 <div class="w-100 mt-3">
h3.text-center 閏餘成歲,律呂調陽。 <h3 class="text-center">閏餘成歲,律呂調陽。</h3>
.w-100 </div>
figure.d-inline-block <div class="w-100">
.hanzi-img 閏 <figure class="d-inline-block">
figcaption.text-center run4 <div class="hanzi-img">閏</div>
figure.d-inline-block <figcaption class="text-center">run4</figcaption>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/39192.gif" height=100 data-no-cache) </figure>
figcaption.text-center yu2 <figure class="d-inline-block">
figure.d-inline-block <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/39192.gif" height="100"/>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/25104.gif" height=100 data-no-cache) <figcaption class="text-center">yu2</figcaption>
figcaption.text-center cheng2 </figure>
figure.d-inline-block <figure class="d-inline-block">
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/27506.gif" height=100 data-no-cache) <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/25104.gif" height="100"/>
figcaption.text-center sui4 <figcaption class="text-center">cheng2</figcaption>
.w-100 </figure>
figure.d-inline-block <figure class="d-inline-block">
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/24459.gif" height=100 data-no-cache) <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/27506.gif" height="100"/>
figcaption.text-center lu:4 <figcaption class="text-center">sui4</figcaption>
figure.d-inline-block </figure>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/21570.gif" height=100 data-no-cache) </div>
figcaption.text-center lu:3 <div class="w-100">
figure.d-inline-block <figure class="d-inline-block">
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/35519.gif" height=100 data-no-cache) <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/24459.gif" height="100"/>
figcaption.text-center diao4 <figcaption class="text-center">lu:4</figcaption>
figure.d-inline-block </figure>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/38525.gif" height=100 data-no-cache) <figure class="d-inline-block">
figcaption.text-center yang2 <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/21570.gif" height="100"/>
``` <figcaption class="text-center">lu:3</figcaption>
</figure>
<figure class="d-inline-block">
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/35519.gif" height="100"/>
<figcaption class="text-center">diao4</figcaption>
</figure>
<figure class="d-inline-block">
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/38525.gif" height="100"/>
<figcaption class="text-center">yang2</figcaption>
</figure>
</div>
<style> <style>
img[height="100"] { img[height="100"] {
@@ -1,41 +1,50 @@
--- ---
title: "千字文 - 1/5" title: "千字文 - 1/5"
date: "2019-08-15" createdAt: 2019-08-15T00:00:00+07:00
tag: tag:
- 千字文 - 千字文
- 汉字 - 汉字
--- ---
```pug parsed <div class="w-100 mt-3">
.w-100.mt-3 <h3 class="text-center">雲騰致雨,露結為霜。</h3>
h3.text-center 雲騰致雨,露結為霜。 </div>
.w-100 <div class="w-100">
figure.d-inline-block <figure class="d-inline-block">
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/38642.gif" height=100 data-no-cache) <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/38642.gif" height="100" />
figcaption.text-center yun2 <figcaption class="text-center">yun2</figcaption>
figure.d-inline-block </figure>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/39472.gif" height=100 data-no-cache) <figure class="d-inline-block">
figcaption.text-center teng2 <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/39472.gif" height="100" />
figure.d-inline-block <figcaption class="text-center">teng2</figcaption>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/33268.gif" height=100 data-no-cache) </figure>
figcaption.text-center zhi4 <figure class="d-inline-block">
figure.d-inline-block <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/33268.gif" height="100" />
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/38632.gif" height=100 data-no-cache) <figcaption class="text-center">zhi4</figcaption>
figcaption.text-center yu3 </figure>
.w-100 <figure class="d-inline-block">
figure.d-inline-block <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/38632.gif" height="100" />
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/38706.gif" height=100 data-no-cache) <figcaption class="text-center">yu3</figcaption>
figcaption.text-center lu4 </figure>
figure.d-inline-block </div>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/32080.gif" height=100 data-no-cache) <div class="w-100">
figcaption.text-center jie2 <figure class="d-inline-block">
figure.d-inline-block <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/38706.gif" height="100" />
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/28858.gif" height=100 data-no-cache) <figcaption class="text-center">lu4</figcaption>
figcaption.text-center wei4 </figure>
figure.d-inline-block <figure class="d-inline-block">
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/38684.gif" height=100 data-no-cache) <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/32080.gif" height="100" />
figcaption.text-center shuang1 <figcaption class="text-center">jie2</figcaption>
``` </figure>
<figure class="d-inline-block">
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/28858.gif" height="100" />
<figcaption class="text-center">wei4</figcaption>
</figure>
<figure class="d-inline-block">
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/38684.gif" height="100" />
<figcaption class="text-center">shuang1</figcaption>
</figure>
</div>
<style> <style>
img[height="100"] { img[height="100"] {
@@ -1,41 +1,50 @@
--- ---
title: "千字文 - 1/6" title: "千字文 - 1/6"
date: "2019-08-16" createdAt: 2019-08-16T00:00:00+07:00
tag: tag:
- 千字文 - 千字文
- 汉字 - 汉字
--- ---
```pug parsed <div class="w-100 mt-3">
.w-100.mt-3 <h3 class="text-center">金生麗水,玉出崑岡。</h3>
h3.text-center 金生麗水,玉出崑岡。 </div>
.w-100 <div class="w-100">
figure.d-inline-block <figure class="d-inline-block">
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/37329.gif" height=100 data-no-cache) <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/37329.gif" height="100" />
figcaption.text-center jin1 <figcaption class="text-center">jin1</figcaption>
figure.d-inline-block </figure>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/29983.gif" height=100 data-no-cache) <figure class="d-inline-block">
figcaption.text-center sheng1 <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/29983.gif" height="100" />
figure.d-inline-block <figcaption class="text-center">sheng1</figcaption>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/40599.gif" height=100 data-no-cache) </figure>
figcaption.text-center li4 <figure class="d-inline-block">
figure.d-inline-block <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/40599.gif" height="100" />
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/27700.gif" height=100 data-no-cache) <figcaption class="text-center">li4</figcaption>
figcaption.text-center shui3 </figure>
.w-100 <figure class="d-inline-block">
figure.d-inline-block <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/27700.gif" height="100" />
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/29577.gif" height=100 data-no-cache) <figcaption class="text-center">shui3</figcaption>
figcaption.text-center yu4 </figure>
figure.d-inline-block </div>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/20986.gif" height=100 data-no-cache) <div class="w-100">
figcaption.text-center chu1 <figure class="d-inline-block">
figure.d-inline-block <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/29577.gif" height="100" />
.hanzi-img 崑 <figcaption class="text-center">yu4</figcaption>
figcaption.text-center kun1 </figure>
figure.d-inline-block <figure class="d-inline-block">
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/23713.gif" height=100 data-no-cache) <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/20986.gif" height="100" />
figcaption.text-center gang1 <figcaption class="text-center">chu1</figcaption>
``` </figure>
<figure class="d-inline-block">
<div class="hanzi-img">崑</div>
<figcaption class="text-center">kun1</figcaption>
</figure>
<figure class="d-inline-block">
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/23713.gif" height="100" />
<figcaption class="text-center">gang1</figcaption>
</figure>
</div>
<style> <style>
img[height="100"] { img[height="100"] {
@@ -1,41 +1,50 @@
--- ---
title: "千字文 - 1/7" title: "千字文 - 1/7"
date: "2019-08-17" createdAt: 2019-08-17T00:00:00+07:00
tag: tag:
- 千字文 - 千字文
- 汉字 - 汉字
--- ---
```pug parsed <div class="w-100 mt-3">
.w-100.mt-3 <h3 class="text-center">劍號巨闕,珠稱夜光。</h3>
h3.text-center 劍號巨闕,珠稱夜光。 </div>
.w-100 <div class="w-100">
figure.d-inline-block <figure class="d-inline-block">
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/21133.gif" height=100 data-no-cache) <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/21133.gif" height="100" />
figcaption.text-center jian4 <figcaption class="text-center">jian4</figcaption>
figure.d-inline-block </figure>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/34399.gif" height=100 data-no-cache) <figure class="d-inline-block">
figcaption.text-center hao4 <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/34399.gif" height="100" />
figure.d-inline-block <figcaption class="text-center">hao4</figcaption>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/24040.gif" height=100 data-no-cache) </figure>
figcaption.text-center ju4 <figure class="d-inline-block">
figure.d-inline-block <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/24040.gif" height="100" />
.hanzi-img 闕 <figcaption class="text-center">ju4</figcaption>
figcaption.text-center que4 </figure>
.w-100 <figure class="d-inline-block">
figure.d-inline-block <div class="hanzi-img">闕</div>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/29664.gif" height=100 data-no-cache) <figcaption class="text-center">que4</figcaption>
figcaption.text-center zhu1 </figure>
figure.d-inline-block </div>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/31281.gif" height=100 data-no-cache) <div class="w-100">
figcaption.text-center cheng1 <figure class="d-inline-block">
figure.d-inline-block <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/29664.gif" height="100" />
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/22812.gif" height=100 data-no-cache) <figcaption class="text-center">zhu1</figcaption>
figcaption.text-center ye4 </figure>
figure.d-inline-block <figure class="d-inline-block">
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/20809.gif" height=100 data-no-cache) <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/31281.gif" height="100" />
figcaption.text-center guang1 <figcaption class="text-center">cheng1</figcaption>
``` </figure>
<figure class="d-inline-block">
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/22812.gif" height="100" />
<figcaption class="text-center">ye4</figcaption>
</figure>
<figure class="d-inline-block">
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/20809.gif" height="100" />
<figcaption class="text-center">guang1</figcaption>
</figure>
</div>
<style> <style>
img[height="100"] { img[height="100"] {
@@ -1,41 +1,50 @@
--- ---
title: "千字文 - 1/8" title: "千字文 - 1/8"
date: "2019-08-18" createdAt: 2019-08-18T00:00:00+07:00
tag: tag:
- 千字文 - 千字文
- 汉字 - 汉字
--- ---
```pug parsed <div class="w-100 mt-3">
.w-100.mt-3 <h3 class="text-center">果珍李柰,菜重芥薑。</h3>
h3.text-center 果珍李柰,菜重芥薑。 </div>
.w-100 <div class="w-100">
figure.d-inline-block <figure class="d-inline-block">
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/26524.gif" height=100 data-no-cache) <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/26524.gif" height="100" />
figcaption.text-center guo3 <figcaption class="text-center">guo3</figcaption>
figure.d-inline-block </figure>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/29645.gif" height=100 data-no-cache) <figure class="d-inline-block">
figcaption.text-center zhen1 <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/29645.gif" height="100" />
figure.d-inline-block <figcaption class="text-center">zhen1</figcaption>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/26446.gif" height=100 data-no-cache) </figure>
figcaption.text-center li3 <figure class="d-inline-block">
figure.d-inline-block <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/26446.gif" height="100" />
.hanzi-img 柰 <figcaption class="text-center">li3</figcaption>
figcaption.text-center nai4 </figure>
.w-100 <figure class="d-inline-block">
figure.d-inline-block <div class="hanzi-img">柰</div>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/33756.gif" height=100 data-no-cache) <figcaption class="text-center">nai4</figcaption>
figcaption.text-center cai4 </figure>
figure.d-inline-block </div>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/37325.gif" height=100 data-no-cache) <div class="w-100">
figcaption.text-center zhong4 <figure class="d-inline-block">
figure.d-inline-block <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/33756.gif" height="100" />
.hanzi-img 柰 <figcaption class="text-center">cai4</figcaption>
figcaption.text-center jie4 </figure>
figure.d-inline-block <figure class="d-inline-block">
.hanzi-img 薑 <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/37325.gif" height="100" />
figcaption.text-center jiang1 <figcaption class="text-center">zhong4</figcaption>
``` </figure>
<figure class="d-inline-block">
<div class="hanzi-img">柰</div>
<figcaption class="text-center">jie4</figcaption>
</figure>
<figure class="d-inline-block">
<div class="hanzi-img">薑</div>
<figcaption class="text-center">jiang1</figcaption>
</figure>
</div>
<style> <style>
img[height="100"] { img[height="100"] {
@@ -1,41 +1,50 @@
--- ---
title: "千字文 - 1/9" title: "千字文 - 1/9"
date: "2019-08-19" createdAt: 2019-08-19T00:00:00+07:00
tag: tag:
- 千字文 - 千字文
- 汉字 - 汉字
--- ---
```pug parsed <div class="w-100 mt-3">
.w-100.mt-3 <h3 class="text-center">海咸河淡,鱗潛羽翔。</h3>
h3.text-center 海咸河淡,鱗潛羽翔。 </div>
.w-100 <div class="w-100">
figure.d-inline-block <figure class="d-inline-block">
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/28023.gif" height=100 data-no-cache) <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/28023.gif" height="100" />
figcaption.text-center hai3 <figcaption class="text-center">hai3</figcaption>
figure.d-inline-block </figure>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/21688.gif" height=100 data-no-cache) <figure class="d-inline-block">
figcaption.text-center xian2 <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/21688.gif" height="100" />
figure.d-inline-block <figcaption class="text-center">xian2</figcaption>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/27827.gif" height=100 data-no-cache) </figure>
figcaption.text-center he2 <figure class="d-inline-block">
figure.d-inline-block <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/27827.gif" height="100" />
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/28129.gif" height=100 data-no-cache) <figcaption class="text-center">he2</figcaption>
figcaption.text-center dan4 </figure>
.w-100 <figure class="d-inline-block">
figure.d-inline-block <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/28129.gif" height="100" />
.hanzi-img 鱗 <figcaption class="text-center">dan4</figcaption>
figcaption.text-center lin2 </figure>
figure.d-inline-block </div>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/28507.gif" height=100 data-no-cache) <div class="w-100">
figcaption.text-center qian2 <figure class="d-inline-block">
figure.d-inline-block <div class="hanzi-img">鱗</div>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/32701.gif" height=100 data-no-cache) <figcaption class="text-center">lin2</figcaption>
figcaption.text-center yu3 </figure>
figure.d-inline-block <figure class="d-inline-block">
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/32724.gif" height=100 data-no-cache) <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/28507.gif" height="100" />
figcaption.text-center xiang2 <figcaption class="text-center">qian2</figcaption>
``` </figure>
<figure class="d-inline-block">
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/32701.gif" height="100" />
<figcaption class="text-center">yu3</figcaption>
</figure>
<figure class="d-inline-block">
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/32724.gif" height="100" />
<figcaption class="text-center">xiang2</figcaption>
</figure>
</div>
<style> <style>
img[height="100"] { img[height="100"] {
+89
View File
@@ -0,0 +1,89 @@
---
title: "千字文 - 2/1"
createdAt: 2019-08-20T00:00:00+07:00
tag:
- 千字文
- 汉字
---
<div class="w-100 mt-3">
<h3 class="text-center">龍師火帝,鳥官人皇。</h3>
</div>
<div class="w-100">
<figure class="d-inline-block">
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/40845.gif" height="100" />
<figcaption class="text-center">long2</figcaption>
</figure>
<figure class="d-inline-block">
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/24107.gif" height="100" />
<figcaption class="text-center">shi1</figcaption>
</figure>
<figure class="d-inline-block">
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/28779.gif" height="100" />
<figcaption class="text-center">huo3</figcaption>
</figure>
<figure class="d-inline-block">
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/24093.gif" height="100" />
<figcaption class="text-center">di4</figcaption>
</figure>
</div>
<div class="w-100">
<figure class="d-inline-block">
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/40165.gif" height="100" />
<figcaption class="text-center">niao3</figcaption>
</figure>
<figure class="d-inline-block">
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/23448.gif" height="100" />
<figcaption class="text-center">guan1</figcaption>
</figure>
<figure class="d-inline-block">
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/20154.gif" height="100" />
<figcaption class="text-center">ren2</figcaption>
</figure>
<figure class="d-inline-block">
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/30343.gif" height="100" />
<figcaption class="text-center">huang1</figcaption>
</figure>
</div>
<!-- excerpt_separator -->
<style>
img[height="100"] {
height: 100px;
}
figure {
margin: 0;
}
.w-100 {
width: 100%;
}
.mt-3 {
margin-top: 0.75rem;
}
.d-inline-block {
display: inline-block;
}
.text-center {
text-align: center;
}
table td:first-child {
width: 10em;
}
</style>
| | | |
| --- | --- | --- |
官方 | guānfāng | government / official (approved or issued by an authority)
官员 (官員) | guānyuán | official (in an organization or government) / administrator
法官 | fǎguān | judge
警官 | jǐngguān | constable / police officer
感官 | gǎnguān | sense / sense organ
指挥官 (指揮官) | zhǐhuīguān | commander
收官 | shōuguān | final part of a go game (see 官子) / endgame / to finish up / to come to the final stage
@@ -1,41 +1,50 @@
--- ---
title: "千字文 - 2/2" title: "千字文 - 2/2"
date: "2019-08-21" createdAt: 2019-08-21T00:00:00+07:00
tag: tag:
- 千字文 - 千字文
- 汉字 - 汉字
--- ---
```pug parsed <div class="w-100 mt-3">
.w-100.mt-3 <h3 class="text-center">始制文字,乃服衣裳。</h3>
h3.text-center 始制文字,乃服衣裳。 </div>
.w-100 <div class="w-100">
figure.d-inline-block <figure class="d-inline-block">
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/22987.gif" height=100 data-no-cache) <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/22987.gif" height="100" />
figcaption.text-center shi3 <figcaption class="text-center">shi3</figcaption>
figure.d-inline-block </figure>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/21046.gif" height=100 data-no-cache) <figure class="d-inline-block">
figcaption.text-center zhi4 <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/21046.gif" height="100" />
figure.d-inline-block <figcaption class="text-center">zhi4</figcaption>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/25991.gif" height=100 data-no-cache) </figure>
figcaption.text-center wen2 <figure class="d-inline-block">
figure.d-inline-block <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/25991.gif" height="100" />
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/23383.gif" height=100 data-no-cache) <figcaption class="text-center">wen2</figcaption>
figcaption.text-center zi4 </figure>
.w-100 <figure class="d-inline-block">
figure.d-inline-block <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/23383.gif" height="100" />
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/20035.gif" height=100 data-no-cache) <figcaption class="text-center">zi4</figcaption>
figcaption.text-center nai3 </figure>
figure.d-inline-block </div>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/26381.gif" height=100 data-no-cache) <div class="w-100">
figcaption.text-center fu2 <figure class="d-inline-block">
figure.d-inline-block <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/20035.gif" height="100" />
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/34915.gif" height=100 data-no-cache) <figcaption class="text-center">nai3</figcaption>
figcaption.text-center yi1 </figure>
figure.d-inline-block <figure class="d-inline-block">
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/35059.gif" height=100 data-no-cache) <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/26381.gif" height="100" />
figcaption.text-center chang2 <figcaption class="text-center">fu2</figcaption>
``` </figure>
<figure class="d-inline-block">
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/34915.gif" height="100" />
<figcaption class="text-center">yi1</figcaption>
</figure>
<figure class="d-inline-block">
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/35059.gif" height="100" />
<figcaption class="text-center">chang2</figcaption>
</figure>
</div>
<style> <style>
img[height="100"] { img[height="100"] {
@@ -1,41 +1,50 @@
--- ---
title: "千字文 - 2/3" title: "千字文 - 2/3"
date: "2019-08-23" createdAt: 2019-08-23T00:00:00+07:00
tag: tag:
- 千字文 - 千字文
- 汉字 - 汉字
--- ---
```pug parsed <div class="w-100 mt-3">
.w-100.mt-3 <h3 class="text-center">推位讓國,有虞陶唐。</h3>
h3.text-center 推位讓國,有虞陶唐。 </div>
.w-100 <div class="w-100">
figure.d-inline-block <figure class="d-inline-block">
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/25512.gif" height=100 data-no-cache) <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/25512.gif" height="100" />
figcaption.text-center tui1 <figcaption class="text-center">tui1</figcaption>
figure.d-inline-block </figure>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/20301.gif" height=100 data-no-cache) <figure class="d-inline-block">
figcaption.text-center wei4 <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/20301.gif" height="100" />
figure.d-inline-block <figcaption class="text-center">wei4</figcaption>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/35731.gif" height=100 data-no-cache) </figure>
figcaption.text-center rang4 <figure class="d-inline-block">
figure.d-inline-block <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/35731.gif" height="100" />
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/22283.gif" height=100 data-no-cache) <figcaption class="text-center">rang4</figcaption>
figcaption.text-center guo2 </figure>
.w-100 <figure class="d-inline-block">
figure.d-inline-block <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/22283.gif" height="100" />
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/26377.gif" height=100 data-no-cache) <figcaption class="text-center">guo2</figcaption>
figcaption.text-center you3 </figure>
figure.d-inline-block </div>
.hanzi-img 虞 <div class="w-100">
figcaption.text-center fu2 <figure class="d-inline-block">
figure.d-inline-block <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/26377.gif" height="100" />
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/38518.gif" height=100 data-no-cache) <figcaption class="text-center">you3</figcaption>
figcaption.text-center tao2 </figure>
figure.d-inline-block <figure class="d-inline-block">
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/21776.gif" height=100 data-no-cache) <div class="hanzi-img">虞</div>
figcaption.text-center tang2 <figcaption class="text-center">fu2</figcaption>
``` </figure>
<figure class="d-inline-block">
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/38518.gif" height="100" />
<figcaption class="text-center">tao2</figcaption>
</figure>
<figure class="d-inline-block">
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/21776.gif" height="100" />
<figcaption class="text-center">tang2</figcaption>
</figure>
</div>
<style> <style>
img[height="100"] { img[height="100"] {
@@ -1,41 +1,50 @@
--- ---
title: "千字文 - 2/4" title: "千字文 - 2/4"
date: "2019-08-27" createdAt: 2019-08-27T00:00:00+07:00
tag: tag:
- 千字文 - 千字文
- 汉字 - 汉字
--- ---
```pug parsed <div class="w-100 mt-3">
.w-100.mt-3 <h3 class="text-center">弔民伐罪,周發殷湯。</h3>
h3.text-center 弔民伐罪,周發殷湯。 </div>
.w-100 <div class="w-100">
figure.d-inline-block <figure class="d-inline-block">
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/24340.gif" height=100 data-no-cache) <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/24340.gif" height="100" />
figcaption.text-center diao1 <figcaption class="text-center">diao1</figcaption>
figure.d-inline-block </figure>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/27665.gif" height=100 data-no-cache) <figure class="d-inline-block">
figcaption.text-center min2 <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/27665.gif" height="100" />
figure.d-inline-block <figcaption class="text-center">min2</figcaption>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/20240.gif" height=100 data-no-cache) </figure>
figcaption.text-center fa2 <figure class="d-inline-block">
figure.d-inline-block <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/20240.gif" height="100" />
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/32618.gif" height=100 data-no-cache) <figcaption class="text-center">fa2</figcaption>
figcaption.text-center zui4 </figure>
.w-100 <figure class="d-inline-block">\
figure.d-inline-block <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/32618.gif" height="100" />
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/21608.gif" height=100 data-no-cache) <figcaption class="text-center">zui4</figcaption>
figcaption.text-center zhou1 </figure>
figure.d-inline-block </div>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/30332.gif" height=100 data-no-cache) <div class="w-100">
figcaption.text-center fa1 <figure class="d-inline-block">
figure.d-inline-block <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/21608.gif" height="100" />
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/27575.gif" height=100 data-no-cache) <figcaption class="text-center">zhou1</figcaption>
figcaption.text-center yin1 </figure>
figure.d-inline-block <figure class="d-inline-block">
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/28271.gif" height=100 data-no-cache) <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/30332.gif" height="100" />
figcaption.text-center tang1 <figcaption class="text-center">fa1</figcaption>
``` </figure>
<figure class="d-inline-block">
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/27575.gif" height="100" />
<figcaption class="text-center">yin1</figcaption>
</figure>
<figure class="d-inline-block">
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/28271.gif" height="100" />
<figcaption class="text-center">tang1</figcaption>
</figure>
</div>
<style> <style>
img[height="100"] { img[height="100"] {
@@ -1,41 +1,50 @@
--- ---
title: "千字文 - 2/5" title: "千字文 - 2/5"
date: "2019-08-29" createdAt: 2019-08-29T00:00:00+07:00
tag: tag:
- 千字文 - 千字文
- 汉字 - 汉字
--- ---
```pug parsed <div class="w-100 mt-3">
.w-100.mt-3 <h3 class="text-center">坐朝問道,垂拱平章。</h3>
h3.text-center 坐朝問道,垂拱平章。 </div>
.w-100 <div class="w-100">
figure.d-inline-block <figure class="d-inline-block">
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/22352.gif" height=100 data-no-cache) <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/22352.gif" height="100" />
figcaption.text-center zuo4 <figcaption class="text-center">zuo4</figcaption>
figure.d-inline-block </figure>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/26397.gif" height=100 data-no-cache) <figure class="d-inline-block">
figcaption.text-center zhao1 <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/26397.gif" height="100" />
figure.d-inline-block <figcaption class="text-center">zhao1</figcaption>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/21839.gif" height=100 data-no-cache) </figure>
figcaption.text-center wen4 <figure class="d-inline-block">
figure.d-inline-block <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/21839.gif" height="100" />
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/36947.gif" height=100 data-no-cache) <figcaption class="text-center">wen4</figcaption>
figcaption.text-center dao4 </figure>
.w-100 <figure class="d-inline-block">
figure.d-inline-block <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/36947.gif" height="100" />
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/22402.gif" height=100 data-no-cache) <figcaption class="text-center">dao4</figcaption>
figcaption.text-center chui2 </figure>
figure.d-inline-block </div>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/25329.gif" height=100 data-no-cache) <div class="w-100">
figcaption.text-center gong3 <figure class="d-inline-block">
figure.d-inline-block <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/22402.gif" height="100" />
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/24179.gif" height=100 data-no-cache) <figcaption class="text-center">chui2</figcaption>
figcaption.text-center ping2 </figure>
figure.d-inline-block <figure class="d-inline-block">
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/31456.gif" height=100 data-no-cache) <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/25329.gif" height="100" />
figcaption.text-center zhang1 <figcaption class="text-center">gong3</figcaption>
``` </figure>
<figure class="d-inline-block">
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/24179.gif" height="100" />
<figcaption class="text-center">ping2</figcaption>
</figure>
<figure class="d-inline-block">
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/31456.gif" height="100" />
<figcaption class="text-center">zhang1</figcaption>
</figure>
</div>
<style> <style>
img[height="100"] { img[height="100"] {
@@ -1,41 +1,50 @@
--- ---
title: "千字文 - 2/6" title: "千字文 - 2/6"
date: "2019-08-30" createdAt: 2019-08-30T00:00:00+07:00
tag: tag:
- 千字文 - 千字文
- 汉字 - 汉字
--- ---
```pug parsed <div class="w-100 mt-3">
.w-100.mt-3 <h3 class="text-center">愛育黎首,臣伏戎羌。</h3>
h3.text-center 愛育黎首,臣伏戎羌。 </div>
.w-100 <div class="w-100">
figure.d-inline-block <figure class="d-inline-block">
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/24859.gif" height=100 data-no-cache) <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/24859.gif" height="100" />
figcaption.text-center ai4 <figcaption class="text-center">ai4</figcaption>
figure.d-inline-block </figure>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/32946.gif" height=100 data-no-cache) <figure class="d-inline-block">
figcaption.text-center yu4 <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/32946.gif" height="100" />
figure.d-inline-block <figcaption class="text-center">yu4</figcaption>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/40654.gif" height=100 data-no-cache) </figure>
figcaption.text-center li2 <figure class="d-inline-block">
figure.d-inline-block <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/40654.gif" height="100" />
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/39318.gif" height=100 data-no-cache) <figcaption class="text-center">li2</figcaption>
figcaption.text-center shou3 </figure>
.w-100 <figure class="d-inline-block">
figure.d-inline-block <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/39318.gif" height="100" />
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/33251.gif" height=100 data-no-cache) <figcaption class="text-center">shou3</figcaption>
figcaption.text-center chen2 </figure>
figure.d-inline-block </div>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/20239.gif" height=100 data-no-cache) <div class="w-100">
figcaption.text-center fu2 <figure class="d-inline-block">
figure.d-inline-block <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/33251.gif" height="100" />
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/25102.gif" height=100 data-no-cache) <figcaption class="text-center">chen2</figcaption>
figcaption.text-center rong2 </figure>
figure.d-inline-block <figure class="d-inline-block">
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/32652.gif" height=100 data-no-cache) <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/20239.gif" height="100" />
figcaption.text-center qiang1 <figcaption class="text-center">fu2</figcaption>
``` </figure>
<figure class="d-inline-block">
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/25102.gif" height="100" />
<figcaption class="text-center">rong2</figcaption>
</figure>
<figure class="d-inline-block">
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/32652.gif" height="100" />
<figcaption class="text-center">qiang1</figcaption>
</figure>
</div>
<style> <style>
img[height="100"] { img[height="100"] {
@@ -1,41 +1,50 @@
--- ---
title: "千字文 - 2/7" title: "千字文 - 2/7"
date: "2019-09-01" createdAt: 2019-09-01T00:00:00+07:00
tag: tag:
- 千字文 - 千字文
- 汉字 - 汉字
--- ---
```pug parsed <div class="w-100 mt-3">
.w-100.mt-3 <h3 class="text-center">遐邇一體,率賓歸王。</h3>
h3.text-center 遐邇一體,率賓歸王。 </div>
.w-100 <div class="w-100">
figure.d-inline-block <figure class="d-inline-block">
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/36944.gif" height=100 data-no-cache) <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/36944.gif" height="100" />
figcaption.text-center xia2 <figcaption class="text-center">xia2</figcaption>
figure.d-inline-block </figure>
.hanzi-img 邇 <figure class="d-inline-block">
figcaption.text-center er3 <div class="hanzi-img">邇</div>
figure.d-inline-block <figcaption class="text-center">er3</figcaption>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/19968.gif" height=100 data-no-cache) </figure>
figcaption.text-center yi1 <figure class="d-inline-block">
figure.d-inline-block <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/19968.gif" height="100" />
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/39636.gif" height=100 data-no-cache) <figcaption class="text-center">yi1</figcaption>
figcaption.text-center ti3 </figure>
.w-100 <figure class="d-inline-block">
figure.d-inline-block <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/39636.gif" height="100" />
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/29575.gif" height=100 data-no-cache) <figcaption class="text-center">ti3</figcaption>
figcaption.text-center lu:4 </figure>
figure.d-inline-block </div>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/36051.gif" height=100 data-no-cache) <div class="w-100">
figcaption.text-center bin1 <figure class="d-inline-block">
figure.d-inline-block <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/29575.gif" height="100" />
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/27512.gif" height=100 data-no-cache) <figcaption class="text-center">lu:4</figcaption>
figcaption.text-center gui1 </figure>
figure.d-inline-block <figure class="d-inline-block">
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/29579.gif" height=100 data-no-cache) <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/36051.gif" height="100" />
figcaption.text-center wang2 <figcaption class="text-center">bin1</figcaption>
``` </figure>
<figure class="d-inline-block">
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/27512.gif" height="100" />
<figcaption class="text-center">gui1</figcaption>
</figure>
<figure class="d-inline-block">
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/29579.gif" height="100" />
<figcaption class="text-center">wang2</figcaption>
</figure>
</div>
<style> <style>
img[height="100"] { img[height="100"] {
@@ -1,41 +1,50 @@
--- ---
title: "千字文 - 2/8" title: "千字文 - 2/8"
date: "2019-09-02" createdAt: 2019-09-02T00:00:00+07:00
tag: tag:
- 千字文 - 千字文
- 汉字 - 汉字
--- ---
```pug parsed <div class="w-100 mt-3">
.w-100.mt-3 <h3 class="text-center">鳴鳳在竹,白駒食場。</h3>
h3.text-center 鳴鳳在竹,白駒食場。 </div>
.w-100 <div class="w-100">
figure.d-inline-block <figure class="d-inline-block">
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/40180.gif" height=100 data-no-cache) <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/40180.gif" height="100" />
figcaption.text-center ming2 <figcaption class="text-center">ming2</figcaption>
figure.d-inline-block </figure>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/40179.gif" height=100 data-no-cache) <figure class="d-inline-block">
figcaption.text-center feng4 <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/40179.gif" height="100" />
figure.d-inline-block <figcaption class="text-center">feng4</figcaption>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/22312.gif" height=100 data-no-cache) </figure>
figcaption.text-center zai4 <figure class="d-inline-block">
figure.d-inline-block <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/22312.gif" height="100" />
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/31481.gif" height=100 data-no-cache) <figcaption class="text-center">zai4</figcaption>
figcaption.text-center zhu2 </figure>
.w-100 <figure class="d-inline-block">
figure.d-inline-block <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/31481.gif" height="100" />
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/30333.gif" height=100 data-no-cache) <figcaption class="text-center">zhu2</figcaption>
figcaption.text-center bai2 </figure>
figure.d-inline-block </div>
.hanzi-img 駒 <div class="w-100">
figcaption.text-center ju1 <figure class="d-inline-block">
figure.d-inline-block <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/30333.gif" height="100" />
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/39135.gif" height=100 data-no-cache) <figcaption class="text-center">bai2</figcaption>
figcaption.text-center shi2 </figure>
figure.d-inline-block <figure class="d-inline-block">
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/22580.gif" height=100 data-no-cache) <div class="hanzi-img">駒</div>
figcaption.text-center chang2 <figcaption class="text-center">ju1</figcaption>
``` </figure>
<figure class="d-inline-block">
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/39135.gif" height="100" />
<figcaption class="text-center">shi2</figcaption>
</figure>
<figure class="d-inline-block">
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/22580.gif" height="100" />
<figcaption class="text-center">chang2</figcaption>
</figure>
</div>
<style> <style>
img[height="100"] { img[height="100"] {
@@ -1,41 +1,51 @@
--- ---
title: "千字文 - 2/9" title: "千字文 - 2/9"
date: "2019-09-03" createdAt: 2019-09-03T00:00:00+07:00
tag: tag:
- 千字文 - 千字文
- 汉字 - 汉字
--- ---
```pug parsed
.w-100.mt-3 <div class="w-100 mt-3">
h3.text-center 化被草木,賴及萬方。 <h3 class="text-center">化被草木,賴及萬方。</h3>
.w-100 </div>
figure.d-inline-block <div class="w-100">
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/21270.gif" height=100 data-no-cache) <figure class="d-inline-block">
figcaption.text-center hua4 <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/21270.gif" height="100" />
figure.d-inline-block <figcaption class="text-center">hua4</figcaption>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/34987.gif" height=100 data-no-cache) </figure>
figcaption.text-center bei4 <figure class="d-inline-block">
figure.d-inline-block <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/34987.gif" height="100" />
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/33609.gif" height=100 data-no-cache) <figcaption class="text-center">bei4</figcaption>
figcaption.text-center cao3 </figure>
figure.d-inline-block <figure class="d-inline-block">
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/26408.gif" height=100 data-no-cache) <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/33609.gif" height="100" />
figcaption.text-center mu4 <figcaption class="text-center">cao3</figcaption>
.w-100 </figure>
figure.d-inline-block <figure class="d-inline-block">
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/36084.gif" height=100 data-no-cache) <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/26408.gif" height="100" />
figcaption.text-center lai4 <figcaption class="text-center">mu4</figcaption>
figure.d-inline-block </figure>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/21450.gif" height=100 data-no-cache) </div>
figcaption.text-center ji2 <div class="w-100">
figure.d-inline-block <figure class="d-inline-block">
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/33836.gif" height=100 data-no-cache) <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/36084.gif" height="100" />
figcaption.text-center wan4 <figcaption class="text-center">lai4</figcaption>
figure.d-inline-block </figure>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/26041.gif" height=100 data-no-cache) <figure class="d-inline-block">
figcaption.text-center fang1 <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/21450.gif" height="100" />
``` <figcaption class="text-center">ji2</figcaption>
</figure>
<figure class="d-inline-block">
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/33836.gif" height="100" />
<figcaption class="text-center">wan4</figcaption>
</figure>
<figure class="d-inline-block">
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/26041.gif" height="100" />
<figcaption class="text-center">fang1</figcaption>
</figure>
</div>
<style> <style>
img[height="100"] { img[height="100"] {
@@ -1,41 +1,50 @@
--- ---
title: "千字文 - 3/1" title: "千字文 - 3/1"
date: "2019-09-12" createdAt: 2019-09-12T00:00:00+07:00
tag: tag:
- 千字文 - 千字文
- 汉字 - 汉字
--- ---
```pug parsed <div class="w-100 mt-3">
.w-100.mt-3 <h3 class="text-center">蓋此身髮,四大五常。</h3>
h3.text-center 蓋此身髮,四大五常。 </div>
.w-100 <div class="w-100">
figure.d-inline-block <figure class="d-inline-block">
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/33995.gif" height=100 data-no-cache) <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/33995.gif" height="100" />
figcaption.text-center gai4 <figcaption class="text-center">gai4</figcaption>
figure.d-inline-block </figure>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/27492.gif" height=100 data-no-cache) <figure class="d-inline-block">
figcaption.text-center ci3 <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/27492.gif" height="100" />
figure.d-inline-block <figcaption class="text-center">ci3</figcaption>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/36523.gif" height=100 data-no-cache) </figure>
figcaption.text-center shen1 <figure class="d-inline-block">
figure.d-inline-block <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/36523.gif" height="100" />
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/39662.gif" height=100 data-no-cache) <figcaption class="text-center">shen1</figcaption>
figcaption.text-center fa4 </figure>
.w-100 <figure class="d-inline-block">
figure.d-inline-block <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/39662.gif" height="100" />
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/22235.gif" height=100 data-no-cache) <figcaption class="text-center">fa4</figcaption>
figcaption.text-center si4 </figure>
figure.d-inline-block </div>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/22823.gif" height=100 data-no-cache) <div class="w-100">
figcaption.text-center da4 <figure class="d-inline-block">
figure.d-inline-block <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/22235.gif" height="100" />
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/20116.gif" height=100 data-no-cache) <figcaption class="text-center">si4</figcaption>
figcaption.text-center wu3 </figure>
figure.d-inline-block <figure class="d-inline-block">
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/24120.gif" height=100 data-no-cache) <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/22823.gif" height="100" />
figcaption.text-center chang2 <figcaption class="text-center">da4</figcaption>
``` </figure>
<figure class="d-inline-block">
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/20116.gif" height="100" />
<figcaption class="text-center">wu3</figcaption>
</figure>
<figure class="d-inline-block">
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/24120.gif" height="100" />
<figcaption class="text-center">chang2</figcaption>
</figure>
</div>
<style> <style>
img[height="100"] { img[height="100"] {
@@ -1,41 +1,50 @@
--- ---
title: "千字文 - 3/2" title: "千字文 - 3/2"
date: "2019-09-15" createdAt: 2019-09-15T00:00:00+07:00
tag: tag:
- 千字文 - 千字文
- 汉字 - 汉字
--- ---
```pug parsed <div class="w-100 mt-3">
.w-100.mt-3 <h3 class="text-center">恭惟鞠養,豈敢毀傷。</h3>
h3.text-center 恭惟鞠養,豈敢毀傷。 </div>
.w-100 <div class="w-100">
figure.d-inline-block <figure class="d-inline-block">
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/24685.gif" height=100 data-no-cache) <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/24685.gif" height="100" />
figcaption.text-center gong1 <figcaption class="text-center">gong1</figcaption>
figure.d-inline-block </figure>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/24799.gif" height=100 data-no-cache) <figure class="d-inline-block">
figcaption.text-center wei2 <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/24799.gif" height="100" />
figure.d-inline-block <figcaption class="text-center">wei2</figcaption>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/38816.gif" height=100 data-no-cache) </figure>
figcaption.text-center ju1 <figure class="d-inline-block">
figure.d-inline-block <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/38816.gif" height="100" />
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/39178.gif" height=100 data-no-cache) <figcaption class="text-center">ju1</figcaption>
figcaption.text-center yang3 </figure>
.w-100 <figure class="d-inline-block">
figure.d-inline-block <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/39178.gif" height="100" />
.hanzi-img 豈 <figcaption class="text-center">yang3</figcaption>
figcaption.text-center qi3 </figure>
figure.d-inline-block </div>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/25954.gif" height=100 data-no-cache) <div class="w-100">
figcaption.text-center gan3 <figure class="d-inline-block">
figure.d-inline-block <div class="hanzi-img">豈</div>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/27584.gif" height=100 data-no-cache) <figcaption class="text-center">qi3</figcaption>
figcaption.text-center hui3 </figure>
figure.d-inline-block <figure class="d-inline-block">
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/20663.gif" height=100 data-no-cache) <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/25954.gif" height="100" />
figcaption.text-center shang1 <figcaption class="text-center">gan3</figcaption>
``` </figure>
<figure class="d-inline-block">
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/27584.gif" height="100" />
<figcaption class="text-center">hui3</figcaption>
</figure>
<figure class="d-inline-block">
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/20663.gif" height="100" />
<figcaption class="text-center">shang1</figcaption>
</figure>
</div>
<style> <style>
img[height="100"] { img[height="100"] {
@@ -1,41 +1,50 @@
--- ---
title: "千字文 - 3/3" title: "千字文 - 3/3"
date: "2019-09-23" createdAt: 2019-09-23T00:00:00+07:00
tag: tag:
- 千字文 - 千字文
- 汉字 - 汉字
--- ---
```pug parsed <div class="w-100 mt-3">
.w-100.mt-3 <h3 class="text-center">女慕貞絜,男效才良。</h3>
h3.text-center 女慕貞絜,男效才良。 </div>
.w-100 <div class="w-100">
figure.d-inline-block <figure class="d-inline-block">
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/22899.gif" height=100 data-no-cache) <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/22899.gif" height="100" />
figcaption.text-center nu:3 <figcaption class="text-center">nu:3</figcaption>
figure.d-inline-block </figure>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/24917.gif" height=100 data-no-cache) <figure class="d-inline-block">
figcaption.text-center mu4 <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/24917.gif" height="100" />
figure.d-inline-block <figcaption class="text-center">mu4</figcaption>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/35998.gif" height=100 data-no-cache) </figure>
figcaption.text-center zhen1 <figure class="d-inline-block">
figure.d-inline-block <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/35998.gif" height="100" />
.hanzi-img 絜 <figcaption class="text-center">zhen1</figcaption>
figcaption.text-center xie2 </figure>
.w-100 <figure class="d-inline-block">
figure.d-inline-block <div class="hanzi-img">絜</div>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/30007.gif" height=100 data-no-cache) <figcaption class="text-center">xie2</figcaption>
figcaption.text-center nan2 </figure>
figure.d-inline-block </div>
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/25928.gif" height=100 data-no-cache) <div class="w-100">
figcaption.text-center xiao4 <figure class="d-inline-block">
figure.d-inline-block <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/30007.gif" height="100" />
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/25165.gif" height=100 data-no-cache) <figcaption class="text-center">nan2</figcaption>
figcaption.text-center cai2 </figure>
figure.d-inline-block <figure class="d-inline-block">
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/33391.gif" height=100 data-no-cache) <img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/25928.gif" height="100" />
figcaption.text-center liang2 <figcaption class="text-center">xiao4</figcaption>
``` </figure>
<figure class="d-inline-block">
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/25165.gif" height="100" />
<figcaption class="text-center">cai2</figcaption>
</figure>
<figure class="d-inline-block">
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/33391.gif" height="100" />
<figcaption class="text-center">liang2</figcaption>
</figure>
</div>
<style> <style>
img[height="100"] { img[height="100"] {
+13
View File
@@ -0,0 +1,13 @@
# editorconfig.org
root = true
[*]
indent_style = space
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[*.md]
trim_trailing_whitespace = false
+21
View File
@@ -0,0 +1,21 @@
module.exports = {
root: true,
env: {
browser: true,
node: true,
},
extends: [
'@nuxtjs/eslint-config-typescript',
'prettier',
'prettier/vue',
'plugin:prettier/recommended',
'plugin:nuxt/recommended',
],
plugins: ['prettier'],
// add your custom rules here
rules: {
'require-await': 0,
'vue/no-v-html': 0,
'import/order': 0,
},
}
+19
View File
@@ -0,0 +1,19 @@
# This file specifies files that are *not* uploaded to Google Cloud Platform
# using gcloud. It follows the same syntax as .gitignore, with the addition of
# "#!include" directives (which insert the entries of the given .gitignore-style
# file at that point).
#
# For more information, run:
# $ gcloud topic gcloudignore
#
.gcloudignore
# If you would like to upload your .git directory, .gitignore file or files
# from your .gitignore file, remove the corresponding line
# below:
.git
.gitignore
# Node.js dependencies:
node_modules/
/scripts/
+93
View File
@@ -0,0 +1,93 @@
# Created by .ignore support plugin (hsz.mobi)
### Node template
# Logs
/logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Runtime data
pids
*.pid
*.seed
*.pid.lock
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
# nyc test coverage
.nyc_output
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Bower dependency directory (https://bower.io/)
bower_components
# node-waf configuration
.lock-wscript
# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release
# Dependency directories
node_modules/
jspm_packages/
# TypeScript v1 declaration files
typings/
# Optional npm cache directory
.npm
# Optional eslint cache
.eslintcache
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
*.tgz
# Yarn Integrity file
.yarn-integrity
# dotenv environment variables file
.env
# parcel-bundler cache (https://parceljs.org/)
.cache
# next.js build output
.next
# nuxt.js build output
.nuxt
# Nuxt generate
dist
# vuepress build output
.vuepress/dist
# Serverless directories
.serverless
# IDE / Editor
.idea
# Service worker
sw.*
# macOS
.DS_Store
# Vim swap files
*.swp
/built/
/static/media/
+4
View File
@@ -0,0 +1,4 @@
{
"semi": false,
"singleQuote": true
}
+4
View File
@@ -0,0 +1,4 @@
{
"editor.formatOnSave": true,
"editor.defaultFormatter": "rvest.vs-code-prettier-eslint"
}
+20
View File
@@ -0,0 +1,20 @@
# zhdiary
## Build Setup
```bash
# install dependencies
$ yarn install
# serve with hot reload at localhost:3000
$ yarn dev
# build for production and launch server
$ yarn build
$ yarn start
# generate static project
$ yarn generate
```
For detailed explanation on how things work, check out [Nuxt.js docs](https://nuxtjs.org).
+20
View File
@@ -0,0 +1,20 @@
runtime: nodejs12
instance_class: F2
handlers:
- url: /_nuxt
static_dir: .nuxt/dist/client
secure: always
- url: /(.*\.(gif|png|jpg|ico|txt))$
static_files: static/\1
upload: static/.*\.(gif|png|jpg|ico|txt)$
secure: always
- url: /.*
script: auto
secure: always
env_variables:
HOST: '0.0.0.0'
@@ -0,0 +1,3 @@
export default function () {
return { x: 0, y: 0 }
}
+6
View File
@@ -0,0 +1,6 @@
interface IPostTeaser {
title: string
path: string
date?: string
excerpt: string
}
+3
View File
@@ -0,0 +1,3 @@
import type { ITheme } from '~/server/theme'
export const THEME: ITheme = JSON.parse(process.env.THEME!)
+48
View File
@@ -0,0 +1,48 @@
/* eslint-disable camelcase */
import { THEME } from './global'
export type Theme = 'light' | 'dark'
export interface CommentsConfig {
host: string
site_id: string
url?: string
max_shown_comments?: number
theme?: Theme
page_title?: string
node?: string | HTMLElement
locale?: string
// eslint-disable-next-line @typescript-eslint/no-explicit-any
__colors__?: any
}
declare global {
interface Window {
remark_config: CommentsConfig
REMARK42: {
changeTheme(theme: Theme): void
destroy?: () => void
createInstance: (
remark_config: CommentsConfig
) =>
| {
changeTheme(theme: Theme): void
destroy(): void
}
| undefined
}
}
}
if (process.browser && THEME?.comment?.remark42) {
;(function (c) {
for (let i = 0; i < c.length; i++) {
const d = document
const s = d.createElement('script')
s.src = THEME.comment.remark42.host + '/web/' + c[i] + '.js'
s.defer = true
;(d.head || d.body).appendChild(s)
}
})(['embed'])
}
+79
View File
@@ -0,0 +1,79 @@
<template>
<article>
<post-teaser v-for="p in posts" :key="p.path" :post="p"></post-teaser>
<nav v-if="count > 5">
<ul>
<li v-if="page > 1">
<nuxt-link :to="makePageUrl(1)" aria-label="page 1">1</nuxt-link>
</li>
<li v-if="page > 3">
<span> &hellip; </span>
</li>
<li v-if="page > 2">
<nuxt-link
:to="makePageUrl(page - 1)"
:aria-label="`page ${page - 1}`"
>
{{ page - 1 }}
</nuxt-link>
</li>
<li>
<span>
{{ page }}
</span>
</li>
<li v-if="page < total - 1">
<nuxt-link
:to="makePageUrl(page + 1)"
:aria-label="`page ${page + 1}`"
>
{{ page + 1 }}
</nuxt-link>
</li>
<li v-if="page < total - 2">
<span> &hellip; </span>
</li>
<li v-if="page < total">
<nuxt-link :to="makePageUrl(total)" :aria-label="`page ${total}`">
{{ total }}
</nuxt-link>
</li>
</ul>
</nav>
</article>
</template>
<script lang="ts">
import { Vue, Component, Prop } from 'nuxt-property-decorator'
@Component
export default class PostQuery extends Vue {
@Prop({ required: true }) posts!: IPostTeaser[]
@Prop({ required: true }) count!: number
get page() {
return parseInt((this.$route.query.page as string) || '1')
}
get total() {
return Math.ceil(this.count / 5)
}
makePageUrl(page: number) {
return this.$router.resolve({
path: this.$route.path,
query: {
...this.$route.query,
page: page.toString(),
},
}).href
}
}
</script>
+48
View File
@@ -0,0 +1,48 @@
<template>
<section>
<h2>
<nuxt-link :to="'post/' + post.path">
{{ post.title }}
</nuxt-link>
</h2>
<small>
<span>
by
<a
v-if="theme.author.url"
:href="theme.author.url"
target="_blank"
rel="noopener"
>
{{ theme.author.name }}
</a>
<span v-else>
{{ theme.author.name }}
</span>
</span>
<span v-if="post.date" style="float: right">
{{ post.date | formatDate }}
</span>
</small>
<article v-html="post.excerpt"></article>
</section>
</template>
<script lang="ts">
import { Vue, Component, Prop } from 'nuxt-property-decorator'
import { THEME } from '~/assets/global'
@Component
export default class PostTeaser extends Vue {
@Prop() post!: IPostTeaser
theme = THEME
}
</script>
<style scoped>
article {
margin-top: 2em;
}
</style>
+74
View File
@@ -0,0 +1,74 @@
<template>
<main>
<header>
<h1>{{ theme.title }}</h1>
<nav>
<ul>
<li>
<nuxt-link to="/">Home</nuxt-link>
</li>
<li v-for="(n, i) in theme.nav || []" :key="i">
<nuxt-link v-if="n.to" :to="n.to">{{ n.name }}</nuxt-link>
<a v-else :href="n.href" target="_blank" rel="noopener">
{{ n.name }}
</a>
</li>
</ul>
<form @submit.prevent="doSearch">
<input v-model="q" type="search" placeholder="Search..." />
<div class="icon">🔎</div>
</form>
</nav>
</header>
<Nuxt />
</main>
</template>
<script lang="ts">
import { Vue, Component } from 'nuxt-property-decorator'
import { THEME } from '~/assets/global'
@Component
export default class DefaultLayout extends Vue {
theme = THEME
q = this.$route.query.q || ''
doSearch() {
let path = this.$route.path
if (['/blog', '/tag'].includes(path)) {
path = '/blog'
}
this.$router.push({
path,
query: {
q: this.q,
},
})
}
}
</script>
<style scoped>
nav ul {
display: inline-block;
}
form {
float: right;
max-width: 300px;
position: relative;
}
form .icon {
position: absolute;
right: 5px;
top: 5px;
}
input {
padding-right: 1.5em;
}
</style>
+19
View File
@@ -0,0 +1,19 @@
<template>
<div>
<section>
<h2 v-if="error.statusCode === 404">Page not found</h2>
<pre v-else style="width: 100%">{{ error }}</pre>
</section>
<section>
<NuxtLink to="/">Home page</NuxtLink>
</section>
</div>
</template>
<script>
export default {
// eslint-disable-next-line vue/require-prop-types
props: ['error'],
layout: 'error', // you can set a custom layout for the error page
}
</script>
+8
View File
@@ -0,0 +1,8 @@
# MIDDLEWARE
**This directory is not required, you can delete it if you don't want to use it.**
This directory contains your application middleware.
Middleware let you define custom functions that can be run before rendering either a page or a group of pages.
More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/routing#middleware).
+86
View File
@@ -0,0 +1,86 @@
import { NuxtConfig } from '@nuxt/types'
import { getTheme } from './server/theme'
const config = async (): Promise<NuxtConfig> => {
const theme = getTheme()
const PORT = process.env.PORT || '3000'
return {
// Global page headers (https://go.nuxtjs.dev/config-head)
head: {
title: theme.title,
meta: [
{ charset: 'utf-8' },
{ name: 'viewport', content: 'width=device-width, initial-scale=1' },
{
hid: 'description',
name: 'description',
content: theme.description || '',
},
],
link: [
{ rel: 'icon', type: 'image/x-icon', href: '/media/favicon.ico' },
{
rel: 'stylesheet',
href: theme.awsm
? `https://unpkg.com/awsm.css/dist/awsm_theme_${theme.awsm}.min.css`
: 'https://unpkg.com/awsm.css/dist/awsm.min.css',
},
],
script: [
...(theme.analytics?.plausible
? [
{
src: 'https://plausible.io/js/plausible.js',
async: true,
defer: true,
'data-domain': theme.analytics?.plausible,
},
]
: []),
{
src:
'https://unpkg.com/@webcomponents/webcomponentsjs/webcomponents-loader.js',
defer: true,
},
{
type: 'module',
src: '/webcomponents.js',
},
],
},
// Global CSS (https://go.nuxtjs.dev/config-css)
css: [],
// Plugins to run before rendering page (https://go.nuxtjs.dev/config-plugins)
plugins: [
'~/plugins/axios-fix.ts',
'~/plugins/format.ts',
'~/plugins/remark42.client.js',
],
// Auto import components (https://go.nuxtjs.dev/config-components)
components: true,
// Modules for dev and build (recommended) (https://go.nuxtjs.dev/config-modules)
buildModules: [
// https://go.nuxtjs.dev/typescript
'@nuxt/typescript-build',
],
// Modules (https://go.nuxtjs.dev/config-modules)
modules: ['@nuxtjs/axios'],
// Build Configuration (https://go.nuxtjs.dev/config-build)
build: {},
env: {
THEME: JSON.stringify(theme),
PORT,
},
serverMiddleware: [{ path: '/api', handler: '~/server/index.ts' }],
}
}
export default config
+73
View File
@@ -0,0 +1,73 @@
{
"name": "@patarapolw/nuxt-awsm",
"version": "0.1.0",
"private": true,
"scripts": {
"dev": "nuxt-ts",
"build": "nuxt-ts build",
"start": "nuxt-ts start",
"generate": "nuxt-ts generate",
"lint:js": "eslint --ext .ts,.js,.vue --ignore-path .gitignore .",
"lint": "yarn lint:js",
"ts": "ts-node -O '{\"module\":\"commonjs\"}'",
"ts:prepare": "yarn ts scripts/prepare.ts",
"predeploy": "yarn build",
"deploy": "gcloud app deploy"
},
"dependencies": {
"@nuxt/typescript-runtime": "^2.0.0",
"@nuxtjs/axios": "^5.12.4",
"@patarapolw/scope-css": "^1.3.0",
"@types/express": "^4.17.9",
"@types/js-yaml": "^3.12.5",
"@types/morgan": "^1.9.2",
"better-sqlite3": "^7.1.1",
"cheerio": "^1.0.0-rc.3",
"core-js": "^3.6.5",
"express": "^4.17.1",
"js-yaml": "^3.14.1",
"morgan": "^1.10.0",
"nuxt": "^2.14.6",
"nuxt-property-decorator": "^2.8.8",
"showdown": "^1.9.1",
"zod": "^1.11.11"
},
"devDependencies": {
"@nuxt/types": "^2.14.6",
"@nuxt/typescript-build": "^2.0.3",
"@nuxtjs/eslint-config": "^3.1.0",
"@nuxtjs/eslint-config-typescript": "^3.0.0",
"@nuxtjs/eslint-module": "^2.0.0",
"@types/better-sqlite3": "^5.4.1",
"@types/cheerio": "^0.22.23",
"@types/ejs": "^3.0.5",
"@types/fs-extra": "^9.0.5",
"@types/rimraf": "^3.0.0",
"@types/showdown": "^1.9.3",
"babel-eslint": "^10.1.0",
"dotenv": "^8.2.0",
"ejs": "^3.1.5",
"eslint": "^7.10.0",
"eslint-config-prettier": "^6.12.0",
"eslint-plugin-nuxt": "^1.0.0",
"eslint-plugin-prettier": "^3.1.4",
"import-sort-parser-typescript": "^6.0.0",
"nodejieba": "^2.5.1",
"prettier": "^2.1.2",
"ts-node": "^9.1.1",
"typescript": "4.0.5"
},
"importSort": {
".ts, .tsx, .config.ts": {
"parser": "typescript",
"style": "module"
}
},
"engines": {
"node": "12",
"npm": "please-use-yarn",
"yarn": "1",
"pnpm": "please-use-yarn"
},
"engineStrict": true
}
+34
View File
@@ -0,0 +1,34 @@
<template>
<p v-if="$fetchState.pending"></p>
<p v-else-if="$fetchState.error">
An error occurred {{ $fetchState.error.message }}
</p>
<p v-else-if="!posts.length">No posts found.</p>
<post-query v-else :posts="posts" :count="count" />
</template>
<script lang="ts">
import { Vue, Component } from 'nuxt-property-decorator'
@Component<BlogPage>({
watch: {
'$route.query.q': '$fetch',
'$route.query.page': '$fetch',
},
async fetch() {
const { result, count } = await this.$axios.$get('/api/q', {
params: {
q: this.$route.query.q,
page: this.$route.query.page,
},
})
this.posts = result
this.count = count
},
})
export default class BlogPage extends Vue {
posts: IPostTeaser[] = []
count = 0
}
</script>
+9
View File
@@ -0,0 +1,9 @@
<script lang="ts">
import Vue from 'vue'
export default Vue.extend({
middleware: (ctx) => {
ctx.redirect('/blog')
},
})
</script>
+116
View File
@@ -0,0 +1,116 @@
<template>
<p v-if="$fetchState.pending"></p>
<p v-else-if="$fetchState.error">
An error occurred {{ $fetchState.error.message }}
</p>
<section v-else>
<section>
<h2>
{{ post.title }}
</h2>
<small>
<span>
by
<a
v-if="theme.author.url"
:href="theme.author.url"
target="_blank"
rel="noopener"
>
{{ theme.author.name }}
</a>
<span v-else>
{{ theme.author.name }}
</span>
</span>
<span v-if="post.date" style="float: right">
{{ post.date | formatDate }}
</span>
</small>
</section>
<section v-html="post.content"></section>
<section class="tags-container">
<span>Tags:</span>
<span v-for="t in post.tag || []" :key="t">
<nuxt-link :to="`/tag/${t}`">
{{ t }}
</nuxt-link>
</span>
</section>
<footer v-if="remark42settings">
<div ref="remark42" />
</footer>
</section>
</template>
<script lang="ts">
import { Vue, Component, Watch } from 'nuxt-property-decorator'
import { THEME } from '~/assets/global'
import '~/assets/remark42'
@Component<PostPage>({
async fetch() {
const r = await this.$axios.$get('/api', {
params: {
path: this.$route.params.pathMatch,
},
})
this.post = r
},
mounted() {
this.initRemark42()
},
beforeDestroy() {
if (this.remark42Instance) {
this.remark42Instance.destroy()
}
},
})
export default class PostPage extends Vue {
post: {
date?: string
title: string
image?: string
tag?: string[]
category?: string
content: string
} | null = null
theme = THEME
remark42settings = THEME.comment?.remark42 || null
remark42Instance: any = null
@Watch('$fetchState.pending')
initRemark42() {
this.$nextTick(() => {
if (
this.$refs.remark42 &&
process.browser &&
this.remark42settings &&
window.REMARK42
) {
if (this.remark42Instance) {
this.remark42Instance.destroy()
}
this.remark42Instance = window.REMARK42.createInstance({
node: this.$refs.remark42 as HTMLElement,
host: this.remark42settings.host,
site_id: this.remark42settings.siteId,
})
}
})
}
}
</script>
<style scoped>
.tags-container > span + span {
margin-left: 0.6em;
}
</style>
+32
View File
@@ -0,0 +1,32 @@
<template>
<p v-if="$fetchState.pending"></p>
<p v-else-if="$fetchState.error">An error occurred {{ $fetchState.error }}</p>
<post-query v-else :posts="posts" :count="count" />
</template>
<script lang="ts">
import { Vue, Component } from 'nuxt-property-decorator'
@Component<TagPage>({
watch: {
'$route.query.q': '$fetch',
'$route.query.page': '$fetch',
},
async fetch() {
const { result, count } = await this.$axios.$get('/api/q', {
params: {
q: this.$route.query.q,
page: this.$route.query.page,
tag: this.$route.params.tag,
},
})
this.posts = result
this.count = count
},
})
export default class TagPage extends Vue {
posts: IPostTeaser[] = []
count = 0
}
</script>
+31
View File
@@ -0,0 +1,31 @@
import { Plugin } from '@nuxt/types'
const plugin: Plugin = ({ $axios, error }) => {
if (typeof location !== 'undefined') {
$axios.defaults.baseURL = location.origin
}
$axios.interceptors.response.use(
(r) => {
if (r.data?.error) {
error({
statusCode: r.status,
message: r.data.error,
})
throw new Error(r.data.error)
}
return r
},
(err) => {
error({
statusCode: err.response.status,
message: err.toJSON(),
})
return Promise.reject(err)
}
)
}
export default plugin
+12
View File
@@ -0,0 +1,12 @@
import Vue from 'vue'
Vue.filter('formatDate', (s: string) => {
return s
? new Date(s).toLocaleDateString([], {
year: 'numeric',
month: 'long',
day: 'numeric',
weekday: 'short',
})
: ''
})
Whitespace-only changes.
+19
View File
@@ -0,0 +1,19 @@
import fs from 'fs'
import path from 'path'
import dotenv from 'dotenv'
import { THEME_FILENAME } from '../server/theme'
dotenv.config({ path: '../../.env' })
dotenv.config()
export const CONTENT_PATH = path.resolve(
process.env.CONTENT_PATH ||
(fs.existsSync('../../_posts') ? '../..' : 'content')
)
export const srcPath = (
root: '_posts' | '_media' | typeof THEME_FILENAME,
...ps: string[]
): string => path.join(CONTENT_PATH, root, ...ps)
+148
View File
@@ -0,0 +1,148 @@
import crypto from 'crypto'
import scopeCss from '@patarapolw/scope-css'
import cheerio from 'cheerio'
import ejs from 'ejs'
import jieba from 'nodejieba'
import showdown from 'showdown'
export class MakeHTML {
$ = cheerio.load('')
mdConverter = new showdown.Converter({
noHeaderId: true,
parseImgDimensions: true,
simplifiedAutoLink: true,
// literalMidWordUnderscores: true,
strikethrough: true,
tables: true,
tasklists: true,
// simpleLineBreaks: true,
openLinksInNewWindow: true,
backslashEscapesHTMLTags: true,
emoji: true,
underline: true,
disableForced4SpacesIndentedSublists: true,
metadata: true,
})
constructor() {
this.mdConverter.addExtension(
{
type: 'lang',
regex: /\\\n/g,
replace: '<br />',
},
'commonmark-simple-linebreak'
)
/**
* ! For some reasons default underscore italic fails to render...
*/
this.mdConverter.addExtension(
{
type: 'lang',
regex: /([^\\])_{1}(.*?[^\\])_{1}/g,
replace: '$1<i>$2</i>',
},
'underscore-italic'
)
/**
* ! This is the only way to preserve syntax highlighting, while output multiline strings correctly
*/
this.mdConverter.addExtension(
{
type: 'lang',
regex: /(^|\n)```html parsed([^]+)\n```\n/g,
replace: (_: string, p1: string, p2: string) => {
return (
p1 +
ejs.render(p2, {
rmWhitespace: true,
beautify: false,
})
)
},
},
'html-parsed'
)
}
async parse(
filename: string
): Promise<{
$: cheerio.Cheerio
html(): string
clean(): string
}> {
const id =
'md-' +
crypto
.createHash('sha256')
.update(filename)
.digest()
.toString('hex')
.substr(0, 8)
const $div = this.$(`<div id="${id}">`)
$div.html(await this.getHTML(filename))
$div.find('style').each((_, el) => {
const $el = this.$(el)
const html = $el.html() || ''
if (html.trim()) {
$el.html(scopeCss(html, `#${id}`))
}
})
return {
$: $div,
html: () => {
return this.$('<div>').append($div).html() || ''
},
clean: () => {
return jieba.cutForSearch($div.text() || '').join(' ')
},
}
}
private async getHTML(filename: string) {
return this.mdConverter.makeHtml(
await ejs.renderFile(filename, {
youtube: (id: string) =>
ejs.render(
/* html */ `
<div style="position:relative;padding-top:56.25%;">
<iframe src="https://www.youtube.com/embed/${id}"
frameborder="0"
allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"
allowfullscreen
style="position:absolute;top:0;left:0;width:100%;height:100%"></iframe>
</div>`,
{ rmWhitespace: true, beautify: false }
),
xCard: (opts: {
href: string
image?: string
title: string
description?: string
}) =>
this.$('<div>')
.append(
this.$('<x-card>')
.attr(opts)
.append(
this.$('<a>')
.attr({
href: opts.href,
rel: 'noopener',
target: '_blank',
})
.text(opts.title)
)
)
.html(),
})
)
}
}
+57
View File
@@ -0,0 +1,57 @@
import fg from 'fast-glob'
import fs from 'fs-extra'
import yaml from 'js-yaml'
import rimraf from 'rimraf'
import { Database, IMatter } from '../server/db'
import { builtPath, dstMediaPath } from '../server/dir'
import { THEME_FILENAME } from '../server/theme'
import { srcPath } from './dir'
import { MakeHTML } from './make-html'
async function main() {
rimraf.sync(dstMediaPath())
rimraf.sync(builtPath())
await fs.copy(srcPath('_media'), dstMediaPath())
await fs.ensureDir(builtPath())
await fs.copyFile(srcPath(THEME_FILENAME), builtPath(THEME_FILENAME))
const db = new Database()
db.init()
const files = await fg('**/*.md', {
cwd: srcPath('_posts'),
})
const makeHtml = new MakeHTML()
await Promise.all(
files.map(async (f) => {
const path = f.replace(/\.md$/, '')
const markdown = fs.readFileSync(srcPath('_posts', f), 'utf8')
const [h] = markdown.substr(4).split(/---\n(.*)$/s)
const header = yaml.safeLoad(h) as IMatter
const r = await makeHtml.parse(srcPath('_posts', f))
const contentHtml = r.html()
const excerptHtml = contentHtml.split(
/<!-- excerpt(?:_separator)? -->/
)[0]
db.insert({
...header,
path,
content: r.clean(),
excerptHtml,
contentHtml,
})
})
)
}
if (require.main === module) {
main()
}
+280
View File
@@ -0,0 +1,280 @@
import sqlite3 from 'better-sqlite3'
import * as z from 'zod'
import { builtPath } from './dir'
const zMatter = z.object({
date: z.date().optional(),
createdAt: z.date().optional(),
updatedAt: z.date().optional(),
priority: z.number().optional(),
title: z.string(),
image: z.string().optional(),
tag: z.array(z.string()).optional(),
category: z.string().optional(),
})
export type IMatter = z.infer<typeof zMatter>
export const zPost = z
.object({
path: z.string(),
/**
* Cleaned and jieba-separated markdown
*/
content: z.string(),
excerptHtml: z.string(),
contentHtml: z.string(),
})
.merge(zMatter.nonstrict())
export type IPost = z.infer<typeof zPost>
export class Database {
db: sqlite3.Database
constructor(opts?: sqlite3.Options) {
this.db = sqlite3(builtPath('data.db'), opts)
}
public init(): void {
this.db.exec(/* sql */ `
CREATE TABLE IF NOT EXISTS files (
[path] TEXT PRIMARY KEY,
[date] INT, -- epoch milli
createdAt INT, -- epoch milli
updatedAt INT, -- epoch milli
priority INT,
-- q.title
[image] TEXT,
-- m2o files_tag
-- q.category
-- q.content
excerptHtml TEXT NOT NULL,
contentHtml TEXT NOT NULL
);
CREATE INDEX IF NOT EXISTS files_date ON files([date]);
CREATE INDEX IF NOT EXISTS files_createdAt ON files(createdAt);
CREATE INDEX IF NOT EXISTS files_updatedAt ON files(updatedAt);
CREATE INDEX IF NOT EXISTS files_priority ON files(priority);
CREATE TABLE IF NOT EXISTS files_tag (
[path] TEXT NOT NULL,
tag TEXT NOT NULL,
PRIMARY KEY ([path], tag)
);
`)
this.db.exec(/* sql */ `
CREATE VIRTUAL TABLE IF NOT EXISTS q USING fts5 (
[path], -- REFERENCES files([path])
title,
tag, -- space separated
category, -- can compare via equal
content -- cleaned markdown
);
`)
}
public insert(...ps: IPost[]): void {
const fStmt = this.db.prepare(/* sql */ `
INSERT INTO files ([path], [date], [createdAt], [updatedAt], priority, [image], excerptHtml, contentHtml)
VALUES (@path, @date, @createdAt, @updatedAt, @priority, @image, @excerptHtml, @contentHtml)
`)
const ftStmt = this.db.prepare(/* sql */ `
INSERT INTO files_tag ([path], tag)
VALUES (@path, @tag)
`)
const qStmt = this.db.prepare(/* sql */ `
INSERT INTO q ([path], title, tag, category, content)
VALUES (@path, @title, @tag, @category, @content)
`)
this.db.transaction(() => {
// eslint-disable-next-line array-callback-return
ps.map((p) => {
const {
path,
date,
createdAt,
updatedAt,
priority,
image,
excerptHtml,
contentHtml,
title,
tag,
category,
content,
} = zPost.parse(p)
fStmt.run({
path,
priority,
image,
excerptHtml,
contentHtml,
date: date ? date.getTime() : null,
createdAt: createdAt ? createdAt.getTime() : null,
updatedAt: updatedAt ? updatedAt.getTime() : null,
})
qStmt.run({
path,
title,
category,
content,
tag: tag ? tag.join(' ') : undefined,
})
if (tag) {
Array.from(new Set(tag)).map((t) => {
ftStmt.run({
path,
tag: t,
})
})
}
})
})()
}
public get(id: string) {
const r = this.db
.prepare(
/* sql */ `
SELECT
[date],
title,
[image],
GROUP_CONCAT(ft.tag, ' ') tag,
category,
contentHtml content
FROM files f
JOIN q ON q.path = f.path
LEFT JOIN files_tag ft ON ft.path = f.path
WHERE f.path = @id
GROUP BY f.path
`
)
.get({ id })
if (!r) {
return null
}
return {
...r,
date: r.date ? new Date(r.date) : undefined,
tag: r.tag ? r.tag.split(/ /g) : undefined,
} as {
date?: Date
title: string
image?: string
tag?: string[]
category?: string
content: string
}
}
public q(
q: string,
opts: {
offset: number
limit: number
tag?: string
}
) {
return this._search(q, {
...opts,
orderedBy: 'RANK',
})
}
public by(opts: { tag?: string; offset: number; limit: number }) {
return this._search('', {
...opts,
orderedBy: 'priority DESC, [date] DESC, createdAt DESC, updatedAt DESC',
where: ['[date] IS NOT NULL'],
})
}
private _search(
q: string,
opts: {
offset: number
limit: number
orderedBy: string
tag?: string
where?: string[]
}
) {
const $where: string[] = []
if (q) {
$where.push('q = @q')
}
if (opts.tag) {
$where.push('ft.tag = @tag')
}
if (opts.where) {
$where.push(...opts.where)
}
const fromSegment = /* sql */ `
FROM files f
JOIN q ON q.path = f.path
${opts.tag ? `LEFT JOIN files_tag ft ON ft.path = f.path` : ''}
WHERE ${$where.join(' AND ') || 'TRUE'}
${opts.tag ? 'GROUP BY f.path' : ''}
`
const cond = {
q,
tag: opts.tag,
}
const count =
this.db
.prepare(
/* sql */ `
SELECT COUNT(f.path) [count]
${fromSegment}
`
)
.get(cond)?.count || 0
const result = this.db
.prepare(
/* sql */ `
SELECT
f.path [path],
[date],
title,
[image],
category,
excerptHtml excerpt
${fromSegment}
ORDER BY ${opts.orderedBy}
LIMIT ${opts.limit} OFFSET ${opts.offset}
`
)
.all(cond) as {
path: string
date?: Date
title: string
image?: string
category?: string
excerpt: string
}[]
return {
result,
count,
}
}
}
+7
View File
@@ -0,0 +1,7 @@
import path from 'path'
export const builtPath = (...ps: string[]): string =>
path.join(__dirname, '../built', ...ps)
export const dstMediaPath = (...ps: string[]): string =>
path.join(__dirname, '../static/media', ...ps)
+69
View File
@@ -0,0 +1,69 @@
import express from 'express'
import morgan from 'morgan'
import * as z from 'zod'
import { Database } from './db'
const app = express()
app.use(morgan('dev'))
const db = new Database({ readonly: true })
app.get('/', (req, res) => {
const { path } = z
.object({
path: z.string(),
})
.parse(req.query)
const r = db.get(path)
if (!r) {
res.sendStatus(404)
return
}
res.json(r)
})
app.get('/q', (req, res) => {
const { q, tag, page: _page = '1' } = z
.object({
q: z.string().optional(),
tag: z.string().optional(),
page: z
.string()
.refine((s) => /^\d+$/.test(s))
.optional(),
})
.parse(req.query)
const perPage = 5
const offset = (parseInt(_page) - 1) * perPage
if (q) {
res.json(
db.q(q, {
offset,
limit: perPage,
tag,
})
)
return
}
res.json(
db.by({
offset,
limit: perPage,
tag,
})
)
})
app.use((err: Error, _: express.Request, res: express.Response) => {
// eslint-disable-next-line no-console
console.error(err.stack)
res.status(500).send(err)
})
export default app
+61
View File
@@ -0,0 +1,61 @@
import fs from 'fs'
import path from 'path'
import yaml from 'js-yaml'
import * as z from 'zod'
export const THEME_FILENAME = 'theme.yml'
export const zTheme = z
.object({
title: z.string(),
awsm: z.string().optional(),
description: z.string().optional(),
keywords: z.array(z.string()).optional(),
nav: z
.array(
z
.object({
name: z.string(),
to: z.string(),
})
.or(
z.object({
name: z.string(),
href: z.string(),
})
)
)
.optional(),
author: z
.object({
url: z.string().optional(),
email: z.string().optional(),
name: z.string(),
})
.nonstrict(),
analytics: z
.object({
plausible: z.string().optional(),
})
.optional(),
comment: z
.object({
remark42: z
.object({
host: z.string(),
siteId: z.string(),
})
.optional(),
})
.optional(),
})
.nonstrict()
export type ITheme = z.infer<typeof zTheme>
export function getTheme() {
return zTheme.parse(
yaml.safeLoad(fs.readFileSync(path.join('built', THEME_FILENAME), 'utf-8'))
)
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

+11
View File
@@ -0,0 +1,11 @@
/* global WebComponents */
WebComponents.waitFor(() => {
// At this point we are guaranteed that all required polyfills have
// loaded, and can use web components API's.
// The standard pattern is to load element definitions that call
// `customElements.define` here.
// Note: returning the import's promise causes the custom elements
// polyfill to wait until all definitions are loaded and then upgrade
// the document in one batch, for better performance.
return import('https://unpkg.com/@patarapolw/make-html-x-card')
})
+10
View File
@@ -0,0 +1,10 @@
# STORE
**This directory is not required, you can delete it if you don't want to use it.**
This directory contains your Vuex Store files.
Vuex Store option is implemented in the Nuxt.js framework.
Creating a file in this directory automatically activates the option in the framework.
More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/vuex-store).
+21
View File
@@ -0,0 +1,21 @@
{
"compilerOptions": {
"target": "ES2018",
"module": "ESNext",
"moduleResolution": "Node",
"lib": ["ESNext", "ESNext.AsyncIterable", "DOM"],
"esModuleInterop": true,
"allowJs": true,
"sourceMap": true,
"strict": true,
"noEmit": true,
"experimentalDecorators": true,
"baseUrl": ".",
"paths": {
"~/*": ["./*"],
"@/*": ["./*"]
},
"types": ["@types/node", "@nuxt/types", "@nuxtjs/axios"]
},
"exclude": ["node_modules", ".nuxt", "dist"]
}
File diff suppressed because it is too large. Load diff
-53
View File
@@ -1,53 +0,0 @@
---
title: 千里之外
date: 2020-04-20
tag:
- song
---
<iframe width="560" height="315" src="https://www.youtube.com/embed/ocDo3ySyHSI" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<!-- excerpt -->
## 周杰伦
### 千里之外(& 费玉清)
作词:方文山
作曲:周杰伦
(周)屋簷如悬崖 风铃如沧海 我等燕归来
时间被安排 演一场意外 妳悄然走开
故事在城外 浓雾散不开 看不清对白
妳听不出来 风声不存在 是我在感慨
梦醒来 是谁在窗台 把结局打开
那薄如蝉翼的未来 禁不起谁来拆
(费)我送你离开 千里之外 你无声黑白
沉默年代 或许不该 太遥远的相爱
我送妳离开 天涯之外 妳是否还在
琴声何来 生死难猜 用一生 去等待
(周)闻泪声入林 寻梨花白 只得一行青苔
天在山之外 雨落花台 我两鬓斑白
闻泪声入林 寻梨花白 只得一行青苔
天在山之外 雨落花台 我等妳来
更多更详尽歌词 在 ※ Mojim.com 魔镜歌词网
(费)一身琉璃白 透明著尘埃 妳无瑕的爱
妳从雨中来 诗化了悲哀 我淋湿现在
(周)芙蓉水面采 船行影犹在 妳却不回来
被岁月覆蓋 妳说的花开 过去成空白
(费)梦醒来 是谁在窗台 把结局打开
(周)那薄如蝉翼的未来
(周)禁不起谁来拆
(费)我送你离开 千里之外 你无声黑白 沉默年代 或许不该 太遥远的相爱
(周)我送妳离开 天涯之外 妳是否还在 琴声何来 生死难猜 用一生
(费)我送妳离开 千里之外 妳无声黑白 沉默年代 或许不该 太遥远的相爱
(周)我送妳离开 天涯之外
(周)妳是否还在
(周)琴声何来
(费)生死难猜
(合)用一生去等待
-26
View File
@@ -1,26 +0,0 @@
---
title: 虫儿飞
date: 2020-04-10
tag:
- song
---
<iframe width="560" height="315" src="https://www.youtube.com/embed/4CazJNOLoM0" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
<!-- excerpt -->
黑黑的天空低垂
亮亮的繁星相随
虫儿飞 虫儿飞
你在思念谁
天上的星星流泪
地上的玫瑰枯萎
冷风吹 冷风吹
只要有你陪
虫儿飞 花儿睡
一双又一对才美
不怕天黑 只怕心碎
不管累不累
也不管东南西北
-81
View File
@@ -1,81 +0,0 @@
---
title: "千字文 - 1/1"
date: "2019-08-11"
tag:
- 千字文
- 汉字
---
```pug parsed
.w-100.mt-3
h3.text-center 天地玄黃,宇宙洪荒。
.w-100
figure.d-inline-block
img(src="https://upload.wikimedia.org/wikipedia/commons/a/ab/天-order.gif" height=100 data-no-cache)
figcaption.text-center tian1
figure.d-inline-block
img(src="https://upload.wikimedia.org/wikipedia/commons/f/fb/地-order.gif" height=100 data-no-cache)
figcaption.text-center di4
figure.d-inline-block
img(src="https://upload.wikimedia.org/wikipedia/commons/d/d3/玄-order.gif" height=100 data-no-cache)
figcaption.text-center xuan2
figure.d-inline-block
img(src="https://upload.wikimedia.org/wikipedia/commons/e/e7/黄-order.gif" height=100 data-no-cache)
figcaption.text-center huang2
.w-100
figure.d-inline-block
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/23431.gif" height=100 data-no-cache)
figcaption.text-center yu3
figure.d-inline-block
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/23449.gif" height=100 data-no-cache)
figcaption.text-center zhou4
figure.d-inline-block
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/27946.gif" height=100 data-no-cache)
figcaption.text-center hong2
figure.d-inline-block
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/33618.gif" height=100 data-no-cache)
figcaption.text-center huang1
```
<style>
img[height="100"] {
height: 100px;
}
figure {
margin: 0;
}
.w-100 {
width: 100%;
}
.mt-3 {
margin-top: 0.75rem;
}
.d-inline-block {
display: inline-block;
}
.text-center {
text-align: center;
}
table td:first-child {
width: 10em;
}
</style>
<!-- excerpt_separator -->
| | | |
| --- | --- | --- |
宇宙 | yǔzhòu | universe / cosmos
宇航 | yǔháng | space flight
宇航员 | yǔhángyuán | astronaut
宇宙飞船 | yǔzhòufēichuán | spacecraft
防洪 | fánghóng | flood control / flood prevention
山洪 | shānhóng | mountain flash flood / mountain torrent
荒 | huāng | desolate / shortage / scarce / out of practice / absurd / uncultivated / to neglect
荒野 | huāngyě | wilderness
-80
View File
@@ -1,80 +0,0 @@
---
title: "千字文 - 2/1"
date: "2019-08-20"
tag:
- 千字文
- 汉字
---
```pug parsed
.w-100.mt-3
h3.text-center 龍師火帝,鳥官人皇。
.w-100
figure.d-inline-block
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/40845.gif" height=100 data-no-cache)
figcaption.text-center long2
figure.d-inline-block
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/24107.gif" height=100 data-no-cache)
figcaption.text-center shi1
figure.d-inline-block
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/28779.gif" height=100 data-no-cache)
figcaption.text-center huo3
figure.d-inline-block
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/24093.gif" height=100 data-no-cache)
figcaption.text-center di4
.w-100
figure.d-inline-block
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/40165.gif" height=100 data-no-cache)
figcaption.text-center niao3
figure.d-inline-block
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/23448.gif" height=100 data-no-cache)
figcaption.text-center guan1
figure.d-inline-block
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/20154.gif" height=100 data-no-cache)
figcaption.text-center ren2
figure.d-inline-block
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/30343.gif" height=100 data-no-cache)
figcaption.text-center huang1
```
<!-- excerpt_separator -->
<style>
img[height="100"] {
height: 100px;
}
figure {
margin: 0;
}
.w-100 {
width: 100%;
}
.mt-3 {
margin-top: 0.75rem;
}
.d-inline-block {
display: inline-block;
}
.text-center {
text-align: center;
}
table td:first-child {
width: 10em;
}
</style>
| | | |
| --- | --- | --- |
官方 | guānfāng | government / official (approved or issued by an authority)
官员 (官員) | guānyuán | official (in an organization or government) / administrator
法官 | fǎguān | judge
警官 | jǐngguān | constable / police officer
感官 | gǎnguān | sense / sense organ
指挥官 (指揮官) | zhǐhuīguān | commander
收官 | shōuguān | final part of a go game (see 官子) / endgame / to finish up / to come to the final stage
Submodule template deleted from 0260f4b19f.
+3 -2
View File
@@ -1,4 +1,5 @@
title: polv's Chinese Learning Diary title: polv's Chinese Learning Diary
awsm: tasman
banner: ZhDiary banner: ZhDiary
baseUrl: https://zhdiary.polv.cc baseUrl: https://zhdiary.polv.cc
description: polv's Chinese Learning Diary description: polv's Chinese Learning Diary
@@ -7,7 +8,7 @@ keywords:
- patarapolw - patarapolw
- chinese - chinese
- mandarin - mandarin
tabs: nav:
- name: 千字文 - name: 千字文
to: /post/2019/08/千字文 to: /post/2019/08/千字文
author: author:
@@ -19,7 +20,7 @@ sidebar:
twitter: ChinesePol twitter: ChinesePol
analytics: analytics:
plausible: zhdiary.polv.cc plausible: zhdiary.polv.cc
comments: comment:
remark42: remark42:
host: https://remark42.polv.cc host: https://remark42.polv.cc
siteId: zhdiary siteId: zhdiary