Compare commits

...

220 Commits
2.2.0 ... 3.7.5

Author SHA1 Message Date
Jerry
f4e5cef399 label: 3.7.5 2021-05-05 23:05:46 +08:00
Jerry
92121d7bbe label: 3.7.5 2021-05-05 23:03:28 +08:00
Jerry Wong
aced08c860 Merge pull request #559 from cooper1x/patch-2
Update _config.yml
2021-05-05 23:00:48 +08:00
Cooper
4e1cb0b2b5 Update _config.yml
fix:sub-menu二级目录示例写法
2021-05-05 22:27:39 +08:00
Jerry
aa7173fc69 feature: 增加 tags 標簽外掛 - label
improvement: 優化 pjax 下 404 頁面
2021-04-25 22:08:07 +08:00
Jerry
597f0d2019 fix: 修復開啟anchor後,瀏覽器上一頁/下一頁 跳轉會404的bug (文章頁的url hash 在pjax下變成 undefined)
fix: 修復開啟anchor後,文章頁跳轉回主頁,主頁網址的hash添加上文章頁最後一個標題的 bug
improvement: 優化 button tags 標簽外掛
2021-04-23 18:06:51 +08:00
Jerry
c48ce9af8c fix: 修復 lazyload 報 undefined 的 bug close #532 2021-03-30 22:35:40 +08:00
Jerry
531269c60e fix: 當標題有符號'時,disqus 和 disqusjs 無法加載的 bug 2021-03-30 01:36:46 +08:00
Jerry
637da0702b fix: 修復 github-issues 最新評論 獲取的url格式 bug
fix: 當標題有符號'時,disqus 和 disqusjs 無法加載的 bug
2021-03-30 01:31:17 +08:00
Jerry
6057297f44 Breaking Changes: lazyload 優化 (增加高斯模糊過度特效,增加配置 lazyload 範圍,佔位圖應用到全站)
Breaking Changes: site_verification 優化,需自行配置
2021-03-24 21:57:30 +08:00
Jerry
4b381350a1 fix: 修復 github-issues 最新評論 獲取的url格式bug 2021-03-22 16:56:15 +08:00
Jerry
6904850044 Merge branch 'dev' into master 2021-03-19 01:10:22 +08:00
Jerry
65d89334b2 label: 3.7.0
improvement: 一句 API 改爲 https
2021-03-19 01:08:50 +08:00
Jerry
1952046a8a improvement: 主頁分頁會定位到文章區域 close #519
fix: 修復設置highlight_height_limit後,highlight_shrink點擊無效的bug close #520
2021-03-17 17:27:35 +08:00
Jerry
ae09fb89b5 feature: 增加 tags 標簽外挂 inlineImg 2021-03-15 20:44:35 +08:00
Jerry
7bc46c47ed feat: 新增設置代碼行數限制,顯示展開按鈕
improvement: prismjs 可以配置 code_word_wrap
improvement: 搜索 hover 效果與其它目錄一致
improvement: css 優化
fix: 修復prismjs 無法識別的語言 顯示 null 而不是顯示 code 的 bug
fix: 修復默認代碼大小不會隨着字體放大/放小而改變的bug
fix: 修復prismjs 在ios safari 下自動換行的bug
2021-03-14 23:25:58 +08:00
Jerry
2f3094cc0a fix: 百度統計適配pjax #516 2021-03-04 16:22:04 +08:00
Jerry
6cba95298a improvement: 修改目录配置案例 2021-02-24 20:45:13 +08:00
Jerry
a4aec5971d Merge branch 'dev' of https://github.com/jerryc127/hexo-theme-butterfly into dev 2021-02-24 20:43:39 +08:00
Jerry
5ec82ca801 Breaking Change: 更改子目錄的寫法,與父目錄一致 2021-02-24 20:42:26 +08:00
Jerry Wong
92ab3fdc93 Merge pull request #510 from GZTimeWalker/dev
Add the layout of kbd tag
2021-02-24 20:03:59 +08:00
GZTime
245bdfc46f add the layout of kbd tag 2021-02-22 21:08:44 +08:00
Jerry Wong
2dbf4561bc Merge pull request #507 from weilining/dev
Improvement valine visitor
2021-02-22 15:59:15 +08:00
weilining
c25553c192 Improvement valine visitor 2021-02-21 01:28:34 +08:00
Jerry
b77a445180 feat: add gitalk option in config file 2021-02-20 23:15:34 +08:00
Jerry
41e1931a3a feat: gitalk 增加 option 配置
improvement: pug代碼優化
2021-02-20 23:10:28 +08:00
Jerry
b176ff0fa7 feat: 添加waline,valine 和twikoo 提供的文章閲讀數配置 close #502
improvement: 當文章頁cover 和cover 的 default_img都沒有配置時,會去讀取default_top_img的參數
improvement: 在完全沒有配置的情況下,運行時控制臺報null 的問題
2021-02-19 22:14:34 +08:00
Jerry
0cea722da8 remove: 移除 artitalk (如需要,請安裝 hexo-butterfly-artitalk)
remove: 移除 HexoPlusPlus_Talk(如需要,請安裝 hexo-butterfly-hpptalk)
2021-02-13 00:24:55 +08:00
Jerry Wong
f3f0666b26 Merge pull request #495 from ChenYFan/patch-1
【修复】HPP使用最新版本
2021-02-12 14:43:04 +08:00
ChenYFan
0314a980d9 Update _config.yml 2021-02-11 08:41:46 +08:00
Jerry
9e091ba85a Merge branch 'dev' of https://github.com/jerryc127/hexo-theme-butterfly into dev 2021-02-11 01:30:34 +08:00
Jerry
b199022d9b label: 3.7.0-b1 2021-02-11 01:30:20 +08:00
Jerry Wong
3958b486cc Merge pull request #494 from glahajeekn/dev
为 Butterfly 主题新增 HexoPlusPlus_Talk
2021-02-11 01:23:13 +08:00
Jerry
b063554dd2 update
update
2021-02-11 01:19:07 +08:00
Open-super
092e6c5e25 为 Butterfly 添加 HexoPlusPlus_Talk 2021-02-09 21:20:55 +08:00
choosk
1683998280 Update package.json 2021-02-08 14:34:25 +08:00
choosk
3eb7f23997 Update hpptalk.pug 2021-02-08 14:20:58 +08:00
choosk
e85315b256 Update _config.yml 2021-02-08 14:13:57 +08:00
Open-super
7c294e0482 新增HexoPlusPlus的说说 2021-02-08 14:12:09 +08:00
Jerry
4c5abe0cc5 Merge branch 'dev' into master 2021-02-03 15:43:37 +08:00
Jerry
d8cc723134 label:3.6.2 2021-02-03 15:42:58 +08:00
Jerry
4024fc7e22 fix: mathjax 和 katex 没有加载js的bug 2021-02-02 16:37:51 +08:00
Jerry
e8cfc6e083 Merge branch 'dev' into master 2021-02-01 16:36:21 +08:00
Jerry
45b093cda7 label:3.6.1 2021-02-01 16:35:11 +08:00
Jerry
a50a63905d fix: 文章頁有toc的界面出現滾動條
fix: 在layout標簽內的元素,如是position: fixed,其相對定位會更改 #482 #483
2021-02-01 16:01:33 +08:00
Jerry
823dc03090 Merge branch 'dev' into master 2021-01-30 16:47:46 +08:00
Jerry
defb1c5f31 label: 3.6.0 2021-01-30 16:45:56 +08:00
Jerry
2cd1aa5bc9 fix: 修復夜間模式下,閲讀模式代碼塊背景顔色的顯示bug
fix: 修復在 chrome上,進入頁面時,頁面元素會出現模糊到清晰的bug close #479
fix: 修復 文章頁面上滑子菜單圖標文字無法顯示的 bug close #481
improvement: meta description 限制在150字以內 close #480
improvement: pug優化和結構調整
2021-01-29 23:38:13 +08:00
Jerry
6962353af6 feat: 增加首頁評論數顯示
fix: 修復點擊toc後,滾動完toc的highlight在點擊的上一個元素
fix: 修復打賞按鈕Hover的bug close #473
improvement: 友情鏈接界面增加title顯示(top_img設為false時)
improvement: 優化toc顯示,當向上滾動時,導航欄不會遮擋 toc close #472
improvement: 升級facebook comment sdk版本
2021-01-25 19:39:53 +08:00
Jerry
d33dc5551c remove: 刪除部分多餘的代碼 2021-01-17 19:17:34 +08:00
Jerry
1a0e279cdb Merge branch 'dev' of https://github.com/jerryc127/hexo-theme-butterfly into dev 2021-01-17 18:34:06 +08:00
Jerry
d97ab894c8 feat: 最新評論更新 [
1. <a> 標簽將會顯示 `[鏈接]`
2. <img>標簽將會顯示 `[圖片]`
3. <pre><code> 標簽將顯示 `[代碼]`
4. github-issues 獲取到的 url 改爲對應文章地址,而不是issues地址
5. 時間 time 增加 datetime屬性
6. waline 獲取到頭像會先匹配 waline數據庫是否有qq頭像屬性
7. 部分評論顯示的時間改爲更新時間
]
2021-01-17 18:33:03 +08:00
Jerry Wong
817a31078d Merge pull request #471 from weilining/dev
feat: Post edit Easily browse and edit blog source code online
2021-01-17 18:29:51 +08:00
weilining
8a56d00c2f Update default.yml
fix i18n
2021-01-13 02:44:20 +08:00
weilining
2e7b65834f fix i18n 2021-01-13 02:30:25 +08:00
weilining
71dcb128bd recover code 2021-01-13 02:21:12 +08:00
weilining
0d4dce7fa6 add i18n && padding-left: 0.3rem && annotation 2021-01-13 02:13:52 +08:00
Jerry
b2025a7dbe feat: 增加 npm push github action 2021-01-12 23:38:33 +08:00
Jerry
7b2f32f30c fix: 修復評論裡行內元素(表情/圖片)變成塊級元素(換行)的bug
feat: 增加 npm push github action
2021-01-12 23:34:06 +08:00
weilining
9cac14411d feat: Post edit Easily browse and edit blog source code online 2021-01-11 03:33:52 +08:00
Jerry
a1f86a1573 feat: aside ‘查看更多’按鈕 改為 圖標顯示在右上角
improvement: pangu 改為全站渲染
2021-01-10 22:26:18 +08:00
Jerry
0eac648267 feat: 增加 post_pagination 配置(可關閉/配置分頁展示邏輯)
feat: 可配置最新評論的緩存時間
fix: 修復pjax下不會跳轉404頁面的bug
fix: 修復手持設備橫向翻轉時,menu 沒有進行判斷,而導致樣式錯亂的bug
fix: 修復文字點擊關閉random無效的bug
fix: 修復子目錄下,打賞圖片跳轉鏈接會錯誤的bug
improvement: 文章版權右上角改為 版權icon
improvement: pangu的操作範圍增大到 body-wrap裏的內容
improvement: pug 判斷優化
improvement: 最新評論js優化
remove: 移除 fragment_cache 配置(默認開啟)
remove: 移除百度推送(百度已棄用)和百度轉碼
2021-01-10 19:26:32 +08:00
Jerry
81fc48df40 feat: 增加配置 disable_top_img,禁用所有的top_img
fix: 修復 background-image 遇到連結有括號時會無法顯示的bug
fix: Readmode 標題邊距
fix: 修復twikoo 評論數獲取會因為地域問題報錯的bug
2021-01-03 00:04:09 +08:00
Jerry Wong
c373b64cfb Merge pull request #465 from alpaca0x0/dev
bg-image: url('')
2021-01-02 23:57:18 +08:00
alpaca0x0
1d98df49d5 bg-image: url('') 2020-12-31 16:13:31 +08:00
Jerry
24cf0a11e6 Merge branch 'dev' into master 2020-12-31 16:04:14 +08:00
Jerry
c43546d6e5 feat: twikoo增加 region 配置
fix: 修復twikoo 廣州地域下,最新評論無法讀取的bugs
fix: 修復waline背景設定無效的bugs
fix: 修復twikoo 廣州地域下,page 頁進入post頁,twikoo評論報錯的bugs
2020-12-31 16:01:20 +08:00
Jerry
a7e512d764 Merge branch 'dev' into master 2020-12-30 23:34:18 +08:00
Jerry
3bfb792b3c update: hexo version 2020-12-30 23:30:45 +08:00
Jerry
3b72c87996 label: 3.5.0 2020-12-30 23:26:54 +08:00
Jerry
4a69c623fc fix: 修復開啟gitalk評論數後與toc衝突的bug close #462
fix: 修復jquery在一些介面仍然載入問題
fix: 修復medium zoom 報錯的 bug
2020-12-27 15:51:00 +08:00
Jerry
80c03b15b1 feat: 新增 Microsoft Clarity
feat: 新增 Cloudflare Analytics
feat: aside 個人資料widget可關閉button
fix: 修復medium zoom 報錯的 bugs
2020-12-25 16:52:49 +08:00
Jerry
d5d5681981 feat: twikoo 增加 option 配置
feat: aside widget 增加排序(只對page頁和sticky內的有效)
feat: aside 增加自定義 widget
improvement: readmode 優化
improvement: html結構優化
2020-12-24 01:29:09 +08:00
Jerry
25cf081250 feat: 修改newest_comments的leancloud為valine,並刪除其配置,改為讀取valine配置
feat: 增加waline最新評論模塊
feat: 增加waline評論數顯示
feat: 增加waline評論
fix: 修復jquery在一些界面仍然加載問題
2020-12-19 00:44:58 +08:00
Jerry
eb823b0a2d Merge branch 'dev' into master 2020-12-15 18:54:32 +08:00
Jerry
83299dfd2f fix: 修復tabs 標簽外挂設爲-1時,按鈕點擊沒反應的bugs 2020-12-15 18:52:58 +08:00
Jerry
8f412c90da Merge branch 'dev' into master 2020-12-13 17:02:32 +08:00
Jerry
d82f69e83b label: 3.4.0 發佈
improvement: js優化
2020-12-13 17:00:34 +08:00
Jerry
6fda7ef004 feat: 當設置aside mobile為false時,toc仍然能顯示
fix: 修復resize 時,toc 的位置問題
fix: 修復當aside mobile設為false時,文章頁 js報錯的bugs close #444
2020-12-11 15:45:32 +08:00
Jerry
ecca2621c2 feat: twikoo 最新評論更新,增加QQ頭像顯示
fix: 修復關閉圖片嬾加載,最新評論圖片無法加載的bugs
fix: 修復某些情況下toc無法滾動的bugs close #442
fix: 修復pjax下,開啟anchor後,文章頁跳轉到其他頁面會出現網址加上toc最後一節錨點ID的bugs #442
2020-12-10 21:47:47 +08:00
Jerry
9536df735c fix: 當主頁設置不顯示頂部圖時,js報錯的bug 2020-12-09 22:54:18 +08:00
Jerry
8227acb1b7 Merge branch 'dev' of https://github.com/jerryc127/hexo-theme-butterfly into dev 2020-12-09 16:01:48 +08:00
Jerry
3a1ed95c32 feat: 右下角增加字體調整按鈕
fix: 修復沒有滾動條時,右下角按鈕顯示問題  close #439
remove: 刪除ICP配置, 如需要,請使用custom_text配置 close #435
2020-12-09 15:58:58 +08:00
Jerry Wong
dc1c7c5efd Merge pull request #437 from Dreamy-TZK/dev
修改twikoo评论无法正常显示的问题
2020-12-07 21:17:09 +08:00
零度冷咖啡
97fe932ad9 🐛 修复无法获取twikoo评论标签元素ID的bug 2020-12-07 08:25:02 +08:00
零度冷咖啡
01e7929c02 Merge pull request #1 from jerryc127/dev
更新最新版
2020-12-07 08:22:17 +08:00
Jerry
02af3077e7 feat: 增加twikoo 最新評論 close #433
feat: 增加twikoo評論數顯示
feat: 增加toc簡潔模式
feat: 最新評論頭像增加lazyload
feat: fontawesome和google字體增加異步加載
fix: 修復上個版本導致的圖庫報沒有jQuery的bugs
fix: 修復上個版本導致aside 分類展開/收縮按鈕的bugs
improvement: toc點擊時改用document.getElementById獲取參數,避免有些字符導致無法跳轉 close #426
improvement: icp圖片限制大小  close #434
improvement: 最新評論優化,當沒有評論時顯示 '沒有評論'
improvement: 若瀏覽器支持,scroll將採用原生瀏覽器支持的滾動方法
improvement: 當屏幕沒有滾動條時,rightside會直接顯示
2020-12-05 22:28:54 +08:00
Jerry
88b1cc553c feat: 去除 jQuery (fancybox和圖庫 仍需要加載jQuery)
feat: 點擊文字特效增加隨機配置
feat: 可配置是否添加css前綴
fix: 修復子目錄下,配置justifiedGallery CDN(相對鏈接)後,連接會無法訪問的bugs
fix: 修復 pangu 配置post 後,仍在全站生效的bugs
improvement: 夜間模式下,廣告降低亮度
improvement: 手機端toc邊距微調
improvement: html格式優化
improvement: 搜索優化
improvement: 刪除不必要的語言文件
2020-11-21 00:27:01 +08:00
Jerry
6a1330de84 Merge branch 'dev' into master 2020-11-03 22:21:43 +08:00
Jerry
7f03c3f716 update: 更改文檔地址 2020-11-03 22:20:16 +08:00
Jerry
eb5a356a4e Merge branch 'dev' into master 2020-10-28 14:37:18 +08:00
Jerry
b230c8f2bd label: 3.3.0 發佈 2020-10-28 14:36:03 +08:00
Jerry
d2f5af32ae feat: 增加Twikoo評論 #402
improvement: 滾動到評論按鈕只要用評論的頁面就出現
improvement: aside狀態存localstore
fix: 修復disqusjs沒有設置api時,沒有反代的bugs
fix: 修復aside在font-matter aside為false時,收縮按鈕依舊出現和點擊按鈕會出現空白的bugs #398
2020-10-27 22:14:47 +08:00
Jerry
6b35388f33 feat: aside 可配置隐藏/增加按钮可展开或收缩aside 2020-10-21 21:54:14 +08:00
Jerry
c54f23bc14 fix: 修復上個版本導致的代碼塊部分css沒有生成的bugs
fix: 修復valine背景圖片再次出現時,由左到右移動的bugs
improvement: 調大sidebar的寬度
improvement: html結構調整,mobile-sidebar改為sidebar/search調整
remove: 刪除多餘的css和pug
2020-10-20 21:05:58 +08:00
Jerry Wong
71b15d86c1 Merge pull request #393 from wayne0926/dev
SEO优化格式修复
2020-10-17 17:44:06 +08:00
时过境迁Wayne
918a1da4c5 格式 2020-10-17 17:41:25 +08:00
时过境迁Wayne
b541a192d3 SEO优化格式修复 2020-10-17 13:01:13 +08:00
时过境迁Wayne
f7ba0a4b36 SEO优化 2020-10-16 20:50:46 +08:00
Jerry
666637ce99 fix: 退回之前的inject實現,解決上一個版本導致無法插入inject的bugs close #390 2020-10-15 14:39:51 +08:00
Jerry
8014ddb65e feat: 不再支持 butterfly.yml 寫法
improvement: 文章頁標題改為h1(seo)
improvement: 改用hexo 內置的 injector 插入 inject 的代碼
improvement: canonical 改為hexo提供的函數生成
improvement: 優化手機toc 的特效和按鈕出現的時機
remove: 刪除搜索不必要的配置
remove: 移除豆瓣配置,如需配置,請使用 hexo-butterfly-douban
fix: 修復上一個版本導致的搜索按鈕在pjax下無法點擊的bugs close #387
fix: 修復上一個版本更新的toc z-index 過低的bugs
2020-10-15 00:14:38 +08:00
Jerry
83b7232841 feat: 只支持 hexo 5.0.0 及以上版本
feat: toc改為aside顯示,去掉sidebar
feat: 手機toc ui 修改
feat: 去掉 toc auto_open 配置
feat: 文章標題改為居中
improvement: 完善note標籤在readmode上的顯示
improvement: 精簡css 和 js
improvement: pjax 優化
fix: 修復當文章頁top_img設為false時,閲讀模式下文章內容不顯示的bugs
2020-10-11 18:25:58 +08:00
Jerry
b078ebef14 fix: 修復網站壓縮後,mermaid 會無法生成顯示的Bugs
feat: Valine 增加 option 設置
2020-10-07 15:36:52 +08:00
Jerry
f4b07340f7 label: 3.2.0 2020-09-28 22:02:11 +08:00
Jerry
335fc25811 label: 3.2.0 2020-09-28 21:59:23 +08:00
Jerry
de11040293 label: 3.2.0
fix: 修復當hexo的_config沒有設置description時,會導致pjax在頁面與文章間切換會無效 close #381
improvement: 當隱藏部分沒配置時,左下角設置按鈕會消失 #353
improvement: 網站背景可配置 (顏色(HEX值/RGB值/顔色單詞/漸變色)/漸變色/圖片鏈接)
improvement: 夜間模式下,背景顔色/top-img/footer-bg 設置為顔色時,不再強制顯示黑色,而是改為遮罩降低亮度
2020-09-28 21:55:47 +08:00
Jerry Wong
baac097670 Merge pull request #353 from constown/dev
右下角按钮优化:
2020-09-25 00:22:06 +08:00
Jerry
d5670e25e4 fix: 修復上次更新導致部分用户本地搜索文章鏈接跳轉錯誤的bugs close #375 2020-09-21 13:59:32 +08:00
Jerry
a2551d2d29 fix: 修復本地搜索文章鏈接無法跳轉bugs
feat: 當點擊評論框時,valine背景圖片隱藏
feat: 網頁進入動畫效果可關閉
style: 部分css和js 調整
2020-09-19 23:46:53 +08:00
Jerry
c7318a3793 feat: 添加 artitalk 説説插件
style: 主題文件分類調正
2020-09-16 23:09:34 +08:00
Jerry
938e7a04c7 improvement: tags 設定彩色顯示後,字型大小將根據tag的文章數量而變化 close #365
improvement: 調整tags頁和categories頁在寬度小於768時的字體大小
2020-09-16 00:12:47 +08:00
Jerry
97bb8313d0 refactor: 最新評論 leancloud呼叫由js sdk 改為 rest api 呼叫。應用可以不與valine同一個
feat: 最新評論增加錯誤輸出
style: 刪除不必要的語言檔案
2020-09-13 16:58:56 +08:00
Jerry
554d05d576 feat: note 標籤優化(可自定義icon圖標/可覆蓋配置中的style)
feat: 增加部分特效 Mobile設置(activate_power_mode/fireworks/click_heart/ClickShowText)
feat: aside 分類 收縮/展開 增加slide效果
improvement: 更改canvas_ribbon_piao 為 canvas_fluttering_ribbon
improvement: darkmode 字體顔色加深
improvement: 優化nav的進入,應該修復一些用户在本地測試中無法顯示nav的bugs
improvement: 部分css和html優化
fix: 修復鼠標點擊文字特效,文字過長導致頁面有滾動條的bugs
remove: 移除anime js, 集成在fireworks的js裏
remove: 刪除特效js,改為cdn引入
2020-09-12 02:44:57 +08:00
Jerry Wong
17d8062968 Merge pull request #360 from jerryc127/revert-358-customized-chang
Revert "Add a flag for allowing to disable aside.card_author.button"
2020-09-12 02:41:46 +08:00
Jerry Wong
d4b69051aa Revert "Add a flag for allowing to disable aside.card_author.button" 2020-09-12 02:41:12 +08:00
Jerry Wong
59f6ce63e3 Merge pull request #358 from gcmiao/customized-chang
Add a flag for allowing to disable aside.card_author.button
2020-09-11 19:02:33 +08:00
gcmiao
cd78f639dd Add a flag for allowing to disable aside.card_author.button 2020-09-10 21:09:23 +02:00
Jerry
92b39ff515 test 2020-09-10 21:55:05 +08:00
Jerry
4f7fde92b2 change main in package.json 2020-09-10 21:35:02 +08:00
Jerry
8e4c20f6d4 label: 更新 3.1.1
chore: update hexo-renderer-stylus to 2.0.1
2020-09-06 22:13:37 +08:00
Jerry
e984efa35c fix: 修復開啟 prismjs 後, 在低版本的 safari 會出現 js 報錯的 Bugs 2020-09-06 22:11:59 +08:00
Jerry
cb21f7f46d fix: 修復開啟 prismjs 後, 在低版本的 safari 會出現 js 報錯的 Bugs 2020-09-06 22:09:06 +08:00
ConstOwn
b99bdc2c96 右下角按钮优化:
1.当用户不开启 “阅读模式、黑暗模式、简繁切换” 时,不显示 “齿轮” 图标。
2.当用户仅开启 “阅读模式” 时,首页不显示 “齿轮” 图标,文章中显示 “齿轮图标”
3.其他情况正常显示。
2020-09-06 11:56:45 +08:00
Jerry
8038af5aca fix: 補全新增的配置
improvement: Open_Graph 改為 hexo 內置 生成
feat: 增加 tag_per_img 配置(可為各個tag 單獨配置top_img)
feat: 增加 category_per_img 配置(可為各個category單獨配置top_img)
2020-09-05 17:20:31 +08:00
Jerry
25b0c733dc feat: 可設置首頁文章不顯示內容/description
feat: 主頁文章時間和文章頁文章時間可以配置顯示日期還是相對時間
feat: top_img 可配置 [留空(默認色)/顏色/漸變色/圖片鏈接/ false(不顯示top_img)]
feat: footer可配置背景 [留空/false(默認色)/顏色/漸變色/圖片鏈接/true(跟top_img一樣)]
improvement: preloader 在 pjax 下 每個頁面都會加載
improvement: 修改判斷,避免用户設置2個lightbox 而導致報錯(只能設置一個)
improvement: 精確時間顯示 (剛剛/幾分鐘前/幾小時前/幾天前/幾個月前)
improvement: 刪除不必要的語言文件和css
chore: update hexo-renderer-stylus to 2.0.1
2020-09-05 17:01:21 +08:00
Jerry
863cf1e780 Merge branch 'dev' into master 2020-09-04 00:42:50 +08:00
Jerry
8603db0545 fix: 修復關閉last push date 後, 報 'hour' 找不到的bugs 2020-09-02 00:04:32 +08:00
Jerry
85b8a83371 Merge branch 'dev' into master 2020-08-31 13:41:47 +08:00
Jerry
d381d63c08 label: 3.1.0 發佈
fix: 簡體中文的 ‘小時’ 修改為簡體
2020-08-31 13:40:02 +08:00
Jerry
51c4726c54 improvements: 代碼名全大寫
improvements: 補全card-categories和card-archives的 '查看更多‘鏈接 close #337
fix: 修復comments沒設置時,報Unexpected token ')'的bugs close #344
improvements: 優化js和html
fix: 修復toc 滾動百分比不準的Bugs
2020-08-31 01:31:59 +08:00
Jerry
593eb4734e label: 版本號更改 2020-08-29 01:16:46 +08:00
Jerry
fe97d2e63f feat: 增加 aside 最新評論部件
style: 部分css調整和html優化
improvements: 刪除pwa中的theme-color配置,默認生成meta theme-color  close #340
improvements: 優化最後更新時間顯示(1小時內顯示 剛剛,1小時到24小時 顯示 xx小時前,1天到365天 顯示 xx天前,365天后直接顯示日期)
2020-08-29 01:11:11 +08:00
Jerry
ee6f62f4bc fix: 修復在modern樣式下,note 標簽外掛沒有使用tags名時,沒有背景色和夜間模式文字顯示不清楚的bugs
fix: 修復主頁文章cover在深色模式下,邊角有小白邊的bugs close #278
fix: 修復note標簽外掛下,代碼塊顯示背景色的bugs close #339
2020-08-27 21:47:40 +08:00
Jerry
40fd319cb2 fix: 修復當關閉代碼渲染后,標簽外挂裏的代碼塊會被壓縮到一行的bugs
improvements: 優化網站最後更新時間顯示,’0天前‘改爲’今天‘
2020-08-24 22:56:58 +08:00
Jerry
4aacafdae1 feat: 適配hexo 5.1.0 prismjs caption
feat: code-font-size 也會影響行內代碼塊字體大小 #325
fix: 修復aside recent post的 time 在safari沒有顯示的bug
fix: 修復 prismjs 在 tags-toggle 外掛標簽裏,代碼塊顯示一行的bugs
style: 刪除不必要的css
2020-08-22 23:17:28 +08:00
Jerry Wong
ea7eb904fd Merge pull request #331 from HackerYunen/patch-1
Update card_author.pug
2020-08-22 21:20:09 +08:00
HackerYunen
fb5d6f1fd7 Update card_author.pug
同mobile-menus.pug一般,补齐URL。
2020-08-22 20:29:31 +08:00
Jerry
543cd94c9f feat: 適配 hexo 5.0.0 的 prismjs, 代碼主題和各項功能
refactor: 移除 代碼default主題
fix: 修復夜間模式下代碼塊有背景的bugs(沒開啟渲染的情況下)
feat: 增加 code font-size配置 close #322
refactor: 更改配置中 code-font 為 code-font-family
feat: Pjax下,刷新頁面時,會滾動到上次瀏覽的位置
fix: 修復mathjax溢出屏幕的Bugs close #321
2020-08-19 00:21:18 +08:00
Jerry
973306898a 1. style: 版本號更新 2020-08-18 00:52:55 +08:00
Jerry
c512a5fda5 1. chore: 只支持hexo 4.2.0以上版本
2. feat: 可隱藏Mobile sidebar 子菜單
3. refactor: archives和card-post 改為flex佈局
4. feat: 當寬度小於1024時,點擊toc滾動,增加滾動效果
5. feat: 點擊滾動,如果滾動是向上時,將會偏移60px, 避免導航欄遮擋 close #317
6. feat: 可配置font-size
7. refactor: 去除字體放大、縮小按鈕
8. refactor: 部分css由'px'改為'em',適應font-size值改變而改變
9.  feat: pjax增加exclude配置
10. fix: 修復canvas_nest 配置沒有生效的Bugs
11. feat: 新增 cnzz_analytics
12. feat: 騰訊分析改為騰訊移動分析,並適配pjax
13. perf: 改cookies為localstore存儲
14. feat: 設置中的theme_color可單獨配置幾個,而不需要全部開啟 close #314
15. feat: butterfly.yml 採用deepMerge, 與_config文件進行合併而不是替換
16. fix: 修復rightsize-bottom配置無效的bug
17. refactor: aside增加position sticky
18. refactor: 調整webinfo 寬度小時的顯示
19. feat: 更改addtoany item的寫法
20. refactor: aside 內容邊距調整
21. feat: 增加最後更新時間顯示
2020-08-18 00:33:05 +08:00
Jerry
d73960f2a2 Merge branch 'dev' into master 2020-08-11 21:20:01 +08:00
Jerry
195ae9f4c5 Merge branch 'dev' of https://github.com/jerryc127/hexo-theme-butterfly into dev 2020-08-11 21:16:54 +08:00
Jerry
44e16d154a 🔖 3.0.1更新
🐛 修復導航側邊欄沒有進入特效的Bugs
2020-08-11 21:15:34 +08:00
Jerry Wong
6306887963 Merge pull request #306 from SerokSSR/dev
修復 comments.use 不能爲空的 bug
2020-08-08 13:15:30 +08:00
Akira Lin
1ac43323fc 修復評論不能爲空的 bug 2020-08-08 12:06:13 +08:00
Jerry
82979322c6 🐛 修復Hexo 5.0.0 以下版本, toc遇到中文不會滾動的bugs close #297, close #299 2020-08-07 18:11:26 +08:00
Jerry
988cbcc331 🐛 修復pjax下,同時開啓Open_Graph_meta和Livere,Livere評論後臺顯示的來源頁面與實際不同 的bugs #294 2020-08-06 21:45:16 +08:00
Jerry
fcd430902d Merge branch 'dev' into master 2020-08-05 22:04:47 +08:00
Jerry
065093e217 🔖 3.0.0 發佈 2020-08-05 22:02:23 +08:00
Jerry
8f27859cea 🐛 修復livere在pjax下的bugs 2020-08-03 18:02:44 +08:00
Jerry
ee45f6517f Merge branch 'dev' into master 2020-08-02 23:31:32 +08:00
Jerry
75f5e991d0 🐛 修復文章頁沒有lazyload的bugs 2020-08-02 23:29:44 +08:00
Jerry
67201ac58d 📝 更改注釋文字 2020-08-01 22:47:34 +08:00
Jerry
315d3b50df Merge branch 'dev' into master 2020-08-01 14:44:06 +08:00
Jerry
a7c3a8906a 🔖 升級到3.0.0-rc2 close #287,close #277,close #270,close #267,close #252,close #234,close #216 2020-08-01 14:39:25 +08:00
Jerry
507453671a 🐛 適配hexo 5.0.0 修復toc點擊不會跳轉的bugs
🐛 適配hexo 5.0.0 修復toc點擊不會跳轉的bugs
🍻 文件整理
🍻 UI微調
2020-08-01 01:50:01 +08:00
Jerry
ddb728d8f4 Merge branch 'pjax' into dev 2020-07-27 16:51:12 +08:00
Jerry
f4f725bb93 🎨 代碼優化 2020-07-27 16:48:41 +08:00
Jerry
d2943bbbb1 評論增加lazyload
 頭像/打賞圖片 增加lazyload
 調整移動端 ol ul 的邊距 #267
🐛 修復Valine 的requiredFields設置為空 無效的bugs
2020-07-26 15:33:47 +08:00
Jerry Wong
d5cf43a6b4 Merge pull request #279 from SerokSSR/pjax
整理 footer 配置項,同時修改部分用语
2020-07-22 16:56:41 +08:00
Akira Lin
6d0931eb9c Update footer.pug 2020-07-22 15:37:29 +08:00
Jerry
1a2568d645 添加第三方chat服務 crisp 2020-07-22 13:56:54 +08:00
shiroku
ca9b16ee10 修改部分用语 2020-07-22 11:08:06 +08:00
Jerry
5ee7976c4a 提升highlight-tool的加載速度
 可設置取消谷歌自動廣告代碼加載
🐛 修復pjax下側邊欄分類打開/收縮按鈕 直接跳轉的bugs
🐛 修復代碼塊向右偏移的bugs
🐛 修復子目錄下,404頁面的回到首頁鏈接錯誤的bugs
2020-07-20 22:21:05 +08:00
Jerry
546840e0a4 🐛 修復子目錄下,404頁面的回到首頁鏈接錯誤的bugs 2020-07-18 23:33:47 +08:00
Jerry
727a2d97d9 🐛 修復子目錄下,404頁面的‘回到首頁’鏈接錯誤的bugs 2020-07-18 23:30:37 +08:00
Jerry
4f64768011 disqus/disqusjs/facebook comments 可隨夜間模式按鈕切換而轉換主題
🐛 修復pjax下valine評論顯示不正常的bugs
🐛 修復facebook comments 在手機下寬度不是100%的bugs
2020-07-18 22:30:15 +08:00
Jerry
f7d57ac883 fix lazyload 2020-07-17 00:51:18 +08:00
Jerry
898cc31c58 pjax 2020-07-16 19:30:54 +08:00
Jerry Wong
5b6e008b84 Update issue templates 2020-07-02 00:12:14 +08:00
Jerry
4d34208391 💥 支持雙評論系統配置/評論配置整理
 增加mac light 代碼框
 增加文章過期提醒配置
 文章copyright 可單獨配置
 card-category 中category名稱和數字限制一行顯示
 簡繁轉換優化,placeholder文字也會被轉換
🐛 修復配置PWA參數時,如果網站是子目錄時,會出現加載不到文件的bugs
調整當card-category有收縮按鈕時的顯示佈局
2020-06-25 23:13:55 +08:00
Jerry Wong
67b49c01ba Merge pull request #250 from sviptzk/dev
F 修复某种情况下导致highlight没有第二个class名(plain)而导致的代码语言变为undefined
2020-06-24 13:46:27 +08:00
Jerry Wong
7c3945fe1e Merge branch 'dev' into dev 2020-06-24 13:45:07 +08:00
Antmoe
dbd6ba240b F 修复某种情况下导致highlight没有第二个class名(plain)而导致的代码语言变为undefined 2020-06-24 09:20:08 +08:00
Jerry
54b67987c1 Merge branch 'dev' 2020-06-24 00:52:33 +08:00
Jerry
2847e9a237 🐛 修復右下角按鈕被button標籤外掛遮擋的bugs
🐛 修復開啟photofigcaption後,圖庫會出現界面錯亂的Bugs
2020-06-24 00:50:15 +08:00
Jerry
26df41c772 Merge branch 'dev' 2020-06-20 22:10:55 +08:00
Jerry
1d293c0fc7 aplayer的間距調整
🐛 修復tabs外挂標簽與aplayer插件衝突而異常的bugs
2020-06-20 22:05:39 +08:00
Jerry
4e7051ad77 Merge branch 'dev' 2020-06-20 14:01:45 +08:00
Jerry
baa6f72d35 🐛 修復部分設備遇到mobile-sidebar無法滾動的bugs
🐛 修復BUTTON標籤嵌套使用在其他標籤時,生成多了br標籤而導致樣式不同的bugs
🐛 修復文章front-matter的highlight_shrink和toc為空時,會出現js報錯的bugs
2020-06-20 13:58:59 +08:00
Jerry
955b4bae6a Merge branch 'dev' 2020-06-18 20:13:59 +08:00
Jerry
4d9fca6ed6 🐛 修復文章頁面部分元素內部文字溢出的錯誤 2020-06-18 20:08:58 +08:00
Jerry
95ddf28f3b Merge branch 'dev' 2020-06-16 21:19:47 +08:00
Jerry
71c8a37af2 🔖 修改版本號 2020-06-16 21:18:16 +08:00
Jerry
e901f9ad35 Merge branch 'dev' 2020-06-16 18:43:13 +08:00
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
462422e279 Merge branch 'dev' 2020-05-21 16:29:44 +08:00
Jerry
0ad2c01fc9 🐛 fix: 修復因instantpage新版本bugs而導致fancybox和簡繁轉換無法正常工作的bugs 2020-05-21 16:27:44 +08:00
Jerry
bad24849bd Merge branch 'dev' 2020-05-01 19:00:12 +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
eb242f0809 Merge branch 'dev' 2020-04-30 00:36:07 +08:00
Jerry
e8a47d040a 🐛 修復上次更新導致頁面跳動的bug 2020-04-30 00:32:43 +08:00
Jerry
b1795e3def Merge branch 'dev' 2020-04-28 15:35:58 +08:00
Jerry
250181c569 🐛 修復當博客root不是'/'時,引用本地圖片會顯示不出的bug close #211 2020-04-28 15:31:14 +08:00
Jerry
54b212ead3 Merge branch 'dev' 2020-04-27 14:45:26 +08:00
Jerry
91d285391d 🐛 修復tags頁標籤只顯示8個的bug 2020-04-27 14:44:25 +08:00
Jerry
4bbc035f54 Merge branch 'dev' 2020-04-27 02:40:24 +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
40ba3bb92f 🏷️ 更新2.3.0 2020-04-26 23:42:52 +08:00
Jerry
e2cb0242bb 🏷️ 2.3.0發佈 2020-04-26 23:37:37 +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
559afab632 🔖 2.2.5發佈
更新内容請看 https://github.com/jerryc127/hexo-theme-butterfly/releases
2020-03-28 03:20:36 +08:00
Jerry
16a3ac510d 🔖 2.2.5發佈
更新内容請看 https://github.com/jerryc127/hexo-theme-butterfly/releases
2020-03-28 03:13:30 +08:00
Jerry
c134d4fc86 🐛 fix: 修復highlight_shrink設為false時,導致script報錯的bug
🐛 fix: 修復highlight_shrink設為true時,按鈕點擊無反應,沒有打開代碼框的bug
🐛 fix: 修復自動切換darkmode時,切換按鈕icon沒有變更的bug
2020-03-24 19:03:51 +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
239 changed files with 9957 additions and 7098 deletions

View File

@@ -1,45 +0,0 @@
<!--
IMPORTANT: Please follow the template to create a new issue.
重要:請依照該模板來提交。
-->
## 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來支援它吧
-->

61
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View File

@@ -0,0 +1,61 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: ''
assignees: ''
---
<!-- Do not delete the template (不要刪除模板) -->
<!--
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 visiting 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 Bug report <!-- 我想要建立一個 Bug report -->
<!-- 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 [Butterfly Documentation](https://butterfly.js.org/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 <!-- (實際行為) -->
## Steps to reproduce the behavior <!-- (重現步驟) -->
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
<!-- If applicable, add screenshots to help explain your problem -->
<!-- 請儘量提供截圖來定位問題 -->
## Screenshots <!-- (截圖) -->
<!-- Provide your website to find the issues -->
## Website
## Describe the bug

9
.github/ISSUE_TEMPLATE/custom.md vendored Normal file
View File

@@ -0,0 +1,9 @@
---
name: Custom issue template
about: Describe this issue template's purpose here.
title: ''
labels: ''
assignees: ''
---

View File

@@ -0,0 +1,20 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: ''
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.

1
.github/stale.yml vendored
View File

@@ -8,7 +8,6 @@ exemptLabels:
- security
- bug
- enhancement
- Solved
- documentation
# Label to use when marking an issue as stale
staleLabel: wontfix

19
.github/workflows/publish.yml vendored Normal file
View File

@@ -0,0 +1,19 @@
name: npm publish
on:
release:
types: [created]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
# Setup .npmrc file to publish to npm
- uses: actions/setup-node@v1
with:
node-version: '12.x'
registry-url: 'https://registry.npmjs.org'
- run: npm install
- run: npm publish
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

204
LICENSE
View File

@@ -1,8 +1,202 @@
MIT License
Copyright (c) <year> <copyright holders>
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

View File

@@ -1,48 +1,107 @@
<div align="right">
Language:
🇺🇸
<a title="Chinese" href="/README_CN.md">🇨🇳</a>
</div>
# hexo-theme-butterfly
<a href="https://github.com/jerryc127/hexo-theme-butterfly/releases"><img alt="Version" src="https://img.shields.io/badge/release-2.2.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>
![master version](https://img.shields.io/github/package-json/v/jerryc127/hexo-theme-butterfly/master?color=%231ab1ad&label=master)
![master version](https://img.shields.io/github/package-json/v/jerryc127/hexo-theme-butterfly/dev?label=dev)
![https://img.shields.io/npm/v/hexo-theme-butterfly?color=%09%23bf00ff](https://img.shields.io/npm/v/hexo-theme-butterfly?color=%09%23bf00ff)
![hexo version](https://img.shields.io/badge/hexo-5.0+-0e83c)
![license](https://img.shields.io/github/license/jerryc127/hexo-theme-butterfly?color=FF5531)
Demo: https://demo.jerryc.me/
![](https://cdn.jsdelivr.net/gh/jerryc127/CDN@m2/img/theme-butterfly-readme.png)
JerryC: https://jerryc.me/
Demo: 👍 [Butterfly](https://butterfly.js.org/) || 🤞 [MYW](https://immyw.com/)
Docs: 📖 [Butterfly Docs](https://butterfly.js.org/posts/21cfbf15/)
Based on [hexo-theme-melody](https://github.com/Molunerfinn/hexo-theme-melody) theme.
## Installation
Stable branch:
### GIT
> If you are in Mainland China, you can download in [Gitee](https://gitee.com/iamjerryw/hexo-theme-butterfly)
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 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
```
### NPM
> It supports Hexo 5.0.0 or later
In Hexo site root directory
```powershell
npm i hexo-theme-butterfly
```
## Configuration
Set theme in the hexo work folder's root config file `_config.yml`:
> theme: Butterfly
> theme: butterfly
If you don't have pug & stylus renderer, try this:
> npm install hexo-renderer-pug hexo-renderer-stylus
## Documentation
## Features
Find in [hexo-theme-butterfly docs](https://docs.jerryc.me) and [JerryC](https://jerryc.me/posts/21cfbf15). it supports `zh-TW`
- [x] Card UI Design
- [X] Support sub-menu
- [x] Two Column designs
- [x] Responsive Web Design
- [x] Dark Mode
- [x] Pjax
- [x] Read Mode
- [x] Conversion between Traditional and Simplified Chinese
- [X] TOC catalog is available for both computers and mobile phones
- [X] Color themes (darker/pale night/light/ocean/mac/mac light), support custom colors
- [X] Code Blocks (Display code language/close or expand Code Blocks/Copy Button/word wrap)
- [X] Disable copy/Add a Copyright Notice to the Copied Text
- [X] Search (Algolia SearchZ/Local Search)
- [x] Mathjax and Katex
- [x] Built-in 404 page
- [x] WordCount
- [x] Related articles
- [x] Displays outdated notice for a post
- [x] Share (AddThis/Sharejs/Addtoany)
- [X] Comment (Disqus/Disqusjs/Livere/Gitalk/Valine/Waline/Utterances/Facebook Comments/Twikoo)
- [x] Multiple Comment System Support
- [x] Online Chats (Chatra/Tidio/Daovoice/Gitter/Crisp)
- [x] Web analytics
- [x] Google AdSense
- [x] Webmaster Verification
- [x] Change website colour scheme
- [x] Typewriter Effect: activate_power_mode
- [x] Background effects (Canvas ribbon/canvas_ribbon_piao/canvas_nest)
- [x] Mouse click effects (Fireworks/Heart/Text)
- [x] Preloader/Loading Animation
- [x] Busuanzi visitor counter
- [x] Medium Zoom/Fancybox
- [x] Mermaid
- [x] Justified Gallery
- [x] Lazyload images
- [x] Instantpage/Pangu/Snackbar notification toast/PWA......
## Screenshots
![image](https://user-images.githubusercontent.com/16351105/58887365-1272f780-8718-11e9-9329-3292c6ba20d4.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)
![](https://cdn.jsdelivr.net/gh/jerryc127/CDN@m2/img/butterfly-readme-screenshots-1.jpg)
![](https://cdn.jsdelivr.net/gh/jerryc127/CDN@m2/img/butterfly-readme-screenshots-2.jpg)
![](https://cdn.jsdelivr.net/gh/jerryc127/CDN@m2/img/butterfly-readme-screenshots-3.jpg)
![](https://cdn.jsdelivr.net/gh/jerryc127/CDN@m2/img/butterfly-readme-screenshots-4.jpg)
![](https://cdn.jsdelivr.net/gh/jerryc127/CDN/img/theme-butterfly-readme-homepage-1.png)
![](https://cdn.jsdelivr.net/gh/jerryc127/CDN/img/theme-butterfly-readme-homepage-2.png)

View File

@@ -1,46 +1,106 @@
<div align="right">
語言:
中文
<a title="English" href="/README.md">英文</a>
</div>
# hexo-theme-butterfly
<a href="https://github.com/jerryc127/hexo-theme-butterfly/releases"><img alt="Version" src="https://img.shields.io/badge/release-2.2.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>
![master version](https://img.shields.io/github/package-json/v/jerryc127/hexo-theme-butterfly/master?color=%231ab1ad&label=master)
![master version](https://img.shields.io/github/package-json/v/jerryc127/hexo-theme-butterfly/dev?label=dev)
![https://img.shields.io/npm/v/hexo-theme-butterfly?color=%09%23bf00ff](https://img.shields.io/npm/v/hexo-theme-butterfly?color=%09%23bf00ff)
![hexo version](https://img.shields.io/badge/hexo-5.0+-0e83c)
![license](https://img.shields.io/github/license/jerryc127/hexo-theme-butterfly?color=FF5531)
Demo: https://demo.jerryc.me/
![](https://cdn.jsdelivr.net/gh/jerryc127/CDN@m2/img/theme-butterfly-readme.png)
JerryC: https://jerryc.me/
預覽: 👍 [Butterfly](https://butterfly.js.org/) || 🤞 [MYW](https://immyw.com/)
文檔: 📖 [Butterfly Docs](https://butterfly.js.org/posts/21cfbf15/)
一款基於[hexo-theme-melody](https://github.com/Molunerfinn/hexo-theme-melody)修改的主題
## 安裝
在你的博客根目錄裡
### Git 安裝
```
git clone -b master https://github.com/jerryc127/hexo-theme-butterfly.git themes/Butterfly
> 本倉庫同時上傳到 [Gitee](https://gitee.com/iamjerryw/hexo-theme-butterfly),如果你訪問 Github 緩慢,可從 Gitee 中下載。
在博客根目錄裡安裝穩定版【推薦】
```powershell
git clone -b master https://github.com/jerryc127/hexo-theme-butterfly.git themes/butterfly
```
如果想要安裝比較新的dev分支可以
```powershell
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
### npm 安裝
> 此方法只支持Hexo 5.0.0以上版本
在博客根目錄裡
```powershell
npm i hexo-theme-butterfly
```
## 應用主題
修改hexo配置文件`_config.yml`,把主題改為`Butterfly`
```
theme: Butterfly
theme: butterfly
```
>如果你沒有pug以及stylus的渲染器請下載安裝 npm install hexo-renderer-pug hexo-renderer-stylus --save or yarn add hexo-renderer-pug hexo-renderer-stylus
>如果你沒有pug以及stylus的渲染器請下載安裝 npm install hexo-renderer-pug hexo-renderer-stylus --save
## 文檔
## 特色
可查看[hexo-theme-butterfly docs](https://docs.jerryc.me) 和 [JerryC](https://jerryc.me/posts/21cfbf15)
- [x] 卡片化設計
- [X] 支持二級目錄
- [x] 雙欄設計
- [x] 響應式主題
- [x] 夜間模式
- [x] Pjax
- [x] 文章閲讀模式
- [x] 簡體和繁體轉換
- [X] 電腦和手機都可查看TOC目錄
- [X] 內置多種代碼配色darker/pale night/light/ocean/mac/mac light可自定義代碼配色
- [X] 代碼塊顯示代碼語言/關閉或展開代碼塊/代碼複製/代碼自動換行
- [X] 可關閉文字複製/可開啟內容複製增加版權信息)
- [X] 兩種搜索Algolia搜索和本地搜索
- [x] Mathjax 和 Katex
- [x] 內置404頁面
- [x] 顯示字數統計
- [x] 顯示相關文章
- [x] 過期文章提醒
- [x] 多種分享系統AddThis/Sharejs/Addtoany
- [X] 多種評論系統Disqus/Disqusjs/Livere/Gitalk/Valine/Waline/Utterances/Facebook Comments/Twikoo
- [x] 支持雙評論部署
- [x] 多種在線聊天Chatra/Tidio/Daovoice/Gitter/Crisp
- [x] 多種分析系統
- [x] 谷歌廣告/手動廣告位置
- [x] 各種站長驗證Google/Bing/Baidu/360/Yandex
- [x] 修改網站配色
- [x] 打字特效 activate_power_mode
- [x] 多種背景特效(靜止彩帶/動態彩帶/Canvas Nest
- [x] 多種鼠標點擊特效(煙花/文字/愛心)
- [x] 內置一種 Preloader 加載動畫
- [x] 不蒜子訪問統計
- [x] 兩種大圖模式Medium Zoom/Fancybox
- [x] Mermaid 圖表顯示
- [x] 照片牆
- [x] 圖片懶加載
- [x] Instantpage/Pangu/Snackbar彈窗/PWA......
## 截圖
![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)
![](https://cdn.jsdelivr.net/gh/jerryc127/CDN@m2/img/butterfly-readme-screenshots-1.jpg)
![](https://cdn.jsdelivr.net/gh/jerryc127/CDN@m2/img/butterfly-readme-screenshots-2.jpg)
![](https://cdn.jsdelivr.net/gh/jerryc127/CDN@m2/img/butterfly-readme-screenshots-3.jpg)
![](https://cdn.jsdelivr.net/gh/jerryc127/CDN@m2/img/butterfly-readme-screenshots-4.jpg)
![](https://cdn.jsdelivr.net/gh/jerryc127/CDN/img/theme-butterfly-readme-homepage-1.png)
![](https://cdn.jsdelivr.net/gh/jerryc127/CDN/img/theme-butterfly-readme-homepage-2.png)

File diff suppressed because it is too large Load Diff

View File

@@ -1,9 +1,5 @@
sidebar:
catalog: Catalog
have_read: You've read
footer:
driven: Driven
framework: Framework
theme: Theme
copy:
@@ -17,6 +13,8 @@ page:
category: Category
archives: Archives
card_post_count: comments
sticky: Sticky
no_title: No title
@@ -24,7 +22,8 @@ post:
created: Created
updated: Updated
wordcount: Word count
min2read: "Reading time: %s min"
min2read: Reading time
min2read_unit: min
page_pv: Post View
comments: Comments
copyright:
@@ -32,19 +31,19 @@ post:
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: Recommend
recommend: Related Articles
edit: Edited on
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
input_placeholder: Search for Posts
hits_empty: "We didn't find any results for the search: ${query}"
powered_by: Powered by
pagination:
prev: Previous Post
@@ -61,31 +60,49 @@ aside:
card_tags: Tags
card_archives: Archives
card_recent_post: Recent Post
card_bookmark: Add to bookmark
card_webinfo:
headline: Info
article_name: Article
runtime_name: Run time
runtime:
name: Run time
unit: days
last_push_date:
name: Last Push
site_wordcount: Total Count
site_uv_name: UV
site_pv_name: PV
more_button: More
card_newest_comments:
headline: Newest Comments
loading_text: loading...
error: Unable to get the data, please make sure the settings are correct.
zero: No Comment
image: image
link: link
code: code
card_toc: Catalog
date_suffix:
just: Just
min: minutes ago
hour: hours ago
day: days ago
month: months ago
donate: Donate
share: Share
bookmark:
title: Bookmark
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
translate_title: Toggle Between Traditional Chinese And Simplified Chinese
night_mode_title: Toggle 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
aside: Toggle between single-column and double-column
copy_copyright:
author: Author
@@ -94,12 +111,13 @@ copy_copyright:
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
error_title: Page not found
loading: Loading...
error404:
error_title: Page not found
back_button: Go back home

View File

@@ -1,9 +1,5 @@
sidebar:
catalog: Catalog
have_read: You've read
footer:
driven: Driven
framework: Framework
theme: Theme
copy:
@@ -17,6 +13,8 @@ page:
category: Category
archives: Archives
card_post_count: comments
sticky: Sticky
no_title: No title
@@ -24,7 +22,8 @@ post:
created: Created
updated: Updated
wordcount: Word count
min2read: "Reading time: %s min"
min2read: Reading time
min2read_unit: min
page_pv: Post View
comments: Comments
copyright:
@@ -32,19 +31,19 @@ post:
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: Recommend
recommend: Related Articles
edit: Edited on
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
input_placeholder: Search for Posts
hits_empty: "We didn't find any results for the search: ${query}"
powered_by: Powered by
pagination:
prev: Previous Post
@@ -61,31 +60,49 @@ aside:
card_tags: Tags
card_archives: Archives
card_recent_post: Recent Post
card_bookmark: Add to bookmark
card_webinfo:
headline: Info
article_name: Article
runtime_name: Run time
runtime:
name: Run time
unit: days
last_push_date:
name: Last Push
site_wordcount: Total Count
site_uv_name: UV
site_pv_name: PV
more_button: More
card_newest_comments:
headline: Newest Comments
loading_text: loading...
error: Unable to get the data, please make sure the settings are correct.
zero: No Comment
image: image
link: link
code: code
card_toc: Catalog
date_suffix:
just: Just
min: minutes ago
hour: hours ago
day: days ago
month: months ago
donate: Donate
share: Share
bookmark:
title: Bookmark
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
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
aside: Toggle between single-column and double-column
copy_copyright:
author: Author
@@ -94,12 +111,13 @@ copy_copyright:
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
error_title: Page not found
loading: Loading...
error404:
error_title: Page not found
back_button: Go back home

View File

@@ -1,9 +1,5 @@
sidebar:
catalog: 目录
have_read: 你已经读了
footer:
driven: 驱动
framework: 框架
theme: 主题
copy:
@@ -17,6 +13,8 @@ page:
category: 分类
archives: 归档
card_post_count: 条评论
sticky: 置顶
no_title: 无题
@@ -24,7 +22,8 @@ post:
created: 发表于
updated: 更新于
wordcount: 字数总计
min2read: "阅读时长: %s 分钟"
min2read: 阅读时长
min2read_unit: 分钟
page_pv: 阅读量
comments: 评论数
copyright:
@@ -34,19 +33,18 @@ post:
copyright_content: '本博客所有文章除特别声明外,均采用
<a href="%s" target="_blank">%s</a> 许可协议。转载请注明来自 <a href="%s" target="_blank">%s</a>'
recommend: 相关推荐
edit: 编辑
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: "提供支持"
by:
hits_empty: '找不到您查询的内容${query}'
pagination:
prev: 上一篇
@@ -63,31 +61,49 @@ aside:
card_tags: 标签
card_archives: 归档
card_recent_post: 最新文章
card_bookmark: 加入书签
card_webinfo:
headline: 网站资讯
article_name: 文章数目
runtime_name: 已运行时间
runtime:
name: 已运行时间
unit:
last_push_date:
name: 最后更新时间
site_wordcount: 本站总字数
site_uv_name: 本站访客数
site_pv_name: 本站总访问量
more_button: 查看更多
card_newest_comments:
headline: 最新评论
loading_text: 正在加载中...
error: 无法获取评论,请确认相关配置是否正确
zero: 没有评论
image: 图片
link: 链接
code: 代码
card_toc: 目录
date_suffix:
just: 刚刚
min: 分钟前
hour: 小时前
day: 天前
month: 个月前
donate: 打赏
share: 分享
bookmark:
title: 添加书签
rightside:
readmode_title: 阅读模式
font_plus_title: 放大字体
font_minus_title: 缩小字体
translate_title: 简繁转换
night_mode_title: 夜间模式
night_mode_title: 浅色和深色模式转换
back_to_top: 回到顶部
toc: 目录
scroll_to_comment: 直达评论
setting: 设置
runtime_unit:
aside: 单栏和双栏切换
copy_copyright:
author: 作者
@@ -96,12 +112,13 @@ copy_copyright:
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

@@ -1,15 +1,11 @@
sidebar:
catalog: 目錄
have_read: 你已經讀了
footer:
driven: Power by
theme: Theme
framework: 框架
theme: 主題
copy:
success: 複製成功
error: 複製錯誤
noSupport: 瀏覽器不支
noSupport: 瀏覽器不支
page:
articles: 文章總覽
@@ -17,6 +13,8 @@ page:
category: 分類
archives: 歸檔
card_post_count: 條評論
sticky: 置頂
no_title: 無題
@@ -24,29 +22,29 @@ post:
created: 發表於
updated: 更新於
wordcount: 字數總計
min2read: "閲讀時長: %s 分鐘"
page_pv: 閲讀量
min2read: 閱讀時長
min2read_unit: 分鐘
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: 相關推薦
edit: 編輯
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: "提供支持"
by:
label: 本地搜
input_placeholder: 文章
hits_empty: '找不到您查詢的內容${query}'
pagination:
prev: 上一篇
@@ -63,47 +61,64 @@ aside:
card_tags: 標籤
card_archives: 歸檔
card_recent_post: 最新文章
card_bookmark: 加入書籤
card_webinfo:
headline: 網站資訊
article_name: 文章數目
runtime_name: 已運行時間
runtime:
name: 已運行時間
unit:
last_push_date:
name: 最後更新時間
site_wordcount: 本站總字數
site_uv_name: 本站訪客數
site_pv_name: 本站總訪問量
more_button: 檢視更多
card_newest_comments:
headline: 最新評論
loading_text: 正在載入中...
error: 無法獲取評論,請確認相關配置是否正確
zero: 沒有評論
image: 圖片
link: 連結
code: 代碼
card_toc: 目錄
date_suffix:
just: 剛剛
min: 分鐘前
hour: 小時前
day: 天前
month: 個月前
donate: 打賞
share: 分享
bookmark:
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:
runtime_unit:
setting:
aside: 單欄和雙欄切換
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: 你已切換為淺色模式
error_title: 頁面沒有找到
loading: 載入中...
error404:
error_title: 頁面沒有找到
back_button: 回到主頁

View File

@@ -1,87 +0,0 @@
doctype html
html(lang=config.language data-theme=theme.display_mode)
head
- var pageTitle = _p('error_title')
- var tabTitle = pageTitle + ' | ' + config.title
- var pageDescription = page.description || page.title || config.description
- var 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
- var without_html = url.replace('index.html', '')
- var top_img = theme.error_404.background || theme.default_top_img
- var bg_img = `background-image: url(${top_img})`
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=5")
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)
//- 預解析
include includes/head/dns_prefetch.pug
//- 網站驗證
include includes/head/site_verification.pug
//- Open_Graph
include includes/head/Open_Graph.pug
//- PWA
if (theme.pwa && theme.pwa.enable)
include includes/head/pwa
script(src=url_for(theme.CDN.js_cookies))
if theme.darkmode.enable
include includes/head/darkmode.pug
each item in theme.CDN_USE.css
link(rel='stylesheet', href=url_for(item))
if theme.fontawesome_v5 && theme.fontawesome_v5.enable
link(rel='stylesheet', href=url_for(theme.CDN.fontawesome_v5))
else
link(rel='stylesheet', href=url_for(theme.CDN.fontawesome_v4))
if (theme.snackbar && theme.snackbar.enable)
link(rel='stylesheet', href=url_for(theme.CDN.snackbar_css))
if theme.canonical
link(rel="canonical" href=without_html)
if theme.algolia_search.enable
link(rel="stylesheet" type="text/css" href=url_for(theme.CDN.algolia_search_css))
script(src=url_for(theme.CDN.algolia_search) defer)
//- google_adsense
include includes/head/google_adsense.pug
//- analytics
include includes/head/analytics.pug
if theme.blog_title_font.font_link
link(rel='stylesheet', href=url_for(theme.blog_title_font.font_link))
include includes/head/config.pug
include includes/head/config_site.pug
body
if theme.fireworks && theme.fireworks.enable
canvas.fireworks
nav#nav.error-no-found(style=bg_img)
include includes/header/header.pug
#error_info.is-center
h1#error_title= '404'
#error_subtitle= theme.error_404.subtitle
include includes/mobile-sidebar/index.pug
include includes/rightside.pug
each item in theme.CDN_USE.js
script(src=url_for(item))
include includes/additional-js.pug
include includes/search/index.pug

View File

@@ -2,13 +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)
+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
include includes/pagination.pug

View File

@@ -1,20 +0,0 @@
#page
.flink#article-container
each i in site.data.link
h2= i.class_name
.post-cards
.md-links
each item in i.link_list
.md-links-item
a(href=item.link title=item.name target="_blank")
if theme.lazyload.enable
img.lazyload(data-src=item.avatar onerror=`this.onerror=null;this.src='` + url_for(theme.lodding_bg.flink) + `'` alt=item.name )
else
img(src=item.avatar onerror=`this.onerror=null;this.src='` + url_for(theme.lodding_bg.flink) + `'` alt=item.name )
.md-links-title= item.name
.md-links-des= item.descr
!= page.content
if page.comments !== false
include includes/comments/index.pug

17
layout/includes/404.pug Normal file
View File

@@ -0,0 +1,17 @@
- var top_img = theme.error_404.background || theme.default_top_img
- var bg_img = `background-image: url('${url_for(top_img)}')`
#body-wrap.error
div(style='display: none')
include ./header/index.pug
#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=config.root)
i.fas.fa-rocket
= _p('error404.back_button')

View File

@@ -1,65 +1,68 @@
if theme.translate && theme.translate.enable
script(src=url_for(theme.CDN.translate))
div
script(src=url_for(theme.CDN.utils))
script(src=url_for(theme.CDN.main))
if (theme.medium_zoom && theme.medium_zoom.enable)
script(src=url_for(theme.CDN.medium_zoom))
if theme.translate.enable
script(src=url_for(theme.CDN.translate))
if (theme.fancybox && theme.fancybox.enable)
script(src=url_for(theme.CDN.fancybox))
if theme.medium_zoom
script(src=url_for(theme.CDN.medium_zoom))
include ./math/index.pug
if theme.instantpage
script(src=url_for(theme.CDN.instantpage) type="module")
if theme.fireworks && theme.fireworks.enable
script(src=url_for(theme.CDN.anime))
script(src=url_for(theme.CDN.fireworks))
if theme.lazyload.enable
script(src=url_for(theme.CDN.lazyload))
if (theme.snackbar && theme.snackbar.enable)
script(src=url_for(theme.CDN.snackbar))
if theme.snackbar.enable
script(src=url_for(theme.CDN.snackbar))
if (theme.canvas_ribbon && theme.canvas_ribbon.enable)
include ./third-party/canvas-ribbon.pug
if theme.pangu.enable
!=partial('includes/third-party/pangu.pug', {}, {cache: true})
if (theme.canvas_ribbon_piao && theme.canvas_ribbon_piao.enable)
include ./third-party/canvas-ribbon-piao.pug
//- search
if theme.algolia_search.enable
script(src=url_for(theme.CDN.algolia_js))
else if theme.local_search.enable
script(src=url_for(theme.CDN.local_search))
if (theme.canvas_nest && theme.canvas_nest.enable)
include ./third-party/canvas-nest.pug
if theme.preloader
!=partial('includes/loading/loading-js', {}, {cache: true})
if theme.activate_power_mode.enable
script(src=url_for(theme.CDN.activate_power_mode))
script.
POWERMODE.colorful = #{theme.activate_power_mode.colorful};
POWERMODE.shake = #{theme.activate_power_mode.shake};
document.body.addEventListener('input', POWERMODE);
.js-pjax
if needLoadCountJs
!=partial('includes/third-party/card-post-count/index', {}, {cache: true})
if loadSubJs
include ./third-party/subtitle.pug
if theme.busuanzi.site_uv || theme.busuanzi.site_pv || theme.busuanzi.page_pv
script(async src=url_for(theme.CDN.busuanzi))
include ./third-party/math/index.pug
if theme.instantpage.enable
script(src=url_for(theme.CDN.instantpage) type="module")
if commentsJsLoad
include ./third-party/comments/js.pug
if theme.lazyload.enable
script(src=url_for(theme.CDN.lazyload) async="")
!=partial('includes/third-party/prismjs', {}, {cache: true})
//- 鼠標特效
if theme.click_heart && theme.click_heart.enable
script(src=url_for(theme.CDN.click_heart))
if theme.aside.enable && theme.newest_comments.enable
if theme.pjax.enable
!=partial('includes/third-party/newest-comments/index', {}, {cache: true})
else if (!is_post() && page.aside !== false)
!=partial('includes/third-party/newest-comments/index', {}, {cache: true})
if theme.ClickShowText && theme.ClickShowText.enable
script(src=url_for(theme.CDN.ClickShowText))
!=fragment_cache('injectBottom', function(){return injectHtml(theme.inject.bottom)})
if theme.pangu && theme.pangu.enable
include ./third-party/pangu.pug
!=partial('includes/third-party/effect', {}, {cache: true})
//- 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))
!=partial('includes/third-party/chat/index', {}, {cache: true})
if theme.aplayerInject && theme.aplayerInject.enable
if theme.pjax.enable || theme.aplayerInject.per_page
include ./third-party/aplayer.pug
else if page.aplayer
include ./third-party/aplayer.pug
//- mermaid
if theme.mermaid.enable
include ./math/mermaid.pug
if is_home()
include index-js.pug
if theme.pjax.enable
!=partial('includes/third-party/pjax', {}, {cache: true})
if theme.busuanzi.site_uv || theme.busuanzi.site_pv || theme.busuanzi.page_pv
script(async data-pjax src=url_for(theme.CDN.busuanzi))

View File

@@ -1,23 +0,0 @@
#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);
})();
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

@@ -1,23 +0,0 @@
#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}',
admin: '!{theme.disqusjs.admin}',
adminLabel: '!{theme.disqusjs.adminLabel}'
});
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

@@ -1,23 +0,0 @@
#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){
document.getElementsByClassName('gitalk-comment-count')[0].innerHTML= n
}

View File

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

View File

@@ -1,10 +0,0 @@
#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

@@ -1,19 +0,0 @@
script#utterances_comment(src=theme.CDN.utterances
repo=theme.utterances.repo
issue-term=theme.utterances.issue_term
theme=theme.utterances.light_theme
crossorigin="anonymous"
async)
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,23 +0,0 @@
#vcomment.vcomment
script(src=url_for(theme.CDN.valine))
script.
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;
window.valine = new Valine({
el:'#vcomment',
notify: #{theme.valine.notify},
verify: #{theme.valine.verify},
appId: '#{theme.valine.appId}',
appKey: '#{theme.valine.appKey}',
placeholder: '#{theme.valine.placeholder}',
avatar: '#{theme.valine.avatar}',
meta: guest_info,
pageSize: '#{theme.valine.pageSize}',
lang: '#{theme.valine.lang}',
recordIP: #{theme.valine.recordIP},
serverURLs: '#{theme.valine.serverURLs}'
});

View File

@@ -1,24 +1,17 @@
#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.owner.enable
- var now = new Date()
- var nowYear = now.getFullYear()
if theme.footer.owner.since && theme.footer.owner.since != nowYear
.copyright!= `&copy;${theme.footer.owner.since} - ${nowYear} By ${config.author}`
else
.copyright!= `&copy;${nowYear} By ${config.author}`
if theme.footer.copyright
.framework-info
span= _p('footer.driven') + ' '
a(href='https://hexo.io')
span Hexo
span= _p('footer.framework') + ' '
a(href='https://hexo.io')= 'Hexo'
span.footer-separator |
span= _p('footer.theme') + ' '
a(href='https://github.com/jerryc127/hexo-theme-butterfly')
span Butterfly
if theme.footer_custom_text
.footer_custom_text!=`${theme.footer_custom_text}`
if theme.ICP.enable
.icp
a(href=theme.ICP.url)
if theme.ICP.icon
img.icp-icon(src=url_for(theme.ICP.icon))
span=theme.ICP.text
a(href='https://github.com/jerryc127/hexo-theme-butterfly')= 'Butterfly'
if theme.footer.custom_text
.footer_custom_text!=`${theme.footer.custom_text}`

View File

@@ -1,99 +1,77 @@
- var pageTitle = page.title || config.title || ''
- var pageTitle
- 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
- 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 || ''
- var isSubtitle = config.subtitle ? ' - ' + config.subtitle : ''
- var tabTitle = is_home() || !pageTitle ? config.title + isSubtitle : pageTitle + ' | ' + config.title
- pageTitle ? '' : pageTitle = config.title || ''
- 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 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
- var without_html = url.replace('index.html', '')
- var themeColor = theme.display_mode === 'dark' ? '#0d0d0d' : '#ffffff'
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)
if theme.disable_baidu_transformation
meta(http-equiv="Cache-Control" content="no-transform")
meta(http-equiv="Cache-Control" content="no-siteapp")
if page.hide == true
meta(name="robots" content="noindex")
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/dns_prefetch', {}, {cache:theme.fragment_cache})
//- 網站驗證
!=partial('includes/head/site_verification', {}, {cache:theme.fragment_cache})
meta(name="theme-color" content=themeColor)
//- Open_Graph
include ./head/Open_Graph.pug
!=favicon_tag(theme.favicon || config.favicon)
link(rel="canonical" href=urlNoIndex())
//- 預解析
!=partial('includes/head/preconnect', {}, {cache: true})
//- 網站驗證
!=partial('includes/head/site_verification', {}, {cache: true})
//- PWA
if (theme.pwa && theme.pwa.enable)
!=partial('includes/head/pwa', {}, {cache:theme.fragment_cache})
!=partial('includes/head/pwa', {}, {cache: true})
script(src=url_for(theme.CDN.js_cookies))
if theme.darkmode.enable
!=partial('includes/head/darkmode', {}, {cache:theme.fragment_cache})
each item in theme.CDN_USE.css
link(rel='stylesheet', href=url_for(item))
if theme.fontawesome_v5 && theme.fontawesome_v5.enable
link(rel='stylesheet', href=url_for(theme.CDN.fontawesome_v5))
else
link(rel='stylesheet', href=url_for(theme.CDN.fontawesome_v4))
if (theme.fancybox && theme.fancybox.enable)
link(rel='stylesheet', href=url_for(theme.CDN.fancybox_css))
//- main css
link(rel='stylesheet', href=url_for(theme.CDN.main_css))
link(rel='stylesheet', href=url_for(theme.CDN.fontawesome) media="print" onload="this.media='all'")
if (theme.snackbar && theme.snackbar.enable)
link(rel='stylesheet', href=url_for(theme.CDN.snackbar_css))
if theme.canonical
link(rel="canonical" href=without_html)
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) )
link(rel='stylesheet', href=url_for(theme.CDN.snackbar_css) media="print" onload="this.media='all'")
if theme.algolia_search.enable
link(rel="stylesheet" type="text/css" href=url_for(theme.CDN.algolia_search_css))
link(rel='stylesheet' href=url_for(theme.CDN.algolia_search_css) media="print" onload="this.media='all'")
script(src=url_for(theme.CDN.algolia_search) defer)
//- comment css
include ./head/comment.pug
//- google_adsense
!=partial('includes/head/google_adsense', {}, {cache:theme.fragment_cache})
!=partial('includes/head/google_adsense', {}, {cache: true})
//- analytics
!=partial('includes/head/analytics', {}, {cache:theme.fragment_cache})
!=partial('includes/head/analytics', {}, {cache: true})
if theme.blog_title_font.font_link
link(rel='stylesheet', href=url_for(theme.blog_title_font.font_link))
//- font
if theme.blog_title_font && theme.blog_title_font.font_link
link(rel='stylesheet' href=url_for(theme.blog_title_font.font_link) media="print" onload="this.media='all'")
//- global config
!=partial('includes/head/config', {}, {cache:theme.fragment_cache})
!=partial('includes/head/config', {}, {cache: true})
include ./head/config_site.pug
include ./head/noscript.pug
!=fragment_cache('injectHeadJs', function(){return inject_head_js()})
!=fragment_cache('injectHead', function(){return injectHtml(theme.inject.head)})

View File

@@ -1,17 +1,11 @@
- var contentType = is_post() ? 'article' : 'website'
//- twitter meta
if theme.twitter_meta
meta(name="twitter:card" content="summary")
meta(name="twitter:title" content=pageTitle)
meta(name="twitter:description" content=pageDescription)
meta(name="twitter:image" content=full_url_for(page.cover || theme.avatar.img))
//- Open_Graph
if theme.Open_Graph_meta
meta(property="og:type" content=contentType)
meta(property="og:title" content=pageTitle)
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=full_url_for(page.cover || theme.avatar.img))
- let contentType = is_post() ? 'article' : 'website'
- let metaImage = (page.cover || theme.avatar.img) ? full_url_for(page.cover || theme.avatar.img) : ''
- let fb_appId = theme.facebook_comments.app_id || ''
- let fb_admins = theme.facebook_comments.user_id || ''
!= open_graph({type: contentType, image: metaImage, fb_admins: fb_admins, fb_app_id: fb_appId})
else
meta(name="description" content=page_description())

View File

@@ -9,14 +9,35 @@ if theme.baidu_analytics
})();
if theme.google_analytics
script(async src=`https://www.googletagmanager.com/gtag/js?id=${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');
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', '!{theme.google_analytics}');
if theme.tencent_analytics
script(src=`https://tajs.qq.com/stats?sId=${theme.tencent_analytics}` charset="UTF-8")
script.
var _mtac = {};
(function() {
var mta = document.createElement("script");
mta.src = "//pingjs.qq.com/h5/stats.js?v2.0.4";
mta.setAttribute("name", "MTAH5");
mta.setAttribute("sid", "!{theme.tencent_analytics}");
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(mta, s);
})();
if theme.cnzz_analytics
script(async data-pjax src=`https://s4.cnzz.com/z_stat.php?id=${theme.cnzz_analytics}&web_id=${theme.cnzz_analytics}`)
if theme.cloudflare_analytics
script(defer data-pjax src='https://static.cloudflareinsights.com/beacon.min.js' data-cf-beacon=`{"token": "${theme.cloudflare_analytics}"}`)
if theme.microsoft_clarity
script.
(function(c,l,a,r,i,t,y){
c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)};
t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i;
y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y);
})(window, document, "clarity", "script", "!{theme.microsoft_clarity}");

View File

@@ -1,8 +0,0 @@
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

@@ -1,6 +1,6 @@
-
var algolia = 'undefined';
var env = process.env;
let algolia = 'undefined';
let env = process.env;
if (theme.algolia_search.enable) {
algolia = JSON.stringify({
appId: env.ALGOLIA_APP_ID || config.algolia.appId || config.algolia.applicationID,
@@ -14,9 +14,9 @@
hits_stats: _p("algolia_search.hits_stats")
}
})
}
var localSearch = 'undefined';
}
let localSearch = 'undefined';
if (theme.local_search && theme.local_search.enable) {
localSearch = JSON.stringify({
path: config.search.path,
@@ -26,94 +26,103 @@
}
})
}
var translate = 'undefined';
let translate = 'undefined';
if (theme.translate && theme.translate.enable){
translate = JSON.stringify({
defaultEncoding: theme.translate.defaultEncoding,
translateDelay: theme.translate.translateDelay,
cookieDomain: theme.translate.cookieDomain,
msgToTraditionalChinese: theme.translate.msgToTraditionalChinese,
msgToSimplifiedChinese: theme.translate.msgToSimplifiedChinese
})
}
var copyright = 'undefined' ;
if (theme.copy.enable && theme.copy.copyright){
copyright = JSON.stringify({
let copyright = 'undefined';
if (theme.copy.enable && theme.copy.copyright.enable){
copyright = JSON.stringify({
limitCount: theme.copy.copyright.limit_count,
languages: {
author: _p("copy_copyright.author") + ': ' + config.author,
link: _p("copy_copyright.link") + ': ' + without_html,
source: _p("copy_copyright.source") + ': ' + config.title,
info: _p("copy_copyright.info")
author: _p("copy_copyright.author") + ': ' + config.author,
link: _p("copy_copyright.link") + ': ',
source: _p("copy_copyright.source") + ': ' + config.title,
info: _p("copy_copyright.info")
}
})
}
var ClickShowText = 'undefined';
if (theme.ClickShowText && theme.ClickShowText.enable) {
ClickShowText = JSON.stringify({
text: theme.ClickShowText.text.join(","),
fontSize: theme.ClickShowText.fontSize
})
}
var Snackbar = 'undefined';
let Snackbar = 'undefined';
if (theme.snackbar && theme.snackbar.enable) {
Snackbar = JSON.stringify({
bookmark: {
title: _p("Snackbar.bookmark.title"),
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,
Snackbar = JSON.stringify({
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,
})
}
var highlightCopy = theme.highlight_copy
var highlightLang = theme.highlight_lang
var highlightShrink = theme.highlight_shrink
var runtime = theme.runtimeshow.enable
var fancybox = theme.fancybox.enable
var medium_zoom = theme.medium_zoom.enable
var baiduPush = theme.baidu_push && theme.baidu_push.enable
var isFontAwesomeV5 = theme.fontawesome_v5 && theme.fontawesome_v5.enable
let noticeOutdate = 'undefined';
if (theme.noticeOutdate && theme.noticeOutdate.enable) {
noticeOutdate = JSON.stringify({
limitDay: theme.noticeOutdate.limit_day,
position: theme.noticeOutdate.position,
messagePrev: theme.noticeOutdate.message_prev,
messageNext: theme.noticeOutdate.message_next,
})
}
let highlight = 'undefined';
if ((config.highlight && config.highlight.enable) || (config.prismjs && config.prismjs.enable)) {
highlight = JSON.stringify({
plugin: config.highlight.enable ? 'highlighjs' : 'prismjs',
highlightCopy: theme.highlight_copy,
highlightLang: theme.highlight_lang,
highlightHeightLimit: theme.highlight_height_limit
})
}
script.
var GLOBAL_CONFIG = {
const GLOBAL_CONFIG = {
root: '!{config.root}',
algolia: !{algolia},
localSearch: !{localSearch},
translate: !{translate},
noticeOutdate: !{noticeOutdate},
highlight: !{highlight},
copy: {
success: '!{_p("copy.success")}',
error: '!{_p("copy.error")}',
noSupport: '!{_p("copy.noSupport")}'
},
bookmark: {
title: '!{_p("Snackbar.bookmark.title")}',
message_prev: '!{_p("Snackbar.bookmark.message_prev")}',
message_next: '!{_p("Snackbar.bookmark.message_next")}'
relativeDate: {
homepage: !{theme.post_meta.page.date_format === 'relative'},
post: !{theme.post_meta.post.date_format === 'relative'}
},
runtime: '!{theme.runtimeshow.enable ? _p("aside.card_webinfo.runtime.unit") : ""}',
date_suffix: {
just: '!{_p("date_suffix.just")}',
min: '!{_p("date_suffix.min")}',
hour: '!{_p("date_suffix.hour")}',
day: '!{_p("date_suffix.day")}',
month: '!{_p("date_suffix.month")}'
},
runtime_unit: '!{_p("runtime_unit")}',
runtime: !{runtime},
copyright: !{copyright},
ClickShowText: !{ClickShowText},
medium_zoom: !{medium_zoom},
fancybox: !{fancybox},
lightbox: '!{ theme.medium_zoom ? "mediumZoom" : (theme.fancybox ? "fancybox" : "null" )}',
Snackbar: !{Snackbar},
baiduPush: !{baiduPush},
highlightCopy: !{highlightCopy},
highlightLang: !{highlightLang},
highlightShrink: !{highlightShrink},
isFontAwesomeV5: !{isFontAwesomeV5}
source: {
jQuery: '!{url_for(theme.CDN.jquery)}',
justifiedGallery: {
js: '!{url_for(theme.CDN.justifiedGallery_js)}',
css: '!{url_for(theme.CDN.justifiedGallery_css)}'
},
fancybox: {
js: '!{url_for(theme.CDN.fancybox)}',
css: '!{url_for(theme.CDN.fancybox_css)}'
}
},
isPhotoFigcaption: !{theme.photofigcaption},
islazyload: !{theme.lazyload.enable},
isanchor: !{theme.anchor}
}

View File

@@ -1,6 +1,19 @@
script.
var GLOBAL_CONFIG_SITE = {
isPost: !{is_post()},
isHome: !{is_home()}
}
-
let isHighlightShrink
if (theme.highlight_shrink == 'none') isHighlightShrink = 'undefined'
else if (page.highlight_shrink === true || page.highlight_shrink === false) isHighlightShrink = page.highlight_shrink
else isHighlightShrink = theme.highlight_shrink
var pageToc = page.toc === true || page.toc === false ? page.toc : theme.toc.enable
var showToc = is_post() && theme.aside.enable && pageToc && (toc(page.content) !== '' || page.encrypt == true )
-
script#config-diff.
var GLOBAL_CONFIG_SITE = {
title: '!{pageTitle}',
isPost: !{is_post()},
isHome: !{is_home()},
isHighlightShrink: !{isHighlightShrink},
isToc: !{showToc},
postUpdate: '!{full_date(page.updated)}'
}

View File

@@ -1,47 +0,0 @@
script.
const autoChangeMode = '#{theme.darkmode.autoChangeMode}'
var t = Cookies.get("theme")
if (autoChangeMode == '1'){
const isDarkMode = window.matchMedia("(prefers-color-scheme: dark)").matches
const isLightMode = window.matchMedia("(prefers-color-scheme: light)").matches
const isNotSpecified = window.matchMedia("(prefers-color-scheme: no-preference)").matches
const 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.')
now = new Date();
hour = now.getHours();
isNight = hour < 6 || hour >= 18
isNight ? 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()
}
function activateDarkMode(){
document.documentElement.setAttribute('data-theme', 'dark')
if (document.querySelector('meta[name="theme-color"]') !== null){
document.querySelector('meta[name="theme-color"]').setAttribute('content','#000')
}
}
function activateLightMode(){
document.documentElement.setAttribute('data-theme', 'light')
if (document.querySelector('meta[name="theme-color"]') !== null){
document.querySelector('meta[name="theme-color"]').setAttribute('content','#fff')
}
}

View File

@@ -1,16 +0,0 @@
link(rel="preconnect" href="//cdn.jsdelivr.net")
if theme.google_analytics
link(rel="preconnect" href="https://www.google-analytics.com" crossorigin)
if theme.baidu_analytics
link(rel="preconnect" href="https://hm.baidu.com")
if theme.tencent_analytics
link(rel="preconnect" href="http://ta.qq.com")
if theme.blog_title_font.font_link
link(rel="preconnect" href="https://fonts.googleapis.com" crossorigin)
if theme.busuanzi.site_uv || theme.busuanzi.site_pv || theme.busuanzi.page_pv
link(rel="preconnect" href="//busuanzi.ibruce.info")

View File

@@ -1,7 +1,9 @@
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}'
});
if theme.google_adsense.auto_ads
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,14 @@
noscript.
<style type="text/css">
#nav {
opacity: 1
}
.justified-gallery img {
opacity: 1
}
#recent-posts time,
#post-meta time {
display: inline !important
}
</style>

View File

@@ -0,0 +1,25 @@
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="//pingjs.qq.com")
if theme.cnzz_analytics
link(rel="preconnect" href="//s4.cnzz.com")
if theme.cloudflare_analytics
link(rel="preconnect" href="//static.cloudflareinsights.com")
if theme.microsoft_clarity
link(rel="preconnect" href="//www.clarity.ms")
if theme.blog_title_font && 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")

View File

@@ -1,13 +1,11 @@
link(rel="manifest" href=theme.pwa.manifest)
if(theme.pwa.theme_color)
meta(name="theme-color" content=theme.pwa.theme_color)
link(rel="manifest" href=url_for(theme.pwa.manifest))
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)
link(rel="apple-touch-icon" sizes="180x180" href=url_for(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)
link(rel="icon" type="image/png" sizes="32x32" href=url_for(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)
link(rel="icon" type="image/png" sizes="16x16" href=url_for(theme.pwa.favicon_16_16))
if(theme.pwa.mask_icon)
link(rel="mask-icon" href=theme.pwa.mask_icon color="#5bbad5")
link(rel="mask-icon" href=url_for(theme.pwa.mask_icon) color="#5bbad5")

View File

@@ -1,11 +1,3 @@
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)
if theme.site_verification
each item in theme.site_verification
meta(name=item.name content=item.content)

View File

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

View File

@@ -1,45 +1,50 @@
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(${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
#nav(class=isHomeClass style=bg_img)
!=partial('includes/header/header', {}, {cache:theme.fragment_cache})
if is_home()
#site-info
h1#site_title=site_title
#site_subtitle
span#subtitle
if(theme.social)
#site_social_icons
each url, icon in theme.social
a.social-icon(href=url target="_blank")
i(class=icon aria-hidden="true")
#scroll_down
i.fa.fa-angle-down.scroll-down-effects
else if is_post()
include ./post-info.pug
if !theme.disable_top_img && page.top_img !== false
if is_post()
- var top_img = page.top_img || page.cover || page.randomcover
else if is_page()
- var top_img = page.top_img || theme.default_top_img
else if is_tag()
- var top_img = theme.tag_per_img && theme.tag_per_img[page.tag]
- top_img = top_img ? top_img : (theme.tag_img !== false ? theme.tag_img || theme.default_top_img : false)
else if is_category()
- var top_img = theme.category_per_img && theme.category_per_img[page.category]
- top_img = top_img ? top_img : (theme.category_img !== false ? theme.category_img || theme.default_top_img : false)
else if is_home()
- var top_img = theme.index_img !== false ? theme.index_img || theme.default_top_img : false
else if is_archive()
- var top_img = theme.archive_img !== false ? theme.archive_img || theme.default_top_img : false
else
#page_site-info
h1#site_title=site_title
- var top_img = page.top_img || theme.default_top_img
if top_img !== false
- var imgSource = top_img && top_img.indexOf('/') !== -1 ? `background-image: url('${url_for(top_img)}')` : `background: ${top_img}`
- var bg_img = top_img ? imgSource : ''
- var site_title = is_archive() ? _p('page.archives') : page.title || page.tag || page.category || config.title
- var isHomeClass = is_home() ? 'full_page' : 'not-home-page'
- is_post() ? isHomeClass = 'post-bg' : isHomeClass
else
- var isHomeClass = 'not-top-img'
else
- var top_img = false
- var isHomeClass = 'not-top-img'
header#page-header(class=isHomeClass style=bg_img)
!=partial('includes/header/nav', {}, {cache: true})
if top_img !== false
if is_post()
include ./post-info.pug
else if is_home()
#site-info
h1#site-title=site_title
if theme.subtitle.enable
- var loadSubJs = true
#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
#page-site-info
h1#site-title=site_title

View File

@@ -1,18 +1,26 @@
each value, label in theme.menu
if !Array.isArray(value)
.menus_item
a.site-page(href=url_for(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=url_for(trim(i.split('||')[1])))
i.fa-fw(class=trim(i.split('||')[2]))
span=' '+trim(i.split('||')[0])
if theme.menu
//- for mobile sidebar
- let sidebarChildHide = theme.hide_sidebar_menu_child ? 'hide' : ''
.menus_items
each value, label in theme.menu
if typeof value !== 'object'
.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(href='javascript:void(0);')
if label.split('||')[1]
i.fa-fw(class=trim(label.split('||')[1]))
span=' '+ trim(label.split('||')[0])
i.fas.fa-chevron-down.expand(class=sidebarChildHide)
ul.menus_item_child
each val,lab in value
li
a.site-page.child(href=url_for(trim(val.split('||')[0])))
if val.split('||')[1]
i.fa-fw(class=trim(val.split('||')[1]))
span=' '+ lab

View File

@@ -0,0 +1,17 @@
nav#nav
span#blog_name
a#site-name(href=url_for('/')) #[=config.title]
#menus
if (theme.algolia_search.enable || theme.local_search.enable)
#search-button
a.site-page.social-icon.search
i.fas.fa-search.fa-fw
span=' '+_p('search')
!=partial('includes/header/menu_item', {}, {cache: true})
#toggle-menu
a.site-page
i.fas.fa-bars.fa-fw

View File

@@ -1,65 +1,111 @@
- let comments = theme.comments
#post-info
#post-title
.posttitle= page.title || _p('no_title')
#post-meta
if (theme.post_meta.post.date_type)
if (theme.post_meta.post.date_type === 'both')
time.post-meta__date
i.fa.fa-calendar.fa-fw(aria-hidden="true")
=' '+_p('post.created')+' '+date(page.date, config.date_format)
span.post-meta__separator |
i.fa.fa-history.fa-fw(aria-hidden="true")
=' '+_p('post.updated')+' '+date(page.updated, config.date_format)
else
- var date_type = theme.post_meta.post.date_type === 'updated' ? 'updated' : 'date'
time.post-meta__date #[i.fa.fa-calendar.fa-fw(aria-hidden="true")] #[=date(page[date_type], config.date_format)]
if (theme.post_meta.post.categories && page.categories.data.length > 0)
if (theme.post_meta.post.date_type)
span.post-meta__separator |
span
each item, index in page.categories.data
i.fa.fa-inbox.post-meta__icon.fa-fw(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.fa-fw(aria-hidden="true")
.post-meta-wordcount
if (theme.wordcount && theme.wordcount.enable)
- var wordCountIcon = theme.fontawesome_v5 && theme.fontawesome_v5.enable ? 'far fa-file-word' : 'fa fa-file-word-o'
i.post-meta__icon.fa-fw(class=wordCountIcon aria-hidden="true")
span= _p('post.wordcount') + ':'
span.word-count= wordcount(page.content)
span.post-meta__separator |
- var readCountIcon = theme.fontawesome_v5 && theme.fontawesome_v5.enable ? 'far fa-clock' : 'fa fa-clock-o'
i.post-meta__icon.fa-fw(class=readCountIcon aria-hidden="true")
span= _p('post.min2read', min2read(page.content, {cn: 350, en: 160}))
.post-meta-pv-cv
if (theme.wordcount && theme.wordcount.enable && theme.busuanzi.page_pv)
span.post-meta__separator |
if theme.busuanzi.page_pv
i.fa.fa-eye.post-meta__icon.fa-fw(aria-hidden="true")
span=_p('post.page_pv') + ':'
span#busuanzi_value_page_pv
h1.post-title= page.title || _p('no_title')
if theme.post_edit.enable
a.post-edit-link(href=theme.post_edit.url + page.source title=_p('post.edit') target="_blank")
i.fas.fa-pencil-alt
- var commentCount = theme.fontawesome_v5 && theme.fontawesome_v5.enable ? 'far fa-comments' : 'fa fa-comment-o'
if ((theme.disqus && theme.disqus.enable && theme.disqus.count && page.comments !== false) || (theme.disqusjs && theme.disqusjs.enable && theme.disqusjs.count && page.comments !== false))
if (theme.busuanzi && theme.busuanzi.page_pv)
span.post-meta__separator |
i.post-meta__icon.fa-fw(class=commentCount aria-hidden="true")
span= _p('post.comments') + ':'
span.disqus-comment-count.comment-count
a(href=full_url_for(page.path) + '#disqus_thread')
if (theme.valine && theme.valine.enable && theme.valine.count && page.comments !== false)
if (theme.busuanzi && theme.busuanzi.page_pv)
span.post-meta__separator |
i.post-meta__icon.fa-fw(class=commentCount aria-hidden="true")
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")
if (theme.gitalk && theme.gitalk.enable && theme.gitalk.count && page.comments !== false)
if (theme.busuanzi && theme.busuanzi.page_pv)
span.post-meta__separator |
i.post-meta__icon.fa-fw(class=commentCount aria-hidden="true")
span= _p('post.comments') + ':'
a(href=url_for(page.path) + '#post-comment')
span.gitalk-comment-count.comment-count
#post-meta
.meta-firstline
if (theme.post_meta.post.date_type)
span.post-meta-date
if (theme.post_meta.post.date_type === 'both')
i.far.fa-calendar-alt.fa-fw.post-meta-icon
span.post-meta-label= _p('post.created')
time.post-meta-date-created(datetime=date_xml(page.date) title=_p('post.created') + ' ' + full_date(page.date))=date(page.date, config.date_format)
span.post-meta-separator |
i.fas.fa-history.fa-fw.post-meta-icon
span.post-meta-label= _p('post.updated')
time.post-meta-date-updated(datetime=date_xml(page.updated) title=_p('post.updated') + ' ' + full_date(page.updated))=date(page.updated, config.date_format)
else
- let data_type_update = theme.post_meta.post.date_type === 'updated'
- let date_type = data_type_update ? 'updated' : 'date'
- let date_icon = data_type_update ? 'fas fa-history' :'far fa-calendar-alt'
- let data_info = data_type_update ? _p('post.updated') : _p('post.created')
i.fa-fw.post-meta-icon(class=date_icon)
span.post-meta-label= data_info
time(datetime=date_xml(page[date_type]) title=date_title + ' ' + full_date(page[date_type]))=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-separator |
span.post-meta-wordcount
if theme.wordcount.post_wordcount
i.far.fa-file-word.fa-fw.post-meta-icon
span.post-meta-label= _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.post-meta-label= _p('post.min2read') + ':'
span= min2read(page.content, {cn: 350, en: 160}) + _p('post.min2read_unit')
//- for pv and count
mixin pvBlock(parent_id,parent_class,parent_title)
span.post-meta-separator |
span(class=parent_class id=parent_id data-flag-title=page.title)
i.far.fa-eye.fa-fw.post-meta-icon
span.post-meta-label=_p('post.page_pv') + ':'
if block
block
if theme.busuanzi.page_pv
+pvBlock('','post-meta-pv-cv','')
span#busuanzi_value_page_pv
else if comments.use && !comments.lazyload
if (comments.use.includes('Valine') && theme.valine.visitor) || (comments.use.includes('Waline') && theme.waline.visitor)
+pvBlock(url_for(page.path),'leancloud_visitors',page.title)
span.leancloud-visitors-count
else if (comments.use.includes('Twikoo') && theme.twikoo.visitor)
+pvBlock('','','')
span#twikoo_visitors
if comments.count && !comments.lazyload && page.comments !== false && comments.use
- var whichCount = comments.use[0]
mixin countBlock
span.post-meta-separator |
span.post-meta-commentcount
i.far.fa-comments.fa-fw.post-meta-icon
span.post-meta-label= _p('post.comments') + ':'
if block
block
case whichCount
when 'Disqus'
when 'Disqusjs'
+countBlock
span.disqus-comment-count
a(href=full_url_for(page.path) + '#disqus_thread')
when 'Valine'
+countBlock
a(href=url_for(page.path) + '#post-comment' itemprop="discussionUrl")
span.valine-comment-count(data-xid=url_for(page.path) itemprop="commentCount")
when 'Waline'
+countBlock
a(href=url_for(page.path) + '#post-comment')
span.waline-comment-count(id=url_for(page.path))
when 'Gitalk'
+countBlock
a(href=url_for(page.path) + '#post-comment')
span.gitalk-comment-count
when 'Twikoo'
+countBlock
a(href=url_for(page.path) + '#post-comment')
span#twikoo-count
when 'Facebook Comments'
+countBlock
a(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,116 +0,0 @@
if theme.subtitle.enable
- let source = theme.subtitle.source
- let subtitleEffect = theme.subtitle.effect
if subtitleEffect
script(src=url_for(theme.CDN.typed))
if source == '1'
script.
let subtitleEffect = !{subtitleEffect}
fetch('https://api.ooopn.com/ciba/api.php',)
.then(function (res){
return res.json();
})
.then(function (data) {
if (subtitleEffect){
let sub = '!{theme.subtitle.sub}'.length == 0 ? new Array() : '!{theme.subtitle.sub}'.split(",");
let both = sub.unshift(data['ciba-en'],data.ciba)
let typed = new Typed("#subtitle", {
strings: sub,
startDelay: 300,
typeSpeed: 150,
loop: !{theme.subtitle.loop},
backSpeed: 50
});
}else{
document.getElementById("subtitle").innerHTML = data['ciba-en']
}
})
.catch(function (err) {
console.error(err);
})
else if source == '2'
script.
let subtitleEffect = !{subtitleEffect}
fetch('https://v1.hitokoto.cn')
.then(function (res){
return res.json();
})
.then(function (data) {
if (subtitleEffect){
let from = '出自 ' + data.from
let sub = '!{theme.subtitle.sub}'.length == 0 ? new Array() : '!{theme.subtitle.sub}'.split(",");
let both = sub.unshift(data.hitokoto,from)
let 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);
})
else if source == "3"
script(type="text/javascript" src="http://yijuzhan.com/api/word.php?m=js")
script.
let subtitleEffect = !{subtitleEffect}
let con = str[0];
if (subtitleEffect){
let from = "出自 " + str[1];
let sub = '!{theme.subtitle.sub}'.length == 0 ? new Array() : '!{theme.subtitle.sub}'.split(",");
let both = sub.unshift(con,from)
let typed = new Typed("#subtitle", {
strings: sub,
startDelay: 300,
typeSpeed: 150,
loop: !{theme.subtitle.loop},
backSpeed: 50
});
}else{
document.getElementById("subtitle").innerHTML = con
}
else if source == '4'
script(type="text/javascript" src="https://sdk.jinrishici.com/v2/browser/jinrishici.js" charset="utf-8")
script.
let subtitleEffect = !{subtitleEffect}
jinrishici.load(function(result) {
if (subtitleEffect){
let sub = '!{theme.subtitle.sub}'.length == 0 ? new Array() : '!{theme.subtitle.sub}'.split(",");
let content = result.data.content;
let both = sub.unshift(content)
let typed = new Typed("#subtitle", {
strings: sub,
startDelay: 300,
typeSpeed: 150,
loop: !{theme.subtitle.loop},
backSpeed: 50
});
}else{
document.getElementById("subtitle").innerHTML = result.data.content
}
})
else
- var subtitle = theme.subtitle.sub[0]
script.
let subtitleEffect = !{subtitleEffect}
if (subtitleEffect){
let typed = new Typed("#subtitle", {
strings: '!{theme.subtitle.sub}'.split(","),
startDelay: 300,
typeSpeed: 150,
loop: !{theme.subtitle.loop},
backSpeed: 50
})
}else{
document.getElementById("subtitle").innerHTML = '!{subtitle}'
}

View File

@@ -1,46 +1,47 @@
- var htmlClassHideAside = theme.aside.enable && theme.aside.hide ? 'hide-aside' : ''
- var hideAside = !theme.aside.enable || page.aside === false ? 'hide-aside' : ''
- var autoOpenSidebar = theme.auto_open_sidebar.enable === true ? 'on' : ''
- var pageType = is_post() ? 'post' : 'page'
doctype html
html(lang=config.language data-theme=theme.display_mode)
html(lang=config.language data-theme=theme.display_mode class=htmlClassHideAside)
head
include ./head.pug
body
if theme.fireworks && theme.fireworks.enable
canvas.fireworks
!=partial('includes/mobile-sidebar/index', {}, {cache:theme.fragment_cache})
if (is_post() && page.toc != false && theme.toc.enable)
i.fa.fa-arrow-right#toggle-sidebar(aria-hidden="true" class=autoOpenSidebar)
include ./sidebar.pug
#body-wrap
if theme.background
- var is_photo = theme.background.substring(3,0) === 'url' ? 'photo':'color'
#web_bg(data-type=is_photo)
include ./header/index.pug
if theme.preloader
!=partial('includes/loading/loading', {}, {cache: true})
if (!is_post())
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
if theme.background
#web_bg
- var footer_bg = theme.footer_bg == false ? '' : bg_img
- 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})
each item in theme.CDN_USE.js
script(src=url_for(item))
include ./additional-js.pug
!=partial('includes/sidebar', {}, {cache: true})
if page.type !== '404'
#body-wrap(class=pageType)
include ./header/index.pug
main#content-inner.layout(class=hideAside)
if body
div!= body
else
block content
if theme.aside.enable && page.aside !== false
include widget/index.pug
- var footerBg = theme.footer_bg
if (footerBg)
if (footerBg === true)
- var footer_bg = bg_img
else
- var footer_bg = theme.footer_bg.indexOf('/') !== -1 ? `background-image: url('${url_for(footerBg)}')` : `background: ${footerBg}`
else
- var footer_bg = ''
footer#footer(style=footer_bg)
!=partial('includes/footer', {}, {cache: true})
else
include ./404.pug
include ./rightside.pug
!=partial('includes/third-party/search/index', {}, {cache: true})
include ./additional-js.pug

View File

@@ -0,0 +1,13 @@
script.
var preloader = {
endLoading: () => {
document.body.style.overflow = 'auto';
document.getElementById('loading-box').classList.add("loaded")
},
initLoading: () => {
document.body.style.overflow = '';
document.getElementById('loading-box').classList.remove("loaded")
}
}
window.addEventListener('load',preloader.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

@@ -1,27 +0,0 @@
script(type="text/x-mathjax-config").
MathJax.Hub.Config({
tex2jax: {
inlineMath: [ ['$','$'], ["\\(","\\)"] ],
processEscapes: true,
skipTags: ['script', 'noscript', 'style', 'textarea', 'pre', 'code']
},
CommonHTML: {
linebreaks: { automatic: true, width: "90% container" }
},
"HTML-CSS": {
linebreaks: { automatic: true, width: "90% container" }
},
"SVG": {
linebreaks: { automatic: true, width: "90% container" }
}
});
script(type="text/x-mathjax-config").
MathJax.Hub.Queue(function() {
var all = MathJax.Hub.getAllJax(), i;
for (i=0; i < all.length; i += 1) {
all[i].SourceElement().parentNode.className += ' has-jax';
}
});
script(src=theme.CDN.mathjax)

View File

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

View File

@@ -1,53 +0,0 @@
mixin UI_NEW(posts)
- posts.each(function(article,index){
.recent-post-item
- var link = article.link || article.path
- var post_cover = article.cover
- var title = article.title || _p('no_title')
- var leftOrRight = index%2 == 0 ? 'left_radius' : 'right_radius'
- 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.lazyload(data-src=`${post_cover}` alt=title onerror=`this.onerror=null;this.src='`+ url_for(theme.lodding_bg.post_page) + `'`)
else
img.post_bg(src=`${post_cover}` alt=title onerror=`this.onerror=null;this.src='`+ url_for(theme.lodding_bg.post_page) + `'`)
.recent-post-info(class=no_cover)
a.article-title(href=url_for(link) title=title)= title
.article-meta-wrap
if (theme.post_meta.page.date_type)
if (theme.post_meta.page.date_type === 'both')
time.post-meta__date
i.fa.fa-calendar.fa-fw(aria-hidden="true")
=date(page.date, config.date_format)
span.article-meta__separator |
i.fa.fa-history.fa-fw(aria-hidden="true")
=date(page.updated, config.date_format)
else
- var date_type = theme.post_meta.post.date_type === 'updated' ? 'updated' : 'date'
time.post-meta__date #[i.fa.fa-calendar.fa-fw(aria-hidden="true")]#[=date(page[date_type], config.date_format)]
if (theme.post_meta.page.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.post_meta.page.tags && article.tags.data.length > 0)
span.article-meta.tags
span.article-meta__separator |
each item, index in article.tags.data
i.fa.fa-tag.article-meta__icon(aria-hidden="true")
a(href=url_for(item.path)).article-meta__tags #[=item.name]
if (index < article.tags.data.length - 1)
span.article-meta__link -
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

@@ -2,19 +2,19 @@ mixin articleSort(posts)
.article-sort
- 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' : ''
- let tempYear = date(article.date, 'YYYY')
- let no_cover = article.cover === false || !theme.cover.archives_enable ? 'no-article-cover' : ''
- let title = article.title || _p('no_title')
if tempYear !== year
- year = tempYear
.article-sort-item.year= year
.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=article.cover alt=article.title || 'No Title' onerror=`this.onerror=null;this.src='`+ url_for(theme.lodding_bg.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)
.article-sort-item__title= article.title || 'No Title'
a.article-sort-item-img(href=url_for(article.path) title=title)
img(src=url_for(article.cover) alt=title onerror=`this.onerror=null;this.src='${url_for(theme.error_img.post_page)}'`)
.article-sort-item-info
.article-sort-item-time
i.far.fa-calendar-alt
time.post-meta-date-created(datetime=date_xml(article.date) title=_p('post.created') + ' ' + full_date(article.date))= date(article.date, config.date_format)
a.article-sort-item-title(href=url_for(article.path) title=title)= title
- })

View File

@@ -0,0 +1,109 @@
mixin postUI(posts)
each article , index in page.posts.data
.recent-post-item
- let link = article.link || article.path
- let title = article.title || _p('no_title')
- let leftOrRight = index%2 == 0 ? 'left_radius' : 'right_radius'
- let post_cover = article.cover
- let 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)
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.sticky
span.sticky= _p('sticky')
span.article-meta__separator |
if (theme.post_meta.page.date_type)
span.post-meta-date
if (theme.post_meta.page.date_type === 'both')
i.far.fa-calendar-alt
span.article-meta-label=_p('post.created')
time.post-meta-date-created(datetime=date_xml(article.date) title=_p('post.created') + ' ' + full_date(article.date))=date(article.date, config.date_format)
span.article-meta__separator |
i.fas.fa-history
span.article-meta-label=_p('post.updated')
time.post-meta-date-updated(datetime=date_xml(article.updated) title=_p('post.updated') + ' ' + full_date(article.updated))=date(article.updated, config.date_format)
else
- let data_type_updated = theme.post_meta.page.date_type === 'updated'
- let date_type = data_type_updated ? 'updated' : 'date'
- let date_icon = data_type_updated ? 'fas fa-history' :'far fa-calendar-alt'
- let date_title = data_type_updated ? _p('post.updated') : _p('post.created')
i(class=date_icon)
span.article-meta-label=date_title
time(datetime=date_xml(article[date_type]) title=date_title + ' ' + full_date(article[date_type]))=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
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
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 #[='•']
mixin countBlockInIndex
- needLoadCountJs = true
span.article-meta
span.article-meta__separator |
i.fas.fa-comments
if block
block
span.article-meta-label= ' ' + _p('card_post_count')
if theme.comments.card_post_count
case theme.comments.use[0]
when 'Disqus'
when 'Disqusjs'
+countBlockInIndex
a(href=full_url_for(link) + '#disqus_thread')
when 'Valine'
+countBlockInIndex
a(href=url_for(link) + '#post-comment' itemprop="discussionUrl")
span.valine-comment-count(data-xid=url_for(link) itemprop="commentCount")
when 'Waline'
+countBlockInIndex
a(href=url_for(link) + '#post-comment')
span.waline-comment-count(id=url_for(link))
when 'Twikoo'
+countBlockInIndex
a.twikoo-count(href=url_for(link) + '#post-comment')
when 'Facebook Comments'
+countBlockInIndex
a(href=url_for(link) + '#post-comment')
span.fb-comments-count(data-href=urlNoIndex(article.permalink))
//- Display the article introduction on homepage
case theme.index_post_content.method
when false
- break
when 1
.content!= article.description
when 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
default
- 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.ads-wrap!=theme.ad.index

View File

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

View File

@@ -1,27 +0,0 @@
#mobile-sidebar-menus
.mobile_author_icon
img.avatar-img(src=url_for(theme.avatar.img) onerror=`onerror=null;src='${theme.lodding_bg.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
.menus_items
include ../header/menu_item.pug

View File

@@ -0,0 +1,5 @@
.category-lists
.category-title.is-center= _p('page.category')
| -
span.category-amount= site.categories.length
div!= list_categories()

View File

@@ -0,0 +1,4 @@
#article-container
if top_img === false
h1.page-title= page.title
!= page.content

View File

@@ -0,0 +1,20 @@
#article-container
if top_img === false
h1.page-title= page.title
.flink
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")
img(src=url_for(item.avatar) onerror=`this.onerror=null;this.src='` + url_for(theme.error_img.flink) + `'` alt=item.name )
span.flink-item-name= item.name
span.flink-item-desc(title=item.descr)= item.descr
!= page.content

View File

@@ -0,0 +1,5 @@
.tag-cloud-title.is-center= _p('page.tag')
| -
span.tag-cloud-amount= site.tags.length
.tag-cloud-list.is-center
!=cloudTags({source: site.tags, minfontsize: 1.2, maxfontsize: 2.1, limit: 0, unit: 'em'})

View File

@@ -1,39 +1,37 @@
-
var options = {
prev_text: '<i class="fa fa-fw fa-chevron-left" aria-hidden="true"></i>',
next_text: '<i class="fa fa-fw fa-chevron-right" aria-hidden="true"></i>',
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())
nav#pagination
div.pagination
!=paginator(options)
else
nav#pagination.pagination_post
if(page.prev)
- var hasPageNext = page.prev ? 'pull_left' : 'pull-full'
if is_post()
- let prev = theme.post_pagination === 1 ? page.prev : page.next
- let next = theme.post_pagination === 1 ? page.next : page.prev
nav#pagination.pagination-post
if(prev)
- var hasPageNext = 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.lazyload(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 pagination_cover = prev.cover === false ? prev.randomcover : prev.cover
a(href=url_for(prev.path))
img.prev-cover(src=url_for(pagination_cover) onerror=`onerror=null;src='${url_for(theme.error_img.post_page)}'` alt='cover of previous post')
.pagination-info
.label=_p('pagination.prev')
.prev_info=page.prev.title
.prev_info=prev.title
if(page.next)
- var hasPagePrev = page.prev ? 'pull_right' : 'pull-full'
- var pagination_cover = page.next.cover == false ? page.next.randomcover : page.next.cover
if(next)
- var hasPagePrev = prev ? 'pull-right' : 'pull-full'
- var pagination_cover = next.cover == false ? next.randomcover : next.cover
.next-post(class=hasPagePrev)
a(href=url_for(page.next.path))
if theme.lazyload.enable
img.next_cover.lazyload(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}'`)
a(href=url_for(next.path))
img.next-cover(src=url_for(pagination_cover) onerror=`onerror=null;src='${url_for(theme.error_img.post_page)}'` alt='cover of next post')
.pagination-info
.label=_p('pagination.next')
.next_info=page.next.title
.next_info=next.title
else
nav#pagination
.pagination
if is_home()
- options.format = 'page/%d/#content-inner'
!=paginator(options)

View File

@@ -1,13 +1,17 @@
if (theme.post_copyright && theme.post_copyright.enable && page.copyright != false)
if theme.post_copyright.enable && page.copyright !== false
- let author = page.copyright_author ? page.copyright_author : config.author
- let authorHref = page.copyright_author_href ? page.copyright_author_href : `mailto:${config.email}`
- let url = page.copyright_url ? page.copyright_url : page.permalink
- let info = page.copyright_info ? page.copyright_info : _p('post.copyright.copyright_content', theme.post_copyright.license_url, theme.post_copyright.license, config.url, config.title)
.post-copyright
.post-copyright__author
span.post-copyright-meta= _p('post.copyright.author') + ": "
span.post-copyright-info
a(href=`mailto:${config.email}`) #[=config.author]
a(href=authorHref)=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
a(href=url_for(url))= theme.post_copyright.decode ? decodeURI(url) : url
.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)
span.post-copyright-info!= info

View File

@@ -1,11 +1,13 @@
.post-reward
a.reward-button.button--primary.button--animated
i.fa.fa-qrcode
.reward-button.button--animated
i.fas.fa-qrcode
= ' ' + _p('donate')
.reward-main
ul.reward-all
each item in theme.reward.QR_code
li.reward-item
img.lazyload.post-qr-code__img(src=url_for((item.itemlist||item).img) alt=(item.itemlist||item).text)
.post-qr-code__desc=(item.itemlist||item).text
.reward-main
ul.reward-all
each item in theme.reward.QR_code
- var clickTo = item.link ? item.link : item.img
li.reward-item
a(href=url_for(clickTo) target='_blank')
img.post-qr-code-img(src=url_for(item.img) alt=item.text)
.post-qr-code-desc=item.text

View File

@@ -1,58 +0,0 @@
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.lazyload(data-src=`${post_cover}` onerror=`this.onerror=null;this.src='`+ url_for(theme.lodding_bg.post_page) + `'` alt=title)
else
img.post_bg(src=`${post_cover}` onerror=`this.onerror=null;this.src='`+ url_for(theme.lodding_bg.post_page) + `'` alt=title)
.recent-post-info(class=no_cover)
a.article-title(href=url_for(link) title=title)= title
.article-meta-wrap
if (article.top)
span.article-meta
i.fa.fa-thumb-tack.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
i.fa.fa-calendar.fa-fw(aria-hidden="true")
=date(page.date, config.date_format)
span.article-meta__separator |
i.fa.fa-history.fa-fw(aria-hidden="true")
=date(page.updated, config.date_format)
else
- var date_type = theme.post_meta.post.date_type === 'updated' ? 'updated' : 'date'
time.post-meta__date #[i.fa.fa-calendar.fa-fw(aria-hidden="true")]#[=date(page[date_type], config.date_format)]
if (theme.post_meta.page.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.post_meta.page.tags && article.tags.data.length > 0)
span.article-meta.tags
span.article-meta__separator |
each item, index in article.tags.data
i.fa.fa-tag.article-meta__icon(aria-hidden="true")
a(href=url_for(item.path)).article-meta__tags #[=item.name]
if (index < article.tags.data.length - 1)
span.article-meta__link -
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,23 +1,38 @@
section#rightside.rightside
#rightside
#rightside-config-hide
if theme.readmode.enable && is_post()
i#readmode.fa.fa-book(title=_p('rightside.readmode_title'))
if is_post()
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 theme.translate && theme.translate.enable
a#translateLink.translate_chn_to_cht(href="javascript:translatePage();" title=_p('rightside.translate_title') target="_self")= theme.translate.default
if is_post() && theme.readmode
button#readmode(type="button" title=_p('rightside.readmode_title'))
i.fas.fa-book-open
if theme.change_font_size
button#font-plus(type="button" title=_p('rightside.font_plus_title'))
i.fas.fa-plus
button#font-minus(type="button" title=_p('rightside.font_minus_title'))
i.fas.fa-minus
if theme.translate.enable
button#translateLink(type="button" title=_p('rightside.translate_title'))= theme.translate.default
if theme.darkmode.enable && theme.darkmode.button
- var lightModeIcon = theme.fontawesome_v5 && theme.fontawesome_v5.enable ? 'far fa-sun' : 'fa fa-sun-o'
- var darkModeIcon = theme.fontawesome_v5 && theme.fontawesome_v5.enable ? 'far fa-moon' : 'fa fa-moon-o'
- var display_mode = theme.display_mode == 'dark' ? lightModeIcon : darkModeIcon
i#darkmode.darkmode(class=display_mode title=_p('rightside.night_mode_title'))
button#darkmode(type="button" title=_p('rightside.night_mode_title'))
i.fas.fa-adjust
if theme.aside.enable && theme.aside.button && page.aside !== false
button#hide-aside-btn(type="button" title=_p('rightside.aside'))
i.fas.fa-arrows-alt-h
#rightside-config-show
#rightside_config(title=_p("rightside.setting"))
i.fa.fa-cog(aria-hidden="true")
if is_post() && page.comments !== false && isComment
if is_post()
if (theme.readmode || theme.translate.enable || (theme.darkmode.enable && theme.darkmode.button) || theme.change_font_size)
button#rightside_config(type="button" title=_p("rightside.setting"))
i.fas.fa-cog.fa-spin
if showToc
button#mobile-toc-button.close(type="button" title=_p("rightside.toc"))
i.fas.fa-list-ul
else if theme.translate.enable || (theme.darkmode.enable && theme.darkmode.button) || theme.change_font_size
button#rightside_config(type="button" title=_p("rightside.setting"))
i.fas.fa-cog.fa-spin
if theme.chat_btn
button#chat_btn(type="button" title=_p("rightside.chat_btn"))
i.fas.fa-sms
if commentsJsLoad
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.fas.fa-comments
button#go-up(type="button" title=_p("rightside.back_to_top"))
i.fas.fa-arrow-up

View File

@@ -1,12 +0,0 @@
#algolia-search.search-dialog
#algolia-search-title.search-dialog__title Algolia
#algolia-input-panel
#algolia-search-input
hr
#algolia-search-results
#algolia-hits
#algolia-pagination
#algolia-stats
span.search-close-button
i.fa.fa-times
.search-mask

View File

@@ -1,5 +0,0 @@
if (theme.algolia_search.enable)
include ./algolia.pug
if (theme.local_search)
if (!theme.algolia_search.enable && theme.local_search.enable)
include ./local-search.pug

View File

@@ -1,23 +0,0 @@
#local-search.search-dialog
#local-search-title.search-dialog__title=_p("local_search.label")
#local-input-panel
#local-search-input
.local-search-box
input(placeholder=_p("local_search.input_placeholder") type="text").local-search-box--input
hr
#local-search-results
#local-hits
#local-stats
#hr.local-search-stats__hr
case config.language
when "zh-CN"
span=_p("local_search.by")
| #[a(href="https://github.com/wzpan/hexo-generator-search" style={'color': '#49B1F5'}) hexo-generator-search]
| #[span=_p("local_search.powered")]
when "en"
default
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
.search-mask

View File

@@ -1,7 +0,0 @@
.post_share
if theme.addThis.enable
include ./add-this.pug
else if theme.sharejs && theme.sharejs.enable
include ./share-js.pug
else if theme.addtoany.enable
include ./addtoany.pug

View File

@@ -1,4 +0,0 @@
if (theme.sharejs && theme.sharejs.enable)
.social-share(data-image= 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,21 +1,28 @@
#sidebar
- 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)
.sidebar-toc
div.sidebar-toc__title= _p('sidebar.catalog')
div.sidebar-toc__progress
span.progress-notice= _p('sidebar.have_read')
span.progress-num 0
span.progress-percentage %
div.sidebar-toc__progress-bar
if (page.encrypt == true)
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})
#menu-mask
#sidebar-menus
.author-avatar
img.avatar-img(src=url_for(theme.avatar.img) onerror=`onerror=null;src='${theme.error_img.flink}'` alt="avatar")
.site-data
if site.posts.length
.data-item.is-center
.data-item-link
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-item-link
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-item-link
a(href=url_for(config.category_dir) + '/')
.headline= _p('aside.categories')
.length-num= site.categories.length
hr
!=partial('includes/header/menu_item', {}, {cache: true})

View File

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

View File

@@ -1 +0,0 @@
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 +0,0 @@
script(id="ribbon_piao" mobile=`${theme.canvas_ribbon_piao.mobile}` src=url_for(theme.CDN.canvas_ribbon_piao))

View File

@@ -1,3 +0,0 @@
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

@@ -0,0 +1,16 @@
script.
(() => {
const getCount = () => {
if (window.DISQUSWIDGETS === undefined) {
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);
} else {
DISQUSWIDGETS.getCount({reset: true});
}
}
window.pjax ? getCount() : window.addEventListener('load', getCount)
})()

View File

@@ -0,0 +1,15 @@
script.
(()=>{
function loadFBComment () {
if (typeof FB === 'object') FB.XFBML.parse()
else {
let ele = document.createElement('script')
ele.setAttribute('src','https://connect.facebook.net/!{theme.facebook_comments.lang}/sdk.js#xfbml=1&version=v9.0')
ele.setAttribute('async', 'true')
ele.setAttribute('defer', 'true')
ele.setAttribute('crossorigin', 'anonymous')
document.body.appendChild(ele)
}
}
window.pjax ? loadFBComment() : window.addEventListener('load', loadFBComment)
})()

View File

@@ -0,0 +1,12 @@
case theme.comments.use[0]
when 'Twikoo'
include ./twikoo.pug
when 'Disqus'
when 'Disqusjs'
include ./disqus.pug
when 'Valine'
include ./valine.pug
when 'Waline'
include ./waline.pug
when 'Facebook Comments'
include ./fb.pug

View File

@@ -0,0 +1,37 @@
script.
(() => {
const getCommentUrl = () => {
const eleGroup = document.querySelectorAll('#recent-posts .article-title')
let urlArray = []
eleGroup.forEach(i=>{
urlArray.push(i.getAttribute('href'))
})
return urlArray
}
const getCount = () => {
const runTwikoo = () => {
twikoo.getCommentsCount({
envId: '!{theme.twikoo.envId}',
region: '!{theme.twikoo.region}',
urls: getCommentUrl(),
includeReply: false
}).then(function (res) {
document.querySelectorAll('#recent-posts .twikoo-count').forEach((item,index) => {
item.innerText = res[index].count
})
}).catch(function (err) {
console.log(err)
})
}
if (typeof twikoo === 'object') {
runTwikoo()
} else {
getScript('!{theme.CDN.twikoo}').then(runTwikoo)
}
}
window.pjax ? getCount() : window.addEventListener('load', getCount)
})()

View File

@@ -0,0 +1,19 @@
script.
(() => {
function loadValine () {
function initValine () {
let initData = {
el: '#vcomment',
appId: '#{theme.valine.appId}',
appKey: '#{theme.valine.appKey}',
}
const valine = new Valine(initData)
}
if (typeof Valine === 'function') initValine()
else getScript('!{url_for(theme.CDN.valine)}').then(initValine)
}
window.pjax ? loadValine() : window.addEventListener('load', loadValine)
})()

View File

@@ -0,0 +1,18 @@
script.
(() => {
function loadWaline () {
function initWaline () {
let initData = {
el: '#waline-wrap',
serverURL: '!{theme.waline.serverURL}',
}
const waline = new Waline(initData)
}
if (typeof Waline === 'function') initWaline()
else getScript('!{url_for(theme.CDN.waline)}').then(initWaline)
}
window.pjax ? loadWaline() : window.addEventListener('load', loadWaline)
})()

View File

@@ -0,0 +1,33 @@
//- 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 chatBtnFn = () => {
var chatBtn = document.getElementById("chat_btn")
chatBtn.addEventListener("click", function(){
Chatra('openChat')
});
}
chatBtnFn()
} else {
if (!{theme.chat_hide_show}) {
function chatBtnHide () {
Chatra('hide')
}
function chatBtnShow () {
Chatra('show')
}
}
}

View File

@@ -0,0 +1,36 @@
script.
window.$crisp = [];
window.CRISP_WEBSITE_ID = "!{theme.crisp.website_id}";
(function () {
d = document;
s = d.createElement("script");
s.src = "https://client.crisp.chat/l.js";
s.async = 1;
d.getElementsByTagName("head")[0].appendChild(s);
})();
$crisp.push(["safe", true])
if (!{theme.chat_btn}) {
$crisp.push(["do", "chat:hide"])
$crisp.push(["on", "chat:closed", function() {
$crisp.push(["do", "chat:hide"])
}])
var chatBtnFn = () => {
var chatBtn = document.getElementById("chat_btn")
chatBtn.addEventListener("click", function(){
$crisp.push(["do", "chat:show"])
$crisp.push(["do", "chat:open"])
});
}
chatBtnFn()
} else {
if (!{theme.chat_hide_show}) {
function chatBtnHide () {
$crisp.push(["do", "chat:hide"])
}
function chatBtnShow () {
$crisp.push(["do", "chat:show"])
}
}
}

View File

@@ -0,0 +1,40 @@
//- 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 chatBtnFn = () => {
var chatBtn = document.getElementById("chat_btn")
chatBtn.addEventListener("click", function(){
daovoice('show')
});
}
chatBtnFn()
} 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,43 @@
if theme.chat_btn
script.
((window.gitter = {}).chat = {}).options = {
disableDefaultChat: true,
};
document.addEventListener('gitter-sidecar-ready', (e) => {
const GitterChat = e.detail.Chat
let chat
function initGitter () {
chat = new GitterChat({
room: '#{theme.gitter.room}',
activationElement: '#chat_btn'
});
}
initGitter()
if (!{theme.pjax.enable}) {
document.addEventListener('pjax:complete', () => {
chat.destroy()
initGitter()
})
}
})
else
script.
((window.gitter = {}).chat = {}).options = {
room: '#{theme.gitter.room}',
};
if (!{theme.chat_hide_show}) {
function chatBtnHide () {
document.getElementsByClassName('gitter-open-chat-button')[0].style.display= 'none'
}
function chatBtnShow () {
document.getElementsByClassName('gitter-open-chat-button')[0].style.display= 'block'
}
}
script(src="https://sidecar.gitter.im/dist/sidecar.v1.js" async defer)

View File

@@ -0,0 +1,10 @@
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
else if theme.crisp && theme.crisp.enable
include ./crisp.pug

View File

@@ -0,0 +1,41 @@
script(src=`//code.tidio.co/${theme.tidio.public_key}.js` async)
if theme.chat_btn
script.
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);
}
var chatBtnFn = () => {
document.getElementById("chat_btn").addEventListener("click", function(){
window.tidioChatApi.show();
window.tidioChatApi.open();
});
}
chatBtnFn()
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

@@ -0,0 +1,47 @@
- let disqusPageTitle = page.title.replace(/'/ig,"\\'")
script.
function loadDisqus () {
var disqus_config = function () {
this.page.url = '!{ page.permalink }'
this.page.identifier = '!{ page.path }'
this.page.title = '!{ disqusPageTitle }'
};
window.disqusReset = () => {
DISQUS.reset({
reload: true,
config: disqus_config
})
}
if (window.DISQUS) disqusReset()
else {
(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);
})();
}
}
if ('!{theme.comments.use[0]}' === 'Disqus' || !!{theme.comments.lazyload}) {
if (!{theme.comments.lazyload}) btf.loadComment(document.getElementById('disqus_thread'), loadDisqus)
else loadDisqus()
} else {
function loadOtherComment () {
loadDisqus()
}
}
if is_post() && !theme.comments.lazyload && theme.comments.count && theme.comments.use[0] === 'Disqus'
script.
if (window.DISQUSWIDGETS === undefined) {
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);
} else {
DISQUSWIDGETS.getCount({reset: true});
}

View File

@@ -0,0 +1,60 @@
- let disqusjsApi = theme.disqusjs.api || 'https://disqus.skk.moe/disqus/'
- let disqusjsPageTitle = page.title.replace(/'/ig,"\\'")
script.
function loadDisqusjs () {
function addDisqusjsCSS () {
const ele = document.createElement('link')
ele.rel = 'stylesheet'
ele.href= '!{url_for(theme.CDN.disqusjs_css)}'
document.getElementsByTagName('head')[0].appendChild(ele)
}
function initDisqusjs () {
window.DISQUS = null
new DisqusJS({
shortname: '!{theme.disqusjs.shortname}',
siteName: '!{theme.disqusjs.siteName}',
identifier: '!{ page.path }',
url: '!{ page.permalink }',
title: '!{ disqusjsPageTitle }',
api: '!{disqusjsApi}',
apikey: '!{theme.disqusjs.apikey}',
nocomment: '!{theme.disqusjs.nocomment}',
admin: '!{theme.disqusjs.admin}',
adminLabel: '!{theme.disqusjs.adminLabel}'
});
}
window.disqusReset = initDisqusjs
if (window.disqusJsLoad) initDisqusjs()
else {
addDisqusjsCSS()
getScript('!{url_for(theme.CDN.disqusjs)}').then(initDisqusjs)
window.disqusJsLoad = true
}
}
if ('!{theme.comments.use[0]}' === 'Disqusjs' || !!{theme.comments.lazyload}) {
if (!{theme.comments.lazyload}) btf.loadComment(document.getElementById('disqus_thread'), loadDisqusjs)
else loadDisqusjs()
}
else {
function loadOtherComment () {
loadDisqusjs()
}
}
if is_post() && !theme.comments.lazyload && theme.comments.count && theme.comments.use[0] === 'Disqusjs'
script.
if (window.DISQUSWIDGETS === undefined) {
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);
} else {
DISQUSWIDGETS.getCount({reset: true});
}

View File

@@ -0,0 +1,26 @@
#fb-root
script.
function loadFBComment () {
var themeNow = document.documentElement.getAttribute('data-theme') === 'dark' ? 'dark' : 'light'
document.getElementsByClassName('fb-comments')[0].setAttribute('data-colorscheme',themeNow)
if (typeof FB === 'object') FB.XFBML.parse()
else {
let ele = document.createElement('script')
ele.setAttribute('src','https://connect.facebook.net/!{theme.facebook_comments.lang}/sdk.js#xfbml=1&version=v9.0')
ele.setAttribute('async', 'true')
ele.setAttribute('defer', 'true')
ele.setAttribute('crossorigin', 'anonymous')
document.getElementById('fb-root').insertAdjacentElement('afterbegin',ele)
}
}
if ('!{theme.comments.use[0]}' === 'Facebook Comments' || !!{theme.comments.lazyload}) {
if (!{theme.comments.lazyload}) btf.loadComment(document.querySelector('#post-comment .fb-comments'), loadFBComment)
else loadFBComment()
} else {
function loadOtherComment () {
loadFBComment()
}
}

View File

@@ -0,0 +1,53 @@
script.
function addGitalkSource () {
const ele = document.createElement('link')
ele.rel = 'stylesheet'
ele.href= '!{url_for(theme.CDN.gitalk_css)}'
document.getElementsByTagName('head')[0].appendChild(ele)
}
function loadGitalk () {
function initGitalk () {
var gitalk = new Gitalk(Object.assign({
clientID: '!{theme.gitalk.client_id}',
clientSecret: '!{theme.gitalk.client_secret}',
repo: '!{theme.gitalk.repo}',
owner: '!{theme.gitalk.owner}',
admin: ['!{theme.gitalk.admin}'],
id: '!{md5(page.path)}',
language: '!{theme.gitalk.language}',
perPage: !{theme.gitalk.perPage},
distractionFreeMode: !{theme.gitalk.distractionFreeMode},
pagerDirection: '!{theme.gitalk.pagerDirection}',
createIssueManually: !{theme.gitalk.createIssueManually},
updateCountCallback: commentCount
},!{JSON.stringify(theme.gitalk.option)}))
gitalk.render('gitalk-container')
}
if (typeof Gitalk === 'function') initGitalk()
else {
addGitalkSource()
getScript('!{url_for(theme.CDN.gitalk)}').then(initGitalk)
}
}
function commentCount(n){
let isCommentCount = document.querySelector('#post-meta .gitalk-comment-count')
if (isCommentCount) {
isCommentCount.innerHTML= n
}
}
if ('!{theme.comments.use[0]}' === 'Gitalk' || !!{theme.comments.lazyload}) {
if (!{theme.comments.lazyload}) btf.loadComment(document.getElementById('gitalk-container'), loadGitalk)
else loadGitalk()
} else {
function loadOtherComment () {
loadGitalk()
}
}

View File

@@ -0,0 +1,40 @@
- let defaultComment = theme.comments.use[0]
hr
#post-comment
.comment-head
.comment-headline
i.fas.fa-comments.fa-fw
span= ' ' + _p('comment')
if theme.comments.use.length > 1
#comment-switch
span.first-comment=defaultComment
span.switch-btn
span.second-comment=theme.comments.use[1]
.comment-wrap
each name in theme.comments.use
div
case name
when 'Disqus'
#disqus_thread
when 'Valine'
#vcomment.vcomment
when 'Disqusjs'
#disqus_thread
when 'Livere'
#lv-container(data-id="city" data-uid=theme.livere.uid)
when 'Gitalk'
#gitalk-container
when 'Utterances'
#utterances-wrap
when 'Twikoo'
#twikoo-wrap
when 'Waline'
#waline-wrap
when 'Facebook Comments'
.fb-comments(data-colorscheme = theme.display_mode === 'dark' ? 'dark' : 'light'
data-numposts= theme.facebook_comments.pageSize || 10
data-order-by= theme.facebook_comments.order_by || 'social'
data-width="100%")

View File

@@ -0,0 +1,20 @@
each name in theme.comments.use
case name
when 'Valine'
!=partial('includes/third-party/comments/valine', {}, {cache: true})
when 'Disqus'
include ./disqus.pug
when 'Disqusjs'
include ./disqusjs.pug
when 'Livere'
!=partial('includes/third-party/comments/livere', {}, {cache: true})
when 'Gitalk'
include ./gitalk.pug
when 'Utterances'
!=partial('includes/third-party/comments/utterances', {}, {cache: true})
when 'Twikoo'
!=partial('includes/third-party/comments/twikoo', {}, {cache: true})
when 'Waline'
!=partial('includes/third-party/comments/waline', {}, {cache: true})
when 'Facebook Comments'
!=partial('includes/third-party/comments/facebook_comments', {}, {cache: true})

View File

@@ -0,0 +1,26 @@
script.
function loadLivere () {
if (typeof LivereTower === 'object') {
window.LivereTower.init()
}
else {
(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');
}
}
if ('!{theme.comments.use[0]}' === 'Livere' || !!{theme.comments.lazyload}) {
if (!{theme.comments.lazyload}) btf.loadComment(document.getElementById('lv-container'), loadLivere)
else loadLivere()
}
else {
function loadOtherComment () {
loadLivere()
}
}

View File

@@ -0,0 +1,45 @@
script.
(()=>{
const $countDom = document.getElementById('twikoo-count')
const init = () => {
twikoo.init(Object.assign({
el: '#twikoo-wrap',
envId: '!{theme.twikoo.envId}',
region: '!{theme.twikoo.region}'
}, !{JSON.stringify(theme.twikoo.option)}))
}
const getCount = () => {
twikoo.getCommentsCount({
envId: '!{theme.twikoo.envId}',
region: '!{theme.twikoo.region}',
urls: [window.location.pathname],
includeReply: false
}).then(function (res) {
$countDom.innerText = res[0].count
}).catch(function (err) {
console.error(err);
});
}
const loadTwikoo = (bool = false) => {
if (typeof twikoo === 'object') {
init()
bool && $countDom && setTimeout(getCount,0)
} else {
getScript('!{theme.CDN.twikoo}').then(()=> {
init()
bool && $countDom && setTimeout(getCount,0)
})
}
}
if ('!{theme.comments.use[0]}' === 'Twikoo' || !!{theme.comments.lazyload}) {
if (!{theme.comments.lazyload}) btf.loadComment(document.getElementById('twikoo-wrap'), loadTwikoo)
else loadTwikoo(true)
} else {
window.loadOtherComment = () => {
loadTwikoo()
}
}
})()

View File

@@ -0,0 +1,34 @@
script.
function loadUtterances () {
let ele = document.createElement('script')
ele.setAttribute('id', 'utterances_comment')
ele.setAttribute('src', '!{url_for(theme.CDN.utterances)}')
ele.setAttribute('repo', '!{theme.utterances.repo}')
ele.setAttribute('issue-term', '!{theme.utterances.issue_term}')
let nowTheme = document.documentElement.getAttribute('data-theme') === 'dark' ? '#{theme.utterances.dark_theme}' : '#{theme.utterances.light_theme}'
ele.setAttribute('theme', nowTheme)
ele.setAttribute('crossorigin', 'anonymous')
ele.setAttribute('async', 'true')
document.getElementById('utterances-wrap').insertAdjacentElement('afterbegin',ele)
}
function utterancesTheme () {
if (document.querySelector('.utterances-frame')) {
const 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');
}
}
if ('!{theme.comments.use[0]}' === 'Utterances' || !!{theme.comments.lazyload}) {
if (!{theme.comments.lazyload}) btf.loadComment(document.getElementById('utterances-wrap'), loadUtterances)
else loadUtterances()
} else {
function loadOtherComment () {
loadUtterances()
}
}

View File

@@ -0,0 +1,41 @@
- let emojiMaps = '""'
if site.data.valine
- emojiMaps = JSON.stringify(site.data.valine)
script.
function loadValine () {
function initValine () {
const valine = new Valine(Object.assign({
el: '#vcomment',
appId: '#{theme.valine.appId}',
appKey: '#{theme.valine.appKey}',
placeholder: '#{theme.valine.placeholder}',
avatar: '#{theme.valine.avatar}',
meta: '#{theme.valine.guest_info }'.split(','),
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},
path: window.location.pathname,
requiredFields: [!{theme.valine.requiredFields ? JSON.stringify(theme.valine.requiredFields).split(',') : ''}],
visitor: #{theme.valine.visitor}
}, !{JSON.stringify(theme.valine.option)}))
}
if (typeof Valine === 'function') initValine()
else getScript('!{url_for(theme.CDN.valine)}').then(initValine)
}
if ('!{theme.comments.use[0]}' === 'Valine' || !!{theme.comments.lazyload}) {
if (!{theme.comments.lazyload}) btf.loadComment(document.getElementById('vcomment'),loadValine)
else setTimeout(loadValine, 0)
} else {
function loadOtherComment () {
loadValine()
}
}

View File

@@ -0,0 +1,32 @@
- let emojiMaps = '""'
if site.data.waline
- emojiMaps = JSON.stringify(site.data.waline)
script.
function loadWaline () {
function initWaline () {
const waline = new Waline(Object.assign({
el: '#waline-wrap',
serverURL: '!{theme.waline.serverURL}',
avatar: '#{theme.waline.avatar}',
path: location.pathname,
emojiCDN: '#{theme.waline.emojiCDN}',
emojiMaps: !{emojiMaps},
visitor: #{theme.waline.visitor}
}, !{JSON.stringify(theme.waline.option)}))
}
if (typeof Waline === 'function') initWaline()
else getScript('!{url_for(theme.CDN.waline)}').then(initWaline)
}
if ('!{theme.comments.use[0]}' === 'Waline' || !!{theme.comments.lazyload}) {
if (!{theme.comments.lazyload}) btf.loadComment(document.getElementById('waline-wrap'),loadWaline)
else setTimeout(loadWaline, 0)
} else {
function loadOtherComment () {
loadWaline()
}
}

35
layout/includes/third-party/effect.pug vendored Normal file
View File

@@ -0,0 +1,35 @@
if theme.fireworks && theme.fireworks.enable
canvas.fireworks(mobile=`${theme.fireworks.mobile}`)
script(src=url_for(theme.CDN.fireworks))
if (theme.canvas_ribbon && theme.canvas_ribbon.enable)
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}`)
if (theme.canvas_fluttering_ribbon && theme.canvas_fluttering_ribbon.enable)
script(defer id="fluttering_ribbon" mobile=`${theme.canvas_fluttering_ribbon.mobile}` src=url_for(theme.CDN.canvas_fluttering_ribbon))
if (theme.canvas_nest && theme.canvas_nest.enable)
script#canvas_nest(defer 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))
if theme.activate_power_mode.enable
script(src=url_for(theme.CDN.activate_power_mode))
script.
POWERMODE.colorful = !{theme.activate_power_mode.colorful};
POWERMODE.shake = !{theme.activate_power_mode.shake};
POWERMODE.mobile = !{theme.activate_power_mode.mobile};
document.body.addEventListener('input', POWERMODE);
//- 鼠標特效
if theme.click_heart && theme.click_heart.enable
script#click-heart(src=url_for(theme.CDN.click_heart) async mobile=`${theme.click_heart.mobile}`)
if theme.ClickShowText && theme.ClickShowText.enable
script#click-show-text(
src= url_for(theme.CDN.ClickShowText)
data-mobile= `${theme.ClickShowText.mobile}`
data-text= theme.ClickShowText.text.join(",")
data-fontsize= theme.ClickShowText.fontSize
data-random= `${theme.ClickShowText.random}`
async
)

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