Compare commits

...

63 Commits

Author SHA1 Message Date
Jerry
aa8c509b96 🏷️ 更新至3.0.0-RC-1 close #189, close #192, close #223, close #224, close #229, close 232, close #240 2020-06-16 18:37:22 +08:00
Jerry
0ad2c01fc9 🐛 fix: 修復因instantpage新版本bugs而導致fancybox和簡繁轉換無法正常工作的bugs 2020-05-21 16:27:44 +08:00
Jerry
a0655a37c8 🏷️ 更新2.3.5 更新內容查看 https://github.com/jerryc127/hexo-theme-butterfly/releases/tag/2.3.5 2020-05-01 18:58:09 +08:00
Jerry
e8a47d040a 🐛 修復上次更新導致頁面跳動的bug 2020-04-30 00:32:43 +08:00
Jerry
250181c569 🐛 修復當博客root不是'/'時,引用本地圖片會顯示不出的bug close #211 2020-04-28 15:31:14 +08:00
Jerry
91d285391d 🐛 修復tags頁標籤只顯示8個的bug 2020-04-27 14:44:25 +08:00
Jerry
92111f3c32 🐛 fix: 修復當menu沒設置圖標時,會報Cannot read property 'trim' of undefined 的bug
🐛 fix: 修復meta description 自動生成文章前200文字時部分沒有轉義的bug
2020-04-27 02:37:20 +08:00
Jerry
6cf59387c8 🏷️ 2.3.0 發佈 2020-04-26 23:31:39 +08:00
Jerry
13a0a4af8e Merge branch 'dev' of https://github.com/jerryc127/hexo-theme-butterfly into dev 2020-04-26 23:31:03 +08:00
Jerry
0d56db50e4 🏷️ 2.3.0發佈 2020-04-26 23:29:38 +08:00
Jerry Wong
dad6fdbcc3 Merge pull request #194 from theWorkFsz/fix/article-sort-img-src
fix: 修复 articleSort 设置文章封面逻辑不一致的问题
2020-04-26 14:41:53 +08:00
Jerry
796b8e6df4 適配 valine 1.4.5, 增加emojiCDN和emojiMaps配置 2020-04-21 21:36:21 +08:00
Jerry
8953e2e1aa 增加facebook comments 2020-04-19 16:05:47 +08:00
Jerry
b512eb761d feat: 增加標籤外掛 tag-toggle
 feat: 增加頁面加載動畫preloader close #193
 feat: 適配hexo-generator-indexed插件
 feat: aside subtitle可配置,優先顯示配置內容、沒有的顯示頁面subtitle close #191
 feat: aside card-tags可配置是否顯示顏色
 feat: algolia-search highligh文字加深
 feat: 增加頁面keywords設置 #191
 feat: darkmode和readmode配色微調
🐛 fix: 修復hide-block 配置顏色顯示出錯的bug
🐛 fix: 修正zh-TW部分用語
2020-04-17 19:48:07 +08:00
horo
84efd46404 fix: 修复 articleSort 设置文章封面逻辑不一致的问题 2020-04-14 18:46:13 +08:00
Jerry
d62ec1b866 💥 改cdn_use為inject,可插入代碼到head或者bottom
💥 移除對文章隱藏的支持,如需要,請使用插件,hexo-hide-posts/hexo-generator-indexed
💥 移除subtitle金山詞霸每日一句,增加搏天api的隨機語錄
 subtitle修改為網頁加載完後再加載,防止api回應過慢而阻礙網頁顯示
 適配valine 1.4.0, 刪除部分valine夜間模式代碼
 meta增加article:published_time和article:modified_time
 當沒有設置Description時,會自動讀取文章前200個文字作為meta Description
 sidebar menu 增加頭像轉圈hover
💄 調整aside和mobile sidebar 網頁資訊佈局,當缺少一個時,寬度依舊平分
🐛 調整子目錄的排版(向左對齊),修復只能點擊子目錄文字才能跳轉的bug
🔥 pug精簡 刪除recent-post.pug  改為引用mixins/post-ui.pug
2020-04-12 02:40:54 +08:00
Jerry
e81a81c9d1 feat: 本地搜索支持顯示文章內容和高亮keyword
🐛 fix: 修復搜索結果在手機端無法滾動的bug
🐛 fix: 修復aside categories 查看更多跳轉到tags頁面的bug closes #188
2020-04-07 14:24:11 +08:00
Jerry
6c68ce1c4c feat: aside widget 增加部分參數可配置
 feat: aside widget的Categories,Tags,post,Archives可配置limit
 feat: 整合公告欄配置到aside去
🐛 fix: 修復當flink.yml內容為空時,報錯的bug
💄 fix: 修復darkmode下 aside 查看更多文字顏色太淺的bug
2020-04-06 01:49:47 +08:00
Jerry
eb11e4afeb 🐛 修復POST-META關閉閲讀分鐘和訪問量後,評論量前有分割線的bug
🐛 修復canvas_ribbon透明度變為1再變回預設值bug
🐛 修復當default_cover沒設置時,會出現無圖片的bug
🎨 部分js調整
2020-04-02 22:16:01 +08:00
Jerry
5e37ab641a feat: 在設置裏配置js/css(CDN_USE)時可以設定其他參數 closes #152
 feat: readmode下可以切換darkmode和lightmode
💄 fix: 高分辨率下的界面適配 closes #163
🐛 fix: 修復DarkMode下,note標簽的顯示bug
2020-03-30 21:45:13 +08:00
Jerry
16a3ac510d 🔖 2.2.5發佈
更新内容請看 https://github.com/jerryc127/hexo-theme-butterfly/releases
2020-03-28 03:13:30 +08:00
Jerry
0ba52293a2 feat: 增加手動廣告位置
 feat: aside info 裏添加本站總文字
🎨 refactor: post-meta代碼結構
2020-03-20 18:28:13 +08:00
Jerry
ce72ba4f5d 🐛 fix: 修復簡繁轉換無效的bug 2020-03-19 15:42:52 +08:00
Jerry
c118e1e16a 🐛 1.修復首頁文章日期顯示錯誤的bug
🐛 2.修復因註釋掉豆瓣設置導致報Cannot read property 'meta' of undefined的bug
💄 3.調整文章頁post-meta和主頁post-meta的間距
💄 4.文章頁,當設置只顯示一個日期時,增加文字顯示
2020-03-19 01:15:45 +08:00
Jerry
67c013d6e7 🐛 1.修復Gitalk報Error: Cannot read property 'repository' of undefined 的bug
🐛 2.修復評論utterances 在display_mode設置為dark時,仍顯示light主題的bug
🐛 3.修復display_mode設置dark沒有效果的bug
🎨 4.評論增加夜間模式、文章頁判斷,減少不必要的js加載
2020-03-18 18:44:39 +08:00
Jerry
8bf11ddeb0 Breaking Change
1. 不再支持hexo 4.0.0以下版本
2. 添加hexo fragment_cache,加快生成速度
3. 完善V5圖標顯示,不再需要同時加載V4和v5圖標
4. 去除cheerio依賴
5. 整合豆瓣配置,增加配置遊戲,圖書頁面top_img,可設置是否設置meta,解決部分瀏覽器無法顯示圖片問題
6. 友情鏈接除列表外可自定義內容
7. 可設置主頁標題距離頂部距離
8. 側邊欄可隱藏,可設置手機頁面是否隱藏
9. 增加disqusjs和utterances 兩個評論
10. 主頁文章增加tags和更新日期顯示,可以配置post_meta
11. 首頁subtitle可關閉打字效果,可設置打字效果顯示一次或loop
12. 增加valine和gitalk的配置
13. darkmode配置整理
14. 增加404頁面
15. post_beautify改為beautify,頁面美化不再只限於post頁,page頁也一樣
16. 可設置是否顯示cover,可設置各位置的cover顯示
17. 增加mermaid,可畫流程圖、狀態圖、時序圖、甘特圖等等
18. 增加pangu配置,中英文之間添加空格
19. 整合部分配置
20. post-copyright增加decode網址 (可以顯示中文)
21. 增加部分顏色配置

Feature
1. 適配IE
2. 增加一個Tag Plugins: 圖庫集
3. 增加一個Tag Plugins: tag-hide 功能 inline/block
4. 去除page頁開頭顯示與標題一樣的內容
5. aside 公告欄設置,支持html代碼
6. 手機界面sidebar顯示進度條和加深對應的標題
7. 主頁subtitle 的 hitokoto 顯示內容出處
9. footer 的hexo鏈接改為https
10. 修改手機下,menus和toc的打開效果
11. 手機頁面下,搜索界面全屏顯示
12. SEO優化,標題欄改為h1顯示
13. 閲讀模式優化,可根據light mode 和darkmode調整背景
14. 當屏蔽js時,header會出現(之前用js控制,會隱藏)

Fixed
1. 修復Tencent Analytics的script加載為https #105
2. 修復相關文章,日期顯示錯誤bug
3. 修復gitalk報錯問題
4. 修復當valine background 是絕對地址時無法顯示的bug
5. 修復medium-zoom 無法使用的bug
6. 修復在safari下,點擊或移動到首頁文章cover,圓角變成正方形的bug #114
7. 修復在部分瀏覽器下,aside,友情鏈接頭像轉動變形的bug
8. 修復在寬度限制下,表格內容溢出屏幕外而出現滾動條的bug \#138
9. 修復gitalk js 在一些沒有設置評論的page里加載的bug
10. 修復tag plugins 的gist 在不同主題下的背景顏色問題(黑色主題下,文字不易觀看)
11. 修復highlight figcaption 顯示不全的bug
12. 修復disqus評論數無法獲取的bug
13. 修復子目錄在觸摸屏下點擊,偶爾不出現的bug
14. 修復a標籤太長(連續英文字母)不會換行的bug
15. 修復toc滾動時,閲讀進度條也跟著滾動的bug
16. 修復aside的圖片,可點擊顯示大圖bug
17. 修復activate-power-mode設置參數無效bug
18. 修復語言上的錯誤 \#156
19. 修復主頁在safari桌面端,首頁滾動卡頓的bug
2020-03-17 21:39:58 +08:00
Jerry
ddff0348b7 Merge branch 'master' of https://github.com/jerryc127/hexo-theme-butterfly 2020-03-17 21:38:27 +08:00
Jerry
321091befb Breaking Change
1. 不再支持hexo 4.0.0以下版本
2. 添加hexo fragment_cache,加快生成速度
3. 完善V5圖標顯示,不再需要同時加載V4和v5圖標
4. 去除cheerio依賴
5. 整合豆瓣配置,增加配置遊戲,圖書頁面top_img,可設置是否設置meta,解決部分瀏覽器無法顯示圖片問題
6. 友情鏈接除列表外可自定義內容
7. 可設置主頁標題距離頂部距離
8. 側邊欄可隱藏,可設置手機頁面是否隱藏
9. 增加disqusjs和utterances 兩個評論
10. 主頁文章增加tags和更新日期顯示,可以配置post_meta
11. 首頁subtitle可關閉打字效果,可設置打字效果顯示一次或loop
12. 增加valine和gitalk的配置
13. darkmode配置整理
14. 增加404頁面
15. post_beautify改為beautify,頁面美化不再只限於post頁,page頁也一樣
16. 可設置是否顯示cover,可設置各位置的cover顯示
17. 增加mermaid,可畫流程圖、狀態圖、時序圖、甘特圖等等
18. 增加pangu配置,中英文之間添加空格
19. 整合部分配置
20. post-copyright增加decode網址 (可以顯示中文)
21. 增加部分顏色配置
Feature
1. 適配IE
2. 增加一個Tag Plugins: 圖庫集
3. 增加一個Tag Plugins: tag-hide 功能 inline/block
4. 去除page頁開頭顯示與標題一樣的內容
5. aside 公告欄設置,支持html代碼
6. 手機界面sidebar顯示進度條和加深對應的標題
7. 主頁subtitle 的 hitokoto 顯示內容出處
9. footer 的hexo鏈接改為https
10. 修改手機下,menus和toc的打開效果
11. 手機頁面下,搜索界面全屏顯示
12. SEO優化,標題欄改為h1顯示
13. 閲讀模式優化,可根據light mode 和darkmode調整背景
14. 當屏蔽js時,header會出現(之前用js控制,會隱藏)
Fixed
1. 修復Tencent Analytics的script加載為https #105
2. 修復相關文章,日期顯示錯誤bug
3. 修復gitalk報錯問題
4. 修復當valine background 是絕對地址時無法顯示的bug
5. 修復medium-zoom 無法使用的bug
6. 修復在safari下,點擊或移動到首頁文章cover,圓角變成正方形的bug #114
7. 修復在部分瀏覽器下,aside,友情鏈接頭像轉動變形的bug
8. 修復在寬度限制下,表格內容溢出屏幕外而出現滾動條的bug \#138
9. 修復gitalk js 在一些沒有設置評論的page里加載的bug
10. 修復tag plugins 的gist 在不同主題下的背景顏色問題(黑色主題下,文字不易觀看)
11. 修復highlight figcaption 顯示不全的bug
12. 修復disqus評論數無法獲取的bug
13. 修復子目錄在觸摸屏下點擊,偶爾不出現的bug
14. 修復a標籤太長(連續英文字母)不會換行的bug
15. 修復toc滾動時,閲讀進度條也跟著滾動的bug
16. 修復aside的圖片,可點擊顯示大圖bug
17. 修復activate-power-mode設置參數無效bug
18. 修復語言上的錯誤 \#156
19. 修復主頁在safari桌面端,首頁滾動卡頓的bug
2020-03-17 21:28:27 +08:00
Jerry Wong
9c996d0a73 Merge pull request #156 from HolgerHuo/patch-1
A small translation mistake.
2020-03-14 00:13:26 +08:00
HolgerHuo
748709f56f A small translation mistake. 2020-03-13 15:10:22 +08:00
Jerry Wong
1ef2720c2c Create stale.yml 2020-03-07 21:44:03 +08:00
Jerry Wong
d85f71887b Merge pull request #142 from bmyjacks/Fix-#105
Fix Tencent Analytics #105
2020-03-01 22:51:07 +08:00
bmyjacks
9bb7c2bb99 Fix Tencent Analytics #105 2020-03-01 07:38:29 +08:00
Jerry Wong
c40db692bf Merge pull request #117 from flymin/master
add more options to gitalk
2020-02-13 20:03:37 +08:00
flymin
eec30fd6be add more options to gitalk 2020-02-07 11:53:29 +08:00
Jerry
24269f457e Fixed: 修復相關文章 日期顯示錯誤bug 2019-12-31 15:10:47 +08:00
Jerry
c002fd0e64 update README 2019-12-30 16:37:57 +08:00
Jerry Wong
ae717bd304 Merge pull request #90 from eallion/dev
修改 Disqus 为 Disqus.js 版
2019-12-28 14:06:28 +08:00
eallion
894c709b3c add disqus.js 2019-12-28 13:17:57 +08:00
eallion
d59ed0b401 auto push via Ubuntu 2019-12-27 23:11:48 +08:00
Charles Chin
96ef1478ef Merge pull request #1 from jerryc127/dev
解決gitalk報錯問題
2019-12-27 22:56:05 +08:00
Jerry
43b109bdb6 解決gitalk報錯問題 2019-12-27 21:44:24 +08:00
Jerry
995fc7cf9d 1. 修復當valine background 是絕對地址時無法顯示的bug 2019-12-22 00:50:59 +08:00
Jerry
e77ab81941 1. 修復2.1.0 medium-zoom 無法使用的bug 2019-12-20 14:12:01 +08:00
Jerry
eae694806c v2.1.0
1. 可設置隱藏文章
2. 適配 Hexo 的 Tag Plugins Code Block With marked lines 顯示
3. 可配置首頁cover顯示的位置
4. 更改深色模式下的配色
5. activate_power_mode 增加關閉顏色和抖動
6. 增加谷歌廣告,騰訊分析
7. 相關文章增加時間顯示,調整佈局,垂直居中
8. 文章頁面,top_img增加評論數顯示
9. 可以取消點擊圖片觀看大圖
10. mathjax和kathex可設置每頁都加載還是按需加載
11. 深色模式下,滾動條顔色的適配
12. 優化gitalk 在 dark mode下的顯示
13. 文章頁,文章標題過長時,只顯示三行內容
14. 深色模式下,背景圖片加上蒙板
15. 優化深色/閲讀模式下,canvas的顯示
16. 優化打賞的特效和移動到二維碼不會立刻消失
17. 優化sub-menu樣式
18. 修改aside 的tags顔色,在深色模式下不會出現觀看困難
19. 升級 normalize.css 到最新版
20. 優化手機上toc和menu的打開動畫
21. 優化代碼框打開關閉的特效
22. 精簡js,部分操作改為css控制
23. 優化主題的一些動畫,不會過於生硬

1. 修復當圖片被a標簽包圍時,點擊圖標沒有跳轉到對應網頁而是出現大圖觀看模式的bug
2. 修復當網址有subdirectory時,menu、打賞二維碼和lodding_bg 鏈接路徑錯誤的bug
3. 修復當網址有subdirectory時,
4. 修復katex 的 CSS無法讀取bug
5. 修復搜索按鈕在文章頁不顯示的bug
6. 修復gitalk css引用失敗的bug
7. 修復 點擊特效 煙花 無效的bug
8. 修復gitalk報path.startsWith is not a function的bug
9. 修復 閲讀模式下,背景沒有變純色的bug
10. 修復閲讀模式下,header 偶爾出現沒有靠攏頂部的bug
11. 修復Hexo Tag Plugins Block Quote 裏的鏈接顯示出外面的Bug
12. 修復aside歸檔日期過長導致錯位的bug
13. 修復toc為空時,toc按鈕仍存在的bug
14. 修復關閉懶加載後,頭像無法顯示的bug
15. 修復深色模式下,切換readmode偶爾會無效的bug
16. 修復在一些手機設備上,toc和menu的按鈕顯示不對齊的bug #72
2019-12-20 02:19:43 +08:00
Jerry
90726f1a59 update README 2019-11-21 22:08:02 +08:00
Jerry Wong
ae73a2114f Merge pull request #75 from noraj/patch-2
Move readme and translate it in english
2019-11-21 20:03:39 +08:00
Jerry Wong
20dcc61e0d Merge pull request #74 from noraj/patch-1
highlight themes
2019-11-21 20:03:23 +08:00
Alexandre ZANNI
f36450dbc0 Translate README in english 2019-11-21 11:52:37 +01:00
Alexandre ZANNI
2fc895102d Move readme 2019-11-21 11:48:33 +01:00
Alexandre ZANNI
e26637c5a8 highlight themes 2019-11-21 11:20:27 +01:00
Jerry
082df56112 1. 完善gitalk 在 dark mode下的顯示
2. 完善footer 有背景和無背景下,在dark mode下的顯示
3. 界面微調
4. 增加選項可關閉aside在手機上的顯示
5. 修復關閉夜間模式情況下,console報Uncaught ReferenceError: autoChangeMode is not defined 的bug
2019-11-08 22:25:00 +08:00
Jerry
27adaecf51 1. 修復gitalk報path.startsWith is not a function的bug #66
2. 修復在屏幕縮放字體大小而導致menu變爲sidebar模式的bug #64
3. just-gallery增加上下邊距
2019-11-07 01:45:00 +08:00
Jerry
a33e7e1d89 1. 修復gitalk報path.startsWith is not a function的bug #66
2. 修復在屏幕縮放字體大小而導致menu變爲sidebar模式的bug #64
3. just-gallery增加上下邊距
2019-11-07 01:23:29 +08:00
Jerry
da4a8d77d7 1. 修復 點擊特效 烟花 無效的Bug 2019-11-05 14:57:59 +08:00
Jerry
8cb366bdda 1. 修復gitalk css引用失敗的bug 2019-11-04 20:57:50 +08:00
Jerry
7f8e431226 1. 修復搜索按鈕在文章頁不顯示的bug 2019-11-03 18:24:26 +08:00
Jerry
b32ff6920b 1. 修復katex 的 CSS無法讀取bug 2019-11-03 13:36:39 +08:00
Jerry
25f128fb3d V2.0.0
Breaking change
1. 手機端界面卡片化,同時,手機端也可以顯示側邊欄的內容
2. 修復當menu過多時,header界面出現錯亂的bug。當menu過多時,會變為sidebar模式
3. 增加medium-zoom大圖查看模式
4. 增加鼠標點擊特效:文字和愛心 兩個點擊特效
5. 主頁subtitle可以調用第三方api(金山詞霸每日一句、一言網的一句話、一句網、今日詩詞)
6. 添加 snackbar 彈窗
7. 修改nightshift為darkmode,darkmode可隨系統設置而自動切換,可設置隨時間而切換darkmode
8. 修復hexo自帶的標籤外掛(Tag Plugins)顯示bug(Block Quote、Code Block With caption、Gist、Youtube、Vimeo)
9. 主題所需要的css和js可根據需要配置CDN
10. 更改darkmode的加載方式,網站設置dark mode後,現在進入網頁不會在'閃'一下
11. 背景特效和背景圖片在手機界面也會顯示
12. 增加justified-gallery圖片顯示(Tag Plugins)
Feature
1. 文章頁面,字數統計、閲讀時長和閲讀量前面添加icon
2. 更改懶加載js
3. 升級typed.js/instantpage.js到最新版
4. 搜索和右下角按鈕添加退出特效
Fixed
1. 修復在 Hexo 4.0.0下,一些按鈕點擊會跳出一個空白頁的bug
2. 修復在 Hexo 4.0.0下,分頁按鈕出現代碼的bug
3. 修復當沒有設置評論時,右下角依舊出現'直達評論'按鈕的bug
4. 優化sidebar的打開速度
5. 修復文章頁標題左右邊距不平等的bug
6. 修復keywords讀取的bug
7. 修復當post/page 內容為空時,footer位置錯亂的bug
8. 修復在手機safari,toc sidebar底部內容被遮擋的bug
9. 完善Dark mode,一些界面的配色
10. 修復 card-archives 查看更多 跳轉bug
Remove
1. 移除Gitment
2. 移除Gallery
2019-11-03 02:29:05 +08:00
Jerry
9e14fca4a7 V2.0.0
Breaking change
1. 手機端界面卡片化,同時,手機端也可以顯示側邊欄的內容
2. 修復當menu過多時,header界面出現錯亂的bug。當menu過多時,會變為sidebar模式
3. 增加medium-zoom大圖查看模式
4. 增加鼠標點擊特效:文字和愛心 兩個點擊特效
5. 主頁subtitle可以調用第三方api(金山詞霸每日一句、一言網的一句話、一句網、今日詩詞)
6. 添加 snackbar 彈窗
7. 修改nightshift為darkmode,darkmode可隨系統設置而自動切換,可設置隨時間而切換darkmode
8. 修復hexo自帶的標籤外掛(Tag Plugins)顯示bug(Block Quote、Code Block With caption、Gist、Youtube、Vimeo)
9. 主題所需要的css和js可根據需要配置CDN
10. 更改darkmode的加載方式,網站設置dark mode後,現在進入網頁不會在'閃'一下
11. 背景特效和背景圖片在手機界面也會顯示
12. 增加justified-gallery圖片顯示(Tag Plugins)
Feature
1. 文章頁面,字數統計、閲讀時長和閲讀量前面添加icon
2. 更改懶加載js
3. 升級typed.js/instantpage.js到最新版
4. 搜索和右下角按鈕添加退出特效
Fixed
1. 修復在 Hexo 4.0.0下,一些按鈕點擊會跳出一個空白頁的bug
2. 修復在 Hexo 4.0.0下,分頁按鈕出現代碼的bug
3. 修復當沒有設置評論時,右下角依舊出現'直達評論'按鈕的bug
4. 優化sidebar的打開速度
5. 修復文章頁標題左右邊距不平等的bug
6. 修復keywords讀取的bug
7. 修復當post/page 內容為空時,footer位置錯亂的bug
8. 修復在手機safari,toc sidebar底部內容被遮擋的bug
9. 完善Dark mode,一些界面的配色
10. 修復 card-archives 查看更多 跳轉bug
Remove
1. 移除Gitment
2. 移除Gallery
2019-11-03 02:25:27 +08:00
Jerry
336e221de5 V2.0.0
Breaking change
1. 手機端界面卡片化,同時,手機端也可以顯示側邊欄的內容
2. 修復當menu過多時,header界面出現錯亂的bug。當menu過多時,會變為sidebar模式
3. 增加medium-zoom大圖查看模式
4. 增加鼠標點擊特效:文字和愛心 兩個點擊特效
5. 主頁subtitle可以調用第三方api(金山詞霸每日一句、一言網的一句話、一句網、今日詩詞)
6. 添加 snackbar 彈窗
7. 修改nightshift為darkmode,darkmode可隨系統設置而自動切換,可設置隨時間而切換darkmode
8. 修復hexo自帶的標籤外掛(Tag Plugins)顯示bug(Block Quote、Code Block With caption、Gist、Youtube、Vimeo)
9. 主題所需要的css和js可根據需要配置CDN
10. 更改darkmode的加載方式,網站設置dark mode後,現在進入網頁不會在'閃'一下
11. 背景特效和背景圖片在手機界面也會顯示
12. 增加justified-gallery圖片顯示(Tag Plugins)
Feature
1. 文章頁面,字數統計、閲讀時長和閲讀量前面添加icon
2. 更改懶加載js
3. 升級typed.js/instantpage.js到最新版
4. 搜索和右下角按鈕添加退出特效
Fixed
1. 修復在 Hexo 4.0.0下,一些按鈕點擊會跳出一個空白頁的bug
2. 修復在 Hexo 4.0.0下,分頁按鈕出現代碼的bug
3. 修復當沒有設置評論時,右下角依舊出現'直達評論'按鈕的bug
4. 優化sidebar的打開速度
5. 修復文章頁標題左右邊距不平等的bug
6. 修復keywords讀取的bug
7. 修復當post/page 內容為空時,footer位置錯亂的bug
8. 修復在手機safari,toc sidebar底部內容被遮擋的bug
9. 完善Dark mode,一些界面的配色
10. 修復 card-archives 查看更多 跳轉bug
Remove
1. 移除Gitment
2. 移除Gallery
2019-11-03 02:21:01 +08:00
Jerry
32d1cd3f53 v1.2.2
1. 修復在hexo 4.0.0下,分頁按鈕渲染不完全的bug
2019-10-20 13:16:08 +08:00
Jerry
1e06a6ca5e v1.2.1
1. 修復在safari上,頭像旋轉顯示框框的bug
2019-09-25 23:37:09 +08:00
190 changed files with 7976 additions and 5886 deletions

52
.github/ISSUE_TEMPLATE.md vendored Normal file
View File

@@ -0,0 +1,52 @@
<!--
IMPORTANT: Please follow the template to create a new issue.
重要:請依照該模板來提交。
If you upgrade from the old version, and an error occurs when running, please copy the new content in the config to the butterfly.yml
如果你是由舊版本升級到新版運行時出現報錯請首先把config裏新的內容複製到舊的butterfly設置去
If you are a problem when visit the website, please open your browser 'developer tools (shortcut F12)' and check the console if there is an error, include your website address in the feedback
如果你是線上訪問出現問題請檢查瀏覽器開發人員工具快捷鍵F12的console是否有報錯反饋時附上你的網站
-->
## I want to create a new issue <!-- 我想要建立一個新的issue -->
<!-- Check all with "x" especially FAQ & Documentation!! (使用 "x" 選擇) -->
<!-- 請確認是否都已經翻閱過如下的資料, 尤其是安裝文檔!! -->
- [] Yes, I have read [Hexo Docs page](https://hexo.io/docs/), especially [Templates](https://hexo.io/docs/templates.html), [Variables](https://hexo.io/docs/variables.html), [Helpers](https://hexo.io/docs/helpers.html) and [Troubleshooting](https://hexo.io/docs/troubleshooting.html).
- [] Yes, I have read [Hexo-theme-butterfly Documentation](https://jerryc.me/posts/21cfbf15/).
- [] And yes, I already searched for current [issues](https://github.com/jerryc127/hexo-theme-butterfly/issues?utf8=%E2%9C%93&q=is%3Aissue) and this did not help me.
## Butterfly Information
<!-- Butterfly的版本 -->
<!-- 檢視主題的package.json -->
**Butterfly Version:**
<!-- Windows/macOS/Linux/Android/iOS -->
**Platform:**
<!-- Chrome/Safari/FireFox/.. -->
**Browser:**
## Expected behavior <!-- (預期行為) -->
## Actual behavior <!-- (實際行為) -->
<!-- Please give me the screenshots to locate the issue -->
<!-- 請儘量提供截圖來定位問題 -->
## Steps to reproduce the behavior <!-- (重現步驟) -->
## Feature Request
<!-- If you have any ideas of theme-butterfly, please write down here and we can have a discussion. -->
<!-- 如果你有任何關於Butterfly的功能方面的想法可以在這個部分裡寫下來我們一起討論 -->
---
<!--
Love hexo-theme-butterfly? Please consider starring the repo to support it!
喜歡 hexo-theme-butterfly嗎 考慮一下給它點個star來支援它吧
-->

21
.github/stale.yml vendored Normal file
View File

@@ -0,0 +1,21 @@
# Number of days of inactivity before an issue becomes stale
daysUntilStale: 30
# Number of days of inactivity before a stale issue is closed
daysUntilClose: 7
# Issues with these labels will never be considered stale
exemptLabels:
- pinned
- security
- bug
- enhancement
- Solved
- documentation
# Label to use when marking an issue as stale
staleLabel: wontfix
# Comment to post when marking an issue as stale. Set to `false` to disable
markComment: >
This issue has been automatically marked as stale because it has not had
recent activity. It will be closed if no further activity occurs. Thank you
for your contributions.
# Comment to post when closing a stale issue. Set to `false` to disable
closeComment: false

View File

@@ -1,37 +1,54 @@
# hexo-theme-butterfly
[预览](https://jerryc.me/)
<a href="https://github.com/jerryc127/hexo-theme-butterfly/releases"><img alt="Version" src="https://img.shields.io/badge/release-3.0.0-blue"/></a>
<a href="https://jerryc.me"><img alt="Author" src="https://img.shields.io/badge/author-JerryC-blur"/></a>
<a href="https://hexo.io"><img alt="Hexo" src="https://img.shields.io/badge/hexo-4.0+-0e83c"/></a>
<a href="https://nodejs.org/"><img alt="node.js" src="https://img.shields.io/badge/node.js-8.0+-blur"/></a>
一款基于[hexo-theme-melody](https://github.com/Molunerfinn/hexo-theme-melody)修改的主题
Demo: 👍 [Butterfly](https://demo.jerryc.me/) || 🤞 [JerryC](https://jerryc.me/)
## 安装
Based on [hexo-theme-melody](https://github.com/Molunerfinn/hexo-theme-melody) theme.
在你的博客根目录里
## Installation
Stable branch [recommend]:
```
git clone -b master https://github.com/jerryc127/hexo-theme-butterfly.git themes/Butterfly
git clone -b master https://github.com/jerryc127/hexo-theme-butterfly.git themes/butterfly
```
如果想要安裝比較新的dev分支可以
Dev branch:
```
git clone -b dev https://github.com/jerryc127/hexo-theme-butterfly.git themes/Butterfly
git clone -b dev https://github.com/jerryc127/hexo-theme-butterfly.git themes/butterfly
```
## 应用主题
修改hexo配置文件`_config.yml`,把主题改为`Butterfly`
## Configuration
```
theme: Butterfly
```
Set theme in the hexo work folder's root config file `_config.yml`:
>如果你没有pug以及stylus的渲染器请下载安装 npm install hexo-renderer-jade hexo-renderer-stylus --save or yarn add hexo-renderer-jade hexo-renderer-stylus
> theme: butterfly
## 文档
If you don't have pug & stylus renderer, try this:
可查看或[这里](https://docs.jerryc.me/)或[这里](https://jerryc.me/posts/21cfbf15)
> npm install hexo-renderer-pug hexo-renderer-stylus
## Documentation
Find in [Butterfly Docs](https://demo.jerryc.me/posts/21cfbf15/). it supports `zh-TW` and `zh-CN`
You can also join the Chat Group.
[💬 Join QQ Group [recommend]](https://jq.qq.com/?_wv=1027&k=5KI3Jqb)
[💬 Join Telegram Group](https://t.me/hexo_butterfly)
## 截图
## Screenshots
![image](https://user-images.githubusercontent.com/16351105/58887365-1272f780-8718-11e9-9329-3292c6ba20d4.png)
![image](https://user-images.githubusercontent.com/16351105/58887457-3cc4b500-8718-11e9-9417-2bdea603c92e.png)
![](https://user-images.githubusercontent.com/16351105/58887457-3cc4b500-8718-11e9-9417-2bdea603c92e.png)
![](https://user-images.githubusercontent.com/16351105/69338594-7d03f980-0c9e-11ea-8b64-7f165e6508e2.png)

50
README_CN.md Normal file
View File

@@ -0,0 +1,50 @@
# hexo-theme-butterfly
<a href="https://github.com/jerryc127/hexo-theme-butterfly/releases"><img alt="Version" src="https://img.shields.io/badge/release-3.0.0-blue"/></a>
<a href="https://jerryc.me"><img alt="Author" src="https://img.shields.io/badge/author-JerryC-blur"/></a>
<a href="https://hexo.io"><img alt="Hexo" src="https://img.shields.io/badge/hexo-4.0+-0e83c"/></a>
<a href="https://nodejs.org/"><img alt="node.js" src="https://img.shields.io/badge/node.js-8.0+-blur"/></a>
Demo: 👍 [Butterfly](https://demo.jerryc.me/) || 🤞 [JerryC](https://jerryc.me/)
一款基於[hexo-theme-melody](https://github.com/Molunerfinn/hexo-theme-melody)修改的主題
## 安裝
在你的博客根目錄裡安裝穩定版【推薦】
```
git clone -b master https://github.com/jerryc127/hexo-theme-butterfly.git themes/butterfly
```
如果想要安裝比較新的dev分支可以
```
git clone -b dev https://github.com/jerryc127/hexo-theme-butterfly.git themes/butterfly
```
## 應用主題
修改hexo配置文件`_config.yml`,把主題改為`Butterfly`
```
theme: butterfly
```
>如果你沒有pug以及stylus的渲染器請下載安裝 npm install hexo-renderer-pug hexo-renderer-stylus --save or yarn add hexo-renderer-pug hexo-renderer-stylus
## 文檔
可查看[Butterfly Docs](https://demo.jerryc.me/posts/21cfbf15/)
你也可以加入群組
[ 💬 QQ群 [推薦]](https://jq.qq.com/?_wv=1027&k=5KI3Jqb)
[ 💬 Telegram群](https://t.me/hexo_butterfly)
## 截圖
![image](https://user-images.githubusercontent.com/16351105/58887365-1272f780-8718-11e9-9329-3292c6ba20d4.png)
![image](https://user-images.githubusercontent.com/16351105/58887457-3cc4b500-8718-11e9-9417-2bdea603c92e.png)
![](https://user-images.githubusercontent.com/16351105/69338594-7d03f980-0c9e-11ea-8b64-7f165e6508e2.png)

File diff suppressed because it is too large Load Diff

View File

@@ -19,25 +19,26 @@ page:
sticky: Sticky
no_title: No title
archives: Archives
post:
created: Created
updated: Updated
wordcount: Word count
min2read: "Reading time: %s min"
min2read: 'Reading time: %s min'
page_pv: Post View
comments: Comments
copyright:
author: Author
link: Link
copyright_notice: Copyright Notice
copyright_content: 'All articles in this blog are licensed under <a href="%s">%s</a> unless stating additionally.'
recommend: Related Articles
search: Search
algolia_search:
input_placeholder: Search for Posts
hits_empty: "We didn't find any results for the search: ${query}."
hits_stats: "${hits} results found in ${time} ms"
hits_stats: '${hits} results found in ${time} ms'
local_search:
label: Local search
@@ -60,31 +61,30 @@ aside:
card_tags: Tags
card_archives: Archives
card_recent_post: Recent Post
card_bookmark: Add to bookmark
card_bookmark: Bookmark
card_webinfo:
headline: Info
article_name: Article
runtime_name: Run time
site_wordcount: Total Count
site_uv_name: UV
site_pv_name: PV
more_button: More
donate: Donate
share: Share
bookmark:
title: Bookmark
message_prev: Press
message_next: to bookmark this page
rightside:
readmode_title: Read Mode
font_plus_title: Increase font size
font_minus_title: Decrease font size
translate_title: Traditional Chinese and Simplified Chinese Conversion
night_mode_title: Dark Mode
back_to_top: Back to top
toc: Table of Contents
scroll_to_comment: Scroll to comment
font_plus_title: Increase Font Size
font_minus_title: Decrease Font Size
translate_title: Switch Between Traditional Chinese And Simplified Chinese
night_mode_title: Switch Between Light And Dark Mode
back_to_top: Back To Top
toc: Table Of Contents
scroll_to_comment: Scroll To Comments
setting: Setting
runtime_unit: days
@@ -94,3 +94,18 @@ copy_copyright:
link: Link
source: Source
info: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
Snackbar:
bookmark:
message_prev: Press
message_next: to bookmark this page
chs_to_cht: Traditional Chinese Activated Manually
cht_to_chs: Simplified Chinese Activated Manually
day_to_night: Dark Mode Activated Manually
night_to_day: Light Mode Activated Manually
loading: Loading...
error404:
error_title: Page not found
back_button: Go back home

View File

@@ -19,25 +19,26 @@ page:
sticky: Sticky
no_title: No title
archives: Archives
post:
created: Created
updated: Updated
wordcount: Word count
min2read: "Reading time: %s min"
min2read: 'Reading time: %s min'
page_pv: Post View
comments: Comments
copyright:
author: Author
link: Link
copyright_notice: Copyright Notice
copyright_content: 'All articles in this blog are licensed under <a href="%s">%s</a> unless stating additionally.'
recommend: Related Articles
search: Search
algolia_search:
input_placeholder: Search for Posts
hits_empty: "We didn't find any results for the search: ${query}."
hits_stats: "${hits} results found in ${time} ms"
hits_stats: '${hits} results found in ${time} ms'
local_search:
label: Local search
@@ -60,30 +61,30 @@ aside:
card_tags: Tags
card_archives: Archives
card_recent_post: Recent Post
card_bookmark: Add to bookmark
card_bookmark: Bookmark
card_webinfo:
headline: Info
article_name: Article
runtime_name: Run time
site_wordcount: Total Count
site_uv_name: UV
site_pv_name: PV
more_button: More
donate: Donate
share: Share
bookmark:
title: Bookmark
message_prev: Press
message_next: to bookmark this page
rightside:
readmode_title: Read Mode
font_plus_title: Increase font size
font_minus_title: Decrease font size
translate_title: Traditional Chinese and Simplified Chinese Conversion
night_mode_title: Dark Mode
back_to_top: Back to top
toc: Table of Contents
scroll_to_comment: Scroll to comment
font_plus_title: Increase Font Size
font_minus_title: Decrease Font Size
translate_title: Switch Between Traditional Chinese And Simplified Chinese
night_mode_title: Switch Between Light And Dark Mode
back_to_top: Back To Top
toc: Table Of Contents
scroll_to_comment: Scroll To Comments
setting: Setting
runtime_unit: days
@@ -92,4 +93,19 @@ copy_copyright:
author: Author
link: Link
source: Source
info: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
info: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
Snackbar:
bookmark:
message_prev: Press
message_next: to bookmark this page
chs_to_cht: Traditional Chinese Activated Manually
cht_to_chs: Simplified Chinese Activated Manually
day_to_night: Dark Mode Activated Manually
night_to_day: Light Mode Activated Manually
loading: Loading...
error404:
error_title: Page not found
back_button: Go back home

View File

@@ -19,31 +19,33 @@ page:
sticky: 置顶
no_title: 无题
archives: 时间轴
post:
created: 发表于
updated: 更新于
wordcount: 字数总计
min2read: "阅读时长: %s 分钟"
min2read: '阅读时长: %s 分钟'
page_pv: 阅读量
comments: 评论数
copyright:
author: 文章作者
link: 文章链接
copyright_notice: 版权声明
copyright_content: '本博客所有文章除特别声明外,均采用 <a href="%s">%s</a> 许可协议。转载请注明来自 <a href="%s">%s</a>'
copyright_content: '本博客所有文章除特别声明外,均采用
<a href="%s" target="_blank">%s</a> 许可协议。转载请注明来自 <a href="%s" target="_blank">%s</a>'
recommend: 相关推荐
search: 搜索
algolia_search:
input_placeholder: 搜索文章
hits_empty: "找不到您查询的内容:${query}"
hits_stats: "找到 ${hits} 条结果,用时 ${time} 毫秒"
hits_empty: '找不到您查询的内容:${query}'
hits_stats: '找到 ${hits} 条结果,用时 ${time} 毫秒'
local_search:
label: 本地搜索
input_placeholder: 搜索文章
hits_empty: "找不到您查询的内容:${query}"
powered: "提供支持"
hits_empty: '找不到您查询的内容:${query}'
powered: '提供支持'
by:
pagination:
@@ -66,22 +68,22 @@ aside:
headline: 网站资讯
article_name: 文章数目
runtime_name: 已运行时间
site_wordcount: 本站总字数
site_uv_name: 本站访客数
site_pv_name: 本站总访问量
more_button: 查看更多
donate: 打赏
share: 分享
bookmark:
title: 添加书签
message_prev:
message_next: 键将本页加入书签
rightside:
readmode_title: 阅读模式
font_plus_title: 放大字体
font_minus_title: 缩小字体
translate_title: 简繁转换
night_mode_title: 夜间模式
night_mode_title: 浅色和深色模式转换
back_to_top: 回到顶部
toc: 目录
scroll_to_comment: 直达评论
@@ -93,4 +95,20 @@ copy_copyright:
author: 作者
link: 链接
source: 来源
info: 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
info: 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Snackbar:
bookmark:
message_prev:
message_next: 键将本页加入书签
chs_to_cht: 你已切换为繁体
cht_to_chs: 你已切换为简体
day_to_night: 你已切换为深色模式
night_to_day: 你已切换为浅色模式
error_title: 页面没有找到
loading: 加载中...
error404:
error_title: 页面没有找到
back_button: 回到主页

View File

@@ -9,42 +9,43 @@ footer:
copy:
success: 複製成功
error: 複製錯誤
noSupport: 瀏覽器不支
noSupport: 瀏覽器不支
page:
articles: 文章總覽
tag: 標籤
category: 分類
archives: 時間軸
archives: 歸檔
sticky: 置頂
no_title: 無題
archives: 時間軸
post:
created: 發表於
updated: 更新於
wordcount: 字數總計
min2read: "閲讀時長: %s 分鐘"
page_pv: 讀量
min2read: '閱讀時長: %s 分鐘'
page_pv: 讀量
comments: 評論數
copyright:
author: 文章作者
link: 文章鏈接
link: 文章連結
copyright_notice: 版權聲明
copyright_content: '本博客所有文章除特別聲明外,均採用
copyright_content: '本部落格所有文章除特別聲明外,均採用
<a href="%s" target="_blank">%s</a> 許可協議。轉載請註明來自 <a href="%s" target="_blank">%s</a>'
recommend: 相關推薦
search:
search:
algolia_search:
input_placeholder: 文章
hits_empty: "找不到您查詢的內容:${query}"
hits_stats: "找到 ${hits} 條結果,用時 ${time} 毫秒"
input_placeholder: 文章
hits_empty: '找不到您查詢的內容:${query}'
hits_stats: '找到 ${hits} 條結果,用時 ${time} 毫秒'
local_search:
label: 本地搜
input_placeholder: 文章
hits_empty: "找不到您查詢的內容:${query}"
powered: "提供支持"
label: 本地搜
input_placeholder: 文章
hits_empty: '找不到您查詢的內容:${query}'
powered: '提供支援'
by:
pagination:
@@ -66,32 +67,47 @@ aside:
card_webinfo:
headline: 網站資訊
article_name: 文章數目
runtime_name: 行時間
runtime_name: 行時間
site_wordcount: 本站總字數
site_uv_name: 本站訪客數
site_pv_name: 本站總訪問量
more_button: 檢視更多
donate: 打賞
share: 分享
bookmark:
title: 添加書籤
message_prev:
message_next: 鍵將本頁加入書籤
title: 新增書籤
rightside:
readmode_title: 讀模式
font_plus_title: 放大字
font_minus_title: 縮小字
readmode_title: 讀模式
font_plus_title: 放大字
font_minus_title: 縮小字
translate_title: 簡繁轉換
night_mode_title: 夜間模式
night_mode_title: 淺色和深色模式轉換
back_to_top: 回到頂部
toc: 目錄
scroll_to_comment: 直達評論
setting:
setting:
runtime_unit:
copy_copyright:
author: 作者
link: 鏈接
link: 連結
source: 來源
info: 著作權歸作者所有。商業轉載請聯作者獲得授權,非商業轉載請註明出處。
info: 著作權歸作者所有。商業轉載請聯作者獲得授權,非商業轉載請註明出處。
Snackbar:
bookmark:
message_prev:
message_next: 鍵將本頁加入書籤
chs_to_cht: 你已切換為繁體
cht_to_chs: 你已切換為簡體
day_to_night: 你已切換為深色模式
night_to_day: 你已切換為淺色模式
loading: 載入中...
error404:
error_title: 頁面沒有找到
back_button: 回到主頁

30
layout/404.pug Normal file
View File

@@ -0,0 +1,30 @@
- var top_img = theme.error_404.background || theme.default_top_img
- var bg_img = `background-image: url(${url_for(top_img)})`
doctype html
html(lang=config.language data-theme=theme.display_mode)
head
include includes/head.pug
body
if theme.preloader
!=partial('includes/loading/loading', {}, {cache:theme.fragment_cache})
if theme.fireworks && theme.fireworks.enable
canvas.fireworks
if theme.background
- var is_photo = theme.background.startsWith('url') ? 'photo':'color'
#web_bg(data-type=is_photo)
#error-wrap
.error-content
.error-img(style=bg_img)
.error-info
h1.error_title= '404'
.error_subtitle= theme.error_404.subtitle
a.button--animated(href=url_for(config.root))
i.fas.fa-rocket
= _p('error404.back_button')
!=partial('includes/search/index', {}, {cache:theme.fragment_cache})
include includes/additional-js.pug

View File

@@ -1,4 +1,3 @@
extends includes/layout.pug
block content
@@ -6,6 +5,4 @@ block content
#archive
.article-sort-title= _p('page.articles') + ' - ' + site.posts.length
+articleSort(page.posts)
include includes/pagination.pug
#aside_content.aside_content
include includes/aside.pug
include includes/pagination.pug

View File

@@ -2,18 +2,13 @@ extends includes/layout.pug
block content
if theme.category_ui == 'index'
include ./includes/mixins/UI.pug
include ./includes/mixins/post-ui.pug
#recent-posts.recent-posts.category_ui
+UI_NEW(page.posts)
include includes/pagination.pug
#aside_content.aside_content
include includes/aside.pug
+postUI
include includes/pagination.pug
else
include ./includes/mixins/article-sort.pug
#category
.article-sort-title= _p('page.category') + ' - ' + page.category
+articleSort(page.posts)
include includes/pagination.pug
#aside_content.aside_content
include includes/aside.pug
include includes/pagination.pug

View File

@@ -1,31 +1,23 @@
.flink
each i in site.data.link
h1= i.class_name
.post-cards
ul.md-links
each item in i.link_list
li.md-links-item
a(href=item.link title=item.name target="_blank")
if theme.lazyload.enable
img.lozad(data-src=item.avatar onerror=`onerror=null;src='${theme.lodding_bg.flink}'` height="72px")
else
img(src=item.avatar onerror=`onerror=null;src='${theme.lodding_bg.flink}'` height="72px")
div(class="md-links-title")= item.name
<br/>
div(class="md-links-des")=item.descr
hr
div
p(style="font-size:15px;font-weight:bold")= theme.Flink.info_headline
ul
li= theme.Flink.name
li= theme.Flink.address
li= theme.Flink.avatar
li= theme.Flink.info
hr
.comment_int
p.comment-word= theme.Flink.comment
#page
.flink#article-container
if site.data.link
each i in site.data.link
if i.class_name
h2!= i.class_name
if i.class_desc
.flink-desc!=i.class_desc
.flink-list
each item in i.link_list
.flink-list-item
a(href=url_for(item.link) title=item.name target="_blank")
if theme.lazyload.enable
img(data-src=url_for(item.avatar) onerror=`this.onerror=null;this.src='` + url_for(theme.error_img.flink) + `'` alt=item.name )
else
img(src=url_for(item.avatar) onerror=`this.onerror=null;this.src='` + url_for(theme.error_img.flink) + `'` alt=item.name )
.flink-item-name= item.name
.flink-item-desc= item.descr
!= page.content
if page.comments !== false
include includes/comments/index.pug

View File

@@ -1,4 +0,0 @@
extends includes/layout.pug
block content
include includes/gallery/layout.pug

View File

@@ -1,20 +1,24 @@
if (theme.algolia_search.enable)
script(async src=url_for('/js/search/algolia.js'))
if (theme.mathjax && theme.mathjax.enable)
if(!is_tag() && !is_category() && !is_archive())
include ./third-party/mathjax.pug
if (theme.katex && theme.katex.enable)
if(!is_tag() && !is_category() && !is_archive())
include ./third-party/katex.pug
if (theme.local_search && theme.local_search.enable)
script(async src=url_for('/js/search/local-search.js'))
script(src=url_for(theme.CDN.jquery))
script(src=url_for(theme.CDN.utils))
script(src=url_for(theme.CDN.main))
if theme.translate && theme.translate.enable
script(src=url_for(theme.CDN.translate))
if theme.medium_zoom
script(src=url_for(theme.CDN.medium_zoom))
if theme.fancybox
script(src=url_for(theme.CDN.fancybox))
include ./math/index.pug
if theme.fireworks && theme.fireworks.enable
script(src='https://cdn.jsdelivr.net/npm/animejs@latest/anime.min.js')
script(src=url_for('/js/third-party/fireworks.js'))
script(src=url_for(theme.CDN.anime))
script(src=url_for(theme.CDN.fireworks))
if theme.nightshift.enable
script(src=url_for('js/nightshift.js'))
if (theme.snackbar && theme.snackbar.enable)
script(src=url_for(theme.CDN.snackbar))
if (theme.canvas_ribbon && theme.canvas_ribbon.enable)
include ./third-party/canvas-ribbon.pug
@@ -25,59 +29,48 @@ if (theme.canvas_ribbon_piao && theme.canvas_ribbon_piao.enable)
if (theme.canvas_nest && theme.canvas_nest.enable)
include ./third-party/canvas-nest.pug
if theme.baidu_push && theme.baidu_push.enable
script(src=url_for('js/baidupush.js'))
if theme.activate_power_mode.enable
script(src=url_for('js/activate-power-mode.js'))
script(src=url_for(theme.CDN.activate_power_mode))
script.
POWERMODE.colorful = true; // make power mode colorful
POWERMODE.shake = true; // turn off shake
POWERMODE.colorful = #{theme.activate_power_mode.colorful};
POWERMODE.shake = #{theme.activate_power_mode.shake};
document.body.addEventListener('input', POWERMODE);
if theme.translate && theme.translate.enable
script(src=url_for('/js/tw_cn.js'))
script.
translateInitilization()
if is_home() && theme.subtitle.enable
script(src="https://cdn.jsdelivr.net/npm/typed.js@2.0.9")
script.
var typed = new Typed(".subtitle", {
strings: '!{theme.subtitle.sub}'.split(","),
startDelay: 300,
typeSpeed: 100,
loop: true,
backSpeed: 50
});
if theme.busuanzi.site_uv || theme.busuanzi.site_pv || theme.busuanzi.page_pv
script(async src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js")
script(async src=url_for(theme.CDN.busuanzi))
if theme.instantpage.enable
script(src="https://cdn.jsdelivr.net/npm/instant.page@1.2.2/instantpage.min.js" type="module")
if theme.instantpage
script(src=url_for(theme.CDN.instantpage) type="module" defer)
if theme.lazyload.enable
script(src=url_for(theme.lazyload.script))
script.
const observer = lozad(); // lazy loads elements with default selector as '.lozad'
observer.observe();
script(src=url_for(theme.CDN.lazyload) async)
if is_home() && !theme.index_top_img_height && !theme.index_site_info_top
script.
//首頁fullpage
function alignContent() {
for (var n = $(window).height(), e = document.querySelectorAll(".full_page"), i = 0; i < e.length; i++)
e[i].style.height = n + "px";
$("#site-info").each(function () {
var x = $(this).height();
$(this).css("top", (n-x)/2)
})
}
alignContent();
$(window).bind("resize", function () {
alignContent()
})
//- 鼠標特效
if theme.click_heart
script(src=url_for(theme.CDN.click_heart))
if theme.ClickShowText && theme.ClickShowText.enable
script(src=url_for(theme.CDN.ClickShowText))
if theme.pangu && theme.pangu.enable
include ./third-party/pangu.pug
//- search
if theme.algolia_search && theme.algolia_search.enable
script(src=url_for(theme.CDN.algolia_js))
else if theme.local_search && theme.local_search.enable
script(src=url_for(theme.CDN.local_search))
//- mermaid
if theme.mermaid.enable
include ./math/mermaid.pug
if is_home()
include ./head/subtitle.pug
!=fragment_cache('injectBottom', function(){return injectHtml(theme.inject.bottom)})
if theme.preloader
!=partial('includes/loading/loading-js', {}, {cache:theme.fragment_cache})
!=partial('includes/chat/index', {}, {cache:theme.fragment_cache})

View File

@@ -1,21 +0,0 @@
if theme.aside.card_author
include widget/card_author.pug
if theme.aside.card_announcement
include widget/card_announcement.pug
if theme.aside.card_recent_post
include widget/card_recent_post.pug
if theme.aside.card_categories
include widget/card_categories.pug
if theme.aside.card_tags
include widget/card_tags.pug
if theme.aside.card_archives
include widget/card_archives.pug
if theme.aside.card_webinfo
include widget/card_webinfo.pug

View File

@@ -0,0 +1,30 @@
//- https://chatra.io/help/api/
script.
(function(d, w, c) {
w.ChatraID = '#{theme.chatra.id}';
var s = d.createElement('script');
w[c] = w[c] || function() {
(w[c].q = w[c].q || []).push(arguments);
};
s.async = true;
s.src = 'https://call.chatra.io/chatra.js';
if (d.head) d.head.appendChild(s);
})(document, window, 'Chatra');
if (!{theme.chat_btn}) {
var chatBtn = document.getElementById("chat_btn")
chatBtn.addEventListener("click", function(){
Chatra('openChat')
});
} else {
if (!{theme.chat_hide_show}) {
function chatBtnHide () {
Chatra('hide')
}
function chatBtnShow () {
Chatra('show')
}
}
}

View File

@@ -0,0 +1,37 @@
//- https://guide.daocloud.io/daovoice/javascript-api-5869833.html
script.
(function(i,s,o,g,r,a,m){i["DaoVoiceObject"]=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;a.charset="utf-8";m.parentNode.insertBefore(a,m)})(window,document,"script",('https:' == document.location.protocol ? 'https:' : 'http:') + "//widget.daovoice.io/widget/!{theme.daovoice.app_id}.js","daovoice")
script.
var isChatBtn = !{theme.chat_btn}
daovoice('init', {
app_id: '!{theme.daovoice.app_id}',},{
launcher: {
disableLauncherIcon: isChatBtn // 悬浮 ICON 是否显示
},
});
daovoice('update');
if (isChatBtn) {
var chatBtn = document.getElementById("chat_btn")
chatBtn.addEventListener("click", function(){
daovoice('show')
});
} else {
if (!{theme.chat_hide_show}) {
function chatBtnHide () {
daovoice('update', {},{
launcher: {
disableLauncherIcon: true // 悬浮 ICON 是否显示
},
});
}
function chatBtnShow () {
daovoice('update', {},{
launcher: {
disableLauncherIcon: false // 悬浮 ICON 是否显示
},
});
}
}
}

View File

@@ -0,0 +1,28 @@
//- https://sidecar.gitter.im/
script.
var isChatBtn = !{theme.chat_btn}
if (isChatBtn) {
((window.gitter = {}).chat = {}).options = {
room: '#{theme.gitter.room}',
activationElement: '#chat_btn'
};
} else {
((window.gitter = {}).chat = {}).options = {
room: '#{theme.gitter.room}',
};
if (!{theme.chat_hide_show}) {
var gitterBtn = document.getElementsByClassName('gitter-open-chat-button')
function chatBtnHide () {
gitterBtn[0].style.display= 'none'
}
function chatBtnShow () {
gitterBtn[0].style.display= 'block'
}
}
}
script(src="https://sidecar.gitter.im/dist/sidecar.v1.js" async defer)

View File

@@ -0,0 +1,8 @@
if theme.chatra && theme.chatra.enable
include ./chatra.pug
else if theme.tidio && theme.tidio.enable
include ./tidio.pug
else if theme.daovoice && theme.daovoice.enable
include ./daovoice.pug
else if theme.gitter && theme.gitter.enable
include ./gitter.pug

View File

@@ -0,0 +1,39 @@
script(src=`//code.tidio.co/${theme.tidio.public_key}.js` async)
if theme.chat_btn
script.
(function() {
function onTidioChatApiReady() {
window.tidioChatApi.hide();
window.tidioChatApi.on("close", function() {
window.tidioChatApi.hide();
});
}
if (window.tidioChatApi) {
window.tidioChatApi.on("ready", onTidioChatApiReady);
} else {
document.addEventListener("tidioChat-ready", onTidioChatApiReady);
}
document.getElementById("chat_btn").addEventListener("click", function(){
window.tidioChatApi.show();
window.tidioChatApi.open();
});
})();
else if theme.chat_hide_show
script.
function chatBtnHide () {
if (window.tidioChatApi) {
window.tidioChatApi.hide();
//- document.getElementById('tidio-chat').style.display= 'none'
}
}
function chatBtnShow () {
if (window.tidioChatApi) {
window.tidioChatApi.show();
//- document.getElementById('tidio-chat').style.display= 'block'
}
}

View File

@@ -1,13 +1,24 @@
if theme.disqus && theme.disqus.enable
#disqus_thread
script.
var unused = null;
var disqus_config = function () {
this.page.url = '!{ page.permalink }';
this.page.identifier = '!{ page.path }';
this.page.title = '!{ page.title }';
}
#disqus_thread
script.
var disqus_config = function () {
this.page.url = '!{ page.permalink }';
this.page.identifier = '!{ page.path }';
this.page.title = '!{ page.title }';
};
(function() {
var d = document, s = d.createElement('script');
s.src = "https://" + '!{theme.disqus.shortname}' +".disqus.com/embed.js";
s.setAttribute('data-timestamp', '' + +new Date());
(d.head || d.body).appendChild(s);
s.src = 'https://!{theme.disqus.shortname}.disqus.com/embed.js';
s.setAttribute('data-timestamp', +new Date());
(d.head || d.body).appendChild(s);
})();
if is_post() && theme.disqus.count
script.
function getDisqusCount() {
var d = document, s = d.createElement('script');
s.src = 'https://!{theme.disqus.shortname}.disqus.com/count.js';
s.id = 'dsq-count-scr';
(d.head || d.body).appendChild(s);
}
window.addEventListener('load', getDisqusCount, false);

View File

@@ -0,0 +1,25 @@
#disqus_thread
script(src=url_for(theme.CDN.disqusjs))
script.
var dsqjs = new DisqusJS({
shortname: '!{theme.disqusjs.shortname}',
siteName: '!{theme.disqusjs.siteName}',
identifier: '!{ page.path }',
url: '!{ page.permalink }',
title: '!{ page.title }',
api: '!{theme.disqusjs.api}',
apikey: '!{theme.disqusjs.apikey}',
nocomment: '!{theme.disqusjs.nocomment}',
admin: '!{theme.disqusjs.admin}',
adminLabel: '!{theme.disqusjs.adminLabel}'
});
if is_post() && theme.disqusjs.count
script.
function getDisqusCount() {
var d = document, s = d.createElement('script');
s.src = 'https://!{theme.disqusjs.shortname}.disqus.com/count.js';
s.id = 'dsq-count-scr';
(d.head || d.body).appendChild(s);
}
window.addEventListener('load', getDisqusCount, false);

View File

@@ -0,0 +1,12 @@
#fb-root
script(async defer crossorigin="anonymous" src=`https://connect.facebook.net/${theme.facebook_comments.lang}/sdk.js#xfbml=1&version=v6.0`)
.fb-comments(data-colorscheme = theme.display_mode === 'dark' ? 'dark' : 'light'
data-href=urlNoIndex()
data-numposts= theme.facebook_comments.pageSize || 10
data-order-by= theme.facebook_comments.order_by || 'social'
data-width="100%")
if theme.darkmode.enable
script.
var themeNow = document.documentElement.getAttribute('data-theme') === 'dark' ? 'dark' : 'light'
document.getElementsByClassName('fb-comments')[0].setAttribute('data-colorscheme',themeNow)

View File

@@ -1,13 +1,27 @@
if theme.gitalk && theme.gitalk.enable
#gitalk-container
script.
var gitalk = new Gitalk({
clientID: '!{theme.gitalk.client_id}',
clientSecret: '!{theme.gitalk.client_secret}',
repo: '!{theme.gitalk.repo}',
owner: '!{theme.gitalk.owner}',
admin: '!{theme.gitalk.admin}',
id: md5(decodeURI(location.pathname)),
language: '!{theme.gitalk.language}'
})
gitalk.render('gitalk-container')
#gitalk-container
script.
var gitalk = new Gitalk({
clientID: '!{theme.gitalk.client_id}',
clientSecret: '!{theme.gitalk.client_secret}',
repo: '!{theme.gitalk.repo}',
owner: '!{theme.gitalk.owner}',
admin: ['!{theme.gitalk.admin}'],
id: md5(decodeURI(location.pathname)),
language: '!{theme.gitalk.language}',
perPage: !{theme.gitalk.perPage},
distractionFreeMode: !{theme.gitalk.distractionFreeMode},
pagerDirection: '!{theme.gitalk.pagerDirection}',
createIssueManually: !{theme.gitalk.createIssueManually},
updateCountCallback: commentCount
})
gitalk.render('gitalk-container')
function commentCount(n){
try {
document.getElementsByClassName('gitalk-comment-count')[0].innerHTML= n
} catch (e) {
return false
}
}

View File

@@ -1,13 +0,0 @@
if theme.gitment && theme.gitment.enable
#gitment-container
script.
var gitment = new Gitment({
id: md5(decodeURI(location.pathname)),
owner: '!{theme.gitment.owner}',
repo: '!{theme.gitment.repo}',
oauth: {
client_id: '!{theme.gitment.client_id}',
client_secret: '!{theme.gitment.client_secret}'
}
})
gitment.render('gitment-container')

View File

@@ -1,35 +1,29 @@
if theme.disqus && theme.disqus.enable
- var d = theme.disqus && theme.disqus.enable
- var dj = theme.disqusjs && theme.disqusjs.enable
- var l = theme.livere && theme.livere.enable
- var gt = theme.gitalk && theme.gitalk.enable
- var v = theme.valine && theme.valine.enable
- var u = theme.utterances && theme.utterances.enable
- var fb = theme.facebook_comments && theme.facebook_comments.enable
- var isComment = d || dj || l || gt || v || u || fb
if isComment
hr
#post-comment
.comment_headling
i.fa.fa-comments.fa-fw(aria-hidden="true")
i.fas.fa-comments.fa-fw
span= ' ' + _p('comment')
include ./disqus.pug
else if theme.laibili && theme.laibili.enable
hr
#post-comment
.comment_headling
i.fa.fa-comments.fa-fw(aria-hidden="true")
span= ' ' + _p('comment')
include ./laibili.pug
else if theme.gitment && theme.gitment.enable
hr
#post-comment
.comment_headling
i.fa.fa-comments.fa-fw(aria-hidden="true")
span= ' ' + _p('comment')
include ./gitment.pug
else if theme.gitalk && theme.gitalk.enable
hr
#post-comment
.comment_headling
i.fa.fa-comments.fa-fw(aria-hidden="true")
span= ' ' + _p('comment')
include ./gitalk.pug
else if theme.valine && theme.valine.enable
hr
#post-comment
.comment_headling
i.fa.fa-comments.fa-fw(aria-hidden="true")
span= ' ' + _p('comment')
include ./valine.pug
if d
include ./disqus.pug
else if dj
include ./disqusjs.pug
else if l
include ./livere.pug
else if gt
include ./gitalk.pug
else if v
include ./valine.pug
else if u
include ./utterances.pug
else if fb
include ./facebook_comments.pug

View File

@@ -1,11 +0,0 @@
if theme.laibili && theme.laibili.enable
#lv-container(data-id="city" data-uid=theme.laibili.uid)
script.
(function(d, s) {
var j, e = d.getElementsByTagName(s)[0];
if (typeof LivereTower === 'function') { return; }
j = d.createElement(s);
j.src = 'https://cdn-city.livere.com/js/embed.dist.js';
j.async = true;
e.parentNode.insertBefore(j, e);
})(document, 'script');

View File

@@ -0,0 +1,10 @@
#lv-container(data-id="city" data-uid=theme.livere.uid)
script.
(function(d, s) {
var j, e = d.getElementsByTagName(s)[0];
if (typeof LivereTower === 'function') { return; }
j = d.createElement(s);
j.src = 'https://cdn-city.livere.com/js/embed.dist.js';
j.async = true;
e.parentNode.insertBefore(j, e);
})(document, 'script');

View File

@@ -0,0 +1,21 @@
script#utterances_comment(src=theme.CDN.utterances
repo=theme.utterances.repo
issue-term=theme.utterances.issue_term
theme= theme.display_mode === 'dark' ? theme.utterances.dark_theme : theme.utterances.light_theme
crossorigin="anonymous"
async)
if theme.darkmode.enable
script.
var themeNow = document.documentElement.getAttribute('data-theme') === 'dark' ? '#{theme.utterances.dark_theme}' : '#{theme.utterances.light_theme}'
document.getElementById('utterances_comment').setAttribute('theme',themeNow)
function utterancesTheme () {
var theme = document.documentElement.getAttribute('data-theme') === 'dark' ? '#{theme.utterances.dark_theme}' : '#{theme.utterances.light_theme}'
const message = {
type: 'set-theme',
theme: theme
};
const iframe = document.querySelector('.utterances-frame');
iframe.contentWindow.postMessage(message, 'https://utteranc.es');
}

View File

@@ -1,25 +1,35 @@
if theme.valine && theme.valine.enable
#vcomment.vcomment
script(src='https://cdn.jsdelivr.net/npm/valine/dist/Valine.min.js')
script.
var notify = #{ theme.valine.notify } == true ? true : false;
var verify = #{ theme.valine.verify } == true ? true : false;
var GUEST_INFO = ['nick','mail','link'];
var guest_info = '#{ theme.valine.guest_info }'.split(',').filter(function(item){
return GUEST_INFO.indexOf(item) > -1
});
guest_info = guest_info.length == 0 ? GUEST_INFO :guest_info;
- let emojiMaps = '""'
if site.data.valine
- emojiMaps = JSON.stringify(site.data.valine)
window.valine = new Valine({
el:'#vcomment',
notify:notify,
verify:verify,
appId:'#{theme.valine.appId}',
appKey:'#{theme.valine.appKey}',
placeholder:'#{theme.valine.placeholder}',
avatar:'#{theme.valine.avatar}',
guest_info:guest_info,
pageSize:'#{theme.valine.pageSize}',
lang:'#{theme.valine.lang}',
recordIP: true
#vcomment.vcomment
script(src=url_for(theme.CDN.valine))
script.
var requestSetting = function (from,set) {
var from = from
var setting = set.split(',').filter(function(item){
return from.indexOf(item) > -1
});
setting = setting.length == 0 ? from :setting;
return setting
}
var guestInfo = requestSetting(['nick','mail','link'],'#{ theme.valine.guest_info }')
var requiredFields = requestSetting(['nick','mail'],'#{ theme.valine.requiredFields }')
window.valine = new Valine({
el:'#vcomment',
appId: '#{theme.valine.appId}',
appKey: '#{theme.valine.appKey}',
placeholder: '#{theme.valine.placeholder}',
avatar: '#{theme.valine.avatar}',
meta: guestInfo,
pageSize: '#{theme.valine.pageSize}',
lang: '#{theme.valine.lang}',
recordIP: #{theme.valine.recordIP},
serverURLs: '#{theme.valine.serverURLs}',
emojiCDN: '#{theme.valine.emojiCDN}',
emojiMaps: !{emojiMaps},
enableQQ: #{theme.valine.enableQQ},
requiredFields: requiredFields
});

View File

@@ -1,14 +1,14 @@
#footer
#footer-wrap
- var now = new Date()
- var nowYear = now.getFullYear()
if theme.since && theme.since != nowYear
.copyright!= `&copy;${theme.since} - ${nowYear} By ${config.author}`
else
.copyright!= `&copy;${nowYear} By ${config.author}`
if theme.footer_copyright.enable
if theme.footer_copyright
.framework-info
span= _p('footer.driven') + ' '
a(href='http://hexo.io')
a(href='https://hexo.io')
span Hexo
span.footer-separator |
span= _p('footer.theme') + ' '

View File

@@ -1 +0,0 @@
#gallery!= page.content

View File

@@ -1,124 +1,100 @@
- var without_index = url.replace('index.html', '')
- var without_html = without_index.replace('.html', '')
- var photo_check = is_post() ? page.cover || theme.avatar : theme.avatar
- var photo_link = url_check (photo_check) ? photo_check : config.url + photo_check
- var pageTitle
- if (is_archive()) pageTitle = _p('page.archives')
- else if (is_tag()) pageTitle = _p('page.tag') + ': ' + page.tag
- else if (is_category()) pageTitle = _p('page.category') + ': ' + page.category
- else if (is_month()) pageTitle += ': ' + page.month + '/' + page.year
- else if (is_year()) pageTitle += ': ' + page.year
- else if (is_current('/404.html', [strict])) pageTitle = _p('error404.error_title')
- else pageTitle = page.title || config.title || ''
meta(http-equiv="x-dns-prefetch-control" content="on")
if theme.canonical
link(rel="canonical" href=without_html)
- var isSubtitle = config.subtitle ? ' - ' + config.subtitle : ''
- var tabTitle = is_home() || !pageTitle ? config.title + isSubtitle : pageTitle + ' | ' + config.title
if theme.twitter_meta
meta(name="twitter:card" content="summary_large_image")
meta(name="twitter:title" content=pageTitle_no_include_blog_name)
meta(name="twitter:description" content=pageDescription)
meta(name="twitter:image" content=photo_link)
- var pageDescription = page_description()
- var pageKeywords
- if (page.keywords) pageKeywords = Array.isArray(page.keywords) ? (page.keywords).join(',') : ([]).join(',') || page.keywords
- else if (page.tags && page.tags.length) pageKeywords = page.tags.data.map(function(tag) {return tag.name;}).join(',')
- else pageKeywords = Array.isArray(config.keywords) ? (config.keywords).join(','): ([]).join(',') || config.keywords
- var pageAuthor = config.email ? config.author + ',' + config.email : config.author
- var pageCopyright = config.copyright || config.author
if theme.Open_Graph_meta
if is_post()
meta(property="og:type" content="article")
else
meta(property="og:type" content="website")
meta(property="og:title" content=pageTitle_no_include_blog_name)
meta(property="og:url" content=without_html)
meta(property="og:site_name" content=config.title)
meta(property="og:description" content=pageDescription)
meta(property="og:image" content=photo_link)
meta(charset='UTF-8')
meta(http-equiv="X-UA-Compatible" content="IE=edge")
meta(name="viewport" content="width=device-width,initial-scale=1")
title= tabTitle
meta(name="description" content!=pageDescription)
if pageKeywords
meta(name="keywords" content=pageKeywords)
meta(name="author" content=pageAuthor)
meta(name="copyright" content=pageCopyright)
meta(name ="format-detection" content="telephone=no")
!=favicon_tag(theme.favicon || config.favicon)
link(rel="canonical" href=urlNoIndex())
if theme.disable_baidu_transformation
meta(http-equiv="Cache-Control" content="no-transform")
meta(http-equiv="Cache-Control" content="no-siteapp")
if theme.douban
if theme.douban.meta && (is_current('/movies/', [strict]) || is_current('/books/', [strict]) || is_current('/games/', [strict]))
meta(name="referrer" content="no-referrer")
//- 預解析
!=partial('includes/head/preconnect', {}, {cache:theme.fragment_cache})
//- 網站驗證
!=partial('includes/head/site_verification', {}, {cache:theme.fragment_cache})
//- Open_Graph
include ./head/Open_Graph.pug
//- PWA
if (theme.pwa && theme.pwa.enable)
!=partial('includes/head/pwa', {}, {cache:theme.fragment_cache})
if theme.darkmode.enable
!=partial('includes/head/darkmode', {}, {cache:theme.fragment_cache})
//- main css
link(rel='stylesheet', href=url_for(theme.CDN.main_css))
link(rel='stylesheet', href=url_for(theme.CDN.fontawesome))
if theme.fancybox
link(rel='stylesheet', href=url_for(theme.CDN.fancybox_css))
if (theme.snackbar && theme.snackbar.enable)
link(rel='stylesheet', href=url_for(theme.CDN.snackbar_css))
if is_post()
if(page.prev)
link(rel="prev" title=page.prev.title href=url_for(page.prev.permalink) )
if(page.next)
link(rel="next" title=page.next.title href=url_for(page.next.permalink) )
if theme.algolia_search.enable
link(rel="dns-prefetch" href="https://cdn.jsdelivr.net")
link(rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/instantsearch.js@2.1.1/dist/instantsearch.min.css")
script(src="https://cdn.jsdelivr.net/npm/instantsearch.js@2.1.1/dist/instantsearch.min.js" defer)
link(rel="stylesheet" type="text/css" href=url_for(theme.CDN.algolia_search_css))
script(src=url_for(theme.CDN.algolia_search) defer)
if (theme.gitment && theme.gitment.enable)
link(rel="dns-prefetch" href="https://unpkg.com")
link(rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/gitment/style/default.min.css")
script(src="https://cdn.jsdelivr.net/npm/gitment/dist/gitment.browser.min.js")
script(src="https://cdn.jsdelivr.net/npm/blueimp-md5@2.10.0/js/md5.min.js")
if (theme.gitalk && theme.gitalk.enable)
link(rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/gitalk/dist/gitalk.min.css")
if(theme.gitalk.js)
script(src=theme.gitalk.js)
else
script(src="https://cdn.jsdelivr.net/npm/gitalk@latest/dist/gitalk.min.js")
script(src="https://cdn.jsdelivr.net/npm/blueimp-md5@2.10.0/js/md5.min.js")
//- comment css
include ./head/comment.pug
//- google_adsense
!=partial('includes/head/google_adsense', {}, {cache:theme.fragment_cache})
//- analytics
!=partial('includes/head/analytics', {}, {cache:theme.fragment_cache})
if (theme.pwa && theme.pwa.enable)
link(rel="manifest" href=theme.pwa.manifest)
if(theme.pwa.theme_color)
meta(name="theme-color" content=theme.pwa.theme_color)
if(theme.pwa.theme_color)
meta(name="msapplication-TileColor" content=theme.pwa.theme_color)
if(theme.pwa.apple_touch_icon)
link(rel="apple-touch-icon" sizes="180x180" href=theme.pwa.apple_touch_icon)
if(theme.pwa.favicon_32_32)
link(rel="icon" type="image/png" sizes="32x32" href=theme.pwa.favicon_32_32)
if(theme.pwa.favicon_16_16)
link(rel="icon" type="image/png" sizes="16x16" href=theme.pwa.favicon_16_16)
if(theme.pwa.mask_icon)
link(rel="mask-icon" href=theme.pwa.mask_icon color="#5bbad5")
if theme.baidu_analytics
link(rel="dns-prefetch" href="https://hm.baidu.com")
script.
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?!{theme.baidu_analytics}";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
if theme.google_analytics
link(rel="dns-prefetch" href="https://www.google-analytics.com")
script.
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', '!{theme.google_analytics}', 'auto');
ga('send', 'pageview');
if theme.google_site_verification
meta(name="google-site-verification" content=theme.google_site_verification)
if theme.bing_site_verification
meta(name="msvalidate.01" content=theme.bing_site_verification)
if theme.baidu_site_verification
meta(name="baidu-site-verification" content=theme.baidu_site_verification)
if theme.qihu_site_verification
meta(name="360-site-verification" content=theme.qihu_site_verification)
- var preload_archive_img = theme.archive_img ||theme.top_img || config.top_img
- var preload_tag_img = theme.tag_img ||theme.top_img || config.top_img
- var preload_category_img = theme.category_img ||theme.top_img || config.top_img
- var preload_img = page.top_img || theme.top_img || config.top_img
if (is_archive() && preload_archive_img)
link(rel="preload" href=url_for(preload_archive_img) as="image" )
else if (is_tag() && preload_tag_img)
link(rel="preload" href=url_for(preload_tag_img) as="image" )
else if (is_category() && preload_category_img)
link(rel="preload" href=url_for(preload_category_img) as="image" )
else if (!is_post() && preload_img)
link(rel="preload" href=url_for(preload_img) as="image" )
//- font
if theme.blog_title_font.font_link
link(rel='stylesheet', href=url_for(theme.blog_title_font.font_link))
link(rel='stylesheet' href=url_for(theme.blog_title_font.font_link))
//- global config
!=partial('includes/head/config', {}, {cache:theme.fragment_cache})
include ./head/config_site.pug
include ./head/noscript.pug
!=fragment_cache('injectHead', function(){return injectHtml(theme.inject.head)})
if page.aplayer
include ./head/aplayer.pug

View File

@@ -0,0 +1,12 @@
- var contentType = is_post() ? 'article' : 'website'
if theme.Open_Graph_meta
meta(property="og:type" content=contentType)
meta(property="og:title" content=pageTitle)
meta(property="og:url" content=urlNoIndex())
meta(property="og:site_name" content=config.title)
meta(property="og:description" content!=pageDescription)
meta(property="og:image" content=full_url_for(page.cover || theme.avatar.img))
meta(property="article:published_time" content=date_xml(page.date))
meta(property="article:modified_time" content=date_xml(page.updated))
meta(name="twitter:card" content="summary")

View File

@@ -0,0 +1,22 @@
if theme.baidu_analytics
script.
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?!{theme.baidu_analytics}";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
if theme.google_analytics
script.
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', '!{theme.google_analytics}', 'auto');
ga('send', 'pageview');
if theme.tencent_analytics
script(src=`https://tajs.qq.com/stats?sId=${theme.tencent_analytics}` charset="UTF-8")

View File

@@ -0,0 +1,3 @@
link(rel='stylesheet' href=url_for(theme.CDN.aplayer_css))
script(src=url_for(theme.CDN.aplayer_js))
script(src=url_for(theme.CDN.meting_js))

View File

@@ -0,0 +1,14 @@
if (theme.facebook_comments.enable && page.comments !== false && !is_tag() && !is_category() && !is_archive() && !is_home())
if theme.facebook_comments.app_id
meta(property="fb:app_id" content=theme.facebook_comments.app_id )
if theme.facebook_comments.user_id
meta(property="fb:admins" content=theme.facebook_comments.user_id)
if (theme.disqusjs && theme.disqusjs.enable && page.comments !== false && !is_tag() && !is_category() && !is_archive() && !is_home())
link(rel="stylesheet" type="text/css" href=url_for(theme.CDN.disqusjs_css))
if (theme.gitalk && theme.gitalk.enable && page.comments !== false && !is_tag() && !is_category() && !is_archive() && !is_home())
link(rel="stylesheet" type="text/css" href=url_for(theme.CDN.gitalk_css))
script(src=url_for(theme.CDN.gitalk))
script(src=url_for(theme.CDN.blueimp_md5))

View File

@@ -31,7 +31,6 @@
translate = JSON.stringify({
defaultEncoding: theme.translate.defaultEncoding,
translateDelay: theme.translate.translateDelay,
cookieDomain: theme.translate.cookieDomain,
msgToTraditionalChinese: theme.translate.msgToTraditionalChinese,
msgToSimplifiedChinese: theme.translate.msgToSimplifiedChinese
})
@@ -42,16 +41,38 @@
copyright = JSON.stringify({
languages: {
author: _p("copy_copyright.author") + ': ' + config.author,
link: _p("copy_copyright.link") + ': ' + without_html,
link: _p("copy_copyright.link") + ': ',
source: _p("copy_copyright.source") + ': ' + config.title,
info: _p("copy_copyright.info")
}
})
}
var copy_copyright_js = theme.copy.enable && theme.copy.copyright
var ClickShowText = 'undefined';
if (theme.ClickShowText && theme.ClickShowText.enable) {
ClickShowText = JSON.stringify({
text: theme.ClickShowText.text.join(","),
fontSize: theme.ClickShowText.fontSize
})
}
var Snackbar = 'undefined';
if (theme.snackbar && theme.snackbar.enable) {
Snackbar = JSON.stringify({
bookmark: {
message_prev: _p("Snackbar.bookmark.message_prev"),
message_next: _p("Snackbar.bookmark.message_next")
},
chs_to_cht: _p("Snackbar.chs_to_cht"),
cht_to_chs: _p("Snackbar.cht_to_chs"),
day_to_night: _p("Snackbar.day_to_night"),
night_to_day: _p("Snackbar.night_to_day"),
bgLight: theme.snackbar.bg_light,
bgDark: theme.snackbar.bg_dark,
position: theme.snackbar.position,
})
}
script.
var GLOBAL_CONFIG = {
@@ -59,22 +80,31 @@ script.
algolia: !{algolia},
localSearch: !{localSearch},
translate: !{translate},
highlight_copy: '!{theme.highlight_copy}',
highlight_lang: '!{theme.highlight_lang}',
highlight_shrink: '!{theme.highlight_shrink}',
copy: {
success: '!{_p("copy.success")}',
error: '!{_p("copy.error")}',
noSupport: '!{_p("copy.noSupport")}'
},
bookmark: {
title: '!{_p("bookmark.title")}',
message_prev: '!{_p("bookmark.message_prev")}',
message_next: '!{_p("bookmark.message_next")}'
message_prev: '!{_p("Snackbar.bookmark.message_prev")}',
message_next: '!{_p("Snackbar.bookmark.message_next")}'
},
runtime_unit: '!{_p("runtime_unit")}',
runtime: !{theme.runtimeshow.enable},
copyright: !{copyright},
copy_copyright_js: !{copy_copyright_js}
ClickShowText: !{ClickShowText},
medium_zoom: !{theme.medium_zoom},
fancybox: !{theme.fancybox},
Snackbar: !{Snackbar},
justifiedGallery: {
js: '!{theme.CDN.justifiedGallery_js}',
css: '!{theme.CDN.justifiedGallery_css}'
},
baiduPush: !{theme.baidu_push},
highlightCopy: !{theme.highlight_copy},
highlightLang: !{theme.highlight_lang},
isPhotoFigcaption: !{theme.photofigcaption},
islazyload: !{theme.lazyload.enable},
isanchor: !{theme.anchor}
}

View File

@@ -0,0 +1,17 @@
-
let isHighlightShrink
if (theme.highlight_shrink == 'none') isHighlightShrink = 'undefined'
else if (page.highlight_shrink !== undefined) isHighlightShrink = page.highlight_shrink
else isHighlightShrink = theme.highlight_shrink
const pageToc = page.toc !== undefined ? page.toc : theme.toc.enable
const showToc = is_post() && pageToc && (toc(page.content) !== '' || page.encrypt == true )
-
script.
var GLOBAL_CONFIG_SITE = {
isPost: !{is_post()},
isHome: !{is_home()},
isHighlightShrink: !{isHighlightShrink},
isSidebar: !{showToc}
}

View File

@@ -0,0 +1,56 @@
script.
var activateDarkMode = function () {
document.documentElement.setAttribute('data-theme', 'dark')
if (document.querySelector('meta[name="theme-color"]') !== null) {
document.querySelector('meta[name="theme-color"]').setAttribute('content', '#000')
}
}
var activateLightMode = function () {
document.documentElement.setAttribute('data-theme', 'light')
if (document.querySelector('meta[name="theme-color"]') !== null) {
document.querySelector('meta[name="theme-color"]').setAttribute('content', '#fff')
}
}
var getCookies = function (name) {
const value = `; ${document.cookie}`
const parts = value.split(`; ${name}=`)
if (parts.length === 2) return parts.pop().split(';').shift()
}
var autoChangeMode = '#{theme.darkmode.autoChangeMode}'
var t = getCookies('theme')
if (autoChangeMode === '1') {
var isDarkMode = window.matchMedia('(prefers-color-scheme: dark)').matches
var isLightMode = window.matchMedia('(prefers-color-scheme: light)').matches
var isNotSpecified = window.matchMedia('(prefers-color-scheme: no-preference)').matches
var hasNoSupport = !isDarkMode && !isLightMode && !isNotSpecified
if (t === undefined) {
if (isLightMode) activateLightMode()
else if (isDarkMode) activateDarkMode()
else if (isNotSpecified || hasNoSupport) {
console.log('You specified no preference for a color scheme or your browser does not support it. I Schedule dark mode during night time.')
var now = new Date()
var hour = now.getHours()
var isNight = hour <= 6 || hour >= 18
isNight ? activateDarkMode() : activateLightMode()
}
window.matchMedia('(prefers-color-scheme: dark)').addListener(function (e) {
if (Cookies.get('theme') === undefined) {
e.matches ? activateDarkMode() : activateLightMode()
}
})
} else if (t === 'light') activateLightMode()
else activateDarkMode()
} else if (autoChangeMode === '2') {
now = new Date()
hour = now.getHours()
isNight = hour <= 6 || hour >= 18
if (t === undefined) isNight ? activateDarkMode() : activateLightMode()
else if (t === 'light') activateLightMode()
else activateDarkMode()
} else {
if (t === 'dark') activateDarkMode()
else if (t === 'light') activateLightMode()
}

View File

@@ -0,0 +1,7 @@
if (theme.google_adsense && theme.google_adsense.enable)
script(async src=theme.google_adsense.js)
script.
(adsbygoogle = window.adsbygoogle || []).push({
google_ad_client: '!{theme.google_adsense.client}',
enable_page_level_ads: '!{theme.google_adsense.enable_page_level_ads}'
});

View File

@@ -0,0 +1,9 @@
noscript.
<style>
#nav {
opacity: 1
}
.justified-gallery img{
opacity: 1
}
</style>

View File

@@ -0,0 +1,19 @@
link(rel="preconnect" href="//cdn.jsdelivr.net")
if theme.google_analytics
link(rel="preconnect" href="//www.google-analytics.com" crossorigin)
if theme.baidu_analytics
link(rel="preconnect" href="//hm.baidu.com")
if theme.tencent_analytics
link(rel="preconnect" href="//ta.qq.com")
if theme.blog_title_font.font_link && theme.blog_title_font.font_link.indexOf('//fonts.googleapis.com') != -1
link(rel="preconnect" href="//fonts.googleapis.com" crossorigin)
if theme.busuanzi.site_uv || theme.busuanzi.site_pv || theme.busuanzi.page_pv
link(rel="preconnect" href="//busuanzi.ibruce.info")
if theme.baidu_push
link(rel="preconnect" href="//zz.bdstatic.com")

View File

@@ -0,0 +1,13 @@
link(rel="manifest" href=theme.pwa.manifest)
if(theme.pwa.theme_color)
meta(name="theme-color" content=theme.pwa.theme_color)
if(theme.pwa.theme_color)
meta(name="msapplication-TileColor" content=theme.pwa.theme_color)
if(theme.pwa.apple_touch_icon)
link(rel="apple-touch-icon" sizes="180x180" href=theme.pwa.apple_touch_icon)
if(theme.pwa.favicon_32_32)
link(rel="icon" type="image/png" sizes="32x32" href=theme.pwa.favicon_32_32)
if(theme.pwa.favicon_16_16)
link(rel="icon" type="image/png" sizes="16x16" href=theme.pwa.favicon_16_16)
if(theme.pwa.mask_icon)
link(rel="mask-icon" href=theme.pwa.mask_icon color="#5bbad5")

View File

@@ -0,0 +1,11 @@
if theme.google_site_verification
meta(name="google-site-verification" content=theme.google_site_verification)
if theme.bing_site_verification
meta(name="msvalidate.01" content=theme.bing_site_verification)
if theme.baidu_site_verification
meta(name="baidu-site-verification" content=theme.baidu_site_verification)
if theme.qihu_site_verification
meta(name="360-site-verification" content=theme.qihu_site_verification)

View File

@@ -0,0 +1,130 @@
if theme.subtitle.enable
- var source = theme.subtitle.source
- var subtitleEffect = theme.subtitle.effect
if subtitleEffect
script(src=url_for(theme.CDN.typed))
if source == '1'
script.
var subtitleType = function () {
var subtitleEffect = !{ subtitleEffect }
fetch('https://api.btstu.cn/yan/api.php?charset=utf-8&encode=json',)
.then(function (res) {
return res.json()
})
.then(function (data) {
if (subtitleEffect) {
var sub = "!{theme.subtitle.sub}".length == 0 ? new Array() : "!{theme.subtitle.sub}".split(',')
var both = sub.unshift(data.text)
var typed = new Typed('#subtitle', {
strings: sub,
startDelay: 300,
typeSpeed: 150,
loop: !{theme.subtitle.loop},
backSpeed: 50,
})
} else {
document.getElementById('subtitle').innerHTML = data.text
}
})
.catch(function (err) {
console.error(err)
})
}
window.addEventListener('load', subtitleType)
else if source == '2'
script.
var subtitleType = function () {
var subtitleEffect = !{ subtitleEffect }
fetch('https://v1.hitokoto.cn')
.then(function (res) {
return res.json()
})
.then(function (data) {
if (subtitleEffect) {
var from = '出自 ' + data.from
var sub = "!{theme.subtitle.sub}".length == 0 ? new Array() : "!{theme.subtitle.sub}".split(',')
var both = sub.unshift(data.hitokoto, from)
var typed = new Typed('#subtitle', {
strings: sub,
startDelay: 300,
typeSpeed: 150,
loop: !{theme.subtitle.loop},
backSpeed: 50,
})
} else {
document.getElementById('subtitle').innerHTML = data.hitokoto
}
})
.catch(function (err) {
console.error(err)
})
}
window.addEventListener('load', subtitleType)
else if source == '3'
script.
var subtitleType = function () {
loadScript('http://yijuzhan.com/api/word.php?m=js', function () {
var subtitleEffect = !{ subtitleEffect }
var con = str[0]
if (subtitleEffect) {
var from = '出自 ' + str[1]
var sub = "!{theme.subtitle.sub}".length == 0 ? new Array() : "!{theme.subtitle.sub}".split(',')
var both = sub.unshift(con, from)
var typed = new Typed('#subtitle', {
strings: sub,
startDelay: 300,
typeSpeed: 150,
loop: !{theme.subtitle.loop},
backSpeed: 50,
})
} else {
document.getElementById('subtitle').innerHTML = con
}
})
}
window.addEventListener('load', subtitleType)
else if source == '4'
script.
var subtitleType = function () {
loadScript('https://sdk.jinrishici.com/v2/browser/jinrishici.js',function () {
var subtitleEffect = !{ subtitleEffect }
jinrishici.load(function (result) {
if (subtitleEffect) {
var sub = "!{theme.subtitle.sub}".length == 0 ? new Array() : "!{theme.subtitle.sub}".split(',')
var content = result.data.content
var both = sub.unshift(content)
var typed = new Typed('#subtitle', {
strings: sub,
startDelay: 300,
typeSpeed: 150,
loop: !{theme.subtitle.loop},
backSpeed: 50,
})
} else {
document.getElementById('subtitle').innerHTML = result.data.content
}
})
}
)
}
window.addEventListener('load', subtitleType)
else
script.
var subtitleEffect = !{subtitleEffect}
if (subtitleEffect) {
var typed = new Typed("#subtitle", {
strings: "!{theme.subtitle.sub}".split(","),
startDelay: 300,
typeSpeed: 150,
loop: !{theme.subtitle.loop},
backSpeed: 50
})
} else {
document.getElementById("subtitle").innerHTML = '!{theme.subtitle.sub[0]}'
}

View File

@@ -1,13 +0,0 @@
#header
#page-header
span#blog_name.pull-left
a#site-name.blog_title(href=url_for('/')) #[=config.title]
i.fa.fa-bars.fa-fw.toggle-menu.pull-right.close(aria-hidden="true")
span.pull-right.menus
.menus_items
include menu_item.pug
span#search_button.pull-right
if (theme.algolia_search.enable || theme.local_search && theme.local_search.enable)
a.site-page.social-icon.search
i.fa.fa-search.fa-fw
span=' '+_p('search')

View File

@@ -0,0 +1,43 @@
if is_home()
- var top_img = theme.index_img || theme.default_top_img
else if is_post()
- var top_img = page.top_img || page.cover || page.randomcover || theme.default_top_img
else if is_archive()
- var top_img = theme.archive_img || theme.default_top_img
else if is_tag()
- var top_img = theme.tag_img || theme.default_top_img
else if is_category()
- var top_img = theme.category_img || theme.default_top_img
else
- var top_img = page.top_img || theme.default_top_img
if theme.douban
if is_current('/movies/', [strict])
- var top_img = theme.douban.movies_img || theme.default_top_img
else if is_current('/books/', [strict])
- var top_img = theme.douban.books_img || theme.default_top_img
else if is_current('/games/', [strict])
- var top_img = theme.douban.games_img || theme.default_top_img
- var bg_img = top_img && top_img !== true ? `background-image: url(${url_for(top_img)})` : ''
- var site_title = is_archive() ? _p('page.archives') : page.title || page.tag || page.category || config.title
- var isHomeClass = is_home() ? 'full_page' : 'not-index-bg'
- is_post() ? isHomeClass = 'post-bg' : isHomeClass
header#page-header(class=isHomeClass style=bg_img)
!=partial('includes/header/nav', {}, {cache:theme.fragment_cache})
if is_home()
#site-info
h1#site_title=site_title
#site_subtitle
span#subtitle
if(theme.social)
#site_social_icons
!=fragment_cache('social', function(){return partial('includes/header/social')})
#scroll_down
i.fas.fa-angle-down.scroll-down-effects
else if is_post()
include ./post-info.pug
else
#page_site-info
h1#site_title=site_title

View File

@@ -0,0 +1,22 @@
.menus_items
each value, label in theme.menu
if !Array.isArray(value)
.menus_item
a.site-page(href=url_for(trim(value.split('||')[0])))
if value.split('||')[1]
i.fa-fw(class=trim(value.split('||')[1]))
span=' '+label
else
.menus_item
a.site-page
if label.split('||')[1]
i.fa-fw(class=trim(label.split('||')[1]) )
span=' '+ trim(label.split('||')[0])
i.fas.fa-chevron-down.menus-expand
ul.menus_item_child
each i in value
li
a.site-page(href=url_for(trim(i.split('||')[1])))
if i.split('||')[2]
i.fa-fw(class=trim(i.split('||')[2]))
span=' '+trim(i.split('||')[0])

View File

@@ -0,0 +1,17 @@
nav#nav
span#blog_name.pull-left
a#site-name.blog_title(href=url_for('/')) #[=config.title]
span.pull-right.menus
if (theme.algolia_search.enable || theme.local_search && theme.local_search.enable)
#search_button
a.site-page.social-icon.search
i.fas.fa-search.fa-fw
span=' '+_p('search')
!=fragment_cache('menus', function(){return partial('includes/header/menu_item')})
span.toggle-menu.close
a.site-page
i.fas.fa-bars.fa-fw

View File

@@ -0,0 +1,88 @@
#post-info
#post-title
.posttitle= page.title || _p('no_title')
#post-meta
.meta-firstline
if (theme.post_meta.post.date_type)
if (theme.post_meta.post.date_type === 'both')
time.post-meta__date
span.post-meta__date-created(title= _p('post.created')+' '+full_date(page.date))
i.far.fa-calendar-alt.fa-fw
=' '+_p('post.created')+' '+date(page.date, config.date_format)
span.post-meta__separator |
span.post-meta__date-updated(title= _p('post.updated')+' '+full_date(page.updated))
i.fas.fa-history.fa-fw
=' '+_p('post.updated')+' '+date(page.updated, config.date_format)
else
- var data_type_update = theme.post_meta.post.date_type === 'updated'
- var date_type = data_type_update ? 'updated' : 'date'
- var date_icon = data_type_update ? 'fas fa-history' :'far fa-calendar-alt'
- var data_info = data_type_update ? _p('post.updated') : _p('post.created')
time.post-meta__date(title=data_info + ' ' + full_date(page[date_type]))
i.fa-fw(class=date_icon)
=' ' + data_info + ' ' + date(page[date_type], config.date_format)
if (theme.post_meta.post.categories && page.categories.data.length > 0)
span.post-meta__categories
if (theme.post_meta.post.date_type)
span.post-meta__separator |
each item, index in page.categories.data
i.fas.fa-inbox.fa-fw.post-meta__icon
a(href=url_for(item.path)).post-meta__categories #[=item.name]
if (index < page.categories.data.length - 1)
i.fas.fa-angle-right.post-meta__separator
.meta-secondline
- let postWordcount = theme.wordcount.enable && (theme.wordcount.post_wordcount || theme.wordcount.min2read)
if (postWordcount)
span.post-meta-wordcount
if theme.wordcount.post_wordcount
i.far.fa-file-word.fa-fw.post-meta__icon
span= _p('post.wordcount') + ':'
span.word-count= wordcount(page.content)
if theme.wordcount.min2read
span.post-meta__separator |
if theme.wordcount.min2read
i.far.fa-clock.fa-fw.post-meta__icon
span= _p('post.min2read', min2read(page.content, {cn: 350, en: 160}))
.meta-thirdline
span.post-meta-pv-cv
if (postWordcount && theme.busuanzi.page_pv)
span.post-meta__separator |
if theme.busuanzi.page_pv
i.far.fa-eye.fa-fw.post-meta__icon
span=_p('post.page_pv') + ':'
span#busuanzi_value_page_pv
span.post-meta-commentcount
if ((theme.disqus && theme.disqus.enable && theme.disqus.count && page.comments !== false) || (theme.disqusjs && theme.disqusjs.enable && theme.disqusjs.count && page.comments !== false))
if (postWordcount || theme.busuanzi.page_pv)
span.post-meta__separator |
i.far.fa-comments.fa-fw.post-meta__icon
span= _p('post.comments') + ':'
span.disqus-comment-count.comment-count
a(href=full_url_for(page.path) + '#disqus_thread')
else if (theme.valine && theme.valine.enable && theme.valine.count && page.comments !== false)
if (postWordcount || theme.busuanzi.page_pv)
span.post-meta__separator |
i.far.fa-comments.fa-fw.post-meta__icon
span= _p('post.comments') + ':'
a(href=url_for(page.path) + '#post-comment' itemprop="discussionUrl")
span.valine-comment-count.comment-count(data-xid=url_for(page.path) itemprop="commentCount")
else if (theme.gitalk && theme.gitalk.enable && theme.gitalk.count && page.comments !== false)
if (postWordcount || theme.busuanzi.page_pv)
span.post-meta__separator |
i.far.fa-comments.fa-fw.post-meta__icon
span= _p('post.comments') + ':'
a(href=url_for(page.path) + '#post-comment')
span.gitalk-comment-count.comment-count
else if theme.facebook_comments.enable && theme.facebook_comments.count && page.comments !== false
if (postWordcount || theme.busuanzi.page_pv)
span.post-meta__separator |
i.far.fa-comments.fa-fw.post-meta__icon
span= _p('post.comments') + ':'
a.comment-count(href=url_for(page.path) + '#post-comment')
span.fb-comments-count(data-href=urlNoIndex())

View File

@@ -0,0 +1,4 @@
each url, icon in theme.social
a.social-icon(href=url_for(trim(url.split('||')[0])) target="_blank"
title=url.split('||')[1] === undefined ? '' : trim(url.split('||')[1]))
i(class=icon)

View File

@@ -1,93 +1,48 @@
- var pageTitle = page.title || config.subtitle || ''
- if (is_archive()) pageTitle = _p('page.archives')
- if (is_tag()) pageTitle = _p('page.tag') + ': ' + page.tag
- if (is_category()) pageTitle = _p('page.category') + ': ' + page.category
- if (is_month()) pageTitle += ': ' + page.month + '/' + page.year
- if (is_year()) pageTitle += ': ' + page.year
- var pageTitle_saved //- 暫時存儲pageTitle
- var pageTitle_no_include_blog_name //- 存儲pageTitle 不帶 " | "meta用
- var home_subtitle_true //有subtitle
//- home時顯示config.title (JerryC),其他顯示 pageTitle。meta用
- is_home() ? pageTitle_no_include_blog_name = config.title : pageTitle_no_include_blog_name = pageTitle
//- 暫時存儲pageTitle
- pageTitle ? pageTitle_saved = pageTitle + ' | ' + config.title : pageTitle_saved = config.title
//- 是否有 config.subtitle 是各自显示
- config.subtitle ? home_subtitle_true = ' - ' + config.subtitle : home_subtitle_true = ''
//- home時pageTitle顯示 JerryC - subtitle其他顯示 pageTitle | JerryC
- is_home() ? pageTitle = config.title + home_subtitle_true : pageTitle = pageTitle_saved
//- 判断keywords
- var pageDescription = page.description || page.title || config.description || ''
- var pageKeywords = Array.isArray(config.keywords) ? (config.keywords).join(','): ([]).join(',') || config.keywords
- if (page.tags && page.tags.data) pageKeywords = page.tags.data.map(function(tag) {return tag.name;}).join(',')
- var pageAuthor = config.email ? config.author + ',' + config.email : config.author
- var pageCopyright = config.copyright || config.author
- var body_class = theme.display_mode == 'night' ? 'night-mode' : ''
- var hideAside = !theme.aside.enable || page.aside === false ? 'hide-aside' : ''
- var pageHighlightShrinkSet = page.highlight_shrink !== undefined ? page.highlight_shrink : theme.highlight_shrink
- var pageHighlightShrink = theme.highlight_shrink !== 'none' && pageHighlightShrinkSet ? 'code-close' : ''
doctype html
html(lang=config.language)
html(lang=config.language data-theme=theme.display_mode)
head
meta(charset='UTF-8')
meta(http-equiv="X-UA-Compatible" content="IE=edge")
meta(name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1")
title= pageTitle
meta(name="description" content=pageDescription)
meta(name="keywords" content=pageKeywords)
meta(name="author" content=pageAuthor)
meta(name="copyright" content=pageCopyright)
meta(name ="format-detection" content="telephone=no")
!=favicon_tag(config.favicon || theme.favicon || '/favicon.ico')
if theme.stylesheets !== undefined && theme.stylesheets.length > 0
each url in theme.stylesheets
link(rel='stylesheet', href=url_for(url))
each item in theme.cdn.css
if item !== undefined
link(rel='stylesheet', href=item)
include ./head.pug
include ./config.pug
body(class=body_class)
body
if theme.preloader
!=partial('includes/loading/loading', {}, {cache:theme.fragment_cache})
if theme.fireworks && theme.fireworks.enable
canvas.fireworks
include ./header.pug
include ./mobile-sidebar.pug
#body-wrap
!=partial('includes/mobile-sidebar/index', {}, {cache:theme.fragment_cache})
include ./sidebar.pug
#body-wrap(class=pageHighlightShrink)
if theme.background
#web_bg
if (is_post() && page.toc != false && theme.toc.enable)
i.fa.fa-arrow-right#toggle-sidebar(aria-hidden="true")
include ./sidebar.pug
- var is_photo = theme.background.startsWith('url') ? 'photo':'color'
#web_bg(data-type=is_photo)
include ./header/index.pug
if (!is_post())
include ./nav.pug
#content-outer
block top_img
if (!is_post())
#content-inner.layout_page
if body
div!= body
else
block content
else
#content-inner.layout.layout_post
if body
div!= body
else
block content
main#content-inner.layout_page(class=hideAside)
if body
div!= body
else
block content
include widget/index.pug
else
main#content-inner.layout_post
if body
div!= body
else
block content
- var footer_bg = theme.footer_bg == false ? '' : bg_img
footer(style=footer_bg)
include ./footer.pug
include ./rightside.pug
each item in theme.cdn.js
if item !== undefined
script(src=url_for(item))
if theme.scripts !== undefined && theme.scripts.length > 0
//- scripts list from config.yml
each url in theme.scripts
script(src=url_for(url))
include ./additional-js.pug
include ./search/index.pug
- var is_bg = theme.footer_bg == false ? 'color' : 'photo'
footer#footer(style=footer_bg data-type=is_bg)
!=partial('includes/footer', {}, {cache:theme.fragment_cache})
include ./rightside.pug
!=partial('includes/search/index', {}, {cache:theme.fragment_cache})
include ./additional-js.pug

View File

@@ -0,0 +1,6 @@
script.
var endLoading = function () {
document.body.style.overflow = 'auto';
document.getElementById('loading-box').classList.add("loaded")
}
window.addEventListener('load',endLoading)

View File

@@ -0,0 +1,9 @@
#loading-box
.loading-left-bg
.loading-right-bg
.spinner-box
.configure-border-1
.configure-core
.configure-border-2
.configure-core
.loading-word= _p('loading')

View File

@@ -0,0 +1,15 @@
if theme.mathjax && theme.mathjax.enable
if theme.mathjax.per_page
if(!is_tag() && !is_category() && !is_archive() && !is_home())
include ./mathjax.pug
else
if page.mathjax
include ./mathjax.pug
if theme.katex && theme.katex.enable
if theme.katex.per_page
if(!is_tag() && !is_category() && !is_archive() && !is_home())
include ./katex.pug
else
if page.katex
include ./katex.pug

View File

@@ -0,0 +1,7 @@
link(rel="stylesheet" type="text/css" href=theme.CDN.katex)
script(src=url_for(theme.CDN.katex_copytex))
link(rel="stylesheet" type="text/css" href=theme.CDN.katex_copytex_css)
script.
$(function () {
$('span.katex-display').wrap('<div class="katex-wrap"></div>')
})

View File

@@ -24,4 +24,4 @@ script(type="text/x-mathjax-config").
}
});
script(src=theme.mathjax.cdn)
script(src=theme.CDN.mathjax)

View File

@@ -0,0 +1,8 @@
script.
if (document.getElementsByClassName('mermaid').length) {
loadScript('!{theme.CDN.mermaid}',function () {
mermaid.initialize({
theme: '!{theme.mermaid.theme}',
})
})
}

View File

@@ -1,20 +0,0 @@
each value, label in theme.menu
if !Array.isArray(value)
.menus_item
a.site-page(href=trim(value.split('||')[0]))
i.fa-fw(class=trim(value.split('||')[1]))
span=' '+label
else
.menus_item
a.site-page
i.fa-fw(class=trim(label.split('||')[1]) aria-hidden="true")
span=' '+ trim(label.split('||')[0])
i.fa.fa-chevron-down.menus-expand(aria-hidden="true")
ul.menus_item_child
each i in value
li
a.site-page(href=trim(i.split('||')[1]))
i.fa-fw(class=trim(i.split('||')[2]))
span=' '+trim(i.split('||')[0])
script.
document.body.addEventListener('touchstart', function(){ });

View File

@@ -1,41 +0,0 @@
mixin UI_NEW(posts)
- posts.each(function(article,index){
.recent-post-item.article-container
- var link = article.link || article.path
if index%2 == 0
.post_cover.is_left
a(href=url_for(link) title=article.title || _p('no_title'))
- var post_cover = article.cover
if theme.lazyload.enable
img.post_bg.lozad(data-src=`${post_cover}` onerror=`onerror=null;src='${theme.lodding_bg.post_page}'`)
else
img.post_bg(src=`${post_cover}` onerror=`onerror=null;src='${theme.lodding_bg.post_page}'`)
else
.post_cover.is_right
a(href=url_for(link) title=article.title || _p('no_title'))
- var post_cover = article.cover
if theme.lazyload.enable
img.post_bg.lozad(data-src=`${post_cover}` onerror=`onerror=null;src='${theme.lodding_bg.post_page}'`)
else
img.post_bg(src=`${post_cover}` onerror=`onerror=null;src='${theme.lodding_bg.post_page}'`)
.recent-post-info
a.article-title(href=url_for(link) title= article.title || _p('no_title'))= article.title || _p('no_title')
if (theme.post_meta.date_type)
- var date_type = theme.post_meta.date_type == 'updated' ? 'updated' : 'date'
time.post-meta__date #[i.fa.fa-calendar(aria-hidden="true")] #[=date(article[date_type], config.date_format)]
if (theme.post_meta.categories && article.categories.data.length > 0)
span.article-meta
span.article-meta__separator |
each item, index in article.categories.data
i.fa.fa-inbox.article-meta__icon(aria-hidden="true")
a(href=url_for(item.path)).article-meta__categories #[=item.name]
if (index < article.categories.data.length - 1)
i.fa.fa-angle-right(aria-hidden="true")
if theme.auto_excerpt && theme.auto_excerpt.enable
- const content = strip_html(article.content)
- let expert = content.substring(0, theme.auto_excerpt.length)
- content.length > theme.auto_excerpt.length ? expert += ' ...' : ''
.content!= expert
else
.content!= article.description
- })

View File

@@ -3,16 +3,18 @@ mixin articleSort(posts)
- var year
- posts.each(function (article) {
- var tempYear = date(article.date, 'YYYY')
- var no_cover = article.cover === false || !theme.cover.archives_enable ? 'no-article-cover' : ''
if tempYear !== year
- year = tempYear
.article-sort-item.year= year
.article-sort-item
.article-sort-img
a.article-sort-item__img(href=url_for(article.path))
img(src=article.cover)
.article-sort-item(class=no_cover)
if article.cover && theme.cover.archives_enable
.article-sort-img
a.article-sort-item__img(href=url_for(article.path))
img(src=url_for(article.cover) alt=article.title || 'No Title' onerror=`this.onerror=null;this.src='`+ url_for(theme.error_img.post_page) + `'`)
.article-sort-post
a.article-sort-item__post(href=url_for(article.path))
i.fa.fa-clock-o(aria-hidden="true")
time.article-sort-item__time= date(article.date)
i.far.fa-calendar-alt
time.article-sort-item__time(title=_p('post.created') + ' ' + full_date(article.date))= date(article.date, config.date_format)
.article-sort-item__title= article.title || 'No Title'
- })

View File

@@ -0,0 +1,78 @@
mixin postUI(posts)
each article , index in page.posts.data
.recent-post-item
- var link = article.link || article.path
- var title = article.title || _p('no_title')
- var leftOrRight = index%2 == 0 ? 'left_radius' : 'right_radius'
- var post_cover = article.cover
- var no_cover = article.cover === false || !theme.cover.index_enable ? 'no-cover' : ''
if post_cover && theme.cover.index_enable
.post_cover(class=leftOrRight)
a(href=url_for(link) title=title)
if theme.lazyload.enable
img.post_bg(data-src=url_for(post_cover) onerror=`this.onerror=null;this.src='`+ url_for(theme.error_img.post_page) + `'` alt=title)
else
img.post_bg(src=url_for(post_cover) onerror=`this.onerror=null;this.src='`+ url_for(theme.error_img.post_page) + `'` alt=title)
.recent-post-info(class=no_cover)
a.article-title(href=url_for(link) title=title)= title
.article-meta-wrap
if (is_home() && (article.top || article.sticky > 0))
span.article-meta
i.fas.fa-thumbtack.article-meta__icon.sticky
span.sticky= _p('sticky')
span.article-meta__separator |
if (theme.post_meta.page.date_type)
if (theme.post_meta.page.date_type === 'both')
time.post-meta__date
span.post-meta__date-created(title=_p('post.created') + ' ' + full_date(article.date))
i.far.fa-calendar-alt
=date(article.date, config.date_format)
span.article-meta__separator |
span.post-meta__date-updated(title=_p('post.updated') + ' ' + full_date(article.updated))
i.fas.fa-history
=date(article.updated, config.date_format)
else
- var data_type_updated = theme.post_meta.page.date_type === 'updated'
- var date_type = data_type_updated ? 'updated' : 'date'
- var date_icon = data_type_updated ? 'fas fa-history' :'far fa-calendar-alt'
- var date_title = data_type_updated ? _p('post.updated') : _p('post.created')
time.post-meta__date(title=date_title + ' ' + full_date(article[date_type]))
i(class=date_icon)
=date(article[date_type], config.date_format)
if (theme.post_meta.page.categories && article.categories.data.length > 0)
span.article-meta
span.article-meta__separator |
i.fas.fa-inbox.article-meta__icon
each item, index in article.categories.data
a(href=url_for(item.path)).article-meta__categories #[=item.name]
if (index < article.categories.data.length - 1)
i.fas.fa-angle-right
if (theme.post_meta.page.tags && article.tags.data.length > 0)
span.article-meta.tags
span.article-meta__separator |
i.fas.fa-tag.article-meta__icon
each item, index in article.tags.data
a(href=url_for(item.path)).article-meta__tags #[=item.name]
if (index < article.tags.data.length - 1)
span.article-meta__link #[='•']
//- Display the article introduction on homepage
if theme.index_post_content.method == 1
.content!= article.description
else if theme.index_post_content.method == 2
if article.description
.content!= article.description
else
- const content = strip_html(article.content)
- let expert = content.substring(0, theme.index_post_content.length)
- content.length > theme.index_post_content.length ? expert += ' ...' : ''
.content!= expert
else
- const content = strip_html(article.content)
- let expert = content.substring(0, theme.index_post_content.length)
- content.length > theme.index_post_content.length ? expert += ' ...' : ''
.content!= expert
if theme.ad && theme.ad.index
if (index + 1) % 3 == 0
.recent-post-item.ad_height!=theme.ad.index

View File

@@ -1,46 +0,0 @@
#mobile-sidebar
#menu_mask
#mobile-sidebar-menus
.mobile_author_icon
img.lozad.avatar_img(src=url_for(theme.avatar) onerror=`onerror=null;src='${theme.lodding_bg.flink}'`)
.mobile_post_data
if site.posts.length
.mobile_data_item.is_center
.mobile_data_link
a(href=url_for(config.archive_dir) + '/')
.headline= _p('aside.articles')
.length_num= site.posts.length
if site.tags.length
.mobile_data_item.is_center
.mobile_data_link
a(href=url_for(config.tag_dir) + '/' )
.headline= _p('aside.tags')
.length_num= site.tags.length
if site.categories.length
.mobile_data_item.is_center
.mobile_data_link
a(href=url_for(config.category_dir) + '/')
.headline= _p('aside.categories')
.length_num= site.categories.length
hr
.menus_items
include menu_item.pug
- const showToc = is_post() && page.toc != false && theme.toc.enable
-
let tocNumber
if (page.toc_number !== undefined) tocNumber = page.toc_number
else if (theme.toc.number !== undefined) tocNumber = theme.toc.number
else tocNumber = true
-
if (showToc)
#mobile-sidebar-toc
.toc_mobile_headline= _p('sidebar.catalog')
if (page.encrypt == true)
.toc-div-class(style="display:none")!=toc(page.origin,{"class":"toc_mobile_items",list_number:tocNumber})
else
!=toc(page.content,{"class":"toc_mobile_items",list_number:tocNumber})

View File

@@ -0,0 +1,3 @@
#mobile-sidebar
#menu_mask
include ../mobile-sidebar/mobile-menus.pug

View File

@@ -0,0 +1,26 @@
#mobile-sidebar-menus
.mobile_author_icon
img.avatar-img(src=url_for(theme.avatar.img) onerror=`onerror=null;src='${theme.error_img.flink}'` alt="avatar")
.mobile_post_data
if site.posts.length
.mobile_data_item.is-center
.mobile_data_link
a(href=url_for(config.archive_dir) + '/')
.headline= _p('aside.articles')
.length_num= site.posts.length
if site.tags.length
.mobile_data_item.is-center
.mobile_data_link
a(href=url_for(config.tag_dir) + '/' )
.headline= _p('aside.tags')
.length_num= site.tags.length
if site.categories.length
.mobile_data_item.is-center
.mobile_data_link
a(href=url_for(config.category_dir) + '/')
.headline= _p('aside.categories')
.length_num= site.categories.length
hr
!=fragment_cache('menus', function(){return partial('includes/header/menu_item')})

View File

@@ -1,39 +0,0 @@
if is_archive()
- var top_img = theme.archive_img ||theme.top_img || config.top_img
else if is_tag()
- var top_img = theme.tag_img ||theme.top_img || config.top_img
else if is_category()
- var top_img = theme.category_img ||theme.top_img || config.top_img
else
- var top_img = page.top_img||theme.top_img || config.top_img
- var bg_img = top_img && top_img !== true ? `background-image: url(${top_img})` : ''
if is_home()
nav#nav.full_page
.nav_bg(style=bg_img)
#site-info
#site-title
span.blogtitle= page.title || page.tag || page.category || config.title
#site-sub-title
span.subtitle
if(theme.social)
#site-social-icons
each url, icon in theme.social
a.social-icon(href=url target="_blank")
i(class=icon)
.scroll-down
i.fa.fa-angle-down.scroll-down-effects
else
nav#nav.not_index_bg
.nav_bg(style=bg_img)
#page_site-info
#site-title
if (is_archive())
span.blogtitle= _p('archives')
else
span.blogtitle= page.title || page.tag || page.category || config.title

View File

@@ -1,6 +0,0 @@
- site.tags.sort('path').each(function (tags){
- var fontSize = Math.floor(Math.random() * 15 + 15) + "px"; //15 ~ 30
- var color = "rgb(" + Math.floor(Math.random() * 201) + ", " + Math.floor(Math.random() * 201) +", " + Math.floor(Math.random() * 201) +")"; // 0,0,0 -> 200,200,200
a(href=url_for(tags.path) style='font-size:' + fontSize + ';color:' + color)=tags.name
-})

View File

@@ -1,8 +1,9 @@
-
var options = {
prev_text: '<i class="fa fa-chevron-left"></i>',
next_text: '<i class="fa fa-chevron-right"></i>',
mid_size: 1
prev_text: '<i class="fas fa-chevron-left fa-fw"></i>',
next_text: '<i class="fas fa-chevron-right fa-fw"></i>',
mid_size: 1,
escape: false
}
if(!is_post())
@@ -10,53 +11,29 @@ if(!is_post())
div.pagination
!=paginator(options)
else
nav#pagination.pagination_post
nav#pagination.pagination-post
if(page.prev)
if(page.next)
.prev-post.pull-left
- var pagination_cover = page.prev.cover
a(href=url_for(page.prev.path))
if theme.lazyload.enable
img.prev_cover.lozad(data-src=`${pagination_cover}` onerror=`onerror=null;src='${theme.lodding_bg.post_page}'` )
else
img.prev_cover(src=`${pagination_cover}` onerror=`onerror=null;src='${theme.lodding_bg.post_page}'` )
- var hasPageNext = page.next ? 'pull-left' : 'pull-full'
.prev-post(class=hasPageNext)
- var pagination_cover = page.prev.cover === false ? page.prev.randomcover : page.prev.cover
a(href=url_for(page.prev.path))
if theme.lazyload.enable
img.prev-cover(data-src=url_for(pagination_cover) onerror=`onerror=null;src='${url_for(theme.error_img.post_page)}'` )
else
img.prev-cover(src=url_for(pagination_cover) onerror=`onerror=null;src='${url_for(theme.error_img.post_page)}'` )
.pagination-info
.label=_p('pagination.prev')
.prev_info
span=page.prev.title
else
.prev-post.pull-full
- var pagination_cover = page.prev.cover
a(href=url_for(page.prev.path))
if theme.lazyload.enable
img.prev_cover.lozad(data-src=`${pagination_cover}` onerror=`onerror=null;src='${theme.lodding_bg.post_page}'`)
else
img.prev_cover(src=`${pagination_cover}` onerror=`onerror=null;src='${theme.lodding_bg.post_page}'`)
.label=_p('pagination.prev')
.prev_info
span=page.prev.title
.prev_info=page.prev.title
if(page.next)
if(page.prev)
.next-post.pull-right
- var pagination_cover = page.next.cover
a(href=url_for(page.next.path))
if theme.lazyload.enable
img.next_cover.lozad(data-src=`${pagination_cover}` onerror=`onerror=null;src='${theme.lodding_bg.post_page}'`)
else
img.next_cover(src=`${pagination_cover}` onerror=`onerror=null;src='${theme.lodding_bg.post_page}'`)
- var hasPagePrev = page.prev ? 'pull-right' : 'pull-full'
- var pagination_cover = page.next.cover == false ? page.next.randomcover : page.next.cover
.next-post(class=hasPagePrev)
a(href=url_for(page.next.path))
if theme.lazyload.enable
img.next-cover(data-src=url_for(pagination_cover) onerror=`onerror=null;src='${url_for(theme.error_img.post_page)}'`)
else
img.next-cover(src=url_for(pagination_cover) onerror=`onerror=null;src='${url_for(theme.error_img.post_page)}'`)
.pagination-info
.label=_p('pagination.next')
.next_info
span=page.next.title
else
.next-post.pull-full
- var pagination_cover = page.next.cover
a(href=url_for(page.next.path))
if theme.lazyload.enable
img.next_cover.lozad(data-src=`${pagination_cover}` onerror=`onerror=null;src='${theme.lodding_bg.post_page}'`)
else
img.next_cover(src=`${pagination_cover}` onerror=`onerror=null;src='${theme.lodding_bg.post_page}'`)
.label=_p('pagination.next')
.next_info
span=page.next.title
.next_info=page.next.title

View File

@@ -0,0 +1,13 @@
if (theme.post_copyright && theme.post_copyright.enable && page.copyright != false)
.post-copyright
.post-copyright__author
span.post-copyright-meta= _p('post.copyright.author') + ": "
span.post-copyright-info
a(href=`mailto:${config.email}`) #[=config.author]
.post-copyright__type
span.post-copyright-meta= _p('post.copyright.link') + ": "
span.post-copyright-info
a(href=url_for(page.permalink))= theme.post_copyright.decode ? decodeURI(page.permalink) : page.permalink
.post-copyright__notice
span.post-copyright-meta= _p('post.copyright.copyright_notice') + ": "
span.post-copyright-info!= _p('post.copyright.copyright_content', theme.post_copyright.license_url, theme.post_copyright.license, config.url, config.title)

View File

@@ -0,0 +1,12 @@
.post-reward
button.reward-button
i.fas.fa-qrcode
= ' ' + _p('donate')
.reward-main
ul.reward-all
each item in theme.reward.QR_code
- var clickTo = (item.itemlist||item).link ? (item.itemlist||item).link : (item.itemlist||item).img
li.reward-item
img.post-qr-code__img(src=url_for((item.itemlist||item).img) alt=(item.itemlist||item).text onclick=`window.open('${url_for(clickTo)}')`)
.post-qr-code__desc=(item.itemlist||item).text

View File

@@ -1,46 +0,0 @@
each article , index in page.posts.data
.recent-post-item.article-container
- var link = article.link || article.path
if index%2 == 0
.post_cover.is_left
a(href=url_for(link) title=article.title || _p('no_title'))
- var post_cover = article.cover
if theme.lazyload.enable
img.post_bg.lozad(data-src=`${post_cover}` onerror=`onerror=null;src='${theme.lodding_bg.post_page}'`)
else
img.post_bg(src=`${post_cover}` onerror=`onerror=null;src='${theme.lodding_bg.post_page}'`)
else
.post_cover.is_right
a(href=url_for(link) title=article.title || _p('no_title'))
- var post_cover = article.cover
if theme.lazyload.enable
img.post_bg.lozad(data-src=`${post_cover}` onerror=`onerror=null;src='${theme.lodding_bg.post_page}'`)
else
img.post_bg(src=`${post_cover}` onerror=`onerror=null;src='${theme.lodding_bg.post_page}'`)
.recent-post-info
a.article-title(href=url_for(link) title= article.title || _p('no_title'))= article.title || _p('no_title')
if (article.top)
span.article-meta
i.fa.fa-thumb-tack.article-meta__icon.sticky
span.sticky= _p('sticky')
span.article-meta__separator(style="margin-right: 0.3rem") |
if (theme.post_meta.date_type)
- var date_type = theme.post_meta.date_type == 'updated' ? 'updated' : 'date'
time.post-meta__date #[i.fa.fa-calendar(aria-hidden="true")] #[=date(article[date_type], config.date_format)]
if (theme.post_meta.categories && article.categories.data.length > 0)
span.article-meta
span.article-meta__separator |
each item, index in article.categories.data
i.fa.fa-inbox.article-meta__icon(aria-hidden="true")
a(href=url_for(item.path)).article-meta__categories #[=item.name]
if (index < article.categories.data.length - 1)
i.fa.fa-angle-right(aria-hidden="true")
if theme.auto_excerpt && theme.auto_excerpt.enable
- const content = strip_html(article.content)
- let expert = content.substring(0, theme.auto_excerpt.length)
- content.length > theme.auto_excerpt.length ? expert += ' ...' : ''
.content!= expert
else
.content!= article.description

View File

@@ -1,11 +0,0 @@
.post-reward
a.reward-button
i.fa.fa-qrcode
= ' ' + _p('donate')
.reward-main
ul.reward-all
each item in theme.reward.QR_code
li.reward-item
img.lozad.post-qr-code__img(src=(item.itemlist||item).img)
.post-qr-code__desc=(item.itemlist||item).text

View File

@@ -1,20 +1,32 @@
section#rightside.rightside
#rightside-config-hide
if theme.readmode.enable && is_post()
i#readmode.fa.fa-book(title=_p('rightside.readmode_title'))
i#font_plus.fa.fa-plus(title=_p('rightside.font_plus_title'))
i#font_minus.fa.fa-minus(title=_p('rightside.font_minus_title'))
if is_post()
if theme.readmode
button#readmode(title=_p('rightside.readmode_title'))
i.fas.fa-book-open
button#font_plus(title=_p('rightside.font_plus_title'))
i.fas.fa-plus
button#font_minus(title=_p('rightside.font_minus_title'))
i.fas.fa-minus
if theme.translate && theme.translate.enable
a#translateLink.translate_chn_to_cht(href="javascript:translatePage();" title=_p('rightside.translate_title'))= theme.translate.default
if theme.nightshift && theme.nightshift.enable
- var display_mode = theme.display_mode == 'night'? 'fa fa-sun-o' : 'fa fa-moon-o'
i#nightshift.nightshift(class=display_mode title=_p('rightside.night_mode_title'))
button#translateLink.translate_chn_to_cht(title=_p('rightside.translate_title'))= theme.translate.default
if theme.darkmode.enable && theme.darkmode.button
button#darkmode(title=_p('rightside.night_mode_title'))
i.fas.fa-adjust
#rightside-config-show
#rightside_config(title=_p("rightside.setting"))
i.fa.fa-cog(aria-hidden="true")
if is_post() && page.comments !== false
button#rightside_config(title=_p("rightside.setting"))
i.fas.fa-cog
if is_post() && page.comments !== false && isComment
a#to_comment(href="#post-comment" title=_p("rightside.scroll_to_comment"))
i.scroll_to_comment.fa.fa-comments
if is_post() && page.toc != false && theme.toc.enable
i#mobile-toc-button.fa.fa-list-ul.close(title=_p("rightside.toc") aria-hidden="true")
i.fa.fa-arrow-up#go-up(title=_p("rightside.back_to_top") aria-hidden="true")
i.scroll_to_comment.fas.fa-comments
if showToc
button#mobile-toc-button.close(title=_p("rightside.toc"))
i.fas.fa-list-ul
if theme.chat_btn && (theme.chatra.enable || theme.tidio.enable || theme.daovoice.enable || theme.gitter.enable)
button#chat_btn(title=_p("rightside.chat_btn"))
i.fas.fa-sms
button#go-up(title=_p("rightside.back_to_top"))
i.fas.fa-arrow-up

View File

@@ -8,5 +8,5 @@
#algolia-pagination
#algolia-stats
span.search-close-button
i.fa.fa-times
i.fas.fa-times
.search-mask

View File

@@ -3,7 +3,7 @@
#local-input-panel
#local-search-input
.local-search-box
input(placeholder=_p("local_search.input_placeholder")).local-search-box--input
input(placeholder=_p("local_search.input_placeholder") type="text").local-search-box--input
hr
#local-search-results
#local-hits
@@ -19,5 +19,5 @@
span=_p("local_search.powered_by")
| #[a(href="https://github.com/wzpan/hexo-generator-search" style={'color': '#49B1F5'}) hexo-generator-search]
span.search-close-button
i.fa.fa-times
i.fas.fa-times
.search-mask

View File

@@ -4,6 +4,6 @@
a(class="a2a_button_" + name)
a.a2a_dd(href="https://www.addtoany.com/share")
script(async src="https://static.addtoany.com/menu/page.js")
script(async src=url_for(theme.CDN.addtoany))

View File

@@ -1,4 +1,4 @@
if (theme.sharejs && theme.sharejs.enable)
.social-share(data-image= page.cover|| theme.avatar data-sites= theme.sharejs.sites)
link(rel="stylesheet" href="https://cdn.jsdelivr.net/npm/social-share.js@1.0.16/dist/css/share.min.css")
script(src="https://cdn.jsdelivr.net/npm/social-share.js@1.0.16/dist/js/social-share.min.js")
.social-share(data-image=url_for(page.cover|| theme.avatar.img) data-sites= theme.sharejs.sites)
link(rel="stylesheet" href=url_for(theme.CDN.sharejs_css))
script(src=url_for(theme.CDN.sharejs))

View File

@@ -1,15 +1,12 @@
-
let tocNumber = page.toc_number !== undefined ? page.toc_number : theme.toc.number
let autoOpenPostSet = page.auto_open == undefined ? theme.toc.auto_open : page.auto_open
let autoOpenSidebar = autoOpenPostSet ? 'on' : ''
-
- var sidebar_class = theme.auto_open_sidebar.enable === true ? 'auto_open' : ''
#sidebar(class=sidebar_class)
- const showToc = is_post() && page.toc != false && theme.toc.enable
-
let tocNumber
if (page.toc_number !== undefined) tocNumber = page.toc_number
else if (theme.toc.number !== undefined) tocNumber = theme.toc.number
else tocNumber = true
-
if(showToc)
if(showToc)
i.fas.fa-arrow-right#toggle-sidebar(class=autoOpenSidebar)
#sidebar
.sidebar-toc
div.sidebar-toc__title= _p('sidebar.catalog')
div.sidebar-toc__progress
@@ -21,4 +18,4 @@
div.sidebar-toc__content.toc-div-class(style="display:none")!=toc(page.origin, {list_number: tocNumber})
else
div.sidebar-toc__content!=toc(page.content, {list_number: tocNumber})

View File

@@ -1 +1 @@
script(color=theme.canvas_nest.color opacity=theme.canvas_nest.opacity zIndex=theme.canvas_nest.zIndex count=theme.canvas_nest.count src=url_for(theme.canvas_nest.script))
script#canvas_nest(color=theme.canvas_nest.color opacity=theme.canvas_nest.opacity zIndex=theme.canvas_nest.zIndex count=theme.canvas_nest.count mobile=`${theme.canvas_nest.mobile}` src=url_for(theme.CDN.canvas_nest))

View File

@@ -1 +1 @@
script(id="ribbon" src=url_for('https://cdn.jsdelivr.net/gh/jerryc127/CDN@latest/js/piao.js'))
script(id="ribbon_piao" mobile=`${theme.canvas_ribbon_piao.mobile}` src=url_for(theme.CDN.canvas_ribbon_piao))

View File

@@ -1,3 +1,3 @@
script(id="ribbon" src=url_for('/js/third-party/canvas-ribbon.js') size=theme.canvas_ribbon.size
alpha=theme.canvas_ribbon.alpha zIndex=theme.canvas_ribbon.zIndex data-click=`${theme.canvas_ribbon.click_to_change}`)
script(defer id="ribbon" src=url_for(theme.CDN.canvas_ribbon) size=theme.canvas_ribbon.size
alpha=theme.canvas_ribbon.alpha zIndex=theme.canvas_ribbon.zIndex mobile=`${theme.canvas_ribbon.mobile}` data-click=`${theme.canvas_ribbon.click_to_change}`)

View File

@@ -1,7 +0,0 @@
link(rel="stylesheet" type="text/css" href=theme.katex.cdn.css)
script(src='https://cdn.jsdelivr.net/npm/katex-copytex@latest/dist/katex-copytex.min.js')
link(rel="stylesheet" type="text/css" href='https://cdn.jsdelivr.net/npm/katex-copytex@latest/dist/katex-copytex.min.css')
script.
$(function () {
$('span.katex-display').wrap('<div class="katex-wrap"></div>')
})

12
layout/includes/third-party/pangu.pug vendored Normal file
View File

@@ -0,0 +1,12 @@
script(src=url_for(theme.CDN.pangu))
if theme.pangu.field === 'post' && is_post()
script.
document.addEventListener('DOMContentLoaded', function() {
pangu.autoSpacingPage()
})
else if theme.pangu.field === 'site'
script.
document.addEventListener('DOMContentLoaded', function() {
pangu.autoSpacingPage()
})

View File

@@ -0,0 +1,2 @@
.card-widget.card-ad
!= theme.ad.aside

View File

@@ -1,6 +1,6 @@
.card_widget.card-announcement
.card-widget.card-announcement
.card-content
.item_headline
i.fa.fa-bullhorn.card-announcement-animation(aria-hidden="true")
.item-headline
i.fas.fa-bullhorn.card-announcement-animation
span= _p('aside.card_announcement')
.announcement_content= theme.announcement.content
.announcement_content!= theme.aside.card_announcement.content

View File

@@ -1,6 +1,11 @@
.card_widget.card-archives
.card-widget.card-archives
.card-content
.item_headline
i.fa.fa-archive(aria-hidden="true")
.item-headline
i.fas.fa-archive
span= _p('aside.card_archives')
div.archives_item!= list_archives({type:'monthly',format: 'YYYY年MM月'})
- let type = theme.aside.card_archives.type || 'monthly'
- let format = theme.aside.card_archives.format || 'MMMM YYYY'
- let order = theme.aside.card_archives.order || -1
- let limit = theme.aside.card_archives.limit === 0 ? 0 : theme.aside.card_archives.limit || 8
!= aside_archives({ type:type, format: format, order: order, limit: limit })

View File

@@ -1,43 +1,34 @@
.card_widget.card-author
.card-widget.card-info
.card-content
.post_data
.data-item.is_center
img.lozad.avatar_img(src=url_for(theme.avatar) onerror=`onerror=null;src='${theme.lodding_bg.flink}'`)
p.author-info__name.is_center= config.author
p.author-info__description.is_center= config.description
.card-info-avatar.is-center
img.avatar-img(src=url_for(theme.avatar.img) onerror=`this.onerror=null;this.src='` + url_for(theme.error_img.flink) + `'` alt="avatar")
.author-info__name= config.author
.author-info__description!= theme.aside.card_author.description || config.description
.post_data.data_config
.card-info-data
if site.posts.length
.data-item.is_center
.data_link
a(href=url_for(config.archive_dir) + '/')
p.headline= _p('aside.articles')
p.length_num= site.posts.length
.card-info-data-item.is-center
a(href=url_for(config.archive_dir))
.headline= _p('aside.articles')
.length_num= site.posts.length
if site.tags.length
.data-item.is_center
.data_link
a(href=url_for(config.tag_dir) + '/' )
p.headline= _p('aside.tags')
p.length_num= site.tags.length
.card-info-data-item.is-center
a(href=url_for(config.tag_dir))
.headline= _p('aside.tags')
.length_num= site.tags.length
if site.categories.length
.data-item.is_center
.data_link
a(href=url_for(config.category_dir) + '/')
p.headline= _p('aside.categories')
p.length_num= site.categories.length
.card-info-data-item.is-center
a(href=url_for(config.category_dir))
.headline= _p('aside.categories')
.length_num= site.categories.length
.post_data.is_center
a#bookmark-it.data-item.bookmark.bookmarke--primary.bookmark--animated(href="javascript:;" title= _p('aside.card_bookmark') )
i.fa.fa-bookmark(aria-hidden="true")
.card-info-bookmark.is-center
button#bookmark-it.button--animated(title= _p('aside.card_bookmark'))
i.fas.fa-bookmark
span= _p('aside.card_bookmark') || 'Follow Me'
if(theme.social)
.post_data.data_config
#aside-social-icons
each url, icon in theme.social
a.social-icon.data-item(href=url target="_blank")
i(class=icon)
.card-info-social-icons.is-center
!=fragment_cache('social', function(){return partial('includes/header/social')})

View File

@@ -1,23 +1,9 @@
if site.categories.length
.card_widget.card-categories
.card-widget.card-categories
.card-content
.item_headline
i.fa.fa-folder-open(aria-hidden="true")
.item-headline
i.fas.fa-folder-open
span= _p('aside.card_categories')
ul.aside_category_item
mixin displayCategories(parent = undefined)
- site.categories.find({ parent }).sort("name").each(function(category) {
- var childCount = site.categories.find({ parent: category._id }).count();
li.aside_category_list
a.aside_category_list_link(href=url_for(category.path))
span.aside_category_list_name= category.name
span.aside_category_list_length= category.length
if childCount > 0
ul.aside_category_item.child
+displayCategories(category._id)
- })
+displayCategories()
!=aside_categories({ limit: theme.aside.card_categories.limit === 0 ? 0 : theme.aside.card_categories.limit || 8 , expand: theme.aside.card_categories.expand })

View File

@@ -1,23 +1,26 @@
.card_widget.card-recent-post
.card-widget.card-recent-post
.card-content
.item_headline
i.fa.fa-history(aria-hidden="true")
.item-headline
i.fas.fa-history
span= _p('aside.card_recent_post')
.aside_recent_item
- site.posts.sort('date', -1).limit(5).each(function(article){
.aside_recent_post
.aside-recent-item
- var postLimit = theme.aside.card_recent_post.limit === 0 ? site.posts.length : theme.aside.card_recent_post.limit || 5
- site.posts.sort('date', -1).limit(postLimit).each(function(article){
.aside-recent-post
- var link = article.link || article.path
- var title = article.title || _p('no_title')
- var no_cover = article.cover === false || !theme.cover.aside_enable ? 'no-aside-cover' : ''
- var post_cover = article.cover
a(href=url_for(link))
- var post_cover = article.cover
.aside_post_cover
if theme.lazyload.enable
img.aside_post_bg.lozad(data-src=`${post_cover}` onerror=`onerror=null;src='${theme.lodding_bg.post_page}'` title=article.title || _p('no_title'))
else
img.aside_post_bg(src=`${post_cover}` onerror=`onerror=null;src='${theme.lodding_bg.post_page}'` title=article.title || _p('no_title'))
div#aside_title
.aside_post_title(href=url_for(link) title=article.title || _p('no_title'))= article.title || _p('no_title')
if (theme.post_meta.date_type)
- var date_type = theme.post_meta.date_type == 'updated' ? 'updated' : 'date'
time.aside_post_meta.post-meta__date #[=date(article[date_type], config.date_format)]
if post_cover && theme.cover.aside_enable
.aside-post-cover
if theme.lazyload.enable
img.aside-post-bg(data-src=url_for(post_cover) onerror=`this.onerror=null;this.src='`+ url_for(theme.error_img.post_page) + `'` title=title alt=title)
else
img.aside-post-bg(src=url_for(post_cover) onerror=`this.onerror=null;this.src='`+ url_for(theme.error_img.post_page) + `'` title=title alt=title)
.aside-post-title(class=no_cover)
.aside-post_title(href=url_for(link) title=article.title || _p('no_title'))= article.title || _p('no_title')
time.aside-post_meta.post-meta__date(title=_p('post.created') + ' ' + full_date(article.date)) #[=date(article.date, config.date_format)]
- })

View File

@@ -1,7 +1,12 @@
if site.tags.length
.card_widget.card-tags
.card-widget.card-tags
.card-content
.item_headline
i.fa.fa-tags(aria-hidden="true")
.item-headline
i.fas.fa-tags
span= _p('aside.card_tags')
.card-tag-cloud!= tagcloud({min_font: 16, max_font: 24, amount: 200, color: true, start_color: '#999', end_color: '#000'})
- let tagLimit = theme.aside.card_tags.limit === 0 ? 0 : theme.aside.card_tags.limit || 40
if theme.aside.card_tags.color
.card-tag-cloud!=cloudTags({source: site.tags, minfontsize: 16, maxfontsize: 22, limit: tagLimit})
else
.card-tag-cloud!= tagcloud({min_font: 16, max_font: 22, amount: tagLimit , color: true, start_color: '#999', end_color: '#99a9bf'})

View File

@@ -1,24 +1,26 @@
.card_widget.card-webinfo
.card-widget.card-webinfo
.card-content
.item_headline
i.fa.fa-line-chart(aria-hidden="true")
.item-headline
i.fas.fa-chart-line
span= _p('aside.card_webinfo.headline')
.webinfo
.webinfo_item
.webinfo_article_name= _p('aside.card_webinfo.article_name') + " :"
.webinfo_article_count= site.posts.length
.webinfo-item
.webinfo-article-name= _p('aside.card_webinfo.article_name') + " :"
.webinfo-article-count= site.posts.length
if theme.runtimeshow.enable
.webinfo_item
.webinfo_runtime_name= _p('aside.card_webinfo.runtime_name') + " :"
#webinfo_runtime_count.webinfo_runtime_count
script#runtionshow(src=url_for('js/runtimeshow.js') start_date=theme.runtimeshow.start_date)
.webinfo-item
.webinfo-runtime-name= _p('aside.card_webinfo.runtime_name') + " :"
#webinfo-runtime-count.webinfo-runtime-count(publish_date=theme.runtimeshow.publish_date)
if theme.wordcount.enable && theme.wordcount.total_wordcount
.webinfo-item
.webinfo-site-wordcount-name=_p('aside.card_webinfo.site_wordcount') + " :"
.webinfo-site-wordcount=totalcount(site)
if theme.busuanzi.site_uv
.webinfo_item
.webinfo_site_uv_name= _p('aside.card_webinfo.site_uv_name') + " :"
.webinfo_site_uv_count#busuanzi_value_site_uv
.webinfo-item
.webinfo-site-uv-name= _p('aside.card_webinfo.site_uv_name') + " :"
.webinfo-site-uv-count#busuanzi_value_site_uv
if theme.busuanzi.site_pv
.webinfo_item
.webinfo_site_name= _p('aside.card_webinfo.site_pv_name') + " :"
.webinfo_site_pv_count#busuanzi_value_site_pv
.webinfo-item
.webinfo-site-name= _p('aside.card_webinfo.site_pv_name') + " :"
.webinfo-site-pv-count#busuanzi_value_site_pv

View File

@@ -0,0 +1,19 @@
if theme.aside.enable
if page.aside !== false
#aside_content.aside_content
if theme.aside.card_author.enable
!=partial('includes/widget/card_author', {}, {cache:theme.fragment_cache})
if theme.aside.card_announcement.enable
!=partial('includes/widget/card_announcement', {}, {cache:theme.fragment_cache})
if theme.aside.card_recent_post.enable
!=partial('includes/widget/card_recent_post', {}, {cache:theme.fragment_cache})
if theme.ad && theme.ad.aside
!=partial('includes/widget/card_ad', {}, {cache:theme.fragment_cache})
if theme.aside.card_categories.enable
!=partial('includes/widget/card_categories', {}, {cache:theme.fragment_cache})
if theme.aside.card_tags.enable
!=partial('includes/widget/card_tags', {}, {cache:theme.fragment_cache})
if theme.aside.card_archives.enable
!=partial('includes/widget/card_archives', {}, {cache:theme.fragment_cache})
if theme.aside.card_webinfo
!=partial('includes/widget/card_webinfo', {}, {cache:theme.fragment_cache})

View File

@@ -1,8 +1,7 @@
extends includes/layout.pug
block content
include ./includes/mixins/post-ui.pug
#recent-posts.recent-posts
include includes/recent-posts.pug
include includes/pagination.pug
#aside_content.aside_content
include includes/aside.pug
+postUI
include includes/pagination.pug

View File

@@ -7,20 +7,13 @@ block content
| -
span.tag-cloud__amount= site.tags.length
.tag-cloud-tags
include includes/page_tag.pug
!=cloudTags({source: site.tags, minfontsize: 15, maxfontsize: 30, limit: 0})
if page.comments !== false
include includes/comments/index.pug
#aside_content.aside_content
include includes/aside.pug
else if page.type === 'link'
include flink.pug
if page.comments !== false
include includes/comments/index.pug
#aside_content.aside_content
include includes/aside.pug
else if page.type === 'categories'
#post-content.category-content
.category-content
.category-lists
.category__title= _p('page.category')
| -
@@ -28,14 +21,8 @@ block content
div!= list_categories()
if page.comments !== false
include includes/comments/index.pug
#aside_content.aside_content
include includes/aside.pug
else
article#page
h1= page.title
.article-container!= page.content
include includes/pagination.pug
#page
#article-container!= page.content
if page.comments !== false
include includes/comments/index.pug
#aside_content.aside_content
include includes/aside.pug
include includes/comments/index.pug

View File

@@ -1,76 +1,25 @@
extends includes/layout.pug
block top_img
- var top_img = page.top_img || page.cover || theme.post_meta.top_img || theme.post_img || theme.top_img || config.top_img
- var bg_img = top_img !== true ? `background-image: url(${top_img})` : ''
div#top-container(style=bg_img)
#post-info
#post-title
.posttitle=page.title || _p('no_title')
#post-meta
if (theme.post_meta.date_type)
if (theme.post_meta.date_type === 'both')
time.post-meta__date
i.fa.fa-calendar(aria-hidden="true")
=' '+_p('post.created')+' '+date(page.date, config.date_format)
span.post-meta__separator |
i.fa.fa-history(aria-hidden="true")
=' '+_p('post.updated')+' '+date(page.updated, config.date_format)
else
- var date_type = theme.post_meta.date_type === 'updated' ? 'updated' : 'date'
time.post-meta__date #[i.fa.fa-calendar(aria-hidden="true")] #[=date(page[date_type], config.date_format)]
if (theme.post_meta.categories && page.categories.data.length > 0)
if (theme.post_meta.date_type)
span.post-meta__separator.mobile_hidden |
span.mobile_hidden
each item, index in page.categories.data
i.fa.fa-inbox.post-meta__icon(aria-hidden="true")
a(href=url_for(item.path)).post-meta__categories #[=item.name]
if (index < page.categories.data.length - 1)
i.fa.fa-angle-right(aria-hidden="true")
.post-meta-wordcount
if (theme.wordcount && theme.wordcount.enable)
span= _p('post.wordcount') + ': '
span.word-count= wordcount(page.content)
span.post-meta__separator |
span= _p('post.min2read', min2read(page.content, {cn: 350, en: 160}))
if (theme.wordcount && theme.wordcount.enable && theme.busuanzi.page_pv)
span.post-meta__separator |
if theme.busuanzi.page_pv
span= _p('post.page_pv') + ': '
span#busuanzi_value_page_pv
block content
article#post(class="")
#post-content.article-container!= page.content
if (theme.post_copyright && theme.post_copyright.enable && page.copyright != false)
.post-copyright
.post-copyright__author
span.post-copyright-meta= _p('post.copyright.author') + ": "
span.post-copyright-info
a(href=`mailto:${config.email}`) #[=config.author]
.post-copyright__type
span.post-copyright-meta= _p('post.copyright.link') + ": "
span.post-copyright-info
a(href=url_for(page.permalink)) #[=page.permalink]
.post-copyright__notice
span.post-copyright-meta= _p('post.copyright.copyright_notice') + ": "
span.post-copyright-info!= _p('post.copyright.copyright_content', theme.post_copyright.license_url, theme.post_copyright.license, config.url, config.title)
.tag_share
if (theme.post_meta.tags)
.post-meta__tag-list
each item, index in page.tags.data
a(href=url_for(item.path)).post-meta__tags #[=item.name]
include includes/share/index.pug
#article-container.post-content!=page.content
include includes/post/post-copyright.pug
.tag_share
if (theme.post_meta.post.tags)
.post-meta__tag-list
each item, index in page.tags.data
a(href=url_for(item.path)).post-meta__tags #[=item.name]
!=partial('includes/share/index', {}, {cache:theme.fragment_cache})
if theme.reward.enable
include includes/reward.pug
include includes/pagination.pug
if theme.related_post && theme.related_post.enable
!= related_posts(page,site.posts)
if page.comments !== false
include includes/comments/index.pug
if theme.reward.enable
!=partial('includes/post/reward', {}, {cache:theme.fragment_cache})
//- ad
if theme.ad && theme.ad.post
.post-ad!=theme.ad.post
include includes/pagination.pug
if theme.related_post && theme.related_post.enable
!= related_posts(page,site.posts)
if page.comments !== false
include includes/comments/index.pug

View File

@@ -2,17 +2,13 @@ extends includes/layout.pug
block content
if theme.tag_ui == 'index'
include ./includes/mixins/UI.pug
include ./includes/mixins/post-ui.pug
#recent-posts.recent-posts
+UI_NEW(page.posts)
+postUI
include includes/pagination.pug
#aside_content.aside_content
include includes/aside.pug
else
include ./includes/mixins/article-sort.pug
#tag
.article-sort-title= _p('page.tag') + ' - ' + page.tag
+articleSort(page.posts)
include includes/pagination.pug
#aside_content.aside_content
include includes/aside.pug
include includes/pagination.pug

View File

@@ -1,5 +1,18 @@
{
"name": "hexo-theme-melody",
"version": "1.2.0",
"description": "A Hexo Theme: Butterfly"
"name": "hexo-theme-butterfly",
"version": "2.3.5",
"private": true,
"engines": {
"node": ">=8.10.0"
},
"description": "A Simple and Card UI Design theme for Hexo",
"keywords": [
"hexo",
"theme",
"butterfly",
"Card UI Design"
],
"repository": "https://github.com/jerryc127/hexo-theme-butterfly.git",
"author": "Jerry <wong@jerryc.me>",
"license": "MIT"
}

Some files were not shown because too many files have changed in this diff Show More