From e68de0090bbab259a6bd1f04078bb549377e698f Mon Sep 17 00:00:00 2001 From: CCKNBC Date: Sat, 3 Oct 2020 22:31:07 +0800 Subject: [PATCH] =?UTF-8?q?2020/10/03=20=E5=91=A8=E5=85=AD=2022:30:57.47:?= =?UTF-8?q?=20Updated=20By=20CCKNBC=20Local?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/ISSUE_TEMPLATE/comment.md | 18 + .github/workflows/Update Blog Yun Site.yml | 74 + .gitignore | 7 + .gitlab-ci.yml | 18 + LICENSE | 427 +++++ _admin-config.yml | 0 _config.yml | 185 +++ cmd.exe | Bin 0 -> 289792 bytes config | 16 + git update.bat | 3 + hexo cl.bat | 1 + hexo d.bat | 1 + hexo g.bat | 1 + hexo s.bat | 1 + package.json | 37 + scaffolds/draft.md | 4 + scaffolds/page.md | 4 + scaffolds/post.md | 5 + scripts/auto_open.js | 4 + source/.github/ISSUE_TEMPLATE/comment.md | 18 + source/.github/workflows/sync.yml | 30 + source/404.html | 14 + source/LICENSE | 427 +++++ ...45\345\233\264\345\220\215\345\215\225.md" | 1077 +++++++++++++ ...45\344\270\216\346\217\220\345\217\226.md" | 371 +++++ ...37\344\272\247\345\256\236\344\271\240.md" | 250 +++ ...00\345\216\206\346\250\241\346\235\277.md" | 240 +++ ...64\346\226\260\344\270\255\357\274\211.md" | 937 +++++++++++ ...30\346\264\273\347\233\221\346\216\247.md" | 88 ++ ...12\345\244\251\347\263\273\347\273\237.md" | 72 + ...01\347\232\204\345\256\236\347\216\260.md" | 108 ++ source/about/index.md | 8 + source/categories/index.md | 4 + source/comments/index.md | 12 + source/google7787a6577761be93.html | 1 + source/links/index.md | 28 + source/robots.txt | 42 + source/tags/index.md | 4 + themes/yun/.gitignore | 5 + themes/yun/_config.yml | 718 +++++++++ themes/yun/_vendors.yml | 50 + themes/yun/docs/.vuepress/assets/icons.json | 83 + .../docs/.vuepress/components/DisplayIcon.vue | 66 + themes/yun/docs/.vuepress/config.js | 129 ++ themes/yun/docs/.vuepress/styles/index.styl | 5 + themes/yun/docs/.vuepress/styles/palette.styl | 1 + themes/yun/docs/README.md | 21 + themes/yun/docs/about.md | 120 ++ themes/yun/docs/demo.md | 186 +++ themes/yun/docs/en/README.md | 21 + themes/yun/docs/en/about.md | 107 ++ themes/yun/docs/en/guide/README.md | 175 +++ .../en/guide/additional-package-support.md | 366 +++++ themes/yun/docs/en/guide/config.md | 1369 ++++++++++++++++ themes/yun/docs/en/guide/faq.md | 62 + themes/yun/docs/en/guide/icon.md | 65 + themes/yun/docs/en/guide/page.md | 394 +++++ .../yun/docs/en/guide/third-party-support.md | 342 ++++ themes/yun/docs/guide/README.md | 185 +++ .../docs/guide/additional-package-support.md | 383 +++++ themes/yun/docs/guide/config.md | 1399 +++++++++++++++++ themes/yun/docs/guide/faq.md | 68 + themes/yun/docs/guide/icon.md | 64 + themes/yun/docs/guide/migrate.md | 9 + themes/yun/docs/guide/page.md | 469 ++++++ themes/yun/docs/guide/third-party-support.md | 392 +++++ themes/yun/languages/default.yml | 1 + themes/yun/languages/en.yml | 96 ++ themes/yun/languages/ja.yml | 96 ++ themes/yun/languages/zh-CN.yml | 95 ++ themes/yun/layout/404.pug | 31 + themes/yun/layout/_mixin/icon.pug | 10 + themes/yun/layout/_mixin/index.pug | 2 + themes/yun/layout/_mixin/page-header.pug | 8 + themes/yun/layout/_mixin/post-collapse.pug | 32 + themes/yun/layout/_partial/background.pug | 21 + themes/yun/layout/_partial/banner.pug | 10 + themes/yun/layout/_partial/footer.pug | 53 + themes/yun/layout/_partial/head.pug | 88 ++ themes/yun/layout/_partial/layout.pug | 43 + themes/yun/layout/_partial/pagination.pug | 10 + .../layout/_partial/post/post-classify.pug | 22 + .../layout/_partial/post/post-copyright.pug | 33 + themes/yun/layout/_partial/post/post-edit.pug | 2 + themes/yun/layout/_partial/post/post-meta.pug | 110 ++ themes/yun/layout/_partial/post/post-nav.pug | 17 + .../yun/layout/_partial/post/post-schema.pug | 6 + themes/yun/layout/_partial/post/reward.pug | 18 + themes/yun/layout/_partial/recent-posts.pug | 57 + themes/yun/layout/_partial/sidebar.pug | 82 + themes/yun/layout/_partial/sidebar/info.pug | 13 + .../_third-party/adsense/google-adsense.pug | 1 + .../_third-party/analytics/busuanzi.pug | 14 + .../analytics/google-analytics.pug | 22 + themes/yun/layout/_third-party/aplayer.pug | 4 + themes/yun/layout/_third-party/cdn.pug | 61 + .../layout/_third-party/comments/disqus.pug | 31 + .../layout/_third-party/comments/disqusjs.pug | 12 + .../_third-party/comments/github-issues.pug | 1 + .../layout/_third-party/comments/index.pug | 21 + .../layout/_third-party/comments/livere.pug | 10 + .../_third-party/comments/minivaline.pug | 9 + .../_third-party/comments/utterances.pug | 11 + .../layout/_third-party/comments/valine.pug | 14 + .../layout/_third-party/google-tagmanager.pug | 4 + themes/yun/layout/_third-party/index.pug | 14 + .../yun/layout/_third-party/lightgallery.pug | 10 + themes/yun/layout/_third-party/math/index.pug | 9 + themes/yun/layout/_third-party/math/katex.pug | 18 + themes/yun/layout/_third-party/pjax.pug | 2 + .../layout/_third-party/seo/baidu-push.pug | 13 + themes/yun/layout/_widget/aplayer.pug | 25 + themes/yun/layout/_widget/back-to-top.pug | 4 + themes/yun/layout/_widget/cloud.pug | 9 + themes/yun/layout/_widget/index.pug | 11 + themes/yun/layout/_widget/mourn.pug | 7 + themes/yun/layout/_widget/notice.pug | 2 + themes/yun/layout/_widget/say.pug | 6 + .../layout/_widget/search/algolia-search.pug | 6 + themes/yun/layout/_widget/search/index.pug | 57 + .../layout/_widget/search/local-search.pug | 1 + themes/yun/layout/archive.pug | 10 + themes/yun/layout/category.pug | 8 + themes/yun/layout/gallery.pug | 41 + themes/yun/layout/girls.pug | 52 + themes/yun/layout/index.pug | 17 + themes/yun/layout/links.pug | 49 + themes/yun/layout/page.pug | 63 + themes/yun/layout/post.pug | 34 + themes/yun/layout/slide.pug | 44 + themes/yun/layout/tag.pug | 8 + themes/yun/package.json | 32 + themes/yun/scripts/events/config.js | 53 + themes/yun/scripts/events/index.js | 11 + themes/yun/scripts/events/vendors.js | 10 + themes/yun/scripts/filters/index.js | 14 + themes/yun/scripts/helpers/encrypt.js | 4 + themes/yun/scripts/helpers/engine.js | 13 + themes/yun/scripts/helpers/index.js | 42 + themes/yun/scripts/helpers/yun-config.js | 86 + themes/yun/scripts/injector/index.js | 0 themes/yun/source/Yun.png | Bin 0 -> 3745 bytes themes/yun/source/css/_components/button.styl | 81 + themes/yun/source/css/_components/card.styl | 10 + themes/yun/source/css/_components/menu.styl | 3 + .../css/_components/post/post-card.styl | 92 ++ .../css/_components/post/post-collapse.styl | 120 ++ .../css/_components/post/post-header.styl | 69 + .../css/_components/post/post-markdown.styl | 6 + .../source/css/_components/post/post-nav.styl | 62 + .../css/_components/post/post-reward.styl | 47 + .../yun/source/css/_components/scrollbar.styl | 26 + .../css/_components/sidebar/hamburger.styl | 124 ++ .../css/_components/sidebar/sidebar-nav.styl | 28 + .../css/_components/sidebar/sidebar-toc.styl | 48 + .../css/_components/sidebar/sidebar.styl | 136 ++ .../_components/sidebar/site-overview.styl | 130 ++ themes/yun/source/css/_components/ui.styl | 88 ++ themes/yun/source/css/_extend/albums.styl | 120 ++ themes/yun/source/css/_extend/girls.styl | 65 + themes/yun/source/css/_global/dark.styl | 98 ++ themes/yun/source/css/_global/index.styl | 84 + themes/yun/source/css/_global/reset.styl | 84 + themes/yun/source/css/_layout/banner.styl | 213 +++ themes/yun/source/css/_layout/footer.styl | 60 + themes/yun/source/css/_layout/grid.styl | 19 + themes/yun/source/css/_layout/links.styl | 69 + themes/yun/source/css/_layout/main.styl | 3 + themes/yun/source/css/_layout/page.styl | 102 ++ themes/yun/source/css/_layout/pagination.styl | 40 + themes/yun/source/css/_layout/post.styl | 101 ++ themes/yun/source/css/_mixins/base.styl | 54 + themes/yun/source/css/_mixins/helper.styl | 3 + themes/yun/source/css/_variables/_base.styl | 28 + themes/yun/source/css/_variables/_colors.styl | 29 + .../yun/source/css/_widget/back-to-top.styl | 30 + themes/yun/source/css/_widget/comment.styl | 27 + themes/yun/source/css/_widget/index.styl | 17 + themes/yun/source/css/_widget/notice.styl | 18 + themes/yun/source/css/_widget/say.styl | 18 + .../css/_widget/search/algolia-search.styl | 98 ++ .../yun/source/css/_widget/search/index.styl | 78 + .../css/_widget/search/local-search.styl | 38 + themes/yun/source/css/hexo-theme-yun.styl | 54 + themes/yun/source/js/gallery-decrypt.js | 47 + themes/yun/source/js/hexo-theme-yun.js | 42 + themes/yun/source/js/pjax.js | 15 + themes/yun/source/js/say.js | 36 + themes/yun/source/js/search/algolia-search.js | 99 ++ themes/yun/source/js/search/local-search.js | 141 ++ themes/yun/source/js/sidebar.js | 100 ++ themes/yun/source/js/ui/banner.js | 53 + themes/yun/source/js/ui/fireworks.js | 159 ++ themes/yun/source/js/ui/mode.js | 110 ++ themes/yun/source/js/utils.js | 15 + themes/yun/source/yun.ico | Bin 0 -> 1208 bytes themes/yun/source/yun.svg | 21 + 197 files changed, 17205 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/comment.md create mode 100644 .github/workflows/Update Blog Yun Site.yml create mode 100644 .gitignore create mode 100644 .gitlab-ci.yml create mode 100644 LICENSE create mode 100644 _admin-config.yml create mode 100644 _config.yml create mode 100644 cmd.exe create mode 100644 config create mode 100644 git update.bat create mode 100644 hexo cl.bat create mode 100644 hexo d.bat create mode 100644 hexo g.bat create mode 100644 hexo s.bat create mode 100644 package.json create mode 100644 scaffolds/draft.md create mode 100644 scaffolds/page.md create mode 100644 scaffolds/post.md create mode 100644 scripts/auto_open.js create mode 100644 source/.github/ISSUE_TEMPLATE/comment.md create mode 100644 source/.github/workflows/sync.yml create mode 100644 source/404.html create mode 100644 source/LICENSE create mode 100644 "source/_posts/\345\217\260\346\271\276/\347\254\25455\345\261\212\351\207\221\351\222\237\345\245\226\345\205\245\345\233\264\345\220\215\345\215\225.md" create mode 100644 "source/_posts/\345\255\246\344\271\240/\346\225\260\345\255\227\346\260\264\345\215\260\347\232\204\345\265\214\345\205\245\344\270\216\346\217\220\345\217\226.md" create mode 100644 "source/_posts/\345\255\246\344\271\240/\347\224\237\344\272\247\345\256\236\344\271\240.md" create mode 100644 "source/_posts/\345\255\246\344\271\240/\347\256\200\345\216\206\346\250\241\346\235\277.md" create mode 100644 "source/_posts/\346\212\200\346\234\257/HEXO\346\212\230\350\205\276\357\274\210\346\214\201\347\273\255\346\233\264\346\226\260\344\270\255\357\274\211.md" create mode 100644 "source/_posts/\346\212\200\346\234\257/Uptime\345\205\215\350\264\271\347\275\221\347\253\231\345\255\230\346\264\273\347\233\221\346\216\247.md" create mode 100644 "source/_posts/\346\212\200\346\234\257/\346\210\221\344\270\272\344\273\200\344\271\210\351\200\211\346\213\251\344\272\206Tidio\345\201\232\350\201\212\345\244\251\347\263\273\347\273\237.md" create mode 100644 "source/_posts/\346\212\200\346\234\257/\347\256\200\345\215\225\346\265\217\350\247\210\345\231\250\346\233\264\346\226\260\346\216\250\351\200\201\347\232\204\345\256\236\347\216\260.md" create mode 100644 source/about/index.md create mode 100644 source/categories/index.md create mode 100644 source/comments/index.md create mode 100644 source/google7787a6577761be93.html create mode 100644 source/links/index.md create mode 100644 source/robots.txt create mode 100644 source/tags/index.md create mode 100644 themes/yun/.gitignore create mode 100644 themes/yun/_config.yml create mode 100644 themes/yun/_vendors.yml create mode 100644 themes/yun/docs/.vuepress/assets/icons.json create mode 100644 themes/yun/docs/.vuepress/components/DisplayIcon.vue create mode 100644 themes/yun/docs/.vuepress/config.js create mode 100644 themes/yun/docs/.vuepress/styles/index.styl create mode 100644 themes/yun/docs/.vuepress/styles/palette.styl create mode 100644 themes/yun/docs/README.md create mode 100644 themes/yun/docs/about.md create mode 100644 themes/yun/docs/demo.md create mode 100644 themes/yun/docs/en/README.md create mode 100644 themes/yun/docs/en/about.md create mode 100644 themes/yun/docs/en/guide/README.md create mode 100644 themes/yun/docs/en/guide/additional-package-support.md create mode 100644 themes/yun/docs/en/guide/config.md create mode 100644 themes/yun/docs/en/guide/faq.md create mode 100644 themes/yun/docs/en/guide/icon.md create mode 100644 themes/yun/docs/en/guide/page.md create mode 100644 themes/yun/docs/en/guide/third-party-support.md create mode 100644 themes/yun/docs/guide/README.md create mode 100644 themes/yun/docs/guide/additional-package-support.md create mode 100644 themes/yun/docs/guide/config.md create mode 100644 themes/yun/docs/guide/faq.md create mode 100644 themes/yun/docs/guide/icon.md create mode 100644 themes/yun/docs/guide/migrate.md create mode 100644 themes/yun/docs/guide/page.md create mode 100644 themes/yun/docs/guide/third-party-support.md create mode 100644 themes/yun/languages/default.yml create mode 100644 themes/yun/languages/en.yml create mode 100644 themes/yun/languages/ja.yml create mode 100644 themes/yun/languages/zh-CN.yml create mode 100644 themes/yun/layout/404.pug create mode 100644 themes/yun/layout/_mixin/icon.pug create mode 100644 themes/yun/layout/_mixin/index.pug create mode 100644 themes/yun/layout/_mixin/page-header.pug create mode 100644 themes/yun/layout/_mixin/post-collapse.pug create mode 100644 themes/yun/layout/_partial/background.pug create mode 100644 themes/yun/layout/_partial/banner.pug create mode 100644 themes/yun/layout/_partial/footer.pug create mode 100644 themes/yun/layout/_partial/head.pug create mode 100644 themes/yun/layout/_partial/layout.pug create mode 100644 themes/yun/layout/_partial/pagination.pug create mode 100644 themes/yun/layout/_partial/post/post-classify.pug create mode 100644 themes/yun/layout/_partial/post/post-copyright.pug create mode 100644 themes/yun/layout/_partial/post/post-edit.pug create mode 100644 themes/yun/layout/_partial/post/post-meta.pug create mode 100644 themes/yun/layout/_partial/post/post-nav.pug create mode 100644 themes/yun/layout/_partial/post/post-schema.pug create mode 100644 themes/yun/layout/_partial/post/reward.pug create mode 100644 themes/yun/layout/_partial/recent-posts.pug create mode 100644 themes/yun/layout/_partial/sidebar.pug create mode 100644 themes/yun/layout/_partial/sidebar/info.pug create mode 100644 themes/yun/layout/_third-party/adsense/google-adsense.pug create mode 100644 themes/yun/layout/_third-party/analytics/busuanzi.pug create mode 100644 themes/yun/layout/_third-party/analytics/google-analytics.pug create mode 100644 themes/yun/layout/_third-party/aplayer.pug create mode 100644 themes/yun/layout/_third-party/cdn.pug create mode 100644 themes/yun/layout/_third-party/comments/disqus.pug create mode 100644 themes/yun/layout/_third-party/comments/disqusjs.pug create mode 100644 themes/yun/layout/_third-party/comments/github-issues.pug create mode 100644 themes/yun/layout/_third-party/comments/index.pug create mode 100644 themes/yun/layout/_third-party/comments/livere.pug create mode 100644 themes/yun/layout/_third-party/comments/minivaline.pug create mode 100644 themes/yun/layout/_third-party/comments/utterances.pug create mode 100644 themes/yun/layout/_third-party/comments/valine.pug create mode 100644 themes/yun/layout/_third-party/google-tagmanager.pug create mode 100644 themes/yun/layout/_third-party/index.pug create mode 100644 themes/yun/layout/_third-party/lightgallery.pug create mode 100644 themes/yun/layout/_third-party/math/index.pug create mode 100644 themes/yun/layout/_third-party/math/katex.pug create mode 100644 themes/yun/layout/_third-party/pjax.pug create mode 100644 themes/yun/layout/_third-party/seo/baidu-push.pug create mode 100644 themes/yun/layout/_widget/aplayer.pug create mode 100644 themes/yun/layout/_widget/back-to-top.pug create mode 100644 themes/yun/layout/_widget/cloud.pug create mode 100644 themes/yun/layout/_widget/index.pug create mode 100644 themes/yun/layout/_widget/mourn.pug create mode 100644 themes/yun/layout/_widget/notice.pug create mode 100644 themes/yun/layout/_widget/say.pug create mode 100644 themes/yun/layout/_widget/search/algolia-search.pug create mode 100644 themes/yun/layout/_widget/search/index.pug create mode 100644 themes/yun/layout/_widget/search/local-search.pug create mode 100644 themes/yun/layout/archive.pug create mode 100644 themes/yun/layout/category.pug create mode 100644 themes/yun/layout/gallery.pug create mode 100644 themes/yun/layout/girls.pug create mode 100644 themes/yun/layout/index.pug create mode 100644 themes/yun/layout/links.pug create mode 100644 themes/yun/layout/page.pug create mode 100644 themes/yun/layout/post.pug create mode 100644 themes/yun/layout/slide.pug create mode 100644 themes/yun/layout/tag.pug create mode 100644 themes/yun/package.json create mode 100644 themes/yun/scripts/events/config.js create mode 100644 themes/yun/scripts/events/index.js create mode 100644 themes/yun/scripts/events/vendors.js create mode 100644 themes/yun/scripts/filters/index.js create mode 100644 themes/yun/scripts/helpers/encrypt.js create mode 100644 themes/yun/scripts/helpers/engine.js create mode 100644 themes/yun/scripts/helpers/index.js create mode 100644 themes/yun/scripts/helpers/yun-config.js create mode 100644 themes/yun/scripts/injector/index.js create mode 100644 themes/yun/source/Yun.png create mode 100644 themes/yun/source/css/_components/button.styl create mode 100644 themes/yun/source/css/_components/card.styl create mode 100644 themes/yun/source/css/_components/menu.styl create mode 100644 themes/yun/source/css/_components/post/post-card.styl create mode 100644 themes/yun/source/css/_components/post/post-collapse.styl create mode 100644 themes/yun/source/css/_components/post/post-header.styl create mode 100644 themes/yun/source/css/_components/post/post-markdown.styl create mode 100644 themes/yun/source/css/_components/post/post-nav.styl create mode 100644 themes/yun/source/css/_components/post/post-reward.styl create mode 100644 themes/yun/source/css/_components/scrollbar.styl create mode 100644 themes/yun/source/css/_components/sidebar/hamburger.styl create mode 100644 themes/yun/source/css/_components/sidebar/sidebar-nav.styl create mode 100644 themes/yun/source/css/_components/sidebar/sidebar-toc.styl create mode 100644 themes/yun/source/css/_components/sidebar/sidebar.styl create mode 100644 themes/yun/source/css/_components/sidebar/site-overview.styl create mode 100644 themes/yun/source/css/_components/ui.styl create mode 100644 themes/yun/source/css/_extend/albums.styl create mode 100644 themes/yun/source/css/_extend/girls.styl create mode 100644 themes/yun/source/css/_global/dark.styl create mode 100644 themes/yun/source/css/_global/index.styl create mode 100644 themes/yun/source/css/_global/reset.styl create mode 100644 themes/yun/source/css/_layout/banner.styl create mode 100644 themes/yun/source/css/_layout/footer.styl create mode 100644 themes/yun/source/css/_layout/grid.styl create mode 100644 themes/yun/source/css/_layout/links.styl create mode 100644 themes/yun/source/css/_layout/main.styl create mode 100644 themes/yun/source/css/_layout/page.styl create mode 100644 themes/yun/source/css/_layout/pagination.styl create mode 100644 themes/yun/source/css/_layout/post.styl create mode 100644 themes/yun/source/css/_mixins/base.styl create mode 100644 themes/yun/source/css/_mixins/helper.styl create mode 100644 themes/yun/source/css/_variables/_base.styl create mode 100644 themes/yun/source/css/_variables/_colors.styl create mode 100644 themes/yun/source/css/_widget/back-to-top.styl create mode 100644 themes/yun/source/css/_widget/comment.styl create mode 100644 themes/yun/source/css/_widget/index.styl create mode 100644 themes/yun/source/css/_widget/notice.styl create mode 100644 themes/yun/source/css/_widget/say.styl create mode 100644 themes/yun/source/css/_widget/search/algolia-search.styl create mode 100644 themes/yun/source/css/_widget/search/index.styl create mode 100644 themes/yun/source/css/_widget/search/local-search.styl create mode 100644 themes/yun/source/css/hexo-theme-yun.styl create mode 100644 themes/yun/source/js/gallery-decrypt.js create mode 100644 themes/yun/source/js/hexo-theme-yun.js create mode 100644 themes/yun/source/js/pjax.js create mode 100644 themes/yun/source/js/say.js create mode 100644 themes/yun/source/js/search/algolia-search.js create mode 100644 themes/yun/source/js/search/local-search.js create mode 100644 themes/yun/source/js/sidebar.js create mode 100644 themes/yun/source/js/ui/banner.js create mode 100644 themes/yun/source/js/ui/fireworks.js create mode 100644 themes/yun/source/js/ui/mode.js create mode 100644 themes/yun/source/js/utils.js create mode 100644 themes/yun/source/yun.ico create mode 100644 themes/yun/source/yun.svg diff --git a/.github/ISSUE_TEMPLATE/comment.md b/.github/ISSUE_TEMPLATE/comment.md new file mode 100644 index 0000000..7e18dbd --- /dev/null +++ b/.github/ISSUE_TEMPLATE/comment.md @@ -0,0 +1,18 @@ +--- +name: comment +about: Article comments - 文章评论 +title: 这里填写你评论的文章的名称 · CC的部落格 +labels: 💬comment +assignees: '' + +--- + +文章链接: + + \ No newline at end of file diff --git a/.github/workflows/Update Blog Yun Site.yml b/.github/workflows/Update Blog Yun Site.yml new file mode 100644 index 0000000..00a539d --- /dev/null +++ b/.github/workflows/Update Blog Yun Site.yml @@ -0,0 +1,74 @@ +name: Update Blog Yun Site + +on: + release: + types: [published] + push: + tags: + - 'v*' + branches: + - master + workflow_dispatch: + inputs: + name: + description: '手动触发' + required: false + +jobs: + deploy: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + ref: master + + - name: Setup Node + uses: actions/setup-node@v1 + with: + node-version: "12.x" + + - name: Install HEXO CI + run: | + npm install hexo-cli -g + + - name: Catch + uses: actions/cache@v2 + id: cache-dependencies + with: + path: node_modules + key: ${{runner.OS}}-${{hashFiles('**/package-lock.json')}} + + - name: Install Dependencies + if: steps.cache-dependencies.outputs.cache-hit != 'true' + run: | + npm install + + - name: Generate + run: | + rm -rf ./public + rm -rf ./db.json + rm -rf ./.deploy_git + hexo -v + hexo clean + hexo generate + + - name: Deploy + run: | + cd ./public + git init + git config --global user.name "ccknbc" + git config --global user.email '${{ secrets.GIT_EMAIL }}' + git add -A + git commit -m "Updated By Github Actions" + git push --force --quiet "https://ccknbc:${{ secrets.GH_TOKEN }}@github.com/ccknbc/yun.git" master:master + git push --force --quiet "https://ccknbc:${{ secrets.GT_TOKEN }}@gitee.com/ccknbc/yun.git" master:master + git push --force --quiet "https://${{ secrets.CD_USER }}:${{ secrets.CD_TOKEN }}@e.coding.net/ccknbc/blog/yun.git" master:master + + - name: Update Gitee Pages + uses: yanglbme/gitee-pages-action@master + with: + gitee-username: ccknbc + gitee-password: ${{ secrets.GITEE_PASSWORD }} + gitee-repo: ccknbc/yun \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..063b0e4 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +.DS_Store +Thumbs.db +db.json +*.log +node_modules/ +public/ +.deploy*/ \ No newline at end of file diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..aee5ca1 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,18 @@ +# This file is a template, and might need editing before it works on your project. +# Full project: https://gitlab.com/pages/hexo +image: node:12-alpine + +pages: + script: + - npm install hexo-cli -g + - test -e package.json && npm install + - hexo generate + artifacts: + paths: + - public + cache: + paths: + - node_modules + key: project + only: + - master \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..3b7b82d --- /dev/null +++ b/LICENSE @@ -0,0 +1,427 @@ +Attribution-ShareAlike 4.0 International + +======================================================================= + +Creative Commons Corporation ("Creative Commons") is not a law firm and +does not provide legal services or legal advice. Distribution of +Creative Commons public licenses does not create a lawyer-client or +other relationship. Creative Commons makes its licenses and related +information available on an "as-is" basis. Creative Commons gives no +warranties regarding its licenses, any material licensed under their +terms and conditions, or any related information. Creative Commons +disclaims all liability for damages resulting from their use to the +fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and +conditions that creators and other rights holders may use to share +original works of authorship and other material subject to copyright +and certain other rights specified in the public license below. The +following considerations are for informational purposes only, are not +exhaustive, and do not form part of our licenses. + + Considerations for licensors: Our public licenses are + intended for use by those authorized to give the public + permission to use material in ways otherwise restricted by + copyright and certain other rights. Our licenses are + irrevocable. Licensors should read and understand the terms + and conditions of the license they choose before applying it. + Licensors should also secure all rights necessary before + applying our licenses so that the public can reuse the + material as expected. Licensors should clearly mark any + material not subject to the license. This includes other CC- + licensed material, or material used under an exception or + limitation to copyright. More considerations for licensors: + wiki.creativecommons.org/Considerations_for_licensors + + Considerations for the public: By using one of our public + licenses, a licensor grants the public permission to use the + licensed material under specified terms and conditions. If + the licensor's permission is not necessary for any reason--for + example, because of any applicable exception or limitation to + copyright--then that use is not regulated by the license. Our + licenses grant only permissions under copyright and certain + other rights that a licensor has authority to grant. Use of + the licensed material may still be restricted for other + reasons, including because others have copyright or other + rights in the material. A licensor may make special requests, + such as asking that all changes be marked or described. + Although not required by our licenses, you are encouraged to + respect those requests where reasonable. More_considerations + for the public: + wiki.creativecommons.org/Considerations_for_licensees + +======================================================================= + +Creative Commons Attribution-ShareAlike 4.0 International Public +License + +By exercising the Licensed Rights (defined below), You accept and agree +to be bound by the terms and conditions of this Creative Commons +Attribution-ShareAlike 4.0 International Public License ("Public +License"). To the extent this Public License may be interpreted as a +contract, You are granted the Licensed Rights in consideration of Your +acceptance of these terms and conditions, and the Licensor grants You +such rights in consideration of benefits the Licensor receives from +making the Licensed Material available under these terms and +conditions. + + +Section 1 -- Definitions. + + a. Adapted Material means material subject to Copyright and Similar + Rights that is derived from or based upon the Licensed Material + and in which the Licensed Material is translated, altered, + arranged, transformed, or otherwise modified in a manner requiring + permission under the Copyright and Similar Rights held by the + Licensor. For purposes of this Public License, where the Licensed + Material is a musical work, performance, or sound recording, + Adapted Material is always produced where the Licensed Material is + synched in timed relation with a moving image. + + b. Adapter's License means the license You apply to Your Copyright + and Similar Rights in Your contributions to Adapted Material in + accordance with the terms and conditions of this Public License. + + c. BY-SA Compatible License means a license listed at + creativecommons.org/compatiblelicenses, approved by Creative + Commons as essentially the equivalent of this Public License. + + d. Copyright and Similar Rights means copyright and/or similar rights + closely related to copyright including, without limitation, + performance, broadcast, sound recording, and Sui Generis Database + Rights, without regard to how the rights are labeled or + categorized. For purposes of this Public License, the rights + specified in Section 2(b)(1)-(2) are not Copyright and Similar + Rights. + + e. Effective Technological Measures means those measures that, in the + absence of proper authority, may not be circumvented under laws + fulfilling obligations under Article 11 of the WIPO Copyright + Treaty adopted on December 20, 1996, and/or similar international + agreements. + + f. Exceptions and Limitations means fair use, fair dealing, and/or + any other exception or limitation to Copyright and Similar Rights + that applies to Your use of the Licensed Material. + + g. License Elements means the license attributes listed in the name + of a Creative Commons Public License. The License Elements of this + Public License are Attribution and ShareAlike. + + h. Licensed Material means the artistic or literary work, database, + or other material to which the Licensor applied this Public + License. + + i. Licensed Rights means the rights granted to You subject to the + terms and conditions of this Public License, which are limited to + all Copyright and Similar Rights that apply to Your use of the + Licensed Material and that the Licensor has authority to license. + + j. Licensor means the individual(s) or entity(ies) granting rights + under this Public License. + + k. Share means to provide material to the public by any means or + process that requires permission under the Licensed Rights, such + as reproduction, public display, public performance, distribution, + dissemination, communication, or importation, and to make material + available to the public including in ways that members of the + public may access the material from a place and at a time + individually chosen by them. + + l. Sui Generis Database Rights means rights other than copyright + resulting from Directive 96/9/EC of the European Parliament and of + the Council of 11 March 1996 on the legal protection of databases, + as amended and/or succeeded, as well as other essentially + equivalent rights anywhere in the world. + + m. You means the individual or entity exercising the Licensed Rights + under this Public License. Your has a corresponding meaning. + + +Section 2 -- Scope. + + a. License grant. + + 1. Subject to the terms and conditions of this Public License, + the Licensor hereby grants You a worldwide, royalty-free, + non-sublicensable, non-exclusive, irrevocable license to + exercise the Licensed Rights in the Licensed Material to: + + a. reproduce and Share the Licensed Material, in whole or + in part; and + + b. produce, reproduce, and Share Adapted Material. + + 2. Exceptions and Limitations. For the avoidance of doubt, where + Exceptions and Limitations apply to Your use, this Public + License does not apply, and You do not need to comply with + its terms and conditions. + + 3. Term. The term of this Public License is specified in Section + 6(a). + + 4. Media and formats; technical modifications allowed. The + Licensor authorizes You to exercise the Licensed Rights in + all media and formats whether now known or hereafter created, + and to make technical modifications necessary to do so. The + Licensor waives and/or agrees not to assert any right or + authority to forbid You from making technical modifications + necessary to exercise the Licensed Rights, including + technical modifications necessary to circumvent Effective + Technological Measures. For purposes of this Public License, + simply making modifications authorized by this Section 2(a) + (4) never produces Adapted Material. + + 5. Downstream recipients. + + a. Offer from the Licensor -- Licensed Material. Every + recipient of the Licensed Material automatically + receives an offer from the Licensor to exercise the + Licensed Rights under the terms and conditions of this + Public License. + + b. Additional offer from the Licensor -- Adapted Material. + Every recipient of Adapted Material from You + automatically receives an offer from the Licensor to + exercise the Licensed Rights in the Adapted Material + under the conditions of the Adapter's License You apply. + + c. No downstream restrictions. You may not offer or impose + any additional or different terms or conditions on, or + apply any Effective Technological Measures to, the + Licensed Material if doing so restricts exercise of the + Licensed Rights by any recipient of the Licensed + Material. + + 6. No endorsement. Nothing in this Public License constitutes or + may be construed as permission to assert or imply that You + are, or that Your use of the Licensed Material is, connected + with, or sponsored, endorsed, or granted official status by, + the Licensor or others designated to receive attribution as + provided in Section 3(a)(1)(A)(i). + + b. Other rights. + + 1. Moral rights, such as the right of integrity, are not + licensed under this Public License, nor are publicity, + privacy, and/or other similar personality rights; however, to + the extent possible, the Licensor waives and/or agrees not to + assert any such rights held by the Licensor to the limited + extent necessary to allow You to exercise the Licensed + Rights, but not otherwise. + + 2. Patent and trademark rights are not licensed under this + Public License. + + 3. To the extent possible, the Licensor waives any right to + collect royalties from You for the exercise of the Licensed + Rights, whether directly or through a collecting society + under any voluntary or waivable statutory or compulsory + licensing scheme. In all other cases the Licensor expressly + reserves any right to collect such royalties. + + +Section 3 -- License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the +following conditions. + + a. Attribution. + + 1. If You Share the Licensed Material (including in modified + form), You must: + + a. retain the following if it is supplied by the Licensor + with the Licensed Material: + + i. identification of the creator(s) of the Licensed + Material and any others designated to receive + attribution, in any reasonable manner requested by + the Licensor (including by pseudonym if + designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of + warranties; + + v. a URI or hyperlink to the Licensed Material to the + extent reasonably practicable; + + b. indicate if You modified the Licensed Material and + retain an indication of any previous modifications; and + + c. indicate the Licensed Material is licensed under this + Public License, and include the text of, or the URI or + hyperlink to, this Public License. + + 2. You may satisfy the conditions in Section 3(a)(1) in any + reasonable manner based on the medium, means, and context in + which You Share the Licensed Material. For example, it may be + reasonable to satisfy the conditions by providing a URI or + hyperlink to a resource that includes the required + information. + + 3. If requested by the Licensor, You must remove any of the + information required by Section 3(a)(1)(A) to the extent + reasonably practicable. + + b. ShareAlike. + + In addition to the conditions in Section 3(a), if You Share + Adapted Material You produce, the following conditions also apply. + + 1. The Adapter's License You apply must be a Creative Commons + license with the same License Elements, this version or + later, or a BY-SA Compatible License. + + 2. You must include the text of, or the URI or hyperlink to, the + Adapter's License You apply. You may satisfy this condition + in any reasonable manner based on the medium, means, and + context in which You Share Adapted Material. + + 3. You may not offer or impose any additional or different terms + or conditions on, or apply any Effective Technological + Measures to, Adapted Material that restrict exercise of the + rights granted under the Adapter's License You apply. + + +Section 4 -- Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that +apply to Your use of the Licensed Material: + + a. for the avoidance of doubt, Section 2(a)(1) grants You the right + to extract, reuse, reproduce, and Share all or a substantial + portion of the contents of the database; + + b. if You include all or a substantial portion of the database + contents in a database in which You have Sui Generis Database + Rights, then the database in which You have Sui Generis Database + Rights (but not its individual contents) is Adapted Material, + + including for purposes of Section 3(b); and + c. You must comply with the conditions in Section 3(a) if You Share + all or a substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not +replace Your obligations under this Public License where the Licensed +Rights include other Copyright and Similar Rights. + + +Section 5 -- Disclaimer of Warranties and Limitation of Liability. + + a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE + EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS + AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF + ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, + IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, + WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR + PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, + ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT + KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT + ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. + + b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE + TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, + NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, + INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, + COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR + USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN + ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR + DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR + IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. + + c. The disclaimer of warranties and limitation of liability provided + above shall be interpreted in a manner that, to the extent + possible, most closely approximates an absolute disclaimer and + waiver of all liability. + + +Section 6 -- Term and Termination. + + a. This Public License applies for the term of the Copyright and + Similar Rights licensed here. However, if You fail to comply with + this Public License, then Your rights under this Public License + terminate automatically. + + b. Where Your right to use the Licensed Material has terminated under + Section 6(a), it reinstates: + + 1. automatically as of the date the violation is cured, provided + it is cured within 30 days of Your discovery of the + violation; or + + 2. upon express reinstatement by the Licensor. + + For the avoidance of doubt, this Section 6(b) does not affect any + right the Licensor may have to seek remedies for Your violations + of this Public License. + + c. For the avoidance of doubt, the Licensor may also offer the + Licensed Material under separate terms or conditions or stop + distributing the Licensed Material at any time; however, doing so + will not terminate this Public License. + + d. Sections 1, 5, 6, 7, and 8 survive termination of this Public + License. + + +Section 7 -- Other Terms and Conditions. + + a. The Licensor shall not be bound by any additional or different + terms or conditions communicated by You unless expressly agreed. + + b. Any arrangements, understandings, or agreements regarding the + Licensed Material not stated herein are separate from and + independent of the terms and conditions of this Public License. + + +Section 8 -- Interpretation. + + a. For the avoidance of doubt, this Public License does not, and + shall not be interpreted to, reduce, limit, restrict, or impose + conditions on any use of the Licensed Material that could lawfully + be made without permission under this Public License. + + b. To the extent possible, if any provision of this Public License is + deemed unenforceable, it shall be automatically reformed to the + minimum extent necessary to make it enforceable. If the provision + cannot be reformed, it shall be severed from this Public License + without affecting the enforceability of the remaining terms and + conditions. + + c. No term or condition of this Public License will be waived and no + failure to comply consented to unless expressly agreed to by the + Licensor. + + d. Nothing in this Public License constitutes or may be interpreted + as a limitation upon, or waiver of, any privileges and immunities + that apply to the Licensor or You, including from the legal + processes of any jurisdiction or authority. + + +======================================================================= + +Creative Commons is not a party to its public +licenses. Notwithstanding, Creative Commons may elect to apply one of +its public licenses to material it publishes and in those instances +will be considered the “Licensor.” The text of the Creative Commons +public licenses is dedicated to the public domain under the CC0 Public +Domain Dedication. Except for the limited purpose of indicating that +material is shared under a Creative Commons public license or as +otherwise permitted by the Creative Commons policies published at +creativecommons.org/policies, Creative Commons does not authorize the +use of the trademark "Creative Commons" or any other trademark or logo +of Creative Commons without its prior written consent including, +without limitation, in connection with any unauthorized modifications +to any of its public licenses or any other arrangements, +understandings, or agreements concerning use of licensed material. For +the avoidance of doubt, this paragraph does not form part of the +public licenses. + +Creative Commons may be contacted at creativecommons.org. diff --git a/_admin-config.yml b/_admin-config.yml new file mode 100644 index 0000000..e69de29 diff --git a/_config.yml b/_config.yml new file mode 100644 index 0000000..ec463e7 --- /dev/null +++ b/_config.yml @@ -0,0 +1,185 @@ +# Hexo Configuration +## Docs: https://hexo.io/docs/configuration.html +## Source: https://github.com/hexojs/hexo/ + +# Site +title: CC康纳百川 +subtitle: 'Hello Word' +description: '一个无趣的人' +keywords: CC的部落格,CC康纳百川 +author: CC康纳百川 +language: zh-CN +# language: [zh-CN, zh-TW, en] +# i18n: +# type: [page, post] +# generator: [index, archive, categorie, tag] +timezone: 'Asia/Shanghai' + +# URL +## If your site is put in a subdirectory, set url as 'http://yoursite.com/child' and root as '/child/' +url: https://ccknbc.github.io/yun + +# abbrlink config +# abbrlink: +# alg: crc32 #support crc16(default) and crc32 +# rep: dec #support dec(default) and hex +# drafts: false #(true)Process draft,(false)Do not process draft. false(default) +# # Generate categories from directory-tree +# # depth: the max_depth of directory-tree you want to generate, should > 0 +# auto_category: +# enable: true #true(default) +# depth: #3(default) +# over_write: false +# auto_title: true #enable auto title, it can auto fill the title by path +# auto_date: true #enable auto date, it can auto fill the date by time today +# force: false #enable force mode,in this mode, the plugin will ignore the cache, and calc the abbrlink for every post even it already had abbrlink. + + +root: /yun/ +permalink: posts/:id/ +permalink_defaults: +pretty_urls: + trailing_index: false # Set to false to remove trailing 'index.html' from permalinks + trailing_html: false # Set to false to remove trailing '.html' from permalinks + +# Directory +source_dir: source +public_dir: public +tag_dir: tags +archive_dir: archives +category_dir: categories +code_dir: downloads/code +i18n_dir: :lang +skip_render: + - 404.html + - README.md + - robots.txt + - CNAME + - google7787a6577761be93.html + # - ".github/**/*" + +# Writing +new_post_name: :title.md # File name of new posts +default_layout: post +titlecase: false # Transform title into titlecase +external_link: + enable: true # Open external links in new tab + field: site # Apply to the whole site + exclude: '' +filename_case: 0 +render_drafts: false +post_asset_folder: false +relative_link: false +future: true +highlight: + enable: true + line_number: false + auto_detect: false + tab_replace: '' + wrap: true + hljs: false +prismjs: + enable: false + preprocess: true + line_number: true + tab_replace: '' +marked: + lazyload: true + +# Home page setting +# path: Root path for your blogs index page. (default = '') +# per_page: Posts displayed per page. (0 = disable pagination) +# order_by: Posts order. (Order by date descending by default) +index_generator: + path: '' + per_page: 10 + order_by: -date + +# Category & Tag +default_category: uncategorized +category_map: +tag_map: + +# Metadata elements +## https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta +meta_generator: true + +# Date / Time format +## Hexo uses Moment.js to parse and display date +## You can customize the date format as defined in +## http://momentjs.com/docs/#/displaying/format/ +date_format: YYYY-MM-DD +time_format: HH:mm:ss +## updated_option supports 'mtime', 'date', 'empty' +updated_option: 'mtime' + +# Pagination +## Set per_page to 0 to disable pagination +per_page: 10 +pagination_dir: page + +# Include / Exclude file(s) +## include:/exclude: options only apply to the 'source/' folder +include: + # - ".github/**/*" +exclude: +ignore: + +# Extensions +## Plugins: https://hexo.io/plugins/ +## Themes: https://hexo.io/themes/ +theme: yun + +feed: + limit: 20 + order_by: "-updated" + tag_dir: false #"tag" + category_dir: false #"category" + rss: + enable: true + template: + output: "rss.xml" + atom: + enable: true + template: + output: "atom.xml" + jsonFeed: + enable: true + template: + output: "feed.json" + +# offline config passed to sw-precache. +# service_worker: +# maximumFileSizeToCacheInBytes: 5242880 +# staticFileGlobs: +# - public/**/*.{js,html,css,png,jpg,gif,svg,eot,ttf,woff,woff2} +# stripPrefix: public +# verbose: true +# runtimeCaching: +# - urlPattern: /* +# handler: cacheFirst +# options: +# origin: cdn.jsdelivr.net + +# webPushNotification: +# webpushrKey: "UIngQiMfLAHGhZ-LkzRFKtvHh9CqUYnY3yipDB2qPB0" +# webpushrAuthToken: "7953" +# trackingCode: "BDMQzEpmBuoEMOFVQ5EiC7scntMuJzY5Ac2rYD9NPSxPXqZ_VpC8Xk_iuuW0s6M7jioHyy05qzqyD28i4ikaThw" + +aplayer: + asset_inject: false + meting: true + +baidu_url_submit: + count: 50 # 提交最新的多少个链接 + host: ccknbc.github.io # 在百度站长平台中添加的域名 + token: 9TyGjimf05CnCOTl # 秘钥 + path: baidu_urls.txt # 文本文档的地址, 新链接会保存在此文本文档里 + +# Deployment +## Docs: https://hexo.io/docs/deployment.html +deploy: +- type: baidu_url_submitter # 这是新加的主动推送 + +admin: + deployCommand: 'hexo-pubish.bat' diff --git a/cmd.exe b/cmd.exe new file mode 100644 index 0000000000000000000000000000000000000000..2c97cc5bf549a826025edf87d7645cedfcb05961 GIT binary patch literal 289792 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

5iCl^O+_F#;{Q&1Fz?sE#EKytyE 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�D`dhHo|@@JVC;Ptngw9pKXO-lW?9Do+V|w z5*7n2o(IM#IC~)dGM=FA#2LooQnejyL$rf1+=3Vn19jsJty6DjtEIz?90k|jOS1w)mZ z$a3|86l84`1g&eTdPYZj0fkgEW5`tM8*m1uXQ8Qn{qB3nU0SzJKAIHX@0jk|W3^t+>~%j5QEq zE8?$2@Ij{E141iq>2bC7w<04%R_F>w<|j-;1V^N)fAz5zMi@kJaT`WWr1(S#=Ju{x4UHVdGJ-a~w% zLcCtc*S+#p5;^QvU-j}eK)h&3+Wqpy4R4S7dO*Igo970HXDMO0TV6~$RHZBAu==%} zelq7MV9Z|=l!fJ3o8qy^c$hd@R`#e4a8#)`uOgDYLs|Vl_Z7^PwMxUw)G9sp9rGu$ zE!kh>aXh1rJhT?i9&hFNAe95nxCknP)saRl7{C~p{+=A1gTl+@(F{*?^c*6C@rWH= zBDZ)(cLpP2qH5&_hgE{Wi1s%d3A$IQmtj*%WQMa_ z;QB_yRbR^^G35u%o-*Ai$8oUF9#<-Aky@9FSK!v^+a0ZoW$JJ~*TB^vEwAg$=RR66 z#fBJaL=*k?+8OH28d8Yawa1P@FvA_xwK30Q-JrdfNzZ~hq<2^j_YmRk>dn)r#(IxF zagv@LCfjmh3&kType2@l4H3qe=OpK|P?exQXw?=`6n-i~9QKmzM-kZ?OByAq#kluo z0g4jh^lI=@jqFYMFW>Ks0P5k!nO~K@w<5Wgw=jC$j4hDm66sc4B2nk~;=Gx(5ayLx zRKxOwX}SJ6b^H#O3knKyIH(>L8B#qo+^HhDW^_EiI&qqxD;E{m8R2Vf_;K~&r9=Nz zHi2pXgoZ^w)9NtMqp!BI6rl@VG8Tgka^7dJ?1xGwh>f3!VPKWLA~l&#^SvAx%T5cU z-&Tbjye(M)48V;a$Wp{N4YTw&p+n!|;?4XcFfNaN9V%L$giKc#N9$=YT;j)v3gYJ> zB72TMc)xVQx|%E7a-rU8OuL*Lw}b=b`d&cO!>=FQw%6oBhV1GT+p7{8+`V6k*e-mE zFE4Y5+r{(kY~*M-4odn!6H+cOz;hP(r!=f@jvh=*_iL}PR&)Db=yv&f<%Gsnx?3Yn zNe&7F!^63S&5-@htOkw!fc{ghf?uxrO0%tI2I$jU;@w?RV`7w4g6koD9U{-HfSd?R5l!?8 zjEHAks2mi~Q--pfq0lXrn>&!?q6itY0@6!;mHy^7qhMd9`(t@&E1S2?kRZcqmo$Y2 z(YC<^>?j+?|{3Kdxx zxYAj4V2mIR76%;t#KY{3PD84QDqLRjJvQeYRYdwYRlE0Vf}%kk%cKqw91EHeNkxD6 zr41#$CFY4_%gZK4C4H$kSC9c9Jn<*#ypo%!msZXr5krye%gAdCds@i&7URDnvOoQn z60oycT@mEpuOkQi=!7{VBlGiJ74cw>U$1=*K*T(;p>mHJraL=AD0Fr(a$BY=)JMNG zzY_Te=PbGK;8$-;(7}$*xOF$|*vYcpEPqub#*G~CwrI4ifVoT(7X3A&arzKr{3gR{8(lB zOZI3H{6^Bu{uXxrXROouOlf#Ds59K>cXRRU*L(+b82l~9vwv0C9jzcr-R)sl-C!6n zlE5~)p4dvP9s`Im8j2w>lKAZ%vWNbSq>T-JAcnW^VG3|^fhO)*gW?pQ9!9@jOyFv> zRq}xexu4sp%4^3l&wHH}*Hh|5UV#71Uzu;7&u#gkuR!*+yQdc+ufWNpp!o`Cjo_&k z%WeCTWpV#uN^q{#oi|9_H>}toQnsp(Z5c(gXI!Rj3OAGVjn@9{&@=UQ%V&0bwQrz;Hq~GSH0g5DS1W7G3_oNiHh~KWD0M6BrES` zA|s9a%%wCc=8_Oj_AA&U2D0>1yFsZsPpal}h-4tG(xG@lHu8e*WTpE{l4Tc1{?jfo z{6&?%M%gcKFusIc;c9}+)n?i=pXE=5{(<=iHDXMa(2o)Aw#vnSu}V*OX?0H$G#})T z^%}MOmCYhkER}LD3r6;M5jzC&I9u{&=wdl}75i&_u24}0tk$BF!K(sT(S6uQ&-Nmu z1u<#s#IGETK`ZDE#!7f_<>Ew^IPl7-h@1{CqT9mIM_eoVco5rr)oQ18yX~3zInsfi zsslw|(}ha0-d4TvOD~2XGwl~**Jv>Y(2Gjdi%NRYmtIszUg^k^HsH7GNEhjdyCR0m z5T_qAEkBRg61D405QCZ6Bp@-J&dll=jMaGkmkLBs6ZZ@1`zzyf$0qzi{k#Mt`7o&8 zn2GQE9AgSpkhU*$Fa`;LBYy7Y#08^Yhc^UcyhYrc2||V&puIiCoXcZumg4&89P6vm z`r;a^r17{FX$o?w9&@Q8DBbp7=>Sn+*mL5gm-#RCbAkA;`SlQ);KDt#RAEo`9q=?o zj4V2p)ewyIfs;OfpF_Gl%~@4agHVL~Gle233#=N}m~!(YSU=Y2xto=yjt(Lx8!LyI z-VpOfCA0185C^5-Vv!i-UZ>+&vSb-|cY?wkGPelvp?IlUNyhTthzt)3-ui;43uZ`5 zI4m|EI#se`p@`r5_)>aJ*A^kLr)%*`e`C~~Bxlk}0O2c2Mw7Q;XzS#w@g5DfPO)_?-%GdcDM zxkKjk{TY=1jIiNc>Cpo{=+Q!JmHg5g3F?>kEc#ko=J(1fi4Ux0j2S`qx51KKp&^JE zOPSt3ePl071gZ{3);e*)SV1s00}Q@mEH9ZfV$U9CL%E7KD{^N#dD>xe(1}YeSDX>16{%hWZG zf-T|wGMCJtIQ2}pE0{vQCn(vV5cqhOUmklMSQ)S7#`l6sH?@0mu#OaB>FeGLzhKW_AWplz!cG_B+C&?% zPOYN&$0;hxgR){=4G;Dsd$XT+gF70-F#ChMI(S>(pngw2Vog~Ux3I%;E@_AY7-MR8 za;!5U#t;q6WEuYdV&Io3*jc0A5#o`QdKq=ljX=ZGN7POQO>!;fr;pvrKA=XuTSkqk zTH70!(XX9Bt0AhvYUM}ucYuK!>C+#z8)?^yI5&3ntwvWh)ZGmAG7kgU5#4zk$ekMM z-546ctu(}BsA1NjzB-Z4iJ2SveEmk)hYlhaOb1(aP4eAJg zjQzm;{%#RSU|_7jTe@Tu=RTF^KW#n$F*R=ET?fh=#P3(r;{L>xYm)A5HLK4YPpJ39Ar3scxARP-=UL*KIx*{LH_j#N2>DTi(vv~ z^XL+c4|?hdeEoW^n&8*5m;5;)!sD$-V+XxVib!JzJs|<4v4fUK0BP)?TL=X7vJ6?| zrDCgvcv0jPvhZBg43F&+>;zlAbV%-D!nf|Uak3&lWPVVO)B-1Dxwz}Efz(tM&nv_+ zIwfF&JwY1K%Y2ob+53^9P%1K>fP5#!HhLVXs&3;RqAGQLv8u|D$Fp-uA1Ub~vurVD zkRhlWH2=8MybzpHuF;4AiRg)jNLxH2q`yZ5tkou2V|v*T)nv1V7I8unUSO$U#xK(%dtbNt?ov=oEpb3~ z|9kdKv2_j-vLs3jAxV#=cdTVs7Lr80NRusk1T58^C*$#KmuvZB3KZQbEUB%J|wAo3p<2cFLBV%zgWPyLSj}U|537 zH`xoaqV?lo(^q(i&AJ~E4f^PjddBKRr$BM0>}RDgwT;|Bv{o{kaZcjf)Jk^R5Vkbb zR)0(T>VsDGmGO-GtK5xM1uay+A(7d>_HTcw_R{ezY#8E6EDRRu#9P`HwTj^$zKNBL zIKameS?DZewLth%KDMubJjtl{wwseq^7P|Hr*}*!OE9l|5w$avUhqDT0l`N8+VZGn zaeT+mXT}AMiJ{h>YdMas9fIh&RhlcTbT=kC`)g~GlSA1R;&f5sN*d?xk<%wcJsr03 zMJPC1p7fk8&kJn>y<}*xnQatOhLUOTM|r2#FyhF(Ojr1$(?j3KX%y{u@%xE!NJ zb_e}Zz(wpIh>Z+(g}W}N>n?T%k7pJSFE_^0BlChpYdPs!*RtRNEoWrT0j=w(Nko8H z=MgzI6*)^@^A<)f*;qTIBTx*wX}L*EeK|YNFIm?S6Ge1F!!q#+?ynuv(}k5y0Vl=P z!4eL++k#pdKU?IEJ@2LNw9$H9pd_ileEi-A-nLsua%Q$pt2=|mc`I(^_Rav~ZaH~b zx(E)9!A#=}Y&qJ~_BqEA5Y2hdJhU|J31P`-DlerNG_2lMD_l5@* zKq1V==+3BQF9d+>H(iH{%ste(;rAq)u&XYnxYW9|#~4|9R|t;DMo{9^M`XtanTf>T zlO%}(f~#v7D3Ym1yG$qXeGKPrN(?*{D>eiP4^XV(X=&?W{?JyCO&11=tUKSevr>QO zh8HAHC3BDbBIpWrZ1@`yiR+GQ?D=*jq=w%f*I0Ov9AD&sf18s}Akn!&P|Ms8&>4Tn zhJQ-E8Yo;E>rm8~IK2UrVHUjXU~$ig!!Uy@grzflY!%BTB=qs8@K-Vb&i~Un|Igxp z6U@BKKfymyovkB#N(1`K`A<@9K>sR8u#uqjtuB8np(_2b{#yQXD)f>56;I(*$9gQz z5oss-+ON_?U&~+3ANe6Id<8PSK6ubgjEyF1pd)qpODVWgC_MYM&#%AZP~NH!KF)dH`} ze^IIfa-Qm9Ul=Jb&L7J}bo3n(T{Y9#PF2RH6~@YXO82bR%b>pu?iPR5zSxW*m9cpkddw@8bm(v(e?_A-;Xmq6kZc9S)fip_ySk#tf}e?Wnf zi=m7}@l0osmn>gUv1Ad`(PVCp6=@z9d1MD_l6e_-oao0R8>hpwG0wWDo-H{w{CO&-o2*xnwYvD?@Cj_+HZ@=Ty$}bn4;<&TOv$}ow@WSq zc^)Jn)pbbb_MvcPd~!ZK!WFzmG=twc!3zCTIo!?e_5R4YL@rmip z92JR)3t!iv=xf=~Sfp}~nCrH(s|%hJ=og63pCoceFSpEyWXV&B@dc)XFwOHI;iLK$ zz13WnFVzL&!^avMNP=(|?c^kY=ScLc(D6-1XZk1GJ|CNnqkHAUmJu2Ir2xDb4ba0$ z(!=QhxlkQU+juOspQ`|z&X^LgcYd-7$!MJ zc~+8~%r)PUJRsapH=0=XX>7Nty*IB&C_`I!Hpa3$w@*KO!OzmaKv|h8|M^eTQ{ySD z9XiVD>0vFZD{S$+lxHtx?EC2;>yNcIn~jmp5hFa~2@cwNM{K}i9m6A;x%ikI<6Aj= z$H(+UZ)OmbSTMl|WXS-x7^PnU=Vb0bHl={pEOfbrxVRIia7S4DYy+_o@3H6|xgXR~ zfKw_{(zc4MGbLruhO9dz0hFmkhE>S!VSLEOdz=ibbo^z@`{k1Ijl3ID@DVfcb#;o* z%prxHVHQ7?5V)!8_p$ux{6>@E6PV4D0EsJ<@lskM{Q`t3b@{adDwfhL`N#nQt#u_I zg6*V?6&|kC1vRdr9wK~l4y;t7Trnds3JePEzbILu2R&3Gd05@d)?%R6c`UxJCxvj%fTurXg6(QRJ`r zvO_=%JbR`8)3>U_j?sF6rM)BCxFAE{n&_l0+rIEkIe~}*nY{0RtWgL0 z=pmnM$wCZ%sV|2WulJw&64^7!-alo=>}{1`p=_&a59I?w)`kI`yQSvHnn~@}r*OIA z4KeOdTMZ(v2l<<7hrnO9sx^rPd0S={g33B9U9wt_RakdfxZcTG5oeyMf6P@-NMlei zte>H5zuSqpMAl-Z2iRjcM6P!rqVn6P(36DGZ(k}^y$T$E?)8FrkDP+2hD*mH;Q|4} zXBltHUdr-~=kEH35c?-+p;jX1rZdQH;i(YD&G^~h#`@YJlkfW_Vt0J=DS4G=!^x^y z)gboJTiR7o2l3`=>G$HXeo?h$Mz_ zoDD$lZb^~KvQmduUhPDp8z_Z$W3ES)3dtOav@nQ(k;ncDgKiE@+l{rK$}@JuYvk=w zOLF&;6_ZniCe(__`;0aVc5roD=B35Zm4sI4Et?^gi*rr%I3lF*DrRPKdt5wz-L~oD zu;S|p$n@KCfS+Y5gJ3?47ad%s0<4C5)+lbhGmU2s(LNh{B`yv`llz!J)g#HxWnSp0 zi_jp6UGuj?sN{xE0yLEM~!3CKdZ@^MCmyQLD7lhgI_ITew{On>p% zA8*anhiCYU@s>tuZrR`!s44sfh58in>f0!9vaxl)oTM%9Gu5&2ef9;kCM>ke`uK6D zBr0dC?x1^APh*9e$m7qPKUemF%R+qO!;=06uwa4z)yp846(y_6wGkW8Nz{xGX?>r{ zg13;rRKzp7$$X#aUy_lDG`P!RPIjE-ze)>#MmB`@Jl0d*6m0!h`Kjyut=s$yKfayX zIK?Lr*1Q#Ruah@M+mRCH)z*>D;*3<|wa!KH=eTJvDo0y&^X*mk&Zll$AT@4e8bqLB+`s%>Lo-ouN(ursrJ=z|M>`G8O$nyf($Ms3 z)6jHR5U(xt?2=fFY5F z#9wqacwE=YSN#GQu5WgTA7quK)w$svdT4eM!p;~O%Ld~TVajD>Fy#sowEeMZjSSg= z%h;+2&IV%-WFgU8ihM#SI8B6X(*nS#>EqtPE=@4fXt+d%207efyg?pxrS^Rsn2e#^ zeyNNQfB8~@ z$Gu7rwkX)7zHGJm2$Rcw^<)XQU|DvL40luPAkh0i3ypYC_WMI zu?_^1#Ehks5B||*bdtQzKkNMGnb^(Vyo%mR=I&U}T|a4H6ZT+jD%g#7Tnd({ecs{& z&OXS*McPzd*16C=uM~4+Vdm(b7)s+O-&rq3>n)iSzL-KM53QwDQS!h<8*%o9jn6Lt zokZ}kB^V=Kad1Bo$Nc2{Y1xMa_49)wemN{hu6!Dt)|i^k&0J5v<6|&LBzh%n@rtZ+ z(?o1A*m{niL;z;v%yD)oKWpd6%H!JEf$&tdv%M|;KenUJEczcXPvt6#!^KSZ0nkzmYC0F*E zMap!m3UaPErxaeKWS5HLVl%H0rwYGie&8Hxuv8Vqk7s{ofKhW_msUpAkYSc&_}NLa zP5*cK^u!STL<-KKASAe~XJl2OaUm5%=5=?WSd3>+lq&O8l{ou}XFo6B-PQLMUKzzo zSzSMuKcFL#S73W0iW4IjY;weKWY7&1XT@h4wr;8Mbvy5 zpOyM}UN(9w)EVttAFVDxROIma+IqHqU8<7?b5rcV=sN!$L ztf164sO(cjy{LoAY9c;g7_C*QbN41JBmDd4jA$5HZJ==+B&ZfWARM3w=&MSUR(z3G z_Zl=UsQ+%UKo+=tN!bpnY;XNtvyjX*_|_*hI8SVx;@PK5?Vr8Mz8SfPGS8(U4vXh5 zVk1eEa=#{rkGuFFr$)}id2-E$xLYNIT(jxR$8Y%%>-5K|hPG8-fJ~;u#fTG7QNg>P z3D>zQQ!FGl)4Fk^N-LAJe+kO!<7;4q`Wq8fJ&)GXA9XF!tbrMb9KJxS+almRT%^?r z6t#P;&x^EsWebfQ_G!`kDPu!dQ?*=C!?=A?9!2Oy^5;zXlZ#4Ji{3{u`dem`(Xi*lpL6~6@Yo$NxT`SF0!*!Qy%l4JU zvo18gxI{)S$01CZNvzN*en{0V7ueuHwgd|{iRZR$hpCgVX`C>(8^<1!B|Ch%jsEu>5^A;DjL9VGVSYGa?Ch7F~s?r@8me^~zn+L+MM4agFqaK7IErJ&b#r z*oLiMR>o`6jcQEZg?B5Jp(JyAb5K&df}FbztnGV?4=X(Ff$RriLUOE!iRw`Ka$pgU z|I1cc56)NS-^An;v9n&nKq<3M*>4=N>2?I7Wod6Y^&|A_<~! zKcZfpFWEJ}UvQcLnD?`d$;I?srm3^kAp*`r`nSdjYLqqUfIxWonf8P%cu|=-AOxZi@Pua+TX!6fwS}O? zc|YH^_nu55eSXjHdaw7tm+K<4*ZFj>d)@0kt$aFA5;hl(YWR$iFR|%H);VPJ-tEJ; z==ujK`bu?iyO7`Olsr!*QnAMjGO{+}+9S-{3bU&9LWl%%xJ#IyT6pKZHzgEnGHe2^|V<~*Nv9?GPi z&?|mr(Ff4D=7_R_}VUFQ&vP9scUn+b#nV2{i0*Jz)4 zDm54W`V&Z6p7$8p;?sNi*Z6+Jmvzy%uYBl#bY1MCO|fZTgf>-uoDVvVE&kfR`%Zo< z&ZNayMTz-)jQKl~zu?5bWJ7rIUYxf%Lh-7P;d&VH0CYN6cJL1w_91z6xKZ)E#gxJR zir6f#7`|JpSj4iS1;3`D+HK*{cH2%VC8DvF-E(jud5wy~yoBi?$(`PU4}DBgmE8`mSeCh}>O^)36Mx8n-D3WJpfIH(x0ewXRL z1xhEQifs$^zm+XihQ=5jJo=fmg?+wzmLr`kNpFsY5bo`sCCkb3PFI%jA~n+6Y2;H> z?`Y(?wB(D@lHYZbf0LGcW?J%AC;8^Ij{Qs|L&S}kZ=8KYG%Sid3|v&9HtklHU+Xa z?)}QYrgnc_F&>#}H(M8Nl1U;C&UNl!27y}<>y=nlo3n9l^lAxORTxrMZChJNQ@Y|6 zqFU+XnV*&ic0z3%KyOf!lYFR`Y*n?zsuK3ke+Hp3%6@f_alPs{oaln1E3%yJ@x9Ja z#Dhkkw};Z8@q;JbVRjoqvKip#{M71g^Kzt>deVz?buWf+J{$knt@c!u;cKi2N^Y0E z-!TN-nwZEo-;!ar`Gp?rOLLM%F=9Y(iy!hAw=3kohy1V*k_E%O61uI{`h`z_bCAKO z!jE0}^ulzm#DVUX)z-d%bUL}lO6BPsZ&qvI8(ACuYro`*hssYIET>2x`wDnOxMF^C zp$_=&96~6r6f?rT;5qmHYOZWJ9PdZ%yFFwxdb3zqziAO^(slX&Uj8S$@|XM8z6v(( zS;V_anqNnE%X^*lHg7Rtsud3hy10=a|2S6Eh(s?y*X);zIGxPN#7TBqu-^B;Yto%z ztn{?kYH!k$1yx=zWHDWe`>?FYVRo<-k{JCyY2;Ia^Rd)kW$4m8+$d()tysXqCSg{( zE|I2xWcOV-**(0BxaBQ}lLg<$14RECHbQjv5gD=Zyf(`7(#h87Y;4`e=PPtfY<#YM zMz7%hFGgQIinG3Q)x0l+lUGR3}n>cwPOjUQDSGQO& zrkA^Odi2uagK*Wx6ldCW$C_l8W_RhQ_ltbs{P((V>|z1l(R-Tm0DbG5VEl$Gu>QqR zo)@C70A34$dP{4HA$kxMh2lR$E`Bp~T=-CNC38d~wNjO`M^dJPOHPL6tAc=_Z~1H$YpZ`{%hHyiJhp?wm2p5b zqEsos?mIP8|{~C;)g?(O5SGf{-NSlY2<8G_*`8o z*jqDrfp-#e1aX*`YWb?=*)eZC$8=5c7UdL&Id_1Z{Xy=6YhbjmbI9Ef47uxam}3~4 zGUbq1rqbFa_NGa~WjpK2O8oWQSxKou?8$qz9@;enaKU#Z)85C{@_+>+R7A^0hf*c} zp28V!6|Z^`%xptUb@MI}){}-{t2o-n1^p6hlc@dCJE9+CEp0hTi+9Vz;3(_8j&)q< z_rBjf?F!NyxvFK}vDOyjGZ!_#6HStA7qkzqDpPD#U>4`!5 zK@#{@!mqDUN*{?s89@0HF4F!rP(R-#4#)cyof_uNE;UWoZPa{#&rc#1R!WnZ>4(+@g-*#Ql$J=0gX`T!}bU z&`kAR_6oZregkKO@5g+?V;#K%4OUhVF_=NuHC9Kh^|AFy{JLzTz?xi--?vL5d!yfG z`hWg5^X6aUXC1<~0e$?H|?lJgIum1sJyHPq_aDX;R4_Uzl3r2s2ubU#dkg&e8_J^<58Fc2_ zlQhkSxcTUDcc_kbT$qF0T!=6A;^}#~iIV`Iw)?Q*%T7GU9qU-cz0x?`jA3u4U6185 zX#O~^8TLC5iPnjoFt`no0QPI>05Bi@?YSZoV-ptCm5q#?z}a-V(Ays$+|T_pt)?@a zn%?J@Zr?#o*tJ73ijUN}SMKK4ZP7sfkHjWZl9CC3&u-RoC&iEF3gk7`zk~5eukaO` zm^0EQrp-gn?!+AFPRwL4UK1n78fH>jfXVKY()Iw|kLL~2P&WPEnUpNLuSuEWPRfNh zYEmYeNx@e^Q>iB9j^BBc!gYbe^k+^*ZH=VeL`6Jfv_Q;cCS^Agu$b?0Tmtl*lmp7> z4@C3R#bIzR>?Mh7-2cj&L(0W)EA`jhRi1(K^WcH3W*it5HEo z%+_9wM8TE68R-~u&Pox{sjG!M9@ka{>5CC`ZjOx7LjJ;-~;6QK;T=8qpS zUKagjV-`mCLIt$xq;Z98J%xBZ=RC#2k_op}v6#lVV2hbdMJL6lWZH+PIzB@^ju*VS z)pY!xKc#oP<0ZDFeK=wb0m6~;eaO`feDr~HeKuN#Klh3#fd`plsQJ7M&GlIbr$b!C zua-Xo?d@tz$3gf+T@u;DMwrHHg`eNTJWMQq_qt+FV^}QOLEiL1-yQ6T zRo1`a<9n$tVfD27BCDltt`|oP^S|j&a<%Xw8e{^J9akF8pk@%g8&@55mKHj7N~a{i zDVeCZ=7!iuR=7Y0GMmE(**SRpgaL&jH&<5dVbQ^_3qY+#0+M|xPwConVL$XxANEim zxv*{X?c8MM`()s-L3=kOxb+8H?a5CA|7V*D;stL(5IBya?O#=D+S{QQDSZ#6Bb!uk zsNX3FYrf6?ZCIE6W~w{qWvYW&-*msZ4jvd{9K6MC$FcRFmVy`bS)@0#^wY{5RpT38 z!LA>T;!8sbWP+Z2T)w|*`QPnOQHf zZm}XW(ux{z97(4TI9@;{p39(*9`xF$M-b**7Qduu#r4l`f{N3T4Cet`}QYIwT$peNLu)?UghpR zDw$>GS)DDhAL2qn7mpJ02&^3%KL>Yei+)g2IB%fTU#%_NMiYrX0qhCMQB|J|AL@>V znnPX}RJyAEBa^01k~S(mjhe^6F3D;RRb&7S^T5|Mt{!GXbhp{}@_=sQPT<*&+T6HRr3=vG%{lnk~xqn*>p3Fa0afp0}{8jk#*$aQo#{ zw&BY5L$bwuKj_h9jrC4-?82Pt*u25jXyUUq9l3ucWCTb&VEwB$HhWi<^&ftAR>#NZ zSI5S;VgrjmOsUDl3-%%z4sB{-V=iGyH$UKlqw_dOl6>ObW|2|4Tp|zQrsZKRjqLXEW4#TRl zOK-}I{M-Cy%iCPDPIc4YxdXWO?UX40A9d>FR{K5k%UGC(zuxangE{PHIqK37Fbi02 z=ca}NX5};>2H=J_SzBWN#+0uuwO8_SJNZh|;Z$d?SVhkIq@0d?g-qRG%=)5PEP;3I z@}BqyntDX79FF2DBTSPqFke_5qsgSNkzhYYV3^J@bt(<_1iwV7&Z92wZ)l(*J*+eJ z#7LF)#^$C&xCs=`xP8vJrJR za}JLPBsWTn9Vl_>{OYyJn>bzO@4Vadt_P&5UB)1FL1(Z2y1i2nlkhSDq1fi12*)-9F5_#@FB*JNZz%G z9LaCL`D=|JacByWKB(jV>tF46UV|3UzIUnG=ZzkIMdPh7Df&|~{fRX2K_zNMGc2-zl&I%i+ObTKf1`ovgmcR0^SIIP= zf-Rys5w*Yw`ku5a*xfmA^JuHyeIM%Q2$7GJi%>Zdj8oE*%39d*BfsXh-@P65puhxIiun z_C{|#HP2Z%;naGj)=k`jX!9Tg5E^><#`%XifYoRwxu#gI92`yA{$esn zY#&N)aTuhZ8%w zm#_0Tw2`k#vSITsU(<8?5(Bvj&Uc3Vx@0sVq|4~ouCJx~0@Y_UU8yf+ZbBV4qrBz% zS>f}WnhC4ThxEHnt!0K!QM-(HbolV7eO$PI#cDbfnb9QY{E5X)V+bYYH!V`9uW8yz z!Ne6!>-96csYO3CV|lm2#99B+39Hde2v3OGW5Z{hFpARQQ74oi!OxK=Ts)AU+-T<< z-nbg8nnpDK z6r>Oi``5e&`tsLnC)&M<#~iILSpKEI;YDH`oEdwnlmsr{8;zj_FC>OyPlbpQ&MUEx z%;J4S^Q^_5H%&}v$d08S?!Jlitk>;d!pFe%!-e)?|NbtCZOFM+gNo_|G2ULxl?$iE zY61+y#Mbb73{9YKJv7TZro(s^aF2QjT-TIjm)NdXAha)NtOy>3A6o(v{%KmZqRAs0Bh~0~P zt*9h2*<26uGQc2aEXh0F<;Je8oLmB+qjY}&SLmjWd?_u*0CJ#x9nJIe0m%3=oFe#$ zWEg>_5&<{u6lxknxAHXZ34^yKg3MCyJwA4NAcC`y%Y~5JX3)elQsrQ#% z^@iuk2m|UNh>v9oan|8Gj%T;%_zO%wHMPlMGUr)ZAuP#w9AP#RcTVlW()1e>%4)Z- z$RfWcO(ndcb9-oahI5oxgC7|=(Qz${*1PT#cfDCR)_XAWvqCP!+`)Hu9ZyCt-`P9z z-~u~{zWMGfcGtMR=zd~w^`@O7C&|*{C<($l5iF6a2CR@Bnmt#H&KAiDY%&hZ9kyBHF)+i)47-n2%jZjo5rL^UhMg%SxRgFLK;+!Fc zyr6lPZiSg=t=ekaS+&)SrEAr8r})IqS;TF8a*iBQa*|UBq^iuC|R|k;l11TX8*M6C+%`&pa0WjVcB)7UQq?0T-*eirw zG;#>nyEkFs*x>=f>O0LfJuw$1>T0sjwLcTr&W#q}2D_>^bh8j&_v)Ygh1(~YJB5z{ zuO%l^rI$K$NU)@xb7$~OC!J7~@^maZ!srE6Dw z>=Z-vI-1!hMcy#YAMTacZn|%p`e^jrQ#PyJW~7V$%J=+Z%ynEK;U`YkkJ|iiF?JX> zJS3v|sf{gc1ojJo{ndOwEOf=D&8UhkyxYYr`2YWTY7{XC(*eUj^km_|va#?rTnldP z4KptRGX?JESYdq8Fdyq~>seFCN+sUsC1QRfMuHjWM)hHqb99&o+D2t^1*~ z+^5Daf*!S(6Vvf~_1nRQ$$|x5W!BDApZ)bq$)a60!#(i`8aAEyJmR<>e}Ga(0Vj<6 z2Z+d{X(w?Or?U7k+E_x21qUkB*W~}_Es}RQ*`7~9_S=zSdlXa#fOeSEVHmb_C5OtE z4RQevh1XRE+ga=7afOBSEDnveA^X6v$EJ!s7OS0wLq#hmRy#G8_r#xFe;90+si_mp zU=;Zk^z=NS{+2k@pN<6%vyDX_!7`Vik zVRYy$L0P3~#x&1bn=^o2VO%BBw)UI)WNdU<{=Zo620@XVO*VqbS8K?j#6yy81g|?M z3$F9BbzB8=kf~0)-QQHdAFcaM9k8mj2x%#olG5?G27+YnN{uUA$15Ur6UxTc!PQd} zQ8eC^x|W?{nwV<80K*nY}EKEG{e054bGmE z14)PDNQvs%ud9$-JNSkR9dG+ESX$EcS5fEenNXS&!D~i?(-=c{Q|-kF;T@X$JV-V} zrpT8Ec$CJYrFi&b8{QuEHhZf*5`DXu8qWY5)Rh4R^-lnR@u`@g>W237m{$jr*l;IF zwPsE3=1XgGKfhX&+vy)`@-RW$_qEnUDQ<$9YKJwTC0PhV1-t%(n!>}${U>CC==k^+ zZ#Pq_iZqn?%GFc=PoR@Qsx^0fM*WV#I8Am>a|RI$;MA*aQ-jJMpK%sIAA9I;eB0M7 zV`g0P47i@mdX%>~H(GBVk=`^FG858>94Y(2pw)uZg?)I)4j$FJ1D>zepj~t6;{8JV zk6U%NGOLVLDT$5B?^i+{u^h75Nz zqWca;D+ym&e97Avy>!9M*saPxhh#Oo&Y?T9B|O7fNmfh9d4l>@xeVeC z;=+Hm)gqeFU$uoAwc{ZYs;$k~VB$pG-hQ!Q-Ps)Rm1X_yeH^%0N(TrU`Pkhv*Wo}SS!s&xZ;S%W5 z!3i5Ri*bWDcwPu)x##q4z3*RX1Sw+OozmboN=7q=*mDjLIh?(LX~|~YV$Yc$m+|*6 z58d(Dj3`1i{SGQ=cH4_kEGIGsy8^u%wo045LGe$f;zxM#k177%RD7Nnf0yE;#Ct<{ zI~2Rm!AefwuJ;;Gb^X5duFptIcDjCFde_Umj9B8WBeKzv1vhL?v)lK;!;E zY8?(9n1x>DOAbz*Wq5 ze2#=g6nme0!o;Gb9Qigeq^|tM zFlxHx8?E&bpPAPz_;D!hdp_C)`_<}C9P>S3Al@xhtSupOp1Ki0F);xzR9BJc&H4QZ3;5VjPSN#aEa#wKZgTi8S4sMr(R8sA zw~#0XXeC8Xd&tyZQ#4LPlH7Cc5;6kyh4#6oG|Qk^Q~W{|wiFbd)&3x&fR^g=E!XV`6mJQ{`bKfv z2h{-kmulC)6o?MP)Hc8qHO+~SyCDz3ANWK1S@27)1;Ym#k#}X-zii&med*IxJrIhM zzm(Tkuj_+8zfN8Ief}(|xNs0N6dsRr$}^;T7%npxQu`loYV0t|3+6D>tnpO{lnh`v z=^Nd2_*Y&6Ra{TINwHe<&fWx6CktL!Cxb}6LUUd1yVOmkz)+{aRB!YYZSu|F zuK+}MQ(o;TBSX(=PKC{SyS|XB9nP_B7jVcjPZ&6rMvjD4GYdc~tLVjRPZ3|!j|d=T zhAr?1(}wGlQTv*$Fg`Qf&zu+?%mRp@VBqihF^tJycnAtAVBjX-6E8dOrjh512f6Sc z%g5_{IGHa^%RD4j(LiR>pH_N2Z_O=q;XND~B+yMQXi612sjE;px9PayW)u8wo(@)& zOd#H(XL51yxDr)@sF*b0JOb-C(pe`|GiizD_k5N2)fxit@nx z9`ozil!6Q2e~Dfjr&va0!z??5d%`_oBJlxCa~8R z(oh{+CoEZ3QE~wWtY{22oyu(4XI=;E;oZBxOO{n+QPN+(4AP*i;wSf_S|$fUS1%*e zu&{gyRh0gkl6u&9GccYwh17fwQTvUFpg~7v>`2bGwHY)^rr(oE(&|O$eV5$m`}S@i zv?hMSd+0cdn`ZgmSbDdM}3zQpo`{>B{>z5ON2Uirniph}T|Es?>d?@kDKf6u{ zLO%KH%Eo%mP^hz{hDSVAw>@yZAuERAi{&IUku>tMJqz!_gh zJ#8y*CQ3;D`fswh80zC)@8fRoV~qDPodq>{w)WCT794VY?CTZgHKx4WW`VpfZ(V9R z>5BXaUDMT(W!HYcBgX4Y`b2lAWx(uqK*e8wD*@(?(|^PxNO@r~gY6y$dR#6Dn*5>- z=PCjIhJQ_Eroz|3D-F+Nh=QWIOz8>pT)Z0X%=R~&Os(1nVX_%bO?&gJW_62%%`4?= zxH+wG$^J~|u%PDBL=J^Y7buxIO&kfrRqa1ZRW(#q_1yEfQ?^R(a2-ZJq{t_-@IAPD+$le$=LBmhZ?^`*yAMGF`ar9@7OJ&e-=z;j*g>fwHkdSTyl5!9-t0 z>&fAe00KK8(q@W}`HIRNOxMdQZbvhM$0VyI{IpgS=@1hU`}bDoPP2<}my~N^Nv$=T zYpjuW1(0JIaaW-u?wXSlch#19R8?U&Sy#GUWJ=~`?5{4E1A{zd-AEn0-}ld|<^QR% z5&>{ZFGNO>)8dl{^HkX!drEJ5seNV`%~sytJ2`!0A#^}|pPJ9PIh!)*aYl!D)c7ka z)Y)$1hOdxfxB%0A(_CSs!~HNBtv=;h*v=!zQ$t^O+(jIQeOv_7m8-KltjVI+2S@iM z!@1T#`)YfClBh(cb&!2ZKh(oxv-7Qqh+Ssq;2wh6#WZzrX!d7y^7{}UWKJOaFP{UT z>ir{X#JscdT8-L5i234V=DTcmjw7VDCKgutpN5vG+E*Q$pt-5GCd>(ycj^W>u`syY zL|4Za7uHx`)Wm*LXp*gqnZ8c7&~OA2C>ga328-Ww2QGkouktq*$S(^FTAURN3|b3j zW}sW`AR`g=2H){YB&XogS)zeb0-W_PnYB#3?NYQ3?X{%hf*do$Z-u8v_hm(RSZ>_l z_&MJ-y(3-L+b;*&PmS)&j+_y_v5i?<&XD$}uoVRMUHe&5h2!fJi(_ zbFZ4hSBeaD8unK5yPF|beAWoyNN!$c|B*Y zO!zk2Gr#5ybYA{(31K;M9KAW_+m5=giRvgPgIhz2KJIDTE0?cd+0{)N(hY-A@TpvG zbCt`J?CB`>CvSr#vV&G2w~LQD1}RjqeEoHYRMvk6Emqu~^_GPpWNggD*u}YtQ>}G1 z@!W~l`am(7(|Xi*9}E(vbxkuC+ac?w!Rf^)VM>}?iQu|aa9yeEamWC7>UG?gUW!&+ z{!eIS|C;Uo`dX$eK5iGZ>&5Q>O9SVOOYZ2>5=F8Z}BVgf%M2} z{#(AGcTK*N(~2MKzvb_WJUKn`BL6Mzip)60%Nb})5&?s%*?-GZCTVmkDIQAJ!9cm? zKH?iQen7bgAvSPls7S63L>3a69PCEUzdjJh#dEatqWM<^;+6N4GunCP{5kP)v-mju z`utE6Ky&kd{_~%VkpID!>!!rV9YaFq{0Z@Kg?#j$e_B(<*&!IJ7d~U zy$a%aO)F6yOpb)&QPx0X1uH?fF=z7KLQ=>-uElh+Y8&j6c-5w+3?R@9C4C&Ge!4c^ z>yEI1gZnFLtg1EKuXo-+IacIve-P?AkHe+Sz8mcuh*A!*Hv9L>6<@oCS{Bc7`v)4g zYEKtQaYr-gVCe?U^(9>{uv~svH-8D%wS_W)e-jFHnw|BOS$=Rw^R2s%_Z0s#p54EEe9=4}yv#LyijN&fxj_a!;G)MM2sbTjBVL;7Vxz{XQ?iQbLJb^w zFzGaiCsD{q>`LKCmtPzGbQS<|I<$iU5V+vWxdgr0Y-gX+@~}U=z%!eD+#9#yf=L~g z6FFIM%w^tma7_rKkokf%ak&GHk(iQ)P5dv^6rEw5J_h}NHV#F#+?4#!rEW40he#H}OZueW#6Bfn_#@(`cpb2&K`lx% z^+hiiFUrUBUbq9Q|HB{CcNVy|Q&V!p^UjoTyg8PPvr;6fnH3lQy6o8ZNiAIVt0>vq zr(i*Y-G{#(y??A-dPS%P3y1fOVNIvZ+s8Y;b57{mHF_DM56H9ZdYqBiC5eGfj(fcv zL{6`3*_~aNwKL7hPNUAoTd7x8+x;5FU#u(NdEIgLLXbJQW%#j>P033{7ga7h^|`-g zX2ecyhN+rBk$33Z%ea`XX|t!WJz~BQ_%d+eI}DULpzVQxcivYoc!nl2Py{=B77CZ` z(N8kNdF8K!i2*zHl9=shJ+JaL8*f`Xk@?z$~ zmdoq>MsD?aL@}QCS2PvvS~FwY?Bi&YDV$5Yj=X2e0{N%aW>i1TbAeu09bHnlz6<6^ zll$%P^!W5XRJ!;VR63PP;eLq3&RawTg!$hYOxeOg;Q@wvB7WBGWIWci&LhXJ^XIa$ zI19E1m{^DMZ!{z*`9BS-gQ@;}Mt$A;lcwA1xf|EhG;dm81TFQ@U*F2aHY9I4%-XxQ zP{WPqy&}QEB&rHUF&gXOau+SfzqnLh{q==p7lG-oKZP$mjE5JC{nPM@nJVLM`%n#{ zpUUGq0i&;ZBJ~`<;e;+DR1<%aJa8n=q{fNVGkOnV+M5P@Jvc`_XuX7!b7P={htR;m(U>8_^d*a6TJ#9aUsDs@hTL_$s# zkm_pGgJbn zKc2~MJ4BovIgcAfxZ_Z$* zHH{|knp4a7gZf@r{Gnd4bHT`v^=+u-V{9i1CJ@V%T*G38tU-s`pR2DtT@s4l{N)Yr zA8=yaUF_mNE?5VJe!A|`(62*#_i>DJhOz8o?o5s&{uBEE{Dpk!aoFUg)K1C(zRe(- zjutY$?uYx6(TXVnvWBPPA(b3{uPh~ZKSs&#P)#TP4ZhP#mQs=&A4pu0EI4DfyP$i~ zC?3+hcW1KMh?l>QTj6tDSv2^37wtg4d{u?t-@d#oDh>?tckd*2&cz#8`0gy;maAQWV9EMF%Ay|kL$j!veDebIX~V%UbrkbI?Hdk+#C&fq zVXvd;mDf%M$<~_L&6BL$7P~+A8+$(D%6!k0WzoB)uhd#P!tCspAA397g;ni?!9DcD z3mwJNUC50f-2SkKALD$c-RBzqh461OtH$~UjY}XCRjz&5{Xrk-4K*?8u?SSX()^9x zw}AKnK7nn28%L>9?vwJ0bOW3Dm7?D2ESiWt)k@Ir*y81q@W5yg@@v%jsEAw-6SUWp z3uR5ks6n(kpG|3XzAEd&(l2yp@GmNJ@Kx|t3$neJCF(A%QY^h}?_ zQd3R;;y%h9M^c4QQ^t36VkDw@QIj*o{}Um*oh)TTD{jUwwm72U<1s7B3|KE2Nrb&G z;$)Y87$(2u4VGV8R2lS-=Wocmng4$KUvPwgTiAt!aTAs3IG>Cm>rhehA+?64MBXFF z(%{miGz_cafnj#w4~pa|grz?zO`gRiW@0HXZuE`r`Zn5{8Jk#IHnb1dHh)8>*0szm zf|Mv3b7@2SFP0Q*mDpLLyY?Cw-_kE?kk>mDHjj>V+@ZdtyR^qSnIe}9t~GG z*A0rM8Wz9Me&{N<>t{myI(5JnGVE|EMEJ0-_HkM+<8d;9Pz z>m?LQWrqGT)!>JjDX8pN2#3d-Ub^%{`NV1Yu%A5=mlJ5B8JyF}060S)FVa*R_-I@L z8WI`_!tdOL&wFrH_dm;YupIcUNg1^ERyLn&lA|c@2irx zErL5gN#RAq4eXuib=|B9wN2HaDg_!^LWBdR33HFKTd}z|aI(t45iGE>p@YXg)_Ey*s7`y*<#?9p|~SeAB0I7J7ZMkN&^!(-^N$CwhHKjR@#7VBjpg0arl- z3)5rm@1Lu+pTykw>(7811u|ko%L&?l;K9Qhc4utp40>tg)ccv1fV18DIomD3exp&L zFc+oN0M7y#Mb%n;Pypq_zMN|iP=1gxoTxt+66fetv6aF^Y`f1may9uXY0vqA*?wsi zdzIQvKi5>@H%7%gFx9qlaGJM%Uj1%g?0*11qR^lfD~Hp~sG03(a zvc(&N0bc_zz^Df=ramL5x8DOTlnrgY0f?y)6hB>PAf~e06nqbgYv5W3-B;HY~# z2d9^OOj@!*tcQ@xAFD}TQ9K$UB=o9j6* z*Wc1|m3X-xG`U{3f92)6EiG3+FV|v|YpZ=NiA@kW=;8EtRo`e*J}pg?=etc#N@Z(L z%l537?Ibtb@Km-xrDa>`Wy>L()7bK~&P>a-=K+;au21=DWO|w3xacGCgK{6!lCCN;uGf}s5FM40b)~sJVdU;x zmT9t$l%Fvyz@WH;!xp?#Wqp9--aveMrakU<7EXs;WMDjWjs0jI!i4FW%;c|m%Kasy zLYg{1y6kMB;-Q*17=xXH>F2soB~XK)D{ilp(EO&?E1bF^{rX&OovfTcW z-u|_A|3o%_{jsW2*q*4pX-ke7k-5Yn0ZJ1E_aRcbl(@PcatP9{qn#3fN~B&C=yqtTgu49Fa70A*w6Q9O52~TK+lJ%?(!e zJvEis?;Ufef}y8NVXd{@@~xjIj^tZV2fly6mgv+@)^cqsvcs)EUzC?;q1}LL|;&X&rU$Rn;~;1y}>)R zhTSw(yPm7Gv;;r`bIjIHU8ap~0_--Y9H;9g1?FOFpXc_xI}avW@!hqw93H!NA(J|K zGoB(Jw~N5job|FshPT}D7vm^z=<8&39=4qOxX$jhhb@mvYwwFero9C{+B5v5G`_7E zW6=?PucL9ak8d!YIMY7y2_tCgKU(U-m%Z+)qFKIiUy#kpJCAHJU+u>k85@0Ps)&8V z5&`arG6kX)hv)}iu9ojGzR*bd<~}-O`LdkQM}#){KA(%MnGRFzpM2`~L;dn{!9v-m zL@S1yYQC~_-`7)Lq4=o_iGZscKJGacL@0A&xB#sNUo@F{Q?Aw4@_{dFoBhPc0PUu% z&!Wk~Meily%Wuq%ew(#ulVL+tQv+`=%m!2BZntlpA~r+?aa?6TNaMkYuF|Am(y{aK zE~d9Tcb{-qlSfGAnB5CI7 zU+ML{y*sOhAV6*p4mXb(=fJS#jWv08dtHUk6_WMdWUHmUxbJ63FKde1s+YE?shX@U z7^AswvJK+FksWgGHsHU$$rfX`irvaA^%SXe(F&fP@Z7>__#OgF>KL2K=>Z&k`w>6p z7z?qG#z)gebBy#dN0-pPygRvv6mF4(uO%k`&b|&sik?SKm#?Nz-gOS93&@WpTE(V@ zAYW$yEOpWKm31-W{>eQr>SFheBhkKNh%oq04wCS3T8(7EtCQV5D*Bfbm#WT|JKj;% z9@gpf&Jdwh4hYVk?fx}*ccmd-_b{=}DTDJNb-~SJhEx|Dhc&Ybx`&-}S~bp8H)DZp zlc{?eDje7L_RhKVQtkG5!%M$*?hUfX0I2?k8au~J zV|AYUC14rPd*Uv@w4hl5r%IsPei4;wckJ%6c*o;e9@5tFsS$HHJ_^y9_9AsYMqgM1 zEiA0H^fGn2`yyj!U{EX_eP@!}Q96Dw;m0Pr;h68*t00`3*_!Ew@YYx7q^-f*;xd zj68eBZg%vOv281>*5(t&aEU8>>f)~9*dMoXT5 znl+7hxv<_?)uLMZc*#K4dB?GOn>AH_04$H8W1k7!jNXh4d;^!)Cws}Qqu+DNZXZ4l zPJ?*S1NeY^`5B&ybRSsBjC;MBklw3g!N);wdgpmLio6`W($*euZ$X-c4R-8Kju!QM zN_261uSj+M+hN}3tldDz_jua}vFfhTo0m%?EYq|f?z_h~@Cr_^2=84@+rUu1y9TI; zj7MS}UA&=RMMM5q{K47Vivg|F-;n z|E-@8Q(7wxFS9Ik=(+Lk$VP82t!=?skC|x_e(xnP#a|xFfy;REX!{-RD#?QW5IrJU z9UXwdzY)x?DrywWq8V|Z3!i8g%lE|l!nss+0vjLo-`@}}^L=?al#xHV4$Yr{mA#!E znn>i1k1lG-PLB6i)wDb?DK;7FE{$$~G(bwT2BP|GFX zdb!W{a>JTohY7Pi>19rD!RShrG6na&M=LsA;6Yn?zxp)@tnnmTK1;0=S-5oHFCnrb zeVU4iNgT0s-%2MqO2NFP`)*h8(54dzy3itQZ8vOjfwBH9sUC zrI+`mZ@FZ_FTGXboug*|+OPaE-?pDX&+Ndg6N=zLSB8%+g$yb7?A2xsCc%<+Zj4Z*#fec&Ad=JKUcYvw24>zpr|7BsWd zEltxkTbMX=B3Ztlz2iU2{ zYYbT{OnvIpntOnTr5n^>nkd>(`#ouIPiG=zonam^whluH23g6TVEm?&c*3P5jOVd8 zK~P3&r|zn*92 zeBycLnt1m0)pB|GvPj5EU7rP>n<{bF&Hgf5l^uJr>OJUAs+kHmeSziwW~%$3DdBk3thM$! zs#TTV$`Oq2tGWK>a9ycE?G@r9@vejzxCdl)*wFRb~LrjWd>{RpL)Hsm<(YYj$+^ zw~5CT=oM}472W+^;#Byy)e9TXnoZgz8hJS!KV~f$d zh+V|J=zr4fH#%UrdP0spp98>ty$m96ePWBVWC!Ab8g(o!O(=dXo?6}l(aDWn!1}^z z9V0dCJ7-z`&Uc@TR*z=AQ98G9?g~=GIr$WixWZ z<3~5gf78=gtymxv3kHT_}6SJEboe>(C&WJnjGG~Nt!{|?SdsJL!M1BuF zhb7M8zeJ@i-}A4z6J=b~RB?lW3^$8sUym}4jE9(`sXcvD;nQdiQ^qYiKC=i~U={(p z=n>HZ`ZQ%+T0j~Ka&NQ>t_6E&S*Fric2#RXx<+GJIm48Z%+(m&$-h=%7=`%-nP)_f zA}}jEf+}LcK1gq;+?04%xdt3$LE@PNHq90-YN@WoB}M~*1Lzmr*$szqZEyB~q&@d; zW%V5AHOemK1XCi=$l9~`61lZn4H_eOzR;eWt8%Wh8|`~(ko!))T=0bIdES&|GVOeg z=6Bk&PZu4LHuP?~dP zUA7%o;ylJ^a6_9tm_a43O|G*qRAmzj1v`}h2*3xpSrd;SpS6{UF&oUrb{kP zQxSIjpRm`v=J3Pqsr5I=VNWl3CVBuHoi^*u@IX3i24@G@4Pc>j5?2PGbIe#YDAEZZ zAsBFm*)^*2zJSD0W;3?0f&kX~d5pbXIhA$u})C()|f^04|_U?HO^lD{<%07-e zcPy=)!4+=XwDgBYU~zmIFm zA<<8Ig%65;(<@R?jUim3AAhqG+58=3P?W%Xr0KYQK@|0eiszvfvcvs2ng?E&J$gsN zXG}Pa$Jd&;InK~QRe_QAA{1BLIGy$J0{?6V`5hWlEbuu-Rh2`GE3?V{$cY-PPBoMF zYlvxkhm&`Na!j?aWPV}9>d53h$cqW_(p*+sEYHu_MD)ZpG)>$SE1Zeb*qzJiLgqQ0 z>8ZI&r~gHd;nUXoMBDsEaF{{*Z`wa_7I-L*79Dwe0xdA_eX$1KmKFMG?gx{u+&2VM}B1#tnd_imrQzN(2mCy#JdNFyBA zaRE3BqjxO3PhJx3S7G>)MD_*Df})pbHat(4&n+Wl|2dUOM1(S>2oP%50dB7#%ku7y z7t<9dtFzv)lgNlfoKyps2Xcq`sxrOhW-2n7Qq34Tr+T=_vc}EQOYklt$2i2ZH$0&! zHROW>5F$4mUwMw_I>Z0y<}Z(!_AYa~F__z-bEx6O2Z2_$*k4^>gldZb!VjSu9C#|l z#ENz_T_`z(LR*_HE>wQ^x4LQWLlMVmOfX}uYT z{%bELfk>s_LIf+0C9 z-@Thvt<*#+wXm+DgR`4KFzm8Y;yF~gRhetAfUS^?yX-!(#h8GDU=tr$%%*J>UFYmQ z!PK7K`JuRPb0zJ>haQZ2X()dFDDG4+zp2w+^r(UFk?MycSWao4X&L)Y<+j3^bQGYG zo~}gT^XW0Ec{a)Bpc0^%I~9P?Y@dFWgf*;xKi#{Y(;|vYHI)}z7|W4%uwUY z?)h51_hT3wp_WfD^U1y=q(|2}F>5{v9rwCeR^y|OJn~3j??>A|iRYdhEdL;KT)@Bf z@BVp5qYZT=gj}_?y*8`48W96$#)I%Folc!fr_9|TRKD~2|}Q?DbM61usi}@@s((DSeqPjX%OU+p4XjFTfT8#AT;}~qFH8=UT)ZN z(}(~)DQ})X)KGf(3-%nRSS_LA7v&GNeBC105pJlsJ<-ofl@HC{fk@5%U0-9@sP~S8 zi!&m7w3${o)6S}n!N<46j#?O2l@`xD&=v+%QCk;e@q)V%X!xT5I{QLm?IHihs%FD;r1&_Os0F}r_%W}>t z{QqAlm_%s+0Z<;GuU&FOpS8yWR*9R@_rx2-jxZa~l!j|sS;_l7*xkGNBrZu{w??vR z3~@IKF`4*U7fp$rwl}q_*wkdf6J5nlQ!xOZVp1tJIYuT6R(LsvtSu#n(s8cjy9ykQ zosqqL7I=R6q?On|g-Dl&mQuUrvHeLbh~m?hNaM)r9P)N_cmAfzTzFy`_SnO< zMzuK{6}U&@jJMZv`Um1+T)XfdWBmz4>CBuFT)t5hY3&kwJ9;%r(pzlelcNgUCf-Si z(@VdVkSzKw)!E4JNaG{d-gAYKlQz5!UJI7h6(P+&A3sxhYw;y7AKH4SEC(EW1`BPt z7w(JO@8NBR8&EJlVVHl-Kq-RUgiC{VND1sTt7pH6P$DxBuceMRg3G@PZU2V78t~Vk zXx{9LV%RIKmH@LeXkdR=EzeNYY90%;ZC(o~)O@`drUpj-) z*KhSHmVKn@^uL%NeAPs-N1sq~wl!uK)1x-U%MOnZ;2YTxHF;McRi=(-kXV}Kqp<5F z$4sbOBC^AP3_e}nT7-3U7K~JBs?7>nV~>(YoLsXWbuk>A@M;6SoTF=xWmNHx$Pk{r zPK-)9`Of;bdiJ|Y&B7JMdd(F=jS~A@(&<0Rs_zi|Y8#|Ng8DDZm8yDUkCBLDxjHu~wLOVS*?8P(|btsmYqa%k^HGJj|eyd14fFN7O1cI)QN?cAt z%`d};IKKkz@9^McbIeyo*7BA` zz(?L0e9Dc=AjEz#-zY*i^o^t?PJS#^9>RaX0xS5)8+CuLe}2$uNU>DbOxCc z2N%B|n*9o+td8eSusbq%_fS2Z`zavodk^z;PB}+qTx5y(gI$iqtXiXAcTvYUa;I1< z(4yfY^F~!6N|N6#02IR$E#Do~g*DaDA*&)moc6jO9P!8FJRA|f8DayQ`;XD!+)NG< zm!}e=Bc4)4LKsjN-9$C+odZtA+`&fVg*%#fC_gl8Mm~F=gNjo$S@6cuZacb}g(vCx zs>hnNd4-N;2B7n1$1pb&wyMYLs4E4V7=aRrE4>;Vg1*hJNwB-21PwI+IpHZ~dK8hN z-CUmtZ=w#JZ=Y+944fOFQaQnV(|R&IjV^?z(%HX4v$WcmaxEj`L^ooaeV!9BRH#h7 z5r1%ES8u`vboY>^6EUPEp}#kVM)orkCbmoW33Kjf%-0-qPfJHFbET}IzUBn2&tr2N zUodsV<~G~EGAIv^T$XKH=9{j6=C6O790uj=;3K$vlji$n`vK@MrYY5_8w%Zt?cg;S zI@M;M2gN{+K26nhJMoSwM(8AbR6$*w?q5)H zf>%;FOI}w+my}b3&<7kk&95_cM^KS-ELmHLLnE#%dvXK;HRoWwx?eEP!@z8TIFcmi zU0+UXT7tQ&Ubfn|!B7lr>P_qS2Ov~B+3pjvdF?%abhAElOhx+Y$9-QM2#%~7_C^?$ z9DEb{)kT{#m71%zH`4aJ$X*i8?pK$E3Si5@6xvvwwH1P50_Ll)*l`L<+Z1AejTO>x z_=Sdq_X1_5*Id{Xut+sUzt8B)lrcBV$f#r8aY9=kX%v&L^I}Zsqa)q)L~rXmC|oX4 zQm!cQCQ?x$7#B0bg_og^JYp7;Kx-VtGk_3jMXfu=Yk|j(LEq@jp*fK(I2T5~nPKzv z7Pqed!!5_XJ7`>hq+!k)9mz_oV$*ot{-*7+zX7BSRxjTe=>wbS6M6#;y2}ng-O79- za=7QF;TZ_orsIJtI0b*^JJD{{?gEEa7jF%pRKC@FtoH*`{Bu~qXjE>*RybMk0qXds z)6Zyv=@h zkjMv?!$CNJm1rffa~d1qd;FL0={6tL$h3Wr_u@R}ZtTy+dg)@iaH&o)U49A2_`pmT zS&H}ni3RNBWLA06pkKiY7N8GNJ!|tmWVp^{ z?!;P0G=%UoC9S4YEr89 ze|Wfz><%27S@jmw<(uyEash>c5D!p1wrjJOZs62_5^#F_JO@q%Yd!gU7YAmhZEVpJ z#=nFlmF6*4-?YEcjCL|~zkIO$leRcNsr90h?f%qjmAgnhFqvAK&?r1$^gw z9H+8T6U`Hz6LryZRf(4Cw3gZh)0B0cb8%Xtp1b6z5%nXP%;w5Q-#I`tnj*txp%5%O zx{ix@Q36-n6SIx76sPDP2Z?W!c+@*1enmL(d5UOtea%4ou%MTV0MZBObzy!+_yYSE z(8W6XJMLk2V&h3{4wvEKDc`={P1)w8eTx~F<%^o2o?ygTxK*yKg$hQy1z@@-;#r}O!}@lPQKNaQ%_062~Yir^P6#_^ZVc0nR};G z?!UF;rT@2fymYUf!W~Y(n%&jEs>rPX049 zDouEGkMNg0!X>rc^Uv)OUhRh4?{&tX@q6bte^vMJ{cgH9PVaa1{Z77i_xDTp*UMk{ zpqu`H^ZS3wU*hI3`Q866f2Eth+08%ezw`%E(EM9=wlg1V-0=Nwc#s=j?S`*$!_98^ z5jVWk4d2!yjD@=S=hgqUC=mXA>E{1ekMO^Hg!7&38D9C*-LTi6OQl)DKd=2?IKhmJ zDb9Ef(&pjcU^hJ131*bI;i+!e8?R0e{R_G2Tvp6KFF$Hm=AYLezZ>@Y<2IKu$1Tsj z!2I*tU)Uo&%ndJb^S|079PN?+AMX5k?dQ1Zce~{a-0*5QJiraNyWy+dus8od>M?)2 z-TG}efBzo!yUD5f;kIG^dG);p6`_A#`-eHf)Or`XVXyygb`YGiUJ&NypI6_&9{Gp5 z3o_WvU+IQR+;G4RSGwV|-0%!He5xB>;D!%#!*{#kDmT2^4cEHiRyRDs4exTpr@P@! zH+-ZU9(;~7o^#yrNH;vj4OhD1L2h`48$QMj&vC;cH@w6Rk95O#yWvtdyxI*BqG63+P8k15_-KG-+wEEoqW|09}(bGi_og znPFzqrdTmxfuaQh6fDAOMZ_uvE7r9rNW_X&k&RfjYSE}&tS+xcteSOE-ru?RJ~MYF zNnv;0{r}(hhVf}vV@3j8+SpRg)SB{p`q0yN98Q|Yj#p0~%(495`1kZ1n<)L1*>Da|^yBIC zIo9v#FHc`oS$+iMxHtSbwjl8y5f4=o^xBfZSpKJY#tbd2~S6RR9j>^-|?KXUa4Zp$qBi8Tf z_YUjl6hS}5wtaS5|2`Y;%@2pH-_v)8?EIKMA9?z>+wyz!bC30R*z|j?|9#f4)){&5 z+PZ%7t>2r^y!qoM8}7H^&DQVD2Z{O9hI{kfa_hg@^4DAc9_w$n{#&fS)A~nPzc(M; zYW@3d_-)pI$ojqc=9u-*u;D${KiuQD@}6$}YQ3rd`>nso`fs=XV(b5q^_N-y2d%%# z`o~*;z4aGazc+ueGu2Or4UbxXr}gi${zKNk+xok#-+B|M*seQ0LXjtMkMMWGeceVr z>B&VdH}rOk`z-d_NwuXGD8JnBd;PY^`aQjrp8nt4-?`D`ADL?RH)L@0xyf8QY* zSw~CAO@u$ryYk|0f0OVg8(wDjO;XPfIq7e(;r?oqzewl(PWY}0Q@*ar$?*3P{)Ekc zxs5+q_#!X=BN=*smr44&o%D;}B;0SqJ4=%FzsHGRWW%eLC&O(^_;d+$t!e~|Fc+3>#WjC^|TPln%0_>(sLRU000wHwiy(!;1@&{o^*`d(W{q2|r@PJDu{~;>6EcV#?p~N;3U>34h9#?|_Zpb4yab zdkO!N4c~9WJGxE%rGMS%q~B@7yB|oVe;46jCcgBw4ln*o$@q6T@!M^9?^?qz>F;sE zBVPQclkx9#!t1^8XtMktaKe|{@I$vI%f}kG>=|3XVjEud!DRfggnz|``)zpdt;z6l zgi}oY-P;WE;;mGYr>1qH|dK^i=6m9 zHoW6TQ@%{X*+Z0l-loxQ!>d*%!zU7c*oJr6aP?V}zqdYm*oGgn;bm#zkJ#}2Haud_ zb3`cn2PN4Ay>fKg@I#LN^uh!eRho7=Wc5ROd}YHsuTPE-H-51Vcl(DM?zwwEFmQY? zJhJQT;e*xRi(mEH!1CY!ob;09^V7q|zyB$Nr~H$_bG~43p7r1QdE@tD{?^9pviOAl zyoFb-EzY&^H{0;SFQ>+T;)wD0*z~=0PuO_BvDl;E`J~}rZp*PQtvqE%Q`4W5=Ks^@ zOnB`x2H$AYJ7e>YSh|;AhAsD(Y<)^Cp5fKg=KqSt^KJc#tQ?nE{|1Xs+xnigxXIGD zSv=C_|Ab91-{!yni>ADbtUUf^`EPvM&_`R`W#ctj|D%?_#HMrHhI{qfZ_6>m=6k8d zyDj~vHXo1wfUWn7R&E~sH&(7EEq%Jp=UU5ur^OFh?8STC=96pX^_=y4;p=QYJb%>Y zbECx`z0~IS6-(b_(>ZO+({0nAm{#uBZTb({_#qp<(aP-xOMlUpds$k4ywTF%WBDT1 zA5W{tRknY%Tij&JbC2~OwD?6EZ+|7we$wsfzYE7R(KqwPnn7C&vne_-(uo6hSte4K3`FTEG7yf@nZ;L-22{9P7% z^m{D-!)fg_!}>dHy%wc~PkO@WmqLqkELIlxJ#NB#Eq=w~lNNVd{Jh0aTl}QOpRstq z#dB=BB^J;4tVw^d#rIpjJr;LZJko~$#m0+U`g<&Xx5by*@Lr26ZM@UgzuNk%E&no$ z7h7Cvas5G4uJf(mZ}CPOf3wA_ZMyXq7g@gdSpP`t&#-u>jd#q>TYWa4S1gX&cqgsD z+v2ZS{=*hOZ|M_ldNwj|@hgW+`D?BJkoDhh@otOPS$w(0Q!LK1__S?@Zi^3F+-dPK%jcE5 z<9@U5>;7cw`mgK`)v9Et1RxZxYy!(i#sh=&VJj=OK|-jlWy0&srlt|&|M5v z0i>l!N0Eo>1xQP=e^;E5D9(8ldo{&*iz)-y*DCggiu-NFowQ;duekG8RU8CYad^wR zU->!Y<^Ei8C#^WgQJf{H{Q!Gb#lBjxw^6KbRqyBZK0{T#g#UY#0q6pXf6hMY75pVW z#W{&$ucug#tB$BoajvBDx8c4K_Xm86b+qcd#iv-$EB5?~eXU~e%b^h%V4bcyfc?NB z0C^~6t?KWB7vMfwbpXgm?ca<0e$smY_k%vg-L&F9T5-3lxIb3hH7o9!RrkkzihE+k z-LK-FS#fu)xDQs`VJprP74Hhj`vi(ReZ{@M;++A-dj+cZ0O@@i9-s`U0_uVN*JQ9S z&Ooji%HNWq_5&R;U{{7>AEP)6Qk?fF&U922wlFyxQJmj!D3hVs$Eva;xW5EHKaPC} zVDGKEF#EwCO>xel*sH3Jmw+D<|24wTWT@gl;Rf~tk$=NKJX5h}RR=E0RC5+*sxWQ- zqsx?Ph$>alqtx}kQ)>M?eCn0o_|%`t(|i0_Hr=RT=8?ZqwMn}x)e2Rk%GDCJQZ41* z27VrODZgD>1N~}^HJhe+T$T7%66YGQxHqUOe91TxL(=g02TxV0WpLHPKc9c{#8p^r zRYBFNVp#rA{N1XWRYbcb{7Ony3&^v8GJ21csD@mt6J@038E)s#(mMRL+g-m@IuD|y#usZMJ(rp;IBzI(M!$@rHLDl(R*T8CDW znn+dpsTo5vkyb#>q*u*Ec4u?zXqs~bJ-~Zp#MJ6?$cR(AZ^;N~q{jwq9}(X9w&lbv z&wNIz88ODc8SV&@Xs09%j2_fC?Ov_}7cefpr-B+(F=9S9K!kbC26e$Jk$fRg_CKS|cFx8Cat02^Cp}k-YHKQ1X~AO^Z%?Bjd>H3rTI@yOHk_lITJ`*gXVG((F&r-EUem+2t`!(R1lue$+=)4QmJVw(3Xhz$; z+v+DMBw-u*XEd|u0y8g&mXT+H9mNY6Gv0Frn$rC@-}=1p z^X&+id9fNviPn^7Ci+lHzJO68k2jV@1IQ!wnxFVvj289$Iv5!&v86Ho{_Q)^_(*L{ zKlQ4mz7_P=DF38~#nHV%-0A&smDY)Tz=llLlclHkOzx&V))OMK61fSFNJ(^`i6a`c zn);V(>C0Sxwbt|L^kr86uApp2Hj>ADVy#y15~qHS9UVR5N1vFndhb_9`oI3^bw@va z$y3keU%0R0gX{jVvT?~vM#yk>8TMsgEnCxaas0)Cj#Bj*RX^-6qMxcsQA)QEeLJ60 zuhb3)Em4DKALK>6cehdeQl! zwKi+Nq0d0m%plZzHZ=tN4WUrDu_4|ZMiEUPa_@u;0vF$%seIs-7Po`_Hj>bTS|`lY z>ydekO&O*0&=*myO#<4#1&Rqt(&sVeFN7{oY||6;_ek%;zjJyef5-Gn((BtEpVtzb zx4pS_-lk|nYoNJxi+HqqUg*Mk7tSl59|*}TAi6hQ&SqAfr{|DnB-&r9!DRZ4ErEG$ z@#c`5ta8F*O~FuTp8mVAM3_o!-cI!gDMyT%N#+wNLDDV#*(;G(?}6))jB~d5(ysrN z_|lI5mG}$)3-K2s3F+rDuCl;|_hc#=U!~w7;N4(9SRNTyTY{~@Xmg`#Yu(x!-rnjD zMx$Ywy_>_aIO@PmdXC?3$O*pKj#xYhS99yOhEQ`rg6UfRNI2H42e|de!(o3Y+`2_Y zg3*@dSd6jn4+LAAgEA+`v$;7G^atCUV{tPdw1)k$w#Fuywlz1RiX^4f6?LOC)aAT3)#uqFdTpf~|3r zs#21Fq=D3QK}{JX%qy2JFS#btwGlVBwKht{bvCiKNF*GMOC^bi(%b59*w)Y-YSa$mV69sH zjSa1h!H_3l5nD?`>khvZJm!Z@R)L&ZB-*1cr9Bz~0g4c-Yi_M;i&0q5PkHMS1tPvj z-`vpB9NJMQ!A`9yXSlT$!6T8nhLFrJJ0!_SG`vNUSBm+dPKreCvBqd~geKDEa^r2X zGL!&^9u01$Xto2T&||?wJCba?xm8P~&MRv)czqk)LC2K*EnVl^M8B_VYo(-(O-?f< z<(gW2`hA=s(-zTUa=MJQYY=Ag%GPtv`Y)pVGgc~HQ%7Sir4?^ zB!V7Ey11$}7~dX_ZmkP2c!lEmk**ek=TEOvYq)Mx+vd%|Xr1on^h0Tsc(^efq7Y_o z*6GopZkcua*Tv|{M#hQ$me%x%#L{}i_9$8)nN@s8#EgV^b4xH#7jE+!E}8E3a9b!) zw@F411+s1BH~lSrlqJKPTm5do)r=|q)^tX{TQ{k%*KUldSlm%I2|7jehd28J;TAm( z^?JsP6^SnWSr0LWW=ek+x@}X#7Y%O>w)!K@w*JZf>u(sizq4%8)2@O!d!$3w6^*w_}Ap6}lrjL^_|weNP;GlapF(!RMe~)EfR0u+#D2z z+!EgAb@b*?D7d8|1)_dj1+{{*(F5)l$iM$SW4ZEJYy3pB$&wpP19d@AiH1 zyNWv@{?zW4)Ps6N>DePLx-ZF}no^Rk$FbiV$21FFB*27V-`%98~rZxG68ynkXMj^Z{#K<+Hmld$x-^Ak5?<5n}2Xxn{Rr+?BBWg)2 zr8o;%GqCmYLTP;^$(iDd9#5ZNMRJMqCBmiG(8LLUY)8wcaHzRacPD=+xGflx9>8j< z%`SHIfYW+YI-yq4{)FCK+TIv+x|6C7#@nK;%k?C>GQ7n&NN*X-j%5uouej{An^-~5 z0k?5dy3zWlfg_w*`faUbUoL$8>2uf#Ht3bO?4Bit#5^w%GnsxsQ{`+apz~|je(#(^ z;>k&i_n6&gGXGVCZ6W>ZET5bi%Tr-Uq7jA+#|T*ovod1NvN^||@n53O$wEfqysSG-XD?#s`T zt9v$3qv{f;M%DHNwH6-g5svIw#`{dq;0%tOHy zt&z6)()QqLR>SMrSqIs9duRUA4$`JZ#+^=Ik)nC3h+D;(g!fc&LR7;kjYnB!Pg}h3 zO1RC5v7yLGcsY62S_U~Uuhpj+h9LJZazY|GniCu^-crq%PB-W4UTTVy9;u&Ta~5u} z+$xwe9+Rp$my?t$;I08n9fZqEDYevco-QY9a<(RJueL_M9^E^0lXTP1sU^WJO-DOtBE08UOvL>orQYwQd`a3FGwv#3etvNzHS;4SMG`Ak-MuX zBU*O(a@!=gPV>h+Rd7R&ddgpRUzd4_C z{mJ;=`L9Hlc1hl6zWGh1U-woizjw1HsmMKyxrK>Z?A^*V(lT;d7qw-N>ie3czl9#) zhDVs6=%Ftuz+)y`PyHOzY3Sqw~{lFgn;)*tGjKT z^c$DQ=kf?mw7Se*>2xpFV7F*qdV_^~bdS%&a&IO#Sns4(=FU@G=I%^f=44-7>!8+X zzN;)=Z?W8edHPyT-BWK+O-{KLt1A5~WE0I~>(^7Le`YLK*H&(IrF^B_hs;a3gqAAL z%QUySQIL6EW`FO=!5XNae}d%^pSV`Hg+d&>Y-?se>Yn?QR|TW8@mbs25Z!ULw+Fe@ zKYM25Y*{yW;pNfhcvDL--rU%qNp8iZ+!rQlFa0Y0KCc3eCi+b@oM-~`$PI-#nNK~T zUmai57L4v#(Q0;OoTs3%oDGR+A@6K-BP|yp)mDAi;ocCMekwDNtUIF3TbknjIgRJ} zS2fFdQh0ORUlERSWTnqb=KIlje$5nPbsP&u+098G_vHU>8dvVN<#zj0TryvnzoLKK z+h)a_)5P-ZaSyb8(t}S>b+*3 z&Ryp7YT8a()I6p=QninyEp)*ZT7R4MzqFhmx$V%s&(PYT$WuvineI^=wA zFwe&&{Uh1lqFqx{@#<5p^|s6xl9KcTS?$VS-Rj7(QnJIpQ1=(}mV?|k%AK8AdrA0W z-M3^1)2v6Kd4ojKo2S#2d(kTZ?~(Uwr0@ILIm~zTi}5EZp5LR0Umi~*8F~6OP5yY2 z^$0V$`3&h9$x!6}P;P_e)=*|+?@7HyH2p-@sp;>1$cjtWe6sqIH#x3uCNJ*z_zxN z`+5Ja4E1IB+EouF-;?0k5x}WJpZ2NBPkTH!=qraq)fwv7-%ilvH5e+Gsfrmm^P_== zc*BfMQHEIYyiBzp)n{qN#fGf9OQ8>g-mG~qlIVQ%tM&GL1hJX-C_C`W+&jOb8Y7Yw z<-)T&jV8oSXk}o_C$B%K?o_^Og?1u^wnC@ZlSUKb=~S9l0==m;ogUvLt0Ixzmd(up zx;ft^vZ<jY(hM$n|*bJjnMpdks;|nn5jB^o_~g(uDTw|WDGzHh@fYb;8gy9q#Q}w zLZOvG>rB#0h1LzNNzyZMFBaOOkEQTQ7gfigosxQ(w$ynXd^l5nOw6O{Ji4GcZLaf> z_sVw`CHQn6svEgV++;UWMbPpSw7^!cBh7(+EJ2Uz-qj1u@6o{d-?i6G{PlQH-9z}iAD(C|+BlwrO$nN5 zPok&mpZhw_``E!#YlggB`>x$`Rx{z;Tvb>)S`|j~dq?)yGD)Z9o{pnJG*O0B&$BNDx+9r zaLDo>hd1XI@@awpEwn{Gy#IJB?_0s|n~raWgOc(rl+7w$}aDYe{473 zQhR)HcmnX$X2UyFczcBJ06dr8uGC@S8#Ppo3S_HMgpVp29+B`e!kz+7O8FKHQ&ZyW z)Re$lHKnvxO+gO%w%xt@cfniqA*EiI^d{x0NdcgCxSCX&t0t8c^^WT)>>k~fuhaI! z_xn4jdn;+{_J4pj=^U_4BDVee;Q!*?w7em;`tc<(h@4FXSB;x#> zI6cHU(J#&+#H*7KZ}UG5|FaJ$ zl^3>cHb`6a!c)$>{$=n@xNwA;8knr6)=pwvoI@UkDk(iPCORpPlu5o1Sn^S5l0JQI zmT$b8*jv;yuDh^nbflm@zj#!Y=7ZvXY1r)2`~H%>qDSh!p|L{&J9de=hjY9 z=ax=Z=laH}Nxc($in_;j6-G?HweaSBmT~N)C+WnY-2)UwNGDgu{!o=$GBo1m^*Z4f z9%B70JOlK*MT9*7)Dk}7k`ZcFe7%|#Sf^%{uBCpfld`BXvhZYmf;iWGo-z!QZh)|t zfrAn*<7cq8fM@Sve*AfmbRHt?+<&4UNVwBK=0f{8PlQ z^%dr*LiA7}dZ>_oQCMPh!J=oBdKD;(QqK`tYD8(F8u8lD$h4dcl@nkx`3h?cAV9dT zdy1cd_MhOWAyG()%nr<|yqi< zcf#D^YGUAiHL>(QHPLsc8q-_QGpc(;*YF76@1Xa6$a&o{iVMgZTb@l;xA{q<_*<;Q zV&rN1R8@MLml6JLAR;`|^VIbCa5bGdU^;WabmoBRB~yAQ^-Sy%86Agj;kVIy!aKki zD5M$6sP> z#HGIup})>jL%K8TGm1^072!-$FtAGD`{GeRGqOTQnf#+Rh_dg1GWXZq{RkK5tPVNdaJR!;^xK+ElD zjw&W>FHlPOv}mr1o*AlIj%TYn+HopIL~}~>b@;>ZlnIZtyBkMw(ncIb97TGHIEuK6 zc&U8p@sL0KdEfV`X}}?!HtBe25I;3+@O)gpgp9QQ$WoCvl)4uvYByz1^;3q@|2U7H zJKTLr)zD%yKjgCq^l<{`Q#);bsebYcr1SKrrR&-wKA-wI-cO~h3yR12)QcFsJ4N~v=CP;o)urz5iZk@y zxyRP!IJ^%`@u|G`QWtNXsQU|T5B)`8F=0|x*FWLBVa%tqQsu-v>8&B=`DriU-ULwZdxF3aik0E7f%7>O!kS%WPTq5^w%Y`i8_! zYdb059>Tsmi(loC@G&`R%#)*fNAwKu8Wzc^&z7+WPY>Z^&!hc!A|F}bR-5(h9Ky^x zVI%co-#9?~ci3{Y6aSnGkPB%HRF1ub1?N#u2{$q|?a$sd0{upylQ1byihoF!UfZZN zKHsRUls#|We4n};I4*UVCi~%Q)hJ)BGAARZuXft9z7F4pV!lFIrLIb&eafHF8_+p!G(n@c!@B~GH>P#^im`y>z-`XJ-<6yXmq2mTJjo2fI0y8=&*C741o$y;%Fy4j7(~*?1`zoKB z{w|-Y7y1DDXbxe8*g9w@e8LntyBf||%~hkK!y}%aZ2YZH-3N%Y1YcYUmlWH25Xa2~2xKgJ|%ep|) zT{N7vYhlLh(lHsceR&z_XQfs7CQdEoaROH>nEJg zx;}oj-n$o-vWG`^7xb96p&8Vc>wM}aV25p+leo_S_geoF+g2y8^{IuYV@H7G^JU;L23);kgK-URpZmAEw3zz|6s8OA30VU-=3D0+4evJkH$x zG_>XKrj9}%q#slf{xVPrkC|KFHQ?Op%~z-3ZK!9i6aJ|=DxbE?e<`mww$ zTutyzY@od*e|_#Vg7eTk&O?WD9?CgT)SQR<;rS|X^iBAV!PC6Sr(S&%z6d-8jr7wG zoIT$nc)kiO7QXzUDxbcbPr34=c@Zi9F~U{{d@693bbNV3RUZ41yr`+a#GAX>r$S?nnbn4|L5=zEfT%9Zd;dyh{&ok+j`d9iQwP&JzU+-S-*I%>{IRLG~E z0bV~#JSoRfc$&k^fxBoceO~`j=7fLbynbKGdHo^OtMDI&_qOZl3-G7UKl`CaqV!`4 z(|yTXhjON5&y&RV$?h2IfJA;xcFs-CE1jjz^G#8yJ5VEoLil=tmBKs7 znCT<@==;!t@R+lwiJU!6;OuGifM-u_z6|vk@OgBDV2wU`o82jbqHs5Q`HFHBsJ9P!fu;pAw2g0`M1J%zT5#!V@?}4 zpnMM4IJ=6J`qU)O`iPU>?uVdnoy`6~(tE3C|M0(iD)++@N7ljd$5{g(WDWcnYv4zX zp0Bbx+}`_i!ashxQcp`9efB)tH!Cp9H>-4}Z4t#ZR2kv(U>DPtQkr z%ty>g%ttauEV6Yhg6EsSoZHUM*A35kvpL@vzH{IFo{nG6Q`67GW^{soyefP$b)_xk z*kH>s2i~dYa|a~+7i4p8`4Rfg1N5Eym3N=#-MfiRqq4cI!-QAwdtM$;H=h`4WU(CH zOGe=rakHFt{F}h3Q=zhMQeqNjC=iVM*Cp_nJ z)yJP4&(3rS=jt9*Q|q zk~p34zp6-I7l@V*Ar3cuD#HQa|)b04;b`>?C}or_9)h`jrV zv!+(5T~Z$1e+szA$VV5CRFk3!O{VL&0lw$gqW6T?S%<#>?N`8Q$y@gHFPS}kJ?Rg$ zE)T6kzXADsq;8^f*PwH&(7BvJ$hm{8t&x-HBCnj?@MocziizVJlcmORrZlExRK&DX zu6}pGu2tEyiZ0BTy=uxSg4B1{HQZ?dyCj{wEVCYZGDp|%6!bW6=p2-=v$V}lccJr=bxLAsM4u{p((LM_u6}rCwy_UQ%R}t<#eqJdpQW8ATsA_@ zjZe*(8<>(Yw{&vGT;I5i#E7%~e}BHIzt{u3vK@VJmy}!j_Xt_b_UqqbGw`cGK={)7 zf`12h7Qh|}8(_a&PuSOh0}`(L3VWZp^Zp3uol@_`H?tQ0fKMGuq%+Lu(GsIa#fIRz zTUeV)_#iSC+k&s$%G$4!KA_)as8LgEt9h4U4Sm7USCLdbAod7rcl%T+@qFWbYW&0K z7#YVUdbZJhu#4~y-0o9x;n8E9`;6+Gh%bkCuBx*la-%5qI0esDA7o7{d|B*oHz_qt z?^|=(x3YIFWj#_|(CgjTeew?0=GZvwVQnnf_A6S7G6+Z-zmW1|aCcdt3T(gg;(z=e z>I`HZ5N_tf5hl;a?`Pk6Ri={f+Jx?5am%CA2G`%sdw)W(&rH%;WZkRowQ1&N$Qgf? zm*y}j({%bN;llAcxMZ(!3m)e55szoYedt}Fiu47W`}SdK1nKIsaAsZf9OX*G6Z}I| z(I&=+ey4=rD4|}xtNPc=l+@JAtBYW^TDpuI?=iMSG8|e2S{Z)t*=Flr<`KYOa^&&c zLnfDZ{-aOJ^8vyny@OzRegu~MCOGnvvYPQeg7MCsDRX;KwK?fAV<|`FRu7F#m^)0J zQ@V~bp4BROnqc~AJ(>7Sn#IYvjd_hV(Li&XPS>7QPMA52d2J2X7+3X6SLQ+8zitNW zF*TC)2ReXr)53f5BRcG1>N7n{<@-LFkr^>_aQ;~Mhh?f^tdr%;)924q{y>59GspWm zL-I$HZ|x-4MCOc4_9%J23zU04ScdpaIco+lXFl&-F5%rb@|(cdEE59OWFdp4^*xYwx$j0t}#titL;+uub7&2!L*RsC8hBJU#HL^GP?w&5k zS=QEO4N$-yFrPi(DE5Fk{q}&x>;d2GJ;Vt!veoFoMCQv0YBY1ayb~g8p#4%l{cc@> zZwh%#A&)7(JfF8ls*<$zJUaN@Sp-=co(<^N!QV$K(0im&$eZ_G=v$n7>30S_-SC_J z8S2rGXQ)$vJa)}hHB9$OEjz|Sn!aqi*#c^2m~jH5!zW8WNz z46RCzqk=K4@tEhvL`U_=n>Sv1{!g*SJdmO018y1Ktn6R;aE7{hUxw-e+<0a@F{iS> z^6ofHoBo`2T@UNJpRukx(QjRMgms-Bzj1jd#%K3{G4_Cw#2zq$l9_M;_ki)SoZA<& zwjRUUdbFDK+SndxTbh`&iV@0xw2}41CdOt1BKASo zyjm~RCf@t3*LQohd9=-NHKtnc=IYHlXTbZMF0&`x%bxJg#5s}FUCzl&pL~Trd2-6&EiT)4 zp3buv;SX|l&};7h)^PuKRZ87NUnlkd;Cq`1{%kdpxXD`>Q%@a#@(?wga+wv2p;t+| zauyTc%UR65oW*n|&SK;p*kpP5eoViq?Z#t0SG$IBeKmb$dGg)Xdc#vJY3p+{zi(RU zRNpiv`1Cu8LkV3Y@3jtmPp@^2Uele=n(jQ-baUXHo*X|`ugPR@&ixj0?sxux?Jx69 z!L%ISftlQUPS1qy@m*shh4o_+?@&F@zMM$ zv%lp%)mp|P_lT2TO02dc=6)bw&eK!w2lU*a_oxrD|N02?_yf%2d*yDY%j++lB6qEy z=|{W+IfXlzDYU55GS*$t6si9e;b@BC|oe#=rXTA5J zsgw5DKP08vq3=%%%ZD!CG|1zvAB%7w{)kCS2iQMV1MvOy6aD!j1Mp3n-G?rLYpa-9Mz{T|@NuE%NP(_egj>;YSG1 zC%oz(Gu866@D9Se2=5@gi|`{(xR=ggSiYTcpVQW#Z_~*5s0q)vc)G<)EZ$&o$l^OK zK49_l7WY`(XR(*(tbS!(V$C=%(`K4#^e1e>UC|O)(hy%A7As7R`a|BDc-tm+P^zW@ zdtd9Z78Z=EY_-Z*7+VqyMl{0^b!9NVu5wjHTQrK@kxFYYuQ?bq@pDz;>%F#k&?bYb zs0`OEuV@m3Iyz7GsX0o2tGtX)tnEk2D_XE+rVW;uv_`1)tAla!!={Nf54YZg(KH*pkL5XwK5#u+7>BqYz()x#%r1bCQ61{*4!Fc)*Ow+5fKIrZAzJ% zzM7BsTr%G*dtWG0N6#jU*9QN8z^4x+`(g2C(Xp2@CLT-Dnm$LrzARI-_9e`Hvq_+WDg!DQbzMarI z;al$TJqm3De4S4Dz6EVR6@iXFb+2o1jd4sF(Rqz}#S&_d9Pp~<&_-t#mx`9Ac3 zBZCb`=~KvHpF_J5n*1)qK+k^CaG$q-@6E{L?caMda(Mgq-i#dH{=GLNhqr(4&B)>H z-+ME1c>DL>j2zzny*DF=w}0==$l>qxdvE8eE3T+pS9VSLhN`9I8_KweZ_cdS7Hi#( z-ILb%W_52C=FJ-;JL3%bxW2Qx)xI#Gc)Vr zSdLL+hHP()#Uk7}znT>fZ^yj4@YVb3wglsiO&Dg;uDWn+vq^;Sm?TC#9O7m&6;br-$3#`5WtCTks-Y(_+bQT*?F(#<;CFQ6j zy)-%PD&N@9x>?vzMri7%t2?z^LffP2 zqomx1xm{$SR%UIE2FZ73mUs~fmZ0i3G)CeWMa3wbdP3DTw8Xa5nUcPro20jy z#?+noDS90?r0a}H+>yviD)m*$W8!og9;|_jIqN1Qsnq*?m~n5$aB;MSuM_Jwo4UV5 zoN$YAx5TzJM&tS?G1MzQEUsgHyc|iiYS(*7lV8igsF38GJh+xViR{e@&a!B@r99Ty+$?r4)atl738~r9 zN+${PI{~p3VKEo0{+dPn)f`?l#M@%E;mUAK+s;!beS=$yyE20a!T10+q!#2|g<$1)r#4(23~}bPEx0=F(dyRLt;bfLDXIDxIbkuc)x_U4 zg!n`WVkIgOlXSQbmz0;$HBzLb7`Z~{NM|K+IOf^Xs*kx^<4dF`-`}r1ZaL6NF*o1qEYzU$Swa<)c-V!wAieBtd_uZuK$zsS;v#o>9J%C!bV@{1@K zN^jhe^6M$1B)+jkDy0@tmorwC=|DBXmWD_ZY3Kv1p-QSEq7$oUwD(E`WjY78wXCoc zQTRA7nYQV&I+csn`iAB>XNxuboJS~l^``d(8{_<7rqsh65SpJ0T0x!9^-^8Mp;^0} zG@3I>d&0P0DSfu+lp|YR-4@4;v9@(=IzC*N43y{6cHX6u9+N0CoSbrshBoC@8M?+8 zD@1*al@iLSBZq_-_F}dfW~HPHr|UMtsfBkyNj1Ef#L}ICc`6}wlM^{-DP86zj9lK9 z8Zv;r=2B(5ggyk7RuY+2$(Z8QRotc@7ztEV@!pQKk`d=hGh1MxHz*n~SQXZWs1;V> zh^bFh?NFmEg~_u`;e|3WajIzudD^dKrRa}Z-Ix$82xBN++=`G@X!zzOnC7nyug4x6 z$GK6g+)0iw)W}azWMkpl1k{ET+x=xX zm+s2^Q|0|2jgph!P$;z#$h@Hu9lf5>upY~vGWhja<+~#*gY!+Cn#Nn6(HSyzv-8vRo_n!s6l!c(giy5SoxWebYCHmno$yvWOQ zBEdvl?y01FmCPb$$dUI@p-2)5iWz;$(r6A_LzD_Vpumxrq3B+_G-)4oT?4<+z^_8A zH)FYid6M~UWpk@^JIQf%TT8=o42oh*Z#8M+-6U%r-EK}gX0XSIL_5%o0|kwh(l`Oh zyvL-4BvaEp(blQ9Ij%=Tp5~TSovG72wSq~%ncpe8K`ak8nju#n=jvn=nrkJ$_<>cy zwPL|*pm4@OB~#UaVLGl~wwna=w$gpG1YMJtw^c`JyGZrl!%3O&nO`Ir>$Y`Wm z9SjE2Ze(`Qu-H(P`E|XTLeJkK>hWE{9p=6QzaH=q^k~|m_0T%`Jps)iV`a!Jatv)Qze4)@x$#jdjfoY&e@RMRuQYGz4rNSD9Zo8m3n9 zD+^LlSribae+OticSasv3OU8;k6vqHk6ya4p4jpUZ(!YQWN@7svyvz_A5%3a(}(oW zPoYTCxyZfWs%JgpzBaleRYhTK9OcH^Mq%64n@5fIN(S-O7Ir0D15Wo% zbkZWH|5c!6xSk8uFs)+D7dr@!#)?NnMx#cR?o(#T5c96&cF;5OrQE420;mOwrAaWF zp17K5?iL;_P`DnyDD4C?xF%^nxLBXL;n;sU9xoAV95?6 zKp6q6=&$l)JZ^n_tWR4a4N*N9b@>*0?MI=Gazg_Zs;HHR&>=^*Th~!b&N1FG8n;lloYpU8}<^_7fUfT93R} z+?rea<8lFBAvf71Hcq!eV$v^l3SE|d`D~_XT!!>qV){LevvFAI1e0s8vvDWN zRFe1!Pq$1lJCf p7VVZef`hJ!`I}4U+;*Ps5Ca!NZ$V#F!qNbAo8x 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 W=uAHFoPv1}{g*AA0{Q+QhW`OF`k+(* literal 0 HcmV?d00001 diff --git a/config b/config new file mode 100644 index 0000000..c27e69d --- /dev/null +++ b/config @@ -0,0 +1,16 @@ +[core] + repositoryformatversion = 0 + filemode = false + bare = false + logallrefupdates = true + symlinks = false + ignorecase = true +[remote "origin"] + url = git@github.com:ccknbc-actions/blog-yun.git + fetch = +refs/heads/*:refs/remotes/origin/* + url = git@e.coding.net:ccknbc/blog/blog-yun.git + url = git@gitee.com:ccknbc/blog-yun.git + url = git@gitlab.com:CCKNBC/yun.git +[branch "master"] + remote = origin + merge = refs/heads/master diff --git a/git update.bat b/git update.bat new file mode 100644 index 0000000..94eed3c --- /dev/null +++ b/git update.bat @@ -0,0 +1,3 @@ +git add -A +git commit -m "%date% %time%: Updated By CCKNBC Local" +git push origin -f \ No newline at end of file diff --git a/hexo cl.bat b/hexo cl.bat new file mode 100644 index 0000000..2462081 --- /dev/null +++ b/hexo cl.bat @@ -0,0 +1 @@ +hexo cl \ No newline at end of file diff --git a/hexo d.bat b/hexo d.bat new file mode 100644 index 0000000..69c1fdb --- /dev/null +++ b/hexo d.bat @@ -0,0 +1 @@ +hexo d \ No newline at end of file diff --git a/hexo g.bat b/hexo g.bat new file mode 100644 index 0000000..2fffa28 --- /dev/null +++ b/hexo g.bat @@ -0,0 +1 @@ +hexo g \ No newline at end of file diff --git a/hexo s.bat b/hexo s.bat new file mode 100644 index 0000000..44ecda2 --- /dev/null +++ b/hexo s.bat @@ -0,0 +1 @@ +hexo s \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..585c7c8 --- /dev/null +++ b/package.json @@ -0,0 +1,37 @@ +{ + "name": "hexo-site", + "version": "0.0.0", + "private": true, + "scripts": { + "build": "hexo generate", + "clean": "hexo clean", + "deploy": "hexo deploy", + "server": "hexo server" + }, + "hexo": { + "version": "5.2.0" + }, + "dependencies": { + "hexo": "^5.2.0", + "hexo-cli": "^4.2.0", + "hexo-deployer-git": "^2.1.0", + "hexo-feed": "^1.0.2", + "hexo-generator-archive": "^1.0.0", + "hexo-generator-category": "^1.0.0", + "hexo-generator-index": "^2.0.0", + "hexo-generator-search": "^2.4.1", + "hexo-generator-tag": "^1.0.0", + "hexo-render-pug": "^2.1.4", + "hexo-renderer-ejs": "^1.0.0", + "hexo-renderer-marked": "^3.2.0", + "hexo-renderer-pug": "^1.0.0", + "hexo-renderer-stylus": "^2.0.1", + "hexo-server": "2.0.0", + "hexo-tag-aplayer": "^3.0.4", + "hexo-wordcount": "^6.0.1" + }, + "devDependencies": { + "hexo-generator-baidu-sitemap": "^0.1.9", + "hexo-generator-sitemap": "^2.1.0" + } +} diff --git a/scaffolds/draft.md b/scaffolds/draft.md new file mode 100644 index 0000000..498e95b --- /dev/null +++ b/scaffolds/draft.md @@ -0,0 +1,4 @@ +--- +title: {{ title }} +tags: +--- diff --git a/scaffolds/page.md b/scaffolds/page.md new file mode 100644 index 0000000..2771bdc --- /dev/null +++ b/scaffolds/page.md @@ -0,0 +1,4 @@ +--- +title: {{ links }} +date: {{ date }} +--- diff --git a/scaffolds/post.md b/scaffolds/post.md new file mode 100644 index 0000000..1f9b9a4 --- /dev/null +++ b/scaffolds/post.md @@ -0,0 +1,5 @@ +--- +title: {{ title }} +date: {{ date }} +tags: +--- diff --git a/scripts/auto_open.js b/scripts/auto_open.js new file mode 100644 index 0000000..06ef9c6 --- /dev/null +++ b/scripts/auto_open.js @@ -0,0 +1,4 @@ +var spawn = require('child_process').exec; +hexo.on('new', function(data){ + spawn('start "D:\Program Files\Typora\Typora.exe" ' + data.path); +}); diff --git a/source/.github/ISSUE_TEMPLATE/comment.md b/source/.github/ISSUE_TEMPLATE/comment.md new file mode 100644 index 0000000..7e18dbd --- /dev/null +++ b/source/.github/ISSUE_TEMPLATE/comment.md @@ -0,0 +1,18 @@ +--- +name: comment +about: Article comments - 文章评论 +title: 这里填写你评论的文章的名称 · CC的部落格 +labels: 💬comment +assignees: '' + +--- + +文章链接: + + \ No newline at end of file diff --git a/source/.github/workflows/sync.yml b/source/.github/workflows/sync.yml new file mode 100644 index 0000000..897e535 --- /dev/null +++ b/source/.github/workflows/sync.yml @@ -0,0 +1,30 @@ +name: Sync + +on: + push: + branches: [ master ] + +jobs: + build: + runs-on: ubuntu-latest + steps: + # - name: Sync to Gitee + # uses: wearerequired/git-mirror-action@master + # env: + # # 注意在 Settings->Secrets 配置 GITEE_RSA_PRIVATE_KEY + # SSH_PRIVATE_KEY: ${{ secrets.GITEE_RSA_PRIVATE_KEY }} + # with: + # # 注意替换为你的 GitHub 源仓库地址 + # source-repo: "git@github.com:CCKNBC/ccknbc.github.io.git" + # # 注意替换为你的 Gitee 目标仓库地址 + # destination-repo: "git@gitee.com:ccknbc/ccknbc.git" + + - name: Build Gitee Pages + uses: yanglbme/gitee-pages-action@master + with: + # 注意替换为你的 Gitee 用户名 + gitee-username: ccknbc + # 注意在 Settings->Secrets 配置 GITEE_PASSWORD + gitee-password: ${{ secrets.GITEE_PASSWORD }} + # 注意替换为你的 Gitee 仓库 + gitee-repo: ccknbc/yun \ No newline at end of file diff --git a/source/404.html b/source/404.html new file mode 100644 index 0000000..50229d5 --- /dev/null +++ b/source/404.html @@ -0,0 +1,14 @@ + + + + + Document + + + + +

+ + \ No newline at end of file diff --git a/source/LICENSE b/source/LICENSE new file mode 100644 index 0000000..3b7b82d --- /dev/null +++ b/source/LICENSE @@ -0,0 +1,427 @@ +Attribution-ShareAlike 4.0 International + +======================================================================= + +Creative Commons Corporation ("Creative Commons") is not a law firm and +does not provide legal services or legal advice. Distribution of +Creative Commons public licenses does not create a lawyer-client or +other relationship. Creative Commons makes its licenses and related +information available on an "as-is" basis. Creative Commons gives no +warranties regarding its licenses, any material licensed under their +terms and conditions, or any related information. Creative Commons +disclaims all liability for damages resulting from their use to the +fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and +conditions that creators and other rights holders may use to share +original works of authorship and other material subject to copyright +and certain other rights specified in the public license below. The +following considerations are for informational purposes only, are not +exhaustive, and do not form part of our licenses. + + Considerations for licensors: Our public licenses are + intended for use by those authorized to give the public + permission to use material in ways otherwise restricted by + copyright and certain other rights. Our licenses are + irrevocable. Licensors should read and understand the terms + and conditions of the license they choose before applying it. + Licensors should also secure all rights necessary before + applying our licenses so that the public can reuse the + material as expected. Licensors should clearly mark any + material not subject to the license. This includes other CC- + licensed material, or material used under an exception or + limitation to copyright. More considerations for licensors: + wiki.creativecommons.org/Considerations_for_licensors + + Considerations for the public: By using one of our public + licenses, a licensor grants the public permission to use the + licensed material under specified terms and conditions. If + the licensor's permission is not necessary for any reason--for + example, because of any applicable exception or limitation to + copyright--then that use is not regulated by the license. Our + licenses grant only permissions under copyright and certain + other rights that a licensor has authority to grant. Use of + the licensed material may still be restricted for other + reasons, including because others have copyright or other + rights in the material. A licensor may make special requests, + such as asking that all changes be marked or described. + Although not required by our licenses, you are encouraged to + respect those requests where reasonable. More_considerations + for the public: + wiki.creativecommons.org/Considerations_for_licensees + +======================================================================= + +Creative Commons Attribution-ShareAlike 4.0 International Public +License + +By exercising the Licensed Rights (defined below), You accept and agree +to be bound by the terms and conditions of this Creative Commons +Attribution-ShareAlike 4.0 International Public License ("Public +License"). To the extent this Public License may be interpreted as a +contract, You are granted the Licensed Rights in consideration of Your +acceptance of these terms and conditions, and the Licensor grants You +such rights in consideration of benefits the Licensor receives from +making the Licensed Material available under these terms and +conditions. + + +Section 1 -- Definitions. + + a. Adapted Material means material subject to Copyright and Similar + Rights that is derived from or based upon the Licensed Material + and in which the Licensed Material is translated, altered, + arranged, transformed, or otherwise modified in a manner requiring + permission under the Copyright and Similar Rights held by the + Licensor. For purposes of this Public License, where the Licensed + Material is a musical work, performance, or sound recording, + Adapted Material is always produced where the Licensed Material is + synched in timed relation with a moving image. + + b. Adapter's License means the license You apply to Your Copyright + and Similar Rights in Your contributions to Adapted Material in + accordance with the terms and conditions of this Public License. + + c. BY-SA Compatible License means a license listed at + creativecommons.org/compatiblelicenses, approved by Creative + Commons as essentially the equivalent of this Public License. + + d. Copyright and Similar Rights means copyright and/or similar rights + closely related to copyright including, without limitation, + performance, broadcast, sound recording, and Sui Generis Database + Rights, without regard to how the rights are labeled or + categorized. For purposes of this Public License, the rights + specified in Section 2(b)(1)-(2) are not Copyright and Similar + Rights. + + e. Effective Technological Measures means those measures that, in the + absence of proper authority, may not be circumvented under laws + fulfilling obligations under Article 11 of the WIPO Copyright + Treaty adopted on December 20, 1996, and/or similar international + agreements. + + f. Exceptions and Limitations means fair use, fair dealing, and/or + any other exception or limitation to Copyright and Similar Rights + that applies to Your use of the Licensed Material. + + g. License Elements means the license attributes listed in the name + of a Creative Commons Public License. The License Elements of this + Public License are Attribution and ShareAlike. + + h. Licensed Material means the artistic or literary work, database, + or other material to which the Licensor applied this Public + License. + + i. Licensed Rights means the rights granted to You subject to the + terms and conditions of this Public License, which are limited to + all Copyright and Similar Rights that apply to Your use of the + Licensed Material and that the Licensor has authority to license. + + j. Licensor means the individual(s) or entity(ies) granting rights + under this Public License. + + k. Share means to provide material to the public by any means or + process that requires permission under the Licensed Rights, such + as reproduction, public display, public performance, distribution, + dissemination, communication, or importation, and to make material + available to the public including in ways that members of the + public may access the material from a place and at a time + individually chosen by them. + + l. Sui Generis Database Rights means rights other than copyright + resulting from Directive 96/9/EC of the European Parliament and of + the Council of 11 March 1996 on the legal protection of databases, + as amended and/or succeeded, as well as other essentially + equivalent rights anywhere in the world. + + m. You means the individual or entity exercising the Licensed Rights + under this Public License. Your has a corresponding meaning. + + +Section 2 -- Scope. + + a. License grant. + + 1. Subject to the terms and conditions of this Public License, + the Licensor hereby grants You a worldwide, royalty-free, + non-sublicensable, non-exclusive, irrevocable license to + exercise the Licensed Rights in the Licensed Material to: + + a. reproduce and Share the Licensed Material, in whole or + in part; and + + b. produce, reproduce, and Share Adapted Material. + + 2. Exceptions and Limitations. For the avoidance of doubt, where + Exceptions and Limitations apply to Your use, this Public + License does not apply, and You do not need to comply with + its terms and conditions. + + 3. Term. The term of this Public License is specified in Section + 6(a). + + 4. Media and formats; technical modifications allowed. The + Licensor authorizes You to exercise the Licensed Rights in + all media and formats whether now known or hereafter created, + and to make technical modifications necessary to do so. The + Licensor waives and/or agrees not to assert any right or + authority to forbid You from making technical modifications + necessary to exercise the Licensed Rights, including + technical modifications necessary to circumvent Effective + Technological Measures. For purposes of this Public License, + simply making modifications authorized by this Section 2(a) + (4) never produces Adapted Material. + + 5. Downstream recipients. + + a. Offer from the Licensor -- Licensed Material. Every + recipient of the Licensed Material automatically + receives an offer from the Licensor to exercise the + Licensed Rights under the terms and conditions of this + Public License. + + b. Additional offer from the Licensor -- Adapted Material. + Every recipient of Adapted Material from You + automatically receives an offer from the Licensor to + exercise the Licensed Rights in the Adapted Material + under the conditions of the Adapter's License You apply. + + c. No downstream restrictions. You may not offer or impose + any additional or different terms or conditions on, or + apply any Effective Technological Measures to, the + Licensed Material if doing so restricts exercise of the + Licensed Rights by any recipient of the Licensed + Material. + + 6. No endorsement. Nothing in this Public License constitutes or + may be construed as permission to assert or imply that You + are, or that Your use of the Licensed Material is, connected + with, or sponsored, endorsed, or granted official status by, + the Licensor or others designated to receive attribution as + provided in Section 3(a)(1)(A)(i). + + b. Other rights. + + 1. Moral rights, such as the right of integrity, are not + licensed under this Public License, nor are publicity, + privacy, and/or other similar personality rights; however, to + the extent possible, the Licensor waives and/or agrees not to + assert any such rights held by the Licensor to the limited + extent necessary to allow You to exercise the Licensed + Rights, but not otherwise. + + 2. Patent and trademark rights are not licensed under this + Public License. + + 3. To the extent possible, the Licensor waives any right to + collect royalties from You for the exercise of the Licensed + Rights, whether directly or through a collecting society + under any voluntary or waivable statutory or compulsory + licensing scheme. In all other cases the Licensor expressly + reserves any right to collect such royalties. + + +Section 3 -- License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the +following conditions. + + a. Attribution. + + 1. If You Share the Licensed Material (including in modified + form), You must: + + a. retain the following if it is supplied by the Licensor + with the Licensed Material: + + i. identification of the creator(s) of the Licensed + Material and any others designated to receive + attribution, in any reasonable manner requested by + the Licensor (including by pseudonym if + designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of + warranties; + + v. a URI or hyperlink to the Licensed Material to the + extent reasonably practicable; + + b. indicate if You modified the Licensed Material and + retain an indication of any previous modifications; and + + c. indicate the Licensed Material is licensed under this + Public License, and include the text of, or the URI or + hyperlink to, this Public License. + + 2. You may satisfy the conditions in Section 3(a)(1) in any + reasonable manner based on the medium, means, and context in + which You Share the Licensed Material. For example, it may be + reasonable to satisfy the conditions by providing a URI or + hyperlink to a resource that includes the required + information. + + 3. If requested by the Licensor, You must remove any of the + information required by Section 3(a)(1)(A) to the extent + reasonably practicable. + + b. ShareAlike. + + In addition to the conditions in Section 3(a), if You Share + Adapted Material You produce, the following conditions also apply. + + 1. The Adapter's License You apply must be a Creative Commons + license with the same License Elements, this version or + later, or a BY-SA Compatible License. + + 2. You must include the text of, or the URI or hyperlink to, the + Adapter's License You apply. You may satisfy this condition + in any reasonable manner based on the medium, means, and + context in which You Share Adapted Material. + + 3. You may not offer or impose any additional or different terms + or conditions on, or apply any Effective Technological + Measures to, Adapted Material that restrict exercise of the + rights granted under the Adapter's License You apply. + + +Section 4 -- Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that +apply to Your use of the Licensed Material: + + a. for the avoidance of doubt, Section 2(a)(1) grants You the right + to extract, reuse, reproduce, and Share all or a substantial + portion of the contents of the database; + + b. if You include all or a substantial portion of the database + contents in a database in which You have Sui Generis Database + Rights, then the database in which You have Sui Generis Database + Rights (but not its individual contents) is Adapted Material, + + including for purposes of Section 3(b); and + c. You must comply with the conditions in Section 3(a) if You Share + all or a substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not +replace Your obligations under this Public License where the Licensed +Rights include other Copyright and Similar Rights. + + +Section 5 -- Disclaimer of Warranties and Limitation of Liability. + + a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE + EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS + AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF + ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, + IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, + WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR + PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, + ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT + KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT + ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. + + b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE + TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, + NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, + INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, + COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR + USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN + ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR + DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR + IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. + + c. The disclaimer of warranties and limitation of liability provided + above shall be interpreted in a manner that, to the extent + possible, most closely approximates an absolute disclaimer and + waiver of all liability. + + +Section 6 -- Term and Termination. + + a. This Public License applies for the term of the Copyright and + Similar Rights licensed here. However, if You fail to comply with + this Public License, then Your rights under this Public License + terminate automatically. + + b. Where Your right to use the Licensed Material has terminated under + Section 6(a), it reinstates: + + 1. automatically as of the date the violation is cured, provided + it is cured within 30 days of Your discovery of the + violation; or + + 2. upon express reinstatement by the Licensor. + + For the avoidance of doubt, this Section 6(b) does not affect any + right the Licensor may have to seek remedies for Your violations + of this Public License. + + c. For the avoidance of doubt, the Licensor may also offer the + Licensed Material under separate terms or conditions or stop + distributing the Licensed Material at any time; however, doing so + will not terminate this Public License. + + d. Sections 1, 5, 6, 7, and 8 survive termination of this Public + License. + + +Section 7 -- Other Terms and Conditions. + + a. The Licensor shall not be bound by any additional or different + terms or conditions communicated by You unless expressly agreed. + + b. Any arrangements, understandings, or agreements regarding the + Licensed Material not stated herein are separate from and + independent of the terms and conditions of this Public License. + + +Section 8 -- Interpretation. + + a. For the avoidance of doubt, this Public License does not, and + shall not be interpreted to, reduce, limit, restrict, or impose + conditions on any use of the Licensed Material that could lawfully + be made without permission under this Public License. + + b. To the extent possible, if any provision of this Public License is + deemed unenforceable, it shall be automatically reformed to the + minimum extent necessary to make it enforceable. If the provision + cannot be reformed, it shall be severed from this Public License + without affecting the enforceability of the remaining terms and + conditions. + + c. No term or condition of this Public License will be waived and no + failure to comply consented to unless expressly agreed to by the + Licensor. + + d. Nothing in this Public License constitutes or may be interpreted + as a limitation upon, or waiver of, any privileges and immunities + that apply to the Licensor or You, including from the legal + processes of any jurisdiction or authority. + + +======================================================================= + +Creative Commons is not a party to its public +licenses. Notwithstanding, Creative Commons may elect to apply one of +its public licenses to material it publishes and in those instances +will be considered the “Licensor.” The text of the Creative Commons +public licenses is dedicated to the public domain under the CC0 Public +Domain Dedication. Except for the limited purpose of indicating that +material is shared under a Creative Commons public license or as +otherwise permitted by the Creative Commons policies published at +creativecommons.org/policies, Creative Commons does not authorize the +use of the trademark "Creative Commons" or any other trademark or logo +of Creative Commons without its prior written consent including, +without limitation, in connection with any unauthorized modifications +to any of its public licenses or any other arrangements, +understandings, or agreements concerning use of licensed material. For +the avoidance of doubt, this paragraph does not form part of the +public licenses. + +Creative Commons may be contacted at creativecommons.org. diff --git "a/source/_posts/\345\217\260\346\271\276/\347\254\25455\345\261\212\351\207\221\351\222\237\345\245\226\345\205\245\345\233\264\345\220\215\345\215\225.md" "b/source/_posts/\345\217\260\346\271\276/\347\254\25455\345\261\212\351\207\221\351\222\237\345\245\226\345\205\245\345\233\264\345\220\215\345\215\225.md" new file mode 100644 index 0000000..657e898 --- /dev/null +++ "b/source/_posts/\345\217\260\346\271\276/\347\254\25455\345\261\212\351\207\221\351\222\237\345\245\226\345\205\245\345\233\264\345\220\215\345\215\225.md" @@ -0,0 +1,1077 @@ +--- +title: 第55届金钟奖相关 +date: 2020-08-26 14:03:44 +updated: 2020-09-26 23:59:59 +tags: 金钟奖 +categories: 金钟奖 +id: 6 +author: CC +email: zekangsun@outlook.com +cover: https://cdn.jsdelivr.net/gh/ccknbc-backup/photos/blog/2020-10-03~17:04:47.png +top_img: https://cdn.jsdelivr.net/gh/ccknbc-backup/photos/blog/2020-10-03~17:04:47.png +--- + +- **资料来自维基百科,自由的百科全书,根据相关法律法规做了适当修改,坚持一个中国原则,但也遵守CC BY SA协议** + +| 第55届金钟奖 55th Golden Bell Awards | [![GBA55.jpg](https://upload.wikimedia.org/wikipedia/zh/thumb/7/7d/GBA55.jpg/250px-GBA55.jpg)](https://zh.wikipedia.org/wiki/File:GBA55.jpg) | +| :----------------------------------------------------------- | ------------------------------------------------------------ | +| 日期 | 广播类:2020年9月19日电视类:2020年9月26日 | +| 地点 | [台湾](https://zh.wikipedia.org/wiki/臺灣地區)[台北市](https://zh.wikipedia.org/wiki/臺北市)[国父纪念馆](https://zh.wikipedia.org/wiki/國立國父紀念館) | +| 国家或地区 | [中国台湾](https://zh.wikipedia.org/wiki/臺灣) | +| 主办单位 | 指导单位:[文化部](https://zh.wikipedia.org/wiki/文化部)主办单位:[文化部影视及流行音乐产业局](https://zh.wikipedia.org/wiki/文化部影視及流行音樂產業局)承办单位:[三立电视](https://zh.wikipedia.org/wiki/三立電視) | +| 主持人 | 广播:[吴玛丽](https://zh.wikipedia.org/wiki/吳瑪麗)、[陈子见](https://zh.wikipedia.org/wiki/陳子見)电视:[白家绮](https://zh.wikipedia.org/wiki/白家綺)、[Gino](https://zh.wikipedia.org/wiki/Gino)、[曾莞婷](https://zh.wikipedia.org/wiki/曾莞婷)、[陈冠霖](https://zh.wikipedia.org/wiki/陳冠霖)、[黄路梓茵](https://zh.wikipedia.org/wiki/黄路梓茵)、[卢广仲](https://zh.wikipedia.org/wiki/盧廣仲)、[曾国城](https://zh.wikipedia.org/wiki/曾國城)、[炎亚纶](https://zh.wikipedia.org/wiki/炎亞綸) | +| 预展主持人 | 电视类星光大道:[黄豪平](https://zh.wikipedia.org/wiki/黃豪平)、[李霈瑜](https://zh.wikipedia.org/wiki/李霈瑜) | +| 官方网站 | [gba.tavis.tw](http://gba.tavis.tw/) | +| 电视/电台转播 | | +| 电视网络 | 广播类:三立电视、[Vidol](https://zh.wikipedia.org/wiki/Vidol)电视类:三立电视、[公视](https://zh.wikipedia.org/wiki/公共電視文化事業基金會)、Vidol | +| 时长 | 广播类:电视类: | +| ← [第54届](https://zh.wikipedia.org/wiki/第54屆金鐘獎)[金钟奖](https://zh.wikipedia.org/wiki/金鐘獎)[第56届](https://zh.wikipedia.org/w/index.php?title=第56屆金鐘獎&action=edit&redlink=1) → | | + +**第55届金钟奖**(英语:**55th Golden Bell Awards / 55th GBA**)是2020年[台湾](https://zh.wikipedia.org/wiki/臺灣)[传媒](https://zh.wikipedia.org/wiki/傳媒)业界的年度盛事之一,以表扬2020年度杰出的台湾[广播](https://zh.wikipedia.org/wiki/台灣廣播)与[电视](https://zh.wikipedia.org/wiki/臺灣電視史)从业人员,延续过往模式分为广播、电视金钟奖,并均于台北市国父纪念馆举行。广播金钟奖颁奖典礼于2020年(民国109年)9月19日举行,由[吴玛丽](https://zh.wikipedia.org/wiki/吳瑪麗)、[陈子见](https://zh.wikipedia.org/wiki/陳子見)担任典礼主持人;电视金钟奖颁奖典礼于2020年(民国109年)9月26日举行,由[白家绮](https://zh.wikipedia.org/wiki/白家綺)、[Gino](https://zh.wikipedia.org/wiki/Gino)、[曾莞婷](https://zh.wikipedia.org/wiki/曾莞婷)、[陈冠霖](https://zh.wikipedia.org/wiki/陳冠霖)/[黄路梓茵](https://zh.wikipedia.org/wiki/黄路梓茵)、[卢广仲](https://zh.wikipedia.org/wiki/盧廣仲)/[曾国城](https://zh.wikipedia.org/wiki/曾國城)、[炎亚纶](https://zh.wikipedia.org/wiki/炎亞綸)三个组合分段担任典礼主持人,[黄豪平](https://zh.wikipedia.org/wiki/黃豪平)、[李霈瑜](https://zh.wikipedia.org/wiki/李霈瑜)担任星光大道主持人。 + +- https://zh.wikipedia.org/wiki/第55屆金鐘獎#外部連結) + +## 过程[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=4)] + +- [文化部影视及流行音乐产业局](https://zh.wikipedia.org/wiki/文化部影視及流行音樂產業局)主办。 +- [三立电视](https://zh.wikipedia.org/wiki/三立電視)承办,[三立都会台](https://zh.wikipedia.org/wiki/三立都會台)直播颁奖典礼。 + +### [广播](https://zh.wikipedia.org/wiki/廣播)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=5)] + +- 本届广播金钟奖报名时间为2020年4月13日~2020年5月4日 +- 本届广播金钟奖特别奖推荐时间为2020年4月13日~2020年6月5日 +- 2020年8月19日公布广播金钟奖入围名单。 + +### [电视](https://zh.wikipedia.org/wiki/電視)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=6)] + +- 本届电视金钟奖报名时间为2020年4月13日~2020年5月4日 +- 本届电视金钟奖特别奖推荐时间为2020年4月13日~2020年6月5日 +- 2020年8月26日公布电视金钟奖入围名单。 + +## 广播类入围暨得奖名单[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=7)] + +109年度广播金钟奖颁奖典礼于2020年9月19日于台北市国父纪念馆举行,颁发如下奖项: + +### 节目奖[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=8)] + +#### [流行音乐节目奖](https://zh.wikipedia.org/wiki/金鐘獎流行音樂節目獎得獎列表)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=9)] + +| | 入围/得奖作品 | 制作公司/广播公司 | 颁奖嘉宾 | +| ---- | -------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | +| | 《Langdau原创社》 | [财团法人原住民族文化事业基金会](https://zh.wikipedia.org/wiki/原住民族文化事業基金會) | [黄子佼](https://zh.wikipedia.org/wiki/黃子佼)、[茄子蛋](https://zh.wikipedia.org/wiki/茄子蛋) | +| 获奖 | 《Street Voice未来进行式》 | [飞碟广播股份有限公司](https://zh.wikipedia.org/wiki/飛碟聯播網) | | +| | 《耳朵借我》 | 财团法人原住民族文化事业基金会 | | +| | 《告白》 | [内政部警政署警察广播电台](https://zh.wikipedia.org/wiki/警察廣播電臺) | | +| | 《宝岛真无闲》 | [宝岛新声广播电台股份有限公司](https://zh.wikipedia.org/wiki/寶島聯播網) | | + +#### [类型音乐节目奖](https://zh.wikipedia.org/wiki/金鐘獎類型音樂節目獎得獎列表)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=10)] + +| | 入围/得奖作品 | 制作公司/广播公司 | 颁奖嘉宾 | +| ---- | ------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| 获奖 | 《Jazz Supreme 爵士‧无所不在》 | 财团法人台北劳工教育电台基金会 | [吴建恒](https://zh.wikipedia.org/wiki/吳建恆)、[ABAO阿爆](https://zh.wikipedia.org/wiki/阿爆) | +| | 《客家妹来打卡》 | [财团法人客家公共传播基金会](https://zh.wikipedia.org/wiki/客家公共傳播基金會) | | +| | 《原声探索》 | [财团法人原住民族文化事业基金会](https://zh.wikipedia.org/wiki/原住民族文化事業基金會) | | +| | 《倾听音乐》 | 财团法人佳音广播电台 | | +| | 《当音乐来敲门》 | [正声广播股份有限公司](https://zh.wikipedia.org/wiki/正聲廣播公司) | | + +#### [教育文化节目奖](https://zh.wikipedia.org/wiki/廣播金鐘獎教育文化節目獎)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=11)] + +| | 入围/得奖作品 | 制作公司/广播公司 | 颁奖嘉宾 | +| ---- | ------------------------ | ------------------------------------------------------------ | -------------- | +| | 《自然笔记》 | [国立教育广播电台](https://zh.wikipedia.org/wiki/國立教育廣播電臺) | 王美英、范钦慧 | +| | 《森林美乐地》 | [汉声广播电台](https://zh.wikipedia.org/wiki/漢聲廣播電台) | | +| | 《笔尖上孩提的奇幻之旅》 | [财团法人中央广播电台](https://zh.wikipedia.org/wiki/中央廣播電臺) | | +| 获奖 | 《雁子飞过台三线》 | [财团法人客家公共传播基金会](https://zh.wikipedia.org/wiki/客家公共傳播基金會) | | +| | 《余音鸟袅》 | [内政部警政署警察广播电台](https://zh.wikipedia.org/wiki/警察廣播電臺) | | + +#### [儿童节目奖](https://zh.wikipedia.org/wiki/金鐘獎兒童節目獎得獎列表)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=12)] + +| | 入围/得奖作品 | 制作公司/广播公司 | 颁奖嘉宾 | +| ---- | ------------------------ | ------------------------------------------------------------ | ----------------------------------------------------- | +| | 《i动物进行式》 | [国立教育广播电台](https://zh.wikipedia.org/wiki/國立教育廣播電臺) | 小茱姐姐(施贤琴)、依娜(黄怡馨)、Deborah(李诺亚) | +| | 《大脚逛世界》 | [内政部警政署警察广播电台](https://zh.wikipedia.org/wiki/警察廣播電臺) | | +| 获奖 | 《地球探险号》 | 国立教育广播电台 | | +| | 《维多叔叔的故事欢乐车》 | 基隆轻松广播电台股份有限公司 | | + +#### [少年节目奖](https://zh.wikipedia.org/wiki/金鐘獎少年節目獎得獎列表)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=13)] + +| | 入围/得奖作品 | 制作公司/广播公司 | 颁奖嘉宾 | +| ---- | ----------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | +| | 《技职MVP》 | [国立教育广播电台](https://zh.wikipedia.org/wiki/國立教育廣播電臺) | [邵大伦](https://zh.wikipedia.org/wiki/邵大倫)、[邱锋泽](https://zh.wikipedia.org/wiki/邱鋒澤)、[陈零九](https://zh.wikipedia.org/wiki/陳零九) | +| | 《青春好好Young》 | 财团法人富邦文教基金会 | | +| | 《青春创学院》 | 国立教育广播电台 | | +| 获奖 | 《发现新鲜“市”》 | [内政部警政署警察广播电台](https://zh.wikipedia.org/wiki/警察廣播電臺) | | +| | 《听青春在唱歌》 | [台北广播电台](https://zh.wikipedia.org/wiki/臺北廣播電臺) | | + +#### [社会关怀节目奖](https://zh.wikipedia.org/wiki/金鐘獎社會關懷節目獎得獎列表)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=14)] + +| | 入围/得奖作品 | 制作公司/广播公司 | 颁奖嘉宾 | +| ---- | ---------------- | ------------------------------------------------------------ | ------------------------------------------------------ | +| | 《45度角的天空》 | [汉声广播电台](https://zh.wikipedia.org/wiki/漢聲廣播電台) | [林书炜](https://zh.wikipedia.org/wiki/林書煒)、黄博炜 | +| | 《人生路歌声情》 | [国立教育广播电台](https://zh.wikipedia.org/wiki/國立教育廣播電臺) | | +| | 《生命拼图》 | [行政院农业委员会渔业署渔业广播电台](https://zh.wikipedia.org/wiki/渔业广播电台) | | +| | 《幸福北台湾》 | 国立教育广播电台 | | +| 获奖 | 《碍运动》 | [内政部警政署警察广播电台](https://zh.wikipedia.org/wiki/警察廣播電臺) | | + +#### [艺术文化节目奖](https://zh.wikipedia.org/wiki/金鐘獎藝術文化節目獎得獎列表)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=15)] + +| | 入围/得奖作品 | 制作公司/广播公司 | 颁奖嘉宾 | +| ---- | -------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | +| | 《RTI放映室》 | [财团法人中央广播电台](https://zh.wikipedia.org/wiki/中央廣播電臺) | [蒋伟文](https://zh.wikipedia.org/wiki/蔣偉文)、[曲艾玲](https://zh.wikipedia.org/wiki/曲艾玲) | +| | 《山海族子民》 | [财团法人原住民族文化事业基金会](https://zh.wikipedia.org/wiki/原住民族文化事業基金會) | | +| | 《世界梦想表演厅》 | [国立教育广播电台](https://zh.wikipedia.org/wiki/國立教育廣播電臺) | | +| 获奖 | 《生活AGOGO-说在地的故事》 | [全国广播股份有限公司](https://zh.wikipedia.org/wiki/全國廣播) | | +| | 《声动美术馆》 | 财团法人中央广播电台 | | + +#### [生活风格节目奖](https://zh.wikipedia.org/wiki/金鐘獎廣播生活風格節目獎)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=16)] + +| | 入围/得奖作品 | 制作公司/广播公司 | 颁奖嘉宾 | +| ---- | ------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| | 《Joy’s Fantasy》 | 财团法人台北劳工教育电台基金会 | [流氓阿德(黄永德)](https://zh.wikipedia.org/wiki/流氓阿德)、[陈明珠](https://zh.wikipedia.org/wiki/陳明珠) | +| | 《世界异家来作客》 | [财团法人客家公共传播基金会](https://zh.wikipedia.org/wiki/客家公共傳播基金會) | | +| | 《全世界最亮的光》 | [财团法人中央广播电台](https://zh.wikipedia.org/wiki/中央廣播電臺) | | +| 获奖 | 《食随滋味》 | [内政部警政署警察广播电台](https://zh.wikipedia.org/wiki/警察廣播電臺) | | +| | 《农民食堂开饭了》 | [国立教育广播电台](https://zh.wikipedia.org/wiki/國立教育廣播電臺) | | + +#### [社区节目奖](https://zh.wikipedia.org/wiki/金鐘獎社區節目獎得獎列表)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=17)] + +| | 入围/得奖作品 | 制作公司/广播公司 | 颁奖嘉宾 | +| ---- | ----------------------------------------------------------- | ------------------------------------------------------------ | -------------- | +| | 《大地采风》 | [正声广播股份有限公司高雄广播电台](https://zh.wikipedia.org/wiki/正聲廣播公司) | 王美英、范钦慧 | +| | 《日出的所在》 | 正声广播股份有限公司云林广播电台 | | +| | 《移山倒海樊梨花-Love can move mountains 听见台湾的心跳声》 | [台湾广播股份有限公司](https://zh.wikipedia.org/wiki/台灣廣播公司) | | +| | 《爱上新竹》 | [竹科广播股份有限公司](https://zh.wikipedia.org/wiki/IC之音) | | +| 获奖 | 《诸罗采风》 | 正声广播股份有限公司嘉义广播电台 | | + +#### [广播剧奖](https://zh.wikipedia.org/wiki/金鐘獎廣播劇獎得獎列表)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=18)] + +| | 入围/得奖作品 | 制作公司/广播公司 | 颁奖嘉宾 | +| ---- | ------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| 获奖 | 《人生想想剧场》 | [财团法人中央广播电台](https://zh.wikipedia.org/wiki/中央廣播電臺) | [杨小黎](https://zh.wikipedia.org/wiki/楊小黎)、[谢哲青](https://zh.wikipedia.org/wiki/謝哲青) | +| | 《大树下听故事》 | 大树下广播电台股份有限公司 | | +| | 《珍女人时代剧场》 | [台北广播电台](https://zh.wikipedia.org/wiki/臺北廣播電臺) | | +| | 《时代剧场》 | 财团法人中央广播电台 | | +| | 《假日听电影》 | [正声广播股份有限公司高雄广播电台](https://zh.wikipedia.org/wiki/正聲廣播公司) | | + +#### [单元节目奖](https://zh.wikipedia.org/wiki/金鐘獎單元節目獎得獎列表)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=19)] + +| | 入围/得奖作品 | 制作公司/广播公司 | 颁奖嘉宾 | +| ---- | ---------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | +| | 《Cultural Visa Everywhere》 | [财团法人中央广播电台](https://zh.wikipedia.org/wiki/中央廣播電臺) | [杨小黎](https://zh.wikipedia.org/wiki/楊小黎)、[谢哲青](https://zh.wikipedia.org/wiki/謝哲青) | +| | 《KISS旅行台湾的一百种视角》 | [大众广播股份有限公司](https://zh.wikipedia.org/wiki/KISS_Radio) | | +| 获奖 | 《台湾幸福进行曲》 | [好家庭广播股份有限公司](https://zh.wikipedia.org/wiki/好家庭廣播電台) | | +| | 《技职翻转人生》 | [国立教育广播电台](https://zh.wikipedia.org/wiki/國立教育廣播電臺) | | +| | 《英文有意思》 | [汉声广播电台](https://zh.wikipedia.org/wiki/漢聲廣播電台) | | + +### 个人奖[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=20)] + +#### [流行音乐节目主持人奖](https://zh.wikipedia.org/wiki/金鐘獎流行音樂節目主持人獎得獎列表)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=21)] + +| | 入围/得奖者 | 入围/得奖作品 | 制作公司/广播公司 | 颁奖嘉宾 | +| ---- | ---------------------------------------------------- | -------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | +| 获奖 | 小树 | 《Street Voice未来进行式》 | [飞碟广播股份有限公司](https://zh.wikipedia.org/wiki/飛碟聯播網) | [黄子佼](https://zh.wikipedia.org/wiki/黃子佼)、[茄子蛋](https://zh.wikipedia.org/wiki/茄子蛋) | +| | [内克](https://zh.wikipedia.org/wiki/內克)(吴宇轩) | 《告白》 | [内政部警政署警察广播电台](https://zh.wikipedia.org/wiki/警察廣播電臺) | | +| | [邵大伦](https://zh.wikipedia.org/wiki/邵大倫) | 《宝岛真无闲》 | [宝岛新声广播电台股份有限公司](https://zh.wikipedia.org/wiki/寶島聯播網) | | +| | 陈炜智 | 《台湾电影笔记》 | [竹科广播股份有限公司](https://zh.wikipedia.org/wiki/IC之音) | | +| | 葛大为 | 《同行相记》 | [台北之音广播股份有限公司](https://zh.wikipedia.org/wiki/台北之音) | | + +#### [类型音乐节目主持人奖](https://zh.wikipedia.org/wiki/金鐘獎類型音樂節目主持人獎得獎列表)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=22)] + +| | 入围/得奖者 | 入围/得奖作品 | 制作公司/广播公司 | 颁奖嘉宾 | +| ---- | ------------------------------------------------------ | ------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| 获奖 | 徐崇育 | 《Jazz Supreme 爵士‧无所不在》 | 财团法人台北劳工教育电台基金会 | [吴建恒](https://zh.wikipedia.org/wiki/吳建恆)、[ABAO阿爆](https://zh.wikipedia.org/wiki/阿爆) | +| | [陈明珠](https://zh.wikipedia.org/wiki/陳明珠) | 《客家妹来打卡》 | [财团法人客家公共传播基金会](https://zh.wikipedia.org/wiki/客家公共傳播基金會) | | +| | 黎慧芝、[管仁健](https://zh.wikipedia.org/wiki/管仁健) | 《那些年我们一起唱的歌》 | [财团法人中央广播电台](https://zh.wikipedia.org/wiki/中央廣播電臺) | | +| | 墨镜哥(甘仲维) | 《Voice Over 鲜声夺人》 | [汉声广播电台](https://zh.wikipedia.org/wiki/漢聲廣播電台) | | +| | 谭志薏、戴伸峰 | 《弦外之音》 | 财团法人中央广播电台 | | + +#### [教育文化节目主持人奖](https://zh.wikipedia.org/wiki/金鐘獎教育文化節目主持人獎得獎列表)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=23)] + +| | 入围/得奖者 | 入围/得奖作品 | 制作公司/广播公司 | 颁奖嘉宾 | +| ---- | ------------------------------------------------------ | ------------------------ | ------------------------------------------------------------ | -------------- | +| | 王美英 | 《e啦!原住民》 | [高雄广播电台](https://zh.wikipedia.org/wiki/高雄廣播電臺) | 王美英、范钦慧 | +| | 府城lalelin | 《诗情也绵绵》 | [财团法人中央广播电台](https://zh.wikipedia.org/wiki/中央廣播電臺) | | +| 获奖 | 范钦慧 | 《自然笔记》 | [国立教育广播电台](https://zh.wikipedia.org/wiki/國立教育廣播電臺) | | +| | 徐凡(徐豫梅) | 《笔尖上孩提的奇幻之旅》 | 财团法人中央广播电台 | | +| | [杨照(李明骏)](https://zh.wikipedia.org/wiki/李明駿) | 《东亚史的关键时刻》 | [台北广播电台](https://zh.wikipedia.org/wiki/臺北廣播電臺) | | + +#### [儿童节目主持人奖](https://zh.wikipedia.org/wiki/金鐘獎兒童節目主持人獎得獎列表)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=24)] + +| | 入围/得奖者 | 入围/得奖作品 | 制作公司/广播公司 | 颁奖嘉宾 | +| ---- | --------------------------------- | ------------------------------------ | ------------------------------------------------------------ | ----------------------------------------------------- | +| | 小茱姐姐(施贤琴) | 《i动物进行式》 | [国立教育广播电台](https://zh.wikipedia.org/wiki/國立教育廣播電臺) | 小茱姐姐(施贤琴)、依娜(黄怡馨)、Deborah(李诺亚) | +| | 吴廷宏、吴亦伟、吴蔚恩 | 《唱歌学族语-三猫教你唱 blaq balay》 | [财团法人原住民族文化事业基金会](https://zh.wikipedia.org/wiki/原住民族文化事業基金會) | | +| 获奖 | 依娜(黄怡馨)、Deborah(李诺亚) | 《大脚逛世界》 | [内政部警政署警察广播电台](https://zh.wikipedia.org/wiki/警察廣播電臺) | | +| | 陈燕柔、邱宇宽 | 《地球探险号》 | 国立教育广播电台 | | + +#### [少年节目主持人奖](https://zh.wikipedia.org/wiki/金鐘獎少年節目主持人獎得獎列表)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=25)] + +| | 入围/得奖者 | 入围/得奖作品 | 制作公司/广播公司 | 颁奖嘉宾 | +| ---- | ------------------------------ | ---------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | +| | Polo(陈歆翰)、柚仔(林品贝) | 《台湾文武爿》 | [财团法人中央广播电台](https://zh.wikipedia.org/wiki/中央廣播電臺) | [邵大伦](https://zh.wikipedia.org/wiki/邵大倫)、[邱锋泽](https://zh.wikipedia.org/wiki/邱鋒澤)、[陈零九](https://zh.wikipedia.org/wiki/陳零九) | +| | 季洁(蔡宜颖) | 《技职MVP》 | [国立教育广播电台](https://zh.wikipedia.org/wiki/國立教育廣播電臺) | | +| | 柯华葳、游婷雅 | 《阅读推手》 | [好家庭广播股份有限公司](https://zh.wikipedia.org/wiki/好家庭廣播電台) | | +| 获奖 | 端端(陈端慧) | 《青春创学院》 | 国立教育广播电台 | | +| | 郑晴(郑雅卿)、蒋蓉(施旭治) | 《发现新鲜“市”》 | [内政部警政署警察广播电台](https://zh.wikipedia.org/wiki/警察廣播電臺) | | + +#### [社会关怀节目主持人奖](https://zh.wikipedia.org/wiki/金鐘獎社會關懷節目主持人獎得獎列表)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=26)] + +| | 入围/得奖者 | 入围/得奖作品 | 制作公司/广播公司 | 颁奖嘉宾 | +| ---- | ------------------------------------------------------------ | ---------------- | ------------------------------------------------------------ | ------------------------------------------------------ | +| | 世昌(洪世昌) | 《人生路歌声情》 | [国立教育广播电台](https://zh.wikipedia.org/wiki/國立教育廣播電臺) | [林书炜](https://zh.wikipedia.org/wiki/林書煒)、黄博炜 | +| 获奖 | 尚恩(黄彦翔)、倚乐(陈怡蓓)、旁白哥(孙铭宏)、Manga(吴曼嘉) | 《碍运动》 | [内政部警政署警察广播电台](https://zh.wikipedia.org/wiki/警察廣播電臺) | | +| | [林书炜](https://zh.wikipedia.org/wiki/林書煒)、朱芯仪 | 《POP最正点》 | [台北流行广播股份有限公司](https://zh.wikipedia.org/wiki/POP_Radio聯播網) | | +| | 马士(凌士哲) | 《生命拼图》 | [行政院农业委员会渔业署渔业广播电台](https://zh.wikipedia.org/wiki/渔业广播电台) | | +| | 詹婉如 | 《就要听“婉”报》 | [财团法人中央广播电台](https://zh.wikipedia.org/wiki/中央廣播電臺) | | + +#### [艺术文化节目主持人奖](https://zh.wikipedia.org/wiki/金鐘獎藝術文化節目主持人獎得獎列表)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=27)] + +| | 入围/得奖者 | 入围/得奖作品 | 制作公司/广播公司 | 颁奖嘉宾 | +| ---- | ---------------------------------------------- | -------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | +| | 朱家绮 | 《声动美术馆》 | [财团法人中央广播电台](https://zh.wikipedia.org/wiki/中央廣播電臺) | [蒋伟文](https://zh.wikipedia.org/wiki/蔣偉文)、[曲艾玲](https://zh.wikipedia.org/wiki/曲艾玲) | +| | 林菲 | 《生活AGOGO-说在地的故事》 | [全国广播股份有限公司](https://zh.wikipedia.org/wiki/全國廣播) | | +| | 阿俊(徐智俊)、李文玫 | 《客家靓朱玉》 | [财团法人宝岛客家广播电台](https://zh.wikipedia.org/wiki/寶島客家廣播電台) | | +| 获奖 | 端端(陈端慧) | 《世界梦想表演厅》 | [国立教育广播电台](https://zh.wikipedia.org/wiki/國立教育廣播電臺) | | +| | [谢哲青](https://zh.wikipedia.org/wiki/謝哲青) | 《音乐心旅行》 | 财团法人台北劳工教育电台基金会 | | + +#### [生活风格节目主持人奖](https://zh.wikipedia.org/wiki/金鐘獎廣播生活風格節目主持人獎得獎列表)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=28)] + +| | 入围/得奖者 | 入围/得奖作品 | 制作公司/广播公司 | 颁奖嘉宾 | +| ---- | ------------------------------------------------------------ | ------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| | 大米(林琼美) | 《农民食堂开饭了》 | [国立教育广播电台](https://zh.wikipedia.org/wiki/國立教育廣播電臺) | [流氓阿德(黄永德)](https://zh.wikipedia.org/wiki/流氓阿德)、[陈明珠](https://zh.wikipedia.org/wiki/陳明珠) | +| | [吴若权](https://zh.wikipedia.org/wiki/吳若權) | 《媒事来哈啦》 | 财团法人富邦文教基金会 | | +| 获奖 | [流氓阿德(黄永德)](https://zh.wikipedia.org/wiki/流氓阿德) | 《全世界最亮的光》 | [财团法人中央广播电台](https://zh.wikipedia.org/wiki/中央廣播電臺) | | +| | 舞赛.古拉斯 | 《岛屿文创村》 | [财团法人原住民族文化事业基金会](https://zh.wikipedia.org/wiki/原住民族文化事業基金會) | | +| | 苏筠、果果 | 《食随滋味》 | [内政部警政署警察广播电台](https://zh.wikipedia.org/wiki/警察廣播電臺) | | + +#### [社区节目主持人奖](https://zh.wikipedia.org/wiki/金鐘獎社區節目主持人獎得獎列表)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=29)] + +| | 入围/得奖者 | 入围/得奖作品 | 制作公司/广播公司 | 颁奖嘉宾 | +| ---- | ------------------------------------------------------ | ---------------------------- | ------------------------------------------------------------ | -------------- | +| | [朱卫茵](https://zh.wikipedia.org/wiki/朱衛茵) | 《周末生活女王-低碳环保乐》 | [飞碟广播股份有限公司](https://zh.wikipedia.org/wiki/飛碟聯播網) | 王美英、范钦慧 | +| | [思安(陈思安)](https://zh.wikipedia.org/wiki/陳思安) | 《幸福藏宝图》 | [正声广播股份有限公司](https://zh.wikipedia.org/wiki/正聲廣播公司) | | +| | 洪惠冠、蔡荣光 | 《爱上新竹》 | [竹科广播股份有限公司](https://zh.wikipedia.org/wiki/IC之音) | | +| 获奖 | 杨长顺 | 《日出的所在》 | 正声广播股份有限公司云林广播电台 | | +| | 靓慧(王靓慧) | 《大地采风》 | 正声广播股份有限公司高雄广播电台 | | + +#### [企划编撰奖](https://zh.wikipedia.org/wiki/金鐘獎企劃編撰獎)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=30)] + +| | 入围/得奖者 | 入围/得奖作品 | 制作公司/广播公司 | 颁奖嘉宾 | +| ---- | ------------------------------------------------------------ | ---------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | +| | 士玶(黄士玶)、赖可(赖冠宇)、露西(陈珮茹)、俊孝(林俊孝)、罄榆(林罄榆) | 《一心一艺》 | [内政部警政署警察广播电台](https://zh.wikipedia.org/wiki/警察廣播電臺) | [杨小黎](https://zh.wikipedia.org/wiki/楊小黎)、[谢哲青](https://zh.wikipedia.org/wiki/謝哲青) | +| | 内克(吴宇轩)、Vicky(刘虹钰)、Amy(丁宛臻) | 《告白》 | 内政部警政署警察广播电台 | | +| 获奖 | 奇林Michael(林祺宏)、徐凡(徐豫梅)、董娘(董丽琴)、林彦伯、黄裕元、林佩蓉、Joey(刘怡彣)、咪可Miko(李虹靓) | 《宝岛记事簿》 | [国立教育广播电台](https://zh.wikipedia.org/wiki/國立教育廣播電臺) | | +| | 洁枫(尹洁枫)、叶国新 Jacky(陈昱豪)、刘碧薇 李易澄 | 《东西有艺鉴》 | 内政部警政署警察广播电台 | | +| | 郑立明、廖南瑛 | 《青年转动全球》 | 国立教育广播电台 | | + +#### [音效奖](https://zh.wikipedia.org/wiki/金鐘獎廣播音效獎)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=31)] + +| | 入围/得奖者 | 入围/得奖作品 | 制作公司/广播公司 | 颁奖嘉宾 | +| ---- | ----------------------------- | ---------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | +| | 成春福 | 《Cultural Visa Everywhere》 | [财团法人中央广播电台](https://zh.wikipedia.org/wiki/中央廣播電臺) | [杨小黎](https://zh.wikipedia.org/wiki/楊小黎)、[谢哲青](https://zh.wikipedia.org/wiki/謝哲青) | +| 获奖 | 吴坤龙、蔡怡雯、林宪𬭎 | 《假日听电影》 | [正声广播股份有限公司高雄广播电台](https://zh.wikipedia.org/wiki/正聲廣播公司) | | +| | 李可 | 《听!是谁在歌唱》 | [高雄广播电台](https://zh.wikipedia.org/wiki/高雄廣播電臺) | | +| | 徐进辉、郑惠文 沈逸华、张贺杰 | 《大树下听故事》 | 大树下广播电台股份有限公司 | | +| | 陈文彬 | 《珍女人时代剧场》 | [台北广播电台](https://zh.wikipedia.org/wiki/臺北廣播電臺) | | + +### 广告奖[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=32)] + +#### [商品类广告奖](https://zh.wikipedia.org/wiki/金鐘獎商品類廣告獎)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=33)] + +| | 入围/得奖作品 | 制作公司/广播公司 | 颁奖嘉宾 | +| ---- | ------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | +| | 《床的世界-上床篇》 | 灰姑娘音乐制作有限公司 | [夜猫DJ Dennis](https://zh.wikipedia.org/wiki/DJ_Dennis)、[阿达](https://zh.wikipedia.org/wiki/昌璟翔)、[HowHow陈孜昊](https://zh.wikipedia.org/wiki/陳孜昊) | +| 获奖 | 《昇达轮胎无所不在 一路向前守护全台》 | [正声广播股份有限公司台北广播电台](https://zh.wikipedia.org/wiki/正聲廣播公司) | | +| | 《高雄观音山金宝塔-阿兄篇》 | 王子音乐出版社 | | +| | 《抢银行篇》 | 环球七福广告有限公司 | | +| | 《挤身上流篇》 | 财团法人台北劳工教育电台基金会 | | + +#### [非商品类广告奖](https://zh.wikipedia.org/wiki/金鐘獎非商品類廣告獎)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=34)] + +| | 入围/得奖作品 | 制作公司/广播公司 | 颁奖嘉宾 | +| ---- | ----------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | +| | 《POP Radio防疫广告【清洁队员】篇》 | [台北流行广播股份有限公司](https://zh.wikipedia.org/wiki/POP_Radio聯播網) | [夜猫DJ Dennis](https://zh.wikipedia.org/wiki/DJ_Dennis)、[阿达](https://zh.wikipedia.org/wiki/昌璟翔)、[HowHow陈孜昊](https://zh.wikipedia.org/wiki/陳孜昊) | +| | 《防疫大作战之今年七夕不相会篇》 | [正声广播股份有限公司云林广播电台](https://zh.wikipedia.org/wiki/正聲廣播公司) | | +| 获奖 | 《防疫宣导》 | 灰姑娘音乐制作有限公司 | | +| | 《环宇公益广告-最美距离篇》 | [环宇广播事业股份有限公司](https://zh.wikipedia.org/wiki/環宇廣播電台) | | +| | 《关怀老人篇》 | 台南知音广播股份有限公司 | | + +### 电台奖[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=35)] + +#### [电台品牌行销创新奖](https://zh.wikipedia.org/wiki/金鐘獎電臺品牌行銷創新獎)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=36)] + +| | 入围/得奖作品 | 制作公司/广播公司 | 颁奖嘉宾 | +| ---- | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| | 《【永远的流行乐之王 Michael Jackson 逝世十周年 纪念特辑】》 | 财团法人台北劳工教育电台基金会 | [夜猫DJ Dennis](https://zh.wikipedia.org/wiki/DJ_Dennis)、[阿达](https://zh.wikipedia.org/wiki/昌璟翔)、[HowHow陈孜昊](https://zh.wikipedia.org/wiki/陳孜昊) | +| 获奖 | 《【疫情平安 一起平安】广播与数位专题影音展》 | [好家庭广播股份有限公司](https://zh.wikipedia.org/wiki/好家庭廣播電台) | | +| | 《超级大喇叭:宝岛逗相挺》 | [大千广播电台股份有限公司](https://zh.wikipedia.org/wiki/寶島聯播網) | | + +#### [创新研发应用奖](https://zh.wikipedia.org/wiki/金鐘獎創新研發應用獎)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=37)] + +| | 入围/得奖者 | 入围/得奖作品 | 制作公司/广播公司 | 颁奖嘉宾 | +| ---- | ------------------------------------------------------------ | ------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | +| | 内政部警政署警察广播电台 | 《广播“视”界魅力无限 社群媒体聚合平台应用》 | [内政部警政署警察广播电台](https://zh.wikipedia.org/wiki/警察廣播電臺) | [夜猫DJ Dennis](https://zh.wikipedia.org/wiki/DJ_Dennis)、[阿达](https://zh.wikipedia.org/wiki/昌璟翔)、[HowHow陈孜昊](https://zh.wikipedia.org/wiki/陳孜昊) | +| 获奖 | 国立教育广播电台 | 《数字化广播体验-麦宝电波行动录音室》 | [国立教育广播电台](https://zh.wikipedia.org/wiki/國立教育廣播電臺) | | +| | 蔡明佑、[李明勋](https://zh.wikipedia.org/wiki/李明勳)、谢锦隆 | 《广播站台视觉与环境管理发展技术应用》 | [汉声广播电台](https://zh.wikipedia.org/wiki/漢聲廣播電台) | | +| | 郑明祈、吴国钦、陈俊谕 | 《因应疫情之异地主播室系统设计》 | [行政院农业委员会渔业署渔业广播电台](https://zh.wikipedia.org/wiki/渔业广播电台) | | + +### [特别贡献奖](https://zh.wikipedia.org/wiki/廣播金鐘獎特別貢獻獎)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=38)] + +| **得奖者** | +| ---------- | +| 从缺 | + +- ## 电视类入围暨得奖名单[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=39)] + + 109年度电视金钟奖颁奖典礼于2020年9月26日于台北市国父纪念馆举行,颁发如下奖项:[[2\]](https://zh.wikipedia.org/wiki/第55屆金鐘獎#cite_note-2) + + ### 节目奖[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=40)] + + #### [戏剧节目奖](https://zh.wikipedia.org/wiki/金鐘獎戲劇節目獎得獎列表)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=41)] + + | | 入围/得奖作品 | 制作公司/电视公司 | 颁奖嘉宾 | + | ---- | ----------------------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | + | | 《[用九柑仔店](https://zh.wikipedia.org/wiki/用九柑仔店)》 | [三立电视股份有限公司](https://zh.wikipedia.org/wiki/三立電視)、[香港商福斯传媒有限公司台湾分公司](https://zh.wikipedia.org/wiki/福斯傳媒集團) 华人创作股份有限公司、鹿路电影有限公司 内容物数位电影制作有限公司 | [瞿友宁](https://zh.wikipedia.org/wiki/瞿友寧)、[贾静雯](https://zh.wikipedia.org/wiki/賈靜雯) | + | 获奖 | 《[想见你](https://zh.wikipedia.org/wiki/想見你_(電視劇))》 | 香港商福斯传媒有限公司台湾分公司、三凤有限公司 | | + | | 《[谁是被害者](https://zh.wikipedia.org/wiki/誰是被害者)》 | 良人行影业有限公司、[瀚草影视文化事业股份有限公司](https://zh.wikipedia.org/wiki/瀚草影視) [台湾大哥大股份有限公司](https://zh.wikipedia.org/wiki/台灣大哥大) | | + | | 《[噬罪者](https://zh.wikipedia.org/wiki/噬罪者)》 | [财团法人公共电视文化事业基金会](https://zh.wikipedia.org/wiki/公共電視文化事業基金會)、兴扬电影有限公司 | | + | | 《[镜子森林](https://zh.wikipedia.org/wiki/鏡子森林)》 | [民间全民电视股份有限公司](https://zh.wikipedia.org/wiki/民間全民電視公司)、绿光全传播有限公司 | | + + #### [迷你剧集奖](https://zh.wikipedia.org/wiki/金鐘獎迷你劇集獎得獎列表)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=42)] + + | | 入围/得奖作品 | 制作公司/电视公司 | 颁奖嘉宾 | + | ---- | ---------------------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | + | 获奖 | 《[俗女养成记](https://zh.wikipedia.org/wiki/俗女養成記)》 | [中华电视股份有限公司](https://zh.wikipedia.org/wiki/中華電視公司)、百戏电影制作有限公司 | [许杰辉](https://zh.wikipedia.org/wiki/許傑輝)、[锺欣凌](https://zh.wikipedia.org/wiki/鍾欣凌) | + | | 《[罪梦者](https://zh.wikipedia.org/wiki/罪夢者)》 | 新加坡商棱聚传播有限公司台湾分公司 | | + | | 《[糖糖Online](https://zh.wikipedia.org/wiki/糖糖Online)》 | [财团法人公共电视文化事业基金会](https://zh.wikipedia.org/wiki/公共電視文化事業基金會)、列夫特文化有限公司 | | + + #### [电视电影奖](https://zh.wikipedia.org/wiki/金鐘獎電視電影獎得獎列表)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=43)] + + | | 入围/得奖作品 | 制作公司/电视公司 | 颁奖嘉宾 | + | ---- | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | + | | [公视人生剧展](https://zh.wikipedia.org/wiki/公共電視台節目列表#人生劇展)—《残值》 | 英杰哆股份有限公司 | [许杰辉](https://zh.wikipedia.org/wiki/許傑輝)、[锺欣凌](https://zh.wikipedia.org/wiki/鍾欣凌) | + | | 公视迷你电影院—《钉子花》 | [财团法人公共电视文化事业基金会](https://zh.wikipedia.org/wiki/公共電視文化事業基金會)、心艺电影工作室 | | + | | 《住户公约第一条》 | 镜文学股份有限公司 | | + | | 客家电视电影院—《大桔大利 阖家平安》 | 泰尹传播有限公司 | | + | 获奖 | 新创电影短片 《大吉》 | 寓言工作室 | | + + #### [自然科学纪实节目奖](https://zh.wikipedia.org/wiki/金鐘獎自然科學紀實節目獎得獎列表)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=44)] + + | | 入围/得奖作品 | 制作公司/电视公司 | 颁奖嘉宾 | + | ---- | ------------------------ | ------------------------------------------------------------ | ------------------------------------------------------ | + | | 《台湾的前世今生》 | [壹传媒电视广播股份有限公司](https://zh.wikipedia.org/wiki/壹電視) | [李明璁](https://zh.wikipedia.org/wiki/李明璁)、吴奕蓉 | + | | 《爸!妈!今天吃什么?》 | [台湾优视媒体科技股份有限公司](https://zh.wikipedia.org/wiki/MOMOTV) | | + | | 《原味好时尚》 | 花点心师有限公司 | | + | 获奖 | 《消失的王者》 | [东森电视事业股份有限公司](https://zh.wikipedia.org/wiki/東森電視) | | + | | 《福卫七号 太空任务》 | [台湾电视事业股份有限公司](https://zh.wikipedia.org/wiki/臺灣電視公司) | | + + #### [人文纪实节目奖](https://zh.wikipedia.org/wiki/金鐘獎人文紀實節目獎得獎列表)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=45)] + + | | 入围/得奖作品 | 制作公司/电视公司 | 颁奖嘉宾 | + | ---- | -------------------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------ | + | 获奖 | 《ivucung谁谜了路》 | [财团法人原住民族文化事业基金会](https://zh.wikipedia.org/wiki/原住民族文化事業基金會) | [李明璁](https://zh.wikipedia.org/wiki/李明璁)、吴奕蓉 | + | | 《世界新天目》 | 有时电影有限公司 | | + | | 《活力新故乡》 | [客家电视台](https://zh.wikipedia.org/wiki/客家電視台)、八方汇盈数位制作股份有限公司 | | + | | 《纪录观点》 | [财团法人公共电视文化事业基金会](https://zh.wikipedia.org/wiki/公共電視文化事業基金會) | | + | | 《[谁来晚餐11](https://zh.wikipedia.org/wiki/誰來晚餐)》 | 财团法人公共电视文化事业基金会 | | + + #### [儿童少年节目奖](https://zh.wikipedia.org/wiki/金鐘獎兒童少年節目獎得獎列表)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=46)] + + | | 入围/得奖作品 | 制作公司/电视公司 | 颁奖嘉宾 | + | ---- | ---------------------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | + | | 《kakudan时光机》 | [财团法人原住民族文化事业基金会](https://zh.wikipedia.org/wiki/原住民族文化事業基金會) | [严艺文](https://zh.wikipedia.org/wiki/嚴藝文)、[吴以涵](https://zh.wikipedia.org/wiki/吳以涵) | + | 获奖 | 《出发骑幻岛》 | [财团法人公共电视文化事业基金会](https://zh.wikipedia.org/wiki/公共電視文化事業基金會)、五够赞股份有限公司 | | + | | 《[台湾特有种](https://zh.wikipedia.org/wiki/台灣特有種)》 | 财团法人公共电视文化事业基金会 | | + | | 《青春爱读书》 | [财团法人慈济传播人文志业基金会](https://zh.wikipedia.org/wiki/大愛電視) | | + | | 《神奇故事屋》 | 米迦勒传播事业股份有限公司 | | + + #### [生活风格节目奖](https://zh.wikipedia.org/wiki/金鐘獎生活風格節目獎得獎列表)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=47)] + + | | 入围/得奖作品 | 制作公司/电视公司 | 颁奖嘉宾 | + | ---- | --------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | + | | 《地球的庆典》 | [爱尔达科技股份有限公司](https://zh.wikipedia.org/wiki/愛爾達電視) | [倪子钧](https://zh.wikipedia.org/wiki/倪子鈞)、[唐绮阳](https://zh.wikipedia.org/wiki/唐綺陽) | + | 获奖 | 《我在市场待了一整天》 | [财团法人公共电视文化事业基金会](https://zh.wikipedia.org/wiki/公共電視文化事業基金會) | | + | | 《无事坐巴士》 | 财团法人公共电视文化事业基金会—[公视台语台](https://zh.wikipedia.org/wiki/公視台語台) | | + | | 《跟着dapin去旅行》 | [财团法人原住民族文化事业基金会](https://zh.wikipedia.org/wiki/原住民族文化事業基金會) | | + | | 《台湾好味道 足好食台湾味》 | [中华电视股份有限公司](https://zh.wikipedia.org/wiki/中華電視公司) | | + + #### [综艺节目奖](https://zh.wikipedia.org/wiki/金鐘獎綜藝節目獎得獎列表)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=48)] + + | | 入围/得奖作品 | 制作公司/电视公司 | 颁奖嘉宾 | + | ---- | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | + | | 《[台湾金颂](https://zh.wikipedia.org/wiki/台灣金頌)》 | [财团法人公共电视文化事业基金会](https://zh.wikipedia.org/wiki/公共電視文化事業基金會)、奇妙创造股份有限公司 | [黄子佼](https://zh.wikipedia.org/wiki/黃子佼)、[蓝心湄](https://zh.wikipedia.org/wiki/藍心湄) | + | | 《[音乐万万岁 第4号作品](https://zh.wikipedia.org/wiki/音樂萬萬歲)》 | 财团法人公共电视文化事业基金会 | | + | | 《[话山话水话玲珑](https://zh.wikipedia.org/wiki/話山話水話玲瓏)》 | 财团法人公共电视文化事业基金会—[公视台语台](https://zh.wikipedia.org/wiki/公視台語台) 全能制作股份有限公司 | | + | 获奖 | 《[综艺大热门](https://zh.wikipedia.org/wiki/綜藝大熱門)》 | [三立电视股份有限公司](https://zh.wikipedia.org/wiki/三立電視)、[好看娱乐制作股份有限公司](https://zh.wikipedia.org/wiki/好看娛樂) | | + | | 《[声林之王 声境传奇](https://zh.wikipedia.org/wiki/聲林之王2)》 | 量子娱乐制作股份有限公司 | | + + #### [益智及实境节目奖](https://zh.wikipedia.org/wiki/金鐘獎益智及實境節目獎得獎列表)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=49)] + + | | 入围/得奖作品 | 制作公司/电视公司 | 颁奖嘉宾 | + | ---- | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | + | | 《[一字千金斗字英雄会](https://zh.wikipedia.org/wiki/一字千金_(電視節目))》 | [财团法人公共电视文化事业基金会](https://zh.wikipedia.org/wiki/公共電視文化事業基金會)、全能制作股份有限公司 | [黄子佼](https://zh.wikipedia.org/wiki/黃子佼)、[蓝心湄](https://zh.wikipedia.org/wiki/藍心湄) | + | 获奖 | 《[全民星攻略](https://zh.wikipedia.org/wiki/全民星攻略)》 | [友松娱乐股份有限公司](https://zh.wikipedia.org/wiki/友松娛樂) | | + | | 《[全家有智慧](https://zh.wikipedia.org/wiki/全家有智慧)》 | 财团法人公共电视文化事业基金会—[公视台语台](https://zh.wikipedia.org/wiki/公視台語台)、三凤有限公司 | | + | | 《[阮三个2](https://zh.wikipedia.org/wiki/阮三个)》 | 财团法人公共电视文化事业基金会、用力拍电影有限公司 | | + + #### [动画节目奖](https://zh.wikipedia.org/wiki/金鐘獎動畫節目獎得獎列表)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=50)] + + | | 入围/得奖作品 | 制作公司/电视公司 | 颁奖嘉宾 | + | ---- | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | + | 获奖 | 《[FOOD超人](https://zh.wikipedia.org/wiki/FOOD超人)第二季》 | [财团法人公共电视文化事业基金会](https://zh.wikipedia.org/wiki/公共電視文化事業基金會)、风车图书出版有限公司 | [严艺文](https://zh.wikipedia.org/wiki/嚴藝文)、[吴以涵](https://zh.wikipedia.org/wiki/吳以涵) | + | | 《[小儿子](https://zh.wikipedia.org/wiki/小兒子_(動畫))系列动画第三季:快乐》 | [梦田影像股份有限公司](https://zh.wikipedia.org/wiki/夢田文創) | | + | | 《音乐关键字—寻声》 | [客家电视台](https://zh.wikipedia.org/wiki/客家電視台) | | + | | 《海精灵马努依》 | [靖天传播国际事业股份有限公司](https://zh.wikipedia.org/wiki/靖天傳播)、原金国际有限公司 | | + | | 《树人大冒险》 | [财团法人原住民族文化事业基金会](https://zh.wikipedia.org/wiki/原住民族文化事業基金會) | | + + ### 个人奖[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=51)] + + #### [戏剧节目男主角奖](https://zh.wikipedia.org/wiki/金鐘獎戲劇節目男主角獎得獎列表)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=52)] + + | | 入围/得奖者 | 入围/得奖作品 | 制作公司/电视公司 | 颁奖嘉宾 | + | ---- | ---------------------------------------------- | ----------------------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | + | 获奖 | [姚淳耀](https://zh.wikipedia.org/wiki/姚淳耀) | 《[镜子森林](https://zh.wikipedia.org/wiki/鏡子森林)》 | [民间全民电视股份有限公司](https://zh.wikipedia.org/wiki/民間全民電視公司)、绿光全传播有限公司 | [龙劭华](https://zh.wikipedia.org/wiki/龍劭華)、[蔡昌宪](https://zh.wikipedia.org/wiki/蔡昌憲) | + | | [张孝全](https://zh.wikipedia.org/wiki/張孝全) | 《[谁是被害者](https://zh.wikipedia.org/wiki/誰是被害者)》 | 良人行影业有限公司、[瀚草影视文化事业股份有限公司](https://zh.wikipedia.org/wiki/瀚草影視)、[台湾大哥大股份有限公司](https://zh.wikipedia.org/wiki/台灣大哥大) | | + | | [庄凯勋](https://zh.wikipedia.org/wiki/莊凱勛) | 《[噬罪者](https://zh.wikipedia.org/wiki/噬罪者)》 | [财团法人公共电视文化事业基金会](https://zh.wikipedia.org/wiki/公共電視文化事業基金會)、兴扬电影有限公司 | | + | | [许光汉](https://zh.wikipedia.org/wiki/許光漢) | 《[想见你](https://zh.wikipedia.org/wiki/想見你_(電視劇))》 | [香港商福斯传媒有限公司台湾分公司](https://zh.wikipedia.org/wiki/福斯傳媒集團)、三凤有限公司 | | + | | [蔡昌宪](https://zh.wikipedia.org/wiki/蔡昌憲) | 《[苦力](https://zh.wikipedia.org/wiki/苦力_(電視劇))》 | 财团法人公共电视文化事业基金会、禾丰传播有限公司 | | + + #### [戏剧节目女主角奖](https://zh.wikipedia.org/wiki/金鐘獎戲劇節目女主角獎得獎列表)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=53)] + + | | 入围/得奖者 | 入围/得奖作品 | 制作公司/电视公司 | 颁奖嘉宾 | + | ---- | ------------------------------------------------- | ----------------------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | + | | [天心](https://zh.wikipedia.org/wiki/天心_(藝人)) | 《[最佳利益](https://zh.wikipedia.org/wiki/最佳利益)》 | 群之噰传播有限公司、黑剑电视节目制作股份有限公司 | [张孝全](https://zh.wikipedia.org/wiki/張孝全)、[王柏杰](https://zh.wikipedia.org/wiki/王柏傑) | + | | [林玟谊](https://zh.wikipedia.org/wiki/林玟誼) | 《[苦力](https://zh.wikipedia.org/wiki/苦力_(電視劇))》 | [财团法人公共电视文化事业基金会](https://zh.wikipedia.org/wiki/公共電視文化事業基金會)、禾丰传播有限公司 | | + | 获奖 | [柯佳嬿](https://zh.wikipedia.org/wiki/柯佳嬿) | 《[想见你](https://zh.wikipedia.org/wiki/想見你_(電視劇))》 | [香港商福斯传媒有限公司台湾分公司](https://zh.wikipedia.org/wiki/福斯傳媒集團)、三凤有限公司 | | + | | [莫允雯](https://zh.wikipedia.org/wiki/莫允雯) | 《[用九柑仔店](https://zh.wikipedia.org/wiki/用九柑仔店)》 | [三立电视股份有限公司](https://zh.wikipedia.org/wiki/三立電視)、香港商福斯传媒有限公司台湾分公司 华人创作股份有限公司、鹿路电影有限公司 内容物数位电影制作有限公司 | | + | | [杨谨华](https://zh.wikipedia.org/wiki/楊謹華) | 《[镜子森林](https://zh.wikipedia.org/wiki/鏡子森林)》 | [民间全民电视股份有限公司](https://zh.wikipedia.org/wiki/民間全民電視公司)、绿光全传播有限公司 | | + + #### [戏剧节目男配角奖](https://zh.wikipedia.org/wiki/金鐘獎戲劇節目男配角獎得獎列表)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=54)] + + | | 入围/得奖者 | 入围/得奖作品 | 制作公司/电视公司 | 颁奖嘉宾 | + | ---- | --------------------------------------------------------- | ---------------------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | + | | [侯彦西【鄢胜宇】](https://zh.wikipedia.org/wiki/侯彥西) | 《[用九柑仔店](https://zh.wikipedia.org/wiki/用九柑仔店)》 | [三立电视股份有限公司](https://zh.wikipedia.org/wiki/三立電視)、[香港商福斯传媒有限公司台湾分公司](https://zh.wikipedia.org/wiki/福斯傳媒集團) 华人创作股份有限公司、鹿路电影有限公司 内容物数位电影制作有限公司 | [庄凯勋](https://zh.wikipedia.org/wiki/莊凱勛)、[莫允雯](https://zh.wikipedia.org/wiki/莫允雯) | + | 获奖 | [马力欧](https://zh.wikipedia.org/wiki/馬力歐_(台灣藝人)) | 《[国际桥牌社](https://zh.wikipedia.org/wiki/國際橋牌社)》 | 马克吐温国际影像有限公司 | | + | | [曹晏豪](https://zh.wikipedia.org/wiki/曹晏豪) | 《[噬罪者](https://zh.wikipedia.org/wiki/噬罪者)》 | 嘉扬电影有限公司、[财团法人公共电视文化事业基金会](https://zh.wikipedia.org/wiki/公共電視文化事業基金會) | | + | | [杨烈](https://zh.wikipedia.org/wiki/楊烈) | 《[苦力](https://zh.wikipedia.org/wiki/苦力_(電視劇))》 | 财团法人公共电视文化事业基金会、禾丰传播有限公司 | | + | | [蔡阿炮【蔡明毅】](https://zh.wikipedia.org/wiki/蔡阿炮) | 《[苦力](https://zh.wikipedia.org/wiki/苦力_(電視劇))》 | 财团法人公共电视文化事业基金会、禾丰传播有限公司 | | + + #### [戏剧节目女配角奖](https://zh.wikipedia.org/wiki/金鐘獎戲劇節目女配角獎得獎列表)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=55)] + + | | 入围/得奖者 | 入围/得奖作品 | 制作公司/电视公司 | 颁奖嘉宾 | + | ---- | ---------------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | + | | [李劭婕](https://zh.wikipedia.org/wiki/李劭婕) | 客家寻味剧场—《[乌阴天的好日子](https://zh.wikipedia.org/wiki/烏陰天的好日子)》 | 春河剧团事业有限公司 | [庄凯勋](https://zh.wikipedia.org/wiki/莊凱勛)、[莫允雯](https://zh.wikipedia.org/wiki/莫允雯) | + | | [李璇【朱继屏】](https://zh.wikipedia.org/wiki/李璇) | 《[大林学校](https://zh.wikipedia.org/wiki/大林學校)》 | [财团法人慈济传播人文志业基金会](https://zh.wikipedia.org/wiki/大愛電視)、北投映像电影有限公司 | | + | | [袁艾菲](https://zh.wikipedia.org/wiki/袁艾菲) | 《[我们不能是朋友](https://zh.wikipedia.org/wiki/我們不能是朋友)》 | [八大电视股份有限公司](https://zh.wikipedia.org/wiki/八大電視)、[友松娱乐股份有限公司](https://zh.wikipedia.org/wiki/友松娛樂) | | + | 获奖 | [蔡淑臻](https://zh.wikipedia.org/wiki/蔡淑臻) | 《[噬罪者](https://zh.wikipedia.org/wiki/噬罪者)》 | 嘉扬电影有限公司、[财团法人公共电视文化事业基金会](https://zh.wikipedia.org/wiki/公共電視文化事業基金會) | | + | | [谢琼煖](https://zh.wikipedia.org/wiki/謝瓊煖) | 《[苦力](https://zh.wikipedia.org/wiki/苦力_(電視劇))》 | 财团法人公共电视文化事业基金会、禾丰传播有限公司 | | + + #### [戏剧节目最具潜力新人奖](https://zh.wikipedia.org/wiki/金鐘獎戲劇節目最具潛力新人獎得獎列表)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=56)] + + | | 入围/得奖者 | 入围/得奖作品 | 制作公司/电视公司 | 颁奖嘉宾 | + | ---- | ----------------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | + | | [何佩芸](https://zh.wikipedia.org/wiki/何佩芸) | 《[忠孝节义](https://zh.wikipedia.org/wiki/忠孝節義)》 | [台湾电视事业股份有限公司](https://zh.wikipedia.org/wiki/臺灣電視公司)、丽生百合国际娱乐股份有限公司 | [傅孟柏](https://zh.wikipedia.org/wiki/傅孟柏)、[李沐](https://zh.wikipedia.org/wiki/李沐) | + | 获奖 | [李沐](https://zh.wikipedia.org/wiki/李沐) | 《[谁是被害者](https://zh.wikipedia.org/wiki/誰是被害者)》 | 良人行影业有限公司、[瀚草影视文化事业股份有限公司](https://zh.wikipedia.org/wiki/瀚草影視)、[台湾大哥大股份有限公司](https://zh.wikipedia.org/wiki/台灣大哥大) | | + | | [夏大宝](https://zh.wikipedia.org/wiki/夏大寶) | 《[噬罪者](https://zh.wikipedia.org/wiki/噬罪者)》 | 嘉扬电影有限公司、[财团法人公共电视文化事业基金会](https://zh.wikipedia.org/wiki/公共電視文化事業基金會) | | + | | [瑭霏](https://zh.wikipedia.org/wiki/瑭霏) | 《[镜子森林](https://zh.wikipedia.org/wiki/鏡子森林)》 | [民间全民电视股份有限公司](https://zh.wikipedia.org/wiki/民間全民電視公司)、绿光全传播有限公司 | | + | | [刘韦辰](https://zh.wikipedia.org/wiki/劉韋辰_(演員)) | [HIStory3 《那一天》](https://zh.wikipedia.org/wiki/HIStory3) | 巧克科技新媒体股份有限公司 | | + + #### [迷你剧集/电视电影男主角奖](https://zh.wikipedia.org/wiki/金鐘獎迷你劇集/電視電影男主角獎得獎列表)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=57)] + + | | 入围/得奖者 | 入围/得奖作品 | 制作公司/电视公司 | 颁奖嘉宾 | + | ---- | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | + | | [洪都拉斯【洪勝德】](https://zh.wikipedia.org/wiki/洪都拉斯_(藝人)) | [公视人生剧展](https://zh.wikipedia.org/wiki/公共電視台節目列表#人生劇展)—《盲人阿清》 | 深邃电影有限公司 | [杨谨华](https://zh.wikipedia.org/wiki/楊謹華)、[天心](https://zh.wikipedia.org/wiki/天心_(藝人)) | + | | [张孝全](https://zh.wikipedia.org/wiki/張孝全) | 《[罪梦者](https://zh.wikipedia.org/wiki/罪夢者)》 | 新加坡商棱聚传播有限公司台湾分公司 | | + | | [莫子仪](https://zh.wikipedia.org/wiki/莫子儀) | 《[追凶500天](https://zh.wikipedia.org/wiki/追兇500天)》 | 柒拾陆号原子股份有限公司、[台湾大哥大股份有限公司](https://zh.wikipedia.org/wiki/台灣大哥大)、偶数创意工作室 | | + | | [陈竹升](https://zh.wikipedia.org/wiki/陳竹昇) | 公视人生剧展—《残值》 | 英杰哆股份有限公司 | | + | 获奖 | [游安顺](https://zh.wikipedia.org/wiki/游安顺) | 新创电影短片 《大吉》 | 寓言工作室 | | + + #### [迷你剧集/电视电影女主角奖](https://zh.wikipedia.org/wiki/金鐘獎迷你劇集/電視電影女主角獎得獎列表)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=58)] + + | | 入围/得奖者 | 入围/得奖作品 | 制作公司/电视公司 | 颁奖嘉宾 | + | ---- | ------------------------------------------------------------ | ---------------------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | + | | [小薰](https://zh.wikipedia.org/wiki/黃瀞怡)【黄瀞怡】 | 《追凶500天》 | 柒拾陆号原子股份有限公司、[台湾大哥大股份有限公司](https://zh.wikipedia.org/wiki/台灣大哥大)、偶数创意工作室 | [杨谨华](https://zh.wikipedia.org/wiki/楊謹華)、[天心](https://zh.wikipedia.org/wiki/天心_(藝人)) | + | | [吴以涵](https://zh.wikipedia.org/wiki/吳以涵) | 《[俗女养成记](https://zh.wikipedia.org/wiki/俗女養成記)》 | [中华电视股份有限公司](https://zh.wikipedia.org/wiki/中華電視公司)、百戏电影制作有限公司 | | + | 获奖 | [吴奕蓉](https://zh.wikipedia.org/w/index.php?title=吳奕蓉&action=edit&redlink=1) | 客家电视电影院-《大桔大利 阖家平安》 | [客家电视台](https://zh.wikipedia.org/wiki/客家電視台)、泰尹传播有限公司 | | + | | [李又汝](https://zh.wikipedia.org/wiki/李又汝) | 《[无主之子](https://zh.wikipedia.org/wiki/無主之子)》 | [民间全民电视股份有限公司](https://zh.wikipedia.org/wiki/民間全民電視公司)、列夫特文化有限公司 | | + | | [谢盈萱](https://zh.wikipedia.org/wiki/謝盈萱) | 《[俗女养成记](https://zh.wikipedia.org/wiki/俗女養成記)》 | 中华电视股份有限公司、百戏电影制作有限公司 | | + + #### [迷你剧集/电视电影男配角奖](https://zh.wikipedia.org/wiki/金鐘獎迷你劇集/電視電影男配角獎得獎列表)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=59)] + + | | 入围/得奖者 | 入围/得奖作品 | 制作公司/电视公司 | 颁奖嘉宾 | + | ---- | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | + | | [太保](https://zh.wikipedia.org/wiki/太保_(演员)) | [公视人生剧展](https://zh.wikipedia.org/wiki/公共電視台節目列表#人生劇展)—《残值》 | 英杰哆股份有限公司 | [莫子仪](https://zh.wikipedia.org/wiki/莫子儀)、[小薰](https://zh.wikipedia.org/wiki/黃瀞怡) | + | | [王柏杰](https://zh.wikipedia.org/wiki/王柏傑) | 《[罪梦者](https://zh.wikipedia.org/wiki/罪夢者)》 | 新加坡商棱聚传播有限公司台湾分公司 | | + | | [孙绽](https://zh.wikipedia.org/wiki/孫綻) | 《[无主之子](https://zh.wikipedia.org/wiki/無主之子)》 | [民间全民电视股份有限公司](https://zh.wikipedia.org/wiki/民間全民電視公司)、列夫特文化有限公司 | | + | 获奖 | [游安顺](https://zh.wikipedia.org/wiki/游安顺) | 公视人生剧展-《盲人阿清》 | 深邃电影有限公司 | | + | | [廖钦亮](https://zh.wikipedia.org/w/index.php?title=廖欽亮&action=edit&redlink=1) | 新创电影短片-《大吉》 | 寓言工作室 | | + + #### [迷你剧集/电视电影女配角奖](https://zh.wikipedia.org/wiki/金鐘獎迷你劇集/電視電影女配角獎得獎列表)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=60)] + + | | 入围/得奖者 | 入围/得奖作品 | 制作公司/电视公司 | 颁奖嘉宾 | + | ---- | ---------------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | + | | [丁宁](https://zh.wikipedia.org/wiki/丁宁_(演员)) | [公视人生剧展](https://zh.wikipedia.org/wiki/公共電視台節目列表#人生劇展)-《残值》 | 英杰哆股份有限公司 | [莫子仪](https://zh.wikipedia.org/wiki/莫子儀)、[小薰](https://zh.wikipedia.org/wiki/黃瀞怡) | + | | [范晓萱](https://zh.wikipedia.org/wiki/范曉萱) | 《[罪梦者](https://zh.wikipedia.org/wiki/罪夢者)》 | 新加坡商棱聚传播有限公司台湾分公司 | | + | | [杨丽音](https://zh.wikipedia.org/wiki/楊麗音) | 《[俗女养成记](https://zh.wikipedia.org/wiki/俗女養成記)》 | [中华电视股份有限公司](https://zh.wikipedia.org/wiki/中華電視公司)、百戏电影制作有限公司 | | + | | [谢欣颖](https://zh.wikipedia.org/wiki/謝欣穎) | 《住户公约第一条》 | 镜文学股份有限公司 | | + | 获奖 | [琇琴【于子育】](https://zh.wikipedia.org/wiki/琇琴) | 《[俗女养成记](https://zh.wikipedia.org/wiki/俗女養成記)》 | 中华电视股份有限公司、百戏电影制作有限公司 | | + + #### [迷你剧集/电视电影最具潜力新人奖](https://zh.wikipedia.org/wiki/金鐘獎迷你劇集/電視電影最具潛力新人獎得獎列表)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=61)] + + | | 入围/得奖者 | 入围/得奖作品 | 制作公司/电视公司 | 颁奖嘉宾 | + | ---- | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | + | 获奖 | [白小樱](https://zh.wikipedia.org/wiki/白小櫻) | 《住户公约第一条》 | 镜文学股份有限公司 | [傅孟柏](https://zh.wikipedia.org/wiki/傅孟柏)、[李沐](https://zh.wikipedia.org/wiki/李沐) | + | | [吴静依](https://zh.wikipedia.org/wiki/吳靜依) | [公视学生剧展](https://zh.wikipedia.org/wiki/公共電視台節目列表#學生劇展)《乐园 Somewhere Out There》 | 曜演影视制作有限公司、[财团法人公共电视文化事业基金会](https://zh.wikipedia.org/wiki/公共電視文化事業基金會) | | + | | [林书函](https://zh.wikipedia.org/wiki/林書函) | 公视学生剧展《乐园 Somewhere Out There》 | 曜演影视制作有限公司、财团法人公共电视文化事业基金会 | | + | | 陈莎莉 | 公视学生剧展—《入世》 | 电光影里影业有限公司、财团法人公共电视文化事业基金会 | | + | | [睦媄](https://zh.wikipedia.org/w/index.php?title=睦媄&action=edit&redlink=1) | [公视人生剧展](https://zh.wikipedia.org/wiki/公共電視台節目列表#人生劇展)—《风中浮沉的花蕊》 | 大吉祥整合行销有限公司、财团法人公共电视文化事业基金会 | | + + #### [戏剧节目导演奖](https://zh.wikipedia.org/wiki/金鐘獎戲劇節目導演獎)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=62)] + + | | 入围/得奖者 | 入围/得奖作品 | 制作公司/电视公司 | 颁奖嘉宾 | + | ---- | ------------------------------------------------------------ | ----------------------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | + | | [李岳峰](https://zh.wikipedia.org/wiki/李岳峰)、张志鸿 | 《[苦力](https://zh.wikipedia.org/wiki/苦力_(電視劇))》 | [财团法人公共电视文化事业基金会](https://zh.wikipedia.org/wiki/公共電視文化事業基金會)、禾丰传播有限公司 | [瞿友宁](https://zh.wikipedia.org/wiki/瞿友寧)、[贾静雯](https://zh.wikipedia.org/wiki/賈靜雯) | + | | 李权洋、[郑文堂](https://zh.wikipedia.org/wiki/鄭文堂) | 《[镜子森林](https://zh.wikipedia.org/wiki/鏡子森林)》 | [民间全民电视股份有限公司](https://zh.wikipedia.org/wiki/民間全民電視公司)、绿光全传播有限公司 | | + | 获奖 | [高炳权](https://zh.wikipedia.org/wiki/高炳權)、[曾英庭](https://zh.wikipedia.org/wiki/曾英庭) | 《[用九柑仔店](https://zh.wikipedia.org/wiki/用九柑仔店)》 | [三立电视股份有限公司](https://zh.wikipedia.org/wiki/三立電視)、[香港商福斯传媒有限公司台湾分公司](https://zh.wikipedia.org/wiki/福斯傳媒集團) 华人创作股份有限公司、鹿路电影有限公司 内容物数位电影制作有限公司 | | + | | 庄绚维、陈冠仲 | 《[谁是被害者](https://zh.wikipedia.org/wiki/誰是被害者)》 | 良人行影业有限公司、[瀚草影视文化事业股份有限公司](https://zh.wikipedia.org/wiki/瀚草影視) [台湾大哥大股份有限公司](https://zh.wikipedia.org/wiki/台灣大哥大) | | + | | 黄天仁 | 《[想见你](https://zh.wikipedia.org/wiki/想見你_(電視劇))》 | 香港商福斯传媒有限公司台湾分公司、三凤有限公司 | | + + #### [迷你剧集/电视电影导演奖](https://zh.wikipedia.org/wiki/金鐘獎迷你劇集/電視電影導演獎)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=63)] + + | | 入围/得奖者 | 入围/得奖作品 | 制作公司/电视公司 | 颁奖嘉宾 | + | ---- | ------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | + | 获奖 | [林志儒](https://zh.wikipedia.org/wiki/林志儒) | 客家电视电影院—《大桔大利 阖家平安》 | [客家电视台](https://zh.wikipedia.org/wiki/客家電視台)、泰尹传播有限公司 | [许杰辉](https://zh.wikipedia.org/wiki/許傑輝)、[锺欣凌](https://zh.wikipedia.org/wiki/鍾欣凌) | + | | 赖建颖 | 公视迷你电影院—《钉子花》 | [财团法人公共电视文化事业基金会](https://zh.wikipedia.org/wiki/公共電視文化事業基金會)、心艺电影工作室 | | + | | 薛朝辉 | [公视人生剧展](https://zh.wikipedia.org/wiki/公視人生劇展)—《盲人阿清》 | 深邃电影有限公司 | | + | | [严艺文](https://zh.wikipedia.org/wiki/嚴藝文)、陈长纶 | 《[俗女养成记](https://zh.wikipedia.org/wiki/俗女養成記)》 | [中华电视股份有限公司](https://zh.wikipedia.org/wiki/中華電視公司)、百戏电影制作有限公司 | | + | | 靳家骅 | 新创电影短片 《大吉》 | 寓言工作室 | | + + #### [戏剧节目编剧奖](https://zh.wikipedia.org/wiki/金鐘獎戲劇節目編劇獎)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=64)] + + | | 入围/得奖者 | 入围/得奖作品 | 制作公司/电视公司 | 颁奖嘉宾 | + | ---- | ---------------------- | ----------------------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------ | + | | 梁舒婷、徐瑞良 | 《[谁是被害者](https://zh.wikipedia.org/wiki/誰是被害者)》 | 良人行影业有限公司、[瀚草影视文化事业股份有限公司](https://zh.wikipedia.org/wiki/瀚草影視)、[台湾大哥大股份有限公司](https://zh.wikipedia.org/wiki/台灣大哥大) | 林昱伶、[阮光民](https://zh.wikipedia.org/wiki/阮光民) | + | | 陈洁莹、黄宣颖、萧译玮 | 《[用九柑仔店](https://zh.wikipedia.org/wiki/用九柑仔店)》 | [三立电视股份有限公司](https://zh.wikipedia.org/wiki/三立電視)、[香港商福斯传媒有限公司台湾分公司](https://zh.wikipedia.org/wiki/福斯傳媒集團) 华人创作股份有限公司、鹿路电影有限公司 内容物数位电影制作有限公司 | | + | | 杨念纯 | 《[噬罪者](https://zh.wikipedia.org/wiki/噬罪者)》 | [财团法人公共电视文化事业基金会](https://zh.wikipedia.org/wiki/公共電視文化事業基金會)、兴扬电影有限公司 | | + | | 郑心媚 | 《[镜子森林](https://zh.wikipedia.org/wiki/鏡子森林)》 | [民间全民电视股份有限公司](https://zh.wikipedia.org/wiki/民間全民電視公司)、绿光全传播有限公司 | | + | 获奖 | 简奇峯、林欣慧 | 《[想见你](https://zh.wikipedia.org/wiki/想見你_(電視劇))》 | 香港商福斯传媒有限公司台湾分公司、三凤有限公司 | | + + #### [迷你剧集/电视电影编剧奖](https://zh.wikipedia.org/wiki/金鐘獎迷你劇集/電視電影編劇獎)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=65)] + + | | 入围/得奖者 | 入围/得奖作品 | 制作公司/电视公司 | 颁奖嘉宾 | + | ---- | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | + | | 林志儒、刘存菡 | 客家电视电影院—《大桔大利 阖家平安》 | [客家电视台](https://zh.wikipedia.org/wiki/客家電視台)、泰尹传播有限公司 | [许杰辉](https://zh.wikipedia.org/wiki/許傑輝)、[锺欣凌](https://zh.wikipedia.org/wiki/鍾欣凌) | + | | 蔡俊彬、刘宇 | [公视人生剧展](https://zh.wikipedia.org/wiki/公視人生劇展)—《残值》 | 英杰哆股份有限公司 | | + | | 薛朝辉 | 公视人生剧展-《盲人阿清》 | 深邃电影有限公司 | | + | | [严艺文](https://zh.wikipedia.org/wiki/嚴藝文)、范芷绮 [黄小猫【黄馨萱】](https://zh.wikipedia.org/wiki/黄馨萱) | 《[俗女养成记](https://zh.wikipedia.org/wiki/俗女養成記)》 | [中华电视股份有限公司](https://zh.wikipedia.org/wiki/中華電視公司)、百戏电影制作有限公司 | | + | 获奖 | 靳家骅 | 新创电影短片—《大吉》 | 寓言工作室 | | + + #### [自然科学及人文纪实节目主持人奖](https://zh.wikipedia.org/wiki/金鐘獎自然科學及人文紀實節目主持人獎得獎列表)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=66)] + + | | 入围/得奖者 | 入围/得奖作品 | 制作公司/电视公司 | 颁奖嘉宾 | + | ---- | ---------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------ | + | 获奖 | 吴秀梅 Siku Sawmah | 《原味好时尚》 | 花点心师有限公司 | [李明璁](https://zh.wikipedia.org/wiki/李明璁)、吴奕蓉 | + | | 吴奕蓉 | 《花漾同学会》 | [客家电视台](https://zh.wikipedia.org/wiki/客家電視台)、和展影视股份有限公司 | | + | | [许效舜](https://zh.wikipedia.org/wiki/許效舜) | 《[在台湾的故事](https://zh.wikipedia.org/wiki/在台灣的故事)》 | [三立电视股份有限公司](https://zh.wikipedia.org/wiki/三立電視) | | + | | [舒梦兰](https://zh.wikipedia.org/wiki/舒夢蘭) | 《消失的王者》 | [东森电视事业股份有限公司](https://zh.wikipedia.org/wiki/東森電視) | | + | | [詹怡宜](https://zh.wikipedia.org/wiki/詹怡宜) | 《[一步一脚印 发现新台湾](https://zh.wikipedia.org/wiki/一步一腳印_發現新台灣)》 | [联利媒体股份有限公司](https://zh.wikipedia.org/wiki/TVBS) | | + + #### [儿童少年节目主持人奖](https://zh.wikipedia.org/wiki/金鐘獎兒童少年節目主持人獎得獎列表)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=67)] + + | | 入围/得奖者 | 入围/得奖作品 | 制作公司/电视公司 | 颁奖嘉宾 | + | ---- | ------------------------------------------------------------ | ---------------------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | + | 获奖 | [Buya【陈宇】](https://zh.wikipedia.org/wiki/陳宇_(演員))、[Pagnoyod【锺家骏】](https://zh.wikipedia.org/wiki/鍾家駿) | 《kakudan时光机》 | [财团法人原住民族文化事业基金会](https://zh.wikipedia.org/wiki/原住民族文化事業基金會) | [严艺文](https://zh.wikipedia.org/wiki/嚴藝文)、[吴以涵](https://zh.wikipedia.org/wiki/吳以涵) | + | | [阿松【纪竣崴】](https://zh.wikipedia.org/wiki/紀竣崴)、纪昀希 | 《出发骑幻岛》 | [财团法人公共电视文化事业基金会](https://zh.wikipedia.org/wiki/公共電視文化事業基金會)、五够赞股份有限公司 | | + | | [郭彦均](https://zh.wikipedia.org/wiki/郭彥均)、[锺欣凌](https://zh.wikipedia.org/wiki/鍾欣凌) | 《[超级总动员](https://zh.wikipedia.org/wiki/超級總動員)》 | [东森电视事业股份有限公司](https://zh.wikipedia.org/wiki/東森電視)、全富传播股份有限公司 | | + | | [陈玮薇](https://zh.wikipedia.org/wiki/陳瑋薇) | 《小主播看天下 WOW!》 | [财团法人慈济传播人文志业基金会](https://zh.wikipedia.org/wiki/大愛電視) | | + | | [谢哲青](https://zh.wikipedia.org/wiki/謝哲青) | 《青春爱读书》 | 财团法人慈济传播人文志业基金会 | | + + #### [生活风格节目主持人奖](https://zh.wikipedia.org/wiki/金鐘獎生活風格節目主持人獎得獎列表)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=68)] + + | | 入围/得奖者 | 入围/得奖作品 | 制作公司/电视公司 | 颁奖嘉宾 | + | ---- | ---------------------------------------------------------- | ---------------------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | + | | [Alana【郑雅文】](https://zh.wikipedia.org/wiki/鄭雅文) | 《Follow Alana 爱游世界》 | 晴雅数位传播股份有限公司 | [倪子钧](https://zh.wikipedia.org/wiki/倪子鈞)、[唐绮阳](https://zh.wikipedia.org/wiki/唐綺陽) | + | | [王晓书](https://zh.wikipedia.org/wiki/王曉書)、陈濂侨 | 《听听看》 | [财团法人公共电视文化事业基金会](https://zh.wikipedia.org/wiki/公共電視文化事業基金會) | | + | 获奖 | [高怡平](https://zh.wikipedia.org/wiki/高怡平) | 《家庭八点档转转发现爱》 | 米迦勒传播事业股份有限公司 | | + | | [梦多【大谷主水】](https://zh.wikipedia.org/wiki/大谷主水) | 《地球的庆典》 | [爱尔达科技股份有限公司](https://zh.wikipedia.org/wiki/愛爾達電視) | | + | | [蓝心湄](https://zh.wikipedia.org/wiki/藍心湄) | 《[女人我最大](https://zh.wikipedia.org/wiki/女人我最大)》 | [联利媒体股份有限公司](https://zh.wikipedia.org/wiki/TVBS) | | + + #### [综艺节目主持人奖](https://zh.wikipedia.org/wiki/綜藝節目主持人獎)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=69)] + + | | 入围/得奖者 | 入围/得奖作品 | 制作公司/电视公司 | 颁奖嘉宾 | + | ---- | ------------------------------------------------------------ | ---------------------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | + | | [吴宗宪](https://zh.wikipedia.org/wiki/吳宗憲) 、[陈汉典](https://zh.wikipedia.org/wiki/陳漢典)、[LULU【黄路梓茵】](https://zh.wikipedia.org/wiki/黄路梓茵) | 《[综艺大热门](https://zh.wikipedia.org/wiki/綜藝大熱門)》 | [三立电视股份有限公司](https://zh.wikipedia.org/wiki/三立電視)、[好看娱乐制作股份有限公司](https://zh.wikipedia.org/wiki/好看娛樂) | [黄子佼](https://zh.wikipedia.org/wiki/黃子佼)、[蓝心湄](https://zh.wikipedia.org/wiki/藍心湄) | + | 获奖 | [浩子【谢炘昊】](https://zh.wikipedia.org/wiki/謝炘昊)、[乱弹阿翔【陈泰翔】](https://zh.wikipedia.org/wiki/乱彈阿翔) | 《[台湾金颂](https://zh.wikipedia.org/wiki/台灣金頌)》 | [财团法人公共电视文化事业基金会](https://zh.wikipedia.org/wiki/公共電視文化事業基金會)、奇妙创造股份有限公司 | | + | | [许效舜](https://zh.wikipedia.org/wiki/許效舜) | 《[疯神无双](https://zh.wikipedia.org/wiki/瘋神無雙)》 | [香港商福斯传媒有限公司台湾分公司](https://zh.wikipedia.org/wiki/福斯傳媒集團) | | + | | [曾国城](https://zh.wikipedia.org/wiki/曾國城)、[巴钰](https://zh.wikipedia.org/wiki/巴鈺) | 《[一袋女王](https://zh.wikipedia.org/wiki/一袋女王)》 | 香港商福斯传媒有限公司台湾分公司 | | + + #### [益智及实境节目主持人奖](https://zh.wikipedia.org/wiki/金鐘獎益智及實境節目主持人獎得獎列表)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=70)] + + | | 入围/得奖者 | 入围/得奖作品 | 制作公司/电视公司 | 颁奖嘉宾 | + | ---- | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | + | | [胡瓜【胡自雄】](https://zh.wikipedia.org/wiki/胡自雄)、[玛莉亚【叶欣眉】](https://zh.wikipedia.org/wiki/葉欣眉) | 《[欢乐智多星](https://zh.wikipedia.org/wiki/歡樂智多星)》 | [香港商福斯传媒有限公司台湾分公司](https://zh.wikipedia.org/wiki/福斯傳媒集團) | [黄子佼](https://zh.wikipedia.org/wiki/黃子佼)、[蓝心湄](https://zh.wikipedia.org/wiki/藍心湄) | + | 获奖 | [曾国城](https://zh.wikipedia.org/wiki/曾國城)、[蔡尚桦](https://zh.wikipedia.org/wiki/蔡尚樺) | 《[全民星攻略](https://zh.wikipedia.org/wiki/全民星攻略)》 | [友松娱乐股份有限公司](https://zh.wikipedia.org/wiki/友松娛樂) | | + | | [黄子佼](https://zh.wikipedia.org/wiki/黃子佼)、[吴姗儒](https://zh.wikipedia.org/wiki/吳姍儒) | 《[一呼百应之揪团大考验](https://zh.wikipedia.org/wiki/一呼百應_(台灣節目))》 | [财团法人公共电视文化事业基金会](https://zh.wikipedia.org/wiki/公共電視文化事業基金會) | | + | | [杨贵媚](https://zh.wikipedia.org/wiki/楊貴媚)、[SOAC【刘永伟】](https://zh.wikipedia.org/wiki/劉永偉)、[范少勋](https://zh.wikipedia.org/wiki/范少勳) | 《[阮三个2](https://zh.wikipedia.org/wiki/阮三个)》 | 财团法人公共电视文化事业基金会、用力拍电影有限公司 | | + + ### 技术类奖项[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=71)] + + #### [非戏剧类节目导演奖](https://zh.wikipedia.org/wiki/金鐘獎非戲劇類節目導演獎)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=72)] + + | | 入围/得奖者 | 入围/得奖作品 | 制作公司/电视公司 | 颁奖嘉宾 | + | ---- | ---------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | + | | 江国梁、黄至琦、谢光诚 | 《世界新天目》 | 有时电影有限公司 | [杨丽音](https://zh.wikipedia.org/wiki/楊麗音)、[琇琴【于子育】](https://zh.wikipedia.org/wiki/琇琴) | + | | 林名远 | 《我,存在 —原住民影像纪录 Ta'u存在》 | [财团法人原住民族文化事业基金会](https://zh.wikipedia.org/wiki/原住民族文化事業基金會) | | + | | 林慧芬、李文鸿 | 《似水华年—那年盛夏的花火》 | [财团法人慈济传播人文志业基金会](https://zh.wikipedia.org/wiki/大愛電視) | | + | 获奖 | 柯金源 | 《纪录观点 神殿》 | [财团法人公共电视文化事业基金会](https://zh.wikipedia.org/wiki/公共電視文化事業基金會) | | + | | 刘嵩 | 《[农村的远见 第二季](https://zh.wikipedia.org/wiki/農村的遠見)》 | 宝花传播有限公司 | | + + #### [非戏剧类节目导播奖](https://zh.wikipedia.org/wiki/金鐘獎非戲劇類節目導播獎)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=73)] + + | | 入围/得奖者 | 入围/得奖作品 | 制作公司/电视公司 | 颁奖嘉宾 | + | ---- | ------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | + | | 丁光慈 | 《[上奅 台湾歌](https://zh.wikipedia.org/w/index.php?title=上奅_台灣歌&action=edit&redlink=1)》 | [中华电视股份有限公司](https://zh.wikipedia.org/wiki/中華電視公司)、异象国际传播有限公司 | [杨丽音](https://zh.wikipedia.org/wiki/楊麗音)、[琇琴【于子育】](https://zh.wikipedia.org/wiki/琇琴) | + | | 吴佩谕 | 《[声林之王 声境传奇](https://zh.wikipedia.org/wiki/聲林之王2)》 | 量子娱乐制作股份有限公司 | | + | 获奖 | 李丽芳 | 《第15届 KKBOX风云榜颁奖典礼》 | [台湾电视事业股份有限公司](https://zh.wikipedia.org/wiki/臺灣電視公司) | | + | | 梁远毅 | 《[音乐万万岁 第4号作品](https://zh.wikipedia.org/wiki/音樂萬萬歲)》 | [财团法人公共电视文化事业基金会](https://zh.wikipedia.org/wiki/公共電視文化事業基金會) | | + | | 陈星凤 | 《[台湾金颂](https://zh.wikipedia.org/wiki/台灣金頌)》 | 财团法人公共电视文化事业基金会、奇妙创造股份有限公司 | | + + #### [戏剧类节目摄影奖](https://zh.wikipedia.org/wiki/金鐘獎戲劇類節目攝影獎)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=74)] + + | | 入围/得奖者 | 入围/得奖作品 | 制作公司/电视公司 | 颁奖嘉宾 | + | ---- | ---------------------- | ---------------------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | + | | 江敏忠 | 《[极道千金](https://zh.wikipedia.org/wiki/極道千金)》 | 好好电影工作室有限公司、新加坡商满满哆股份有限公司 | [许效舜](https://zh.wikipedia.org/wiki/許效舜)、[马力欧](https://zh.wikipedia.org/wiki/馬力歐_(台灣藝人)) | + | | 李清迪、刘至桓、詹嘉文 | 《[用九柑仔店](https://zh.wikipedia.org/wiki/用九柑仔店)》 | [三立电视股份有限公司](https://zh.wikipedia.org/wiki/三立電視)、[香港商福斯传媒有限公司台湾分公司](https://zh.wikipedia.org/wiki/福斯傳媒集團) 华人创作股份有限公司、鹿路电影有限公司 内容物数位电影制作有限公司 | | + | 获奖 | 周宜贤、杨丰铭、孙纪明 | 《[罪梦者](https://zh.wikipedia.org/wiki/罪夢者)》 | 新加坡商棱聚传播有限公司台湾分公司 | | + | | 马华【冯信华】 | 《住户公约第一条》 | 镜文学股份有限公司 | | + | | 刘至桓 | 《[谁是被害者](https://zh.wikipedia.org/wiki/誰是被害者)》 | 良人行影业有限公司、[瀚草影视文化事业股份有限公司](https://zh.wikipedia.org/wiki/瀚草影視) [台湾大哥大股份有限公司](https://zh.wikipedia.org/wiki/台灣大哥大) | | + + #### [非戏剧类节目摄影奖](https://zh.wikipedia.org/wiki/金鐘獎非戲劇類節目攝影獎)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=75)] + + | | 入围/得奖者 | 入围/得奖作品 | 制作公司/电视公司 | 颁奖嘉宾 | + | ---- | ------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | + | | 江国梁、刘吉雄、刘建伟 | 《世界新天目》 | 有时电影有限公司 | [杨丽音](https://zh.wikipedia.org/wiki/楊麗音)、[琇琴【于子育】](https://zh.wikipedia.org/wiki/琇琴) | + | | 何明瑞、吴政儒 | 《[农村的远见 第二季](https://zh.wikipedia.org/wiki/農村的遠見)》 | 宝花传播有限公司 | | + | | 吴佳明、张祥昱 | 《真世代—移动中的温暖》 | 鑫隆多媒体股份有限公司 | | + | 获奖 | 陈锦亮、梁勇光、周劭杰 刘志雄、刘燕樟 | 《我在市场待了一整天》 | [财团法人公共电视文化事业基金会](https://zh.wikipedia.org/wiki/公共電視文化事業基金會) | | + | | 廖敬尧、施蓝波安、吴佳明 胡登贺 | 《艺术很有事》 | 财团法人公共电视文化事业基金会 | | + + #### [戏剧类节目剪辑奖](https://zh.wikipedia.org/wiki/金鐘獎戲劇類節目剪輯獎)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=76)] + + | | 入围/得奖者 | 入围/得奖作品 | 制作公司/电视公司 | 颁奖嘉宾 | + | ---- | -------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | + | | 林姿妤、张雅婷 | [公视人生剧展](https://zh.wikipedia.org/wiki/公視人生劇展) —《残值》 | 英杰哆股份有限公司 | [许效舜](https://zh.wikipedia.org/wiki/許效舜)、[马力欧](https://zh.wikipedia.org/wiki/馬力歐_(台灣藝人)) | + | 获奖 | 林政宏 | 《[俗女养成记](https://zh.wikipedia.org/wiki/俗女養成記)》 | [中华电视股份有限公司](https://zh.wikipedia.org/wiki/中華電視公司)、百戏电影制作有限公司 | | + | | 张雅婷 | 公视新创电影《4X相识—前世情人的情人》 | 十三行娱乐国际有限公司、[财团法人公共电视文化事业基金会](https://zh.wikipedia.org/wiki/公共電視文化事業基金會) | | + | | 解孟儒、江翊宁 | 《[谁是被害者](https://zh.wikipedia.org/wiki/誰是被害者)》 | 良人行影业有限公司、[瀚草影视文化事业股份有限公司](https://zh.wikipedia.org/wiki/瀚草影視) [台湾大哥大股份有限公司](https://zh.wikipedia.org/wiki/台灣大哥大) | | + | | 潘客印 | 《肇事者逃逸》 | 镜文学股份有限公司 | | + + #### [非戏剧类节目剪辑奖](https://zh.wikipedia.org/wiki/金鐘獎非戲劇類節目剪輯獎)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=77)] + + | | 入围/得奖者 | 入围/得奖作品 | 制作公司/电视公司 | 颁奖嘉宾 | + | ---- | ------------ | ----------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | + | | 王瀚德 | 《我在市场待了一整天》 | [财团法人公共电视文化事业基金会](https://zh.wikipedia.org/wiki/公共電視文化事業基金會) | [杨丽音](https://zh.wikipedia.org/wiki/楊麗音)、[琇琴【于子育】](https://zh.wikipedia.org/wiki/琇琴) | + | 获奖 | 滕兆锵 | 《真世代-妈祖住我家》 | 鑫传视讯广告股份有限公司、鑫隆多媒体股份有限公司 | | + | | 谢欣志 | 《似水华年—如常》 | 大逆光影音制作有限公司 | | + | | 苏志宗 | 《纪录观点 神殿》 | 财团法人公共电视文化事业基金会 | | + | | 粘瓈文 | 《真世代—移动中的温暖》 | 鑫传视讯广告股份有限公司、鑫隆多媒体股份有限公司 | | + + #### [声音设计奖](https://zh.wikipedia.org/wiki/金鐘獎聲音設計獎)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=78)] + + | | 入围/得奖者 | 入围/得奖作品 | 制作公司/电视公司 | 颁奖嘉宾 | + | ---- | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | + | | Thomas Foguenne福多玛 黄年永、杨子介、陈奕伶 | 《[76号恐怖书店之恐惧罐头](https://zh.wikipedia.org/wiki/76号恐怖書店)》 | 柒拾陆号原子股份有限公司、[台湾大哥大股份有限公司](https://zh.wikipedia.org/wiki/台灣大哥大) 十只手指电影制作所有限公司 | [许效舜](https://zh.wikipedia.org/wiki/許效舜)、[马力欧](https://zh.wikipedia.org/wiki/馬力歐_(台灣藝人)) | + | | Thomas Foguenne福多玛 戴志光 | 《纪录观点 神殿》 | [财团法人公共电视文化事业基金会](https://zh.wikipedia.org/wiki/公共電視文化事業基金會) | | + | 获奖 | 高伟晏、郑元凯、许家维 黄镇洋、[汤湘竹](https://zh.wikipedia.org/wiki/汤湘竹) | 《[罪梦者](https://zh.wikipedia.org/wiki/罪夢者)》 | 新加坡商棱聚传播有限公司台湾分公司 | | + | | [陈建骐](https://zh.wikipedia.org/wiki/陳建騏)、罗恩妮、叶约瑟 王逸勋、邱昇元、陈炫宇 王令翔、庄钧智、唐诗婷 Thomas Andrew Matthews | 《[你那边怎样·我这边OK](https://zh.wikipedia.org/wiki/你那邊怎樣·我這邊OK)》 | 拙八郎创意执行股份有限公司、[台湾电视事业股份有限公司](https://zh.wikipedia.org/wiki/臺灣電視公司) [八大电视股份有限公司](https://zh.wikipedia.org/wiki/八大電視) | | + | | 黎明鑫 | 《[声林之王 声境传奇](https://zh.wikipedia.org/wiki/聲林之王2)》 | 量子娱乐制作股份有限公司 | | + + #### [灯光奖](https://zh.wikipedia.org/wiki/金鐘獎燈光獎)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=79)] + + | | 入围/得奖者 | 入围/得奖作品 | 制作公司/电视公司 | 颁奖嘉宾 | + | ---- | ------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | + | | 李元岳 | 《[音乐万万岁 第4号作品](https://zh.wikipedia.org/wiki/音樂萬萬歲)》 | [财团法人公共电视文化事业基金会](https://zh.wikipedia.org/wiki/公共電視文化事業基金會) | [许效舜](https://zh.wikipedia.org/wiki/許效舜)、[马力欧](https://zh.wikipedia.org/wiki/馬力歐_(台灣藝人)) | + | | 蔡明钗 | [公视学生剧展](https://zh.wikipedia.org/wiki/公共電視台節目列表#學生劇展) —《九孬》 | 早雨早晴影像有限公司 | | + | | 郑得寿 | [公视人生剧展](https://zh.wikipedia.org/wiki/公共電視台節目列表#人生劇展) —《残值》 | 英杰哆股份有限公司 | | + | 获奖 | 谢松铭 | 《[罪梦者](https://zh.wikipedia.org/wiki/罪夢者)》 | 新加坡商棱聚传播有限公司台湾分公司 | | + | | 魏琥弦 | 公视新创电影《4X相识 —前世情人的情人》 | 十三行娱乐国际有限公司、财团法人公共电视文化事业基金会 | | + + #### [美术设计奖](https://zh.wikipedia.org/wiki/金鐘獎美術設計獎)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=80)] + + | | 入围/得奖者 | 入围/得奖作品 | 制作公司/电视公司 | 颁奖嘉宾 | + | ---- | ---------------------------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | + | | 二马【冯建彰】 | 《[声林之王 声境传奇](https://zh.wikipedia.org/wiki/聲林之王2)》 | 量子娱乐制作股份有限公司 | [许效舜](https://zh.wikipedia.org/wiki/許效舜)、[马力欧](https://zh.wikipedia.org/wiki/馬力歐_(台灣藝人)) | + | | 元述 【廖建安】、施筱柔 储旭【储榢逸】、郭宪聪 | 《[谁是被害者](https://zh.wikipedia.org/wiki/誰是被害者)》 | 良人行影业有限公、[瀚草影视文化事业股份有限公司](https://zh.wikipedia.org/wiki/瀚草影視) [台湾大哥大股份有限公司](https://zh.wikipedia.org/wiki/台灣大哥大) | | + | 获奖 | 梁硕麟、施筱柔 | 《[罪梦者](https://zh.wikipedia.org/wiki/罪夢者)》 | 新加坡商棱聚传播有限公司台湾分公司 | | + | | 廖晏舟、黄嬿莼 | 《[用九柑仔店](https://zh.wikipedia.org/wiki/用九柑仔店)》 | [三立电视股份有限公司](https://zh.wikipedia.org/wiki/三立電視)、[香港商福斯传媒有限公司台湾分公司](https://zh.wikipedia.org/wiki/福斯傳媒集團) 华人创作股份有限公司、鹿路电影有限公司 内容物数位电影制作有限公司 | | + | | 刘蕙屏、林芷妤 | 公视新创电影《4X相识—前世情人的情人》 | 十三行娱乐国际有限公司、[财团法人公共电视文化事业基金会](https://zh.wikipedia.org/wiki/公共電視文化事業基金會) | | + + ### [节目创新奖](https://zh.wikipedia.org/wiki/金鐘獎節目創新獎)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=81)] + + | | 入围/得奖作品 | 制作公司/电视公司 | 颁奖嘉宾 | + | ---- | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------ | + | | 《[一呼百应之揪团大考验](https://zh.wikipedia.org/wiki/一呼百應_(台灣節目))》 | [财团法人公共电视文化事业基金会](https://zh.wikipedia.org/wiki/公共電視文化事業基金會) | 林昱伶、[阮光民](https://zh.wikipedia.org/wiki/阮光民) | + | | 公视新创电影《4X相识-前世情人的情人》 | 财团法人公共电视文化事业基金会、十三行娱乐国际有限公司 | | + | | 《[全家有智慧](https://zh.wikipedia.org/wiki/全家有智慧)》 | 财团法人公共电视文化事业基金会-[公视台语台](https://zh.wikipedia.org/wiki/公視台語台)、三凤有限公司 | | + | 获奖 | 《我在市场待了一整天》 | 财团法人公共电视文化事业基金会 | | + | 获奖 | 《[想见你](https://zh.wikipedia.org/wiki/想見你_(電視劇))》 | [香港商福斯传媒有限公司台湾分公司](https://zh.wikipedia.org/wiki/福斯傳媒集團)、三凤有限公司 | | + + ### 特别奖[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=82)] + + #### [终身贡献奖](https://zh.wikipedia.org/wiki/電視金鐘獎特別貢獻獎)[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=83)] + + | **得奖者** | **引言人** | **颁奖嘉宾** | + | ------------------------------------------------------------ | ---------------------------------------------- | ------------------------------------------------------------ | + | [陈丽如(小凤仙)](https://zh.wikipedia.org/wiki/小鳳仙_(台灣演員)) 林正雄(林义雄) | [陈亚兰](https://zh.wikipedia.org/wiki/陳亞蘭) | [陈亚兰](https://zh.wikipedia.org/wiki/陳亞蘭) [李永得](https://zh.wikipedia.org/wiki/李永得) | + + ### 追思逝世电视人[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=84)] + + 引言人:[于美人](https://zh.wikipedia.org/wiki/于美人) + 以下是追思电视人的名单: + + - [小戽斗](https://zh.wikipedia.org/wiki/小戽斗) + - [小凤仙](https://zh.wikipedia.org/wiki/小鳳仙_(台灣演員)) + - [刘锺元](https://zh.wikipedia.org/w/index.php?title=劉鍾元&action=edit&redlink=1) + - [侯杰](https://zh.wikipedia.org/w/index.php?title=侯傑&action=edit&redlink=1) + - [邱碧治](https://zh.wikipedia.org/w/index.php?title=邱碧治&action=edit&redlink=1) + - [高以翔](https://zh.wikipedia.org/wiki/高以翔) + - [杨冠玉](https://zh.wikipedia.org/wiki/楊冠玉) + - 游东明 + - 何雅琪 + - 简传成 + - [刘真](https://zh.wikipedia.org/wiki/劉真_(藝人)) + - [吴朋奉](https://zh.wikipedia.org/wiki/吳朋奉) + - [罗霈颖](https://zh.wikipedia.org/wiki/羅霈穎) + - [黄鸿升](https://zh.wikipedia.org/wiki/黃鴻升) + + ## 表演节目[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=85)] + + ### 广播金钟[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=86)] + + | 表演嘉宾 | 演出主题 | 演出内容 | + | :----------------------------------------------------------: | :------------: | :----------------------------------------------------------: | + | [LEO王](https://zh.wikipedia.org/wiki/LEO王)、[孙盛希](https://zh.wikipedia.org/wiki/孫盛希)、[宇宙人](https://zh.wikipedia.org/wiki/宇宙人_(台灣樂團)) | 从广播开始较劲 | LEO王〈快乐的甘蔗人〉 孙盛希〈暧〉 宇宙人〈陪我玩Play One〉 Why Not〈无法度按捺〉 | + | [唐从圣](https://zh.wikipedia.org/wiki/唐從聖)、李维真、[黄大谦](https://zh.wikipedia.org/wiki/黃大謙) | 有本事才敢大声 | 电视人.广播人.网络人 | + | [荒山亮](https://zh.wikipedia.org/wiki/荒山亮)、[戴爱玲](https://zh.wikipedia.org/wiki/戴愛玲) | 因为你我会更强 | [黄妃](https://zh.wikipedia.org/wiki/黃妃)〈追追追〉 [萧敬腾](https://zh.wikipedia.org/wiki/蕭敬騰)〈王妃〉 [张惠妹](https://zh.wikipedia.org/wiki/張惠妹)〈好胆你就来〉 [林强](https://zh.wikipedia.org/wiki/林強_(1964年))〈春风少年兄〉 | + + ### 电视金钟[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=87)] + + | 表演嘉宾 | 演出主题 | 演出内容 | + | :----------------------------------------------------------: | :------------: | :----------------------------------------------------------: | + | [龚钰祺](https://zh.wikipedia.org/wiki/龔鈺祺)、吴曜宇、台北爱乐青年管弦乐团 | 欢迎来到金钟奖 | 演奏曲目: [徐佳莹](https://zh.wikipedia.org/wiki/徐佳瑩)〈极限〉 [苏打绿](https://zh.wikipedia.org/wiki/蘇打綠)〈你在烦恼什么〉 [五月天](https://zh.wikipedia.org/wiki/五月天)〈盛夏光年〉 [孙燕姿](https://zh.wikipedia.org/wiki/孫燕姿)〈逆光〉 | + | [Lulu黄路梓茵](https://zh.wikipedia.org/wiki/黄路梓茵)、[卢广仲](https://zh.wikipedia.org/wiki/盧廣仲) | 这是我的舞台 | [卢广仲](https://zh.wikipedia.org/wiki/盧廣仲)〈二十四小时柒天〉 [Lulu黄路梓茵](https://zh.wikipedia.org/wiki/黄路梓茵)〈赖床公主〉 [卢广仲](https://zh.wikipedia.org/wiki/盧廣仲)〈OH YEAH!!!〉 | + | [大支](https://zh.wikipedia.org/wiki/大支) | 梦想就要起飞 | [大支](https://zh.wikipedia.org/wiki/大支)〈对手Opponent〉 | + + ## 评审名单[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=88)] + + ### 广播金钟奖评审名单[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=89)] + + | 主任委员 | + | :------------: | + | 田定丰 | + | 特别奖主任委员 | + | 袁韵婕 | + + ### 电视金钟奖评审名单[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=90)] + + | 主任委员 | + | :----------------------------------------------------------: | + | [瞿友宁](https://zh.wikipedia.org/wiki/瞿友寧) | + | 戏剧节目 | + | 陈世杰(召集人)、尹馨、吴慷仁、姜秀琼、施立、陈和榆、傅凯羚、黄世鸣、郑秉泓、瞿友宁、吕莳媛 | + | 迷你剧集/电视电影 | + | 李亚梅(召集人)、王识贤、林正盛、姚坤君、曾英庭、黄健玮、温郁芳、廖士涵、刘梓洁 | + | 自然科学纪实节目/人文纪实节目 | + | 黄惠侦(召集人)、李美仪、麦觉明、冯贤贤、阎鸿亚 | + | 儿童少年节目 | + | 唐台龄(召集人)、何琦瑜、赵婷 | + | 生活风格节目 | + | 王浩一(召集人)、吴凤、李霈瑜、唐绮阳、曾宝仪 | + | 综艺节目/益智及实境节目 | + | 陈亚兰(召集人)、李景白、柴智屏、许杰辉、陈敬宗、赖勋彪、谢哲青 | + | 动画节目 | + | 纪柏舟(召集人)、郭宪聪、刘绮珊 | + | 技术奖 | + | 贺照缇(召集人)、吴若昀、李惠仁、胡定一、许世明 | + | 特别奖主任委员 | + | [梁修身](https://zh.wikipedia.org/wiki/梁修身) | + | 特别奖评审委员 | + | | + + ## 金钟奖制作团队[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=91)] + + ### 广播金钟[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=92)] + + - 109年度广播金钟奖 + + - 指导单位:文化部 + - 主办单位:文化部影视及流行音乐产业局 + - 承办单位:三立电视 + - 总监制:张荣华 + - 节目统筹:王淑娟 + - 专案统筹:高明慧 + - 专案管理:李君顺、陈幼庭、黄昰桦、张彦筠、刘亭之、刘恩佑、叶映汝、吕筱玮 + - 行销/海外行销统筹:谢慰雯 + - 行销协力:邬嘉绫、刘立平、陈志昇、蔡佩瑜、张若琪、苏贞婷、李宜馨、黄歆雅、林柏昱、林筱涵 + - 工程统筹:龚美富 + - 新媒统筹:蓝宜祯、洪采岑 + - 新媒协力:黄廷宏、熊鸿斌、苏欣伟、黄立凯、王巽基、翁堃泰、连雅卉、蔡孟轩、姜淑龄、李宜倩、黄昱颖、曾丽洋、陈怡君、王俪颖、彭立扬、倪嘉达、陈姿颖、许巧妮、吴冠毅 + - 数位媒体工程:陈敬昌、陈玉菁、庄裕铭、刘元纮、朱俊德、吴鸿中、陈登隆、李佳祥、江佩芬 + - 资讯传输设计:耿履夷、王士方、陈俊宏、陈荣杰、詹志全 + - 讯号后制统筹:苏玠玺 + - 行政统筹:张维铭 + - 行政协力:张志雄、李盈蒨、颜银南、孙楷泽、苏珮雯、林惠淳、陈淑卿、纪玉芬、萧振文、刘謦嘉、林友三、温崇铭、童振瑞、陈维纲、陈诗涵、苏振邺、蔡宛婷 + - 赞助统筹:胡闵雯 + - 赞助协力:黄惠芬、陈慧娟、吕启源、曾凡珊、刘建呈、游智淳、施明志、林耘谊、张家豪、林珮𫓹、陈宥亘、蔡宗翰、吴佩宜、曾子萱、杨仁杰、周语铃、陈奇汉、郑湘桦、吴书菱、黄佳芳、邓文馨、蔡伊镕、董依𬭚 + + - 109年度广播金钟奖颁奖典礼 + + - 总监制:王淑娟 + - 执行监制:黄晓玫 + - 典礼制作人:谢孟芬 + - 典礼制作群:王梦黛、邱湘莹、张伶卉、周矩源、林君谕、林孟如、吴亚桦、杨雅斐、王韵慈、杨治娟、陈钲锠、胡馥纯、吴佳颖、简婉如、王建棠、锺孟洁、陈奕颖、蔡妏雪、黄佳雯、周倢羽、黄至柔、邱亭瑄、许崇豪、苏子晴、蓝敬淇、李晨瑜、谢欣妤、林芳玉、锺欣惠、苏圣棋、江政颖、洪辰嫣、锺衣雯、凃嘉文、周妍廷、陈诗涵、沈美仪、陈淑卿、董依𬭚、苏振邺、孙楷泽、赖玉婷、陈怡静、洪维信、杨雁捷、张韶恩、梁永青、梁家豪、林雅婷、李东元、蔡青萦、叶为诚、程仁伟、陈钰雯、凌静宜、许芳瑜、林友三、曹美琳、范振轩、黄雅文、陈宥亘、黎莉、田筱琪、蔡宗翰、郑宇彤、廖翊婷、曾译卉、叶子瑄、王怡钧、陈怡如、郭柏旸、徐弦纭、徐嘉妤、邱苡洁、周亮辰、陈信智、曾琴 + - 主持人:玛丽 + - 化妆:牙牙 + - 发型:罗南 + - 造型:淘乐思造型有限公司Doris + - 服装:JillBridal吉儿法式手工婚纱 + - 珠宝:PIAGET珠宝 + - 主持人:视网膜 + - 发型:好剪才 + - 化妆:吴国铭 + - 服装:Hugo Boss、Leisure Bespoke 立沐杉订制西服 + - 手表:BREITLING百年灵 + - 眼镜:骏艺光学 + - 特别感谢:飞碟电台 光禹 + - 典礼司仪:马克(沈子煜) + - 典礼音乐:阿毛老师 + + - 典礼视觉 + + - 视觉统筹:黄晓玫 + - 平面设计:邱孟彦、邱清顺、刘颖铮、陈彦蓁 + - 动画设计:张恒芸、王圣竹、林宇轩、谢欣贤、邱云星、曾彦祯 + - 影像处理:林声 + + - 三立工程 + + - 工程统筹:龚美富 + - 导播:吴美君 + - 现场指导:邱雅玲、李紫瑀、黄雅琳、柯君颖 + - 助理导播:翁逸玫、张成柔、王薏宁、李孟洁 + - 技术指导:陈建良 + - 视讯工程师:刘世裕、赵德昇 + - 视讯助理:张元威、王通燊 + - 摄影师:潘铭义、王书镇、沈仪铭、陈俊谊、王薪智、江政谦、林明雄、豊世颖、陈俊雄、吴思宸、黄春镇、杜彦翔、林文陞、林岢霈 + - 灯光师:王文枫、林中强、邱汉忠、李智伟 + - 成音师:孟兆欣、叶志忠、夏永柠、罗梵笠、蔡豊泽、陈文隆 + - 后制统筹:苏玠玺 + - 剪辑指导:薛宇琳、许佳雯 + - 后制剪辑:范志明、吴鸿伟、赖庆原、黄珮瑜、李幸蓉、陈美绍、史昇鑫、张君豪 + - 影片制作:郑亨泰、古淑慧、巫少强、廖昱凯、杨治娟、黄雅新、吴佳颖、黄建国、林思婷、简婉如、李晨瑜 + - 影片音效:声都传播有限公司 + - 影片旁白:马克(沈子煜) + - 影片灯光:邱汉光 + - 影片摄影:外景摄影组 + + - 视觉总监:提摩西 + - 影像统筹:提摩西影像 + - 平面视觉指导:卢奕桦、刘昱贤 + - 印刷设计:卢奕桦、刘昱贤 + - 平面专案经理:牛子齐 + - 平面设计:卢奕桦、刘昱贤 + - 专刊设计:王祥薇、刘昱贤 + - 标准字设计:赵家祺 + - 动画导演:提摩西 + - 专案经理:刘颖仁 + - 视觉设计:提摩西 + - 3D设计师:提摩西、黄靖杰、吴嘉进、黄俊安、柯明延、赖俊杰、许福强、李明学、李慧宁 + - 标准字动态制作:詹游承 + - 循环动画制作:提摩西、詹游承 + - 镜面设计:詹游承 + - 奖项模板制作:提摩西 + - 音乐总监:林昀骏、黄镇洋 + - 音乐/音效制作:林昀骏、黄镇洋、林柏勲、蔡昀熹 + - 乐手演出参与:龙俊宇 + + - 表演《从广播开始较劲》 + + - 音乐总监:米奇林、鲁纲宇 + - 编曲:鲁纲宇 + - 执行助理:森铭 + - 演出节目制作执行:玩角创意娱乐制作 + - Leo王工作团队 + - 演唱:王之佑 Leo王 + - 鼓手:高飞 + - 贝斯手:瑜友桢 + - 吉他:李权哲 + - 键盘/合成器:张汎宇 + - 萨克斯风:高杰 + - 长号:胡世汉 + - 小号:甘克蓝 + - 合声:布兰地、薛诒丹 + - 孙盛希工作团队 + - 造型:陈怡安、邱贞瑜 + - 妆/发:Claire、Edmund@Zoom Hairstyling + - 珠宝:Tiffany&Co.、江怡婷、林明鸿(保全) + - 服装:Off-White Marine Serre Onefifteen 初衣食午 Charles&Keith + - 编舞:贾皓钧 + - 编舞助理:马韵婷 + - 舞者:吴立丽、陈慧文、翁蕊、林采乐、张家玲、阮靖容、沃 创意整合、MerryMonarc Dance Studio + - 宇宙人工作团队 + - 演出者:宇宙人 + - 主唱兼键盘手:小玉 + - 吉他手:阿奎 + - 贝斯手:方Q + - 鼓手:小胖 + - Percussion:嘉富 + - PGM:小富 + + - 表演《有本事才敢大声》 + + - 表演者:唐从圣、李维真、黄大谦 + - 撰稿:刘沿玱 + - 特别感谢:警察广播电台 尚恩 + + - 表演《因为你我会更强》 + + - 表演者:荒山亮、戴爱玲 + - 编曲制作:无限愿景音乐工作室 + - 编曲:洪敬尧 + - MIDI PGM:林乐伟 + - 吉他:Joel Voo + - 贝斯:游仁杰 + - 鼓:杨凯淋 + - 合声:靛蓝音程工作室、范品颐 + - 演出节目制作执行:玩角创意娱乐制作 + + - 幕后团队 + + - 硬件统筹:必应创造 + - 硬件执行:廖志杰、周俊奇、甯钰琇、邱钰雯、许竣杰 + - 舞台设计:李信兴、郑皓心、黄孟莹 + - 灯光工程/音响工程/视讯工程:必应创造 + - 舞台工程:铨闳有限公司 + - 机关工程:奎比克动能系统有限公司 + - 结构工程:铉仪股份有限公司 + - 电力工程:鸿州企业有限公司 + - 会场布置:巨蛋展览股份有限公司 + - 媒体协办:Vidol、MTV、三立新闻网、LINE TODAY 、好事联播网 + - 赞助单位:中华电信、LEXUS、一家人益生菌洗发精、ILING 彩妆造型、iShine爱闪耀、五洲制药、舒跑S、台湾中油股份有限公司、可夫莱精品坚果、台湾啤酒 + - 特别感谢:中华民国广播商业同业公会、GRANDEN、柴语录、YouTube、国父纪念馆 + - 制作、著作:三立电视 + - 委制:文化部影视及流行音乐产业局 + + ### 电视金钟[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=93)] + + - 109年度电视金钟奖 + + - 指导单位:文化部 + - 主办单位:文化部影视及流行音乐产业局 + - 承办单位:三立电视 + - 总监制:张荣华 + - 节目统筹:王淑娟 + - 专案统筹:高明慧 + - 专案管理:李君顺、陈幼庭、黄昰桦、张彦筠、刘亭之、刘恩佑、叶映汝、吕筱玮 + - 行销/海外行销统筹:谢慰雯 + - 行销协力:邬嘉绫、刘立平、陈志昇、蔡佩瑜、张若琪、苏贞婷、李宜馨、黄歆雅、林柏昱、林筱涵 + - 工程统筹:龚美富 + - 新媒统筹:蓝宜祯、洪采岑 + - 新媒协力:黄廷宏、熊鸿斌、苏欣伟、黄立凯、王巽基、翁堃泰、连雅卉、蔡孟轩、姜淑龄、李宜倩、黄昱颖、曾丽洋、陈怡君、王俪颖、彭立扬、倪嘉达、陈姿颖、许巧妮、吴冠毅 + - 数位媒体工程:陈敬昌、陈玉菁、庄裕铭、刘元纮、朱俊德、吴鸿中、陈登隆、李佳祥、江佩芬 + - 资讯传输设计:耿履夷、王士方、陈俊宏、陈荣杰、詹志全 + - 讯号后制统筹:苏玠玺 + - 行政统筹:张维铭 + - 行政协力:张志雄、李盈蒨、颜银南、孙楷泽、苏珮雯、林惠淳、陈淑卿、纪玉芬、萧振文、刘謦嘉、林友三、温崇铭、童振瑞、陈维纲、陈诗涵、苏振邺、蔡宛婷 + - 赞助统筹:胡闵雯 + - 赞助协力:黄惠芬、陈慧娟、吕启源、曾凡珊、刘建呈、游智淳、施明志、林耘谊、张家豪、林珮𫓹、陈宥亘、蔡宗翰、吴佩宜、曾子萱、杨仁杰、周语铃、陈奇汉、郑湘桦、吴书菱、黄佳芳、邓文馨、蔡伊镕、董依𬭚 + + + + - 109年度电视金钟奖星光大道 + + - 总监制:王淑娟 + - 星光大道执行监制:黄晓玫 + - 星光大道制作人:许蕙茹 + - 星光大道制作群:邱湘莹、张伶卉、林君谕、周矩源、林孟如、吴亚桦、胡馥纯、廖亭琇、王芷晴、许芳瑜、袁锦仪、谢岳龙、李哲豪、孙黄贤、古淑慧、叶韦成、林思婷、余玫仪、胡佳倩、锺宏源、黄伟嘉、任禹洁、李真苡、黄雅新、陈佳莹、吕伟诚、姚佳燕、徐郁婷、陈钲锠、吴佳颖、简婉如、王建棠、锺孟洁、陈品柔、纪婷文、胡存智、邱玉芸、锺雨庭、陈颀惠、黄蓝、林贝珊、余柏颉 + + - 三立工程部 + + - 工程统筹:龚美富 + - 星光导播:锺宜莹 + - 现场指导:李建霖、江国玮 + - 助理导播:张成柔、王薏宁 + - 技术指导:陈建良 + - 视讯工程师:刘世裕、吴元申、赵德昇 + - 视讯助理:张元威、王通燊 + - 摄影师:朱华阳、林明雄、王文龙、王新智、黄春镇、陈俊雄、林文陞 + - 灯光师:薛芳铭、王文枫、林中强、邱汉忠、李智伟、王孟蓁 + - 成音师:孟兆欣、叶志忠、夏永柠、罗梵笠、蔡豊泽、陈文隆 + - 后制统筹:苏玠玺 + - 剪辑指导:薛宇琳、许佳雯 + - 后制剪辑:范志明、吴鸿伟、赖庆原、黄珮瑜、李幸蓉、陈美绍、史昇鑫、张君豪 + - 影片制作:郑亨泰、古淑慧、巫少强、廖昱凯、杨治娟、黄雅新、吴佳颖、黄建国、林思婷、简婉如、李晨瑜 + - 影片音效:声都传播有限公司 + - 影片旁白:马克(沈子煜) + - 影片灯光:邱汉光 + - 影片摄影:外景摄影组 + + - 星光大道主持人:李霈瑜 + - 化妆:Backstage Jimy Wu + - 发型:ZOOMhairstyling Spud_Tan谭信文 + - 服装提供:APUJAN + - 珠宝提供:APM monaco YUN YUN SUN + - 造型:金比白工作室 Claire化妆 + - 星光大道主持人:黄豪平 + - 化妆/发型:Ryan + - 服装:沈子宸 + + + + - 109年度电视金钟奖颁奖典礼 + + - 总监制:王淑娟 + - 执行监制:黄晓玫 + - 制作人:谢孟芬 + - 典礼制作群:王梦黛、邱湘莹、张伶卉、周矩源、林君谕、林孟如、吴亚桦、杨雅斐、王韵慈、杨治娟、陈钲锠、胡馥纯、吴佳颖、简婉如、王建棠、锺孟洁、陈奕颖、蔡妏雪、黄佳雯、周倢羽、黄至柔、邱亭瑄、许崇豪、苏子晴、蓝敬淇、李晨瑜、谢欣妤、林芳玉、锺欣惠、苏圣棋、江政颖、洪辰嫣、锺衣雯、凃嘉文、周妍廷、陈诗涵、沈美仪、陈淑卿、董依𬭚、苏振邺、蔡婉婷、赖玉婷、陈怡静、洪维信、杨雁捷、张韶恩、梁永青、梁家豪、林雅婷、李东元、蔡青萦、叶为诚、程仁伟、陈钰雯、凌静宜、许芳瑜、林友三、曹美琳、范振轩、黄雅文、陈宥亘、黎莉、黄鹏瑞、蔡宗翰、郑宇彤、田惠敏、廖翊婷、曾译卉、叶子瑄、王怡钧、陈怡如、郭柏旸、徐弦纭、徐嘉妤、邱苡洁、田筱琪、周亮辰、陈信智、曾琴、李奇莹、邱筱婷、徐郁婷、邱泠、余品贤 + + - 三立工程 + + - 工程统筹:龚美富 + - 导播:吴美君 + - 现场指导:邱雅玲、李紫瑀、李建霖、江国玮 + - 助理导播:黄雅琳、翁逸玫、李孟洁、萧谊諠 + - 技术指导:陈建良 + - 视讯工程师:刘世裕、吴元申、赵德昇 + - 视讯助理:张元威、王通燊 + - 摄影师:潘铭义、陈俊谊、王书镇、陈光杰、黄兆春、豊世颖、吴思宸、林茂荣、杜彦翔、吴茂瑞、林岢霈 + - 灯光师:薛芳铭、王文枫、林中强、邱汉忠、李智伟、王孟蓁 + - 成音师:孟兆欣、叶志忠、夏永柠、罗梵笠、蔡豊泽、陈文隆 + + - 主持人:白家绮 + - 梳化:王盈乔 + - 发型:罗南 + - 造型:小意思造型设计工作室 莉丝、怡如 + - 礼服:bob Jian Daniel Wong + - 珠宝:SHEE'S FINE JEWELRY 侍好珠宝 + - 鞋:Rene Caovilla + - 主持人:Gino(蔡东威) + - 发型:好剪才 + - 梳化:濬绮工作室 邱绣育 + - 造型:小意思造型设计工作室 莉丝、怡如 + - 礼服:Boss + - 珠宝:LONGINES 浪琴表 + - 鞋:LAIO复古绅士装 + - 特别感谢:凤凰艺能股份有限公司、民间全民电视公司 + + 未完待补.... + + ## 参考资料[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=94)] + + 1. **[^](https://zh.wikipedia.org/wiki/第55屆金鐘獎#cite_ref-1)** [金钟奖直播资讯看这里 戏剧类大乱斗 追思桥段感伤](https://www.cna.com.tw/news/firstnews/202009260024.aspx),中央社,2020年9月26日 + 2. **[^](https://zh.wikipedia.org/wiki/第55屆金鐘獎#cite_ref-2)** [金钟奖第55届 完整入围名单](https://www.cna.com.tw/news/firstnews/202008265006.aspx),中央社,2020年8月26日 + + ## 外部链接[[编辑](https://zh.wikipedia.org/w/index.php?title=第55屆金鐘獎&action=edit§ion=95)] + + - [金钟奖官方网站](http://gba.tavis.tw/) [页面存档备份](https://web.archive.org/web/20200822041257/http://gba.tavis.tw/),存于[互联网档案馆](https://zh.wikipedia.org/wiki/互联网档案馆) + - [广播电视金钟奖 Golden Bell Awards的Facebook专页](https://www.facebook.com/bamid.goldenbell) \ No newline at end of file diff --git "a/source/_posts/\345\255\246\344\271\240/\346\225\260\345\255\227\346\260\264\345\215\260\347\232\204\345\265\214\345\205\245\344\270\216\346\217\220\345\217\226.md" "b/source/_posts/\345\255\246\344\271\240/\346\225\260\345\255\227\346\260\264\345\215\260\347\232\204\345\265\214\345\205\245\344\270\216\346\217\220\345\217\226.md" new file mode 100644 index 0000000..c3befd6 --- /dev/null +++ "b/source/_posts/\345\255\246\344\271\240/\346\225\260\345\255\227\346\260\264\345\215\260\347\232\204\345\265\214\345\205\245\344\270\216\346\217\220\345\217\226.md" @@ -0,0 +1,371 @@ +--- +title: 基于小波变换的数字水印检测 +tags: +- study +- watermark +- matlab +categories: [学习,matlab] +id: 1 +date: 2020-06-09 20:52:00 +updated: 2020-06-09 21:00:00 +author: CC +email: zekangsun@outlook.com +cover: https://cdn.jsdelivr.net/gh/ccknbc-backup/photos/blog/2020-10-03~17:07:16.png +top_img: https://cdn.jsdelivr.net/gh/ccknbc-backup/photos/blog/2020-10-03~17:07:16.png +--- +**数字水印技术原理** + +数字水印技术实际上就是通过对水印载体的分析、水印信息的处理、水印嵌入点的选择、嵌入方式的设计、嵌入调制的控制和提取检测方法等相关技术环节进行合理优化,寻求满足不可感知性、鲁棒性和安全性等约束条件下的准最优化设计问题。在实际应用中,一个完整水印系统的设计通常包括水印的生成、嵌入、检测和提取四个部分。 + +**1 水印生成** + +通常基于伪随机数发生器或混沌系统来产生水印信号,从水印的鲁棒性和安全性方面来考虑,常常需要对原水印进行预处理来适应水印嵌入贺认。 + +**2** **水印嵌入** + +在尽量保证水印不可感知性的前提下,嵌入最大强度的水印,可提高水印的稳健性。常用的水印嵌入准则有加法准则、乘法准则和融合准则。 + +**3水印检测** + +指判断水印载体中是否存在水印的过程。 + +**4水印提取** + +指水印被比较精确地提取的过程。 水印的提取和检测可以需要原始图像的参与(明检测), 也可不需要原始图像的参与(盲检测) + +**数字水印的分类** + +- 按水印的特性 +- 鲁棒数字水印:要求嵌入的水印能够经受各种常用的编辑处理 +- 脆弱数字水印:需要对信号的改动足够敏感,是人们能够根据脆弱水印的状态判断出数据是否被篡改。 +- 按水印的检测过程 +- 明文水印:检测工程中,需要原始数据。普遍来讲,鲁棒性较之盲水印要好。 +- 盲水印:只需要密钥,不需要原始数据 +- 按水印的内容 +- 有意义水印:水印是商标、音频片段等 +- 无意义水印:序列号,仅检测是否含水印 +- 按水印的隐藏位置 +- 空域 +- 频域 +- 时域 + +数字水印技术基本上具有下面几个方面的特点: + +----**安全性**:数字水印的信息应是安全的,难以篡改或伪造,同时,应当有较低的误检测率,当原内容发生变化时,数字水印应当发生变化,从而可以检测原始数据的变更;当然数字水印同样对重复添加有很强的抵抗性 + +----**隐蔽性**:数字水印应是不可知觉的,而且应不影响被保护数据的正常使用;不会降质; + +----**鲁棒性**:是指在经历多种无意或有意的信号处理过程后,数字水印仍能保持部分完整性并能被准确鉴别。可能的信号处理过程包括信道噪声、滤波、数/模与模/数转换、重采样、剪切、位移、尺度变化以及有损压缩编码等。 + +--**嵌入容量**(embedding capacity):是指载体在不发生形变的前提下可嵌入的水印信息量。尤其是隐蔽通信领域的特殊性,对水印的容量需求很大。 + +![tfsmLi.gif](https://t1.picb.cc/uploads/2020/06/09/tfsmLi.gif) + +**图1 数字水印嵌入与提取框图** + +**典型的数字水印算法** + +**数字水印的技术实现** + +**空域-LSB** + +LSB方法是最简单的嵌入水印的方法。事实上 ,任何一幅 图片都具备一定的容噪性 ,这表现在像素数据的最低有效位(Least Significant Bit,LSB)对 人 眼的视觉影响很 小,秘密信息就隐藏在图像每一个像素的最低位或次低位 ,实现其不 可见性。 + +**频域** + +将图片的灰度强弱,视为图片的频域。通过某种变换手段(傅里叶变换,离散余弦变换,小波变换等)将图像变换到频域(小波域),在频域对图像添加水印,再通过逆变换,将图像转换为空间域。相对于空域手段,频域手段隐匿性更强,抗攻击性更高。 + +**DCT** + +DCT以8x8的像素为单位进行,生成的是8x8的DCT系数数据块。DCT变换的最大特点是对于一般的图像都能够将像块的能量集中于少数低频DCT系数上,即生成8x8DCT系数块中,仅左上角的少量低频系数数值较大,其余系数的数值很小,这样就可能只编码和传输少数系数而不严重影响图像质量。 + +**小波变换** + +“小波”就是小区域、长度有限、均值为0的波形。小波变换就是选择适当的基本小波或母小波ψ(t),通过对基本小波的平移、伸缩而形成一系列的小波,这簇小波作为基可以构成一系列嵌套的(信号)子空间,然后将欲分析的信号(例如图像)投影到各个大小不同的(信号)子空间之中,以观察相应的特性。这样,就相当于我们用不同的焦距去观察一个物体,可从宏观到微观,从概貌到细节观察得十分详尽。所以小波变换又被称为“数学显微镜”。 + +**空域+频域** + +该算法通过混沌置乱水印图像,建立水印与载体数据之间的Hash单向映射函数,使用两种不同的嵌入方法,先后嵌入水印到空域和DFT域。水印被多次嵌入,实现了水印的盲提取。 + +**数字水印的应用场景** + +- 多媒体作品盗版追溯:利用数字水印的不可见性,在不影响作品的情况下,加入版权信息的数字水印,可抗击拷贝,剪切。 +- 证件的防伪认证:如学历证,合同,票据等,携带数字水印后,可通过制定的方式提取水印,验证证件等数字文件是否被涂改; +- 阿里事件:阿里追查泄密员工的时间本身,说明,水印可以有效的追溯信息的释放源; +- 隐蔽信息传递:水印可携带加密信息后,藏在多媒体文件中传播,并通过特定的提取方式获取水印。可以作为一种隐蔽信息的通信方式。 + +**源程序代码及部分注释** + +**基础设置模块,同时存储着密钥,全局变量 main.m** + +```matlab +global I ; +global W; +global P; +global Iw; +ntimes=23; % 秘钥1,Arnold置乱次数 +rngseed=59433; % 秘钥2,随机数种子 +flag=1; %是否显示图像,0 不显示,1 显示 +``` + + **嵌入水印模块:setdwtwatermark.m** + +```matlab +matlabfunction [Iw,psnr]=setdwtwatermark(I,W,ntimes,rngseed,flag) +%基于小波变换数字水印嵌入 +%I:载体图像,灰度图 +%W:水印图像,二值图,且长宽相等 +%ntimes: 秘钥1,Arnold置乱次数 +I=imcrop(I,[0 0 size(I,2) size(I,1)-1]); +type=class(I); +I=double(I); +W=logical(W); +[mI,nI]=size(I); +[mW,nW]=size(W); +if mW~=nW + error('SETDWTWATERMARK:ARNOLD','ARNOLD置乱要求水印图像长宽必须相等!') +end +[ca1,ch1,cv1,cd1]=dwt2(I,'haar'); +[ca2,ch2,cv2,cd2]=dwt2(ca1,'haar'); +if flag + figure('Name','载体小波分解') + subplot(121) + imagesc([wcodemat(ca1),wcodemat(ch1);wcodemat(cv1),wcodemat(cd1)]) + title('一级小波分解') + subplot(122) + imagesc([wcodemat(ca2),wcodemat(ch2);wcodemat(cv2),wcodemat(cd2)]) + title('二级小波分解') +end +Wa=W; +H=[1,1;1,2]^ntimes; +for i=1:nW + for j=1:nW +​ idx=mod(H*[i-1;j-1],nW)+1; +​ Wa(idx(1),idx(2))=W(i,j); + end +end +flag=1; +if flag + figure('Name','水印置乱与嵌入') + subplot(221) + imshow(W) + title('原始水印') + subplot(222) + imshow(Wa) + title(['置乱水印,变换次数=',num2str(ntimes)]); +end +%数字水印嵌入 +ca2w=ca2; +rng(rngseed); +idx=randperm(numel(ca2),numel(Wa)); +for i=1:numel(Wa) + c=ca2(idx(i)); + z=mod(c,nW); + if Wa(i) +​ if z **待同步** **取消加密** +> +> **图片还未上传至图床** +> +> **视频嵌入还未做好 YouTube已OK** +> +> **目录在左侧** + +##### **超声波及温度传感摇摆风扇** + +###### **所用元件:** + +UNO R3开发板 ×1 + +大面包板 ×1 + +舵机 ×1 + +舵机支架 ×1 + +电位器 ×1 + +1k电阻 ×1 + +USB数据线 ×1 + +小风扇 ×1 + +摇头风扇支架组件 ×1 + +ULN2003AN驱动芯片 ×1 + +三色LED ×1 + +鳄鱼夹 ×2 + +面包线 若干 + +###### **开发环境:**Arduino IDE,Mind+ + +###### **预期要求:** + +通过超声波测距和温度传感控制舵机是否旋转,当距离小于30cm或温度大于30℃时在设定的角度之间来回旋转;通过电位器控制电机,小风扇旋转的快慢。 + + + +###### **大致设计思路:** + +###### **具体实现源代码:** + +```c +//引入库文件 +\#include //舵机库,之间要有空格,否则编译时会报错。 +\#include //是I2C通讯的,Arduino和I2C设备通讯使用的(SCLK DIN RCLK) +//以下为函数声明 +void zhuan(); +void buzhuan(); +void chaoshengbo(); +void wendu(); +//以下为变量声明及初始声明 +Servo myservo;//定义舵机变量名 +unsigned char jiao; +const int P=A0;//电位器输入引脚 +const int U=8; +int sensorValue=0;//电位器电压值 +int outputValue=0; +// 设定SR04连接的Arduino引脚 +const int TrigPin = 10; +const int EchoPin = 11; +unsigned long distance; +int temp;//温度 +int tol;//校对码 +int j; +unsigned int loopCnt; +int chr[40] = {0};//创建数字数组,用来存放40个bit +unsigned long time; +\#define pin 2 +//以下为主函数部分 +void setup() //初始设定 +{ + myservo.attach(9);//定义舵机接口 + Serial.begin(9600);//设定波特率为9600 + pinMode(TrigPin, OUTPUT);// 要检测引脚上输入的脉冲宽度,需要先设置为输入状态 + pinMode(EchoPin, INPUT); + Serial.println("Ultrasonic sensor:"); + buzhuan(); + chaoshengbo(); + wendu(); + } +//以下为循环执行部分 +void loop() +{ + chaoshengbo(); + wendu(); + delay(500); + if ((distance<30) || (temp>30)) + { + digitalWrite(4, LOW);//红灯灭,代表舵机未旋转 + digitalWrite(7, HIGH);//绿灯亮,代表舵机开始旋转 + zhuan(); + chaoshengbo(); + wendu(); + delay(500); + } + else if((distance>30) || (temp<30)) + { + buzhuan(); + chaoshengbo(); + wendu(); + delay(500); + } +} +//以下为函数定义部分 +void zhuan()//定义舵机转 +{ + myservo.write(jiao); + sensorValue=analogRead(P); + outputValue=map(sensorValue,0,1023,0,255); + analogWrite(U,outputValue); + for(jiao=30;jiao<150;jiao++) + { + myservo.write(jiao);//设置舵机旋转的角度 + delay(10); + } + for(jiao=150;jiao>30;jiao--) + { + myservo.write(jiao);//设置舵机旋转的角度 + delay(10); + } +} +void buzhuan()//定义舵机不转 +{ + digitalWrite(TrigPin, LOW); + delayMicroseconds(2); + myservo.write(jiao); + digitalWrite(4, HIGH); + digitalWrite(7, LOW); + sensorValue=analogRead(P); + outputValue=map(sensorValue,0,1023,0,255); + analogWrite(U,outputValue); + myservo.write(jiao); +} +void chaoshengbo()//定义超声波测距 +{ + // 产生一个10us的高脉冲去触发TrigPin + digitalWrite(TrigPin, LOW); + delayMicroseconds(2); + digitalWrite(TrigPin, HIGH); + delayMicroseconds(10); + digitalWrite(TrigPin, LOW); // 检测脉冲宽度,并计算出距离 + //delayMicroseconds(2); + distance = pulseIn(EchoPin, HIGH) / 58.00; + Serial.print("距离:"); + Serial.print(distance); + Serial.print("cm"); + Serial.println(); +} +void wendu()//定义温度测量 +{ + bgn: + delay(500); +//设置2号接口模式为:输出 +//输出低电平20ms(>18ms) +//输出高电平40μs + pinMode(pin,OUTPUT); + digitalWrite(pin,LOW); + delay(20); + digitalWrite(pin,HIGH); + delayMicroseconds(40); + digitalWrite(pin,LOW); +//设置2号接口模式:输入 + pinMode(pin,INPUT); + //高电平响应信号 + loopCnt=10000; + while(digitalRead(pin) != HIGH) + { + if(loopCnt-- == 0) + { +//如果长时间不返回高电平,输出个提示,重头开始。 + Serial.println("HIGH"); + goto bgn; + } + } + //低电平响应信号 + loopCnt=30000; + while(digitalRead(pin) != LOW) + { + if(loopCnt-- == 0) + { +//如果长时间不返回低电平,输出个提示,重头开始。 + Serial.println("LOW"); + goto bgn; + } + } +//开始读取bit1-40的数值 + for(int i=0;i<40;i++) + { + while(digitalRead(pin) == LOW) + {} +//当出现高电平时,记下时间“time” + time = micros(); + while(digitalRead(pin) == HIGH) + {} +//当出现低电平,记下时间,再减去刚才储存的time +//得出的值若大于50μs,则为‘1’,否则为‘0’ +//并储存到数组里去 + if (micros() - time >50) + { + chr[i]=1; + }else{ + chr[i]=0; + } + } +//温度,8位的bit,转换为数值 +temp=chr[16]*128+chr[17]*64+chr[18]*32+chr[19]*16+chr[20]*8+chr[21]*4+chr[22]*2+chr[23]; + //校对码,8位的bit,转换为数值 +tol=chr[32]*128+chr[33]*64+chr[34]*32+chr[35]*16+chr[36]*8+chr[37]*4+chr[38]*2+chr[39]; +//输出:温度、湿度、校对码 + Serial.print("温度:"); + Serial.print(temp); + Serial.println("℃"); +} +``` + +串口串口显示情况1,此时温度为28℃,距离为275cm左右,都不满足舵机旋转的条件,红色指示灯常亮。 + +对应的实际运行情况如下图所示: + +串口串口显示情况2,串口串口显示情况1,此时温度为28℃,距离为5cm左右,满足舵机旋转的条件,绿色指示灯常亮。 + +对应的实际运行情况如下图所示 + + +###### **YouTube:** + + \ No newline at end of file diff --git "a/source/_posts/\345\255\246\344\271\240/\347\256\200\345\216\206\346\250\241\346\235\277.md" "b/source/_posts/\345\255\246\344\271\240/\347\256\200\345\216\206\346\250\241\346\235\277.md" new file mode 100644 index 0000000..a850d41 --- /dev/null +++ "b/source/_posts/\345\255\246\344\271\240/\347\256\200\345\216\206\346\250\241\346\235\277.md" @@ -0,0 +1,240 @@ +--- +title: 简历模板 +date: 2020-09-13 16:40:33 +updated: 2020-09-13 16:40:33 +tags: +- 求职 +- 毕业 +- 简历 +categories: +- 求职 +- 毕业 +- 简历 +id: 7 +author: CC +email: zekangsun@outlook.com +cover: https://cdn.jsdelivr.net/gh/ccknbc-backup/photos/blog/2020-10-03~17:08:32.png +top_img: https://cdn.jsdelivr.net/gh/ccknbc-backup/photos/blog/2020-10-03~17:08:32.png +--- + +**案例A** + +178XXXXXX46 | anli150151@foxmail.com + +求职意向:用户运营实习生 + +**教育经历** + +**成都工业学院** **国际商务本科** **2015.9** **–** **2019.7** + +l GPA:3.24/5.0(专业排名17/153) + +l 荣誉/奖项:校级乙等奖学金2次(6%)、丙等奖学金1次(10%)、挑战赛校级赛2等奖、解说员风采大赛2等奖。 + +**实习经历** + +**瑞禾英语** **外教老师助理** **2018.4-2018.6** + +l **社群日常管理:**协助外教负责5**个班级群管理**,包括发放教学资料、组织班级学习,收集整理课程资料,记录30位学生单独的成长记录,形成文档保存; + +l **用户答疑解惑:**协调外教老师和5个班级在课堂中出现的各种问题并及时翻译。及时解答学生关于发音的疑问,最终有效地纠正了口语发音。 + +l **调动课堂气氛:**为提高学生课程参与度,调动课堂气氛,策划小游戏等; + +l **课后辅导:**密切跟踪关注学生课后的复习情况和学习上遇到的困难,向学生介绍一些更有效的学习方法来提高英语水平; + +l **用户调研:**利用Word协助制作并回收**50****份家长调查问卷**,调查17位家长的意见反馈,及时和老师们交流,对6次课程内容进行修改,优化教学内容和服务质量; + +**中信银行郫都支行** **零售部客户经理助理** **2018.1-2018.2** + +l **维护客户:**扩大客户群和完成贷款任务,维护和链家、中信地产和Q房网3家房产机构的业务关系。负责买卖及银行3方贷款资料等10份资料的收集和完善,进行贷款资料整理核实,协助初审等; + +l **后续跟踪:**处理客户还款申请及贷后管理,包括资料补办、跟踪贷款进度。维护客户关系,协助客户签署3份贷款合同文件。一个半月的实习里,完成53笔贷款业务。 + +**嘉祥九思教育** **晚辅老师** **2017.3-2017.6** + +l **课堂纪律:**负责对23位同学日常签到和考勤,监督学生按时参加晚辅,是学生的签到率提到14%。 + +l **答疑解惑:**辅导小学生和初中生的语文、数学和英语作业,实时解决学生作业中遇到的困惑,及时与家长沟通并解决学生学业问题。所负责的学生,成绩提高到了85分,获得了家长的好评。 + +**校园经历** + +**经济与管理学院实践部** **骨干成员** **2015.09-2016.10** + +l 组织 “三月学雷锋”颁奖仪式,负责活动策划,组织协调活动人员。活动有486人观看,仪式圆满成功。 + +l 协助经济与管理学院“首届创新创业大赛”,负责人员组织和宣传工作。邀请了光谷创业咖啡的代表作为点评嘉宾,吸引了103同学参加。 + +**技能/证书及其他** + +**技能:** Office办公(熟练) + +**证书****/****执照:** acess数据库(二级)、英语(六级490分、四级450分) + +**语言:** 英语口语(熟练) + +**自我评价** + +l 大四国际商务专业在读,分别在**嘉祥九思、瑞和英语教育机构**担任晚辅老师和助教,参与**11****次英语课程**内容的制作,在线解答各种学习困惑。负责**30****人社群运营**,包括调动课堂气氛、及时答疑、组织课堂纪律等; + +l 个人荣誉:3次校级奖学金,全国大学生电子商务挑战赛校级赛2等奖等; + +l 职业规划:在教育领域深入发展,当前职业定位是用户运营岗位 + + + +方方 + +​ 13722222457 | 22222222@163.com + +​ 求职意向:人力实习生 + +**教育经历** + +**浙江科技学院** **英语专业本科** **2016.09** **– 2020.07** + +l GPA:3.67/5.0(综合排名7/60) + +l 荣誉/奖项:校级三等奖学金2次、国家励志奖学金2次、优秀学生干部1次 + +l 相关课程:高级口译、高级英语视听说、商务英语、英美文学 + +**活动经历** + +**浙江****科技学院外国语学院学生会 正主席 2018.10-2019.01** + +l **活动策划:**担任总策划人,负责院学生运动会开幕式的策划以及排演,召开2次学生会议后,在老师的指导下确定最终方案。 + +l **活动执行:**负责现场彩排,组织3个班级共计60余人进行现场有序演练,耗费2天达成方阵表演效果,最终运动会开幕式圆满完成。 + +**浙江科技学院外国语学院英语162班 班长 2017.09-2019.06** + +l **协调分工****:**带领班干部筹办班级迎新晚会,经过多次开会讨论,2天之内形成具体方案,将任务细化分配到个人,督导晚会各环节进程,最终成功举办班级晚会,参与人数27/31,获得班级同学的认可。 + +l **组织彩排****:**在学校开展校特优学风班评比比赛时,与老师班委一起策划现场评比表演,分配规划任务。赛前与比赛工作人员协商彩排时间并组织了4次彩排,在17个强劲班级中,取得了总分第二的好成绩。 + +**浙江科技学院外国语学院勤工助学处 负责人兼辅导员助理 2018.09-2019.06** + +l **沟通协调****:**在从事勤工助学时,主要负责招聘岗位与人数的拟定,以及每隔两个月一次的薪酬统计。初始期间与院负责老师以及其他老师多次沟通协商,协调出最适合的用工人数及用工岗位,获得了负责老师的认可。 + +**多项志愿活动 志愿者** + +l **人员接待****:**在世界医药健康信息学大会中担任酒店志愿者,负责与外宾沟通并迎接入住,大会信息咨询,会场班车引导,因服务细致热心,还收到了澳大利亚与会嘉宾的感谢与礼物。 + +l **英语翻译:**在世界地理信息学大会中担任餐饮组志愿者,给参会国家部长及其家属提供餐饮服务,并担任翻译。 + +此外还参加了浙江省口译大赛志愿者,浙江省-下奥地利商务论坛翻译人员。 + + + +**技能/证书及其他** + +**技能:** Office办公(熟练) + +**证书/执照:**英语(四级、六级),专业英语四级(笔试,口试) + +**语言:** 英语口语(熟练),日语(一般掌握) + +**个人荣誉:**“we talent”优秀学子;院学生会主席;优秀学生干部;全国大学生英语竞赛校二等奖;浙江省LSCAT笔译大赛二等奖;优秀志愿者 + + + + + +[Name] + + [Phone Number] | [Email Address] | [Physical Address (*make it short; just highlight where you are now*)] + +*(Reminder:* *中英文简历各一页!改完后记得删除所有中括号)* + + + +**EDUCATION** + +**[University Name] [City], [State/Country]** + +*Bachelor of [Arts/Science]; Major in [Major]* [Start date (month/year)] – [End date (expected)] + +· **GPA:** [xx] / 4.0; [If you’re outside the US, list grades under your system here instead] + +· **Honors/Awards:** [xx] + +· **Major Coursework:** [Economics / Accounting / Finance classes, only the “hardcore” courses; highlight what content you learnt from the courses, rather than only list the official names of the courses] + + + +**INTERNSHIP EXPERIENCE** + +**[Company Name 1**] **[City], [State/Country]** + +*Explanation of the company (if it is not “big name”)* + +[Position Title], [Group Name] [Start Date] – [End Date] + +· [Summary sentence stating what you did and the overall results of your work] + +· [Conducted research on the xx industry, covering market size, growth, trends and key success factors, which was used in the external study part of the strategic planning report for a xxx client] + +· [Collected such financial data as revenue, margin and cost breakdown of 10+ competitors of a client in XX industry through desktop research, analyzed the data through modeling, and the results were used for the competitor benchmarking and strategic recommendations report] + +· [Led a team of xxx members to organize a marketing campaign, which attracted xxx customers within xx days, and increased the sales of the month by xx% ] + + + +**[Company Name 2**] **[City], [State/Country]** + +*Explanation of the company (if it is not “big name”)* + +[Position Title], [Group Name] [Start Date] – [End Date] + +· [Summary sentence stating what you did and the overall results of your work] + +· [Conducted research on the xx industry, covering market size, growth, trends and key success factors, which was used in the external study part of the strategic planning report for a xxx client] + +· [Collected such financial data as revenue, margin and cost breakdown of 10+ competitors of a client in XX industry through desktop research, analyzed the data through modeling, and the results were used for the competitor benchmarking and strategic recommendations report] + +· [Led a team of xxx members to organize a marketing campaign, which attracted xxx customers within xx days, and increased the sales of the month by xx% ] + + + +**EXTRACURRICULAR ACTIVITIES** + +**[Student Club Name**] **[City], [State/Country]** + +*[Position Title]* [Start Date] – [End Date] + +· [Summary sentence stating what you did and the overall results of your work] + +· [Led a team of xx people to organize xx activities to recruit xx new members, increasing the overall membership from xx to xx within xx months] + +· [Organized xx conference, which invited xx speakers and attracted xx audience] + + + +**[Volunteer Work Name**] **[City], [State/Country]** + +*[Position Title]* [Start Date] – [End Date] + +· [Summary sentence stating what you did and the overall results of your work] + +· [Organized xx activities …, which attracted xx participants / xx audience / helped xx people to xxx] + +· [Led a team of xx people to xxx] + + + + + +**SKILLS & INTERESTS** + +**Languages:** TOEFL [xx] / 120; IELTS [xx] / 9; CET-4/6 [xx] / 710; xx years’ overseas study and living experience + +**Technical Skills:** [List any programming languages – **including** MS Office/Excel] + +**Certifications & Training**: [Any extra courses or programs relevant to your target, e.g., CPA, CFA] + +**Interests:** [Keep this to 1-2 lines and be specific, e.g. Travelling (backpacked to 20 countries); Piano (Grade 10)] + +| | | +| ---- | ---- | +| | | \ No newline at end of file diff --git "a/source/_posts/\346\212\200\346\234\257/HEXO\346\212\230\350\205\276\357\274\210\346\214\201\347\273\255\346\233\264\346\226\260\344\270\255\357\274\211.md" "b/source/_posts/\346\212\200\346\234\257/HEXO\346\212\230\350\205\276\357\274\210\346\214\201\347\273\255\346\233\264\346\226\260\344\270\255\357\274\211.md" new file mode 100644 index 0000000..d3700eb --- /dev/null +++ "b/source/_posts/\346\212\200\346\234\257/HEXO\346\212\230\350\205\276\357\274\210\346\214\201\347\273\255\346\233\264\346\226\260\344\270\255\357\274\211.md" @@ -0,0 +1,937 @@ +--- +title: HEXO折腾 +date: 2020-07-01 00:00:00 +updated: 2020-07-01 00:00:00 +tags: HEXO +categories: HEXO +cover: https://cdn.jsdelivr.net/gh/CCKNBC/CDN/image/cover/2020-8-6.png +top_img: https://cdn.jsdelivr.net/gh/CCKNBC/CDN/image/cover/2020-8-6.png +id: 3 +author: CC +email: zekangsun@outlook.com +--- +**个人目前使用主题为Butterfly `3.0.1`版本,HEXO `5.0.2`版本** + +请按照以下步骤依次安装相应依赖和框架 + +## 搭建步骤 + +### 安装 Node.js + +> **什么是 Node.js ?** +> 这得从什么是 JS 说起,JS 也就是 JavaScript。(为什么有种从盘古开天辟地开始的感觉)没错,JavaScript 就是网页的盘古。JavaScript 是一种编程语言,我们所见到的网页中的交互和逻辑处理几乎都是由 JavaScript 完成。 +> JavaScript 语法简单,易学易用。(当然也请不要小瞧它,虽然它入门门槛低,但上限同样也很高。包括但不限于实现网站前后端,手机桌面应用程序,机器学习,计算机图形学等。) +> 在 Node.js 诞生前,JavaScript 都运行于浏览器端。也就是说,它是鱼,浏览器是装满了水的水缸。 +> 2008 年,Chrome V8 诞生。2009 年,Node.js 诞生。并成为 GitHub 早期最著名的开源项目。GitHub 可能大家已有所了解,后续再说。 +> Node.js 便是一个基于 Chrome V8 引擎的 JavaScript 运行环境。(当年第一次看到这句话时,我也一脸懵逼。)按照我的理解,JavaScript 是鱼,Chrome V8 就是抽水机,Node.js 则把这台抽水机也装在你电脑上。于是你的电脑也有了 Node.js 这个和浏览器相似的水缸,也可以在里面运行 JavaScript 了! +> 当然 Node.js 和浏览器端还是因为自身定位和一些历史原因而有些许区别的,不再展开。 +> [Node.js | 百度百科](https://baike.baidu.com/item/node.js/7567977) +> [JavaScript | MDN](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript) + +[下载| Node.js](https://nodejs.org/zh-cn/) + +建议下载**长期支持版**而非**当前发布版**(因为如果是最新版,容易出现一些奇妙的 bug)。 + +全部默认下一步进行安装。 + +Windows 打开命令提示符,macOS 打开终端。(= =,这个不会就请百度吧。) +Linux 用户右上角关闭本标签页。 + +后续如提到输入命令,均默认指打开终端进行输入。 + +输入 `node --version`,如果得到的版本号与你方才安装的一致,那么 Node.js 就已经成功安装。 + +> Node.js 安装成功时也默认安装了 `npm`,在此后将会用到。 +> `npm` 是随 Node.js 一起被安装的包管理工具,你可以理解成 Node.js 自带的应用商店。 + +对了,国内使用 npm 可能很慢。 + +**你可以考虑切换为 `taobao` 镜像源。** + +```sh +npm config set registry https://registry.npm.taobao.org +``` + +> [npm & yarn 常用包与命令](https://www.yuque.com/yunyoujun/notes/npm-and-yarn#nrm) + +### Git 与 GitHub + +#### 安装 Git + +> Visual Studio Code,简称 VS Code。 +> 目前最为强大易用的编辑器,轻量且快速。(~~宇宙第一编辑器~~) +> 注意:它并不是我们常常听到的 VS,VS 常常指的是 Visual Studio,是一个功能强大的 IDE(集成开发环境),体积也相比 VS Code 都要大上一个量级。 + +在此之前,我建议你先安装 [VS Code](https://code.visualstudio.com/)。因为安装 Git Bash 时,可以设置 VS Code 作为默认编辑器。 + +> Git 是一个开源的分布式版本控制系统,由 Linus Torvalds(同时也是 Linux 的作者)为了管理 Linux 开发而开发。 +> 简而言之,是一个版本管理工具。譬如设计师设计好了第三版的海报,客户却说还是要第一版吧,这时便可以通过 Git 快速回退到最初的版本。 +> 你只需要把每次更改的状态(Git 会自动进行检测,你只要掌握基础的几条命令就可以了)告诉 Git,而不需要每个版本都保存一份压缩包,既方便也能大大节约空间。 +> (当然这主要只对代码文本起作用,因为 Git 的本质是记录各行代码的增减,倘若是像视频、海报这类二进制文件来说便体现不出丝毫优势了。当然想要应对这种场景还有 [Git LFS](https://git-lfs.github.com/)。) + +下载 [Git](https://git-scm.com/) 并安装(如果国内速度太慢,可以试试[这里](https://pc.qq.com/detail/13/detail_22693.html)) + +macOS 用户可以下载官网的安装包进行安装,也可以直接安装 App Store 的 Xcode(附带会安装 Git,但是比较大)。 + +> 类似的工具还有:SVN。但始终更推荐 Git,因为它功能更为强大且它的背后还有更强大的生态:GitHub。 + +#### 注册 GitHub + +这一部分内容,你也可以放到本地调试并预览成功后并打算线上部署的时候,再回过头来看。 + +> GitHub 一听便与 Git 有所渊源。`Git` 在英文中是懒人、饭桶之意。`Hub` 则是中心、集线器的意思。譬如 USB 集线器就是 USB Hub。所以 GitHub 就是饭桶中心(~~大雾~~)。 +> GitHub 是全世界最大的开源项目与代码托管平台,也是众多开发者的交流场所。~~还是全球最大的同性交友网站~~。 +> 而代码托管本身用到的正是上文提到的 Git 技术。 + +注册 [GitHub](https://github.com/) 账号。(虽然都是英文,但不必畏惧,也并不会造成使用障碍,只要记得最常用的选项含义即可,以及善用手头的翻译软件。) + +> 注意:注册时的英文用户名将成为你可以使用的免费域名前缀。 + +登录 GitHub。 + +> 为什么要用 GitHub? +> 对于平民玩家来说,在初次尝试建立自己的网站时,也许并不会有闲钱或者说决心来购买自己的服务器与域名。 +> 而 GitHub 则提供了 [GitHub Pages](https://pages.github.com/) 这一服务。 +> 用户们可以利用这一服务,部署自己的静态站点。 + +点击右上角的 `+` -> `New repository` 新建仓库。 + +仓库名称务必为 `你的用户名.github.io`,用户名是英文,大小写无所谓,但建议统一小写。(因为你会发现时常切换大小写很麻烦) + +> 为什么必须这个作为仓库名? +> GitHub Pages 服务的命名规范,同时若您没有自己的域名,使用Github提供的服务的话,请务必将此仓库设为公开,同时它也将成为你的专属域名。当然,你也可以购置自己的专属域名并用它来提供内容。 + +点击 `Create repository`。 + +### 安装 Hexo + +[Hexo](https://hexo.io) + +- GitHub: +- [官方文档](https://hexo.io/zh-cn/docs/index.html)(直接参考文档也是一个不错的选择) + +> **为嘛使用 Hexo ?** +> Hexo 是一个快速、简洁而强大的博客框架,基于 Node.js,同样托管于 GitHub 之上。生态中拥有众多插件主题。你可以基于它快速生成一些静态页面。 +> 你可以使用别人的各种主题与插件,也可以自己定制开发想要的功能。 +> **为什么不是...?** +> 其他常用的博客框架还有 [WordPress](https://wordpress.org/),[Typecho](https://typecho.org/),[Ghost](https://ghost.org/) 等,但这些往往都需要购置自己的服务器,而无法静态化地部署到 GitHub Pages 上。(当然,相应的功能和灵活性也大大提升。)静态化站点还有一个优势就是访问速度往往更快。 +> 静态网站生成器还有 [Vuepress](https://vuepress.vuejs.org/),[Gatsby](https://www.gatsbyjs.org/) 等。但这些多是为了写文档而量身定制的,你也可以使用它们,但是相较 Hexo 的博客定位,它们关于博客的插件和主题以及解决办法会少得多。 +> Hexo 提供的功能与 [Hugo](https://gohugo.io/) 几乎都有,(生成大量文件时,甚至比 Hexo 更快)不过它是基于 GO 语言。日后你想对自己的网站进行自定义,即便是 Hugo,你编写前端的交互仍旧需要使用 JavaScript,所以选择基于 JavaScript 的 Hexo 可以降低学习成本。(你若对 GO 有兴趣,仍然可以尝试使用 Hugo,但本教程将不会针对 Hugo 进行展开。) +> 所以对于新手来说,使用 Hexo 作为起始点,不失为一个好选择。(当然如果你有钱租服务器,并希望快速上手的话,就可以考虑考虑 WordPress 或者 Typecho) +> 这里顺带推荐一下小伙伴 [染川瞳](https://asuhe.jp/) 的 WordPress 主题 [Sakurairo](https://github.com/mirai-mamori/Sakurairo),[阔落](https://guhub.cn/) 的 Typecho 主题 [miracles](https://github.com/BigCoke233/miracles),都是很漂亮的主题。 + +在终端中输入以下命令: + +```sh +npm install hexo-cli -g +# 如果安装失败,可能是没有权限,可以尝试头部加上 sudo 重新执行 +# sudo npm install hexo-cli -g +``` + +> `install` 自然是安装。 +> `hexo-cli` 则是 `hexo` 的终端工具,可以帮助你生成一些模版文件,之后再用到。 +> `-g` 代表的是全局安装。也就是在任何地方都可以使用,否则会只能在安装的目录下使用。 + +此时,请先通过 `cd` 进入你本地电脑打算存储网站代码的文件夹目录。(或者右键文件夹 Git Bash Here) + +> [cd | DOS 命令](https://baike.baidu.com/item/cd/3516393) +> [cd (LINUXSHELL 命令)](https://baike.baidu.com/item/cd/3516411) + +譬如: + +> 注意:这里是你自定义的目录,请不要复制粘贴 + +```sh +# '#' 字符后的文字代表注释,不需要输入 +# Windows +cd C:\Users\CCKNBC\Documents\GitHub\ +#实际上我用的是D:blog目录,按需选择即可 +# macOS +# cd /Users/yunyou/github/ +``` + +接下来输入: + +```sh +hexo init 你的名字.github.io +``` + +> `hexo` 正是因为我们之前安装了 `hexo-cli` 这一个包,所以我们可以在终端中使用 `hexo` 这一命令。 +> `init` 初始化博客的模版文件。后面跟的是你要新建的文件夹,最好和你此前新建的仓库名一致。 + +```sh +# 进入你的博客文件夹 +cd 你的名字.github.io +# 默认安装所有 `package.json` 文件中提到的包 +npm install +# 你也可以缩写成 hexo s +hexo server +``` + +`server` 代表开启本地的 Hexo 服务器,这时你就可以打开浏览器,在地址栏中输入 `localhost:4000` 就可以看到本地的网页了。 + +按 `Ctrl + C` 中断服务器的运行。 + +至此,基础的模版页面便已经搭建好了。 + +### 主题安裝 + +### 使用 Hexo 主题 + +Hexo 默认提供的是 [hexo-theme-landscape](https://github.com/hexojs/hexo-theme-landscape) 主题。 +默认主题样式简单,功能较少。所以大多数人并不会使用默认主题。 + +### Git 安装 + +在博客根目录里安装稳定版`master`分支【推荐】 + +```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 +``` + +### npm 安装 + +> 此方法只支持`Hexo 5.0.0`以上版本 + +在博客根目录里 + +```powershell +npm i hexo-theme-butterfly +``` + +### 应用主题 +修改hexo配置文件`_config.yml`(根目录),把主题改为`Butterfly`(注意配置要和你的主题文件夹名大小写完全一致哦) + +``` +theme: butterfly +``` + +>如果你沒有`pug`以及`stylus`的渲染器,请下载安装: +``` +npm install hexo-renderer-pug hexo-renderer-stylus --save +``` + +> 在进行配置修改之前,为了以后主题通过git pull平滑升级,请不要随意改动主题源码,虽然你可以通过强制合并来解决,但保险点总是没错的,并且由于主题的**`约定>配置`**特性,因此我们通常在Hexo根目录**`sorce/_data`**下把主题的**`_config.yml`**(主题目录)复制过来,并且重命名为**`butterfly.yml`**,然后再对butterfly.yml进行修改即可 + +有了上面的基础,我们就可以根据对应的**[文档](https://demo.jerryc.me)**修改相应的配置了,以下不再赘述 + +### 生成静态文件 + +至今我们的工作都是在本地进行,想必你也很想放到线上与小伙伴们分享。 +这便轮到了 GitHub Pages 的出场,不过 GitHub Pages 只支持纯静态文件。 + +所以我们需要使用以下命令先来生成站点的静态文件。 + +```sh +# 如果进行多次生成,为了避免受错误缓存影响,最好使用 hexo clean 先清除一遍。 +hexo generate +# 缩写为 hexo g +``` + +此时你的文件夹目录下会出现 `public` 这个文件夹,里面存放的就是你站点的静态文件。 + +### 与远程仓库建立关联 + +接下来我们将本地的仓库与此前在 GitHub 上建立的仓库建立关联。 + +```sh +git init # 初始化 Git 仓库,只需要执行一次即可 +``` + +在将其部署到 GitHub Pages 上之前,我们最好先建立一个分支。 + +> 什么是分支? +> Git 提供了版本管理功能,其中还有一个分支功能,你现在可以简单地将其理解为平行世界。 + +`你的名字.github.io` 部署后,GitHub Pages 将默认使用你的 master 分支作为静态文件部署。 +所以我们最好新建一个 hexo 分支(命名无所谓)用来存储 Hexo 地源代码,master 分支则用来存储部署后的静态文件。 + +```sh +git checkout -b hexo +``` + +这时便成功建立了一个 hexo 分支。(此后的工作都将在 hexo 分支下进行) + +你可以通过 `git branch -v` 来查看当前有哪些分支,使用 `git branch 分支名` 来切换到对应的分支。 + +> [Git 学习笔记](https://www.yunyoujun.cn/note/git-learn-note/) + +### 部署 + +为了更方便的部署到 GitHub Pages,Hexo 提供了 `hexo-deployer-git` 插件。 + +老规矩,安装。 + +```sh +npm install hexo-deployer-git +``` + +在 `_config.yml` 中配置。 + +```yaml +deploy: + type: git + repo: 你此前新建的仓库的链接 # 比如:https://github.com/YunYouJun/yunyoujun.github.io + branch: master # 默认使用 master 分支 + message: Update Hexo Static Content # 你可以自定义此次部署更新的说明 +``` + +保存,部署! + +> 第一次可能需要你输入用户名与密码。 +> 密码输入的时候不会出现 \*\*\*,不要害怕,已经输入进去了。 + +```sh +hexo deploy +``` + +等待完成后,打开网址 `https://你的名字.github.io` 就能看到你的线上网站了。 + +> 使用 https,http 可能无法正常打开。HTTPS 是多了安全加密的 HTTP,Chrome 浏览器已经默认会显示 `http` 链接为不安全。 +> 为了安全,建议开启强制 https 跳转。`项目地址页面 -> Settings -> Options -> GitHub Pages -> Enforce HTTPS`。(翻到下面) +> 此时,http 网址会自动重定向到 https + +### 备份与自动部署 + +我们当前只是将生成的静态文件部署到了云端。 + +为了以防万一,我们应该将网站的源代码文件也推送到 GitHub 仓库备份。 + +```sh +# 与远程 Git 仓库建立连接,只此一次即可 +git remote add origin https://github.com/你的用户名/你的名字.github.io +``` + +接下来准备提交,这几句命令将是你以后每次备份所需要输入。 + +```sh +# 添加到缓存区 +git add -A +git commit -m "这次做了什么更改,简单描述下即可" +# 推送至远程仓库 +git push +# 第一次提交,你可能需设置一下默认提交分支 +# git push --set-upstream origin hexo +``` + +每次推送都要输入这三条命令,你可能觉得有些麻烦。 +那么你可以编写 bash 脚本。 + +譬如,在根目录下新建 `update.sh`。 + +```sh +# 如果没有消息后缀,默认提交信息为 `:pencil: update content` +info=$1 +if ["$info" = ""]; +then info=":pencil: update content" +fi +git add -A +git commit -m "$info" +git push origin hexo +``` + +此后更新的话,只需要在终端执行 `sh update.sh` 即可。 + +更新麻烦,每次部署也很麻烦,可以使用持续集成进行自动部署。 + +> 什么是持续集成? +> 持续集成是一种软件开发实践。对软件进行自动化构建,以此来发现错误。 +> Travis CI 就是一个线上持续集成服务的提供商。它可以拉取你每次推送到 GitHub 上的代码,然后根据你的要求对其进行构建。 +> 我们可以趁机让它自动生成网站静态文件,然后自动帮我们部署。 +> 除此之外,你还可以使用 [GitHub Actions](https://help.github.com/en/actions/getting-started-with-github-actions/about-github-actions) ,[Netlify](https://www.netlify.com/) 等服务。 +> GitHub Actions 相比 Travis 等,自身便拥有仓库的 Token,不再需要额外设置,可以直接使用 `secrets.GITHUB_TOKEN`。 +> 推荐一个专门用来部署 gh-pages 的 Actions [actions-gh-pages](https://github.com/peaceiris/actions-gh-pages) + +关于更多更具体的自动化部署方案和操作步骤,你可以参考我的小伙伴 ChrAlpha 的 [初探无后端静态博客自动化部署方案](https://blog.ichr.me/post/automated-deployment-of-serverless-static-blog/)。 + +他在文章中详细介绍了 Netlify 、GitHub Actions 和 Travis CI 的部署方法。 + +你也可以参考 Hexo 的官方文档 [将 Hexo 部署到 GitHub Pages](https://hexo.io/zh-cn/docs/github-pages) + +我就不在此画蛇添足。 + +--- + +当然还有个更简便的方法,直接参考我的 [gh-pages.yml](https://github.com/YunYouJun/yunyoujun.github.io/blob/hexo/.github/workflows/gh-pages.yml)。 + +去掉夹在 `yarn install` 与 `yarn build` 之间的 `algolia` 部分,直接粘贴到你的 `.github/workflows/` 文件夹(自己新建)下 `xxx.yml` 文件里即可。 + +推送后便可直接自动部署。 + +至此,你的站点便基本搭建完成,此后继续对主题进行自定义吧。 + +### 开始写作 + +#### 文章 + +输入以下命令即可新建 `xxx.md` 文件。 + +```sh +hexo new post xxx +``` + +> `md` 是 `Markdown` 的后缀名,是一种简洁方便的文本标记语言。你只需要记住简单的几种语法,就可以快速进行编写。 +> 为什么使用 Markdown? +> 首先 Hexo 本身就是将 Markdown 转化为静态的 Html 文件,来方便用户编写文章。 +> Markdown 就好似介于 Word 与 TXT 文本之间。Word 体积大、大部分功能实际上根本用不到,且最后的文档常常带有许多冗余信息。 +> 而 TXT 却无法实现加粗、标题、下划线、水平分割线等常用的功能。 +> (这里所说的 TXT 只是一种纯文本格式的代称,实际上 Markdown 也是纯文本文件,不过通过语法和 Markdown 编译器,我们就可以看到一些简单的样式。) + +譬如本文就是通过 Markdown 编写。 + +```md +# 一级标题 + +## 二级标题 + +**加粗文字** +``` + +> 更多语法(虽然说是更多,但是其实也没多少):[Markdown 基本语法](https://github.com/younghz/Markdown) + +这是我写的一个 Markdown 样式:[star-markdown-css](https://www.yunyoujun.cn/star-markdown-css/) + +上面是渲染过后的效果,你可以与其 Markdown 的[纯文本原文](https://raw.githubusercontent.com/YunYouJun/star-markdown-css/master/demo/md/demo.md)进行对比。 + +#### 页面 + +你可以新建一些自己的自定义页面。 + +譬如直接在 Hexo 目录下的 `source` 文件夹下直接新建 HTML 进行编写。 + +也可以通过以下命令来新建页面。(当然还是 Markdown,不过也是可以在 Markdown 里写 HTML 的,也会被渲染出来。) + +```md +hexo new page xxx +``` + +> 至于对应的参数配置,请参考主题文档 + +## FAQ + +### 视频? + +没有视频,一是懒,二是文字更利于更新勘误。 + +以及文章中将会频繁出现参考链接,更方便使用。 + +### 如何绑定你的自定义域名? + +首先,你得有个自己的域名。 + +> 避免广告嫌疑,你可以自行前往相关域名提供商购买。 +> ~~但是如果你有幸能看到谷歌广告(概率较小),可以考虑点一点。~~ + + + +并使用 CNAME 解析到 `你的名字.github.io`。(当然 A 记录直接解析到 GitHub Pages IP 地址也可以。) + +> [Managing a custom domain for your GitHub Pages site](https://help.github.com/en/github/working-with-github-pages/managing-a-custom-domain-for-your-github-pages-site#configuring-an-apex-domain) + +在 `Hexo` 工作目录下 `source` 文件夹下新建 `CNAME` 文件(没有后缀名)。 + +> CNAME 即相当于告诉 GitHub 允许将 xxx.github.io 为你的域名提供服务。 +> source 目录下的文件除了特殊的 markdown 会被解析为 html,其余都会原样复制到生成的静态文件夹中。 +> 所以你需要在 source 文件夹下建有 CNAME,它会在生成静态文件时,将 CNAME 拷贝到静态文件夹并部署到 master 分支。 +> 如果只是在 GitHub 上设置(`项目地址页面 -> Settings -> Options -> GitHub Pages -> Custom domain`),它会自动添加到 master 分支上,但随后不包含 CNAME 的部署会将其覆盖。 + +内容填写你的域名即可。 + +> [About custom domains and GitHub Pages](https://help.github.com/en/github/working-with-github-pages/about-custom-domains-and-github-pages) + +### 备案 + +如果想要使用国内的一些服务,比如 CDN,不备案确实寸步难行。 + +此处我指的是 ICP 备案,并非公安备案。(实际上我从来没有进行过公安备案,且目前在使用服务时,并未受到任何相关限制。) + +国内备案往往意味着你还需要一台国内的服务器,譬如通过腾讯云备案时会需要你设置关联的服务器(阿里云应当也是如此)。 +实际上你的网站并不一定得在这台服务器上,即便你只是免费试用了一个月,但是备案成功了,之后过期了对备案也不会有何影响。 + +> 也就是说你完全可以使用学生优惠(10 元左右)购买一个月的云服务器,用于关联,并在这个月内抓紧备案好,此后云服务器过期不会影响备案问题。 +> 学生优惠的话 [阿里云](https://www.aliyun.com/minisite/goods?userCode=ixykjqj2) 或者 [腾讯云](https://url.cn/PLQYbz6n) 都有。 + +备案前需要注意的几点就是: + +- 确定你的域名是否可以备案 +- 关闭评论区 +- 提交备案时的备注说明不得含有 `交流` 字样 +- 首页不能含有其他网站的直达链接 +- 遵纪守法无不良信息(这是当然的) + +你也可以直接关停网站,等待备案成功后再重新打开。(今后每年偶尔会复查,但相对会宽松许多。) + +此后,按照网站指引的备案步骤一步步来即可。(以前还要等待幕布寄送拍照,现在可以直接在手机上人脸验证) + +备案成功后页脚必须清晰地展示备案号,且备案号含有指向 的超链接。 + +## 源文件备份 + +### 备份什么? + +百密总有一疏,因此我们需要做好博客源文件的备份,你固然可以直接将整个文件夹打包,但当你后续安装的插件越来越多,你会发现压缩或者解压耗时越来越长,实际上我们只需要备份`根目录`的几个文件(夹)即可,`source`文件夹(里面存放着你博客的主要资源),`_config.yml`(HEXO的配置,如果你不升级HEXO的话,这个也是很重要的),然后就是`package.json`(和它的名字一样,他能告诉你你安装了哪些插件及其对应的版本),有了这些你就能在另外一台电脑上很快恢复你的博客环境(当然我本人采用了`Cloud Studio`作为临时环境,也是不错的) + +我的`package.json`一览,如果其中一些插件你也有兴趣可以按照插件官方说明尝试,这里不做功能注释,虽然总会踩一些奇奇怪怪的坑,但当你慢慢修正时,虽然很折腾,但的确是乐在其中 + +```json +{ + "name": "hexo-site", + "version": "0.0.0", + "private": true, + "scripts": { + "build": "hexo generate", + "clean": "hexo clean", + "deploy": "hexo deploy", + "server": "hexo server" + }, + "hexo": { + "version": "5.0.0" + }, + "dependencies": { + "cheerio": "^1.0.0-rc.3", + "cnpm": "^6.1.1", + "gulp-htmlmin": "^5.0.1", + "hexo": "^5.0.0", + "hexo-abbrlink": "^2.2.1", + "hexo-baidu-url-submit": "0.0.6", + "hexo-deployer-git": "^2.1.0", + "hexo-feed": "^1.0.2", + "hexo-generator-archive": "^1.0.0", + "hexo-generator-baidu-sitemap": "^0.1.9", + "hexo-generator-category": "^1.0.0", + "hexo-generator-index": "^1.0.0", + "hexo-generator-search": "^2.4.0", + "hexo-generator-sitemap": "^2.1.0", + "hexo-generator-tag": "^1.0.0", + "hexo-render-pug": "^2.1.4", + "hexo-renderer-ejs": "^1.0.0", + "hexo-renderer-marked": "^3.0.0", + "hexo-renderer-pug": "^1.0.0", + "hexo-renderer-stylus": "^1.1.0", + "hexo-server": "^1.0.0", + "hexo-tag-aplayer": "^3.0.4", + "hexo-wordcount": "^6.0.1", + "imagemin": "^7.0.1", + "npm-check": "^5.9.2", + "terser": "^4.8.0" + }, + "devDependencies": { + "gulp": "^4.0.2", + "gulp-clean-css": "^4.3.0", + "gulp-htmlclean": "^2.7.22", + "gulp-imagemin": "^7.1.0", + "gulp-uglify": "^3.0.2", + "workbox-build": "^5.1.3" + } +} +``` + +### 备份方式 + +不能在一棵树上吊死,所以我选择了多平台备份,分别是Github,Gitee,Coding三个平台,多一个平台,多一份保障,这里注册账号实名认证什么的不再赘述,大家应该都会,注意的一点就是我们建的仓库选择**`私有仓库`**,不然别人把你md一拷走,就成别人的的了,不过大多数人比较自觉,我们这静态博客,F12源码什么的也看的清清楚楚,爬走很简单,主要靠自觉,防止转载(其实无所谓,秉着开源共享的理念,其实标明出处大家也就不会特别在意) + +首先在博客`根目录`使用以下命令初始化本地仓库添加一个远程仓库 + +```bash +git init +``` + +> 如果本地未显示.git文件夹,请注意打开显示隐藏文件夹 + +然后运行 `git remote add ` 添加一个新的远程 Git 仓库,同时指定一个方便使用的简写: + +```bash +git remote add +``` + +比如 `git remote add origin git@github.com:CCKNBC/Hexo.git`,添加多个仓库地址等更多操作请参考**[Git-基础-远程仓库的使用]([https://git-scm.com/book/zh/v2/Git-%E5%9F%BA%E7%A1%80-%E8%BF%9C%E7%A8%8B%E4%BB%93%E5%BA%93%E7%9A%84%E4%BD%BF%E7%94%A8](https://git-scm.com/book/zh/v2/Git-基础-远程仓库的使用))**,按照个人喜好来添加多个仓库地址,我这里全部使用的origin,通过手动添加了coding,gitee的仓库地址,不影响使用就行 + +然后我们运行`git remote -v`查看一下结果,是自己想要的即可 + +``` +origin git@github.com:CCKNBC/Hexo.git (fetch) +origin git@github.com:CCKNBC/Hexo.git (push) +origin git@e.coding.net:ccknbc/blog/source.git (push) +origin git@gitee.com:ccknbc/blog.git (push) +``` + +然后我们就可以推送对应的内容了 + +```bash +git pull +git add . +git commit -m "%date% %time%: Updated By CCKNBC Local" +git push origin -u +``` + +> 上面`git push origin -u`这个是因为第一次推送,我们采取强制推送,如果还是不行我们`git push origin -f`(因为是第一次无所谓,以后请不要随意使用-f),以后我们只需要`git push`即可,同时commit的内容请根据实际需要自行修改 + +以下是我的`.git/config`一览,设置好后你可以更换你的第一个url,也就是fetch仓库,根据个人喜好来(或者说网络原因),下面使用的是github的,那么git pull等操作就会按照这个仓库来和本地做比较,选择一个连接比较快的就好 + +```config +[core] + repositoryformatversion = 0 + filemode = false + bare = false + logallrefupdates = true + symlinks = false + ignorecase = true +[remote "origin"] + url = git@github.com:CCKNBC/Hexo.git + fetch = +refs/heads/*:refs/remotes/origin/* + url = git@e.coding.net:ccknbc/blog/source.git + url = git@gitee.com:ccknbc/blog.git +[branch "master"] + remote = origin + merge = refs/heads/master +``` + +在上面的添加多个仓库中,个人因为懒的输入命令,所以直接手动添加的下面两行,反正目的达到就行 + +```bash +url = git@e.coding.net:ccknbc/blog/source.git +url = git@gitee.com:ccknbc/blog.git +``` +然后在配置好公钥的情况下,强制推送即可,至此,你的博客源文件已经推送至你的备份仓库,可以去查看是否有一条强制推送的commit记录了,同时检查是否有`theme`文件夹(因为涉及到后面的魔改,部分源文件修改,因此我们也做好备份),如果没有,检查主题文件夹是否有`.git`文件夹,删掉后再次推送即可 + +## 如何优雅的魔改 + +在不动主题源文件方便日后升级的情况下,我们大部分采用外部引入css,js的方式实现,同时上传至github,借用jsDelivr提供的CDN加速服务快速引用 + +在博客根目录`source`文件夹下新建一个`xxx.js`和`xxx.css`,名字自己取就行,最后我们正确引入即可,在主题配置文件`butterfly.yml`(下文将直接简写根配(根目录的_confg.yml),主配(主题配置`source`目录下的butterfly.yml))搜索inject,然后在以下位置插入对应的css和js即可,例如,我是存放在主题文件夹子文件夹css和js内 + +```yaml +inject: + head: + - + bottom: + - +``` + +所以按照上面所说的对应的你的链接即为,其中`your name`是你的github用户名,请注意根据具体路径变通 + +``` +https://cdn.jsdelivr.net/gh/your name/your name.github.io@latest/xxx.css +https://cdn.jsdelivr.net/gh/your name/your namec.github.io@latests/xxx.js +``` + +若是本地预览就可使用(请根据路径自己修改) + +``` +/css/ccknbc.css +/js/ccknbc.js +``` + +接下来分别编辑css和js文件即可,当然你可以直接复制粘贴或者直接引用我的链接 + +**`css`** + +```css +@font-face { + font-family: 'sleek'; + src: url('https://cdn.jsdelivr.net/gh/lete114/CDN2/zaxiang/sleek.woff2'); +} + + +/*标题颜色修改*/ + +#page-header #site_title { + color: #8FBC8F; +} + +#page-header #site-name.blog_title { + color: #8FBC8F; +} + +/* 滚动条 */ + +::-webkit-scrollbar { + width: 10px; + height: 10px; +} + +::-webkit-scrollbar-thumb { + background-color: #8FBC8F; + background-image: -webkit-linear-gradient( 45deg, rgba(255, 255, 255, 0.4) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.4) 50%, rgba(255, 255, 255, 0.4) 75%, transparent 75%, transparent); + border-radius: 2em; +} + +::-webkit-scrollbar-corner { + background-color: transparent; +} + +::-moz-selection { + color: #fff; + background-color: #8FBC8F; +} + +#web_bg { + background: -webkit-linear-gradient( + 0deg, + rgba(247, 149, 51, 0.1) 0, + rgba(243, 112, 85, 0.1) 15%, + rgba(239, 78, 123, 0.1) 30%, + rgba(161, 102, 171, 0.1) 44%, + rgba(80, 115, 184, 0.1) 58%, + rgba(16, 152, 173, 0.1) 72%, + rgba(7, 179, 155, 0.1) 86%, + rgba(109, 186, 130, 0.1) 100% + ); + background: -moz-linear-gradient( + 0deg, + rgba(247, 149, 51, 0.1) 0, + rgba(243, 112, 85, 0.1) 15%, + rgba(239, 78, 123, 0.1) 30%, + rgba(161, 102, 171, 0.1) 44%, + rgba(80, 115, 184, 0.1) 58%, + rgba(16, 152, 173, 0.1) 72%, + rgba(7, 179, 155, 0.1) 86%, + rgba(109, 186, 130, 0.1) 100% + ); + background: -o-linear-gradient( + 0deg, + rgba(247, 149, 51, 0.1) 0, + rgba(243, 112, 85, 0.1) 15%, + rgba(239, 78, 123, 0.1) 30%, + rgba(161, 102, 171, 0.1) 44%, + rgba(80, 115, 184, 0.1) 58%, + rgba(16, 152, 173, 0.1) 72%, + rgba(7, 179, 155, 0.1) 86%, + rgba(109, 186, 130, 0.1) 100% + ); + background: -ms-linear-gradient( + 0deg, + rgba(247, 149, 51, 0.1) 0, + rgba(243, 112, 85, 0.1) 15%, + rgba(239, 78, 123, 0.1) 30%, + rgba(161, 102, 171, 0.1) 44%, + rgba(80, 115, 184, 0.1) 58%, + rgba(16, 152, 173, 0.1) 72%, + rgba(7, 179, 155, 0.1) 86%, + rgba(109, 186, 130, 0.1) 100% + ); + background: linear-gradient( + 90deg, + rgba(247, 149, 51, 0.1) 0, + rgba(243, 112, 85, 0.1) 15%, + rgba(239, 78, 123, 0.1) 30%, + rgba(161, 102, 171, 0.1) 44%, + rgba(80, 115, 184, 0.1) 58%, + rgba(16, 152, 173, 0.1) 72%, + rgba(7, 179, 155, 0.1) 86%, + rgba(109, 186, 130, 0.1) 100% + ); +} + + + +.layout_post>#post { + background: rgba(255,255,255,.0); +} + + +/* 鼠标图标 */ + +body { + cursor: url(https://cdn.jsdelivr.net/gh/lete114/CDN@1.0/Use/Jkll8I.png), auto; +} + + +/*a标签*/ + +a:hover { + cursor: url(https://cdn.jsdelivr.net/gh/lete114/CDN@1.0/Use/JkuClT.png), auto; +} + + +/*按钮*/ + +button:hover { + cursor: url(https://cdn.jsdelivr.net/gh/lete114/CDN@1.0/Use/JkuClT.png), auto; +} + + +/*i标签*/ + +i:hover { + cursor: url(https://cdn.jsdelivr.net/gh/lete114/CDN@1.0/Use/JkuClT.png), auto; +} + +/*页脚a标签*/ + +/* #footer-wrap a:hover { + text-decoration: none; + cursor: url(https://cdn.jsdelivr.net/gh/lete114/CDN@1.0/Use/JkuClT.png), auto; +} */ + + +/*分页器*/ + +#pagination .page-number:hover { + cursor: url(https://cdn.jsdelivr.net/gh/lete114/CDN@1.0/Use/JkuClT.png), auto; +} + + +/*头部的导航栏*/ + +#nav .site-page:hover { + cursor: url(https://cdn.jsdelivr.net/gh/lete114/CDN@1.0/Use/JkuClT.png), auto; +} + +/* a(链接)标签的默认颜色 */ + + +/* 宽度大于800小于9999执行 */ + + +/* @media only screen and (min-width: 800px) and (max-width: 9999px) { + + #article-container a { + color: #00c4b6; + display: inline-block; + position: relative; + } +} */ + + + +/* 打造效果渐变 */ + +@-webkit-keyframes Gradient { + 0% { + background-position: 0 50%; + } + 50% { + background-position: 100% 50%; + } + 100% { + background-position: 0 50%; + } +} + +@-moz-keyframes Gradient { + 0% { + background-position: 0 50%; + } + 50% { + background-position: 100% 50%; + } + 100% { + background-position: 0 50%; + } +} + +@keyframes Gradient { + 0% { + background-position: 0 50%; + } + 50% { + background-position: 100% 50%; + } + 100% { + background-position: 0 50%; + } +} + +#subtitle { + background: linear-gradient(-45deg, #ffecd2, #fcb69f, #84fab0, #8fd3f4,#fddb92,#d1fdff,#e4afcb,#7edbdc,#eea2a2,#7ac5d8); + background-size: 400% 400%; + -webkit-animation: Gradient 10s ease infinite; + -moz-animation: Gradient 10s ease infinite; + animation: Gradient 10s ease infinite; + -o-user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + border-top-left-radius: 10px; + border-top-right-radius: 10px; +} + +#subtitle:before { + background-color: rgba(0, 0, 0, 0); +} +``` + +**`js`** + +```js +// 设置页脚博主会动的心 +$(document).ready(function(e){ + $('.copyright').html('©2020 CC康纳百川'); +}) + +if(aidaori()){ + $("html").css({ + "filter":"gray !important", + "filter":"progid:DXImageTransform.Microsoft.BasicImage(grayscale=1)", + "filter":"grayscale(100%)", + "-webkit-filter":"grayscale(100%)", + "-moz-filter":"grayscale(100%)", + "-ms-filter":"grayscale(100%)", + "-o-filter":"grayscale(100%)" + }); +} +//在特定日期变灰 +function aidaori(){ + var aidaoriarr=new Array("0403","0404","0405","0406","0414","0512","0807","0909","1213"); + //2020年4月4日 新冠肺炎哀悼日,清明节 + //2010年4月14日,青海玉树地震 + //2008年5月12日,四川汶川地震 + //2010年8月7日,甘肃舟曲特大泥石流 + //1976年9月9日,毛泽东逝世 + //1937年12月13日,南京大屠杀 + var mydate = new Date(); + var str = "";// + mydate.getFullYear(); + var mm = mydate.getMonth()+1; + if(mydate.getMonth()>9){ + str += mm; + }else{ + str += "0" + mm; + } + if(mydate.getDate()>9){ + str += mydate.getDate(); + }else{ + str += "0" + mydate.getDate(); + } + if(aidaoriarr.indexOf(str)>-1){ + return 1; + }else{ + return 0; + } +} + +// 可爱的Title +var OriginTitle = document.title; +var titleTime; +document.addEventListener('visibilitychange', function() { + if (document.hidden) { + $('[rel="icon"]').attr('href', "https://cdn.jsdelivr.net/gh/CCKNBC/CDN/logo/ccknbc.png"); + document.title = '(つェ⊂) 我藏好了哦~~'; + clearTimeout(titleTime); + } else { + $('[rel="icon"]').attr('href', "https://cdn.jsdelivr.net/gh/CCKNBC/CDN/logo/favicon.svg"); + document.title = '(*´∇`*) 被你发现啦~~' + OriginTitle; + titleTime = setTimeout(function() { + document.title = OriginTitle; + }, 2000); + } +}); +``` + +更多类容可以百度,自己DIY,有想法当然要实现啊 + +--- + +## 未完待续... \ No newline at end of file diff --git "a/source/_posts/\346\212\200\346\234\257/Uptime\345\205\215\350\264\271\347\275\221\347\253\231\345\255\230\346\264\273\347\233\221\346\216\247.md" "b/source/_posts/\346\212\200\346\234\257/Uptime\345\205\215\350\264\271\347\275\221\347\253\231\345\255\230\346\264\273\347\233\221\346\216\247.md" new file mode 100644 index 0000000..3685b79 --- /dev/null +++ "b/source/_posts/\346\212\200\346\234\257/Uptime\345\205\215\350\264\271\347\275\221\347\253\231\345\255\230\346\264\273\347\233\221\346\216\247.md" @@ -0,0 +1,88 @@ +--- +title: Uptime免费网站存活监控 +comments: false +date: 2020-08-20 09:58:09 +updated: 2020-08-20 09:58:09 +tags: + - 网站存活监控 +categories: + - 工具 +top_img: https://cdn.jsdelivr.net/gh/laugh0608/CDN/img/20200820100301.png +cover: https://cdn.jsdelivr.net/gh/laugh0608/CDN/img/20200820100301.png +copyright_author: 大白萝卜 +copyright_author_href: https://dabailuobo.com +copyright_url: https://blog.dabailuobo.com/ba779920 +copyright_info: 来源于大白萝卜(CC康纳百川获授权转载) +id: 5 +author: 大白萝卜 +--- + +![](https://cdn.jsdelivr.net/gh/laugh0608/CDN/img/20200820100301.png) + +## 前言 + +对于静态托管网站来说,如果你放在不同的仓库,或者是托管服务商,那么有一个必要的网站存活监控是非常重要的,实时监控哪个仓库存活,哪个仓库无法访问,以便及时调整自己的线路。 + +UptimeRobot是一个免费提供网站存活监控的服务商,免费版本可以同时监控50个站点,最高频率可以达到5分钟一次,而且还可以自己生成公共页面以便访问,还可以绑定自定义域名。 + +## 正文 + +网站地址:https://uptimerobot.com/ + +注册什么的就不用说了吧 + +## 创建监视器 + +注册完成之后登录会直接进入控制台 + +![](https://cdn.jsdelivr.net/gh/laugh0608/CDN/img/20200820104637.png) + +创建新的监视器 + +![](https://cdn.jsdelivr.net/gh/laugh0608/CDN/img/20200820104721.png) + +选择你要监视的方式,`https` 是通过访问的形式,`ping` 就是ping你的地址,`port` 就是监视端口 + +![](https://cdn.jsdelivr.net/gh/laugh0608/CDN/img/20200820105159.jpg) + +这就创建好一个监视器啦 + +## 生成公共页面 + +我们要访问监视器总不能每次都登录吧,Uptime贴心的准备了可以生成公共页面,还可以绑定自定义域名哦 + +![](https://cdn.jsdelivr.net/gh/laugh0608/CDN/img/20200820105358.png) + +![](https://cdn.jsdelivr.net/gh/laugh0608/CDN/img/20200820105432.png) + +![](https://cdn.jsdelivr.net/gh/laugh0608/CDN/img/20200820105544.png) + +选择要显示的监视器,是全部显示还是只显示选中 + +![](https://cdn.jsdelivr.net/gh/laugh0608/CDN/img/20200820105833.png) + +创建完成之后就可以使用你的自定义域名来访问啦,或者使用默认域名 + +![](https://cdn.jsdelivr.net/gh/laugh0608/CDN/img/20200820105936.png) + +在这里进行访问 + +这里是我的例子:[大白萝卜の网站监控](https://status.dabailuobo.com/) + +## API + +如果你不喜欢他生成的页面,或者想要自己部署,那么你可以使用别人制作的主题,地址: + +- https://github.com/Flexiston/uptime-status +- https://github.com/zykjofficial/uptime-status + +两个一样,随便选一个 + +fork到自己仓库后,修改相关配置即可 + +![](https://cdn.jsdelivr.net/gh/laugh0608/CDN/img/20200820110242.png) + +三种APIkey自己按照需要任选其一生成即可,在配置文件中进行修改,之后自己部署完毕就OK啦 + +大佬的例子:[Flexiston 的网站状态](https://status.flexiston.com/) [卓越科技- 的网站状态](https://status.zykjofficial.top/) + diff --git "a/source/_posts/\346\212\200\346\234\257/\346\210\221\344\270\272\344\273\200\344\271\210\351\200\211\346\213\251\344\272\206Tidio\345\201\232\350\201\212\345\244\251\347\263\273\347\273\237.md" "b/source/_posts/\346\212\200\346\234\257/\346\210\221\344\270\272\344\273\200\344\271\210\351\200\211\346\213\251\344\272\206Tidio\345\201\232\350\201\212\345\244\251\347\263\273\347\273\237.md" new file mode 100644 index 0000000..4267891 --- /dev/null +++ "b/source/_posts/\346\212\200\346\234\257/\346\210\221\344\270\272\344\273\200\344\271\210\351\200\211\346\213\251\344\272\206Tidio\345\201\232\350\201\212\345\244\251\347\263\273\347\273\237.md" @@ -0,0 +1,72 @@ +--- +title: 我为什么选择了Tidio做聊天系统 +date: 2020-10-02 21:18:42 +tags: +- Live Chat +- 聊天 +id: 8 +sticky: 1 +categories: +- Live Chat +- 聊天 +cover: https://cdn.jsdelivr.net/gh/ccknbc-backup/photos/blog/2020-10-03~17:47:58.png +top_img: https://cdn.jsdelivr.net/gh/ccknbc-backup/photos/blog/2020-10-03~17:00:31.png +--- + +使用了很多聊天系统后,在这里做一个心得总结,虽然至今无人问津,但还是要坚持下去,有一天会有有缘人上门的 + +`以以下几个为例:Chatra`, `Tidio`, `Daovoice`, `Gitter`, `Crisp`可以说是各有长处,但我的想法是在免费的基础上获得更好的体验,可能这就是我最后选择了`Tidio`的原因` + +## Chatra + +适合中小企业级别,发展客户,推广商品之类的,界面只有英语,无法更改语言,对于不懂英语的人来说不是很友好,但都是些简单单词,就还好,免费版的话说实话功能是足够的,可以记录访客从哪个网页发起对话,但一旦访客发起对话,就自动记录了访客IP,并且需要高级版才能查看,虽然一般没什么用处,但对于骚扰信息还是OK的 + +## Crisp + +同样也是定位于服务企业,所有当网站实际上只有你一个人,它还是会发送我们有什么可以帮您的,标配预调查填写信息,自适应语言(这点真的很赞,~~虽然自定义程度太差,毕竟给你翻译就挺好的~~),实时全球访客地图,机器人等都是很实用的功能,可控制访客是否可以发送附件,总体上自定义程度ok,颜值也还在线,免费版确实也够用的 + +## Gitter + +创建聊天室或者社区,更适合程序员使用,不过issue他不香吗 + +## Daovoice + +国内服务商,微信通知绝对好评,相对比较简约,不过以上这些都带有邮件通知,所以不用担心漏掉消息啦,邮件通知还是比较好看的,然后可以向曾经的访客批量发送通知(好功能但是不推荐,应该把主动权交给用户,还不如webpush),它的定位也是企业级别 + +## Tidio + +下面进入正题 + +1. 虽然他的官网是只支持英文,但是小部件语言你可以添加几个并自行翻译(比如根据台湾地区语言习惯在地化一些繁体中文显得更亲切),这样一来自定义程度其实是很好的,然后你就可以获得和你现在看到的界面这样的效果 + +2. 小部件渐变色真是深得我心,颜值瞬间提升,你还可以根据不同设备设定或排除显示界面,不同设备有不同的位置大小,Sidebar也是极好的,但本站集成了按钮所以不能按照原来的显示,您可以自行尝试 + +3. 电子邮件通知footer自定义,也是一种推广 + +4. 插件方便营销,不过配合谷歌事件分析还是很赞的 + +5. 机器人引导,免费的够用了,很大的操作空间 + +6. 自定义快速回复,这个其他的也有配备 + +7. 主要是给了用户更多选择,告知用户我可能会记录你的`IP`等隐私信息,算是一种信任培养 + + ![官方小部件](https://cdn.jsdelivr.net/gh/ccknbc-backup/photos/blog/2020-10-03~14:51:35.png) + +
官方小部件概览
+ + ![离线状态](https://cdn.jsdelivr.net/gh/ccknbc-backup/photos/blog/2020-10-03~14:52:16.png) + +
离线状态
+ + ![在线状态](https://cdn.jsdelivr.net/gh/ccknbc-backup/photos/blog/2020-10-03~14:52:23.png) + +
在线状态
+ + ![QQ截图20201003145531](https://cdn.jsdelivr.net/gh/ccknbc-backup/photos/blog/2020-10-03~14:55:44.png) + +
中国台湾省好评
+ +![下载](https://cdn.jsdelivr.net/gh/ccknbc-backup/photos/blog/2020-10-03~15:02:00.png) + +
设置界面概览
\ No newline at end of file diff --git "a/source/_posts/\346\212\200\346\234\257/\347\256\200\345\215\225\346\265\217\350\247\210\345\231\250\346\233\264\346\226\260\346\216\250\351\200\201\347\232\204\345\256\236\347\216\260.md" "b/source/_posts/\346\212\200\346\234\257/\347\256\200\345\215\225\346\265\217\350\247\210\345\231\250\346\233\264\346\226\260\346\216\250\351\200\201\347\232\204\345\256\236\347\216\260.md" new file mode 100644 index 0000000..ccdf49c --- /dev/null +++ "b/source/_posts/\346\212\200\346\234\257/\347\256\200\345\215\225\346\265\217\350\247\210\345\231\250\346\233\264\346\226\260\346\216\250\351\200\201\347\232\204\345\256\236\347\216\260.md" @@ -0,0 +1,108 @@ +--- +title: 简单浏览器更新推送的实现 +date: 2020-08-18 20:39:36 +updated: 2020-08-18 20:39:36 +tags: [webpushr,web-push] +categories: [web-push,推送] +id: 4 +cover: https://cdn.jsdelivr.net/gh/CCKNBC/CDN/image/cover/200818webpushr.png +top_img: https://cdn.jsdelivr.net/gh/CCKNBC/CDN/image/cover/200818webpushr.png +author: CC +email: zekangsun@outlook.com +--- + +这篇文章主要想大家介绍如何使用`webpushr`及其对应的插件`hexo-web-push-notification`来帮我们节省时间完成自动推送更新 + + + +## 插件安装 + +``` +npm i hexo-web-push-notification --save +``` +## 注册webpushr账号 + +**[首先进入官网注册账号](https://app.webpushr.com/)** ,注意需要谷歌人机验证,请自备工具访问 +![注册账号](https://cdn.jsdelivr.net/gh/ccknbc-backup/photos/img/2020.09.11-18:11:29-https/s1.ax1x.com/2020/08/18.png) + +注册后登录就进入网站选择界面,不过新注册应该是直接进入添加新网站,老用户也可点击添加新网站,但实际上可以多网站共用,因此也就没没必要了 +![登陆成功](https://cdn.jsdelivr.net/gh/ccknbc-backup/photos/img/2020.09.11-18:12:51-https/s1.ax1x.com/2020/08/18.png) + +根据图中提示自行完善网站信息 +![添加网站](https://cdn.jsdelivr.net/gh/ccknbc-backup/photos/img/2020.09.11-18:12:43-https/s1.ax1x.com/2020/08/18.png) + +注册完毕后就可前往管理面板了 +![验证安装](https://cdn.jsdelivr.net/gh/ccknbc-backup/photos/img/2020.09.11-18:12:33-https/s1.ax1x.com/2020/08/18.png) + +这里截图划线部分为`Tracking code`,忘记保存的话可以回退步骤,或者待会儿在管理面板查看 +![安装组件](https://cdn.jsdelivr.net/gh/ccknbc-backup/photos/img/2020.09.11-18:12:23-https/s1.ax1x.com/2020/08/18.png) + +然后我们大致熟悉一下环境,更多信息可自行查看;为什么使用这个实际上因为 +1. 他能做到用户主动订阅浏览器更新通知,新文章或者公告等(后面再讲) +2. 它在60000订阅一下是完全免费的,而且很可靠,你不需要服务器或者其他复杂配置,所有一切均由webpushr完成 +3. 懒得使用网站统计,它这个可视化的数据也还是够用了,每周也会给你发一封邮件,说明你这周的订阅表现 +4. 它的功能强大,自定义程度高,界面比较友好 + +![面板预览](https://cdn.jsdelivr.net/gh/ccknbc-backup/photos/img/2020.09.11-18:12:00-https/s1.ax1x.com/2020/08/18.png) + +当然他还是有缺点的 +1. 浏览器清除本地数据后他会把你当作新用户发送欢迎通知,影响了数据统计 +2. 它的地图把宝岛台湾划在中国之外 +3. 有时候你会延后几天收到一条更新通知 + +## 获取几个必要配置 + +1. 点击`Setup` -> `Tracking code`(或`Integration` -> `Manual Integration`),如果你刚才保存了可以核对一下是否有误 +2. 点击`Integration` -> `REST API Keys`可以获取到`Key`和`Authentication Token` + +加下来我们进行配置,[按照开发者的README](https://github.com/glazec/hexo-web-push-notification),我们需要在HEXO根目录的配置文件`_config.yml`添加如下内容(记得替换为自己的) + +``` +webPushNotification: + webpushrKey: "your webpushr rest api key" + webpushrAuthToken: "your webpushr authorize token" + trackingCode: "AEGlpbdgvBCWXqXI6PtsUzobY7TLV9gwJU8bzMktrwfrSERg_xnLVbjpCw8x2GmFmi1ZcLTz0ni6OnX5MAwoM88" +``` + +关于安装部分就差不多结束了,下面我们回到webpushr网站对我们的网站进行相关配置 + +这部分就不截图了,大家即使不懂英语也能看明白知道setup, push的意思再配合网站的显示,还有操作变化都能明白(网页翻译真好用),比如选择订阅推送的样式内容(emoji也是特色个人觉得),订阅通知小铃铛,欢迎推送,这些在你刚才打开我网站的时候都已经体验过了(如果没有,检查一下弹窗是否被拦截,清楚浏览器数据后体验一下) + +API通知就是利用我们生成好的newpost.json本地与远端进行比较来进行更新文章推送,比较特色的就是定时自动推送,这个我们拿来做临时公告也是非常方便的 + +其他内容就请读者自定探索吧 + +## 如何完成文章更新推送 + +但说了这么多,触发推送的条件还没讲呢,而我们一般推送文章,大致使用如下格式即可 +``` +--- +title: Hexo使用Web Push Notification 浏览器通知推送 +tags: + - hexo + - 服务器推送技术 + - push notifications +categories: + - 开发 +comments: true +abbrlink: 98ae9e55 +date: 2020-02-26 10:00:00 +--- + +Web Push Notification 是怎么工作的?个人博客为什么要使用它?如何使用它? + + +``` +请注意一定要有预览内容,也就是`---`和``之间的内容 + +讲到这里我们就发现,我们可以通过是否写预览内容来自主控制是否向订阅者推送这篇文章更新,而不是所有文章都推送,这种主动方式是我觉得比较人性化的 + +点击 **[查看开发经历](https://www.inevitable.tech/posts/a1b574bb/) | [查看更多相关资讯](https://www.inevitable.tech/posts/98ae9e55/) | [特殊推送解决方案](https://www.inevitable.tech/posts/afd56cf2/) | [泛用推送解决方案](https://www.inevitable.tech/posts/a1b574bb/)** + +## 其他须知 + +你如果阅读了隐私,你会发现它可以收集用户的很多信息,比如IP,国家或地区,设配类型等等,这些你可以选择自行开启或关闭,因为有时候过度收集这些无用隐私也是没必要的;不过作为有垃圾评论或者恶意评论来说,这种记录也是一种帮助 + +当然要想让读者愿意订阅你的博客,你的确要在内容下下功夫,我相信只要你能持续输出有趣有用的内容,就不愁没有订阅者的,一起加油吧! + +这篇文章还有许多不足的地方,**如有错误,欢迎指正** \ No newline at end of file diff --git a/source/about/index.md b/source/about/index.md new file mode 100644 index 0000000..778706d --- /dev/null +++ b/source/about/index.md @@ -0,0 +1,8 @@ +--- +icon: icon-open-arm-line +date: 2020-06-21 21:28:54 +title: 关于我 +type: about +--- + +# **什么也没有** \ No newline at end of file diff --git a/source/categories/index.md b/source/categories/index.md new file mode 100644 index 0000000..a4caa33 --- /dev/null +++ b/source/categories/index.md @@ -0,0 +1,4 @@ +--- +comments: false +type: categories +--- diff --git a/source/comments/index.md b/source/comments/index.md new file mode 100644 index 0000000..505e799 --- /dev/null +++ b/source/comments/index.md @@ -0,0 +1,12 @@ +--- +title: 留言板 +comments: false +type: comments +--- + +--- + + + + + diff --git a/source/google7787a6577761be93.html b/source/google7787a6577761be93.html new file mode 100644 index 0000000..93b508b --- /dev/null +++ b/source/google7787a6577761be93.html @@ -0,0 +1 @@ +google-site-verification: google7787a6577761be93.html \ No newline at end of file diff --git a/source/links/index.md b/source/links/index.md new file mode 100644 index 0000000..87c6423 --- /dev/null +++ b/source/links/index.md @@ -0,0 +1,28 @@ +--- +layout: links +title: CC的小伙伴们 +keywords: 链接 +description: 友情链接 +comments: true +links: + - url: 'https://stevestudio-yi.github.io/' + avatar: 'https://s1.ax1x.com/2020/06/26/NDbAu4.jpg' + name: Steve's Page + blog: 祎的小站 + desc: Think Differently.非同凡想 + color: '#0078e7' + email: apple20020325@163.com + - url: 'https://y0znz6.coding-pages.com' + avatar: 'https://t1.picb.cc/uploads/2020/06/05/tw6IM1.png' + name: 备用网站 + blog: 备用网站 + desc: 没有广告 + color: '#3CB371' + email: null +placeholder: 还没想好说些什么 +tip: 友链加载中~如失败请刷新重试~ +date: 2020-07-02 09:19:47 +--- +--- + +> - [x] **申请友链请使用Valine评论系统** diff --git a/source/robots.txt b/source/robots.txt new file mode 100644 index 0000000..ee2e51b --- /dev/null +++ b/source/robots.txt @@ -0,0 +1,42 @@ +User-agent: Baiduspider +Disallow: +User-agent: Sosospider +Disallow: +User-agent: sogou spider +Disallow: +User-agent: YodaoBot +Disallow: +User-agent: Googlebot +Disallow: +User-agent: Bingbot +Disallow: +User-agent: Slurp +Disallow: +User-agent: Teoma +Disallow: +User-agent: ia_archiver +Disallow: +User-agent: twiceler +Disallow: +User-agent: MSNBot +Disallow: +User-agent: Scrubby +Disallow: +User-agent: Robozilla +Disallow: +User-agent: Gigabot +Disallow: +User-agent: googlebot-image +Disallow: +User-agent: googlebot-mobile +Disallow: +User-agent: yahoo-mmcrawler +Disallow: +User-agent: yahoo-blogs/v3.9 +Disallow: +User-agent: psbot +Disallow: +User-agent: * +Disallow: +Sitemap: https://ccknbc.github.io/yun/sitemap.xml +Sitemap: https://ccknbc.github.io/yun/baidusitemap.xml diff --git a/source/tags/index.md b/source/tags/index.md new file mode 100644 index 0000000..c39e10d --- /dev/null +++ b/source/tags/index.md @@ -0,0 +1,4 @@ +--- +comments: false +type: tags +--- diff --git a/themes/yun/.gitignore b/themes/yun/.gitignore new file mode 100644 index 0000000..e3fe698 --- /dev/null +++ b/themes/yun/.gitignore @@ -0,0 +1,5 @@ +# custom +.DS_Store +node_modules/ +yarn.lock +dist/ diff --git a/themes/yun/_config.yml b/themes/yun/_config.yml new file mode 100644 index 0000000..68f0df8 --- /dev/null +++ b/themes/yun/_config.yml @@ -0,0 +1,718 @@ +# --------------- +# mode: light | dark | auto +mode: auto + +# Theme color for customize +# Notice: color value must in double quotes: "#000000" +colors: + primary: "#0078E7" + # primary: "#6200ee" + bg: "#f5f5f5" + selection_bg: "#8e71c1" + tag_start_color: "#999999" + tag_end_color: "#0078E7" + dark: + block: "#1b1f2e" + # block: "#17202A" + +# Favicon +# --------------- +favicon: /yun.svg + +# --------------------------------------------------------------- +# Sidebar Settings +# --------------------------------------------------------------- + +# Posts / Categories / Tags in sidebar. +sidebar: + src: /js/sidebar.js + bg_image: https://cdn.jsdelivr.net/gh/YunYouJun/cdn@master/img/bg/alpha-stars-timing-1.webp + # dark_bg_image: https://cdn.jsdelivr.net/gh/YunYouJun/cdn@master/img/bg/dark-alpha-stars-timing-1.webp + bg_position: bottom 1rem center + tagcloud: + enable: false + amount: 20 + +toc: + list_number: true + max_depth: 6 + min_depth: 1 + # placeholder: 很遗憾,咱没写啥目录 + collapse: true + +# Social Links. +social: + - name: RSS + # set rss in your root config + # https://github.com/hexojs/hexo-generator-feed + link: /atom.xml # config.feed.path + icon: icon-rss-line + color: orange + - name: QQ 群 + # https://isux.tencent.com/wp-content/uploads/2016/05/20160512101222609.pdf + link: https://shang.qq.com/wpa/qunwpa?idkey=c929e704022704d8cced9ec355d44a3fa7ad34aea12cef1de03d75d3d7d5b059 + icon: icon-qq-line + color: "#12B7F5" + - name: GitHub + link: https://github.com/YunYouJun + icon: icon-github-line + color: "#6e5494" + - name: 微博 + link: https://weibo.com/jizhideyunyoujun + icon: icon-weibo-line + color: "#E6162D" + - name: 豆瓣 + link: https://www.douban.com/people/yunyoujun/ + icon: icon-douban-line + color: "#007722" + - name: 网易云音乐 + link: https://music.163.com/#/user/home?id=247102977 + icon: icon-netease-cloud-music-line + color: "#C20C0C" + - name: 知乎 + link: https://www.zhihu.com/people/yunyoujun/ + icon: icon-zhihu-line + color: "#0084FF" + - name: 哔哩哔哩 + link: https://space.bilibili.com/1579790 + icon: icon-bilibili-line + color: "#FF8EB3" + # - name: POPI + # link: https://www.popiask.cn/elpsycn + # icon: icon-questionnaire-line + # color: "#525252" + # - name: 微信公众号 + # link: https://cdn.jsdelivr.net/gh/YunYouJun/cdn/img/about/white-qrcode-and-search.jpg + # icon: icon-wechat-2-line + # color: "#1AAD19" + - name: Twitter + link: https://twitter.com/YunYouJun + icon: icon-twitter-line + color: "#1da1f2" + # - name: Telegram + # link: https://t.me/YunYouJun + # icon: icon-telegram-line + # color: "#0088CC" + - name: Telegram Channel + link: https://t.me/elpsycn + # icon: icon-telegram-fill + icon: icon-telegram-line + color: "#0088CC" + - name: E-Mail + link: mailto:me@yunyoujun.cn + icon: icon-mail-line + color: "#8E71C1" + - name: Travelling + link: https://travellings.now.sh/ + icon: icon-send-plane-2-line + color: black + +codeblock: + prismjs: + light: default + dark: tomorrow + +# Extra links +pages: + - name: 我的小伙伴们 + url: /links/ + icon: icon-genderless-line + color: dodgerblue + +# pages +# ------- +# friend +anonymous_image: https://cdn.jsdelivr.net/gh/YunYouJun/cdn/img/avatar/none.jpg + +albums: + enable: false + icon: icon-gallery-line + src: /js/gallery-decrypt.js + +girls: + enable: false + +# Sidebar Avatar +avatar: + enable: true + url: /Yun.png + # If true, the avatar would be dispalyed in circle. + rounded: true + # The value of opacity should be choose from 0 to 1 to set the opacity of the avatar. + opacity: 1 + mickey_mouse: true + status: + enable: true + emoji: 😊 + message: 永远相信美好的事情即将发生 + +# main menu navigation +menu: + home: + path: / + icon: icon-home-4-line + list: + - type: archives + path: /archives/ + icon: icon-archive-line + - type: categories + path: /categories/ + icon: icon-folder-2-line + - type: tags + path: /tags/ + icon: icon-price-tag-3-line + custom: + title: 文档 + path: https://yun.yunyoujun.cn + icon: icon-settings-line + +# archive +archive: + last_word: 没有更多的黑历史了_(:з」∠)_ + +wordcloud: + enable: true + height: 350 + +# You can set color for every tag or category. +tags: + Vue: "#4fc08d" + Hexo: "#0E83CD" + CSS: "#5298d1" + Node.js: "#026E00" + Git: "#F14E32" + React: "#61dafb" + Python: "#3776ab" + PHP: "#8892BF" + VS Code: "#0066B8" + JavaScript: "#F4DF4F" + TypeScript: "#317AC6" + Laravel: "#F4645F" + +categories: + 笔记: dimgray + +# post type +types: + link: + color: blue + icon: icon-external-link-line + bilibili: + color: "#FF8EB3" + icon: icon-bilibili-line + douban: + color: "#007722" + icon: icon-douban-line + github: + color: black + icon: icon-github-line + netease-cloud-music: + color: "#C10D0C" + icon: icon-netease-cloud-music-line + notion: + color: black + icon: icon-notion + twitter: + color: "#1da1f2" + icon: icon-twitter-line + wechat: + color: "#1AAD19" + icon: icon-wechat-2-line + weibo: + color: "#E6162D" + icon: icon-weibo-line + yuque: + color: "#25b864" + icon: icon-yuque + zhihu: + color: "#0084FF" + icon: icon-zhihu-line + +# post_card +post_card: + opacity: 0.9 + +# link +# ------- +preload: + style: + - /css/hexo-theme-yun.css + script: + - /js/utils.js + - /js/hexo-theme-yun.js + +prefetch: + script: + - /js/sidebar.js + +dns_prefetch: + # - https://xxx + +# do more(TCP handshake...) than dns-fetch +preconnect: + - https://cdn.jsdelivr.net + +# img loading="lazy" +lazyload: + enable: true + +# pjax +pjax: + enable: false + src: /js/pjax.js + +# stylesheets loaded in the +css: + - /css/hexo-theme-yun.css + +# scripts loaded in the end of the body +js: + - /js/utils.js + - /js/hexo-theme-yun.js + +# custom your assets in head +head: + css: + js: + base: + async: + defer: + +# cdn for third-party library (always include) +cdn: + pre: "" + # pre: https://cdn.jsdelivr.net/gh/YunYouJun/yunyoujun.github.io + css: + yun-markdown-css: https://cdn.jsdelivr.net/npm/star-markdown-css@0.1.20/dist/yun/yun-markdown.min.css + # github-markdown-css: https://cdn.jsdelivr.net/npm/github-markdown-css@4.0.0/github-markdown.css + js: + base: + async: + iconfont: //at.alicdn.com/t/font_1140697_stqaphw3j4.js + defer: + +# cdn for third-party library (alternative include) +# please see in _vendors.yml +vendors: + +# UI +banner: + enable: true + title: 云游君的小站 + src: /js/ui/banner.js + border: true + cloud: + enable: true + color: "white" + go_down: + enable: true + icon: icon-arrow-down-s-line + +# You can import the font you want in the head. +font: + cdn: + enable: true + lib: + - https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@900&display=swap + serif: + family: "'Songti SC', 'Noto Serif SC', STZhongsong, STKaiti, KaiTi, Roboto, serif" + weight: 900 + sans_serif: + family: "'PingFang SC', 'Microsoft YaHei', Roboto, Arial, sans-serif" + weight: 400 + monospace: + family: "'Source Code Pro', 'Courier New', Courier, Consolas, Monaco, monospace" + +# custom your color in fireworks +fireworks: + enable: true + src: /js/ui/fireworks.js + colors: + - "102, 167, 221" + - "62, 131, 225" + - "33, 78, 194" + # - '3, 28, 95' + # - '0, 8, 55' + +# https://github.com/qrohlf/trianglify +trianglify: + enable: false + cell_size: 75 + width: 800 + height: 600 + # https://github.com/qrohlf/trianglify/blob/master/src/utils/colorbrewer.js + palette: '["YlGnBu", "GnBu", "Purples", "Blues"]' + opacity: 0.5 + +cursor: + enable: true + default: https://cdn.jsdelivr.net/gh/YunYouJun/cdn/css/md-cursors/pointer.cur + pointer: https://cdn.jsdelivr.net/gh/YunYouJun/cdn/css/md-cursors/link.cur + text: https://cdn.jsdelivr.net/gh/YunYouJun/cdn/css/md-cursors/text.cur + +smoothScroll: true + +# You can see effect in https://scrollrevealjs.org/ +scrollreveal: + enable: true + targets: + - .post-card + - .post-content img + +bg_image: + enable: true + url: https://cdn.jsdelivr.net/gh/YunYouJun/cdn/img/bg/stars-timing-0-blur-30px.jpg # recomend image related to your mode + dark: https://cdn.jsdelivr.net/gh/YunYouJun/cdn/img/bg/galaxy.jpg + # blur: 30px + opacity: 1 + +# Reward (Donate) +# If enable true, reward would be displayed in every posts and pages by default. +# You can show or hide reward in a specific page throuth `reward: true | false` in Front Matter. +reward: + enable: false + icon: icon-hand-coin-line + comment: I'm so cute. Please give me money. + # url: https://github.com/YunYouJun/yunyoujun.github.io/issues/96 + methods: + - name: 支付宝 + path: https://cdn.jsdelivr.net/gh/YunYouJun/cdn/img/donate/alipay-qrcode.jpg + color: "#00A3EE" + icon: icon-alipay-line + - name: QQ 支付 + path: https://cdn.jsdelivr.net/gh/YunYouJun/cdn/img/donate/qqpay-qrcode.png + color: "#12B7F5" + icon: icon-qq-line + - name: 微信支付 + path: https://cdn.jsdelivr.net/gh/YunYouJun/cdn/img/donate/wechatpay-qrcode.jpg + color: "#2DC100" + icon: icon-wechat-pay-line + # - name: paypal + # link: https://paypal.com + # path: https://www.paypalobjects.com/images/shared/paypal-logo-129x32.svg + # color: "#2D70B5" + # icon: icon-paypal-line + +# Creative Commons 4.0 International License. +# https://creativecommons.org/licenses/ +# Available values of license: by | by-nc | by-nc-nd | by-nc-sa | by-nd | by-sa | zero +# You can set a language value if you prefer a translated version of CC license. +# CC licenses are available in 39 languages, where you can find the specific and correct abbreviation you need. +# Valid values of language: deed.zh, deed.en, deed.ja, etc. +creative_commons: + license: by-nc-sa + language: deed.zh + post: true + clipboard: true + +# AddThis Share, See: https://www.addthis.com +# Go to https://www.addthis.com/dashboard to customize your tools. +# add_this_id: + +# Post edit +# Dependencies: https://github.com/hexojs/hexo-deployer-git +post_edit: + enable: true + url: https://github.com/ccknbc-actions/blog-yun/blob/master/source/ # Link for view source. + +# Footer Settings +# --------------- +footer: + since: 2020 + + # Icon between year and copyright info. + icon: + # `heart` is recommended with animation in red (#ff0000). + name: icon-cloud-line + # If you want to animate the icon, set it to true. + animated: true + # Change the color of icon, using Hex Code. + color: "#0078E7" + + powered: + # Hexo link (Powered by Hexo). + enable: true + + # Beian icp information for Chinese users. In China, every legal website should have a beian icp in website footer. + # http://www.beian.miit.gov.cn + beian: + enable: false + # icp: 苏ICP备xxxxxxxx号 + + live_time: + enable: true + prefix: 本博客已萌萌哒地运行 + suffix: (●'◡'●) + start_time: "2020-06-04T00:00:00" + + # Any custom text can be defined here. + # custom_text: Hosted by Coding Pages + +# Post meta display settings +post_meta: + item_text: true + created_at: true + updated_at: true + categories: true + tags: true + +# notice pin board +notice: + enable: false + content: Thanks for watching my blog. + +# third party +# ---------------- + +# say something +# https://say.elpsy.cn +say: + enable: true + # api: https://say.elpsy.cn/sentences.json + # /data/sentences.json + api: https://cdn.jsdelivr.net/gh/ElpsyCN/say@gh-pages/sentences.json + # src is the script + src: /js/say.js + # https://developer.hitokoto.cn/sentence/ + hitokoto: + enable: true + api: https://v1.hitokoto.cn + # api: https://v1.hitokoto.cn?c=a&c=b&c=c&c=d&c=k + +# you can new JSON file in your blog root folder +# example: source/data/sentences.json +# then set say.api: /data/sentences.json +# Example: https://say.elpsy.cn/sentences.json + +# Comments +# ------- +comment: + enable: true + icon: icon-chat-3-line + tips: + - 点击按钮跳转 GitHub Issues 评论 + - 若没有本文 Issue,您可以使用 Comment 模版新建 + +# GitHub Issues Link Button +# https://help.github.com/en/github/searching-for-information-on-github/searching-issues-and-pull-requests +github_issues: + enable: true + username: ccknbc-backup + repository: comments + filters: is:issue + +# Valine +# You can get your appid and appkey from https://leancloud.cn +# More info available at https://valine.js.org +# extend: https://github.com/DesertsP/Valine-Admin +valine: + enable: false + appId: # your leancloud application appid + appKey: # your leancloud application appkey + placeholder: Just go go # comment box placeholder + avatar: # gravatar style + # meta: + # - nick + # - mail + # - link + pageSize: 10 # pagination size + # lang: zh-CN + visitor: false + highlight: true + recordIP: false + # serverURLs: + # Emoji See: https://valine.js.org/emoji.html + # emojiCDN: //i0.hdslb.com/bfs/emote/ + # emojiMaps: + # tv_doge: 6ea59c827c414b4a2955fe79e0f6fd3dcd515e24.png + # more... + enableQQ: true + # requiredFields: + # - nick + # - mail + +# MiniValine +# You can get your appid and appkey from https://leancloud.cn +# More info available at https://github.com/MiniValine/MiniValine +minivaline: + enable: false + appId: # Your leancloud application appId + appKey: # Your leancloud application appKey + # mode: DesertsP # DesertsP or xCss # xCss Style mode needs to import fontawesome@5 https://github.com/YunYouJun/hexo-theme-yun/blob/dev/docs/guide/config.md#其他图标 + # placeholder: Write a Comment # Comment box placeholder + # math: true # Support MathJax. + # md: true # Support Markdown. + # NoRecordIP: false # Do not record commenter IP. + # visitor: true # Article reading statistics. + # maxNest: 6 # Sub-comment maximum nesting depth. + # pageSize: 6 # Pagination size. + # adminEmailMd5: de8a7aa53d07e6b6bceb45c64027763d # The MD5 of Admin Email to show Admin Flag.[Just Only DesertsP Style mode] 示例: Admin 邮箱的小写 MD5 + # tagMeta: # The String Array of Words to show Flag.[Just Only xCss Style mode] + # - 管理员 # 示例: master tag + # - 小伙伴 # 示例: friends tag + # - 访客 # 示例: 访客 tag + # master: # The MD5 String Array of master Email to show master Flag.[Just Only xCss Style mode] + # - de8a7aa53d07e6b6bceb45c64027763d # 示例: master 邮箱的小写 MD5 + # friends: # The MD5 String Array of friends Email to show friends Flag.[Just Only xCss Style mode] + # - b5bd5d836c7a0091aa8473e79ed4c25e # 示例: friend 邮箱的小写 MD5 + # MiniValine's display language depends on user's browser or system environment + # If you want everyone visiting your site to see a uniform language, you can set a force language value + # Available values: en | zh-CN | (and many more) + # More i18n info: https://github.com/MiniValine/minivaline-i18n + # lang: + # Expression Url. + # https://github.com/MiniValine/MiniValine/blob/master/.github/FAQ.md#how-to-customize-emoticons + # emoticonUrl: + # - https://cdn.jsdelivr.net/npm/alus@latest + # - https://cdn.jsdelivr.net/gh/MiniValine/qq@latest + # - https://cdn.jsdelivr.net/gh/MiniValine/Bilibilis@latest + # - https://cdn.jsdelivr.net/gh/MiniValine/tieba@latest + # - https://cdn.jsdelivr.net/gh/MiniValine/twemoji@latest + # - https://cdn.jsdelivr.net/gh/MiniValine/weibo@latest + +# http://disqus.com/ +disqus: + enable: false + shortname: yunyoujun + count: false + +# https://github.com/SukkaW/DisqusJS +disqusjs: + enable: true + shortname: ccknbc + count: true + apikey: Z6F8Gc9KvW2YCh6p11VRVNvMBYfdaKR3IMRFLVmoYaIQJ2ysp38fZ9tivPdgyBWu + +# https://livere.com/ +livere: + enable: false + uid: + +# https://github.com/utterance/utterances +utterances: + enable: true + repo: ccknbc-backup/comments + issue-term: title + label: 💬comment + theme: github-light + +# Show Views / Visitors of the website / page with busuanzi. +# Get more information on http://ibruce.info/2015/04/04/busuanzi +busuanzi: + enable: true + site_uv: true + site_uv_icon: icon-user-line + site_pv: true + site_pv_icon: icon-eye-line + page_pv: true + page_pv_icon: icon-eye-line + +# Post wordcount +# https://github.com/willin/hexo-wordcount +wordcount: + enable: true + count: true + time: true + +# search +search: + bg_image: https://cdn.jsdelivr.net/gh/YunYouJun/cdn/img/bg/stars-timing-0-blur-30px.jpg + dark_bg_image: https://cdn.jsdelivr.net/gh/YunYouJun/cdn/img/bg/mountain-blur-30px.jpg + # placeholder: 想要搜些什么? + +engine_search: + enable: false + href: "https://www.google.com/search?q=site:" + # href: "https://www.baidu.com/s?wd=site:" + # href: "https://www.bing.com/search?q=site:" + domain: yunyoujun.cn + +# https://github.com/wzpan/hexo-generator-search +local_search: + enable: true + src: /js/search/local-search.js + +# https://github.com/oncletom/hexo-algolia +algolia_search: + enable: false + src: /js/search/algolia-search.js + hits: + per_page: 8 # the number of search results per page + +# Ads +# --------------- +# Google Adsense +google_adsense: + enable: false + client: ca-pub-2245427233262012 + +# Analysis +# --------------- +google_analytics: + enable: false + id: UA-XXXXXXXXX-X + +# Google Tagmanager +google_tagmanager: + enable: false + id: + +# That is it only render those page which has `katex: true` in Front-matter. +# math fomula +# https://katex.org/ +katex: + copy_tex: true + global: false + +# plugins +aplayer: + global: false + meting: true + # https://github.com/metowolf/MetingJS/tree/v1.2#option + widget: + enable: false + autoplay: false + # theme: "#2980b9" + loop: all + order: list + preload: auto + volume: 0.7 + mutex: true + lrcType: 0 + listFolded: false + listMaxHeight: 340px + audio: + - name: 星宿计时 + artist: 杉田朗/洛天依 + url: https://cdn.jsdelivr.net/gh/YunYouJun/cdn/audio/star-timer.mp3 + cover: https://cdn.jsdelivr.net/gh/YunYouJun/cdn/img/bg/stars-timing-0.jpg + meting: + enable: true + id: 308168565 + server: netease + type: playlist + +# special +mourn: + enable: true + days: + - "4-4" + - "9-18" + +# SEO +# https://ziyuan.baidu.com/linksubmit/index +baidu_push: true + +# custom (You can use variables.) +custom: + style: # source/_data/style/* + +# slide +slide: + separator: --- + separator_vertical: "~~" + data_separator_notes: "^Note:" + theme: white + config: + history: true + mouseWheel: false diff --git a/themes/yun/_vendors.yml b/themes/yun/_vendors.yml new file mode 100644 index 0000000..d7a6d32 --- /dev/null +++ b/themes/yun/_vendors.yml @@ -0,0 +1,50 @@ +# cdn for third-party library (alternative include) +algolia_search: https://cdn.jsdelivr.net/npm/algoliasearch@4/dist/algoliasearch-lite.umd.js +instant_search: https://cdn.jsdelivr.net/npm/instantsearch.js@4/dist/instantsearch.production.min.js +anime: https://cdn.jsdelivr.net/npm/animejs@latest/anime.min.js +valine_js: https://cdn.jsdelivr.net/npm/valine@latest/dist/Valine.min.js +minivaline_js: https://cdn.jsdelivr.net/npm/minivaline/dist/MiniValine.min.js +scrollreveal: https://cdn.jsdelivr.net/npm/scrollreveal/dist/scrollreveal.min.js +katex: + js: https://cdn.jsdelivr.net/npm/katex@latest/dist/katex.min.js + css: https://cdn.jsdelivr.net/npm/katex@latest/dist/katex.min.css + auto_render: https://cdn.jsdelivr.net/npm/katex@latest/dist/contrib/auto-render.min.js + copy_tex: + css: https://cdn.jsdelivr.net/npm/katex@latest/dist/contrib/copy-tex.min.css + js: https://cdn.jsdelivr.net/npm/katex@latest/dist/contrib/copy-tex.min.js +aplayer: + css: https://cdn.jsdelivr.net/npm/aplayer@latest/dist/APlayer.min.css + js: https://cdn.jsdelivr.net/npm/aplayer@latest/dist/APlayer.min.js + meting: https://cdn.jsdelivr.net/npm/meting@1/dist/Meting.min.js +trianglify: https://cdn.jsdelivr.net/npm/trianglify@4/dist/trianglify.bundle.js +lightgallery: + css: https://cdn.jsdelivr.net/npm/lightgallery.js@latest/dist/css/lightgallery.min.css + js: https://cdn.jsdelivr.net/npm/lightgallery.js@latest/dist/js/lightgallery.min.js +pjax: https://cdn.jsdelivr.net/npm/pjax@latest/pjax.min.js +crypto_js: + all: https://cdn.jsdelivr.net/npm/crypto-js@latest/crypto-js.js +wordcloud: https://cdn.jsdelivr.net/npm/wordcloud@1.1.1/src/wordcloud2.js +# https://github.com/SukkaW/DisqusJS +disqusjs: + css: https://cdn.jsdelivr.net/npm/disqusjs@latest/dist/disqusjs.css + js: https://cdn.jsdelivr.net/npm/disqusjs@latest/dist/disqus.js +revealjs: + css: https://cdn.jsdelivr.net/npm/reveal.js/dist/reveal.css + js: https://cdn.jsdelivr.net/npm/reveal.js/dist/reveal.js + plugin: + markdown: https://cdn.jsdelivr.net/npm/reveal.js/plugin/markdown/markdown.js + notes: https://cdn.jsdelivr.net/npm/reveal.js/plugin/notes/notes.js + highlight: + js: https://cdn.jsdelivr.net/npm/reveal.js/plugin/highlight/highlight.js + monokai: https://cdn.jsdelivr.net/npm/reveal.js@4.0.2/plugin/highlight/monokai.css +prismjs: + themes: + default: https://cdn.jsdelivr.net/npm/prismjs@1.20.0/themes/prism.css + coy: https://cdn.jsdelivr.net/npm/prismjs@1.20.0/themes/prism-coy.css + dark: https://cdn.jsdelivr.net/npm/prismjs@1.20.0/themes/prism-dark.css + funky: https://cdn.jsdelivr.net/npm/prismjs@1.20.0/themes/prism-funky.css + okaidia: https://cdn.jsdelivr.net/npm/prismjs@1.20.0/themes/prism-okaidia.css + solarizedlight: https://cdn.jsdelivr.net/npm/prismjs@1.20.0/themes/prism-solarizedlight.css + tomorrow: https://cdn.jsdelivr.net/npm/prismjs@1.20.0/themes/prism-tomorrow.css + twilight: https://cdn.jsdelivr.net/npm/prismjs@1.20.0/themes/prism-twilight.css +vue: https://cdn.jsdelivr.net/npm/vue@2.6.11 diff --git a/themes/yun/docs/.vuepress/assets/icons.json b/themes/yun/docs/.vuepress/assets/icons.json new file mode 100644 index 0000000..342e016 --- /dev/null +++ b/themes/yun/docs/.vuepress/assets/icons.json @@ -0,0 +1,83 @@ +{ + "arias": [ + "arrow-up-s-line", + "arrow-down-s-line", + "arrow-left-s-line", + "arrow-right-s-line", + "arrow-up-line", + "arrow-left-line", + "arrow-right-line", + "arrow-go-back-line", + "chat-3-line", + "close-line", + "contrast-2-line", + "edit-line", + "emotion-unhappy-line", + "external-link-line", + "history-line", + "information-line", + "menu-line", + "more-line", + "questionnaire-line", + "search-line", + "settings-line", + "share-line" + ], + "objects": [ + "archive-line", + "book-2-line", + "calendar-2-line", + "calendar-line", + "clipboard-line", + "cloud-line", + "disc-line", + "eye-line", + "file-word-line", + "fingerprint-line", + "folder-2-line", + "folder-line", + "gallery-line", + "hand-coin-line", + "heart-line", + "home-4-line", + "list-ordered", + "mail-line", + "money-cny-circle-line", + "open-arm-line", + "passport-line", + "price-tag-3-line", + "pushpin-line", + "send-plane-2-line", + "user-line", + "calendar-line", + "time-line", + "timer-line" + ], + "logos": [ + "alipay-line", + "bilibili-line", + "douban-line", + "github-line", + "netease-cloud-music-line", + "notion", + "paypal-line", + "qq-line", + "rss-line", + "telegram-fill", + "telegram-line", + "twitter-line", + "wechat-2-line", + "wechat-pay-line", + "weibo-line", + "yuque", + "zhihu-line", + "genderless-line", + "men-line", + "women-line", + "creative-commons-by-line", + "creative-commons-nc-line", + "creative-commons-nd-line", + "creative-commons-sa-line", + "creative-commons-zero-line" + ] +} diff --git a/themes/yun/docs/.vuepress/components/DisplayIcon.vue b/themes/yun/docs/.vuepress/components/DisplayIcon.vue new file mode 100644 index 0000000..8c78017 --- /dev/null +++ b/themes/yun/docs/.vuepress/components/DisplayIcon.vue @@ -0,0 +1,66 @@ + + + + + diff --git a/themes/yun/docs/.vuepress/config.js b/themes/yun/docs/.vuepress/config.js new file mode 100644 index 0000000..f853fb6 --- /dev/null +++ b/themes/yun/docs/.vuepress/config.js @@ -0,0 +1,129 @@ +module.exports = { + head: [ + ["link", { rel: "icon", href: "/yun.svg" }], + ["link", { rel: "manifest", href: "/manifest.json" }], + ["meta", { name: "theme-color", content: "#6200ee" }], + ["meta", { name: "apple-mobile-web-app-capable", content: "yes" }], + [ + "meta", + { name: "apple-mobile-web-app-status-bar-style", content: "#6200ee" }, + ], + ["link", { rel: "apple-touch-icon", href: "/logo.png" }], + [ + "link", + { + rel: "mask-icon", + href: "/logo.png", + color: "#6200ee", + }, + ], + [ + "meta", + { + name: "msapplication-TileImage", + content: "/logo.png", + }, + ], + ["meta", { name: "msapplication-TileColor", content: "#6200ee" }], + [ + "script", + { + async: true, + src: "//at.alicdn.com/t/font_1140697_stqaphw3j4.js", + }, + ], + ], + title: "Hexo-Theme-Yun", + locales: { + "/": { + lang: "zh-CN", + description: "A powerful & simple & fast theme for Hexo.", + }, + "/en/": { + lang: "en-US", + description: "A powerful & simple & fast theme for Hexo.", + }, + }, + themeConfig: { + logo: "/yun.svg", + nextLinks: true, + prevLinks: true, + repo: "YunYouJun/hexo-theme-yun", + docsDir: "docs", + editLinks: true, + smoothScroll: true, + sidebarDepth: 2, + locales: { + "/": { + label: "简体中文", + editLinkText: "在 GitHub 上编辑此页", + lastUpdated: "上次更新", + editLinkText: "帮助改善此页面!(  ̄□ ̄)/", + nav: [ + { text: "使用指南", link: "/guide/" }, + { text: "示例站点", link: "/demo.html" }, + { text: "赞助名单", link: "https://sponsors.yunyoujun.cn" }, + ], + sidebar: { + "/": [ + "about.html", + "guide/", + "guide/config", + "guide/page", + "guide/third-party-support", + "guide/additional-package-support", + "guide/icon", + "guide/faq", + "guide/migrate", + ], + }, + }, + "/en/": { + label: "English", + lastUpdated: "Last Updated", + nav: [ + { text: "Guide", link: "/guide/" }, + { text: "Demo", link: "/demo.html" }, + { text: "Sponsor", link: "https://sponsors.yunyoujun.cn" }, + ], + sidebar: { + "/en/": [ + "about.html", + "guide/", + "guide/config", + "guide/page", + "guide/third-party-support", + "guide/additional-package-support", + "guide/icon", + "guide/faq", + ], + }, + }, + }, + }, + plugins: [ + "@vuepress/back-to-top", + [ + "@vuepress/google-analytics", + { + ga: "UA-121354150-9", + }, + ], + [ + "@vuepress/pwa", + { + serviceWorker: true, + updatePopup: { + "/": { + message: "文档更新啦~", + buttonText: "快点我刷新!", + }, + "/en/": { + message: "Documentation Updated~", + buttonText: "Refresh Me!", + }, + }, + }, + ], + ], +}; diff --git a/themes/yun/docs/.vuepress/styles/index.styl b/themes/yun/docs/.vuepress/styles/index.styl new file mode 100644 index 0000000..ade09a4 --- /dev/null +++ b/themes/yun/docs/.vuepress/styles/index.styl @@ -0,0 +1,5 @@ +.theme-container.demo-site { + .theme-default-content.content__default, .page-edit { + max-width: 1000px; + } +} \ No newline at end of file diff --git a/themes/yun/docs/.vuepress/styles/palette.styl b/themes/yun/docs/.vuepress/styles/palette.styl new file mode 100644 index 0000000..6d8c92a --- /dev/null +++ b/themes/yun/docs/.vuepress/styles/palette.styl @@ -0,0 +1 @@ +$accentColor = #6200ee; \ No newline at end of file diff --git a/themes/yun/docs/README.md b/themes/yun/docs/README.md new file mode 100644 index 0000000..43eed68 --- /dev/null +++ b/themes/yun/docs/README.md @@ -0,0 +1,21 @@ +--- +home: true +heroImage: /logo.gif +heroText: Hexo-Theme-Yun +tagline: A light & fast & lovely theme for Hexo. +actionText: 快速上手 → +actionLink: /guide/ +features: + - title: 简洁 + details: 简洁、优雅、轻量、自适应的用户界面。 + - title: 快速 + details: 尽可能地优化无用代码,采用 CDN,提高访问速度。 + - title: 可爱 + details: 自以为是的可爱,拥有奇奇怪怪的功能。但不用担心会增加你的最终体积。 +# footer: MIT Licensed | Copyright © 2019-2020 YunYouJun +--- + +
+ diff --git a/themes/yun/docs/about.md b/themes/yun/docs/about.md new file mode 100644 index 0000000..c208f1f --- /dev/null +++ b/themes/yun/docs/about.md @@ -0,0 +1,120 @@ +# 关于 + +本主题是基于 [Hexo](https://hexo.io) 的自定义主题。 + +请先了解 [Hexo](https://hexo.io/zh-cn/docs/) 的相关使用方法。 + +你也可以参考我写的新手教程 [教你如何从零开始搭建一个属于自己的网站 - 云游君的小站](https://www.yunyoujun.cn/share/how-to-build-your-site/)。 + +如果您喜欢我的主题,请给一颗 [![GitHub stars](https://img.shields.io/github/stars/YunYouJun/hexo-theme-yun?style=social)](https://github.com/YunYouJun/hexo-theme-yun) 鼓励我。 + +> 因为我使用了 [SATA License](https://github.com/zTrix/sata-license),笑。 +> 你不知道这代表什么?简单来说,就是如果你使用了该主题,你需要马不停蹄地点一个 Star,接下来你便可以随意使用它。 + +- [hexo-theme-yun 制作笔记](https://www.yunyoujun.cn/note/make-hexo-theme-yun/) + +## 关键词 + +简洁、优雅、自适应、快速、CDN、有趣、功能齐全 + +## 优势 + +- 文档!(我觉得像咱这样有详细文档的主题还真不多,膨胀) +- 自定义程度高,且方便按需配置(约定大于配置) +- 小且速度快(无 jQuery 依赖,尽可能使用 CDN 与最新的 API) +- ~~因为还没什么人用,所以基本不用担心撞衫!~~ +- 一些奇怪的功能(譬如生成老婆名单?) + +> 我发现许多 Hexo 主题都引入了 jQuery 以方便开发。 +> 而现今 jQuery 的 API 已经逐渐融入现代浏览器的标准,所以本主题移除了 jQuery 并全部使用原生 JavaScript 来实现以提升速度。 + +## 设计原则 + +### 简洁至上 + +按钮优先使用简洁易懂的图标表现,不呈现文字。 + +### 新颖 + +在大部分浏览器已经支持的情况下,优先使用最新的 API。(可以减少冗余代码,提高速度。) + +> IE: 你们都看我干嘛? + +### 速度 + +谷歌 [PageSpeed Insights](https://developers.google.com/speed/pagespeed/insights/) + +![pagespeed-insights-score.png](https://i.loli.net/2020/03/12/cUIuDPJfo379ZOk.png) + +谷歌浏览器 Audits - Lighthouse 检测分数 + +![Audits - Lighthouse](https://i.loli.net/2020/03/08/DhfLu5yngb7NZE2.png) + +尽可能使用 CDN,提高访问速度。也算是符合了 云 ☁️ 的名字。 + +虽然很想用 WebP,奈何万恶的 Safari 与 iOS 不支持,故又都切回了 JPG。 + +> 顺便推荐谷歌的在线图片压缩工具: + +### 色彩 + +优先采用亮色模式 + +此前,我始终在亮色与暗色的选择之间徘徊,那么不如做一个可以切换亮暗的主题。 +这也意味着工作量会增加,需要更多的考虑和测试,便优先亮色调的开发。(现在暗色模式也有啦,个人还是喜欢亮的。) + +> 一些早在 20 世纪 80 年代的科学研究表明:对于大多数用户来说,亮色背景文本的大量使用似乎是一种更有效的选择。 +> D.Bauer 和 C.R.Cavonius 在其研究广告载体是如何运行的论文中分享了他们的研究成果《通过对比反转,提高视觉显示元素的易读性》(1980)。特别是,他们发现:当阅读文本时,参与者在浏览亮色背景上带有的深色文字时,准确率提高了 26%。 +> 为何会这样呢?来自英国伦比亚大学的「感觉知觉与互动研究小组」的 Jason Harrison 用以下方式解释了这一现象: +> 患有散光的人(根据各种数据显示:大约 50%的人)觉得,在黑色背景上的文字,比在白色背景上的黑色文字更难感知,这部分与光线水平有关。在明亮的显示屏(白色背景)下,虹膜会稍微闭合一些,减少了「变形的」透镜的影响;在暗色的显示屏(黑色背景)下,虹膜就会打开,接收到更多的光线,镜头的变形会使眼睛的焦距更加模糊。 +> 因此,如果界面上有大量的文本,而且需要用户进行长时间阅读,那么使用浅色背景会让用户觉得更加友好。 + +### 排版 + +尽可能遵循 [中文文案排版指北](https://github.com/sparanoid/chinese-copywriting-guidelines) + +## Thanks + +### Project + +- [jsDelivr – Open Source CDN](https://www.jsdelivr.com/) +- [Hexo](https://github.com/hexojs/hexo) +- [RemixIcon](https://github.com/Remix-Design/remixicon) +- [iconfont](https://www.iconfont.cn/) +- [lightgallery.js](https://github.com/sachinchoolur/lightgallery.js/) +- [VuePress](https://github.com/vuejs/vuepress) +- [KaTeX](https://github.com/KaTeX/KaTeX) +- [Pjax](https://github.com/MoOx/pjax) + +### Theme + +- [hexo-theme-next](https://github.com/theme-next/hexo-theme-next) +- [hexo-theme-melody](https://github.com/Molunerfinn/hexo-theme-melody) +- [hexo-theme-sakura](https://github.com/honjun/hexo-theme-sakura) + +### PV + +- [【洛天依原创】异样的风暴中心【杉田朗】](https://www.bilibili.com/video/av4018008) +- [【洛天依原创】星宿计时【杉田朗】](https://www.bilibili.com/video/av7036967) + +### Article + +- [Hexo 主题开发经验杂谈](https://molunerfinn.com/make-a-hexo-theme/) + +## Hexo VS WordPress VS Typecho + +正所谓存在即合理。 + +本主题为 Hexo 主题,Hexo 更适合愿意花时间折腾学习或有一定基础知识的人群(当然也还有追求静态速度与绝对安全,没有钱买服务器等理由)。 + +如果你更想专注于内容生产,并想要快速搭建上手(前提是你得有个服务器),便可以考虑直接使用 [WordPress](https://wordpress.org/) 或 [Typecho](https://typecho.org/)。 + +我懵懂之时的第一个站点正是使用 WordPress 搭建,并使用了有相当长一段时间。倘若直接使用 Hexo 搭建,便可能因为姿势水平不足遇到一些坑,打击到自己的热情。 + +WordPress 作为世界上市场占比最大的博客软件和内容管理系统,功能最为强大,生态丰富。 + +Typecho 则似乎在 WordPress 的强大和 Hexo 的简洁快速中取了个中间点。 + +你可以根据自己的真正需求来选择最适合自己的博客框架。 + +至于主题方面,则不妨试试小伙伴 [染川瞳](https://asuhe.jp/) 的 WordPress 主题 [Sakurairo](https://github.com/mirai-mamori/Sakurairo) 和 [阔落](https://guhub.cn/) 的 Typecho 主题 [miracles](https://github.com/BigCoke233/miracles),都是很漂亮的主题。 diff --git a/themes/yun/docs/demo.md b/themes/yun/docs/demo.md new file mode 100644 index 0000000..7d937b9 --- /dev/null +++ b/themes/yun/docs/demo.md @@ -0,0 +1,186 @@ +--- +pageClass: demo-site +--- + +# 示例站点 Demo Site + +如果你已经使用了本主题,欢迎前往 [Demo Sites | 示例站点](https://github.com/YunYouJun/hexo-theme-yun/issues/3) 留下你的站点,我将会将其添加到下方的示例站点中。 + +If you have already used this theme, you are welcome to leave your site at [Demo Sites | Sample Site](https://github.com/YunYouJun/hexo-theme-yun/issues/3), and I will add it to the sample sites below. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ 云游君的小站 +
+
+ + +
+ 落梅听风雪 +
+
+ + +
+ 神崎日照の小窝 +
+
+ + +
+ 呵呵君的博客 +
+
+ + +
+ 多酱的部落格 +
+
+ + +
+ 俺たちに翼はない +
+
+ + +
+ NBA·Max +
+
+ + +
+ ADD-SP的博客 +
+
+ + +
+ 琉的小窝 +
+
+ + +
+ nancheng58 +
+
+ + +
+ 秩同道合的博客 +
+
+ + +
+ 道之遠兮 +
+
+ + +
+ 柠檬君的小站 +
+
+ + +
+ 山山的掉发历程 +
+
+ + +
+ 陌上花的小栈 +
+
+ + +
+ Lymtics +
+
+ + +
+ Qingxu's Blog +
+
+ + +
+ 南楼画角的小站 +
+
+ + +
+ 乐得自在的小破站 +
+
+ + +
+ 小白菜的博客 +
+
+ + +
+ Eden瞎写小屋 +
+
+ + +
+ 琴社迷思 +
+
+ + +
+ 池某的小博客 +
+
+ + +
+ 偕臧 +
+
diff --git a/themes/yun/docs/en/README.md b/themes/yun/docs/en/README.md new file mode 100644 index 0000000..8449701 --- /dev/null +++ b/themes/yun/docs/en/README.md @@ -0,0 +1,21 @@ +--- +home: true +heroImage: /logo.gif +heroText: hexo-theme-yun +tagline: A light & fast & lovely theme for Hexo. +actionText: Quick Start → +actionLink: /en/guide/ +features: + - title: Simple + details: Simple, elegant and responsive UI. + - title: Fast + details: Optimize useless code as much as possible, and use CDN to increase access speed. + - title: Lovely + details: Self-righteous and cute, with strange features. But don't worry about increasing the final size of your blog. +# footer: MIT Licensed | Copyright © 2019-2020 YunYouJun +--- + +
+ diff --git a/themes/yun/docs/en/about.md b/themes/yun/docs/en/about.md new file mode 100644 index 0000000..aa7771d --- /dev/null +++ b/themes/yun/docs/en/about.md @@ -0,0 +1,107 @@ +# About + +This theme is a custom theme based on [Hexo](https://hexo.io). + +Please be familiarized with the relative use of [Hexo](https://hexo.io/en-us/docs/). + +Are you a newbie? Not a problem! Here's a tutorial I made just for you[Tutorial on how to build your website from scratch-Yunyoujun's small site](https://www.yunyoujun.cn/share/how-to-build-your-site/)(In Chinese). + +Yeah, you can read hexo docs directly. + +If you like my theme, please give me a [![GitHub stars](https://img.shields.io/github/stars/YunYouJun/hexo-theme-yun?style=social)](https://github.com/YunYouJun/hexo-theme-yun) to show me your appreciation. + +> Since I've used [SATA License](https://github.com/zTrix/sata-license), lol. +> Don't you know what this means? To put it simply, you can use my theme in however ways you decide by just a click of the Star. + +- [hexo-theme-yun constructing notes](https://www.yunyoujun.cn/note/make-hexo-theme-yun/) + +## Keywords + +Simple, elegant, adaptive, fast, CDN, fun, full-featured + +## Advantages + +- Documentation! (By no means, I don't think there are themes out there with such detailed documentation like mine) +- High level of customization, and easy to configure on-demand (convention > configuration) +- Light and fast (no jQuery dependencies, I use CDN and the latest API whenever possible) +- ~~Since it is not yet popular, it is no need to worry about others having the same theme!~~ +- Some weird features (such as generating a Waifu list?) + +> I realized that many Hexo themes introduce jQuery for easy development. +> But nowadays, the jQuery API has gradually integrated into the standards of modern browsers, so this theme has removed jQuery and implemented it with native JavaScript to improve the speed. + +## Design Principles + +### Simplicity the Priority + +Buttons are preferentially represented by simple and easy-to-understand icons instead of texts. + +### Novel + +Using the latest API as a priority under the circumstances where most browsers already support it. (Reduce redundant codes and increase speed.) + +> IE: Stop staring at me! + +### Speed + +Google [PageSpeed ​​Insights](https://developers.google.com/speed/pagespeed/insights/) + +![pagespeed-insights-score.png](https://i.loli.net/2020/03/12/cUIuDPJfo379ZOk.png) + +Google Chrome Audits-Lighthouse performance score + +![Audits-Lighthouse]https://i.loli.net/2020/03/08/DhfLu5yngb7NZE2.png) + +Use CDN whenever possible to increase access speed. It also matched the name of Yun ☁️. + +Although I fancy the use of WebP, Safari and iOS are not very supportive, so I switched back to JPG. + +> Apart from that, I recommend you to use Google's online image compression tool: + +### Color + +Utilize the bright mode + +Previously, I wandered between the choice of bright and dark themes, so I thought why not make a theme that we can switch between. But then this also means the increase of the workload, and more consideration and testing will be required. So eventually I choose to prioritize the development of the bright theme. + +> Some scientific research as early as the 1980s showed that for most users, the heavy use of bright background text seems to be a more effective choice. +> D. Bauer and C. R. Cavonius shared their research results in the journal "Improving the legibility of visual display elements through contrast inversion" (1980) with their topic on how advertising vehicles operate. In particular, they found that when reading text, participants improved accuracy by 26% when browsing dark text with light backgrounds. +> Why is this happening? Jason Harrison from the "Sensory Perception and Interaction Research Group" at the University of Lumbia, UK, explained this phenomenon in the following way: +> People with astigmatism (according to various data, approximately 50% of the population has this) feel that text on a black background is more difficult to perceive than black text on a white background, which is related to the brightness level. On a bright display (white background), the iris will be slightly closed, reducing the effect of "anamorphic" lenses; on a darker display (black background), the iris will open and receive more light, and then the distortion of the lens will make the focal length of the eyes more blurred. +> Therefore, if there is a large amount of text on the interface, and the user needs to read for a long time, then using a lighter background will make the user feel more comfortable. + +## Thanks + +### Project + +- [jsDelivr – Open Source CDN](https://www.jsdelivr.com/) +- [Hexo](https://github.com/hexojs/hexo) +- [RemixIcon](https://github.com/Remix-Design/remixicon) +- [iconfont](https://www.iconfont.cn/) +- [lightgallery.js](https://github.com/sachinchoolur/lightgallery.js/) +- [VuePress](https://github.com/vuejs/vuepress) +- [KaTeX](https://github.com/KaTeX/KaTeX) +- [Pjax](https://github.com/MoOx/pjax) + +### Theme + +-[hexo-theme-next](https://github.com/theme-next/hexo-theme-next) +-[hexo-theme-melody](https://github.com/Molunerfinn/hexo-theme-melody) +-[hexo-theme-sakura](https://github.com/honjun/hexo-theme-sakura) + +### PV + +-[[Luo Tianyi original] The strange storm center [Sugita Lang]](https://www.bilibili.com/video/av4018008) +-[[Luo Tianyi Original] Starry Time][Sugita Lang]](https://www.bilibili.com/video/av7036967) + +### Article + +-[Hexo theme development experience talk](https://molunerfinn.com/make-a-hexo-theme/) + +## Hexo VS WordPress VS Typecho + +The so-called existence is reasonable. + +This theme is a theme of Hexo. Hexo is more suitable for people who are willing to spend time studying or have a certain basic knowledge (of course, there are also reasons to pursue static speed and absolute security, and no money to buy a server). + +If you want to focus more on content production and want to get started quickly (you must have a server), you can consider using [WordPress](https://wordpress.org/). diff --git a/themes/yun/docs/en/guide/README.md b/themes/yun/docs/en/guide/README.md new file mode 100644 index 0000000..1945862 --- /dev/null +++ b/themes/yun/docs/en/guide/README.md @@ -0,0 +1,175 @@ +# User's Guidance + +This is a Hexo theme, please make sure you acknowledge the basic usage of Hexo. + +You can also refer to the newbie tutorial I wrote [Tutorial on how to build your website from scratch-Yunyoujun's small station](https://www.yunyoujun.cn/share/how-to-build-your-site/). + +```sh +npm install hexo-cli -g +hexo init your-blog +cd your-blog +npm install +hexo server +``` + +> For more information, please refer to [Hexo official website](https://hexo.io/) + +If you have any questions or suggestions about the use of this theme, you can go ahead to [here](https://github.com/YunYouJun/hexo-theme-yun/issues) and initiate an issue. + +You can also join [QQ Group](https://shang.qq.com/wpa/qunwpa?idkey=3bd19a05aaccb2b60c396295c8617b3a9e667821a495e8cd7e1698ff95ab61c6) (389401003) for feedback and discussion. + +## Quickstart + +::: tip renderer +If you don’t have renderers for `pug` and`stylus`, please install: +[hexo-renderer-pug](https://github.com/hexojs/hexo-renderer-pug) +(This is Hexo official maintenance, but it seems that there are not many stars, or have a diligent update as the one below.) +Or [hexo-render-pug](https://github.com/maxknee/hexo-render-pug) +(The former one does not yet support frequently update during development, but the latter does.) +And [hexo-renderer-stylus](https://github.com/hexojs/hexo-renderer-stylus) + +```sh +npm install hexo-render-pug hexo-renderer-stylus --save +# or +yarn add hexo-render-pug hexo-renderer-stylus +``` + +::: + +### Install Theme + +Go to the root directory of your Hexo blog. Clone or download the `hexo-theme-yun` theme, and place it under `themes/yun`. + +```sh +git clone -b master https://github.com/YunYouJun/hexo-theme-yun themes/yun +``` + +> If you are using continuous integration and wanting to build a stable version each time, you can fork this project, and then clone your fork project. +> +> ```sh +> git clone -b master https://github.com/你的名字/hexo-theme-yun themes/yun +> ``` + +If you want to experience the new version of `hexo-theme-yun`. ([云游君的小站](https://www.yunyoujun.cn) will always use the latest version as an example.) + +```sh +git clone -b dev https://github.com/YunYouJun/hexo-theme-yun themes/yun +``` + +### Enable Themes + +Modify the Hexo site configuration file `_config.yml` + +```sh +# Set the theme to hexo-theme-yun +theme: yun +``` + +### Configure Theme + +Create a new `source/_data/yun.yml` in the Hexo working directory. (If the `source/_data` directory does not exist, please create a new one.) + +With the convention greater than the configuration, you only need to customize the configuration you want to override in `yun.yml`, and the rest will be automatically merged with the theme's default configuration. (This is also more convenient for future upgrades) + +::: tip +Such as: + +The complete configuration of `avatar` is as follows + +```yaml +avatar: +  url: /images/avatar.jpg +  rounded: true +  opacity: 1 +``` + +You can just define it in `yun.yml` (it is also possible to cover it all) + +```yaml +avatar: +  url: /images/avatar.jpg +``` + +::: + +### Upgrade Theme + +If you are configuring in `yun.yml`, you only need to enter the following command in the Hexo working path: + +```sh +cd themes/yun +git pull +``` + +If you modify the theme's `themes/yun/_config.yml` configuration file, you may encounter conflicts during the upgrade and need to adjust it yourself. + +::: danger +It is best not to modify any of the theme's files unless you have certain development capabilities, or else the theme can not be upgraded afterward. +::: + +If you want to customize the theme, you can include your resources in the `head` configuration item. + +> [head resource](/guide/config.html#head-头部资源) + +For example, if you want to add an Aplayer player widget to the website globally... + +> Not currently recommended. This theme does not yet support PJAX, so when you jump to the page, the concert will be interrupted. +> PJAX support will be considered in the future (can be configured to decide whether to enable it), but it may not be achieved in the short term. +> Article internal player, you can use [hexo-tag-aplayer](https://github.com/MoePlayer/hexo-tag-aplayer) directly + +You can create a new `load-aplayer.js` file under the `source/js` folder in the root directory of Hexo. + +> If the `js` folder does not exist, please create a new one. + +Through the `createElement` method, `append` into the `body` container. + +```js +document.addEventListener("DOMContentLoaded", function() { + let apContainer = document.createElement("div"); + apContainer.id = "aplayer"; + document.body.append(apContainer); + const ap = new APlayer({ + container: document.getElementById("aplayer"), + fixed: true, + audio: [ + { + name: "name", + artist: "artist", + url: "url.mp3", + cover: "cover.jpg", + }, + ], + }); +}); +``` + +And set the `head` option in `yun.yml` to introduce css or js. + +```yaml +head: +  css: +    aplayer: https://cdn.jsdelivr.net/npm/aplayer@1.10.1/dist/APlayer.min.css +  js: +    defer: +      aplayer: https://cdn.jsdelivr.net/npm/aplayer@1.10.1/dist/APlayer.min.js +      loadAplayer: /js/load-aplayer.js +``` + +### Auto Update + +If you want to update automatically and keep the latest themes at all times, you can use continuous integration (such as [GitHub Actions](https://github.com/features/actions), [Travis](https://travis-ci.com/ )). + +You can refer to my GitHub Action configuration file [gh-pages.yml](https://github.com/YunYouJun/yunyoujun.github.io/blob/hexo/.github/workflows/gh-pages.yml). (Copy the configuration and put it in the corresponding folder. GitHub Actions is a service that comes with GitHub.) +If you are not using `algolia_search`, please delete the relevant part of `algolia`. + +> I have adopted this approach, but I do not recommend it to you from the conscience, because this is my own theme, and naturally I have a certain tolerance for potential bugs. +> Always keep the same as the warehouse version, you may encounter newly introduced BUG. +> Of course you can give it a try if you are willing to be a guinea pig. By the way, give us feedback. From a personal point of view, it is very welcome. + +If you want to clone a stable version of the theme, you can fork it yourself, and then modify the source project address to the project address after fork. + +```yaml +run: | + git clone -b dev https://github.com/YunYouJun/hexo-theme-yun.git themes/yun +``` + diff --git a/themes/yun/docs/en/guide/additional-package-support.md b/themes/yun/docs/en/guide/additional-package-support.md new file mode 100644 index 0000000..55d096e --- /dev/null +++ b/themes/yun/docs/en/guide/additional-package-support.md @@ -0,0 +1,366 @@ +# Additional Dependency Library Support + +The difference with third-party support is that most of the functions here are implemented by installing plug-ins or introducing CDN, and are simply adapted by themes. + +## Word Count + +Install [hexo-wordcount](https://github.com/willin/hexo-wordcount) + +```sh +npm install hexo-wordcount +# or +# yarn add hexo-wordcount +``` + +Enter the configuration file `source/_data/yun.yml` in the root directory of the blog + +- `count`: Word Count +- `time`: Read Time + +```yaml +wordcount: + enable: true + count: true + time: true +``` + +## RSS + +Install [hexo-generator-feed](https://github.com/hexojs/hexo-generator-feed). + +```sh +npm install hexo-generator-feed --save +``` + +Configure the default icon as `icon-rss-line`. If you need to customize, enter `source/_data /yun.yml` to configure. + +It can be configured in the `social` field of `yun.yml`, such as: + +```yaml +social: +  - name: RSS +    link: /atom.xml # config.feed.path +    icon: icon-rss-line +    color: orange +``` + +For more configuration, please refer to [Official Document](https://github.com/hexojs/hexo-generator-feed) (in `_config.yml` in the Hexo working directory). + +## Sticky + +Run the following command in the root directory of Hexo to remove the default index generator and use the sticky index generator. + +The sticky feature of the original plugin has not been merged for a long time. [# 26](https://github.com/hexojs/hexo-generator-index/pull/26) + +```sh +npm uninstall hexo-generator-index --save +npm install hexo-generator-index-pin-top --save +``` + +> You can reference [hexo-generator-index-pin-top](https://github.com/netcan/hexo-generator-index-pin-top) +> Note that when using hexo-generator-index-pin-top, the sorting function according to `updated` will be invalid. (The only way out is to wait for the official one to be merged.) + +By setting the `top` property in the article Front Matter. +After setting sticky, the sticky icon will appear in the upper right corner of the article card. + +```md +--- +title: xxx +top: true +--- +``` + +You can also set the level of priority to achieve the order of multiple sticky articles. + +```md +--- +title: xxx +top: 1 +--- +``` + +```md +--- +title: xxx +top: 2 +--- +``` + +At this time, the articles of `top: 2` will be arranged above the articles of `top: 1`. + +::: tip +You can also set the sorting according to `updated`, and then set the date of `updated` to a future date to achieve the sticky effect. +::: + +## live2d + +There is no need to modify the theme to adding live2d, nor does it need to configure the theme. It is just a plug-in for Hexo. You can configure it in `_config.yml` in the root directory. +The reason it appears here is to illustrate the recommended settings (in short, it is best to use CDN). + +Install [hexo-helper-live2d](https://github.com/EYHN/hexo-helper-live2d) + +```sh +npm install --save hexo-helper-live2d +``` + +Configure in `_config.yml` in Hexo root directory: + +> For more options, please refer to [hexo-helper-live2d](https://github.com/EYHN/hexo-helper-live2d) + +```yaml +live2d: + enable: true + # recommend to use the CDN of jsdelivr to load + scriptFrom: jsdelivr + pluginRootPath: live2dw/ + pluginJsPath: lib/ + pluginModelPath: assets/ + tagMode: false + debug: false + model: + # recommend to use CDN to load the model + use: https://cdn.jsdelivr.net/npm/live2d-widget-model-wanko@1.0.5/assets/wanko.model.json + display: + position: right + width: 150 + height: 300 + mobile: + show: true + react: + opacity: 0.7 + # dialog: + # # whether to open the dialog box + # enable: true + # # whether to use hitokoto + # hitokoto: true +``` + +## Tag Cloud (Word Cloud) + +Config in `yun.yml, use colorful word cloud instead of native tag cloud. + +- `enable`: enable word cloud +- `height`: set height of word cloud + +## player + +### [hexo-tag-aplayer](https://github.com/MoePlayer/hexo-tag-aplayer) + +Install [hexo-tag-aplayer](https://github.com/MoePlayer/hexo-tag-aplayer) + +```sh +npm install hexo-tag-aplayer +``` + +> See [Official Document](https://github.com/MoePlayer/hexo-tag-aplayer/blob/master/docs/README-zh_cn.md) + +Recommended configuration (in `_config.yml` in the root directory of Hexo): + +```yaml +aplayer: +  cdn: https://cdn.jsdelivr.net/npm/aplayer@latest/dist/APlayer.min.js +  style_cdn: https://cdn.jsdelivr.net/npm/aplayer@latest/dist/APlayer.min.css +  meting: true +  meting_cdn: https://cdn.jsdelivr.net/npm/meting@1/dist/Meting.min.js +``` + +::: tip +If you find that Aplayer sometimes introduces header files repeatedly in irrelevant files. Remember to turn off automatic script insertion. + +> [Duplicate APlayer.JS loading](https://github.com/MoePlayer/hexo-tag-aplayer/blob/master/README.md#duplicate-aplayerjs-loading) + +```yaml +aplayer: +  asset_inject: false +``` + +Then decide at the head of the article whether to enable `aplayer`: + +```yaml {3} +--- +title: xxx +aplayer: true +--- + +``` + +You can also set it globally in `yun.yml`. (When you set up a global player, you can use it.) + +```yaml +aplayer: +  global: true +``` + +::: + +Insert a song from NetEase Cloud Music + +```md +{% meting "497572729" "netease" "song" "theme: # C20C0C"%} +``` + +### Global Music Player + +You can set it global enable in `yun.yml`. + +- `meting`: enable [meting](https://github.com/metowolf/MetingJS), whether to introduce meting resources (pay attention to the difference between this and `widget`) +- `widget`: set `widget.enable` `true` to enable global player (aplayer.global must be `true`) + - `meting.enable`: whether to open meting for global widget. When open, it will load `option`; When close, will use cutsom `audio`. + - `audio`: default config can be referred. More info see [Official Documentation](https://aplayer.js.org/#/home)。 + +Open [pjax](#pjax), it can realize that the music player is not interrupted when switching pages. (In order to load the music player correctly, when there is a music player in the article page that you switch to, `Meting` will reload.) + +```yaml +aplayer: + global: false + meting: true + # https://github.com/metowolf/MetingJS/tree/v1.2#option + widget: + enable: false + autoplay: false + # theme: "#2980b9" + loop: all + order: list + preload: auto + volume: 0.7 + mutex: true + lrcType: 0 + listFolded: false + listMaxHeight: 340px + audio: + - name: 星宿计时 + artist: 杉田朗/洛天依 + url: https://cdn.jsdelivr.net/gh/YunYouJun/cdn/audio/star-timer.mp3 + cover: https://cdn.jsdelivr.net/gh/YunYouJun/cdn/img/bg/stars-timing-0.jpg + meting: + enable: true + id: 308168565 + server: netease + type: playlist +``` + +Since `hexo-tag-aplayer` is so fragrant, I decided to remove the original media package script. Students who are really in need can add it by themselves. + +```js +/ ** + * Transform embedded video to support responsive layout. + * @see https://ultimatecourses.com/blog/fluid-and-responsive-youtube-and-vimeo-videos-with-fluidvids-js + * / +embeddedVideoTransformer: function () { +  let iframes = document.getElementsByTagName ("iframe"); +  let SUPPORTED_PLAYERS = [ +    "www.youtube.com", +    "player.vimeo.com", +    "music.163.com" +  ]; +  for (let i = 0; i + \[E = mc ^ 2 \] + +``` + +::: + +As shown below, the formula will be displayed in the center. + +```latex +$$ E = mc ^ 2 $$ +\[E = mc ^ 2 \] +``` + +As shown in the following package, the formula will be displayed in line. + +```latex +\(E = mc ^ 2 \) +``` + +> You can visit [Yun Test](https://www.yunyoujun.cn/yun/) to see the actual effect. +> You may need some time to wait for the `KaTeX` library to load, or refresh and try again. + +## pjax + +Use [pjax](https://github.com/MoOx/pjax)。 + +```yaml +pjax: + enable: true +``` + +## Other Recommended Plugins + +The following plug-in configuration and usage have nothing to do with the theme, you can refer to its documentation configuration yourself. + +> Because when you want some features that the theme does not provide, they can actually be implemented directly through plugins. + +### [hexo-blog-encrypt](https://github.com/MikeCoder/hexo-blog-encrypt) + +You can use it to encrypt some private article pages. diff --git a/themes/yun/docs/en/guide/config.md b/themes/yun/docs/en/guide/config.md new file mode 100644 index 0000000..eb4cb51 --- /dev/null +++ b/themes/yun/docs/en/guide/config.md @@ -0,0 +1,1369 @@ +# Theme Configuration + +## Configuration File + +Convention > Configuration + +::: danger +Please define the configuration you need in `source/_data/yun.yml`, the rest will automatically use the default configuration. + +Unless otherwise specified, they are configured by default in the `yun.yml` file. + +It is best not to modify any of the theme's files unless you have certain development capabilities, or else the theme can not be upgraded afterward. +::: + +## Language + +The default language is Chinese `zh-CN`. + +> The language of the site needs to be set in `_config.yml` under the Hexo directory. + +```yaml +language: en +``` + +### Customized Language + +Create a new `source/_data/language.yml` in the Hexo working directory. (If the `source/_data` directory does not exist, please create a new one.) + +With the convention greater than the configuration, you only need to customize the paragraph or words you want to override in `language.yml` , and the rest will be automatically merged with the theme's default configuration. (This is also more convenient for future upgrades) + +Here follows a configuration example, + +```yaml +en: # the language need to be overridden + menu: + home: My Index + +ja: # the language need to be overridden + menu: + home: マイインデックス + +zh-CN: # the language need to be overridden + menu: + home: 我的主页 +``` + +If english is the only used language, all items can be erased other than `en`. + +## Theme Color + +The main color of the custom theme. + +- `bg`: background color (choose a color closer to the main color of your background image in order to make it more coordinated) + +> [color-dust](https://www.yunyoujun.cn/color-dust) I wrote a small tool that can analyze the color in pictures. + +```yaml +colors: + primary: "#6200ee" + # bg: "# F5F5F5" + selection_bg: "#8e71c1" # background color when selecting text + # Starting and ending colors of the tags + # tag_start_color: + # tag_end_color: +``` + +### Tags + +You can specify the color for your label, the default color is `#333`. + +```yaml +tags: + Vue: "#4fc08d" + Hexo: "#0E834D" + CSS: "#5298d1" + Node.js: "#026E00" + Git: "#F14E32" + React: "#61dafb" + Python: "#3776ab" + PHP: "#8892BF" + VS Code: "#0066B8" + JavaScript: "#F4DF4F" + TypeScript: "#317AC6" + Laravel: "#F4645F" +``` + +### Categories + +You can specify the color for your category, the default color is `#333`. + +```yaml +categories: + Notes: dimgray +``` + +## Head Resources + +If you have resources that you want to load, please add them to the `head`. + +Follow the example below to customize the `css` and `js` resources you want to add. + +JavaScript resource type description: + +- `base`: must be loaded and executed in advance. +- `async`: Asynchronous loading, executed immediately after loading. +- `defer`: load the resource asynchronously, but execute it last. + +```yaml +head: + css: + example: //example.min.css + js: + base: + async: + defer: +``` + +::: tip + +If you want to custom css,please set `yun.yml`: + +```yaml +head: + css: + custom: /css/custom.css +``` + +file is `source/css/custom.css` (Just new it yourself!) + +Then write you custom css. + +```css +.char { + background-color: transparent; +} +``` + +::: + +### favicon + +Set the website icon (make sure your `favicon.ico` file is placed under the `source` folder), set as follows: + +```yaml +favicon: /favicon.ico +``` + +Yun Logo can use the corresponding opposite colors according to the light and dark theme of the browser. + +For example, the bright browser LOGO has a black stroke, and the dark browser LOGO has a white stroke. + +Your icon must be an `svg` file, and add a corresponding style to it. + +> You can refer to my LOGO SVG code. [yun.svg](https://github.com/YunYouJun/hexo-theme-yun/blob/dev/source/yun.svg) + +For Example: + +```html + +``` + +> [Dark Mode Favicons](https://css-tricks.com/dark-mode-favicons/) + +## CDN + +Content Delivery Network unifies the loading of network resources; it is conducive to improving the speed of web page loading. + +[jsDelivr – Open Source CDN](https://www.jsdelivr.com) is a free and open-source CDN, with good domestic speed performance, and a unified CDN source which is also conducive to loading speed. +Therefore, this theme's CDN defaults to jsDelivr and uses `dns-prefetch` to pre-parse jsDelivr. + +You can also obtain the CDN you want according to the naming rules, and introduce it in the `head`: + +- GitHub CDN: `https://cdn.jsdelivr.net/gh/user/repo@version/file` +- npm: `https://cdn.jsdelivr.net/npm/package@version/file` + +`cdn` is the CDN resource currently introduced by the theme by default, and its structure is similar to `head`. + +```yaml +cdn: + pre: "" + css: + js: + base: + async: + # Icon resources introduced by default, use iconfont + iconfont: //at.alicdn.com/t/font_1140697_stqaphw3j4.js + defer: +``` + +- `pre`: empty by default, your loading resource prefix. For example, if you want to use `jsdelivr` to accelerate the static resources of the whole station, you can set it in `yun.yml` like this. + +> Replace `https://cdn.jsdelivr.net/gh/` with your GitHub username and repository name (you can also add the current branch, such as `@master`). +> `@latest` is to use the latest version (but it will still be cached, **and it will take 12 hours to update**, if you need to force a refresh, please refer to [Purge Cache](https://github.com/jsdelivr/sdelivr#purge-cache) +> In addition, please make sure that your avatar image link uses `/images/xxx.jpg` instead of `https://xxx/xxx.jpg`. + +```yaml +cdn: + pre: https://cdn.jsdelivr.net/gh/YunYouJun/yunyoujun.github.io@latest +``` + +::: tip +If you customize the resources used by the theme and want to preview and debug locally more conveniently, + +you can add `" dev ":" export NODE_ENV = dev && hexo s "` in the `scripts` field of `package.json` in the Hexo working directory. + +```json +{ + "scripts": { + "dev": "export NODE_ENV= ev &&hexo s" + } +} +``` + +And start it through `npm run dev`; it is now in development mode.`cdn.pre` is not used by default. +::: + +### Overwrite Icon Font + +```yaml +cdn: + js: + async: + iconfont: your iconfont custom resource +``` + +### Preloading + +Use `preload`, `prefetch`, `preconnect`, `dns-prefetch` to optimize the speed of webpage recording. + +- `preload`: resources that will be used after this page +- `prefetch`: resources that may be used after jump to the page +- `dns-prefetch`: resolve the DNS address of the domain name that will be used +- `preconnect`: establish a link with the specified domain name in advance; it has more TCP connections than`dns-prefetch` + +`preload` and `prefetch` are only used to load local resources (and generally use by default). Do not use resources with a protocol header (`http://`). + +CDN can be added at `head`. + +> [\ : External resource link element-MDN](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/link) + +```yaml +preload: + style: + - /css/hexo-theme-yun.css + script: + - /js/utils.js + - /js/hexo-theme-yun.js + +prefetch: + script: + - /js/sidebar.js + +dns_prefetch: + - https://cos.yunyoujun.cn + +# do more (TCP handshake ...) than dns-fetch +preconnect: + - https://cdn.jsdelivr.net +``` + +## Icon Library + +This theme uses some of Remix Icon's icons by default and loads through cdn generated by iconfont. + +> The default icon list refer to [default icons](/en/guide/icon.html) + +If you want to use other icons, the following icons are recommended. + +- Method 1: Most recommended, all use custom `iconfont` icon set. (Fast speed, but need to be configured by yourself) +- Method 2: Freely import the css style file of the font icon in [head](#head-head resource), and directly input the corresponding `class` name. (Often all icon resources are introduced. Although it is convenient to introduce them at once, many icons are not practical.) + +::: tip +You can go to [iconfont](https://www.iconfont.cn/) to customize a set of icons and cover the icon resources introduced by [CDN] (# CDN). +If you just want to add a few extra icons, you'd better introduce it at [head](# head-header resource) instead of directly overwriting it. +::: + +Here are some ways to use basic icons. + +This theme is adapted to the use of the following icons. + +### [iconfont](https://www.iconfont.cn/) + +Under Alibaba, you can customize your own icon set. Domestic speed is decent in China. (recommend) + +[Instructions](https://www.iconfont.cn/help/detail?helptype=code) + +Multi-color icons need to be quoted in the `symbol` of the article. + +Then set as follow in `yun.yml`. + +```yaml +head: + js: + async: + # Here is the icon link you got from iconfont. + iconfont: //at.alicdn.com/t/font_1623879_a03x3er7qur.js +``` + +### [Remix Icon](https://remixicon.com/) + +- GitHub: +- CDN: + +Simple, elegant and open source. + +### [Ionicons](https://ionicons.com) + +- GitHub: [ionicons](https://github.com/ionic-team/ionicons) +- CDN CSS: +- CDN JS: + +There is no trademark icon, you can use Web Component and load it on demand. + +#### Loading Method 1: Web Component + +It can automatically switch the suitable style `Material/ iOS` according to the `Android/iOS` platform. + +This theme has adapted the way the `ion-icon` tag is introduced, just configure it as follows. + +```yaml +head: + js: + async: https://cdn.jsdelivr.net/npm/ionicons/dist/ionicons.js +``` + +```yaml +icon: ion-icon heart +``` + +#### Loading Method 2: CSS Introduction + +```yaml +head: + css: + ionicons: https://cdn.jsdelivr.net/npm/ionicons/dist/css/ionicons.min.css +``` + +```yaml +icon: icon ion-md-heart +``` + +### [Material Design icons](https://google.github.io/material-design-icons/) + +- GitHub: [material-design-icons](https://github.com/google/material-design-icons) +- [Material Design icons](https://material.io/tools/icons) + +Uniform style, no trademark icon. Produced by Google, due to domestic policies, loading may not be stable if using in China. + +The theme has also been adapted. + +::: tip + +Why do we need to adapt? + +Original way of use + +`face` is the internal content of ``, not `class`. + +```html +face +``` + +::: + +引入对应 CDN 资源: + +```yaml +head: + css: + material: https://fonts.googleapis.com/icon?family=Material+Icons +``` + +```yaml +icon: material-icons face +``` + +### Other Icons + +Similar to the use of the above icons fill in the corresponding icon `class` in the icon-related configuration. + +Such as [Font-Awesome](https://fontawesome.com) + +> GitHub: [Font-Awesome](https://github.com/FortAwesome/Font-Awesome) + +Introduce CSS: + +```yaml +head: + css: + fontawesome: https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free/css/all.min.css +``` + +Write class name: + +```yaml +icon: fas fa-home +``` + +> In fact, it is not recommended to introduce all `font-awesome`, because it is really big. + +## Social Icons + +The following social icons are provided by default. You can obtain more icons by introducing custom icon resources in [head](#head-head resource) +For better display, my default link will be displayed. + +- `name`: link name +- `link`: link +- `icon`: Icon Class +- `color`: Icon color (If the icon you introduced supports SVG custom colors in advance) The current default color adopts the official icon brand color. + +```yaml +social: + - name: RSS + # set rss in your root config + # https://github.com/hexojs/hexo-generator-feed + link: atom.xml # config.feed.path + icon: icon-rss-line + color: orange + - name: QQ + # https://isux.tencent.com/wp-content/uploads/2016/05/20160512101222609.pdf + link: https://wpa.qq.com/msgrd?v=3&uin=910426929&site=qq&menu=yes + icon: icon-qq-line + color: "# 12B7F5" + - name: GitHub + link: https://github.com/YunYouJun + icon: icon-github-line + color: "# 181717" + - name: E-Mail + link: mailto: me@yunyoujun.cn + icon: icon-mail-line + color: "# 8E71C1" + - name: Weibo + link: https://weibo.com/jizhideyunyoujun + icon: icon-weibo-line + color: "# E6162D" + - name: Douban + link: https://www.douban.com/people/yunyoujun/ + icon: icon-douban-line + color: "# 007722" + - name: NetEase Cloud Music + link: https://music.163.com/#/user/home?id=247102977 + icon: icon-netease-cloud-music-line + color: "# C10D0C" + - name: Zhihu + link: https://www.zhihu.com/people/yunyoujun/ + icon: icon-zhihu-line + color: "# 0084FF" + - name: Bilibili Animation + link: https://space.bilibili.com/1579790 + icon: icon-bilibili-line + color: "# FF8EB3" + - name: POPI + link: https://www.popiask.cn/elpsycn + icon: icon-questionnaire-line + color: "# 525252" + - name: WeChat official account + link: https://cdn.jsdelivr.net/gh/YunYouJun/cdn/img/about/white-qrcode-and-search.jpg + icon: icon-wechat-2-line + color: "# 1AAD19" + - name: Twitter + link: https://twitter.com/YunYouJun + icon: icon-twitter-line + color: "#1da1f2" + - name: Telegram + link: https://t.me/YunYouJun + icon: icon-telegram-line + color: "#0088CC" + - name: Telegram Channel + link: https://t.me/elpsycn + icon: icon-telegram-fill + color: "#0088CC" +``` + +You only need to set `social` in `yun.yml` to overwrite it (at this time you can only display your mailbox icon and no other icons): + +```yaml +social: + - name: E-Mail + link: mailto: your email + icon: icon-mail-line + color: "#8E71C1" +``` + +If you don't want to put any links, just set the following in `yun.yml`: + +```yaml +social: +``` + +## Home + +### Slogan Animation + +The verticallly staggered text effect on the homepage is enabled by default. + +You can visit to see the effect. (Each refresh will display random font size) + +> This is the earliest function implemented during the development of this theme. During the period, it was refactored several times due to compatibility issues of browsers such as Safari, and the loading speed was also improved. +> It was a function that went through three dynasties, lol. + +- `enable`: whether to enable -`title`: set text content +- `title`: Text content +- `border`: display the left and right border of char +- `cloud`: Display float cloud + - `enable`: enable it + - `color`: custom cloud color +- `go_down`: go down arrow button (click it to go down) + +```yaml +banner: + enable: true + title: 云游君的小站 + src: /js/ui/banner.js + border: true + cloud: + enable: true + color: "white" + go_down: + enable: true + icon: icon-arrow-down-s-line +``` + +You can customize the character segmentation in the form of an array, for example: + +```yaml +banner: + title: + - Yun + - You + - Jun + - Blog +``` + +### Announcement + +You can configure the announcement as follows. +It will be displayed at the top of all article cards, below the tagline. + +```yaml +notice: + enable: true + content: Thanks for playing my game. +``` + +## UI + +### Light and Dark Mode + +- `light`: always light mode without dark style assets +- `dark`: always dark mode +- `auto`: switch mode by system mode, display toggle button in sidebar + +> Black icon will be white in dark mode. + +You can set isolate background for dark mode, please see corresponding config. + +```yaml +# light | dark | auto +mode: auto +``` + +### Font + +You can set your font family and font-weight. + +:::tip + +If you use non-system-built fonts, you also need to go to [head](#head-头资源) to import them. + +For example, the “Noto Serif SC” font with a weight of 900 is introduced. + +> In order to ensure that this theme is light enough, no fonts are introduced by default, and the default fonts that come with the system are used. You can decide whether to introduce it. + +```yaml +head: + css: + fonts: https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@900&display=swap +``` + +::: + +The fonts of this theme are mainly divided into the following three categories. + +> You can only cover the font family you want to cover. + +- `Serif`: The bolder form is emphasized, and is usually used in homepage banners, Say, site and article titles (and the names of works on pages such as links and girls). +- `Sans Serif`: Usually normal text content. (If your font is bold, it may be that you installed the `PingFang SC` font on the Windows system, but did not install the corresponding font weight.) +- `monospace`: The characters all have the same width and are usually used where the same width is required for alignment (such as dates, serial numbers). + +Set `font.cdn.enable` to `false` to use all system default fonts to achieve the best access speed. (When enabled by default, use `media="none" onload="this.media='all'"` to achieve css style asynchronous loading.) + +```yaml +font: + cdn: + enable: true + lib: + - https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@900&display=swap + serif: + family: "'Songti SC', 'Noto Serif SC', STZhongsong, STKaiti, KaiTi, Roboto, serif" + weight: 900 + sans_serif: + family: "'PingFang SC', 'Microsoft YaHei', Roboto, Arial, sans-serif" + weight: 400 + monospace: + family: "'Source Code Pro', 'Courier New', Courier, Consolas, Monaco, monospace" +``` + +### Background + +- `opacity`: background transparency + +::: tip +Note that the background blur is now disabled by default. It is also recommended that users use image processing tools to blur images for the background. + +> You can also use some online image blur tools directly. For example, [Gaussian Blur](https://www.anooc.com/ts/gs) (This is only the first one I found on Google, you can find your favorite tool to process it.) + +This also eliminates the white borders produced during the application of `blur` filter to color pictures. +At the same time, it can also reduce the background of the image and improve the loading and rendering speed. +::: + +- `dark`: the image url for dark mode + +```yaml +bg_image: + enable: true + url: https://cdn.jsdelivr.net/gh/YunYouJun/cdn/img/bg/stars-timing-0-blur-30px.jpg + # dark: + # blur: 30px # Set the blurry degree of background + opacity: 0.8 +``` + +> If you want to use a custom image background, just put it in the `source/images` folder and use `/images/xxx.jpg` to import it. +> +> Note: If you use a subdirectory to place your blog, such as `xxx.github.io/blog/`, your picture link needs to be set to `/blog/xxx`, or you can directly use the image hosting. + +#### Search Background + +- `placeholder`: search box prompt text (if not set, the corresponding text will be automatically selected according to Hexo language configuration) +- `dark_bg_image`: background for dark mode + +```yaml +search: + bg_image: https://cdn.jsdelivr.net/gh/YunYouJun/cdn/img/bg/stars-timing-2.jpg + dark_bg_image: xxx + # placeholder: +``` + +> For more search settings, please refer to [Search-Third Party Support](/guide/third-party-support.html#search) + +### Random Trianglify Background + +> [trianglify - GitHub](https://github.com/qrohlf/trianglify) + +- `enable`: default is false +- `cellSize`: the size of polygon +- `palette`: Palette,([More colors](https://github.com/qrohlf/trianglify/blob/master/src/utils/colorbrewer.js)) +- `opacity`: Opacity of background + +> Because the background is stretched, larger `width` and `height` will get higher definition. (Please make a trade-off with performance) + +```yaml +trianglify: + enable: false + cellSize: 75 + width: 800 + height: 600 + palette: '["YlGnBu", "GnBu", "Purples", "Blues"]' + opacity: 0.5 +``` + +### Fireworks + +Click on the fireworks effect on the page + +- `enable`: whether to enable, enable by default +- `colors`: the included colors, the default is several levels of blue colors (please follow the RGB values ​​below) + +```yaml +fireworks: + enable: true + colors: + - "102, 167, 221" + - "62, 131, 225" + - "33, 78, 194" +``` + +> Reference from: [Anime.js Fireworks canvas demo](https://codepen.io/juliangarnier/pen/gmOwJX) + +### ScrollReveal + +The scrolling effect of the card on the home page can be seen in [Official Website](https://cdn.jsdelivr.net/npm/scrollreveal/dist/scrollreveal.min.js), which is enabled by default. + +- `targets`: set targets for scrolling effect + +```yaml +scrollreveal: + enable: true + targets: + - .post-card + - .post-content img +``` + +### Cursor Cursor + +Replace the mouse cursor, which is off by default. By default, [Material Design Cursors](https://www.deviantart.com/rosea92/art/Material-Design-Cursors-Dark-756850032) is used by default. + +You can also use your favorite icon instead. + +- `default`: Icon in the default state. +- `pointer`: pointer (that is, in the link state) icon. + +```yaml +cursor: + enable: false + default: https://cdn.jsdelivr.net/gh/YunYouJun/cdn/css/md-cursors/pointer.cur + pointer: https://cdn.jsdelivr.net/gh/YunYouJun/cdn/css/md-cursors/link.cur + text: https://cdn.jsdelivr.net/gh/YunYouJun/cdn/css/md-cursors/text.cur +``` + +## Sidebar + +### Sidebar Background + +- `tagcloud`: display it in sidebar + - `amount`: the amount of tags + +```yaml +sidebar: + bg_image: https://cdn.jsdelivr.net/gh/YunYouJun/cdn/img/bg/stars-timing-1.jpg + bg_position: bottom 3rem center + tagcloud: + enable: false + amount: 20 +``` + +> Notice: If you use a sub-directory to place your blog, such as `xxx.github.io/blog/`, your image link needs to be set to `/blog/xxx`, or you can directly use the image bed. + +`bottom 3rem center` means it is centered and `3rem` from the bottom. + +You can refer to [background-position](https://developer.mozilla.org/zh-CN/docs/Web/CSS/background-position) to set the position of the background image. + +### Avatar + +- `enable`: whether to show avatar +- `url`: avatar image link +- `rounded`: whether to be circled +- `opacity`: transparency +- `mickey_mouse`: Closed by default. When ON, the avatar of the sidebar of the article page will move upwards (Disney copyright alert) +- `status` + - `enable`: whether to display status + - `emoji`: emoji + - `message`: message for emoji + +```yaml +avatar: + enable: true + url: /images/avatar.jpg + rounded: true + opacity: 1 + mickey_mouse: false + status: + enable: true + emoji: 😭 + message: Don't want to go to school. +``` + +The effect after `mickey_mouse` is enabled: + +![mickey-mouse](https://i.loli.net/2020/03/10/fPn637T98lA2wJ4.png) + +### Navigation + +Set navigation corresponding icons and links + +They are: + +- Home +- List + - Archives + - Tags + - Categories +- Custom (You can set any icon and link. When you do not set a custom icon link, it will automatically become a document navigation button to maintain the overall symmetry) + +> By the way, read the documentation first when encountering an issue + +list + +- `type`: archives/categories/tags, it will automatically match this type of title and display the corresponding quantity. Leave blank for other normal links. +- `title`: override default title +- `icon`: custom your icon +- `path`: custom path or url +- `count`: the amount of type, you can set custom text + +```yaml +menu: + home: + path: / + icon: icon-home-4-line + list: + - type: archives + path: /archives/ + icon: icon-archive-line + - type: categories + path: /categories/ + icon: icon-folder-2-line + - type: tags + path: /tags/ + icon: icon-price-tag-3-line + # - path: https://www.yunyoujun.cn + # icon: icon-cloud-line + # count: guess it + custom: + title: Document + path: https://yun.yunyoujun.cn + icon: icon-settings-line +``` + +### Page Link + +At the bottom of the sidebar, add some eye-catching icon links. + +The icon is larger than [Social Link](#SocialIcon). You can place your page navigation, friend links, etc. + +e.g.: + +> [Theme page](/guide/page.html#友链-links) + +```yaml +pages: + -name: my friends + url: / links / + icon: icon-genderless-line + color: dodgerblue +``` + +If you don't want to put any links, just set the following in `yun.yml`: + +```yaml +pages: +``` + +## Article + +### Home Card + +-`opacity`: customize the transparency of the homepage card, the default is set to `0.8` + +```yaml +post_card: + opacity: 0.8 +``` + +#### Type + +By setting the `type` attribute for an article, you can turn it into another type of card and jump to the link set by `url`. + +e.g.: + +```md +--- +title: xxx +type: bilibili +url: https://www.bilibili.com/video/av8153395/ +--- +``` + +The bilibili icon will appear in front of the article title. Clicking on the title will jump to the corresponding link. + +Currently, the following types are supported by default (Bilibili, Douban, GitHub, NetEase Cloud Music, WeChat Official Account, Weibo, Yuque, Twitter, Zhihu, and Outer Links): + +```yaml +types: + link: + color: blue + icon: icon-external-link-line + bilibili: + color: "#FF8EB3" + icon: icon-bilibili-line + douban: + color: "#007722" + icon: icon-douban-line + github: + color: black + icon: icon-github-line + netease-cloud-music: + color: "#C10D0C" + icon: icon-netease-cloud-music-line + notion: + color: black + icon: icon-notion + twitter: + color: "#1da1f2" + icon: icon-twitter-line + wechat: + color: "#1AAD19" + icon: icon-wechat-2-line + weibo: + color: "#E6162D" + icon: icon-weibo-line + yuque: + color: "#25b864" + icon: icon-yuque + zhihu: + color: "#0084FF" + icon: icon-zhihu-line +``` + +You can also set your icon and color for different links in `yun.yml`. + +```yaml +type: + google: + color: xxx + icon: xxx +``` + +When the `type` you specified does not exist in the default nor is customized, the blue extra link icon will be used by default. + +If you want to display information on your external link card, you can write it before ``, it will be displayed as a summary. + +e.g.: + +```md +--- +title: hexo-theme-yun +type: github +url: https://github.com/YunYouJun/hexo-theme-yun +--- + +Hexo theme Yun + + +``` + +#### Hide + +You can add a `hide` attribute at the head of the article to temporarily hide an article. + +- `hide`: + - `index`: only hide in index, display in archives + - `true`: not display in index and archives, but rendered. You can visit the link to view. + +> What? Do you want to not render or display at all? Then why don't you put it in the `_drafts` folder, or simply not submit this article. + +```md +--- +title: xxx +hide: true +# hide: index +sitemap: false +indexing: false +--- +``` + +::: tip + +If you use sitemap, it will display in `sitemap.xml`. You need set `sitemap: false` in front matter to exclude it. + +> [excluding-posts | hexo-generator-sitemap](https://github.com/hexojs/hexo-generator-sitemap#excluding-posts) + +If you use local-search, it will show in `search.xml`. You need set `indexing: false` in front matter to exclude it. + +> [exclude-indexing | hexo-generator-search](https://github.com/wzpan/hexo-generator-search#exclude-indexing) + +::: + +### Information + +- `item_text`: whether to display text (for example: posted on, updated on. If disabled, it will only display icon and time) +- `created_at`: whether to show the creation time +- `updated_at`: whether to show updated time +- `categories`: whether to display categories +- `tags`: whether to display tags + +```yaml +post_meta: + item_text: false + created_at: true + updated_at: true + categories: true + tags: true +``` + +### Table of Contents + +As long as you follow [Markdown syntax](https://segmentfault.com/markdown), the directory will be automatically generated! + +::: tip + +An HTML page with good SEO has and should have only one `h1` as the first level heading. +This theme uses the `title` you set as the first-level title by default. +In the content of the following article, you should only start using the secondary heading. + +```md +--- +title: Level 1 Heading +--- + +## Level 2 Heading +``` + +::: + +> No one will disable this feature, lol + +- `list_number`:Displays list number +- `max_depth`: Maximum heading depth of generated toc +- `min_depth`: Minimum heading depth of generated toc +- `placeholder`: Display Text when toc is empty. +- `collapse`: Whether to collapse the directory (folded by default, that is, the secondary directory is hidden, and only expanded when it is rolled to the relevant position) + +```yaml +toc: + list_number: true + max_depth: 6 + min_depth: 1 + placeholder: Sorry, it is empty. + collapse: false +``` + +> [Helpers | Hexo](https://hexo.io/docs/helpers#toc) + +### Edit Link + +If enabled, an edit icon will be displayed next to the article page title. +Click to jump to the editing page. + +- `url`: the address of the article (you can refer to the default link when setting your warehouse jump link) + +If I use `GitHub` as the hosting warehouse for the blog, the warehouse name is `yunyoujun.github.io`, under the `hexo` branch, in the `source` folder, +where my link will be . + +```yaml +post_edit: + enable: true + url: https://github.com/YunYouJun/yunyoujun.github.io/tree/hexo/source/ +``` + +### Code Highlighting + +Set code highlight + +Due to performance and positioning issues, and [Hexo 5.0](https://blog.skk.moe/post/hexo-5/) has native support for prism, this topic is more recommended to use [prismjs](https://github.com/PrismJS/prism) instead of `highlight.js`. + +> Please upgrade hexo to 5.0.0. `npm install hexo@latest` + +PrismJS is a lightweight code highlighting library. Compared with highlight.js, prismjs can be executed in the Node.js environment (that is, code highlighting can be performed when Hexo generates a page). + +We can quickly switch themes through the CDN. This theme also supports setting different code highlight themes for light and dark modes. + +> Languages ​​currently supported by Prism: + +Configure in `_config.yml` in the working directory of Hexo (must be upgraded to version 5.0 or higher): + +```yaml +# disable highlight +highlight: + enable: false +# enable prism +prismjs: + enable: true + preprocess: true + line_number: false + tab_replace: "" +``` + +In `yun.yml`: + +```yaml +codeblock: + prismjs: + light: default + dark: tomorrow +``` + +> It is recommended to close the line number, [here](https://highlightjs.readthedocs.io/en/latest/line-numbers.html) is the where the author wrote why highlight does not support line numbers. +> After hexo-prism-plugin enables the line number, there will be some inconsistencies in the theme style. +> It doesn't matter if the line number exists. When it is removed, some space can be saved. For example, some codes that originally required scroll bars can be completely displayed after being removed. + +### Copyright + +Set the shared copyright of your article + +[CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en) is used by default. + +> [About Licenses](<(https://creativecommons.org/licenses/)>) + +- `license`: set certificate (by | by-nc | by-nc-nd | by-nc-sa | by-nd | by-sa | zero) +- `language`: set language (deed.zh | deed.fr | deed.de) +- `post`: displayed at the end of each post +- `clipboard`: Append copyright information to the clipboard + +```yaml +creative_commons: + license: by-nc-sa + post: true + language: deed.zh + clipboard: false +``` + +> Please set your `url` in `_config.yml` in the Hexo working directory. +> +> [Configuration | Hexo](https://hexo.io/docs/configuration.html#URL) + +```yaml +# URL +## If your site is put in a subdirectory, set url as 'https://yoursite.com/child' and root as '/child/' +url: https://www.yunyoujun.cn +``` + +### Image Lazy Loading + +Enable by default, it will add `loading ="lazy"` attribute to the Markdown image `img`. + +> [ loading](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/img#attr-loading) +> There are still many browsers that do not support this feature [Can I use loading?](Https://caniuse.com/#search=loading) + +```yaml +lazyload: + enable: true +``` + +## Reward + +After enabled, a donating button will be displayed at the end of each article `post`. (The `page` is not displayed by default, you need to set `reward: true` to force it to open.) + +- `enable`: enable rewards +- `icon`: reward icon +- `comment`: show what you want to say under the reward button +- `url`: your reward link (when you enable the reward link, it will automatically jump to your external link instead of expanding the QR code) +- `methods`: Array, the methods of reward + +### QR Code for Reward + +QQ, WeChat, and Alipay reward icons are supported by default, and `color` is a custom icon color. + +- `name`: donating method +- `path`: image path +- `color`: icon color +- `icon`: icon name + +You can override it in `yun.yml`. + +```yaml +reward: + enable: true + icon: icon-hand-coin-line + comment: I'm so cute. Please give me money. + # url: https://github.com/YunYouJun/yunyoujun.github.io/issues/96 + methods: + - name: 支付宝 + path: https://cdn.jsdelivr.net/gh/YunYouJun/cdn/img/donate/alipay-qrcode.jpg + color: "#00A3EE" + icon: icon-alipay-line + - name: QQ 支付 + path: https://cdn.jsdelivr.net/gh/YunYouJun/cdn/img/donate/qqpay-qrcode.png + color: "#12B7F5" + icon: icon-qq-line + - name: 微信支付 + path: https://cdn.jsdelivr.net/gh/YunYouJun/cdn/img/donate/wechatpay-qrcode.jpg + color: "#2DC100" + icon: icon-wechat-pay-line +``` + +You can also set whether to enable rewards at the top of an article. + +```yaml +reward: true +# reward: false +``` + +## Footer + +::: tip +The following configurations are written under the `footer` field. (Only a option called `footer`) +Such as: + +```yaml +footer: + since: 1997 + icon: + name: icon-cloud-line + animated: true + color: "#0078E7" +``` + +::: + +### Starting Year + +```yaml +footer: + since: 2016 +``` + +### Icon + +The icon between the year and the name. + +- `name`: icon name (i.e. `class`) +- `animated`: whether to enable animation +- `color`: icon color + +```yaml +footer: + icon: + name: icon-cloud-line + animated: true + color: "#0078E7" +``` + +### Driver + +Show the names and versions of the currently used blog framework, Hexo, and the theme Yun with pride. + +For example: `Driven by Hexo v4.2.0 | Theme-Yun v0.0.2`. + +Let more people know Hexo and the theme Yun, which is conducive to the further development of the open-source community. + +- `enable`: Enable +- `version`: Display version + +```yaml +footer: +powered: + enable: true +``` + +### Run Time + +Disabled by default. + +`This blog has been running 442 days, 19 hours, 28 minutes and 40 seconds (● '◡' ●)` + +```yaml +footer: +live_time: + enable: false + prefix: This blog has been run cutely + suffix: (● '◡' ●) + start_time: "2019-04-12T00: 00: 00" +``` + +### Custom Text + +`custom_text` is a custom footer and can contain HTML. +For example, sometimes it can use other service providers to host pages. + +```yaml +footer: +custom_text: Hosted by Coding Pages +``` + +## Say + +Randomly display a sentence on the homepage of the website ~~eighth-grade syndrome. (By default, [hitokoto](https://hitokoto.cn/) is used as the API) + +- `enable`: whether to enable hitokoto +- `api`: Remote JSON API +- `src`: the called js file, it is best not to modify it (you can also write it yourself according to its structure to load the desired JSON format.) +- `hitokoto.enable`: Whether to enable [hitokoto](https://hitokoto.cn/), when you enable hitokoto, it will override `say.api` by default +- `hitokoto.api`: You can refer to [Statement Interface | hitokoto](https://developer.hitokoto.cn/sentence/) to use the koto API according to your thoughts + +```yaml +say: + enable: true + api: https://cdn.jsdelivr.net/gh/ElpsyCN/say@gh-pages/sentences.json + src: /js/say.js + # https://developer.hitokoto.cn/sentence/ + hitokoto: + enable: true + api: https://v1.hitokoto.cn +``` + +When you close hitokoto, the data at `say.api` will be used by default. + +> [say.elpsy.cn](https://say.elpsy.cn) is where I have stored my eighthgrade syndrome hitokoto collections. = =, automatically export JSON for pulling. + +### Customize + +You can also use custom sentences. + +Create a new `data/sentences.json` under the `source` folder in the root directory. (Note that `data` is not `_data`, or you can also create another folder.) + +The format is as follows: + +```json +[ + { + "content": "Hello, World!", + "author": "Brian Kernighan", + "from": "The C Programming Language" + }, + { + "content": "The so-called daily life we ​​spend day by day may actually be a continuous miracle.", + "from": "Daily" + }, + { + "content": "Yeah, what I love is neither the stars nor the galaxy.", + "author": "YunYouJun", + "from": "yunyoujun.cn" + }, + { + "content": "Vague thunder, hazy sky, but hope the wind and rain will keep you here", + "from": "Wan Ye Ji · 雷神短歌" + } +] +``` + +Then set `say.api` to `/data/sentences.json`, and close it. + +i.e.: + +```yaml +say: + enable: true + api: /data/sentences.json + src: /js/say.js + hitokoto: + enable: false +``` + +## Special + +### Mourn + +On the designated day of the year, the gray mourning mode is enabled. + +- `enable`: Disabled by default. + +> On April 4, the nation mourned. +> In order to express the deep condolences of the people of all ethnic groups in the country in the fight against the Coronavirus Pandemic, at the expense of martyrs and deceased compatriots, the State Council issued an announcement and decided to hold a national mourning event on April 4, 2020. + +```yaml +mourn: + enable: true + days: -"4-4" +``` + +## Custom Style + +Compared with the introduction of `head`, you can write a `stylus` file here, use the existing variables of the theme, and compile it into `hexo-theme-yun.css`. + +> Create a new `source/_data/style` folder, and then create a new `xxx.styl` to start writing your custom style. + +For example, import all the `.styl` files under your `source/_data/style` in the following way. + +```yaml +custom: + style: source/_data/style/* +``` + +## More Configuration + +You can directly view the files and relative comments in[themes/yun/\_config.yml](https://github.com/YunYouJun/hexo-theme-yun/blob/master/_config.yml). + +Or refer to the custom configuration of my blog [source/\_data/yun.yml](https://github.com/YunYouJun/yunyoujun.github.io/blob/hexo/source/_data/yun.yml). diff --git a/themes/yun/docs/en/guide/faq.md b/themes/yun/docs/en/guide/faq.md new file mode 100644 index 0000000..74d4d0d --- /dev/null +++ b/themes/yun/docs/en/guide/faq.md @@ -0,0 +1,62 @@ +# FAQ + +::: tip + +- Only related to development. + ::: + +Questions and suggestions are welcome at [Issue](https://github.com/YunYouJun/hexo-theme-yun/issues). + +You can also join [QQ Group](https://shang.qq.com/wpa/qunwpa?idkey=3bd19a05aaccb2b60c396295c8617b3a9e667821a495e8cd7e1698ff95ab61c6) (389401003) for feedback and discussion. + +> If it is a general problem (such as BUG feedback, new feature suggestions), it is best to give feedback in the Issue, so that other people can participate in the discussion and reduce duplication. + +--- + +## Self-checking Common Problem Solution + +Check if the file or warehouse name is right. + +Check if the `url` under `_config.yml` in the `Hexo` working directory is set correctly. (This part is automatically generated when Hexo is initialized) + +```yaml +# If your site is put in a subdirectory +# set url as 'https://yoursite.com/child' and root as '/child/' +url: https://www.yunyoujun.cn +root: / +``` + +Check whether the theme configurations are done in the `yun.yml` file and has been saved. +Check whether the following steps have been performed: + +- `hexo clean`: clear the local cache +- `hexo g`: generate a new static file +- `hexo s`: local viewing effect (if normal, use `hexo d` to redeploy) + +Check whether the local browser cache have been forcibly refreshed (Windows: `Ctrl + F5`, Mac: `Shift + Cmd + R`). + +Check if it is the latest version. + +If you still have problems, you can push your project code as a Hexo branch to GitHub. + +> [Associate with remote warehouse](https://www.yunyoujun.cn/share/how-to-build-your-site/#与远程仓库建立关联) + +Use the GitHub source file address to ask questions in the group chat (389401003), or initiate [ISSUE](https://github.com/YunYouJun/hexo-theme-yun/issues). + +## `hexo server` :The article only renders part of the content + +In the process of developing the theme, I found that only a part of a long article can be rendered, and the second half cannot be displayed normally. +At first, I thought it was a problem of `hexo-renderer-pug`. After a day of tossing around, I finally discovered that it seemed to be a problem of `hexo-browsersync` during development. + +Related Issue: [Problem with long pages](https://github.com/hexojs/hexo-browsersync/issues/15) + +### Temporary Solution + +Set the following in the root directory of `_config.yml` + +```yaml +server: +  compress: true +``` + +> diff --git a/themes/yun/docs/en/guide/icon.md b/themes/yun/docs/en/guide/icon.md new file mode 100644 index 0000000..baebb15 --- /dev/null +++ b/themes/yun/docs/en/guide/icon.md @@ -0,0 +1,65 @@ +# Icons + +The default icon used by the current theme (corresponding to the `cdn.js.async` in the file [`_config.yml`](https://github.com/YunYouJun/hexo-theme-yun/blob/dev/_config.yml#L277) .iconfont` link) + +Most of the icons are taken from [Remix Icon](https://remixicon.com/) and keep their original names. + +> Only the most commonly used icons are provided by default, which is conducive to satisfying the use of the premise and reducing the loaded resources. If you want to use more icons, it is recommended to go to [iconfont](https://www.iconfont.cn/) to customize your icon set. It is introduced in [head](/guide/config.html#head-head resources). + +When writing your icon name in `_config,yml`, remember to prefix it with `icon-`. This distinguishes iconfont’s SVG icons from other font icons. + +For Example: + +```yaml +icon: icon-github-line +``` + +## Auxiliary icon + +> Universal UI auxiliary icons + + + +## Ideogram icon + +> Usually there are corresponding objects in reality + + + +## LOGO + + + +
+ Copy Sucessfully. +
+ + + + + diff --git a/themes/yun/docs/en/guide/page.md b/themes/yun/docs/en/guide/page.md new file mode 100644 index 0000000..9617039 --- /dev/null +++ b/themes/yun/docs/en/guide/page.md @@ -0,0 +1,394 @@ + + +# Theme page + +This theme supports and uses the following page types by default. + +## Article + +### Image references + +You can annotate the images as follows. + +```md +![Audits-Lighthouse](https://i.loli.net/2020/03/08/DhfLu5yngb7NZE2.png) _Google Chrome Audits-Lighthouse detection score_ +``` + +![img-caption-example.png](https://i.loli.net/2020/03/19/2bOIPC3Wv4Gxetm.png) + +## Tags + +If you have not installed `hexo-generator-tag`, please enter `npm install hexo-generator-tag` in the terminal. + +Create a new `tags` page, and enter the following in the root directory of the blog: + +```sh +hexo new page tags +``` + +Modify `Front Matter` of `source/tags/index.md` + +```yaml {5} +--- +title: tag +date: 2017-10-09 19:11:58 +comments: false +type: tags +--- + +``` + +## Categories + +If you have not installed `hexo-generator-category`, please enter `npm install hexo-generator-category` in the terminal. + +Create a new `categories` page, and enter the following in the root directory of the blog: + +```sh +hexo new page categories +``` + +Modify `Front Matter` of `source/categories/index.md` + +```yaml {5} +--- +title: Category +date: 2017-10-12 10:47:16 +comments: false +type: categories +--- + +``` + +## Archives + +Hexo support by default. + +It is rewritten in the form of a timeline. + +> Example: + +## About + +### about you + +Click on your avatar or name will enter the about page by default. + +You will need to create your about page. + +```sh +hexo new page about +``` + +Then start to introduce yourself ~ + +### About the site + +Click on the site name on the sidebar to enter the About Site page. + +You can introduce your site by creating a new `site.md` in the `source/about` folder. + +## 404 + +You will need to create a new 404 page first. You can do it by creating a new `404.md` directly under the `source` directory. + +```md +--- +layout: 404 +title: Nothing +permalink: /404.html +reward: false +--- +``` + +Your custom 404 page will only be displayed after you deploy it to GitHub Pages. + +Example: + +You can also directly visit `/404.html` to see the effect locally. + +> [Creating a custom 404 page for your GitHub Pages site](https://help.github.com/en/github/working-with-github-pages/creating-a-custom-404-page-for-your-github-pages-site) + +## Friend links + +New Friends Link Page + +```sh +hexo new page links +``` + +Go to `source/links/index.md` and set the`links` field. + +- `url`: blog link +- `avatar`: avatar image link +- `name`: their name +- `blog`: site name +- `desc`: one-sentence description +- `color`: the default is gray `gray` + +You can enter [My Friends](https://www.yunyoujun.cn/links/) to see the effect + +- `tip`: a text reminder when FriendChain is not loaded successfully and will be removed after loading. (This only takes effect after successfully loaded FriendChain via JSON.) + +```yaml +--- +layout: links +title: My friends +date: 2019-06-21 13:06:06 +keywords: link +description: Friends of Yunyou +comments: true +links: +  - url: https://yunyoujun.cn +    avatar: https://cdn.jsdelivr.net/gh/YunYouJun/yunyoujun.github.io/images/avatar.jpg +    name: Yunyou Jun +    blog: Yunyoujun's blog +    desc: All at sea. +    color: "#0078e7" # representative color +    email: # not required +placeholder: I haven't thought about what to say # The default description of YouChain +tip: Friendchain loading in progress ~ If it fails, please refresh and try again ~ +--- + +``` + +Let the friend chain display on the sidebar [sidebar-page link](/guide/config.html#pagelink) + +### Random Friend Link + +To enable a random friend chain, you must change it to an external JSON loading method. + +For example: + +You can refer to my [YunYouJun/friends](https://github.com/YunYouJun/friends) to automatically generate the JSON data format of your friend chain. +(Of course, you can also store it locally manually.) + +- `random`: random friend chain order, not enabled by default + +```yaml +layout: links +title: My friends +date: 2019-06-21 13:06:06 +keywords: link +description: Friends of Yunyou +comments: true +links: https://cdn.jsdelivr.net/gh/YunYouJun/friends@gh-pages/links.json +random: true +``` + +> Note: Using jsdelivr may be delayed due to the CDN. +> You can also use a custom domain name as I did. + +## Girls + +Record my favorite girls + +Sample page: + +Set to enable first. (I know most people may not use this feature, so it is set to disable by default.) + +> When disabled, the CSS file of the page will not be packed into the final CSS file. So no need to worry about this if the feature will affect the loading speed. + +```yaml +girls: +  enable: true +``` + +```sh +hexo new page girls +``` + +Enter `source/girls/index.md` + +```yaml +--- +layout: girls +title: kawaii girls +banner: ranked in unintentional order +girls: +  -name: name +    avatar: avatar image link +    from: the project she's from +    url: character encyclopedia link +    reason: the reason for crushing +--- + +``` + +Please refer to my [configuration](https://github.com/YunYouJun/yunyoujun.github.io/blob/hexo/source/girls/index.md). + +> If you want it to be displayed on the sidebar, you also need to configure the navigation [sidebar-pagelink](/guide/config.html#页面链接) + +## Albums + +There is an album homepage, place multiple albums, click to enter the album to view more photos. + +In `yun.yml`: + +```yaml +albums: + enable: true +``` + +[Albums Example](https://www.yunyoujun.cn/albums/) + +[Config Example](https://github.com/YunYouJun/yunyoujun.github.io/blob/hexo/source/albums/index.md) + +### albums + +The album collection is the navigation page of the album, you can place multiple albums here. + +New page for albums: + +```sh +hexo new page albums +``` + +Enter `source/albums/index.md`, set `type`, and add album link, cover, etc. + +- `caption`: album title +- url`: album link` +- cover`: album cover` +- `desc`: album description + +```yaml {2} +--- +type: albums +albums: + - caption: 夕阳西下 + url: /albums/sunset.html + cover: https://interactive-examples.mdn.mozilla.net/media/examples/elephant-660-480.jpg + desc: 我想起那天夕阳下的奔跑 +--- +``` + +### Gallery + +[Gallery Example](https://www.yunyoujun.cn/albums/sunset.html) + +The photo album page is where you actually store your photos. + +> Use [lightgallery.js](https://github.com/sachinchoolur/lightgallery.js/), the library will only be loaded on the album page. + +New page. + +You just need to create the md file in the newly created albums folder above, for example, create a new sunset.md. + +Or create new via command line: + +```sh +hexo new page --path albums/sunset "夕阳" +``` + +Enter the `sunset.md` file and modify it. + +> Note: This is `layout` instead of `type`. + +::: tip +You can also set `gallery_password` to encrypt the album. (Remember to set your repo as private.) + +It is not directly named `password` to prevent conflicts with [hexo-blog-encrypt](https://github.com/MikeCoder/hexo-blog-encrypt) plugin keyword `password`. + +> Because [crypto-js](https://github.com/brix/crypto-js) is used, you also need `npm install crypto-js`. + +Test page: +Test password: test + +> If you find that the album cannot be decrypted normally when PJAX is turned on in `hexo s`, don't worry, this is that when Hexo is used as a server, the link is re-encrypted again, and there is no problem when generating static files for deployment. + +::: + +```yaml {5} +--- +title: Sunset +date: 2020-04-18 16:27:24 +updated: 2020-04-18 16:27:24 +layout: gallery +password: test +photos: + - caption: me + src: https://interactive-examples.mdn.mozilla.net/media/examples/elephant-660-480.jpg + desc: I think of running under the sunset that day. + - caption: Remember + src: https://i.picsum.photos/id/198/510/300.jpg + desc: That is my lost youth +--- + +``` + +> Why use album collection as `albums` and `gallery` as album? +> [What is the Difference Between Albums vs Galleries in WordPress](https://enviragallery.com/what-is-the-difference-between-albums-vs-galleries-in-wordpress/) + +## Slides + +> Use [reveal.js](https://revealjs.com/) to achieve, see [document](https://revealjs.com/markdown/) for more information. + +You can use Markdown to mix Html to quickly write your slides. + +Create a new `slides/test.md` under `source`. + +Or command: + +```sh +hexo new page --path slides/test "Test Slides" +``` + +Enter `test.md`, modify the header as follows (follow the corresponding syntax to start editing your Slides file) + +```yaml +--- +title: Color Dust +date: 2020-06-23 16:27:24 +updated: 2020-06-23 16:27:24 +layout: slide +slide: + theme: white + config: + history: true + mouseWheel: true +--- + +``` + +Then start writing your Slides file with Markdown directly below. + +```md +## Slide 1 + +## A paragraph with some text and a [link](http://hakim.se). + +## Slide 2 + +--- + +## Slide 3 +``` + +An example of my Slides: + +- [color-dust.md](https://github.com/YunYouJun/yunyoujun.github.io/blob/hexo/source/slides/color-dust.md) +- [Preview](https://www.yunyoujun.cn/slides/color-dust.html#/) + +### General configuration + +The default horizontal page separator is `---`, the vertical page separator is `~~`, and the start keyword of the note is `Note:`. + +> Press S to turn on the speaker mode. + +The theme is `white`, [more theme names](https://revealjs.com/themes/). + +`config` corresponds to [More Configuration](https://revealjs.com/config/). + +```yaml +slide: + separator: --- + separator_vertical: "~~" + data_separator_notes: "^Note:" + theme: white + config: + history: true + mouseWheel: false +``` + +> As for the list of Slides, create your own `source/slides/index.md` and list it. + diff --git a/themes/yun/docs/en/guide/third-party-support.md b/themes/yun/docs/en/guide/third-party-support.md new file mode 100644 index 0000000..ef51b33 --- /dev/null +++ b/themes/yun/docs/en/guide/third-party-support.md @@ -0,0 +1,342 @@ +# Third-party support + +All configuration is done by default in the `source/_data /yun.yml` file. + +The difference from the additional packagfe support, here is mainly to use the service implementation provided by third-party service providers. + +## Comment + +- `enable`: enabled by default (representing the overall comment block, you must keep it enabled when you enable any type of comment system) +- `tips`: Tips above the comment, you can use the form of an array to modify it to anything (if you don't want to display it, you can leave it blank) + +```yaml +comment: + enable: true + tips: + - If you want to get a reminder to reply in time, it is recommended to jump to the GitHub Issues comment. + - If there is no issue of this article, you can create a new one using the Comment template. +``` + +Regarding the comment system, I have briefly made some comparisons, hoping to serve as a reference. + +> [My View on the Third Party Comment System](https://www.yunyoujun.cn/share/third-party-comment-system/) + +### GitHub Issue + +It also has a built-in link button for redirecting related issues and instructions on how to use GitHub Issue to comment. +It can be turned on or off by itself. + +- `filters`: search rules for GitHub Issues, see [searching-issues-and-pull-requests](https://help.github.com/en/github/searching-for-information-on-github/searching -issues-and-pull-requests). + +```yaml +github_issues: + enable: true + username: YunYouJun + repository: yunyoujun.github.io + filters: is:issue +``` + +Set up a Comment template for GitHub Issues in the project `Settings -> Options -> Features -> Issues -> Set up templates`. The first person to create a comment can create an Issue based on this template. + +You can also refer to my [comment.md](https://github.com/YunYouJun/yunyoujun.github.io/blob/hexo/.github/ISSUE_TEMPLATE/comment.md). + +### [Disqus](https://disqus.com/) + +Disqus can be said to be the most popular third-party comment system in the world, but its shortcomings in China are also obvious, requiring scientific Internet access. + +- `shortname`: change to your username +- `count`: Whether to enable comment counting (the number of comments that will be displayed in the article) + +```yaml +disqus: + enable: true + shortname: yunyoujun + count: false +``` + +#### [DisqusJS](https://github.com/SukkaW/DisqusJS) + +> Pure front-end, ultra-lightweight "Comment Basic Mode" implementation: Use Disqus API to render comment lists + +Compared with the natively integrated Disqus, the pain point to solve is that where scientific Internet access is required, a basic comment list can be rendered through the Disqus API. +Let users who can't get online scientifically see comments directly. + +> Of course, to really comment, you still need to go online scientifically. + +- `apikey`: Required, please refer to DisqusJS document [Configure Disqus Application](https://github.com/SukkaW/DisqusJS#%E9%85%8D%E7%BD%AE-disqus-application) + +```yaml +disqusjs: + enable: false + shortname: yunyoujun + count: false + apikey: +``` + +### [utterances](https://utteranc.es/) + +A lightweight comments widget built on GitHub issues. Use GitHub issues for blog comments, wiki pages and more! + +More convenient, less authority. (You do not need gitalk.) + +```yaml +utterances: + enable: false + repo: owner/repo + issue-term: pathname + # label: comment + theme: github-light +``` + +### Valine + +Refer to [Valine](https://valine.js.org) official document for configuration. The language defaults to follow Hexo's language setting. + +That is `_config.yml` in the root directory of Hexo. (Note that it is different from the theme's `_config.yml`) + +```yaml +language: zh-CN +``` + +In fact, you only need to refer to the page below to get the appId and appKey required for configuration. (No need to install, the theme uses CDN by default. The template is also built-in.) + +> [Quick Start-Get APP ID and APP Key](https://valine.js.org/quickstart.html#%E8%8E%B7%E5%8F%96APP-ID-%E5%92%8C-APP -Key) + +- `visitor`: Article reading statistics (please do not enable it at the same time with [不蒜子](#busuanzi)) + +> [More configuration items](https://valine.js.org/configuration.html) is written in `yun.yml`. + +```yaml +valine: + enable: false + appId: # your leancloud application appid + appKey: # your leancloud application appkey + placeholder: Just go go # comment box placeholder + avatar: # gravatar style + meta: -nick + -mail + -link + pageSize: 10 # pagination size + # lang: zh-CN + # visitor: false + # highlight: true + # recordIP: false + # serverURLs: + # Emoji See: https://valine.js.org/emoji.html + # emojiCDN: //i0.hdslb.com/bfs/emote/ + # emojiMaps: + # tv_doge: 6ea59c827c414b4a2955fe79e0f6fd3dcd515e24.png + # more... + # enableQQ: false + # requiredFields: + #-nick + #-mail +``` + +For Valine's extensions and enhancements, please refer to [Valine-Admin](https://github.com/DesertsP/Valine-Admin), you can send email reminders to specific comments. + +> pjax: [How do I use it on a page with pjax-Issue #138](https://github.com/xCss/Valine/issues/138) + +### MiniValine + +A simple and minimalist comment system based on Leancloud. + +- GitHub: [MiniValine](https://github.com/MiniValine/MiniValine) +- Demo: + +```yaml +minivaline: + enable: false + appId: # Your leancloud application appid + appKey: # Your leancloud application appkey + placeholder: Write a Comment # Comment box placeholder + adminEmailMd5: # The MD5 of Admin Email to show Admin Flag. + math: true # Support MathJax. + md: true # Support Markdown. + # MiniValine's display language depends on user's browser or system environment + # If you want everyone visiting your site to see a uniform language, you can set a force language value + # Available values: en | zh-CN | (and many more) + # More i18n info: https://github.com/MiniValine/minivaline-i18n + lang: +``` + +### LiveRe + +[LiveRe 来比力](https://livere.com/) is a comment system from South Korea that supports multiple SNS account connections (QQ, WeChat, GitHub, Baidu, Weibo, Douban, Twitter, etc.). +The advantage is that **no** need to go online scientifically. (I don’t know why, but it’s not warm.) + +> Note: After trying repeatedly, I found that it is not compatible with PJAX. Although it is indeed possible to display different comments in different articles, for some reason, the article link in the background notification still comes from the same article. + +- `uid`: `data-uid` field in the installation code + +```yaml +livere: + enable: true + uid: +``` + +## Search + +### Engine search + +Jump search engine to search your website content + +You can search by `site: yunyoujun.cn what you want to search` + +🌰: + +- `enable`: enable the search engine (because the other two types of search require additional configuration, the engine search is enabled by default) +- `href`: search engine prefix +- `domain`: the domain name of your website + +```yaml +engine_search: +  enable: true +  href: "https://www.google.com/search?q=site:" +  domain: yunyoujun.cn +``` + +### Local search + +You need to install [hexo-generator-search](https://github.com/wzpan/hexo-generator-search) first, and refer to the configuration document. + +This theme is implemented using native JavaScript, without jQuery dependency. + +> The format only supports XML + +::: tip +Before enabling it, remember to turn off the default engine search. + +```yaml +engine_search: +  enable: false +``` + +::: + +```yaml +# search +# https://github.com/wzpan/hexo-generator-search +local_search: +  enable: true +  src: /js/search/local-search.js +``` + +> If you find that the local is normal, click the search button after deployment but it will jump to the bottom of the page, it may be simply a cache problem. + +### Algolia + +[Algolia](https://www.algolia.com/) is a third-party search service provider. (For more information, please check the official website, or please search the engine.) + +You need to install [hexo-algolia](https://github.com/oncletom/hexo-algolia) or [hexo-algoliasearch](https://github.com/LouisBarranqueiro/hexo-algoliasearch) first The documentation configures accordingly. + +Turn it on again. + +```yaml +algolia_search: +  enable: true +  src: /js/search/algolia-search.js +  hits: +    per_page: 10 # the number of search results per page +``` + +## Analysis Statistics + +### Google Analytics + +Go to [Google Analytics](https://analytics.google.com/) to get your ID. (Science Online) + +- `enable`: whether to enable + +```yaml +google_analytics: +  enable: true +  id: UA-XXXXXXXXX-X +``` + +### busuanzi + +No garlic is a light and minimal website counter. + +Go to [不蒜子](https://busuanzi.ibruce.info/) to view related information. + +Instructions for use: + +> Please do not enable it at the same time as [Valine] (# valine) 's `visitor`. + +- `site_uv`: Whether to display the unique visitor of the site user (\_icon is the corresponding icon, the same applies below) +- `site_pv`: whether to display site page views Page View +- `page_pv`: whether to display page views of article pages + +```yaml +busuanzi: +  enable: false +  site_uv: true +  site_uv_icon: icon-user-line +  site_pv: true +  site_pv_icon: icon-eye-line +  page_pv: true +  page_pv_icon: icon-eye-line +``` + +## Advertising + +### Google Advertising + +Go to [Google Adsense](https://www.google.com/adsense) to get your client id. + +```yaml +google_adsense: +  enable: false +  client: ca-pub-2245427233262012 +``` + +## SEO + +### [Google Search Console](https://search.google.com/search-console/) + +This topic does not add configuration options to the verification site for other topics like next. + +The reasons are as follows: + +Google provides five authentication methods for users. + +- Domain name provider: add TXT resolution of DNS. (This may be the most troublesome (in fact, it is not troublesome), but it is also the one that has the least impact on the site itself.) It is also the method I used before. +- HTML file: Upload the HTML file to your website. (You only need to download and copy it to the `source` folder in the Hexo working directory. Set `skip_render`, see below.) Is also one of the recommended ways. +- HTML tags: Add meta tags to the homepage of your website. This is also the method used by most themes to implement site verification through configuration, but I do not recommend this approach, so it is not built into it. + - The reason why I did not add this method is because this meta part of the information is only useful for verifying the Google site, and it is completely redundant for users. + - While Hexo is a static site generator, this method of verification means that all static file headers throughout the site will carry this information. + - For example, more than one hundred articles plus pagination and tab pages, etc., is equivalent to adding hundreds of lines of code out of thin air. Although its impact is minimal, it is completely unnecessary for users and webmasters. +- Google Analytics: If you have applied for and used Google Analytics, all you have to do is click a verification button. (Best way) +- Google Tag Manager: Use your Google Tag Manager account + +If you do n’t use Google Analytics, `Domain name provider` and `HTML file` are probably the best. It does n’t require intrusive changes to the theme, nor does it increase the static file size too much. + +::: tip + +Note that the files provided by Google are now `html` files, which are placed directly under the `source` folder and will be compiled by Hexo. +So you also need to find the `skip_render` selection in the site configuration file `_config.yml` and add a file for skip rendering. + +Examples: + +```yaml +skip_render: +  - README.md +  - googlexxxxxxxxxxxxxxx.html +``` + +::: + +## Tag Manager + +### [Google Tag Manager](https://tagmanager.google.com/) + +> Google Tag Manager is a Tag Management System (TMS) that can help you quickly and easily update the tracking code and related code segments (collectively referred to as "codes") on your website or mobile application. After adding a small piece of Tag Manager code to your project, you can safely and easily deploy Google Analytics and measurement code configuration through the web interface. + +If you really need to use it, then you will naturally understand what it does. + +```yaml +google_tagmanager: + enable: true + id: GTM-XXXXXXX +``` diff --git a/themes/yun/docs/guide/README.md b/themes/yun/docs/guide/README.md new file mode 100644 index 0000000..b9f8978 --- /dev/null +++ b/themes/yun/docs/guide/README.md @@ -0,0 +1,185 @@ +# 使用指南 + +本主题为 Hexo 主题,请确保您已了解 Hexo 的基本使用方式。 + +你也可以参考我写的新手教程 [教你如何从零开始搭建一个属于自己的网站 - 云游君的小站](https://www.yunyoujun.cn/share/how-to-build-your-site/)。 + +```sh +npm install hexo-cli -g +hexo init your-blog +cd your-blog +npm install +hexo server +``` + +> 更多信息请参见 [Hexo 官网](https://hexo.io/) + +有任何关于本主题的使用问题与建议,可以前往[此处](https://github.com/YunYouJun/hexo-theme-yun/issues)发起 Issue。 + +你也可以加入 [QQ 群](https://shang.qq.com/wpa/qunwpa?idkey=3bd19a05aaccb2b60c396295c8617b3a9e667821a495e8cd7e1698ff95ab61c6)(389401003)进行反馈与讨论。 + +- [更新日志](https://github.com/YunYouJun/hexo-theme-yun/releases) + +## 快速开始 + +::: tip 渲染器 +如果您没有 `pug` 与 `stylus` 的渲染器,请先安装: +[hexo-renderer-pug](https://github.com/hexojs/hexo-renderer-pug) +(这个是  Hexo 官方在维护,但是好像没有下面的星多,更新的勤快。) +或[hexo-render-pug](https://github.com/maxknee/hexo-render-pug) +(以及前者尚未支持开发时热更新,后者支持。) +和 [hexo-renderer-stylus](https://github.com/hexojs/hexo-renderer-stylus) + +```sh +npm install hexo-render-pug hexo-renderer-stylus --save +# or +yarn add hexo-render-pug hexo-renderer-stylus +``` + +::: + +### 安装主题 + +进入您的 Hexo 博客根目录,克隆或下载 `hexo-theme-yun` 主题,置于 `themes/yun`。 + +> 你也可以考虑加上 `--depth 1` 的参数来只克隆当前版本(体积更小,速度更快)。 + +```sh +git clone -b master https://github.com/YunYouJun/hexo-theme-yun themes/yun +``` + +> 如果你使用了持续集成,并希望每次构建的版本保持稳定。你可以 fork 本项目,然后克隆你 fork 的项目。 +> +> ```sh +> git clone -b master https://github.com/你的名字/hexo-theme-yun themes/yun +> ``` + +如果你想体验新版 `hexo-theme-yun`。([云游君的小站](https://www.yunyoujun.cn) 将始终使用最新版作为示例。) + +```sh +git clone -b dev https://github.com/YunYouJun/hexo-theme-yun themes/yun +``` + +### 启用主题 + +修改 Hexo 站点配置文件 `_config.yml` + +```sh +# 将主题设置为 hexo-theme-yun +theme: yun +``` + +### 配置主题 + +在 Hexo 工作目录下新建 `source/_data/yun.yml`。(若 `source/_data` 目录不存在,请新建。) + +采用约定大于配置的方式,您仅需在 `yun.yml` 中自定义您想要覆盖的配置,其余将自动与主题默认配置合并。(这样做也更方便日后的升级) + +> 你可以参考我的配置文件 [yun.yml - yunyoujun.github.io](https://github.com/YunYouJun/yunyoujun.github.io/blob/hexo/source/_data/yun.yml),是不是很短。 +> 因为我开启了 `algolia`、`wordcount` 等需要在其他地方安装或额外配置的东西,所以如果你直接复制我的配置,记得删掉 `algolia_search` 和 `wordcount`字段。 + +::: tip +如: + +`avatar` 的完整配置如下 + +```yaml +avatar: + url: /images/avatar.jpg + rounded: true + opacity: 1 +``` + +你可以在 `yun.yml` 中仅定义(当然,全部覆盖也是可以的) + +```yaml +avatar: + url: /images/avatar.jpg +``` + +::: + +### 升级主题 + +如果您是在 `yun.yml` 中进行配置,那么仅需在 Hexo 工作路径中输入以下命令: + +```sh +cd themes/yun +git pull +``` + +::: tip +当主题配置出现不兼容更新时,请参见 [迁移指南](/guide/migrate)。 +::: + +如果您修改了主题的 `themes/yun/_config.yml` 配置文件,那么您升级时可能会遭遇冲突,需要自行调整。 + +::: danger +请最好不要对主题的任何文件进行修改,除非你确认你拥有一定的开发能力或此后将不会对主题进行升级。 +::: + +如果你想对主题进行一些定制,你可以在 `head` 配置项中引入你的资源。 + +> [head 头部资源](/guide/config.html#head-头部资源) + +譬如,你想为网站全局添加一个 Aplayer 播放器挂件。(实际上,现在你可以根据这里的 [配置](/guide/additional-package-support.html#全局音乐播放器) 直接开启全局播放器。) + +这里主要起一个示例作用。 + +> 文章内部播放器,你可以考虑直接使用 [hexo-tag-aplayer](https://github.com/MoePlayer/hexo-tag-aplayer) + +你可以在 Hexo 根目录的 `source/js` 文件夹下新建 `load-aplayer.js` 文件。 + +> 若 `js` 文件夹不存在,请新建。 + +通过 `createElement` 的方式,`append` 到 `body` 容器中。 + +```js +document.addEventListener("DOMContentLoaded", function() { + let apContainer = document.createElement("div"); + apContainer.id = "aplayer"; + document.body.append(apContainer); + const ap = new APlayer({ + container: document.getElementById("aplayer"), + fixed: true, + audio: [ + { + name: "name", + artist: "artist", + url: "url.mp3", + cover: "cover.jpg", + }, + ], + }); +}); +``` + +并在 `yun.yml` 中设置 `head` 选项来引入 css 或 js。 + +```yaml +head: + css: + aplayer: https://cdn.jsdelivr.net/npm/aplayer@1.10.1/dist/APlayer.min.css + js: + defer: + aplayer: https://cdn.jsdelivr.net/npm/aplayer@1.10.1/dist/APlayer.min.js + loadAplayer: /js/load-aplayer.js +``` + +### 自动升级 + +你想要完全自动更新,时刻保持最新主题,可以采用持续集成(如 [GitHub Actions](https://github.com/features/actions), [Travis](https://travis-ci.com/) 等)。 + +你可以参考我的 GitHub Action 配置文件 [gh-pages.yml](https://github.com/YunYouJun/yunyoujun.github.io/blob/hexo/.github/workflows/gh-pages.yml)。(照抄配置,放在对应文件夹下即可,GitHub Actions 为 GitHub 自带的服务。) +若你没有使用 `algolia_search`,请删除 `algolia` 相关部分。 + +> 我采用的是这种做法,但我从良心上并不推荐你也如此,因为这是我自己的主题,自然对潜在的 BUG 拥有一定的容忍度。 +> 时刻保持与仓库版本相同,可能会遇到新引入的 BUG。 +> 当然你愿意当小白鼠的话,可以一试。顺便给咱反馈问题。个人角度上,是十分欢迎的。 + +如果你想要克隆稳定版本的主题,你可以自行 fork,然后修改源项目地址为你 fork 后的项目地址即可。 + +```yaml +run: | + git clone -b dev https://github.com/YunYouJun/hexo-theme-yun.git themes/yun +``` diff --git a/themes/yun/docs/guide/additional-package-support.md b/themes/yun/docs/guide/additional-package-support.md new file mode 100644 index 0000000..d86f294 --- /dev/null +++ b/themes/yun/docs/guide/additional-package-support.md @@ -0,0 +1,383 @@ +# 额外依赖库支持 + +与第三方支持的区别是,此处大部分功能为安装插件或引入 CDN 实现,并由主题进行简单适配。 + +## 字数统计 + +> v0.9.4 使用 [hexo-wordcount](https://github.com/willin/hexo-wordcount) 替代 [hexo-symbols-count-time](https://github.com/theme-next/hexo-symbols-count-time) + +安装 [hexo-wordcount](https://github.com/willin/hexo-wordcount) + +```sh +npm install hexo-wordcount +# or +# yarn add hexo-wordcount +``` + +在配置文件 `source/_data/yun.yml` 中: + +- `count`: 字数统计 +- `time`: 阅读时间 + +```yaml +wordcount: + enable: true + count: true + time: true +``` + +## RSS + +安装 [hexo-generator-feed](https://github.com/hexojs/hexo-generator-feed)。 + +```sh +npm install hexo-generator-feed --save +``` + +配置默认图标为 `icon-rss-line`,如需自定义,进入 `source/_data/yun.yml` 进行配置。 + +可配置在 `yun.yml` 的 `social` 字段里,如: + +```yaml +social: + - name: RSS + link: /atom.xml # config.feed.path + icon: icon-rss-line + color: orange +``` + +更多配置请参见[官方文档](https://github.com/hexojs/hexo-generator-feed)(在 Hexo 工作目录下的 `_config.yml` 中进行)。 + +## 置顶 + +在 Hexo 根目录下运行一下命令,以移除默认索引生成器,并使用具有置顶功能的索引生成器。 + +原插件的置顶功能等了很久还没有合并。[#26](https://github.com/hexojs/hexo-generator-index/pull/26) + +([1.1](https://github.com/hexojs/hexo-generator-index/pull/56) 快了) + +```sh +npm uninstall hexo-generator-index --save +npm install hexo-generator-index-pin-top --save +``` + +> 你可以参见 [hexo-generator-index-pin-top](https://github.com/netcan/hexo-generator-index-pin-top) +> 注意,我发现使用 hexo-generator-index-pin-top 时,根据 `updated` 进行排序的功能将失效。(只能看官方的那个什么时候能合并了。) + +通过设置文章 Front Matter 中的 `top` 属性。 +设置置顶后,文章卡片右上角将出现置顶图标。 + +```md +--- +title: xxx +top: true +--- +``` + +你也可以通过设置权重来实现多篇置顶文章的顺序。 + +```md +--- +title: xxx +top: 1 +--- +``` + +```md +--- +title: xxx +top: 2 +--- +``` + +此时 `top: 2` 的文章将排列在 `top: 1` 的文章上面。 + +::: tip +实际上,你也可以设置根据 `updated` 排序,然后把 `updated` 的日期设置很大来实现置顶效果。 +::: + +## live2d + +其实添加 live2d 并不需要修改主题,也不需要对主题进行配置,它是 Hexo 的插件,你在根目录的 `_config.yml` 中配置即可。 +在这里出现是为了说明一下推荐的设置(简而言之,就是最好使用 CDN 啦)。 + +安装 [hexo-helper-live2d](https://github.com/EYHN/hexo-helper-live2d) + +```sh +npm install --save hexo-helper-live2d +``` + +在 Hexo 根目录的 `_config.yml` 中进行配置: + +> 更多选项含义请参见 [hexo-helper-live2d](https://github.com/EYHN/hexo-helper-live2d) + +```yaml +live2d: + enable: true + # 推荐使用 jsdelivr 的 CDN 来加载 + scriptFrom: jsdelivr + pluginRootPath: live2dw/ + pluginJsPath: lib/ + pluginModelPath: assets/ + tagMode: false + debug: false + model: + # 推荐使用 CDN 来加载模型 + use: https://cdn.jsdelivr.net/npm/live2d-widget-model-wanko@1.0.5/assets/wanko.model.json + display: + position: right + width: 150 + height: 300 + mobile: + show: true + react: + opacity: 0.7 + # dialog: + # # 是否开启对话框 + # enable: true + # # 是否使用一言 + # hitokoto: true +``` + +## 文章短链接 + +将文章链接优化为短链接,需要安装 [hexo-abbrlink](https://github.com/rozbo/hexo-abbrlink) 插件;具体例子 参考 [#39](https://github.com/YunYouJun/hexo-theme-yun/issues/39) + +- 需要额外设置,执行: `npm install hexo-abbrlink --save` 安装插件,由于插件官网前几天更新, 需要额外做一些设置 + +> 在 `hexo/_config.yml` 找到 和 `permalink:` 相关代码片, 修改为如下: + +```yaml +# URL +## If your site is put in a subdirectory, set url as 'http://yoursite.com/child' and root as '/child/' +url: http://yoursite.com +root: / +# permalink: :year/:month/:day/:title/ # 旧的注释掉 +# permalink_defaults: # 旧的注释掉 +permalink: posts/:abbrlink/ +abbrlink: + alg: crc32 #support crc16(default) and crc32 + rep: hex #support dec(default) and hex + drafts: false #(true)Process draft,(false)Do not process draft + # Generate categories from directory-tree + # depth: the max_depth of directory-tree you want to generate, should > 0 + auto_category: + enable: false #默认为 true, 手改改为 false + depth: +``` + +## 标签云(词云) + +在 `yun.yml` 中设置,在标签页中使用彩色词云替代原生标签云。 + +- `enable`: 是否开启 +- `height`: 词云高度 + +```yaml +wordcloud: + enable: true + height: 350 +``` + +## 播放器 + +安装 [hexo-tag-aplayer](https://github.com/MoePlayer/hexo-tag-aplayer) + +```sh +npm install hexo-tag-aplayer +``` + +> 可参见[官方文档](https://github.com/MoePlayer/hexo-tag-aplayer/blob/master/docs/README-zh_cn.md)。 + +推荐的配置(在 Hexo 的根目录下的 `_config.yml` 中): + +```yaml +aplayer: + cdn: https://cdn.jsdelivr.net/npm/aplayer@latest/dist/APlayer.min.js + style_cdn: https://cdn.jsdelivr.net/npm/aplayer@latest/dist/APlayer.min.css + meting: true + meting_cdn: https://cdn.jsdelivr.net/npm/meting@1/dist/Meting.min.js +``` + +::: tip +如果你发现 Aplayer 有时会在无关紧要的文件里也重复引入头文件。记得关闭自动脚本插入。 + +> [重复载入 Aplayer.js 资源脚本问题](https://github.com/MoePlayer/hexo-tag-aplayer/blob/master/docs/README-zh_cn.md#%E9%87%8D%E5%A4%8D%E8%BD%BD%E5%85%A5-aplayerjs-%E8%B5%84%E6%BA%90%E8%84%9A%E6%9C%AC%E9%97%AE%E9%A2%98) + +```yaml +aplayer: + asset_inject: false +``` + +然后在文章头部决定是否开启 `aplayer`: + +```yaml {3} +--- +title: xxx +aplayer: true +--- + +``` + +::: + +插入某首网易云音乐的歌 + +```md +{% meting "497572729" "netease" "song" "theme:#C20C0C" %} +``` + +### 全局音乐播放器 + +你也可以在 `yun.yml` 中设置全局开启。(当你设置了全局的播放器时,可以使用它。) + +- `meting`: 是否开启 [meting](https://github.com/metowolf/MetingJS),决定是否引入 meting 资源。(注意与 `widget` 下的 `meting` 相区分) +- `widget`: 你可以将 `widget.enable` 设置为 `true` 来打开全局播放器。(`aplayer.global` 必须为 `true`) + - `meting.enable`: 此处的 `meting` 控制是否打开全局播放器挂件的 meting。打开时,将加载 `option`;关闭时,将使用自定义的 `audio`。 + - `audio`: 给出了加载自定义音乐的默认参考配置,更多请参见 [官方文档](https://aplayer.js.org/#/home)。 + +更多选项: 参考 [Option | Aplayer](https://aplayer.js.org/#/home?id=options) + +开启 [pjax](#pjax),可以实现切换页面时,不中断音乐播放器。(为了正确加载音乐播放器,当切换到的文章页面也存在音乐播放器时,`Meting` 会重新加载。) + +```yaml +aplayer: + global: false + meting: true + # https://github.com/metowolf/MetingJS/tree/v1.2#option + widget: + enable: false + autoplay: false + # theme: "#2980b9" + loop: all + order: list + preload: auto + volume: 0.7 + mutex: true + lrcType: 0 + listFolded: false + listMaxHeight: 340px + audio: + - name: 星宿计时 + artist: 杉田朗/洛天依 + url: https://cdn.jsdelivr.net/gh/YunYouJun/cdn/audio/star-timer.mp3 + cover: https://cdn.jsdelivr.net/gh/YunYouJun/cdn/img/bg/stars-timing-0.jpg + meting: + enable: true + id: 308168565 + server: netease + type: playlist +``` + +由于 `hexo-tag-aplayer` 太香了,我决定移除原先的媒体包裹脚本。实在有需要的同学,可以自行外挂添加。 + +```js +/** + * Transform embedded video to support responsive layout. + * @see https://ultimatecourses.com/blog/fluid-and-responsive-youtube-and-vimeo-videos-with-fluidvids-js + */ +embeddedVideoTransformer: function() { + let iframes = document.getElementsByTagName("iframe"); + let SUPPORTED_PLAYERS = [ + "www.youtube.com", + "player.vimeo.com", + "music.163.com" + ]; + for (let i = 0; i < iframes.length; i++) { + let iframe = iframes[i]; + if (iframe.src.search(SUPPORTED_PLAYERS.join("|")) !== -1) { + let videoRatio = (iframe.height / iframe.width) * 100; + iframe.width = "100%"; + + let wrap = document.createElement("div"); + wrap.className = "fluid-vids"; + wrap.style.width = "100%"; + wrap.style.minHeight = "90px"; + wrap.style.height = iframe.height; + wrap.style.position = "relative"; + + let iframeParent = iframe.parentNode; + iframeParent.insertBefore(wrap, iframe); + wrap.appendChild(iframe); + } + } +} +``` + +## KaTeX + +在文章中显示一些简单的数学公式,使用 [KaTeX](katex.or) 实现。具体方法请参见[官方文档](https://katex.org/)。 + +- `copy_tex`: 复制 katex 文本,默认开启 +- `global`: 如果你想要在全局页面使用 `KaTex`,(譬如首页的文章摘要),那么你可以开启它。(当然,这也意味着你的页面每次需要加载更多的资源。) + +```yaml +katex: + copy_tex: true + global: false +``` + +只有在使用了 `katex` 的文章或页面才会加载 KaTeX 的库,所以你需要在使用 KaTeX 的文章或头部进行设置。 +(当你开启全局加载时,将不再需要设置此选项。) + +```md {3} +--- +title: xxx +katex: true +--- +``` + +你可以使用如下方式包裹公式。 + +如下包裹,公式将被居中展示。 + +```latex +$$ E = mc^2 $$ +\[ E = mc^2 \] +``` + +如下包裹,公式将以行内形式展示。 + +```latex +$E = mc^2$ +\( E = mc^2 \) +``` + +::: tip +注意,在 Markdown 文件中直接书写时,你需要多一个 `\` 来转译 `\`。(或者使用 `$E=mc^2$` 的方式) + +使用 `\\[ E = mc^2 \\]` 而不是 `\[ E = mc^2 \]`。 + +如果你有过多需要转译的字符,你可以直接使用 HTML 标签包裹它(内部的字符将不会被作为 Markdown 解析),而无需使用多个 `\` 来转译。 + +譬如: + +```html +
+ \[ E = mc^2 \] +
+``` + +::: + +> 你可以访问 [Yun Test](https://www.yunyoujun.cn/yun/) 来查看实际效果。 +> 你可能需要一点时间来等待 `KaTeX` 库的加载,或刷新重试。 + +## pjax + +使用 [pjax](https://github.com/MoOx/pjax) 实现。 + +```yaml +pjax: + enable: true +``` + +## 其他可用插件推荐 + +以下的插件配置与使用均与主题无关,你可以自行参考其文档配置。 + +> 因为当你想要一些主题并未提供的功能时,它们实际上可以直接通过插件来实现。 + +### [hexo-blog-encrypt](https://github.com/MikeCoder/hexo-blog-encrypt) + +你可以使用它来加密一些私密的文章页面。 diff --git a/themes/yun/docs/guide/config.md b/themes/yun/docs/guide/config.md new file mode 100644 index 0000000..364aea3 --- /dev/null +++ b/themes/yun/docs/guide/config.md @@ -0,0 +1,1399 @@ +# 主题配置 + +## 配置文件 + +约定 > 配置 + +::: danger +请在 `source/_data/yun.yml` 中定义您所需要的配置,其余将自动使用主题的默认配置。 + +如未特殊说明,皆默认在 `yun.yml` 文件中配置。 + +请最好不要对主题的任何文件进行修改,除非你确认你拥有一定的开发能力或此后将不会对主题进行升级。 +::: + +## 语言 + +默认语言为中文 `zh-CN`。 + +> 站点的语言需要自己在 Hexo 目录下的 `_config.yml` 中设置。 + +```yaml +language: zh-CN +``` + +### 个性化语言包 + +在 Hexo 工作目录下新建 `source/_data/languages.yml`。(若 `source/_data` 目录不存在,请新建。) + +采用约定大于配置的方式,您仅需在 `languages.yml` 中自定义您想要覆盖的语言,其余将自动与主题默认配置合并。(这样做也更方便日后的升级) + +配置方式参考下例: + +> 各语言对应属性和内容见 `themes/yun/languages`,覆盖对应项即可。 + +```yaml +en: # 将要覆盖的语言 + menu: + home: My Index + +ja: # 将要覆盖的语言 + menu: + home: マイインデックス + +zh-CN: # 将要覆盖的语言 + menu: + home: 我的主页 +``` + +如果仅使用中文语言,除 `zh-CN` 项目均可删除。 + +## 主题色 + +自定义主题的主色调。 + +- `bg`: 背景色(选取与你的背景图片主色调更贴近的颜色来使其更协调) + +> [color-dust](https://www.yunyoujun.cn/color-dust) 此前写的一个可以分析图片配色的小工具。 + +```yaml +colors: + primary: "#6200ee" + # bg: "#F5F5F5" + selection_bg: "#8e71c1" # 选取文字时的背景色 + # 标签云中标签的起始色和结束色 + # tag_start_color: + # tag_end_color: +``` + +### tags + +可以为你的标签指定色彩,默认色 `#333`。 + +```yaml +tags: + Vue: "#4fc08d" + Hexo: "#0E834D" + CSS: "#5298d1" + Node.js: "#026E00" + Git: "#F14E32" + React: "#61dafb" + Python: "#3776ab" + PHP: "#8892BF" + VS Code: "#0066B8" + JavaScript: "#F4DF4F" + TypeScript: "#317AC6" + Laravel: "#F4645F" +``` + +### categories + +可以为你的分类指定色彩,默认色 `#333`。 + +```yaml +categories: + 笔记: dimgray +``` + +## head 头部资源 + +如果您有想自定义的资源要加载,请添加到 `head` 中。 + +遵照以下示例,自定义您要添加的 `css` 与 `js` 资源。 + +JavaScript 资源类型说明: + +- `base`: 必须提前加载并执行。 +- `async`: 异步加载,加载完成后立即执行。 +- `defer`: 异步加载资源,但最后执行。 + +```yaml +head: + css: + example: //example.min.css + js: + base: + async: + defer: +``` + +::: tip + +譬如想要自定义 css,先设置 `yun.yml`: + +```yaml +head: + css: + custom: /css/custom.css +``` + +对应的文件路径为 `source/css/custom.css`(愣着干啥,自己新建去) + +写你自定义的 CSS 就可以了。 + +```css +.char { + background-color: transparent; +} +``` + +::: + +### favicon + +设置网站图标(确保你的 `favicon.ico` 文件已放置于 `source` 文件夹下),如下设置: + +```yaml +favicon: /favicon.ico +``` + +现在的 Yun Logo 可以根据浏览器的亮暗主题,采用对应的相反色。 + +譬如:亮色浏览器 LOGO 为黑色描边,暗色浏览器 LOGO 为白色描边。 + +> 如果你想要为自己的图标添加该特性,你的图标须为 `svg` 文件,并为其添加对应样式。 +> 你可以参考我的 LOGO SVG 代码。[yun.svg](https://github.com/YunYouJun/hexo-theme-yun/blob/dev/source/yun.svg) + +Example: + + + +```svg + +``` + +> [Dark Mode Favicons](https://css-tricks.com/dark-mode-favicons/) + +## CDN + +Content Delivery Network,统一加载网络资源,有利于提高网页加载速度。 + +[jsDelivr – Open Source CDN](https://www.jsdelivr.com) 是一款免费开源的 CDN,国内速度表现良好,且统一 CDN 来源同样有利于加载速度。 +故本主题 CDN 均默认采用 jsDelivr,并使用 `dns-prefetch` 预解析 jsDelivr 。 + +您同样可以根据命名规则获取您想要的 CDN,在 `head` 中引入: + +- GitHub CDN: `https://cdn.jsdelivr.net/gh/user/repo@version/file` +- npm: `https://cdn.jsdelivr.net/npm/package@version/file` + +`cdn` 为主题目前默认引入的 CDN 资源,结构与 `head` 类似。 + +```yaml +cdn: + pre: "" + css: + js: + base: + async: + # 默认引入的图标资源,使用 iconfont + iconfont: //at.alicdn.com/t/font_1140697_stqaphw3j4.js + defer: +``` + +- `pre`: 默认为空,你的加载资源前缀。譬如你如果想要使用 `jsdelivr` 加速全站静态资源(~~又白嫖~~),则可以在 `yun.yml` 中这样设置。 + +> 注意将 `https://cdn.jsdelivr.net/gh/` 后替换为你的 GitHub 用户名和仓库名(也可以添加所在分支,譬如 `@master`)。 +> `@latest` 为使用最新版本(但它仍然会被缓存,**且需要 12 h 才能更新**,如果你需要强制刷新,请参考 [Purge cache](https://github.com/jsdelivr/jsdelivr#purge-cache)) +> ~~请记住,白嫖是有代价的~~ + +```yaml +cdn: + pre: https://cdn.jsdelivr.net/gh/YunYouJun/yunyoujun.github.io@latest +``` + +::: tip +如果你自己对主题使用到的资源进行了自定义,并想要更方便地在本地预览调试。 + +你可以在 Hexo 的工作目录下 `package.json` 中 `scripts` 字段添加 `"dev": "export NODE_ENV=dev && hexo s"`。 + +```json +{ + "scripts": { + "dev": "export NODE_ENV=dev && hexo s" + } +} +``` + +并通过 `npm run dev` 来启动,则此时处于开发模式下,默认不使用 `cdn.pre`。 +::: + +### 覆盖 iconfont + +```yaml +cdn: + js: + async: + iconfont: 你的 iconfont 自定义资源 +``` + +### 预加载 + +通过 `preload`, `prefetch`,`preconnect`,`dns-prefetch`来优化网页记载速度。 + +- `preload`:本页面之后一定会用到的资源 +- `prefetch`:跳转页面可能会用到的资源 +- `dns-prefetch`:解析将要用到的域名的 DNS 地址 +- `preconnect`:提前与指定域名建立链接,相比 `dns-prefetch` 多了 TCP 连接 + +`preload` 与 `prefetch` 只用来加载本地的资源(且一般使用默认),不要使用带有协议头(`http://`)的资源。 + +CDN 可以去 `head` 处添加。 + +> [\ :外部资源链接元素 - MDN](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/link) + +```yaml +preload: + style: + - /css/hexo-theme-yun.css + script: + - /js/utils.js + - /js/hexo-theme-yun.js + +prefetch: + script: + - /js/sidebar.js + +dns_prefetch: + - https://cos.yunyoujun.cn + +# do more(TCP handshake...) than dns-fetch +preconnect: + - https://cdn.jsdelivr.net +``` + +## 图标 Icon + +本主题默认使用 [Remix Icon](https://remixicon.com/) 的部分图标,并通过 [iconfont](https://www.iconfont.cn/) 生成的 cdn 加载。 + +> 默认支持的图标列表见 [默认图标](/guide/icon.html) + +如您想要使用其他图标,可以采用以下几种图标和使用方式。 + +- 方式一:最为推荐,全部使用自定义 `iconfont` 图标集。(速度快,但需自行配置) +- 方式二:自由在 [head](#head-头部资源) 引入字体图标的 css 样式文件,直接传入对应 `class` 名称即可。(往往会引入全部的图标资源,虽然一次性引入很方便,但很多图标其实用不到。) + +::: tip +你完全可以前往 [iconfont](https://www.iconfont.cn/) 自定义一套你的图标集,并覆盖 [CDN](#CDN) 所引入的图标资源。 +如果你只是想额外增添几个图标,你最好在 [head](#head-头部资源) 处引入,而不是直接覆盖。 +::: + +下面给出了一些基础图标的使用方法。 + +本主题对以下几种图标的使用进行了适配。 + +### [iconfont](https://www.iconfont.cn/) + +阿里旗下,可定制自己所需图标集。国内速度良好。(推荐) + +[使用说明](https://www.iconfont.cn/help/detail?helptype=code) + +多色图标需采用文章中 `symbol` 引用方式。 + +随后如下在 `yun.yml` 中设置。 + +```yaml +head: + js: + async: + # 这里是你从 iconfont 处获得的图标链接。 + iconfont: //at.alicdn.com/t/font_1140697_stqaphw3j4.js +``` + +### [Remix Icon](https://remixicon.com/) + +- GitHub: +- CDN: + +简洁、优雅、开源。 + +### [Ionicons](https://ionicons.com) + +- GitHub: [ionicons](https://github.com/ionic-team/ionicons) +- CDN CSS: +- CDN JS: + +无商标图标,可使用 Web Component ,按需加载。 + +#### 加载方式一:Web Component + +可根据 `Android/iOS` 平台自动切换适合的风格 `Material/iOS`。 + +本主题已对 `ion-icon` 标签引入的方式进行了适配,如下配置即可。 + +```yaml +head: + js: + async: https://cdn.jsdelivr.net/npm/ionicons/dist/ionicons.js +``` + +```yaml +icon: ion-icon heart +``` + +#### 加载方式二: CSS 引入 + +与其他 CSS 引入字体图标的方式相同。 + +```yaml +head: + css: + ionicons: https://cdn.jsdelivr.net/npm/ionicons/dist/css/ionicons.min.css +``` + +```yaml +icon: icon ion-md-heart +``` + +### [Material Design icons](https://google.github.io/material-design-icons/) + +- GitHub: [material-design-icons](https://github.com/google/material-design-icons) +- [Material Design icons](https://material.io/tools/icons) + +样式统一,无商标图标。谷歌出品,因国内行情,加载未必稳定,你可以寻找一些镜像源替代。 + +主题同样进行了适配。 + +::: tip 为何需要适配? + +原本的使用方式 + +`face` 为 `` 内部内容,而非 `class`。 + +```html +face +``` + +::: + +引入对应 CDN 资源: + +```yaml +head: + css: + material: https://fonts.googleapis.com/icon?family=Material+Icons +``` + +```yaml +icon: material-icons face +``` + +### 其他图标 + +在 [`head`](#head-头部资源) 中引入相关资源,图标相关配置 `icon` 中填写对应图标 `class` 即可。 + +譬如常见的 [Font-Awesome](https://fontawesome.com) + +> GitHub: [Font-Awesome](https://github.com/FortAwesome/Font-Awesome) + +引入它的 CSS 资源: + +```yaml +head: + css: + fontawesome: https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free/css/all.min.css +``` + +对应 `icon` 字段中填写对应 `class` 名称即可。 + +```yaml +icon: fas fa-home +``` + +> 其实并不推荐引入全部的 `font-awesome`,因为它真的很大。 + +## 社交图标 + +默认提供以下几种社交图标,您可以通过在[头部](#head-头部资源)引入自定义图标资源来获取更多图标。 +为了更好的展示效果,会显示我的默认链接,作为你设置图标的参考。 + +- `name`: 链接名称 +- `link`: 链接 +- `icon`: 图标 Class +- `color`: 图标颜色(前提是您引入的图标支持 SVG 自定义颜色)当前默认色彩采用官方图标的品牌主色。 + +> 如果你想使用 QQ 跳转链接,你可能还需要到 [QQ 推广](https://shang.qq.com/) 开通。 + +```yaml +social: + - name: RSS + # set rss in your root config + # https://github.com/hexojs/hexo-generator-feed + link: /atom.xml # config.feed.path + icon: icon-rss-line + color: orange + - name: QQ + # https://isux.tencent.com/wp-content/uploads/2016/05/20160512101222609.pdf + link: https://wpa.qq.com/msgrd?v=3&uin=910426929&site=qq&menu=yes + icon: icon-qq-line + color: "#12B7F5" + - name: GitHub + link: https://github.com/YunYouJun + icon: icon-github-line + color: "#181717" + - name: E-Mail + link: mailto:me@yunyoujun.cn + icon: icon-mail-line + color: "#8E71C1" + - name: 微博 + link: https://weibo.com/jizhideyunyoujun + icon: icon-weibo-line + color: "#E6162D" + - name: 豆瓣 + link: https://www.douban.com/people/yunyoujun/ + icon: icon-douban-line + color: "#007722" + - name: 网易云音乐 + link: https://music.163.com/#/user/home?id=247102977 + icon: icon-netease-cloud-music-line + color: "#C10D0C" + - name: 知乎 + link: https://www.zhihu.com/people/yunyoujun/ + icon: icon-zhihu-line + color: "#0084FF" + - name: 哔哩哔哩动画 + link: https://space.bilibili.com/1579790 + icon: icon-bilibili-line + color: "#FF8EB3" + - name: POPI + link: https://www.popiask.cn/elpsycn + icon: icon-questionnaire-line + color: "#525252" + - name: 微信公众号 + link: https://cdn.jsdelivr.net/gh/YunYouJun/cdn/img/about/white-qrcode-and-search.jpg + icon: icon-wechat-2-line + color: "#1AAD19" + - name: Twitter + link: https://twitter.com/YunYouJun + icon: icon-twitter-line + color: "#1da1f2" + - name: Telegram + link: https://t.me/YunYouJun + icon: icon-telegram-line + color: "#0088CC" + - name: Telegram Channel + link: https://t.me/elpsycn + icon: icon-telegram-fill + color: "#0088CC" + - name: Travelling + link: https://travellings.now.sh/ + icon: icon-send-plane-2-line + color: black +``` + +您只需要在 `yun.yml` 中设置 `social` 来覆盖即可(这时即可只显示你的邮箱图标,而没有其他图标): + +```yaml +social: + - name: E-Mail + link: mailto:你的邮箱 + icon: icon-mail-line + color: "#8E71C1" +``` + +如果您不想放置任何链接,仅需在 `yun.yml` 中设置: + +```yaml +social: +``` + +## 首页 + +### 标语动画 + +首页的垂直交错排列文字效果。默认开启。 + +您可以访问 查看效果。(每次刷新,随机字体大小) + +> 这是本主题开发时,最早实现的功能,期间因为 Safari 等浏览器的兼容性问题重构了几次,也提高了加载速度。 +> 算是三朝元老,笑。 + +- `enable`: 是否开启 +- `title`: 设置文字内容 +- `border`: 是否开启标语中字符的左右边框 +- `cloud`: 在首页下方显示流动的云 + - `enable`: 是否开启 + - `color`: 自定义色彩 +- `go_down`: 向下箭头按钮(点击翻页) + +```yaml +banner: + enable: true + title: 云游君的小站 + src: /js/ui/banner.js + border: true + cloud: + enable: true + color: "white" + go_down: + enable: true + icon: icon-arrow-down-s-line +``` + +你可以通过数组形式来自定义字符的分割,例如: + +```yaml +banner: + title: + - Yun + - You + - Jun + - Blog +``` + +### 公告 + +你可以如下配置来开启公告。 +它将显示在所有文章卡片的最上方,标语的下方。 + +```yaml +notice: + enable: true + content: Thanks for playing my game. +``` + +## UI + +### 亮暗模式 + +- `light`: 始终为亮色模式,不打包暗色样式资源 +- `dark`: 始终为暗色模式 +- `auto`: 根据系统亮暗模式自动切换,侧边栏将显示亮暗切换按钮,可自由切换。 + +> 暗色模式下纯黑图标,将变为白色。 + +你可以为暗色模式,设置独立的背景和搜索背景,参见对应配置项。 + +```yaml +mode: auto +# 可选 light | dark | auto +``` + +### 字体 + +你可以设置你的自定义字体,并调节为你喜欢的字重。 + +:::tip +如果你使用了非系统自带字体,你还需要前往 [head](#head-头部资源) 处引入。 + +譬如引入字重 900 的 `Noto Serif SC` 字体。 + +> 本主题为了保证足够轻量,默认不引入任何字体,均使用系统自带的默认字体。你可以自行决定是否引入。 + +```yaml +head: + css: + fonts: https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@900&display=swap +``` + +::: + +本主题的字体主要分为以下三大类。 + +> 你可以仅覆盖你想覆盖的字体族。 + +- 衬线字体(Serif):较粗表强调,通常用于首页标语(Banner)、Say、站点与文章标题(以及 links、girls 等页面的作品名称)等处。 +- 无衬线字体(Sans Serif):通常为普通文本内容。(如果你的字体显示较粗,可能是你在 Windows 系统上安装了 `PingFang SC` 字体,却没有安装对应字重。) +- 等宽字体(monospace):字符均具有相同宽度,通常用于需要相同宽度以对齐之处(如日期、序号)。 + +将 `font.cdn.enable` 设置为 `false` 以全部使用系统默认字体,达到最佳访问速度。(默认开启时,使用 `media="none" onload="this.media='all'"` 实现 css 样式的异步加载。) + +```yaml +font: + cdn: + enable: true + lib: + - https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@900&display=swap + serif: + family: "'Songti SC', 'Noto Serif SC', STZhongsong, STKaiti, KaiTi, Roboto, serif" + weight: 900 + sans_serif: + family: "'PingFang SC', 'Microsoft YaHei', Roboto, Arial, sans-serif" + weight: 400 + monospace: + family: "'Source Code Pro', 'Courier New', Courier, Consolas, Monaco, monospace" +``` + +### 图片背景 + +- `opacity`: 背景透明度 + +::: tip +注意,现背景模糊已默认关闭。更建议用户通过图像处理工具来模糊图片作为背景。 + +> 你也可以直接使用一些在线图像模糊工具。 + +这也能消除彩色图片应用 `blur` 滤镜时产生的白边。 +同时也能缩小图片背景,提高载入与渲染速度。 +::: + +- `dark`: 暗色背景图片链接,仅在开启暗色模式时有效。 + +```yaml +bg_image: + enable: true + url: https://cdn.jsdelivr.net/gh/YunYouJun/cdn/img/bg/stars-timing-0-blur-30px.jpg + # dark: + # blur: 30px # 设置背景模糊程度 + opacity: 0.8 +``` + +> 如果你想要使用自定义的图片背景,你只需要将其置于 `source/images` 文件夹下,并用 `/images/xxx.jpg` 来引入它。 +> 注意:如果你使用子目录来放置你的博客,如 `xxx.github.io/blog/`,你的图片链接需要设置为 `/blog/xxx`,或者直接使用图床。 + +#### 搜索背景 + +- `placeholder`: 搜索框提示文字(如果不设置,将自动根据 Hexo 语言配置选取对应的文本) +- `dark_bg_image`:暗色模式下的背景,仅在你开启暗色模式时有效 + +```yaml +search: + bg_image: https://cdn.jsdelivr.net/gh/YunYouJun/cdn/img/bg/stars-timing-2.jpg + dark_bg_image: xxx + # placeholder: +``` + +> 更多搜索设置参见:[搜索 - 第三方支持](/guide/third-party-support.html#搜索) + +### 随机多边形背景 + +> [trianglify - GitHub](https://github.com/qrohlf/trianglify) + +- `enable`: 默认关闭 +- `cellSize`: 多边形网格尺寸 +- `palette`: 调色盘,请参考文档配置([更多色彩](https://github.com/qrohlf/trianglify/blob/master/src/utils/colorbrewer.js)) +- `opacity`: 透明度 + +> 因为背景采用拉伸,更大的 `width` 与 `height` 会获得更高的清晰度。(请与性能进行取舍) + +```yaml +trianglify: + enable: false + cellSize: 75 + width: 800 + height: 600 + palette: '["YlGnBu", "GnBu", "Purples", "Blues"]' + opacity: 0.5 +``` + +### 烟花 + +点击页面的烟花效果 + +- `enable`: 是否开启,默认开启 +- `colors`:包含的颜色,默认为几种蓝色配色(请仿照下方使用 RGB 数值) + +```yaml +fireworks: + enable: true + colors: + - "102, 167, 221" + - "62, 131, 225" + - "33, 78, 194" +``` + +> 参考自:[Anime.js Fireworks canvas demo](https://codepen.io/juliangarnier/pen/gmOwJX) + +### ScrollReveal + +首页卡片与文章内部图片的滚动浮现效果,可见[官网](https://cdn.jsdelivr.net/npm/scrollreveal/dist/scrollreveal.min.js),默认开启。 + +- `targets`: 为元素选择器对应的元素添加滚动浮现效果 + +```yaml +scrollreveal: + enable: true + targets: + - .post-card + - .post-content img +``` + +### Cursor 光标 + +替换鼠标光标,默认关闭。开启时默认使用 [Material Design Cursors](https://www.deviantart.com/rosea92/art/Material-Design-Cursors-Dark-756850032)。 + +你也可以使用你喜欢的图标来替代。 + +- `default`: 默认状态下图标。 +- `pointer`: 指针(即链接状态下)图标。 + +```yaml +cursor: + enable: false + default: https://cdn.jsdelivr.net/gh/YunYouJun/cdn/css/md-cursors/pointer.cur + pointer: https://cdn.jsdelivr.net/gh/YunYouJun/cdn/css/md-cursors/link.cur + text: https://cdn.jsdelivr.net/gh/YunYouJun/cdn/css/md-cursors/text.cur +``` + +## 侧边栏 + +### 侧边栏背景 + +- `tagcloud`: 在侧边栏显示 Hexo 原生标签页 + - `amount`: 显示的标签数量 + +```yaml +sidebar: + bg_image: https://cdn.jsdelivr.net/gh/YunYouJun/cdn/img/bg/stars-timing-1.jpg + bg_position: bottom 3rem center + tagcloud: + enable: false + amount: 20 +``` + +> 注意:如果你使用子目录来放置你的博客,如 `xxx.github.io/blog/`,你的图片链接需要设置为 `/blog/xxx`,或者直接使用图床。 + +`bottom 3rem center` 代表居中并且距离底部 `3rem`。 + +你可以参考 [background-position](https://developer.mozilla.org/zh-CN/docs/Web/CSS/background-position) 来设置背景图片的位置。 + +### 头像 + +- `enable`: 是否显示头像 +- `url`: 头像图片链接 +- `rounded`: 是否显示圆形 +- `opacity`: 透明度 +- `mickey_mouse`: 默认关闭,开启后文章页面侧边栏的头像将向上移动(迪士尼警告) +- `status` + - `enable`: 是否显示状态 + - `emoji`: emoji + - `message`: 内容 + +```yaml +avatar: + enable: true + url: /images/avatar.jpg + rounded: true + opacity: 1 + mickey_mouse: false + status: + enable: true + emoji: 😭 + message: 不想上学 +``` + +`mickey_mouse` 开启后效果: + +![mickey-mouse](https://i.loli.net/2020/03/10/fPn637T98lA2wJ4.png) + +### 导航 + +设置导航对应图标及链接 + +分别为: + +- 主页 +- 列表 + - 归档 + - 标签 + - 分类 +- 自定义(你可以设置为任意图标及链接,当你未设置自定义图标链接时,它将自动变为文档导航按钮以保持整体的对称) + +> 顺带提醒你遇到问题先看看文档 + +list + +- `type`: 是否为 archives/categories/tags 等类型,会自动匹配此类型标题及显示对应数量。留空则为其他普通链接。 +- `title`: 可以覆盖默认标题 +- `icon`: 自定义你的图标 +- `path`: 自定义路径 +- `count`: 默认为对应类型的数量,你也可以使用自定义文本覆盖(如注释部分) + +```yaml +menu: + home: + path: / + icon: icon-home-4-line + list: + - type: archives + path: /archives/ + icon: icon-archive-line + - type: categories + path: /categories/ + icon: icon-folder-2-line + - type: tags + path: /tags/ + icon: icon-price-tag-3-line + # - path: https://www.yunyoujun.cn + # icon: icon-cloud-line + # count: 你猜 + custom: + title: 文档 + path: https://yun.yunyoujun.cn + icon: icon-settings-line +``` + +### 页面链接 + +在 sidebar 的最下方,添加醒目的图标链接。 + +相比[社交链接](#社交图标),图标更大。你可以放置你的页面导航,友情链接等。 + +例如: + +> [页面配置](/guide/page.html#友链-links) + +```yaml +pages: + - name: 我的小伙伴们 + url: /links/ + icon: icon-genderless-line + color: dodgerblue +``` + +如果您不想放置任何链接,仅需在 `yun.yml` 中设置: + +```yaml +pages: +``` + +## 文章 + +### 内容卡片 + +- `opacity`: 自定义展示的文章卡片透明度,默认为 `0.8` + +```yaml +post_card: + opacity: 0.8 +``` + +#### type + +为文章设置 `type` 属性,即可将其转为其他类型卡片,并跳转 `url` 设置的链接。 + +譬如: + +```md +--- +title: xxx +type: bilibili +url: https://www.bilibili.com/video/av8153395/ +--- +``` + +在文章标题前将会出现 bilibili 的图标,点击标题会跳转至对应的链接。 + +目前默认支持以下类型(哔哩哔哩、豆瓣、GitHub、网易云音乐、推特、微信公众号、微博、语雀、知乎、Notion、外链): + +```yaml +types: + link: + color: blue + icon: icon-external-link-line + bilibili: + color: "#FF8EB3" + icon: icon-bilibili-line + douban: + color: "#007722" + icon: icon-douban-line + github: + color: black + icon: icon-github-line + netease-cloud-music: + color: "#C10D0C" + icon: icon-netease-cloud-music-line + notion: + color: black + icon: icon-notion + twitter: + color: "#1da1f2" + icon: icon-twitter-line + wechat: + color: "#1AAD19" + icon: icon-wechat-2-line + weibo: + color: "#E6162D" + icon: icon-weibo-line + yuque: + color: "#25b864" + icon: icon-yuque + zhihu: + color: "#0084FF" + icon: icon-zhihu-line +``` + +你也可以自己在 `yun.yml` 设置你跳转不同链接专属的图标和颜色。 + +```yaml +type: + google: + color: xxx + icon: xxx +``` + +当你指定的 `type` 不存在于默认支持中,也没有进行自定义,将默认使用蓝色的额外链接图标。 + +如果你想在你的外链卡片上显示一些信息,你可以写在 `` 前,它会被当作摘要显示。 + +譬如: + +```md +--- +title: hexo-theme-yun +type: github +url: https://github.com/YunYouJun/hexo-theme-yun +--- + +Hexo 主题 Yun + + +``` + +#### hide + +你可以在文章头部添加 `hide` 属性,来临时隐藏某篇文章。 + +- `hide`: + - `index`: 设置为 `index` 时,将只在首页隐藏,归档中仍然展示。(譬如放一些没有必要放在首页的笔记,并在归档中方便自己查看。) + - `true`: 当设置为 `true` 时,该文章仍然会被渲染,你自己可以直接访问链接进行查看。但不会被显示在展示的文章卡片与归档中。 + +> 什么?你想完全不渲染不显示?那你为何不将其放在 `_drafts` 文件夹下,或干脆不提交这篇文章。 + +```yaml {3} +--- +title: xxx +hide: true +# hide: index +sitemap: false +indexing: false +--- + +``` + +::: tip + +如果你开启了站点地图,那它还会出现在 `sitemap.xml` 中,你还需要在 front matter 处设置 `sitemap: false` 来排除它。 + +> [excluding-posts | hexo-generator-sitemap](https://github.com/hexojs/hexo-generator-sitemap#excluding-posts) + +如果你开启了本地搜索,那它还会出现在 `search.xml` 中,你还需要设置 `indexing: false` 来排除它。 + +> [exclude-indexing | hexo-generator-search](https://github.com/wzpan/hexo-generator-search#exclude-indexing) + +::: + +> 题外话,这个功能是我当初应付备案临时加的。 +> 我更改备案信息时,客服通知我首页不能用跳转其他页面链接的内容(有一个和文章混在一起直接跳转 bilibili 的卡片),所以我就加了这个功能临时隐藏掉了。 +> 也许还挺实用的,你可以放一些只是自己看看,暂时还不打算发到主页显示的页面。 + +### 信息 + +- `item_text`: 是否显示文字(如:发表于、更新于,若关闭则只显示图标与时间信息) +- `created_at`: 是否显示创建时间 +- `updated_at`: 是否显示更新时间 +- `categories`: 是否显示种类 +- `tags`: 是否显示标签 + +```yaml +post_meta: + item_text: false + created_at: true + updated_at: true + categories: true + tags: true +``` + +### 目录 + +你只要遵循 [Markdown 语法](https://segmentfault.com/markdown),就会自动生成目录! + +::: tip +具有良好 SEO 的 HTML 页面,有且应当只有一个 `h1` 作为一级标题。 +本主题默认采用您设置的 `title` 作为一级标题。 +在接下来的文章内容中,您应当只从二级标题开始使用。 + +```md +--- +title: 一级标题 +--- + +## 二级标题 +``` + +::: + +> 没什么人会要关这个功能的吧,hhh(所以我根本没加关闭的功能) + +- `list_number`: 显示编号 +- `max_depth`: 生成 TOC 的最大深度 +- `min_depth`: 生成 TOC 的最小深度 +- `placeholder`: 当目录不存在时,显示的话。 +- `collapse`: 是否折叠目录(默认折叠,即隐藏次级目录,滚到到相关位置时才展开) + +```yaml +toc: + list_number: true + max_depth: 6 + min_depth: 1 + placeholder: 很遗憾,咱没写啥目录 + collapse: false +``` + +> [辅助函数 | Hexo](https://hexo.io/zh-cn/docs/helpers#toc) + +### 编辑链接 + +若开启,则会在文章页面标题旁显示一个编辑图标。 +点击后跳转到编辑页面。 + +- `url`: 文章所在地址(您可以参照默认链接设置您的仓库跳转链接) + +如我使用 `GitHub` 作为博客的托管仓库,仓库名为 `yunyoujun.github.io`,在 `hexo` 分支下,`source` 文件夹中, +则链接为 。 + +```yaml +post_edit: + enable: true + url: https://github.com/YunYouJun/yunyoujun.github.io/tree/hexo/source/ +``` + +### 代码高亮 + +设置代码高亮 + +由于性能及定位问题,且 [Hexo 5.0](https://blog.skk.moe/post/hexo-5/) 已原生支持 prism,本主题更推荐使用 [prismjs](https://github.com/PrismJS/prism) 而非 `highlight.js`。 + +> 请升级 Hexo 至 5.0。`npm install hexo@latest` + +PrismJS 是一个轻量级的代码高亮库,相比 highlight.js,prismjs 可以在 Node.js 环境执行(即:可在 Hexo 生成页面时进行代码高亮)。 + +我们可以通过 CDN 快速切换主题,本主题也支持为亮暗模式设置不同的代码高亮主题。 + +> 当前 Prism 支持的语言: + +在 Hexo (须升级至 5.0 以上版本)工作目录下的 `_config.yml` 中配置: + +```yaml +# 关闭 highlight +highlight: + enable: false +# 启用 prism +prismjs: + enable: true + preprocess: true + line_number: false + tab_replace: "" +``` + +在 `yun.yml` 中: + +```yaml +codeblock: + prismjs: + light: default + dark: tomorrow +``` + +> 建议关闭行号,[这里](https://highlightjs.readthedocs.io/en/latest/line-numbers.html)是 highlight 作者写的为什么 highlight 不支持行号。 +> 行号是否存在影响不大,当去掉时可以节约出一部分空间,譬如一些原先需要滚动条的代码,去掉后,就可以完全显示出来。 + +### 版权 + +设置您的文章的分享版权 + +> [关于许可协议](https://creativecommons.org/licenses/) +> 默认使用 署名-非商业性使用-相同方式共享 4.0,即 [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.zh)。 + +- `license`: 设置证书 (by | by-nc | by-nc-nd | by-nc-sa | by-nd | by-sa | zero) +- `language`: 设置语言 (deed.zh | deed.en | deed.ja | ...) +- `post`: 在每篇文章末尾显示 +- `clipboard`: 是否在复制文章时,在剪贴板中追加版权信息(默认关闭) + +```yaml +creative_commons: + license: by-nc-sa + post: true + language: deed.zh + clipboard: false +``` + +> 你的 `url` 请在 Hexo 工作目录下的 `_config.yml` 中设置。 +> [配置| Hexo](https://hexo.io/zh-cn/docs/configuration#%E7%BD%91%E5%9D%80) + +```yaml +# URL +## If your site is put in a subdirectory, set url as 'https://yoursite.com/child' and root as '/child/' +url: https://www.yunyoujun.cn +``` + +### 图片懒加载 + +默认开启,将会为 Markdown 的图片 `img` 加上 `loading="lazy"` 属性。 + +> [ loading](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element/img#attr-loading) +> 当前仍有许多浏览器不支持该特性 [Can I use loading?](https://caniuse.com/#search=loading) + +```yaml +lazyload: + enable: true +``` + +## 打赏 + +开启后,将在每篇文章 `post` 末尾显示打赏按钮。(`page` 页面默认不显示,你需要设置 `reward: true` 以强制打开。) + +- `enable`: 开启打赏 +- `icon`: 打赏图标 +- `comment`: 在打赏按钮下显示你想说的话 +- `url`: 你的打赏链接(当你开启打赏链接时,将自动跳转你的外部链接而不是展开二维码) +- `methods`: 数组,打赏方式 + +### 打赏二维码 + +默认支持 QQ、微信、支付宝打赏图标,`color` 为自定义图标颜色。 + +- `name`: 打赏方式 +- `path`: 图片路径 +- `color`: 图标颜色 +- `icon`: 图标名称 + +在 `yun.yml` 中进行覆盖。 + +::: warning +v0.9.2 将原先的 `reward_settings` 与 `reward` 配置合并。 +::: + +```yaml +reward: + enable: true + icon: icon-hand-coin-line + comment: I'm so cute. Please give me money. + # url: https://github.com/YunYouJun/yunyoujun.github.io/issues/96 + methods: + - name: 支付宝 + path: https://cdn.jsdelivr.net/gh/YunYouJun/cdn/img/donate/alipay-qrcode.jpg + color: "#00A3EE" + icon: icon-alipay-line + - name: QQ 支付 + path: https://cdn.jsdelivr.net/gh/YunYouJun/cdn/img/donate/qqpay-qrcode.png + color: "#12B7F5" + icon: icon-qq-line + - name: 微信支付 + path: https://cdn.jsdelivr.net/gh/YunYouJun/cdn/img/donate/wechatpay-qrcode.jpg + color: "#2DC100" + icon: icon-wechat-pay-line +``` + +您也可以在某篇文章的首部单独设置是否开启打赏。 + +```yaml +reward: true +# reward: false +``` + +## 页脚 + +::: tip 注意 +以下配置均写在 `footer` 字段下,请同时放到 `footer` 下。(只保留一个 `footer`。) +如: + +```yaml +footer: + since: 1997 + icon: + name: icon-cloud-line + animated: true + color: "#0078E7" +``` + +::: + +### 起始年份 + +```yaml +footer: + since: 2016 +``` + +### 图标 + +位于年份和名称之间的图标。 + +- `name`: 图标名称(即 `class`) +- `animated`: 是否开启动画 +- `color`: 图标颜色 + +```yaml +footer: + icon: + name: icon-cloud-line + animated: true + color: "#0078E7" +``` + +### 驱动 + +自豪地显示当前使用的博客框架 Hexo 与主题 Yun 的名字及版本。 + +如:`由 Hexo 驱动 v4.2.0 | 主题 - Yun v0.6.1`。 + +让更多人知道 Hexo 与主题 Yun,这有利于开源社区进一步发展。 + +- `enable`: 开启 +- `version`: 显示版本 + +```yaml +footer: + powered: + enable: true +``` + +### 备案 + +国内用户可以提供备案号,开启备案显示。 + +备案信息默认链接为: + +- `enable`: 开启备案 +- `icp`: 备案号 + +```yaml +footer: + beian: + enable: true + icp: 苏ICP备xxxxxxxx号 +``` + +### 运行时间 + +默认关闭。 + +`本博客已萌萌哒地运行 442 天 19 小时 28 分 40 秒(●'◡'●)` + +```yaml +footer: + live_time: + enable: false + prefix: 本博客已萌萌哒地运行 + suffix: (●'◡'●) + start_time: "2019-04-12T00:00:00" +``` + +### 自定义文本 + +`custom_text` 为自定义页脚,可以包含 HTML。 +譬如有时使用其他服务商进行托管页面,或一些 ICP 之外的备案信息。 + +```yaml +footer: + custom_text: Hosted by Coding Pages +``` + +## Say + +随机在网站主页显示一句~~中二的~~话。(默认使用 [一言](https://hitokoto.cn/) 作为 API) + +- `enable`: 是否开启 Say +- `api`: 远程 JSON API +- `src`: 调用的 js 文件,最好不要修改(你也可以仿照其结构自己写,来加载想要的 JSON 格式。) +- `hitokoto.enable`: 是否开启 [一言](https://hitokoto.cn/),开启一言时,将默认覆盖 `say.api` +- `hitokoto.api`: 你可以参考 [语句接口|一言](https://developer.hitokoto.cn/sentence/) 来根据你的想法使用一言 API + +```yaml +say: + enable: true + api: https://cdn.jsdelivr.net/gh/ElpsyCN/say@gh-pages/sentences.json + src: /js/say.js + # https://developer.hitokoto.cn/sentence/ + hitokoto: + enable: true + api: https://v1.hitokoto.cn +``` + +当你关闭一言时,将默认使用 `say.api` 处的数据。 + +> [say.elpsy.cn](https://say.elpsy.cn) 是我自己收藏中二语句的地方。= =,自动导出 JSON 用来拉取。 + +### 自定义语句 + +你也可以使用自定义的话语。 + +你可以在根目录的 `source` 文件夹下新建 `data/sentences.json`。(注意是 `data` 不是 `_data`,当然你新建别的文件夹也可以。) + +格式如下: + +```json +[ + { + "content": "Hello, World!", + "author": "Brian Kernighan", + "from": "The C Programming Language" + }, + { + "content": "我们一日日度过的所谓日常,实际上可能是接连不断的奇迹。", + "from": "日常" + }, + { + "content": "是啊,我所爱的,即非群星,也非银河。", + "author": "云游君", + "from": "yunyoujun.cn" + }, + { + "content": "隐约雷鸣 阴霾天空 但盼风雨来 能留你在此", + "from": "万叶集·雷神短歌" + } +] +``` + +以及设置 `say.api` 为 `/data/sentences.json`,并关闭一言。 + +譬如: + +```yaml +say: + enable: true + api: /data/sentences.json + src: /js/say.js + hitokoto: + enable: false +``` + +## Special + +### 默哀 + +在每年的指定日期,开启灰色默哀模式。 + +- `enable`: 默认关闭。 + +> 4 月 4 日,全国哀悼。 +> 为表达全国各族人民对抗击新冠肺炎疫情斗争牺牲烈士和逝世同胞的深切哀悼,国务院发布公告,决定 2020 年 4 月 4 日举行全国性哀悼活动。 +> [国务院办公厅关于为新冠肺炎疫情牺牲烈士和逝世同胞举行全国性哀悼活动的通知](http://www.gov.cn/zhengce/content/2020-04/03/content_5498474.htm) + +```yaml +mourn: + enable: true + days: + - "4-4" +``` + +## 自定义样式 + +相比 `head` 引入,你可以在此处编写 `stylus` 文件,并使用主题已有的变量,且将编译进 `hexo-theme-yun.css` 中。 + +> 新建 `source/_data/style` 文件夹,并再新建 `xxx.styl`,开始编写你的自定义样式。 + +譬如通过以下方式将导入你的 `source/_data/style` 下所有的 `.styl` 文件。 + +```yaml +custom: + style: source/_data/style/* +``` + +## 更多配置 + +你可以直接查看 [themes/yun/\_config.yml](https://github.com/YunYouJun/hexo-theme-yun/blob/master/_config.yml) 文件及相关注释。 + +或者参考我的博客的自定义配置 [source/\_data/yun.yml](https://github.com/YunYouJun/yunyoujun.github.io/blob/hexo/source/_data/yun.yml)。 diff --git a/themes/yun/docs/guide/faq.md b/themes/yun/docs/guide/faq.md new file mode 100644 index 0000000..8ffca1c --- /dev/null +++ b/themes/yun/docs/guide/faq.md @@ -0,0 +1,68 @@ +# FAQ + +::: tip + +- 代表只和开发有关。 + ::: + +有问题和建议欢迎提 [Issue](https://github.com/YunYouJun/hexo-theme-yun/issues)。 + +你也可以加入 [QQ 群](https://shang.qq.com/wpa/qunwpa?idkey=3bd19a05aaccb2b60c396295c8617b3a9e667821a495e8cd7e1698ff95ab61c6)(389401003)进行反馈与讨论。 + +> 如果是通用的问题(如 BUG 反馈,新功能建议),最好在 Issue 中进行反馈,以便其他朋友参与讨论,减少重复。 + +--- + +## 自查通用问题解决方案 + +检查文件或仓库命名是否错误。 + +检查 `Hexo` 工作目录下 `_config.yml` 中 `url` 是否设置正确。(此部分为 Hexo 初始化时自动生成) + +```yaml +# If your site is put in a subdirectory +# set url as 'https://yoursite.com/child' and root as '/child/' +url: https://www.yunyoujun.cn +root: / +``` + +检查是否在 `yun.yml` 文件中进行主题配置,且已经保存。 +检查是否已经执行如下几步: + +- `hexo clean`:清除本地缓存 +- `hexo g`:生成新的静态文件 +- `hexo s`:本地查看效果(如果正常,使用 `hexo d` 重新部署) + +检查是否已强制刷新本地浏览器缓存(Windows: `Ctrl + F5`,Mac: `Shift + Cmd + R`)。 + +检查是否为最新版本。 + +检查是否因为 CDN 缓存造成的问题,(关闭 `cdn.pre`)。 + +如果仍然存在问题,你可以将你的项目代码作为 `hexo` 分支推送到 GitHub 上。 + +> [与远程仓库建立关联](https://www.yunyoujun.cn/share/how-to-build-your-site/#与远程仓库建立关联) + +使用 GitHub 源文件地址到群(389401003)内提问,或发起 [ISSUE](https://github.com/YunYouJun/hexo-theme-yun/issues)。 + +## `hexo server` 文章只渲染部分内容 + +开发主题的过程中,发现长篇文章只能渲染出一部分,后半部分无法正常显示。 +一开始还以为是 `hexo-renderer-pug` 的问题,折腾了一天,兜兜转转,最后才发现似乎是开发时 `hexo-browsersync` 的问题。 + +相关 Issue :[Problem with long pages](https://github.com/hexojs/hexo-browsersync/issues/15) + +### 临时解决方案 + +在根目录的 `_config.yml` 中设置 + +```yaml +server: + compress: true +``` + +> + +## 标签与分类页面不显示? + +标签与分类页面需要参考 [页面配置](https://yun.yunyoujun.cn/guide/page.html#标签-tags) 安装对应插件并自行生成页面。 diff --git a/themes/yun/docs/guide/icon.md b/themes/yun/docs/guide/icon.md new file mode 100644 index 0000000..2a012a3 --- /dev/null +++ b/themes/yun/docs/guide/icon.md @@ -0,0 +1,64 @@ +# 默认图标 + +当前主题默认使用的图标(对应 [`_config.yml`](https://github.com/YunYouJun/hexo-theme-yun/blob/dev/_config.yml#L277) 文件中 `cdn.js.async.iconfont` 的链接 ) + +大部分图标取自 [Remix Icon](https://remixicon.com/),并保持其原命名。 + +> 只提供默认最常用的图标,有利于在满足使用的前提下,并减少加载的资源。如果您想要使用更多图标,推荐自行前往 [iconfont](https://www.iconfont.cn/) 定制你的图标集。并在 [head](/guide/config.html#head-头部资源) 引入。 + +在 `_config,yml` 中书写你的图标名称时,记得加上 `icon-` 的前缀。这可以将 iconfont 的 SVG 图标与其他字体图标区分开来。 + +如: + +```yaml +icon: icon-github-line +``` + +## 辅助图标 + +> 通用的 UI 辅助图标 + + + +## 表意图标 + +> 通常有现实中对应物体 + + + +## LOGO + + + +
+ 复制成功 +
+ + + + diff --git a/themes/yun/docs/guide/migrate.md b/themes/yun/docs/guide/migrate.md new file mode 100644 index 0000000..166caf3 --- /dev/null +++ b/themes/yun/docs/guide/migrate.md @@ -0,0 +1,9 @@ +# 迁移指南 + +当你升级主题时,可能会遇到一些不兼容更新。 + +## 打赏配置 + +v0.9.2 将原先的 `reward_settings` 与 `reward` 配置合并。 + +请参照 [打赏 | 主题配置](/guide/config.html#打赏) 修改。 diff --git a/themes/yun/docs/guide/page.md b/themes/yun/docs/guide/page.md new file mode 100644 index 0000000..1f70e0c --- /dev/null +++ b/themes/yun/docs/guide/page.md @@ -0,0 +1,469 @@ +# 页面配置 + +本主题默认支持并使用以下页面类型。 + +> 你可能需要先了解 Hexo 的 [Front-matter](https://hexo.io/zh-cn/docs/front-matter.html) + +如果想要让扩展页面链接(如:Girls, 相册等)显示在侧边栏中,你还需要配置一下导航 [侧边栏 - 页面链接](/guide/config.html#页面链接)。 + +## 文章 + +额外的头部字段 + +- `author`: 设置作者则会显示 +- `email`: 自动根据邮箱获取 [Gravatar](https://en.gravatar.com/site/implement/images/) 头像 + +```md {3,4} +--- +title: xxx +author: 云游君 +email: me@yunyoujun.cn +--- +``` + +- `description`: 描述(只出现在预览卡片上,不出现在正文中)(默认使用 `400` 字重以表强调,略细于加粗字体) +- `excerpt`: 摘要(不需要在 `Front-matter` 中设置,通过 `` 截断实现,预览卡片与正文中均出现) + +```md {3,8} +--- +title: xxx +description: xxxxxxx +--- + +这里是摘要 + + + +这里是更多内容 +``` + +### 图片注释 + +你可以遵循如下写法来对图片进行注释。 + +```md +![Audits - Lighthouse](https://i.loli.net/2020/03/08/DhfLu5yngb7NZE2.png)_谷歌浏览器 Audits - Lighthouse 检测分数_ +``` + +![img-caption-example.png](https://i.loli.net/2020/03/19/2bOIPC3Wv4Gxetm.png) + +## 页面 + +通用页面的配置。 + +- `title`: 设置页面标题(可以对默认标题进行覆盖) +- `icon`: 页面标题前的图标 + +> 标签、分类、相册等页面未设置标题时将默认使用语言包中的翻译(显示对应语言的 `标签`/`分类`/`相册` 等。) +> 你可以通过设置 `title` 来覆盖这些页面的标题。 + +譬如: + +```yaml {3} +--- +title: xxx +icon: icon-women-line +--- + +``` + +> 图标效果可见: [Lovely Girls](https://www.yunyoujun.cn/girls/) + +## 标签 tags + +> 示例: + +如果您尚未安装 `hexo-generator-tag`,请输入 `npm install hexo-generator-tag`。 + +新建 `tags` 页面,在博客根目录下输入: + +```sh +hexo new page tags +``` + +修改 `source/tags/index.md` 的 `Front Matter` + +```yaml {4} +--- +date: 2017-10-09 19:11:58 +comments: false +type: tags +--- + +``` + +你可以在 `yun.yml` 中设置: + +```yaml +wordcloud: + enable: true +``` + +来使用彩色的词云替代原生的标签云。 + +> 仅会在标签页自动引入 [wordcloud2.js](https://github.com/timdream/wordcloud2.js) + +## 分类 categories + +> 示例: + +如果您尚未安装 `hexo-generator-category`,请输入 `npm install hexo-generator-category`。 + +新建 `categories` 页面,在博客根目录下输入: + +```sh +hexo new page categories +``` + +修改 `source/categories/index.md` 的 `Front Matter` + +```yaml {4} +--- +date: 2017-10-12 10:47:16 +comments: false +type: categories +--- + +``` + +## 归档 archives + +Hexo 默认支持 + +本主题采用时间轴的形式重写 + +> 示例: + +## 关于 About + +### 关于你 + +默认点击自己的头像或者名称会进入关于页面。 + +你需要新建好你的关于页面。 + +```sh +hexo new page about +``` + +然后就开始介绍你自己吧~ + +### 关于站点 + +此外点击侧边栏中的站点名称,会进入关于站点页面。 + +你可以在 `source/about` 文件夹下新建 `site.md` 来介绍你的站点。 + +譬如记载站点的变迁历史,我觉得和关于自己放在一起可能会互相干扰,就分开了。 + +## 404 + +你需要先新建 404 页面。可以直接在 `source` 目录下新建 `404.md`。 + +```md {2} +--- +layout: 404 +title: 四大皆空 +permalink: /404.html +reward: false +--- +``` + +只有当你将其部署到 GitHub Pages 上,你访问不存在的页面才会显示。 + +Example: + +在本地,你也可以直接访问 `/404.html` 查看效果。 + +> [Creating a custom 404 page for your GitHub Pages site](https://help.github.com/en/github/working-with-github-pages/creating-a-custom-404-page-for-your-github-pages-site) + +## 友链 links + +新建友链页面 + +```sh +hexo new page links +``` + +进入 `source/links/index.md`,设置 `links` 字段。 + +- `url`: 博客链接 +- `avatar`: 头像图片链接 +- `name`: 怎么称呼? +- `blog`: 站点名称 +- `desc`: 一句话描述 +- `color`: 代表色,默认是灰色 `gray` + +你可以进入 [我的小伙伴们](https://www.yunyoujun.cn/links/) 查看效果 + +- `tip`: 友链未加载成功时的文字提示,加载完后会被移除。(仅当通过 JSON 加载友链时生效。) + +```yaml {2} +--- +layout: links +title: 我的小伙伴们 +date: 2019-06-21 13:06:06 +keywords: 链接 +description: 云游的小伙伴们 +comments: true +links: + - url: https://yunyoujun.cn + avatar: https://cdn.jsdelivr.net/gh/YunYouJun/yunyoujun.github.io/images/avatar.jpg + name: 云游君 + blog: 云游君的小站 + desc: All at sea. + color: "#0078e7" # 代表色 + email: # 非必须 +placeholder: 还没想好说些什么 # 默认对友链的描述 +tip: 友链加载中~如失败请刷新重试~ +--- + +``` + +让友链显示在侧边栏中 [侧边栏 - 页面链接](/guide/config.html#页面链接) + +### 随机友链 + +想要启用随机友链,你必须将其改为外置的 JSON 加载方式。 + +譬如: + +你可以参考我的 [YunYouJun/friends](https://github.com/YunYouJun/friends) 来自动生成你友链的 JSON 数据格式。 +(当然你自己手写存放在本地也可以。) + +- `random`: 随机友链顺序,默认未开启 + +```yaml {8-9} +--- +layout: links +title: 我的小伙伴们 +date: 2019-06-21 13:06:06 +keywords: 链接 +description: 云游的小伙伴们 +comments: true +links: https://cdn.jsdelivr.net/gh/YunYouJun/friends@gh-pages/links.json +random: true +--- + +``` + +> 注意:你使用 jsdelivr 可能会因为 CDN 有所延迟。 +> 你也可以像我一样使用自定义域名。 + +## Girls + +记录喜欢的女孩子们 + +页面示例: + +先设置开启。(我知道大多数人,可能并不会使用这个功能。所以默认是关闭的。) + +> 当关闭时,该页面的 CSS 文件也不会被打包进最后的 CSS 文件。所以不用担心本主题该功能会影响加载速度。 + +```yaml +girls: + enable: true +``` + +```sh +hexo new page girls +``` + +进入 `source/girls/index.md` + +```yaml {2} +--- +layout: girls +title: 可爱的女孩子 +banner: 排名不分先后 +girls: + - name: 名称 + avatar: 头像图片链接 + from: 出自什么作品 + url: 人物百科链接 + reason: 喜欢的理由 +--- + +``` + +> 当你不输入 `url` 人物百科链接时,会自动将人物名与[萌娘百科](https://zh.moegirl.org/)前缀拼接以获得人物百科链接。 + +可参考我的[配置](https://github.com/YunYouJun/yunyoujun.github.io/blob/hexo/source/girls/index.md)。 + +如果想要让 Girls 显示在侧边栏中,你还需要配置一下导航 [侧边栏 - 页面链接](/guide/config.html#页面链接)。 + +## 相册 albums + +存在一个相册主页,放置多个相册,点击进入相册查看更多照片。 + +在 `yun.yml` 中开启相册功能。 + +```yaml +albums: + enable: true +``` + +[相册示例](https://www.yunyoujun.cn/albums/) + +[配置示例](https://github.com/YunYouJun/yunyoujun.github.io/blob/hexo/source/albums/index.md) + +如果想要让相册显示在侧边栏中,你还需要配置一下导航 [侧边栏 - 页面链接](/guide/config.html#页面链接)。 + +### 相册集 + +相册集是相册的导航页面,你可以在此放置多个相册。 + +新建相册集页面 + +```sh +hexo new page albums +``` + +进入 `source/albums/index.md`,设置 `type`,和添加相册链接、封面等。 + +- `caption`: 相册标题 +- `url`: 相册链接 +- `cover`: 相册封面 +- `desc`: 相册描述 + +```yaml {2} +--- +type: albums +albums: + - caption: 夕阳西下 + url: /albums/sunset.html + cover: https://interactive-examples.mdn.mozilla.net/media/examples/elephant-660-480.jpg + desc: 我想起那天夕阳下的奔跑 +--- + +``` + +### 相册页 + +[相册页示例](https://www.yunyoujun.cn/albums/sunset.html) + +相册页,才是你真正存放照片的地方。 + +> 使用 [lightgallery.js](https://github.com/sachinchoolur/lightgallery.js/) 实现,仅在相册页才会加载该类库。 + +新建相册页面。 + +你只需在上面新建好的 `albums` 文件夹中,继续创建 `md` 文件,譬如新建 `sunset.md`。 + +或通过命令行新建: + +```sh +hexo new page --path albums/sunset "夕阳" +``` + +进入 `sunset.md` 文件,进行修改。 + +> 注意:这里是 `layout` 而不是 `type`。 + +::: tip +你还可以设置 `gallery_password` 来对相册进行加密。(记得将你的仓库设置为私有。) + +没有直接命名为 `password` 以防止与 [hexo-blog-encrypt](https://github.com/MikeCoder/hexo-blog-encrypt) 插件关键字 `password` 冲突。 + +> 因为使用了 [crypto-js](https://github.com/brix/crypto-js),所以你还需要 `npm install crypto-js`。 + +测试页面: +测试密码:test + +> 如果你发现在 `hexo s` 并开启了 PJAX 时,无法正常解密相册,不用担心,这是 Hexo 作为服务器时,对链接又重新加密了一遍,生成静态文件部署时是没有问题的。 + +::: + +```yaml {5} +--- +title: 夕阳 +date: 2020-04-18 16:27:24 +updated: 2020-04-18 16:27:24 +layout: gallery +password: test +photos: + - caption: 我 + src: https://interactive-examples.mdn.mozilla.net/media/examples/elephant-660-480.jpg + desc: 我想起那天夕阳下的奔跑 + - caption: 想起 + src: https://i.picsum.photos/id/198/510/300.jpg + desc: 那是我逝去的青春 +--- + +``` + +> 为什么使用相册集作为 `albums`,`gallery` 作为相册 ? +> [What is the Difference Between Albums vs Galleries in WordPress](https://enviragallery.com/what-is-the-difference-between-albums-vs-galleries-in-wordpress/) + +## Slides 幻灯片 + +> 使用 [reveal.js](https://revealjs.com/) 实现,更多信息请参见[文档](https://revealjs.com/markdown/)。 + +你可以使用 Markdown 混合 Html 来快速编写你的幻灯片。 + +`source` 下新建 `slides/test.md`。 + +或者命令: + +```sh +hexo new page --path slides/test "测试 Slides" +``` + +进入 `test.md`,修改头部如下(遵循对应语法即可开始编辑你的 Slides 文件) + +```yaml +--- +title: Color Dust +date: 2020-06-23 16:27:24 +updated: 2020-06-23 16:27:24 +layout: slide +slide: + theme: white + config: + history: true + mouseWheel: true +--- + +``` + +接着直接在下方用 Markdown 开始编写你的 Slides 文件吧。 + +```md +## Slide 1 + +## A paragraph with some text and a [link](http://hakim.se). + +## Slide 2 + +--- + +## Slide 3 +``` + +我的一个 Slides 示例: + +- [color-dust.md](https://github.com/YunYouJun/yunyoujun.github.io/blob/hexo/source/slides/color-dust.md) +- [预览](https://www.yunyoujun.cn/slides/color-dust.html#/) + +### 通用配置 + +默认水平分页分隔符为 `---`,垂直分页分隔符为 `~~`,笔记开始关键字为 `Note:`。 + +> 按 S 开启演讲者模式。 + +主题为 `white`,[更多主题名称](https://revealjs.com/themes/)。 + +`config` 对应[更多配置](https://revealjs.com/config/)。 + +```yaml +slide: + separator: --- + separator_vertical: "~~" + data_separator_notes: "^Note:" + theme: white + config: + history: true + mouseWheel: false +``` + +> 至于想要 Slides 的列表嘛,自己建个 `source/slides/index.md` 在里面列吧。 diff --git a/themes/yun/docs/guide/third-party-support.md b/themes/yun/docs/guide/third-party-support.md new file mode 100644 index 0000000..6ecd163 --- /dev/null +++ b/themes/yun/docs/guide/third-party-support.md @@ -0,0 +1,392 @@ +# 第三方支持 + +所有配置默认在 `source/_data/yun.yml` 文件下进行。 + +与额外依赖库支持的区别,此处主要为使用第三方服务商提供的服务实现。 + +## 评论 + +- `enable`: 默认开启(代表整体的评论区块,你开启任意类型评论系统都须保持其开启) +- `tips`: 评论上方的提示,您可以使用数组的形式修改为任意的话(若不想显示,可以留空) + +```yaml +comment: + enable: true + tips: + - 若您想及时得到回复提醒,建议跳转 GitHub Issues 评论。 + - 若没有本文 Issue,您可以使用 Comment 模版新建。 +``` + +关于评论系统我简单进行过一些对比,希望能起到一些参考。 + +> [第三方评论系统之我见](https://www.yunyoujun.cn/share/third-party-comment-system/) + +### GitHub Issue + +并内置实现跳转相关 Issue 的链接按钮与如何使用 GitHub Issue 进行评论的说明。 +可自行配置开启或关闭。 + +- `filters`: 为 GitHub Issue 搜索规则,可参见 [searching-issues-and-pull-requests](https://help.github.com/en/github/searching-for-information-on-github/searching-issues-and-pull-requests)。 + +```yaml +github_issues: + enable: true + username: YunYouJun + repository: yunyoujun.github.io + filters: is:issue +``` + +在项目 `Settings -> Options -> Features -> Issues -> Set up templates` 中为 GitHub Issues 设置 Comment 模版,第一个创建评论的人可以根据这个模版创建 Issue。 + +也可以参考我的 [comment.md](https://github.com/YunYouJun/yunyoujun.github.io/blob/hexo/.github/ISSUE_TEMPLATE/comment.md)。 + +### [Gitalk](https://github.com/gitalk/gitalk) + +Gitalk 是一个基于 GitHub Issue 的评论插件。 + +::: danger + +本主题不支持 Gitalk ,如果你真的想用,不妨自行添加或尝试一下 [utterances](https://utteranc.es/)。 + +::: + +基于以下理由,v0.9.7 将移除 Gitalk。 + +- 存在安全隐患,须授予公开项目读**写**权限 +- CSS 无独立命名空间(甚至覆盖了主题的 markdown 样式) +- 无亮暗模式 +- 部分 z-index 过高不合理,超过 sidebar +- 不支持重载以实现 pjax,[如何支持 pjax](https://github.com/gitalk/gitalk/issues/205) +- ... + +最后我发现了 [utterances](https://utteranc.es/),基本可以完美取代,所以决定彻底移除,今后大概也不会再加回来。 + +### [utterances](https://utteranc.es/) + +一个轻量的基于 GitHub Issue 的评论插件。请求更少的权限,使用起来更为方便。(如果你打算使用 Gitalk,不妨尝试一下 utterances。) + +```yaml +utterances: + enable: false + repo: owner/repo + issue-term: pathname + # label: comment + theme: github-light +``` + +> 记得配置成自己的仓库。 + +### [Disqus](https://disqus.com/) + +Disqus 可以说是全球最流行的第三方评论系统,但其在国内缺点也很明显,需要科学上网。 + +- `shortname`: 修改为你的用户名 +- `count`: 是否开启评论数统计(将会显示在文章的评论数) + +```yaml +disqus: + enable: true + shortname: yunyoujun + count: false +``` + +#### [DisqusJS](https://github.com/SukkaW/DisqusJS) + +> 纯前端、超轻量级的「评论基础模式」实现:使用 Disqus API 渲染评论列表 + +相比原生集成的 Disqus,解决的痛点就是在需要科学上网的地方,可以通过 Disqus API 渲染出一份基础的评论列表。 +让无法科学上网的用户可以直接看到评论。 + +> 当然,想要真正评论,你仍然需要科学上网。 + +- `apikey`: 必须,请参考 DisqusJS 文档 [配置 Disqus Application](https://github.com/SukkaW/DisqusJS#%E9%85%8D%E7%BD%AE-disqus-application) + +```yaml +disqusjs: + enable: false + shortname: yunyoujun + count: false + apikey: +``` + +### Valine + +参见 [Valine](https://valine.js.org) 官方文档进行配置。语言默认跟随 Hexo 的语言设置。 + +即 Hexo 根目录下的 `_config.yml`。(注意与主题的 `_config.yml` 相区分) + +```yaml +language: zh-CN +``` + +实际上,你只需要参考下方页面获取配置所需的 appId 和 appKey 即可。(不需要安装,主题默认使用 CDN。模版也已经内置。) + +> [快速开始 - 获取 APP ID 和 APP Key](https://valine.js.org/quickstart.html#%E8%8E%B7%E5%8F%96APP-ID-%E5%92%8C-APP-Key) + +- `visitor`: 文章阅读量统计(请最好不要与 [不蒜子](#busuanzi) 同时启用) + +> [更多配置项](https://valine.js.org/configuration.html) 写在 `yun.yml` 中。 + +```yaml +valine: + enable: false + appId: # your leancloud application appid + appKey: # your leancloud application appkey + placeholder: Just go go # comment box placeholder + avatar: # gravatar style + meta: + - nick + - mail + - link + pageSize: 10 # pagination size + # lang: zh-CN + # visitor: false + # highlight: true + # recordIP: false + # serverURLs: + # Emoji See: https://valine.js.org/emoji.html + # emojiCDN: //i0.hdslb.com/bfs/emote/ + # emojiMaps: + # tv_doge: 6ea59c827c414b4a2955fe79e0f6fd3dcd515e24.png + # more... + # enableQQ: false + # requiredFields: + # - nick + # - mail +``` + +Valine 的扩展和增强功能可以参考 [Valine-Admin](https://github.com/DesertsP/Valine-Admin),可以对具体的评论进行邮件提醒。 + +> pjax: [请问如何在带有 pjax 的页面下使用 - Issue #138](https://github.com/xCss/Valine/issues/138) + +### MiniValine + +A simple and minimalist comment system based on Leancloud. + +- GitHub: [MiniValine](https://github.com/MiniValine/MiniValine) +- Demo: + +```yaml +minivaline: + enable: false + appId: # Your leancloud application appid + appKey: # Your leancloud application appkey + placeholder: Write a Comment # Comment box placeholder + adminEmailMd5: # The MD5 of Admin Email to show Admin Flag. + math: true # Support MathJax. + md: true # Support Markdown. + # MiniValine's display language depends on user's browser or system environment + # If you want everyone visiting your site to see a uniform language, you can set a force language value + # Available values: en | zh-CN | (and many more) + # More i18n info: https://github.com/MiniValine/minivaline-i18n + lang: +``` + +### LiveRe 来必力 + +[LiveRe 来必力](https://livere.com/)是一家来自韩国的评论系统,支持多种 SNS 账号连接(QQ、微信、GitHub、百度、微博、豆瓣、Twitter 等等)。 +好处是**不**需要科学上网。(不知为何,始终不温不火。) + +> 注意:我反复尝试后,发现其无法兼容 PJAX,虽然的确可以在不同文章里显示不同的评论,但不知为何,后台通知里的文章链接仍旧来自于同一篇文章。 + +- `uid`: 安装代码中 `data-uid` 字段 + +```yaml +livere: + enable: true + uid: +``` + + + +## 搜索 + +### 引擎搜索 + +跳转搜索引擎搜索你的网站内容 + +可通过 `site:yunyoujun.cn 想要搜索的内容` 进行搜索 + +🌰: + +- `enable`: 开启搜索引擎(因为另外两种搜索都需要额外配置,所以默认开启引擎搜索)科学上网,谷歌最佳 +- `href`: 搜索引擎前缀 +- `domain`: 你网站的域名 + +```yaml +engine_search: + enable: true + href: "https://www.google.com/search?q=site:" + # href: "https://www.baidu.com/s?wd=site:" + # href: "https://www.bing.com/search?q=site:" + domain: yunyoujun.cn +``` + +### 本地搜索 + +您需要先安装 [hexo-generator-search](https://github.com/wzpan/hexo-generator-search),并参考配置文档。 + +本主题使用原生 JavaScript 实现,无 jQuery 依赖。 + +> 格式只支持 XML + +::: tip +启用它之前,记得先关闭默认的引擎搜索。 + +```yaml +engine_search: + enable: false +``` + +::: + +```yaml +# search +# https://github.com/wzpan/hexo-generator-search +local_search: + enable: true + src: /js/search/local-search.js +``` + +> 如果你发现本地正常,部署后点击搜索按钮却会跳转至页面底部,可能单纯只是缓存问题。 + +### Algolia + +[Algolia](https://www.algolia.com/) 是一家第三方搜索服务商。(更多信息请自行查看官网,或拜托搜索引擎。) + +您需要先安装 [hexo-algolia](https://github.com/oncletom/hexo-algolia) 或 [hexo-algoliasearch](https://github.com/LouisBarranqueiro/hexo-algoliasearch),并根据它们的说明文档进行相应的配置。 + +再开启它。 + +```yaml +algolia_search: + enable: true + src: /js/search/algolia-search.js + hits: + per_page: 10 # the number of search results per page +``` + +## 分析统计 + +### 谷歌分析 + +前往[谷歌分析](https://analytics.google.com/) 获取您的 ID。(科学上网) + +- `enable`: 是否开启 + +```yaml +google_analytics: + enable: true + id: UA-XXXXXXXXX-X +``` + +### busuanzi + +不蒜子是一款轻量极简的网站计数器。 + +前往[不蒜子](https://busuanzi.ibruce.info/) 查看相关信息。 + +使用说明: + +> 请最后不要与 [Valine](#valine) 的 `visitor` 同时启用。 + +- `site_uv`: 是否显示站点用户访问量 Unique Visitor(\_icon 为对应图标,以下同理) +- `site_pv`: 是否显示站点页面访问量 Page View +- `page_pv`: 是否显示文章页面访问量 Page View + +```yaml +busuanzi: + enable: false + site_uv: true + site_uv_icon: icon-user-line + site_pv: true + site_pv_icon: icon-eye-line + page_pv: true + page_pv_icon: icon-eye-line +``` + +## 广告 + +### 谷歌广告 + +前往[Google Adsense](https://www.google.com/adsense) 获取您的 client id。 + +```yaml +google_adsense: + enable: false + client: ca-pub-2245427233262012 +``` + +## SEO + +### [Google Search Console](https://search.google.com/search-console/) + +本主题并没有像 next 等其他主题为验证站点添加了配置选项。 + +原因如下: + +谷歌为用户提供了五种验证方法。 + +- **域名提供商**:添加 DNS 的 TXT 解析。(这个可能算是最麻烦(其实也不麻烦),但也是对站点本身影响最小的一个。)也是我此前使用的方式。 +- **文件验证**:将 HTML 文件上传至您的网站。(您只需下载并将其拷贝至 Hexo 工作目录的 `source` 文件夹下。并设置 `skip_render`,见下文。)也是推荐的方式之一。 +- **HTML 标记**:向您网站的首页添加元标记。这也是大部分主题通过配置实现站点验证的方法,但我并不推荐这种做法,所以并没有将其内置。 + - 我之所以没有添加这种方式,是因为这个 meta 部分信息,只对验证 google 站点有用,对于用户来说完全是多余的。 + - 而 Hexo 是静态站点生成器,通过这一方法来验证,就意味着整个站点所有静态文件头部都会带上这一信息。 + - 譬如一百多篇文章加分页加标签页等等,就相当于凭空增加了上百行代码,尽管它的影响微乎其微,但这不管对用户还是站长来说都完全没有必要。 +- **Google Analytics(分析)**:如果你已申请并使用了谷歌分析,你只需点击一个验证按钮即可。(**最佳方式**) +- **Google Tag Manager**:使用您的 Google 跟踪代码管理器帐号 + +如果您未使用谷歌分析,相比之下,直接使用 `域名提供商` 或者 `文件验证` 的方式或许更好,它不需要对主题进行侵入式修改,也不会过于增加生成后的静态文件大小。 + +::: tip + +注意,Google 现在提供的文件为 `html` 文件,直接放在 `source` 文件夹下,会被 Hexo 编译。 +因此你还需要找到站点配置文件 `_config.yml` 中的 `skip_render` 选型,并为其添加跳过渲染的文件。 + +示例: + +```yaml +skip_render: + - README.md + - googlexxxxxxxxxxxxxxx.html +``` + +::: + +### [百度搜索资源平台](https://ziyuan.baidu.com/) + +理由如上,更推荐使用 DNS 或文件验证方式。 + +#### 自动推送 + +将其设置为 `true`,以开启百度自动推送。 + +> 即每次页面被访问时,将自动向百度提交该页面链接。(有利于百度的 SEO) + +```yaml +baidu_push: true +``` + +> 注意:当国外用户访问时,百度推送可能无法正常工作会导致 `http` 与 `https` 混合,从而致使 `https` 在浏览器中的小锁消失。 + +## Tag Manager + +### [Google 跟踪代码管理器](https://tagmanager.google.com/) + +> Google 跟踪代码管理器是一个跟踪代码管理系统 (TMS),可以帮助您快速轻松地更新网站或移动应用上的跟踪代码及相关代码段(统称为“代码”)。将一小段跟踪代码管理器代码添加到项目后,您可以通过网页界面安全轻松地部署 Google Analytics(分析)和衡量代码配置。 + +如果你真的需要用到它,那么自然会明白它是干什么的。 + +```yaml +google_tagmanager: + enable: true + id: GTM-XXXXXXX +``` diff --git a/themes/yun/languages/default.yml b/themes/yun/languages/default.yml new file mode 100644 index 0000000..9f7edb4 --- /dev/null +++ b/themes/yun/languages/default.yml @@ -0,0 +1 @@ +zh-CN.yml \ No newline at end of file diff --git a/themes/yun/languages/en.yml b/themes/yun/languages/en.yml new file mode 100644 index 0000000..4f0632a --- /dev/null +++ b/themes/yun/languages/en.yml @@ -0,0 +1,96 @@ +title: + archive: Archive + category: Category + tag: Tag + album: Album + +menu: + home: Home + archives: Archives + categories: Categories + tags: Tags + about: About + search: Search + +sidebar: + overview: Overview + toc: Table of Contents + +post: + decrypt: DECRYPT + posted: Posted on + edited: Edited on + created: Created + modified: Modified + edit: Edit this post + more: more + untitled: Untitled + toc_empty: This post does not have a Table of Contents + views: Views + comments_count: Comments + related_posts: Related Posts + view_link: View Link + copyright: + author: Post author + link: Post link + license_title: Copyright Notice + license_content: "All articles in this blog are licensed under %s unless stating additionally." + +# page: +# totally: Totally +# tags: tags + +footer: + powered: "Powered by %s" + theme: Theme + total_views: Total Views + total_visitors: Total Visitors + +counter: + tag_cloud: + zero: No tag + one: 1 tag in total + other: "%d tags in total" + categories: + zero: No category + one: 1 category in total + other: "%d categories in total" + archive_posts: + zero: No post + one: 1 post in total + other: "%d posts in total" + albums: + zero: No album + one: 1 album in total + other: "%d albums in total" + photos: + zero: No photo + one: 1 photo in total + other: "%d photos in total" + +search: + placeholder: Searching... +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" + +symbol: + comma: ", " + period: ". " + colon: ": " + +reward: + donate: Donate + +accessibility: + back: Back +# nav_toggle: Toggle navigation bar +# prev_page: Previous page +# next_page: Next page + +wordcount: + count: Words count in article + count_total: Words count total + time: Reading time + time_total: Reading time total diff --git a/themes/yun/languages/ja.yml b/themes/yun/languages/ja.yml new file mode 100644 index 0000000..4be95eb --- /dev/null +++ b/themes/yun/languages/ja.yml @@ -0,0 +1,96 @@ +title: + archive: アーカイブ + category: カテゴリ + tag: タグ + album: ギャラリ + +menu: + home: ホーム + archives: アーカイブ + categories: カテゴリ + tags: タグ + about: プロフィール + search: 検索 + +sidebar: + overview: 概要 + toc: 見出し + +post: + decrypt: 解読する + posted: 投稿日 + edited: 編集日 + created: 作成日 + modified: 修正日 + edit: この記事を編集する + more: 詳細 + untitled: 無題 + toc_empty: には見出しがない + views: 閲覧数 + comments_count: コメント数 + related_posts: 関連記事 + view_link: リンクを表示 + copyright: + author: 著者 + link: 記事へのリンク + license_title: 著作権表示 + license_content: "このブログ内のすべての記事は、特別な記載がない限り %s の下のライセンスで保護されています。" + +# page: +# totally: 合計 +# tags: タグ + +footer: + powered: "Powered by %s" + theme: Theme + total_views: 閲覧合計数 + total_visitors: 合計閲覧者数 + +counter: + tag_cloud: + zero: 見つかりませんでした + one: 1 件のタグが見つかりました + other: "%d 件のタグが見つかりました" + categories: + zero: 見つかりませんでした + one: 1 件のカテゴリーが見つかりました + other: "%d 件のカテゴリーが見つかりました" + archive_posts: + zero: 見つかりませんでした + one: 1 件のポストが見つかりました + other: "%d 件のポストが見つかりました" + albums: + zero: 見つかりませんでした + one: 1 件のギャラリーが見つかりました + other: "%d 件のギャラリーが見つかりました" + photos: + zero: 見つかりませんでした + one: 1 件のイメージが見つかりました + other: "%d 件のイメージが見つかりました" + +search: + placeholder: 検索... +algolia_search: + input_placeholder: 検索... + hits_empty: "${query} が見つかりませんでした." + hits_stats: "${hits} 件見つかりました, ${time} ミリ秒" + +symbol: + comma: "," + period: "。" + colon: ":" + +reward: + donate: 寄付 + +accessibility: + back: 返す +# nav_toggle: ナビゲーションバーの切り替え +# prev_page: 前のページ +# next_page: 次のページ + +wordcount: + count: 単語数 + count_total: 単語の総数 + time: 読書の時間 + time_total: 読書の合計時間 diff --git a/themes/yun/languages/zh-CN.yml b/themes/yun/languages/zh-CN.yml new file mode 100644 index 0000000..cf90fe1 --- /dev/null +++ b/themes/yun/languages/zh-CN.yml @@ -0,0 +1,95 @@ +title: + archive: 归档 + category: 分类 + tag: 标签 + album: 相册 + +menu: + home: 首页 + archives: 归档 + categories: 分类 + tags: 标签 + about: 关于 + search: 搜索 + +sidebar: + overview: 站点概览 + toc: 文章目录 + +post: + decrypt: 解密 + posted: 发表于 + edited: 更新于 + created: 创建时间 + modified: 修改时间 + edit: 编辑 + more: 更多 + untitled: 未命名 + toc_empty: 此文章未包含目录 + views: 阅读次数 + comments_count: 评论数 + related_posts: 相关文章 + view_link: 查看链接 + copyright: + author: 本文作者 + link: 本文链接 + license_title: 版权声明 + license_content: "本博客所有文章除特别声明外,均默认采用 %s 许可协议。" + +# page: +# totally: 共有 +# tags: 标签 +footer: + powered: "由 %s 驱动" + theme: 主题 + total_views: 总访问量 + total_visitors: 总访客量 + +counter: + tag_cloud: + zero: 暂无标签 + one: 共计 1 个标签 + other: "共计 %d 个标签" + categories: + zero: 暂无分类 + one: 共计 1 个分类 + other: "共计 %d 个分类" + archive_posts: + zero: 暂无日志 + one: 共计 1 篇日志 + other: "共计 %d 篇日志" + albums: + zero: 暂无相册 + one: 共计 1 个相册 + other: "共计 %d 个相册" + photos: + zero: 暂无照片 + one: 共计 1 张照片 + other: "共计 %d 张照片" + +search: + placeholder: 搜索... +algolia_search: + input_placeholder: 搜索文章 + hits_empty: "找不到您查询的内容: ${query}" + hits_stats: "找到 ${hits} 条结果,用时 ${time} 毫秒" + +symbol: + comma: "," + period: "。" + colon: ":" + +reward: + donate: 打赏 + +accessibility: + back: 返回 + # nav_toggle: 切换导航栏 + # prev_page: 上一页 + # next_page: 下一页 + +wordcount: + count: 本文字数 + count_total: 站点总字数 + time: 阅读时长 + time_total: 站点阅读时长 diff --git a/themes/yun/layout/404.pug b/themes/yun/layout/404.pug new file mode 100644 index 0000000..0721077 --- /dev/null +++ b/themes/yun/layout/404.pug @@ -0,0 +1,31 @@ +extends _partial/layout.pug + +block content + #page + +page_header(page.title) + a(href='javascript:history.back()') + .not-found 404 + style. + .not-found { + text-align: center; + color: #fff; + font-size: 12rem; + text-shadow: + 0 5px 10px rgba(0,0,0,.25), + 0 20px 20px rgba(0,0,0,.15); + animation: text-glow 3s infinite; + } + @keyframes text-glow { + 0%{ + text-shadow: 0 5px 10px rgba(0,0,0,0), + } + 50%{ + text-shadow: 0 5px 30px rgba(0,0,0,0.5), + } + 100%{ + text-shadow: 0 5px 10px rgba(0,0,0,0), + } + } + article + section.post-body(itemprop='articleBody') + .post-content.markdown-body!= page.content diff --git a/themes/yun/layout/_mixin/icon.pug b/themes/yun/layout/_mixin/icon.pug new file mode 100644 index 0000000..9323d1b --- /dev/null +++ b/themes/yun/layout/_mixin/icon.pug @@ -0,0 +1,10 @@ +mixin icon(name, size=24) + if name.indexOf('ion-icon') !== -1 + ion-icon(name=name.slice(9)) + else if name.indexOf('material-icons') !== -1 + i(class='material-icons')=name.slice(15) + else if name.indexOf('icon') !== -1 + svg.icon(aria-hidden='true') + use(xlink:href='#' + name) + else + i(class=name) diff --git a/themes/yun/layout/_mixin/index.pug b/themes/yun/layout/_mixin/index.pug new file mode 100644 index 0000000..a43522c --- /dev/null +++ b/themes/yun/layout/_mixin/index.pug @@ -0,0 +1,2 @@ +include ../_mixin/icon.pug +include ../_mixin/page-header.pug \ No newline at end of file diff --git a/themes/yun/layout/_mixin/page-header.pug b/themes/yun/layout/_mixin/page-header.pug new file mode 100644 index 0000000..b2d8e58 --- /dev/null +++ b/themes/yun/layout/_mixin/page-header.pug @@ -0,0 +1,8 @@ +mixin page_header(title, icon) + header.post-header + h1.post-title + if page.icon + - icon = page.icon + if icon + +icon(icon) + !=title \ No newline at end of file diff --git a/themes/yun/layout/_mixin/post-collapse.pug b/themes/yun/layout/_mixin/post-collapse.pug new file mode 100644 index 0000000..80dceeb --- /dev/null +++ b/themes/yun/layout/_mixin/post-collapse.pug @@ -0,0 +1,32 @@ +mixin post_collapse(posts) + .post-collapse + for post in posts.data + if !post.hide || post.hide === 'index' + - var year + - var post_year = date(post.date, 'YYYY') + + if post_year !== year + - var year = post_year + .collection-title + h2.archive-year(id='archive-year-' + year)=year + article.post-item(itemscope, itemtype='https://schema.org/Article') + header.post-header + .post-meta + time.post-time(itemprop='dateCreated', datetime=moment(post.date).format(), content=date(post.date, config.date_format))=date(post.date, 'MM-DD') + h2.post-title(itemprop='name headline') + if !post.type + a.post-title-link(itemprop='url', href=url_for(post.path))=post.title + else + - var post_type = getPropertyByType(post.type) + if post.excerpt + a.post-title-link(itemprop='url', href=url_for(post.path), style= "color:" + post_type.color) + +icon(post_type.icon) + span=post.title + else + a.post-title-link(itemprop='url', href=url_for(post.url), target='_blank' rel='noopener', style= "color:" + post_type.color) + +icon(post_type.icon) + span=post.title + + if page.current == page.total + h5.last-word.text-center!=theme.archive.last_word + diff --git a/themes/yun/layout/_partial/background.pug b/themes/yun/layout/_partial/background.pug new file mode 100644 index 0000000..e233245 --- /dev/null +++ b/themes/yun/layout/_partial/background.pug @@ -0,0 +1,21 @@ +if theme.fireworks && theme.fireworks.enable + script(defer, src=theme.vendors.anime) + script(defer, src=url_for(theme.cdn.pre + theme.fireworks.src)) + canvas.fireworks + +if theme.trianglify && theme.trianglify.enable + canvas#trianglifyContainer + script(defer, src=theme.vendors.trianglify) + script. + document.addEventListener("DOMContentLoaded", () => { + const pattern = trianglify({ + width: #{theme.trianglify.width}, + height: #{theme.trianglify.height}, + cellSize: #{theme.trianglify.cell_size}, + palette: !{theme.trianglify.palette}, + }); + const canvasOpts = { + applyCssScaling: false + } + document.body.appendChild(pattern.toCanvas(trianglifyContainer, canvasOpts)); + }); diff --git a/themes/yun/layout/_partial/banner.pug b/themes/yun/layout/_partial/banner.pug new file mode 100644 index 0000000..efd93ea --- /dev/null +++ b/themes/yun/layout/_partial/banner.pug @@ -0,0 +1,10 @@ +#banner + .banner-line.vertical-line-top + .banner-line.vertical-line-bottom + if theme.banner.cloud.enable + include ../_widget/cloud.pug + if theme.banner.go_down.enable + a#goDown(aria-label='go-down' href="javascript:window.scrollTo(0, banner.clientHeight);") + +icon(theme.banner.go_down.icon) + +script(src=url_for(theme.cdn.pre + theme.banner.src)) \ No newline at end of file diff --git a/themes/yun/layout/_partial/footer.pug b/themes/yun/layout/_partial/footer.pug new file mode 100644 index 0000000..f41176e --- /dev/null +++ b/themes/yun/layout/_partial/footer.pug @@ -0,0 +1,53 @@ +footer#footer.sidebar-translate + if theme.footer.beian.enable + .beian + a(rel='noopener' href='https://beian.miit.gov.cn/' target='_blank') #{theme.footer.beian.icp} + + .copyright + - var nowYear = date(Date.now(), "YYYY") + span + | © + if theme.footer.since && theme.footer.since != nowYear + | #{theme.footer.since} – + | #{nowYear} + span#animate.with-love + +icon(theme.footer.icon.name, 20) + span.author #{config.author} + + if theme.footer.powered.enable + .powered + span!= __('footer.powered', 'Hexo') + ' v' + hexo_env('version') + span.footer-separator | + span= __('footer.theme') + ' - ' + a(rel='noopener' href='https://github.com/YunYouJun/hexo-theme-yun' target='_blank') + span Yun + | v#{yun_env('version')} + + if theme.footer.live_time.enable + .live_time + span!=theme.footer.live_time.prefix + span#display_live_time + if theme.footer.live_time.suffix + span.moe-text!=theme.footer.live_time.suffix + script. + function blog_live_time() { + window.setTimeout(blog_live_time, 1000); + const start = new Date('#{theme.footer.live_time.start_time}'); + const now = new Date(); + const timeDiff = (now.getTime() - start.getTime()); + const msPerMinute = 60 * 1000; + const msPerHour = 60 * msPerMinute; + const msPerDay = 24 * msPerHour; + const passDay = Math.floor(timeDiff / msPerDay); + const passHour = Math.floor((timeDiff % msPerDay) / 60 / 60 / 1000); + const passMinute = Math.floor((timeDiff % msPerHour) / 60 / 1000); + const passSecond = Math.floor((timeDiff % msPerMinute) / 1000); + display_live_time.innerHTML = " " + passDay + " 天 " + passHour + " 小时 " + passMinute + " 分 " + passSecond + " 秒"; + } + blog_live_time(); + + if theme.busuanzi.enable + include ../_third-party/analytics/busuanzi.pug + + if theme.footer.custom_text + .footer-custom-text!=`${theme.footer.custom_text}` diff --git a/themes/yun/layout/_partial/head.pug b/themes/yun/layout/_partial/head.pug new file mode 100644 index 0000000..827ff98 --- /dev/null +++ b/themes/yun/layout/_partial/head.pug @@ -0,0 +1,88 @@ +- var favicon = config.favicon || theme.favicon || '/favicon.ico' +//- favicon +link(rel='shortcut icon' type="image/svg+xml" href=url_for(favicon)) +//- Safari +link(rel="mask-icon" href=url_for(favicon), color=theme.colors.primary) +link(rel="alternate icon" href="/yun.ico") + +//- not use cdn.pre in dev +if process.env.NODE_ENV === 'dev' + - theme.cdn.pre = '' + +//- preload +if is_home() + link(rel='preload', href=url_for(theme.cdn.pre + theme.banner.src), as='script') + +if theme.preload + each items, name in theme.preload + each item in items + link(rel='preload', href=url_for(theme.cdn.pre + item), as=name) + +//- prefetch +if theme.prefetch + each items, name in theme.prefetch + each item in items + link(rel='prefetch', href=url_for(theme.cdn.pre + item), as=name) + +//- dns-prefetch +if theme.dns_prefetch + each item in theme.dns_prefetch + link(rel='dns-prefetch', href=url_for(item)) + +//- preconnect +if theme.preconnect + each item in theme.preconnect + link(rel='preconnect', href=url_for(item), crossorigin) + +//- base +if theme.css !== undefined && theme.css.length > 0 + each url in theme.css + link(rel='stylesheet', href=url_for(theme.cdn.pre + url)) + +if config.feed && config.feed.path + != feed_tag(config.feed.path) + +//- config +!=yun_config() + +//- head custom +if theme.head.css + each item in theme.head.css + link(rel='stylesheet', href=url_for(item)) + +if theme.head.js.base + each item in theme.head.js.base + script(src=url_for(item)) + +if theme.head.js.async + each item in theme.head.js.async + script(src=url_for(item), async) + +if theme.head.js.defer + each item in theme.head.js.defer + script(src=url_for(item), defer) + +include ../_third-party/index.pug + +//- open graph +//- to avoid conflict +if page.photos + - var page_photos = page.photos + - page.photos = page_photos.map(photo=>{return photo.src}) + +!=open_graph() + +if page.photos + - page.photos = page_photos + +if theme.mode !== 'light' + script(src=url_for('/js/ui/mode.js')) + +//- no-referer +if page.type === 'albums' || page.layout === 'gallery' + meta(name="referrer" content="no-referrer") + +//- prism +if config.prismjs && config.prismjs.enable + link(id="light-prism-css", rel="stylesheet", href=theme.vendors.prismjs.themes[theme.codeblock.prismjs.light], media="(prefers-color-scheme: light)") + link(id="dark-prism-css", rel="stylesheet", href=theme.vendors.prismjs.themes[theme.codeblock.prismjs.dark], media="(prefers-color-scheme: dark)") diff --git a/themes/yun/layout/_partial/layout.pug b/themes/yun/layout/_partial/layout.pug new file mode 100644 index 0000000..e7f6e3f --- /dev/null +++ b/themes/yun/layout/_partial/layout.pug @@ -0,0 +1,43 @@ +- var title = (__('title') !== 'title' && __('title')) || config.title +- var author = config.author + (config.email ? ',' + config.email : '') +- var copyright = config.copyright || config.author + +doctype html +html(lang=config.language) + head + meta(charset='UTF-8') + meta(http-equiv="X-UA-Compatible" content="IE=edge") + meta(name="viewport" content="width=device-width, initial-scale=1.0") + meta(name='theme-color', content=theme.colors.primary) + meta(name='author' content=author) + meta(name="copyright" content=copyright) + !=meta_generator() + meta(name='theme' content="hexo-theme-yun") + - page_title(page) + if page.title + title=page.title + ' | ' + title + else + title=title + include ../_third-party/cdn.pug + include head.pug + block preconnect + body(class= is_home() ? 'is-home' : '') + //- background + include background.pug + .container + //- global + include ../_mixin/index.pug + include sidebar.pug + main#content.sidebar-translate + block content + + if is_post() || is_page() + if page.comments && theme.comment.enable + include ../_third-party/comments/index.pug + + include footer.pug + //- widget + include ../_widget/index.pug + if theme.js + each item in theme.js + script(defer, src=url_for(theme.cdn.pre + item)) diff --git a/themes/yun/layout/_partial/pagination.pug b/themes/yun/layout/_partial/pagination.pug new file mode 100644 index 0000000..c3e3c29 --- /dev/null +++ b/themes/yun/layout/_partial/pagination.pug @@ -0,0 +1,10 @@ +- + var options = { + prev_text: '', + next_text: '', + escape: false + } + +if page.prev || page.next + nav.pagination + !=paginator(options) diff --git a/themes/yun/layout/_partial/post/post-classify.pug b/themes/yun/layout/_partial/post/post-classify.pug new file mode 100644 index 0000000..258dbd8 --- /dev/null +++ b/themes/yun/layout/_partial/post/post-classify.pug @@ -0,0 +1,22 @@ +.post-classify + if post.categories && post.categories.length && theme.post_meta.categories + .post-card-category + span.post-meta-item-icon + +icon('icon-folder-line') + | + for category, index in post.categories.data + span + a(href=url_for(category.path)) + span(itemprop='text')=category.name + + - var category_length = post.categories.length + if category_length > 1 && index != category_length - 1 + | > + if post.tags && post.tags.length && theme.post_meta.tags + .post-card-tag + for tag in post.tags.data + | + span.post-meta-item-icon + +icon('icon-price-tag-3-line') + | + a(href=url_for(tag.path, rel='tag'))=tag.name + ' ' \ No newline at end of file diff --git a/themes/yun/layout/_partial/post/post-copyright.pug b/themes/yun/layout/_partial/post/post-copyright.pug new file mode 100644 index 0000000..b82fdf4 --- /dev/null +++ b/themes/yun/layout/_partial/post/post-copyright.pug @@ -0,0 +1,33 @@ +- let ccVersion = (theme.creative_commons.license == 'zero') ? '1.0' : '4.0' +- let ccIcon = '' +- let ccPrefix = (theme.creative_commons.license == 'zero') ? 'publicdomain' : 'licenses' +- let ccURL = 'https://creativecommons.org/' + ccPrefix + '/' + theme.creative_commons.license + '/' + ccVersion + '/' + theme.creative_commons.language + +- licenses = theme.creative_commons.license.split('-') +for license in licenses + - ccIcon += `` + +ul.post-copyright + li.post-copyright-author + strong!= __('post.copyright.author') + __('symbol.colon') + != post.author || author + li.post-copyright-link + strong!= __('post.copyright.link') + __('symbol.colon') + - let postURL = post.url || post.permalink + a(href=postURL, title=post.title)!= postURL + li.post-copyright-license + strong!= __('post.copyright.license_title') + __('symbol.colon') + != _p('post.copyright.license_content', `${ccIcon}`) + +if theme.creative_commons.clipboard + - var copyrightText = "\\n\\n" + __('post.copyright.author') + __('symbol.colon') + (post.author || author) + "\\n" + __('post.copyright.link') + __('symbol.colon') + postURL + "\\n" + __('post.copyright.license_title') + __('symbol.colon') + _p('post.copyright.license_content', `CC ${theme.creative_commons.license.toUpperCase() + ' ' + ccVersion}`) + script. + document.addEventListener('copy', function (event) { + const clipboardData = event.clipboardData || window.clipboardData; + if (!clipboardData) { return; } + const text = window.getSelection().toString(); + if (text) { + event.preventDefault(); + clipboardData.setData('text/plain', text + '!{copyrightText}'); + } + }); diff --git a/themes/yun/layout/_partial/post/post-edit.pug b/themes/yun/layout/_partial/post/post-edit.pug new file mode 100644 index 0000000..6676295 --- /dev/null +++ b/themes/yun/layout/_partial/post/post-edit.pug @@ -0,0 +1,2 @@ +a.post-edit-link(href=theme.post_edit.url + page.source, target='_blank', title=__('post.edit'), rel='noopener') + +icon('icon-edit-line') \ No newline at end of file diff --git a/themes/yun/layout/_partial/post/post-meta.pug b/themes/yun/layout/_partial/post/post-meta.pug new file mode 100644 index 0000000..ee29826 --- /dev/null +++ b/themes/yun/layout/_partial/post/post-meta.pug @@ -0,0 +1,110 @@ +.post-meta + .post-time(style=theme.wordcount.enable && !post.type ? "display:block" : "display:inline-block") + - var date_diff = date(post.date) != date(post.updated) + - var time_diff = time(post.date) != time(post.updated) + - var datetime_diff = date_diff || time_diff + if theme.post_meta.created_at + span.post-meta-item-icon + +icon('icon-calendar-line') + | + if theme.post_meta.item_text + span.post-meta-icon-text=__('post.posted') + | + - var create_title = __('post.created') + __('symbol.colon') + full_date(post.date) + time(title=create_title, itemprop='dateCreated datePublished', datetime=moment(post.date).format())=date(post.date) + + if theme.post_meta.updated_at && datetime_diff + - var display_updated = date_diff + if display_updated + if theme.post_meta.created_at && theme.post_meta.updated_at + span.post-meta-divider='-' + span.post-meta-item-icon + +icon('icon-calendar-2-line') + | + if theme.post_meta.item_text + span.post-meta-icon-text=__('post.edited') + | + - var update_title = __('post.modified') + __('symbol.colon') + full_date(post.updated) + time(title=update_title, itemprop='dateModified', datetime=moment(post.updated).format())=date(post.updated) + + //- wordcount + if theme.wordcount.enable && !post.type + span.post-count + if theme.wordcount.count || theme.wordcount.time + span.post-symbolcount + if theme.wordcount.count + span.post-meta-item-icon(title=__('wordcount.count')) + +icon('icon-file-word-line') + | + span(title=__('wordcount.count'))=wordcount(post.content) + if theme.wordcount.count && theme.wordcount.time + span.post-meta-divider='-' + if theme.wordcount.time + span.post-meta-item-icon(title=__('wordcount.time')) + +icon('icon-timer-line') + | + span(title=__('wordcount.time'))=min2read(post.content) + 'm' + + if is_post() && theme.busuanzi.enable && theme.busuanzi.page_pv + span.post-busuanzi + span.post-meta-divider='-' + span.post-meta-item-icon(title=__('post.views')) + +icon(theme.busuanzi.page_pv_icon) + | + span#busuanzi_value_page_pv + + if is_post() && theme.valine.enable && theme.valine.visitor + span.leancloud_visitors(id=url_for(post.path), data-flag-title=post.title) + span.post-meta-divider='-' + span.post-meta-item-icon(title=__('post.views')) + +icon(theme.busuanzi.page_pv_icon) + | + span.leancloud-visitors-count + + if theme.disqus.count + span.post-meta-divider='-' + span.post-meta-item-icon(title=__('post.comments_count')) + +icon(theme.comment.icon) + | + a(href=url_for(page.path) + '#disqus_thread') + + if is_post() + .post-classify + if post.categories && post.categories.length && theme.post_meta.categories + span.post-category + span.post-meta-item-icon + +icon('icon-folder-line') + | + for category, index in post.categories.data + span(itemprop='about', itemscope, itemtype='https://schema.org/Thing') + - var categoryColor = "var(--hty-text-color)" + if category.name in theme.categories + - categoryColor = theme.categories[category.name] + a.category(href=url_for(category.path), style=`--text-color:${categoryColor}` itemprop='url' rel='index') + span(itemprop='text')=category.name + - var categoryColor = null + + - var category_length = post.categories.length + if category_length > 1 && index != category_length - 1 + | > + + if post.tags && post.tags.length && theme.post_meta.tags + span.post-tag + if post.categories && post.categories.length && theme.post_meta.categories + span.post-meta-divider='-' + for tag in post.tags.data + - var tagColor = "var(--hty-text-color)" + if tag.name in theme.tags + - tagColor = theme.tags[tag.name] + a.tag(href=url_for(tag.path, rel='tag'), style=`--text-color:${tagColor}`) + - tagColor = null + span.post-meta-item-icon + +icon('icon-price-tag-3-line') + span.tag-name!=tag.name + + if post.author + .post-author + if post.email + .author-avatar + img(src=gravatar(post.email, {s: 20, d: theme.anonymous_image})) + span.author-name=post.author diff --git a/themes/yun/layout/_partial/post/post-nav.pug b/themes/yun/layout/_partial/post/post-nav.pug new file mode 100644 index 0000000..aae6b92 --- /dev/null +++ b/themes/yun/layout/_partial/post/post-nav.pug @@ -0,0 +1,17 @@ +.post-nav + .post-nav-item + if post.prev + while post.prev.hide && post.prev.prev + - post.prev = post.prev.prev + if !post.prev.hide + a.post-nav-prev(href=url_for(post.prev.path), rel='prev', title=post.prev.title) + +icon('icon-arrow-left-s-line') + span.post-nav-text=post.prev.title + .post-nav-item + if post.next + while post.next.hide && post.next.next + - post.next = post.next.next + if !post.next.hide + a.post-nav-next(href=url_for(post.next.path), rel='next', title=post.next.title) + span.post-nav-text=post.next.title + +icon('icon-arrow-right-s-line') \ No newline at end of file diff --git a/themes/yun/layout/_partial/post/post-schema.pug b/themes/yun/layout/_partial/post/post-schema.pug new file mode 100644 index 0000000..ae2ebd4 --- /dev/null +++ b/themes/yun/layout/_partial/post/post-schema.pug @@ -0,0 +1,6 @@ +link(itemprop='mainEntityOfPage', href=config.url + url_for(post.path)) +span(hidden, itemprop='author', itemscope, itemtype='https://schema.org/Person') + meta(itemprop='name', content=author) + meta(itemprop='description', content=description) +span(hidden, itemprop='publisher', itemscope, itemtype='https://schema.org/Organization') + meta(itemprop='name', content=title) \ No newline at end of file diff --git a/themes/yun/layout/_partial/post/reward.pug b/themes/yun/layout/_partial/post/reward.pug new file mode 100644 index 0000000..0f0679b --- /dev/null +++ b/themes/yun/layout/_partial/post/reward.pug @@ -0,0 +1,18 @@ +#reward-container + if theme.reward.url + a#reward-button.hty-icon-button.button-glow(href=url_for(theme.reward.url) title=__('reward.donate')) + +icon('icon-hand-coin-line') + else + span#reward-button.hty-icon-button.button-glow(title=__('reward.donate'), onclick='var qr = document.getElementById("qr"); qr.style.display = (qr.style.display === "none") ? "block" : "none";') + +icon('icon-hand-coin-line') + if theme.reward.comment + #reward-comment!=theme.reward.comment + #qr(style='display:none;') + for method in theme.reward.methods + div(style='display:inline-block') + if method.path + a(href= method.link ? method.link : method.path) + img(loading='lazy', src=url_for(method.path), alt=method.name, title=method.name) + div + span(title=translation, style='color:' + method.color) + +icon(method.icon) diff --git a/themes/yun/layout/_partial/recent-posts.pug b/themes/yun/layout/_partial/recent-posts.pug new file mode 100644 index 0000000..00c4671 --- /dev/null +++ b/themes/yun/layout/_partial/recent-posts.pug @@ -0,0 +1,57 @@ +section#recent-posts.hty-layout-grid + each post in page.posts.data + if !post.hide + .hty-layout-grid__cell.hty-layout-grid__cell--span-12 + article.hty-card.post-card(itemscope, itemtype='https://schema.org/Article') + include ../_partial/post/post-schema.pug + if post.top || post.sticky + .post-top-icon + +icon("icon-pushpin-line") + .post-card-header + header.post-header + h2.post-title(itemprop='name headline') + if !post.type + a.post-title-link(itemprop='url', href=url_for(post.path))=post.title + else + - post_type = getPropertyByType(post.type) + a.post-title-link(itemprop='url' href=post.url target='_blank' rel='noopener', style= "color:" + post_type.color) + +icon(post_type.icon) + span=post.title + + include ../_partial/post/post-meta.pug + if post.description + .post-description=post.description + .post-card-content.text-center + .post-card-excerpt.markdown-body!=post.excerpt + + .hty-card__actions.post-card__actions + .post-card-category + span.post-meta-item-icon + +icon('icon-folder-line') + | + if post.categories && post.categories.length && theme.post_meta.categories + for category, index in post.categories.data + - var categoryColor = "var(--hty-text-color)" + if category.name in theme.categories + - categoryColor = theme.categories[category.name] + a.category(href=url_for(category.path), style= categoryColor ? `--text-color:${categoryColor}`:'') + span(itemprop='text')=category.name + - var categoryColor = null + + - var category_length = post.categories.length + if category_length > 1 && index != category_length - 1 + | > + .post-card-tag + if post.tags && post.tags.length && theme.post_meta.tags + for tag in post.tags.data + - var tagColor = "var(--hty-text-color)" + if tag.name in theme.tags + - tagColor = theme.tags[tag.name] + a.tag(href=url_for(tag.path, rel='tag'), style= tagColor ? `--text-color:${tagColor}`:'') + - tagColor = null + span.post-meta-item-icon + +icon('icon-price-tag-3-line') + span.tag-name!=tag.name + else + span.post-meta-item-icon + +icon('icon-price-tag-3-line') diff --git a/themes/yun/layout/_partial/sidebar.pug b/themes/yun/layout/_partial/sidebar.pug new file mode 100644 index 0000000..92df455 --- /dev/null +++ b/themes/yun/layout/_partial/sidebar.pug @@ -0,0 +1,82 @@ +a#menu-btn.sidebar-toggle.hty-icon-button + .hamburger(class='hamburger--spin' type='button') + span.hamburger-box + span.hamburger-inner + +.sidebar-toggle.sidebar-overlay + +aside.sidebar + //- can not be async + //- https://stackoverflow.com/questions/9237044/async-loaded-scripts-with-domcontentloaded-or-load-event-handlers-not-being-call + script(src=url_for(theme.cdn.pre + theme.sidebar.src)) + - var toc_content = toc(page.content, {list_number: theme.toc.list_number, max_depth: theme.toc.max_depth, min_depth: theme.toc.min_depth}) + if is_post() + ul.sidebar-nav + li.sidebar-nav-item.sidebar-nav-toc.hty-icon-button(data-target='post-toc-wrap', title=__('sidebar.toc'), class=toc_content ? 'sidebar-nav-active' : '') + +icon('icon-list-ordered') + li.sidebar-nav-item.sidebar-nav-overview.hty-icon-button(data-target='site-overview-wrap', title=__('sidebar.overview'), class=toc_content ? '' : 'sidebar-nav-active') + +icon('icon-passport-line') + + #site-overview-wrap.sidebar-panel(class= is_post() && toc_content.length > 1 ? '' : 'sidebar-panel-active') + include ./sidebar/info.pug + + nav.site-state + a.site-state-item.hty-icon-button.icon-home(href=url_for(theme.menu.home.path), title=theme.menu.home.title || __('menu.home')) + span.site-state-item-icon + +icon(theme.menu.home.icon) + + for item in theme.menu.list + if item.type === 'archives' + - item.title = item.title || __('menu.archives') + - item.count = site.posts.length + else if item.type === 'categories' + - item.title = item.title || __('menu.categories') + - item.count = site.categories.length + else if item.type === 'tags' + - item.title = item.title || __('menu.tags') + - item.count = site.tags.length + .site-state-item + a(href=url_for(item.path), title=item.title) + span.site-state-item-icon + +icon(item.icon) + if item.count !== undefined + span.site-state-item-count!=item.count + + if theme.menu.custom + a.site-state-item.hty-icon-button(href=url_for(theme.menu.custom.path), title=theme.menu.custom.title) + span.site-state-item-icon + +icon(theme.menu.custom.icon) + + + hr(style="margin-bottom:0.5rem") + if theme.social + .links-of-author + for social in theme.social + if social.color === 'black' + - social.color = 'var(--hty-text-color)' + a.links-of-author-item.hty-icon-button(rel='noopener' href=social.link, title=social.name, target='_blank' style='color:' + social.color) + +icon(social.icon) + + if theme.pages + hr(style="margin:0.5rem 1rem") + .links + for link in theme.pages + a.links-item.hty-icon-button(href=url_for(link.url), title=link.name, style='color:' + link.color) + +icon(link.icon) + + if theme.mode === 'auto' + br + a#toggle-mode-btn.links-item.hty-icon-button(href='javascript:;' title="Mode" style='color: #f1cb64') + +icon('icon-contrast-2-line') + + if is_post() + #post-toc-wrap.sidebar-panel(class=toc_content.length > 1 ? 'sidebar-panel-active' : '') + .post-toc + .post-toc-content + != toc_content.length > 1 ? toc_content : theme.toc.placeholder || __('post.toc_empty') + + if theme.sidebar.tagcloud.enable + .tag-cloud + - var start_color = theme.colors.tag_start_color || '#333' + - var end_color = theme.colors.tag_end_color || theme.colors.primary + .tag-cloud-tags!= tagcloud({min_font: 12, max_font: 30, amount: theme.sidebar.tagcloud.amount, color: true, start_color, end_color}) diff --git a/themes/yun/layout/_partial/sidebar/info.pug b/themes/yun/layout/_partial/sidebar/info.pug new file mode 100644 index 0000000..d54622c --- /dev/null +++ b/themes/yun/layout/_partial/sidebar/info.pug @@ -0,0 +1,13 @@ +.site-info(class=is_post() ? (theme.avatar.mickey_mouse ? 'mickey-mouse' : 'fix-top') : '') + if theme.avatar && theme.avatar.url + a.site-author-avatar(href=url_for('about/'), title=config.author) + img(width=96, loading='lazy', src=is_url(theme.avatar.url) ? theme.avatar.url : url_for(theme.cdn.pre + theme.avatar.url), alt=config.author) + if theme.avatar.status.enable + span.site-author-status(title=theme.avatar.status.message)=theme.avatar.status.emoji + .site-author-name + a(href=url_for('about/')) + | #{config.author} + a.site-name(href=url_for('about/site.html')) + | #{config.title} + sub.site-subtitle!=config.subtitle + .site-desciption!=config.description diff --git a/themes/yun/layout/_third-party/adsense/google-adsense.pug b/themes/yun/layout/_third-party/adsense/google-adsense.pug new file mode 100644 index 0000000..2952cf3 --- /dev/null +++ b/themes/yun/layout/_third-party/adsense/google-adsense.pug @@ -0,0 +1 @@ +script(data-ad-client=theme.google_adsense.client, async, src='https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js') \ No newline at end of file diff --git a/themes/yun/layout/_third-party/analytics/busuanzi.pug b/themes/yun/layout/_third-party/analytics/busuanzi.pug new file mode 100644 index 0000000..949f215 --- /dev/null +++ b/themes/yun/layout/_third-party/analytics/busuanzi.pug @@ -0,0 +1,14 @@ +#busuanzi + script(async src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js") + if theme.busuanzi.site_uv + span#busuanzi_container_site_uv(title=__('footer.total_visitors'))!=theme.busuanzi.site_uv_header + span + +icon(theme.busuanzi.site_uv_icon, 14) + span#busuanzi_value_site_uv + if theme.busuanzi.site_pv + if theme.busuanzi.site_uv + span.footer-separator | + span#busuanzi_container_site_pv(title=__('footer.total_views'))!=theme.busuanzi.site_pv_header + span + +icon(theme.busuanzi.site_pv_icon, 14) + span#busuanzi_value_site_pv \ No newline at end of file diff --git a/themes/yun/layout/_third-party/analytics/google-analytics.pug b/themes/yun/layout/_third-party/analytics/google-analytics.pug new file mode 100644 index 0000000..d75d95f --- /dev/null +++ b/themes/yun/layout/_third-party/analytics/google-analytics.pug @@ -0,0 +1,22 @@ +link(rel='preconnect' href='https://www.google-analytics.com' crossorigin) +link(rel='preconnect' href='https://stats.g.doubleclick.net' crossorigin) +script(async, src="https://www.googletagmanager.com/gtag/js?id=" + theme.google_analytics.id) +script. + if (CONFIG.hostname === location.hostname) { + window.dataLayer = window.dataLayer || []; + function gtag(){dataLayer.push(arguments);} + gtag('js', new Date()); + gtag('config', '#{theme.google_analytics.id}'); + } +if theme.pjax.enable + script. + //- only for pjax + function sendPageView() { + if (CONFIG.hostname !== location.hostname) return; + window.dataLayer = window.dataLayer || []; + function gtag(){dataLayer.push(arguments);} + gtag('event', 'page_view', { + page_path: encodeURIComponent(location.pathname), + }) + } + document.addEventListener("pjax:success", sendPageView); diff --git a/themes/yun/layout/_third-party/aplayer.pug b/themes/yun/layout/_third-party/aplayer.pug new file mode 100644 index 0000000..15f74ac --- /dev/null +++ b/themes/yun/layout/_third-party/aplayer.pug @@ -0,0 +1,4 @@ +link(rel="stylesheet" type="text/css" href=theme.vendors.aplayer.css, class="aplayer-style-marker") +script(src=theme.vendors.aplayer.js, class='aplayer-script-marker', defer) +if theme.aplayer.meting + script(src=theme.vendors.aplayer.meting, class='meting-script-marker', defer) diff --git a/themes/yun/layout/_third-party/cdn.pug b/themes/yun/layout/_third-party/cdn.pug new file mode 100644 index 0000000..2b06ce4 --- /dev/null +++ b/themes/yun/layout/_third-party/cdn.pug @@ -0,0 +1,61 @@ +if theme.font.cdn.enable + each item in theme.font.cdn.lib + link(rel='stylesheet', href=item, media="print" onload="this.media='all'") + +if theme.cdn.css + each item in theme.cdn.css + link(rel='stylesheet', href=item) + +if theme.cdn.js.base + each item in theme.cdn.js.base + script(src=item) + +if theme.cdn.js.async + each item in theme.cdn.js.async + script(src=item, async) + +if theme.cdn.js.defer + each item in theme.cdn.js.defer + script(src=item, defer) + +if theme.scrollreveal.enable + script(src=theme.vendors.scrollreveal, defer) + script. + document.addEventListener("DOMContentLoaded", () => { + !{JSON.stringify(theme.scrollreveal.targets)}.forEach((target)=> { + ScrollReveal().reveal(target); + }) + }); + +//- math support +include ./math/index.pug + +if theme.aplayer.global + include ./aplayer.pug + +//- pjax +if theme.pjax.enable + include ./pjax.pug + script(src=theme.vendors.vue) + +if is_page() || is_post() + if page.aplayer && !theme.aplayer.global + include aplayer.pug + + if page.aplayer + script. + document.addEventListener( + "pjax:success", + function() { + if (window.aplayers) { + loadMeting(); + } + }, + !1 + ); + + + + + + diff --git a/themes/yun/layout/_third-party/comments/disqus.pug b/themes/yun/layout/_third-party/comments/disqus.pug new file mode 100644 index 0000000..fa2128a --- /dev/null +++ b/themes/yun/layout/_third-party/comments/disqus.pug @@ -0,0 +1,31 @@ +#disqus_thread +.js-Pjax + script. + var disqus_config = function () { + this.page.url = "!{page.permalink}"; // Replace PAGE_URL with your page's canonical URL variable + this.page.identifier = "!{page.path}"; // Replace PAGE_IDENTIFIER with your page's unique identifier variable + this.page.title = "!{page.title}" + }; + // here we will only load the disqus `; +}); + +// wordcloud +hexo.extend.helper.register("wordcloud_config", function(color) { + let { config, theme } = this; + const wordcloud_config = {}; + let list = []; + const tags = hexo.locals.get("tags"); + tags.forEach((tag) => { + list.push([tag.name, tag.length / 10 + 1, config.root + tag.path]); + }); + wordcloud_config.list = list; + wordcloud_config.fontFamily = theme.font.sans_serif.family; + wordcloud_config.fontWeight = theme.font.sans_serif.weight; + wordcloud_config.gridSize = 10; + wordcloud_config.weightFactor = 13; + wordcloud_config.backgroundColor = "transparent"; + wordcloud_config.color = color; + return wordcloud_config; +}); diff --git a/themes/yun/scripts/injector/index.js b/themes/yun/scripts/injector/index.js new file mode 100644 index 0000000..e69de29 diff --git a/themes/yun/source/Yun.png b/themes/yun/source/Yun.png new file mode 100644 index 0000000000000000000000000000000000000000..fb6026b74963d675f65e8ffd9b015d7fb1ed3b42 GIT binary patch literal 3745 zcmeAS@N?(olHy`uVBq!ia0y~yU;#2&7&t)GRguRWAYQtouOkD)#(wTUiL5}rLb6AY zF9SoB8UsT^3j@P1pisjL28L1t28LG&3=CE?7#PG0=Ijcz0ZK3>dAqwX{BQ3+vmeM~ zFY)wsWq-oL$z)`~U$69^fr00Wr;B4q#jUru?2B$Wh#Yvxt}HswGjFn7*N*L6bJ@Hu zzL5L!a&FU?eGJA|b~4N>^y~_e`?y}<)0=nSmo9DCu7B^of)dc+Q81)KKtbDB`GkwO zwljm;=DuFVCAoPl3<^LWF)}a!6QBc-#l*lM08C~;7BFEd04dy34nWz|6+H_KUf+;l zDhLFc`hk~_9<0XUwgRhigu_U1EUHNeBS`c%2ZJ)cAVIYSBOvMM-UFEVgV(MjveOHvk+9s4SQ~(2kRfvH=B;)dtfMDpg`FU>}*vs4)Vm?aA zw|(%O{+fNZ>d$rlk@Z##cP#jy3oco3PE;MN?lEZwrPw^rt{#P1t!(pwiMxGR`0 zxBh>y-dBe0c45b{gbm6&3T4=L&T_9WbgsJJnCM>c*n;oVmH4|8?=?W=erD$7b?R5X z?T|g#``F@yPwlgv?><!T(7H+bc;SSp-`3e?@}BCuA$V$c;h#ONbN2T9(0ap> z;>s{#v%K;?E^DU9nNW`$EAGiJ-}B0LpY&AOjmlHXfaUa`<6AY$j`RgQ=%XwIftd@G zgUCt~4M2_LrD6K#HDE4K06Lc}iyeR(M*|2?*x?PJ1B>_cgAz6egU6Bkg7K}gjEoGO z71AF=ZwLx7Oz4OQC-s`0m*@W1h?Q-h9bMFMYrz|6uJJA|_Lg$qq+G^g-uGC+{_j=U zm%JR1?6dgiRQvaP;}0f4vfkA>mFKEI9MyxUEJw<|uhV0JS!`cnTBn@*x%qqy=I0Jq z?qVgk&}mz>#y<9W1AE-#enkfHzdcJ8IU2sKmHBX>oq=Ip#IMtlT>TW}D2JJ=RPKMh zb&%KQ_#uIYlYjc=0*!x}D|6?-WCjMcEuW`bl*%zOGyv1%P|0`Xxf7_1#41q%7$)${ zP2&Jsyc*cth%ISjXvn7^u0f6*1w%aq8btmw-#$}(Bw$YXNuXa`QX@Rme0>?TfNTy1 z#`a85Mg=8I1}PwBU|?Rr$iNJw89`zTm|(Ij3=5bMY>>jscVEc@Db*6!h?11Vl2ohY zqEsNoU}Ruqple{FYhW2-U}R-#U}b8mZD3$!U|<{*3$hBKAvZrIGp!Q01}Da+JAfJl zK{ljTWTsg;=jY@X1s5bHr!pAw&t~!jN(#XxU4bh6)6$AlOBjsIf~6Ow0%axPvH_VD usW}lYnYpQX#hLke42A|qCZCRm$zv*tL{;Q%*ZUo)h{4m<&t;ucLK6T~p~Y?h literal 0 HcmV?d00001 diff --git a/themes/yun/source/css/_components/button.styl b/themes/yun/source/css/_components/button.styl new file mode 100644 index 0000000..39d48aa --- /dev/null +++ b/themes/yun/source/css/_components/button.styl @@ -0,0 +1,81 @@ +.hty { + &-button { + font-family: Roboto, sans-serif; + background-color: transparent; + margin: 0 1rem; + padding: 0 0.5rem; + border-radius: 2px; + color: $colors.primary; + the-transition(); + display: inline-flex; + align-items: center; + justify-content: center; + border: none; + min-height: 2rem; + min-width: 4rem; + outline: none; + line-height: 2; + font-size: 0.9rem; + font-weight: 500; + letter-spacing: 0.09rem; + -webkit-font-smoothing: antialiased; + + &:hover { + background-color: alpha($colors.primary, 0.05); + } + + &--raised { + background-color: var(--hty-primary-color, $colors.primary); + box-shadow: 0px 2px 10px -1px rgba(0, 0, 0, 0.3); + color: white; + + &:focus { + color: #eee; + } + + &:hover { + color: white; + background-color: alpha($colors.primary, 0.9); + } + } + } + + &-icon-button { + display: inline-flex; + border: none; + width: 3rem; + height: 3rem; + align-items: center; + justify-content: center; + border-radius: 50%; + line-height: 1; + the-transition(); + + &:hover { + background-color: alpha($colors.primary, 0.1); + } + + &:active { + background-color: alpha($colors.primary, 0.3); + } + } +} + +.button { + &-glow { + animation-duration: 2s; + animation-iteration-count: infinite; + animation-name: glowing; + animation-direction: alternate; + } +} + +@keyframes glowing { + from { + box-shadow: 0 0 0 rgba(0, 0, 0, 0); + } + + to { + box-shadow: 0 0 20px rgba($colors.primary, 0.3); + } +} \ No newline at end of file diff --git a/themes/yun/source/css/_components/card.styl b/themes/yun/source/css/_components/card.styl new file mode 100644 index 0000000..085e671 --- /dev/null +++ b/themes/yun/source/css/_components/card.styl @@ -0,0 +1,10 @@ +.hty- { + &card { + position: relative; + display: flex; + margin: 1rem; + the-transition(); + flex-direction: column; + box-sizing: border-box; + } +} \ No newline at end of file diff --git a/themes/yun/source/css/_components/menu.styl b/themes/yun/source/css/_components/menu.styl new file mode 100644 index 0000000..073bc05 --- /dev/null +++ b/themes/yun/source/css/_components/menu.styl @@ -0,0 +1,3 @@ +.planet-menu + border-radius: 50% + border: 2px solid black \ No newline at end of file diff --git a/themes/yun/source/css/_components/post/post-card.styl b/themes/yun/source/css/_components/post/post-card.styl new file mode 100644 index 0000000..a237e8e --- /dev/null +++ b/themes/yun/source/css/_components/post/post-card.styl @@ -0,0 +1,92 @@ +$post-card-opacity = hexo-config('post_card.opacity'); +$post-card-bg-color = white; + +.post-card { + position: relative; + max-width: 900px; + margin: 0 auto; + the-transition(); + background-color: rgba($post-card-bg-color, $post-card-opacity); + box-shadow: 0 1px 8px rgba($post-card-bg-color, 0.1); + + &:hover { + box-shadow: 0 1px 10px rgba(black, 0.08); + } + + &-header { + padding-top: 0.5rem; + } + + &-excerpt, &-excerpt p { + overflow: hidden; + text-overflow: ellipsis; + text-align: left; + } + + &-content { + padding: 0.5rem 1rem; + } + + &-title { + margin: 0; + } + + &__actions { + display: flex; + align-items: center; + min-height: 3rem; + border-top: 1px solid rgba($colors.primary, 0.05); + padding-left: 1rem; + padding-right: 1rem; + justify-content: space-between; + } + + &-tag { + display: inline-flex; + justify-content: flex-end; + } +} + +.tag, .category { + font-size: 0.8rem; + position: relative; + color: var(--text-color, black); + letter-spacing: 1px; + + &::before { + content: ''; + position: absolute; + bottom: 0; + height: 100%; + width: 0; + right: 0; + background: rgba($colors.primary, 0.08); + border-radius: 4px; + transition: width 0.2s ease; + } + + &:hover { + &::before { + width: 104%; + left: -2%; + } + } + + .icon { + width: 0.8rem; + height: 0.8rem; + padding-left: 0.1rem; + } +} + +.post-top-icon { + position: absolute; + top: 1rem; + right: 1rem; + color: $colors.warning; + + .icon { + width: 1.5rem; + height: 1.5rem; + } +} \ No newline at end of file diff --git a/themes/yun/source/css/_components/post/post-collapse.styl b/themes/yun/source/css/_components/post/post-collapse.styl new file mode 100644 index 0000000..9458852 --- /dev/null +++ b/themes/yun/source/css/_components/post/post-collapse.styl @@ -0,0 +1,120 @@ +.post-collapse { + position: relative; + margin: 0 5rem 2rem 5rem; + + +tablet() { + margin: 0 2rem 1rem 2rem; + } + + +mobile() { + margin: 0 1rem 0.5rem 1rem; + } + + &-title { + font-size: 2rem; + text-align: center; + } + + .collection-title { + position: relative; + margin: 0; + border-bottom: 2px solid rgba($colors.primary, 0.6); + + &::before { + content: ''; + position: absolute; + top: 50%; + width: 2px; + height: 50%; + background: rgba($colors.primary, 0.3); + } + + .archive-year { + font-family: $font-family-monospace; + color: $colors.primary; + margin: 0 1.5rem; + + &::before { + content: ''; + position: absolute; + left: 0; + top: 35%; + margin-left: -11px; + margin-top: -4px; + width: 1.5rem; + height: 1.5rem; + background: $colors.primary; + border-radius: 50%; + } + } + } + + .post-item { + position: relative; + + &::before { + content: ''; + position: absolute; + width: 2px; + height: 100%; + background: rgba($colors.primary, 0.3); + } + } + + .post-header { + position: relative; + border-bottom: 2px solid rgba($colors.primary, 0.3); + display: flex; + + &::before { + content: ''; + position: absolute; + left: 0; + top: 1.6rem; + width: 0.5rem; + height: 0.5rem; + margin-left: -4px; + border-radius: 50%; + border: 1px solid $colors.primary; + background-color: white; + z-index: 1; + the-transition(); + transition-property: background; + } + + &:hover { + &::before { + background: $colors.primary; + } + } + + .post-title { + margin-left: 0.1rem; + padding: 0; + font-size: 1rem; + display: inline-flex; + align-items: center; + + .post-title-link { + .icon { + width: 1.1rem; + height: 1.1rem; + margin-right: 0.3rem; + } + } + } + + .post-meta { + font-family: $font-family-monospace; + font-size: 1rem; + margin: 1rem 0 1rem 1.2rem; + white-space: nowrap; + } + } +} + +.last-word { + font-size: 1rem; + margin-top: 1rem; + margin-bottom: 0; +} \ No newline at end of file diff --git a/themes/yun/source/css/_components/post/post-header.styl b/themes/yun/source/css/_components/post/post-header.styl new file mode 100644 index 0000000..15e9619 --- /dev/null +++ b/themes/yun/source/css/_components/post/post-header.styl @@ -0,0 +1,69 @@ +.post-header { + position: relative; + text-align: center; + + .post-title { + margin: 0; + padding: 10px; + font-size: 1.5rem; + font-weight: $font-family-serif-weight; + font-family: $font-family-serif; + + .icon { + width: 1.6rem; + height: 1.6rem; + margin-right: 0.3rem; + } + + .post-title-link { + position: relative; + padding: 0.7rem 1.2rem; + + .icon { + width: 1.6rem; + height: 1.6rem; + margin-right: 0.4rem; + } + + &::before, &::after { + content: ''; + position: absolute; + width: 10px; + height: 10px; + opacity: 0; + border: 2px solid; + transition: 0.3s; + transition-timing-function: cubic-bezier(0.17, 0.67, 0.05, 1.29); + } + + &::before { + top: 0; + left: 0; + border-width: 2px 0 0 2px; + transform: translate3d(10px, 10px, 0); + } + + &::after { + right: 0; + bottom: 0; + border-width: 0 2px 2px 0; + transform: translate3d(-10px, -10px, 0); + } + + &:hover::before, &:hover::after { + opacity: 1; + transform: translate3d(0, 0, 0); + } + } + } +} + +.post-edit-link { + padding: 0 0.2rem; + color: $gray; + + .icon { + width: 1.5rem; + height: 1.5rem; + } +} \ No newline at end of file diff --git a/themes/yun/source/css/_components/post/post-markdown.styl b/themes/yun/source/css/_components/post/post-markdown.styl new file mode 100644 index 0000000..54a29c0 --- /dev/null +++ b/themes/yun/source/css/_components/post/post-markdown.styl @@ -0,0 +1,6 @@ +// override +// https://github.com/YunYouJun/star-markdown-css +.markdown-body { + color: var(--hty-text-color) !important; + font-weight: $font-family-sans-serif-weight; +} diff --git a/themes/yun/source/css/_components/post/post-nav.styl b/themes/yun/source/css/_components/post/post-nav.styl new file mode 100644 index 0000000..b1610a0 --- /dev/null +++ b/themes/yun/source/css/_components/post/post-nav.styl @@ -0,0 +1,62 @@ +.post-nav { + display: flex; + justify-content: space-between; + margin: 0 1rem; + + +mobile() { + margin: 0; + } + + &-item { + display: inline-block; + outline: none; + font-size: 0.9rem; + font-weight: bold; + text-transform: uppercase; + height: 3rem; + line-height: 2.9rem; + transition: 0.4s; + + &:hover { + background-color: rgba($colors.primary, 0.1); + } + } + + &-prev { + padding-right: 0.5rem; + } + + &-next { + padding-left: 0.5rem; + } + + &-prev, &-next { + display: inline-flex; + align-items: center; + color: $colors.primary; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + the-transition(); + + +mobile() { + max-width: 10rem; + } + + &:active { + color: white; + } + + .icon { + width: 1.5rem; + height: 1.5rem; + } + } + + &-text { + display: inline-block; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + } +} diff --git a/themes/yun/source/css/_components/post/post-reward.styl b/themes/yun/source/css/_components/post/post-reward.styl new file mode 100644 index 0000000..f89e5b1 --- /dev/null +++ b/themes/yun/source/css/_components/post/post-reward.styl @@ -0,0 +1,47 @@ +#reward-container { + padding: 10px 0; + margin: 20px auto; + width: 90%; + text-align: center; +} + +#reward-button { + display: inline-block; + text-align: center; + padding: 0.5rem; + color: $yellow; + border-radius: 100%; + width: 1.5rem; + height: 1.5rem; + text-align: center; + + .icon { + width: 1.5rem; + height: 1.5rem; + vertical-align: top; + margin-top: -0.05rem; + } +} + +#reward-comment { + margin-top: 0.5rem; +} + +#qr { + img { + width: 10rem; + height: 10rem; + display: inline-block; + margin: 1rem 1rem 0 1rem; + padding: 5px; + border: 1px solid $light-gray; + border-radius: 5px; + the-transition(); + the-box-shadow(); + } + + .icon { + width: 1.5rem; + height: 1.5rem; + } +} diff --git a/themes/yun/source/css/_components/scrollbar.styl b/themes/yun/source/css/_components/scrollbar.styl new file mode 100644 index 0000000..bc1d380 --- /dev/null +++ b/themes/yun/source/css/_components/scrollbar.styl @@ -0,0 +1,26 @@ +::-webkit-scrollbar { + width: 8px; + height: 8px; +} + +::-webkit-scrollbar-track { + border-radius: 2px; + background-color: rgba(255, 255, 255, 0.1); +} + +::-webkit-scrollbar-thumb { + border-radius: 2px; + background-color: alpha($colors.primary, 0.5); + + &:window-inactive { + background-color: alpha($colors.primary, 0.3); + } + + &:hover { + background-color: alpha($colors.primary, 0.7); + } + + &:active { + background-color: alpha($colors.primary, 0.9); + } +} \ No newline at end of file diff --git a/themes/yun/source/css/_components/sidebar/hamburger.styl b/themes/yun/source/css/_components/sidebar/hamburger.styl new file mode 100644 index 0000000..09a260f --- /dev/null +++ b/themes/yun/source/css/_components/sidebar/hamburger.styl @@ -0,0 +1,124 @@ +// Settings +// ================================================== +$hamburger-padding-x = 0px; +$hamburger-padding-y = 0px; +$hamburger-layer-width = 25px; +$hamburger-layer-height = 2px; +$hamburger-layer-spacing = 6px; +$hamburger-layer-color = $colors.primary; +$hamburger-layer-border-radius = 3px; +$hamburger-hover-opacity = 0.7; +$hamburger-active-layer-color = $hamburger-layer-color; +$hamburger-active-hover-opacity = $hamburger-hover-opacity; +// To use CSS filters as the hover effect instead of opacity, +// set $hamburger-hover-use-filter as true and +// change the value of $hamburger-hover-filter accordingly. +$hamburger-hover-use-filter = false; +$hamburger-hover-filter = opacity(50%); +$hamburger-active-hover-filter = $hamburger-hover-filter; + +.hamburger { + padding: $hamburger-padding-y $hamburger-padding-x; + display: inline-block; + transition-property: opacity, filter; + transition-duration: 0.15s; + transition-timing-function: linear; + // Normalize (