├── docs ├── CNAME ├── about │ ├── 个人简历.pdf │ ├── resume.md │ └── zcw.md ├── assets │ ├── 个人简历.pdf │ └── document_dates │ │ ├── user.config.css │ │ └── user.config.js ├── img │ └── apple-line.png ├── robots.txt ├── overrides │ ├── main.html │ ├── hooks │ │ ├── __pycache__ │ │ │ ├── comments.cpython-312.pyc │ │ │ ├── comments.cpython-313.pyc │ │ │ ├── reading_time.cpython-312.pyc │ │ │ ├── reading_time.cpython-313.pyc │ │ │ ├── socialmedia.cpython-312.pyc │ │ │ ├── socialmedia.cpython-313.pyc │ │ │ ├── related_posts.cpython-312.pyc │ │ │ └── related_posts.cpython-313.pyc │ │ └── socialmedia.py │ └── partials │ │ ├── announce.html │ │ ├── meta.html │ │ ├── comments.html │ │ ├── feedback.html │ │ └── footer.html ├── javascripts │ ├── shortcuts.js │ ├── mathjax.js │ ├── view.js │ ├── mathjax-config.js │ ├── extra.js │ ├── shubiao.js │ └── backgroud.js ├── netlify.toml ├── blog │ ├── .authors.yml │ ├── Mkdocs │ │ ├── mkdocs3.md │ │ ├── mkdocsblog.md │ │ └── mkfirst.md │ ├── posts │ │ ├── HelloWorld.md │ │ ├── update2022.md │ │ ├── update2025.md │ │ └── update2023.md │ ├── index.md │ ├── websitebeauty │ │ ├── mkpdf.md │ │ ├── webtalknow.md │ │ ├── accelerate.md │ │ ├── Relativeaddress.md │ │ ├── header.md │ │ ├── time.md │ │ ├── footer.md │ │ ├── linktech.md │ │ └── shubiao.md │ └── MIT.md ├── develop │ ├── lighthouse.md │ ├── vercel.md │ ├── designbeauty │ │ ├── my-to-desihn.md │ │ └── db1.md │ └── git.md ├── tag.md ├── stylesheets │ ├── ziti.css │ ├── video.css │ ├── extra2.css │ ├── link.css │ └── customize.css └── liuyanban.md ├── site ├── CNAME ├── assets │ ├── javascripts │ │ └── lunr │ │ │ └── min │ │ │ ├── lunr.jp.min.js │ │ │ ├── lunr.vi.min.js │ │ │ ├── lunr.multi.min.js │ │ │ ├── lunr.th.min.js │ │ │ ├── lunr.hy.min.js │ │ │ ├── lunr.te.min.js │ │ │ ├── lunr.ta.min.js │ │ │ ├── lunr.zh.min.js │ │ │ ├── lunr.ja.min.js │ │ │ ├── lunr.hi.min.js │ │ │ ├── lunr.kn.min.js │ │ │ ├── lunr.sa.min.js │ │ │ ├── lunr.stemmer.support.min.js │ │ │ ├── lunr.ko.min.js │ │ │ ├── lunr.sv.min.js │ │ │ ├── lunr.da.min.js │ │ │ ├── lunr.no.min.js │ │ │ └── lunr.he.min.js │ └── images │ │ └── favicon.png ├── about │ └── 个人简历.pdf ├── sitemap.xml.gz ├── img │ └── apple-line.png ├── overrides │ ├── partials │ │ ├── announce.html │ │ ├── comments.html │ │ ├── feedback.html │ │ └── footer.html │ └── hooks │ │ └── socialmedia.py ├── javascripts │ ├── shortcuts.js │ ├── mathjax.js │ ├── view.js │ ├── mathjax-config.js │ ├── extra.js │ ├── shubiao.js │ └── backgroud.js └── stylesheets │ ├── ziti.css │ ├── video.css │ ├── link.css │ └── customize.css ├── .vercel └── project.json ├── .cache └── plugin │ └── git-committers │ └── page-authors.json ├── .ai_cache ├── service_config.json ├── 363f7029e5c4e7b89621e8c35ebbb1e6.json ├── 7d252ddf0be7a53d5be5aac25108f291.json ├── 03a73b8173a77e20b5e1b61754a78b69.json ├── df0317bd2ab6a5049f26ccd41d18d70d.json ├── fd587465f396761a4f9a4d9c7a8547b7.json ├── a428daad32f25ccb5f820b28597fcc3c.json ├── bb68144f89dd27af906f25e3ca28150f.json ├── e9a749b5d7509ad43a610514699ee2fc.json ├── 05a7e54aad4363b789c44114206db5c2.json ├── f97f1806bd8d17fea2bce1ec51ddfb19.json ├── 3bcd038d9a2127f63773e30502d449fb.json ├── bc6245d25bc923141e0694fd850b0908.json ├── a6b40d533863c1177347aa471fe7ec3d.json ├── ea2376ba84a94ddca897698b93db73f4.json ├── b893a11b68220089e99f6ca5860ac9f8.json ├── bfa5610b5321461600ef0efea7969d0b.json ├── 1bcc7bb4c465384356f26b853557d534.json ├── 4291254c13162a015c052a28f12cd77c.json ├── a39c9b5c92eda046ba8f04eaa37c0f70.json ├── a1c86c3074127d021f37875df31d5f9e.json ├── a41ee1497c5fbfa2ce881d6560f0a8fc.json ├── d453c8ab8fdb4e9528ba18206c09a071.json ├── faa91abc96556d68792b94363dfd9d31.json ├── 2338cd62115b047b5492a1ee89e94500.json ├── 30b61663932637e01130b2f98d77d5bd.json ├── 3208690aff3ffe76fe9f84b4ae8c6dcb.json ├── 4dd169ad9dac4bd4a54dc3cc79ea2e45.json ├── 543c4658c47ab393bf730be41c81209b.json ├── cb84bb0fe39968db0da6e2d580d533a5.json ├── 295622c20b9df87faee0efbd35e709fc.json ├── ff9fcf2435b48c3064708f423a9d3c53.json ├── 14076c9b46112a2a948d613056467f04.json ├── f65a9c315c2f6ef5863c185b2716b6e4.json ├── c229f71406589a3be6188849ad6bd009.json ├── 986de0a026a14e40591ce2920b82a9b5.json ├── baebf944f91e95e1db36bb3a65308b0d.json ├── 2f5e21466936b5f7f6aa88e99e87d82e.json ├── efa3388d2708f425da570a3338f87cd3.json └── 9465f615f890a1a89f87a57a73cc7194.json ├── .vscode └── settings.json ├── .gitignore ├── .htaccess ├── temp ├── PublishMySite.yml ├── main.html ├── 最简教程.md └── ci.yml ├── .github ├── ISSUE_TEMPLATE │ ├── feature_request.md │ └── bug_report.md ├── FUNDING.yml └── workflows │ └── ci.yml ├── LICENSE ├── requirements.txt └── 快速开始.md /docs/CNAME: -------------------------------------------------------------------------------- 1 | wcowin.work -------------------------------------------------------------------------------- /site/CNAME: -------------------------------------------------------------------------------- 1 | wcowin.work -------------------------------------------------------------------------------- /.vercel/project.json: -------------------------------------------------------------------------------- 1 | {"projectName":"trae_c24jyk2n"} -------------------------------------------------------------------------------- /site/assets/javascripts/lunr/min/lunr.jp.min.js: -------------------------------------------------------------------------------- 1 | module.exports=require("./lunr.ja"); -------------------------------------------------------------------------------- /.cache/plugin/git-committers/page-authors.json: -------------------------------------------------------------------------------- 1 | {"cache_date": "2025-07-28", "page_authors": {}} -------------------------------------------------------------------------------- /docs/about/个人简历.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Wcowin/Mkdocs-Wcowin/HEAD/docs/about/个人简历.pdf -------------------------------------------------------------------------------- /docs/assets/个人简历.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Wcowin/Mkdocs-Wcowin/HEAD/docs/assets/个人简历.pdf -------------------------------------------------------------------------------- /site/about/个人简历.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Wcowin/Mkdocs-Wcowin/HEAD/site/about/个人简历.pdf -------------------------------------------------------------------------------- /site/sitemap.xml.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Wcowin/Mkdocs-Wcowin/HEAD/site/sitemap.xml.gz -------------------------------------------------------------------------------- /docs/img/apple-line.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Wcowin/Mkdocs-Wcowin/HEAD/docs/img/apple-line.png -------------------------------------------------------------------------------- /site/img/apple-line.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Wcowin/Mkdocs-Wcowin/HEAD/site/img/apple-line.png -------------------------------------------------------------------------------- /docs/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Allow: / 3 | 4 | Sitemap: http://wcowin.work/Mkdocs-Wcowin/sitemap.xml 5 | -------------------------------------------------------------------------------- /site/assets/images/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Wcowin/Mkdocs-Wcowin/HEAD/site/assets/images/favicon.png -------------------------------------------------------------------------------- /.ai_cache/service_config.json: -------------------------------------------------------------------------------- 1 | { 2 | "ai_service": "glm", 3 | "summary_language": "zh", 4 | "version": "1.2.2" 5 | } -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "bitoAI.codeCompletion.enableAutoCompletion": false, 3 | "Codegeex.RepoIndex": true 4 | } -------------------------------------------------------------------------------- /docs/overrides/main.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block extrahead %} 4 | {% include "partials/meta.html" %} 5 | {% endblock %} 6 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # 环境变量文件(敏感信息) 2 | .env 3 | .env.local 4 | .env.*.local 5 | *.key 6 | 7 | # MkDocs 构建输出目录 8 | site/ 9 | 10 | # AI 摘要缓存目录(项目根目录)- 需要被提交 11 | !.ai_cache/ -------------------------------------------------------------------------------- /docs/overrides/hooks/__pycache__/comments.cpython-312.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Wcowin/Mkdocs-Wcowin/HEAD/docs/overrides/hooks/__pycache__/comments.cpython-312.pyc -------------------------------------------------------------------------------- /docs/overrides/hooks/__pycache__/comments.cpython-313.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Wcowin/Mkdocs-Wcowin/HEAD/docs/overrides/hooks/__pycache__/comments.cpython-313.pyc -------------------------------------------------------------------------------- /docs/overrides/hooks/__pycache__/reading_time.cpython-312.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Wcowin/Mkdocs-Wcowin/HEAD/docs/overrides/hooks/__pycache__/reading_time.cpython-312.pyc -------------------------------------------------------------------------------- /docs/overrides/hooks/__pycache__/reading_time.cpython-313.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Wcowin/Mkdocs-Wcowin/HEAD/docs/overrides/hooks/__pycache__/reading_time.cpython-313.pyc -------------------------------------------------------------------------------- /docs/overrides/hooks/__pycache__/socialmedia.cpython-312.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Wcowin/Mkdocs-Wcowin/HEAD/docs/overrides/hooks/__pycache__/socialmedia.cpython-312.pyc -------------------------------------------------------------------------------- /docs/overrides/hooks/__pycache__/socialmedia.cpython-313.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Wcowin/Mkdocs-Wcowin/HEAD/docs/overrides/hooks/__pycache__/socialmedia.cpython-313.pyc -------------------------------------------------------------------------------- /docs/overrides/hooks/__pycache__/related_posts.cpython-312.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Wcowin/Mkdocs-Wcowin/HEAD/docs/overrides/hooks/__pycache__/related_posts.cpython-312.pyc -------------------------------------------------------------------------------- /docs/overrides/hooks/__pycache__/related_posts.cpython-313.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Wcowin/Mkdocs-Wcowin/HEAD/docs/overrides/hooks/__pycache__/related_posts.cpython-313.pyc -------------------------------------------------------------------------------- /docs/overrides/partials/announce.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block announce %} 4 | 5 | {% endblock %} 6 | -------------------------------------------------------------------------------- /site/overrides/partials/announce.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block announce %} 4 | 5 | {% endblock %} 6 | -------------------------------------------------------------------------------- /docs/javascripts/shortcuts.js: -------------------------------------------------------------------------------- 1 | keyboard$.subscribe(function(key) { 2 | if (key.mode === "global" && key.type === "x") { 3 | /* Add custom keyboard handler here */ 4 | key.claim() 5 | } 6 | }) 7 | -------------------------------------------------------------------------------- /site/javascripts/shortcuts.js: -------------------------------------------------------------------------------- 1 | keyboard$.subscribe(function(key) { 2 | if (key.mode === "global" && key.type === "x") { 3 | /* Add custom keyboard handler here */ 4 | key.claim() 5 | } 6 | }) 7 | -------------------------------------------------------------------------------- /docs/netlify.toml: -------------------------------------------------------------------------------- 1 | # Netlify 配置文件 2 | 3 | [build] 4 | publish = "." 5 | 6 | # 强制 URL 末尾添加斜杠(Pretty URLs) 7 | [build.processing] 8 | skip_processing = false 9 | 10 | [build.processing.html] 11 | pretty_urls = true 12 | -------------------------------------------------------------------------------- /docs/blog/.authors.yml: -------------------------------------------------------------------------------- 1 | authors: 2 | Wcowin: 3 | name: Wang Kewen # Author name 4 | description: Free and casual # Author description 5 | avatar: https://s1.imagehub.cc/images/2025/07/25/27c0e105ea7efbed5d046d3a8c303e9d.jpeg -------------------------------------------------------------------------------- /.ai_cache/363f7029e5c4e7b89621e8c35ebbb1e6.json: -------------------------------------------------------------------------------- 1 | { 2 | "summary": "2025年展望,聚焦未来发展趋势,探讨科技、经济、社会变革,展望全球发展新格局。", 3 | "service": "glm", 4 | "page_title": "2025", 5 | "timestamp": "2025-11-22T19:05:47.828165", 6 | "cache_version": "1.2.2", 7 | "content_hash": "97a6fd07d55e773dfafaecb958743870" 8 | } -------------------------------------------------------------------------------- /.ai_cache/7d252ddf0be7a53d5be5aac25108f291.json: -------------------------------------------------------------------------------- 1 | { 2 | "summary": "2023年回顾,聚焦年度重大事件、社会变革及科技发展,探讨其对未来影响,展望新趋势。", 3 | "service": "glm", 4 | "page_title": "2023", 5 | "timestamp": "2025-11-22T19:05:52.587782", 6 | "cache_version": "1.2.2", 7 | "content_hash": "5ddc6732c9b037e16947c5abce923b63" 8 | } -------------------------------------------------------------------------------- /.ai_cache/03a73b8173a77e20b5e1b61754a78b69.json: -------------------------------------------------------------------------------- 1 | { 2 | "summary": "2024年展望,聚焦未来发展趋势,探讨社会、经济、科技等领域变革,为读者提供前瞻性思考。", 3 | "service": "glm", 4 | "page_title": "2024", 5 | "timestamp": "2025-11-22T19:05:49.258078", 6 | "cache_version": "1.2.2", 7 | "content_hash": "553e2d089e86bb5ee7f8e931edac7230" 8 | } -------------------------------------------------------------------------------- /.ai_cache/df0317bd2ab6a5049f26ccd41d18d70d.json: -------------------------------------------------------------------------------- 1 | { 2 | "summary": "2021年回顾,聚焦年度重要事件、社会变革及个人成长,探讨挑战与机遇,展望未来发展趋势。", 3 | "service": "glm", 4 | "page_title": "2021", 5 | "timestamp": "2025-11-22T19:05:55.478281", 6 | "cache_version": "1.2.2", 7 | "content_hash": "7c4c4c16ec9b1373ce76aa8308bdb9e1" 8 | } -------------------------------------------------------------------------------- /.ai_cache/fd587465f396761a4f9a4d9c7a8547b7.json: -------------------------------------------------------------------------------- 1 | { 2 | "summary": "2022年回顾,聚焦年度重要事件、社会发展和经济变革,展现中国在全球舞台上的新角色与影响力。", 3 | "service": "glm", 4 | "page_title": "2022", 5 | "timestamp": "2025-11-22T19:05:54.227645", 6 | "cache_version": "1.2.2", 7 | "content_hash": "c78d658c2b1583e9733766ba4ea1c2bf" 8 | } -------------------------------------------------------------------------------- /.ai_cache/a428daad32f25ccb5f820b28597fcc3c.json: -------------------------------------------------------------------------------- 1 | { 2 | "summary": "本文介绍了网页圆角化设计,包括如何通过CSS实现图片和边框圆角化,并展示了使用内置grid cards和按钮的示例。", 3 | "service": "glm", 4 | "page_title": "网页圆角化设计", 5 | "timestamp": "2025-11-22T19:05:28.300092", 6 | "cache_version": "1.2.2", 7 | "content_hash": "a623917259c49e7480bf5d9b1a2a763d" 8 | } -------------------------------------------------------------------------------- /.ai_cache/bb68144f89dd27af906f25e3ca28150f.json: -------------------------------------------------------------------------------- 1 | { 2 | "summary": "本文介绍了如何在网页中添加背景特效,包括雪花、樱花、线条和粒子。通过设置LocalStorage标志,可控制是否加载特效脚本。", 3 | "service": "glm", 4 | "page_title": "背景特效", 5 | "timestamp": "2025-11-22T19:04:51.800329", 6 | "cache_version": "1.2.2", 7 | "content_hash": "47fbc8f4ccbf6314a7582f863a8c6a55" 8 | } -------------------------------------------------------------------------------- /.ai_cache/e9a749b5d7509ad43a610514699ee2fc.json: -------------------------------------------------------------------------------- 1 | { 2 | "summary": "本文介绍了如何嵌入PDF文件,强调了使用相对地址的重要性,并提供了一段完整代码示例,旨在帮助读者实现PDF嵌入功能。", 3 | "service": "glm", 4 | "page_title": "嵌入PDF文件", 5 | "timestamp": "2025-11-22T19:05:14.465870", 6 | "cache_version": "1.2.2", 7 | "content_hash": "3a17dc99a47427eb0f6164f77cb0a42e" 8 | } -------------------------------------------------------------------------------- /.ai_cache/05a7e54aad4363b789c44114206db5c2.json: -------------------------------------------------------------------------------- 1 | { 2 | "summary": "本文介绍了如何为MKdocs添加友链,包括复制粘贴操作和样式设置。通过定义友链容器和小屏优化,实现友链展示的极简风格。", 3 | "service": "glm", 4 | "page_title": "如何给MKdocs添加友链", 5 | "timestamp": "2025-11-22T19:04:19.203283", 6 | "cache_version": "1.2.2", 7 | "content_hash": "61ca6ba897dcbb5bf08427030fba12c2" 8 | } -------------------------------------------------------------------------------- /.ai_cache/f97f1806bd8d17fea2bce1ec51ddfb19.json: -------------------------------------------------------------------------------- 1 | { 2 | "summary": "本文介绍了如何添加友链,包括复制代码粘贴到.md文件页面。示例展示了友链效果,如Wcowin’s blog,一个分享技术的小站。", 3 | "service": "glm", 4 | "page_title": "添加友链", 5 | "timestamp": "2025-11-22T19:05:01.745921", 6 | "cache_version": "1.2.2", 7 | "content_hash": "bf464212262915b004dced013d0f5bca" 8 | } -------------------------------------------------------------------------------- /.ai_cache/3bcd038d9a2127f63773e30502d449fb.json: -------------------------------------------------------------------------------- 1 | { 2 | "summary": "本文介绍了为 MkDocs 网站添加基于 JavaScript 的客户端多语言翻译功能,支持多种语言实时切换,提升用户体验。", 3 | "service": "glm", 4 | "page_title": "为MKdocs添加多语言翻译", 5 | "timestamp": "2025-11-22T19:05:10.128850", 6 | "cache_version": "1.2.2", 7 | "content_hash": "38295cbeb6fcc72e1ec123b11c834dfd" 8 | } -------------------------------------------------------------------------------- /.ai_cache/bc6245d25bc923141e0694fd850b0908.json: -------------------------------------------------------------------------------- 1 | { 2 | "summary": "本文介绍了在mkdocs.yml文件中添加自定义404页面,包括创建404.html文件,设置页面样式和布局,实现一个简洁美观的404公益页面。", 3 | "service": "glm", 4 | "page_title": "添加404页面", 5 | "timestamp": "2025-11-22T19:04:33.778072", 6 | "cache_version": "1.2.2", 7 | "content_hash": "27bf9f523865d97aa263f145c4b980d2" 8 | } -------------------------------------------------------------------------------- /.ai_cache/a6b40d533863c1177347aa471fe7ec3d.json: -------------------------------------------------------------------------------- 1 | { 2 | "summary": "MWeb Pro是一款macOS上的Markdown写作和笔记应用,支持GFM语法、多种输出格式和强大的笔记功能,适用于博客写作、知识管理和文档整理。", 3 | "service": "glm", 4 | "page_title": "MWeb Pro", 5 | "timestamp": "2025-11-22T19:05:37.384177", 6 | "cache_version": "1.2.2", 7 | "content_hash": "c4fe4f4693fc89884cd2399e73a6512e" 8 | } -------------------------------------------------------------------------------- /.ai_cache/ea2376ba84a94ddca897698b93db73f4.json: -------------------------------------------------------------------------------- 1 | { 2 | "summary": "文档指导在“docs/overrides”目录下新建“main.html”文件,并针对该文件添加顶部公告栏,具体修改操作在main.html文件内进行。", 3 | "service": "glm", 4 | "page_title": "添加顶部公告栏", 5 | "timestamp": "2025-11-22T19:04:58.188770", 6 | "cache_version": "1.2.2", 7 | "content_hash": "f094db5eb65010ef4cf5dab8aff97a10" 8 | } -------------------------------------------------------------------------------- /.ai_cache/b893a11b68220089e99f6ca5860ac9f8.json: -------------------------------------------------------------------------------- 1 | { 2 | "summary": "本教程为Mkdocs文档编写指南,提供官方教程、中文教程、项目插件列表等资源,并介绍快速开始方法、视频教程等。同时,呼吁读者注明教程来源,并欢迎加入友链。", 3 | "service": "glm", 4 | "page_title": "0.Mkdocs教程前言", 5 | "timestamp": "2025-11-22T19:04:31.735618", 6 | "cache_version": "1.2.2", 7 | "content_hash": "313f7064341c3e9b6f48d15706c2de07" 8 | } -------------------------------------------------------------------------------- /.ai_cache/bfa5610b5321461600ef0efea7969d0b.json: -------------------------------------------------------------------------------- 1 | { 2 | "summary": "本文介绍了如何使用Lighthouse测试网站性能。步骤包括在谷歌或Edge浏览器中打开开发者工具,找到Lighthouse并点击分析页面。", 3 | "service": "glm", 4 | "page_title": "利用Lighthouse测试网站性能", 5 | "timestamp": "2025-11-22T19:05:32.328468", 6 | "cache_version": "1.2.2", 7 | "content_hash": "d10e979fac1d8261fb3779a9446d5694" 8 | } -------------------------------------------------------------------------------- /.ai_cache/1bcc7bb4c465384356f26b853557d534.json: -------------------------------------------------------------------------------- 1 | { 2 | "summary": "本文介绍了如何使用Tidio免费版在线聊天工具。通过访问Tidio官网创建账户,获取独特的javascript代码,将其粘贴到网站代码中即可安装。安装过程简单快捷,无需梯子。", 3 | "service": "glm", 4 | "page_title": "添加在线聊天", 5 | "timestamp": "2025-11-22T19:05:26.656821", 6 | "cache_version": "1.2.2", 7 | "content_hash": "9cac24ec8ee4c8f3ba99c13057b3fb22" 8 | } -------------------------------------------------------------------------------- /.ai_cache/4291254c13162a015c052a28f12cd77c.json: -------------------------------------------------------------------------------- 1 | { 2 | "summary": "本文介绍了为MKdocs页面添加相关文章推荐的方法。通过在docs/overrides/hooks/下新建文件并配置,实现自动推荐相关文章。具体配置需根据个人仓库情况调整。", 3 | "service": "glm", 4 | "page_title": "添加相关推荐文章", 5 | "timestamp": "2025-11-22T19:05:20.700578", 6 | "cache_version": "1.2.2", 7 | "content_hash": "4cbcf0ab288a3ecbef485970c9faec23" 8 | } -------------------------------------------------------------------------------- /.ai_cache/a39c9b5c92eda046ba8f04eaa37c0f70.json: -------------------------------------------------------------------------------- 1 | { 2 | "summary": "本文介绍了使用JavaScript和CSS实现自定义鼠标样式的技巧。重点在于调整鼠标尺寸和颜色,支持RGB和固有名称写法。需在mkdocs.yml中引入相关js和css文件。", 3 | "service": "glm", 4 | "page_title": "JS实现鼠标样式", 5 | "timestamp": "2025-11-22T19:05:22.343965", 6 | "cache_version": "1.2.2", 7 | "content_hash": "8bea99ba3bf455e7454b1975208708b5" 8 | } -------------------------------------------------------------------------------- /.ai_cache/a1c86c3074127d021f37875df31d5f9e.json: -------------------------------------------------------------------------------- 1 | { 2 | "summary": "本文探讨了设计的六个关键观点:简洁精炼、优雅美感、用户体验、细节关注、创新突破和故事情感。强调以用户为中心,注重细节和创新,追求优雅和情感共鸣,以创造令人愉悦和富有创意的设计体验。", 3 | "service": "glm", 4 | "page_title": "我对设计的一些观点", 5 | "timestamp": "2025-11-22T19:05:45.945100", 6 | "cache_version": "1.2.2", 7 | "content_hash": "93e20f3eb2909f0d8284688d91fbdede" 8 | } -------------------------------------------------------------------------------- /.ai_cache/a41ee1497c5fbfa2ce881d6560f0a8fc.json: -------------------------------------------------------------------------------- 1 | { 2 | "summary": "本文介绍了如何将GitHub Pages迁移至Vercel托管。通过使用MkDocs和Vercel,实现最小化配置,轻松完成迁移过程。", 3 | "service": "glm", 4 | "page_title": "如何将 github pages 迁移到 vercel 上托管", 5 | "timestamp": "2025-11-22T19:05:34.240763", 6 | "cache_version": "1.2.2", 7 | "content_hash": "1a74699130526d0d1961aca819f9058e" 8 | } -------------------------------------------------------------------------------- /docs/develop/lighthouse.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 利用Lighthouse测试网站性能 3 | tags: 4 | - 技术分享 5 | --- 6 | 7 | # 利用Lighthouse测试网站性能 8 | 9 | ![image.png](https://s2.loli.net/2024/02/04/yxwcmJLXADqMa8P.png) 10 | 11 | ![](https://pic3.zhimg.com/80/v2-afef47cac915ad51071fdc2f6d990b30_1440w.webp) 12 | 13 | 打开谷歌或者Edge浏览器,按F12,在右侧点"➕"找到Lighthouse,点击分析页面载即可 14 | -------------------------------------------------------------------------------- /.ai_cache/d453c8ab8fdb4e9528ba18206c09a071.json: -------------------------------------------------------------------------------- 1 | { 2 | "summary": "本文针对MKdocs中相对地址引用问题进行总结,包括图片、PDF、Markdown页面和静态资源等引用方法及注意事项,强调路径正确性和大小写一致性,建议统一资源管理目录结构,确保本地和线上访问正确。", 3 | "service": "glm", 4 | "page_title": "相对地址的一些问题", 5 | "timestamp": "2025-11-22T19:04:45.088588", 6 | "cache_version": "1.2.2", 7 | "content_hash": "bd7d18be5762279b043eae7519b77cc9" 8 | } -------------------------------------------------------------------------------- /.ai_cache/faa91abc96556d68792b94363dfd9d31.json: -------------------------------------------------------------------------------- 1 | { 2 | "summary": "本文介绍了Git的基本操作,如新建仓库、克隆、提交、分支管理及解决合并冲突等。还涵盖了一些高级技巧,如临时保存成果、灵活合并分支、cherry-pick、修改上次提交、取消文件修改、弃用提交和补丁文件等。", 3 | "service": "glm", 4 | "page_title": "Git 实用技巧", 5 | "timestamp": "2025-11-22T19:05:30.188194", 6 | "cache_version": "1.2.2", 7 | "content_hash": "bf348dc0b6dd8f580cc77d9238f03ad0" 8 | } -------------------------------------------------------------------------------- /docs/tag.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 标签🏷 3 | hide: 4 | #- navigation # 显示右 5 | #- toc #显示左 6 | - footer 7 | - feedback 8 | --- 9 | 10 | 11 |
12 | 13 | - :material-clock-fast:{ .lg .middle } __Tips__ 14 | 15 | --- 16 | 17 | 以下是网站文章的分类,点击可跳转到对应分类下的文章 18 | 19 |
20 | 21 | -------------------------------------------------------------------------------- /.ai_cache/2338cd62115b047b5492a1ee89e94500.json: -------------------------------------------------------------------------------- 1 | { 2 | "summary": "本文介绍了开源中文字体“霞鹜文楷”,基于FONTWORKS的Klee One字体衍生。该字体具有日本教科书体风格,兼具仿宋和楷体特点,适用于多种场合。文档详细说明了字体的版本、特点、补字计划等信息,并提供了相关链接。", 3 | "service": "glm", 4 | "page_title": "修改网站字体", 5 | "timestamp": "2025-11-22T19:05:12.565294", 6 | "cache_version": "1.2.2", 7 | "content_hash": "bd6e1a5523e5cb89755413dabb91c6e3" 8 | } -------------------------------------------------------------------------------- /.ai_cache/30b61663932637e01130b2f98d77d5bd.json: -------------------------------------------------------------------------------- 1 | { 2 | "summary": "麻省理工学院许可证(MIT License)由Martin Donath于2016-2025年发布,允许用户自由使用、复制、修改、发布等,但需保留版权声明。软件按“原样”提供,不提供任何保证,作者或版权持有者不承担任何责任。", 3 | "service": "glm", 4 | "page_title": "许可声明", 5 | "timestamp": "2025-11-22T19:04:17.699333", 6 | "cache_version": "1.2.2", 7 | "content_hash": "f28e03ca2a1e9b04ae8dde9c6161dc39" 8 | } -------------------------------------------------------------------------------- /.ai_cache/3208690aff3ffe76fe9f84b4ae8c6dcb.json: -------------------------------------------------------------------------------- 1 | { 2 | "summary": "本文介绍了加速MkDocs网站访问的技巧,包括优化图片格式、使用CDN加速静态资源、调整本地渲染配置等,并推荐了freeconvert、jsDelivr CDN等工具,以及使用Lighthouse进行性能测试。", 3 | "service": "glm", 4 | "page_title": "加速网站访问的一些心得", 5 | "timestamp": "2025-11-22T19:04:49.312230", 6 | "cache_version": "1.2.2", 7 | "content_hash": "6f60e9dee47e0524e1a27d42a11c6bcb" 8 | } -------------------------------------------------------------------------------- /.ai_cache/4dd169ad9dac4bd4a54dc3cc79ea2e45.json: -------------------------------------------------------------------------------- 1 | { 2 | "summary": "为MKdocs添加AI摘要(Plus版本)是一款智能插件,支持多种AI服务,可自动生成文档摘要,并提供智能阅读统计。它具有智能缓存、多语言支持、自动降级机制等特点,与MkDocs主题完美兼容。", 3 | "service": "glm", 4 | "page_title": "为MKdocs添加AI摘要(Plus版本)", 5 | "timestamp": "2025-11-22T19:04:37.916332", 6 | "cache_version": "1.2.2", 7 | "content_hash": "ccb5118d497d4f8273ca2d06904d2b59" 8 | } -------------------------------------------------------------------------------- /.ai_cache/543c4658c47ab393bf730be41c81209b.json: -------------------------------------------------------------------------------- 1 | { 2 | "summary": "本文介绍了如何为MkDocs文档添加阅读时间统计功能。首先创建并配置`reading_time.py`,然后将其放置在指定目录并修改配置文件。接着,展示效果,并提供高级配置选项,如排除特定页面和自定义统计信息格式。", 3 | "service": "glm", 4 | "page_title": "添加阅读信息统计", 5 | "timestamp": "2025-11-22T19:05:18.457743", 6 | "cache_version": "1.2.2", 7 | "content_hash": "afd619b609b7dbaaaa7af01ca7cf475d" 8 | } -------------------------------------------------------------------------------- /.ai_cache/cb84bb0fe39968db0da6e2d580d533a5.json: -------------------------------------------------------------------------------- 1 | { 2 | "summary": "本文档是Markdown语法完全指南,介绍了Markdown的基本概念、语法、实用技巧以及推荐工具。内容涵盖基础语法、高级语法、实用技巧和在线工具,旨在帮助读者快速掌握Markdown的使用,提高写作效率。", 3 | "service": "glm", 4 | "page_title": "Markdown指南", 5 | "timestamp": "2025-11-22T19:05:40.265203", 6 | "cache_version": "1.2.2", 7 | "content_hash": "e78b3028f900b1f8bf4cc9a937e84c31" 8 | } -------------------------------------------------------------------------------- /docs/develop/vercel.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 如何将 github pages 迁移到 vercel 上托管 3 | tags: 4 | - 技术分享 5 | --- 6 | 7 | # 如何将 github pages 迁移到 vercel 上托管 8 | 9 | > [如何将 github pages 迁移到 vercel 上托管](https://cloud.tencent.com/developer/article/1771693?shareByChannel=link) 10 | 11 | 12 | >[📃 MkDocs with ▲ Vercel (minimal configuration)](https://github.com/fu-sen/Vercel-MkDocs) -------------------------------------------------------------------------------- /.ai_cache/295622c20b9df87faee0efbd35e709fc.json: -------------------------------------------------------------------------------- 1 | { 2 | "summary": "MkDocs支持自定义页脚,通过修改`footer.html`文件和`mkdocs.yml`配置文件实现。在`mkdocs.yml`中可设置页脚版权,并选择是否显示“Made with Material for MkDocs”。", 3 | "service": "glm", 4 | "page_title": "页脚设置", 5 | "timestamp": "2025-11-22T19:04:55.864388", 6 | "cache_version": "1.2.2", 7 | "content_hash": "6e01de104cbaa319483c6907dba4bd9e" 8 | } -------------------------------------------------------------------------------- /.ai_cache/ff9fcf2435b48c3064708f423a9d3c53.json: -------------------------------------------------------------------------------- 1 | { 2 | "summary": "唐·诺曼提出情感设计由本能层、行为层和反思层三个层次构成,分别影响我们对世界的体验。本能层关注外观,行为层关注使用愉悦感和效率,反思层关注产品的合理化和智能化。这三个层次相互关联,共同创造我们对世界的整体情感体验。", 3 | "service": "glm", 4 | "page_title": "唐·诺曼—情感设计的三个层次", 5 | "timestamp": "2025-11-22T19:05:43.582043", 6 | "cache_version": "1.2.2", 7 | "content_hash": "00b8b3b68f3e5a524c9d25a580151033" 8 | } -------------------------------------------------------------------------------- /.ai_cache/14076c9b46112a2a948d613056467f04.json: -------------------------------------------------------------------------------- 1 | { 2 | "summary": "MkDocs文档日期插件是一款用于显示文档元信息(如创建时间、更新时间、作者等)的插件。支持多种时间格式、灵活显示位置、优雅样式设计,并支持多语言和跨平台。插件具有高效构建速度,可深度自定义,并提供模板变量访问文档元信息。", 3 | "service": "glm", 4 | "page_title": "MkDocs文档日期插件", 5 | "timestamp": "2025-11-22T19:05:08.373907", 6 | "cache_version": "1.2.2", 7 | "content_hash": "acc38eb24661f7ce7f0f31f67d96d6e7" 8 | } -------------------------------------------------------------------------------- /.ai_cache/f65a9c315c2f6ef5863c185b2716b6e4.json: -------------------------------------------------------------------------------- 1 | { 2 | "summary": "本文介绍了为MKdocs添加文章修订时间戳的方法。通过使用git -revision-date-localized插件,可以在页面底部显示文档更新日期。配置简单,但需注意大型文档库可能影响渲染速度,建议调整配置以优化性能。", 3 | "service": "glm", 4 | "page_title": "为MKdocs添加文章修订时间戳", 5 | "timestamp": "2025-11-22T19:05:24.832381", 6 | "cache_version": "1.2.2", 7 | "content_hash": "b56099185ef8a38aa825c2e9bc77166b" 8 | } -------------------------------------------------------------------------------- /.ai_cache/c229f71406589a3be6188849ad6bd009.json: -------------------------------------------------------------------------------- 1 | { 2 | "summary": "MkDocs AI Hooks是一个集成AI摘要生成和智能阅读统计功能的MkDocs插件。支持多AI服务,自动生成摘要,并具有智能缓存和灵活配置。同时提供智能阅读统计功能,包括字符统计、代码检测和阅读时间估算。支持快速安装和配置,适用于技术文档和博客。", 3 | "service": "glm", 4 | "page_title": "MkDocs文档AI摘要", 5 | "timestamp": "2025-11-22T19:04:42.241483", 6 | "cache_version": "1.2.2", 7 | "content_hash": "80146e04a384cffcd397f057465adbbe" 8 | } -------------------------------------------------------------------------------- /docs/blog/Mkdocs/mkdocs3.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 解决Github Pages部署mkdocs自定义域名失效的问题 3 | tags: 4 | - Mkdocs 5 | --- 6 | 7 | 在/docs目录下创建一个 CNAME 的 无后缀 文件,然后在里面填入你的域名 8 | ![](https://s1.imagehub.cc/images/2024/02/02/d23082e5d3ebb839dba8b589a1cb5b7c.png) 9 | 10 | !!! tip "原因" 11 | 因为每次在 Custom domain 添加后都会给我们生成一个 CNAME 的文件,但是因为项目我们没有 pull 到本地,所以造成了,每次 push 之后 CNAME 信息被 clear 了 12 | 13 | 14 | -------------------------------------------------------------------------------- /.ai_cache/986de0a026a14e40591ce2920b82a9b5.json: -------------------------------------------------------------------------------- 1 | { 2 | "summary": "本文介绍了在Mkdocs中添加博客功能的方法。通过在mkdocs.yml中添加特定行,并在/docs/blog/posts下创建md文件,即可实现博客功能。需注意,博客文件夹下需包含index.md文件,作者信息可在/docs/blog/.authors.yml中配置。", 3 | "service": "glm", 4 | "page_title": "添加Mkdocs博客", 5 | "timestamp": "2025-11-22T19:04:29.945768", 6 | "cache_version": "1.2.2", 7 | "content_hash": "8fdb8b0755c8f1ffa2e92353859ca2cb" 8 | } -------------------------------------------------------------------------------- /.ai_cache/baebf944f91e95e1db36bb3a65308b0d.json: -------------------------------------------------------------------------------- 1 | { 2 | "summary": "解决Github Pages部署mkdocs自定义域名失效问题:在/docs目录下创建无后缀CNAME文件,填入域名。原因在于每次添加自定义域名后,系统会生成CNAME文件,但未本地pull项目导致push后CNAME信息丢失。", 3 | "service": "glm", 4 | "page_title": "3.解决Github Pages部署mkdocs自定义域名失效的问题", 5 | "timestamp": "2025-11-22T19:04:27.937438", 6 | "cache_version": "1.2.2", 7 | "content_hash": "c3d9076deb9178a7d10cd220f13b80e4" 8 | } -------------------------------------------------------------------------------- /docs/javascripts/mathjax.js: -------------------------------------------------------------------------------- 1 | window.MathJax = { 2 | tex: { 3 | inlineMath: [["\\(", "\\)"]], 4 | displayMath: [["\\[", "\\]"]], 5 | processEscapes: true, 6 | processEnvironments: true 7 | }, 8 | options: { 9 | ignoreHtmlClass: ".*|", 10 | processHtmlClass: "arithmatex" 11 | } 12 | }; 13 | 14 | document$.subscribe(() => { 15 | MathJax.typesetPromise() 16 | }) 17 | -------------------------------------------------------------------------------- /site/javascripts/mathjax.js: -------------------------------------------------------------------------------- 1 | window.MathJax = { 2 | tex: { 3 | inlineMath: [["\\(", "\\)"]], 4 | displayMath: [["\\[", "\\]"]], 5 | processEscapes: true, 6 | processEnvironments: true 7 | }, 8 | options: { 9 | ignoreHtmlClass: ".*|", 10 | processHtmlClass: "arithmatex" 11 | } 12 | }; 13 | 14 | document$.subscribe(() => { 15 | MathJax.typesetPromise() 16 | }) 17 | -------------------------------------------------------------------------------- /.ai_cache/2f5e21466936b5f7f6aa88e99e87d82e.json: -------------------------------------------------------------------------------- 1 | { 2 | "summary": "本文介绍了如何使用giscus在网站中添加评论系统。giscus基于GitHub Discussions,具有开源、无跟踪、无广告、无需数据库等特点,支持自定义主题和多种语言。文章详细介绍了在mkdocs.yml中添加custom_dir、替换comments.html代码以及配置twikoo等步骤。", 3 | "service": "glm", 4 | "page_title": "添加评论系统(giscus为例)", 5 | "timestamp": "2025-11-22T19:05:05.939914", 6 | "cache_version": "1.2.2", 7 | "content_hash": "46865f643b5680edae9f50dca1edcb9b" 8 | } -------------------------------------------------------------------------------- /.ai_cache/efa3388d2708f425da570a3338f87cd3.json: -------------------------------------------------------------------------------- 1 | { 2 | "summary": "本文介绍了如何使用MkDocs和Material for MkDocs搭建静态网页,并部署到GitHub Pages。步骤包括下载GitHub Desktop、创建GitHub仓库、配置mkdocs.yml文件、添加GitHub Workflow以及上传到GitHub。文章还提供了相关教程和参考资料。", 3 | "service": "glm", 4 | "page_title": "1.利用Mkdocs部署静态网页", 5 | "timestamp": "2025-11-22T19:04:22.169445", 6 | "cache_version": "1.2.2", 7 | "content_hash": "57ba84e18dfeac48c10e7cfa5a954e60" 8 | } -------------------------------------------------------------------------------- /docs/stylesheets/ziti.css: -------------------------------------------------------------------------------- 1 | @import url('https://static.zeoseven.com/zsft/292/main/result.css'); 2 | 3 | body { 4 | font-family: "LXGW WenKai"; 5 | font-weight: normal; 6 | } 7 | 8 | 9 | button.md-top { 10 | font-family: LXGW WenKai; 11 | /* 修改字体 */ 12 | font-size: 16px; 13 | /* 修改字体大小 */ 14 | font-weight: lighter; 15 | } 16 | 17 | /* :root { 18 | --md-text-font: "LXGW WenKai"; 19 | } */ 20 | -------------------------------------------------------------------------------- /site/stylesheets/ziti.css: -------------------------------------------------------------------------------- 1 | @import url('https://static.zeoseven.com/zsft/292/main/result.css'); 2 | 3 | body { 4 | font-family: "LXGW WenKai"; 5 | font-weight: normal; 6 | } 7 | 8 | 9 | button.md-top { 10 | font-family: LXGW WenKai; 11 | /* 修改字体 */ 12 | font-size: 16px; 13 | /* 修改字体大小 */ 14 | font-weight: lighter; 15 | } 16 | 17 | /* :root { 18 | --md-text-font: "LXGW WenKai"; 19 | } */ 20 | -------------------------------------------------------------------------------- /.ai_cache/9465f615f890a1a89f87a57a73cc7194.json: -------------------------------------------------------------------------------- 1 | { 2 | "summary": "本文档介绍了MkDocs配置文件mkdocs.yml的设置方法,包括主题、导航、额外设置、插件和Markdown扩展等。文档详细解释了如何自定义网站颜色、添加搜索、博客、标签等功能,并提供了相关代码示例。建议学习Markdown、HTML5、CSS3、JavaScript等知识,以便更好地自定义网站。", 3 | "service": "glm", 4 | "page_title": "2.Mkdocs配置说明(mkdocs.yml)", 5 | "timestamp": "2025-11-22T19:04:25.466803", 6 | "cache_version": "1.2.2", 7 | "content_hash": "e0c6a2caff86729e2f0ed12bc21bad7a" 8 | } -------------------------------------------------------------------------------- /docs/blog/posts/HelloWorld.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 博客文章测试 3 | authors: [Wcowin] 4 | date: 2021-12-18 5 | description: > 6 | Our new blog is built with the brand new built-in blog plugin. You can build 7 | a blog alongside your documentation or standalone 8 | categories: 9 | - Hello World 10 | hide_reading_time: true 11 | --- 12 | 13 | 14 | 15 | ![jpeg](https://s1.imagehub.cc/images/2024/02/02/7915aa7eb900ecb672597f3a5c766e03.jpeg) -------------------------------------------------------------------------------- /docs/blog/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | hide: 3 | # - navigation # 显示右 4 | - toc #显示左 5 | - footer 6 | # - feedback 7 | # comments: false 8 | # icon: octicons/home-fill-24 9 | hide_reading_time: true 10 | --- 11 | 12 | # MyBlog 13 |
14 | 15 | - :material-clock-fast:{ .lg .middle } __What is Blog?__ 16 | 17 | --- 18 | **博客,仅音译,英文名为Blogger,为Web Log的混成词。** 19 | **其正式名称为网络日记;又音译为部落格或部落阁等,是社会媒体网络的一部分。是使用特定的软件,在网络上出版、发表和张贴个人文章的人,或者是一种通常由个人管理、不定期张贴新的文章的网站** 20 | 21 |
22 | 23 | *** 24 | 25 | 26 | -------------------------------------------------------------------------------- /docs/blog/posts/update2022.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 2022网站更新记录 3 | authors: [Wcowin] 4 | date: 2022-06-06 5 | categories: 6 | - 网站更新记录 7 | readtime: 2 8 | hide_reading_time: true 9 | --- 10 | 11 | ##

2022-10-20

12 | * 建立Github仓库,正式建站 13 | * 取消cookie确认,简化网站打开流程 14 | * 新增首页反馈收集 15 | 16 | ##

2022-10-06

17 | 18 | * 不靠父母,全款拿下 [wcowin.work](https://wcowin.work/){target="_blank"}域名 19 | * 取消cookie确认,保障隐私 20 | 21 | ##

2022-06-06

22 | 23 | * 研究如何建设网站,初步定框架为MKdocs 24 | * 早期网址: -------------------------------------------------------------------------------- /.htaccess: -------------------------------------------------------------------------------- 1 | 2 | # compress text, HTML, JavaScript, CSS, and XML 3 | AddOutputFilterByType DEFLATE text/plain 4 | AddOutputFilterByType DEFLATE text/html 5 | AddOutputFilterByType DEFLATE text/xml 6 | AddOutputFilterByType DEFLATE text/css 7 | AddOutputFilterByType DEFLATE application/xml 8 | AddOutputFilterByType DEFLATE application/xhtml+xml 9 | AddOutputFilterByType DEFLATE application/rss+xml 10 | AddOutputFilterByType DEFLATE application/javascript 11 | AddOutputFilterByType DEFLATE application/x-javascript 12 | ExpiresActive on 13 | ExpiresDefault "access plus 1 month" 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /temp/PublishMySite.yml: -------------------------------------------------------------------------------- 1 | # 此工作流已经被弃用 2 | 3 | 4 | name: publish site 5 | on: # 在什么时候触发工作流 6 | push: # 在从本地main分支被push到GitHub仓库时 7 | branches: 8 | - main 9 | pull_request: # 在main分支合并别人提的pr时 10 | branches: 11 | - main 12 | jobs: # 工作流的具体内容 13 | deploy: 14 | runs-on: ubuntu-latest # 创建一个新的云端虚拟机 使用最新Ubuntu系统 15 | steps: 16 | - uses: actions/checkout@v2 # 先checkout到main分支 17 | - uses: actions/setup-python@v2 # 再安装Python3和相关环境 18 | with: 19 | python-version: 3.x 20 | - run: pip install mkdocs-material # 使用pip包管理工具安装mkdocs-material 21 | - run: mkdocs gh-deploy --force # 使用mkdocs-material部署gh-pages分支 22 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /docs/overrides/hooks/socialmedia.py: -------------------------------------------------------------------------------- 1 | from textwrap import dedent 2 | import urllib.parse 3 | import re 4 | 5 | x_intent = "https://twitter.com/intent/tweet" 6 | fb_sharer = "https://www.facebook.com/sharer/sharer.php" 7 | include = re.compile(r"blog/[1-9].*") 8 | 9 | def on_page_markdown(markdown, **kwargs): 10 | page = kwargs['page'] 11 | config = kwargs['config'] 12 | if not include.match(page.url): 13 | return markdown 14 | 15 | page_url = config.site_url+page.url 16 | page_title = urllib.parse.quote(page.title+'\n') 17 | 18 | return markdown + dedent(f""" 19 | [Share on :simple-x:]({x_intent}?text={page_title}&url={page_url}){{ .md-button }} 20 | [Share on :simple-facebook:]({fb_sharer}?u={page_url}){{ .md-button }} 21 | """) -------------------------------------------------------------------------------- /site/overrides/hooks/socialmedia.py: -------------------------------------------------------------------------------- 1 | from textwrap import dedent 2 | import urllib.parse 3 | import re 4 | 5 | x_intent = "https://twitter.com/intent/tweet" 6 | fb_sharer = "https://www.facebook.com/sharer/sharer.php" 7 | include = re.compile(r"blog/[1-9].*") 8 | 9 | def on_page_markdown(markdown, **kwargs): 10 | page = kwargs['page'] 11 | config = kwargs['config'] 12 | if not include.match(page.url): 13 | return markdown 14 | 15 | page_url = config.site_url+page.url 16 | page_title = urllib.parse.quote(page.title+'\n') 17 | 18 | return markdown + dedent(f""" 19 | [Share on :simple-x:]({x_intent}?text={page_title}&url={page_url}){{ .md-button }} 20 | [Share on :simple-facebook:]({fb_sharer}?u={page_url}){{ .md-button }} 21 | """) -------------------------------------------------------------------------------- /site/assets/javascripts/lunr/min/lunr.vi.min.js: -------------------------------------------------------------------------------- 1 | !function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.vi=function(){this.pipeline.reset(),this.pipeline.add(e.vi.stopWordFilter,e.vi.trimmer)},e.vi.wordCharacters="[A-Za-ẓ̀͐́͑̉̃̓ÂâÊêÔôĂ-ăĐ-đƠ-ơƯ-ư]",e.vi.trimmer=e.trimmerSupport.generateTrimmer(e.vi.wordCharacters),e.Pipeline.registerFunction(e.vi.trimmer,"trimmer-vi"),e.vi.stopWordFilter=e.generateStopWordFilter("là cái nhưng mà".split(" "))}}); -------------------------------------------------------------------------------- /site/assets/javascripts/lunr/min/lunr.multi.min.js: -------------------------------------------------------------------------------- 1 | !function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():t()(e.lunr)}(this,function(){return function(e){e.multiLanguage=function(){for(var t=Array.prototype.slice.call(arguments),i=t.join("-"),r="",n=[],s=[],p=0;p 12 | ``` 13 | 14 | image 15 | 16 | 我的完整代码: 17 | 18 | ```html 19 | 20 |
21 | 22 | - :octicons-bookmark-16:{ .lg .middle } __个人简历__ 23 | 24 | --- 25 | 26 | 28 | 29 | 30 |
31 | ``` 32 | 33 | 34 | 希望对你有帮助 -------------------------------------------------------------------------------- /docs/javascripts/view.js: -------------------------------------------------------------------------------- 1 | (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ 2 | (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), 3 | m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) 4 | })(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); 5 | 6 | ga('create', 'G-29HZMNR0KG', 'auto'); 7 | ga('send', 'pageview'); 8 | 9 | async function getViews() { 10 | let data = await ga.getAll()[0].get('page'); 11 | return data.pageviews; 12 | } 13 | 14 | async function renderViews() { 15 | let views = await getViews(); 16 | let elem = document.getElementById("views"); 17 | if (elem) { 18 | elem.innerText = views; 19 | } 20 | } 21 | 22 | renderViews(); -------------------------------------------------------------------------------- /site/javascripts/view.js: -------------------------------------------------------------------------------- 1 | (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ 2 | (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), 3 | m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) 4 | })(window,document,'script','https://www.google-analytics.com/analytics.js','ga'); 5 | 6 | ga('create', 'G-29HZMNR0KG', 'auto'); 7 | ga('send', 'pageview'); 8 | 9 | async function getViews() { 10 | let data = await ga.getAll()[0].get('page'); 11 | return data.pageviews; 12 | } 13 | 14 | async function renderViews() { 15 | let views = await getViews(); 16 | let elem = document.getElementById("views"); 17 | if (elem) { 18 | elem.innerText = views; 19 | } 20 | } 21 | 22 | renderViews(); -------------------------------------------------------------------------------- /docs/blog/websitebeauty/webtalknow.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 添加在线聊天 3 | hide: 4 | # - navigation # 显示右 5 | # - toc #显示左 6 | # - footer 7 | # - feedback 8 | tags: 9 | - Mkdocs 10 | comments: false 11 | --- 12 | 13 | 以[Tidio](https://www.tidio.com/)为例,Tidio免费版已经完全够用且无需梯子 14 | 15 | ## 访问Tidio官网 16 | 17 | 要在您的网站上使用 javascript 代码方法安装 Tidio,您需要创建一个 Tidio 帐户。要创建 Tidio 帐户,请访问我们的网站,然后单击 “开始” 按钮创建新的 Tidio 帐户。您还可以使用 “登录” 选项来使用您现有的帐户。 18 | 19 | 安装过程很简单,因为它只需要您将一行代码粘贴到网站代码的适当位置。 20 | 21 | ## 找到安装代码 22 | 23 | 可以前往“设置”>“频道”>“实时聊天”> “安装” 部分找到您独特的 Tidio javascript 代码。还将在帐户创建之旅的最后阶段看到代码。 24 | ![](https://help.tidio.com/hc/article_attachments/9168067328284) 25 | 比如: 26 | ```javascript 27 | 28 | ``` 29 | ## 放到你需要的页面即可 30 | ![](https://help.tidio.com/hc/article_attachments/5378990613404) -------------------------------------------------------------------------------- /docs/javascripts/mathjax-config.js: -------------------------------------------------------------------------------- 1 | /* mathjax-loader.js file */ 2 | /* ref: http://facelessuser.github.io/pymdown-extensions/extensions/arithmatex/ */ 3 | (function (win, doc) { 4 | win.MathJax = { 5 | config: ["MMLorHTML.js"], 6 | extensions: ["tex2jax.js"], 7 | jax: ["input/TeX"], 8 | tex2jax: { 9 | inlineMath: [ ["\\(","\\)"] ], 10 | displayMath: [ ["\\[","\\]"] ] 11 | }, 12 | TeX: { 13 | TagSide: "right", 14 | TagIndent: ".8em", 15 | MultLineWidth: "85%", 16 | equationNumbers: { 17 | autoNumber: "AMS", 18 | }, 19 | unicode: { 20 | fonts: "STIXGeneral,'Arial Unicode MS'" 21 | } 22 | }, 23 | displayAlign: 'center', 24 | showProcessingMessages: false, 25 | messageStyle: 'none' 26 | }; 27 | })(window, document); 28 | -------------------------------------------------------------------------------- /site/javascripts/mathjax-config.js: -------------------------------------------------------------------------------- 1 | /* mathjax-loader.js file */ 2 | /* ref: http://facelessuser.github.io/pymdown-extensions/extensions/arithmatex/ */ 3 | (function (win, doc) { 4 | win.MathJax = { 5 | config: ["MMLorHTML.js"], 6 | extensions: ["tex2jax.js"], 7 | jax: ["input/TeX"], 8 | tex2jax: { 9 | inlineMath: [ ["\\(","\\)"] ], 10 | displayMath: [ ["\\[","\\]"] ] 11 | }, 12 | TeX: { 13 | TagSide: "right", 14 | TagIndent: ".8em", 15 | MultLineWidth: "85%", 16 | equationNumbers: { 17 | autoNumber: "AMS", 18 | }, 19 | unicode: { 20 | fonts: "STIXGeneral,'Arial Unicode MS'" 21 | } 22 | }, 23 | displayAlign: 'center', 24 | showProcessingMessages: false, 25 | messageStyle: 'none' 26 | }; 27 | })(window, document); 28 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: Wcowin 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry 12 | polar: # Replace with a single Polar username 13 | buy_me_a_coffee: # Replace with a single Buy Me a Coffee username 14 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 15 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Desktop (please complete the following information):** 27 | - OS: [e.g. iOS] 28 | - Browser [e.g. chrome, safari] 29 | - Version [e.g. 22] 30 | 31 | **Smartphone (please complete the following information):** 32 | - Device: [e.g. iPhone6] 33 | - OS: [e.g. iOS8.1] 34 | - Browser [e.g. stock browser, safari] 35 | - Version [e.g. 22] 36 | 37 | **Additional context** 38 | Add any other context about the problem here. 39 | -------------------------------------------------------------------------------- /temp/main.html: -------------------------------------------------------------------------------- 1 | {#- 2 | This file was automatically generated - do not edit 3 | -#} 4 | {% extends "base.html" %} 5 | {% block extrahead %} 6 | 7 | {% endblock %} 8 | {% block announce %} 9 | Follow @Wcowin on 10 | 11 | 12 | {% include ".icons/fontawesome/brands/bilibili.svg" %} 13 | 14 | Bilibili 15 | 16 | and 17 | 18 | 21 | Twitter 22 | 23 | {% endblock %} 24 | {% block scripts %} 25 | {{ super() }} 26 | 27 | {% endblock %} 28 | 29 | 30 | -------------------------------------------------------------------------------- /site/assets/javascripts/lunr/min/lunr.th.min.js: -------------------------------------------------------------------------------- 1 | !function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r="2"==e.version[0];e.th=function(){this.pipeline.reset(),this.pipeline.add(e.th.trimmer),r?this.tokenizer=e.th.tokenizer:(e.tokenizer&&(e.tokenizer=e.th.tokenizer),this.tokenizerFn&&(this.tokenizerFn=e.th.tokenizer))},e.th.wordCharacters="[฀-๿]",e.th.trimmer=e.trimmerSupport.generateTrimmer(e.th.wordCharacters),e.Pipeline.registerFunction(e.th.trimmer,"trimmer-th");var t=e.wordcut;t.init(),e.th.tokenizer=function(i){if(!arguments.length||null==i||void 0==i)return[];if(Array.isArray(i))return i.map(function(t){return r?new e.Token(t):t});var n=i.toString().replace(/^\s+/,"");return t.cut(n).split("|")}}}); -------------------------------------------------------------------------------- /docs/about/resume.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 个人简历 3 | hide: 4 | # - navigation # 显示右 5 | - toc #显示左 6 | - footer 7 | - feedback 8 | comments: false 9 | --- 10 | 19 | 20 | 21 |
请使用PC端查看,谢谢
22 | 23 | --- 24 | 25 |
26 | 27 | - :octicons-bookmark-16:{ .lg .middle } __个人简历__ 28 | 29 | --- 30 | 31 | 32 | 33 |
34 | 35 | :material-download: 下载PDF 36 | 37 |
38 | 39 |
40 | -------------------------------------------------------------------------------- /docs/blog/websitebeauty/accelerate.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 加速网站访问的一些心得 3 | tags: 4 | - Mkdocs 5 | --- 6 | 7 | # 加速网站访问的一些心得 8 | 9 | 10 | 11 | 在使用 MkDocs 构建网站时,为了提高访问速度,我们可以采取以下一些措施: 12 | ## 1. 优化图片 13 | 使用合适的图片格式,如 WebP、JPEG2000 等,减少图片文件大小,从而加快加载速度。 14 | 15 | 可以使用在线工具进行图片压缩,如: 16 | 17 | - [freeconvert](https://www.freeconvert.com/zh/webp-converter) 18 | 19 | ## 2. JS/CSS使用 CDN 20 | 使用内容分发网络(CDN)来加速网站的访问,将静态资源(如图片、CSS、JS)缓存到全球各地的服务器上,用户就近访问,减少延迟。 21 | 22 | 这里推荐 23 | 24 | - [jsDelivr CDN 加速 GitHub 文件](https://www.jsdelivr.com/github) 25 | 26 | ## 3.加速本地渲染 27 | 28 | 优化 git 插件的 enabled 配置 29 | 比如我配置里有 git-revision-date-localized 和 git-committers 插件,这些插件会在每次渲染时读取所有文件的 git 历史,导致本地预览变慢。 30 | 推荐做法是在本地开发时禁用它们,仅在 CI/CD 或线上构建时启用。 31 | 具体写法如下: 32 | 33 | ```yaml hl_lines="3 5" 34 | plugins: 35 | - git-revision-date-localized: 36 | enabled: !ENV [CI, false] # 只有在CI环境变量为true时才启用 37 | - git-committers: 38 | enabled: !ENV [CI, false] 39 | 40 | ``` 41 | 42 | --- 43 | 44 | 检验加速效果是否生效可以使用lighthouse进行测试,具体可以参考: 45 | 46 | [使用lighthouse进行网站性能测试](../../develop/lighthouse.md) -------------------------------------------------------------------------------- /docs/stylesheets/video.css: -------------------------------------------------------------------------------- 1 | /* 播放器显示暂停图标start */ 2 | .vjs-paused .vjs-big-play-button, 3 | .vjs-paused.vjs-has-started .vjs-big-play-button { 4 | display: block; 5 | } 6 | /* 播放器显示暂停图标end */ 7 | 8 | /* 暂停图标显示为圆形start */ 9 | .video-js .vjs-big-play-button{ 10 | font-size: 2.5em; 11 | line-height: 2.3em; 12 | height: 2.5em; 13 | width: 2.5em; 14 | -webkit-border-radius: 2.5em; 15 | -moz-border-radius: 2.5em; 16 | border-radius: 2.5em; 17 | background-color: #73859f; 18 | background-color: rgba(115,133,159,.5); 19 | border-width: 0.15em; 20 | margin-top: -1.25em; 21 | margin-left: -1.75em; 22 | } 23 | /* 中间的播放箭头 */ 24 | .vjs-big-play-button .vjs-icon-placeholder { 25 | font-size: 1.63em; 26 | } 27 | /* 加载圆圈 */ 28 | .vjs-loading-spinner { 29 | font-size: 2.5em; 30 | width: 2em; 31 | height: 2em; 32 | border-radius: 1em; 33 | margin-top: -1em; 34 | margin-left: -1.5em; 35 | } 36 | /* 暂停图标显示为圆形end */ 37 | 38 | /* 设置播放时间 */ 39 | .video-js .vjs-time-control{display:block;} 40 | .video-js .vjs-remaining-time{display: none;} -------------------------------------------------------------------------------- /site/stylesheets/video.css: -------------------------------------------------------------------------------- 1 | /* 播放器显示暂停图标start */ 2 | .vjs-paused .vjs-big-play-button, 3 | .vjs-paused.vjs-has-started .vjs-big-play-button { 4 | display: block; 5 | } 6 | /* 播放器显示暂停图标end */ 7 | 8 | /* 暂停图标显示为圆形start */ 9 | .video-js .vjs-big-play-button{ 10 | font-size: 2.5em; 11 | line-height: 2.3em; 12 | height: 2.5em; 13 | width: 2.5em; 14 | -webkit-border-radius: 2.5em; 15 | -moz-border-radius: 2.5em; 16 | border-radius: 2.5em; 17 | background-color: #73859f; 18 | background-color: rgba(115,133,159,.5); 19 | border-width: 0.15em; 20 | margin-top: -1.25em; 21 | margin-left: -1.75em; 22 | } 23 | /* 中间的播放箭头 */ 24 | .vjs-big-play-button .vjs-icon-placeholder { 25 | font-size: 1.63em; 26 | } 27 | /* 加载圆圈 */ 28 | .vjs-loading-spinner { 29 | font-size: 2.5em; 30 | width: 2em; 31 | height: 2em; 32 | border-radius: 1em; 33 | margin-top: -1em; 34 | margin-left: -1.5em; 35 | } 36 | /* 暂停图标显示为圆形end */ 37 | 38 | /* 设置播放时间 */ 39 | .video-js .vjs-time-control{display:block;} 40 | .video-js .vjs-remaining-time{display: none;} -------------------------------------------------------------------------------- /docs/blog/Mkdocs/mkdocsblog.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 网站添加Mkdocs博客 3 | tags: 4 | - Mkdocs 5 | --- 6 | 7 | 博客效果展示:[博客](../index.md) 8 | 9 | 官方文档:[Built-in blog plugin](https://squidfunk.github.io/mkdocs-material/plugins/blog/) 10 | 11 | 与所有内置插件一样,博客插件的入门非常简单。只需将以下行添加到mkdocs.yml 12 | 13 | ``` hl_lines="2" 14 | plugins: 15 | - blog 16 | ``` 17 | 18 | **然后在/docs/blog/posts下写md文件即可**(无需再mkdocs.yml配置,如没有post文件,新建一个即可) 19 | 但是bolg文件夹下要有index.md文件(没有这个文件新建即可)! 20 | 21 | 在mkdocs.yml的nav部分这样写 22 | ``` 23 | nav: 24 | - 博客: 25 | - index: blog/index.md 26 | ``` 27 | 28 | 元标签参考: 29 | ``` 30 | --- 31 | title: 32 | authors: [Wcowin] #作者 33 | date: 2023-10-04 #时间 34 | draft: true # 是否为草稿 35 | categories: #分类 36 | - Hello 37 | --- 38 | ``` 39 | 40 | 41 | 作者信息在docs/blog/.authors.yml里配置(没有.authors.yml新建即可) 42 | 43 | ```yml 44 | authors: 45 | Wcowin: 46 | name: Wang Kewen # Author name 47 | description: Free and casual # Author description 48 | avatar: https://s1.imagehub.cc/images/2024/02/02/91a767e93d1a344e44c69936464c583e.png # Author avatar 49 | 50 | ``` 51 | 结束 52 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2025 Wcowin 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /site/assets/javascripts/lunr/min/lunr.hy.min.js: -------------------------------------------------------------------------------- 1 | !function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.hy=function(){this.pipeline.reset(),this.pipeline.add(e.hy.trimmer,e.hy.stopWordFilter)},e.hy.wordCharacters="[A-Za-z԰-֏ff-ﭏ]",e.hy.trimmer=e.trimmerSupport.generateTrimmer(e.hy.wordCharacters),e.Pipeline.registerFunction(e.hy.trimmer,"trimmer-hy"),e.hy.stopWordFilter=e.generateStopWordFilter("դու և եք էիր էիք հետո նաև նրանք որը վրա է որ պիտի են այս մեջ ն իր ու ի այդ որոնք այն կամ էր մի ես համար այլ իսկ էին ենք հետ ին թ էինք մենք նրա նա դուք եմ էի ըստ որպես ում".split(" ")),e.Pipeline.registerFunction(e.hy.stopWordFilter,"stopWordFilter-hy"),e.hy.stemmer=function(){return function(e){return"function"==typeof e.update?e.update(function(e){return e}):e}}(),e.Pipeline.registerFunction(e.hy.stemmer,"stemmer-hy")}}); -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | # 核心框架 2 | mkdocs>=1.5.0 3 | mkdocs-material>=9.0.0 4 | 5 | # 扩展功能 6 | pymdown-extensions>=10.0 7 | jinja2>=3.0.0 8 | 9 | # 内容增强插件 10 | mkdocs-encryptcontent-plugin 11 | mkdocs-glightbox 12 | mkdocs-git-committers-plugin-2 13 | mkdocs-git-revision-date-localized-plugin 14 | mkdocs-markdownextradata-plugin 15 | mkdocs-open-in-new-tab 16 | 17 | # 中文处理 18 | jieba>=0.42.1 19 | 20 | # 网络请求 21 | urllib3<2 22 | requests>=2.25.0 23 | 24 | # 数据处理和分析 25 | pyyaml>=6.0 26 | # hashlib-compat # Python 3.12+ 内置 hashlib,不需要这个包 27 | 28 | # 自然语言处理 (用于您的推荐系统和阅读时间统计) 29 | nltk>=3.8 30 | scikit-learn>=1.0.0 # 用于相似度计算 31 | 32 | # 缓存和性能优化 33 | python-dateutil>=2.8.0 34 | markupsafe>=2.1.0 35 | 36 | # AI 功能支持 (基于您的 AI Summary 功能) 37 | openai>=1.0.0 38 | deepseek-api # 如果使用 DeepSeek API 39 | 40 | # 图像处理 (如果需要) 41 | pillow>=9.0.0 42 | 43 | # 开发和调试工具 44 | mkdocs-minify-plugin # 代码压缩 45 | mkdocs-awesome-pages-plugin # 页面管理 46 | mkdocs-redirects # 重定向管理 47 | 48 | # 数学公式支持 49 | python-markdown-math 50 | 51 | # RSS 和 Sitemap 支持 52 | mkdocs-rss-plugin>=1.10.0 53 | lxml>=4.9.0 # XML 处理 54 | 55 | # 搜索增强 56 | mkdocs-search-pro 57 | 58 | # 多语言支持 59 | mkdocs-static-i18n -------------------------------------------------------------------------------- /docs/stylesheets/extra2.css: -------------------------------------------------------------------------------- 1 | /* 保持搜索框输入区域字体为默认 */ 2 | .md-search__input { 3 | font-family: inherit !important; 4 | } 5 | 6 | /* OneClip 公告栏样式 - 简约设计 */ 7 | .oneclip-announcement { 8 | background: linear-gradient(135deg, rgba(81, 143, 193, 0.06) 0%, rgba(81, 143, 193, 0.03) 100%); 9 | border: 1px solid rgba(81, 143, 193, 0.15); 10 | color: var(--md-default-fg-color); 11 | text-align: center; 12 | padding: 10px 20px; 13 | margin: -20px 0 10px 0; 14 | border-radius: 20px; 15 | } 16 | 17 | /* 暗色模式适配 */ 18 | [data-md-color-scheme="slate"] .oneclip-announcement { 19 | background: linear-gradient(135deg, rgba(81, 143, 193, 0.04) 0%, rgba(81, 143, 193, 0.02) 100%); 20 | border-color: rgba(81, 143, 193, 0.12); 21 | } 22 | 23 | .oneclip-announcement-content { 24 | font-size: 14px; 25 | line-height: 1.5; 26 | } 27 | 28 | .oneclip-announcement a { 29 | color: var(--md-primary-fg-color, #518FC1) !important; 30 | text-decoration: none; 31 | transition: opacity 0.2s; 32 | font-weight: 500; 33 | } 34 | 35 | .oneclip-announcement a:hover { 36 | opacity: 0.7; 37 | } 38 | 39 | .oneclip-cta { 40 | margin-left: 8px; 41 | text-decoration: none !important; 42 | display: inline; 43 | } 44 | 45 | -------------------------------------------------------------------------------- /docs/develop/designbeauty/my-to-desihn.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 我对设计的一些看法 3 | tags: 4 | - 设计美学 5 | --- 6 | 7 | # Some of my thoughts on design 8 | 9 |
10 | 11 | 吸引人的事物总让人心情愉悦 并反过来促进他们的思维更具创意
12 | 13 | 14 | 1. 简洁与精炼:简洁、精炼和精确的表达。去除不必要的元素,使设计更加简洁明了。关注核心功能和信息,避免过度设计和冗余。 15 | 16 | 2. 优雅与美感:追求优雅和美感的设计。注重线条的流畅性和视觉上的平衡。通过精心的排版、对比和比例,创造出令人愉悦的视觉效果。 17 | 18 | 3. 用户体验至上:以用户为中心,关注用户需求和行为模式,创造出简单直观、易于使用的产品和界面。通过减少复杂性和提供无缝的交互体验,使用户与产品之间的互动更加自然流畅。 19 | 20 | 4. 强调细节:从字体选择到颜色搭配,从图标设计到动画效果,都需要经过精心的考虑和把控。细节的关注使得产品的整体质感更出色。 21 | 22 | 5. 创新与突破:鼓励创新和突破传统观念的思维方式。将不同的元素融合在一起,创造出独特的设计解决方案。在设计中寻找突破点,提供新颖而富有创意的体验。 23 | 24 | 6. 故事性与情感共鸣:情感共鸣和故事性的体验。设计来传递产品的背后故事和品牌的价值观。通过简单而有力的设计语言,激发用户的情感共鸣和对产品的认同。 25 | 26 | 27 | 【⚡啊!设计,是什么呢?⚡】 28 | 29 | 30 | -------------------------------------------------------------------------------- /docs/overrides/partials/meta.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: ci 2 | on: 3 | push: 4 | branches: 5 | - master 6 | - main 7 | permissions: 8 | contents: write 9 | jobs: 10 | deploy: 11 | runs-on: ubuntu-latest 12 | steps: 13 | - uses: actions/checkout@v4 14 | - name: Configure Git Credentials 15 | run: | 16 | git config user.name github-actions[bot] 17 | git config user.email 41898282+github-actions[bot]@users.noreply.github.com 18 | - uses: actions/setup-python@v5 19 | with: 20 | python-version: 3.x 21 | - run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV 22 | - uses: actions/cache@v4 23 | with: 24 | key: mkdocs-material-${{ env.cache_id }} 25 | path: ~/.cache 26 | restore-keys: | 27 | mkdocs-material- 28 | - run: pip install mkdocs-material 29 | - run: pip install mkdocs-git-revision-date-localized-plugin 30 | - run: pip install mkdocs-git-authors-plugin 31 | - run: pip install mkdocs-git-committers-plugin-2 32 | - run: pip install markdown-callouts 33 | - run: pip install mkdocs-material-extensions 34 | - run: pip install mkdocs-materialx #如果使用materialX,工作流需要安装 35 | - run: pip install mkdocs-document-dates 36 | - run: mkdocs gh-deploy --force -------------------------------------------------------------------------------- /site/assets/javascripts/lunr/min/lunr.te.min.js: -------------------------------------------------------------------------------- 1 | !function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():t()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.te=function(){this.pipeline.reset(),this.pipeline.add(e.te.trimmer,e.te.stopWordFilter,e.te.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.te.stemmer))},e.te.wordCharacters="ఀ-ఄఅ-ఔక-హా-ౌౕ-ౖౘ-ౚౠ-ౡౢ-ౣ౦-౯౸-౿఼ఽ్ౝ౷౤౥",e.te.trimmer=e.trimmerSupport.generateTrimmer(e.te.wordCharacters),e.Pipeline.registerFunction(e.te.trimmer,"trimmer-te"),e.te.stopWordFilter=e.generateStopWordFilter("అందరూ అందుబాటులో అడగండి అడగడం అడ్డంగా అనుగుణంగా అనుమతించు అనుమతిస్తుంది అయితే ఇప్పటికే ఉన్నారు ఎక్కడైనా ఎప్పుడు ఎవరైనా ఎవరో ఏ ఏదైనా ఏమైనప్పటికి ఒక ఒకరు కనిపిస్తాయి కాదు కూడా గా గురించి చుట్టూ చేయగలిగింది తగిన తర్వాత దాదాపు దూరంగా నిజంగా పై ప్రకారం ప్రక్కన మధ్య మరియు మరొక మళ్ళీ మాత్రమే మెచ్చుకో వద్ద వెంట వేరుగా వ్యతిరేకంగా సంబంధం".split(" ")),e.te.stemmer=function(){return function(e){return"function"==typeof e.update?e.update(function(e){return e}):e}}();var t=e.wordcut;t.init(),e.te.tokenizer=function(r){if(!arguments.length||null==r||void 0==r)return[];if(Array.isArray(r))return r.map(function(t){return isLunr2?new e.Token(t.toLowerCase()):t.toLowerCase()});var i=r.toString().toLowerCase().replace(/^\s+/,"");return t.cut(i).split("|")},e.Pipeline.registerFunction(e.te.stemmer,"stemmer-te"),e.Pipeline.registerFunction(e.te.stopWordFilter,"stopWordFilter-te")}}); -------------------------------------------------------------------------------- /docs/blog/websitebeauty/Relativeaddress.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 相对地址的一些问题 3 | tags: 4 | - Mkdocs 5 | --- 6 | 7 | # 针对MKdocs中相对地址引用的一些问题 8 | 9 | 在使用 MkDocs 构建文档网站时,常常会遇到相对地址引用的问题,尤其是在图片、PDF、其他静态资源等的引用上。合理使用相对地址可以让你的文档在本地预览和线上部署时都能正常显示。下面总结一些常见场景和注意事项: 10 | 11 | ## 1. 图片引用 12 | 13 | **推荐写法:** 14 | ``` 15 | ![图片描述](./img/example.png) 16 | ``` 17 | `./img/example.png` 表示当前 Markdown 文件同级目录下的 `img` 文件夹中的图片。 18 | 如果图片在上级目录:`../assets/example.png` 19 | 20 | **注意事项:** 21 | 22 | - 路径区分大小写,确保文件名和路径一致。 23 | - MkDocs 会将 `docs` 目录下的所有文件原样复制到站点根目录,引用路径应以 `docs` 为根目录进行相对定位。 24 | 25 | ## 2. PDF 文件引用 26 | 27 | **内嵌或下载 PDF:** 28 | ``` 29 | [查看PDF](./files/example.pdf) 30 | ``` 31 | 32 | 或使用 HTML 方式内嵌: 33 | 34 | ```html 35 | 36 | ``` 37 | 38 | `./files/example.pdf` 表示当前文档同级的 `files` 文件夹下的 PDF 文件。 39 | `../files/example.pdf` 表示上级目录的 `files` 文件夹下的 PDF 文件。 40 | `../../files/example.pdf` 表示上上级目录的 `files` 文件夹下的 PDF 文件。 41 | 42 | 43 | ## 3. 跨页面引用 44 | 45 | **引用同一项目下的其他 Markdown 页面:** 46 | ``` 47 | [跳转到其他页面](../otherpage.md) 48 | ``` 49 | 50 | - MkDocs 会自动将 `.md` 转换为 `.html`,所以可以直接用 Markdown 文件名。 51 | - ()内的路径是相对于当前 Markdown 文件的路径,可以参考[PDF文件引用](#2-pdf)的方法。 52 | 53 | ## 4. 静态资源引用 54 | 55 | **如 CSS、JS 文件:** 56 | ```html 57 | 58 | 59 | ``` 60 | 61 | - 推荐将静态资源放在 `docs/assets` 目录下,引用时用相对路径。 62 | 63 | ## 5. 常见问题 64 | 65 | - **路径错误导致资源无法加载**:请检查路径是否正确、文件是否存在、大小写是否一致。 66 | - **本地预览正常,线上不显示**:有可能是路径写死或大小写问题,建议始终用相对路径。 67 | - **图片/文件过大加载慢**:可适当压缩图片或 PDF 文件。 68 | 69 | --- 70 | 71 | ## **总结** 72 | 在 MkDocs 项目中,所有资源的相对路径都应以当前 Markdown 文件为基准,确保本地和线上都能正确访问。建议统一资源管理目录结构,便于维护和引用。 -------------------------------------------------------------------------------- /docs/blog/MIT.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 许可声明 3 | status: new 4 | 5 | hide: 6 | # - navigation 7 | # - toc 8 | # - feedback 9 | - footer 10 | --- 11 | 12 | ![](https://pic3.zhimg.com/80/v2-a0c07e85f2dfdfa5f1eed932883daa50_1440w.webp) 13 | 14 | === "麻省理工学院许可证" 15 | 16 | 版权所有 (c) 2016-2025 Martin Donath 17 | 18 | 特此授予获得此软件和相关文档文件(“软件”)副本的任何人免费许可,以无限制方式处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本的权利,并允许向其提供软件的人员这样做,但须遵守以下条件: 19 | 20 | 上述版权声明和本许可声明均应包含在软件的所有副本或重要部分中。 21 | 22 | 软件按“原样”提供,不作任何明示或暗示的保证,包括但不限于适销性、特定用途的适用性和不侵权性的保证。在任何情况下,作者或版权持有者均不对因软件或使用或其他处理软件而引起的或与之相关的任何索赔、损害或其他责任承担责任,无论是合同行为、侵权行为还是其他行为。 23 | 24 | === "MIT License" 25 | 26 | Copyright (c) 2016-2025 Martin Donath 27 | 28 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 29 | 30 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 31 | 32 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 33 | 34 | -------------------------------------------------------------------------------- /site/assets/javascripts/lunr/min/lunr.ta.min.js: -------------------------------------------------------------------------------- 1 | !function(e,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():t()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.ta=function(){this.pipeline.reset(),this.pipeline.add(e.ta.trimmer,e.ta.stopWordFilter,e.ta.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.ta.stemmer))},e.ta.wordCharacters="஀-உஊ-ஏஐ-ஙச-ட஠-னப-யர-ஹ஺-ிீ-௉ொ-௏ௐ-௙௚-௟௠-௩௪-௯௰-௹௺-௿a-zA-Za-zA-Z0-90-9",e.ta.trimmer=e.trimmerSupport.generateTrimmer(e.ta.wordCharacters),e.Pipeline.registerFunction(e.ta.trimmer,"trimmer-ta"),e.ta.stopWordFilter=e.generateStopWordFilter("அங்கு அங்கே அது அதை அந்த அவர் அவர்கள் அவள் அவன் அவை ஆக ஆகவே ஆகையால் ஆதலால் ஆதலினால் ஆனாலும் ஆனால் இங்கு இங்கே இது இதை இந்த இப்படி இவர் இவர்கள் இவள் இவன் இவை இவ்வளவு உனக்கு உனது உன் உன்னால் எங்கு எங்கே எது எதை எந்த எப்படி எவர் எவர்கள் எவள் எவன் எவை எவ்வளவு எனக்கு எனது எனவே என் என்ன என்னால் ஏது ஏன் தனது தன்னால் தானே தான் நாங்கள் நாம் நான் நீ நீங்கள்".split(" ")),e.ta.stemmer=function(){return function(e){return"function"==typeof e.update?e.update(function(e){return e}):e}}();var t=e.wordcut;t.init(),e.ta.tokenizer=function(r){if(!arguments.length||null==r||void 0==r)return[];if(Array.isArray(r))return r.map(function(t){return isLunr2?new e.Token(t.toLowerCase()):t.toLowerCase()});var i=r.toString().toLowerCase().replace(/^\s+/,"");return t.cut(i).split("|")},e.Pipeline.registerFunction(e.ta.stemmer,"stemmer-ta"),e.Pipeline.registerFunction(e.ta.stopWordFilter,"stopWordFilter-ta")}}); -------------------------------------------------------------------------------- /docs/blog/websitebeauty/header.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 添加顶部公告栏 3 | # 隐藏的模块 4 | hide: 5 | # - navigation # 隐藏左边导航 6 | # - toc #隐藏右边导航 7 | # - footer #隐藏翻页 8 | # - feedback #隐藏反馈 9 | tags: 10 | - Mkdocs 11 | comments: false #评论,默认不开启 12 | --- 13 | ![image.png](https://s2.loli.net/2024/02/02/mvCEgeP4lANuXI8.png) 14 | 15 | docs/overrides下新建main.html ,针对main.html文件 16 | 树状结构如下: 17 | ``` hl_lines="11" 18 | $ tree -a 19 | . 20 | ├── .github 21 | │ ├── .DS_Store 22 | │ └── workflows 23 | │ └── ci.yml 24 | ├── docs 25 | │ └── index.md 26 | │ └──overrides 27 | │ └──assets 28 | │ └──main.html 29 | │ └──partials 30 | │ └──comments.html 31 | │ 32 | └── mkdocs.yml 33 | ``` 34 | 35 | ```html hl_lines="9-22" 36 | {#- 37 | This file was automatically generated - do not edit 38 | -#} 39 | {% extends "base.html" %} 40 | {% block extrahead %} 41 | 42 | {% endblock %} 43 | {% block announce %} 44 | Follow @Wcowin on 45 | 46 | 47 | {% include ".icons/fontawesome/brands/bilibili.svg" %} 48 | 49 | Bilibili 50 | 51 | and 52 | 53 | 56 | Twitter 57 | 58 | {% endblock %} 59 | {% block scripts %} 60 | {{ super() }} 61 | 62 | {% endblock %} 63 | ``` 64 | 65 | 66 | 在main.html 里自行修改即可 67 | -------------------------------------------------------------------------------- /site/assets/javascripts/lunr/min/lunr.zh.min.js: -------------------------------------------------------------------------------- 1 | !function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r(require("@node-rs/jieba")):r()(e.lunr)}(this,function(e){return function(r,t){if(void 0===r)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===r.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var i="2"==r.version[0];r.zh=function(){this.pipeline.reset(),this.pipeline.add(r.zh.trimmer,r.zh.stopWordFilter,r.zh.stemmer),i?this.tokenizer=r.zh.tokenizer:(r.tokenizer&&(r.tokenizer=r.zh.tokenizer),this.tokenizerFn&&(this.tokenizerFn=r.zh.tokenizer))},r.zh.tokenizer=function(n){if(!arguments.length||null==n||void 0==n)return[];if(Array.isArray(n))return n.map(function(e){return i?new r.Token(e.toLowerCase()):e.toLowerCase()});t&&e.load(t);var o=n.toString().trim().toLowerCase(),s=[];e.cut(o,!0).forEach(function(e){s=s.concat(e.split(" "))}),s=s.filter(function(e){return!!e});var u=0;return s.map(function(e,t){if(i){var n=o.indexOf(e,u),s={};return s.position=[n,e.length],s.index=t,u=n,new r.Token(e,s)}return e})},r.zh.wordCharacters="\\w一-龥",r.zh.trimmer=r.trimmerSupport.generateTrimmer(r.zh.wordCharacters),r.Pipeline.registerFunction(r.zh.trimmer,"trimmer-zh"),r.zh.stemmer=function(){return function(e){return e}}(),r.Pipeline.registerFunction(r.zh.stemmer,"stemmer-zh"),r.zh.stopWordFilter=r.generateStopWordFilter("的 一 不 在 人 有 是 为 為 以 于 於 上 他 而 后 後 之 来 來 及 了 因 下 可 到 由 这 這 与 與 也 此 但 并 並 个 個 其 已 无 無 小 我 们 們 起 最 再 今 去 好 只 又 或 很 亦 某 把 那 你 乃 它 吧 被 比 别 趁 当 當 从 從 得 打 凡 儿 兒 尔 爾 该 該 各 给 給 跟 和 何 还 還 即 几 幾 既 看 据 據 距 靠 啦 另 么 麽 每 嘛 拿 哪 您 凭 憑 且 却 卻 让 讓 仍 啥 如 若 使 谁 誰 虽 雖 随 隨 同 所 她 哇 嗡 往 些 向 沿 哟 喲 用 咱 则 則 怎 曾 至 致 着 著 诸 諸 自".split(" ")),r.Pipeline.registerFunction(r.zh.stopWordFilter,"stopWordFilter-zh")}}); -------------------------------------------------------------------------------- /docs/javascripts/extra.js: -------------------------------------------------------------------------------- 1 | // Wrap every letter in a span 2 | var textWrapper = document.querySelector('.ml3'); 3 | textWrapper.innerHTML = textWrapper.textContent.replace(/\S/g, "$&"); 4 | 5 | anime.timeline({loop: true}) 6 | .add({ 7 | targets: '.ml3 .letter', 8 | opacity: [0,1], 9 | easing: "easeInOutQuad", 10 | duration: 2250, 11 | delay: (el, i) => 150 * (i+1) 12 | }).add({ 13 | targets: '.ml3', 14 | opacity: 0, 15 | duration: 1000, 16 | easing: "easeOutExpo", 17 | delay: 1000 18 | }); 19 | 20 | 21 | //全屏视频 22 | // var video = document.getElementById("video1"); 23 | // var isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent); 24 | 25 | // if (isMobile) { 26 | // video.style.display = "none"; 27 | // video.muted = true; 28 | // } else { 29 | // video.volume = 0.5; // 或者根据需要设置适当的音量值,例如 0.5 表示 50% 的音量 30 | // } 31 | 32 | // 优化 33 | // const container = document.querySelector('.container'); 34 | // const boxes = document.querySelectorAll('p'); 35 | 36 | // // Read a layout property 37 | // const newWidth = container.offsetWidth; 38 | 39 | // for (var i = 0; i < boxes.length; i++) { 40 | // // Then invalidate layouts with writes. 41 | // boxes[i].style.width = newWidth + 'px'; 42 | // } 43 | // const width = box.offsetWidth; 44 | // box.classList.add('big'); 45 | 46 | // // When the user clicks on a link/button: 47 | // async function navigateToSettingsPage() { 48 | // // Capture and visually freeze the current state. 49 | // await document.documentTransition.prepare({ 50 | // rootTransition: 'cover-up', 51 | // sharedElements: [element1, element2, element3], 52 | // }); 53 | // // This is a function within the web app: 54 | // updateDOMForSettingsPage(); 55 | // // Start the transition. 56 | // await document.documentTransition.start({ 57 | // sharedElements: [element1, element4, element5], 58 | // }); 59 | // // Transition complete! 60 | // } 61 | // 优化end 62 | 63 | -------------------------------------------------------------------------------- /site/javascripts/extra.js: -------------------------------------------------------------------------------- 1 | // Wrap every letter in a span 2 | var textWrapper = document.querySelector('.ml3'); 3 | textWrapper.innerHTML = textWrapper.textContent.replace(/\S/g, "$&"); 4 | 5 | anime.timeline({loop: true}) 6 | .add({ 7 | targets: '.ml3 .letter', 8 | opacity: [0,1], 9 | easing: "easeInOutQuad", 10 | duration: 2250, 11 | delay: (el, i) => 150 * (i+1) 12 | }).add({ 13 | targets: '.ml3', 14 | opacity: 0, 15 | duration: 1000, 16 | easing: "easeOutExpo", 17 | delay: 1000 18 | }); 19 | 20 | 21 | //全屏视频 22 | // var video = document.getElementById("video1"); 23 | // var isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent); 24 | 25 | // if (isMobile) { 26 | // video.style.display = "none"; 27 | // video.muted = true; 28 | // } else { 29 | // video.volume = 0.5; // 或者根据需要设置适当的音量值,例如 0.5 表示 50% 的音量 30 | // } 31 | 32 | // 优化 33 | // const container = document.querySelector('.container'); 34 | // const boxes = document.querySelectorAll('p'); 35 | 36 | // // Read a layout property 37 | // const newWidth = container.offsetWidth; 38 | 39 | // for (var i = 0; i < boxes.length; i++) { 40 | // // Then invalidate layouts with writes. 41 | // boxes[i].style.width = newWidth + 'px'; 42 | // } 43 | // const width = box.offsetWidth; 44 | // box.classList.add('big'); 45 | 46 | // // When the user clicks on a link/button: 47 | // async function navigateToSettingsPage() { 48 | // // Capture and visually freeze the current state. 49 | // await document.documentTransition.prepare({ 50 | // rootTransition: 'cover-up', 51 | // sharedElements: [element1, element2, element3], 52 | // }); 53 | // // This is a function within the web app: 54 | // updateDOMForSettingsPage(); 55 | // // Start the transition. 56 | // await document.documentTransition.start({ 57 | // sharedElements: [element1, element4, element5], 58 | // }); 59 | // // Transition complete! 60 | // } 61 | // 优化end 62 | 63 | -------------------------------------------------------------------------------- /site/assets/javascripts/lunr/min/lunr.ja.min.js: -------------------------------------------------------------------------------- 1 | !function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r="2"==e.version[0];e.ja=function(){this.pipeline.reset(),this.pipeline.add(e.ja.trimmer,e.ja.stopWordFilter,e.ja.stemmer),r?this.tokenizer=e.ja.tokenizer:(e.tokenizer&&(e.tokenizer=e.ja.tokenizer),this.tokenizerFn&&(this.tokenizerFn=e.ja.tokenizer))};var t=new e.TinySegmenter;e.ja.tokenizer=function(i){var n,o,s,p,a,u,m,l,c,f;if(!arguments.length||null==i||void 0==i)return[];if(Array.isArray(i))return i.map(function(t){return r?new e.Token(t.toLowerCase()):t.toLowerCase()});for(o=i.toString().toLowerCase().replace(/^\s+/,""),n=o.length-1;n>=0;n--)if(/\S/.test(o.charAt(n))){o=o.substring(0,n+1);break}for(a=[],s=o.length,c=0,l=0;c<=s;c++)if(u=o.charAt(c),m=c-l,u.match(/\s/)||c==s){if(m>0)for(p=t.segment(o.slice(l,c)).filter(function(e){return!!e}),f=l,n=0;n 9 | 10 | - :material-email-mark-as-unread: 给我发送[邮箱](mailto:wcowin@qq.com) 11 | 12 | - :material-github: [点击此处](https://github.com/Wcowin/Wcowin.github.io){target="\_blank" rel="noopener"}访问Github仓库 13 | 14 | 15 | 16 | 17 | 可以的话 请我喝一杯咖啡吧☕️ 18 | 19 | ## **:simple-alipay:** **Alipay** 20 | 21 | 22 | 23 | 26 | 27 |

28 | 29 |

30 | 31 | ## **:simple-wechat:** **WeChat Pay** 32 | 33 | 36 | 37 |

38 | 39 |

40 | 41 | 42 | *** 43 | ## **:simple-kofi:ko-fi** 44 | 45 | [请作者喝杯咖啡](https://ko-fi.com/wcowin){ .md-button target=_blank} 46 | 47 | 63 | 64 | ## **赞助列表** 65 | 66 | 赞助人|赞助金额|赞助时间 67 | -|-|- 68 | *急|15¥|25/04/18 69 | 千平|100¥|25/04/16 70 | -------------------------------------------------------------------------------- /docs/stylesheets/link.css: -------------------------------------------------------------------------------- 1 | /* 用于大屏幕和小屏幕的通用样式 */ 2 | .card { 3 | width: 345px; 4 | height: 90px; 5 | font-size: 1rem; 6 | padding: 10px 20px; 7 | border-radius: 25px; 8 | transition: transform 0.3s cubic-bezier(0.165, 0.84, 0.44, 1), 9 | box-shadow 0.3s cubic-bezier(0.165, 0.84, 0.44, 1); /* 使用更高效的过渡 */ 10 | margin-bottom: 1rem; 11 | display: flex; 12 | align-items: center; 13 | color: #333; 14 | contain: layout style; /* 性能优化:限制重绘范围 */ 15 | will-change: transform; /* 提前告知浏览器变换意图 */ 16 | backface-visibility: hidden; /* 减少复合层 */ 17 | transform: translateZ(0); /* 强制GPU加速 */ 18 | } 19 | 20 | .card:nth-child(odd) { 21 | float: left; 22 | } 23 | 24 | .card:nth-child(even) { 25 | float: right; 26 | } 27 | 28 | /* 在大屏幕上保留悬停效果 */ 29 | .card:hover { 30 | transform: translateZ(0) scale(1.05); 31 | box-shadow: 0 4px 12px rgba(52, 152, 219, 0.15); 32 | background-color: rgba(68, 138, 255, 0.1); 33 | } 34 | 35 | .card a { 36 | border: none; 37 | } 38 | 39 | .card .ava { 40 | width: 3rem !important; 41 | height: 3rem !important; 42 | margin: 0 1em 0 0 !important; 43 | border-radius: 50%; 44 | object-fit: cover; /* 确保图像正确填充 */ 45 | } 46 | 47 | .card .card-header { 48 | font-style: italic; 49 | overflow: hidden; 50 | width: auto; 51 | } 52 | 53 | .card .card-header a { 54 | font-style: normal; 55 | color: #608DBD; 56 | font-weight: bold; 57 | text-decoration: none; 58 | } 59 | 60 | /* 使用更高效的选择器 */ 61 | .card-header a:hover { 62 | color: #d480aa; 63 | } 64 | 65 | .card .card-header .info { 66 | font-style: normal; 67 | color: #706f6f; 68 | font-size: 14px; 69 | overflow: hidden; 70 | text-overflow: ellipsis; /* 文本溢出时显示省略号 */ 71 | display: -webkit-box; 72 | -webkit-line-clamp: 2; /* 限制最多显示两行 */ 73 | line-clamp: 2; /* 标准属性以实现兼容性 */ 74 | -webkit-box-orient: vertical; 75 | } 76 | 77 | /* 媒体查询:小屏幕 */ 78 | @media (max-width: 768px) { 79 | .card { 80 | width: 100%; 81 | height: auto; 82 | float: none; 83 | contain: content; /* 小屏幕上使用更宽松的包含策略 */ 84 | } 85 | } 86 | 87 | /* 使用更高效的清除浮动方法 */ 88 | .markdown-content { 89 | display: flow-root; /* 现代清除浮动方法 */ 90 | } 91 | 92 | .markdown-content h2 { 93 | font-size: 1.5rem; 94 | color: #333; 95 | } 96 | -------------------------------------------------------------------------------- /site/stylesheets/link.css: -------------------------------------------------------------------------------- 1 | /* 用于大屏幕和小屏幕的通用样式 */ 2 | .card { 3 | width: 345px; 4 | height: 90px; 5 | font-size: 1rem; 6 | padding: 10px 20px; 7 | border-radius: 25px; 8 | transition: transform 0.3s cubic-bezier(0.165, 0.84, 0.44, 1), 9 | box-shadow 0.3s cubic-bezier(0.165, 0.84, 0.44, 1); /* 使用更高效的过渡 */ 10 | margin-bottom: 1rem; 11 | display: flex; 12 | align-items: center; 13 | color: #333; 14 | contain: layout style; /* 性能优化:限制重绘范围 */ 15 | will-change: transform; /* 提前告知浏览器变换意图 */ 16 | backface-visibility: hidden; /* 减少复合层 */ 17 | transform: translateZ(0); /* 强制GPU加速 */ 18 | } 19 | 20 | .card:nth-child(odd) { 21 | float: left; 22 | } 23 | 24 | .card:nth-child(even) { 25 | float: right; 26 | } 27 | 28 | /* 在大屏幕上保留悬停效果 */ 29 | .card:hover { 30 | transform: translateZ(0) scale(1.05); 31 | box-shadow: 0 4px 12px rgba(52, 152, 219, 0.15); 32 | background-color: rgba(68, 138, 255, 0.1); 33 | } 34 | 35 | .card a { 36 | border: none; 37 | } 38 | 39 | .card .ava { 40 | width: 3rem !important; 41 | height: 3rem !important; 42 | margin: 0 1em 0 0 !important; 43 | border-radius: 50%; 44 | object-fit: cover; /* 确保图像正确填充 */ 45 | } 46 | 47 | .card .card-header { 48 | font-style: italic; 49 | overflow: hidden; 50 | width: auto; 51 | } 52 | 53 | .card .card-header a { 54 | font-style: normal; 55 | color: #608DBD; 56 | font-weight: bold; 57 | text-decoration: none; 58 | } 59 | 60 | /* 使用更高效的选择器 */ 61 | .card-header a:hover { 62 | color: #d480aa; 63 | } 64 | 65 | .card .card-header .info { 66 | font-style: normal; 67 | color: #706f6f; 68 | font-size: 14px; 69 | overflow: hidden; 70 | text-overflow: ellipsis; /* 文本溢出时显示省略号 */ 71 | display: -webkit-box; 72 | -webkit-line-clamp: 2; /* 限制最多显示两行 */ 73 | line-clamp: 2; /* 标准属性以实现兼容性 */ 74 | -webkit-box-orient: vertical; 75 | } 76 | 77 | /* 媒体查询:小屏幕 */ 78 | @media (max-width: 768px) { 79 | .card { 80 | width: 100%; 81 | height: auto; 82 | float: none; 83 | contain: content; /* 小屏幕上使用更宽松的包含策略 */ 84 | } 85 | } 86 | 87 | /* 使用更高效的清除浮动方法 */ 88 | .markdown-content { 89 | display: flow-root; /* 现代清除浮动方法 */ 90 | } 91 | 92 | .markdown-content h2 { 93 | font-size: 1.5rem; 94 | color: #333; 95 | } 96 | -------------------------------------------------------------------------------- /docs/assets/document_dates/user.config.css: -------------------------------------------------------------------------------- 1 | /* 1. Plug-in wrapper styles 2 | including divider line, margin, padding, and the hiding of this plugin, etc 3 | */ 4 | 5 | /* Remove the divider line: */ 6 | /* 7 | .document-dates-plugin-wrapper.document-dates-top, 8 | .document-dates-plugin-wrapper.document-dates-bottom { 9 | border-bottom: none; 10 | } */ 11 | 12 | 13 | 14 | /* 2. Plug-in styles 15 | including icons, fonts, colors, etc 16 | */ 17 | /* 18 | .md-main .document-dates-plugin { 19 | color: rgba(109, 157, 204, 0.7); 20 | font-size: 0.75rem; 21 | } 22 | .md-main .document-dates-plugin .material-icons { 23 | font-size: 0.9rem; 24 | } */ 25 | 26 | /* Customized icons, just change the icon name. 27 | Google Fonts Icons (2500+): https://fonts.google.com/icons 28 | 29 | doc_created: add_circle, add_circle, note_add, more_time 30 | doc_updated: update, check_circle, task, refresh 31 | doc_author: person, account_circle 32 | doc_authors: group, groups */ 33 | 34 | /* 35 | .document-dates-plugin .material-icons[data-icon="doc_created"]::before { 36 | content: "more_time"; 37 | } 38 | .document-dates-plugin .material-icons[data-icon="doc_updated"]::before { 39 | content: "refresh"; 40 | } 41 | .document-dates-plugin .material-icons[data-icon="doc_author"]::before { 42 | content: "person"; 43 | } 44 | .document-dates-plugin .material-icons[data-icon="doc_authors"]::before { 45 | content: "group"; 46 | } */ 47 | 48 | 49 | 50 | /* 3. Author Avatar styles 51 | e.g. shape, hover scale, grayscale mode 52 | */ 53 | /* 54 | .avatar-wrapper { 55 | border-radius: 4px; 56 | filter: grayscale(0%); 57 | } 58 | .avatar-wrapper:hover { 59 | transform: scale(1.08); 60 | } */ 61 | 62 | 63 | 64 | /* 4. Tooltip styles 65 | including theme, arrow, font, color, background color, etc 66 | */ 67 | 68 | /* .tippy-box { 69 | font-size: 12px; 70 | } */ 71 | 72 | /* Demo of the custom theme 'sorrel' and 'sublime', you can configure it in user.config.js (optional) */ 73 | /* 74 | .tippy-box[data-theme~='sorrel'] { 75 | background-color: #F7E6E2; 76 | color: #B1402A; 77 | } 78 | .tippy-box[data-theme~='sorrel'] > .tippy-arrow::before { 79 | color: #F7E6E2; 80 | } 81 | 82 | .tippy-box[data-theme~='sublime'] { 83 | background-color: #474747; 84 | color: #F19D38; 85 | } 86 | .tippy-box[data-theme~='sublime'] > .tippy-arrow::before { 87 | color: #474747; 88 | } */ 89 | -------------------------------------------------------------------------------- /docs/stylesheets/customize.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --admonition-border-left-width: 0.2rem; 3 | --base-border-radius: 1rem; 4 | /* --card-hover-shadow: 0 0 0.2rem #ffffff40; */ 5 | } 6 | 7 | /* 卡片圆角与悬浮阴影 */ 8 | .md-typeset .grid.cards > ul > li, 9 | .md-typeset .md-button, 10 | .md-typeset table:not([class]) { 11 | border-radius: var(--base-border-radius); 12 | } 13 | .md-typeset .grid.cards > ul > li:hover { 14 | box-shadow: var(--card-hover-shadow); 15 | } 16 | 17 | /* 页脚社交图标高度 */ 18 | .md-social__link svg { 19 | max-height: 1rem; 20 | } 21 | 22 | /* 搜索框及下拉结果圆角 */ 23 | .md-search__form { 24 | border-radius: var(--base-border-radius); 25 | } 26 | 27 | [data-md-toggle="search"]:checked ~ .md-header .md-search__form { 28 | border-top-right-radius: var(--base-border-radius); 29 | border-top-left-radius: var(--base-border-radius); 30 | } 31 | 32 | [dir="ltr"] .md-search__output { 33 | border-bottom-right-radius: var(--base-border-radius); 34 | border-bottom-left-radius: var(--base-border-radius); 35 | } 36 | 37 | /* 可选:如需恢复代码块、警告框等样式,取消注释即可 */ 38 | /* 39 | .highlight span.filename { 40 | border-bottom: none; 41 | border-radius: var(--base-border-radius); 42 | display: inline; 43 | font-family: var(--md-code-font-family); 44 | border-bottom-left-radius: 0; 45 | border-bottom-right-radius: 0; 46 | margin-bottom: 5px; 47 | text-align: center; 48 | } 49 | .highlight span.filename + pre > code, 50 | .md-typeset pre > code { 51 | border-radius: var(--base-border-radius); 52 | border-top-left-radius: 0; 53 | } 54 | .md-typeset .admonition { 55 | border-width: 0px; 56 | border-left-width: var(--admonition-border-left-width); 57 | } 58 | [dir="ltr"] .md-typeset blockquote { 59 | border-radius: 0.2rem; 60 | border-left-width: var(--admonition-border-left-width); 61 | } 62 | */ 63 | 64 | /* 可选:博客相关样式,按需启用 */ 65 | 66 | /* .md-post--excerpt { 67 | background-color: rgba(68,138,255,.1); 68 | box-shadow: 0 0 0 1rem rgba(68,138,255,.1); 69 | border-radius: var(--base-border-radius); 70 | } 71 | .md-post--excerpt .md-post__header { 72 | justify-content: left; 73 | } 74 | .md-post--excerpt .md-post__content > h2, 75 | .md-post__action { 76 | text-align: left; 77 | } */ 78 | 79 | 80 | /* 让所有admonition(包括!!! tip)圆角化且更自然 */ 81 | .md-typeset .admonition, 82 | .md-typeset details { 83 | border-radius: 1.5em; 84 | box-shadow: 0 2px 12px 0 rgba(60,60,60,0.07); 85 | transition: border-radius 0.4s cubic-bezier(.4,2,.6,1), box-shadow 0.3s; 86 | overflow: hidden; 87 | } -------------------------------------------------------------------------------- /site/stylesheets/customize.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --admonition-border-left-width: 0.2rem; 3 | --base-border-radius: 1rem; 4 | /* --card-hover-shadow: 0 0 0.2rem #ffffff40; */ 5 | } 6 | 7 | /* 卡片圆角与悬浮阴影 */ 8 | .md-typeset .grid.cards > ul > li, 9 | .md-typeset .md-button, 10 | .md-typeset table:not([class]) { 11 | border-radius: var(--base-border-radius); 12 | } 13 | .md-typeset .grid.cards > ul > li:hover { 14 | box-shadow: var(--card-hover-shadow); 15 | } 16 | 17 | /* 页脚社交图标高度 */ 18 | .md-social__link svg { 19 | max-height: 1rem; 20 | } 21 | 22 | /* 搜索框及下拉结果圆角 */ 23 | .md-search__form { 24 | border-radius: var(--base-border-radius); 25 | } 26 | 27 | [data-md-toggle="search"]:checked ~ .md-header .md-search__form { 28 | border-top-right-radius: var(--base-border-radius); 29 | border-top-left-radius: var(--base-border-radius); 30 | } 31 | 32 | [dir="ltr"] .md-search__output { 33 | border-bottom-right-radius: var(--base-border-radius); 34 | border-bottom-left-radius: var(--base-border-radius); 35 | } 36 | 37 | /* 可选:如需恢复代码块、警告框等样式,取消注释即可 */ 38 | /* 39 | .highlight span.filename { 40 | border-bottom: none; 41 | border-radius: var(--base-border-radius); 42 | display: inline; 43 | font-family: var(--md-code-font-family); 44 | border-bottom-left-radius: 0; 45 | border-bottom-right-radius: 0; 46 | margin-bottom: 5px; 47 | text-align: center; 48 | } 49 | .highlight span.filename + pre > code, 50 | .md-typeset pre > code { 51 | border-radius: var(--base-border-radius); 52 | border-top-left-radius: 0; 53 | } 54 | .md-typeset .admonition { 55 | border-width: 0px; 56 | border-left-width: var(--admonition-border-left-width); 57 | } 58 | [dir="ltr"] .md-typeset blockquote { 59 | border-radius: 0.2rem; 60 | border-left-width: var(--admonition-border-left-width); 61 | } 62 | */ 63 | 64 | /* 可选:博客相关样式,按需启用 */ 65 | 66 | /* .md-post--excerpt { 67 | background-color: rgba(68,138,255,.1); 68 | box-shadow: 0 0 0 1rem rgba(68,138,255,.1); 69 | border-radius: var(--base-border-radius); 70 | } 71 | .md-post--excerpt .md-post__header { 72 | justify-content: left; 73 | } 74 | .md-post--excerpt .md-post__content > h2, 75 | .md-post__action { 76 | text-align: left; 77 | } */ 78 | 79 | 80 | /* 让所有admonition(包括!!! tip)圆角化且更自然 */ 81 | .md-typeset .admonition, 82 | .md-typeset details { 83 | border-radius: 1.5em; 84 | box-shadow: 0 2px 12px 0 rgba(60,60,60,0.07); 85 | transition: border-radius 0.4s cubic-bezier(.4,2,.6,1), box-shadow 0.3s; 86 | overflow: hidden; 87 | } -------------------------------------------------------------------------------- /docs/blog/websitebeauty/time.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 为MKdocs添加文章修订时间戳 3 | tags: 4 | - Mkdocs 5 | comments: false #评论,默认不开启 6 | --- 7 | 8 | ![img](https://cn.mcecy.com/image/20240106/ee0ece547112ac1b67fb61ac7f9c1a90.png) 9 | 10 | 参考方法:[git 修订日期本地化](https://squidfunk.github.io/mkdocs-material/setup/adding-a-git-repository/#revisioning) 11 | 12 | 利用[git -revision-date-localized插件](https://github.com/timvink/mkdocs-git-revision-date-localized-plugin)添加了对添加上次更新日期和在每个页面底部创建文档的支持 13 | 14 | ## 安装 15 | 16 | ```bash 17 | pip install mkdocs-git-revision-date-localized-plugin 18 | ``` 19 | 20 | .github/workflows/下的ci.yml增加高亮的几行: 21 | 22 | ```yaml hl_lines="14-15 26-28" 23 | name: ci 24 | on: 25 | push: 26 | branches: 27 | - master 28 | - main 29 | permissions: 30 | contents: write 31 | jobs: 32 | deploy: 33 | runs-on: ubuntu-latest 34 | steps: 35 | - uses: actions/checkout@v4 36 | with: 37 | fetch-depth: 0 38 | - uses: actions/setup-python@v4 39 | with: 40 | python-version: 3.x 41 | - run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV 42 | - uses: actions/cache@v3 43 | with: 44 | key: mkdocs-material-${ env.cache_id } 45 | path: .cache 46 | restore-keys: | 47 | mkdocs-material- 48 | - run: pip install mkdocs-git-revision-date-localized-plugin 49 | - run: pip install mkdocs-git-authors-plugin 50 | # - run: pip install mkdocs-rss-plugin 51 | - run: pip install mkdocs-material 52 | - run: mkdocs gh-deploy --force 53 | ``` 54 | 55 | ## 配置 56 | 57 | 然后将以下行添加到mkdocs.yml: 58 | ```yaml hl_lines="2 3" 59 | plugins: 60 | - git-revision-date-localized: 61 | enable_creation_date: true 62 | ``` 63 | 64 | 详细的配置请看:[mkdocs-git-revision-date-localized-plugin](https://timvink.github.io/mkdocs-git-revision-date-localized-plugin/index.html) 65 | 66 | 可选的配置很多: 67 | ```yaml 68 | plugins: 69 | - git-revision-date-localized: 70 | type: timeago #时间类型 71 | custom_format: "%d. %B %Y" # 时间格式 72 | timezone: Europe/Amsterdam #时区 73 | locale: en #首选语言 74 | fallback_to_build_date: false #许回退到git 不可用时mkdocs build执行的时间 75 | enable_creation_date: true #是否启用创建时间 76 | exclude: #排除的页面 77 | - index.md 78 | enabled: true #是否启用 79 | strict: true 80 | ``` 81 | 82 | ## 温馨提示 83 | 84 | 对于大型单一的文档库,执行`mkdocs serve`后的渲染速度明显变慢,这是因为每次渲染都会检查所有文件的git历史记录。如果您不需要这个功能,可以通过将`enabled`设置为`false`来禁用它。 85 | 86 | 比较推荐这种方法: 87 | ```yaml hl_lines="2" 88 | - git-committers: 89 | enabled: !ENV [CI, false] 90 | ``` 91 | 修改enabled的策略,这样就不会每次本地渲染都检查所有文件的git历史记录,渲染速度会明显加快,发布网站时候会正常显示。 -------------------------------------------------------------------------------- /site/assets/javascripts/lunr/min/lunr.sa.min.js: -------------------------------------------------------------------------------- 1 | !function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.sa=function(){this.pipeline.reset(),this.pipeline.add(e.sa.trimmer,e.sa.stopWordFilter,e.sa.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.sa.stemmer))},e.sa.wordCharacters="ऀ-ःऄ-एऐ-टठ-यर-िी-ॏॐ-य़ॠ-९॰-ॿ꣠-꣱ꣲ-ꣷ꣸-ꣻ꣼-ꣽꣾ-ꣿᆰ0-ᆰ9",e.sa.trimmer=e.trimmerSupport.generateTrimmer(e.sa.wordCharacters),e.Pipeline.registerFunction(e.sa.trimmer,"trimmer-sa"),e.sa.stopWordFilter=e.generateStopWordFilter('तथा अयम्‌ एकम्‌ इत्यस्मिन्‌ तथा तत्‌ वा अयम्‌ इत्यस्य ते आहूत उपरि तेषाम्‌ किन्तु तेषाम्‌ तदा इत्यनेन अधिकः इत्यस्य तत्‌ केचन बहवः द्वि तथा महत्वपूर्णः अयम्‌ अस्य विषये अयं अस्ति तत्‌ प्रथमः विषये इत्युपरि इत्युपरि इतर अधिकतमः अधिकः अपि सामान्यतया ठ इतरेतर नूतनम्‌ द न्यूनम्‌ कश्चित्‌ वा विशालः द सः अस्ति तदनुसारम् तत्र अस्ति केवलम्‌ अपि अत्र सर्वे विविधाः तत्‌ बहवः यतः इदानीम्‌ द दक्षिण इत्यस्मै तस्य उपरि नथ अतीव कार्यम्‌ सर्वे एकैकम्‌ इत्यादि। एते सन्ति उत इत्थम्‌ मध्ये एतदर्थं . स कस्य प्रथमः श्री. करोति अस्मिन् प्रकारः निर्मिता कालः तत्र कर्तुं समान अधुना ते सन्ति स एकः अस्ति सः अर्थात् तेषां कृते . स्थितम् विशेषः अग्रिम तेषाम्‌ समान स्रोतः ख म समान इदानीमपि अधिकतया करोतु ते समान इत्यस्य वीथी सह यस्मिन् कृतवान्‌ धृतः तदा पुनः पूर्वं सः आगतः किम्‌ कुल इतर पुरा मात्रा स विषये उ अतएव अपि नगरस्य उपरि यतः प्रतिशतं कतरः कालः साधनानि भूत तथापि जात सम्बन्धि अन्यत्‌ ग अतः अस्माकं स्वकीयाः अस्माकं इदानीं अन्तः इत्यादयः भवन्तः इत्यादयः एते एताः तस्य अस्य इदम् एते तेषां तेषां तेषां तान् तेषां तेषां तेषां समानः सः एकः च तादृशाः बहवः अन्ये च वदन्ति यत् कियत् कस्मै कस्मै यस्मै यस्मै यस्मै यस्मै न अतिनीचः किन्तु प्रथमं सम्पूर्णतया ततः चिरकालानन्तरं पुस्तकं सम्पूर्णतया अन्तः किन्तु अत्र वा इह इव श्रद्धाय अवशिष्यते परन्तु अन्ये वर्गाः सन्ति ते सन्ति शक्नुवन्ति सर्वे मिलित्वा सर्वे एकत्र"'.split(" ")),e.sa.stemmer=function(){return function(e){return"function"==typeof e.update?e.update(function(e){return e}):e}}();var r=e.wordcut;r.init(),e.sa.tokenizer=function(t){if(!arguments.length||null==t||void 0==t)return[];if(Array.isArray(t))return t.map(function(r){return isLunr2?new e.Token(r.toLowerCase()):r.toLowerCase()});var i=t.toString().toLowerCase().replace(/^\s+/,"");return r.cut(i).split("|")},e.Pipeline.registerFunction(e.sa.stemmer,"stemmer-sa"),e.Pipeline.registerFunction(e.sa.stopWordFilter,"stopWordFilter-sa")}}); -------------------------------------------------------------------------------- /docs/blog/posts/update2025.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 2025网站更新记录 3 | authors: [Wcowin] 4 | date: 2025-01-01 5 | categories: 6 | - 网站更新记录 7 | readtime: 2 8 | hide_reading_time: true 9 | --- 10 | ##

2025-12-16

11 | * 优化网站流畅度(玄学) 12 | * mkdocs for material已经停更。[materialX](https://github.com/jaywhj/mkdocs-materialx)作为延续被广泛使用,本站迁移至materialX主题 13 | 14 | ##

2025-07-08

15 | * 优化网站流畅度(玄学) 16 | * AI摘要全局更换为智谱清言GLM 17 | 18 | ##

2025-07-08

19 | * 优化网站流畅度(玄学) 20 | * 修复[友链教程](../Mkdocs/linktech.md)的一些显示问题(感谢[Arron](https://github.com/jaywhj)) 21 | * 重新设计了页脚样式 22 | 23 | ##

2025-06-15

24 | * 优化网站流畅度(玄学) 25 | * 优化CDN配置 26 | * 引入全局圆角化设计,参考[Material Design](https://material.io/design)设计规范 27 | 28 | ##

2025-04-30

29 | * 优化网站流畅度(玄学) 30 | * 修复[关于](../../about/geren.md)页面的显示问题 31 | 32 | ##

2025-04-19

33 | * 优化网站流畅度(玄学) 34 | * 修改教程中的各种小错误 35 | 36 | ##

2025-04-13

37 | * 优化网站流畅度(玄学) 38 | * 修复在 Markdown 文件中,HTML 和 Markdown 混用可能导致解析器无法正确渲染。 39 | 40 | ##

2025-04-10

41 | * 优化网站流畅度(玄学) 42 | * 优化[友链](../../link.md)统计方式,更加准确计数 43 | * 修复评论区重定位的bug,防止他人网站测试评论区导致评论区覆盖到我的网站 44 | 45 | ##

2025-03-30

46 | * 优化网站流畅度(玄学) 47 | * 我回来了 48 | * 开启博客半月更模式 49 | * 一战考研失利 50 | 51 | ##

2025-03-14

52 | * 优化网站流畅度(玄学) 53 | * π日快乐! 54 | 55 | ##

2025-02-24

56 | * 优化网站流畅度(玄学) 57 | * 一切都是最好的安排 58 | 59 | ##

2025-02-19

60 | * 优化网站流畅度(玄学) 61 | * 更新了MKdocs教程,适应官方最新版本 62 | 63 | ##

2025-02-16

64 | * [首页](../../index.md)焕然一新 65 | * 优化网站流畅度(玄学) 66 | 67 | ##

2025-02-04

68 | * 优化网站流畅度(玄学) 69 | * 更新了部分教程,适应官方最新版本 70 | 71 | ##

2025-01-11

72 | * 优化网站流畅度(玄学) 73 | * 优化留言板,支持按钮切换,布局更简洁 74 | * 清理失效图片链接,修复部分图片无法显示问题 75 | 76 | 77 | ##

2025-01-09

78 | * 优化网站流畅度(玄学) 79 | * 引入[glightbox插件(已取消)](https://github.com/blueswen/mkdocs-glightbox){target=“_blank”},图片查看更方便 80 | 81 | ##

2025-01-07

82 | * 优化网站流畅度(玄学) 83 | * 重写部分代码 84 | 85 | ##

2025-01-05

86 | * 优化网站流畅度(玄学) 87 | * 大幅提升性能,加载速度更快 88 | ![image](https://s1.imagehub.cc/images/2025/01/05/7164642e16ff90239bee5c46709ad50f.png) -------------------------------------------------------------------------------- /docs/develop/designbeauty/db1.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 唐·诺曼—情感设计的三个层次 3 | tags: 4 | - 设计美学 5 | --- 6 | 原文:[Norman's Three Levels of Design](https://www.interaction-design.org/literature/article/norman-s-three-levels-of-design) 7 | ![](https://pic2.zhimg.com/80/v2-775977de1d9ccd4ff61344ccc523b5b1_1440w.jpg) 8 | # 唐·诺曼—情感设计的三个层次 9 | 10 | 在人类的内心世界,有许多部分负责我们所说的情感,总的来说,这些区域共同构成了情感系统。唐·诺曼(Don Norman)提出,情感系统由三个不同但相互联系的层次组成,每个层次都以一种特殊的方式影响着我们对世界的体验。这三个层次是本能层,行为层和反思层。本能层与人类情绪中固有的、自发的以及符合动物性的特性相关,这些基本上是不受人类本身控制的。行为层指的是人类行为中那些可控的方面,在这种情况下,我们下意识的分析所处情况并且制定以目标为导向的策略,从而能够在最短时间内或是以最少的行动达到效果。正如唐·诺曼所言,反思层是指“有意识的思考,对新概念进行学习,和对世界进行归纳。”这三个层次作为情感系统的不同维度独立存在,又相互关联,相互影响,从而创造了我们对世界的整体情感体验。 11 | 12 | 在唐·诺曼的《情感化设计:为什么我们喜欢(或讨厌)日常事物》(一本认知科学,设计学,可用性工程领域杰出的学术作品)一书中,他对情感化系统的这三个方面或层次做了区分(它们三者综合影响着人类的情感或心理),即:本能层,行为层及反思层。这三者在情感系统中紧密交织在一起,并以各自特定的方式影响设计。以下是三者对应的相应三种设计层次。 13 | 14 | ## 本能层设计 15 | 16 | 本能层设计-“关注外观本身”。这一层次的设计关注的是事物中可以被直接感知的那部分特征以及它们是如何让用户或观察者产生感受的。例如,祖父的怀表和一个小的壁挂式时钟一样都包含了最基本的计时功功能,除了外观,他们在内在特征上没有任何不同,但是本能层(深层次的,无意识的,主观的和自发的感受)特征使它在拥有者眼中产生了区别。 17 | 18 | 如今产品开发过程中的很大一部分时间被用在本能层设计中,因为属于同一族群的产品往往具有相同或相似的功能,(比如说手电,水壶,面包机,台灯),所以更具特征的外观是区分产品和竞争者的关键因素。这也就是我们所说的”品牌化设计”——不是通过产品提供给用户区别于其他产品的实际利益,而是通过契合用户的态度、信仰、情感以及用户想要的感受,来引出用户对产品的情感上的回应。这可以是通过使用儿童、动物或是卡通形象的图片来传达年轻的感觉,也可以是通过对色彩(比如说,红色对应着“性感“,黑色对应着”恐怖”),形状(比如硬边缘形状)的运用,甚至是运用风格(比如装饰艺术),让人联想起某些特定的时代。本能设计旨在深入了解用户/消费者/观察者的头脑,并且通过牵动用户情绪来提升用户体验(比如说改善整体视觉形象)或是服务商业利益(比如说为了公司或产品所有者的利益,从情感上劫持用户使他们进行购买)。 19 | 20 | ## 行为层设计 21 | 22 | 行为层设计-“与使用的愉悦感和效率有关。”行为层设计可能更更常被称为可用性,而两者指的都是产品中实用性和功能性方面,或是是我们在所处环境中所能使用的任何产品的可用性。行为层设计(从现在起我们用这个词汇来代替可用性)着眼于,诸如,用户如何进行活动;如何快速和准确地实现他们的目标和目的;用户在执行某些任务时犯了多少错误;以及产品如何很好地适应熟练和缺乏经验的用户等问题。 23 | 24 | 行为层设计可能是最容易测试的,因为一旦对象的物理(比如说手柄、按钮、把手、控制杆、开关以及键)或可用部分以某种方式被改变或操作,就可以在表现层对其进行衡量。比如说,负责独立操作的两个按钮被放置在不同的距离从而测量用户连续完成这两个操作的时间。或者,通过相同的操作来测试错误率。涉及行为层体验的例子还包括,当我们拿出手机时能够迅速找到联系人并拨打号码的愉悦感;在电脑键盘上能够轻松打字,而在小的触屏设备,比如说iPod Touch上打字就比较困难;以及我们在使用一个设计良好的电脑游戏手柄(就像我的N64控制板)时的享受。行为层面本质上是指我们因完成或未能完成目标而产生的情绪。当产品/物品能够帮助我们用一点点有意识的努力,并且整个过程中遇到最少的困难就能完成目标,这时我们的情绪很可能是积极的。相反,当产品限制我们,迫使我们根据产品的限制来解释或调整我们的目标,或者只是让我们在使用产品时密切关注这些目标时,我们更倾向于产生一些负面情绪。 25 | 26 | 27 | ## 反思层设计 28 | 29 | 反思层设计“考虑产品的合理化和智能化。关于该产品我能讲述一个故事吗?它符合我的自我形象,我的自尊心需要吗?”这就是情感设计的最高层次;代表我们有意识有思想地进行设计;权衡其优缺点;利用我们更细微和理性的一面进行判断,并提取信息以确定它对我们个人的意义。反思思维使我们能够合理化环境信息以影响行为层。比如说智能手表。”基于这一点,韩国大学的研究员Jaewon Choi和Songcheol Kim考察了用户使用智能手表的目的主要是基于两个主要因素,一种是用户将智能手表视为技术创新另一种是将其作为奢侈时尚产品。从用户视角来看,将智能手表视为一项技术创新,这与他们对设备的实用性和易用性(行为层)的看法有关。另一方面,用户将智能手表视为一种奢侈时尚产品,这既和他们将如何享受智能手表的认知,也和智能手表将为他们提供怎样的自我表现力有关(即表达自己和增强形象的能力)。享受和自我表达都受到本能层的影响(“手表看起来漂亮吗?”)但也很受到反思层的影响(“当我的朋友看到我戴着这只表时,他们会怎么想?”)。 30 | 31 | 反思层调节了行为层带来的影响——用户很可能会忍受智能手表易用性方面的困难和缺点,因为他们相信他们能从智能手表中获得其他非功能性的利益。苹果智能手表的第一个版本充满了功能问题和可用性问题,但这并没有阻止苹果在销售智能手表的第一年创造出全球手表产业的第二大收入! 32 | 33 | ## The Take Away 34 | 35 | 在这里,我们介绍了唐·诺曼的三个设计层次:设计的本能层、行为层和反思层。设计的本能层指的是设计的第一印象,无论是从用户如何看待产品,还是从用户对产品的感受。行为层是指产品在使用过程中的体验。当我们想到用户体验时,我们常常会想到这个层次。反思层是指用户在使用前、使用中和使用后对产品的思考。这三个层次都结合在一起形成了整个产品体验。 36 | 37 | ## 参考 38 | 39 | Choi, J., & Kim, S. (2016). “Is the smartwatch an IT product or a fashion product? A study on factors affecting the intention to use smartwatches”. Computers in Human Behavior, 63, 777-786. 40 | 41 | 作者:Andreas Komninos 42 | 43 | 译者:孔 44 | 45 | 审稿:Hoodie -------------------------------------------------------------------------------- /docs/javascripts/shubiao.js: -------------------------------------------------------------------------------- 1 | var CURSOR; 2 | 3 | Math.lerp = (a, b, n) => (1 - n) * a + n * b; 4 | 5 | const getStyle = (el, attr) => { 6 | try { 7 | return window.getComputedStyle 8 | ? window.getComputedStyle(el)[attr] 9 | : el.currentStyle[attr]; 10 | } catch (e) {} 11 | return ""; 12 | }; 13 | 14 | class Cursor { 15 | constructor() { 16 | this.pos = {curr: null, prev: null}; 17 | this.pt = []; 18 | this.create(); 19 | this.init(); 20 | this.render(); 21 | } 22 | 23 | move(left, top) { 24 | this.cursor.style["left"] = `${left}px`; 25 | this.cursor.style["top"] = `${top}px`; 26 | } 27 | 28 | create() { 29 | if (!this.cursor) { 30 | this.cursor = document.createElement("div"); 31 | this.cursor.id = "cursor"; 32 | this.cursor.classList.add("hidden"); 33 | document.body.append(this.cursor); 34 | } 35 | 36 | var el = document.getElementsByTagName('*'); 37 | for (let i = 0; i < el.length; i++) 38 | if (getStyle(el[i], "cursor") == "pointer") 39 | this.pt.push(el[i].outerHTML); 40 | 41 | document.body.appendChild((this.scr = document.createElement("style"))); 42 | // 这里改变鼠标指针的颜色 由svg生成 43 | this.scr.innerHTML = `* {cursor: url("data:image/svg+xml,") 4 4, auto}`; 44 | } 45 | 46 | refresh() { 47 | this.scr.remove(); 48 | this.cursor.classList.remove("hover"); 49 | this.cursor.classList.remove("active"); 50 | this.pos = {curr: null, prev: null}; 51 | this.pt = []; 52 | 53 | this.create(); 54 | this.init(); 55 | this.render(); 56 | } 57 | 58 | init() { 59 | document.onmouseover = e => this.pt.includes(e.target.outerHTML) && this.cursor.classList.add("hover"); 60 | document.onmouseout = e => this.pt.includes(e.target.outerHTML) && this.cursor.classList.remove("hover"); 61 | document.onmousemove = e => {(this.pos.curr == null) && this.move(e.clientX - 8, e.clientY - 8); this.pos.curr = {x: e.clientX - 8, y: e.clientY - 8}; this.cursor.classList.remove("hidden");}; 62 | document.onmouseenter = e => this.cursor.classList.remove("hidden"); 63 | document.onmouseleave = e => this.cursor.classList.add("hidden"); 64 | document.onmousedown = e => this.cursor.classList.add("active"); 65 | document.onmouseup = e => this.cursor.classList.remove("active"); 66 | } 67 | 68 | render() { 69 | if (this.pos.prev) { 70 | this.pos.prev.x = Math.lerp(this.pos.prev.x, this.pos.curr.x, 0.15); 71 | this.pos.prev.y = Math.lerp(this.pos.prev.y, this.pos.curr.y, 0.15); 72 | this.move(this.pos.prev.x, this.pos.prev.y); 73 | } else { 74 | this.pos.prev = this.pos.curr; 75 | } 76 | requestAnimationFrame(() => this.render()); 77 | } 78 | } 79 | 80 | (() => { 81 | CURSOR = new Cursor(); 82 | // 需要重新获取列表时,使用 CURSOR.refresh() 83 | })(); -------------------------------------------------------------------------------- /site/javascripts/shubiao.js: -------------------------------------------------------------------------------- 1 | var CURSOR; 2 | 3 | Math.lerp = (a, b, n) => (1 - n) * a + n * b; 4 | 5 | const getStyle = (el, attr) => { 6 | try { 7 | return window.getComputedStyle 8 | ? window.getComputedStyle(el)[attr] 9 | : el.currentStyle[attr]; 10 | } catch (e) {} 11 | return ""; 12 | }; 13 | 14 | class Cursor { 15 | constructor() { 16 | this.pos = {curr: null, prev: null}; 17 | this.pt = []; 18 | this.create(); 19 | this.init(); 20 | this.render(); 21 | } 22 | 23 | move(left, top) { 24 | this.cursor.style["left"] = `${left}px`; 25 | this.cursor.style["top"] = `${top}px`; 26 | } 27 | 28 | create() { 29 | if (!this.cursor) { 30 | this.cursor = document.createElement("div"); 31 | this.cursor.id = "cursor"; 32 | this.cursor.classList.add("hidden"); 33 | document.body.append(this.cursor); 34 | } 35 | 36 | var el = document.getElementsByTagName('*'); 37 | for (let i = 0; i < el.length; i++) 38 | if (getStyle(el[i], "cursor") == "pointer") 39 | this.pt.push(el[i].outerHTML); 40 | 41 | document.body.appendChild((this.scr = document.createElement("style"))); 42 | // 这里改变鼠标指针的颜色 由svg生成 43 | this.scr.innerHTML = `* {cursor: url("data:image/svg+xml,") 4 4, auto}`; 44 | } 45 | 46 | refresh() { 47 | this.scr.remove(); 48 | this.cursor.classList.remove("hover"); 49 | this.cursor.classList.remove("active"); 50 | this.pos = {curr: null, prev: null}; 51 | this.pt = []; 52 | 53 | this.create(); 54 | this.init(); 55 | this.render(); 56 | } 57 | 58 | init() { 59 | document.onmouseover = e => this.pt.includes(e.target.outerHTML) && this.cursor.classList.add("hover"); 60 | document.onmouseout = e => this.pt.includes(e.target.outerHTML) && this.cursor.classList.remove("hover"); 61 | document.onmousemove = e => {(this.pos.curr == null) && this.move(e.clientX - 8, e.clientY - 8); this.pos.curr = {x: e.clientX - 8, y: e.clientY - 8}; this.cursor.classList.remove("hidden");}; 62 | document.onmouseenter = e => this.cursor.classList.remove("hidden"); 63 | document.onmouseleave = e => this.cursor.classList.add("hidden"); 64 | document.onmousedown = e => this.cursor.classList.add("active"); 65 | document.onmouseup = e => this.cursor.classList.remove("active"); 66 | } 67 | 68 | render() { 69 | if (this.pos.prev) { 70 | this.pos.prev.x = Math.lerp(this.pos.prev.x, this.pos.curr.x, 0.15); 71 | this.pos.prev.y = Math.lerp(this.pos.prev.y, this.pos.curr.y, 0.15); 72 | this.move(this.pos.prev.x, this.pos.prev.y); 73 | } else { 74 | this.pos.prev = this.pos.curr; 75 | } 76 | requestAnimationFrame(() => this.render()); 77 | } 78 | } 79 | 80 | (() => { 81 | CURSOR = new Cursor(); 82 | // 需要重新获取列表时,使用 CURSOR.refresh() 83 | })(); -------------------------------------------------------------------------------- /docs/overrides/partials/comments.html: -------------------------------------------------------------------------------- 1 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | {% if page.meta.comments %} 29 |

{{ lang.t("meta.comments") }}

30 | 31 | 46 | 47 | 81 | {% endif %} 82 | -------------------------------------------------------------------------------- /site/overrides/partials/comments.html: -------------------------------------------------------------------------------- 1 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | {% if page.meta.comments %} 29 |

{{ lang.t("meta.comments") }}

30 | 31 | 46 | 47 | 81 | {% endif %} 82 | -------------------------------------------------------------------------------- /docs/overrides/partials/feedback.html: -------------------------------------------------------------------------------- 1 | 22 | 23 | 24 | {% if config.extra.analytics %} 25 | {% set feedback = config.extra.analytics.feedback %} 26 | {% endif %} 27 | 28 | 29 | {% if page.meta and page.meta.hide %} 30 | {% if "feedback" in page.meta.hide %} 31 | {% set feedback = None %} 32 | {% endif %} 33 | {% endif %} 34 | 35 | 36 | {% if feedback %} 37 | 79 | {% endif %} 80 | -------------------------------------------------------------------------------- /site/overrides/partials/feedback.html: -------------------------------------------------------------------------------- 1 | 22 | 23 | 24 | {% if config.extra.analytics %} 25 | {% set feedback = config.extra.analytics.feedback %} 26 | {% endif %} 27 | 28 | 29 | {% if page.meta and page.meta.hide %} 30 | {% if "feedback" in page.meta.hide %} 31 | {% set feedback = None %} 32 | {% endif %} 33 | {% endif %} 34 | 35 | 36 | {% if feedback %} 37 | 79 | {% endif %} 80 | -------------------------------------------------------------------------------- /docs/blog/Mkdocs/mkfirst.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Mkdocs教程前言 3 | tags: 4 | - Mkdocs 5 | --- 6 | 7 | ## 文档教程 8 | 9 |
10 | 11 | - :material-notebook-edit-outline:{ .lg .middle } __文档资料__ 12 | 13 | --- 14 | - 入门 MKdocs 请看[Mkdocs 官方教程](https://www.mkdocs.org/user-guide/writing-your-docs/){target=“_blank”} 15 | - [Material for MkDocs(只看这个也可以)](https://squidfunk.github.io/mkdocs-material/){target=“_blank”}教程 16 | - [令人惊叹的MkDocs项目和插件列表](https://github.com/mkdocs/catalog#-theming){target=“_blank”} 17 | --- 18 | 我写的中文教程(同步在其他平台): 19 | 20 | - [x] [Mkdocs中文教程(语雀)](https://www.yuque.com/wcowin/mkdocs-wcowin?# 《Mkdocs-Wcowin中文教程》){target=“_blank”}(推荐,展示效果好) 21 | - [x] [Mkdocs中文教程](https://blog.csdn.net/m0_63203517/category_12472184.html?spm=1001.2014.3001.5482){target=“_blank”} (CSDN | 观感更纯净) 22 | - [x] [MKdocs博客中文系列教程](https://www.zhihu.com/column/c_1754218140098387968){target=“_blank”}(知乎专栏) 23 | 24 |
25 | 26 | 27 | 28 | 37 | 38 | ## 快速开始 39 | 40 |
41 | 42 | - :material-notebook-edit-outline:{ .lg .middle } __三部曲__ 43 | 44 | --- 45 | - [部署静态网页至GitHub pages](mkdocs1.md) 46 | - [Mkdocs部署配置说明(mkdocs.yml)](mkdocs2.md) 47 | - [网站添加Mkdocs博客](mkdocsblog.md) 48 | 49 |
50 | 51 | ## 视频教程 52 | 53 | 54 | 已经发布 55 | 56 | 57 |
58 | 59 | - :material-notebook-edit-outline:{ .lg .middle } __视频资料__ 60 | 61 | --- 62 | 63 | - [Mkdocs中文教程视频](https://space.bilibili.com/1407028951/lists/4566631?type=series){target=“_blank”} 64 | 65 |
66 | 67 | 68 | 69 | 82 | --- 83 | 84 | ## 一点请求 85 | 86 | 创作不易。如果您参考了本教程/借鉴了网页设计,如果可以的话,烦请在您的网站注明教程来源!感谢! 87 | 88 | 89 | 示例: 90 |
91 | 92 | - :material-notebook-edit-outline:{ .lg .middle } __参考资料__ 93 | 94 | --- 95 | 96 | - 在构建网站的过程中参考了[Wcowin同学的Mkdocs教程](https://wcowin.work/Mkdocs-Wcowin/) 97 | 98 |
99 | 100 | ``` 101 |
102 | 103 | - :material-notebook-edit-outline:{ .lg .middle } __参考资料__ 104 | 105 | --- 106 | 107 | - 在构建本网站的过程中参考了[Wcowin同学的Mkdocs教程](https://wcowin.work/Mkdocs-Wcowin/) 108 | 109 |
110 | ``` 111 | 112 | ## 加入友链 113 | 114 | [友链申请 :palms_up_together_tone1:](https://wcowin.work/link/#_3){.md-button target=“_blank”} -------------------------------------------------------------------------------- /docs/blog/posts/update2023.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 2023网站更新记录 3 | authors: [Wcowin] 4 | date: 2023-12-21 5 | categories: 6 | - 网站更新记录 7 | readtime: 2 8 | hide_reading_time: true 9 | --- 10 | 11 | ##

2023-12-21

12 | * 优化网站流畅度(玄学) 13 | * 脱单了;手执烟火以谋生,心怀诗意以谋爱 14 | 15 |

16 |
17 |
18 | 19 | 20 | 21 |

22 | 我们已经在一起 23 | 24 |

25 |
26 | 45 |
46 | 47 | 48 |
49 |
50 |
51 | 52 | ##

2023-12-14

53 | * 优化个别网页标签的显示问题 54 | * 优化网站图片加载流畅度(玄学) 55 | * 看了更多的猫咪 56 | 57 | ##

2023-12-09

58 | * 首次引入人工智能问答机器人:,缺点是每月25条消息限制,优点是可以智能回复本站所有信息,包括但不限于:个人信息,技术分享,博客,留言板,友链等等 59 | * 优化网站流畅度 60 | * 撸了更多的猫咪 61 | 62 | ##

2023-11-22

63 | * 更新了**王冰冰**的简历和美照;我的心是冰冰的 64 | * 修复翻译问题 65 | * 优化移动端效果 66 | * 提升网站流畅度(玄学) 67 | 68 | ##

2023-11-11

69 | * 新增多语言支持,特别新增中国台湾语言支持 70 | * 顺祝双11快乐 71 | * 新增国内镜像网址:[https://wcowin.gitee.io/](https://wcowin.gitee.io/wcowin.github.io/){target="_blank"} 72 | 73 | ##

2023-11-08

74 | * 紧急修复图片不显示的重大Bug 75 | 76 | ##

2023-10-14

77 | 78 | * 正式建立[Mkdocs-Wcowin主题](https://github.com/Wcowin/Mkdocs-Wcowin){target="_blank"} 79 | * 优化网页渲染速度 80 | ##

2023-10-12

81 | 82 | * 增加[友链版块](https://wcowin.work/about/link/) 83 | ##

2023-10-08

84 | 85 | * 修复Latex渲染不了的bug 86 | ##

2023-10-05

87 | 88 | * 新增Blog版块 89 | * **新增了Latex渲染不了的bug** 90 | * 新增留言板,集成了giscus评论系统 91 | * 新增首次访问网站的顶部通知栏功能 92 | 93 | ##

2023-08-11

94 | * 优化主页设计,圆比方好,宽比竖好 95 | * 引入图片懒加载 96 | * 新增页面底部 "下一页/上一页" 97 | 98 | ##

2023-07-19

99 | 100 | * 修改网页字体为[霞鹜文楷](https://github.com/lxgw/LxgwWenKai){target=_blank} 101 | * 修复鼠标上滑"回到页面顶部"不适配问题 102 | 103 | ##

2023-01-12

104 | 105 | * 重写[mkdocs.yml](https://wcowin.work/blog/Mkdocs/mkdocs2/),增加中文注释 106 | * 支持Latex 107 | * 引入个性化标签,[Markdown扩展](https://squidfunk.github.io/mkdocs-material/setup/extensions/python-markdown-extensions/#inlinehilite) 108 | * 新增网站搜索功能 109 | 110 | -------------------------------------------------------------------------------- /site/assets/javascripts/lunr/min/lunr.stemmer.support.min.js: -------------------------------------------------------------------------------- 1 | !function(r,t){"function"==typeof define&&define.amd?define(t):"object"==typeof exports?module.exports=t():t()(r.lunr)}(this,function(){return function(r){r.stemmerSupport={Among:function(r,t,i,s){if(this.toCharArray=function(r){for(var t=r.length,i=new Array(t),s=0;s=i&&(e-=i,t[e>>3]&1<<(7&e)))return this.cursor++,!0}return!1},in_grouping_b:function(t,i,s){if(this.cursor>this.limit_backward){var e=r.charCodeAt(this.cursor-1);if(e<=s&&e>=i&&(e-=i,t[e>>3]&1<<(7&e)))return this.cursor--,!0}return!1},out_grouping:function(t,i,s){if(this.cursors||e>3]&1<<(7&e)))return this.cursor++,!0}return!1},out_grouping_b:function(t,i,s){if(this.cursor>this.limit_backward){var e=r.charCodeAt(this.cursor-1);if(e>s||e>3]&1<<(7&e)))return this.cursor--,!0}return!1},eq_s:function(t,i){if(this.limit-this.cursor>1),f=0,l=o0||e==s||c)break;c=!0}}for(;;){var _=t[s];if(o>=_.s_size){if(this.cursor=n+_.s_size,!_.method)return _.result;var b=_.method();if(this.cursor=n+_.s_size,b)return _.result}if((s=_.substring_i)<0)return 0}},find_among_b:function(t,i){for(var s=0,e=i,n=this.cursor,u=this.limit_backward,o=0,h=0,c=!1;;){for(var a=s+(e-s>>1),f=0,l=o=0;m--){if(n-l==u){f=-1;break}if(f=r.charCodeAt(n-1-l)-_.s[m])break;l++}if(f<0?(e=a,h=l):(s=a,o=l),e-s<=1){if(s>0||e==s||c)break;c=!0}}for(;;){var _=t[s];if(o>=_.s_size){if(this.cursor=n-_.s_size,!_.method)return _.result;var b=_.method();if(this.cursor=n-_.s_size,b)return _.result}if((s=_.substring_i)<0)return 0}},replace_s:function(t,i,s){var e=s.length-(i-t),n=r.substring(0,t),u=r.substring(i);return r=n+s+u,this.limit+=e,this.cursor>=i?this.cursor+=e:this.cursor>t&&(this.cursor=t),e},slice_check:function(){if(this.bra<0||this.bra>this.ket||this.ket>this.limit||this.limit>r.length)throw"faulty slice operation"},slice_from:function(r){this.slice_check(),this.replace_s(this.bra,this.ket,r)},slice_del:function(){this.slice_from("")},insert:function(r,t,i){var s=this.replace_s(r,t,i);r<=this.bra&&(this.bra+=s),r<=this.ket&&(this.ket+=s)},slice_to:function(){return this.slice_check(),r.substring(this.bra,this.ket)},eq_v_b:function(r){return this.eq_s_b(r.length,r)}}}},r.trimmerSupport={generateTrimmer:function(r){var t=new RegExp("^[^"+r+"]+"),i=new RegExp("[^"+r+"]+$");return function(r){return"function"==typeof r.update?r.update(function(r){return r.replace(t,"").replace(i,"")}):r.replace(t,"").replace(i,"")}}}}}); -------------------------------------------------------------------------------- /site/assets/javascripts/lunr/min/lunr.ko.min.js: -------------------------------------------------------------------------------- 1 | !function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.ko=function(){this.pipeline.reset(),this.pipeline.add(e.ko.trimmer,e.ko.stopWordFilter)},e.ko.wordCharacters="[A-Za-z가-힣]",e.ko.trimmer=e.trimmerSupport.generateTrimmer(e.ko.wordCharacters),e.Pipeline.registerFunction(e.ko.trimmer,"trimmer-ko"),e.ko.stopWordFilter=e.generateStopWordFilter("아 휴 아이구 아이쿠 아이고 어 나 우리 저희 따라 의해 을 를 에 의 가 으로 로 에게 뿐이다 의거하여 근거하여 입각하여 기준으로 예하면 예를 들면 예를 들자면 저 소인 소생 저희 지말고 하지마 하지마라 다른 물론 또한 그리고 비길수 없다 해서는 안된다 뿐만 아니라 만이 아니다 만은 아니다 막론하고 관계없이 그치지 않다 그러나 그런데 하지만 든간에 논하지 않다 따지지 않다 설사 비록 더라도 아니면 만 못하다 하는 편이 낫다 불문하고 향하여 향해서 향하다 쪽으로 틈타 이용하여 타다 오르다 제외하고 이 외에 이 밖에 하여야 비로소 한다면 몰라도 외에도 이곳 여기 부터 기점으로 따라서 할 생각이다 하려고하다 이리하여 그리하여 그렇게 함으로써 하지만 일때 할때 앞에서 중에서 보는데서 으로써 로써 까지 해야한다 일것이다 반드시 할줄알다 할수있다 할수있어 임에 틀림없다 한다면 등 등등 제 겨우 단지 다만 할뿐 딩동 댕그 대해서 대하여 대하면 훨씬 얼마나 얼마만큼 얼마큼 남짓 여 얼마간 약간 다소 좀 조금 다수 몇 얼마 지만 하물며 또한 그러나 그렇지만 하지만 이외에도 대해 말하자면 뿐이다 다음에 반대로 반대로 말하자면 이와 반대로 바꾸어서 말하면 바꾸어서 한다면 만약 그렇지않으면 까악 툭 딱 삐걱거리다 보드득 비걱거리다 꽈당 응당 해야한다 에 가서 각 각각 여러분 각종 각자 제각기 하도록하다 와 과 그러므로 그래서 고로 한 까닭에 하기 때문에 거니와 이지만 대하여 관하여 관한 과연 실로 아니나다를가 생각한대로 진짜로 한적이있다 하곤하였다 하 하하 허허 아하 거바 와 오 왜 어째서 무엇때문에 어찌 하겠는가 무슨 어디 어느곳 더군다나 하물며 더욱이는 어느때 언제 야 이봐 어이 여보시오 흐흐 흥 휴 헉헉 헐떡헐떡 영차 여차 어기여차 끙끙 아야 앗 아야 콸콸 졸졸 좍좍 뚝뚝 주룩주룩 솨 우르르 그래도 또 그리고 바꾸어말하면 바꾸어말하자면 혹은 혹시 답다 및 그에 따르는 때가 되어 즉 지든지 설령 가령 하더라도 할지라도 일지라도 지든지 몇 거의 하마터면 인젠 이젠 된바에야 된이상 만큼\t어찌됏든 그위에 게다가 점에서 보아 비추어 보아 고려하면 하게될것이다 일것이다 비교적 좀 보다더 비하면 시키다 하게하다 할만하다 의해서 연이서 이어서 잇따라 뒤따라 뒤이어 결국 의지하여 기대여 통하여 자마자 더욱더 불구하고 얼마든지 마음대로 주저하지 않고 곧 즉시 바로 당장 하자마자 밖에 안된다 하면된다 그래 그렇지 요컨대 다시 말하자면 바꿔 말하면 즉 구체적으로 말하자면 시작하여 시초에 이상 허 헉 허걱 바와같이 해도좋다 해도된다 게다가 더구나 하물며 와르르 팍 퍽 펄렁 동안 이래 하고있었다 이었다 에서 로부터 까지 예하면 했어요 해요 함께 같이 더불어 마저 마저도 양자 모두 습니다 가까스로 하려고하다 즈음하여 다른 다른 방면으로 해봐요 습니까 했어요 말할것도 없고 무릎쓰고 개의치않고 하는것만 못하다 하는것이 낫다 매 매번 들 모 어느것 어느 로써 갖고말하자면 어디 어느쪽 어느것 어느해 어느 년도 라 해도 언젠가 어떤것 어느것 저기 저쪽 저것 그때 그럼 그러면 요만한걸 그래 그때 저것만큼 그저 이르기까지 할 줄 안다 할 힘이 있다 너 너희 당신 어찌 설마 차라리 할지언정 할지라도 할망정 할지언정 구토하다 게우다 토하다 메쓰겁다 옆사람 퉤 쳇 의거하여 근거하여 의해 따라 힘입어 그 다음 버금 두번째로 기타 첫번째로 나머지는 그중에서 견지에서 형식으로 쓰여 입장에서 위해서 단지 의해되다 하도록시키다 뿐만아니라 반대로 전후 전자 앞의것 잠시 잠깐 하면서 그렇지만 다음에 그러한즉 그런즉 남들 아무거나 어찌하든지 같다 비슷하다 예컨대 이럴정도로 어떻게 만약 만일 위에서 서술한바와같이 인 듯하다 하지 않는다면 만약에 무엇 무슨 어느 어떤 아래윗 조차 한데 그럼에도 불구하고 여전히 심지어 까지도 조차도 하지 않도록 않기 위하여 때 시각 무렵 시간 동안 어때 어떠한 하여금 네 예 우선 누구 누가 알겠는가 아무도 줄은모른다 줄은 몰랏다 하는 김에 겸사겸사 하는바 그런 까닭에 한 이유는 그러니 그러니까 때문에 그 너희 그들 너희들 타인 것 것들 너 위하여 공동으로 동시에 하기 위하여 어찌하여 무엇때문에 붕붕 윙윙 나 우리 엉엉 휘익 윙윙 오호 아하 어쨋든 만 못하다\t하기보다는 차라리 하는 편이 낫다 흐흐 놀라다 상대적으로 말하자면 마치 아니라면 쉿 그렇지 않으면 그렇지 않다면 안 그러면 아니었다면 하든지 아니면 이라면 좋아 알았어 하는것도 그만이다 어쩔수 없다 하나 일 일반적으로 일단 한켠으로는 오자마자 이렇게되면 이와같다면 전부 한마디 한항목 근거로 하기에 아울러 하지 않도록 않기 위해서 이르기까지 이 되다 로 인하여 까닭으로 이유만으로 이로 인하여 그래서 이 때문에 그러므로 그런 까닭에 알 수 있다 결론을 낼 수 있다 으로 인하여 있다 어떤것 관계가 있다 관련이 있다 연관되다 어떤것들 에 대해 이리하여 그리하여 여부 하기보다는 하느니 하면 할수록 운운 이러이러하다 하구나 하도다 다시말하면 다음으로 에 있다 에 달려 있다 우리 우리들 오히려 하기는한데 어떻게 어떻해 어찌됏어 어때 어째서 본대로 자 이 이쪽 여기 이것 이번 이렇게말하자면 이런 이러한 이와 같은 요만큼 요만한 것 얼마 안 되는 것 이만큼 이 정도의 이렇게 많은 것 이와 같다 이때 이렇구나 것과 같이 끼익 삐걱 따위 와 같은 사람들 부류의 사람들 왜냐하면 중의하나 오직 오로지 에 한하다 하기만 하면 도착하다 까지 미치다 도달하다 정도에 이르다 할 지경이다 결과에 이르다 관해서는 여러분 하고 있다 한 후 혼자 자기 자기집 자신 우에 종합한것과같이 총적으로 보면 총적으로 말하면 총적으로 대로 하다 으로서 참 그만이다 할 따름이다 쿵 탕탕 쾅쾅 둥둥 봐 봐라 아이야 아니 와아 응 아이 참나 년 월 일 령 영 일 이 삼 사 오 육 륙 칠 팔 구 이천육 이천칠 이천팔 이천구 하나 둘 셋 넷 다섯 여섯 일곱 여덟 아홉 령 영".split(" ")),e.Pipeline.registerFunction(e.ko.stopWordFilter,"stopWordFilter-ko"),e.ko.stemmer=function(){return function(e){return"function"==typeof e.update?e.update(function(e){return e}):e}}(),e.Pipeline.registerFunction(e.ko.stemmer,"stemmer-ko")}}); -------------------------------------------------------------------------------- /temp/最简教程.md: -------------------------------------------------------------------------------- 1 | 安装依赖: 2 | ```bash 3 | pip install mkdocs-ai-summary-wcowin==1.1.2 -i https://pypi.org/simple 4 | ``` 5 | 6 | ```mkdocs.yml 7 | 8 | - ai-summary: 9 | ai_service: "glm" # or "openai", "gemini", "glm" 10 | summary_language: "zh" # or "en" 11 | cache_enabled: true 12 | local_enabled: true 13 | cache_expire_days: 30 14 | debug: true # 是否显示调试信息(默认:false) 15 | enabled_folders: 16 | - blog/ # 添加blog文件夹 17 | - develop/ # 添加develop文件夹 18 | # - docs/ # 保留docs文件夹 19 | exclude_patterns: 20 | - "**/api/**" 21 | - "**/reference/**" 22 | - "**about/**" 23 | - "index.md" 24 | - "tag.md" 25 | - "blog/posts/update.md" 26 | ``` 27 | 28 | 29 | ```yml 30 | name: ci 31 | on: 32 | push: 33 | branches: 34 | - master 35 | - main 36 | # 禁止从 fork 仓库访问 secrets 37 | pull_request: 38 | types: [closed] 39 | branches: [main, master] 40 | permissions: 41 | contents: write 42 | jobs: 43 | deploy: 44 | runs-on: ubuntu-latest 45 | steps: 46 | - uses: actions/checkout@v4 47 | with: 48 | fetch-depth: 0 49 | sparse-checkout: | 50 | docs 51 | includes 52 | requirements.txt 53 | .ai_cache 54 | - uses: actions/setup-python@v4 55 | with: 56 | python-version: 3.x 57 | - name: Set cache ID 58 | run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV 59 | - uses: actions/cache@v3 60 | with: 61 | key: mkdocs-material-${{ github.run_number }} 62 | path: .cache 63 | restore-keys: | 64 | mkdocs-material- 65 | 66 | # 安装依赖 67 | - run: pip install mkdocs-git-revision-date-localized-plugin 68 | - run: pip install mkdocs-git-authors-plugin 69 | - run: pip install mkdocs-git-committers-plugin-2 70 | - run: pip install markdown-callouts 71 | - run: pip install mkdocs-rss-plugin 72 | - run: pip install requests>=2.25.0 73 | - run: pip install python-dateutil>=2.8.0 74 | - run: pip install cachetools>=4.2.0 75 | - run: pip install python-dotenv>=0.19.0 76 | - run: pip install Pillow 77 | - run: pip install pymdown-extensions 78 | - run: pip install mkdocs-material 79 | - run: pip install --upgrade --force-reinstall mkdocs-material 80 | - run: pip install mkdocs-ai-summary-wcowin==1.1.2 # 添加这一行 81 | 82 | # 部署(启用缓存系统) 83 | - name: Deploy with AI Summary (Cache Enabled) 84 | env: 85 | # AI摘要配置 - 启用缓存模式 86 | AI_SUMMARY_CI_ENABLED: 'true' # CI环境启用AI摘要 87 | AI_SUMMARY_CI_ONLY_CACHE: 'false' # 允许生成新摘要(如果没有缓存) 88 | AI_SUMMARY_CI_FALLBACK: 'false' # 启用备用摘要(API失败时) 89 | AI_SUMMARY_CACHE_ENABLED: 'true' # 明确启用缓存功能 90 | AI_SUMMARY_CACHE_EXPIRE_DAYS: '300' # 缓存300天过期 91 | AI_SUMMARY_CACHE_AUTO_CLEAN: 'true' # 自动清理过期缓存 92 | 93 | # API密钥配置 94 | DEEPSEEK_API_KEY: ${{ secrets.DEEPSEEK_API_KEY }} 95 | OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} 96 | run: mkdocs gh-deploy --force 97 | 98 | # 自动提交新生成的AI缓存文件 99 | - name: Auto-commit AI cache (if any new files) 100 | run: | 101 | if [ -d ".ai_cache" ] && [ "$(ls -A .ai_cache 2>/dev/null)" ]; then 102 | git config --local user.email "action@github.com" 103 | git config --local user.name "GitHub Action" 104 | git add .ai_cache/ 105 | if ! git diff --cached --quiet; then 106 | git commit -m "🤖 Auto-update AI summary cache [skip ci]" 107 | git push 108 | echo "✅ 自动提交了新的 AI 缓存文件" 109 | else 110 | echo "ℹ️ 没有新的缓存文件需要提交" 111 | fi 112 | else 113 | echo "ℹ️ 没有找到缓存目录或缓存为空" 114 | fi 115 | ``` -------------------------------------------------------------------------------- /docs/develop/git.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Git 实用技巧 3 | tags: 4 | - 技术分享 5 | --- 6 | !!! info 7 | 原文地址:[Git 实用技巧](https://www.iszy.cc/posts/git/#more){target="_blank"} 8 | 9 | # Git 实用技巧 10 | ## 一、基本操作 11 | ### 1. 新建 git 仓库 12 | ```git 13 | git init 14 | ``` 15 | 16 | ![](https://img.iszy.xyz/1669185106451.png) 17 | 18 | ```git 19 | git init -b main 20 | 21 | git config --global init.defaultBranch main 22 | 23 | git branch -m main 24 | ``` 25 | 26 | 27 | ### 2. 克隆远程仓库 28 | ```git 29 | git clone http://git.example.com/someone/test.git 30 | 31 | git clone http://git.example.com/someone/test.git test 32 | 33 | git clone http://git.example.com/someone/test.git --depth=1 -b main 34 | ``` 35 | 36 | ### 3. 提交代码 37 | ``` 38 | git add -a 39 | 40 | git add -u 41 | 42 | git add . 43 | 44 | git commit 45 | 46 | git commit -m "first commit" 47 | 48 | git commit -am "first commit" 49 | ``` 50 | 51 | 52 | ### 4. 查看仓库状态 53 | 54 | ```git 55 | git status 56 | ``` 57 | 58 | ![](https://img.iszy.xyz/1669185760241.png) 59 | 60 | ``` 61 | git status -s 62 | ``` 63 | 64 | ![](https://img.iszy.xyz/1669185789446.png) 65 | 66 | 67 | ### 5. 查看提交历史 68 | 69 | {target="_blank"} 70 | 71 | ```git 72 | git log 73 | ``` 74 | 75 | ![](https://img.iszy.xyz/1669185798311.png) 76 | 77 | ### 6. 新建分支 78 | ```git 79 | git branch test 80 | 81 | git checkout test 82 | 83 | git checkout -b test 84 | ``` 85 | 86 | ![Alt text](https://img.iszy.xyz/1669185814401.png) 87 | 88 | ### 7. 合并分支 89 | ```git 90 | git checkout main 91 | 92 | git merge test 93 | ``` 94 | 95 | ![Alt text](https://img.iszy.xyz/1669185829746.png) 96 | 97 | ### 8. 删除分支 98 | ```git 99 | git branch -d test-not-need 100 | ``` 101 | 102 | ![Alt text](https://img.iszy.xyz/1669185836945.png) 103 | 104 | ### 9. 合并冲突 105 | 106 | ![Alt text](https://img.iszy.xyz/1669185846981.png) 107 | 108 | 当两个分支都对同一行进行了修改,git 便会产生冲突,并标记为未合并 109 | 110 | ![Alt text](https://img.iszy.xyz/1669185854676.png) 111 | 112 | 此时将每个文件进行修改,确认最后的内容,使用 git add 方法标记为冲突已解决 113 | ```git 114 | git add .\A.txt 115 | ``` 116 | 在所有文件的冲突均已解决后,使用 commit 提交此次修改。 117 | 118 | ![Alt text](https://img.iszy.xyz/1669185864622.png) 119 | 120 | ```git 121 | git merge --abort 122 | ``` 123 | 124 | ### 10. 远程仓库 125 | 126 | ```git 127 | git remote 128 | ``` 129 | 130 | 默认应该为空 131 | 132 | ```git 133 | git remote add origin http://git.example.com/someone/test.git 134 | 135 | git push origin main 136 | 137 | git fetch --all 138 | 139 | git fetch origin 140 | 141 | git branch --set-upstream-to=origin/main main 142 | 143 | git branch -u origin/main main 144 | ``` 145 | 146 | 147 | ![Alt text](https://img.iszy.xyz/1669186022128.png) 148 | 149 | ``` 150 | git push -u origin main 151 | 152 | git pull 153 | 154 | git pull origin main 155 | ``` 156 | 157 | ## 二、常见技巧 158 | 159 | ### 1. 临时保存成果 160 | 161 | ``` 162 | git stash 163 | ``` 164 | 165 | 166 | ![Alt text](https://img.iszy.xyz/1669186037294.png) 167 | 168 | ```git 169 | git stash pop 170 | ``` 171 | 172 | ![Alt text](https://img.iszy.xyz/1669186045214.png) 173 | 174 | ### 2. 合并分支灵活选择 rebase/merge 175 | 176 | ```git 177 | git merge test 178 | 179 | git rebase test 180 | ``` 181 | 182 | 183 | ![Alt text](https://img.iszy.xyz/1669186058175.png) 184 | 185 | ### 3. cherry-pick 186 | 适合 hotfix 187 | 188 | ```git 189 | git cherry-pick 12d654f1d701cbf7cd9abb98ce84eeef460a24a7 190 | ``` 191 | 192 | ![Alt text](https://img.iszy.xyz/1669186102974.png) 193 | ![Alt text](https://img.iszy.xyz/1669186072778.png) 194 | 195 | ### 4. 修改上次提交 196 | 197 | ``` 198 | git commit --amend 199 | ``` 200 | 201 | 会同时提交暂存的文件 202 | 203 | ### 5. 取消文件修改 204 | ```git 205 | git checkout .\C.txt 206 | ``` 207 | 208 | 209 | ![Alt text](https://img.iszy.xyz/1669186116701.png) 210 | 211 | ### 6. 弃用提交 212 | 213 | ``` 214 | 保留文件 215 | git reset --soft 12d654f1d701cbf7cd9abb98ce84eeef460a24a7 216 | 217 | 丢弃修改 218 | git reset --hard 12d654f1d701cbf7cd9abb98ce84eeef460a24a7 219 | ``` 220 | 221 | ### 7. 补丁文件 222 | ```git 223 | git 224 | git diff [file] > a.patch 225 | git apply a.patch 226 | ``` 227 | 228 | -------------------------------------------------------------------------------- /docs/blog/websitebeauty/footer.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 页脚设置 3 | hide: 4 | # - navigation # 显示右 5 | # - toc #显示左 6 | # - footer 7 | # - feedback 8 | tags: 9 | - Mkdocs 10 | comments: false 11 | --- 12 | 13 | ## 页脚设置 14 | 15 | MkDocs 支持自定义页脚。 16 | 17 | ![](https://s1.imagehub.cc/images/2024/02/02/73179baf6402e27c92afc51eb59645a6.png) 18 | 19 | 在docs/overrides/partials/footer.html中(没有该文件时,创建footer.html文件)添加以下代码: 20 | 21 | ```html hl_lines="71-86" 22 | 23 | 114 | 115 | 116 | ``` 117 | 118 | 高亮部分自行修改即可 119 | 120 | ## 页脚版权设置 121 | 122 | mkdocs.yml中添加: 123 | ```yaml 124 | 125 | copyright: Copyright © 2022~2025 Wcowin # 左下角的版权声明 126 | 127 | ``` 128 | 129 | 如果想删除页脚显示“Made with Material for MkDocs”(不建议) 130 | 131 | ```yaml 132 | extra: 133 | generator: false #删除页脚显示“使用 MkDocs 材料制造” 134 | ``` -------------------------------------------------------------------------------- /site/assets/javascripts/lunr/min/lunr.sv.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Lunr languages, `Swedish` language 3 | * https://github.com/MihaiValentin/lunr-languages 4 | * 5 | * Copyright 2014, Mihai Valentin 6 | * http://www.mozilla.org/MPL/ 7 | */ 8 | /*! 9 | * based on 10 | * Snowball JavaScript Library v0.3 11 | * http://code.google.com/p/urim/ 12 | * http://snowball.tartarus.org/ 13 | * 14 | * Copyright 2010, Oleg Mazko 15 | * http://www.mozilla.org/MPL/ 16 | */ 17 | 18 | !function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.sv=function(){this.pipeline.reset(),this.pipeline.add(e.sv.trimmer,e.sv.stopWordFilter,e.sv.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.sv.stemmer))},e.sv.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.sv.trimmer=e.trimmerSupport.generateTrimmer(e.sv.wordCharacters),e.Pipeline.registerFunction(e.sv.trimmer,"trimmer-sv"),e.sv.stemmer=function(){var r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,t=new function(){function e(){var e,r=w.cursor+3;if(o=w.limit,0<=r||r<=w.limit){for(a=r;;){if(e=w.cursor,w.in_grouping(l,97,246)){w.cursor=e;break}if(w.cursor=e,w.cursor>=w.limit)return;w.cursor++}for(;!w.out_grouping(l,97,246);){if(w.cursor>=w.limit)return;w.cursor++}o=w.cursor,o=o&&(w.limit_backward=o,w.cursor=w.limit,w.ket=w.cursor,e=w.find_among_b(u,37),w.limit_backward=r,e))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:w.in_grouping_b(d,98,121)&&w.slice_del()}}function i(){var e=w.limit_backward;w.cursor>=o&&(w.limit_backward=o,w.cursor=w.limit,w.find_among_b(c,7)&&(w.cursor=w.limit,w.ket=w.cursor,w.cursor>w.limit_backward&&(w.bra=--w.cursor,w.slice_del())),w.limit_backward=e)}function s(){var e,r;if(w.cursor>=o){if(r=w.limit_backward,w.limit_backward=o,w.cursor=w.limit,w.ket=w.cursor,e=w.find_among_b(m,5))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:w.slice_from("lös");break;case 3:w.slice_from("full")}w.limit_backward=r}}var a,o,u=[new r("a",-1,1),new r("arna",0,1),new r("erna",0,1),new r("heterna",2,1),new r("orna",0,1),new r("ad",-1,1),new r("e",-1,1),new r("ade",6,1),new r("ande",6,1),new r("arne",6,1),new r("are",6,1),new r("aste",6,1),new r("en",-1,1),new r("anden",12,1),new r("aren",12,1),new r("heten",12,1),new r("ern",-1,1),new r("ar",-1,1),new r("er",-1,1),new r("heter",18,1),new r("or",-1,1),new r("s",-1,2),new r("as",21,1),new r("arnas",22,1),new r("ernas",22,1),new r("ornas",22,1),new r("es",21,1),new r("ades",26,1),new r("andes",26,1),new r("ens",21,1),new r("arens",29,1),new r("hetens",29,1),new r("erns",21,1),new r("at",-1,1),new r("andet",-1,1),new r("het",-1,1),new r("ast",-1,1)],c=[new r("dd",-1,-1),new r("gd",-1,-1),new r("nn",-1,-1),new r("dt",-1,-1),new r("gt",-1,-1),new r("kt",-1,-1),new r("tt",-1,-1)],m=[new r("ig",-1,1),new r("lig",0,1),new r("els",-1,1),new r("fullt",-1,3),new r("löst",-1,2)],l=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,24,0,32],d=[119,127,149],w=new n;this.setCurrent=function(e){w.setCurrent(e)},this.getCurrent=function(){return w.getCurrent()},this.stem=function(){var r=w.cursor;return e(),w.limit_backward=r,w.cursor=w.limit,t(),w.cursor=w.limit,i(),w.cursor=w.limit,s(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return t.setCurrent(e),t.stem(),t.getCurrent()}):(t.setCurrent(e),t.stem(),t.getCurrent())}}(),e.Pipeline.registerFunction(e.sv.stemmer,"stemmer-sv"),e.sv.stopWordFilter=e.generateStopWordFilter("alla allt att av blev bli blir blivit de dem den denna deras dess dessa det detta dig din dina ditt du där då efter ej eller en er era ert ett från för ha hade han hans har henne hennes hon honom hur här i icke ingen inom inte jag ju kan kunde man med mellan men mig min mina mitt mot mycket ni nu när någon något några och om oss på samma sedan sig sin sina sitta själv skulle som så sådan sådana sådant till under upp ut utan vad var vara varför varit varje vars vart vem vi vid vilka vilkas vilken vilket vår våra vårt än är åt över".split(" ")),e.Pipeline.registerFunction(e.sv.stopWordFilter,"stopWordFilter-sv")}}); -------------------------------------------------------------------------------- /site/assets/javascripts/lunr/min/lunr.da.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Lunr languages, `Danish` language 3 | * https://github.com/MihaiValentin/lunr-languages 4 | * 5 | * Copyright 2014, Mihai Valentin 6 | * http://www.mozilla.org/MPL/ 7 | */ 8 | /*! 9 | * based on 10 | * Snowball JavaScript Library v0.3 11 | * http://code.google.com/p/urim/ 12 | * http://snowball.tartarus.org/ 13 | * 14 | * Copyright 2010, Oleg Mazko 15 | * http://www.mozilla.org/MPL/ 16 | */ 17 | 18 | !function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.da=function(){this.pipeline.reset(),this.pipeline.add(e.da.trimmer,e.da.stopWordFilter,e.da.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.da.stemmer))},e.da.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.da.trimmer=e.trimmerSupport.generateTrimmer(e.da.wordCharacters),e.Pipeline.registerFunction(e.da.trimmer,"trimmer-da"),e.da.stemmer=function(){var r=e.stemmerSupport.Among,i=e.stemmerSupport.SnowballProgram,n=new function(){function e(){var e,r=f.cursor+3;if(d=f.limit,0<=r&&r<=f.limit){for(a=r;;){if(e=f.cursor,f.in_grouping(w,97,248)){f.cursor=e;break}if(f.cursor=e,e>=f.limit)return;f.cursor++}for(;!f.out_grouping(w,97,248);){if(f.cursor>=f.limit)return;f.cursor++}d=f.cursor,d=d&&(r=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,e=f.find_among_b(c,32),f.limit_backward=r,e))switch(f.bra=f.cursor,e){case 1:f.slice_del();break;case 2:f.in_grouping_b(p,97,229)&&f.slice_del()}}function t(){var e,r=f.limit-f.cursor;f.cursor>=d&&(e=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,f.find_among_b(l,4)?(f.bra=f.cursor,f.limit_backward=e,f.cursor=f.limit-r,f.cursor>f.limit_backward&&(f.cursor--,f.bra=f.cursor,f.slice_del())):f.limit_backward=e)}function s(){var e,r,i,n=f.limit-f.cursor;if(f.ket=f.cursor,f.eq_s_b(2,"st")&&(f.bra=f.cursor,f.eq_s_b(2,"ig")&&f.slice_del()),f.cursor=f.limit-n,f.cursor>=d&&(r=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,e=f.find_among_b(m,5),f.limit_backward=r,e))switch(f.bra=f.cursor,e){case 1:f.slice_del(),i=f.limit-f.cursor,t(),f.cursor=f.limit-i;break;case 2:f.slice_from("løs")}}function o(){var e;f.cursor>=d&&(e=f.limit_backward,f.limit_backward=d,f.ket=f.cursor,f.out_grouping_b(w,97,248)?(f.bra=f.cursor,u=f.slice_to(u),f.limit_backward=e,f.eq_v_b(u)&&f.slice_del()):f.limit_backward=e)}var a,d,u,c=[new r("hed",-1,1),new r("ethed",0,1),new r("ered",-1,1),new r("e",-1,1),new r("erede",3,1),new r("ende",3,1),new r("erende",5,1),new r("ene",3,1),new r("erne",3,1),new r("ere",3,1),new r("en",-1,1),new r("heden",10,1),new r("eren",10,1),new r("er",-1,1),new r("heder",13,1),new r("erer",13,1),new r("s",-1,2),new r("heds",16,1),new r("es",16,1),new r("endes",18,1),new r("erendes",19,1),new r("enes",18,1),new r("ernes",18,1),new r("eres",18,1),new r("ens",16,1),new r("hedens",24,1),new r("erens",24,1),new r("ers",16,1),new r("ets",16,1),new r("erets",28,1),new r("et",-1,1),new r("eret",30,1)],l=[new r("gd",-1,-1),new r("dt",-1,-1),new r("gt",-1,-1),new r("kt",-1,-1)],m=[new r("ig",-1,1),new r("lig",0,1),new r("elig",1,1),new r("els",-1,1),new r("løst",-1,2)],w=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,48,0,128],p=[239,254,42,3,0,0,0,0,0,0,0,0,0,0,0,0,16],f=new i;this.setCurrent=function(e){f.setCurrent(e)},this.getCurrent=function(){return f.getCurrent()},this.stem=function(){var r=f.cursor;return e(),f.limit_backward=r,f.cursor=f.limit,n(),f.cursor=f.limit,t(),f.cursor=f.limit,s(),f.cursor=f.limit,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return n.setCurrent(e),n.stem(),n.getCurrent()}):(n.setCurrent(e),n.stem(),n.getCurrent())}}(),e.Pipeline.registerFunction(e.da.stemmer,"stemmer-da"),e.da.stopWordFilter=e.generateStopWordFilter("ad af alle alt anden at blev blive bliver da de dem den denne der deres det dette dig din disse dog du efter eller en end er et for fra ham han hans har havde have hende hendes her hos hun hvad hvis hvor i ikke ind jeg jer jo kunne man mange med meget men mig min mine mit mod ned noget nogle nu når og også om op os over på selv sig sin sine sit skal skulle som sådan thi til ud under var vi vil ville vor være været".split(" ")),e.Pipeline.registerFunction(e.da.stopWordFilter,"stopWordFilter-da")}}); -------------------------------------------------------------------------------- /docs/assets/document_dates/user.config.js: -------------------------------------------------------------------------------- 1 | /* 2 | Part 0: 3 | 鼠标悬浮在头像区域时,上下滚轮转换为左右滚动 4 | 触控板原生左右滑动保持不变 5 | */ 6 | document.addEventListener('DOMContentLoaded', function() { 7 | document.addEventListener('wheel', function(e) { 8 | const target = e.target.closest('.document-dates-plugin'); 9 | if (!target) return; 10 | 11 | // 如果已经是水平滚动(触控板左右滑动),不做处理 12 | if (Math.abs(e.deltaX) > Math.abs(e.deltaY)) return; 13 | 14 | // 只处理垂直滚动(鼠标滚轮) 15 | if (e.deltaY === 0) return; 16 | 17 | const scrollContainer = target.querySelector('[style*="overflow"]') || 18 | target.querySelector('.authors-container') || 19 | target.querySelector('[class*="avatar"]')?.parentElement; 20 | 21 | if (scrollContainer && scrollContainer.scrollWidth > scrollContainer.clientWidth) { 22 | e.preventDefault(); 23 | scrollContainer.scrollLeft += e.deltaY; 24 | } 25 | }, { passive: false }); 26 | }); 27 | 28 | /* 29 | Part 1: 30 | Configuration Overrides for Tooltip 31 | see: https://atomiks.github.io/tippyjs/ 32 | */ 33 | 34 | /* Configure one by one: */ 35 | // tooltip_config.theme.light = 'tomato'; 36 | // tooltip_config.placement = 'top'; 37 | // tooltip_config.arrow = false; 38 | // tooltip_config.zIndex = 2; 39 | 40 | /* Or, override all configuration items: */ 41 | /* 42 | TooltipConfig.setConfig({ 43 | theme: { 44 | // configurable: light material, or custom theme in user.config.css, for example: sorrel sublime tomato 45 | light: 'light', 46 | dark: 'material' 47 | }, 48 | placement: 'bottom', // placement: top bottom left right auto 49 | offset: [0, 12], // placement offset: [horizontal, vertical] 50 | allowHTML: true, // whether to allow HTML in the tooltip content 51 | interactive: true, // content in Tooltip is interactive 52 | animation: 'scale', // animation type: scale shift-away 53 | inertia: true, // animation inertia 54 | // zIndex: 2, // control the display layer(z-index) of the tooltip element 55 | // arrow: false, // whether to allow arrows 56 | // animateFill: true, // determines if the background fill color should be animated 57 | // delay: [400, null], // delay: [show, hide]: show is 400ms, and hide is null for the default value 58 | }); 59 | */ 60 | 61 | 62 | 63 | /* 64 | Part 2: 65 | Demonstrates how to register a local language for 'timeago.js', 66 | then you can configure the localeStr you just registered anywhere! 67 | */ 68 | /* 69 | const localeFunc = (number, index) => { 70 | return [ 71 | ['just now', 'right now'], 72 | ['%s seconds ago', 'in %s seconds'], 73 | ['1 minute ago', 'in 1 minute'], 74 | ['%s minutes ago', 'in %s minutes'], 75 | ['1 hour ago', 'in 1 hour'], 76 | ['%s hours ago', 'in %s hours'], 77 | ['1 day ago', 'in 1 day'], 78 | ['%s days ago', 'in %s days'], 79 | ['1 week ago', 'in 1 week'], 80 | ['%s weeks ago', 'in %s weeks'], 81 | ['1 month ago', 'in 1 month'], 82 | ['%s months ago', 'in %s months'], 83 | ['1 year ago', 'in 1 year'], 84 | ['%s years ago', 'in %s years'] 85 | ][index]; 86 | }; 87 | const localeStr = 'any'; 88 | timeago.register(localeStr, localeFunc); 89 | */ 90 | 91 | 92 | 93 | /* 94 | Part 3: 95 | Demonstrates how to register the local language for the plugin's tooltip, 96 | when the local language is missing, or when the default language translation is inaccurate. 97 | */ 98 | /* 99 | // Way 1: User-defined one language 100 | TooltipLanguage.register('en', { 101 | created_time: "Custom Created", 102 | updated_time: "Custom Last Update", 103 | author: "Custom Author", 104 | authors: "Custom Authors" 105 | }); 106 | 107 | // Way 2: User-defined multiple languages 108 | const userLanguages = { 109 | en: { 110 | created_time: "Created", 111 | updated_time: "Last Update", 112 | author: "Author", 113 | authors: "Authors" 114 | }, 115 | zh: { 116 | created_time: "创建时间", 117 | updated_time: "最后更新", 118 | author: "作者", 119 | authors: "作者" 120 | } 121 | }; 122 | Object.entries(userLanguages).forEach(([locale, data]) => { 123 | TooltipLanguage.register(locale, data); 124 | }); 125 | */ 126 | -------------------------------------------------------------------------------- /site/assets/javascripts/lunr/min/lunr.no.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Lunr languages, `Norwegian` language 3 | * https://github.com/MihaiValentin/lunr-languages 4 | * 5 | * Copyright 2014, Mihai Valentin 6 | * http://www.mozilla.org/MPL/ 7 | */ 8 | /*! 9 | * based on 10 | * Snowball JavaScript Library v0.3 11 | * http://code.google.com/p/urim/ 12 | * http://snowball.tartarus.org/ 13 | * 14 | * Copyright 2010, Oleg Mazko 15 | * http://www.mozilla.org/MPL/ 16 | */ 17 | 18 | !function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");e.no=function(){this.pipeline.reset(),this.pipeline.add(e.no.trimmer,e.no.stopWordFilter,e.no.stemmer),this.searchPipeline&&(this.searchPipeline.reset(),this.searchPipeline.add(e.no.stemmer))},e.no.wordCharacters="A-Za-zªºÀ-ÖØ-öø-ʸˠ-ˤᴀ-ᴥᴬ-ᵜᵢ-ᵥᵫ-ᵷᵹ-ᶾḀ-ỿⁱⁿₐ-ₜKÅℲⅎⅠ-ↈⱠ-ⱿꜢ-ꞇꞋ-ꞭꞰ-ꞷꟷ-ꟿꬰ-ꭚꭜ-ꭤff-stA-Za-z",e.no.trimmer=e.trimmerSupport.generateTrimmer(e.no.wordCharacters),e.Pipeline.registerFunction(e.no.trimmer,"trimmer-no"),e.no.stemmer=function(){var r=e.stemmerSupport.Among,n=e.stemmerSupport.SnowballProgram,i=new function(){function e(){var e,r=w.cursor+3;if(a=w.limit,0<=r||r<=w.limit){for(s=r;;){if(e=w.cursor,w.in_grouping(d,97,248)){w.cursor=e;break}if(e>=w.limit)return;w.cursor=e+1}for(;!w.out_grouping(d,97,248);){if(w.cursor>=w.limit)return;w.cursor++}a=w.cursor,a=a&&(r=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,e=w.find_among_b(m,29),w.limit_backward=r,e))switch(w.bra=w.cursor,e){case 1:w.slice_del();break;case 2:n=w.limit-w.cursor,w.in_grouping_b(c,98,122)?w.slice_del():(w.cursor=w.limit-n,w.eq_s_b(1,"k")&&w.out_grouping_b(d,97,248)&&w.slice_del());break;case 3:w.slice_from("er")}}function t(){var e,r=w.limit-w.cursor;w.cursor>=a&&(e=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,w.find_among_b(u,2)?(w.bra=w.cursor,w.limit_backward=e,w.cursor=w.limit-r,w.cursor>w.limit_backward&&(w.cursor--,w.bra=w.cursor,w.slice_del())):w.limit_backward=e)}function o(){var e,r;w.cursor>=a&&(r=w.limit_backward,w.limit_backward=a,w.ket=w.cursor,e=w.find_among_b(l,11),e?(w.bra=w.cursor,w.limit_backward=r,1==e&&w.slice_del()):w.limit_backward=r)}var s,a,m=[new r("a",-1,1),new r("e",-1,1),new r("ede",1,1),new r("ande",1,1),new r("ende",1,1),new r("ane",1,1),new r("ene",1,1),new r("hetene",6,1),new r("erte",1,3),new r("en",-1,1),new r("heten",9,1),new r("ar",-1,1),new r("er",-1,1),new r("heter",12,1),new r("s",-1,2),new r("as",14,1),new r("es",14,1),new r("edes",16,1),new r("endes",16,1),new r("enes",16,1),new r("hetenes",19,1),new r("ens",14,1),new r("hetens",21,1),new r("ers",14,1),new r("ets",14,1),new r("et",-1,1),new r("het",25,1),new r("ert",-1,3),new r("ast",-1,1)],u=[new r("dt",-1,-1),new r("vt",-1,-1)],l=[new r("leg",-1,1),new r("eleg",0,1),new r("ig",-1,1),new r("eig",2,1),new r("lig",2,1),new r("elig",4,1),new r("els",-1,1),new r("lov",-1,1),new r("elov",7,1),new r("slov",7,1),new r("hetslov",9,1)],d=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,48,0,128],c=[119,125,149,1],w=new n;this.setCurrent=function(e){w.setCurrent(e)},this.getCurrent=function(){return w.getCurrent()},this.stem=function(){var r=w.cursor;return e(),w.limit_backward=r,w.cursor=w.limit,i(),w.cursor=w.limit,t(),w.cursor=w.limit,o(),!0}};return function(e){return"function"==typeof e.update?e.update(function(e){return i.setCurrent(e),i.stem(),i.getCurrent()}):(i.setCurrent(e),i.stem(),i.getCurrent())}}(),e.Pipeline.registerFunction(e.no.stemmer,"stemmer-no"),e.no.stopWordFilter=e.generateStopWordFilter("alle at av bare begge ble blei bli blir blitt både båe da de deg dei deim deira deires dem den denne der dere deres det dette di din disse ditt du dykk dykkar då eg ein eit eitt eller elles en enn er et ett etter for fordi fra før ha hadde han hans har hennar henne hennes her hjå ho hoe honom hoss hossen hun hva hvem hver hvilke hvilken hvis hvor hvordan hvorfor i ikke ikkje ikkje ingen ingi inkje inn inni ja jeg kan kom korleis korso kun kunne kva kvar kvarhelst kven kvi kvifor man mange me med medan meg meget mellom men mi min mine mitt mot mykje ned no noe noen noka noko nokon nokor nokre nå når og også om opp oss over på samme seg selv si si sia sidan siden sin sine sitt sjøl skal skulle slik so som som somme somt så sånn til um upp ut uten var vart varte ved vere verte vi vil ville vore vors vort vår være være vært å".split(" ")),e.Pipeline.registerFunction(e.no.stopWordFilter,"stopWordFilter-no")}}); -------------------------------------------------------------------------------- /docs/overrides/partials/footer.html: -------------------------------------------------------------------------------- 1 | 22 | 23 | 24 | 115 | -------------------------------------------------------------------------------- /site/overrides/partials/footer.html: -------------------------------------------------------------------------------- 1 | 22 | 23 | 24 | 115 | -------------------------------------------------------------------------------- /docs/blog/websitebeauty/linktech.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 如何给MKdocs添加友链 3 | tags: 4 | - Mkdocs 5 | hide: 6 | - feedback 7 | --- 8 | 9 | 复制后在需要添加友链的.md 文件页面粘贴即可 10 | 11 | ```html hl_lines="67-104" 12 |
13 | 120 |
121 | ``` 122 | 123 | ## 如何加入友链 124 | 125 | ```html 126 |
127 | 128 |
129 |
130 | {name} 131 |
132 |
{description}
133 |
134 |
135 | ``` 136 | 137 | ### 示例 138 | 139 | ```html 140 |
141 |