remove pug
This commit is contained in:
1 parent
e397c9ae1e
commit
68840c9c60
49 files changed
+1421
-806
No files matched your search
@@ -6,7 +6,7 @@ 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 -->
|
||||||
|
|
||||||
|
|||||||
@@ -7,16 +7,12 @@ tag:
|
|||||||
|
|
||||||
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
|
<x-card
|
||||||
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
|
></x-card>
|
||||||
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
|
<x-card
|
||||||
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="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/hsk.yaml"
|
||||||
title: patarapolw/zhlevel
|
></x-card>
|
||||||
description: >-
|
|
||||||
Learn Chinese from sentences, Tatoeba, or use your own sentences -
|
|
||||||
patarapolw/zhlevel - /resources/level/hsk.yaml
|
|
||||||
```
|
|
||||||
|
|
||||||
爱, 八, 爸爸, 杯子, 北京, 本, 不, 不客气, 菜, 茶, 吃, 出租车, 打电话, 大, 的, 点, 电脑, 电视, 电影, 东西, 都, 读, 对不起, 多, 多少, 儿子, 二, 饭店, 飞机, 分钟
|
爱, 八, 爸爸, 杯子, 北京, 本, 不, 不客气, 菜, 茶, 吃, 出租车, 打电话, 大, 的, 点, 电脑, 电视, 电影, 东西, 都, 读, 对不起, 多, 多少, 儿子, 二, 饭店, 飞机, 分钟
|
||||||
@@ -5,7 +5,7 @@ tag:
|
|||||||
- song
|
- 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>
|
<%- youtube('ocDo3ySyHSI') %>
|
||||||
|
|
||||||
<!-- excerpt -->
|
<!-- excerpt -->
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ 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 -->
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ tag:
|
|||||||
- song
|
- 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>
|
<%- youtube('4CazJNOLoM0') %>
|
||||||
|
|
||||||
<!-- excerpt -->
|
<!-- excerpt -->
|
||||||
|
|
||||||
|
|||||||
+40
-31
@@ -1,41 +1,50 @@
|
|||||||
---
|
---
|
||||||
title: "千字文 - 1/1"
|
title: "千字文 - 1/1"
|
||||||
createdAt: 2019-08-11T00:00:00+07:00
|
date: 2019-08-11T00: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://upload.wikimedia.org/wikipedia/commons/a/ab/天-order.gif" height=100 data-no-cache)
|
<img src="https://upload.wikimedia.org/wikipedia/commons/a/ab/天-order.gif" height="100" />
|
||||||
figcaption.text-center tian1
|
<figcaption class="text-center">tian1</figcaption>
|
||||||
figure.d-inline-block
|
</figure>
|
||||||
img(src="https://upload.wikimedia.org/wikipedia/commons/f/fb/地-order.gif" height=100 data-no-cache)
|
<figure class="d-inline-block">
|
||||||
figcaption.text-center di4
|
<img src="https://upload.wikimedia.org/wikipedia/commons/f/fb/地-order.gif" height="100" />
|
||||||
figure.d-inline-block
|
<figcaption class="text-center">di4</figcaption>
|
||||||
img(src="https://upload.wikimedia.org/wikipedia/commons/d/d3/玄-order.gif" height=100 data-no-cache)
|
</figure>
|
||||||
figcaption.text-center xuan2
|
<figure class="d-inline-block">
|
||||||
figure.d-inline-block
|
<img src="https://upload.wikimedia.org/wikipedia/commons/d/d3/玄-order.gif" height="100" />
|
||||||
img(src="https://upload.wikimedia.org/wikipedia/commons/e/e7/黄-order.gif" height=100 data-no-cache)
|
<figcaption class="text-center">xuan2</figcaption>
|
||||||
figcaption.text-center huang2
|
</figure>
|
||||||
.w-100
|
<figure class="d-inline-block">
|
||||||
figure.d-inline-block
|
<img src="https://upload.wikimedia.org/wikipedia/commons/e/e7/黄-order.gif" height="100" />
|
||||||
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/23431.gif" height=100 data-no-cache)
|
<figcaption class="text-center">huang2</figcaption>
|
||||||
figcaption.text-center yu3
|
</figure>
|
||||||
figure.d-inline-block
|
</div>
|
||||||
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/23449.gif" height=100 data-no-cache)
|
<div class="w-100">
|
||||||
figcaption.text-center zhou4
|
<figure class="d-inline-block">
|
||||||
figure.d-inline-block
|
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/23431.gif" height="100" />
|
||||||
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/27946.gif" height=100 data-no-cache)
|
<figcaption class="text-center">yu3</figcaption>
|
||||||
figcaption.text-center hong2
|
</figure>
|
||||||
figure.d-inline-block
|
<figure class="d-inline-block">
|
||||||
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/33618.gif" height=100 data-no-cache)
|
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/23449.gif" height="100" />
|
||||||
figcaption.text-center huang1
|
<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>
|
<style>
|
||||||
img[height="100"] {
|
img[height="100"] {
|
||||||
|
|||||||
+39
-30
@@ -6,36 +6,45 @@ 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"] {
|
||||||
|
|||||||
+40
-30
@@ -6,36 +6,46 @@ 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"] {
|
||||||
|
|||||||
+40
-30
@@ -6,36 +6,46 @@ 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"] {
|
||||||
|
|||||||
+39
-30
@@ -6,36 +6,45 @@ 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"] {
|
||||||
|
|||||||
+39
-30
@@ -6,36 +6,45 @@ 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"] {
|
||||||
|
|||||||
+39
-30
@@ -6,36 +6,45 @@ 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"] {
|
||||||
|
|||||||
+39
-30
@@ -6,36 +6,45 @@ 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"] {
|
||||||
|
|||||||
+39
-30
@@ -6,36 +6,45 @@ 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"] {
|
||||||
|
|||||||
+39
-30
@@ -6,36 +6,45 @@ 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/40845.gif" height=100 data-no-cache)
|
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/40845.gif" height="100" />
|
||||||
figcaption.text-center long2
|
<figcaption class="text-center">long2</figcaption>
|
||||||
figure.d-inline-block
|
</figure>
|
||||||
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/24107.gif" height=100 data-no-cache)
|
<figure class="d-inline-block">
|
||||||
figcaption.text-center shi1
|
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/24107.gif" height="100" />
|
||||||
figure.d-inline-block
|
<figcaption class="text-center">shi1</figcaption>
|
||||||
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/28779.gif" height=100 data-no-cache)
|
</figure>
|
||||||
figcaption.text-center huo3
|
<figure class="d-inline-block">
|
||||||
figure.d-inline-block
|
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/28779.gif" height="100" />
|
||||||
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/24093.gif" height=100 data-no-cache)
|
<figcaption class="text-center">huo3</figcaption>
|
||||||
figcaption.text-center di4
|
</figure>
|
||||||
.w-100
|
<figure class="d-inline-block">
|
||||||
figure.d-inline-block
|
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/24093.gif" height="100" />
|
||||||
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/40165.gif" height=100 data-no-cache)
|
<figcaption class="text-center">di4</figcaption>
|
||||||
figcaption.text-center niao3
|
</figure>
|
||||||
figure.d-inline-block
|
</div>
|
||||||
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/23448.gif" height=100 data-no-cache)
|
<div class="w-100">
|
||||||
figcaption.text-center guan1
|
<figure class="d-inline-block">
|
||||||
figure.d-inline-block
|
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/40165.gif" height="100" />
|
||||||
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/20154.gif" height=100 data-no-cache)
|
<figcaption class="text-center">niao3</figcaption>
|
||||||
figcaption.text-center ren2
|
</figure>
|
||||||
figure.d-inline-block
|
<figure class="d-inline-block">
|
||||||
img(src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/30343.gif" height=100 data-no-cache)
|
<img src="https://www.mdbg.net/chinese/rsc/img/stroke_anim/23448.gif" height="100" />
|
||||||
figcaption.text-center huang1
|
<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 -->
|
<!-- excerpt_separator -->
|
||||||
|
|
||||||
|
|||||||
+39
-30
@@ -6,36 +6,45 @@ 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"] {
|
||||||
|
|||||||
+39
-30
@@ -6,36 +6,45 @@ 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"] {
|
||||||
|
|||||||
+39
-30
@@ -6,36 +6,45 @@ 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"] {
|
||||||
|
|||||||
+39
-30
@@ -6,36 +6,45 @@ 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"] {
|
||||||
|
|||||||
+39
-30
@@ -6,36 +6,45 @@ 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"] {
|
||||||
|
|||||||
+39
-30
@@ -6,36 +6,45 @@ 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"] {
|
||||||
|
|||||||
+39
-30
@@ -6,36 +6,45 @@ 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"] {
|
||||||
|
|||||||
+40
-30
@@ -6,36 +6,46 @@ 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"] {
|
||||||
|
|||||||
+39
-30
@@ -6,36 +6,45 @@ 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"] {
|
||||||
|
|||||||
+39
-30
@@ -6,36 +6,45 @@ 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"] {
|
||||||
|
|||||||
+39
-30
@@ -6,36 +6,45 @@ 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"] {
|
||||||
|
|||||||
@@ -15,5 +15,6 @@ module.exports = {
|
|||||||
// add your custom rules here
|
// add your custom rules here
|
||||||
rules: {
|
rules: {
|
||||||
'require-await': 0,
|
'require-await': 0,
|
||||||
|
'vue/no-v-html': 0,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
+6
@@ -0,0 +1,6 @@
|
|||||||
|
interface IPostTeaser {
|
||||||
|
title: string
|
||||||
|
path: string
|
||||||
|
date?: string
|
||||||
|
excerpt: string
|
||||||
|
}
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
<template>
|
|
||||||
<svg
|
|
||||||
class="NuxtLogo"
|
|
||||||
width="245"
|
|
||||||
height="180"
|
|
||||||
viewBox="0 0 452 342"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
>
|
|
||||||
<path
|
|
||||||
d="M139 330l-1-2c-2-4-2-8-1-13H29L189 31l67 121 22-16-67-121c-1-2-9-14-22-14-6 0-15 2-22 15L5 303c-1 3-8 16-2 27 4 6 10 12 24 12h136c-14 0-21-6-24-12z"
|
|
||||||
fill="#00C58E"
|
|
||||||
/>
|
|
||||||
<path
|
|
||||||
d="M447 304L317 70c-2-2-9-15-22-15-6 0-15 3-22 15l-17 28v54l39-67 129 230h-49a23 23 0 0 1-2 14l-1 1c-6 11-21 12-23 12h76c3 0 17-1 24-12 3-5 5-14-2-26z"
|
|
||||||
fill="#108775"
|
|
||||||
/>
|
|
||||||
<path
|
|
||||||
d="M376 330v-1l1-2c1-4 2-8 1-12l-4-12-102-178-15-27h-1l-15 27-102 178-4 12a24 24 0 0 0 2 15c4 6 10 12 24 12h190c3 0 18-1 25-12zM256 152l93 163H163l93-163z"
|
|
||||||
fill="#2F495E"
|
|
||||||
/>
|
|
||||||
</svg>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<style>
|
|
||||||
.NuxtLogo {
|
|
||||||
animation: 1s appear;
|
|
||||||
margin: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes appear {
|
|
||||||
0% {
|
|
||||||
opacity: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
@@ -0,0 +1,92 @@
|
|||||||
|
<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 > 2">
|
||||||
|
<nuxt-link :to="makePageUrl(1)" aria-label="page 1"> < </nuxt-link>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li v-if="page > 1">
|
||||||
|
<nuxt-link :to="makePageUrl(1)" aria-label="page 1">1</nuxt-link>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li v-if="page > 4">
|
||||||
|
<span> … </span>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li v-if="page > 3">
|
||||||
|
<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 - 2">
|
||||||
|
<nuxt-link
|
||||||
|
:to="makePageUrl(page + 1)"
|
||||||
|
:aria-label="`page ${page + 1}`"
|
||||||
|
>
|
||||||
|
{{ page + 1 }}
|
||||||
|
</nuxt-link>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li v-if="page < total - 3">
|
||||||
|
<span> … </span>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li v-if="page < total">
|
||||||
|
<nuxt-link :to="makePageUrl(total)" :aria-label="`page ${total}`">
|
||||||
|
{{ total }}
|
||||||
|
</nuxt-link>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li v-if="page < total - 1">
|
||||||
|
<nuxt-link
|
||||||
|
:to="makePageUrl(page + 1)"
|
||||||
|
:aria-label="`page ${page + 1}`"
|
||||||
|
>
|
||||||
|
>
|
||||||
|
</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(),
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
@@ -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>
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
# COMPONENTS
|
|
||||||
|
|
||||||
**This directory is not required, you can delete it if you don't want to use it.**
|
|
||||||
|
|
||||||
The components directory contains your Vue.js Components.
|
|
||||||
|
|
||||||
_Nuxt.js doesn't supercharge these components._
|
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<h1 v-if="error.statusCode === 404">Page not found</h1>
|
||||||
|
<h1 v-else>An error occurred</h1>
|
||||||
|
<NuxtLink to="/">Home page</NuxtLink>
|
||||||
|
</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>
|
||||||
@@ -27,13 +27,24 @@ const config = async (): Promise<NuxtConfig> => {
|
|||||||
: 'https://unpkg.com/awsm.css/dist/awsm.min.css',
|
: 'https://unpkg.com/awsm.css/dist/awsm.min.css',
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
script: [
|
||||||
|
{
|
||||||
|
src:
|
||||||
|
'https://unpkg.com/@webcomponents/webcomponentsjs/webcomponents-loader.js',
|
||||||
|
defer: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'module',
|
||||||
|
src: '/webcomponents.js',
|
||||||
|
},
|
||||||
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
// Global CSS (https://go.nuxtjs.dev/config-css)
|
// Global CSS (https://go.nuxtjs.dev/config-css)
|
||||||
css: [],
|
css: [],
|
||||||
|
|
||||||
// Plugins to run before rendering page (https://go.nuxtjs.dev/config-plugins)
|
// Plugins to run before rendering page (https://go.nuxtjs.dev/config-plugins)
|
||||||
plugins: [],
|
plugins: ['~/plugins/format.ts'],
|
||||||
|
|
||||||
// Auto import components (https://go.nuxtjs.dev/config-components)
|
// Auto import components (https://go.nuxtjs.dev/config-components)
|
||||||
components: true,
|
components: true,
|
||||||
@@ -58,6 +69,7 @@ const config = async (): Promise<NuxtConfig> => {
|
|||||||
env: {
|
env: {
|
||||||
THEME: JSON.stringify(theme),
|
THEME: JSON.stringify(theme),
|
||||||
},
|
},
|
||||||
|
serverMiddleware: [{ path: '/api', handler: '~/server/index.ts' }],
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -35,11 +35,13 @@
|
|||||||
"@nuxtjs/eslint-module": "^2.0.0",
|
"@nuxtjs/eslint-module": "^2.0.0",
|
||||||
"@types/better-sqlite3": "^5.4.1",
|
"@types/better-sqlite3": "^5.4.1",
|
||||||
"@types/cheerio": "^0.22.23",
|
"@types/cheerio": "^0.22.23",
|
||||||
|
"@types/ejs": "^3.0.5",
|
||||||
"@types/fs-extra": "^9.0.5",
|
"@types/fs-extra": "^9.0.5",
|
||||||
"@types/rimraf": "^3.0.0",
|
"@types/rimraf": "^3.0.0",
|
||||||
"@types/showdown": "^1.9.3",
|
"@types/showdown": "^1.9.3",
|
||||||
"babel-eslint": "^10.1.0",
|
"babel-eslint": "^10.1.0",
|
||||||
"dotenv": "^8.2.0",
|
"dotenv": "^8.2.0",
|
||||||
|
"ejs": "^3.1.5",
|
||||||
"eslint": "^7.10.0",
|
"eslint": "^7.10.0",
|
||||||
"eslint-config-prettier": "^6.12.0",
|
"eslint-config-prettier": "^6.12.0",
|
||||||
"eslint-plugin-nuxt": "^1.0.0",
|
"eslint-plugin-nuxt": "^1.0.0",
|
||||||
|
|||||||
@@ -0,0 +1,28 @@
|
|||||||
|
<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>({
|
||||||
|
async fetch() {
|
||||||
|
const { result, count } = await this.$axios.$get('/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>
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
<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>({
|
||||||
|
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>
|
||||||
@@ -1,30 +1,9 @@
|
|||||||
<template>
|
|
||||||
<div class="container">
|
|
||||||
<div>
|
|
||||||
<div class="links">
|
|
||||||
<a
|
|
||||||
href="https://nuxtjs.org/"
|
|
||||||
target="_blank"
|
|
||||||
rel="noopener noreferrer"
|
|
||||||
class="button--green"
|
|
||||||
>
|
|
||||||
Documentation
|
|
||||||
</a>
|
|
||||||
<a
|
|
||||||
href="https://github.com/nuxt/nuxt.js"
|
|
||||||
target="_blank"
|
|
||||||
rel="noopener noreferrer"
|
|
||||||
class="button--grey"
|
|
||||||
>
|
|
||||||
GitHub
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Vue from 'vue'
|
import Vue from 'vue'
|
||||||
|
|
||||||
export default Vue.extend({})
|
export default Vue.extend({
|
||||||
|
middleware: (ctx) => {
|
||||||
|
ctx.redirect('/blog')
|
||||||
|
},
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
# PLUGINS
|
|
||||||
|
|
||||||
**This directory is not required, you can delete it if you don't want to use it.**
|
|
||||||
|
|
||||||
This directory contains Javascript plugins that you want to run before mounting the root Vue.js application.
|
|
||||||
|
|
||||||
More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/plugins).
|
|
||||||
@@ -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',
|
||||||
|
})
|
||||||
|
: ''
|
||||||
|
})
|
||||||
@@ -14,12 +14,6 @@ export const CONTENT_PATH = path.resolve(
|
|||||||
)
|
)
|
||||||
|
|
||||||
export const srcPath = (
|
export const srcPath = (
|
||||||
root: '_post' | '_media' | typeof THEME_FILENAME,
|
root: '_posts' | '_media' | typeof THEME_FILENAME,
|
||||||
...ps: string[]
|
...ps: string[]
|
||||||
): string => path.join(CONTENT_PATH, root, ...ps)
|
): string => path.join(CONTENT_PATH, root, ...ps)
|
||||||
|
|
||||||
export const builtPath = (...ps: string[]): string =>
|
|
||||||
path.join(__dirname, '../built', ...ps)
|
|
||||||
|
|
||||||
export const dstMediaPath = (...ps: string[]): string =>
|
|
||||||
path.join(__dirname, '../static/media', ...ps)
|
|
||||||
@@ -2,6 +2,7 @@ import crypto from 'crypto'
|
|||||||
|
|
||||||
import scopeCss from '@patarapolw/scope-css'
|
import scopeCss from '@patarapolw/scope-css'
|
||||||
import cheerio from 'cheerio'
|
import cheerio from 'cheerio'
|
||||||
|
import ejs from 'ejs'
|
||||||
import jieba from 'nodejieba'
|
import jieba from 'nodejieba'
|
||||||
import showdown from 'showdown'
|
import showdown from 'showdown'
|
||||||
|
|
||||||
@@ -16,7 +17,7 @@ export class MakeHTML {
|
|||||||
strikethrough: true,
|
strikethrough: true,
|
||||||
tables: true,
|
tables: true,
|
||||||
tasklists: true,
|
tasklists: true,
|
||||||
simpleLineBreaks: true,
|
// simpleLineBreaks: true,
|
||||||
openLinksInNewWindow: true,
|
openLinksInNewWindow: true,
|
||||||
backslashEscapesHTMLTags: true,
|
backslashEscapesHTMLTags: true,
|
||||||
emoji: true,
|
emoji: true,
|
||||||
@@ -24,7 +25,7 @@ export class MakeHTML {
|
|||||||
metadata: true,
|
metadata: true,
|
||||||
})
|
})
|
||||||
|
|
||||||
constructor(private slug: string) {
|
constructor() {
|
||||||
/**
|
/**
|
||||||
* ! For some reasons default underscore italic fails to render...
|
* ! For some reasons default underscore italic fails to render...
|
||||||
*/
|
*/
|
||||||
@@ -38,18 +39,24 @@ export class MakeHTML {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
parse(md: string): string {
|
async parse(
|
||||||
|
filename: string
|
||||||
|
): Promise<{
|
||||||
|
$: cheerio.Cheerio
|
||||||
|
html(): string
|
||||||
|
clean(): string
|
||||||
|
}> {
|
||||||
const id =
|
const id =
|
||||||
'md-' +
|
'md-' +
|
||||||
crypto
|
crypto
|
||||||
.createHash('sha256')
|
.createHash('sha256')
|
||||||
.update(this.slug || md)
|
.update(filename)
|
||||||
.digest()
|
.digest()
|
||||||
.toString('hex')
|
.toString('hex')
|
||||||
.substr(8)
|
.substr(8)
|
||||||
|
|
||||||
const $div = this.$(`<div id="${id}">`)
|
const $div = this.$(`<div id="${id}">`)
|
||||||
$div.html(this.mdConverter.makeHtml(md))
|
$div.html(await this.getHTML(filename))
|
||||||
$div.find('style').each((_, el) => {
|
$div.find('style').each((_, el) => {
|
||||||
const $el = this.$(el)
|
const $el = this.$(el)
|
||||||
const html = $el.html() || ''
|
const html = $el.html() || ''
|
||||||
@@ -58,14 +65,34 @@ export class MakeHTML {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
return this.$('<div>').append($div).html() || ''
|
return {
|
||||||
|
$: $div,
|
||||||
|
html() {
|
||||||
|
return $div.html() || ''
|
||||||
|
},
|
||||||
|
clean() {
|
||||||
|
return jieba.cutForSearch($div.text() || '').join(' ')
|
||||||
|
},
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
clean(md: string): string {
|
private async getHTML(filename: string) {
|
||||||
const $div = this.$('<div>')
|
return this.mdConverter.makeHtml(
|
||||||
$div.html(this.mdConverter.makeHtml(md))
|
await ejs.renderFile(filename, {
|
||||||
$div.remove('style')
|
youtube: (id: string) =>
|
||||||
|
this.$('<div>')
|
||||||
return jieba.cutForSearch($div.html() || '').join(' ')
|
.html(
|
||||||
|
/* html */ `
|
||||||
|
<div style="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="width:100%; height:100%"></iframe>
|
||||||
|
</div>`
|
||||||
|
)
|
||||||
|
.html(),
|
||||||
|
})
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4,8 +4,9 @@ import yaml from 'js-yaml'
|
|||||||
import rimraf from 'rimraf'
|
import rimraf from 'rimraf'
|
||||||
|
|
||||||
import { Database, IMatter } from '../server/db'
|
import { Database, IMatter } from '../server/db'
|
||||||
|
import { builtPath, dstMediaPath } from '../server/dir'
|
||||||
import { THEME_FILENAME } from '../server/theme'
|
import { THEME_FILENAME } from '../server/theme'
|
||||||
import { builtPath, dstMediaPath, srcPath } from './dir'
|
import { srcPath } from './dir'
|
||||||
import { MakeHTML } from './make-html'
|
import { MakeHTML } from './make-html'
|
||||||
|
|
||||||
async function main() {
|
async function main() {
|
||||||
@@ -17,40 +18,38 @@ async function main() {
|
|||||||
|
|
||||||
await fs.copyFile(srcPath(THEME_FILENAME), builtPath(THEME_FILENAME))
|
await fs.copyFile(srcPath(THEME_FILENAME), builtPath(THEME_FILENAME))
|
||||||
|
|
||||||
const db = new Database(builtPath('data.db'))
|
const db = new Database()
|
||||||
db.init()
|
db.init()
|
||||||
|
|
||||||
const files = await fg('**/*.md', {
|
const files = await fg('**/*.md', {
|
||||||
cwd: srcPath('_post'),
|
cwd: srcPath('_posts'),
|
||||||
})
|
})
|
||||||
|
|
||||||
// eslint-disable-next-line array-callback-return
|
const makeHtml = new MakeHTML()
|
||||||
files.map((f) => {
|
|
||||||
const path = f.replace(/\.md$/, '')
|
|
||||||
let markdown = fs.readFileSync(srcPath('_post', f), 'utf8')
|
|
||||||
|
|
||||||
const [h, c = ''] = markdown.substr(4).split(/---\n(.*)$/s)
|
await Promise.all(
|
||||||
const header = yaml.safeLoad(h, {
|
files.map(async (f) => {
|
||||||
schema: yaml.JSON_SCHEMA,
|
const path = f.replace(/\.md$/, '')
|
||||||
}) as IMatter
|
const markdown = fs.readFileSync(srcPath('_posts', f), 'utf8')
|
||||||
markdown = c
|
|
||||||
|
|
||||||
const makeHtml = new MakeHTML(path)
|
const [h] = markdown.substr(4).split(/---\n(.*)$/s)
|
||||||
|
const header = yaml.safeLoad(h) as IMatter
|
||||||
|
|
||||||
const content = makeHtml.clean(markdown)
|
const r = await makeHtml.parse(srcPath('_posts', f))
|
||||||
const excerptHtml = makeHtml.parse(
|
const contentHtml = r.html()
|
||||||
markdown.split(/<!-- excerpt(?:_separator)? -->/)[0]
|
const excerptHtml = contentHtml.split(
|
||||||
)
|
/<!-- excerpt(?:_separator)? -->/
|
||||||
const contentHtml = makeHtml.parse(markdown)
|
)[0]
|
||||||
|
|
||||||
db.insert({
|
db.insert({
|
||||||
...header,
|
...header,
|
||||||
path,
|
path,
|
||||||
content,
|
content: r.clean(),
|
||||||
excerptHtml,
|
excerptHtml,
|
||||||
contentHtml,
|
contentHtml,
|
||||||
|
})
|
||||||
})
|
})
|
||||||
})
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (require.main === module) {
|
if (require.main === module) {
|
||||||
|
|||||||
+151
-11
@@ -1,6 +1,8 @@
|
|||||||
import sqlite3 from 'better-sqlite3'
|
import sqlite3 from 'better-sqlite3'
|
||||||
import * as z from 'zod'
|
import * as z from 'zod'
|
||||||
|
|
||||||
|
import { builtPath } from './dir'
|
||||||
|
|
||||||
const zMatter = z.object({
|
const zMatter = z.object({
|
||||||
date: z.date().optional(),
|
date: z.date().optional(),
|
||||||
createdAt: z.date().optional(),
|
createdAt: z.date().optional(),
|
||||||
@@ -31,8 +33,8 @@ export type IPost = z.infer<typeof zPost>
|
|||||||
export class Database {
|
export class Database {
|
||||||
db: sqlite3.Database
|
db: sqlite3.Database
|
||||||
|
|
||||||
constructor(public filepath: string, opts?: sqlite3.Options) {
|
constructor(opts?: sqlite3.Options) {
|
||||||
this.db = sqlite3(filepath, opts)
|
this.db = sqlite3(builtPath('data.db'), opts)
|
||||||
}
|
}
|
||||||
|
|
||||||
public init(): void {
|
public init(): void {
|
||||||
@@ -40,8 +42,8 @@ export class Database {
|
|||||||
CREATE TABLE IF NOT EXISTS files (
|
CREATE TABLE IF NOT EXISTS files (
|
||||||
[path] TEXT PRIMARY KEY,
|
[path] TEXT PRIMARY KEY,
|
||||||
[date] INT, -- epoch milli
|
[date] INT, -- epoch milli
|
||||||
[createdAt] INT, -- epoch milli
|
createdAt INT, -- epoch milli
|
||||||
[updatedAt] INT, -- epoch milli
|
updatedAt INT, -- epoch milli
|
||||||
priority INT,
|
priority INT,
|
||||||
-- q.title
|
-- q.title
|
||||||
[image] TEXT,
|
[image] TEXT,
|
||||||
@@ -83,20 +85,158 @@ export class Database {
|
|||||||
this.db.transaction(() => {
|
this.db.transaction(() => {
|
||||||
// eslint-disable-next-line array-callback-return
|
// eslint-disable-next-line array-callback-return
|
||||||
ps.map((p) => {
|
ps.map((p) => {
|
||||||
p = zPost.parse(p)
|
const {
|
||||||
|
path,
|
||||||
|
date,
|
||||||
|
createdAt,
|
||||||
|
updatedAt,
|
||||||
|
priority,
|
||||||
|
image,
|
||||||
|
excerptHtml,
|
||||||
|
contentHtml,
|
||||||
|
title,
|
||||||
|
tag,
|
||||||
|
category,
|
||||||
|
content,
|
||||||
|
} = zPost.parse(p)
|
||||||
|
|
||||||
fStmt.run({
|
fStmt.run({
|
||||||
...p,
|
path,
|
||||||
date: p.date ? p.date.getTime() : undefined,
|
priority,
|
||||||
createdAt: p.createdAt ? p.createdAt.getTime() : undefined,
|
image,
|
||||||
updatedAt: p.updatedAt ? p.updatedAt.getTime() : undefined,
|
excerptHtml,
|
||||||
|
contentHtml,
|
||||||
|
date: date ? date.getTime() : null,
|
||||||
|
createdAt: createdAt ? createdAt.getTime() : null,
|
||||||
|
updatedAt: updatedAt ? updatedAt.getTime() : null,
|
||||||
})
|
})
|
||||||
|
|
||||||
qStmt.run({
|
qStmt.run({
|
||||||
...p,
|
path,
|
||||||
tag: p.tag ? p.tag.join(' ') : undefined,
|
title,
|
||||||
|
category,
|
||||||
|
content,
|
||||||
|
tag: tag ? tag.join(' ') : undefined,
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})()
|
})()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public get(id: string) {
|
||||||
|
const r = this.db
|
||||||
|
.prepare(
|
||||||
|
/* sql */ `
|
||||||
|
SELECT
|
||||||
|
[date],
|
||||||
|
title,
|
||||||
|
[image],
|
||||||
|
tag,
|
||||||
|
category,
|
||||||
|
excerptHtml excerpt,
|
||||||
|
contentHtml content
|
||||||
|
FROM files f
|
||||||
|
JOIN q ON q.path = f.path
|
||||||
|
WHERE f.path = @id
|
||||||
|
`
|
||||||
|
)
|
||||||
|
.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
|
||||||
|
excerpt: string
|
||||||
|
content: string
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public q(
|
||||||
|
q: string,
|
||||||
|
opts: {
|
||||||
|
offset: number
|
||||||
|
limit: number
|
||||||
|
}
|
||||||
|
) {
|
||||||
|
return this._search(q, opts, 'RANK')
|
||||||
|
}
|
||||||
|
|
||||||
|
public by(
|
||||||
|
q: string,
|
||||||
|
opts: {
|
||||||
|
offset: number
|
||||||
|
limit: number
|
||||||
|
}
|
||||||
|
) {
|
||||||
|
return this._search(
|
||||||
|
q,
|
||||||
|
opts,
|
||||||
|
'priority DESC, [date] DESC, createdAt DESC, updatedAt DESC'
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
private _search(
|
||||||
|
q: string,
|
||||||
|
opts: {
|
||||||
|
offset: number
|
||||||
|
limit: number
|
||||||
|
},
|
||||||
|
orderedBy: string
|
||||||
|
) {
|
||||||
|
const fromSegment = /* sql */ `
|
||||||
|
FROM files f
|
||||||
|
JOIN q ON q.path = f.path
|
||||||
|
${q ? `WHERE q = @q` : ''}
|
||||||
|
`
|
||||||
|
|
||||||
|
const count =
|
||||||
|
this.db
|
||||||
|
.prepare(
|
||||||
|
/* sql */ `
|
||||||
|
SELECT COUNT(f.path) [count]
|
||||||
|
${fromSegment}
|
||||||
|
`
|
||||||
|
)
|
||||||
|
.get({ q })?.count || 0
|
||||||
|
|
||||||
|
const result = this.db
|
||||||
|
.prepare(
|
||||||
|
/* sql */ `
|
||||||
|
SELECT
|
||||||
|
f.path [path],
|
||||||
|
[date],
|
||||||
|
title,
|
||||||
|
[image],
|
||||||
|
tag,
|
||||||
|
category,
|
||||||
|
excerptHtml excerpt
|
||||||
|
${fromSegment}
|
||||||
|
ORDER BY ${orderedBy}
|
||||||
|
LIMIT ${opts.limit} OFFSET ${opts.offset}
|
||||||
|
`
|
||||||
|
)
|
||||||
|
.all({ q }) as {
|
||||||
|
path: string
|
||||||
|
date?: Date
|
||||||
|
title: string
|
||||||
|
image?: string
|
||||||
|
tag?: string[]
|
||||||
|
category?: string
|
||||||
|
excerpt: string
|
||||||
|
}[]
|
||||||
|
|
||||||
|
return {
|
||||||
|
result,
|
||||||
|
count,
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -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)
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
import express from 'express'
|
||||||
|
import * as z from 'zod'
|
||||||
|
|
||||||
|
import { Database } from './db'
|
||||||
|
|
||||||
|
const app = express()
|
||||||
|
const db = new Database({ readonly: true })
|
||||||
|
|
||||||
|
app.get('/', (req, res) => {
|
||||||
|
const { id } = z
|
||||||
|
.object({
|
||||||
|
id: z.string(),
|
||||||
|
})
|
||||||
|
.parse(req.query)
|
||||||
|
|
||||||
|
const r = db.get(id)
|
||||||
|
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} ${tag ? `tag:${tag}` : ''}`, {
|
||||||
|
offset,
|
||||||
|
limit: perPage,
|
||||||
|
})
|
||||||
|
)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
res.json(
|
||||||
|
db.by(tag ? `tag:${tag}` : '', {
|
||||||
|
offset,
|
||||||
|
limit: perPage,
|
||||||
|
})
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
export default app
|
||||||
@@ -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')
|
||||||
|
})
|
||||||
@@ -3,11 +3,7 @@
|
|||||||
"target": "ES2018",
|
"target": "ES2018",
|
||||||
"module": "ESNext",
|
"module": "ESNext",
|
||||||
"moduleResolution": "Node",
|
"moduleResolution": "Node",
|
||||||
"lib": [
|
"lib": ["ESNext", "ESNext.AsyncIterable", "DOM"],
|
||||||
"ESNext",
|
|
||||||
"ESNext.AsyncIterable",
|
|
||||||
"DOM"
|
|
||||||
],
|
|
||||||
"esModuleInterop": true,
|
"esModuleInterop": true,
|
||||||
"allowJs": true,
|
"allowJs": true,
|
||||||
"sourceMap": true,
|
"sourceMap": true,
|
||||||
@@ -16,21 +12,10 @@
|
|||||||
"experimentalDecorators": true,
|
"experimentalDecorators": true,
|
||||||
"baseUrl": ".",
|
"baseUrl": ".",
|
||||||
"paths": {
|
"paths": {
|
||||||
"~/*": [
|
"~/*": ["./*"],
|
||||||
"./*"
|
"@/*": ["./*"]
|
||||||
],
|
|
||||||
"@/*": [
|
|
||||||
"./*"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"types": [
|
"types": ["@types/node", "@nuxt/types", "@nuxtjs/axios"]
|
||||||
"@types/node",
|
|
||||||
"@nuxt/types"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"exclude": [
|
"exclude": ["node_modules", ".nuxt", "dist"]
|
||||||
"node_modules",
|
|
||||||
".nuxt",
|
|
||||||
"dist"
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
@@ -1404,6 +1404,11 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
"@types/node" "*"
|
"@types/node" "*"
|
||||||
|
|
||||||
|
"@types/ejs@^3.0.5":
|
||||||
|
version "3.0.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/ejs/-/ejs-3.0.5.tgz#95a3a1c3d9603eba80fe67ff56da1ba275ef2eda"
|
||||||
|
integrity sha512-k4ef69sS4sIqAPW9GoBnN+URAON2LeL1H0duQvL4RgdEBna19/WattYSA1qYqvbVEDRTSWzOw56tCLhC/m/IOw==
|
||||||
|
|
||||||
"@types/eslint-visitor-keys@^1.0.0":
|
"@types/eslint-visitor-keys@^1.0.0":
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d"
|
resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d"
|
||||||
@@ -2273,6 +2278,11 @@ async-limiter@~1.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd"
|
resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd"
|
||||||
integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==
|
integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==
|
||||||
|
|
||||||
|
async@0.9.x:
|
||||||
|
version "0.9.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d"
|
||||||
|
integrity sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=
|
||||||
|
|
||||||
at-least-node@^1.0.0:
|
at-least-node@^1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2"
|
resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2"
|
||||||
@@ -3749,6 +3759,13 @@ ejs@^2.6.1:
|
|||||||
resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba"
|
resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba"
|
||||||
integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==
|
integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==
|
||||||
|
|
||||||
|
ejs@^3.1.5:
|
||||||
|
version "3.1.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.5.tgz#aed723844dc20acb4b170cd9ab1017e476a0d93b"
|
||||||
|
integrity sha512-dldq3ZfFtgVTJMLjOe+/3sROTzALlL9E34V4/sDtUd/KlBSS0s6U1/+WPE1B4sj9CXHJpL1M6rhNJnc9Wbal9w==
|
||||||
|
dependencies:
|
||||||
|
jake "^10.6.1"
|
||||||
|
|
||||||
electron-to-chromium@^1.3.621:
|
electron-to-chromium@^1.3.621:
|
||||||
version "1.3.626"
|
version "1.3.626"
|
||||||
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.626.tgz#48acdf322be07feb2c1330ba05e4bf6327f721a3"
|
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.626.tgz#48acdf322be07feb2c1330ba05e4bf6327f721a3"
|
||||||
@@ -4417,6 +4434,13 @@ file-uri-to-path@1.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
|
resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
|
||||||
integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==
|
integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==
|
||||||
|
|
||||||
|
filelist@^1.0.1:
|
||||||
|
version "1.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.1.tgz#f10d1a3ae86c1694808e8f20906f43d4c9132dbb"
|
||||||
|
integrity sha512-8zSK6Nu0DQIC08mUC46sWGXi+q3GGpKydAG36k+JDba6VRpkevvOWUW5a/PhShij4+vHT9M+ghgG7eM+a9JDUQ==
|
||||||
|
dependencies:
|
||||||
|
minimatch "^3.0.4"
|
||||||
|
|
||||||
filesize@^3.6.1:
|
filesize@^3.6.1:
|
||||||
version "3.6.1"
|
version "3.6.1"
|
||||||
resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317"
|
resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317"
|
||||||
@@ -5528,6 +5552,16 @@ isobject@^3.0.0, isobject@^3.0.1:
|
|||||||
resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
|
resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
|
||||||
integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
|
integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
|
||||||
|
|
||||||
|
jake@^10.6.1:
|
||||||
|
version "10.8.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/jake/-/jake-10.8.2.tgz#ebc9de8558160a66d82d0eadc6a2e58fbc500a7b"
|
||||||
|
integrity sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A==
|
||||||
|
dependencies:
|
||||||
|
async "0.9.x"
|
||||||
|
chalk "^2.4.2"
|
||||||
|
filelist "^1.0.1"
|
||||||
|
minimatch "^3.0.4"
|
||||||
|
|
||||||
jest-worker@^25.4.0:
|
jest-worker@^25.4.0:
|
||||||
version "25.5.0"
|
version "25.5.0"
|
||||||
resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-25.5.0.tgz#2611d071b79cea0f43ee57a3d118593ac1547db1"
|
resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-25.5.0.tgz#2611d071b79cea0f43ee57a3d118593ac1547db1"
|
||||||
|
|||||||
Reference in new issue
Block a user